Fiche technique | |
---|---|
Type de produit : | Langage de programmation |
Auteur : | Larry Wall |
Date de publication : | 1987 |
Introduction
Le langage de programmation Perl est l'abréviation de «Practical Extraction and Report Language» (soit Langage Pratique d'Extraction et de Rapport en français). Ce langage fut créé par Larry Wall en 1987 en s'inspirant du «AWK».
Ce langage est actuellement utilisé pour les administrateurs systèmes et dans les domaines scientifiques comme la bioinformatique (BioPerl).
Avantages
Le langage de programmation Perl a de nombreuses raisons d'être populaire et recherché. Voici les avantages que procure le langage de programmation Perl :
- Processeur de texte : Comme l'acronyme «Practical Extraction and Reporting Language» suggère que Perl a les capacités de manipulation de texte élevées lui permettant de générer facilement des rapports à partir de différents fichiers texte. En outre, il peut convertir les fichiers sous une autre format. De plus, il offre des possibilités d'inclure des expressions régulières (regex) de façon très poussé.
- Meilleures fonctionnalités contenues : le Perl contient les fonctionnalités de différents langages de programmation et utilitaires comme C, sed, AWK et sh,..., ce qui rend Perl plus utile et productif.
- Administrateur système : en raison des différentes capacités de langage de programmation de type script, le Perl facilite la tâche d'administration du système. Au lieu de devenir dépendant de nombreuses langages, utilisez simplement Perl pour terminer l'ensemble de la tâche d'administration système. En dépit de cet aspect, le Perl est également utilisé dans la programmation Web, l'automatisation Web, la programmation GUI,... Il peut s'avère souvent plus efficace que le langage de programmation PHP pour des traitements de commandes devant être intégré à un site Web.
- Web et Perl : Le Perl peut être intégré dans des serveurs Web et n'est pas uniquement limité au Web, être utiliser pour augmenter sa puissance de traitement et il dispose du module DBI, ce qui rend l'intégration de base de données Web très facile.
- Polyvalence : Le langage de programmation Perl permet de développer des applications console ou terminal, des applications GUI et des applications Web.
- Documentation : La documentation est un point fort du langage de programmation Perl, il offre des possibilité très pousser de manpages et il offre la possibilité d'intégrer des commentaires sur le fonctionnement des routines à la fin des codes sources des modules.
- Syntaxe courte : La syntaxe d'un code source Perl est extrêmement courte. Il n'est pas nécessaire d'avoir des programmes très long pour obtenir un résultat élaboré. De plus, on pourrait également ajouter, qu'un programme avec beaucoup de ligne de code en langage de programmation Perl laisse sous-entendre que le programmeur n'a pas compris la logique du Perl, car tous les concepts retourne vers du code très court.
Programmation
Ce langage de programmation est souvent perçu comme un langage de programmation système, bien qu'il était énormément utilisé pour la génération de page HTML dynamique au début du Web, il est en constante perte de popularité à se niveau. Par contre, les administrateurs systèmes raffole toujours autant de se langage. Bien que le PHP a pris la place de se langage dans le domaine du Web, il est tout de même intéressant de le connaitre, puisque de nombreux hébergeurs de sites PHP, demande des notions d'utilisations de Perl pour les «cronjobs» par exemple. Il a une bonne adaptation avec le système d'exploitation Linux et FreeBSD, comme par exemple, si on veut lancer programme Bonjour en ligne de commande, on procédera comme suit :
perl -w -e 'print("Bonjour\n");' |
De plus, il s'exécute sur presque tous les systèmes d'exploitation : Mac OS X, Windows 2000, Windows XP, Windows Vista, Windows 7, Windows 8, Windows Server 2003, Windows Server 2008, FreeBSD, AIX, HPUX, Solaris (SunOS), SkyOS, Linux, OS/2 Warp 4 et eComStation.
En dehors du fait qu'il a un syntaxe extrêmement courte et une surpuissante des expressions régulières (regex), il en demeure pas moins qu'il a une imposante bibliothèque par l'intermédiaire de (CPAN (http://search.cpan.org/) et PPM), des fonctions et d'utilitaires de toutes sortes. Il est par exemple, possible en Perl d'effectuer la sauvegarde d'un document Excel sans utilisé aucune composante du système d'exploitation Windows.
Autre détail, où de nombreux programmeurs ont tendances à se faire prendre lorsqu'il commence à programmer avec le Perl, c'est la comparaison des chaînes de caractères ne s'effectue pas de la même façon que les valeurs numériques. Prenons par exemple :
- #!/usr/bin/perl
-
- # Les comparaisons de chaine de caracteres se font avec les mots réservés : eq, ne, ge, ...
- if("vrai" eq "vrai") {
- print "chaine vrai vaut vrai\n";
- } else {
- print "chaine vrai vaut faux\n";
- }
-
- # Les comparaisons de valeurs numériques se font avec des symboles : ==, >, <,...
- if(1 == 1) {
- print "nombre 1 vaut 1\n";
- } else {
- print "nombre 1 ne vaut pas 1\n";
- }
Ainsi, les types de données ne s'évalue pas tous de la même façon en Perl, même si l'opérateur «==» est supporté, il n'effectue pas le bon type de comparaison sur une chaine de caractères. Les dernières versions de Perl, retourne une message d'attention lorsqu'une situation comme celle-ci se produit.
Ce qui en fait un langage épouvantable pour certains, c'est le fait que se langage soit compliqué à programmer et sa lisibilité laisse souvent à désirer. Les choix du concepteur de se langage afin qu'il soit rapide même si interprété en font un langage à l'apparence bizarre et parfois carrément ésothérique. Il est, entre autre, assez curieux de constater la façon dont il gère ses remarques documentaires. Lorsqu'on exécute un programme écrit en langage de programmation Perl sous des systèmes d'exploitation Unix, Linux ou FreeBSD, il est fortement recommandé d'ajouter la ligne suivante au début du code source afin que le système comprenne bien qu'il s'agit d'un script Perl :
#!/usr/bin/perl -w |
De plus, en général, le fichier de code source écrit en Perl porte l'extension «.pl».
Liste des versions
Version | Date | Commentaires |
---|---|---|
Perl 1.0 | 18 décembre 1987 | Larry Wall développe la première version du Perl à temps partiel pendant qu'il travail chez Unisys Corporation. |
Perl 2 | 1988 | Amélioration du moteur des expressions régulières (regex). |
Perl 3 | 1989 | Changement mineurs |
Perl 4 | 1991 | Changement mineurs |
Perl 4.036 | 1993 | Changement mineurs |
Perl 5.000 | 17 octobre 1994 | Nouveau moteur d'analyse du langage de programmation Perl. |
Perl 5.001 | 13 mars 1995 | Changement mineurs |
Perl 5.002 | 29 février 1996 | Ajout de nouveaux prototypes. |
Perl 5.003 | 25 juin 1996 | Correctif de sécurité. |
Perl 5.004 | 15 mai 1997 | Inclusion de module universelle. |
Perl 5.005 | 22 juillet 1998 | Amélioration des regex, l'opérateur «qr//», nouveau crochet dans les modules B::*, support pour le système d'exploitation BeOS,... |
Perl 5.5 | 22 juillet 1998 | Changement mineurs |
Perl 5.6 | 22 mars 2000 | La numérotation des versions a été modifiée au format 'revision.version.subversion', la représentation interne des chaînes de caractères est remplacée par UTF-8 et le support EBCDIC n'est plus utilisé, meilleur support de la monnaie, les littéraux de chaîne de caractères peuvent être écrits en utilisant des ordinaux de caractères, nouvelle syntaxe pour les attributs de sous-programme (le pragma «attrs» est maintenant obsolète), prise en charge des fichiers volumineux, prise en charge des nombres binaires, inclusion de la distribution JPL (Java Perl Lingo) dans Perl,... |
Perl 5.8 | 18 juillet 2002 | Prend en charge Unicode 3.2.0, les expressions régulières (regex) fonctionnent maintenant avec Unicode, prise en charge des codages non latins via le module Encode, introduction de processus léger d'interprétation, nouvelle intégration de PerlIO, précision numérique améliorée pour la conversion de nombre de chaînes de caractères via une routine intégrée, support 64 bits finalisé, nouveaux modules : Digest::MD5, File::Temp, Filter::Simple, libnet, List::Util, Memoize, MIME::Base64, Scalar::Util, Storable, Switch, Test::More, Test::Simple, Text::Balanced, Tie::File,... |
Perl 5.10 | 18 décembre 2007 | Prend un charge Unicode 5.0, nouveau pragma feature, nouvelle opérateur //, nouveau mot réservé switch, nouveau say intégré,... |
Perl 5.12 | 2012 | Support du temps après la date de 2037, nouvelle syntaxe permet aux développeurs de spécifier les numéros de version des modules directement dans les instructions «package», Perl avertit maintenant l'utilisateur de l'utilisation de fonctionnalités obsolètes par défaut,... |
Perl 5.14 | 14 mai 2011 | Unicode 6.0 est pris en charge, sémantique Unicode appliquée à toutes les chaînes de caractères, substitution non destructive (s///r), expressions régulières rentrantes, déréférence automatique par les préréglages (supprimés ultérieurement),... |
Perl 5.16 | 20 mai 2012 | Ajout de __SUB__ pour le sous-programme en cours d'exécution (currently-executing) et eval encoding-disambiguated. |
Perl 5.18 | 18 mai 2013 | Ajout d'opérations de jeu de caractères d'expression régulière et sous-routines lexicales (en tant que fonctionnalité expérimentale). |
Perl 5.20 | 27 mai 2014 | Ajout de signatures de sous-programmes et déréférencement Postfix (en tant que fonctionnalité expérimentale), syntaxe de tranche clef/valeur,... |
Perl 5.22 | 1 juin 2015 | Unicode 7.0 est maintenant supporté, les modules historiques CGI.pm et Module::Build ont été supprimés de la distribution principale, ajout de l'opérateur double diamant, opérateurs au niveau des bits désambiguïsés et variable aliasing (à titre expérimental),... |
Perl 5.24 | 8 mai 2016 | Unicode 8.0 est maintenant supporté, nouvelle limite de saut de ligne dans les expressions régulières, les classes de caractères entre crochets étendues fonctionnent dans les environnements locaux UTF-8, définitions plus explicites pour le décalage d'entier, paramètres de précision réordonnés pour printf et sprintf, plus de champs fournis à l'appel en arrière-plan sigaction,... |
Perl 5.26 | 30 mai 2017 | Pour des raisons de sécurité, le répertoire actuel (".") m'est plus inclus par défaut à la fin du chemin de recherche du module (@INC), les sous-routines lexicales ne sont plus expérimentales, indentes Here-documents, nouveaux modificateurs d'expression régulière et groupes de capture, Unicode 9.0 est maintenant supporté, Perl peut maintenant effectuer un classement par défaut dans les paramètres régionaux UTF-8 sur les plates-formes le prenant en charge,... |
Perl 5.28 | 22 juin 2018 | Ajout du support Unicode 10.0, supprime les tranches de hachage clef/valeur, ajout de synonymes alphabétiques d'assertions d'expressions régulières, les scripts Unicode mixtes sont maintenant détectables, montage sur place avec perl safer, initialisation des variables d'état agrégats, numéros d'inode pleine taille, la taille sprintf %j est maintenant disponible avec les compilateurs pre-C99, le drapeau Close-on-exec est fixé de manière automatiquement, les applications locales sont désormais thread-safe sur les systèmes qui les prennent en charge, ajout de la variable en lecture seulement ${^SAFE_LOCALES},... |
... | ... | ... |
Catégorie de fonctions
Enfin, on retrouve comme fonctions de base les suivantes :
- Fonctions trigonométriques : atan2, cos, sin
- Fonctions d'exécution de programme : caller, die, eval, exit, return
- Fonctions de fichiers : binmode, close, closedir, die, eof, fileno, flock, format, getc, print, printf, read, readdir, readlink, rename, rewinddir, seek, seekdir, select, sysread, sysseek, syswrite, tell, telldir, warn et write
- Fonctions de hachage : delete, each, exists, keys, values
- Fonctions de liste de données : grep, join, map, reverse, sort, unpack
- Fonctions mathématique : abs, atan2, cos, exp, hex, int, log, oct, rand, sin, sqrt, srand
- Fonctions de processus : alarm, exec, fork, getpgrp, getppid, getpriority, kill, pipe, setpgrp, setpriority, sleep, system, wait, waitpid
- Fonctions de scalaire et chaine de caractères : chomp, chop, chr, crypt, hex, index, lc, lcfirst, length, oct, ord, pack, reverse, substr, uc, ucfirst
- Fonctions de tableau : pop, push, shift, splice, unshift
- Fonctions de taille fixe et enregistrement : pack, read, sysopen, sysread, sysseek, syswrite, unpack