Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re: Extracting values from nested hashrefs

by kcott (Abbot)
on Sep 12, 2012 at 09:25 UTC ( #993196=note: print w/ replies, xml ) Need Help??


in reply to Extracting values from nested hashrefs

G'day loris,

Hash keys have no inherent order. If you want to retain the order you've shown, you'll need to specify it explicitly.

Here's two solutions in the one script. Pick whichever is most appropriate for you.

#!/usr/bin/env perl use 5.010; use strict; use warnings; my $animals = { gnu => { humps => 0, }, dromedary => { humps => 1, }, camel => { humps => 2, }, }; my @humps; push @humps, $_->{humps} for map { $animals->{$_} } keys %$animals; say "Unsorted humps: @humps"; my @sorted_animals = qw{gnu dromedary camel}; my @sorted_humps; push @sorted_humps, $_->{humps} for map { $animals->{$_} } @sorted_ani +mals; say "Sorted humps: @sorted_humps";

Outputs:

$ pm_nested_hash_extract.pl Unsorted humps: 2 0 1 Sorted humps: 0 1 2

-- Ken


Comment on Re: Extracting values from nested hashrefs
Select or Download Code
Re^2: Extracting values from nested hashrefs
by loris (Hermit) on Sep 12, 2012 at 09:51 UTC

    The ordering happens to be irrelevant, so the unsorted version is fine. I see from your solution that the distinction I was trying to make between explicit and implicit was a bit foolish. What I meant was that I wanted to do things in a nifty perl-like way, as you have done, rather than in a dull, C-like way.

    Thanks,

    loris

      Why be more cryptic that you need to be?
      Doing so will not be more efficient.
      #!/usr/bin/perl -w use strict; my $animals = { gnu => { humps => 0, mascot_for => 'emacs', }, dromedary => { humps => 1, mascot_for => 'perl', }, camel => { humps => 2, mascot_for => 'perl', }, }; foreach my $critter (keys %$animals) { print "$critter "; #camel gnu dromedary } print "\n"; foreach my $critter (keys %$animals) #sort if you want to { print "$animals->{$critter}{humps} "; #2 0 1 } print "\n";

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (9)
As of 2014-12-25 12:22 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (160 votes), past polls