=encoding iso-8859-1 =head1 NOM perl - Langage pratique d'extraction et de rapport (Practical Extraction and Report Language) =head1 SYNOPSIS B S<[ B<-sTuU> ]> S<[ B<-hv> ] [ B<-V>[:I] ]> S<[ B<-cw> ] [ B<-d>[:I] ] [ B<-D>[I] ]> S<[ B<-pna> ] [ B<-F>I ] [ B<-l>[I] ] [ B<-0>[I] ]> S<[ B<-I>I ] [ B<-m>[B<->]I ] [ B<-M>[B<->]I<'module...'> ]> S<[ B<-P> ]> S<[ B<-S> ]> S<[ B<-x>[I] ]> S<[ B<-i>[I] ]> S<[ B<-e> I<'command'> ] [ B<--> ] [ I ] [ I ]...> Pour en simplifier l'accès, le manuel Perl a été scindé en plusieurs S perl Vue d'ensemble (cette section) perldelta Changements par rapport à la version précédente perlfaq Les questions souvent posées (Foire Aux Questions) perltoc Table des matières de la documentation Perl perldata Structures de données perlsyn Syntaxe perlop Opérateurs et précédence perlre Expressions régulières perlrun Invocation de Perl et ses arguments perlfunc Fonctions prédéfinies de Perl perlvar Variables prédéfinies en Perl perlsub Utilisation des sous-programmes perlmod Modules Perl : comment ça marche perlmodlib Modules Perl : comment en créer et les utiliser perlmodinstall Modules Perl : comment les installer à partir du CPAN perlform Utilisation des formats perllocale Support des définitions locales perlref Références en Perl perldsc Introduction aux structures de données en Perl perllol Structures de données en Perl : listes de listes perltoot Programmation orientée objet en Perl : apprentissage perlobj Objets en Perl perltie Objets cachés derrière de simples variables perlbot Programmation orientée objet : astuces et exemples perlipc Communication interprocessus perldebug Debugger en Perl perldiag Messages de diagnostic de Perl perlsec Perl et la sécurité perltrap Pièges de Perl pour les imprudents perlport Guide de portabilité Perl perlstyle Guide de style Perl perlpod Format des documentations Perl perlbook Livres parlant de Perl perlembed Utiliser Perl dans vos programmes en C ou C++ perlapio Interface d'abstraction des E/S internes à Perl perlxs Interface de programmation des extensions à Perl perlxstut Perl XS : Apprentissage perlguts Fonctions internes pour les créateurs d'extensions perlcall Convention de nommage des fonctions Perl en C perlhist Le glorieux passé de Perl (Si vous essayez de lire l'ensemble des sections d'une traite, l'ordre indiqué tendra à réduire le nombre de référence en avant.) Par défaut, toutes les sections citées précédement sont installées dans le répertoire F. De la documentation supplémentaire sur les modules Perl est disponible. Par défaut, elle est installée dans le répertoire F ou dans le sous-répertoire F du répertoire de bibliothèque Perl. Certains de ces documents supplémentaires sont livrés en standard avec Perl, mais vous y trouverez aussi la documentation des modules provenant d'autres sources. Vous devez être en mesure de lire la documentation perl avec la commande man(1) en ajoutant le répertoire man dans le fichier de démarrage adéquat, ou en modifiant la variable d'environnement MANPATH. Pour savoir où sont installées les pages de manuel, S perl -V:man.dir Si les répertoires ont un ancêtre commun, par exemple F et F, il suffit d'ajouter cet ancêtre (F) dans le fichier de configuration de man(1) ou dans la variable MANPATH. Si ce n'est pas le cas, vous devrez alors tous les ajouter. Si ça ne marche pas pour une raison quelconque, vous pouvez toujours utiliser le script F fourni pour lire les documentations des modules. Vous pourriez aussi chercher un programme de remplacement à man(1). Si votre programme a un comportement étrange et que vous ne savez pas où se trouve le problème, pour demander à Perl de vous aider, utilisez l'option B<-w>. Très souvent Perl vous indiquera l'endroit exact où se trouve le problème. =head1 DESCRIPTION Perl est un langage optimisé pour extraire des informations de fichiers texte et imprimer des rapports basés sur ces informations. C'est aussi un bon langage pour de nombreuses tâches d'administration système. Il est écrit dans le but d'être pratique (simple à utiliser, efficace, complet) plutôt que beau (petit, élégant, minimaliste). Le Perl combine (du point de vue de l'auteur) les meilleures fonctionnalités de B, B, B et B, de telle manière que les personnes familiarisées à ces langages ne devraient avoir aucune difficulté avec celui-ci. (Les historiens pourront noter quelques vestiges de B, B, et même de B). La syntaxe se rapproche presque totalement de celle du C. Contrairement à la plupart des utilitaires Unix, Perl ne limite pas arbitrairement la taille des données -- si vous avez assez de mémoire, Perl peut remplir une chaine de caractères avec le contenu total d'un fichier. Il n'y a pas de niveau maximum à la récursivité. Et les tables utilisées par les tableaux de hachage (anciennement appellé "tableaux associatifs") croissent dès que nécessaire afin de garantir un bon niveau de performance. Perl utilise des techniques sophistiquées de recherche de motif pour pouvoir traiter très rapidement de très grandes quantités de données. Bien qu'optimisé pour le traitement des fichiers textes, Perl peut aussi traiter des données binaires, et faire que des fichiers dbm soient vus commes des tableaux de hachage. Les scripts Perl ayant leurs setuid bits positionnés sont plus sûrs que des programmes C grâce à des mécanismes de suivi de flot de données qui permettent d'éviter de nombreux trous de securité particulièrement stupides. Si vous avez un problème pour lequel vous auriez utilisé B, B ou B, mais qui dépasse leurs capacités ou qui doit fonctionner un peu plus rapidement et que vous ne voulez pas l'écrire en C, alors le Perl est pour vous. Il existe aussi des convertisseurs pouvant transformer vos scripts B et B en scripts Perl. Mais il y a beaucoup plus... La version 5 de Perl constitue une réécriture presque complète, et introduit les fonctionnalités S =over 5 =item * De nombreuses améliorations à l'utilisation Il est maintenant possible d'écrire du code Perl nettement plus lisible (même dans les expressions régulières). Les variables absconses peuvent être remplacées par des identificateurs plus compréhensibles. Les messages d'erreurs sont plus detaillés, et les messages optionnels d'avertissement devraient indiquer une grande majorité des erreurs peuvant être commises par un novice. On ne le dira jamais assez, mais lorsque vous obtenez un comportement erratique, essayez de lancer votre script avec le modificateur S !!!> De toutes manières, même si n'avez pas de comportement erratique, essayez d'utiliser le modificateur B<-w>. =item * Une grammaire simplifiée La taille de la nouvelle grammaire yacc fait environ la moitié de la précédente. Un très grand nombre de règles arbitraires ont été régularisées. Le nombre des mots réservés a été réduit de plus de 2/3. Malgré cela, presque tous les anciens scripts Perl fonctionnent sans aucun changement. =item * Portée lexicale Les variables Perl peuvent maintenant être déclarées à l'interieur d'une portée lexicale, de la même manière que les variables "auto" en C. Non seulement, c'est plus efficace, mais ça contribue à une plus grande sécurité pour la programmation de code réutilisable. Les routines anonymes disposent ainsi d'un couplage fort des variables locales. =item * Structure de données performantes N'importe quelle variable scalaire, y compris un élément de tableau, peut maintenant contenir une référence vers une autre variable ou une routine. Il devient simple de créer des variables et routines anonymes. Perl gère pour vous les compteurs de référence. =item * Modularité et réutilisabilité La bibliothèque Perl est maintenant constituée de modules qui peuvent être partagés facilement entre plusieurs paquetages. Un paquetage peut choisir d'importer tout ou parties de l'interface publiée d'un module. Les pragmas (directives de compilation) sont définis et utilisés par le même mécanisme. =item * Programmation orientée objet Un paquetage peut fonctionner comme un classe. L'héritage multiple dynamique et les méthodes virtuelles sont supportées de manière très directe et n'introduisent que peu de changements syntaxiques. Les descripteurs de fichiers sont maintenant gérés comme des objets. =item * Intégrable et extensible Perl peut maintenant être intégré simplement dans vos applications en C ou C++, et peut indifférement appeler ou être appelé par vos routines à travers une interface documentée. Le préprocesseur XS fourni facilite l'intégration de routines en C ou C++ dans une application Perl. Le chargement dynamique de module est supporté, et Perl lui-même peut être transformé en une librairie dynamique. =item * Conforme POSIX Un apport majeur est la création du module POSIX, qui fournit l'accès à toutes les routines et définitions POSIX, au travers de classes d'objets lorsque c'est approprié. =item * Constructeurs et destructeurs de paquetage Les nouveaux blocs BEGIN et END sont exécutés lorsque la compilation du paquetage s'achève et juste à la sortie du programme. Ils peuvent être utilisés dans un mode dégradé correspondant à celui du B en utilisant les modificateurs B<-p> ou B<-n>. =item * De multiples implémentations de DBM en simultané Un script Perl peut maintenant accéder à des fichiers DBM, NDBM, SDBM, GDBM et Berkeley DB simultanément. En fait, l'ancienne interface dbmopen a été généralisée pour permettre à n'importe quelle variable d'être rattachée à une classe d'objet définissant ses propres méthodes d'accès. =item * Les définitions des routines peuvent desormais être chargées automatiquement En fait, le mécanisme AUTOLOAD vous permet aussi de définir n'importe quelle sémantique arbitraire pour l'appel de routines indéfinies. Ce n'est pas seulement du chargement automatique. =item * Amélioration des expressions régulières Vous pouvez maintenant spécifier des quantificateurs qui ne sont pas avides. Il est aussi possible de faire des regroupements sans créer de références. Tout comme vous pouvez ajouter des espacements et des commentaires dans les expressions régulières. Un mécanisme conséquent permettant d'étendre les capacités des expressions régulières a été ajouté mais reste presque entièrement compatible. =item * Une pléthore de modules disponibles Le CPAN (Comprehensive Perl Archive Network ou Réseau d'archives détaillées de Perl) décrit dans la page de manuel L contient des centaines de modules prêts à l'emploi fournissant une quantité astronomique de code réutilisable. Vous trouverez le site miroir le plus proche de chez vous à S F. =item * Compilateur Bien qu'il ne soit pas encore en production, il existe un compilateur Perl-vers-C qui fonctionne. Il peut générer un byte code (code objet) portable, du simple C ou bien du code C optimisé. =back D'accord, j'en I avec le battage publicitaire de Perl. =head1 ENVIRONNEMENT Voir L. =head1 AUTEUR Larry Wall >, aidé par des tas d'autres personnes. Si vous désirez faire partager votre témoignage sur les succès remportés en utilisant Perl, aidant ainsi ceux qui voudraient recommander Perl pour leurs applications, ou tout simplement si vous voulez exprimer votre gratitude à Larry et l'équipe de développement, alors écrivez s'il vous plaît à >. =head1 FICHIERS "/tmp/perl-e$$" fichier temporaire pour les commandes -e "@INC" emplacements des librairies Perl =head1 VOIR AUSSI a2p traducteur awk vers perl s2p traducteur sed vers perl =head1 DIAGNOSTICS Le modificateur B<-w> génère de magnifiques diagnostics. Voir L pour l'explication de tous ces diagnostics. Le pragma C oblige Perl à rendre ces messages plus verbeux. En cas d'erreur de compilation le numéro de la ligne fautive est indiqué ainsi que l'emplacement approximatif du mot concerné. (Dans le cas de script utilisant le modificateur B<-e>, chaque B<-e> est compté comme une ligne.) Les scripts en setuid ont des contraintes supplémentaires pouvant produire des messages d'erreur tel que "Insecure dependency". Voir L. Avons-nous mentionné que vous devriez vraiment penser à utiliser le modificateur S ?> =head1 BUGS Le modificateur B<-w> n'est pas obligatoire. Perl est à la merci de la définition de plusieurs opérations telles que casting, atof() et l'affichage des nombres flottants par sprintf() qui peuvent être différentes sur votre machine. Si votre stdio nécessite un déplacement (C) ou une fin de fichier (C) entre les lectures et les écritures sur des flots de données particuliers, alors Perl les requiert aussi. (Ceci ne s'applique pas à sysread() et syswrite().) Il n'y a aucune limite en ce qui concerne la taille des types de données prédéfinies (à part la mémoire disponible) mais il existe toujours un petit nombre de limites S un nom de variable ne peut dépasser 255 caractères, aucun composant de votre PATH ne doit être plus long que 255 caractères si vous utilisez le modificateur B<-S>. Une expression régulière ne peut dépasser 32767 octets lors de sa compilation. Si vous envoyez un rapport de bug (assurez-vous d'inclure toutes les informations sur la configuration obtenue par le programme myconfig fourni avec Perl, ou par C) à >. Si vous avez réussi à compiler Perl, le script perlbug fourni dans le répertoire utils/ peut être utilisé pour envoyer un rapport de bug. L'acronyme Perl signifie réellement Pathologically Eclectic Rubbish Lister, mais ne dites à personne que je vous ai dit ça. =head1 NOTES La devise de Perl est "Il y a toujours plus d'une façon de le faire". Devinez exactement combien de façons est laissée en guise d'exercice pour le lecteur. Les trois grandes vertus du programmeur sont la paresse, l'impatience et l'orgueil. Reportez-vous au livre "Programmation en Perl" pour savoir pourquoi. =head1 TRADUCTION =head2 Version française Cette traduction française correspond à la version anglaise distribuée avec perl 5.005_02. Pour en savoir plus concernant ces traductions, consultez L. =head2 Traducteurs Marc Carmier =head2 Relecteurs Pascal Ethvignot , Gérard Delafond.