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

Re^3: map a hash with a default value or exclude

by PrakashK (Pilgrim)
on Sep 13, 2011 at 19:09 UTC ( #925757=note: print w/ replies, xml ) Need Help??


in reply to Re^2: map a hash with a default value or exclude
in thread map a hash with a default value or exclude

Yet another way, using the 3-argument form of split, which guarantees that the input string is split into two parts and no more or less. The second part would be a string of length 0, instead of an undefined value.

%{$self->{info}} = map {@$_} grep {$_->[1]} map {chomp; [split '=', $_ +, 2];} <$fh>;

I prefer this form of split in handling key=value type strings, since it handles the cases where a value could have an embedded '=' (PASSWORD=blah=argh!), whereas the shorter one-(or, two-)argument forms would return truncated values.

Yet another alternative, using only one map:

%{$self->{info}} = map {chomp; my ($k, $v) = split '=', $_, 2; $v ? ($ +k => $v) : (); } <$fh>;

If we want to supply default values:

# assuming default values are in %defaults %{$self->{info}} = map {chomp; my ($k, $v) = split '=', $_, 2; $k => $ +v || $defaults{$k}; } <$fh>;


Comment on Re^3: map a hash with a default value or exclude
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (20)
As of 2015-07-07 17:07 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 (92 votes), past polls