From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

#!/usr/bin/perl -w
my $loaded;
use strict;
BEGIN { $| = 1; print "1..3\n"; }
END { print "not ok 1\n" unless $loaded; }
$loaded=1;
print "ok 1\n";
my $foo = join('',
nestedmap sub {
nestedmap sub {
nestedmap sub {
join('',@NestedMap::stack[0..2])
}, qw(A B C)
}, qw(a b c)
}, qw(1 2 3)
);
print 'not ' unless($foo eq 'Aa1Ba1Ca1Ab1Bb1Cb1Ac1Bc1Cc1Aa2Ba2Ca2Ab2Bb2Cb2Ac2Bc2Cc2Aa3Ba3Ca3Ab3Bb3Cb3Ac3Bc3Cc3');
print "ok 2\n";
{ local $^W=0;
$foo = join('', @{ zipn( [1,2,3], [qw(a b c d)], [qw(cat dog)] )});
}
print 'not ' unless($foo eq '1acat2bdog3cd');
print "ok 3\n";
sub zipn {
my @args = @_;
[
nestedmap sub {
nestedmap sub {
$args[$_][$NestedMap::stack[1]]
}, 0..$#args
}, 0 .. max(map { $#{$_[$_]} } 0..$#args)
]
}
sub max { foldl(sub { ($_[0] > $_[1]) ? $_[0] : $_[1]; }, @_); }
sub foldl {
my($f, $z, @xs) = @_;
$z = $f->($z, $_) foreach(@xs);
return $z;
}