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 à un sous programme


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut Appel à un sous programme
    Bonsoir,

    Est possible en perl, comme sous unix de faire appel à d'autre programme, situés dans d'autres répertoires. Dans lesquels il faudrait placer des paramétres.

    Je m'explique, je suis dans le repertoire C:\temp avec le programme test1.pl, et à partir de celui ci, je veux lancer un script perl qui se trouve dans C:\windows\lance.pl dans lequel je passe des paramétres donc le résultat est issu de test1.pl.

    en schématisant,

    test1.pl ==> C:\windows\lance.pl ${date} ${lieu]


    comme puis je faire pour transmettre le resultat des variables de test1 à lance.pl.

    Merci encore

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 587
    Points : 2 036
    Points
    2 036
    Par défaut
    oui, tu peux faire un script Perl qui en lance d'autres à la suite en leur envoyant des paramètres

    Attention cependant !

    Si tu veux que ton script principal continue à garder la main après chaque sous-programmes lancés, il faut faire appel à la commande system( ). Si au contraire, une fois qu'il a lancé le 2è prog, il doit s'arrêter, tu peux employer exec( ) à la place.

    Je serais fortement tenté, dans la mesure du possible bien sûr, de faire en sorte que chacun des programmes Perl secondaires soit un package (.pm au lieu de .pl) contenant ton code sous forme de fonctions. A moins que ces programmes doivent pouvoir être lancés individuellement et pour tout autre usage ?

    En admettant que tu restes sur une optique (exemple) 1 prog principal lançant 2 sous-programmes tout en récupérant la main à la fin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    use strict;
     
    my $sous_prog1 = "perl.exe C:\travail\toto.pl";
    my $sous_prog2 = "perl.exe C:\travail\titi.pl";
     
    my ($param1, $param2, $param3, $param4) = (1,2,3,4);
     
    # lancer chaque sous prog en leur envoyant à chacun 2 param
    system ("$sous_prog1 $param1 $param2");
    system ("$sous_prog2 $param3 $param4");
     
    # fin de ton script principal pour l'exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    # rapide script sous programme toto.pl
     
    # récup des deux arguments reçus en paramètres
    my ($val1, $val2) = ($_[0], $_[1]);
     
    # $val1 doit contenir 1
    # $val2 doit contenir 2
    A peaufiner et je ne doute pas que de biens plus experts que moi (djibril, ledjai ou pospos entres autres) te donneront d'autres pistes ou éclaircissements

    J'insiste cependant sur le fait que, si c'est faisable, tes sous programmes seraient mieux dans un ou plusieurs packages. Et là, tu n'aurais plus qu'à t'en servir comme des fonctions classiques. Fonctions qu'on appelle d'ailleurs sous programmes, comme quoi

  3. #3
    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
    Arioch a bien résumé. tu possede trois façon pour lancer une commande systeme en perl (Donc de lancer un script perl dans ton script. Tu peux faire un tour dans la FAQ que nous avons rédigé (confere ma signature).

    exemple : principal.pl
    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
     
    #!/usr/bin/perl -w
    use strict;
    use Carp;
     
    print "bonjour\n";
    print "je lance un autre script via system\n";
    system("perl C:\windows\lance.pl ${date} ${lieu}");
     
    print "je lance un autre script via des backquote\n";
    `perl C:\windows\lance.pl ${date} ${lieu}`;
     
    print "je lance un autre script via exec\n";
    exec("perl C:\windows\lance.pl ${date} ${lieu}");
    Mais ce derniere stop le script principal une fois la commande exécutée
     
    Voilà

  4. #4
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Il y a également

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my $retour = qx(perl C:\windows\lance.pl ${date} ${lieu});

  5. #5
    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
    Citation Envoyé par MarneusCalgarXP
    Il y a également

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my $retour = qx(perl C:\windows\lance.pl ${date} ${lieu});
    Ceci est strictement équivalent aux backquotes, c'est un opérateur de quotation alternatif (comme qq() pour " et q() pour '). Son intérêt est surtout de permettre d'utiliser des modes d'interpolations alternatifs, par exemple avec qx'commande' le contenu de la commande sera parsée comme entre simple quotes (alors qu'avec les backquotes l'interpolation est par défaut comme avec les doubles quotes).

    --
    Jedaï

Discussions similaires

  1. Faire appel à un sous programme se trouvant dans un autre fichie
    Par Roud9 dans le forum x86 32-bits / 64-bits
    Réponses: 1
    Dernier message: 12/04/2011, 12h43
  2. Différentes manières d'appel de sous-programme
    Par Anium dans le forum Assembleur
    Réponses: 2
    Dernier message: 07/03/2008, 17h11
  3. appeler un sous-programme
    Par wedoud dans le forum Langage
    Réponses: 1
    Dernier message: 20/10/2007, 00h35
  4. Réponses: 4
    Dernier message: 13/11/2006, 10h54
  5. Appel sous programme
    Par sam.fet dans le forum Linux
    Réponses: 2
    Dernier message: 17/08/2006, 13h20

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