On Thursday 19 January 2006 04:25, Luke Palmer wrote:
> On 1/19/06, Joe Gottman <[EMAIL PROTECTED]> wrote:
> >    Suppose I have code that looks like this:
> >
> >             my ($x, $y, $z) = (1, 2, 3);
> >
> >             say "sorted backward" if ++$x > ++$y > ++$z;
> >
> > Will $z be incremented even though the chained comparison is known to be
> > false after ++$x and ++$y are compared?
>
> I don't see a reason for chained comparisons not to short-circuit,
> besides the surprise factor.  But anyone who knows about &&, and
> understands chained comparisons as expanding to &&, should understand
> short-circuiting behavior.
Although that may lead to _longer_ code, which (when extended) is likely to be 
broken:

        $x++; $y++; $z++;
        say "sorted backward" if $x > $y > $z;

To be honest, in this example it mostly doesn't matter; if $x > $y, then 
($x+1) > ($y+1). But in many quickly written scripts I did some numeric 
operation to force the value to numeric, even if I got a parameter like 
"string" (which becomes 0 when numyfied)


How about some flag saying "don't short-circuit this"?


Regards,

Phil

Reply via email to