我有一个从旧电脑下载到新电脑上的程序。它有以下代码片段:
#!/bin/perl -w
use strict;
$[ = 1; # set array base to 1
$, = ' '; # set output field separator
$\ = "\n"; # set output record separator但是,当我尝试运行该脚本时,我得到了以下错误消息:
Use of assignment to $[ is deprecated at ./test.pl line 5.有什么办法解决这个问题吗?
我使用的是以下版本的perl:
This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi发布于 2016-12-20 12:18:45
在Array::Base的现代版本中,模块perl实现了数组索引偏移特性。对于自约束脚本,脚本的开头为
use Array::Base (1);应该表现得非常类似于一个更老的脚本
$[ = 1;在顶部,但请参阅文档中的一些potentially important disclaimers。
发布于 2016-12-20 09:12:43
Short-term:您可以通过将第一行中的-w标志(启用一些警告)替换为-X (禁用所有警告)来使此警告静默。
长期:这个脚本可能只需要完全重写。自从Perl5.0(1994年!!)发布以来,就一直不鼓励使用$[变量(数组基础索引);在这个文件中出现它意味着它一定很旧了。
发布于 2020-04-20 14:50:47
Since Perl v5.30,赋值给除0以外的任何对象的$[都会产生错误。zdim的答案中的变通方法不再适用。然而,mob提到的模块Array::Base仍然有效。
https://stackoverflow.com/questions/41233360
复制相似问题