Массив ref пуст при получении подпрограммой
Я пытаюсь получить доступ к элементам массивов по ссылке, передавая ссылки в подпрограмму. Вот мой фрагмент кода:
my @arr1 = (1,2);
my @arr2 = (3,4);
my @arr3;
push @arr3, \@arr1;
push @arr3, \@arr2;
for my $i (@arr3) {
print "$i\n";
}
print "Entered Sub func()\n";
for my $i (@arr3) {
func($i);
}
sub func{
my $par = shift;
print $par."\n";
}
print "------------------------\n";
for my $elem(@$par) {
print $elem."\n";
}
А вот и вывод:
C:\Users\ag194y>perl arrs.pl
ARRAY(0x357b28)
ARRAY(0x3575e8)
Entered Sub func()
ARRAY(0x357b28)
ARRAY(0x3575e8)
------------------------
C:\Users\ag194y>
Я ожидал получить доступ к элементам @arr1 и @rr2 с помощью цикла for в подпрограмме, но похоже, что ссылки на массивы пусты. Что я делаю неправильно? Большое спасибо.
1 ответ
Решение
Я думаю, что проблема в том, что цикл находится за пределами func
, Ты звонишь func
дважды, и только после этого вы проходите $par
, который не определен в то время.
Вы можете искать что-то вроде:
sub func{
my $par = shift;
print $par."\n";
print "------------------------\n";
for my $elem (@$par){
print $elem."\n";
}
}