Perl (langage)

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis Langage Perl)
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir Perl.
Perl
Logo.

Apparu en 1987
Auteur Larry Wall
Développeurs The Perl Foundation
Dernière version 5.18.2 (7 janvier 2014) [+/−]
Version en développement 5.19.9 (20 février 2014) [+/−]
Paradigmes Objet, impératif, fonctionnel
Typage Faible, dynamique
Influencé par C, BASIC, Eiffel, shell, sed, awk
A influencé Ruby, Python, PHP, Perl 6
Implémentations Perl
Système d'exploitation Multi-plate-forme
Licences Licences libres :
- GNU GPL ;
- Artistic License ;
Site web Perl.org

Perl[1] est un langage de programmation créé par Larry Wall en 1987 et reprenant certaines fonctionnalités du langage C et des langages de scripts sed, awk et shell (sh).

C'est un langage interprété, polyvalent et adapté au traitement et à la manipulation de fichiers texte, notamment du fait de l'intégration des expressions régulières dans la syntaxe même du langage. L'association chargée du développement et de la promotion de Perl est The Perl Foundation qui s'intéresse particulièrement au maintien de sa compatibilité descendante[réf. souhaitée]. D'un point de vue juridique, ce langage a un statut de logiciel libre, distribué sous double licence : Artistic License et GPL.

Origines et mises en œuvre[modifier | modifier le code]

Le but[modifier | modifier le code]

Perl est né du besoin de disposer d'un langage optimisé pour l'extraction d'informations de fichiers texte et la génération de rapports. Auparavant, les traitements sur le texte devaient être faits au moyen de scripts shell, en utilisant les programmes sed, awk, grep, cut, test et expr. Beaucoup de limites apparaissaient quand on utilisait cette programmation : format des données d'entrée pas toujours souple, difficulté de passer des données d'un processus à l'autre, lenteur due au lancement de multiples programmes (le coût du lancement d'un processus n'était pas négligeable), dépendance à une mise en œuvre particulière d'une commande, bugs intrinsèques à certains langages (awk ne différencie pas la comparaison de nombres et de chaînes de caractères). Perl regroupe et emprunte sa syntaxe concrète à tous ces mini langages en ajoutant une partie de la syntaxe du C et les fonctions des bibliothèques système en C.

De plus, Perl vise la commodité pour le programmeur (existence de raccourcis qui le font qualifier de langage « diagonal ») plutôt qu'un souhait esthétique d'architecture stricte (langages « orthogonaux »)[réf. souhaitée].

Les moyens[modifier | modifier le code]

Perl est un langage de script multiplate-forme notamment utilisé l'écriture de scripts CGI

Perl est également capable d'exécuter des scripts « in-process » dans un serveur web Apache, grâce à l'extension mod_perl. Cette solution offre des performances équivalentes à celles de PHP, voire de servlets Java.

Perl est porté sur la plupart des systèmes d'exploitation, notamment en environnement POSIX (Linux, * BSD, Mac OS X, Cygwin sous Microsoft Windows avec ActivePerl (dont la version 5.8 permet l'usage de l'Unicode ou de l'interface graphique) et Cygwin. Depuis 2008, une troisième distribution de Perl pour Windows existe : strawberry[2], proche de la distribution Unix originale, avec un compilateur C.

Syntaxe et sémantique[modifier | modifier le code]

Perl est un langage impératif dont la syntaxe est dérivée du langage C et des shells UNIX. Comme en shell, le caractère dièse (#) introduit un commentaire. La syntaxe de Perl est riche ce qui permet d'exprimer de manière concise des expressions qui, dans d'autres langages, nécessiteraient l'usage d'appels à des fonctions de bibliothèques. Le débutant peut cependant se restreindre initialement à un sous-ensemble du langage.

On décrit Perl généralement comme un langage typé dynamiquement[réf. souhaitée], mais Perl est aussi typé statiquement, comportant toutefois peu de types différents. En effet le premier caractère des identificateurs de variable est un caractère non alphanumérique appelé sigil. Comme pour les shells Unix, le sigil dollar ($) dénote une variable scalaire, le sigil arobase (@) désigne une variable tableau et le sigil pourcent (%) un tableau associatif, aussi appelé hashage ou hash. Les tableaux peuvent être utilisés comme des piles ou des files.

print "Hello, world\n";

Perl supporte des déclarateurs qui désignent la portée des variables déclarées :

my $s  = 'toto' ;        # variable scalaire à portée lexicale
local $level += 1;       # variable scalaire avec une valeur à portée dynamique
our @s = (1, $s, 3.14);  # variable tableau globale au module courant

Les sigils permettent de reconnaître les noms de variables dans des chaînes de caractères et d'interpréter ces variables.

    print "la variable toto vaut $toto";

Perl permet de construire des structures complexes et composites sans l'appel explicite de constructeurs d'instances.

    my %a = ( clé1 => [1, 2], clé2 => [3, 4] );

Le module XML::Literal disponible sur le CPAN permet de supporter des littéraux de type XML de manière similaire à l'extension normalisée E4X d'ECMAScript.

La version 5.10[modifier | modifier le code]

À partir de la version la 5.10 de Perl, le langage inclut des fonctionnalités inspirées par le futur Perl 6 comme une structure de contrôle switch et les captures nommées pour l'opérateur match[C'est-à-dire ?]. Ces efforts ont été réalisés dans le but de rendre le langage plus rigoureux, en attendant sa 6e version[réf. souhaitée].

L'intégration dans l'existant[modifier | modifier le code]

Les programmes Perl sont intégralement portables entre GNU/Linux, Mac OS X (ou autre UNIX) et Windows malgré les désignations de fichiers différentes de ces systèmes (Perl remplace au besoin les « / » par des « \ »). Un exemple du champ d'action de Perl est son utilisation comme script CGI pour faire tourner Wikipédia jusqu'en janvier 2002[réf. souhaitée].

Perl permet l'usage du moteur d'interfaces graphiques Tk pour effectuer des entrées-sorties. On désigne parfois l'ensemble sous le nom générique Perl/Tk. L'extension Tk est intégrée à ActivePerl depuis la version 5.8 du langage.

Des interfaces graphiques autres que le vieillissant Tk sont supportées par des bibliothèques de CPAN.

TkZinc apporte un aspect modernisé de Tk. PerlQt supporte Qt 3.x. Gtk2 supporte Gtk 2.x. wxperl supporte wxWidgets. wxWidgets a l'avantage de fournir l’apparence natif du système de fenêtrage utilisé. Sous Mac OS X, CamelBones donne accès à l'API de Cocoa.

Le mécanisme[modifier | modifier le code]

Perl5 est un langage dont la nature hautement dynamique rend assez floue la distinction entre les phases de compilation et d'exécution. De plus, la phase de compilation ne génère pas un bytecode comme c'est le cas de beaucoup d'autres langages interprétés, mais un arbre syntaxique (AST, Abstract Syntax Tree).

En pratique, Perl commence par traduire le code source, instruction par instruction, en AST, qui est par la suite optimisé. Si des instructions sont situées dans un bloc spécial comme BEGIN ou CHECK, elles sont exécutées dès leur compilation (et donc avant que le reste du code source soit compilé). C'est le cas en particulier des modules chargés par l'instruction use. L'AST, par rapport à un AST usuel, à la particularité de contenir déjà les chemins d'exécution. Lors de la phase d'exécution, l'interpréteur suit donc les chemins présents dans l'AST et exécute les instructions restantes[3].

Perl 5 n'utilise donc à aucun moment de bytecode. Le projet de compilation en bytecode commencé lors de Perl 5.005 par Malcom Beattie n'a jamais abouti et n'a jamais été véritablement fonctionnel, et sera donc probablement retiré de Perl 5.10[réf. nécessaire]. Toutefois l'arrivée de Parrot offre une solution.

L'avenir à moyen terme[modifier | modifier le code]

De nombreuses fonctionnalités mises en œuvre par des bibliothèques en Perl 5 seront disponibles nativement en Perl 6[réf. souhaitée]. Ainsi l'analyse syntaxique sera intégrée dans le moteur d'expressions rationnelles. Aujourd'hui, en Perl 5, un analyseur LALR peut s'écrire par le module Parse::Yapp, clone de yacc. Parse::RecDescent est un module qui permet l'écriture d'un analyseur récursif descendant.

Exemples de code[modifier | modifier le code]

Une plaisanterie prétend que Perl serait l'acronyme de 'Pathologically Eclectic Rubbish Lister' (collectionneur pathologique de déchets variés) à cause de l'utilisation intensive de caractères spéciaux chargés de sens dans la syntaxe du langage, comme dans l'exemple suivant :

# Un exemple de programme en Perl
$message = "À l'endroit : 'camel'.\n";
print $message;
$message =~ s/endroit/envers/;
$message =~ s/('\w+')/reverse($1)/e;
print $message;
exit 0

et sa sortie à l'écran :

À l'endroit : 'camel'.
À l'envers : 'lemac'.

Les troisième et quatrième lignes de cet exemple montrent l'usage d'expressions rationnelles.

Ces caractères spéciaux sont liés à la puissance de traitement de Perl :

  • scalaires désignés par $ : $nom = "Toto"; $z=3;
  • tableaux désignés par @, indexés par [] : $nom[95] = "Val d'Oise"; (le 96e élément du tableau est comme les autres un scalaire !)
  • tableaux associatifs ou hashs désignés par %, indexés par {} : $code{"Val d'Oise"} = 95; (leurs éléments sont des scalaires aussi)

Faux amis[modifier | modifier le code]

Certains mots ont un sens différent en Perl que dans la littérature informatique usuelle. Ci-après deux exemples :

  • Une fonction (function) est une fonction prédéfinie par le langage ;
  • Une routine, aussi appelée sous-routine (subroutine en anglais), est une fonction définie dans le programme ou une bibliothèque utilisée.

Aspects communautaires[modifier | modifier le code]

Perl a une base d'utilisateurs vaste et diversifiée. Le langage est apprécié des administrateurs système mais également des développeurs dans le domaine de la bio-informatique où les programmes font l'objet de remaniements constants[réf. souhaitée].

La base CPAN regroupe et met gratuitement à la disposition des utilisateurs de Perl 15,4 millions de lignes de code[n 1] sous forme de modules Perl et de synopsis montrant comment les mettre en œuvre.

En France, les Mongueurs de Perl promeuvent ce langage, notamment via les Journées Perl.

Trivia[modifier | modifier le code]

On écrit généralement le nom de ce langage avec un P majuscule pour désigner le langage et un p minuscule en parlant de l'interpréteur : « seul perl analyse correctement Perl. » Une conséquence est qu'un système de coloration syntaxique d'un programme Perl devrait utiliser l'interpréteur perl pour être totalement correct. En pratique, des modules pur Perl comme Perl::Tidy et PPI arrivent à comprendre correctement la majeure partie du code courant.

Initialement, le concepteur de Perl, Larry Wall, avait prévu de nommer son langage « pearl », d'après une parabole biblique se trouvant relatée dans l'Évangile selon Matthieu (chapitre 13, versets 45 et 46[4]). Malheureusement pour Wall, il existait déjà un langage de programmation dénommé PEARL — pour la programmation multitâche et temps réel. Finalement, Wall changea simplement l'orthographe pour arriver à « Perl ».[réf. souhaitée] Les significations diverses que l'on trouve de nos jours comme le Practical Extraction and Report Language sont simplement des rétroacronymes. [réf. nécessaire]

Black Perl est un poème signé Larry Wall, écrit dans le langage de programmation Perl et dans la langue anglaise.

Logiciels écrits en Perl[modifier | modifier le code]

Annexes[modifier | modifier le code]

Bibliographie[modifier | modifier le code]

Généralités
Ouvrages récents en français
  • Philippe Banquet, Les fondamentaux du langage Perl 5 : Apprentissage par la pratique, Éditions ENI, 2013 (ISBN 2-74607-932-1)
  • Sébastien Aperghis-Tramoni, Philippe Bruhat, Damien Krotkine, Jérôme Quelin, Perl moderne: L'essentiel des pratiques actuelles, Pearson, 2010 (ISBN 2-84177-140-7)
Applications
  • James Tisdall, Introduction à Perl pour la bioinformatique, O'Reilly, (ISBN 2-84177-206-3)

Notes et références[modifier | modifier le code]

Notes[modifier | modifier le code]

  1. En juillet 2004

Références[modifier | modifier le code]

  1. Perl n'est pas un acronyme, d'après la documentation officielle.
  2. [1] Strawberry Perl
  3. perlmod
  4. Société biblique française — Bible • Mat. 13:45 et 46

Voir aussi[modifier | modifier le code]

Sur les autres projets Wikimedia :

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]