自作のモジュールを use してもロードされない問題に悩む修行
モジュールのロードについて実験するため、A.pm と B.pm に test 関数を定義して、次のようなスクリプトを動かしてみた。
use strict; use warnings; use A; use B; B::test(); my $x = A::test();
実行すると次のようになる。
[takeyuki@sunya ~]$ perl b.pl Undefined subroutine &B::test called at b.pl line 7.
B.pm は次のように書いてある。
use strict; use warnings; package B; use A; sub test { return 2; } # warn "B!!"; 1;
試しにコメントアウトをはずしてモジュールロード時に warn されるようにしても、これが表示されない。なぜ??
B.pm を BBB.pm にリネームして試したところちゃんと動いた。どういうこと??
そう、正解は B は標準モジュールとして入っているから。
[takeyuki@sunya ~]$ perl -MB -e 'print $B::VERSION;' 1.09_01
次のように BEGIN ブロックでモジュールサーチパスをいじってやれば、自前の B モジュールをロードしてくれるようになる。
BEGIN { unshift @INC, '.'; }
http://kaede.to/~canada/doc/doller_a_and_bという話もあるし、関数 y を呼ぶとき - 昨日知ったこと なんてこともあるし、サンプルスクリプトやちょっとした実験スクリプトでも foo, bar とか使うほうがいいんだろう。