Les modules et les objets en Perl
Outre sa formidable capacité à gérer les données
en format texte, Perl possède bien d'autres atouts dans son sac
à malices. Nous allons ce mois-ci examiner succinctement le
fonctionnement des modules et des objets.
Importation d'un modulePour charger un module, Perl offre deux commandes : La commande La commande Grosso modo, les modules, ou packages, correspondent à des
fichiers portant l'extension
use NomDePackage;
Les fonctionnalités offertes par le package sont alors directement accessibles. Dans bien des cas, cela signifie principalement qu'est définie une classe du même nom que le module, mais ce n'est pas une règle du langage comme en Java et un module Perl peut aussi bien définir plusieurs types de classes différentes que pas du tout. Nous allons maintenant découvrir l'utilisation concrète des modules à l'aide de deux exemples très simples. Un client SMTPPour le premier exemple, on va réaliser un client SMTP,
c'est-à-dire un programme capable d'envoyer un email. En fait, on va
se contenter d'utiliser le module Perl prévu à cet effet,
#!/usr/bin/perl -w
use Net::SMTP;
Pour réaliser l'envoi du mail, on va simplement créer l'objet approprié et utiliser ses méthodes.
## serveur mail
my $server = 'mail';
## nom du destinataire
my $recipient = 'fred' ;
my $mail = new Net::SMTP $server;
L'objet que l'on vient de créer va alors se connecter au serveur qui lui a été spécifié. On peut alors lui passer les données de notre mail.
$mail->mail($ENV{USER});
$mail->to($recipient);
$mail->data;
$mail->datasend("To: $recipient\n");
$mail->datasend("Subject: mail de test\n");
$mail->datasend("\n");
$mail->datasend("mail pour tester les modules SMTP et POP3 en Perl.\n");
$mail->dataend;
$mail->quit;
Les deux premières lignes permettent d'indiquer respectivement qui
envoie le mail et à qui en l'envoie. Les lignes suivantes permettent
de transmettre les données proprement dites du mail : les champ
Un client POPMaintenant qu'on sait envoyer un mail, il serait intéressant de pouvoir les lire. Pour cela, on va réaliser un client POP3. Comme pour le client SMTP, cela consiste principalement à créer un objet sur lequel on va appeler les méthodes nécessaires. Ici, le script inclut quelques messages et un prompt pour pouvoir lire les mails les uns après les autres, voire arrêter en cours de route. Il faut par contre mettre les valeurs appropriées pour le serveur, le login et le password.
#!/usr/bin/perl -w
use strict;
use Net::POP3;
my $server = 'mail'; ## nom du serveur pop3
my $login = $ENV{USER}; ## login sur le serveur
my $passwd = '...'; ## mot de passe
my $pop;
$| = 1;
print "connecting to $server.. ";
$pop = Net::POP3->new($server);
print "ok\n";
$pop->login($login, $passwd);
my ($undeleted, $size) = $pop->popstat;
my $last = $pop->last;
print "mail box size: $size\n",
"$undeleted unread mail(s).\n",
"last read mail: $last\n\n";
for my $i (1..$undeleted) {
## on lit et on affiche le mail
my $mail = $pop->get($i);
print $s, "\n", '-'x(length $s), "\n", @$mail;
## on efface le mail
$pop->delete($i);
print "> ";
chop(my $cmd = <>);
last if $cmd =~ /q(uit)?/i;
}
$pop->quit;
Dans ce programme, chaque mail est marqué "à être effacé" après la lecture, mais est effectivement détruit lors de la déconnexion. Si ces petits exemples ne risquent pas de faire de l'ombre aux classiques emailers qu'on utilise tous les jours, ils montrent à quel point il est facile d'envoyer et de lire des mails depuis un programme Perl. Ce qui peut se révéler intéressant pour réaliser des programmes pouvant gérer tout seul des mails générés automatiquement, par exemple par le formulaire d'une page web. Sébastien Aperghis-Tramoni
25 août 1999
This document validates as XHTML 1.0 Strict and CSS.
Copyright ©2000 Sébastien Aperghis-Tramoni, "Maddingue"
|