not-not.
It converts the value to a boolean (or as close as Perl gets to such a thing).
David Dorward
2010-01-30 15:48:22
not-not.
It converts the value to a boolean (or as close as Perl gets to such a thing).
It is just two !
boolean not operators sitting next to each other.
The reason to use this idiom is to make sure that you receive a 1
or a 0
. Actually it returns an empty string which numifys to 0. It's usually only used in numeric, or boolean context though.
You will often see this in Code Golf competitions, because it is shorter than using the ternary ? :
operator with 1
and 0
($test ? 1 : 0
).
!! undef == 0
!! 0 == 0
!! 1 == 1
!! $obj == 1
!! 100 == 1
undef ? 1 : 0 == 0
0 ? 1 : 0 == 0
1 ? 1 : 0 == 1
$obj ? 1 : 0 == 1
100 ? 1 : 0 == 1
Because three other answers claim that the range is "0" or "1", I just thought I'd mention that booleans in Perl (as returned by operators like ==
, not
, and so on) are undef
and 1
, not 0
and 1
.