[couverture de Linux Magazine 104]

Perles de Mongueurs (40)

Article publié dans Linux Magazine 104, avril 2008.

[+ del.icio.us] [+ Developers Zone] [+ Bookmarks.fr] [Digg this] [+ My Yahoo!]

La perle de ce mois-ci a été rédigée par Laurent Gautrot (l.gautrot@free.fr), de Paris.pm.

Vérification et mise en forme de script ou de module

Même si ça semble un peu incongru, ce qui suit parle certes de Perl mais le seul script complet sera en shell.

Vérification syntaxique

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.).

Nettoyage

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.

Bonnes pratiques

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.

Enrobage

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

Références

» [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

À vous !

Envoyez vos perles à perles@mongueurs.net, elles seront peut-être publiées dans un prochain numéro de Linux Magazine.

[IE7, par Dean Edwards] [Validation du HTML] [Validation du CSS]