Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister

Re: Sorting hash keys according to different criteria

by George_Sherston (Vicar)
on Jun 24, 2003 at 17:19 UTC ( #268599=note: print w/replies, xml ) Need Help??

in reply to Sorting hash keys according to different criteria

Depending on what you're doing with this you might find an array of hashes useful. This would give you the data in the fixed order ordained by the calendar - you could then pull it out however you liked, and even have a framework for adding more info.
my @months = ( { name => "January", days => 31, }, { name => "February", days => 28, # or whatever... there's another prob },
etc etc etc

You could then use the month number returned by localtime to pull data out of this array.

Having said that, if you're doing a lot of date calculations, then half an hour rummaging around in CPAN would probably save you time.

George Sherston

Replies are listed 'Best First'.
Re: Re: Sorting hash keys according to different criteria
by Anonymous Monk on Jun 24, 2003 at 20:57 UTC
    Hi, Can I ask why this only prints one item in the hash array?
    my %people; %people =( { name => "fred", age => 31, }, { name => "bill", age => 32, }); my $length = keys %people ; print "$length\n"; foreach my $key (sort keys %people) { print("$people{$key}{'name'}: $people{$key}{'age'}\n"); }

    Code tags - dvergin 2003-06-24

      It's because you've mixed up a hash of hashes with an array of hashes. %people is clearly a hash; but the thing after the = is an array of two hashes. But since, in Perl, hashes are a special kind of array, Perl just took you at your word that you wanted to treat this array as a hash.

      The end result is, %people is a hash with one key-value pair: the key is { name => "fred", age => 31, } and the value is { name => "bill", age => 32, }! I know that's not what you wanted, but it's what you told Perl to do!

      You'd get the output you want with
      my @people = ( { name => "fred", age => 31, }, { name => "bill", age => 32, } ); for (@people) { print "$_->{'name'}: $_->{'age'}\n"; }
      By the way, to make your posts easier to read, you can enclose your code with <code> tags!

      George Sherston

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://268599]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (7)
As of 2017-05-29 17:53 GMT
Find Nodes?
    Voting Booth?