[couverture de Linux Magazine 60]

Perles de Mongueurs (2)

Article publié dans Linux Magazine 60, avril 2004.

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

mod-vers

Vous avez un module GD qui fait du .gif ou du .png ? Est-ce la version 1.19 ou 1.20 ? Simple, tapez :

    $ mod-vers GD

où le fichier mod-vers contient une seule ligne :

    perl -l -M$1 -e "print \$$1::VERSION"

(le $1 est pour le shell et le \$ pour perl (à travers le shell))

Si vous avez un peu de place sur votre disque, installez plutôt le module Module::InstalledVersion. Il est livré avec un script modversion qui a le même but que le mien mais qui fonctionne différemment. Il permet de jeter un coup d'œil dans le source du module sans le compiler. À l'inverse, mon utilitaire charge le module et si ce dernier a besoin à son tour de charger d'autres modules... L'avantage de mon script par rapport au module de Kirrily Roberts (alias « Skud »), c'est sa taille et son temps d'installation. Également, si vous n'avez pas les autorisations suffisantes pour installer un module sur une machine qui n'est pas la vôtre, mon script est utilisable.

(Jean Forget, Paris.pm - jf@mongueurs.net)

Modules pré-requis

Vous êtes en train de créer un script ou un module qui utilise plein d'autres modules ; vous aimeriez savoir lesquels de ces modules sont livrés avec Perl, afin de prévenir vos utilisateurs (ou de rédiger correctement votre Makefile.PL).

Le module Module::Info de Michael G. Schwern peut vous aider :

    $ perl -MModule::Info -le 'print+(Module::Info->new_from_module($_)->is_core ? "Core" : "CPAN"),"\t$_" for @ARGV' LWP IO::File Module::Info Class::Struct
    CPAN	LWP
    Core	IO::File
    CPAN	Module::Info
    Core	Class::Struct

Module::Info est capable de récupérer pas mal d'informations dans un module, sans avoir besoin de le compiler. Si vous avez plusieurs versions de Perl installées, l'information Core ou CPAN va bien sûr dépendre de l'exécutable perl avec lequel vous aurez lancé le script.

(Philippe "BooK" Bruhat, Paris.pm - book@mongueurs.net)

Modules de la distribution Perl

Module::Info ne fonctionne qu'avec les modules et les versions de Perl installés sur votre système.

Pour savoir depuis quand un module CPAN a été intégré à Perl (au core), vous pouvez utiliser le module Module::CoreList, de Richard "Trelane" Clamp. Ce module référence les versions de chaque module standard de Perl, pour une dizaine de versions de Perl allant de 5.003_07 à 5.9.

Voici un one-liner qui comme le précédent prend les noms des modules en paramètre (on peut optionnellement donner le numéro de la version minimale requise pour le module en question) :

    $ perl -MModule::CoreList -le 'print Module::CoreList->first_release(split"/")||"CPAN","\t$_"for@ARGV' IO::File File::Spec File::Spec/0.64 File::Spec/0.82 File::Spec/0.83 File::Spec/0.84 File::Spec/0.85 File::Spec/0.86 LWP
    5.00307	IO::File
    5.005	File::Spec
    5.006	File::Spec/0.64
    5.006001	File::Spec/0.82
    5.007003	File::Spec/0.83
    5.008001	File::Spec/0.84
    5.008001	File::Spec/0.85
    5.008001	File::Spec/0.86
    CPAN	LWP

La fonction first_release() renvoie la première version de Perl où le module est apparu, ou undef si le module n'est pas standard. Si on lui donne en second paramètre un numéro de version pour le module, elle retourne la première version de Perl qui contiendra ce module ou une version supérieure (dans notre exemple, c'est File::Spec/0.86 qui est en fait inclus dans Perl 5.8.1)..

Ce module contient principalement le hachage %Module::CoreList::version, qui est un hachage (indexé par le numéro de version de Perl) de hachages (Module => version). La fonction first_release() est la seule de ce module, mais vous pouvez aussi trouver l'information qui vous intéresse en parcourant vous même %Module::CoreList::version.

(Perle proposée par BooK)

Conversion entre différents jeux de caractères

Si vous êtes amenés à transférer des fichiers entres différents systèmes d'exploitation ou entre différents applicatifs, vous serez probablement confrontés à des problèmes d'encodage. Même si le standard Unicode a été créé dans le but d'uniformiser ce bazar, la situation est encore loin d'être claire et il est bien utile de savoir comment passer un fichier d'un format à l'autre.

Pour effectuer une conversion d'un jeu de caractères à l'autre, on peut utiliser le module Unicode::String écrit par Gisle Aas.

Pour convertir de ISO-Latin-1 vers UTF-8 :

    $ perl -MUnicode::String=latin1 -ne 'print latin1($_)->utf8' fichier.txt > nouveau.txt

Pour convertir de UTF-16 vers ISO-Latin-1 :

    $ perl -MUnicode::String=utf16 -ne 'print utf16($_)->latin1' fichier.txt > nouveau.txt

Pour faire la conversion en direct (en gardant un fichier .bak), vous pouvez utiliser l'option -i de perl (ici avec le premier exemple) :

    $ perl -MUnicode::String=latin1 -pi.bak -e '$_=latin1($_)->utf8' fichier.txt'

L'utilisateur d'une version récente de Perl (5.8 ou plus) pourra avantageusement utiliser le module Encode de Dan Kogai, qui fournit même un script déjà prêt à l'emploi.

Pour convertir de ISO-Latin-1 vers UTF-8 :

    $ piconv --from latin1 --to utf8  fichier.txt > nouveau.txt

Pour convertir de UTF-16 vers ISO-Latin-1 :

    $ piconv --from utf16 --to latin1 fichier.txt > nouveau.txt

Notez qu'un prochain article des Mongueurs de Perl sera entièrement consacré à l'utilisation d'Unicode au sein de Perl et à ses interactions avec différents modules.

(Sébastien Aperghis-Tramoni (Maddingue), Marseille.pm - sebastien@aperghis.net)

Le saviez-vous ?

Les comptes-rendus de p5p

C'est Rafaël Garcia-Suarez, fondateur avec Jérôme Quelin de Lyon.pm, qui rédige les comptes-rendus hebdmadaires de p5p, la liste de diffusion des perl5-porters. Ses comptes-rendus permettent à ceux qui n'ont pas le temps, le courage ou les capacités de lire p5p de malgré tout suivre l'actualité du langage.

Les comptes-rendus sont accessibles sur le site use Perl à l'adresse http://use.perl.org/search.pl?tid=12 et sont envoyés à la liste perl5-summary@perl.org (abonnement par mail à l'adresse perl5-summary-subscribe@perl.org).

À 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]