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