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

есть ** это работа **. удалена печать «$ keys». благодаря!!! –

Смежные вопросы