Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

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]
[Eily]: marto oh ok, since normally it would have been 1, which is odd as well, I didn't think this was what you were refering to
[Eily]: what? Does that mean we can't blame LanX when he's there?
[marto]: but 5 in total, is odd, where as 10 is even
[marto]: sure, we can blame LanX when he is around, but he is more likely to moan about it :P
[Eily]: there's 6 in total though :P
[Eily]: unless LanX did something to maths when I wasn't looking

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (7)
As of 2018-03-20 10:02 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (249 votes). Check out past polls.