Регулярные выражения Perl и их применение
ba2f5a3f

Интерполяция массива


Массивы интерполируются всеми своими значениями:

my @a=(1,2,3,4); $_="abc@{a}def"; print $_;

На печати окажется

abc1 2 3 4def

Не проходит аналогичная интерполяция многомерного массива:

my @a=([1,2],[3,4]); $_="abc@{a}def"; print $_;

Напечатается

abcARRAY(0x224ea4) ARRAY(0x224f88)def

На самом деле в Perl нет многомерных массивов как в C или Pascal. @a является массивом из двух ссылок (размер массива @a равен двум). При его интерполяции выводятся эти две ссылки на два подмассива. Для интерполяции элементов массива надо подставлять массивы конечных элементов (не ссылок):

my @a=([1,2],[3,4]); $_="abc@{$a[0]}@{$a[1]}def"; print $_;

Напечатается

abc1 23 4def

Конструкция @{$a[0]} означает следующее: $a[0] является ссылкой на массив, а оператор @ ее разыменовывает, получая в результате сам этот массив.

При интерполяции массивов и при их выводе оператором print в качестве разделителя элементов массива используется значение специальной переменной $". По умолчанию это пробел. Но можно поменять это значение на другое:

$"=','; my @a=([1,2],[3,4]); $_="abc@{$a[0]},@{$a[1]}def"; print $_;

На печать выйдет

abc1,2,3,4def



Содержание раздела