my @a = {\@array1, \@array2, \@array3};
Выше приведен массив с одним членом -> хеш , содержащий:
{ ''.\@array1 => \@array2, ''.\@array3 => undef }
Поскольку в качестве ключа в хэше Perl приводит ссылку на @array1
в строку. А Perl позволяет скалярной хеш-ссылке быть назначенной массиву, потому что «понятно», что вы хотите массив с первым элементом, который является скаляром, который вы ему присвоили.
Вы создаете массив массивов, например:
my @a = (\@array1, \@array2, \@array3);
И тогда в вашей функции вы распакуете их так:
sub func {
my $ref = shift;
foreach my $arr ( @$ref ) {
my @list_of_values = @$arr;
}
}
Или какой-то другой вариант, например, карта будет самым простым выражением:
my @list_of_entries = map { @$_ } @$ref;
В вашем примере @c
как список адресов - это то же самое, что правильно построенный @a
.