Aller au contenu

Perl (langage)

Un article de Wikipédia, l'encyclopédie libre.

Perl
Logo.
Image illustrative de l’article Perl (langage)

Date de première version Voir et modifier les données sur Wikidata
Paradigmes Objet,impératif,fonctionnel,réflexif,procédural,événementiel,générique
Auteur Larry Wall
Développeurs The Perl Foundation
Dernière version 5.40.0 ()[1]Voir et modifier les données sur Wikidata
Version en développement 5.23.2 ()[2],[3]
5.25.10 ()[4],[5]
5.29.7 ()[6],[7]Voir et modifier les données sur Wikidata
Typage Faible,dynamique
Influencé par C,BASIC,Eiffel,shell,sed,awk
A influencé Ruby,Python,PHP,Raku
Implémentations Perl
Écrit en CVoir et modifier les données sur Wikidata
Système d'exploitation Multi-plate-forme
Licences Licences libres:
-GNU GPL;
-Artistic License;
Site web www.perl.orgVoir et modifier les données sur Wikidata

Perl[8]est unlangage de programmationcréé parLarry Wallenpour traiter facilement de l'information de typetextuel.Ce langage,interprété,s'inspire des structures de contrôle et d'impression dulangage C,mais aussi de langages de scriptssed,awket shell (sh).

Il prend en charge lesexpressions régulièresdans sa syntaxe même, permettant ainsi directement des actions sur l'aspect général de séquences de texte.

Une association,The Perl Foundation,s'occupe de son devenir, et entre autres de son éventuel passage de la version 5.x à la version 7[9]— la version 6 initialement envisagée comme le successeur de Perl 5 ayant divergé au point de devenir un langage à part entière nomméRaku.Le statut du langage est celui delogiciel libre,distribué sousdouble licence:Artistic LicenseetGPL.

Origines et mises en œuvre

[modifier|modifier le code]

Perl se propose d'extraire commodément des informations defichiers texteet d'en établir des rapports. Il peut remplacer des scriptsshellainsi que des commandes commesed,awk,grep,cut,testetexpr.Traitant des formats d'entrée non obligatoirement structurés, il évite de passer des données d'unprocessusà l'autre et de rendre ainsi moins lisibles les traitements, auxquels il fournit un cadre unifié. Sasyntaxes'inspire du C, y ajoute la possibilité d'expressions régulières directement dans le langage, et comporte les principales fonctions des bibliothèques système en C.

Il vise aussi la commodité pragmatique 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 »)[10].

Perl,multiplate-forme,est utilisé entre autres pour l'écriture de scriptsCGIet le traitement de fichiers de log. Il permet aussi d'ajouter des «in-process» dans unserveurwebApache, grâce à l'extensionmod_perl,à l'instar dePHPou deservletsJava.

On le trouve ou lecompilefacilement sur la plupart dessystèmes d'exploitation,notamment en environnementPOSIX:GNU/Linux,*BSD,Mac OS XetCygwinsousMicrosoft Windowsavec ActivePerl — dont la version 5.8 permet l'usage de l'Unicodeou de l'interface graphique. Depuis la disponibilité deWindows Subsystem for Linux(WSL) sous Windows 10, il est aussi utilisable dans une fenêtrebashsous Windows.

Depuis 2008 existe Strawberry[11]pour Windows, proche de la distribution Unix originale, avec uncompilateurCet disponible en version 32 et 64 bits ainsi qu'en version portable (sans installation).

Syntaxe et sémantique

[modifier|modifier le code]

Perl est unlangage impératifproche de C et desshellsUNIX. Comme en shell, lecaractèrecroisillon(#) introduit uncommentaireet le retour à la ligne le termine. Il est également possible d'utiliserPODpour écrire un commentaire sur plusieurs lignes.

# Je suis un commentaire classique

my$variable=1;# Je suis un commentaire après une ligne de code

=for comment

Je suis un commentaire
sur plusieurs lignes.

=cut

Lasyntaxede Perl lui permet d'exprimer de manière concise dans le langage même des expressions sans appels de fonctions debibliothèques,donc de façon plus lisible. Le débutant peut facilement n'utiliser qu'un sous-ensemble du langage.

Perl esttypé statiquementde façon simple: le premier caractère d'unidentificateurde variable est un caractère nonalphanumériqueappelésigil:

  • le sigil dollar$dénote une variablescalaire(comme pour les shells Unix)
$a=42;# Affectation de '42' à la variable 'a'
$b='réponse: ';# Affectation d'une chaîne de caractère à 'b'
print"$b",$a*$a;# Affiche 'réponse: 1764'
@a=('lun','mar','mer','jeu','ven','sam','dim');# Affecte une liste à la variable tableau 'a'
print$a[2];# Affiche 'mer' (l'indexation commence à zéro)

# récupération de plusieurs éléments ou d'une tranche d'un tableau
my@b=@a[2,4];# @b = ( 'mer', 'ven' )
my@c=@a[2..4];# @c = ( 'mer', 'jeu', 'ven' )
  • le sigil pour cent%désigne untableau associatif,aussi appeléhashageouhash et est indexé par{}
%a=(# Création d'une table de hachage clef => valeur
John=>'Sheridan',
Londo=>'Mollari',
Kosh=>'Naranek'
);
print$a{Londo};# Affiche 'Mollari'

Contrairement àPerl 6le sigil $ est utilisé lors de l'appel d'un élément d'un tableau ou d'un élément de hash. Cela vient du fait qu'on appelle généralement un élément scalaire. Exemple:

$a[2];# Appel d'un élément de tableau/liste
$a{John};# Appel d'un élément de table de hash

Les trois types de variables du même nom peuvent coexister:

$a='rien';# scalaire contenant la chaine 'rien'
@a=1..5;# tableau contenant les chiffres '1, 2, 3, 4, 5'
%a=(# table de hash contenant 3 paires de clef => valeur
John=>'Sheridan',
Londo=>'Mollari',
Kosh=>'Naranek'
);

Perl accepte des déclarateurs indiquant laportéedesvariablesdéclarées:

my$toto='rien';# 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 ne requiert pas deconstructeursd'instances.

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

Le moduleXML::Literaldisponible sur leCPANpermet de supporter des littéraux de typeXMLde manière similaire à l'extension normaliséeE4Xd'ECMAScript.

La version 5.10 et le futur de Perl

[modifier|modifier le code]

Depuis sa version 5.10, le langage inclut des fonctionnalités destinées à l’origine à ce qui devait être le futur Perl 6, comme une structure de contrôleswitchet les captures nommées pour l'opérateurmatch(c'est-à-dire la possibilité de nommer génériquement des éléments traités au vol). La6eversion du langage,annoncée en 2001, est disponible depuis[12].En,« Perl 6 » est finalement renomméRakupour éviter toute confusion avec Perl 5 et entériner le fait d’avoir deux langages distincts. En,la communauté pilotant Perl décide que la prochaine version majeure de Perl sera finalement nommée Perl 7[9].

L'intégration dans l'existant

[modifier|modifier le code]

Les programmes Perl sont intégralement portables entreGNU/Linux,Mac OS X(ou autreUNIX) etWindowsmalgré les désignations de fichiers différentes de ces systèmes (Perl remplace au besoin les «/» par des «\», voire des « \\ »).

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

Des interfaces graphiques plus commodes que Tk sont aussi proposées par des bibliothèques deCPAN.

TkZincapporte un aspect modernisé de Tk.PerlQtsupporteQt3.x.Gtk2supporteGtk2.x.wxperlsupportewxWidgets.wxWidgets a l'avantage de fournir l’apparence native dusystème de fenêtrageutilisé. SousMac OS X,CamelBonesdonne accès à l'API deCocoa.

Le mécanisme

[modifier|modifier le code]

Perl5, bien qu'interprété, ne réanalyse pas ses instructions chaque fois qu'il les exécute. Sans créer unbytecodecomme d'autres langages interprétés, il effectue une passe d'assemblagequi traduit les constantes, remplace les variables par des adresses internes et construit un arbre syntaxique (AST,Abstract Syntax Tree).

Lecode sourceest traduit instruction par instruction en AST, par la suite optimisé. Si des instructions sont situées dans un bloc spécial commeBEGINouCHECK,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'instructionuse.L'AST, par rapport à un AST usuel, a 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[13].

Perl 5 n'utilise à aucun moment de bytecode. Le projet de compilation en bytecode commencé lors de Perl 5.005 par Malcom Beattie n'a jamais abouti. L'arrivée deParrotpeut cependant offrir une nouvelle solution.

L'avenir à moyen terme

[modifier|modifier le code]

Plusieurs fonctionnalités des bibliothèques de Perl 5 seront intégrées dans Perl 6: ainsi l'analyse syntaxiquesera intégrée dans le moteur d'expressions rationnelles. Aujourd'hui, en Perl 5, un analyseur LALR peut s'écrire par le moduleParse::Yapp,clone deyacc.Parse::RecDescentest un module qui permet l'écriture d'un analyseur récursif descendant.

Exemples de code

[modifier|modifier le code]

Une plaisanterie récurrente présente Perl comme acronyme de 'Pathologically Eclectic Rubbish Lister' (collectionneur pathologique de déchets variés) en référence à ses caractères spéciaux chargés de sens dans lasyntaxedu 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;
exit0

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.

Exemple classique:

print"Hello World\n";# Affiche 'Hello World' suivi d'un retour à la ligne

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

  • Unefonction(function) est unefonctionprédéfinie par le langage;
  • Uneroutine,aussi appeléesous-routine(subroutineen 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, mais de plus en plus concurrencée par celles dePHP,Python,Ruby,JavaScript,etc. Le langage est apprécié des administrateurs système mais également des développeurs dans le domaine de labio-informatiqueoù les programmes font l'objet de remaniements constants[14].

La baseCPANregroupe et met gratuitement à la disposition des utilisateurs de Perl15,4 millions de lignes de code[n 1]sous forme demodulesPerl et desynopsismontrant comment les mettre en œuvre.

En France, l'association desMongueurs de Perlpromeut ce langage, notamment via les Journées Perl.

On écrit généralement le nom de ce langage avec unPmajusculepour désigner le langage et unpminusculeen parlant de l'interpréteur:« seul perl analyse correctement Perl. » Une conséquence est qu'un système decoloration syntaxiqued'un programme Perl devrait utiliser l'interpréteur perl pour être totalement correct. En pratique, des modules pur Perl commePerl::TidyetPPIarrivent à 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 parabolebibliquese trouvant relatée dans l'Évangileselon Matthieu (chapitre 13, versets 45 et 46[15]). Il existait déjà un langage de programmation dénommé PEARL — pour la programmation multitâche et temps réel. Wall changea donc l'orthographe en « Perl »[16].Les significations diverses que l'on trouve de nos jours comme lePractical Extraction and Report Languagesont simplement desrétroacronymes.[réf. nécessaire]

Black Perlest 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]

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(ISBN2-74607-932-1)
  • Sébastien Aperghis-Tramoni, Philippe Bruhat, Damien Krotkine, Jérôme Quelin,Perl moderne: L'essentiel des pratiques actuelles,Pearson, 2010(ISBN2-84177-140-7)
Applications
  • James Tisdall,Introduction à Perl pour la bioinformatique,O'Reilly,(ISBN2-84177-206-3)

Notes et références

[modifier|modifier le code]
  1. En juillet 2004.
  1. aetbGraham Knop, «perl v5.40.0 is now available»,(consulté le)
  2. (en)«perl-5.23.2 is now available!»
  3. «Release 5.23.2»,(consulté le)
  4. «http://www.nntp.perl.org/group/perl.perl5.porters/2017/02/msg243172.html»
  5. «Release 5.25.10»,(consulté le)
  6. «Perl 5.29.7 has been released.»(consulté le)
  7. «Release 5.29.7»,(consulté le)
  8. Perl n'est pas un acronyme, d'après la documentation officielle.
  9. aetb(en)«Announcing Perl 7»(consulté le)
  10. (en)«For and foreach...».
  11. [1]StrawberryPerl.
  12. «Rakudo/rakudo», surGitHub(consulté le).
  13. (en)«perlmod»,perldoc.perl.org.
  14. (en)«Perl and Bioinformatics»,perlmonks.org, 15 février 2010.
  15. Société biblique française — Bible • Mat. 13:45 et 46.
  16. (en)MarjorieRichardsonLarry Wall, the Guru of Perl», surLinux Journal,(consulté le)

Sur les autres projets Wikimedia:

Articles connexes

[modifier|modifier le code]

Liens externes

[modifier|modifier le code]