Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Hash of aray of array

2 réponses
Avatar
kurtz le pirate
bonjour,

il y a un quelque(s) chose(s) qui m'échappe(nt).

je défini ces données :

my %MyHash = (
Key1 => [["c",50],["d",10]],
Key2 => [["a",20],["b",15],["c",100],["d",60]],
Key3 => [["e",50],["f",10],["g",100]],
);

je veux accéder au troisième élément du tableau référencé par la clé
"Key2", donc "c" et 100.

si je fais :

my $cle = "Key2";
my @t1 = @{$MyHash{$cle}};

print "-------------\n";
print "Dump t1\n";
print Dumper(@t1);

print "-------------\n";
my @t2 = $t1[2];
print "Dump t2\n";
print Dumper(@t2);

print "-------------\n";
print "$t2[0] - $t2[1]\n"; << ligne 34

j'obtient :
-------------
Dump t1
$VAR1 = [
'a',
20
];
$VAR2 = [
'b',
15
];
$VAR3 = [
'c',
100
];
$VAR4 = [
'd',
60
];
-------------
Dump t2
$VAR1 = [
'c',
100
];
-------------
ARRAY(0x181b300) -

et : use of uninitialized value in concatenation(.) or string at line 34

pourtant, et d'après le dump, t2 est bien un tableau avec les deux
valeurs 'c' pour l'indice 0 et 100 pour l'indice 1.

je ne trompe à partie de quel endroit ?

merci de votre aide




--
klp

2 réponses

Avatar
Benoit Izac
Bonjour,

le 20/10/2012 à 14:08, kurtz le pirate a écrit dans le message
:

my %MyHash = (
Key1 => [["c",50],["d",10]],
Key2 => [["a",20],["b",15],["c",100],["d",60]],
Key3 => [["e",50],["f",10],["g",100]],
);

je veux accéder au troisième élément du tableau référencé par la clé
"Key2", donc "c" et 100.

si je fais :

my $cle = "Key2";
my @t1 = @{$MyHash{$cle}};
[...]
my @t2 = $t1[2];



De la même manière que tu as écrit précédemment
« my @t1 = @{$MyHash{$cle}}; », il faut déréférencer pour avoir un
tableau sinon @t2 est un tableau contenant un seul élément ($VAR1
reporté par Data::Dumper) : une référence vers un tableau.

my @t2 = @{$t1[2]};

print "Dump t2n";
print Dumper(@t2);

print "-------------n";
print "$t2[0] - $t2[1]n"; << ligne 34



--
Benoit Izac
Avatar
Nicolas George
Benoit Izac , dans le message , a écrit :
De la même manière que tu as écrit précédemment
« my @t1 = @{$MyHash{$cle}}; », il faut déréférencer pour avoir un
tableau sinon @t2 est un tableau contenant un seul élément ($VAR1
reporté par Data::Dumper) : une référence vers un tableau.

my @t2 = @{$t1[2]};



Ou, au contraire, ne jamais déréférencer globalement:

my $t2 = $t1->[2];