||=
: это оператор присваивания .Пример
$a ||= $b;
# corresponds to
$a = $a || $b;
см. man perlop
.В вашем примере
$a ||= [];
# corresponds to
$a = $a || [];
, то есть: если левый операнд ничем не определен, в противном случае присвойте пустую ссылку на массив
%violated
содержит ссылку на массив длякаждое значение.Вы можете видеть это так:
my $array_ref = $violated{$desc};
push @{array_ref}, $.;
Более подробно написано:
if (! $violated{$desc} ) {
$violated{$desc} = [];
}
my $array_ref = $violated{$desc};
push @{ $array_ref }, $.;
РЕДАКТИРОВАТЬ
Массивы иссылки на массив
массив, построенный с ()
и содержащий динамический упорядоченный список элементов (в Perl массивы могут динамически расти)
anссылка на массив - это ссылка на массив (более или менее указатель без арифметики указателя).Вы можете создать ссылку на массив с помощью []
Пример
my @a = ( 1, 2, 3);
# $a[0] will contain 1
my $array_ref = [ 10, 11, 12 ];
# array_ref is a _pointer_ to an array containing 10, 11 and 12
Чтобы получить доступ к ссылке на массив, необходимо разыменовать ее:
@{ $array_ref };
my @array = @{ $array_ref }; # is valid
Вы можете получить доступ к { $array_ref}
в виде массива
${ $array_ref }[0]
Теперь вернемся к вашему вопросу в комментарии: %violated
- это хеш со следующими парами ключ-значение: строка ($ desc) иссылка на массив