当子接收时,数组ref为空

时间:2017-06-03 20:13:57

标签: perl arrayref

我试图通过引用访问数组元素,将引用传递给sub。这是我的代码片段:

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>

我希望在sub中使用for循环访问@ arr1和@ rr2的元素,但看起来数组引用是空的。我究竟做错了什么?非常感谢。

1 个答案:

答案 0 :(得分:2)

我认为问题是,循环超出func。您正在调用func两次,之后才会循环浏览$par,这在当时是未定义的。

你可能正在寻找类似的东西:

sub func{
  my $par = shift;

  print $par."\n";
  print "------------------------\n";

  for my $elem (@$par){
    print $elem."\n";
  }
}