while (my $line = <>) { # считать строку из входного потока
chomp($line); # удалить из строки символ '\n'
@words = split(' ', $line); # разбить строку на слова
foreach my $word (@words) { # для каждого найденного слова
$hash{$word}++; # увеличить счетчик
}
}
# теперь в %hash содержатся счетчики слов
Позднее, в лекции, посвященной регулярным выражениям, будет сказано, как выделять из строки слова не только по пробелам.
Как это было сделано в последнем примере, программисты часто пользуются уникальностью ключей в хэше, чтобы исключить дублирование данных. Для удаления из данных повторений достаточно поместить их в хэш в качестве ключей. При этом даже не обязательно ассоциировать с ключами какие-либо значения. В результате набор ключей хэша будет гарантированно содержать только неповторяющиеся значения из обработанного набора данных.
При обработке данных в хэше часто возникает необходимость проверить наличие в нем элемента с определенным ключом. Функция
print "ключ $key найден" if exists $hash{$key};
При помощи функции
print "с ключом $key связано значение" if defined $hash{$key};
Проверка с помощью функции
Воспользовавшись функцией
undef $hash{$key }; # сделать значение неопределенным
После того как значение элемента было удалено функцией
$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);
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии