Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: Syntax explanation required

by Athanasius (Monsignor)
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;

Output:

23:05 >perl 464_SoPW.pl ("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?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (11)
As of 2014-09-01 15:38 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite cookbook is:










    Results (14 votes), past polls