"R. Joseph Newton" wrote:

> Andrew Gaffney wrote:
>
> > WC -Sx- Jones wrote:
> > > What is happening here -

> > That is a damn good question. I'm not sure what results I was expecting when I ran 
> > it, but
> > it sure wasn't this:
> >
> > 3
> > 15
> > 63
> > 255
> I'm stumped, also.I would have expected progressive 2**n -1   As far as I can tell, 
> the test
> in the conditional operation should always evaluate true.  The preccedence of += and 
> postfix
> decrement should have decremented after the value had doubled.  After printing, the 
> number
> should be re-incremented   Sheesh--there no damn short-circuit on the evaluation!!  
> Well, I'll
> be darned!  Only one of the two alternatives will be assigned, but both are 
> evaluated. ...
>

It really is an object lesson in the dangers of using lvalued functions in void 
context, for their
side effects.  The conditional operator is meant to return one of its alternative 
values. Unlike
the or and and operators, though, it does not short-circuit its evaluation.  It seems 
to evaluate
the expressions for both alternatives, and then assign one or the other depending on 
the value of
the test.  Since the conditiional operator is used in void context, there is no lvalue 
to receive
the primary product of the operation.  The side effects here are the whoe show.

> while(1) {
>    if (++$count) {
>       $count += $count;
>       $count--;
>       my $alternative_yes = $count;
>       $count += $count;
>       $count++;
>       my $alternative_no = $count;
>    } else {
>       die "The impossible has happened! $!";
>    }
>       print "$count\n"; exit if $count > 60_000;
>    sleep 1;
> }

Joseph


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to