Article publié dans Linux Magazine 53, septembre 2003. Repris dans Linux Dossiers 2 (avril/mail/juin 2004).
Copyright © 2003 - Philippe Bruhat.
The following two statements are usually both true: There's not enough documentation. There's too much documentation.
-- Larry Wall, perl5-porters@perl.org, 1er septembre 1997
Perl est un langage de programmation unique, avec de nombreuses manières très caractéristiques de faire les choses. Le problème pour les débutants (et les autres) est de savoir où trouver l'information qu'ils cherchent dans la masse de documentation existante.
L'objectif de cet article est de vous fournir les moyens de trouver seul la réponse aux questions que vous vous posez, ou au moins de progresser aussi loin que possible avant de finir par poser la question sur un forum ou une liste de discussion.
man perl
Sous Unix, la documentation est disponible sous la forme de pages de manuel. Pour simplifier la recherche, les pages de manuel sont divisées en sections numérotées qui concernent différents aspects du système :
les programmes exécutables et commandes shell,
les appels systèmes (fonctions du kernel),
les appels de librairies (fonctions dans les librairies système),
les fichiers spéciaux (ceux qu'on trouve en général dans /dev),
les formats de fichiers (de configuration, en général),
les jeux
les paquetages de macros et leurs conventions,
les commandes d'administration système (réservées habituellement à root
)
Nous trouverons de la documentation au sujet de Perl et des modules Perl
dans les sections 1 et 3 du manuel. La documentation concernant le
programme perl
et le langage Perl est dans la section 1 du manuel,
et la documentation concernant les modules (librairies) Perl est dans
la section 3. Sur certains Unix, la documentation des modules est même
dans la sous-section 3pm (pour Perl module).
La page de manuel principale, perl(1), est en fait une liste des pages de manuel concernant Perl (dans la section 1 uniquement). La version 5.8.0 de Perl est livrée avec 121 pages de manuel dans la seule section 1. On comprend pourquoi le manuel a été fractionné en plusieurs parties ! Et encore, ce nombre n'inclut pas la documentation des modules (qui se trouve en section 3).
Ces pages de manuel sont regroupées en plusieurs catégories : vue d'ensemble, tutoriels, manuels de référence, architecture interne et interfaces avec C, divers, spécificités liées à la langue, et enfin spécificités liées à la plateforme.
perl(1) liste l'ensemble des pages de manuel de la section 1.
perlintro(1) est une bonne introduction à Perl, rédigée par Kirrily "Skud" Robert. À conseiller à tout ceux qui n'ont pas encore lu la série d'articles d'introduction à Perl de Sylvain Lhullier, publiée dans Linux Magazine 41 à 47.
perltoc(1) est la liste automatiquement générée des pages de documentation, avec la table des matières associée.
Les tutoriels sont la partie de la documentation sur laquelle la communauté a le plus travaillé ces dernières années. La plupart des concepts complexes concernant Perl sont expliqués en détail dans ces différentes pages de manuel.
Structures de données : perlreftut(1) est une courte introduction aux références, perldsc(1) est une introduction aux structures de données en Perl et perlllol(1) présente les tableaux de tableaux (les autres structures complexes disposeront dans le futur de leurs propres pages de documentation).
Expressions régulières : perlrequick(1) est une rapide introduction aux bases des expressions régulières (si vous n'y comprenez vraiment rien), et perlretut(1) un tutoriel (5 fois plus long) qui entre vraiment dans le détail. Pour comprendre votre bonheur, imaginez-vous qu'il y a quelques années, vous n'auriez eu que perlre(1) comme seule documentation sur les expressions régulières.
Programmation objet en Perl : dans l'ordre de lecture conseillé, vous pourrez lire perlboot(1), le tutoriel pour les débutants, perltoot(1) et perltooc(1) le tutoriel en deux parties (les objets d'une part et les données de classe d'autre part) de Tom Christiansen et enfin la page perlbot(1) liste les trucs et astuces pour une meilleure utilisation du paradigme objet en Perl.
N'oublions pas le vénérable perlstyle(1), qui est un guide de style
pour la programmation en Perl. Ce sont de bons conseils, lisez-les.
Et ensuite suivez-les.
Notez que l'excellent perltidy s'appuie sur perlstyle(1) pour son
reformattage automatique de code Perl. Ce superbe logiciel (qui fait
également du coloriage syntaxique en HTML) est
disponible sur http://perltidy.sf.net/. perltidy est le logiciel
qui fait mentir l'adage bien connu : only perl
can parse Perl.
perltrap(1) liste les pièges qui attendent les utilisateurs de awk, C, sed, shell, qui débutent en Perl, mais également tous les pièges inhérents à Perl.
perldebtut(1) consiste en un tutoriel sur l'utilisation du débogueur de Perl, avec des exemples à la fois simples et concrets.
Enfin, la série des pages perlfaq(1) sont numérotées de perlfaq1(1) à perlfaq9(1). La page principale, perlfaq(1), liste l'ensemble des questions auxquelles répondent les différentes sections de la FAQ. On accède généralement à la FAQ en posant ses questions par l'intermédiaire de perldoc (voir plus loin).
Les pages listées ci-après sont construites comme autant de références, expliquant en détail tous les aspects de tel ou tel aspect de Perl.
perlsyn(1) décrit la syntaxe de Perl, perldata(1) les structures de données de Perl, perlop(1) la liste complète des opérateurs Perl et de leurs règles de priorité et perlsub(1) documente le fonctionnement des routines (subroutines) de Perl.
perlfunc(1) est l'une des plus longues pages de manuel de Perl, qui décrit l'ensemble des fonctions prédéfinies de Perl. Voir plus loin comment obtenir la documentation d'une seule fonction grâce à perldoc et son option -f. Les fonctions open() et pack()/unpack() sont décrites en détail dans les tutoriels associés : perlopentut(1) et perlpacktut(1).
perlpod(1) décrit le format de documentation de Perl (à utiliser absolument pour vos scripts et modules) et perlpodspec(1) fournit les spécifications détaillées de POD.
perlrun(1) présente l'ensemble des options de ligne de commande de
perl
. C'était la base de mon article paru dans Linux Magazine 50.
perlvar(1) présente l'ensemble des variables prédéfinies de Perl, et était
vous l'avez deviné la base de mon article paru dans Linux Magazine 52.
perldiag(1) liste l'ensemble des messages d'erreur et d'avertissement de Perl, avec les explications associées. perllexwarn(1) vous informera sur les avertissements de Perl et perldebug(1) constitue la documentation complète du débogueur de Perl.
La documentation complète des expressions régulières de Perl est dans perlre(1). Il s'agit d'un manuel de référence, aussi n'oubliez pas consulter les tutoriels déjà cités, si vous voulez y comprendre quelque chose.
perlref(1) présente les références, et perlform(1) les formats (qui servent si rarement de nos jours que vous pouvez oublier leur existence).
perlobj(1) présente le modèle objet de Perl, et perltie(1) explique comment lier des objets complexes aux structures de données simples de Perl avec tie(). perldbmfilter(1) présente l'exemple des filtres DBM.
Pour maîtriser les processus et les communications inter-processus, consultez perlipc(1). perlfork(1) vous fournira des détails sur fork() et les fonctions associées.
Vous saurez tout sur les nombres en Perl et les conversions depuis ou vers des nombres en lisant perlnumber(1).
Threads : perlthrtut(1) est le tutoriel sur les threads, et perlothrtut(1), tutoriel sur les anciens threads (ceux de Perl 5.005).
perlport(1) vous indiquera comment écrire du code Perl portable entre plates-formes. Rassurez-vous, Perl est en général très portable, et la plupart des programmes écrits en Perl fonctionnent déjà sur toutes les plates-formes qui supportent Perl. Cette page vous indiquera tout ce que vous aurez à savoir sur les quelques points qui posent problème.
Perl sait gérer les divers jeux de caractères à votre disposition sur les différents systèmes : perllocale(1) vous informera sur la gestion des locales (les langues supportées par le système), perluniintro(1) et perlunicode(1) contiennent tout ce qui concerne le support d'Unicode dans les programmes Perl. Pour les désespérés qui travaillent sur des systèmes non ASCII, perlebcdic(1) est votre dernier espoir.
perlsec(1) vous dira tout ce que vous pouvez faire pour écrire des programmes Perl plus sûrs, en particulier ce qui concerne le marquage (ou entachement) des variables et l'option -T.
Les pages perlmod(1), perlmodlib(1), perlmodstyle(1), perlmodinstall(1), perlnewmod(1) concernent toutes les modules.
perlmod(1) décrit dans le fonctionnement de package
, les tables de
symboles et les classes. Vous y trouverez également des explications sur
les glob. perlmodlib(1) est une référence de l'ensemble de modules
fournis en standard avec Perl, ainsi qu'un petit guide explicatif sur
la création de nouveau modules (nommage, interfaces, etc.).
perlmodstyle(1) est l'équivalent de perlstyle(1) rapporté à la programmation de modules Perl, et couvre les problématiques liées à l'interface (être ou ne pas être objet), la documentation, la distribution, les tests et la licence. perlnewmod(1), quant à lui, se présente plutôt comme un tutoriel pour aller de l'idée du module à sa mise à disposition sur CPAN, par l'intermédiaire de PAUSE (Perl Authors Upload SErver).
Enfin perlmodinstall(1) vous expliquera comment installer un module CPAN sur votre système, qu'il s'agisse d'un Unix ou de Linux, d'ActivePerl (Win95/98/2K/NT/XP, Linux, Solaris), d'un Macintosh, de DJGPP, d'OS/2, de VMS, ou de MVS...
perlutil(1) vous donnera la liste des outils fournis avec la distribution Perl, de a2p à h2xs, en passant par splain. Vous y découvrirez plein d'outils fournis avec Perl, et qui pourront vous aider dans vos développements.
À tous ceux qui veulent compiler du Perl, perlcompile(1) permettra de
comprendre que perl
est à la fois un compilateur et un interpréteur.
Vous apprendrez également l'existence des modules B:: (les modules
de back end) et du module O:: (le front end). Jetez un coup d'œil
à B::Deparse, au moins.
perlfilter(1) décrit le fonctionnement des filtres de source de Perl. Ces filtres permettent de modifier le code source du programme avant qu'il soit vu par le compilateur Perl, un peu comme le pré-processeur quand vous programmez en C.
Ces pages de manuel ne vous seront vraiment utiles si vous lisez p5p (voir plus loin), et que vous comptez patcher Perl. Inutile de s'attarder dessus pour cet article.
Sans détailler, nous listerons ici perltodo(1), la liste des choses à faire pour améliorer Perl, et perlhist(1), qui donne des informations historiques statistiques au sujet de Perl. Vous pouvez également consulter http://history.perl.org/, si vous vous intéressez à l'histoire du développement de Perl.
La page perldelta(1) liste les modifications depuis la dernière version de Perl. Les anciennes versions sont de la forme perlxxxdelta(1) (où xxx est le numéro de la version de Perl considérée). Par exemple, perl561delta donne les nouveautés de la version 5.6.1 par rapport à la version 5.005
Nous passerons sur les quatre pages liées à la langue, qui sont elles-mêmes rédigées en chinois, japonais, coréen et taïwanais...
Cette partie ne comporte pas moins de 30 pages, correspondant à chacun des OS sur lequel Perl a été porté. Juste pour faire baver les fans de Java, voici la liste des systèmes supportant Perl : AIX, AmigaOS, Apollo DomainOS, BeOS, POSIX-BC BS2000, WinCE, Cygwin, DG/UX, DOS, EPOC, FreeBSD, HP-UX, Hurd, Irix, Power MachTen, Mac OS (Classic), MiNT, MPE/iX, NetWare, OS/2, OS/390, Plan 9, QNX, Solaris, Tru64, UTS, VM/ESA, VMS, Stratus VOS et Windows.
Pas moins de 29 nouvelles pages de manuel sont apparues entre la version 5.6.1 et la version 5.8.0 de Perl. Too much documentation, vraiment ?
perldoc est le programme de recherche et d'affichage de la documentation Perl. Même si les pages de manuel d'un module n'ont pas été générées et installées sur le système, perldoc est capable de les retrouver dans les modules (l'utilisation de pod permet de stocker la documentation dans le source du script ou module). En général, man est un peu plus rapide que perldoc.
Voici quelques exemples d'utilisation de perldoc :
$ perldoc perlsyn
$ perldoc -f split
L'option -f permet de trouver la documentation de chaque fonction décrite dans perlfunc(1).
Avec deux cas particuliers : pour la documentation de printf
,
jetez également un coup d'œil sur celle de sprintf
, celle-ci comportant
la liste des séquences %
, contrairement à celle-là. Le même phénomène
existe pour unpack
, dont la documentation se trouve plutôt dans celle
de pack
.
Sachez également que perldoc -f -X
vous donnera la documentation
complète des file tests, c'est-à-dire toutes les fonctions comme -d
,
-e
, -f
etc.
$ perldoc Getopt::Long
$ perldoc -l WWW::Search::Pagesjaunes /usr/local/share/perl/5.6.1/WWW/Search/Pagesjaunes.pm
$ perldoc -u LWP::UserAgent =head1 NAME LWP::UserAgent - A WWW UserAgent class =head1 SYNOPSIS
$ perldoc -m XML::Twig
perldoc permet également de trouver une question (et sa réponse) dans la FAQ.
$ perldoc -q question Found in /usr/share/perl/5.8.0/pod/perlfaq2.pod What are the Perl newsgroups on Usenet? Where do I post questions? The now defunct comp.lang.perl newsgroup has been superseded by the following groups:
Notez que l'option -q accepte en fait une expression régulière :
$ perldoc -q 'array|hash' Found in /usr/share/perl/5.8.0/pod/perlfaq3.pod How can I free an array or hash so my program shrinks? ... Found in /usr/share/perl/5.8.0/pod/perlfaq4.pod What is the difference between a list and an array? ... What is the difference between $array[1] and @array[1]? ...
Il existe beaucoup de sites web consacrés à Perl. Il s'agit de sites d'aide, de sites communautaires organisés autour de forums ou encore de sites d'information.
L'ensemble de la documentation officielle est également disponible sur le web, sur le site http://www.perldoc.com/, créé et maintenu par Carlos Ramirez. Vous y trouverez la documentation des différentes versions de Perl (5.004_05, 5.005_03, 5.6.0, 5.6.1, 5.8.0) et des modules de CPAN (pour celle-ci reportez-vous plutôt à search.cpan.org).
http://search.cpan.org/ est le moteur de recherche de CPAN. On y trouve
l'ensemble des modules disponibles sur CPAN, on peut également consulter
les modules d'un auteur en particulier. La documentation est en HTML,
avec une feuille de style agréable et proche de celle de perldoc.com.
On peut également consulter le code source de chaque fichier et télécharger
les distributions pour les installer. Le site pointe aussi vers les
résultats des jeux de tests tels que lancés par les cpan-testers
.
http://www.perlfaq.com/ est une interface web vers les entrées de la perlfaq(1).
La documentation de Perl a été traduite en français et vous pouvez la retrouver sur http://www.enstimac.fr/Perl/, ou sur le miroir des mongueurs http://www.mongueurs.net/perlfr/.
Marc Carmier a lancé il y a quelques années ce grand projet de traduction de la documentation en ligne de Perl. Le projet, qui couvrait à l'époque la documentation de perl5.005_02 a depuis été repris par Paul Gaborit, chercheur à l'ENSTIMAC.
Paul et les Mongueurs de Perl viennent de relancer ce projet, afin de
fournir aux francophones un site à la perldoc.com. La liste de
discussion perldoc@mongueurs.net
rassemble les traducteurs et
les responsables du projet. Le site web (en construction) est
accessible à l'adresse : http://perldoc.mongueurs.net/.
Je vous invite à vous inscrire à la liste de discussion si ce
grand projet de traduction vous intéresse. Pour cela, envoyez un email
à perldoc-subscribe@mongueurs.net
.
Certains sites sont spécifiquement conçus pour vous aider, quel que soit votre niveau. La plupart des sites consacrés à Perl sont en anglais.
Créé en 1999 par Tim Vroom, Perlmonks est un site d'aide (construit avec la Everything Engine, en Perl) où les moines de Perl discutent de Perl, exposent leur bouts de code les plus intéressants et s'entraident.
Il s'agit également d'une communauté : YAPC::Europe 2001 par exemple s'est appuyé sur les moines de Perl pour une partie de son organisation, et plusieurs projets d'envergure ont commencé par une discussion dans le chatterbox du site.
Ce site est un site explicitement destiné aux débutants en Perl, et
associé aux listes de diffusion beginners@perl.org
et
beginners-cgi@perl.org
.
Le site contient également quelques pointeurs et FAQ, ainsi que le texte de plusieurs livres sur Perl, au format électronique.
Shlomi Fish a lancé il y a quelques mois un autre site destiné aux débutants en Perl. Celui-ci se présente comme une collection de resources destinées aux débutants : tutoriels, listes de diffusion, livres, etc.
La communauté Perl est très active. Au-delà de la documentation, http://use.perl.org/ est un site qui regroupe les actualités de la communauté Perl. On y trouve également les blogs d'un certain nombre de membres de la communauté. C'est également là qu'est diffusé le compte-rendu hebdomadaire de P5P, rédigé par Rafael Garcia-Suarez, l'un des fondateurs de Lyon.pm.
http://www.perl.com/ est le site Perl géré par O'Reilly, dans le cadre de son O'Reilly Network. On y trouve des articles écrits par des membres plus ou moins connus de la communauté Perl, sur des sujets aussi variés et pointus que mod_perl, Template-Toolkit, mais également les résumés hebdomadaires des listes de diffusion consacrées à Perl 6. Le tout entrecoupé de publicités pour les livres O'Reilly.
http://www.perl.org/, quant à lui est le site de la communauté Perl, avec des liens vers tout ce qui est Perl : les Perl Mongers, la Perl Foundation, l'histoire de Perl, les livres, les revues, la documentation. Comme le dit le slogan du site : When you need perl, think perl.org.
La fondation Perl (http://www.perlfoundation.org/) est une association à but non lucratif américaine qui se consacre à l'avancement de Perl à travers la collaboration des différents acteurs de la communauté. Elle coordonne les efforts des divers groupes d'utilisateurs pour organiser des conférences (YAPC) ou financer le développement du langage (par le biais de bourses).
Le newsgroup comp.lang.perl
est utilisé pour les questions Perl,
mais il existe des newsgroups plus spécialisés :
comp.lang.perl.announce
Publie des annonces concernant Perl (groupe modéré).
comp.lang.perl.misc
Groupe très actif qui parle de Perl en général.
comp.lang.perl.moderated
Groupe de discussion modéré.
comp.lang.perl.modules
Utilisation et développement de modules Perl.
comp.lang.perl.tk
Groupe dédié à l'utilisation de Tk et X à partir de Perl.
comp.infosystems.www.authoring.cgi
Ce groupe consacré à l'écriture de scripts CGI accueille évidemment des discussions au sujet de Perl (pour l'écriture de CGI).
Note : tous ces groupes portent des discussions en anglais.
Les principales listes de discussion consacrées à Perl (hormis les listes des divers groupes de Perl mongers) sont listées sur http://lists.perl.org ou http://lists.cpan.org/.
Ce n'est généralement pas une bonne idée de poser une question sur
votre script qui "ne marche pas" sur une liste qui n'a pas pour rôle
de répondre aux questions. Quelques exemples de telles listes :
C'est la liste des mainteneurs de Perl 5. À moins que vous n'ayez un bug
de Perl à commenter (et pour cela utilisez perlbug, s'il vous plait),
il est peu probable que vous ayez besoin de poster sur cette liste.
Si vous vous intéressez à l'évolution de Perl 5, et que le volume et
la complexité des posts sur cette liste vous inquiète, vous pouvez
commencer par les excellents compte-rendus hebdomadaires de Rafael
Garcia-Suarez (sur http://use.perl.org/, ou disponibles par
abonnement à perl5-summary-subscribe@perl.org
).
Fun with Perl est la liste où poster si vous avez un bout de code rigolo ou assombri à partager, ou un algorithme à discuter. Inutile d'y poser des questions qui seraient immédiatement catégorisées comme not fun.
Après la folie du golf Perl qui s'est emparée de fwp
fin 2001,
la liste golf@perl.org
a été créée pour isoler les golfeurs dans
un petit coin de l'Internet. Consultez http://www.perlgolf.org/,
http://perlgolf.sf.net/ et http://terje.perlgolf.org/ pour
tout savoir sur le golf (et le minigolf) Perl.
Les listes de discussion consacrées à Perl sont listées sur la page http://lists.perl.org/, avec les instructions nécessaires pour l'abonnement et le désabonnement. Il y en a tellement qu'on ne peut toutes les citer. La plupart sont évidemment en anglais.
La plupart des listes de distribution recensées sur http://lists.perl.org/ sont archivées sur http://archive.perl.org/ (alias de http://archive.develooper.com/, oui, avec deux 'o').
Il existe également une passerelle NNTP pour accéder aux mailings-list Perl comme s'il s'agissait d'un newsgroup. Celle-ci est hébergée par perl.org, et accessible à nntp://nntp.perl.org. Une interface web est disponible à presque la même adresse : http://nntp.perl.org.
http://groups.google.com/ les reproduit également, sous la hiérarchie
perl.*
.
Si vous ne parlez pas assez bien anglais pour poser des questions, ou si vous voulez parler de vos problèmes Perl entre francophones, il existe quelques listes en français.
perl@mongueurs.net
est la liste technique consacrée à Perl. Cette
liste est en fait la migration de la liste paris-pm-list@pm.org
,
il est possible qu'elle n'existe pas encore au moment où vous lirez
ces lignes. En cas de doute, consultez http://paris.mongueurs.net/mail.html
ou http://www.mongueurs.net/services/listes.html.
Il existe un certain nombre de listes "locales", animées par des groupes d'utilisateurs de Perl répartis dans toute la France :
Cette liste est le résultat de la division de paris-pm-list@pm.org
en deux sous-listes, la liste technique citée plus haut, et la liste
des mongueurs parisiens.
Les listes hébergées par le serveur des mongueurs (en mongueurs.net
)
sont listées sur http://www.mongueurs.net/services/listes.html.
Nous abordons maintenant plutôt les questions de débogage et de recherche d'erreur que de documentation proprement dite.
Comme vous programmez, vous allez forcément buter sur un problème, qui va vous bloquer. C'est notre lot à tous. Avant de vous faire malmener sur une liste de discussion ou un forum à cause d'une question idiote ou mal formulée, apprenez à résoudre vos problèmes tous seuls, et à poser la bonne question.
Pour cela, je vous renvoie à deux articles écrits par des maîtres de Perl.
Dans brian
's Guide to Solving Any Perl Problem, brian d foy
explique sa méthode pour résoudre tous les problèmes Perl. Si jamais
cela ne marche pas, il sera toujours temps de poser la question sur
une liste de discussion ou un forum.
http://www.pair.com/~comdog/brian's_guide.pod
Ce document me paraît tellement important à lire que je vous l'ai traduit. Vous pouvez le consulter en français sur http://articles.mongueurs.net/traductions/guide_brian.html
Il y a certaines questions auxquelles personne ne répond, ou alors par des sarcasmes (ou des flammes). Dans Why Questions go Unanswered, Mark-Jason Dominus explique pourquoi certaines questions n'obtiennent jamais de réponse, et surtout comment formuler une question pour obtenir une réponse. http://perl.plover.com/Questions.html
perl
aussi peut vous aiderPerl dispose de plusieurs manières de vous aider à trouver les erreurs dans vos programmes. Celles-ci n'étant pas activées par défaut (c'est ce qui permet de ne pas déclarer les variables dans un mini-programme qui ne sera utilisé qu'une fois), il vous faudra le faire explicitement.
use strict;
La pragma strict
demande à Perl d'activer les strictures (jeu de
mot avec strict/structures). Perl vous imposera alors certaines contraintes
sur votre code (il sera plus strict avec vous, en ce sens que le
non-respect de ces contraintes provoquera une erreur).
La contrainte vars
vous impose de déclarer les variables avant de
les utiliser. Il y a trois manières de déclarer les variables : deux
pour les variables globales et une pour les variables lexicales.
use strict 'vars'; use vars qw( $toto %titi ); use strict 'vars'; our( $toto, %titi ); # à partir de Perl 5.6.0
Les variables lexicales sont déclarées avec my().
La contrainte refs
provoquera une erreur si vous utilisez des références
symboliques, c'est-à-dire si vous utilisez une variable pour stocker le
nom d'une autre variable et y faire référence. Consultez perlref(1)
pour en savoir plus sur les références symboliques, et les cas où elles
sont utiles.
use strict 'refs'; $nom = 'toto'; ${$nom} = 1; # ERREUR référence symbolique interdite
Enfin, la contrainte subs
supprime la fameuse "optimisation poétique"
qui permet de se passer des guillemets "
ou '
pour les mots simples.
Avec strict 'subs'
, tout mot simple (ou mot isolé) doit être le nom
d'un sous-programme, ou bien se trouver entre accolades ou à gauche d'un
signe =>
.
use strict 'subs'; $mot = toto; # ERREUR ce mot simple n'est pas une fonction $hash{cle} = "titi"; # mot simple autorisé entre accolades
Enfin, si vous utilisez strict
tout seul, il imposera les trois
contraintes à la fois.
use strict; use strict qw( vars subs refs ); # identique
Et si vous avez absolument besoin d'une référence symbolique, vous pouvez relâcher les contraintes le temps d'un bloc :
package Forme::Geometrique; # déclaration d'accesseurs simples (get_hauteur(), get_largeur(), ...) # pour les objets Forme::Geometrique for $attribut qw( hauteur largeur ) { no strict 'refs'; *{"Forme::Geometrique::get_$attribut"} = sub { return $_[0]->{$attribut} }; }
Comme vous le voyez dans le code ci-dessus, les références symboliques ça sert, mais il faut quand même savoir ce qu'on fait...
use warnings;
L'option -w de perl, et la pragma warnings
permettent de déclencher
les avertissements de Perl. Perl vous préviendra alors si vous utilisez
une construction ambiguë, si une variable n'apparaît qu'une fois ou
qu'elle n'est pas définie lors de son utilisation. Il y a au total huit
avertissements possibles.
use diagnostics;
Si vous ne comprenez pas un avertissement ou un message d'erreur, Perl
peut vous donner des explications supplémentaires. Pour cela, vous
pouvez soit chercher le message dans la longue page de manuel perldiag(1),
soit utiliser la pragma diagnostics
, afin que Perl vous affiche
le paragraphe d'explication associé à chaque avertissement ou message
d'erreur.
use diagnostics;
Le programme splain permet de traiter des messages d'erreur a posteriori.
$ perl monprog.pl 2>&1 > sortie $ splain sortie
Enfin, pour vous simplifier encore la vie, le module diagnostics.pm a été adapté pour aller chercher les explications en français. Pour ce faire, téléchargez la version 1.2 disponible sur CPAN et installez-la. Dans votre programme, insérez
use diagnostics '-l=fr';
et le programme ira chercher les explications dans perldiag.fr.pod
.
Il existe plusieurs revues consacrées exclusivement à Perl, et certaines revues plus générales disposent également d'une rubrique Perl.
The Perl Journal a été le premier magazine exclusivement consacré à Perl. Créé par Jon Orwant, et publié de façon trimestrielle depuis 1996, le magazine a accueilli les meilleurs auteurs sur Perl. Un certain nombre de livres ont d'ailleurs débuté à l'état d'articles dans TPJ (c'est le cas de Mastering Regular Expressions de Jeffrey Friedl, publié par O'Reilly).
Enfin, last, but not least, TPJ a organisé les 5 premières éditions de l'Obfuscated Perl Contests, où quelques mongueurs français se sont illustrés (http://paris.mongueurs.net/assombri/).
Aujourd'hui, The Perl Journal est publié mensuellement par CMP sous forme électronique uniquement (depuis novembre 2002). L'abonnement vous coûtera $12 par an.
Notez également que l'âge d'or de TPJ (1996-2002) est en train d'être édité et publié chez O'Reilly & Associates, sous la forme d'une série de trois livres dans la collection Best of The Perl Journal. Sachez que les archives de TPJ (période Jon Orwant et ce qui a suivi, jusqu'à la publication sous forme électronique, donc du 1 au 25) sont disponibles gratuitement sur http://www.tpj.com/.
CMP (l'éditeur actuel de TPJ) publie également un CD regroupant 101 articles consacrés à Perl, issus des archives de The Perl Journal, Dr. Dobbs Journal, Web Techniques, Webreview.com et Byte.com. Il s'agit en fait d'une image ISO que vous pourrez télécharger après l'avoir achetée (pour $12.95 ou $9.95 si vous êtes abonné).
Après la "chute" de TPJ, brian d foy
a lancé une revue complètement
électronique, distribuée gratuitement au format PDF. L'objectif était
de récréer l'équivalent du Perl Journal de Jon Orwant à son heure
de gloire. La revue vise l'ensemble de la communauté Perl, du débutant
au gourou.
Les 8 premiers numéros (0.0 à 0.7) ont été publiés de février 2002 à janvier
2003. À terme, il est prévu de sortir un magazine sur papier. Pour
le moment le magazine est en pause, principalement parce que
brian d foy
est occupé par ses obligations militaires en Irak.
D'autres magazines anglophones ouvrent leurs pages à Perl. Citons en particulier Linux Magazine, qui accueille une rubrique mensuelle de Randal L. Schwartz, ainsi que Sys Admin Magazine (qui avait pendant quelques mois fait survivre TPJ en en faisant un supplément du magazine pour ses numéros 21 à 25). Notez que les rubriques de Randal sont toutes disponibles sur son site personnel : http://www.stonehenge.com/merlyn/columns.html.
Linux Magazine France, depuis le numéro 41, publie chaque mois un article écrit par des membres des Mongueurs de Perl, la version française des Perl Mongers. Il s'agit d'une association qui se consacre à la promotion de Perl en France, par l'organisation de conférences (http://yapc.mongueurs.net/), en soutenant les groupes locaux d'utilisateurs (http://www.mongueurs.net/), et en faisant du prosélytisme partout où c'est possible.
Après l'introduction à Perl de Sylvain Lhullier, vous pourrez lire
ici des articles variés sur l'ensemble du spectre d'application de
Perl, avec pour objectif de présenter la manière Perl de faire les
choses. Que dire d'autre, sinon qu'il s'agit d'articles sur Perl
et ses techniques, écrits par des spécialistes du langage et
de ses applications, et que notre absence du numéro 51 est une
malencontreuse erreur de calendrier que nous nous efforcerons de
ne pas répéter... ;-)
Ces articles sont tous archivés sur http://articles.mongueurs.net/, si vous avez raté les épisodes précédents. Sylvain a reformaté (et corrigé) ses articles d'introduction en un seul document, disponible en PDF à l'adresse suivante : https://formation-perl.fr/guide-perl.html
Les livres sur Perl sont légion. Les bons comme les mauvais. Le site http://books.perl.org/ liste 113 livres en anglais consacrés à Perl, classés par auteur, éditeur, etc., mais le site lui-même contient peu de critiques de livres, et les notes ne suffisent pas à se faire une idée de l'intérêt de tel ou tel livre peu connu.
En général, les bons livres sur Perl sont ceux recommandés, voire écrits par des membres de la communauté Perl. Visitez un peu le web, ou posez des questions sur les listes de discussion pour vous faire une idée.
On trouve des critiques des nouvelles parutions sur la plupart des sites communautaires : http://use.perl.org/, http://www.perlmonks.org/, http://www.perl.com/. Sinon Google saura vous en trouver...
La réponse à de nombreuses questions se trouve dans la documentation
(et c'est de plus en plus vrai, car un gros effort a été fait dans
les versions récentes de Perl pour améliorer encore la documentation
disponible), il suffit de savoir chercher. RTFM, quoi. ;-)
J'espère donc que cet article vous aura rassuré après le choc qu'a dû
être normalement pour vous le premier appel à man perl
. N'imprimez
pas la documentation complète de Perl, c'est du gaspillage de papier.
(Si vous tenez vraiment à avoir du papier, achetez des livres, c'est
plus beau et plus facile à ranger...) La documentation en ligne permet
des recherches fructueuses et rapides, et la maîtrise de perldoc
est un atout indispensable pour les développeurs Perl.
Philippe 'BooK' Bruhat, <book@mongueurs.net>.
Philippe Bruhat est vice-président de l'association les Mongueurs de Perl (http://www.mongueurs.net/), membre du groupe Paris.pm et de l'équipe organisatrice de la conférence YAPC::Europe qui s'est déroulée à Paris en juillet 2003 (http://yapc.mongueurs.net/). Il est consultant en sécurité et l'auteur des modules Log::Procmail, HTTP::Proxy et Regexp::Log, disponibles sur CPAN.
Pour ce qui concerne la documentation, il a traduit les chapitres 3 à 9 d'Amelia (Programming Perl, 3rd edition) en français pour O'Reilly.
Copyright © Les Mongueurs de Perl, 2001-2020
pour le site.
Les auteurs conservent le copyright de leurs articles.