Hatena::ブログ(Diary)

Yet Another Hackadelic

2009-04-16

cpan コマンドでインストールしたモジュールを調べる

ExtUtils::Install, ExtUtils::Installed を使うと cpan コマンドでインストールしたモジュールについてあれやこれや調べる事が出来ます。

インストールされているモジュール一覧

perl -MExtUtils::Installed -le 'print join "\n" => sort ExtUtils::Installed->new->modules;'

特定のモジュール名が属する dist に含まれるファイル一覧

$ perl -MExtUtils::Installed -le 'print join "\n" => sort ExtUtils::Installed->new->files(shift @ARGV);' YAML::Syck
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/JSON/Syck.pm
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/YAML/Dumper/Syck.pm
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/YAML/Loader/Syck.pm
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/YAML/Syck.pm
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/YAML/Syck/Syck.bs
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/YAML/Syck/Syck.so
/usr/share/man/man3/JSON::Syck.3pm
/usr/share/man/man3/YAML::Syck.3pm

cpan コマンドでインストールしたモジュールの uninstall

$ perl -MExtUtils::Install -MExtUtils::Installed -e 'my $plist = ExtUtils::Installed->new->packlist(shift @ARGV); uninstall($plist->packlist_file, 1, 1) if ($plist);' YAML::Syck
unlink /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/JSON/Syck.pm
unlink /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/YAML/Dumper/Syck.pm
unlink /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/YAML/Loader/Syck.pm
unlink /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/YAML/Syck.pm
unlink /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/YAML/Syck/Syck.bs
unlink /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/YAML/Syck/Syck.so
unlink /usr/share/man/man3/JSON::Syck.3pm
unlink /usr/share/man/man3/YAML::Syck.3pm
unlink /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/YAML/Syck/.packlist

uninstall の第3引数が真ならば実際には実行しません。

また ExtUtils::Install::uninstall しても perllocal には残ったままです。

packlist ファイルの場所

$ perl -MExtUtils::Install -MExtUtils::Installed -le 'my $plist = ExtUtils::Installed->new->packlist(shift @ARGV); print $plist->packlist_file if ($plist);' YAML::Syck
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/YAML/Syck/.packlist

そして cat してみる

$ cat `perl -MExtUtils::Install -MExtUtils::Installed -le 'my $plist = ExtUtils::Installed->new->packlist(shift @ARGV); print $plist->packlist_file if ($plist);' YAML::Syck`
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/JSON/Syck.pm
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/YAML/Dumper/Syck.pm
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/YAML/Loader/Syck.pm
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/YAML/Syck.pm
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/YAML/Syck/Syck.bs
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/YAML/Syck/Syck.so
/usr/share/man/man3/JSON::Syck.3pm
/usr/share/man/man3/YAML::Syck.3pm

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。