Perl (langage)

Page d'aide sur l'homonymie Pour les articles homonymes, voir Perl.
Perl
Logo.
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.24 () [1] Voir et modifier les données sur Wikidata
Version en développement 5.23.2 () [2] Voir et modifier les données sur Wikidata
Typage Faible, dynamique
Influencé par C, BASIC, Eiffel, shell, sed, awk
A influencé Ruby, Python, PHP, Perl 6
Implémentations Perl
Écrit en C Voir 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.org Voir et modifier les données sur Wikidata
Extension de fichier pl, pm et cgi Voir et modifier les données sur Wikidata

Perl [3] est un langage de programmation créé par Larry Wall en 1987 pour traiter facilement de l'information de type textuel. Ce langage, interprété, s'inspire des structures de contrôle et d'impression du langage C, mais aussi de langages de scripts sed, awk et shell ( sh).

Il prend en charge les expressions régulières dans 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 6. Le statut du langage est celui de logiciel libre, distribué sous double licence : Artistic License et GPL.

Origines et mises en œuvre

Le but

Perl se propose d'extraire commodément des informations de fichiers texte et d'en établir des rapports. Il peut remplacer des scripts shell ainsi que des commandes comme sed, awk, grep, cut, test et expr. Traitant des formats d'entrée non obligatoirement structurés, il évite de passer des données d'un processus à l'autre et de rendre ainsi moins lisibles les traitements, auxquels il fournit un cadre unifié. Sa syntaxe s'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 ») [4].

Les moyens

Perl, multiplate-forme, est utilisé entre autres pour l'écriture de scripts CGI et le traitement de fichiers de log. Il permet aussi d'ajouter des « in-process » dans un serveur web Apache, grâce à l'extension mod_perl, à l'instar de PHP ou de servlets Java.

On le trouve ou le compile facilement 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 existe strawberry [5] pour Windows, proche de la distribution Unix originale, avec un compilateur C.

Syntaxe et sémantique

Perl est un langage impératif proche de C et des shells UNIX. Comme en shell, le caractère dièse (#) introduit un commentaire. La syntaxe de Perl lui permet d'exprimer de manière concise dans le langage même des expressions sans appels de fonctions de bibliothèques, donc de façon plus lisible. Le débutant peut facilement n'utiliser qu'un sous-ensemble du langage.

Perl est typé statiquement de façon simple : le premier caractère d'un identificateur 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, point commun avec javascript.

print "Hello, world\n";

Perl accepte des déclarateurs indiquant 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 ne requiert pas 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

Depuis sa version 5.10, le langage inclut des fonctionnalités destinées au futur Perl 6, comme une structure de contrôle switch et les captures nommées pour l'opérateur match (c'est-à-dire la possibilité de nommer génériquement des éléments traités au vol). La 6e version du langage, annoncée depuis 2001, attend toujours sa finalisation complète en 2014.

L'intégration dans l'existant

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 « \ », voire des « \\ »). Ce langage fut utilisé 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 plus commodes que Tk sont aussi proposé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

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

Le code source est traduit instruction par instruction en AST, 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, 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 [6].

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 de Parrot peut cependant offrir une nouvelle solution.

L'avenir à moyen terme

Plusieurs fonctionnalités des bibliothèques de Perl 5 seront intégrées dans Perl 6 : 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.

Other Languages
Alemannisch: Perl
العربية: بيرل
azərbaycanca: Perl
žemaitėška: Perl
беларуская: Perl
català: Perl
کوردیی ناوەندی: پێرڵ (وێب داڕشتن)
čeština: Perl
dansk: Perl
Ελληνικά: Perl
English: Perl
Esperanto: Perl
español: Perl
eesti: Perl
euskara: Perl
فارسی: پرل
suomi: Perl
Gaeilge: Perl
galego: Perl
ગુજરાતી: પર્લ
עברית: Perl
हिन्दी: पर्ल
hrvatski: Perl
Հայերեն: Perl
Bahasa Indonesia: Perl
italiano: Perl
日本語: Perl
ქართული: პერლი
ಕನ್ನಡ: ಪರ್ಲ್
한국어:
Kurdî: Perl
Latina: Perl
lietuvių: Perl
latviešu: Perl
മലയാളം: പേൾ
Bahasa Melayu: Perl
မြန်မာဘာသာ: Perl
नेपाल भाषा: पर्ल
norsk nynorsk: Perl
norsk bokmål: Perl
Deitsch: Perl
polski: Perl
português: Perl
română: Perl
русский: Perl
саха тыла: Perl
Scots: Perl
srpskohrvatski / српскохрватски: Perl
Simple English: Perl
slovenčina: Perl
slovenščina: Perl
shqip: Perl
svenska: Perl
தமிழ்: பெர்ள்
Türkçe: Perl
українська: Perl
اردو: پرل
Tiếng Việt: Perl
中文: Perl
Bân-lâm-gú: Perl
粵語: Perl