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 :

[langage] appel de programmes exterieurs


Sujet :

Langage Perl

  1. #21
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    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 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par martijan
    si tu veux on reprendra cette conversation Lundi car je suis en W-end dans 5 minutes.
    veinard !

    Citation Envoyé par martijan
    en tous cas merci pour ton aide précieuse...
    no problemo ! Pour repartir sur de bonnes bases lundi prochain donc , voici 2 packages qui font exactement la même chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    package Pkg1;
    use vars qw(@ISA);
    use Exporter;
    @ISA = qw(Exporter);
     
    print "COUCOU\n";
     
    1;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    package Pkg2;
    use vars qw(@ISA @EXPORT);
    use Exporter;
    @ISA = qw(Exporter);
    @EXPORT = qw(Ma_Fonction);
     
    sub Ma_Fonction
    {
        print "COUCOU\n";
    }
     
    1;
    La différence entre les deux ?

    Avec le package 1, dès lors que le compilo topera use Pkg1; dans ton code, il affichera ce que fait le package qui ici, affiche COUCOU sur la sortie standard.

    Avec le package 2, il faut employer la fonction Ma_Fonction(), en plus de use Pkg2; pour que le COUCOU s'affiche.

    Bon WE !

  2. #22
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    Salut,

    Alors le Week-end s'est-il bien passé ?

    en fait si j'ai bien compris ton dernier message, au début du programme principal je met et au moment ou j'ai besoin de la fonction je fais a l'endroit où elle doit démarrer.
    c'est bien çà ?
    la curiosite n'est pas un défaut lorsqu'elle sert à évoluer...

    MaJe.

  3. #23
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    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 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Dans le contexte où j'ai présenté la chose, un package n'est rien d'autre qu'un sac à fonctions. Là où, habituellement, tu mets tes fonctions à la fin de ton programme principal (ou au début, peu importe), là tes fonctions sont dans un fichier à part. Il te suffit d'utiliser ce fichier (package) et ensuite, tu appelles bêtement la ou les fonction(s) dont tu as besoin au moment exact où tu en as besoin.

    Et pour répondre à ta question en 1 mot plutôt qu'en une tartine (comme ci-dessus ) ---> OUI

  4. #24
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    les choses ne se passent pas trop mal pour l'instant, pourtant un point obscure subsiste :

    dans mon programme principal j'ai une variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nomapplication="blabla";
    dans un des .pm je dois récupérer la valeur de cette variable. or le .pm en question ne reconnait pas. pourtant je ne l'ai pas déclarée avec ??
    la curiosite n'est pas un défaut lorsqu'elle sert à évoluer...

    MaJe.

  5. #25
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    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 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Une fonction peut bosser avec des variables qu'elle reçoit en arguments, utilise cette possibilité pour bosser avec ta variable

  6. #26
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    oui mais ca je ne sais pas encore faire !!!!!
    la curiosite n'est pas un défaut lorsqu'elle sert à évoluer...

    MaJe.

  7. #27
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    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 572
    Points : 2 014
    Points
    2 014
    Par défaut
    ci-dessous, un exemple tout bête. Le but du jeu est d'initialiser via fonction une variable en lui donnant comme valeur 1.

    Exemple de fonction qui bosse sans utiliser de référence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    use strict;
    my $Variable = 0;
     
    $Variable = Initialise($Variable);
     
    sub Initialise
    {
        my $Var = shift;
        $Var = 1;
        return $Var;
    }
    Même chose cette fois en utilisant une référence à la variable à initialiser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    use strict;
    my $Variable = 0;
     
    Initialise(\$Variable);
     
    sub Initialise
    {
        my ($Var) = shift;    # bien noter ici les parenthèses
        $$Var = 1;               # et ici l'emploi du $$
    }

  8. #28
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    aouhhhh !

    désolé la je nage un peu car tu es entrain de me montrer le cas avec une variable !

    je m'explique :

    use strict;
    my $Variable = 0;

    $Variable = Initialise($Variable);

    sub Initialise
    {
    my $Var = shift;
    $Var = 1;
    return $Var;
    }
    $Var prend la valeur de $Variable utilisée en argument !
    Oui ou Non ?

    ensuite
    use strict;
    my $Variable = 0;

    Initialise(\$Variable);

    sub Initialise
    {
    my ($Var) = shift; # bien noter ici les parenthèses
    $$Var = 1; # et ici l'emploi du $$
    }
    dans ce cas c'est la même chose sauf que tu utlises un référencement à une variable.

    Oui ou Non ?

    mais comment mon .pm qui utilise une dizaine de variable, sait qu'il faut affecté $Var à $Variable plutôt que $Var5 à $Variable !!!!!!

    la je swimm...
    la curiosite n'est pas un défaut lorsqu'elle sert à évoluer...

    MaJe.

  9. #29
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    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 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par martijan
    Cas 1 : $Var prend la valeur de $Variable utilisée en argument !
    Oui ou Non ?
    oui.

    Citation Envoyé par martijan
    cas 2 : dans ce cas c'est la même chose sauf que tu utlises un référencement à une variable.

    Oui ou Non ?
    oui.

    Citation Envoyé par martijan
    mais comment mon .pm qui utilise une dizaine de variable, sait qu'il faut affecté $Var à $Variable plutôt que $Var5 à $Variable !!!!!!

    la je swimm...
    Si tu dois passer plusieurs variables en arguments à ta fonction, et que dans le lot tu as des variables passées par références, il te suffit de faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sub Ma_Fonction
    {
        my ($var1, $var2, $var3, $var4, $var5) = @_;
    }
    Dans l'exemple, @_ est un tableau contenant TOUTES les variables qu'une fonction reçoit par arguments.

    Lorsque tu veux appeler la fonction, il te suffit juste de placer tes variables dans l'ordre exact où la fonction les attend. Ainsi, si dans mon exemple, tu veux passer par référence la variable $Toto et que la fonction l'attend en 5ème position, ça donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ma_Fonction($truc, $troc, $bidule, $machin, \$toto);

  10. #30
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    je suis vraiment désolé de te surcharger de questions, tu dois certainement avoir d'autres choses à faire.
    milles excuses mais tout ceci est nouveau pour moi, ne m'en tiens pas rigueur stp...

    et si tu préferes dialoguer par e-mail il suffit de me le transmettre le mien est :


    martijan@ina.fr.com
    la curiosite n'est pas un défaut lorsqu'elle sert à évoluer...

    MaJe.

  11. #31
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    je me suis certainement mal exprimé :

    le .pm contient une dizaine de variable certes, mail il n'y en a qu'une à transmettre du programme principal au .pm et c'est la que je ne comprends pas !

    ex: variable à transmettre : $nomvariable
    je le fais comme suis :
    programme principal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    &module::ma_fonction(\$nomapplication);
    et dans le module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($name)=$$nomapplication;
    c'est bien comme çà ?
    la curiosite n'est pas un défaut lorsqu'elle sert à évoluer...

    MaJe.

  12. #32
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    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 572
    Points : 2 014
    Points
    2 014
    Par défaut
    non, dans ton module il faut faire sacom :
    Comme dit tt à l'heure, @_ est un tableau contenant toutes les variables passées à un programme. Quand je fais shift, ça sous-entend shift(@_), ce qui signifie que $name reçoit le 1er argument du tableau @_. Tu pourrais faire de ces 3 manières là pour récupérer le 1er argument passé à ta fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my ($name)=shift;    # cas 1
    my ($name)=shift(@_);    # cas 2
    my ($name)=$_[0];    # cas 3

  13. #33
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    OK là c'est + clair.
    la curiosite n'est pas un défaut lorsqu'elle sert à évoluer...

    MaJe.

  14. #34
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    OK tout fonctionne à merveilles

    encore milles merci...
    la curiosite n'est pas un défaut lorsqu'elle sert à évoluer...

    MaJe.

  15. #35
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    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 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par martijan
    OK tout fonctionne à merveilles

    encore milles merci...
    cool

    n'hésite pas à poser d'autres questions surtout

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. appel a un programme exterieur un peu particulier
    Par KINENVEU dans le forum Général Python
    Réponses: 6
    Dernier message: 06/04/2009, 03h27
  2. [langage] appel d'un second script
    Par matN59 dans le forum Langage
    Réponses: 3
    Dernier message: 07/01/2004, 12h59
  3. Avec quel langage débuter en programmation ?
    Par spectrum1984 dans le forum Débuter
    Réponses: 10
    Dernier message: 28/12/2003, 21h57
  4. [langage] les sous programmes
    Par giverny dans le forum Langage
    Réponses: 6
    Dernier message: 21/07/2003, 19h24
  5. Réponses: 4
    Dernier message: 16/01/2003, 14h42

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