cron で Perl スクリプト実行時に Can't locate My/Module.pm in @INC 等のエラーが出る

独自のモジュールを読み込ませて cron を実行するとエラーが出る場合がある。
原因は cron が実行する際のディレクトリが、cron の実行ユーザーのホームディレクトリになるため、任意のディレクトリを @INC に設定していてもエラーが発生する。
モジュールの場所を絶対パスで指定すれば、エラーはなくなるが、可搬性が失われてしまう。

エラーの内容例

% pwd
/home/littlebuddha
% perl -wc ~/perl/myscript.pl
Can't locate My/Module.pm in @INC (@INC contains: /Users/littlebuddha/local/lib/perl5/darwin-2level /Users/littlebuddha/local/lib/perl5 /Users/littlebuddha/local/lib/perl5/darwin-2level /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level /opt/local/lib/perl5/site_perl/5.8.9 /opt/local/lib/perl5/site_perl /opt/local/lib/perl5/vendor_perl/5.8.9/darwin-2level /opt/local/lib/perl5/vendor_perl/5.8.9 /opt/local/lib/perl5/vendor_perl /opt/local/lib/perl5/5.8.9/darwin-2level /opt/local/lib/perl5/5.8.9 .) at perl/myscript.pl line 19.
BEGIN failed--compilation aborted at perl/myscript.pl line 19.

対策

CPANlocal::lib を利用する。
まずは、local::lib をインストールする。FreeBSD の場合は、

% whereis p5-local-lib
p5-local-lib: /usr/ports/devel/p5-local-lib
% cd /usr/ports/devel/p5-local-lib
% sudo make fetch-recursive
% sudo make install clean

そして、下記の一行を独自モジュールの読み込み前に追加する。

use FindBin;
use lib $FindBin::Bin;

シンタックスを確認すると、

% perl -wc ~/perl/myscript.pl
perl/myscript.pl syntax OK

となって、エラーがなくなる。