如何避免Perl抱怨“使用哈希作为引用已过时”?

3
下面的代码来自一个旧的Perl脚本。
print "%{@{$noss}[$i]}->{$sector} \n\n";

我该如何重写上面的代码,以便Perl不会抱怨“使用哈希作为引用已被弃用”?我尝试了各种方法,但仍然无法完全理解Perl编译器想让我做什么。
3个回答

11
print "%{@{$noss}[$i]}->{$sector} \n\n";
应该仅仅是没有更多的。
print "$noss->[$i]{$sector} \n\n";

甚至更多

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

不需要那些复杂的手续。


确实有些麻烦。继承遗留代码从来不是一件有趣的事情。真是一股清新的空气。现在一切都清晰了。谢谢。 - GeneQ

5
假设$noss是一个哈希引用的数组,按照简单的规则替换通常为数组或哈希名称(不包括$ / @ /%)的内容,使用花括号中的引用表达式即可构建正确的表达式。

因此,你的数组元素通常为$foo[$i],变成了${$noss}[$i]。该表达式本身是一个哈希引用,因此要从该哈希中获取元素,而不是使用$foo{$sector},你需要使用${ ${$noss}[$i] }{$sector}

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


4
我同意 ysth 和 tchrist 的观点,并想重申$noss->[$i]{$sector} 真的是最好的选择。这种语法更易读,因为它清楚地显示了 $noss 是一个引用,你正在取出它的第 $i 个元素,并进一步从该元素中获取 $sector 键。
关于“授人以鱼不如授人以渔”:你应该阅读 perldoc perlreftut,特别是其中的“使用规则”。了解这两个“使用规则”以及额外的“箭头规则”(只有三个规则)将让你更好地掌握如何使用引用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接