for my $week ( map { $_->[0] } sort { $a->[1] <=> $b->[1] || $a->[2] <=> $b->[2] } map { [$_, split /\./] } keys %IssuesByWeek ) { # ... } #### for my $key ( keys %IssuesByWeek ) { # New key in format of YYYY-MM-DD $IssuesByWeek{ get_sunday( $key ) } = delete $IssuesByWeek{ $key }; } #### #!/usr/bin/perl use strict; use warnings; my @list = map { int(rand 1000) + 1 } 1 .. 50; print "Top 5:\n"; print "\t$_\n" for top_x(\@list, 5); sub top_x { my ($list, $x) = @_; $x--; my @top; $#top = $x; for my $item ( @$list ) { next if defined $top[ -1 ] && $item <= $top[ -1 ]; for my $id ( 0 .. $#top ) { $top[ $id ] = $item and last if ! defined $top[ $id ]; if ( $item > $top[ $id ] ) { @top[ $id .. $#top ] = ($item, @top[ $id .. $#top - 1]); #splice(@top, $id, 0, $item), pop @top; last; } } } return @top; }