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

  1. #1
    Candidat au 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
    Points : 4
    Points
    4
    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
    Points : 12 256
    Points
    12 256
    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
    Candidat au 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
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup, c'est exactement ce qu'il me fallait !

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

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    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
    Points : 12 256
    Points
    12 256
    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 régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    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

  7. #7
    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
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Je sais bien que c'est assez ardu. J'ai aussi eu du mal au début à comprendre certaines de ces choses, il m'a fallu un peu de temps, même si j'avais une certaine expérience de certaines d'entre elles dans d'autres langages. J'ai essayé d'y aller progressivement pour introduire petit à petit des notions nouvelles et plus avancées. J'espère y être parvenu, mais n'ai pas eu assez de retours pour savoir si c'est le cas. Mais je crois personnellement que la destination vaut vraiment le voyage, on n'est plus la même personne à la sortie.

    Je n'avais pas vraiment prévu que ce soit comme cela quand j'ai commencé à écrire ce tuto en trois parties, mais, si j'en crois la vision des auteurs de livres sur ces sujets, la première partie de ce tuto, avec les opérateurs de listes (map, grep, etc.) est souvent considérée comme le seuil de passage entre un niveau débutant et un niveau intermédiaire en Perl. La partie 2 emmène le lecteur depuis le bas vers le haut du niveau intermédiaire (pour les notions que j'aborde, il y a d'autres sujets à aborder pour réellement prétendre à atteindre le haut du niveau intermédiaire, dont quelques-uns que je ne prétends certainement pas vraiment maîtriser personnellement). La troisième partie, que j'avoue volontiers avoir eu un peu de mal à compléter, aborde quelques notions Perl réellement avancées, et même dans un ou deux cas à la limite de l'ésotérisme ou de la magie blanche.

    A mes yeux, la partie 2 est, pour la plupart des utilisateurs, la plus importante, celle où l'on commence à modifier vraiment sa façon d'entrevoir la programmation, indépendamment du langage. La partie 3 est dans un sens plus technique, elle donne des exemples assez pointus de comment utiliser les concepts décrits dans la partie 2 pour faire des trucs vraiment nouveaux, mais tout le monde n'a pas besoin d'étendre le langage, loin s'en faut.

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

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    certes, tes articles méritent d'être approfondi, et pour approfondir il faut du temps.
    Or, pour produire la moindre application il faut maitriser de plus en plus de technologies, ou alors rester spécialisé dans une seule, si on peut faire équipe à plusieurs. Je pense à Perl et ses modules ...., ou Php, de base puis l'orienté objet. Xml ,svg, xslt, Html, javascript et tout ce qui suit et d'autres ... Je viens de lorgner sur le langage R spécialisé dans les stats ... Bref on en finit jamais ..
    Alors personnellement je choisit de faire d'abord, de comprendre ensuite et enfin d'apprendre de façon plus théorique quand il me reste du temps.
    J'ai d'abord survolé tes écrits d'une façon rapide, sans vraiment chercher à comprendre. Mais quand un problème pratique survient, comme par exemple celui soulevé à l'origine dans ce fil, j'essaie d'y revenir et d'appliquer ce que tu as écrit.
    J'y ai vraiment découvert une nouvelle façon de voir les choses. Je suis heureux de pouvoir y revenir quand j'en ai besoin, ou juste comme çà pour y lire quelques lignes de plus.
    voilou

+ 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