bashのコマンドでPerlモジュールを見つける
とあるPerlのモジュールがインストールされているか知りたかったので、モジュールの見つけかたを調べてみました。
モジュールを見つける簡単な例
find `perl -e 'print "@INC"'` -name '*.pm' | grep モジュール名
findで探しgrepに渡し、自分の探したいモジュール名を入力します。正直なところ、いまいちわかりづらい部分があります。そのため、少し解説を加えてみます。
perl -e 'print "@INC"'
@INC配列はモジュールのパスが入っています。その配列の中身をprintで表示させています。以下は実際に@INC配列を表示させてみました。
perl -e 'print "@INC"'
で
/etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.20.2 /usr/local/share/perl/5.20.2 /usr/lib/x86_64-linux-gnu/perl5/5.20 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.20 /usr/share/perl/5.20 /usr/local/lib/site_perl
findコマンド
findコマンドは
find ディレクトリ 検索条件
で構成されています。ディレクトリは先ほどPerlで表示させたモジュールパスの一覧が複数並んでいる状態になります。つまり
find /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.20.2...
となっています。最後に検索条件の-nameがついています。ここでは検索パターンを並べてます。*.pmとなっているので.pmがついたファイル全てを表示してくれます。実際にfindで調べた結果の一部を見てみます。
/usr/local/share/perl/5.20.2/LWP/Protocol/file.pm /usr/local/share/perl/5.20.2/LWP/Protocol/cpan.pm /usr/local/share/perl/5.20.2/LWP/Protocol/loopback.pm /usr/local/share/perl/5.20.2/LWP/Protocol/nogo.pm /usr/local/share/perl/5.20.2/LWP/Protocol/nntp.pm /usr/local/share/perl/5.20.2/LWP/Protocol/ftp.pm /usr/local/share/perl/5.20.2/LWP/Protocol/mailto.pm /usr/local/share/perl/5.20.2/LWP/Protocol/GHTTP.pm /usr/local/share/perl/5.20.2/LWP/Protocol/https.pm /usr/local/share/perl/5.20.2/LWP/Protocol/gopher.pm
grepコマンド
一通り.pmのついたファイルを表示させてから、grepにデータを渡してます。grepは表示した結果から欲しい情報だけ表示することができます。例えばDBIxがついたディレクトリを調べたい場合。
find `perl -e 'print "@INC"'` -name '*.pm' | grep DBIx
で
/usr/local/share/perl/5.20.2/DBIx/Class/InflateColumn/File.pm /usr/local/share/perl/5.20.2/DBIx/Class/InflateColumn/DateTime.pm /usr/local/share/perl/5.20.2/DBIx/Class/Serialize/Storable.pm /usr/local/share/perl/5.20.2/DBIx/Class/ResultSourceHandle.pm /usr/local/share/perl/5.20.2/DBIx/Class/Carp.pm /usr/local/share/perl/5.20.2/DBIx/Class/ResultSet.pm
と、なります。