[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 :
Code:
perl mail.pl test="OK"
et le code :
Code:
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.
Re: variable selon la ligne de commande
Bonjour,
En modifiant ton code ainsi :
Code:
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 :twisted: .
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.