Cette dépêche est un complément de celle qui retrace l’histoire de Perl à l’occasion de la sortie de la version 5.30. Elle se concentre sur les ressources : documentation, tutoriels, folklore, outils pour découvrir et développer en Perl.
Pour rappel, Perl est un langage généraliste créé en 1987 par Larry Wall. « Perl continue de prospérer dans sa troisième décennie grâce à une communauté d’utilisateurs et de développeurs très dynamique. », dixit perldelta. Perl est distribué sous une double licence : Artistic Licence et GPL v1+. La plupart des modules du CPAN suivent également ce même traitement.
Perl 5 raptor de kraih, licence CC-BY-SA 4.0
Sommaire
-
Liens utiles
- Développement de Perl core
- Officiel
- Modules et installeurs
- Général
- Autour du CPAN
- Social
- Docs officielles
- Tutoriels
- Tutoriels en français
- Tutos interactifs
- Méta‐site qui liste les tutoriels
- Folklore autour de Perl
- Écosystème Perl
- Exécution de code Perl en ligne
- Exécution de code Perl en ligne (sites non spécifiques à Perl)
- Développer avec Perl
Liens utiles
Les paragraphes qui suivent concernant les liens n’ont pas pour but d’être exhaustifs mais plutôt de fournir des pointeurs vers des ressources ou d’attiser votre curiosité.
Développement de Perl core
- perl.git, là où se trouve le code de l’interpréteur Perl et son miroir sur GitHub ;
- le gestionnaire de tickets de Perl 5 (utilise le logiciel Perl Request Tracker le gestionnaire de tickets/patchs) ;
- liste Perl porters ;
- compiler et installer Perl à la main (si on ne veut pas du Perl vendor) ;
- perldelta 5.30.0 dernier journal des modifications ;
- historique très détaillé des versions de Perl ;
- dépréciations ;
- portabilité.
Officiel
- perl.org, la « maison » de Perl ;
- Perl Fundation, la fondation Perl ;
- White Camel Awards, récompense annuelle pour des personnes ayant contribué de manière importante à Perl. Et ce pas forcément avec du code !
Modules et installeurs
- installeur de modules moderne cpanm, par Tatsuhiko Miyagawa (profil CPAN) ;
- gestionnaire de version Perlbrew ;
- un autre gestionnaire de binaire Perl plenv. Différences entre perlbrew et plenv.
- bundler pour Perl : Perl carton qui utilise cpanfile ;
- liste de modules reconnus Task::Kensho ;
- Corelist, interface Web de l’outil Corelist qui permet de connaître les core modules inclus dans une version de Perl.
Général
- Perl Monks, le Stack Overflow de Perl à moins que stackoverflow soit le perlmonks généraliste :D (OK, on n’est pas vendredi, je sors) ;
- Perl Monks… encore, parce que c’est vraiment bien, même si ça ressemble à une grotte ;
- Perldoc (perl.org) et Perldoc (perldoc.pl) ;
- liste de core modules ;
- lister les dépendances d’un module CPAN ;
- discussion sur les modules avant la mise sur CPAN ;
- Perl Maven, un énorme site sur Perl ;
- perlmeme.org, un site sur Perl (tutoriels, FAQ et autres).
Autour du CPAN
- [NOUVEAU] CPANdoc, doc de modules importants ;
- CPAN Testers, un site pour gérer les contructions et rapports de test des modules CPAN ;
- CPAN map, carte des espaces de noms CPAN ;
- CPAN Cover, couverture de test des modules CPAN ;
- CPAN TS, Kwalitee métriques ;
- CPAN IO classement des auteurs CPAN selon leur activité.
Social
- Perl reddit ;
- site de blogs sur Perl ;
- Perl Mongers ;
- les mongueurs de Perl FR ;
- Nice Perl blog ;
- newsletter hebdomadaire ;
- Perl Hacks, blog ;
- Perlsphere, agrégateur de blogs ;
- conférences Yet Another Perl Conference YAPC, YAPC Europe, les journées Perl et également OSDC (un peu mort, on dirait) ;
- des canaux IRC, notamment pour les mongueurs français, mojolicious, dancer, catalyst, etc. ;
- Perl.com, domaine récent (malgré son nom…), un fil d’actualités ;
- Perlbuzz, un fil d’actualités.
Docs officielles
- Perl FAQ ;
- des livres à propos de Perl : Mon étagère de livres sur Perl — licence CC BY SA
- perlre, la doc des expressions rationnelles ainsi que le tuto et le quick start D’après xkcd — Licence CC BY NC
- la liste des opérateurs et des fonctions built‑in ;
- écriture des modules / paquets ou encore ici, écrire un nouveau module, conseils pour respecter le style dans les modules ;
- doc sur la syntaxe Perl ;
- les références et le tutoriel ;
- la doc sur les IPC ;
- la sécurité dans Perl : taint checking (ou « data flow analysis »), setuid, clean PATH, protection des attaque de complexité algorithmiques ;
- la doc sur la génération de rapports grâce aux formats — les formats sont une des raisons de la création de Perl, mais restent limités et beaucoup moins utilisés ;
- doc du débogueur ; le débogueur de Perl est lui‐même écrit en Perl ;) ;
- orienté objet avec Perl ? Doc perlobj et tuto oo.
Tutoriels
- Perl maven ;
- Learn Perl in about 2 hours and 30 minutes ;
- Minimum Viable Perl (MVP) ;
- Perl-begin ;
- Perl101 ;
- Perl tutorialpoints;
- Perl tutorial ;
- Perl in 1 day guru99.
Tutoriels en français
- Guide Perl ;
- Formation-Perl ;
- Guide de programmation pour apprendre Perl ;
- site du zéro ;
- cours de l’Université de Rennes.
Tutos interactifs
Méta‐site qui liste les tutoriels
Folklore autour de Perl
- « perl » et « Perl » : Perl est le langage, perl en est l’interpréteur ;
- JAPH : Just Another Perl Hacker ;
- les opérateurs secrets et leurs petits surnoms : PerlSecret ;
- ce pourquoi certains détestent ou adorent Perl (entre autres) : les variables magiques ;
- TIMTOWDY : There’s more than one way to do it ;
- Seul perl peut parser Perl ou bien PPI ;
- la poésie Perl et, par exemple, le poème Black Perl de Larry Wall ;
- [DEAD] Perlgolf (code golf) ;
- Les trois vertus du programmeur : paresse, impatience et orgueil ;
- Le logo dromadaire de Perl (tiré du livre Programming Perl chez O’Reilly Media) (licence Artistic License) :
- le logo oignon (licence Artistic License) :
Écosystème Perl
- on dit généralement que la killer app Perl est le CPAN (metaCPAN) ;
- YaBB, moteur de forum ;
- Everything Engine, moteur de site d’actualités et site de questions‐réponses (qui fait tourner PerlMonks) ;
- Slashcode, moteur de site d’actualités et site de questions‐réponses (qui fait tourner Slashdot) ;
- Movable Type, système de gestion de contenu ;
- Munin, logiciel de supervision comme Nagios et Shinken ;
- BugZilla, outil de suivi de bogues ( projet GitHub) ;
- Perl to Java et Perl to JavaScript, compilateur Perlito.
- PDL, pour le calcul scientifique ;
- Mojolicious, cadriciel Web complet (plus bibliothèques) créé par Sebastian Riedel (profil CPAN) ;
- Catalyst, cardiciel Web complet ;
- Dancer, cadriciel Web minimaliste créé par Alexis Sukrieh ;
- [NOUVEAU] Tau Station, un jeu d’aventure spatiale en mode texte ;
- Frozen Bubble, un jeu très connu ;
- AWStats, analyse des journaux de serveurs Web (projet sur GitHub) ;
- Bloxsom, moteur de blog ;
- Oddmuse, un moteur de wiki ;
- Ikiwiki, un wiki ;
- TWiki, un autre wiki ;
- ACT (projet sur GitHub), une sorte de système de gestion de contenu pour les conférences ;
- Statocles, un moteur de blog statique (code source) ;
- Plstblog, un moteur de blog statique écrit par une moule LinuxFr ;
- Cowsay, la vache qui parle (mon terminal — licence CC BY SA)
- DuckDuckGo Instant Answer (projet GitHub, un moteur de site de questions‐réponses ;
- une partie d’openSUSE Buid Service (GitHub d’OBS build scripts et OBS backend) et d’autres repos sur le GitHub d’openSUSE ; la plate‐forme Open Build Service* est une infrastructure qui permet de construire des paquets pour plusieurs gestionnaires de paquets, plusieurs distributions et plusieurs architectures.
Exécution de code Perl en ligne
Exécution de code Perl en ligne (sites non spécifiques à Perl)
- tutorialpoints ;
- Rextester ;
- JDoodle ;
- paiza.IO ;
- codingground ;
- JS.do.
Développer avec Perl
Installer des modules du CPAN
La méthode moderne consiste à utiliser cpanm (cpanminus). L’outil se charge d’aller chercher le module demandé et de résoudre les dépendances. Par exemple, pour installer l’excellent module XML::LibXML de Shlomif qui est la bibliothèque de liaison Perl de libxml2, on peut faire sudo cpanm XML::LibXML
, qui produit la sortie suivante (tronquée) :
--> Working on XML::LibXML
Fetching http://www.cpan.org/authors/id/S/SH/SHLOMIF/XML-LibXML-2.0201.tar.gz ... OK
==> Found dependencies: Alien::Libxml2
--> Working on Alien::Libxml2
Fetching http://www.cpan.org/authors/id/P/PL/PLICEASE/Alien-Libxml2-0.09.tar.gz ... OK
[...]
Building and testing Alien-Libxml2-0.09 ... OK
Successfully installed Alien-Libxml2-0.09
Configuring XML-LibXML-2.0201 ... OK
Building and testing XML-LibXML-2.0201 ... OK
Successfully installed XML-LibXML-2.0201 (upgraded from 2.0128)
13 distributions installed
Réinstaller un ensemble de modules Perl CPAN peut se faire simplement en réexécutant une série de commandes cpanm ou bien en spécifiant des dépendances dans un fichier cpanfile (et utiliser carton pour la configuration).
Les linters
Exécutables à la main ou intégrables dans vos scripts, IDE ou éditeurs (utilisateurs de vim : ale ou syntastic).
-
perl -c
, pour vérifier la syntaxe. Attention ça fait plus que simplement vérifier la syntaxe, ça exécute aussi ce qui est dans les blocsBEGIN
etEND
qui sont destinés à être exécutés pendant la compilation. Ce design est la raison pour laquelle le linter par défaut utilisé par le greffon vim ale n’est plusperl -c
(ni mêmeperl -w
). La vérification de syntaxe est top. Personnellement, j’ai un projet qui contient ça dans le script de tests unitaires avec des vrais tests après :
my @files = <./*.pl>;
push @files, <./*.pm>;
for my $f (@files) {
system("perl -c $f 2>/dev/null");
my $real_ret_value = $? >> 8;
if($real_ret_value != 0) {
print "$f : Syntax error !\n";
} else {
print "$f : OK\n";
}
ok($real_ret_value == 0) or $fails += 1;
}
C’est quand même la base d’avoir du code syntaxiquement juste. :)
-
Perl::Critic, qui critique votre style de codage mais ne fait pas de vérification de syntaxe. Par exemple, le fichier
bad.pl
contien :
use strict;
print "toto" }{
Et perl -c bad.pl
nous affiche bien :
Unmatched right curly bracket at bad.pl line 3, at end of line
syntax error at bad.pl line 3, near ""toto" }"
Missing right curly or square bracket at bad.pl line 3, at end of line
bad.pl had compilation errors.
Mais perlcritic bad.pl
nous dit que tout va bien bad.pl source OK
(mais il râle si on ne met pas le use strict
).
- Un module qui était dans le cœur de Perl mais qui est sorti du core en 5.19 : B::Lint.
Au passage comment fait‐on pour retrouver l’historique d’un module ? Utilisez corelist !
corelist B::Lint
qui nous donne :
Data for 2017-09-22
B::Lint was first released with perl 5.005, deprecated (will be CPAN-only) in v5.17.9 and removed from v5.19.0
Toujours disponible dans CPAN évidemment. :)
- Et encore un Perl::Lint qui se concentre sur la vitesse tout en étant compatible avec Perl::Critic.
Comment compiler perl
Instructions pour compiler perl. En fait, ça va donner ça :
wget https://www.cpan.org/src/5.0/perl-5.30.0.tar.gz
tar -xzf perl-5.30.0.tar.gz
cd perl-5.30.0
./Configure -des -Dprefix=$HOME/localperl
make
make test
make install
Portabilité de perl : (plus de cent plates‐formes)
Compiler les modules
Qu’on utilise ou non un installeur de modules comme cpanm, au bout du compte le module est compilé avec ExtUtils::MakeMaker ou Module::Build. ExtUtils::MakeMaker est toujours un module du core, alors que Module::Build a été ajouté puis enlevé (5.9 → 5.19). David Golden explique dans un billet de blog pourquoi il a demandé à retirer Module::Build.
ExtUtils::MakeMaker
Le module ExtUtils::MakeMaker génère un makefile à partir d’un fichier Makefile.PL
:
perl Makefile.PL
make
make install
Module::Build
Le module Module::Build sert à la même chose mais génère un fichier Build à partir d’un fichier BUILD.PL
:
perl Build.PL
./Build
./Build test
./Build install
Aller plus loin
- Perl (44 clics)
- MetaCPAN (36 clics)
- Sortie de Perl 5.30.0 (52 clics)
# LemonLDAP::NG
Posté par KPTN (site web personnel, Mastodon) . Évalué à 10.
Dans l'écosystème Perl on peut également citer LemonLDAP::NG, une solution libre de WebSSO, contrôle d'accès et fédération d'identité, massivement déployée dans le secteur public en France.
[^] # Re: LemonLDAP::NG
Posté par eric gerbier (site web personnel) . Évalué à 5.
toujours l'écosystème Perl : spamassassin
[^] # Re: LemonLDAP::NG
Posté par ß ß . Évalué à 1.
L'outil de gestion de listes de diffusions sympa
Le célèbre jeu frozen bubble
fusioninventory et OCS NG
gearman (en partie)
Et d'autres.
[^] # Re: LemonLDAP::NG
Posté par Jona . Évalué à 2.
Moi, le premier qui me vient à l'esprit, c'est Webmin, un outil web d'administration de serveur de type Unix.
# Un projet Perl sympa et qui a de l'impact.
Posté par pierres . Évalué à 10.
Je ne sais pas si on fait du Perl moderne ou post-moderne, mais un projet Perl sympa et qui a (beaucoup) d'impact, c'est Open Food Facts :-)
C'est du code qui permet a des millions de français (et plus) de mieux manger, et il y a pas besoin d'un niveau avancé en Perl pour contribuer de manière significative :)
si ça vous dit:
https://github.com/openfoodfacts/openfoodfacts-server
et contact at openfoodfacts pouint org
Pierre
# Je veux crier ma haine !
Posté par Dring . Évalué à 5.
En général, sur un projet avec du perl dedans, ma première réaction c'est la fuite.
Quelques phrases que j'ai (trop) souvent entendu :
"on a enfin trouvé pourquoi le script xxxxxx était super lent ; c'était la partie perl" (et je travaille essentiellement sur des applications en Java, pas le truc réputé rapide, hein…)
"on a un script perl écrit il y a plusieurs années, mais personne n'ose y toucher, donc on corrige les bugs dans un script qui tourne juste après" (et je travaille avec des applications legacy basées sur des frameworks qui ont souvent disparu depuis plusieurs années)
Autant, j'arrive à justifier la présence de Python pour disposer des outils de machine learning ou faire du prototypage rapide autant pour Perl…
Et comme disait mon ancien boss : "la différence entre perl et whitespace, c'est que dans whitespace, l'obfuscation c'est fait exprès". La même marche aussi avec lisp, évidemment.
[^] # Re: Je veux crier ma haine !
Posté par totof2000 . Évalué à 6.
Je ne suis plus un fan de Perl, mais là … Perl a en général de perfs très bonnes, bien meilleures que Python. Du coup je me demande si c'est réellement la partie Perl qui pose problème. A moins que la personne ait tenté de faire du Perl multithreadé et s'est vautré dans son dev (libs pas prévues pour, gestion calamiteuses des locks …) mais dans ce cas c pas Perl le problème, mais le dev (un autre langage aurait causé les mêmes problèmes).
Ca par contre je le comprends.
[^] # Re: Je veux crier ma haine !
Posté par Kerro . Évalué à 4.
Pas moi. Mais je crois que c'est dû a une erreur de copié-collé.
Ou alors je suis hermétique à ton humour.
[^] # Re: Je veux crier ma haine !
Posté par BAud (site web personnel) . Évalué à 4.
c'est une remarque d'ops, pas de dév
[^] # Re: Je veux crier ma haine !
Posté par totof2000 . Évalué à 2.
Effectivement, erreur de copier coller. Je voulais coller la partie indiquant que oersonne ne voulait toucher le code Perl développé il y a longtemps.
[^] # Re: Je veux crier ma haine !
Posté par anaseto . Évalué à 7.
Perso, il me semble que dans tous les langages dynamiques du style (Perl, Python, …), si le code est maladroit ou n'a pas de tests, on n'ose pas y toucher.
Tu comparerais à des langages fortement typés comme Go ou Rust et là je te dirais, oui, le code vite-fait et sans tests fait nettement moins peur (après, du code sans tests fait toujours un peu peur à moins que ce soit court). Mais Python ou Perl ou Ruby ou Tcl, pour moi c'est à peu près les mêmes vraies difficultés : tous ces langages offrent très peu de garanties à la compilation (Tcl quasiment aucune, Python un peu plus mais moins que Perl avec
use warnings
etuse strict
) et permettent d'écrire de façon trop intelligente, car ils sont très flexibles et ont beaucoup de fonctionnalités.Par exemple : systèmes OO très riches (sans l'extension Moose, Python va même plus loin par défaut que Perl dans les abstractions non évidentes comme les itérateurs etc.), du mutable dans tous les sens (Tcl s'en sort mieux que Perl et Python pour ça), plein de sucre syntaxique ad hoc (list comprehensions en Python, manipulation de chaînes en Perl), effets de bords pas évidents à détecter (OO), portée non lexicale (i.e pas par blocs) des variables en Python et Tcl, dépendances circulaires de modules, overload d'opérateurs (particulièrement présent en Python, beaucoup moins en Perl ou Tcl), différents types d'égalité (
is
vs==
, etc.), des booléens qui sont des entiers (True == 1
) et, dans tous les cas, gare au typos dans les noms de fonctions ou variables (Perl détecte les typos dans les noms de variables, mais pas des fonctions, Python aucun des deux et Tcl ne détecte aucune sorte de typos, même dans les mots-clés du langage, car ce sont de simples fonctions). Et on pourrait continuer longtemps.Même si j'aime beaucoup les langages dynamiques (même le plus dynamique d'entre eux qui est Tcl), je trouve qu'ils demandent tous une grande discipline et que les différences de clarté entre les plus connus sont assez insignifiantes au final : les difficultés résident dans la nature de ces langages et leur flexibilité, pas dans leur utilisation des
$
ou l'indentation qui font pourtant souvent plus parler d'elles.Bref, dans le doute et sans connaissances au préalable d'un projet, je préfère lire du Go :-)
[^] # Re: Je veux crier ma haine !
Posté par Michaël (site web personnel) . Évalué à 7.
Blage à part, écrire des programmes illisibles ou difficiles à modifier pour d'autres raisons est plus une question d'état d'esprit que de langage.
Qu'il s'agisse de Java, Perl, Lisp, C, Python ou quoique ce soit d'autre. Même en Shell on peut écrire des programmes propre et maintenables, c'est dire!
[^] # Re: Je veux crier ma haine !
Posté par totof2000 . Évalué à 5.
Disons qu'avec certains langages c'est plus facile d'écrire du code illisible qu'avec d'autres.
[^] # Re: Je veux crier ma haine !
Posté par steph1978 . Évalué à 1.
Des langages ont plus idiomatiques que d'autres, plus expressif, et donc plus facilement obscur pour qqun qui ne les connaît pas bien.
Perl est IMHO très idiomatique : beaucoup de tournures que l'on ne comprend pas à la lecture sans vraiment maîtriser le langage.
Java est IMHO peu idiomatique : ça se lit. Pour rendre un programme très obscure, volontairement ou non, il faut multiplier les indirections (héritage à plusieurs niveau avec surcharge, factory).
[^] # Re: Je veux crier ma haine !
Posté par ß ß . Évalué à 5.
Est-ce qu'il n'y aurait pas un rapport entre les deux phrases ?
« La partie que personne ne maîtrise, dans un langage qui n'est pas celui qu'on connaît le mieux, qui a été codé il y a 20 ans et que personne n'ose toucher n'est pas la partie la plus optimisée ».
^_^
[^] # Re: Je veux crier ma haine !
Posté par flan (site web personnel) . Évalué à 2.
Pas forcément : celui qui l'a codé vingt auparavant était peut-être un expert du Perl ;)
# Perl 5 ?
Posté par ナイコ (site web personnel) . Évalué à 4.
Je rêve ou bien ? Je quitte LinuxFR pendant 10 ans, je reviens et Perl 6 n'est toujours pas sorti ? C'est quoi c'brin ?
/o\
[^] # Re: Perl 5 ?
Posté par ß ß . Évalué à 7.
On t'a dit pour Hurd ?
Par contre Debian est sortie. Plusieurs fois même.
[^] # Re: Perl 5 ?
Posté par rouzik . Évalué à 0. Dernière modification le 20 juillet 2019 à 08:38.
Perl 6 est sorti en 2015…
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.