in reply to Re^3: eval order of args to a sub
in thread eval order of args to a sub

Post-increment seems to be unique in that it creates an anonymous value.
That doesn't suprise me. post-increment and post-decrement return (a copy of) the old value, while changing the original value. What I mean is, since post-*crement creates 2 values from one variable, you need a copy somewhere, and it makes sense (for ease of coding and performance - perl variables are passed by reference internally) to increment the original value and create a copy as the return value of the *crementation.

Replies are listed 'Best First'.
Re^5: eval order of args to a sub
by TGI (Parson) on May 31, 2007 at 00:29 UTC

    Absolutely, the post-*crement operators MUST create an anonymous value, so they do.

    I wonder though, what the "expected" or "natural" behavior of the other constructs I posted should be.

    Construct Behavior Expected $i += 2 \$i ??? $i++ Anon. Anon. $i + 1 Anon. Anon. $i++ Anon. Anon. ++$i \$i Anon. $i=2 \$i ???

    From reading the other posts here, I feel comfortable saying that people expect ++$i to pass an anonymous value. I'm not 100% sure what I'd expect the assignment operators (=, *=, etc) to pass. Since most langauges pass by value, I guess I'd expect the assignment operators to pass anonymous values equal to the value assigned to $i. For example for foo($i=2) my faulty intuition is that foo() would get an anonymous 2 in $_[0].


    TGI says moo