如何迭代Perl数组引用?

如何迭代Perl数组引用?,perl,arrays,reference,Perl,Arrays,Reference,我有一个数组,它是结构的一个成员: $self->{myArray} = ["value1", "value2"]; 我尝试使用以下代码对其进行迭代: my @myArray = $self->{myArray}; foreach my $foo (@myArray){ #Do something with the using $foo ... } 问题是“foreach”循环只执行一次(我希望它执行两次,因为@myArray有两个元素:“value1”和“val

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

$self->{myArray} = ["value1", "value2"];
我尝试使用以下代码对其进行迭代:

my @myArray = $self->{myArray};
foreach my $foo (@myArray){
    #Do something with the using $foo
    ...
}
问题是“foreach”循环只执行一次(我希望它执行两次,因为@myArray有两个元素:“value1”和“value2”)


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

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

my @myArray = @{ $self->{myArray} };
在这种情况下,
Data::Dumper
模块非常有用。例如,如果
@myArray
的行为不符合预期,则可以运行此代码来揭示问题

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

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

my $myArray = $self->{myArray};
for my $foo (@$myArray){
   # do something with $foo
}
您可能还想看看。

我相信:

$self->{myArray} returns a reference.
您要返回数组:

@{$self->{myArray}}

啊,被FM打败了:)万一你想知道如何为一个散列ref做这个:%{$self->{myHash}}谢谢你的回答,它成功了。我已经接受了第一个答案……您可能希望阅读数据结构烹饪书:它有一些示例,展示了如何创建和访问许多不同的数据结构。