defined @_の挙動
http://memo.freedom-lite.com/?p=991
を見ていて、最後の例の挙動が違うなぁって思ったんですが、
これは 5.14で defined @_の挙動が変わっていることが原因でした。
% perlbrew exec perl -e 'sub {print "defined\n" if defined @_}->()' perl-5.10.1 ========== defined perl-5.12.3 ========== defined perl-5.14.1 ========== perl-5.8.9 ========== defined
5.14以前だと引数がない場合でも, defined @_が真となります。
引数ありだと全部 definedとなります。
% perlbrew exec perl -e 'sub {print "defined\n" if defined @_}->(10)' perl-5.10.1 ========== defined perl-5.12.3 ========== defined perl-5.14.1 ========== defined perl-5.8.9 ========== defined
@_には definedを適用しない方がいいでしょう。引数が設定されているか
どうかを確認したいのであれば、以下のように配列長が 0かどうかを確認するのが
よいでしょう。丁寧に書くなら "scalar @_ > 0"となるでしょうか。
% perlbrew exec perl -e 'sub {print "defined\n" if @_}->()' perl-5.10.1 ========== perl-5.12.3 ========== perl-5.14.1 ========== perl-5.8.9 ==========
追記(2011/AUG/10)
perldoc -f definedで見ると、deprecateなんで使うなということになっていました。