Un langage souple et complet
Un (trop court) aperçu des richesses de Perl :
- Programmations impérative, fonctionnelle et orientée objet.
- Richesse des bibliothèques (efficacité de programmation).
- Comprend tous les appels système POSIX
- Threads natifs.
- Support Unicode natif et complet.
- Récursivité, modularité, exceptions, introspection.
- Surcharges d'opérateurs, fermetures (closures).
- Structures de données simples et souples, autovivifiées
- Tableaux, listes et tables de hachage natifs.
- Gestion mémoire automatique à ramasse-miettes.
- Le plus avancé des moteurs d'expressions régulières.
- Manipulation de fichiers aisée, conforme à la syntaxe Unix.
- Multi-plateformes (87 portages).
- Apprentissage facilité (C, sh, sed, POSIX, etc).
- Déguggeur intégré.
Références et programmation orientée objet
Les références permettent la gestion des données par adresses, mais contrairement au langage C ou C++, la manipulation des références des références est sure (pas d'arithmétique de pointeurs) et souple (contrairement à Java). Les références anonymes et le garbage collector (ramasse-miettes) permettent une gestion aisée de la mémoire.
Toutes les fonctionnalités objet sont disponibles en Perl :
- classes et instances,
- méthodes et champs statiques,
- héritage multiple,
- polymorphisme,
- encapsulation,
- typage dynamique...
Qui plus est, de nombreux modules permettent d'élever le niveau d'abstraction, de simplifier l'usage des objets, voire de redéfinir intégralement et en puissance la manière de travailler en POO. Là aussi, il y a bien plus d'une manière de le faire...
Voici une très petite sélection parmi les dizaines de milliers de modules disponibles sur le CPAN (http://search.cpan.org/) :
- Protocoles réseaux : Net::SMTP, Net::POP3, Net::DNS, Net::Jabber, Net::Bluetooth, Net::CDP (Cisco) (plusieurs centaines de protocoles disponibles).
- Bases de données : DBI, DBD::Oracle, DBD::MySQL, DBD::PostgreSQL, DBD::ODBC, DBD::ADO, DBD::DB2, DBD::Informix, DBD::InterBase (plus de 70 pilotes disponibles).
- ORM : DBIx::DataModel, Class::DBI, DBIx::Class, Rose::DB::Object, Tangram, Alzabo.
- XML et SGML : XML::LibXML, XML::Twig, HTML::TreeBuilder
- Systèmes de gabarits : Template Toolkit, Mason, Petal (TAL).
- Frameworks web modernes : Catalyst, Jifty, Maypole, Mason.
- Gestion de documents bureautique : Spreadsheet::WriteExcel, Spreadsheet::ParseExcel, OpenOffice::OODoc, RTF::Writer, RTF::Parser, PDF::API2.
- Génération et manipulation d'images et de graphiques : ImageMagick, GD, SWF::Builder (Flash), OpenGL, Chart et leurs nombreux dérivés.
- Interfaces graphiques : Tk, Gtk, WxWidgets, Qt, Win32::GUI (Windows), Mac::Glue (Mac OS X).
- Intégration avec les autres langages : Inline::C, Inline::Python, Inline::Ruby, Inline::Java (plus de 40 langages disponibles).
- Environnement objet coopératif : POE et ses nombreux composants.
- Calcul de précision : Math::BigInt, Math::BigFloat, PDL.
- Bioinformatique : projet BioPerl.