Когда я запускаю perl -cw
на нем, он говорит:
Scalar value @({$r} better written as $({$r} at tmp.pl line 7.
Scalar value @({$r} better written as $({$r} at tmp.pl line 13.
$r
является ссылкой на массив. Как только что написал Эрик Стром, @({$r}
- это фрагмент хеш-переменной %(
.
Вы никогда не объявляли %(
, и это не одна из предопределенных переменных, перечисленных в perldoc perlvar
. Так почему же use strict; use warnings;
не заставляет Perl жаловаться на это? Вероятно, это просто предполагает, что любая переменная, имя которой является символом пунктуации, предопределена (проще, чем отслеживать, какие из них действительно есть, некоторые из которых могут быть undef
в любом случае).
Обратите внимание, что $(
является допустимой предопределенной переменной (это реальный идентификатор группы текущего процесса), поэтому то, что выглядит как несовпадающая скобка, не является обязательно ошибкой.
Похоже, это просто опечатка, на которую по непонятным причинам Perl не пожаловался.
Измените @({$r}
на @{$r}
, чтобы сделать то, что вы (предположительно) действительно хотели сделать.