use Data::Dumper; my @r = ( [ 5, 3, 5, 5 ], [ 1, 1, 2, 1 ], [ 2, 1, 2, 3 ], [ 5, 5, 1, 5 ], [ 1, 5, 1, 1 ], [ 2, 3, 5, 3 ] ); @x = sort { $a->[2] <=> $b->[0] || $a->[3] <=> $b->[1] || -1 } @r; print Dumper(\@x); __OUTPUT__ [ 1, 5, 1, 1 ] [ 1, 1, 2, 1 ] [ 2, 1, 2, 3 ] [ 2, 3, 5, 3 ] [ 5, 3, 5, 5 ] [ 5, 5, 1, 5 ]