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

Références : Problème de syntaxe

3 réponses
Avatar
Le Souricier Gris
Je d=E9sire d=E9r=E9f=E9rencer un tableau stock=E9 dans un =E9l=E9ment de
table de hashage... J'arrive bien =E0 acc=E9der =E0 mon premier =E9l=E9ment
mais j'aimerai obtenir la liste.

#!/usr/bin/perl -w

use strict;

# Table de hashage de tous les artistes
my %hArtiste;
my @liste1 =3D ("coucou");
$hArtiste{'CLE'}=3D\@liste1;

print $hArtiste{'CLE'}[0]."\n";

# --> ERREUR <-- #
print @$hArtiste{'CLE'}."\n";
# --> ERREUR <-- #

3 réponses

Avatar
Nicolas George
"Le Souricier Gris" wrote in message
:
print @$hArtiste{'CLE'}."n";


Cette ligne est ambiguë : veut-elle dire qu'on prend {OLE} dans @$hArtiste
(ce qui ne veut rien dire), ou qu'on prend le tableau (@) dans
$hArtiste{OLE} ? Pour lever l'ambiguïté, il faut grouper, ce qui se fait
avec des accolades.

Avatar
Le Souricier Gris
Nicolas George wrote:
"Le Souricier Gris" wrote in message
:
print @$hArtiste{'CLE'}."n";


Cette ligne est ambiguë : veut-elle dire qu'on prend {OLE} dans @$hArti ste
(ce qui ne veut rien dire), ou qu'on prend le tableau (@) dans
$hArtiste{OLE} ? Pour lever l'ambiguïté, il faut grouper, ce qui se f ait
avec des accolades.


J'avais testé cette solution mais en fait elle me renvoyait 1,
c'était sans penser à une seconde erreur qui était les " " autour de
@...

#!/usr/bin/perl -w

use strict;

# Table de hashage de tous les artistes
my %hArtiste;
my @liste1 = ("coucou");
$hArtiste{'CLE'}=@liste1;

print $hArtiste{'CLE'}[0]."n";

print "@{$hArtiste{'CLE'}}"."n";


Merci Bien


Avatar
Paul Gaborit
À (at) 4 Jul 2006 03:21:05 -0700,
"Le Souricier Gris" écrivait (wrote):
J'avais testé cette solution mais en fait elle me renvoyait 1,
c'était sans penser à une seconde erreur qui était les " " autour de
@...


Ce n'est pas les guillemets qui changent les choses, c'est l'opérateur
'.' qui induit un contexte scalaire. Si vous utilisez l'opérateur ','
à la place, vous n'avez plus ce contexte scalaire.

#!/usr/bin/perl -w

use strict;

# Table de hashage de tous les artistes
my %hArtiste;
my @liste1 = ("coucou");


# avec une liste à plusieurs éléments on voit mieux ce qui se passe

@liste = qw/coucou bonjour hello/;

$hArtiste{'CLE'}=@liste1;

print $hArtiste{'CLE'}[0]."n";


print $hArtiste{CLE}[0], "n";
print "$hArtiste{CLE}[0]n";

print "@{$hArtiste{'CLE'}}"."n";


print "@{$hArtiste{'CLE'}}n";
print @{$hArtiste{'CLE'}}, "n";
print @{$hArtiste{'CLE'}} . "n";

Là, on comprend mieux la différence entre '.' et ','... on voit aussi
l'usage (implicite) de la variable $" (par défaut un espace qui sépare
les éléments d'un tableau interpolé dans une chaîne de caractères).

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>