Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery

Re: Syntax explanation required

by Athanasius (Canon)
on Jan 02, 2013 at 13:10 UTC ( #1011266=note: print w/ replies, xml ) Need Help??

in reply to Syntax explanation required

Hello ghosh123,

LanX has explained the syntax of the expression, but you may be wondering, why create a hash reference only to immediately dereference it?

A solution using a third, named hash is more straightforward:

my %hash3 = (%hash1, %hash2); my @uniq = keys %hash3;

But what happens if we want to eliminate the named hash? The obvious approach:

my @uniq = keys (%hash1, %hash2);

doesn’t work, because the Perl interpreter sees only a simple list. So it’s necessary to tell the interpreter to create a hash, but the only syntax for this that doesn’t involve another named hash is curly braces {}, which creates a hash as required but returns a reference to it. Hence the need for the more complicated syntax which creates the hash reference and then dereferences it.

Actually, however, this isn’t necessary in Perl 5.14 or later, because keys can now also take a hash reference as its argument:

#! perl use Modern::Perl; use Data::Dump; my %hash1 = (fred => 'wilma', barney => 'betty'); my %hash2 = (homer => 'marge', fred => 'wilma'); my @uniq = keys { %hash1, %hash2 }; dd @uniq;


23:05 >perl ("barney", "homer", "fred") 23:08 >

Hope that helps,

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

Comment on Re: Syntax explanation required
Select or Download Code

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (3)
As of 2015-11-26 05:19 GMT
Find Nodes?
    Voting Booth?

    What would be the most significant thing to happen if a rope (or wire) tied the Earth and the Moon together?

    Results (696 votes), past polls