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 :

Passer une fonction en argument


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 52
    Points : 24
    Points
    24
    Par défaut Passer une fonction en argument
    Salut,

    Je continue d'apprendre doucement en Perl, aujourd'hui j'aimerai savoir comment passer une fonction en argument d'un script Perl.

    En gros voici la ligne de commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # perl script.pl nom_fonction
    Avec cette commande, le script Perl se lance et doit exécuter la fonction dont le nom est en argument.

    Je sais comment récupérer la chaine "nom_fonction" mais pas comment lancer la fonction associée.

    Pouvez-vous m'aider?

    Si possible, j'aimerai ne pas passer par un "if" du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ( $arg == "nom_fonction"){
        nom_fonction();
    }
    Ceci pour la simple et bonne raison que je risque d'avoir pas mal de fonctions...

    Merci

  2. #2
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    jette donc un coup d'oeil à la fonction eval dans un premier temps, mais il y a mieux, je cherche quelques références en attendant les experts...

    EDIT: voilà un exemple
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 52
    Points : 24
    Points
    24
    Par défaut
    Je sais pas si c'est moi mais j'ai pas tout compris aux 2 liens.

    La fonction eval n'appelle pas une autre fonction? si?

    Pareil pour l'exemple, j'ai pas tout compris, il vérifie une condition avant d'appeler une méthode, c'est ça?

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Je trouve qu'il n'est absolument pas judicieux de vouloir faire ce que tu souhaites.

    La meilleure façon de procéder est que ton programme lance une fonction en fonction d'un argument qui ne soit pas le nom de ta fonction.

    Exemple : perl prog.pl -start

    Qui lance la fonction commancer_calcul()

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 52
    Points : 24
    Points
    24
    Par défaut
    Il est fort probable que ce ne soit pas judicieux mais je débute alors des erreurs j'en ferai encore plein.

    Seulement j'ai un cahier des charges qui me dit en gros:
    - écrire un script perl avec des fonctions de calcul à l'intérieur
    - la fonction à utiliser sera appelée en argument de ce script

    Donc je vois pas comment passer outre.

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Ton cahier de charge te dit de faire ce que toi tu ne souhaites pas faire, c'est-à-dire des if !

    C'est bien de vouloir écrire du code avec le moins de lignes possible, mais à un moment donné, il faut tout de même écrire des lignes et des conditions !

  7. #7
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Tu peux aussi utiliser un hash qui contiendrait une liste de références de fonctions à appeler.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my $fonction1 = sub { print "Fonction1\n"; };
    my $fonction2 = sub { print "Fonction2\n"; };
    my %fonction = ( fonction_1 => $fonction1, fonction_2 => $fonction2 );
     
    $fonction{$ARGV[0]}->();
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 52
    Points : 24
    Points
    24
    Par défaut
    En fait je viens d'apprendre que je n'aurai pas tant de fonctions que ça à appeler. Je vais donc passer par les if.

    Sinon pas mal ton code Philou, il me sera utile à l'avenir.

    Merci à vous.

  9. #9
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Depuis la version 5.10, il existe une structure de contrôle de type switch : given/when, qui utilise l'opérateur "smart matching" ~~ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    use feature qw(:5.10);
     
    given($ARGV[0]) {
      when ("fonction1") {
        fonction1();
      }
      when ("fonction2") {
        fonction2();
      }
      default {
        die "Bad function name";
      }
    }
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

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

Discussions similaires

  1. [JavaScript] [FAQ] Appeler dynamiquement une fonction et passer une fonction en argument
    Par SpaceFrog dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/05/2008, 14h48
  2. Réponses: 11
    Dernier message: 04/10/2007, 17h18
  3. passer une fonction en argument, c'est possible ?
    Par kamouminator dans le forum C
    Réponses: 4
    Dernier message: 10/11/2006, 21h13
  4. Comment passer une fonction en argument
    Par Pades75 dans le forum Langage
    Réponses: 4
    Dernier message: 16/02/2006, 10h34
  5. Passer une fonction comme argument à une fonction
    Par Cocotier974 dans le forum Général Python
    Réponses: 4
    Dernier message: 29/06/2004, 13h41

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