in reply to Re^2: Summing Up Array Elements By Group
in thread Summing Up Array Elements By Group

ikegami, this one knocks me down! Did you know in advance that ++$b would be faster than $b++? Do you know why that is?
  • Comment on Re^3: Summing Up Array Elements By Group

Replies are listed 'Best First'.
Re^4: Summing Up Array Elements By Group
by gwadej (Chaplain) on Jan 21, 2009 at 18:55 UTC

    $b++ makes a copy so that it can return the previous value. ++$b does not need to.

    I have run into this issue before in C++, but it was normally not a problem for integers. Scalars on the other hand are a different beast.

    G. Wade

      it was normally not a problem for integers.

      I find it odd that it would matter at all for ints.

      ++a --- inc a mov a, reg a++ --- mov a, reg inc a

        It doesn't matter for ints. But, for various kinds of iterators and other classes supporting ++ it can. (I guess I didn't make that clear.)

        That's why the suggested practice in C++ lately has been to use ++a unless you actually need the previous value. That way when you replace that index with an iterator things don't get any slower.

        G. Wade
Re^4: Summing Up Array Elements By Group
by ikegami (Patriarch) on Jan 21, 2009 at 18:57 UTC

    $b++ needs to create a new anonymous scalar because the result is different than the $b.

    ++$b just returns a pointer to $b.

    $ perl -le'my $b = 4; $r = \( $b++ ); $$r = 20; print $b' 5 $ perl -le'my $b = 4; $r = \( ++$b ); $$r = 20; print $b' 20
      Nice! One point for your original and another for gwadej's explanation.