Perl




Expertise (5/5)



Perl est un langage très utilisé dans le monde UNIX. Ce langage dispose d'une trousse à outil colossale qui couvre tous les besoins de l'administrateur UNIX, ainsi que pratiquement tous les besoins fonctionnels d'une plateforme.

J'utilise régulièrement Perl depuis plus de 10 ans. J'ai développé de très gros logiciels avec ce langage, ainsi que des petits scripts pour dépanner.


Manipulation de dates
Lorsque vous travaillez sur une plateforme informatique, il est courant de manipuler des données dont la date appartient à un interval donné. Par exemple : Le module ci-dessous permet d'exprimer des dates de façon absolue (relativement au calendrier en vigueur), ou de façon relative (relativement à une date donnée).

Exemple d'utilisation du module :

Chargement dynamique de modules

Le chargement dynamique de modules permet d'implémenter aisément une architecture à base de greffons (plugins).

Le code ci-dessous charge un ensemble de modules.



Analyse d'emails
L'analyse d'emails n'est pas une tâche triviale. Ce module permet d'extraire tous les fichiers joints à un email, ainsi que les adresses de l'envoyeur et du destinataire.

Exemple d'utilisation.

Factorisation d'une plage de numéros de téléphone

Dans le secteur des télécommunications, il est courant de devoir factoriser des plages de numéros de téléphone. Cette opération est nécessaire pour la configuration de certains équipements téléphoniques. Le module ci-dessous effectue cette opération de factorisation.

Exemple : On considère l'ensemble de 15 numéros présentés ci-dessous.

Dans cet exemple, pour des raisons de clarté, les numéros sont triés par ordre croissant. Cela dit, il n'est pas nécessaire de classer les numéros pour utiliser le module.

Le principe est le suivant :

  1. 0147300600
  2. 0147300601
  3. 0147300602
  4. 0147300603
  5. 0147300604
  6. 0147300605
  7. 0147300606
  8. 0147300607
  9. 0147300608
  10. 0147300609
  11. 0147300610
  12. 0147300611
  13. 0147300612
  14. 0147300613
  15. 0147300614

Dans l'exemple ci-dessous, les numéros en rouge constituent une suite de 10 numéros. Cette suite sera factorisée de la façon suivante : "014730060".


SMTP

Le texte ci-dessous illustre la procédure à suivre pour envoyer un fichier en pièce jointe par SMTP.

Connectez-vous au serveur SMTP et entrez les commandes suivantes :


telnet smtp.tiscali.fr 25
Trying 213.36.80.74...
Connected to mail-tiscali.libertysurf.net.
Escape character is '^]'.
220 mail.libertysurf.net ESMTP Service (6.5.026) ready
EHLO fr.tiscali.com
250-mail.libertysurf.net
250-DSN
250-8BITMIME
250-PIPELINING
250-HELP
250-AUTH
250-DELIVERBY 300
250 SIZE 5120000
MAIL FROM:<denis.beurive@fr.tiscali.com>
250 MAIL FROM:<denis.beurive@fr.tiscali.com> OK
RCPT TO:<denis_beurive@yahoo.com>
250 RCPT TO:<denis_beurive@yahoo.com> OK
DATA
354 Start mail input; end with <CRLF>.<CRLF>

Ensuite, envoyer la «partie de donnée» (data part). Le fichier à envoyer est encodé en base 64. Le nom du fichier envoyé est "to_send".



Message-ID: <3F3377BA.9A669F60@yahoo.com>
Date: Fri, 08 Aug 2003 12:13:14 +0200
From: Tiscali user <denis.beurive@fr.tiscali.com>
Reply-To: denis_beurive@yahoo.com
To: denis_beurive@yahoo.com
Subject: attached file
Content-Type: multipart/mixed; boundary="====1060343816====";


--====1060343816====
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

This is the attached file
--====1060343816====
Content-Type: application/octet-stream; name="to_send"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="to_send"

dXNlIGxpYiAiL2V4cG9ydC9jb21tb24tcGVybC1saWIvbXlfcGFja2FnZXMvIjsKdXNlIHN0cmlj
dDsKdXNlIGZpbGVyOwoKCm15ICRyYzsKbXkgJGVycjsKbXkgJGhvc3Q7Cm15ICRwb3J0OwpteSAk
bG9naW47Cm15ICRwYXNzOwpteSAkcGF0aDsKbXkgJG5hbWU7Cm15ICRjaGVja19wZXJpb2Q7Cm15
ICR2YWxpZF9hZ2U7Cm15ICRtYXhfcmVjb25uZWN0OwpteSAkd2FpdF9yZWNvbm5lY3Q7CgojIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENoZWNr
IGNvbW1hbmQgbGluZQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQoKaWYgKGludCBAQVJHViAhPSAxMCkKewogIHByaW50ICJVc2FnZTogcGVybCBm
dHAucGwgPGhvc3Q+IDxwb3J0PiA8bG9naW4+IDxwYXNzd29yZD4gPGZpbGUgcGF0aD4gPGZpbGUg
bmFtZT4gIiAuCiAgICAgICAgIjxjaGVjayBwZXJpb2Q+IDx2YWxpZCBhZ2U+IDxtYXggcmVjb25u
ZWN0PiA8d2FpdCByZWNvbm5lY3Q+XG5cbiI7CiAgZXhpdCAxOwp9CgokaG9zdCAgICAgICAgICAg
PSAkQVJHVlswXTsKJHBvcnQgICAgICAgICAgID0gJEFSR1ZbMV07CiRsb2dpbiAgICAgICAgICA9
ICRBUkdWWzJdOwokcGFzcyAgICAgICAgICAgPSAkQVJHVlszXTsKJHBhdGggICAgICAgICAgID0g
JEFSR1ZbNF07CiRuYW1lICAgICAgICAgICA9ICRBUkdWWzVdOwokY2hlY2tfcGVyaW9kICAgPSAk
QVJHVls2XTsKJHZhbGlkX2FnZSAgICAgID0gJEFSR1ZbN107CiRtYXhfcmVjb25uZWN0ICA9ICRB
UkdWWzhdOwokd2FpdF9yZWNvbm5lY3QgPSAkQVJHVls5XTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgV2FpdCBmb3IgdGhlIGZpbGUgdG8g
YmVjb21lIGF2YWlsYWJsZQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQoKJHJjID0gd2FpdF9mb3JfZmlsZV9mdHAgKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICRob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICRwb3J0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICRsb2dpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFz
cywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhdGgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgJG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoZWNrX3BlcmlvZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAkdmFsaWRfYWdlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICRtYXhfcmVjb25uZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICR3YWl0X3JlY29u
bmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBcJGVyciwgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgMQogICAgICAgICAgICAgICAgICAgICAgICApOwoKaWYgKCRyYyA9PSAtMSkKewog
IHByaW50ICJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciBmaWxlICckcGF0aCcgLT4gJyRuYW1lJyB0
byBiZSBhdmFpbGFibGU6ICRlcnJcblxuIjsKICBleGl0IDE7Cn0KCnByaW50ICJGaWxlICckcGF0
aCcgLT4gJyRuYW1lJyBpcyBhdmFpbGFibGVcblxuIjsKCgoKZXhpdCAwOwo=

--====1060343816====--

Enfin, envoyer la séquence suivante : .

Le script ci-dessous génère le texte qui correspond au contenu di fichier envoyé (partie en bleu, dans l’exemple précédent).


RegExp: "Greedy" et "ungreedy"?

Par défaut, Perl détecte la chaîne la plus longue qui vérifie l’expression régulière. Ce comportement est appelé «greedy match».


RegExp: Détecter des séquences


RegExp: Les éléments détectés

Gestion des signaux

Un script pour renommer des fichiers en masse

Informations sur le fichier courant

Informations le lien symbolique exécuté


ls -l projet/symlink.pl 
lrwxr-xr-x  1 denisbeurive  staff  12  8 nov 12:46 projet/symlink.pl -> test/test.pl	


Résultat :