File::Spec の catfile の引数
CPAN モジュールのレイアウトにした(内部向けの) Perl モジュールを書いていたら、File::Spec(::Functions)の catfile を使っているコードで、
Use of uninitialized value $file in concatenation (.) or string at /usr/lib/perl/5.10/File/Spec/Unix.pm line 102.
とかいう困ったエラーがテストコード実行中に出てしまって悩んだ。
おかしいのは、普通に
prove -I lib
とか
perl -I lib t/001_hoge.t
みたいにすると、さっきのメッセージは出ず、モジュールディレクトリ上で、
make test
を実行するとさっきのエラーが出る、というところ。
あれこれ原因を調べたところ、(すげー極端な例ですが)
#!/usr/bin/perl use strict; use warnings; use Test::More; use File::Spec::Functions qw(catfile); is( catfile("/tmp", undef), "/tmp/" ); done_testing();
みたいな catfile の実行の仕方をすると出るみたいです。
実際はテストコード上ではなく、モジュール側で catfile しているので、catfile の呼び出し側で undef かどうかを事前にチェックするのがよさそうです。