Bonjour,
Je bute sur un effet de bord lors de l'utilisation d'un defined.
Je souhaite vérifier qu'une valeur $H{aa}{bb} existe et est définie. Mais l'exécution m'initialise le "conteneur" $H{aa} (qui contient alors une référence sur une table de hash vide).
Est-ce bêtement un cas d'initialisation à la volée parce que je teste le contenu de $H{aa}? Dans ce cas une solution serait de tester la définition de $H{aa} puis/&& de $H{aa}{bb}.
L'exemple ci-dessous résume ce comportement:
L'exécution me donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 use strict; my %H = (); defined($H{aa}) || print "Not defined before\n"; if (defined $H{aa}{bb}) {} defined($H{aa}) || print "Not defined after\n"; print $H{aa} . "\n" ;
Merci de votre aide,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 >perl foo.pl Not defined before HASH(0x183f014) >
Lac.
Partager