Поиск

Наполнение хэша

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

В этом примере присваивается значение элементу хэша %Authors. Ключ этого элемента — слово Dune, а данные — имя Frank Herbert. Этот оператор присваивания создает связь в хэше между словами Dune и Frank Herbert. С переменной $Authors{'Dune'} можно обращаться так же, как и с любым скаляром: ее значение можно передавать в функции, модифицировать с помощью операторов, распечатывать и переопределять. Не забывайте, что при изменении элемента хэша модифицируется значение этого элемента, а не сам хэш.

Почему в нашем примере используется синтаксис $Authors{}, а не %Authors{}? Дело в том, что специальный символ перед именами хэшей, как и в случае массивов, появляется только тогда, когда они рассматриваются как единое целое. Для доступа к индивидуальному элементу хэша используется символ доллара ($), свидетельствующий о том, что это скалярное значение, а фигурные скобки обозначают принадлежность к хэшу. В Perl конструкция $Authors{'Dune'} соответствует одному скалярному значению, в данном случае Frank Herbert.

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

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

Этот пример напоминает инициализацию массивов, речь о которой шла на 4-м занятии, "Укладка строительных блоков: списки и массивы". Ниже вы узнаете, что во многих контекстах хэши ведут себя как массивы.

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

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

Оператор запятая-стрелка называется так потому, что действует как запятая (разделяет элементы списка) и похож на стрелку.