use strict; use warnings; use Data::Dumper; use List::Util q{max}; my @arr = ( [ qw{ ein zwei drei } ], [ qw{ one two three four five } ], [ qw{ un deux trois quatre } ], [ qw{ uno due tre quattro cinque sei} ], ); print Data::Dumper->Dumpxs([\@arr], [q{*arr}]); my @transposed = map { my $col = $_; [ map { exists $arr[$_]->[$col] ? $arr[$_]->[$col] : undef } 0 .. $#arr ] } 0 .. max(map { $#{ $_ } } @arr); print Data::Dumper->Dumpxs([\@transposed], [q{*transposed}]);