Шохирев Михаил Васильевич
Шрифт:
В результате выполнения этой программы построчно будет выведено значение всех элементов из массива массивов:
В любой массив можно поместить список ссылок на другие программные объекты, например, таким образом:
Можно записать то же самое более простым способом, поставив операцию взятия ссылки перед списком объектов в круглых скобках:
Списки ссылок на объекты могут, например, передаваться в подпрограмму для изменения перечисленных в списке объектов. Передача аргументов в подпрограммы по ссылке и по значению будет рассмотрена в следующей лекции.
Если попытаться разыменовать ссылку на несуществующий объект, то он автоматически будет создан. В этом случае работает удивительный механизм, называемый автосозданием объекта ссылки (буквально: "автооживление" - autovivification). Например, во время обращения по ссылке к элементу массива автоматически создается массив из пяти элементов, ссылка на него присваивается в переменную $array_ref, а пятый элемент получает начальное значение:
Подобным образом применяя автосоздание объектов, можно создать цепочку ссылок, указывающих на некоторое значение:
Все, что говорилось о ссылках на массивы, применимо к ссылкам на хэши. Ссылка на переменную типа "хэш" получается с помощью операции взятия ссылки:
Ссылка на анонимный хэш создается с помощью фигурных скобок, в которых записываются начальные значения хэша:
При помощи анонимного хэша удобно создавать копию существующего хэша, чтобы затем работать с ним через ссылку:
Разыменование ссылки на хэш записывается так же, как разыменование ссылки на массив, но с префиксом хэша %. При разыменовании ссылки на хэш переменную, содержащую ссылку, для наглядности можно обрамлять фигурными скобками:
При помощи ссылок с хэшами можно выполнять любые действия, обращая внимание на правильное разыменование ссылки:
Разыменование ссылки на элемент хэша также записывается уже знакомым нам способом, когда перед ссылочной переменной ставится префикс скаляра $, а после нее - ключ элемента хэша в фигурных скобках. Ссылочная переменная может заключаться в фигурные скобки: