Tom writes:

> I'm not sure whether C does so, but I believe that Perl does NOT
> promise that auto-increments will be executed in the "expected"
> left-to-right order. Thus, if a single expression includes more than
> one auto-increment working on the same variable, generally you can't
> be sure what Perl will do with it. As you found.


In the C standard, the behaviour for 

 int a = 1, b;
 b = ++a + a++;

is *undefined*.  

Perfectly standards-compliant C compilers can perform any of the
following actions with equal validity:

 * the compiler can dump core, and produce no output.
 * at run time, the program can halt printing "Do not be a loser!"
 * it can return "42"
 * it can return '2' (1 + 1) and then increment a twice.
 * it can - through blind stupid luck  - return 5 

See the comp.lang.c faq Questions 3.2 et seq. and comp.lang.c faq
question 11.33

Short answer: In C, Don't Do That.  By extension, don't do it in Perl.

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
        Lawrence Statton - [EMAIL PROTECTED] s/aba/c/g
Computer  software  consists of  only  two  components: ones  and
zeros, in roughly equal proportions.   All that is required is to
sort them into the correct order.

-- 
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