File::AddInc - __FILE__ ベースの FindBin + lib

前節で述べた FindBin の問題を抜本的に解決するには、 ライブラリパスを追加する時に、 $0 からではなく、 Perl の現在のファイル名 __FILE__ に基づいて ライブラリパスを導出する方法が考えられます。

この考えに基づき hkoba が開発したのが File::AddIncです。これを使って FindBin + lib を 書き換えると以下のようになります。

use FindBin;
use lib $FindBin::Bin;

# ↓↓

use File::AddInc;

cpm などが作る local/perl5 を直接サポートするオプションもあります。

use FindBin;
use lib $FindBin::Bin, "$FindBin::Bin/../local/perl5";

# ↓↓

use File::AddInc -local_lib;

前節で取り上げた FindBin で問題が出るケースについても、 より安全な $FindBin::Bin の代用となる変数を定義する機能が利用可能です。

use FindBin;
use lib "$FindBin::Bin/../subproject/libB";

# ↓↓

use File::AddInc qw($libdir);
use lib "$libdir/../subproject/libB";