Linux 上で Perl を使う場合、 自前ではビルドせずに大抵ディストロのパッケージ(rpm/deb)を使うのがほとんどである。 CPAN上のモジュールでも対応するディストロの方を使うのが、僕は好みである。 ディストロ側に対応するパッケージが無い場合は、仕方なく cpan コマンドを使ってインストールして使っている。
cpan -i モジュール名
cpan コマンドでインストールしたモジュールをアンインストールしたいとか思っても、いまいち方法が分からなかった。。。
「cpan help」 とかやると、よくわからん help モジュールがインストールされたり、「cpan list」とやっても、list モジュールが、、、以下略。
で、CPANを使うと運用状態が続くと /usr/local 以下が何故だか意味不明な状態になってしまう。
私だけだろうけど、、、どうしたもんだろうかなぁ。
cpanコマンドでインストールされたもののリスト
ExtUtils::Installed モジュールを組み合わせると取得できるようなので、次のようにスクリプトを組んでみた。
cpan-list
#!/usr/bin/perl use ExtUtils::Installed; $inst = ExtUtils::Installed->new(); for $module (sort $inst->modules()) { $version = $inst->version($module); print "$module $version\n"; }
どっかの御大ならば一行スクリプトに仕立てるんだろうけどねぇ。。。
そこまで Perl 臭が染み付いていないので、これでいいかなぁ。。。
実行例
# ./bin/cpan-list HTML::Perlinfo 1.54 Perl 5.8.8
cpanコマンドでインストールされたもののアンインストール
同様に ExtUtils::Installedとかを組み合わせると、アンインストールするスクリプトが作れる。
cpan-uninstall
#!/usr/bin/perl use ExtUtils::Installed; use ExtUtils::Install; $module = $ARGV[0]; $inst = ExtUtils::Installed->new(); @modules = $inst->modules(); (grep $module,@modules) || die "$module is not install..."; uninstall($inst->packlist($module)->packlist_file()); print "uninstalled $module\n";
削除したいものを指定すれば削除できる。
実行例
# ./cpan-uninstall Module::Name uninstalled Module::Name
まとめ
果たして、これで良いのか疑問に残るが、目的は達したので良いのかなぁ。。。
取り敢えず、ディストロとCPANの組み合わせは怖くなくなったぞぃと。