Интерполяция массива
Массивы интерполируются всеми своими значениями:
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