use strict; use warnings; use Data::Dumper; my @arr1 = qw( A B C ); my @arr2 = qw(foo bar qux); my @arr3 = (1, 2, 3 ); my @all; for my $source (\@arr1, \@arr2, \@arr3) { push @{$all[$_]}, $source->[$_] for 0..@$source-1; } print Dumper (\@all);