Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask

Re: Context: compile-time vs. run-time

by ikegami (Pope)
on Jan 25, 2009 at 22:32 UTC ( #738836=note: print w/ replies, xml ) Need Help??

in reply to Context: compile-time vs. run-time

perl -le 'my $f = 1; ($f > 0 ? @a : $a ) = ("a", "b", "c")'
Assignment to both a list and a scalar at -e line 1, at EOF

Keep in mind that there are two different "=" operators: the list assignment operator (aassign) and the scalar assignment operator (sassign). The selection of the operator is based on whether the LHS of the assignment is list-ish or scalar-ish. The reason the above doesn't compile isn't the inability to change context at run-time, it's the inability to select an operator.

The two operators compared:

Context Imposed on OperandsStack on InputInEvaluates ToStack on Output
sassignscalarTwo SVsscalarLHS as an aliasOne SV
listLHS as an aliasOne SV
lassignlistTwo marked lists of SVsscalarNumber of items in list returned by the RHSOne SV
listLHS as a list of aliasesOne (unmarked) list of SVs

Notice the significant differences in how Perl needs to setup the stack before the operator is called, making the choice of operators crucial.

Comment on Re: Context: compile-time vs. run-time
Select or Download Code

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (5)
As of 2015-11-27 09:11 GMT
Find Nodes?
    Voting Booth?

    What would be the most significant thing to happen if a rope (or wire) tied the Earth and the Moon together?

    Results (722 votes), past polls