http://qs321.pair.com?node_id=643966


in reply to How to swap rows with columns?

I wondered how to do this if the rows were not all the same length. This is what I came up with.

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}]);

Here's the output.

@arr = ( [ 'ein', 'zwei', 'drei' ], [ 'one', 'two', 'three', 'four', 'five' ], [ 'un', 'deux', 'trois', 'quatre' ], [ 'uno', 'due', 'tre', 'quattro', 'cinque', 'sei' ] ); @transposed = ( [ 'ein', 'one', 'un', 'uno' ], [ 'zwei', 'two', 'deux', 'due' ], [ 'drei', 'three', 'trois', 'tre' ], [ undef, 'four', 'quatre', 'quattro' ], [ undef, 'five', undef, 'cinque' ], [ undef, undef, undef, 'sei' ] );

I imagine some of the modules mentioned could cope with this but haven't checked.

Cheers,

JohnGG