Returning undef for false is more broken than returning empty lists for false. At least an empty list is easily promoted to a false or undef value but an undef value in a list is not as easily demoted to a false value. I think all the people returning undef for false are shortsighted and I hope they never get their hands on my code.
sub empty {}
if ( empty() ) { ... } # ok
@foo = empty();
if ( @foo ) { ... } # ok
sub returns_undef { undef }
if ( returns_undef() ) { ... } # ok
@foo = returns_undef();
if ( @foo ) { ... } # NOT OK
if ( grep { defined } @foo ) { ... } # oh ok, now it's "better".
|