in reply to Re: Incrementing a Hash Value
in thread Incrementing a Hash Value

Is it undefined, or does do this:
# basic form $i = $i++; # long hand $k = $i; $i++; $i = $k;

--
¤ Steve Marvell

Replies are listed 'Best First'.
Re: Incrementing a Hash Value
by Abigail-II (Bishop) on Jun 14, 2002 at 11:56 UTC

      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
Re: Re: Re: Incrementing a Hash Value
by Juerd (Abbot) on Jun 14, 2002 at 14:29 UTC

    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.
    

      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

      A reply falls below the community's threshold of quality. You may see it by logging in.
      That sounds well defined to me. If it has a predicible behaviour, even if it's not useful, it's defined.

      I must be missing something.

      --
      Steve Marvell

        But it isn't well defined. In
        $i = $i ++;
        you do not know whether the assignment will happen before, or after the increment.

        Abigail