Article publié dans Linux Magazine 104, avril 2008.
La perle de ce mois-ci a été rédigée par Laurent Gautrot
(l.gautrot@free.fr
), de Paris.pm.
Même si ça semble un peu incongru, ce qui suit parle certes de Perl mais le seul script complet sera en shell.
Lors de l'écriture d'un script Perl
, avant l'exécution, il est
possible de vérifier sa syntaxe dans une sorte d'exécution incomplète,
grâce à l'option de ligne de commandes de perl
.
-c causes Perl to check the syntax of the program and then exit without executing it. Actually, it will execute "BEGIN", "CHECK", and "use" blocks, because these are considered as occurring outside the execution of your program. "INIT" and "END" blocks, however, will be skipped.
Le résultat de cette phase de vérification est que toute erreur de
syntaxe sera affichée. Bien entendu, l'utilisation de certains pragma
entraînera une vérification plus stricte et l'affichage d'avertissements
(strict
, warnings
, etc.).
Il ne faut pas se voiler la face, Perl traîne une réputation de langage write-only. Pour éviter cela dans une certaine mesure, et en application de bonnes pratiques, il est raisonnable de respecter des conventions d'écriture.
Quelques recommandations sont proposées dans perlstyle(1)
, c'est
certainement une bonne idée que de s'y conformer, même si ce n'est
pas obligatoire.
En fait, si l'on est un peu fainéant, on peut utiliser un module pour
faire ça à sa place. Perl::Tidy
[1] permet de reformater le code selon
un ensemble de règles. Il existe même un outil en ligne de commandes
pertlidy
[2] qui fera tout ça pour vous.
Il suffit d'un :
perltidy script.pl
ou :
perltidy
La page de manuel fournit quelques options pour configurer le reformatage.
Il y a aussi le module Acme::PerlTidy
[3] qui propose de faire tout
automatiquement à chaque fois que le script est exécuté.
Pour citer le synoptique du module :
use Acme::PerlTidy; # your code here.
En parlant de recommandations, on ne peut qu'encourager l'application de bonnes pratiques, comme celles décrites dans le « Perl Best Practices » de Damian Conway.
Justement, le module Perl::Critic
[4] permet de vérifier le respect de
certaines des 256 bonnes pratiques de PBP. Là encore, il existe une commande
pour valider un script ou un module en Perl, il s'agit de perlcritic
[5].
Quelques articles des Mongueurs [6] [7] ont déjà abordé ce sujet, ils méritent le détour.
Pour appliquer les différentes étapes décrites ci-avant, j'utilise un script shell tout simple qui réalise les différentes étapes. Bien entendu, l'exécution est conditionnelle, parce qu'il n'est pas raisonnable de penser que l'on peut sans risque modifier la présentation et l'indentation d'un script alors qu'il n'est pas correct syntaxiquement.
Voici donc le script en question, qui s'appelle fullcheck
.
#!/bin/sh MV=/bin/mv PERL=/usr/bin/perl PERLTIDY=/usr/bin/perltidy PERLCRITIC=/usr/bin/perlcritic [ $# -lt 1 ] \ && { echo "usage: $0" ; exit 1 ; } [ ! -f $1 -a -r $1 ] \ && { echo "unreadable file: $1" ; exit 2 ; } function check_exec() { FAIL_EXEC=0 for EXECUTABLE in $@ do if [ ! -x $EXECUTABLE ] then echo "$EXECUTABLE is NOT executable, will fail later on." FAIL_EXEC=$(( $FAIL_EXEC + 1 )) fi done if [ $FAIL_EXEC -gt 0 ] then exit 3 fi } check_exec $PERL $PERLTIDY $PERLCRITIC $PERL -c $1 \ && $PERLTIDY $1 \ && $MV $1.tdy $1 \ && $PERLCRITIC $1
» [1] Perl::Tidy
- http://search.cpan.org/perldoc?Perl%3A%3ATidy
» [2] perltidy
- http://search.cpan.org/perldoc?perltidy
» [3] Acme::PerlTidy
- http://search.cpan.org/perldoc?Acme%3A%3APerlTidy
» [4] Perl::Critic
- http://search.cpan.org/perldoc?Perl%3A%3ACritic,
http://articles.mongueurs.net/comptes-rendus/npw-2007.html#h2.6
» [5] perlcritic
- http://search.cpan.org/perldoc?perlcritic
» [6] Améliorer les impressions de code source - http://articles.mongueurs.net/magazines/perles/perles-25.html
» [7] Tests et Perl - Bonnes pratiques - http://articles.mongueurs.net/magazines/linuxmag89.html
Envoyez vos perles à perles@mongueurs.net
, elles seront peut-être
publiées dans un prochain numéro de Linux Magazine.
Copyright © Les Mongueurs de Perl, 2001-2011
pour le site.
Les auteurs conservent le copyright de leurs articles.