It's about what unary ! (bang operator) does to the operand Here's the dissonance:
perl -E '$x=0; say "x=$x"; $x = !!$x; say "x=$x"' x=0 x= It behaves as you expect until you "bang" it twice. I found a good explanation in the Camel: "Unary ! performs logical negation, that is "not". The value of a negated operand is true (1) if the operand is false (numeric 0,string "0", the null string, or undefined) and false ("") if the operand is true." So double banging 0 yields "". On Sat, Jul 1, 2017 at 12:54 PM, John Harris <jkharr...@gmail.com> wrote: > What are these emails really about? > > On Jul 1, 2017 2:42 PM, "Chas. Owens" <chas.ow...@gmail.com> wrote: > >> >> >> On Sat, Jul 1, 2017, 12:44 Shlomi Fish <shlo...@shlomifish.org> wrote: >> >>> Hi Shawn! >>> >>> On Sat, 1 Jul 2017 11:32:30 -0400 >>> Shawn H Corey <shawnhco...@gmail.com> wrote: >>> >>> > !!$i which is !(!(0)) which is !(1) which is 0 >>> > >>> >>> I suspect !1 returns an empty string in scalar context. >>> >> >> !1 returns PL_sv_no (an internal scalar variable). It is a dualvar that >> contains the empty string, the int 0 and the double 0.0. depending on the >> context the value is used in, it will be one of those values. >> >> Many people think it is an empty string because the print function forces >> string context. >> >>>