Это цикл foreach, выраженный через модификатор постфикса , что эквивалентно следующему регулярному циклу:
foreach (sort keys %hash) {
print OUTPUT "$_ \t" . join("\t", @{$hash{$_}}) . "\n";
}
Поскольку переменная цикла отсутствует, используется переменная $_
по умолчанию (в циклах с постфиксом нельзя использовать именованную переменную цикла, в отличие от обычных). Итак, чтобы сделать его более читабельным:
foreach my $key (sort keys %hash) {
print OUTPUT "$key \t" . join("\t", @{$hash{$key}}) . "\n";
}
@{$hash{$key}}
означает, что взять ссылку на массив, сохраненную в $ hash {$ key}, и превратить ее в реальный массив, а join("\t", @{$hash{$key}})
взять этот массив и поместить его в строку, разделенную табуляцией.
Таким образом, для каждого из ключей в хэше (отсортированных в алфавитно-цифровом порядке) вы должны напечатать имя ключа, за которым следует пробел и табуляция, а затем содержимое arrayref (разделенного табуляцией), который имеет значение для этого ключа, за которым следует символ новой строки.
например. если хеш был ("c" => [1,2,3], "b => [11,12,13])
, он вывел бы:
b [TAB]11[TAB]12[TAB]13
a [TAB]1[TAB]2[TAB]3