Язык программирования Perl
Шрифт:
Для удобства чтения программы допускается не записывать операцию "стрелка" между парами индексов массива в квадратных скобках:
Для примера приведем программу создания двумерного массива из трех строк по пять элементов в каждой строке:
Небольшие многомерные массивы удобно создавать, используя вложенные анонимные массивы. Это присваивание создаст такой же массив, что и в предыдущем примере:
На рис. 11.4 изображен получившийся в результате "массив массивов" (Аrray of Аrrays, AoA), представляющий собой многомерный массив.
Рис. 11.4.Организация многомерного 'массива массивов'
Для вывода значений многомерного массива обычно используется нужное число вложенных циклов for или других циклических конструкций:
В результате выполнения этой программы построчно будет выведено значение всех элементов из массива массивов:
В
Можно записать то же самое более простым способом, поставив операцию взятия ссылки перед списком объектов в круглых скобках:
Списки ссылок на объекты могут, например, передаваться в подпрограмму для изменения перечисленных в списке объектов. Передача аргументов в подпрограммы по ссылке и по значению будет рассмотрена в следующей лекции.
Если попытаться разыменовать ссылку на несуществующий объект, то он автоматически будет создан. В этом случае работает удивительный механизм, называемый автосозданием объекта ссылки (буквально: "автооживление" - autovivification). Например, во время обращения по ссылке к элементу массива автоматически создается массив из пяти элементов, ссылка на него присваивается в переменную $array_ref, а пятый элемент получает начальное значение:
Подобным образом применяя автосоздание объектов, можно создать цепочку ссылок, указывающих на некоторое значение:
Все, что говорилось о ссылках на массивы, применимо к ссылкам на хэши. Ссылка на переменную типа "хэш" получается с помощью операции взятия ссылки:
Ссылка на анонимный хэш создается с помощью фигурных скобок, в которых записываются начальные значения хэша:
При помощи анонимного хэша удобно создавать копию существующего хэша, чтобы затем работать с ним через ссылку: