2017-02-16 5 views
0

J'ai une table de hachage de structure suivante en Perl -Problème accès Hash en 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], 
      }, 
     }, 
     ); 

Maintenant, quand je suis en train d'y accéder de la façon suivante, je reçois « undef » à la suite

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

Résultat -

$VAR1 = undef; $VAR1 = undef; 

S'il vous plaît pointer vers moi ce que je fais mal. Je suis assez nouveau à Perl.

+3

Ajouter 'emploi Mises en garde;' voir un message d'avertissement. – toolic

+1

*** Toujours *** 'use strict' et' use warnings 'all'' dans chaque programme Perl que vous écrivez. – Borodin

Répondre

4

La valeur de $testHash{'KeyL1'} est un hashref, pas un hachage.

Les déformations sont des scalaires. my %tempHash = ne s'attend pas à un scalaire.

Vous devez déréférencer:

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

En outre, vous pouvez le faire de cette façon si elle vient sur l'affichage des structures.

Essayez aussi:

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

Sortie:

%[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]>