標準じゃないモジュールの場所が知りたい

プロジェクト固有のモジュールを使ってるときに、そいつの場所を知りたいときがある。

% tree
.
|-- lib
|   `-- Mod.pm
`-- main.pl


こんなとき、訳あってMod.pmの場所を得たいとする。Module::Pluggableみたいなことがしたいのだ。
例だから簡単な構造にしてるけど、実際はあんなパスやこんなパスにモジュールがある、なんて場合がたまにある。
MyApp/lib、MyApp/Schema、MyApp/CLI、t/lib、とか。…catalystばっかやんけ。

main.pl

use strict;
use warnings;

use lib './lib';
use Mod;
use FindBin;
use Data::Dumper;
sub p ($) { print Dumper shift }

p $FindBin::RealBin;


だと得られるのはmain.plの場所。
…Mod.pmの場所が欲しいってのに。


こういうの何でやるんだっけーPath::Classだっけーと思ったところで


道家: つ Class::Inspector

main.pl

use strict;
use warnings;

use lib './lib';
use Mod;
use Class::Inspector;
use Data::Dumper;
sub p ($) { print Dumper shift }

print Class::Inspector->resolved_filename('Mod'),"\n";
% perl main.pl
./lib/Mod.pm


おお。またしても感謝。


俺「何でこんなモジュール知ってるんですか?」
道家「経験の差」


ちょっとずつ埋めていこう。