Я заново знакомлюсь с Perl и только что использовал module-starter
для инициализации нового проекта. Сейчас я пытаюсь понять сгенерированный код. Все в порядке, за исключением следующей указанной строки:
sub not_in_file_ok {
my ($filename, %regex) = @_;
open( my $fh, '<', $filename )
or die "couldn't open $filename for reading: $!";
my %violated;
while (my $line = <$fh>) {
while (my ($desc, $regex) = each %regex) {
if ($line =~ $regex) {
##I'm having problems here
push @{$violated{$desc}||=[]}, $.;
}
}
}
...
}
У меня две проблемы:
|| = []
. Это |
, за которым следует | =
, или это или ||
, за которым следует = []
. Может ли кто-нибудь рассказать мне, что здесь происходит? (Я предполагаю, что «если хеш пуст, создайте пустой анонимный массив для инициализации хеша», но мне сложно понять, как он формируется из кода.) push @ {$ violated {$ desc }}, $.
Я понимаю, что это означает «присвоить номер строки ключу $ desc
для хеша %, нарушенного
. Но из прочитанного мной кода» найдите значение ключа desc
из $ нарушено {$ desc}
(часть $ нарушено {$ desc}
), затем используйте это значение как символическую ссылку на массив ( @ {$ value}
part), затем вставьте номер строки в этот массив ". Я не понимаю, как согласовать эти два представления.Я думаю, мне есть чему поучиться в этой строке кода - может ли кто-нибудь помочь мне, объяснив это?