Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

Re: Syntax explanation required

by Athanasius (Chancellor)
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,

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 romping around the Monastery: (5)
As of 2016-10-27 01:44 GMT
Find Nodes?
    Voting Booth?
    How many different varieties (color, size, etc) of socks do you have in your sock drawer?

    Results (351 votes). Check out past polls.