2009-11-23 11 views
4

J'ai un hachage comme ceci:Comment obtenir une tranche de hachage à partir d'un hachage de hachages?

my %h = (a => { one => 1, 
       two => 2 
      }, 
      b => { three => 3, 
       four => 4 
      }, 
      c => { five => 5, 
       six => 6 
      } 
    ); 

print join(',', @{$h{a}{qw/one two/}}); 

L'erreur que je reçois est: Impossible d'utiliser une valeur non définie comme une référence de tableau à la ligne de 17 q.pl qui est la ligne à l'impression.

Ce que je pensais est 1,2

Répondre

17

Pour obtenir une tranche de hachage d'un hachage imbriquée , vous devez le dé-référencer par étapes. Vous obtenez le premier niveau dont vous avez besoin:

$h{'a'} 

Maintenant, vous devez déréférencer cela comme un hachage. Cependant, puisque ce n'est pas un simple scalaire, vous devez le mettre entre accolades. Pour obtenir le hachage entier, vous mettriez un % devant les accolades:

%{ $h{'a'} } 

Maintenant, vous voulez une tranche, vous remplacez la % avec un @, puisque vous obtenez plusieurs éléments, et vous aussi mettre vos clés à la fin comme d'habitude:

@{ $h{'a'} }{ @keys } 

Il peut sembler plus facile de voir les accolades séparément:

@{   }{  } 
    $h{'a'} @keys 
2

essayer

print join(',',@{$h{'a'}}{qw/one two/}); 

utilisation de données :: Dumper aide grandement dans les cas comme celui-ci