Массив 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";
  }
}
Другие вопросы по тегам