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

assignation de multiples valeurs de hash dans de multiples variables

2 réponses
Avatar
Patrick
Bonjour =E0 tous,

Je cherche une info non mentionn=E9e dans le manuel.
URL lue :
http://perldoc.perl.org/perldata.html#Slices-slice-array%2c-slice-hash%2c=
-slice

Il y a une fonctionnalit=E9 tr=E8s sympa : si
%hash =3D ( key1, 'value1', key2, 'value2 };

alors on peut juste assigner avec
($scalar1,$scalar2) =3D @hash{key1,key2};

Facile, simple, pratique.


Mais si j'essaye avec un hashref

$hashref =3D { key1 =3D> 'value1', key2 =3D> 'value2' };

J'imagine que =E7a marche comme =E7a :
($scalar1,$scalar2) =3D $hashref->{key1,$key2};
out mettons :
($scalar1,$scalar2) =3D @hashref->{key1,$key2};

J'ai m=EAme essay=E9 :
($scalar1,$scalar2) =3D @{$hashref->{key1,$key2}};

Toujours des erreurs....

Des id=E9es quelqu'un ?

Merci d'avance

Patrick

2 réponses

Avatar
Mark Clements
Patrick wrote:
Bonjour à tous,

Je cherche une info non mentionnée dans le manuel.
URL lue :
http://perldoc.perl.org/perldata.html#Slices-slice-array%2c-slice-hash%2c-slice


Il y a une fonctionnalité très sympa : si
%hash = ( key1, 'value1', key2, 'value2 };

alors on peut juste assigner avec
($scalar1,$scalar2) = @hash{key1,key2};

Facile, simple, pratique.


Mais si j'essaye avec un hashref

$hashref = { key1 => 'value1', key2 => 'value2' };

J'imagine que ça marche comme ça :
($scalar1,$scalar2) = $hashref->{key1,$key2};
out mettons :
($scalar1,$scalar2) = @hashref->{key1,$key2};

J'ai même essayé :
($scalar1,$scalar2) = @{$hashref->{key1,$key2}};


key1,$key2 et pas "key1","key2"?

Il faut

use strict;
use warnings;




Toujours des erreurs....

Des idées quelqu'un ?

Merci d'avance

Patrick

$ cat hashref.pl

use strict;
use warnings;

my $hashref = {
a => 1,
b => 2,
c => 3,
d => 4,
};

my @selected_values = @{$hashref}{qw(a c)};

print "@selected_valuesn";

~
$ perl hashref.pl
1 3

Mark

Avatar
Patrick
La syntaxe était donc

($scalar1, $scalar2) = @{$hashref}{ 'key1', 'key2' };

merci beaucoup

Patrick