Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re^5: Pre vs Post Incrementing variables

by BrowserUk (Patriarch)
on Sep 13, 2010 at 02:00 UTC ( [id://859933]=note: print w/replies, xml ) Need Help??


in reply to Re^4: Pre vs Post Incrementing variables
in thread Pre vs Post Incrementing variables

Mind you, it might make explaining this one a tad awkward :)

$i = 0; print ++${\++$i}, 0+ ++$i, 0+ ++$i, ++${\++$i};; 6 3 4 6

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^6: Pre vs Post Incrementing variables
by repellent (Priest) on Sep 13, 2010 at 04:20 UTC
    The argument list to print is evaluated from left-to-right. ++${\++$i} is merely incrementing $i twice and returning an alias to $i.
    $i = 0; print ++${\++$i}, 0+ ++$i, 0+ ++$i, ++${\++$i};; ^ ^ ^ ^ (1) (2) (3) (4)

    (1) & (4) return aliases to $i. Since $i has been incremented six times, we get 6 for both of them.

    (2) & (3) return copies to $i because of the zero additions 0+. We get 3 for (2) after three increments, and 4 for (3) with one more increment.

      You appear to be saying that the ability to describe what the implementation does, justifies why it does it that way.

      The fact that this:

      $i=0; print $n = ++$i, $m = ++$i;; 1 2
      produces a different result to this:
      $i=0; print ++$i, ++$i;; 2 2

      Is just plain weird. Some, including me, would say 'broken'.

      Justifying the weirdness by saying "that's what it does", kinda reminds of Apple's "You're holding it wrong." explanation of Antennagate.

        No, I made no implied justification thus far.

        The root of my reply was merely to reveal my experimentation with assigning the return of (++$i) to some value (since I also ran into the same error message you got).

        Then, I attempted to explain the snippet you posted so that others may find it helpful to see what's going on.

        My opinion? Yeah, the lvalue stuff is confusing and I don't quite see its usefulness. I would expect the behavior the OP expected.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://859933]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (2)
As of 2024-04-19 18:44 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found