sub transpose { map { my $i = $_; [ map $_->[ $i ], @_ ] } 0 .. $#{ $_[0] } } my @array1 = qw /ab bc cd de/; my @array2 = qw /cc dd ee gg/; my @array3 = qw /12 34 56 78/; print "@$_\n" for transpose \( @array1, @array2, @array3 ); __END__ ab cc 12 bc dd 34 cd ee 56 de gg 78 #### my @firsts = ( 1, 2, 3, 4 ); my @seconds = qw( w x y z ); my @thirds = ( 5.6, 7.8, 9.0, 1.2 ); my @foos = map foo( @$_ ), transpose \( @firsts, @seconds, @thirds ); # @foos gets foo( 1, 'w', 5.6 ), foo( 2, 'x', 7.8 ), etc.