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

Modules Perl Discussion :

Appeler une fonction du fichier parent


Sujet :

Modules Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Aucun
    Inscrit en
    Octobre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Octobre 2014
    Messages : 3
    Par défaut Appeler une fonction du fichier parent
    Bonjour, je suis en train de créer un petit script en Perl et j'ai un problème.
    J'ai créé une classe class.pm que j'importe dans un script test.pl.
    La classe class.pm contient un constructeur ainsi qu'une fonction test.
    Un objet de class.pm est déclaré dans test.pl.
    Dans test.pl, il y a une fonction bonjour qui affiche "Hello world".

    J'aimerais, en appelant que la fonction test de l'objet class.pm présent dans test.pl appelle la fonction bonjour de test.pl.
    Un exemple avec du code sera plus clair :

    test.pl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #test.pl
    use class;
     
    sub bonjour
    {
    print("Hello world !");
    }
     
    $maclass=class->new();
     
    $maclass->test();
    class.pm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    package test;
     
    sub new()
    {
    $self = shift;
    return $self;
    }
     
    sub test()
    {
    #appelle la fonction bonjour de test.pl pour afficher "Hello world !"
    }
    Merci d'avance pour vos réponses.

    PS : Je ne suis pas sûr d'être dans la bonne partie, déplacez si besoin.

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Tu peux passer une référence à ta fonction (cela s'appelle une fonction de rappel ou callback function). Par exemple:

    Programme principal:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    use mon_package qw /test_code_ref/;;
     
    my $print_code_ref = sub { print "Hello word\n" };
    # $print_code_ref  est maintenant une référence à la fonction anonyme définie ci-dessus
    test_code_ref($print_code_ref);
    Package:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    package mon_package;
    # export, etc.
     
    sub test_code_ref {
         my $code_ref = shift;
         $code_ref->();     # appelle la fonction reçue en paramètre et imprime "Hello word"
    }
    Une autre manière est de créer une fonction avec un nom de passer une référence à cette fonction.

    Dans le programme principal, au lieu de:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my $print_code_ref = sub { print "Hello word\n" };
    tu peux faire comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sub print_hello { print "Hello word\n" };
    my $print_code_ref = \&print_hello;
    Il y a d'autres moyens syntaxiques de faire la même chose, mais ça te donne déjà une idée.

    Je donne de nombreux exemples de ces constructions dans la seconde partie de mon tuto sur la programmation fonctionnelle en Perl.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Aucun
    Inscrit en
    Octobre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Octobre 2014
    Messages : 3
    Par défaut
    Merci beaucoup, c'est exactement ce qu'il me fallait !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Par défaut
    zut , j'ai été pris de court
    mais juste pour le plaisir de montrer que je lit les écrits de lolo, et puis parce que maintenant c'est fait, j'ai traduit en moose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    use Classe;
     
    sub bonjour
    {
            print("Hello world !");
    }
     
    my $ref = \&bonjour;
     
    my $maclass=Classe->new();
     
    $maclass->test($ref);
    exit 0
    et la classe
    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
     
    package Classe;
    use Moose;
     
     
    sub test()
    {
            my $self = shift;
            my $fonction = shift;
            $fonction->();
            #appelle la fonction bonjour de test.pl pour afficher "Hello world !"
            }
    ###############################################################
    no Moose;
    __PACKAGE__->meta->make_immutable;
    voilou

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par vidici Voir le message
    mais juste pour le plaisir de montrer que je lit les écrits de lolo
    C'est bien.

    Ça me rassure, j'ai au moins un lecteur.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Par défaut
    rassures toi, c'est super. Même si c'est un peu ardu pour moi (je n'en suis qu'a mi page), ça ouvre une autre dimension.
    merci

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

Discussions similaires

  1. appel à une fonction dans un fichier externe
    Par corentin59 dans le forum Langage
    Réponses: 1
    Dernier message: 11/01/2008, 12h22
  2. Appeler une fonction d'un fichier SWF depuis un Form VB6
    Par Silk_do_Nadear dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 03/04/2007, 07h25
  3. Récupérer le nom du fichier qui appelle une fonction
    Par DeezerD dans le forum Langage
    Réponses: 2
    Dernier message: 24/03/2007, 14h37
  4. Appeler une fonction du parent
    Par Johnbob dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 28/11/2006, 03h56
  5. [Javascript] Appeler une fonction d'une fenêtre parente
    Par TekP@f dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 26/08/2005, 11h33

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