2015-11-04 113 views
-1
{  
    'A' =>  ['B'], //hash of array 
    'C' => {'D' => [ 'E']} //hash of hash of array  
} 

当试图解析散列哈希的数组。得到“不是HASH参考”错误。即使我尝试使用存在和定义关键字来避免此错误。但结果是一样的错误。如何在Perl中仅取消数组哈希散列?

从上面我只需要迭代散列的哈希散列。

foreach my $keys (keys %$hash){ 
     print "$keys"; 
    if (defined $hash->{$keys}->{maptype}){ 
      foreach my $array_element (@{$hash->{$keys}->{'D'}}) { 
         print "$array_element"); 
      } 
     } 
    } 
+2

意见都写在Perl的''#,不能以''//。 – simbabque

+0

什么是“maptype”?如果您正在检查是否需要使用['ref'](http://perldoc.perl.org/functions/ref.html)来查看散列键的值是否为引用。 –

回答

0

不知道这是最好的做法,但:

my $hash = { A => ['B'], C => {D => ['E'], F => [qw(G H I)]}, J=>42 }; 

for my $key (keys %$hash) { 
    if (ref $hash->{$key} eq 'HASH') { 
     for my $subkey (keys %{$hash->{$key}}) { 
      say "$key => $subkey => [", join(",", @{$hash->{$key}{$subkey}}), "]"; 
     } 
    } 
} 

输出

C => D => [E] 
C => F => [G,H,I] 
+0

当我必须处理不一致的结构时(即,其他事物中的所有“事物”可能不一样),我发现这是最简单的方法。 – stevieb

+0

是**它正在工作**。删除打印“$键”的说法。谢谢!!! –