После того как значение элемента было удалено функцией
$hash{$key} # неопределенное значение - это ложь
defined $hash{$key} # ложь, ибо значение не определено
exists $hash{$key} # истина, ибо ключ есть
Неопределенное значение, хранимое в элементе хэша, означает, что необходимый поисковый ключ присутствует, но с ним не ассоциировано никакого значения.
Добавление элементов в хэш выполняется операцией присваивания, а удаление - функцией
$deleted_value = delete $hash{$key}; # удалить элемент
Если аргументом функции
При работе с элементами хэша очень удобно иметь список всех его ключей. Его возвращает функция
@hash_keys = keys %hash; # поместить список ключей в массив
Возможно также использовать список ключей для доступа в цикле ко всем значениям хэша. Так можно напечатать частотный словарь из предыдущего примера:
foreach my $word (keys %hash) { # для каждого ключа хэша
print "$word встретилось $hash{$word} раз\n";
}
Элементы хэша, как и другие скалярные величины, помещенные в обрамленную двойными кавычками строку, заменяются своими значениями. Кстати, можно переписать последний пример, добавив сортировку ключей для вывода слов в алфавитном порядке. А для организации цикла можно применить модификатор
print "$_ встретилось $hash{$_} раз\n"
foreach (sort keys %hash);
Следует помнить, что если размер хэша велик, то и полученный с помощью функции
if (keys %hash) { # если scalar(keys(%hash)) != 0
# обработать элементы хэша, если он не пуст
}
Пустой хэш в скалярном контексте возвращает ложное значение (строку '0'), а непустой - истинное. Поэтому проверить, пуст ли хэш, можно еще проще - употребив имя хэша в скалярном контексте, что часто используется в конструкциях, проверяющих условие:
while (%hash) { # или scalar(%hash) != 0 (не пуст ли хэш?)
# обработать элементы хэша
}
Встроенная функция
@hash_values = values %hash; # сохранить все значения хэша
print "$_\n" foreach (values %hash); # вывести значения
В скалярном контексте функция
$hash_size = values %hash; # число значений в хэше
Функция
($key, $value) = each %hash; # взять очередную пару элементов
После того как будет возвращена последняя пара элементов хэша, функция
while (my ($key, $value) = each %hash) { # пока есть пары
# обработать очередные ключ и значение хэша