Создание ссылок
Конструктор анонимного ассоциативного массива
По аналогии с массивами можно создавать ссылки на анонимные ассоциативные массивы, используя фигурные скобки. Операция присваивания:
%hash_ref = { 'Опе' › 1, 'Two' › 2, "Three' › 3 };
…создаст анонимный хеш-массив ('one' › 1, 'Two' › 2, "rhree' › 3) и присвоит переменной %hash_ref значение ссылки на этот хеш.
Фигурные скобки используются во многих конструкциях, например, для обращения к индивидуальному элементу хеш-массива:
$а = $myhash{"first"}
…или для выделения блока операторов. Обычно такие случаи легко различимы, и их нельзя спутать с порождением ссылки на анонимный хеш. Но иногда возникают неоднозначные ситуации, требующие разрешения. Забегая вперед, приведем пример, связанный с определением функции пользователем.
(Желающие могут предварительно прочитать начало части 11, в которой рассказывается о подпрограммах и функциях.)
Предположим, что необходимо определить функцию, которая создает анонимный хеш и возвращает ссылку на него. Возвращаемое значение можно задать при помощи встроенной функции return. Если конструкция return отсутствует, то в качестве возвращаемого значения по умолчанию принимается значение последнего выражения, вычисленного внутри функции. Таким образом, синтаксически допустимо следующее определение функции:
sub get_hash_ref { {@_} }
В данном примере внутренняя конструкция в фигурных скобках интерпретируется как блок. Для того чтобы она интерпретировалась как ссылка на анонимный хеш, необходимо использовать функцию return или поставить перед внутренней конструкцией знак "+":
sub get_hash_ref { return {(?_} } sub get_hash_ref { +{@_} }
Другие способы
В предыдущих разделах рассмотрены основные способы создания ссылок:.
- применение операции " \ " к объекту ссылки;
- специальные конструкции [ ] и { }, создающие в определенном контексте ссылку соответственно на анонимный массив и анонимный ассоциативный массив.
Эти способы применяются наиболее часто в тех случаях, когда возникает необходимость в использовании ссылок. Но существуют и другие источники появления ссылок, о которых следует упомянуть для полноты изложения.