以下代码来自旧的Perl脚本。
print "%{@{$noss}[$i]}->{$sector} \n\n";
我应该如何重写上面的代码,以便Perl不会抱怨“使用散列作为引用已被弃用”?我已经尝试了各种各样的方法,但我仍然无法完全了解Perl编译器希望我做的事情。
答案 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个规则)将使您更好地掌握如何使用参考文献。