首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决警告"Use of assignment to $[ is deprecated"?

如何解决警告"Use of assignment to $[ is deprecated"?
EN

Stack Overflow用户
提问于 2016-12-20 08:57:53
回答 3查看 7.3K关注 0票数 5

我有一个从旧电脑下载到新电脑上的程序。它有以下代码片段:

代码语言:javascript
复制
#!/bin/perl -w

use strict;

$[ = 1;    # set array base to 1
$, = ' ';    # set output field separator
$\ = "\n";    # set output record separator

但是,当我尝试运行该脚本时,我得到了以下错误消息:

代码语言:javascript
复制
Use of assignment to $[ is deprecated at ./test.pl line 5.

有什么办法解决这个问题吗?

我使用的是以下版本的perl:

代码语言:javascript
复制
This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi
EN

回答 3

Stack Overflow用户

发布于 2016-12-20 12:18:45

Array::Base的现代版本中,模块perl实现了数组索引偏移特性。对于自约束脚本,脚本的开头为

代码语言:javascript
复制
use Array::Base (1);

应该表现得非常类似于一个更老的脚本

代码语言:javascript
复制
$[ = 1;

在顶部,但请参阅文档中的一些potentially important disclaimers

票数 7
EN

Stack Overflow用户

发布于 2016-12-20 09:12:43

Short-term:您可以通过将第一行中的-w标志(启用一些警告)替换为-X (禁用所有警告)来使此警告静默。

长期:这个脚本可能只需要完全重写。自从Perl5.0(1994年!!)发布以来,就一直不鼓励使用$[变量(数组基础索引);在这个文件中出现它意味着它一定很旧了。

票数 4
EN

Stack Overflow用户

发布于 2020-04-20 14:50:47

Since Perl v5.30,赋值给除0以外的任何对象的$[都会产生错误。zdim的答案中的变通方法不再适用。然而,mob提到的模块Array::Base仍然有效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41233360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档