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 :

Newby : paramètres de script Perl


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Newby : paramètres de script Perl
    Bonjour,

    Je suis nouveau sur Perl et j'"hérite" d'un script à modifier.
    Ce script est appelé par Progress afin d'invoquer un WebService.
    Le retour du WebService est renvoyé à Progress par la sortie standard.

    Le script actuel:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #!/usr/bin/perl -w
    #perl -MCPAN -e 'install SOAP::Lite'
    #use SOAP::Lite +trace=> 'all' ;
    #use SOAP::Lite +trace=> 'debug' ;
    use SOAP::Lite;
    my $client = SOAP::Lite
        -> uri('urn:prgs:DocLiteral:WSTKDocLiteral')
        -> proxy('http://canas60:25011/wsa/wsa1')
        -> on_action(sub{sprintf '%s/%s', @_ });
     
    my $res = $client->Flux_TarifsEng(
        SOAP::Data->name(ipcCodUser => SOAP::Data->type(string => @ARGV )),
        SOAP::Data->name(ipcIDSession => SOAP::Data->type(string => @ARGV)),
        SOAP::Data->name(ipcLstFrsSoc => SOAP::Data->type(string => @ARGV)),
        SOAP::Data->name(ipcLstPrdAdh => SOAP::Data->type(string => @ARGV)),
        SOAP::Data->name(ipcLstTypeDoc => SOAP::Data->type(string => @ARGV)),
        SOAP::Data->name(ipcDebDate => SOAP::Data->type(string => @ARGV)),
        SOAP::Data->name(ipcFinDate => SOAP::Data->type(string => @ARGV)),
        SOAP::Data->name(ipcLstSoc => SOAP::Data->type(string => @ARGV)),
        SOAP::Data->name(ipcLstAdh => SOAP::Data->type(string => @ARGV)),
        SOAP::Data->name(oplOk => SOAP::Data->type(string => '')),
        SOAP::Data->name(oplResultat => SOAP::Data->type(string => '')),
        SOAP::Data->name(opcFileXML => SOAP::Data->type(string => ''))
    );
    # print "\n\n";
    print $res->valueof('//Flux_TarifsEngResponse/oplOk');
    print "\n";
    print $res->valueof('//Flux_TarifsEngResponse/oplResultat');
    print "\n";
    print $res->valueof('//Flux_TarifsEngResponse/opcFileXML');
    print "\n[EOF]";
    La modification consiste à ce que le troisième argument renvoyé par Perl (opcFileXML) ne soit pas renvoyé sur la sortie standard mais directement sur un fichier.

    La version modifiée :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #!/usr/bin/perl -w
    #perl -MCPAN -e 'install SOAP::Lite'
    #use SOAP::Lite +trace=> 'all' ;
    #use SOAP::Lite +trace=> 'debug' ;
    use SOAP::Lite;
    my $client = SOAP::Lite
        -> uri('urn:prgs:DocLiteral:WSTKDocLiteral')
        -> proxy('http://canas60:25011/wsa/wsa1')
        -> on_action(sub{sprintf '%s/%s', @_ });
     
    my $res = $client->Flux_TarifsEng(
        SOAP::Data->name(ipcCodUser => SOAP::Data->type(string => @ARGV )),
        SOAP::Data->name(ipcIDSession => SOAP::Data->type(string => @ARGV)),
        SOAP::Data->name(ipcLstFrsSoc => SOAP::Data->type(string => @ARGV)),
        SOAP::Data->name(ipcLstPrdAdh => SOAP::Data->type(string => @ARGV)),
        SOAP::Data->name(ipcLstTypeDoc => SOAP::Data->type(string => @ARGV)),
        SOAP::Data->name(ipcDebDate => SOAP::Data->type(string => @ARGV)),
        SOAP::Data->name(ipcFinDate => SOAP::Data->type(string => @ARGV)),
        SOAP::Data->name(ipcLstSoc => SOAP::Data->type(string => @ARGV)),
        SOAP::Data->name(ipcLstAdh => SOAP::Data->type(string => @ARGV)),
        SOAP::Data->name(oplOk => SOAP::Data->type(string => '')),
        SOAP::Data->name(oplResultat => SOAP::Data->type(string => '')),
        SOAP::Data->name(opcFileXML => SOAP::Data->type(string => ''))
    );
    # print "\n\n";
    print $res->valueof('//Flux_TarifsEngResponse/oplOk');
    print "\n";
    print $res->valueof('//Flux_TarifsEngResponse/oplResultat');
    print "\n[EOF]";
    open(OUT,">c:/perl/essai.xml");
    print OUT $res->valueof('//Flux_TarifsEngResponse/opcFileXML');
    close(OUT);
    Mon problème est que je ne sais pas comment récupérer le deuxième paramètre envoyé à Perl afin de l'utiliser comme partie du nom de fichier à créer (exemple : flux_valeur_d'ipcIDSession.xml).

    Si quelqu'un peut m'aider.
    Merci

  2. #2
    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 amer2006
    Mon problème est que je ne sais pas comment récupérer le deuxième paramètre envoyé à Perl afin de l'utiliser comme partie du nom de fichier à créer (exemple : flux_valeur_d'ipcIDSession.xml).
    Les arguments reçus en paramètres par un script Perl sont tous stockés dans la liste @_.

    Par exemple, tu lances un script comme ceci en ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl monscript.pl fichier1.txt fichier2.txt fichier3.txt
    Ici, @_ contiendra "fichier1.txt", "fichier2.txt", "fichier3.txt"

    $_[0] contient le 1er élément de @_, $_[1] le second etc etc.

    Toujours en reprenant mon exemple, pour ouvrir en écriture le dernier fichier dont le nom est passé en paramère au lancement (fichier3.txt) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/perl
    use strict;        # toujours une bonne habitude à prendre :o)
     
    my $LastFile = $_[2];
     
    open(LASTFILE, $LastFile) or die ("can't open $LastFile : $!\n");
    A noter que si tu trouves @_, $_[0] et autres pas très jolis visuellement, en chargeant le package english (use english; ), tu pourras mettre @ARGV à la place de @_, $ARGV[0] à la place de $_[0].

    Attention : au cas où tu viendrais du langage C, le 1er élément reçu en argument par le programme n'est pas le nom du programme, mais bien le 1er véritable argument que tu lui fournis. Le nom du script Perl est stocké dans la variable $0.

  3. #3
    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 Arioch
    Les arguments reçus en paramètres par un script Perl sont tous stockés dans la liste @_.
    Non, ils sont dans la liste @ARGV, @_ est réservé pour les passages d'arguments aux fonctions (et il est souvent nécessaire que les fonctions aient accès aux arguments du script, d'où la séparation des deux listes). Le deuxième paramètre du script est donc $ARGV[1].

    Par ailleurs amer2006, pour présenter ton code, mets le entre balises [ code ] (tu peux faire ça avec le bouton # de l'interface), ainsi l'indentation est conservée et le code est mis en valeur (et avec un peu de chance viendra un jour où la coloration syntaxique sera ajoutée au forum, dans ce cas seul le code dans ces balises en profitera).

    --
    Jedaï

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Bonjour Jedai et Arioch,

    Arioch : merci pour les explications, c'est très clair et celà fonctionne comme je le souhaite. Jedai, Le second paramètres est effectivement @ARGV[1].

    Pour Jedai : promis, au prochain post je m'applique sur la présentation.

    Bien cordialement.

  5. #5
    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 Jedai
    Non, ils sont dans la liste @ARGV, @_ est réservé pour les passages d'arguments aux fonctions
    Arf, très juste, j'ai encore merdouillé dans mes réponses

    Jedai, heureusement que tu es là !!

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

Discussions similaires

  1. Passage de paramètres par un script perl
    Par mydreams dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2008, 10h18
  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. [langage] script perl cmd system
    Par kacedda dans le forum Langage
    Réponses: 4
    Dernier message: 02/05/2003, 09h45
  4. [langage] awk et sed dans script perl
    Par scoti dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2003, 18h26
  5. Réponses: 2
    Dernier message: 11/07/2002, 08h31

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