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