Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Hash of aray of array

3 views
Skip to first unread message

kurtz le pirate

unread,
Oct 20, 2012, 8:08:38 AM10/20/12
to
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

Benoit Izac

unread,
Oct 20, 2012, 3:15:59 PM10/20/12
to
Bonjour,

le 20/10/2012 � 14:08, kurtz le pirate a �crit dans le message
<kurtzlepirate-B2C...@news-1.proxad.net> :

> 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 t2\n";
> print Dumper(@t2);
>
> print "-------------\n";
> print "$t2[0] - $t2[1]\n"; << ligne 34

--
Benoit Izac

Nicolas George

unread,
Oct 21, 2012, 4:36:02 AM10/21/12
to
Benoit Izac , dans le message <87d30dj...@izac.org>, 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];
0 new messages