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

Gen*_*neQ 3 syntax perl

下面的代码来自旧的Perl脚本.

print "%{@{$noss}[$i]}->{$sector} \n\n";
Run Code Online (Sandbox Code Playgroud)

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

tch*_*ist 10

print "%{@{$noss}[$i]}->{$sector} \n\n";
Run Code Online (Sandbox Code Playgroud)

应该只是

print "$noss->[$i]{$sector} \n\n";
Run Code Online (Sandbox Code Playgroud)

甚至

print "$$noss[$i]{$sector} \n\n";
Run Code Online (Sandbox Code Playgroud)

没有那么严格.


yst*_*sth 5

猜测$ noss是对一组哈希引用的引用,你可以通过遵循一个简单的规则来构建一个正确的表达式,该规则用表达式替换通常是数组或哈希名称(不包括$/@ /%)花括号中的引用.

所以你的数组元素通常会$foo[$i]变成${$noss}[$i].该表达式本身就是一个hashref,所以要从该哈希中获取一个元素,而不是$foo{$sector}使用${ ${$noss}[$i] }{$sector}.

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