sub to_iso { join '-', reverse split '-', shift; # otherwise, # join '-', (split '-', shift)[2,0,1]; } sub from_iso { join '-', reverse split '-', shift; # otherwise, # join '-', (split '-', shift)[1,2,0]; } # @data is all your records as an AoA my @sorted = map { $_->[7] = from_iso($_->[7])} sort {$a->[7] cmp $b->[7]} map { $_->[7] = to_iso($_->[7])} @data;