Are you sure? Consider:
use strict; use warnings; use Data::Dump::Streamer; my $value = undef; print !!$value; my $nothing = nothing (); my $retNothing = retNothing (); my $retUndef = retUndef (); my $retFalse = retFalse (); my $retFalse2 = -retFalse (); Dump (\$nothing); Dump (\$retNothing); Dump (\$retUndef); Dump (\$retFalse); Dump (\$retFalse2); sub nothing { } sub retNothing { return; } sub retUndef { return undef; } sub retFalse { return 1 == 0; }
Prints:
$SCALAR1 = \do { my $v = undef }; $SCALAR1 = \do { my $v = undef }; $SCALAR1 = \do { my $v = undef }; $SCALAR1 = \do { my $v = '' }; $SCALAR1 = \do { my $v = 0 };
Updated to add two false cases
and in list context :)
... my @nothing = nothing (); my @retNothing = retNothing (); my @retUndef = retUndef (); my @retFalse = retFalse (); my @retFalse2 = -retFalse (); Dump (\@nothing); Dump (\@retNothing); Dump (\@retUndef); Dump (\@retFalse); Dump (\@retFalse2); ...
Prints:
$ARRAY1 = []; $ARRAY1 = []; $ARRAY1 = [ undef ]; $ARRAY1 = [ '' ]; $ARRAY1 = [ 0 ];
In reply to Re^3: Elegant way to return true or nothing from a subroutine?
by GrandFather
in thread Elegant way to return true or nothing from a subroutine?
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |