Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re^2: Alias of hash-values?

by Athanasius (Abbot)
on Feb 21, 2013 at 02:21 UTC ( #1019874=note: print w/ replies, xml ) Need Help??


in reply to Re: Alias of hash-values?
in thread Alias of hash-values?

The thing that surprises me though is that trying to increment the hash keys doesn't die like this one:

I agree, it seems odd. Consider:

#! perl use strict; use warnings; use Data::Dump; my %h = (1 => 'Fred'); dd %h; fn(%h); dd %h; sub fn { print "BEGIN fn()\n"; dd @_; $_[0]++; $_[1] = 'Barney'; dd @_; print "-END- fn()\n"; }

Output:

12:02 >perl 541_SoPW.pl (1, "Fred") BEGIN fn() (1, "Fred") (2, "Barney") -END- fn() (1, "Barney") 12:02 >

The hash value is clearly aliased, since the assignment in sub fn persists in %h after the sub returns. But the hash key is not: it appears to be copied (passed by value), as $_[0] behaves as a variable local to sub fn. (Whereas a literal value like 42 or 'Wilma' is aliased, as evidenced by the Modification of a read-only value error message which results from trying to increment it or assign to it within the sub.)

An anomaly? Or a feature?

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,


Comment on Re^2: Alias of hash-values?
Select or Download Code
Re^3: Alias of hash-values?
by LanX (Canon) on Feb 21, 2013 at 02:32 UTC
    We had the discussion about "aliasing read-only falling back to copy" not long a year ago.

    ref to read-only alias ... why?

    Apparently it also depends on the perl-version, threading and optimization ...

    Cheers Rolf

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (14)
As of 2015-07-01 17:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (13 votes), past polls