defined の挙動で相談されたのでソースコードを見てみたら、配列に対して defined を呼んでいた。 最近の Perl では配列に対して defined を使うのは非推奨である(perldata や perlfunc 参照)。 ほとんどの人が望むような判定結果は返ってこない*1。 perl -e '@a = (); print defined @a ? 1 : 0; push @a, 1; print defined @a ? 1 : 0; shift @a; print defined @a ? 1 : 0' 配列が空かどうかならスカラーコンテキストで評価するだけで OK なのだが、Perl プログラミング経験上、1度は defined を使用してしまうだろう。 ただ通常は警告が出るのですぐ気がつく。 この警告は Perl 5.6.0 以降で出る。 #!/usr/bin/perl
![なぜ Perl で配列に対して defined を使ってはいけないのか?](https://cdn-ak-scissors.b.st-hatena.com/image/square/1fbc286a89077cf1603f0f56b24ec9358643ecde/height=288;version=1;width=512/https%3A%2F%2Fwww.naney.org%2Fphotos%2FnDiki%2Fcover%2FVQ1005-2008-03-16-0001-1200x630.jpg)