PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 149


В отличие от обычной запятой, оператор => обладает особым свойством: любое предшествующее ему слово интерпретируется как строковое значение. Это по­зволяет убрать кавычки и сделать программу более понятной. Однословные клю­чи хэшей также автоматически интерпретируются как строки, поэтому вместо $hash{"somekey"} можно написать просто $hash{somekey}. Приведенная выше ини­циализация %food_color записывается в следующем виде:

%food_color = (

Apple => "red",

Banana => "yellow",

Lemon => "yellow",

Carrot => "orange"


5.1. Занесение элемента в хэш   153

Одно из важных свойств хэшей заключается в том, что их элементы хранятся в особой последовательности, обесценивающей выборку. Следовательно, независи­мо от порядка занесения данных в хэш, порядок их хранения будет непредсказуе­мым.

> Смотри также--------------------------------------------------------------------------------------------

Описание функций unshift и splice вperlfunc(l).

5.1. Занесение элемента в хэш

Проблема

Требуется добавить в хэш новый элемент.

Решение

Присвойте нужное значение в записи вида:

$ХЭШ{$КЛЮЧ}  = $ЗНАЧЕНИЕ;

Комментарий

Процесс занесения данных в хэш весьма тривиален. В языках, где хэш не отно­сится к встроенным типам данных, приходится беспокоиться о переполнении, изменении размеров и коллизиях в хэш-таблицах. В Perl обычное присваивание решает сразу все проблемы. Если ключ уже занят, то есть содержит предыдущее значение, память автоматически освобождается (по аналогии с присваиванием скалярной переменной).

# Хэш %food_color определяется во введении

$food_color{Raspberry} = "pink";

print "Known foods:\п";

foreach $food (keys %food_color) {

print "$food\n"; >

Known   foods: Banana Apple Raspberry Carrot Lemon

Если в качестве ключа хэша используется неопределенная величина undef, она преобразуется в пустую строку "" (что сопровождается предупреждением при за­пуске с параметром -w). Вероятно, неопределенный ключ undef — это не то, что вы хотели. С другой стороны, undef является вполне допустимым значением в хэ-шах. Однако при выборке значения для ключа, отсутствующего в хэше, вы также получите undef. Это означает, что для проверки существования ключа $кеу в хэше %hash простая логическая проверка if ($hash{$key}) не подходит. Присутствие клю­ча в хэше проверяется записью вида exists($hash{$key}); определенность ассоции­рованного значения — defined($hash{$key}), а его истинность — if ($hash{$key}).




- Начало -  - Назад -  - Вперед -