my $lastdate; foreach my $date # n.b. $a and $b interpreted specially in a sort block ( sort { sFormat( $a ) <=> sFormat( $b ) } keys %datecount ) { print "\n", $date, ": ", $datecount{$date}; $lastdate = $date; # overwritten in order until last } sub sFormat { # convert dd/mm/yyyy into yyyymmdd my $old = shift; $old =~ /^(\d{2})\/(\d{2})\/(\d{4})$/ or die "Programming error: Invalid format $old\n"; return $3 . $2 . $1; }