Perl (langage)
| Image manquante Langage_progr.png image:Langage_progr.png |
| Cet article fait partie de la série Langages de programmation |
| Langages à objets |
| Ada 95 - C++ - C# Common Lisp Delphi - Eiffel - Java Nice - Oz - Python Simula - Smalltalk Visual Basic |
| Langages impératifs |
| APL - ASP - Assembleur BASIC - C - COBOL Forth - FORTRAN - Logo Pascal - Perl - PHP |
| Langages fonctionnels |
| Erlang - Haskell ML/OCaml - Oz Lisp/Common Lisp Scheme |
| Langages déclaratifs |
| Clips - Oz - Prolog |
| Langages concurrents |
| Ada 95 - Erlang Java - Oz |
| Langages balisés |
| HTML - SGML - XML Dialectes XML S-expressions |
| Voir aussi |
| Conception - Codage Tests - Optimisations |
Perl (Practical Extraction and Report Language ou langage pratique d'extraction et de génération de rapports ; ce nom est un rétro-acronyme) est un langage de programmation créé par Larry Wall en 1987 et reprenant des fonctionnalités du langage C et des langages de scripts sed, awk et shell (sh). 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. »
| Sommaire |
Origines et implémentation
Le but
Perl est né du besoin de disposer d'un langage optimisé pour l'extraction d'informations de fichiers textes et la génération de rapports. Voici quelques-unes des devises qui lui sont couramment associées :
- There Is More Than One Way To Do It (TIMTOWTDI) qui pourrait se traduire par Il y a plus d'une façon de le faire.
- Perl : la tronçonneuse suisse des langages de programmation.
- Perl : l'assistant idéal des administrateurs de système.
Sa souplesse autorise l'emploi de plusieurs modèles de programmation : programmation procédurale, programmation fonctionnelle et POO.
- Les puristes moyens de l'OO ne considèrent pas Perl comme un « vrai » langage objet
- les puristes stricts, eux, ne considèrent aucun autre langage que Smalltalk, où tout est objet, comme "vrai" langage objet.
Les moyens
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 »). Perl est considéré surtout comme un langage de script et a été qualifié de "ciment assurant la cohésion du web", étant un des langages CGI les plus populaires. Compte-tenu du rôle qu'a eu Perl dans le développement de la "nouvelle économie", une boutade prêtait à la mairie de New York l'intention de rebaptiser Wall Street du nom de son inventeur, ce qui aurait au moins le mérite de ne pas entraîner du tout de frais pour le contribuable !
Perl a un statut de logiciel libre, distribué sous license artistique et GPL. Perl est porté sur la plupart des systèmes d'exploitation mais excelle particulièrement en environnement POSIX (Cygwin sous Microsoft Windows, Linux, Mac OS X etc.) ; il devient populaire aussi sous Microsoft Windows sans Cygwin grâce à la facilité d'installation de la distribution gratuite ActivePerl (dont la version 5.8 permet l'usage de l'interface graphique) et d'environnements de développement gratuits comme SciTE.
L'intégration dans l'existant
SciTE-PerlTk-François-Dominique.PNG
Les programmes Perl sont intégralement portables entre Linux, Mac OS X (ou autre UNIX) et Windows malgré les désignations de fichiers différentes de ces systèmes (Perl remplace tout seul si besoin les « / » par des « \ »). Un exemple du champ d'action de Perl est son utilisation comme script CGI pour faire tourner Wikipedia jusqu'en janvier 2002. Il constitue en effet un bon langage de prototypage.
Perl permet l'usage du moteur d'interface graphiques Tk pour effectuer des entrées-sorties conformes à l'état de l'art. 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.
Les ressources
Plus de 15 millions de lignes de modules Perl d'utilisation libre, allant des mathématiques avancées aux connexions aux bases de données, en passant par les réseaux, la simulation d'un calculateur quantique et bien davantage, peuvent être téléchargées depuis un réseau de sites appelé CPAN : Comprehensive Perl Archive Network.
Le mécanisme
Bien que Perl profite de la plupart des facilités d'un langage interprété, à proprement parler il n'interprète et n'exécute pas (aucun interpréteur ne le fait, d'ailleurs) le code source une ligne à la fois. Perl compile d'abord le programme entier dans un bytecode intermédiaire (assez dans l'esprit du code objet Java), l'optimisant au passage, et exécute alors ce bytecode. Il est ainsi possible de compiler un programme Perl en bytecode pour s'épargner les phases de compilation lors d'exécutions ultérieures, bien que l'"interpréteur" reste requis pour exécuter ce code.
Les phases de traduction des noms de variables en adresses, traduction de libellés d'opération en code binaire et de traduction en binaire des constantes exprimées en caractères sont d'ailleurs bien connues depuis le milieu du XXe siècle, puisque ce sont très précisément les trois fonctions principales d'un assembleur.
L'avenir proche
Perl 6 est en cours de développement. Il tournera dans la machine virtuelle Parrot. Un canular organisé par l'équipe de direction de l'éditeur O'Reilly avec la complicité de Larry Wall et Guido van Rossum (avec annonce d'un livre imaginaire dont l'annonce donnait le fac-simile) a annoncé à une époque la fusion en un langage unique nommé aussi Parrot de Perl 6 et de Python, à la grande panique de certains aficionados des deux langages.
En parallèle, Autrijus Tang, aidé d'un petit groupe de développeur est en train de développer un interpréteur Perl 6 en Haskell nommé Pugs.
Exemples de code
Certaines personnes affirment avec humour que Perl veut dire '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 on peut le voir dans cet exemple de programme affichant une salutation:
# Un exemple de programme en Perl $message = "A l'endroit : 'camel'.\n"; print $message; $message =~ s/endroit/envers/; $message =~ s/'(\w)(\w)(\w)(\w)(\w)'/'$5$4$3$2$1'/; 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 régulières.
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)
Aspects communautaires
Perl a une base d'utilisateurs vaste et diversifiée. Pour plusieurs types d'utilisateurs du langage, c'est d'ailleurs leur seul point commun. Les administrateurs système en sont friands, les développeurs en apprécient la concision et la puissance, des linguistes et des biologistes - habituellement peu enclins à se pencher sur le code - l'utilisent comme langage de référence dans leurs applications métiers. Perl est particulièrement apprécié en bioinformatique où les programmes font l'objet de remaniements constants.
La base CPAN regroupe et met gratuitement à la disposition des utilisateurs de Perl du monde entier 15,4 millions de ligne de code (juillet 2004) sous forme de modules Perl et de synopsis montrant comment les mettre en œuvre. L'effet boule de neige est indiscutable. La synergie aussi.
Folklore (sans aspect péjoratif)
Rejoignant le langage C sur ce point, les compétitions de code impénétrable sont aussi une composante majeure de la culture Perl. Les scripts JAPH (Just Another Perl Hacker, signifiant Rien d'autre qu'un autre hacker Perl) sont aussi typiques (voir [1]), tout comme les tournois de Golf (voir http://perlgolf.sourceforge.net/ ) où il s'agit de réaliser une tâche avec un programme le plus court possible.
Il a été écrit que PHP (un autre langage de script) veut dire People Hate Perl.
Perl est un des seuls (sinon l'unique) langage informatique permettant de faire de la poésie qui se compile.
Un résumé de Perl effectué sur Usenet
"Perl part du principe que l'on a des noms et que l'on y associe des descriptions. Si on a besoin d'un nom, on l'ajoute et puis voila : c'est réglé on n'en parle plus. Et pour la grammaire, c'est pareil.
Tout le probleme pour l'informaticien est que Perl aborde la programmation comme un enfant aborderait le langage :
Quand l'enfant montre un ballon, on ne lui dit pas : "ceci est une boule creuse dont l'écorce est composée de derivés du petrole raffinés par les industries pétrochimiques et moulé par une usine en Chine où le gouvernement surveille l'Internet, et qu'il a une masse 1kg, et sur la Lune, son poids est moindre que sur Terre en raison de la loi de la gravitation découverte par Newton qui a donné son nom à l'unité de poids en question.
Voila ce que l'on apprend aux informaticiens, voila ce que l'on demande à un langage de programmation : on décrit uniquement - ou au moins majoritairement.
Voilà ce que Perl évite à ses utilisateurs."
Annexes
Bibliographie
- Larry Wall, Tom Christiansen et Jon Orwant (2001), Programmation en Perl, ISBN 2-84177-140-7
Voir aussi
Liens externes
- http://dmoz.org/Computers/Programming/Languages/Perl/ - DMOZ sur Perl
- http://www.perl.org - Portail autour du langage et de ses adeptes (les Perlmongers)
- http://www.pm.org - Site de l'organisation internationale qui fédère tous les groupes d'utilisateurs locaux (formés par les Perlmongers), par exemple : http://london.pm.org
- http://www.mongueurs.net - site des mongueurs, mongers francophones
- http://www.perlmonks.org - Le monastère Perl, un autre site communautaire, mais tourné vers le pratique du langage et le partage de code
- http://activestate.com - ActiveState - Perl gratuit pour les environnement Windows et Linux avec documentation hypertexte.
- http://www.enstimac.fr/Perl/ - documentation Perl francophone
- http://use.perl.org - Site communautaire d'information et de discussion (weblog)
- Labo-Linux: Perl - Introduction au language Perl
- Labo-Linux: Regex - Expressions régulières en Perl
- Labo-Linux: Mails avec Perl - Envoyer des mails avec Perl
- http://pugs.kwiki.org/ - Pugs, un interpréteur Perl 6 en Haskell
