2015-11-04 120 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

是**它正在工作**。刪除打印「$鍵」的說法。謝謝!!! –