I think Rudif was pointing out that $|++ and $|=1 are interchangable, unless the value of $| is already -1. In that (rather rare) case, the two behave quite differently.
-Blake | [reply] [d/l] [select] |
It turns out that the value of $| can't be -1. This variable has special magic that only allows its value to be 0 or 1. Any true value assigned to $| becomes 1, and any false value becomes 0. So, $|++ and $|=1 really are interchangeable.
Interestingly, $|-- and $|=0 are not interchangeable. If $| is 1, $|-- will of course set it to 0, but if $| is 0, $|-- will set it to 1!
Similar magic can be found, for example, in the $. variable, which can only hold an integer.
| [reply] |
Thank you, chipmunk, for setting me straight on this one.
My C upbringing showed up, and I did not test what I presumed was the behavior of $| :-(
Rudif
Update </b
Now that I did test it, turns out to be even more interesting. Running this
print $|++ for (0..9); print" post ++\n";
print $|-- for (0..9); print" post --\n";
print ++$| for (0..9); print" pre ++\n";
print --$| for (0..9); print" pre --\n";
prints this
0111111111 post ++
1010101010 post --
1111111111 pre ++
0101010101 pre --
Creative use of this $|-- behavior, anyone?
| [reply] [d/l] [select] |
| [reply] |
Wow, that's good food for an obfu. $_=$|=42;
| [reply] [d/l] |