カレントディレクトリとファイルの置いてあるディレクトリは違う
恥ずかしい話なんですが。
なんの気なしに同じディレクトリのPerlプログラムをrequireするためにこんなこと書いて失敗したんですよ。
use Cwd; $here = getopt(); require "${here}/wantuse.pl";
まぁ、これ、PATH通しておけよ、という話はおいといてですね。
ともかく単体テストでは上手くいってたんだけど、結合テストでこけたのでびびった。
ジョブ管理システムがフルパスを指定して実行するので、カレントディレクトリ<>ファイルが置いてあるディレクトリだったんですね。
アホかオレは、という感じ。久々にがくりときました。すいません、ウソです。ちょっとぶりです。
とりあえず、あまりきれいではないのですが今のところこれで対応してます。
$here = __FILE__; # ファイル名がパスつきで入ってきます。 $here =~ s/^(.+)[\\\/].+$/\1/; # 最後の\か/までマッチしたもので置き換え $here =~ s/\\/\//g; # ActivePerlだったりLinux上のPerlだったりするので\を/に置き換え require "${here}/wantuse.pl";
いやーびっくりした。
あ、これPerlのバージョンを一応いっとくと5.6.1です。