Хэши массивов
Хэши, состоящие из массивов, позволяют разбивать данные, индексированные
числовым значением, на записи. В следующем примере мы объявляем хэш массивов в одном предложении:
%hasn = (
fruits => ["apples", "oranges"],
vegetables => ["corn", "peas", "turnips"],
meat => ["chicken", "ham"],
);
print $hash{fruits}[0];
Обратите внимание, что для конструкций вида [...]{...},
как и для рассматриваемых ранее конструкций
вида {...}{...} и
[ ][[ ], между парами скобок неявно
подставляется оператор-стрелка -> разыменования ссылок.
Создание хэша массивов на лету
Чтобы собрать хэш массивов из отдельных элементов, можно заносить в хэш под нужным
ключом ссылки на массивы, созданные генератором анонимных массивов:
%hash{fruits} = ["apples", "oranges"];
%hash{vegetables} = ["corn", "peas", "turnips"];
%hash{meat} = ["chicken", "ham"];
print $hash{fruits}[0];
Если вы предпочитаете другой вариант, можете воспользоваться функцией push
и контекстно-чувствительной процедурой автооживления ссылок (autovivification).
push @{%hash{fruits}}, "apples", "oranges";
push @{%hash{vegetables}}, "corn", "peas", "turnips";
push @{%hash{meat}}, "chicken", "ham";
Доступ к элементам хэша массивов
Вы всегда можете получить доступ к отдельному элементу данных, хранимому в
хэше массивов, указав ключ и индекс:
%hasn = (
fruits => ["apples", "oranges"],
vegetables => ["corn", "peas", "turnips"],
meat => ["chicken", "ham"],
);
print $hash{fruits}[0];
В следующем примере мы полностью выводим отсортированный по значениям
ключа хэш массивов, используя функцию
join для преобразования массивов в текстовые строки:
%hasn = (
fruits => ["apples", "oranges"],
vegetables => ["corn", "peas", "turnips"],
meat => ["chicken", "ham"],
);
for $key(sort keys %hash){
print "$key\t[", join(", ", @{$hash{$key}}), "]\n";
}