Practical Extraction and Report Language
langage interprété et dynamique
libre : GNU GPL et Artistic License
créé en 1987 par Larry Wall
Caractéristiques :
lunettes carrées
moustache
chemise hippie
Perl 1.000 - 1987
Perl 3.000 - 1989
Perl 4.000 - 1991
Perl 4.036 - 1993
Perl 5.000 - 1994
Perl 5.001 - 1995
Perl 5.002 - 1996
Perl 5.003 - 1996
Perl 5.004 - 1997
Perl 5.005 - 1998
Perl 5.6 - 2000
Perl 5.8 - 2002
à l'origine, langage de glue
intermédiaire entre le shell, awk
, sed
d'un côté et C de l'autre
ajouts de langages fonctionnels comme Lisp
maintenant, langage dynamique généraliste
extrêmement portable
très stable
multi-paradigmes : impératif, fonctionnel, orienté objet
types de base : scalaire (chaîne, nombre), tableau, hash
gestion de mémoire par ramasse-miettes
expressions régulières
OO : surcharge d'opérateur, fermetures
Unicode
threads
faiblement typé
très (trop) permissif
paradigme objet très (trop) simple
ramasse-miettes par comptage de références
syntaxe devenue lourde pour certaines opérations
Comprehensive Perl Archive Network
collection centralisée et distribuée de modules
4.0 Go, plus de 12500 modules, plus de 6000 auteurs
253 miroirs
« CPAN is the language, Perl is just its syntax » - Audrey Tang
véritable richesse de Perl
XML
XML::LibXML
, XML::LibXSLT
, XML::Twig
, XML::SAX
XML::Simple
, XML::Tiny
sérialisation
Storable
YAML
, YAML::Syck
, YAML::XS
, YAML::Any
JSON
, JSON::Syck
, JSON::XS
, JSON::Any
courriel
MIME::Lite
, MIME::Parser
, Mail::Box
Email::Simple
, Email::MIME
, Email::Folder
et tous les
modules du Perl Email Project
Net::SMTP
, Net::POP3
, Net::IMAP
, IMAP::Admin
web
LWP::UserAgent
, LWP::Simple
HTTP::Daemon
, HTTP::Server::Simple
, HTTP::Server::Brick
HTML
HTML::Parser
, HTML::TreeBuilder
, HTML::PrettyPrinter
,
webService::Validator::HTML::W3C
protocoles réseau
Net::FTP
, Net::SSH
, Net::SCP
, Net:LDAP
, Net::NNTP
,
Net::RADIUS
, Net::TacacsPlus
, Net::SIP
Net::DNS
, Net::Ping
, Net::DHCP
réseau bas niveau
Net::Pcap
, Net::Frame
, Net::Packet
bases de données
DBI
MySQL, PostgreSQL, SQLite, Oracle, JDBC, ODBC, Sybase, ADO DB, Unify et encore plus...
DBI::Proxy
, DBD::Gofer
DBIx::Simple
ORM
Class::DBI
, DBIx::Class
Tangram
, Alzabo
, Rose::DB::Object
, DBIx::DataModel
templates
HTML::Template
, Petal, Mason, Template Toolkit
frameworks web modernes
Maypole, Catalyst, Jifty
langages
Inline : C, Java, Python, Ruby, Tcl, Befunge, Lua
bibliothèques externes
XS
SWIG
P5NCI
interfaces graphiques
Tk, Gtk, WxWidgets, Qt, Prima
GUI natives : Win32, Aqua (Mac OS X), X11
images
GD
, Image::Magick
, Gimp
, Imager
archivage
Archive::Tar
, Archive::Zip
, Compress:Zlib
, Compress:Bzip2
Rational ClearCase (gestion de configuration) et ClearQuest
SysTran (logiciel de traduction linguistique)
Request Tracker, OTRS, Bugzilla (gestionnaires de bugs)
SlimServer (logiciel pilotant les systèmes musicaux sans fil de Slim Devices / Logitech)
Movable Type (plateforme de publication pour entreprises)
Blosxom (blog et gestion de contenu)
Koha (gestion de bibliothèque)
TWiki, Kwiki, MojoMojo (wikis)
SVK (système de contrôle de version)
Swish-e, Plucene (moteurs d'indexation)
Sympa (gestionnaire de listes de diffusion)
SpamAssassin (filtre courriel)
Open Webmail
Webmin (administration de systèmes par interface web)
DrakX, Urpmi (installation et gestion des paquets sous Mandriva)
BackupPC (sauvegarde)
Frozen-Bubble (jeu d'arcade)
sites web :
Amazon, eBay, Price Minister, ShopZilla, Ticket Master, Booking, IMDb, Yahoo!, Slashdot, Live Journal, Friendster, Flickr, Google
banques :
Citigroup, Morgan Stanley, Deutshe Bank, Bank of America, UBS (Union de Banques Suisses), BNP Paribas
médias :
AFP (Agence France Presse), BBC
organismes gouvernementaux :
NASA, ESA, Météo France, Institut Météorologique Norvégien
opérateurs et associés :
France Télécom - Orange, Free Télécom, Vodafone, Sifira, OVH, Gandi, VeriSign
une version majeure : Perl 5.10
un nouveau langage : Perl 6
très (trop) longtemps en développement
à cause de la stabilité de Perl 5.8
disponible d'ici très peu de temps
« After lunch, before Christmas »
plusieurs parties internes restructurées
ajout de protections préventives
consommation mémoire moindre
moteur d'expressions régulières dérécursé
certaines fonctionnalités de Perl 6
defined-or
avant : $a || $b
et si $a == 0
? => incorrect
d'où : defined $a ? $a : $b
maintenant : $a // $b
et surtout : $var //= $default
tests sur les fichiers empilables
avant : -f $file and -w $file
maintenant : -f -w $file
smart match
opérateur ~~
permet de comparer magiquement
cf. perlsyn
smart switch
basé sur le smart match
given ($var) { when (undef) { say '$var non défini' } when (@array) { say '$var est dans @array' } when (%hash) { say '$var est une clé de %hash' } when (\&code) { say 'code($var) est vrai' } when (qr/../) { say '$var correspond à la regexp' } default { ... } }
nouveautés non activées par défaut
use features
use features ':5.10'
pour toutes les activer
ainsi que use 5.010
ainsi que perl -E ...
Perl à la traîne derrière PCRE
intégration de leurs fonctionnalités
ajout de nouvelles
correction de bugs
moteur dérécursé
optimisations : trie, Aho-Corasick
moteur interchangeable
quantifieurs possessif : ?+
, *+
, ++
, {n,m}+
comme le quantifieur avide, mais ne rend jamais
exemple : "aaaa" =~ /a++a/
échoue
buffers de capture
nouvelle manière de référencer : \g{n}
avant : /(\w+) \1/
maintenant : /(\w+) \g{-1}/
buffers de capture nommés
stockés dans %+
(dernière capture) et %-
(toutes les captures)
exemple :
/(?<name> \w+) = (?<value> \w+)/; $name = $+{name}; $value = $+{value};
nouveaux verbes de contrôle du retour arrière (backtracking)
(*FAIL) (*ACCEPT) (*PRUNE) (*PRUNE:NAME) (*MARK) (*MARK:NAME) (*:NAME) (*SKIP) (*SKIP:NAME) (*THEN) (*THEN:NAME) (*COMMIT) (*COMMIT:NAME)
moteur interchangeable
islandais fou : Ævar Arnfjörð Bjarmason
re::engine::PCRE
re::engine::POSIX
re::engine::Plan9
re::engine::TRE
objets inversés (inside-out objects)
existent déjà sur le CPAN : Class::Std
, Class::InsideOut
,
Object::InsideOut
mais meilleur support grâce à Hash::Util::FieldHash
ordre de résolution des méthodes (MRO)
auparavant fixe, par profondeur
maintenant modifiable
algorithme de linéarisation C3 (Dylan, Python)
aussi disponible pour Perl 5.8 avec Class::C3
meilleur support Win32
meilleur support OpenVMS
meilleur support MVS / OS/390 / z/OS
support Cray XT4/Catamount
user lexical pragma
prototype _
my $_
variables lexicales plus rapides
Unicode 5.0.0
opérations UTF-8 plus rapides
constantes plus économes en mémoire
...
cycle de développement plus court que pour 5.10
probablement 2-3 ans
fonctionnalités prévues :
abstraction du système de fichiers pour support Unicode
extension des nouveaux opérateurs comme state
véritablement un nouveau langage
nouvelles inspirations : Ruby, OCaml, Haskell
compilateur Perl 6 écrit en Perl 6
compilé en bytecode
exécuté sur une machine virtuelle, Parrot
machine virtuelle générique
portabilité de Perl
optimisée pour écrire des compilateurs pour langages dynamiques
langage d'assemblage cohérent, sans bizarreries dues à l'architecture
voir les articles publiés dans Linux Magazine France n°97, 98 et 99
fondamentaux de Perl
stabilité
longévité
Perl 5 utilisé depuis plus de 12 ans
Perl 6 conçu pour durer autant
pas d'urgence, Perl 5 stable
langage mature
Perl 5.8 stable
Perl 5.10 taillé pour les performances et la production
Perl 6 d'ici quelques années