Je pense que vous souvenir est le fait que si vous faites
for my $item (@array) {
...
}
puis ajouter, de supprimer au milieu de @array
(par exemple en utilisant splice
) n'est pas autorisé, et le résultat si vous l'essayez n'est pas défini. En fait, dans les temps anciens, vous pouviez réellement perler de cette façon. Puisque la liste retournée par keys
est une copie, elle est entièrement déterminée au moment où la boucle commence, et l'ajout et la suppression des clés du hachage n'affecteront pas du tout la boucle. Cela signifie que vous pouvez faire des choses comme
for my $key (keys %hash) {
$hash{lc $key} = delete $hash{$key};
}
100% en toute sécurité sans vous soucier. Je peux promettre que c'est vrai retour à perl 5.6.1 (avril 2001), qui était quand la note que "les valeurs retournées sont des copies" a été ajoutée à perlfunc, mais il semble que cela soit le cas depuis toujours, et le changement était seulement aux docs.
Depuis $key
dans la boucle est aliasé à une valeur dans une liste temporaire, vous pouvez le changer sans rien de mal se passe, mais il n'aura aucun effet sur %hash
du tout.
Ou sid_com se souvient de ... (... chaque% hash) {... modify% hash ...} – ysth
Merci. Je cherchais juste cette information. – 0xC0000022L