I'ts always seemed to me regrettable that List::MoreUtils chose to take the iterator approach to this. I find the transpose function a lot more useful:
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
As shown above, iterating throught the transpose is as easy as iterating through any other array, and much more flexible (e.g. one can easily iterate through the rows in reverse order, etc.).
One handy use for the transpose is to feed multi-arg functions via map; e.g.:
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.
Plus, the transpose of a numerical matrix is a mathematically useful entity of its own right (though admittedly, one wouldn't use Perl AoA's for serious matrix-oriented computation, but rather something like
PDL.)