我有一个程序,我从较旧的计算机下载到较新的计算机.它有以下代码片段:
#!/bin/perl -w
use strict;
$[ = 1; # set array base to 1
$, = ' '; # set output field separator
$\ = "\n"; # set output record separator
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试运行该脚本时,我收到以下错误消息:
Use of assignment to $[ is deprecated at ./test.pl line 5.
Run Code Online (Sandbox Code Playgroud)
有关如何解决此问题的任何想法?
我使用的是以下版本的perl:
This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi
Run Code Online (Sandbox Code Playgroud)
zdi*_*dim 10
使用$[已被劝阻,弃用,但几乎不允许使用.在perlvar中看到它(它在Deprecated and Removed Variables部分中)并查看它被移动的核心arybase.
但是,如果必须,您可以禁用此特定警告类别
use strict;
use warnings;
# Restrict the scope as much as possible
{
no warnings 'deprecated';
$[ = 1;
# ...
}
Run Code Online (Sandbox Code Playgroud)
现在它不会打印出那个警告,它会起作用,因为它仍然是合法的.
请注意,这也会更改其他偏移量,例如字符串,但还不包括其他偏移量.这是一个非常非常古老的"功能",请阅读文档.
如果可能的话,我强烈建议重写脚本.
该模块Array::Base在现代版本的perl中实现了数组索引偏移功能。对于自约束脚本,请以
use Array::Base (1);
Run Code Online (Sandbox Code Playgroud)
应该表现得与旧版脚本非常相似
$[ = 1;
Run Code Online (Sandbox Code Playgroud)
在顶部,但请参阅文档以了解一些潜在的重要免责声明。
小智 4
短期:您可以通过将-w第一行中的标志(启用某些警告)替换为-X(禁用所有警告)来消除此警告。
长期:这个脚本可能只需要完全重写。$[自 Perl 5.0 发布(1994 年!!)以来,不鼓励使用变量(数组基索引);它出现在这个文件中意味着它确实很旧了。