La perle de ce mois-ci a été rédigée par Sébastien Aperghis-Tramoni
(<sebastien@aperghis.net>
), de Sophia.pm.
Une question qui revient de temps en temps sur les listes et forums est de savoir comment désinstaller un module installé à la main ou avec le shell CPAN. Il est vrai que comme on a très rarement besoin de véritablement retirer un module du système de fichier, cette opération n'est pas bien documentée.
Mais d'abord, une petite précision technique : lorsqu'on installe
un module en utilisant Makefile.PL ou Build.PL, ceux-ci enregistrent
tous les fichiers ajoutés dans un fichier .packlist. Effacer ces
fichiers est donc aussi simple que rm `cat /path/to/.packlist`
Le souci est par contre de savoir où est situé ce fichier, car il est
lui-même stocké dans l'arborescence des modules Perl. Il y a bien sûr
une logique de placement, mais sans surprise, il existe un module,
livré avec Perl depuis la version 5.5, dont c'est précisément le rôle.
Nommé de manière assez logique ExtUtils::Installed
, ce module peut
être utilisé de la manière suivante pour écrire un désinstalleur très
simple :
#!/usr/bin/perl use strict; use ExtUtils::Installed; my $mod = $ARGV[0] || die "usage: $0 Module\n"; my $inst = ExtUtils::Installed->new(); unlink $inst->files($mod), $inst->packlist($mod)->packlist_file();
Petite explication. L'objet ExtUtils::Installed
créé permet directement
d'avoir la liste des fichiers correspondant à un module grâce à la méthode
files()
, mais celle-ci omet néanmoins le fichier .packlist.
$inst->packlist($mod)
fournit l'objet ExtUtils::Packlist
correspondant, et la méthode packlist_file()
demande à l'objet son
propre chemin. On n'a plus qu'à passer tout cela à la fonction unlink()
et le tour est joué.
Les plus attentifs auront remarqué que ce n'est pas tout à fait vrai
car il reste les répertoires, maintenant vides. Et les quelques
utilisateurs de VMS voudront leur boucle sur le unlink()
pour
effacer toutes les révisions. Toutes ces personnes ont raison, mais
il s'agissait ici de montrer un exemple simple et facile à recopier.
Ceux qui veulent un utilitaire plus complet pourront le trouver dans
la documentation de ExtUtils::Packlist
... ou ils peuvent aussi
utiliser CPANPLUS, qui intègre une commande uninstall
.
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.