Introduction à la programmation en Perl

ou comment débuter en Perl

Auteur: Sylvain Lhullier

Version 1.0.5   21 novembre 2004

Vous trouverez le dernière version de ce document à cette adresse : http://sylvain.lhullier.org/publications/perl.html Ce document est y disponible en version HTML, PDF et sources DocBook.

Permission est accordée de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultérieure publiée par la Free Software Foundation. Pas de section inaltérable. Pas de texte de première page de couverture. Pas de texte de dernière page de couverture.

Vous trouverez le texte officiel de la FDL à l'adresse : http://www.gnu.org/licenses/fdl.html

Une traduction non-officielle en français peut être lue à l'adresse : http://cesarx.free.fr/gfdlf.html


Introduction

Voici un cours introductif à la programmation en Perl. Il est issu de la série d'articles que j'ai écrits pour GNU/Linux & Hurd Magazine France entre juillet 2002 et février 2003.

Ce langage très riche et puissant est une boîte à outils fort utile dans de nombreuses situations : administration système, manipulation de textes (mail, logs, linguistique, génétique), programmation réseau (CGI, mod_perl, etc), bases de données, interfaces graphiques etc. Ses nombreuses bibliothèques le rendent vite irremplaçable aux yeux de ceux qui en acquièrent la maîtrise. La prise en main du langage est facilitée par de nombreux rapprochements possibles avec le C, le shell ou awk. Sa conformité POSIX en fait un allié indispensable à l'administrateur système.

Ce document a la délicate ambition de s'adresser à la fois au programmeur débutant et à celui qui connaîtrait bien le C ou le shell. Que le premier me pardonne de faire des comparaisons avec d'autres langages et de taire peut-être certains points qui me semblent évidents. Que le second m'excuse de passer à son goût trop de temps à expliquer des notions qui lui semblent simples ; les choses se corseront au fur et à mesure de la lecture ...

Le début du document aborde des notions importantes en Perl et nécessaires pour bien comprendre la suite. Vous serez sans doute un peu déçu de ne pas faire des choses extrêmement puissantes immédiatement, mais patience : qui veut aller loin ménage sa monture.

Pour vous mettre en appétit, voici un petit exemple de la concision de Perl et de sa puissance :

my @r = qw(Un programme Perl est 5 fois plus rapide a ecrire);
map { tr/A-Z/a-z/; s/\d//g; } @r;
foreach (sort grep !/^$/, @r) { print "$_\n"; }

Ce programme créé une liste de mots (la phrase de la première ligne), transforme les majuscules de ces mots en minuscules, supprime les chiffres appartenant aux mots, supprime les mots vides et affiche la liste des mots ainsi transformés dans l'ordre lexical. Et dites-vous que vous aurez en main toutes les notions nécessaires avant la fin de la lecture du document ...

Perl est un langage de haut niveau, qui a la prétention de combiner les avantages de plusieurs autres langages. Première facilité, il gère lui même la mémoire (ramasse-miettes, pas de limite de buffers, pas d'allocation à faire etc). De plus, les tableaux, les listes et les tables de hachage sont natifs, ils sont intégrés à la grammaire même du langage. Récursivité, modularité, programmation objet, accès au système et au réseau, interface avec le C, avec (g)Tk, avec Apache sont aussi au menu. Et souvenez-vous que l'une des devises de Perl est : there is more than one way to do it (il y a plus d'une façon de le faire).

Table des matières

1. Premiers pas
1.1. Exécuter un programme en Perl
1.2. Les types de données
1.3. La notion de contexte
2. Les scalaires
2.1. Les délimiteurs de chaînes de caractères
2.2. Déclaration et utilisation des variables
2.3. La valeur undef
2.4. Opérateurs, fonctions et contexte numériques
2.5. Opérateurs, fonctions et contexte de chaînes
2.6. Les opérateurs de test
3. Structures de contrôle
3.1. Les instructions de test
3.2. Les boucles
3.3. Un exemple
4. Listes et tableaux
4.1. Valeurs de listes
4.2. Manipulation de tableaux
4.3. Affectations
4.4. Multi-déclaration
4.5. Retour sur l'aplatissement des listes
4.6. Absorption d'une liste par un tableau
4.7. La structure de boucle foreach
4.8. Fonctions de manipulation de tableaux
4.9. L'opérateur qw
5. Écrire une fonction
5.1. Déclaration
5.2. Appel
5.3. Visibilité des variables
5.4. Une liste pour valeur de retour
5.5. Premier exemple de fonction
5.6. Autre exemple : une fonction récursive
6. Autres fonctions sur les listes
6.1. Joindre les éléments dans une chaîne avec join
6.2. Découper une chaîne de caractères en liste avec split
6.3. Trier une liste avec sort
6.4. Sélectionner des éléments avec grep
6.5. Appliquer un traitement à tous les éléments avec map
6.6. Un exemple : le crible d'Ératosthène
7. Tables de hachage
7.1. Déclaration et initialisation
7.2. Accéder à un élément
7.3. Parcours
7.4. Autovivification
7.5. Existence et suppression d'une clef
7.6. Tables de hachage et listes
7.7. Exemples
8. Tranches
8.1. Tranches de tableau
8.2. Tranches de table de hachage
9. Manipulation des fichiers
9.1. Opérateurs sur les noms de fichier
9.2. La fonction glob
9.3. Premiers exemples
9.4. Ouverture de fichier
9.5. Lecture, écriture et fermeture de fichier
9.6. Deuxième exemple
9.7. Exécution de commandes avec open
9.8. Écrire une table de hachage sur disque avec les fichiers DBM
10. Expressions régulières
10.1. Fonctionnalités
10.2. Bind
10.3. Caractères
10.4. Ensembles
10.5. Quantificateurs
10.6. Ensembles (suite)
10.7. Regroupement
10.8. Alternatives
10.9. Assertions
10.10. Références arrières
10.11. Variables définies
10.12. Valeurs de retour de m//
10.13. Exemples de problèmes
10.14. Solutions des problèmes
10.15. Choisir son séparateur
10.16. Options
10.17. Quantificateurs non-gourmands
10.18. Substitution de variables dans les motifs
10.19. Opérateur tr
10.20. Un dernier mot sur les expression régulières
11. Références
11.1. Références sur scalaire
11.2. Utilisation des références sur scalaire
11.3. Références sur tableau
11.4. Références sur table de hachage
11.5. Réflexions à propos des références
11.6. Références anonymes vers scalaire
11.7. Références anonymes vers tableau
11.8. Références anonymes vers table de hachage
11.9. Références anonymes diverses
11.10. L'opérateur ref
11.11. Références circulaires
11.12. Références sur fichiers
11.13. Références sur fonctions
11.14. Un dernier mot sur les références
12. Utilisation de modules
12.1. Utilisation d'un premier module
12.2. D'autres modules
12.3. Où trouver les modules ?
13. Écrire un module
13.1. Premier exemple
13.2. Et les variables ?
13.3. De la dernière ligne d'un module
13.4. Répertoires
13.5. Blocs BEGIN et END
13.6. Introduction à l'export de symboles
13.7. Export par défaut de symboles
13.8. Export individuel de symboles
13.9. Export par tags de symboles
13.10. Exemple complet d'exports
13.11. Fonctions inaccessibles
13.12. Documentation des modules
13.13. Un dernier mot sur les modules
14. Programmation objet
14.1. Vous avez dit objet ?
14.2. Préparatifs
14.3. Écrire un constructeur
14.4. Appeler le constructeur
14.5. Manipulations de l'objet
14.6. Plusieurs constructeurs
14.7. Écrire une méthode
14.8. Reparlons des champs
14.9. Composition
14.10. Destruction d'un objet
14.11. Héritage
14.12. Classes d'un objet
14.13. Champs et méthodes statiques
14.14. Exemple complet

Conclusion

Nous sommes ici au terme de ce cours introductif à la programmation en Perl. Vous avez maintenant en main la plupart des concepts et des notions pour être autonome en Perl.

N'oubliez pas que la documentation de Perl est très bien faite et est disponible sur votre ordinateur au moyen de la commande perldoc : perldoc perl vous donne accès à la liste des thèmes consultables avec perldoc. Par exemple perldoc perldata vous explique les structures de données en Perl. Pour une fonction particulière, utilisez l'option -f : perldoc -f chomp Pour un module particulier, utilisez perldoc sans option : perldoc Data::Dumper

Vous avez maintenant en main beaucoup de notions importantes de Perl. À vous de les mettre en oeuvre pour vos propres problèmes. Il n'est pas forcement facile d'exprimer son besoin en termes directement exploitable dans un langage particulier, mais en ayant un peu d'expérience de Perl, vous trouverez vite votre manière de résoudre un problème. Vous allez alors commencer à faire connaissance avec Tim Towtdi (There is more than one way to do it). ;-)

L'auteur

Sylvain Lhullier < mon adresse courriel > http://sylvain.lhullier.org/

À l'Université de Marne-la-Vallée (http://www.univ-mlv.fr/), il est chargé chaque année d'un module complet d'enseignement en maîtrise informatique ; ce module porte sur des sujets tels que Perl, Perl/Tk, Perl/DBI, Apache, CGI/Perl et consiste en dix semaines d'un cours en amphithéatre et de trois travaux dirigés, ainsi qu'en un examen final et un projet.

Il a travaillé pour Linagora (http://www.linagora.com/) comme consultant formateur et développeur ; il intervenait principalement pour des projets et prestations concernant le développement (Perl, Java, C++, programmation système, PHP, Apache, MySQL, XML etc.).

Il a développé chez feue-Atrid des projets bâtis en Perl (LogTrend, Mioga) et publiés sous GPL.

Il a donné une conférence "Perl : pour quoi faire ?" lors du salon LinuxSolutions de janvier 2004.

Entre autres associations, il est membre et administrateur de l'association "Les Mongueurs de Perl" dont l'objet est de promouvoir le langage Perl en France par des réunions, des conférences etc (http://www.mongueurs.net/). Il y coordonne le groupe de travail "Articles" dont le but est de publier un article dans la presse francophone technique, notamment dans GNU/Linux & Hurd Magazine France (http://www.linuxmag-france.org/) chaque mois. L'auteur tient à remercier très chaleuseusement les autres membres de l'association pour leur aide, leur soutien et les relectures effectuées.