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 :

interpreter une variable comment une fonction


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut interpreter une variable comment une fonction
    salut à tous,

    J'aimerai savoir comment interpreter une variable comment une fonction, je m'explique:

    Je recoi un message du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    auth idnick password
    le 1er argument "auth" je le stock dans une variable nommée $cmd
    à coté de cela j'ai une fonction &cmd_auth et je voudrai que lorsque la variable $cmd correspond à "auth" ca me lance la fonction &cmd_$cmd ce qui corresponderai à cmd_auth.

    J'ai déja essayé des manieres suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    &cmd_$cmd();
    &cmd_{$cmd}();
    cmd_"$cmd"();
    Mais rien ne fonctionne et j'avoue ne pas du tout savoir comment procéder
    Je sais que je ne suis pas trés clair donc n'hésitez pas a me demander plus de renseignements.

    à bientôt

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    Probleme résolu en utilisant eval

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my $func = ("cmd_".$cmd."(\"$service\", \"$user\", \"@args\")");
    eval $func;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sub cmd_auth {
    	my ($service, $user, @args) = @_;
    	print "Ca marche\n";
    }
    Résultat ca marche

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    Maintenant ca ne fonctionne plus, ca doit être un canular ...

    alors comme ceci:

    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
     
    sub parse_cmd {
        my ($service, $user, @message) = @_;
        my $cmd = lc(@message[0]);
        my @args = @message[1..$#message];
     
        if ($service->validcom($cmd)) {
    	if (!$user->isauth && $cmd ne 'auth') {
                 $service->sendnotice($user, "Accés refusé");
                 return
    	}
     
    	my $func = ("cmd_".$cmd."(\"$service\", \"$user\", \"@args\")");
    	eval $func;
    	} else {
                 $service->sendnotice($user, "Cette commande '$cmd' n'existe pas.");
    	}
    }
     
    sub cmd_auth {
    	my ($service, $user, @args) = @_;
    	my ($idnick, $password) = (@args[0], @args[1]);
    	#my $tmp = $service->{'user'}->{$idnick};
        print "Ok\n";
    }
    comme ceci ca m'affichie bien 'Ok'
    et des que je decommente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my $tmp = $service->{'user'}->{$idnick};
    plus rien ...

  4. #4
    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
    Utiliser eval() pour faire ce genre de chose c'est se préparer un avenir morose....

    Alors qu'il te suffit d'utiliser un hash de références de fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my %cmd = ( auth => \&cmd_auth, nick => \&cmd_nick, );
     
    #plus loin
    $cmd{$cmd_name}->( $parametre1, $parametre2, ...);
    --
    Jedaï

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    Salut Jedai,

    ca fonctionne merci bien.

  6. #6
    Membre confirmé
    Avatar de Schmorgluck
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Des fois je me dis que l'exercice auquel je me suis astreint pour le fun il y a quelques mois, à savoir programmer une calculatrice en ligne de commande sans utiliser une seule fois la commande eval... eh ben, finalement, cet exercice né d'un moment d'ennui m'a obligé à réellement découvrir Perl, en tout cas de solides bases.
    Je dis ça ici parce que j'avais vaguement inclu quelques fonctions dans ma calculette.
    C'est vraiment le genre d'exercice débile qui fait apprendre plein de choses, Je le recommande à tous les débutants.
    There's nothing like $HOME!

Discussions similaires

  1. [Débutant] Affecter une variable d'une classe C# à une variable Javascript
    Par SultanGeek dans le forum C#
    Réponses: 0
    Dernier message: 20/06/2015, 20h42
  2. Réponses: 15
    Dernier message: 25/04/2006, 17h59
  3. faire passer une variable d'une fct js à une page php
    Par harlock59 dans le forum Langage
    Réponses: 1
    Dernier message: 25/11/2005, 14h41
  4. Affecter une variable javascript à une variable php
    Par gwendy dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2005, 20h58
  5. Désigner une variable avec une variable?
    Par littleman dans le forum Paradox
    Réponses: 4
    Dernier message: 12/08/2002, 11h21

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