2013-06-11 3 views
2

Je viens de récupérer Perl. J'ai un peu de confusion avec l'accès aux valeurs de hachage. Ci-dessous le code où j'essaie d'accéder aux valeurs d'un hachage à l'intérieur d'un hachage. Depuis que j'utilise un éditeur de texte simple pour coder, je ne suis pas capable de comprendre quel peut être le problème. S'il vous plaît aiderPerl: Accéder aux valeurs de hachage à l'intérieur d'un hachage

my %box = (
    Milk => { 
     A => 5, 
     B => 10, 
     C => 20, 
    }, 
    Chocolate => { 
     AB => 10, 
     BC => 25, 
     CD => 40, 
    }, 
); 

foreach my $box_key(keys %box) { 
    foreach my $inside_key (keys %box{box_key}) 
    print "$box_key"."_$inside_key""is for rupees $box{box_key}{inside_key}"; 
} 

Répondre

-1

Ikegami a très bien expliqué et je pense que vous manque encore quelque chose dans votre code qui est la raison pour laquelle vous avez un problème, essayez le code ci-dessous, espérons qu'il vous aidera.

my %box = (
    Milk => { 
     A => 5, 
     B => 10, 
     C => 20, 
    }, 
    Chocolate => { 
     AB => 10, 
     BC => 25, 
     CD => 40, 
    }, 
); 

foreach my $box_key(keys %box) { 
    foreach my $inside_key (keys $box{$box_key}) { 
     print "${box_key}_$inside_key is for rupees $box{$box_key}{$inside_key}\n"; 

    } 
} 

Sortie:

Chocolate_CD is for rupees 40 
Chocolate_BC is for rupees 25 
Chocolate_AB is for rupees 10 
Milk_A is for rupees 5 
Milk_C is for rupees 20 
Milk_B is for rupees 10 
+0

en ce qui concerne le style, il est préférable d'écrire 'imprimer box_key de $, "_", inside_key de $, ".."' ou 'print « $ {box_key} _ inside_key de $. . '' –

+0

@mpapec: mise à jour merci –

+0

Vous ne devriez jamais donner la version des arguments sous-référencés: c'est une erreur de syntaxe sous la plupart des versions de perl. – tchrist

3

Si la syntaxe est

keys %hash 

pour un hachage, il est

keys %{ ... } 

pour une référence de hachage. Dans ce cas, la référence est stockée dans $box{$box_key}, donc vous devriez utiliser

keys %{ $box{$box_key} } 

De plus, vous accédez à des éléments nommés box_key et inside_key dans quelques endroits où vous voulez réellement les éléments nommés par $box_key et $inside_key. Enfin, vous pouvez utiliser des boucles autour des noms de variables pour indiquer à Perl où le nom de la variable se termine.


for my $box_key (keys %box) { 
    for my $inside_key (keys %{ $box{$box_key} }) { 
     print "${box_key}_$inside_key is for rupees $box{$box_key}{$inside_key}\n"; 
    } 
} 
Questions connexes