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 :

[langage] eval


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 20
    Points : 15
    Points
    15
    Par défaut [langage] eval
    Bonjour,

    je veux faire un truc a priori simple mais comme je cherche depuis 1h sans avoir trouvé de réponse ca doit pas etre si simple.
    Voila j ai une liste de variable defini dans fichier externe de la facon suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var1 val1
    var2 $var1/val2
    var3 $var1/$var2
    ....
    Et j aimerais definir ces differentes variables dans mon script perl pour qu' au final j ai ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $var1 = "val1";
    $var2 = "val1/val2";
    $var3 = "val1/val1/val2";
    ....
    voila ce que j ai pondu mais ca ne marche pas mes variables composé d'autre variables restent vide :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    open(IN,"fichiervariables");
    while(<IN>){
     ($nomVar,$valVar)=split(" ",$_);
     ${$nomVar} = eval($valVar);
    }
    close(IN);

    Merci d'avance,


    Quaker

  2. #2
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 69
    Points : 60
    Points
    60
    Par défaut
    slt,

    Pour resoudre ton probleme ,tu crées un tableau avec la fonction split et tu evalues chaques cases de ton tableau ainsi apres tu fais un petit join et le tour est jouée je sais que c possible avec regexp!!!


    bye Ludo

  3. #3
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Je pense que tu trouveras ton bonheur dans cette regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $valvar =~ s<(\$[^/]+)><$1>eeg;

    [EDIT] Par ailleurs je te recommande chaudement les hash au lieu des références symboliques, ça t'évitera des cauchemars plus tard lorsque tu t'apercevras que tu as modifié par inadvertance une autre variable essentielle à ton script...
    Les références symboliques pollue ton espace de nom et n'ont aucun avantage par rapport à un hash, les références symboliques c'est BAD !!
    (c'est du moins l'opinion de tous les programmeurs expérimentés que je connais...)

    --
    Jedaï

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Merci pour vos reponses.

    Par contre je ne comprend pas ton expression reguliere Jedai. Tu pourrais me l expliquer bievement...

    Merci,

    Quaker

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Voilà une solution qui marche (j'utilise un hash plutôt qu'une référence symbolique, c'est pourquoi la régex est un peu différente) :
    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
     
    #! /usr/bin/perl
    use strict;
    use warnings;
     
    my %hashVar;
    while(<DATA>){
     chomp;
     my ($nomVar,$valVar)= split;
     print $nomVar, " : ", $valVar, "\n";
     $valVar =~ s<\$([^/]+)><$hashVar{$1}>g;
     $hashVar{$nomVar} = $valVar;
     print $nomVar, " : ", $hashVar{$nomVar}, "\n";
    }
     
    __DATA__
    var1 val1
    var2 $var1/val2
    var3 $var1/$var2
    Je te conseille cette solution, les références symboliques sont vraiment à proscrire absolument.

    --
    Jedaï

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Génial ca marche !!!! Merci et bravo

    Cool ce forum...

    Quaker

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

Discussions similaires

  1. [langage] Je cherche un bon livre ?
    Par Anonymous dans le forum Langage
    Réponses: 13
    Dernier message: 09/04/2003, 13h16
  2. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  3. [langage] comment créer des fichiers ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2002, 16h33
  4. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37
  5. Cours, tutoriels, logiciels, F.A.Q,... pour le langage SQL
    Par Marc Lussac dans le forum Langage SQL
    Réponses: 0
    Dernier message: 04/04/2002, 10h21

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