我该怎么做才能防止Perl抱怨“使用哈希作为参考被弃用”?

时间:2011-05-08 15:57:19

标签: perl syntax

以下代码来自旧的Perl脚本。

print "%{@{$noss}[$i]}->{$sector} \n\n";

我应该如何重写上面的代码,以便Perl不会抱怨“使用散列作为引用已被弃用”?我已经尝试了各种各样的方法,但我仍然无法完全了解Perl编译器希望我做的事情。

3 个答案:

答案 0 :(得分:10)

print "%{@{$noss}[$i]}->{$sector} \n\n";

应该只是

print "$noss->[$i]{$sector} \n\n";

甚至

print "$$noss[$i]{$sector} \n\n";

没有那么严格。

答案 1 :(得分:5)

猜测$ noss是对一组哈希引用的引用,你可以按照简单的替换规则构建一个正确的表达式 什么通常是数组或哈希名称(不包括$ / @ /%)与表达式给出花括号的引用。

因此,您的数组元素(通常为$foo[$i])将变为${$noss}[$i]。该表达式本身就是一个hashref,因此要从该哈希中获取一个元素而不是$foo{$sector},请使用${ ${$noss}[$i] }{$sector}

这也可以以各种其他形式出现,例如$noss->[$i]{$sector};有关简单易懂的规则,请参阅http://perlmonks.org?node=References+quick+reference

答案 2 :(得分:4)

我同意ysth和tchrist,并且想重申$noss->[$i]{$sector}对你来说真的是最好的选择。此语法更具可读性,因为它清楚地表明$noss是一个引用,并且您正在使用它的$i元素并进一步从该元素中获取$sector键。

在捕鱼而不是放鱼的教学方面:你应该阅读perldoc perlreftut,特别是“使用规则”。理解这两个“使用规则”以及额外的“箭头规则”(只有3个规则)将使您更好地掌握如何使用参考文献。