インストール済モジュールのリスト

きっと同じようなことをやってる人がいるだろうと思って、ググってみた。
http://subtech.g.hatena.ne.jp/otsune/20060808/cpanbundle
http://it.kndb.jp/entry/show/id/2524
などを発見!

  • @INCを辿る
find `perl -e 'print "@INC"'` -name '*.pm' -print
  • perllocal使う
cat `perldoc -l perllocal` | perl -nle '/C<Module> L<([^\|]*?)\|.*?>/ and print "$1"' | sort -u

という2つの方法があるが、後者だとRPMでvendor_perlに入れたものがなぜかperllocalに見つからないので、前者を採用することにする。

前者でもカレントディレクトリ「.」が検索対象に入ってるので、ちょっと都合が悪い。そこでちょっと修正して以下のコマンドにしてみた。

find `perl -e 'for (@INC) { print "$_ " if $_ ne q/./ }'` -name '*.pm' -print | grep -P '(?:site|vendor)'

実行してみたところばっちり!
ひとまず目的はこれで果たせた!あとはRPM化してあるものを除外して、cpanからインストールしたものを探せばOK。

RPM化してないものを探す

最初は目で探そうと思ったが、10分くらいやってこの方法だと途方もなく時間がかかることに気づく。こういう時はコマンドで。

cpan_listにはインストール済みモジュールがフルパスで書かれているとして、

cat cpan_list | xargs rpm -qf | sort -u 

で一撃。やっぱり楽をするのが一番。