Perlモジュールをパスを検索
※ 2010/03/06 追記:
普通に「perldoc -l <モジュール名>」で調べられた。。。。今迄知らなかった…。
いつもPerlモジュールのコードを読むときは「perldoc -m モジュール名」としているが、モジュールのパスだけ知りたいときもある。
そんなときのために簡単なコードを書いてみた。
sm.pl
#! /opt/local/bin/perl -w use strict; use File::Find; use File::Spec::Functions; use File::Basename; use Getopt::Long; my $sModPath = ''; # path to Module file (like path/to/module). my %opt = ( full_path => 1, m_name => undef, ); GetOptions( 'full_path!' => \$opt{full_path}, 'm_name=s' => \$opt{m_name}, ) or usage(); init_opt(); find { wanted => \&filter, no_chdir => 1, }, @INC; sub filter { if (/$sModPath\.pm$/) { if (!$opt{full_path}) { # Only file name required. $_ = basename($_); } print canonpath "$_\n"; } } sub init_opt { if (defined $opt{m_name}) { my @aModPath = split /::/, $opt{m_name}; $sModPath = catfile(@aModPath); } } sub usage { print STDERR "USAGE: $0 [--full_path] [--m_name <module::name>]\n"; exit 1; }
使い方
/* 全てのモジュールをフルパスで取得 */ $ sm.pl /* <module::name>のパスを取得(フルパス) */ $ sm.pl --m_name <module::name> /* <module::name>のパスを取得(モジュールファイルのみ) */ $ sm.pl --m_name <module::name> --nofull_path