2009-10-18 81 views

回答

10

该问题不在该代码中。问题是@arrayOfHash实际上包含arrayrefs,而不是hashrefs。

如果由于某种原因你不能修复@arrayOfHash,你可以解决它这样做:

foreach my $hash (@arrayOfHash) { 
    my %hash = @$hash; 
    print keys %hash; 
} 
+0

这是它被弃用然后一件好事。 – 2009-10-18 17:11:41

+1

“解决它”有点慷慨,因为我们和提问者似乎都不知道@arrayOfHash究竟是什么。先弄清楚,然后做点什么。您的代码只会在一个有限的错误情况下有用。 – ysth 2009-10-18 17:47:56

5

你应该总是发布完整的示例代码.....

不知道是什么你在做,但你可能混合了数组和数组refs和/或哈希和hashrefs。我通常只使用引用,因为我喜欢的语法好,我想是一致的:

use strict; 
use warnings; 

my($arrayrefOfHashrefs) = [ 
          {foo => 'bar', 
          bar => 'baz'}, 
          {Hello => 'world'}, 
          ]; 

foreach my $href (@$arrayrefOfHashrefs) { 
    print join("\n", keys %$href); 
    print "\n\n"; 
} 

会打印:

C:\Temp>perl foo.pl 
bar 
foo 

Hello