John W. Krahn <[EMAIL PROTECTED]> wrote: > Kevin Meltzer wrote: [ back and forth ]
>> >>> > This is actually a bug. It just seems that nobody seems to >> >>> > care :) It would break too many JAPHs which use this. >> >>> > >> >>> > So, don't depend on it, in case it is ever fixed. >> >>> >> >>> Can you cite a reference to this behavior described as a bug? >> >> >> >> Does that behavior not seem like a bug to you? >> > >> > Not necessarily. :-) >> >> I'm curious as to why. When I mentioned it on channel, a few people >> didn't see it as a bug either, at first. Being that it is using -- >> in a way which isn't consistent with -- (it increments as opposed to >> decrement). In fact, it isn't just with --/++ but + and - will yield >> the same results. Anyways, just curious why you think that subtracting >> from 0 yields a 1 doesn't seem like a bug (and when adding 1 never >> yields a 0). > > Well, because Perl has lots of special cases like this. Most people > don't ever use $| let alone the special properties of $|--. The average > programmer just needs to know that setting $| to 1 turns on autoflush > and setting $| to 0 turns off autoflush. What about the fact that ++ > will increment a string but -- will not decrement it? My 2p: $| is a boolean. It's an alias to a *bit*. And I'm not sure what the best semantic for $bool-- would be, but two possibilities come to mind: - make it falser This might be kind of nice, actually. $|-- would always turn autoflushing off. - treat it as zero and decrement it This is what it does now. "But that's not what it does now!" Sure it is: Any non-zero number is "true", so decrementing zero has to yield a "true" value. $x = 0; # false $x--; # true And just so with $|: $| = 0; # false $|--; # true If you ignore what the numeric value is afterward, this does exactly what it should. Obviously, the fact that the numeric value is *one* afterward is a little jarring. But maybe it's best if you don't think of $| as ever being zero or one. Think of it as a "pure" boolean, which gets temporarily coerced to zero or one when you use it in a non-boolean context. And anyway... $^W behaves the same way so it can't be a bug. :) -- Steve perldoc -qa.j | perl -lpe '($_)=m("(.*)")' -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]