use DateTime::Format::Flexible; my @sorted = map { $_->{line} } sort { $a->{dt} <=> $b->{dt} or $a->{l} cmp $b->{l} } map { { dt => DateTime::Format::Flexible->parse_datetime( substr($_,0,24) ), l => substr($_,25,1), line => $_ } } @lines;