sub ret_iter4 (@loops is copy) returns Ref { my $last = [*] @loops.map:{ $_.elems }; my $iter = -1; return sub { my $i = ++$iter; return () if $iter >= $last; my $possible = $last; return @loops.map:{ $possible /= $_.elems; my $this_iter_i = $i / $possible; $i %= $possible; $_[$this_iter_i]; }; }; }