for my $log ( sort { if (!$query->param('merge')) { $a cmp $b } else { # it's merged so we have to sort at log level rather than line level if ($query->param('sortby') eq 'time_asc') { for my $line ( keys %{$logdata->{$log}} ) { my $timeA = $logdata->{$a}->{$line}->{'time'}; my $timeB = $logdata->{$b}->{$line}->{'time'}; $timeA cmp $timeB; } } elsif ($query->param('sortby') eq 'time_des') { for my $line ( keys %{$logdata->{$log}} ) { my $timeA = $logdata->{$a}->{$line}->{'time'}; my $timeB = $logdata->{$b}->{$line}->{'time'}; $timeB cmp $timeA; } } } } keys %$logdata ) { my $loglines = $logdata->{$log}; for my $line ( sort keys %$loglines ) {