Yes, that's how it works. It is a switch, on (1) or off (0). But, why would, in the case if this variable, substracting from 0 makes it 1? If that is a 'feature', I wouldn't mind knowing what the feature is:)
Yes, it has a range of [0,1], so I would expect it to stay at 1 when continually incremented. I don't, however, expect it to be incremented to 1 when it is 0 and decremented. I expect:
0 -> 1 when $|++
1 -> 1 when $|++
1 -> 0 when $|--
0 -> 0 when $|--
I think the range should be documented, but is it going from a value of 0 to 1 when decremented a bug, or is it a documentation issue? (Of course, once you document a bug is a feature, it isn't a bug anymore:)
Yeah, I don't think it is intuitive. I guess it should just be documented somewhere that this is the case with Perl's special boolean vars. I don't like it though, it isn't DWIM.
Feature (Score:2)
See also
$| only has two values, 0 and 1. I thought this was documented in perlvar but it doesn't seem to be. Perhaps it should be.
Re:Feature (Score:2)
To me that sounds like it will return the moral equivalent of true or false (zero and one in this case) based on what the state of $| is.
Casey West
Re:Feature (Score:2)
Actually, this also occurs with $^W:
# perl -le 'print $^W; $^W--; print $^W';0
1
Re:Feature (Score:2)
0 -> 1 when $|++
1 -> 1 when $|++
1 -> 0 when $|--
0 -> 0 when $|--
I think the range should be documented, but is it going from a value of 0 to 1 when decremented a bug, or is it a documentation issue? (Of course, once you document a bug is a feature, it isn't a bug anymore :)
Re:Feature (Score:2)
I suppose that as it's a boolean value, then the -1 gets mapped to "true" - or 1. Not sure how intuitive that is tho'.
Of course, if you ever needed a flip-flop variable then you could make use of this behaviour :)
Re:Feature (Score:2)
Heathens! Ambiguous wretches! (Score:1)
The one true way is
$| = 1;, even if you're re-enabling buffering.Boolean (Score:2)
That's perl's new built-in boolean type. The pumpkings have been slipping in Perl 6 features when you weren't looking. :)
I think what happens is you decrement 0 to get -1, but $| only stores the truth or falsehood of its value, so it stores and outputs 1.
Neat!
On another note, I like how everyone in this thread is actually using -w for a one liner. :)
J. David works really hard, has a passion for writing good software, and knows many of the world's best Perl programmers
Hmmmm (Score:2)