Quelques informations sur _p_e_r_l Olivier Aubert, OOlliivviieerr..AAuubbeerrtt@@eennsstt--bbrreettaaggnnee..ffrr 18 Juillet 1996 Ce document donne un certain nombre de points de départ concernant _p_e_r_l. C'est une introduction générale au langage, mais pas à sa pro­ grammation. Des références vers d'autres documents complémentaires sont données tout au long de l'article. ______________________________________________________________________ Table of Contents: 1. Introduction 1.1. Présentation 1.2. Historique 1.3. Problème de version ? 1.4. Qu'apporte perl5 par rapport à la version précédente ? 2. Où trouver les fichiers, indispensables ou superflus ? 2.1. Sur le WWW 2.2. Par 2.3. Par Usenet 3. Où trouver de la documentation ? 3.1. En ligne 3.1.1. Accès 3.1.2. Organisation 3.1.3. Documentation des modules 3.2. Sur le WWW 3.3. De vrais livres 4. Informations complémentaires 4.1. Installation de modules 4.1.1. Démarche générale 4.1.2. Un exemple plus développé 4.2. Comment installer un module sans avoir les droits root ? ______________________________________________________________________ 11.. IInnttrroodduuccttiioonn 11..11.. PPrréésseennttaattiioonn _p_e_r_l est un langage interprété (avec une phase interne de pré-compilation) optimisé pour traiter des fichiers texte, mais qui peut également être utilisé pour diverses tâches d'administration- systèeme. Sa syntaxe s'inspire très largement de celles de _C, _a_w_k, _s_e_d et _s_h, ce qui rend son apprentissage très facile pour toute personne ayant un peu d'expérience avec ces outils. Néanmoins, pas d'affolement si vous ne les connaissez pas, vous pourrez apprécier certains concepts avec un oeil neuf. Il n'y a aucune limitation sur la taille des données ou sur leur contenu (une chaîne peut contenir le caractère nul, et la gestion de la mémoire qu'elle utilise n'est pas à la charge du programmeur). Une grande quantité de modules permet de lui ajouter rapidement diverses extensions (CGI, Tk, Msql, POSIX, Curses, NNTP, etc). Un des ses avantages est qu'il permet d'écrire rapidement des applications puissantes qui peuvent tourner immédiatement sur plusieurs plates-formes différentes. Son utilisation va donc du prototypage rapide d'applications au développement complet de programmes divers et portables. 11..22.. HHiissttoorriiqquuee _p_e_r_l a été conçu en 1987 par Larry Wall. C'est à la même personne que l'on doit le lecteur de news rrnn ainsi que l'utilitaire ppaattcchh, bien connu des Linuxeurs/iens/istes. Il avait besoin à l'époque de générer des rapports sur le trafic engendré par un système analogue aux News actuelles, et les outils dont il disposait à l'époque étaient soit pas assez puissants, soit pas assez souples. Il a donc conçu un langage adapté à ses besoins, c'est-à-dire capable d'analyser des données textuelles pour concevoir des rapports, d'où l'acronyme utilisé: _P_r_a_c_t_i_c_a_l _E_x_t_r_a_c_t_i_o_n _a_n_d _R_e_p_o_r_t _L_a_n_g_u_a_g_e. Cette signification _p_o_l_i_t_i_q_u_e_m_e_n_t _c_o_r_r_e_c_t_e n'est apparue, d'après le folklore, qu'après le terme plus précis: _P_a_t_h_o_l_o_g_i_c_a_l_l_y _E_c_l_e_c_t_i_c _R_u_b_b_i_s_h _L_i_s_t_e_r. Ayant mis sa création à disposition d'autres personnes, il a ensuite intégré de nombreuses fonctionnalités (appels systèmes, etc) qui lui étaient demandées, ce qui a conduit le langage a être utilisé par de nombreux administrateurs-système. 11..33.. PPrroobbllèèmmee ddee vveerrssiioonn ?? Ces derniers temps ont vu une nouvelle source de problèmes émerger dans la communauté _p_e_r_l, à l'occasion de la sortie de la version 5 du langage. La version précédente, généralement 4.036, était alors utilisée depuis quelques années, quand la nouvelle version est sortie. Celle-ci apporte de nombreuses améliorations, directement visibles ou plus internes, tout en restant compatible avec les anciennes versions du langage (il faut noter que certains scripts écrits pour _p_e_r_l version 1 fonctionnent encore sans changement avec la version actuelle). La compatibilité n'est cependant pas totale : un certain nombre d'incompatibilités mineures ont été introduites et peuvent obliger à reprendre certains scripts. L'exemple le plus courant est le fait que le caractère @@ doit maintenant être précédé d'un _b_a_c_k_s_l_a_s_h à l'intérieur d'une chaîne de caractères, afin que le @@ ne soit pas interprété comme un préfixe de tableau. L'ensemble des incompatibilités, ainsi que les pièges les plus courants pour les personnes utilisant _C ou _a_w_k sont présentés dans la page de manuel ppeerrllttrraapp Cet article est consacré principalement à _p_e_r_l_5, et plus spécifiquement _p_e_r_l_5_._0_0_3 ou supérieur. Cette dernière version est en effet celle qui est la plus pratique à utiliser ou installer, et la seule activement maintenue. 11..44.. QQuu''aappppoorrttee ppeerrll55 ppaarr rraappppoorrtt àà llaa vveerrssiioonn pprrééccééddeennttee ?? Voilà quelques unes des améliorations les plus évidentes: · des structures de données complexes, grâce à l'introduction des références ; · une approche orientée-objet, dont l'intérêt n'est pas simplement académique: elle a permis en effet le développement de divers ``modules'' rendant l'écriture des scripts encore plus simple et plus rapide ; · les expressions régulières sont maintenant plus puissantes, et la possibilité est offerte de placer des commentaires à l'intérieur, afin d'expliquer leur fonctionnement ; · la possibilité d'ajouter facilement de nouvelles fonctionnalités venant de librairies C grâce au langage d'extension _X_S (voir les pages de manuel ppeerrllxxss et ppeerrllxxssttuutt). 22.. OOùù ttrroouuvveerr lleess ffiicchhiieerrss,, iinnddiissppeennssaabblleess oouu ssuuppeerrfflluuss ?? 22..11.. SSuurr llee WWWWWW Le principal site WWW sur _p_e_r_l est maintenu par Tom Christiansen, un des gourous de _p_e_r_l. Son adresse est . Il contient de nombreux documents sur tous les aspects de _p_e_r_l, du plus technique au plus général en passant par les inévitables guerres de religion entre les partisans de différents langages (_p_e_r_l, _p_y_t_h_o_n, _t_c_l, etc). De nombreux pointeurs vers d'autres sites y sont également présents. C'est donc une mine de renseignements, que l'on peut également visiter uniquement par curiosité. Il propose également un service permettant d'accéder de manière transparente au site ``CPAN'' le plus près de chez vous. 22..22.. PPaarr ffttpp Fin 1995, le besoin s'est fait sentir de regrouper les efforts de la communauté _p_e_r_l afin d'éviter d'avoir à réinventer la roue à chaque fois. De cette idée est né le CPAN, pour _C_o_m_p_r_e_h_e_n_s_i_v_e _P_e_r_l _A_r_c_h_i_v_e _N_e_t_w_o_r_k, d'un principe analogue au CTAN pour TeX. Le site principal centralise les sources, la documentation ainsi que les nombreux modules existants. Il est ensuite _m_i_r_r_o_r_i_s_é sur l'ensemble des sites constituant le CPAN, assurant ainsi un temps d'accès convenable. En France, il existe deux sites CPAN: · · La lecture du fichier ROADMAP présent dans le répertoire principal de ces sites est un bon point de départ pour se retrouver dans son architecture. Si vous cherchez un module particulier, allez voir la liste des modules, postée régulièrement dans le groupe ccoommpp..llaanngg..ppeerrll..mmoodduulleess et disponible sur les sites ``CPAN''. 22..33.. PPaarr UUsseenneett _p_e_r_l est également présent dans l'arboresence Usenet. Le groupe initial, ccoommpp..llaanngg..ppeerrll a subi en 1995 une réorganisation, suite au trafic important qu'il supportait, et les groupes suivants sont maintenant disponibles: ccoommpp..llaanngg..ppeerrll..aannnnoouunnccee Groupe modéré à faible trafic, destiné à recevoir les annonces concernant _p_e_r_l, ses modules ainsi que les FAQs ; ccoommpp..llaanngg..ppeerrll..mmiisscc Groupe général sur _p_e_r_l ; ccoommpp..llaanngg..ppeerrll..mmoodduulleess Utilisation et développement des modules ; ccoommpp..llaanngg..ppeerrll..ttkk À propos du module Tk de _p_e_r_l. 33.. OOùù ttrroouuvveerr ddee llaa ddooccuummeennttaattiioonn ?? 33..11.. EEnn lliiggnnee 33..11..11.. AAccccèèss Depuis la version 5 de _p_e_r_l un effort particulier a été porté sur la documentation en ligne. L'unique page de manuel ppeerrll a été réécrite et séparée en plusieurs fichiers, afin de faciliter sa consultation. Pour voir les différentes pages disponibles, il suffit de rentrer la commande % man perl ou encore, si les pages de manuel n'ont pas été installées correctement sur votre système % perldoc perl 33..11..22.. OOrrggaanniissaattiioonn Si l'on a l'intention de lire l'ensemble des pages (ce qui se fait très bien), il est conseillé de les lire dans l'ordre proposé. Si l'on cherche la syntaxe d'une commande particulière, il faut consulter le document ppeerrllffuunncc. Pour une référence complète sur les expressions régulières, consulter le document ppeerrllrree 33..11..33.. DDooccuummeennttaattiioonn ddeess mmoodduulleess _P_O_D, un nouveau format de documentation a été introduit dans _p_e_r_l_5. Il signifie _P_l_a_i_n _O_l_d _D_o_c_u_m_e_n_t_a_t_i_o_n et sa syntaxe est décrite dans le document ppeerrllppoodd. C'est un format très simple, ne disposant pas de grandes possibilités mais largement suffisant pour écrire des pages de manuel. De nombreux convertisseurs existent pour le convertir ensuite dans d'autres formats: texte, nroff, LaTeX, html. On dispose ainsi d'une documentation unique et facilement consultable quel que soit le moyen dont on dispose. Un autre de ses avantages est qu'il est prévu pour être directement intégré dans du code _p_e_r_l. Ainsi, la plupart des modules contiennent leur propre documentation. Pour accéder à la documentation du module FFiillee::::CCooppyy par exemple, il suffit d'exécuter la commande % perldoc File::Copy Il est possible d'appliquer les convertisseurs du format _P_O_D (ppoodd22ttxxtt, ppoodd22hhttmmll, ppoodd22mmaann, ppoodd22hhttmmll) directement sur les modules ou les scripts, afin d'en extraire cette documentation. 33..22.. SSuurr llee WWWWWW J'ai déjà parlé du site , qui contient des pointeurs vers de la documentation en ligne ou vers divers livres consacrés à _p_e_r_l. De nombreux tutoriaux, le plus souvent en anglais, sont également disponibles. Il suffit de rentrer les termes de recherche _p_e_r_l et _t_u_t_o_r_i_a_l dans un moteur de recherche pour les obtenir. Je ne peux pas vraiment en conseiller un, étant donné que la documentation standard de _p_e_r_l m'a toujours suffi. 33..33.. DDee vvrraaiiss lliivvrreess De nombreux livres existent, du livre de référence au simple tutorial. La liste la plus à jour de ces ouvrages est disponible sur le site WWW , à l'URL . Les ouvrages de référence, car écrits par Larry Wall, l'auteur du langage, et d'autres spécialistes (Tom Christiansen, Randal L. Schwartz), sont: PPrrooggrraammmmiinngg PPeerrll aussi appelé le _C_a_m_e_l _B_o_o_k à cause de l'image de dromadaire présente sur sa couverture. C'est l'ouvrage de référence pour _p_e_r_l. Une version est en cours de réécriture pour intégrer les nouvelles fonctionnalités de _p_e_r_l_5. Sa date de sortie est prévue pour septembre 1996. LLeeaarrnniinngg PPeerrll C'est un tutorial, couvrant uniquement les possibilités de _p_e_r_l_4. Une traduction française est disponible. _(_A_t_t_e_n_t_i_o_n_, _p_u_b_) J'ai également écrit un document d'introduction à perl en français, dont les versions Postscript et dvi sont disponibles à l'adresse . 44.. IInnffoorrmmaattiioonnss ccoommpplléémmeennttaaiirreess Dans cette section se trouvent - pour l'instant - des informations pouvant être utiles aux personnes désirant installer des modules. D'autres informations plus spécifiques pourront y être ajoutées, sur demande. 44..11.. IInnssttaallllaattiioonn ddee mmoodduulleess L'introduction des modules et du langage d'extension _X_S a grandement facilité la vie des programmeurs ainsi que des utilisateurs. Un mécanisme (MMaakkeeMMaakkeerr) a été développé afin de rendre l'installation de nouveau modules la plus simple possible. J'en parlerai ici du point de vue de la personne qui doit installer un nouveau module. Ce que je décris est valable surtout pour les systèmes gérant les librairies dynamiques. La marche à suivre pour les autres systèmes (librairies statiques) est presque identique mais impose de recompiler une nouvelle version de l'interpréteur ppeerrll. 44..11..11.. DDéémmaarrcchhee ggéénnéérraallee Voyons dans un premier temps la démarche générale, adaptée pour tous les modules simples. Après avoir détarré l'archive du module et être allé dans le répertoire ainsi créé, il suffit de procéder ainsi: % less README % less INSTALL % perl Makefile.PL % make % make test % make install 44..11..22.. UUnn eexxeemmppllee pplluuss ddéévveellooppppéé Prenons l'exemple du module _C_u_r_s_e_s qui procure des routines permettant de gérer la gestion d'un écran en mode texte. Il ne vient pas avec la distribution standard de _p_e_r_l, il faut donc aller le récupérer sur un des sites ``CPAN'' ; il se trouve dans la catégorie _U_s_e_r _I_n_t_e_r_f_a_c_e_s. Il faut ensuite détarrer le fichier archive rapatrié dans un répertoire quelconque. Rappelons aux utilisateurs de Linux qu'il est déconseillé de compiler quoi que ce soit en étant root : mieux vaut le faire en tant qu'utilisateur normal, puis passer root pour faire l'installation uniquement. Dans le répertoire CCuurrsseess--11..00 ainsi créé se trouvent plusieurs fichiers et répertoires dont nous allons voir les plus importants. En premier lieu, bien lire les fichiers RREEAADDMMEE et IINNSSTTAALLLL. La marche à suivre y est indiquée. Dans le cas de _C_u_r_s_e_s qui est un paquetage variant beaucoup d'une machine à l'autre, il faut copier à la main le fichier du répertoire hhiinnttss correspondant à son architecture dans le fichier cc--ccoonnffiigg..hh et éditer le fichier MMaakkeeffiillee..PPLL pour décommenter les lignes relatives à son système d'exploitation. Je vous rassure, _C_u_r_s_e_s fait partie des modules impliquant le plus de manipulations. Dans la plupart des cas, comme par exemple pour _G_D ou _M_s_q_l, il suffit d'avoir auparavant installé les librairies adéquates sur son système si elles n'y étaint pas déjà. Il faut ensuite lancer la commande % perl Makefile.PL qui va faire un certain nombre de tests et créer le fichier MMaakkeeffiillee. Un simple mmaakkee doit ensuite suffire à construire l'extension. %% mmaakkee tteesstt lance une série de tests afin de vérifier que le module est correctement compilé. Il suffit enfin de passer root pour faire le %% mmaakkee iinnssttaallll qui ira installer les fichiers nécessaires dans les bons répertoires (généralement, //uussrr//llooccaall//lliibb//ppeerrll55//ssiittee__ppeerrll// ou //uussrr//lliibb//ppeerrll55//ssiittee__ppeerrll//). 44..22.. CCoommmmeenntt iinnssttaalllleerr uunn mmoodduullee ssaannss aavvooiirr lleess ddrrooiittss rroooott ?? Les modules sont installés par défaut dans le répertoire standard des librairies de _p_e_r_l. Si vous avez besoin d'un module mais que vous n'avez pas les droits sur l'arborescence //uussrr//llooccaall, il est toujours possible d'installer des modules dans votre répertoire personnel, en précisant pour cela le répertoire adéquat lors de la génération du fichier MMaakkeeffiillee: % perl Makefile.PL PREFIX=~ ce qui va installer les modules dans le répertoire $$HHOOMMEE//lliibb. Pour y accéder, il suffit de commencer le script par: #!/usr/local/bin/perl use lib "$ENV{HOME}/lib"; La documentation complète des attributs d'installation pouvant être fixés est disponible par la commande: % perldoc ExtUtils::MakeMaker