Perlトリック: ライブラリパスをハードコードせずにモジュールをみつけられるようにする

コマンド「hoge.pl」とその実装モジュール「Hoge.pm」がプロジェクトディレクトリ/home/tengu/hoge/下にあるとする。hoge.plがHoge.pmをuseするには次の一つの条件が満されないといけない:
1 /home/tengu/hoge/からコマンドを走らせる
2 hoge.plがライブラリのパスを「use lib」で追加する
3 Hoge.pmがperlのライブラリパスにインストールされている

開発段階は1ですますのが一般的だと思う。でも、プロジェクトディレクトリ以外から走らせる段階になって困る。プロジェクトが完成してパッケージ化したら3のようにインストールできる。

その間の段階では2になるんだけど、use lib '/home/tengu/hoge'などのパスをハードコードしたくない。これだと移動するとすぐ壊れちゃう。

こういうときはコマンドから相対的なパスを切ると便利。
hoge.pl


...
BEGIN { use File::Basename; use lib dirname($0) }
use Hoge;
...

こうしておけば、プロジェクトディレクトリがどこに移動しようがコマンドの場所からモジュールが見付かるるのだ。