my @arr1 = qw( A B C ); my @arr2 = qw(foo bar qux); my @arr3 = (1, 2, 3 ); my @all = transpose(\@arr1, \@arr2, \@arr3); sub transpose { my (@a_o_a) = @_; my @ans; for my $i (0..$#a_o_a) { my $a = $a_o_a[$i]; for my $j (0..$#$a) { $ans[$j][$i] = $a->[$j]; } } return @ans; }