$a = undef; print $a ? 'true' : 'false'; # prints 'false' print $a; # prints '' and warns $a = 0; print $a ? 'true' : 'false'; # prints 'false' print $a; # prints '0' $a = 'abc'; print $a ? 'true' : 'false'; # prints 'true' print $a; # prints 'abc' # whereas $a = undef; print !!$a ? 'true' : 'false'; # prints 'false' print !!$a; # prints '' without warning $a = 0; print !!$a ? 'true' : 'false'; # prints 'false' print !!$a; # prints '' $a = 'abc'; print !!$a ? 'true' : 'false'; # prints 'true' print !!$a; # prints 1