Perlで、インストールされているモジュールの一覧を取得するには ExtUtils::Installed を使うとよいという記事をよく見かけていたので、自分もよくそのようにしていました。
しかし本日、perlbrewでperl-5.12.2をインストールした後、bin/ 配下に置かれるコマンドをなんとなく眺めていたところ、instmodsh というコマンドがあることに気付きました。これを使うと、
$ instmodsh Available commands are: l - List all installed modules m <module> - Select a module q - Quit the program cmd? l Installed modules are: App::cpanminus HTML::Parser HTML::Tagset LWP Perl Time::HiRes URI cmd? q $
という感じで、簡単なシェルインターフェースを介してインストールされたモジュールの一覧を得ることができます(上記はまだperlインストール直後なので出力が少ないですが)。
ソースを見たところ、こちらも内部では ExtUtils::Installed を使用しているようなのですが、それでも perl -MExtUtils::Installed -le 'print for ExtUtils::Installed->new->modules'
といった、ExtUtils::Installedという長いモジュール名を2回も書くような onliner を思い出しつつ打つよりは楽でよいと思いました。
ちなみに、UIを介さずに直接一覧を出力したりファイルにリダイレクトさせたい場合には、以下のようにするとよいかと思います。
$ echo -e "l\nq" | instmodsh > instmod.log
最初のメッセージやプロンプトを削りたいのなら、こんな感じで。
$ echo -e "l\nq" | instmodsh | perl -ne 'next if 1 .. /^c/; print if /^\s/'
検索した限りだとこの instmodsh について言及した日本語記事はあまり見かけない様子で、折角デフォルトでperlに入っているのに、知られていないのは勿体無いなと思ったのでした。