I’m not really a fan of nested loops, so when I need to create a list of combinations based on two or three other lists, I really miss list comprehensions1 such as those in Python.
l = [(x,y) for x in range(5) for y in range(5)]
Very elegant.
If I was using Lisp, I might use a nested mapcar.
(mapcar (lambda (out) (mapcar (lambda (in) (cons in out)) '(a b c d e))) '(1 2 3 4 5))
Perl map uses $_ so you don’t need to explicitly specify the name of the lambda parameter. How can I differentiate between the outer $_ and the inner $_?
my $outer; my @x = map { $outer = $_; (map { $outer . $_ } qw(a b c d e)) } (1..5);
Note: if you are trying to do something as simple as this, take a look at Set::CrossProduct instead.