Вывод содержимого хэша
Проблема
Требуется вывести содержимое хэша, однако конструкции
print "%ХЭШ" и print %ХЭШ не работают.
Решение
Одно из возможных решений — перебрать все пары «ключ/значение» в хэше и вывести их:
while ( ($k,$v) = each %hash) {
print "$k => $v\n";
}
Также можно построить список строк с помощью
map:
print map { "$_ => $hash{$_\n" } keys %hash;
Или интерполируйте хэш как список:
print "@{[ %hash ]}\n";
Или сохраните хэш во временном массиве и выведите его:
{
my @temp = %hash;
print "@temp";
}
Комментарий
Все перечисленные приемы обладают различными возможностями по управленю порядком и форматированием
вывода, а также различной эффективностью.
Первый способ (перебор хэша) чрезвычайно гибок и эффективен по затратам памяти.
Вы можете как угодно форматировать выходные данные, при этом понадобятся всего две скалярные
переменные — текущий ключ и значение. Использованне цикла foreach позволяет вывести хэш с
упорядочением ключей (ценой построения отсортированного списка):
foreach $k (sort keys %hash) {
print "$k => $hash{$k}\n";
}
Функция map не уступает перебору по богатству возможностей. Сортировка ключей по-прежнему
позволяет работать с элементами в произвольном порядке. Выходные данные можно как угодно
форматировать. На этот раз создается список строк (например, "КЛЮЧ=>ЗНАЧЕНИЕ", как в приведенном
выше примере), передаваемый print.
Два последних приема представляют собой фокусы, связанные с интерполяцией.
Интерпретация хэша как списка не позволяет предсказать или управлять порядком вывода
пар «ключ/значение». Более того, данные в этом случае выводятся в виде списка ключей и
значений, элементы которого разделяются текущим содержимым переменной $".
В отличие от других приемов, вам не удастся вывести каждую пару на новой строке или отделить
ключи от значений символом =>.
См. такжеОписание функций
map,
keys,
sort и
each
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|