Re: [SSFR] défi perl

[ Thread Index | Date Index | More debianworld.org/shellscript-fr Archives ]


Que penses-tu de:

my @tableau = (   { "cle1"=>"valeur1", "cle2"=>"valeur2" } ,
                           { "cle1"=>"valeur3", "cle2"=>"valeur4" } ,
                           { "cle1"=>"valeur5", "cle2"=>"valeur6" }
                    );
foreach $tuple (@tableau) {
       while (($key, $val) = each(%$tuple)) {
               $$key = $val;
       }
       printf "cle1=%s, cle2=%s\n", $cle1, $cle2;
}

?
qui permet d'éviter le eval.

philippe



Florent Guiliani a écrit :

Amis scripteurs bonjour,

Aujourd'hui je me pose la question suivante "En perl, comment déclarer automatiquement
des variables provenant d'une hashtable avec clé = valeur ?"

Je m'explique: j'ai un tableau de hashtable ex:
my @tableau = (   { "cle1"=>"valeur1", "cle2"=>"valeur2" } ,
                            { "cle1"=>"valeur3", "cle2"=>"valeur4" } ,
                            { "cle1"=>"valeur5", "cle2"=>"valeur6" }
                     );

je parcour ce tableau comme ceci:

my $nbelement = scalar( @tableau );
for( my $i ; $i < $nbelement ; $i++){
   #et là j'accède à $tableau[$i]{'cle1'} ou $tableau[$i]{'cle2'}
   #j'en profite pour déclarer:
   my $cle1 = $tableau[$i]{'cle1'};   # c'est ces 2 déclarations
   my $cle2 = $tableau[$i]{'cle2'};   # qui nous intéressent ici
   #reste du traitement
}

J'aimerais que ces 2 déclarations (en réalité un bonne dizaine et qui en plus ne cesse d'augmenter)
soient faites automatiquement, j'aimerais faire un truc du style:

my $nbelement = scalar( @tableau );
for( my $i ; $i < $nbelement ; $i++){
      map( eval \$$_ = $tableau[$i]{'$_} ,   keys $tableau[$i] );
}

mais voilà je but.... qqun aurait une idée ?





Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/