http://www.perlmonks.org?node_id=748325


in reply to return !!

It's doing a couple things, although only one of them is relevant to the execution of code:

I'd probably use a more explicit test, as the following example shows (lexical variables added for my own peace of mind):

use Modern::Perl; sub mean_test { my @value = @_; return !!@value; } sub nicer_test { my @values = @_; return scalar @values > 0; } say "Mean: Empty: ", mean_test(); say "Mean: One Item: ", mean_test("sweet!"); say "Mean: Two Items: ", mean_test("dude!", "sweet!"); say "Nicer: Empty: ", nicer_test(); say "Nicer: One Item: ", nicer_test("sweet!"); say "Nicer: Two Items: ", nicer_test("dude!", "sweet!");

It evaluates the same, as far as I can tell.

Mean: Empty:
Mean: One Item: 1
Mean: Two Items: 1
Nicer: Empty:
Nicer: One Item: 1
Nicer: Two Items: 1