Чтобы понять этот код, вам нужно понять три вещи:
Оператор повторения. Оператор x
является оператором повторения . В контексте списка, если левый аргумент оператора заключен в скобки, он будет повторять элементы в списке:
my @x = ('foo') x 3; # ('foo', 'foo', 'foo')
Массивы в скалярном контексте. Когда массив используется в скалярном контексте, он возвращает свой размер. Оператор x
налагает скалярный контекст на свой правый аргумент.
my @y = (7,8,9);
my $n = 10 * @y; # $n is 30
Хеш-фрагменты. Синтаксис хеш-фрагмента обеспечивает способ одновременного доступа к нескольким хеш-элементам. Срез хеша может извлекать значения хеша или может быть назначен. В данном случае мы присваиваем срез хеша.
# Right side creates a list of repeated undef values -- the size of @_.
# We assign that list to a set of hash keys -- also provided by @_.
@hash{@_} = (undef) x @_;
Менее неясные способы сделать то же самое:
@hash{@_} = ();
$hash{$_} = undef for @_;