我必须做些什么来防止Perl抱怨;不推荐使用散列作为引用;?
下面的代码来自一个旧的Perl脚本我必须做些什么来防止Perl抱怨;不推荐使用散列作为引用;?,perl,syntax,Perl,Syntax,下面的代码来自一个旧的Perl脚本 print "%{@{$noss}[$i]}->{$sector} \n\n"; 我应该如何重写上面的代码,以便Perl不会抱怨“使用散列作为引用是不推荐的”?我已经尝试了各种方法,但仍然不能完全理解Perl编译器希望我做什么 应该只是 print "$noss->[$i]{$sector} \n\n"; 甚至 print "$$noss[$i]{$sector} \n\n"; 如果没有那些繁琐的操作。猜测$noss是对散列引用数组的引用,您
print "%{@{$noss}[$i]}->{$sector} \n\n";
我应该如何重写上面的代码,以便Perl不会抱怨“使用散列作为引用是不推荐的”?我已经尝试了各种方法,但仍然不能完全理解Perl编译器希望我做什么
应该只是
print "$noss->[$i]{$sector} \n\n";
甚至
print "$$noss[$i]{$sector} \n\n";
如果没有那些繁琐的操作。猜测$noss是对散列引用数组的引用,您可以按照替换的简单规则构建正确的表达式 通常是一个数组或散列名(不包括$/@/%)以及一个用大括号表示引用的表达式 所以您的数组元素,通常是
$foo[$i]
,变成${$noss}[$i]
。该表达式本身就是一个hashref,因此要从该散列中获取元素,而不是使用$$foo{$sector}
,可以使用${${$noss}[$i]}{$sector}
这也可以以各种其他形式出现,例如
$noss->[$i]{$sector}
;有关简单易懂的规则,请参阅。我同意ysth和tchrist,并想重申,$noss->[$I]{$sector}
确实是您的最佳选择。此语法更具可读性,因为它清楚地显示$noss
是一个引用,并且您正在从该元素中获取$i
第th个元素,并进一步获取$sector
键
在教授鱼而不是分发鱼方面:你应该阅读并明确“使用规则”。了解这两条“使用规则”以及额外的“箭头规则”(是的,只有3条规则)将使您更好地掌握如何使用引用。Rigamarole。继承遗留代码从来都不是一件有趣的事。多新鲜的空气啊。现在一切都清楚了。谢谢
print "$$noss[$i]{$sector} \n\n";