Perlモジュールが入っているか調べる2つの簡単なやり方
Perlのモジュールがインストールされているかを調べる方法の中でも初心者向けのものを書き残しておきます。
Perlでスクリプトを書いているとよく自分が使おうとしているモジュールがインストールされているのか調べたくなる時がやってきます。
僕の知人にも最近Perlを使い始めた人が居まして、彼から今日まさにこのことについて質問されたので、彼がまた同じことを聞いてきた時に・或いは彼以外の人間がPerlを使い始めた時に答えやすいようにここに記録を残しておきたいと思います。
さて、本題に入りましょう。Perlのモジュールがインストールされているか調べる方法は幾つかありますが、ここでは2つ挙げておきます。
- 忙しい人向け
- インストールされているモジュールの.pmファイルのパスを調べたい人向け
この2つですね。他にも色々と手はありますが、まあ初心者向けの比較的簡単な手ということでひとつ。そうそう、今回の方法の中でも後者の方はFreeBSDかLinux向けです。Windowsでは利用できないと思いますので悪しからず。
忙しい人向け
「もうとにかく大急ぎでモジュールがあるか調べたい!」或いは「待ち時間があるなんて死んでも嫌!!」という人向けです。
シェル上で以下を実行してください。
perl -Mモジュール名 -e ''
はい、これで「モジュール名」で指定したモジュールが@INCにインストールされているか調べる事が出来ます。判別の方法もシンプルです。
何もメッセージが出なければモジュールが入っている
エラーメッセージが出ればモジュールは入っていない
とても解りやすいですね。僕は単にモジュールが入っているかだけ知りたい時には良くこの手を使っています。他にも
perldoc -m モジュール名
とperldocを実行して、
モジュールに関する説明が出てくればインストール済み
エラーメッセージが出てくればインストールされていない
という調べ方もあります。こちらはモジュールがインストールされていた時にそのモジュールの説明が出てくるので、「もうとにかく大急ぎでモジュールがあるか調べたい!」という人みたいな焦っている人には向かないかも知れません(笑
インストールされているモジュールの.pmファイルのパスを調べたい人向け
「モジュールのソースコードがインストールされたファイルパスが知りたい」人向けです。小見出しと言う事が被ったな(笑 まあいいや。こちらは少々時間が掛かります。
シェル上で以下を実行してください。
find `perl -e 'print "@INC";'` | less
こちらは@INC*1に置いてあるファイル一覧をfindで検索、全表示しています。findのオプションを上手く使えば特定の名前を含むモジュールだけを調べる事が出来ますので、そちらも試してみてください。
例えばFile::Findのソースコードがどこに入っているか確認する時には……
# find `perl -e 'print "@INC";'` -name "Find.pm"|less /usr/local/lib/perl5/site_perl/5.8.9/Pod/Find.pm /usr/local/lib/perl5/site_perl/5.8.9/Module/Install/Admin/Find.pm /usr/local/lib/perl5/site_perl/5.8.9/Module/Find.pm /usr/local/lib/perl5/site_perl/5.8.9/PPI/Find.pm /usr/local/lib/perl5/site_perl/5.8.9/Feed/Find.pm /usr/local/lib/perl5/5.8.9/File/Find.pm /usr/local/lib/perl5/5.8.9/Pod/Find.pm #
この様に、::で区切られた最後のブロックを検索対象とします。例の場合では太字の行がFile::Findのソースコードのパスになります。
ただし、ひとつだけ注意しておかなければなりません。@INCの検索対象はカレントディレクトリも含むため、コマンドを実行するカレントディレクトリ次第ではfindが延々と続いてしまう可能性があります。
この方法を使う場合にはマシンのリソースとカレントディレクトリにご注意ください。
# perl -e 'map { print "$_\n"; } @INC;' /usr/local/lib/perl5/5.8.9/BSDPAN /usr/local/lib/perl5/site_perl/5.8.9/mach /usr/local/lib/perl5/site_perl/5.8.9 /usr/local/lib/perl5/5.8.9/mach /usr/local/lib/perl5/5.8.9 . <--- カレントディレクトリが入っている!