Table des matières

Introduction

1. Contexte

Historique

Perl a été créé en 1987 par Larry Wall. Il en est toujours le concepteur et mainteneur principal, mais 20 ans après il est entouré par une large communauté de hackers qui maintiennent, contribuent et utilisent Perl. Perl n'est pas standardisé, mais il existe un unique interpréteur (écrit en C) qui est diffusé sous licence libre (GPL ou “Artistic”) et porté sur à peu près tout ce qui peut s'assimiler à un ordinateur de près ou de loin.

La version de Perl la plus répandue aujourd'hui est la révision majeure 5, avec Perl 5.0 (sorti en 1994) considéré comme antédiluvien, et Perl 5.8 comme le standard actuel.

Un travail de refonte et d'évolution majeure de Perl (dit version 6) est en cours depuis 2000. Il n'est pas encore abouti, bien que très riche et très avancé.

Philosophie

Perl a été conçu pour traiter des données de façon simple et efficace, et s'est trouvé également pertinent pour de nombreux travaux d'administration système, à l'instar du shell (dont il emprunte de nombreux idiomes).

Perl a été conçu avec quelques principes qui lui sont “propres” :

Perl est - entre autres - un acronyme pour “Practical Extraction and Report Language”.

Les cousins

Perl est très souvent comparé à des langages haut niveau fournissant des services comparables (dans une mesure moindre pour le très spécialisé PHP):

Langage Licence Historique Actualité Environnement
Perl GPL ou Artistic 1987 5.8.x CPAN, 10.000 modules
Python Python (compatible GPL) 1990 2.4.x Pypi, 1300 packages
Ruby GPL ou Ruby 1995 1.8.x Rubyforge, 1500 projets
PHP PHP4 (incompatible GPL) 1995 4.4.x/5.1.x PEAR, 370 packages

2. Utilisation

Installation

Vous êtes sous Unix: c'est déjà fait ! Perl est en effet devenu un composant essentiel de la majorité des systèmes d'exploitation de type Unix. Essayez :

$ perl --version

This is perl, v5.8.8 built for i486-linux-gnu-thread-multi

Copyright 1987-2006, Larry Wall

Par exemple, vous pourrez constater que de nombreux programme importants de votre système GNU/Linux sont écrits en Perl :

$ file /usr/bin/*|grep perl

Vous êtes sous Windows: dommage, ce sera un peu plus compliqué et délicat. Il existe une distribution complète et de bonne qualité : ActiveState Perl. Il vous faudra également faire attention à quelques pièges, consultez les chapitres suivants !

Exécution

Si vous avez un fichier programme.pl qui contient du code Perl (l'extension .pl est optionnelle), il peut simplement s'exécuter ainsi :

 $ perl programme.pl

Il est plus traditionnel de passer par le mécanisme standard d'Unix permettant d'appeler l'interpréteur directement depuis le programme. Il faut alors respecter 2 conditions:

 $ chmod +x programme.pl
* le programme doit commencer par le //shebang// et l'interpréteur, éventuellement avec des options :
 #!/usr/bin/perl -w
 print "Hello world!\n";

On peut alors invoquer le programme ainsi :

 $ ./programme.pl

Pièges

Avec Perl sous Windows, vous devrez faire attention à certains détails qui ne vont pas de soi :

Documentation

La source principale pour un programmeur Perl est CPAN (Comprehensive Perl Archive Network), qui rassemble la documentation, les modules et les différentes informations afférentes à Perl. On l'utilise principalement pour la recherche sur la documentation des très nombreux modules (http://search.cpan.org/).

Dans l'utilisation la plus courante, on a recours aux traditionnelles pages de manuel. Elles sont très nombreuses, et regroupées par section. Les plus utilisées:

3. Le langage

Les variables

Perl utilise 3 types principaux de variables :

   $pi = 3.1416;
   $hello = "Hello world !\n";
   @menu = ( "salade", "nouilles", "yaourt" );
   print $menu[0];
   %menu = ( "entrée" => "salade", "plat" => "nouilles", "dessert" => "yaourt" );
   print $menu{"dessert"};

Les points importants (et parfois suprenants) à noter :

Nous verrons qu'il existe d'autres types spéciaux de variables, comme les descripteurs de fichier et les références.

Boucles, tests

On retrouve une syntaxe similaire au C pour la boucle classique :

   for ($i = 0; $i < 5; $i++) { ... }

Mais on peut aussi facilement parcourir une liste :

   foreach (@menu) { print "au menu: $_\n"; }

Et on a le droit de choisir l'ordre dans lequel on écrit les instructions !

   print "au menu: $_\n" foreach (@menu);

De même pour les tests :

  if ($menu[0]] eq "salade") { print "Encore de la salade!"; }
  print "Encore de la salade!"; if $menu[0] eq "salade";

Les fonctions

Il existe de nombreuses variantes pour déclarer une fonction, la plus courante en Perl étant la plus simple :

  sub somme_entiers {
  return $_[0] + $_[1];
  }
  print somme_entiers(4, 9);

Une fonction n'a pas nécessairement de prototype, et les arguments sont passés à la fonction via la liste @_. Chaque argument est passé par référence et peut donc être modifié par la fonction. Le type de retour est libre, les fonctions en Perl sont polymorphes (on peut renvoyer un entier, une chaîne ou une liste dans une même fonction).

Les expressions régulières

Elles sont partie intégrante de Perl et en fait la particularité la plus notable du langage. Une expression regulière est un mécanisme de recherche et d'extraction d'information dans les chaînes de caractère. Dans le cas le plus simple, on peut simplement vérifier si un mot est présent :

  print "On a un probleme" if $message =~ /erreur/;

On peut également reconnaître un format de chaîne et en extraire certains éléments :

  print somme_entiers($1, $2) if ($message =~ /^somme de (\d+) et (\d+)/) >= 2;

Modules

Perl possède une collection conséquente et centralisée de modules. Ils sont tous documentés et testés. Il est rare de ne pas trouver ce dont on a besoin dans les archives de CPAN.

On peut par exemple aller sur http://cpan.org/ et consulter facilement la documentation d'un module. Comme les pages de manuel, la documentation suit une taxonomie stricte et uniforme. Il y a en particulier toujours un exemple concret d'utilisation du module en début de documentation.

Il existe deux types de modules (ceci étant transparent pour l'utilisateur la plupart du temps) :

On peut bien entendu écrire facilement ses propres modules, soit pour réaliser des bibliothèques, soit pour rédiger un programme de façon modulaire.