Что я должен сделать, чтобы Perl не жаловался, что «использование хеша в качестве ссылки не рекомендуется»? - PullRequest
3 голосов
/ 08 мая 2011

Приведенный ниже код взят из старого сценария Perl.

print "%{@{$noss}[$i]}->{$sector} \n\n";

Как мне переписать приведенный выше код, чтобы Perl не жаловался, что «использование хеша в качестве ссылки не рекомендуется»?Я перепробовал все возможные способы, но я все еще не мог понять, чего хочет от меня компилятор Perl.

Ответы [ 3 ]

10 голосов
/ 08 мая 2011
print "%{@{$noss}[$i]}->{$sector} \n\n";

должно быть не более чем

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

или даже

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

без всего этого ригамароле.

5 голосов
/ 08 мая 2011

Предполагая, что $ noss является ссылкой на массив ссылок на хеш, вы можете создать правильное выражение, следуя простому правилу замены того, что обычно является именем массива или хеша (не включая $ / @ /%), навыражение, дающее ссылку в фигурных скобках.

Итак, ваш элемент массива, обычно $foo[$i], становится ${$noss}[$i].Это выражение само по себе является хеш-кодом, поэтому для получения элемента из этого хеша вместо $foo{$sector} вы используете ${ ${$noss}[$i] }{$sector}.

. Это также может появляться в различных других формах, таких как $noss->[$i]{$sector};см. http://perlmonks.org? node = References + quick + reference для простых для понимания правил.

4 голосов
/ 08 мая 2011

Я согласен с ysth и tchrist и хочу повторить, что $noss->[$i]{$sector} действительно лучший вариант для вас.Этот синтаксис более читабелен, так как он ясно показывает, что $noss является ссылкой, и вы берете $i его элемент и далее $sector ключ от этого элемента.ловить рыбу, а не выдавать рыбу: вы должны прочитать perldoc perlreftut и, в частности, «правила использования».Понимание этих двух «правил использования» вместе с дополнительным «правилом стрелок» (да, только 3 правила) даст вам гораздо лучшее представление о том, как работать со ссылками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...