#!/usr/bin/env perl use warnings; use strict; use Data::Dump; my @matrix = ( [qw/ t1 t1 t2 t2 t1 t2 /], [qw/ a1 a2 a1 a2 a3 a3 /], [qw/ mis mis mis mis del del /], ); my @idx = sort { $matrix[0][$a] cmp $matrix[0][$b] or $matrix[1][$a] cmp $matrix[1][$b] } 0..$#{$matrix[0]}; dd @idx; # (0, 1, 4, 2, 3, 5) my @out = map { $matrix[2][$_] } @idx; dd @out; # ("mis", "mis", "del", "mis", "mis", "del")