my @matrix=([qw(1 2 4 4)],[qw(5 2 0 8)],[qw(9 10 11 12)],); my @t; for my $i (0..$#{$matrix[0]}) { for my $j (0..$#matrix) { last if $matrix[$j][$i] == 0; $t[$i][$j] = $matrix[$j][$i]; } } #### $VAR1 = [ [ 1, 5, 9 ], [ 2, 2, 10 ], [ 4 ], [ 4, 8, 12 ], ]