#!perl -l my @matrix = ( [ qw(ab cd ef gh)], [ qw(ij kl mn op)], [ qw(qr st uv wx)] ); my $transposed = transpose(\@matrix); local $" = ","; print "@$_" for @$transposed; sub transpose { my $matrix = shift; my @result; my $m; for my $col (@{$matrix->[0]}) { push @result, []; } for my $row (@{$matrix}) { $m=0; for my $col (@{$row}) { push(@{$result[$m++]}, $col); } } return \@result; }