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:

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" ;
L'exécution me donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
>perl foo.pl
Not defined before
HASH(0x183f014)
 
>
Merci de votre aide,
Lac.