В вашей строке:
my $aohf = grep { substr($_->{'a'}, 0, 1) eq ":" } @$aoh;
вы присваиваете скалярное значение grep
($aohf
).
И в соответствии с perldoc -f grep
:
In scalar context, [it] returns the number of times the
expression was true.
Следовательно, вы присваиваете номер (вероятно, «5», судя по вашей ошибке) для $aohf
.И в следующей строке кода вы пытаетесь разыменовать эту «5» как массив с @$aohf
.Это не сработает.
Возможно, вы намеревались написать строку grep
для присвоения массиву, например так:
my @aohf = grep { substr($_->{'a'}, 0, 1) eq ":" } @$aoh;
Затем вы можете написать первую строку вашегоЦикл foreach, подобный следующему, без необходимости что-либо отменять:Не требуется разыменование!(Это проще, чем присвоить скаляр и затем попытаться отменить ссылку на скаляр в массив.)
Попробуйте мои изменения и посмотрите, работают ли они для вас.
РЕДАКТИРОВАТЬ:
Исходный код вернул $aoh
, который является ссылкой на массив.Если вы все еще хотите вернуть ссылку на массив в новом коде, вы можете изменить оператор return
на:
return \@aohf;
\
до того, как @aohf
получит ссылку на *Массив 1039 *, который затем возвращается к вызывающему коду.