IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Exécuter le contenu d'une variable


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Engineer
    Inscrit en
    Juin 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Engineer

    Informations forums :
    Inscription : Juin 2004
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Exécuter le contenu d'une variable
    Salut,

    je cherche à exécuter le contenu d'une variable qui contient la synthaxe d'une fonction comme dans l'exemple qui suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my $var= "myfunction()"
    #puis executer $var ?????
     
     
    sub myfunction(){ return 1;}
    J'ai testé la fonction eval mais je n'ai pas eu de résultats concluants

    merci pour votre aide

  2. #2
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    Bonsoir. Je ne vois pas où est le problème avec eval :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/perl -w
    use strict;
    sub myfunction(){ print "ooho\n"; return 1;}
    my $var = "myfunction()";
    if (eval $var) {print "oui, tout va bien\n"};

  3. #3
    Membre régulier Avatar de knoodrake
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 86
    Points : 86
    Points
    86
    Par défaut
    Ca veut dire quoi "pas de résultats concluants" ?
    Faut toujours donner le max d'infos pour pouvoir être aidé dans un forum.

    Bref: en effet, eval() devrait très bien marcher comme montré ci-dessus.
    Tu a fait attention à la portée de ta fonction ? ( elle est dans un package par exemple ? )

  4. #4
    Futur Membre du Club
    Profil pro
    Engineer
    Inscrit en
    Juin 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Engineer

    Informations forums :
    Inscription : Juin 2004
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    J'avance....

    J'ai fait quelques tests et le problème me semble plus clair. Donc je corrige mes propos.
    Le code ci-dessus fonctionne bien (toute mes excuses sur le manque de précisions) mais il semble que eval ne soit pas capable d'évaluer une variable contenant une fonction avec des paramètres d'entrés exemple: myfunction("Variable")


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    require "test.pl";
    my $var= "myfunction('value')";
    $res= eval $var;
     
    print ("$res\n"); #affiche 'myfunction()' et non 1 
     
    #alors que:
    $test= myfunction();
    print ("$test\n"); #affiche bien 1 et non 'myfunction()'
     
      ________________________________ 
    #dans un module 'test.pl'
    sub myfunction(){ 
    my $value= shift(@inputs);
    return $value;}

  5. #5
    Futur Membre du Club
    Profil pro
    Engineer
    Inscrit en
    Juin 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Engineer

    Informations forums :
    Inscription : Juin 2004
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    J'ai trouvé une solution qui permet de contourner le problème mais qui n'est pas très propre
    Il faut modifier la fonction en supprimant les variables d'entrées (modifier myfunction('value') en myfunction() ) et passer les variables d'entées au moyen d'une tableau déclaré en globale...

    L'exemple deviendrait donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    require "test.pl";
     
    @inputs="value";
    my $var= "myfunction()";
     
    $res= eval $var;
    print ("$res\n");
    #affiche bien 'value'
     
    ________________________________
    #dans un module 'test.pl
    sub function(){
     my $value = shift(@inputs);	
     return $value;
    }
     
    # #######
    1;
    __END__
    # ########
    Quelqu'un voit-il une autre solution?

  6. #6
    Futur Membre du Club
    Profil pro
    Engineer
    Inscrit en
    Juin 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Engineer

    Informations forums :
    Inscription : Juin 2004
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Enfin j'ai trouvé la solution.
    Il suffit de rajouter un '&' devant la fonction appelé.
    Ce qui donne:




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    require "test.pl";
     
    test();
     
    sub test(){
    my $var= "&function('ca marche')";
    $res= eval $var;
    print ("res=$res\n"); #affiche 'myfunction()' et non 1 
     
    #alors que:
    #$test= function(5);
    #print ("test=$test\n"); #affiche bien 1 et non 'myfunction()'
     
    }
    ____________________________
    #dans un module externe "test.pl"
    #dans un module 'test.pl'
    sub function(){
    my $value = shift();	
    	 return $value;}
     
    ################
    1;
    __END__
    #################

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exécuter une requête contenue dans une variable
    Par Passepoil dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/07/2010, 20h50
  2. Exécution d'un SELECT contenu dans une variable.
    Par lecail65 dans le forum Développement
    Réponses: 6
    Dernier message: 20/07/2010, 15h06
  3. exécuter le code contenu dans une variable
    Par casier dans le forum MATLAB
    Réponses: 2
    Dernier message: 07/11/2009, 00h43
  4. Réponses: 6
    Dernier message: 23/07/2007, 21h56
  5. Réponses: 7
    Dernier message: 11/03/2007, 09h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo