Hash of aray of array
Le
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 "-";
print "Dump t1";
print Dumper(@t1);
print "-";
my @t2 = $t1[2];
print "Dump t2";
print Dumper(@t2);
print "-";
print "$t2[0] - $t2[1]"; << 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
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 "-";
print "Dump t1";
print Dumper(@t1);
print "-";
my @t2 = $t1[2];
print "Dump t2";
print Dumper(@t2);
print "-";
print "$t2[0] - $t2[1]"; << 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
le 20/10/2012 à 14:08, kurtz le pirate a écrit dans le message
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]};
--
Benoit Izac
Ou, au contraire, ne jamais déréférencer globalement:
my $t2 = $t1->[2];