#!/usr/bin/perl # http://perlmonks.org/?node_id=1195332 use strict; use warnings; my @array = ( ['X1','X2','X3','X4' ], ['','foo','',''], ['','bar','',''], ['','rat','',''], ['me','','',''] ); use Data::Dump 'pp'; print "before\n"; pp \@array; my @newarray; my @itemsincolumn; my $width = @{ $array[0] }; for my $row ( @array ) { for my $column ( 0 .. $width - 1 ) { length $row->[$column] and $newarray[ $itemsincolumn[$column]++ ][$column] = $row->[$column]; } } for my $row ( @newarray ) { $_ .= '' for $row->@[0 .. $width - 1]; } print "after\n"; pp \@newarray