Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

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

by ikegami (Patriarch)
on Jan 25, 2009 at 22:32 UTC ( [id://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.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (5)
As of 2024-04-23 21:02 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found