【问题标题】:Foreach array with Perl使用 Perl 的 Foreach 数组
【发布时间】:2014-10-18 15:00:10
【问题描述】:

看来我的代码无法遍历存储在哈希中的数组。

我错过了什么?

#!/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 将值作为引用,有时则不。在这种情况下,因为我从 ref 函数中得到了 'ARRAY',我猜 $->{array} 并没有给我一个数组,而是一个对数组的引用。

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

【问题讨论】:

    标签: arrays perl hash foreach


    【解决方案1】:

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

    要取消引用,请在引用上使用@{}

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

    编辑: 或者如果你不想在@之后使用{...}

    my $arrayref = $data->{array}; 
    
    foreach (@$arrayref ) { print "$_\n"; } 
    

    【讨论】:

    • 见鬼,我试过@[...]@(...) 但不是@{...}
    猜你喜欢
    • 2015-01-29
    • 2013-06-01
    • 1970-01-01
    • 2023-03-27
    • 2015-01-19
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    相关资源
    最近更新 更多