如何迭代Perl数组引用?

时间:2009-08-27 16:28:55

标签: perl arrays reference

我有一个结构成员的数组:

$self->{myArray} = ["value1", "value2"];

我正在尝试使用以下代码迭代它:

my @myArray = $self->{myArray};
foreach my $foo (@myArray){
    #Do something with the using $foo
    ...
}

问题是'foreach'循环只执行一次(当我希望它执行两次时,因为@myArray有两个元素:“value1”和“value2”)。

当我检查@myArray数组大小时,我得到它的大小为1.我在这段代码中做错了什么?

3 个答案:

答案 0 :(得分:28)

我相信:

$self->{myArray} returns a reference.

您想要返回数组:

@{$self->{myArray}}

答案 1 :(得分:10)

$self->{myArray}是一个数组引用。你需要取消引用它。

my @myArray = @{ $self->{myArray} };

在这种情况下,Data::Dumper模块非常有用。例如,如果@myArray的行为不符合预期,您可以运行此代码来揭示问题。

use Data::Dumper;
print Dumper(\@myArray);

答案 2 :(得分:6)

$ self-> {myArray}是一个数组引用,而不是一个数组 - 您不能将实际数组存储在哈希中,只能存储引用。试试这个:

my $myArray = $self->{myArray};
for my $foo (@$myArray){
   # do something with $foo
}

您还可以查看perldoc perlref