in reply to sorting hash of hashes

Hello dilip.renkila, and welcome to the Monastery!

(1) Your third foreach loop has keys %{$update{$j}} where it should have keys %{$update{$i}{$j}}.

(2) If you want the output to be sorted by key, that’s easy: just add sort in each foreach loop:

foreach my $i (sort keys %update) { ... foreach my $j (sort keys %{$update{$i}}) { foreach my $k (sort keys %{$update{$i}{$j}}) { ... } } }

But note that this “sorts in standard string comparison order.” (see sort) To sort numerically, you will need to use:

sort { $a <=> $b } keys ...

where the keys are numeric.

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^2: sorting hash of hashes
by dilip.renkila (Initiate) on Oct 28, 2015 at 22:50 UTC
    Is this sort works also for characters? Thank you for your reply
      Is this sort works also for characters?

      Yes, by default, sort sorts alphabetically. Consider:

      12:36 >perl -Mstrict -wE "my @array = ('c', 'bb', 'aaa'); say for sort + @array;" aaa bb c 12:37 >

      Here sort puts 'aaa' first, because 'a', its first character, comes alphabetically before 'b' and 'c'. Similarly:

      12:37 >perl -Mstrict -wE "my @array = ('3', '22', '111'); say for sort + @array;" 111 22 3 12:39 >

      puts '111' first because '1' comes alphabetically before '2' and '3'.

      Note that sort @array is shorthand for sort { $a cmp $b } @array; cmp compares alphabetically. To sort numerically, use <=> instead of cmp:

      12:39 >perl -Mstrict -wE "my @array = ('3', '22', '111'); say for sort + { $a <=> $b } @array;" 3 22 111 12:43 >

      See:

      Hope that helps,

      Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,