Modulino と @INC 問題

Modulino を本格的に使い始めた時に問題となるのが、モジュールのロードパス @INC をどう設定するか、です。

例えばある Modulino MyCMS.pm が同じディレクトリの別の Modulino MyConfig.pm を使っているとします。この場合、 MyCMS.pm は FindBin と lib を使って @INC の調整を行う必要があります。

#!/usr/bin/env perl
package MyCMS;
use strict;
use warnings;

# ↓この2行が無いと、このディレクトリ以下の他のモジュールを use 出来ない
use FindBin;
use lib $FindBin::Bin;

use MyConfig;
use MyCMS::DB;

unless (caller) {
  print "This is ", __PACKAGE__, "\n";
}

1;

@INC の調整を行わなかった場合、(お馴染みの)次のようなエラーが出るでしょう。

% ./MyCMS.pm
Can't locate MyConfig.pm in @INC (you may need to install the MyConfig module)...

同様に MyCMS/DB.pmMyCMS/Util.pm を読み込むために、 以下のような @INC 調整の宣言が必要です。

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