似乎我的代码无法迭代存储在哈希中的数组。
我错过了什么?
#!/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}
但没有成功。
答案 0 :(得分:2)
$data->{array}
确实是一个数组引用。
要取消引用它,请在参考
上使用@{}
foreach (@{$data->{array}}) { print "$_\n"; }
修改强>
或者,如果您不想在{...}
@
my $arrayref = $data->{array};
foreach (@$arrayref ) { print "$_\n"; }