CPANのどのモジュールが入っているか知りたいときにどうやって確認すればいいのかと迷うのでまとめ。
RubyのGemみたいに『cpan list』とかでインストール済みのモジュールが出ればいいのに。笑
モジュールが入っているかどうかをサラッと確認
まずはシンプルに。
perl -Mモジュール名 -e ''
実際にコマンドを実行してみます。
root@bacchi:~# perl -MDBI -e \'\'
何もメッセージが出なければ指定したモジュールが入っていることを示します。
root@bacchi:~# perl -MSCP -e \'\'
Can\'t locate SCP.pm in @INC (@INC contains: /root/.plenv/versions/5.10.1/lib/perl5/5.10.1/x86_64-linux /root/.plenv/versions/5.10.1/lib/perl5/5.10.1 /root/.plenv/versions/5.10.1/lib/perl5/site_perl/5.10.1/x86_64-linux /root/.plenv/versions/5.10.1/lib/perl5/site_perl/5.10.1 .).
BEGIN failed--compilation aborted.
エラーメッセージが出た場合は指定したモジュールは入っていないことを示します。
perldocが見えるかどうかで判断する
perldocの有無でモジュールの有無がわかります。
perldoc -m モジュール名
実際にコマンドを実行してみます。
root@bacchi:~# perldoc -m DBI
# $Id$
# vim: ts=8:sw=4:et
#
# Copyright (c) 1994-2012 Tim Bunce Ireland
#
# See COPYRIGHT section in pod text below for usage and distribution rights.
#
package DBI;
require 5.008_001;
(省略)
モジュールに関する説明が出てくれば指定したモジュールがインストール済みであることを示します。
エラーメッセージが出てくれば指定したモジュールはインストールされていないことを示します。
モジュールのパスも知りたい
パスが知りたいというときもあると思います。
find `perl -e \'print "@INC"\'` -name \'モジュール名\'
実際にコマンドを実行してみます。
root@bacchi:~# find `perl -e \'print "@INC"\'` -name \'DBI\'
/root/.plenv/versions/5.10.1/lib/perl5/site_perl/5.10.1/x86_64-linux/Bundle/DBI.pm
/root/.plenv/versions/5.10.1/lib/perl5/site_perl/5.10.1/x86_64-linux/DBI.pm
/root/.plenv/versions/5.10.1/lib/perl5/site_perl/5.10.1/x86_64-linux/Bundle/DBI.pm
/root/.plenv/versions/5.10.1/lib/perl5/site_perl/5.10.1/x86_64-linux/DBI.pm
./.cpan/build/DBI-1.633-HYTxMK/DBI.pm
./.cpan/build/DBI-1.633-HYTxMK/lib/Bundle/DBI.pm
./.cpan/build/DBI-1.633-HYTxMK/blib/lib/DBI.pm
./.cpan/build/DBI-1.633-HYTxMK/blib/lib/Bundle/DBI.pm
./.plenv/versions/5.10.1/lib/perl5/site_perl/5.10.1/x86_64-linux/Bundle/DBI.pm
./.plenv/versions/5.10.1/lib/perl5/site_perl/5.10.1/x86_64-linux/DBI.pm
./.cpanm/work/1431945312.23062/DBI-1.633/DBI.pm
./.cpanm/work/1431945312.23062/DBI-1.633/lib/Bundle/DBI.pm
./.cpanm/work/1431945312.23062/DBI-1.633/blib/lib/DBI.pm
./.cpanm/work/1431945312.23062/DBI-1.633/blib/lib/Bundle/DBI.pm
インストールされているモジュールすべて知りたい
すべてのモジュールをババっと。
find `perl -e \'print "@INC"\'` -name \'*.pm\'
実際にコマンドを実行してみます。
root@st-link100.crmstyle:~# find `perl -e \'print "@INC"\'` -name \'*.pm\'
/root/.plenv/versions/5.10.1/lib/perl5/5.10.1/x86_64-linux/Config.pm
/root/.plenv/versions/5.10.1/lib/perl5/5.10.1/x86_64-linux/lib.pm
/root/.plenv/versions/5.10.1/lib/perl5/5.10.1/x86_64-linux/re.pm
/root/.plenv/versions/5.10.1/lib/perl5/5.10.1/x86_64-linux/XSLoader.pm
/root/.plenv/versions/5.10.1/lib/perl5/5.10.1/x86_64-linux/DynaLoader.pm
/root/.plenv/versions/5.10.1/lib/perl5/5.10.1/x86_64-linux/attrs.pm
/root/.plenv/versions/5.10.1/lib/perl5/5.10.1/x86_64-linux/B.pm
/root/.plenv/versions/5.10.1/lib/perl5/5.10.1/x86_64-linux/O.pm
/root/.plenv/versions/5.10.1/lib/perl5/5.10.1/x86_64-linux/DB_File.pm
/root/.plenv/versions/5.10.1/lib/perl5/5.10.1/x86_64-linux/Encode.pm
/root/.plenv/versions/5.10.1/lib/perl5/5.10.1/x86_64-linux/encoding.pm
/root/.plenv/versions/5.10.1/lib/perl5/5.10.1/x86_64-linux/Fcntl.pm
/root/.plenv/versions/5.10.1/lib/perl5/5.10.1/x86_64-linux/GDBM_File.pm
(省略)
-name の条件を『\'*\'』とするとファイルが出力されすぎなので、少し絞りました。
lessをかませてやるとよいでしょう。