Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我必须做些什么来防止Perl抱怨;不推荐使用散列作为引用;?_Perl_Syntax - Fatal编程技术网

我必须做些什么来防止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是对散列引用数组的引用,您

下面的代码来自一个旧的Perl脚本

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";