Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re^3: Why does foo() evaluate in array context in "${\foo()}"?

by repellent (Priest)
on Apr 24, 2009 at 23:05 UTC ( #759928=note: print w/replies, xml ) Need Help??


in reply to Re^2: Why does foo() evaluate in array context in "${\foo()}"?
in thread Why does foo() evaluate in array context in "${\foo()}"?

The way I see it, the backslash \( ) syntax has to evaluate its arguments in list context.

It also has to treat @arrays and %hashes with care: should it expand it out into a list & take references of its elements, or just take the reference to the actual @array / %hash itself?

To disambiguate the two, the second command shows that perl won't expand @array / %hash into LIST unless you have specifically parenthesized it.

The third command shows that if @array / %hash was the only argument to \( ), then perl makes the (inconsistent) choice to expand it into a LIST, and take the reference of each list element. A probable rationale is that if you wanted the reference to the actual hash itself, you would do \%hash instead of \(%hash).

The fourth command is like the second command. The empty list puts perl back in the second command's evaluation "frame of mind".

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (4)
As of 2023-01-30 07:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?