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 :

Appel sous script


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Par défaut Appel sous script
    Bonjour à tous,
    je poursuis mon apprentissage dans ce vaste langage perl.
    Voila j ai une petite question concernant l optimisation fonctionnelle d un script perl !

    Au fur et a mesure les lignes de codes s accumulent et je voudrais externaliser une fonction pour permetre également l'évolution !
    Je voudrais donc un prog principal_A qui fait appel un autre script_B egalement en perl. Sachant que le script_B va renvoyer des reponses au prog principal_A.
    Comment appeler cette fonction et comment je gere les variables du prog principal vu quelles sont utilise en stict ???

    Merci Jules

    PS j sais que c est pas tres clair dsl

  2. #2
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    tu peux faire ce qu'on appel des modules (script.pm) dans lequel tu mets tes sous programmes (ou procédures). Puis tu les appelles dans ton programmes principal.
    On en parle dans le FAQ confere ma signature.
    Sinon voici le lien direct vers comment appeler un module local

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Par défaut
    Merci il me manquait le terme employe de "MODULE" pour la recherche dans la faq .
    Merci
    Jules

  4. #4
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 895
    Par défaut
    tag résolu, please.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Par défaut
    Bonjour a tous;
    suites aux differents conseils je suis allez voir la FAQ a cette adresse:

    http://perl.developpez.com/faq/?page...nC3#sectionC31

    Et meme l exemple donné je n arrive pas a le faire fonctionner ???

    voila le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #!/usr/bin/perl -w
    use strict;
    use Carp;
    use lib './test_ju';    #mon module se trouve dans le répertoire "repertoire_module"
    use mon_module;         #       =>utilisation du module "mon_module"
     
    my $seq = "ATCGTGC";
    &longueur($seq);                #utilise la fonction &longueur de mon module
                                    #=>c'est une séquence de longueur 7
    print "c'est ok!";              #=>c'est ok!
    et voila le module

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #!/usr/bin/perl -w
    use strict;
    use Carp;
    package mon_module;
     
    sub longueur{
      my ($seq) =@_;        #récupération de la séquence à traiter
      my $lg = length($seq);
      print "c'est une séquence de longueur $lg\n";
    }
    1;                      #obligatoire dans les modules en fin de programme.
    Et voila l'erreur !!


    Undefined subroutine &main::longueur called at ./script_principal.pl line 8.


    Merci d avance pour le coup de pouce !
    Jules

  6. #6
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    bon c'est moi qui est ecrit l'exemple, alors, si c'est pas bon ça va pas le faire . Je le reteste !!

  7. #7
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    au fait, le .pm, tu l'as appelé comment?? mon_module.pm??
    Tu l'as mis dans le repertoire /test_ju?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Par défaut
    Oui le module s appelle mon_module.pm et le fichier principal ainsi que e le fichier module se trouvent dans le repertoire ./test_ju

    Merci
    Jules

  9. #9
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    donc l'erreur est normal. Au fait si tu met le module et le fichier principal dans le même repertoire, tu dois mettre et non en fait use lib '' permet de specifier le chemin où se trouve ton .pm donc si ce dernier est dans le même repertoire, un point suffit

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Par défaut
    Oki j ai modifié et voici ainsi mon code:

    Principal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #!/usr/bin/perl -w
    use strict;
    use Carp;
    use lib '.';    #mon module se trouve dans le répertoire "repertoire_module"
    use mon_module;#                        =>utilisation du module "mon_module"
     
    my $seq = "ATCGTGC";
    &longueur($seq);                #utilise la fonction &longueur de mon module
                    #               =>c'est une séquence de longueur 7
    print "c'est ok!";#             =>c'est ok!!/usr/bin/perl -w
    Module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #!/usr/bin/perl
    use strict;
    use Carp;
    package mon_module;
     
    sub longueur{
      my ($seq) =@_;        #récupération de la séquence à traiter
      my $lg = length($seq);
      print "c'est une séquence de longueur $lg\n";
    }
    1;                      #obligatoire dans les modules en fin de programme.

    Mon erreur
    Undefined subroutine &main::longueur called at ./script_principal.pl line 8.


    Merci d avance Jules[/b]

  11. #11
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    dans le module, enleve la ligne package mon_module;
    c'est ça qui fait bugger, je vais la virer de la doc.

    merci pour ta remarque.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Par défaut
    Extra ca fonctionne,
    est ce que tu sais si c est possible d'utiliser des variables definis dans le prog principal et de les utiliser dans le module ?
    Et chopper le resultat d une variable du module pour l exploiter dans le prog principal ?

    Merci d avance Jules

  13. #13
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    tu peux recuperer dans tes modules autant d'argument que tu veux et faire un return pour renvoyer une ou des variables, un tableau, un hash, etc. c'est à toi de voir.
    Dans l'exmple, tu lui a donné en argument une sequence et il t'as printer le resultat. Tu pouvais faire un return dans ta fonction et recuperer le resultat dans le prog principal.
    Voilà

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Par défaut
    Merci je vais essayer de le faire marcher par contre encore une petite question, si j ai une erreur dans le module comment je pe le savoir ?

    Merci Jules

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Par défaut
    C'est bon c etait une question stupide mais par contre j ai une erreur sur le "1" a la fin du prog mon_module dans mon prog perso.

    Bareword "l" not allowed while "strict subs"

    Ca veut dire quoi ?

    Merci Jules

  16. #16
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par djibril
    dans le module, enleve la ligne package mon_module;
    c'est ça qui fait bugger, je vais la virer de la doc.

    merci pour ta remarque.
    Non, non, surtout pas ! La ligne package est très bien là où elle est.

    Mais il faut appeler longueur() par son nom complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mon_module::longueur( $seq);
    Pour éviter ça, on peut utiliser le module Exporter, qui a été explicitement conçu pour régler ce genre de problème :
    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
     
    use strict;
    use Carp;
    package mon_module;
    require Exporter;
    our @ISA = qw(Exporter);
    our @EXPORT = qw(longueur);
     
    sub longueur{
      my ($seq) =@_;        #récupération de la séquence à traiter
      my $lg = length($seq);
      print "c'est une séquence de longueur $lg\n";
    }
     
    sub private{
      print "ceci esst une sub privée";
    1;
    Maintenant, dans ton script qui fait un 'use mon_module;', tu peux faire directement 'longueur( $seq );' mais tu es obligé de taper son nom complet pour appeler private().

    Le système de "package" permet d'établir une notion d'espace de nom, et tous les programmeurs expérimenté te diront à quel point c'est utile.

    --
    Jedaï

  17. #17
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    j'ai du prendre de mauvaise habitude car je ne fais plus ainsi. Mais fait confiance à mon collegue jedai

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Par défaut
    C'est bon c'est règlé je suis un ANE c etait pas un L minuscule mais un "1" par contre le prog crash car la variable du prog principal n arrive pas etre exporte !!!

    Voici l erreur

    Global symbol "$Type_Switch" requires explicit package name at sous_fonc.pm line 21

    Voici l appel du module dans le prog principal

    $Type_Switch_Cisco=&Switch_Cisco($Type_Switch);

    $Type_Switch >>>variable du prog principal definit en our $Type_Switch
    et require a la place de use pour le module.

    Comment dois je definir la variable de prog principal pour pouvoir l utiler dans mon module ??

    Merci Jules

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    Par défaut
    Oki j ai pris bonne note des tes conseils Jedai, mais j ai un petit soucu a la compilation avec la definition de:

    Global symbol "@EXPORT" requires explicit package name at sous_fonc.pm line 14.
    Global symbol "$Type_Switch" requires explicit package name at sous_fonc.pm line 25.


    Et ca sert a quoi de definir un tableau @EXPORT ?

    Merci d avance Jules

  20. #20
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Salut !

    Pourquoi tu as mis un require à la place du use ? Je trouve pas que ce soit une bonne idée, étant donné que le require est traitée à l'éxécution alors que le use à la compilation...
    Ensuite, j'ai l'impression que tu utilises $Type_Switch à l'intérieur du module, or elle n'est pas définie dans le paquetage (ou l'espace de nom) de ton module.
    Si tu veiux utiliser $Type_Switch dans ton module, il faut nommer à quel package elle appartient, et c'est le paquetage par défaut main.

    Donc il te faut faire un :
    A la place d'unCela devrait résoudre ton problème

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Appeler un sous script javascript -> ?
    Par souffle56 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/12/2011, 23h02
  2. [Newbie] Problème d'appel de script perl
    Par NoCoZ dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 21/02/2006, 17h43
  3. debutant= appel de script dans html
    Par sadkill dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/02/2006, 13h17
  4. [Sqlplus ] Appel depuis script KSH
    Par kasiop dans le forum Oracle
    Réponses: 2
    Dernier message: 27/01/2006, 10h25
  5. Réponses: 6
    Dernier message: 23/05/2005, 08h33

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