/ / perl assignation à hash dans le sous-programme retour devient bizarre - perl, hash, return, assign-variable

L'affectation de Perl à un hachage dans un retour de sous-programme devient bizarre - perl, hachage, retour, affectation de variable, sous-routine

Lancer Perl 5.12.4 J'obtiens une disparité entre le résultat d'une fonction lorsqu'un hachage est attribué dans l'instruction return ou avant. L'exemple le plus simple est:

perl -e "sub s1 {
my @a=qw/b 1 c 2 a 3 a 4/;
my %h=@a;
return %h
}
print "@{[ s1()]}n""
c 2 a 4 b 1


perl -e "sub s1 {
my @a=qw/b 1 c 2 a 3 a 4/;
my %h=@a;
return %h=@a
}
print "@{[ s1()]}n""
c 2 c 2 a c

Pourquoi (ré) attribuer à un hachage dans l'instruction de retour (2e exemple) altère-t-il le hachage renvoyé?

Réponses:

2 pour la réponse № 1

À cause d'un bug. Il semble avoir été corrigé dans 5.14.0. (Présent dans 5.12.4. Non présent dans 5.14.0)

Cas de test minimal:

perl -E"say %h = qw/b 1 c 2 a 3 a 4/"