Поиск

Дополнительная информация о хэшах

Если вы новичок в Perl, некоторые операции с хэшами будут для вас далеко не очевидны. Из-за специфической природы хэшей для некоторых часто встречающихся операций понадобятся новые функции, в которых не было необходимости при работе со скалярами и массивами.

Проверка ключей хэша

Чтобы проверить, существует ли некоторый ключ в хэше, казалось бы, можно использовать следующий синтаксис:

Этот пример не будет работать, поскольку в нем нет проверки, действительно ли keyval является ключом хэша, вместо этого проверяется значение, соответствующее ключу keyval. А если написать так:

И это не совсем то, что нужно. В нем проверяется существование данных, связанных с ключом keyval, а не самого ключа. А ведь вполне допускается связывать с ключом хэша значение undef:

Проверка данного элемента выдаст ложное значение, потому что проверяется не наличие ключа, а связанное с ним значение. Итак, как же сделать проверку ключей корректно? Для этого в Perl есть специальная функция exists. Функция exists проверяет наличие указанного ключа в хэше и возврашает либо истинное значение (если ключ существует), либо ложное (в противном случае):

Удаление ключей из хэша

Другая неочевидная операция — удаление ключей из хэша. Как вы уже убедились, присвоение элементу хэша значения undef здесь не сработает. Для удаления одного ключа хэша можно воспользоваться функцией delete:

Для удаления всех ключей и значений из хэша можно просто инициализировать хэш пустым списком: