在perl中不推荐使用数组作为引用

在perl中不推荐使用数组作为引用,perl,Perl,下面的错误:在第行的perl脚本中,不推荐使用数组作为引用 请建议,下面的代码中有什么错误 $sqlsyntax="exec Stored_Procedure,\@ErroeCode='$ErrMsg`"; @ret = $dbh->nsql ($sqlsyntax,"ARRAY"); my($EntityId, $MaturutyDate); my($size,$index,$count); $size=scalar @ret; $index=0; $EntityId=@ret-&g

下面的错误:在第行的perl脚本中,不推荐使用数组作为引用

请建议,下面的代码中有什么错误

$sqlsyntax="exec Stored_Procedure,\@ErroeCode='$ErrMsg`"; 
@ret = $dbh->nsql ($sqlsyntax,"ARRAY");

my($EntityId,
$MaturutyDate);
my($size,$index,$count);
$size=scalar @ret;
$index=0;
$EntityId=@ret->[$index][0];
$MaturutyDate=@ret->[$index][9];
这个perl在Solaris中运行良好,但当它迁移到Linux环境时,就会出现此错误

下面的错误:在第行的perl脚本中,不推荐使用数组作为引用


在编译过程中,它会出现此错误,希望在Linux环境中修复此错误。

我不确定这段代码是从哪里获得的,但它使用了非常旧的Perl语法版本,您不应该长期使用它。[更新:正如ikegami在下面的评论中指出的那样,这不是非常古老的Perl语法——它的语法之所以有效,是因为Perl中存在一个bug,而且不应该使用它。]

@ret->[$index][0]
这段代码使用了一个事实,即数组可以(在某些情况下)用作数组引用。你不应该这样做,因为还有其他(更简单的)方法来做同样的事情。如您所见,此语法已被弃用

您的代码应该写成
$ret[$index][0]
。如果您将其更改为这样,则警告将消失

更新:

这个perl在Solaris中运行良好,但当它迁移到Linux环境时,就会出现此错误


我想这是因为您的Solaris系统运行的是更旧的Perl版本。在两个系统上运行
perl-v
会得到什么?

应该做什么?@ret包含arrayOK中的结果集。然后呢?要从数组中获取元素,应使用
@ret[$index]
。如果
$ret
是数组引用,则应使用
$ret->[$index]
。错误信息似乎很清楚;您到底需要什么帮助?@Soujain请阅读和@Soujain请不要只在注释中转储代码。问题是要包含所有相关代码。是的,代码来自旧系统$ret[$index][0]也不工作,我们尝试使用$ret[$index]。[0]它没有任何编译错误,但仍然没有working@Soujain:“也不工作”不是一个非常有用的错误报告。请确切地解释发生了什么。你看到了什么意想不到的行为?你得到了错误的答案吗?是否有错误消息?你的计算机会爆炸吗?@Soujain:“我们尝试了
$ret[$index].[0]
”尝试随机语法不是一个细心的程序员的标志:-)Re“它使用了一个非常旧版本的Perl语法”,这是永远不能接受的语法。它只是碰巧起作用,尽管它不应该起作用。Perl中的一个错误(标量上下文中的数组应该返回其中的元素数)使得用户程序中的一个错误(
->
不应该存在)无关紧要。