Not quite. The not not transformation maps 0 to false and every other integer to 1. False acts as the nul string in string context, and acts as zero in numerical context.
use warnings;
my $false = !!0;
my $numzero = 0;
my $strzero = '0';
my $nulstr = '';
local $\ = "\n";
print 'false: ', $false; # '' <-- Not zero!
print '0: ', $numzero; # '0'
print "'0': ", $strzero; # '0'
print "'': ", $nulstr; # ''
print '';
print 'false: ', 0+$false; # '0' (no warning)
print '0: ', 0+$numzero; # '0' (no warning)
print "'0': ", 0+$strzero; # '0' (no warning)
print "'': ", 0+$nulstr; # '0' with warning
If you wanted something that maps 0 to 0 and every other integer to 1, you'd want 0 + !!$var.
Update: Added $strzero. Minor cosmetic changes.
|