foreach my $week (sort keys %IssuesByWeek) { print "$week:\n\t",join ("\n\t", map{"$_ => $IssuesByWeek{$week}{$_}" } (sort {$IssuesByWeek{$week}{$b} <=> $IssuesByWeek{$week}{$a} } keys %{$IssuesB yWeek{$week}} )[0..4]),"\n" } #### foreach $date (reverse sort keys %IssuesByWeek) { $counter++; next if $counter>4; #Only want the most recent couple weeks ($year, $week) = split(/\./,$date); $time_t = POSIX::mktime(0,0,0,0,0,$year); #turn year to number of seconds since 1970 $secs = (604800*($week-1)+(2*24*60*60)) + $time_t; #add number of seconds since year started some reason i kept ending up on Friday when just multiplying the year by the week in seconds @date = POSIX::gmtime($secs); #turn seconds back to date $date[4]++; #because returned month is numbers of months since jan ie jan is 0 $date[4] = "0".$date[4] if ($date[4]<10); $date[3] = "0".$date[3] if ($date[3]<10); $newdate = "$date[4]\/$date[3]\/$year";