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".