Что я должен сделать, чтобы Perl не жаловался на то, что «использование хэша в качестве ссылки устарело»?

#perl #syntax

#perl #синтаксис

Вопрос:

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

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

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

Ответ №1:

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

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

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

или даже

 print "$$noss[$i]{$sector} nn";
  

без всей этой канители.

Комментарии:

1. Действительно, фальсификация. Наследовать устаревший код никогда не доставляет удовольствия. Какой глоток свежего воздуха. Теперь все ясно. Спасибо.

Ответ №2:

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

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

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

Ответ №3:

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

С точки зрения обучения fish, а не выдачи fish: вам следует прочитать perldoc perlreftut и, в частности, «правила использования». Понимание этих двух «правил использования» вместе с дополнительным «правилом стрелки» (да, всего 3 правила) даст вам гораздо лучшее представление о том, как работать со ссылками.