pl2bat - enveloppe du code perl dans un fichier batch


NOM

pl2bat - enveloppe du code perl dans un fichier batch (.bat)

Retour en haut de la page


SYNOPSIS

pl2bat -h

pl2bat [-w] [-a argstring] [-s stripsuffix] [files]

pl2bat [-w] [-n ntargs] [-o otherargs] [-s stripsuffix] [files]

Retour en haut de la page


DESCRIPTION

Cet utilitaire convertit un script perl en un fichier batch qui peut être exécuté sur les systèmes d'exploitation compatible DOS. Il a été conçu pour vous permettre d'utiliser un script Perl comme les programmes courants et les fichiers batch où vous entrez le nom du script [probablement sans l'extension] suivi des arguments de la ligne de commande : le script est trouvé dans votre PATH et est lancé.

AVANTAGES

Il y a plusieurs alternatives à cette méthode de lancer un script Perl. Elles ont chacune des inconvénients qui vous aideront à comprendre la raison d'utiliser pl2bat.

  1.     C:> perl x:/path/to/script.pl [args]
  2.     C:> perl -S script.pl [args]
  3.     C:> perl -S script [args]
  4.     C:> ftype Perl=perl.exe "%1" %*
        C:> assoc .pl=Perl
        then
        C:> script.pl [args]
  5.     C:> ftype Perl=perl.exe "%1" %*
        C:> assoc .pl=Perl
        C:> set PathExt=%PathExt%;.PL
        then
        C:> script [args]

1 et 2 sont les méthodes d'invocation les plus basiques qui devraient fonctionner sur tout système [compatible DOS ou non]. Ils demandent plus de frappes au clavier et exigent de l'utilisateur qu'il sache que le script est écrit en Perl. C'est pénible quand vous avez beaucoup de scripts dont certains sont écrits en Perl et d'autres non. Il peut être tout à fait difficile de se souvenir quels sont les scripts qui ont besoin d'être lancés avec Perl et lesquels n'en ont pas besoin. Même pire, les scripts sont souvent des réécritures de simples fichiers batch en des scripts Perl plus puissants, auxquels cas ces méthodes exigeraient que tous les utilisateurs soient tenu au courant.

3 marche sur les versions Win32 modernes de Perl. Cette méthode permet à l'utilisateur d'omettre l'extension de fichier « .pl » ou « .bat », ce qui est une amélioration mineure.

4 et 5 fonctionnent sur quelques systèmes d'exploitation Win32 avec quelques shells de commande. Un inconvénient majeur avec les deux est que vous ne pouvez les utiliser ni avec les pipes ni avec les redirections de fichier. Par exemple, aucune des commandes suivantes ne fonctionnera correctement si vous utilisez la méthode 4 ou 5:

    C:> script.pl <infile
    C:> script.pl >outfile
    C:> echo y | script.pl
    C:> script.pl | more

Ceci est dû à un bug de Win32 sur lequel Perl n'a aucun contrôle. Ce bug est la motivation majeure pour pl2bat [lequel a été écrit pour DOS à l'origine] d'être utilisé sur les systèmes Win32.

Notez aussi que 5 marche sur une plus petite gamme de combinaisons de systems Win32 et commandes du shell alors que 4 exige que l'utilisateur sache que le script est un script Perl [parce que l'extension « .pl » doit être entrée]. Cela rend difficile de rendre standard l'un ou l'autre de ces méthodes.

INCONVÉNIENTS

Il y a plusieurs pièges potentiels dont vous devez être conscient quand vous utilisez pl2bat.

Le fichier batch engendré est traité comme un fichier batch à chaque fois qu'il est exécuté. Cela signifie que, pour l'utiliser dans un autre fichier batch, vous devez le faire précédé de call car sinon le fichier batch appelant ne lancera aucune commande placé après le script.

    call script [args]

Excepté sous Windows NT, si vous spécifiez plus de 9 arguments au fichier batch produit, alors le 10e argument et les suivants seront ignorés silencieusement.

Sauf si vous utilisez CMD.EXE sous Windows NT, si perl.exe n'est pas dans votre PATH, alors le lancement du script vous donnera un message d'erreur du type «Commande ou nom de fichier incorrect» qui vous fera sans doute penser que le script n'est pas dans votre PATH. Quand on utilise CMD.EXE sous Windows NT, le message d'erreur générique est suivi de «You do not have Perl in your PATH», pour rendre ceci plus clair.

Sur la plupart des systèmes d'exploitation compatibles DOS, la seule manière de sortir d'un fichier batch est de «sauter à la fin» du fichier. pl2bat implémente ceci en faisant un goto :endofperl et en ajoutant __END__ et :endofperl à la fin du fichier batch engendré. Ce qui signifie que :

Aucune ligne de votre script ne doit commencer par deux points «:».
En particulier, pour cette version de pl2bat, :endofperl, :WinNT, et :script_failed_so_exit_with_non_zero_val ne doivent pas être utilisés.

Des précautions doivent être prises dans l'utilisation de __END__ et du descripteur de fichier DATA.
Une approche est :
    .  #!perl
    .  while( <DATA> ) {
    .     last   if  /^__END__$/;
    .     [...]
    .  }
    .  __END__
    .  lignes de données
    .  à traiter
    .  __END__
    .  :endofperl

Les points dans la première colonne ne sont là seulement que pour empêcher cmd.exe d'interpréter la ligne :endofperl dans cette documentation. Sinon pl2bat.bat ne fonctionnerait pas. Voyez l'article précédent. :-)

Le fichier batch «réussit» toujours.
Les commandes suivantes illustrent le problème :
    C:> echo exit(99); >fail.pl
    C:> pl2bat fail.pl
    C:> perl -e "print system('perl fail.pl')"
    99
    C:> perl -e "print system('fail.bat')"
    0

Donc fail.bat répond toujours qu'il s'est exécuté avec succès. Remarquons que nous avons sous Windows NT :

    C:> perl -e "print system('fail.bat')"
    1

Donc, pour Windows NT, fail.bat échoue quand le script Perl échoue, mais le code de retour est toujours 1 et non le code de retour du script Perl.

FONCTION

Par défaut, le suffixe «.pl» sera ôté avant d'ajouter un suffixe «.bat» aux noms de fichiers fournis. Ceci peut être contrôlé avec l'option S.

Par défaut, le fichier batch compare la variable d'environnement OS avec "Windows_NT". Si il y a coïncidence, il utilise la construction %* pour faire référence à tous les arguments de la ligne de commande qui lui ont été passés, donc ayez soin de vérifier que cela fonctionne sur votre variante du shell de commande. On sait que cela fonctionne avec le shell CMD.EXE de Windows NT. Les utilisateurs de 4DOS/NT devront mettre une ligne ParameterChar = * dans leur fichier d'initialisation, ou exécuter setdos /p * dans le fichier d'amorçage du shell.

Sur Windows95 et les autres plateforms, une limite de neuf arguments est imposées aux arguments de ligne de commande passés au fichier batch engendré puisqu'ils n'acceptent pas %* dans les fichiers batch.

Ceci peut être changé en utilisant les options -n et -o ou l'option dépréciée -a.

Retour en haut de la page


OPTIONS

-n ntargs
Arguments pour invoquer perl dans le fichier batch engendré quand il est lancé sous Windows NT. Par défaut : '-x -S %0 %*'.

-o otherargs
Arguments pour invoquer perl dans le fichier batch engendré quand il est lancé sous un autre système que Windows NT (c-à-d lancé sous DOS, Windows 3.1, ou Windows 95). Par défaut : '-x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9'.

-a argstring
Arguments pour invoquer perl dans le fichier batch engendré. Spécifier -a empêche le fichier batch de tester la variable d'environnement OS pour déterminer depuis quel système d'exploitation il a été lancé.

-s stripsuffix
Ôte une chaîne suffixe du nom de fichier avant d'ajouter un suffixe «.bat». Le suffixe n'est pas sensible à la casse. Il peut être une expression rationnelle s'il commence par `/' (le dernier `/' est optionnel et un $ final est toujours sous-entendu). Par défaut : /.plx?/.

-w
Si aucune ligne correspondant à /^#!.*perl/ n'est trouvé dans le script, une telle ligne est insérée juste après le nouveau préambule. La ligne exacte dépend de $Config{startperl} [voir Config]. Avec l'option -w, " -w" est ajouté après la valeur de $Config{startperl}. Si une ligne correspondant à /^#!.*perl/ existe déjà dans le script alors elle n'est pas changée et l'option -w est ignorée.

-u
Si le script apparaît comme ayant été déjà traité par pl2bat, alors le script est sauté et non traité à moins que -u ne soit spécifié. Si -u est spécifié, le préambule existant est remplacé.

-h
Affiche l'utilisation de la ligne de commande (aide)

Retour en haut de la page


EXEMPLES

        C:\> pl2bat foo.pl bar.PM
        [..crée foo.bat, bar.PM.bat..]
        C:\> pl2bat -s "/\.pl|\.pm/" foo.pl bar.PM
        [..crée foo.bat, bar.bat..]
        C:\> pl2bat < somefile > another.bat
        C:\> pl2bat > another.bat
        print scalar reverse "rekcah lrep rehtona tsuj\n";
        ^Z
        [..another.bat est maintenant une application certifiée japh..]
        C:\> ren *.bat *.pl
        C:\> pl2bat -u *.pl
        [..met à jour l'enveloppe d'un script précédemment enveloppé avec pl2bat..]
        C:\> pl2bat -u -s .bat *.bat
        [..identique à l'exemple précédent, mais plus dangereux..]

Retour en haut de la page


BUGS

$0 contient le nom complet, le suffixe «.bat» compris, quand le fichier batch engendré tourne. Si vous n'aimez pas ça, voyez runperl.bat pour une autre manière d'invoquer un script perl.

Le comportement par défaut est d'invoquer Perl avec l'option -S, donc Perl cherchera dans PATH pour trouver le script. Ceci peut avoir des effets indésirables.

Sur de vraiment vieille version de Perl Win32, vous ne pouvez pas lancer le script via

    C:> script.bat [args]

et vous devez utiliser

    C:> script [args]

Une boucle devrait être utilisée pour construire la liste d'arguments quand on n'est pas sous Windows NT de manière que plus de 9 arguments puissent être pris en compte.

Voir aussi INCONVÉNIENTS.

Retour en haut de la page


VOIR AUSSI

perl, perlwin32, runperl.bat

Retour en haut de la page


TRADUCTION EN FRANÇAIS

Jean-Louis Morel <jl_morel@bribes.org>

Retour en haut de la page

 pl2bat - enveloppe du code perl dans un fichier batch