défi perl

Marc Chantreux marc.chantreux at ulpmm.u-strasbg.fr
Thu Dec 22 17:12:45 CET 2005


Salut Florient,

1. Merci de ne pas crossposter
2. Je n'aime pas trop l'idée de passer par eval pour remplir des 
variables,  je pense donc que ma réponse n'est de loin pas ce qui peut 
se faire de plus propre (une utilisation fine du namespace et des 
typeglobs doit permettre qqchose de beaucoup plus élégant, je pense, 
mais il te faudra poster sur la liste des mongeurs de perl pour avoir 
une réponse satisfaisante).

Ma soluc.:
use strict;
use warnings;

my @krishna = (

    {
        host => 'www',
        user =>  'mc'
    },
    {
        host => 'mx',
        user =>  'bob'
    }
);

for my $element ( @krishna ) {

    # mes variables
    my ( $host , $user ) ;
    # generation du code
    my $code;
    for ( keys %$element ) { $code.='$'.$_.'=$$element{'.$_.'};' }

    #evaluation du code
    eval $code;
    die $@ if $@;

    # ca marche :
    print "host : $host
user : $user
--

";
}

Sachant que perso, je serais plus enclin a écrire des choses comme :

for ( @krishna ) {
    print "user : $$_{user}
host : $$_{host}
--
"
}

bon perl,
mc




More information about the Shell mailing list