X Dungeness wrote:
It's about what unary ! (bang operator) does to the operandHere'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 "".
That doesn´t explain how and why a numerical value is converted into a string. It could be something else than the operator doing this. In any case, which sane programmer would expect a bug like this. perl -e 'my $i = 1; $i = defined($i) ? (!$i) : 0; use Data::Dumper; print Dumper($i);' $VAR1 = ''; Logical negations do not involve turning numbers into strings. If they do, they are either something else or buggy. How do you enforce a numerical context? -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected] http://learn.perl.org/
