| [reply] [d/l] |
I'm definitely not qualified to argue whether this behavior should be considered 'undefined', but I haven't seen any pointers to documentation that says that it is.
perlop is written in a language which is a little less than explicit than Perl, but it doesn't say that ++ and -- work exactly as in C.
In fact, perlop says:
"++" and "--" work as in C. That is, if placed before a variable, they increment or decrement the variable before returning the value, and if placed after, increment or decrement the variable after returning the value.
In other words, the auto-increment operator works as in C in the specific way mentioned. (perlop then goes on, in the next paragraph, to explain one way in which the perl implementation differs from C.)
Impossible Robot
| [reply] [d/l] [select] |
Is it undefined, or does do this: $k = $i; $i++; $i = $k;
Both.
$i++ stores the old value, increases the value, and then sets the return value to the stored old value. Although that is true for all versions of Perl, its behaviour is not documented. Actually, it is documented, but wrong:
[...] increment or
decrement the variable after returning the value. [...] -- perlop
It doesn't increment after returning. It increments first, and then returns the old value.
- Yes, I reinvent wheels.
- Spam: Visit eurotraQ.
| [reply] |
It doesn't increment after returning. It increments first, and then returns the old value.
No, and that's the entire problem. You do not know
when the increment will happen, that is specifically left
undefined. (It was left undefined in C to give implementers
of compilers all sorts of freedom to optimize it - idem for
Perl). What a specific version of Perl does not gives you
absolutely no garantee what it will do in a next version.
Abigail
| [reply] |
| [reply] |
But it isn't well defined. In
$i = $i ++;
you do not know whether the assignment will happen
before, or after the increment.
Abigail | [reply] [d/l] |