Article publié dans Linux Magazine 60, avril 2004.
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
)
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
)
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)
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
)
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
).
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.