my $foo = [ [1, 2, 3, ...], ['a', 'b', 'c', ...], ['foo', 'bar', 'baz', ...], ]; #### my $bar = [ [1, 'a', 'foo', ...], [2, 'b', 'bar', ...], [3, 'c', 'baz', ...], ]; #### my $bar = rearrange($foo); sub rearrange { my ($in) = @_; my @out; for my $col ( 0 .. (max($arrays) - 1) ) { my @row; foreach my $arr (@$in) { push @row, defined($arr->[$col]) ? $arr->[$col] : ''; } push @out, \@row; } return \@out; } sub max { my ($arr) = @_; my $max; foreach my $array (@$arr) { $max = scalar @$array if (scalar @$array > $max); } return $max; }