sub zipn {
local $[ = 0;
[
map {
my $index = $_;
map {
defined($_[$_][$index]) ?
$_[$_][$index] :
''
} 0..$#_
} 0 .. maximum(map { $#{$_[$_]} } 0..$#_)
]
}
sub maximum {
local $[ = 0;
($#_ == 1) ?
(
($_[0] >= $_[1]) ?
$_[0] :
$_[1]
) :
maximum(maximum($_[0], $_[1]), @_[2..$#_]);
}
####
zipn([1,2,3], [4,5,6], [7,8,9,10])
####
[1,4,7,2,5,8,3,6,9,'','',10]