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] variable selon la ligne de commande


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 45
    Points : 35
    Points
    35
    Par défaut [langage] variable selon la ligne de commande
    bonjour,

    je commence en perl, et je souhaite, lancer un script perl en ligne de commande avec des variables en ligne de commande.

    essaie : et le code :

    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
     
    #!/usr/bin/perl
    # Ouvre un Pipe avec le commande mail (Unix)
    open(MAIL,"|/usr/sbin/sendmail -t")     || die "Peut pas ouvrir sendmail : $!\n";
    # Envoie les informations
    print MAIL <<"EOF";
    From: supertoto\@toto.com
    To: toto\@toto.com
    Subject: coucou
    Mime-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-1
    Content-Transfer-Encoding: 8bit
    $test
    Bonjour
    EOF
    close(MAIL);
    mais la variable $test reste à vide.

    Merci d'avance.

  2. #2
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut Re: variable selon la ligne de commande
    Bonjour,

    En modifiant ton code ainsi :
    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
    #!/usr/bin/perl -s
     
    our $test;
     
    # Ouvre un Pipe avec le commande mail (Unix)
    open(MAIL,"|/usr/sbin/sendmail -t")     || die "Peut pas ouvrir sendmail : $!\n";
     
    # Envoie les informations
    print MAIL "From: supertoto\@toto.com\n";
    print MAIL "To: toto\@toto.com\n";
    print MAIL "Subject: coucou\n";
    print MAIL "Mime-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-1\n";
    print MAIL "Content-Transfer-Encoding: 8bit\n";
    print MAIL "Bonjour\n";
    print MAIL "\n";
    print MAIL "$test\n" if (defined ($test));
    print MAIL ".";
     
    close(MAIL);
    On obtiendra un comportement qui te convient plus.

    Le -s dans la ligne du shebang (#! ...) permet d'activer une prise en compte minimale des options de ligne de commande. Sans cela, rien n'est fait.

    Le -w dans la ligne du shebang (#! ...) permet d'activer des avertissements supplémentaires vis à vis de la syntaxe (w comme "warnings"). Une bonne idée, aussi, serait d'activer le contrôle strict de celle-ci : ajouter une ligne "use strict;" juste après la ligne du shebang.

    Le "our $test;" permet de déclarer la variable globale $test que nous devrons récupérer de la ligne de commande. Il est nécessaire de la déclarer parce que nous avons demandé une gestion stricte de la syntaxe .

    Je préfère mettre explicitement ce que je souhaite dans un fichier au moyen de plusieurs print, plutôt que par une indirection bornée par une fin de fichier. Ça permet plus de souplesse et ça évite que le code perl ne ressemble à du PHP .

    Enfin, pour sortir la variable "$test", j'ajoute un test au print pour ne l'afficher que si elle est définie et éviter les messages d'erreur à la console lorsque l'on n'a pas passé les bons paramètres au script.

    Maintenant, l'invocation de ton script (nommé mail.pl, et rendu au préalable exécutable par un "chmod a+x ./mail.pl") se fait ainsi : (note le - au début de -test).

    Je conclus en ajoutant que perl possède des modules prédéfinis pour l'envoi de mails (Net::SMTP et autres), qui permettent d'éviter de reposer sur sendmail et rendent ainsi les scripts portables vers windows ou MacOS, par exemple.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    Ouah !!!

    ça c'est de la réponse

    Merci bcp !


  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    tout est ok, en activant à la premiere ligne -s et non -w

    enfin c'est de ma faute

    merci encore

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

Discussions similaires

  1. Changer la variable "Path" en ligne de commande
    Par nalhalcarel dans le forum Windows 7
    Réponses: 2
    Dernier message: 23/05/2012, 23h40
  2. Inclure une variable dans la ligne de commande system()
    Par todovski dans le forum Débuter
    Réponses: 1
    Dernier message: 12/02/2009, 15h42
  3. variable string et ligne de commande a compiler.
    Par boblaterreur dans le forum Delphi
    Réponses: 5
    Dernier message: 20/08/2007, 22h32
  4. Passer une variable DOS au FTP en ligne de commande
    Par karl3i dans le forum Windows
    Réponses: 3
    Dernier message: 14/11/2006, 13h33
  5. Réponses: 3
    Dernier message: 07/04/2003, 20h06

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