An excerpt from my current attempts: my %sorted_msgs = map { $_[5], $_[0] } sort { Date_Cmp($a->[1], $b->[1]) } map { my @logline = split(/\s+/, $_, 5); my $timestring = '\'' . $logline[0] . ' ' . $logline[1] . '\''; [ $_, ParseDate($timestring), $logline[0], $logline[1], $logline[2], $logline[3], $logline[4] ]; } @matched_lines;