> perl -e "use Net::POP3;"
例えばNet::POP3モジュールがインストールされているかを上のように入力してチェックするんだな。これで何にも表示されずにプロンプトに戻ったらインストールされているということなんだな。インストールされていない場合はperlのライブラリディレクトリの下に指定されたモジュールが無いことを示すメッセージが出る。エラーを見ればわかるけど@INCにライブラリを探すディレクトリが収められているので下のようにすれば何がインストールされているかわかる。
> perl -e "print map{join qq/\t/,map{m|([^/]*)$|}<$_/*>}@INC" | more
これだと表示が1画面に収まらないのでパイプ処理でmoreに渡している。気になるなら下のようにもできる。ただこの場合マッチするもの以外は表示されない。例えば下の例では*.pmと*.plは表示されるが、*.txtは表示されない。
> perl -e "print map{join qq/\t/,map{m|([^/]*\.p[ml])$|}<$_/*>}@INC"
abbrev.pl AnyDBM_File.pm assert.pl attributes.pm attrs.pm
AutoLoader.pm AutoSplit.pm autouse.pm B.pm base.pm Benchmark.pm
bigfloat.pl bigint.pl bigint.pm bignum.pm bigrat.pl
bigrat.pm blib.pm ByteLoader.pm bytes.pm bytes_heavy.pl cacheout
.pl Carp.pm CGI.pm charnames.pm complete.pl Config.pm constant
.pm CPAN.pm ctime.pl Cwd.pm DB.pm DBM_Filter.pm dbm_filter_util.
pl diagnostics.pm Digest.pm DirHandle.pm dotsh.pl Dumpvalu
e.pm dumpvar.pl DynaLoader.pm Encode.pm encoding.pm English.
pm Env.pm Errno.pm exceptions.pl Exporter.pm fastcwd.pl
Fatal.pm Fcntl.pm fields.pm FileCache.pm FileHandle.pm
filetest.pm find.pl FindBin.pm finddepth.pl flush.pl getcwd.p
l getopt.pl getopts.pl hostname.pl if.pm importenv.pl
integer.pm IO.pm less.pm lib.pm locale.pm look.pl Memoize.pm
newgetopt.pl NEXT.pm O.pm Opcode.pm open.pm open2.pl open3.pl
ops.pm overload.pm perl5db.pl PerlIO.pm POSIX.pm
pwd.pl re.pm Safe.pm SDBM_File.pm SelectSaver.pm SelfLoader.pm Shell.pm
shellwords.pl sigtrap.pm Socket.pm sort.pm stat.pl Storable
.pm strict.pm subs.pm Switch.pm Symbol.pm syslog.pl
tainted.pl termcap.pl Test.pm Thread.pm threads.pm timeloca
l.pl UNIVERSAL.pm utf8.pm utf8_heavy.pl validate.pl vars.pm vmsish.p
m warnings.pm Win32.pm XSLoader.pmDB_File.pm fix_4_os2.pl
LWP.pm MD5.pm OLE.pm Tk.pm URI.pm Win32.pm
フィルタリングに正規表現を使用し、マッチしたものだけを表示させている。ディレクトリ直下に含まれるモジュールしか表示されない。map{}でディレクトリの部分をフィルタリングしている。これはreaddirを使わないで書こうとしたためだ。opendir readdir closedirとすると1行スクリプトと言うには長すぎるからね。