\nuse strict;\n\nnested_for(\n sub {print "@_\\n";},\n [1..2], ['a'..'c'], ['A'..'D']\n);\n\nsub nested_for {\n ret_iter(@_)->();\n}\n\nsub ret_iter {\n my $fn = shift;\n my $range = shift;\n my $sub = sub {$fn->($_, @_) for @$range};\n return @_ ? ret_iter($sub, @_) : $sub;\n}\n
Cheers,
Ben