Je suis nouveau chez perl. Je ne peux pas comprendre la sortie des codes suivants.le comportement de l'opérateur '++' en perl
my %fruit_color = (apple => "red", banana => "yellow", grape => "purple");
my @fruits = keys %fruit_color;
my @colors = values %fruit_color;
print "The color of apple is ", $fruit_color{"apple"}, "\n";
$cnt = 0;
while ($cnt < @fruits) {
print $fruits[$cnt ++], " ";
}
print "\n";
$cnt = 0;
while ($cnt < @colors) {
print $colors[$cnt ++], " ";
}
La sortie est collé ici:
The color of apple is red
grape banana apple
purple yellow red
Cependant, si je l'ai changé mon code comme ceci:
my %fruit_color = (apple => "red", banana => "yellow", grape => "purple");
my @fruits = keys %fruit_color;
my @colors = values %fruit_color;
print "The color of apple is ", $fruit_color{"apple"}, "\n";
$cnt = 0;
while ($cnt < @fruits) {
print $fruits[$cnt], " "; # DIFF HERE !
$cnt ++;
}
print "\n";
$cnt = 0;
while ($cnt < @colors) {
print $colors[$cnt ++], " ";
}
La sortie sera:
The color of apple is red
apple grape banana
red purple yellow
I ne peut pas comprendre la différence entre ces examens ples, surtout pourquoi le changement de la première boucle affectera la seconde. Quelqu'un pourrait-il me dire pourquoi la sortie est dans un ordre inverse? Merci beaucoup.
[Pourquoi les clés de hachage ont un ordre différent lors de l'impression?] (Https://stackoverflow.com/questions/30340027/why-do-hash-keys-have-different-order -when-printing) – mkHun
Le "problème" n'est pas votre appel "++". C'est parfaitement ok. Mais l'appel 'keys% fruit_color;' renvoie les clés du hachage dans un ordre arbitraire et vous ne pouvez pas compter sur lui pour être le même entre différentes exécutions de script. De la [docs] (http://perldoc.perl.org/functions/keys.html): _ "Les entrées de hachage sont retournées dans un ordre apparemment aléatoire." _ – PerlDuck