Question: Given `x` number of arrays, each with a possibly different number of elements, how can I iterate through all combinations where I select one item from each array?

Example:

```
[   ]   [   ]   [   ]
 foo     cat      1
 bar     dog      2
 baz              3
                  4

```

Returns

```
[foo]   [cat]   [ 1 ]
[foo]   [cat]   [ 2 ]
  ...
[baz]   [dog]   [ 4 ]

```

I'm doing this in Perl, btw.

Answer: 
Recursive and more-fluent Perl examples (with commentary and documentation) for doing the Cartesian product can be found at <http://www.perlmonks.org/?node_id=7366>

Example:

```
sub cartesian {
    my @C = map { [ $_ ] } @{ shift @_ };

    foreach (@_) {
        my @A = @$_;

        @C = map { my $n = $_; map { [ $n, @$_ ] } @C } @A;
    }

    return @C;
}

```
You can use nested loops.

```
for my $e1 (qw( foo bar baz )) {
for my $e2 (qw( cat dog )) {
for my $e3 (qw( 1 2 3 4 )) {
   my @choice = ($e1, $e2, $e3); 
   ...
}}}

```

When you need an arbitrary number of nested loops, you can use [Algorithm::Loops](http://search.cpan.org/perldoc?Algorithm::Loops)'s `NestedLoops`.

```
use Algorithm::Loops qw( NestedLoops );

my @lists = (
   [qw( foo bar baz )],
   [qw( cat dog )],
   [qw( 1 2 3 4 )],
);

my $iter = NestedLoops(\@lists);
while ( my @choice = $iter->() ) {
   ...
}

```