package NestedMap; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(nestedmap); use strict; use warnings; # [POD snipped out] sub nestedmap(&@) { my $f = shift; map { local @NestedMap::stack = ($_, @NestedMap::stack); $f->($_); } @_ } #### # show all combinations of (A,B,C) (a,b,c) and (1,2,3) print join("\n", nestedmap { nestedmap { nestedmap { join('',@NestedMap::stack[0..2]) } qw(A B C) } qw(a b c) } qw(1 2 3) ); #### nestedmap { ... } list #### nestedmap sub { ... }, list