in reply to Re: Re: buffering question
in thread buffering question

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

Replies are listed 'Best First'.
Re: Re: Re: Re: buffering question
by chipmunk (Parson) on Aug 29, 2001 at 07:36 UTC
    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.

      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?

      Cool, you're right. I just tried it out (should have probably done that *before* I posted) and $| does only ever store the values '0' and '1'.

      Thanks for the correction, I appreciate it.

      -Blake

      Wow, that's good food for an obfu. $_=$|=42;