Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

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?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (14)
As of 2014-10-23 11:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (125 votes), past polls