使用Perl的Foreach数组

时间:2014-08-25 12:45:27

标签: arrays perl hash foreach

似乎我的代码无法迭代存储在哈希中的数组。

我错过了什么?

#!/usr/bin/env perl
use Data::Dumper;

my $data = {array   => ['a', 'b', 'c']};

my @array = $data->{array};
print Dumper(@array); # It looks like $data->{array} is an array

print "Ref: ".ref($data->{array})."\n"; # And this array is indeed an array

foreach ($data->{array}) { print "$_\n"; } # But this doesn't work        
foreach (@array) { print "$_\n"; } # Neither this one

# But with a regular array it works...
my @myNames = ('Larry', 'Curly', 'Moe');
foreach (@myNames) { print "$_\n"; }

我的输出:

$VAR1 = [
          'a',
          'b',
          'c'
        ];
$VAR1 = 'a';
Ref: ARRAY
ARRAY(0x8002bcf8)
ARRAY(0x8002bcf8)
Larry
Curly
Moe

我对REF / SCALAR类型很困惑。有时候Perl会将值作为引用。在这种情况下,因为我得到了#ARRAY'从ref函数来看,我猜$->{array}并没有给我一个数组,而是对数组的引用。

我也试过@$data->{array}但没有成功。

1 个答案:

答案 0 :(得分:2)

$data->{array}确实是一个数组引用。

要取消引用它,请在参考

上使用@{}
foreach (@{$data->{array}}) { print "$_\n"; }

修改 或者,如果您不想在{...}

之后使用@
my $arrayref = $data->{array}; 

foreach (@$arrayref ) { print "$_\n"; }