Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"

Re: Re: Perl Internals: Hashes

by kelan (Deacon)
on Apr 15, 2004 at 21:09 UTC ( #345549=note: print w/replies, xml ) Need Help??

in reply to Re: Perl Internals: Hashes
in thread Perl Internals: Hashes

To expound on demerphq's response with an example:

Given a hash, like so:

my %test; $test{a} = 1; $test{b} = 2;
When you call a subroutine with an array or hash, it gets flattened into a list. For a hash, that means giving all of its keys and corresponding values. So this:
is the same as this:
something(a, 1, b, 2);
(Note that when hashes are flattened, the keys may come out in any order, so it could have also been something(b, 2, a, 1);.)

The other side of this situation is that you can fill a hash directly with a list, instead of doing each key one-at-a-time. When you assign to a hash with a list, each odd item becomes a key, and the corresponding even item is its value. So we could have filled the hash like this:

%test = (a, 1, b, 2);
and it would be exactly the same. Note that this is also the same as the more familiar:
%test = (a => 1, b => 2);
as the => is just a type of comma that auto-quotes its left side operand. Now you can see what happens:
something(%test); # is like something(a, 1, b, 2);
And inside the sub:
my %hash = @_; # is like %hash = (a, 1, b, 2);
And so it turns out that you're just doing a basic copy. The hash inside the sub will be a copy of the one you passed in.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://345549]
[erix]: how does one find out how to install a program like cvsgrep
[erix]: I mean, I suppose it's just the one file so I can download that
[erix]: Makefile.PL should tell me, probably

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (6)
As of 2017-06-22 16:42 GMT
Find Nodes?
    Voting Booth?
    How many monitors do you use while coding?

    Results (524 votes). Check out past polls.