2017-02-16 24 views
0

У меня есть хэша следующей структуры в Perl -Проблема доступа Hash в Perl

my %testHash = (
     KeyL1 => { 
      KeyLL1 => { 
       KeyLLL1 => [1,2], 
       KeyLLL2 => [2,3], 
      }, 
      KeyLL2 => { 
       KeyLLL1 => [1,2], 
       KeyLLL2 => [2,3], 
      }, 
      KeyLL3 => { 
       KeyLLL1 => [1,2], 
       KeyLLL2 => [2,3], 
      },    
     }, 
     KeyL2 => { 
      KeyLL1 => { 
       KeyLLL1 => [1,2], 
       KeyLLL2 => [2,3], 
      }, 
      KeyLL2 => { 
       KeyLLL1 => [1,2], 
       KeyLLL2 => [2,3], 
      }, 
      KeyLL3 => { 
       KeyLLL1 => [1,2], 
       KeyLLL2 => [2,3], 
      }, 
     }, 
     ); 

Теперь, когда я пытаюсь получить доступ к его следующим образом, я получаю «UNDEF» в результате

my %tempHash = $testHash{'KeyL1'}; 
print Data::Dumper::Dumper($tempHash{'KeyLL1'}); 
print Data::Dumper::Dumper($tempHash{'KeyLL1'}{'KeyLLL1'}); 

Результат -

$VAR1 = undef; $VAR1 = undef; 

Пожалуйста, укажите мне, что я делаю неправильно. Я довольно новичок в perl.

+3

Добавить 'предупреждения использования;' увидеть предупреждающее сообщение. – toolic

+1

*** Всегда *** «используйте строгие» и «используйте предупреждения« все »в каждой программе Perl, которую вы пишете. – Borodin

ответ

4

Значение $testHash{'KeyL1'} является hashref, а не хешем.

Hashrefs - это скаляры. my %tempHash = не ожидает скаляр.

Вы должны разыменовать ему:

my %tempHash = %{$testHash{'KeyL1'}}; 
0

Кроме того, вы можете сделать это таким образом, если его просто о просмотре структуры.

Также попробуйте:

print Dumper $testHash{KeyL1} ; 
print Dumper $testHash{KeyL1}{KeyLL1} ; 
print Dumper $testHash{KeyL1}{KeyLL1}{KeyLLL1} ; 

Выход:

%[email protected]> ./hash.pl 
$VAR1 = { 
      'KeyLL1' => { 
         'KeyLLL2' => [ 
             2, 
             3 
            ], 
         'KeyLLL1' => [ 
             1, 
             2 
            ] 
         }, 
      'KeyLL2' => { 
         'KeyLLL2' => [ 
             2, 
             3 
            ], 
         'KeyLLL1' => [ 
             1, 
             2 
            ] 
         }, 
      'KeyLL3' => { 
         'KeyLLL2' => [ 
             2, 
             3 
            ], 
         'KeyLLL1' => [ 
             1, 
             2 
            ] 
         } 
     }; 
$VAR1 = { 
      'KeyLLL2' => [ 
         2, 
         3 
         ], 
      'KeyLLL1' => [ 
         1, 
         2 
         ] 
     }; 
$VAR1 = [ 
      1, 
      2 
     ]; 
%[email protected]>