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
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Benoit Izac
Le #24898872
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
Nicolas George
Le #24898862
Benoit Izac , 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]};



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

my $t2 = $t1->[2];
Publicité
Poster une réponse
Anonyme