use Algorithm::Loops qw( NestedLoops ); NestedLoops(\@list, sub { print(join(',', @_), "\n"); }, ); #### use Algorithm::Loops qw( NestedLoops ); my $i = NestedLoops(\@list); while (my @set = $i->()) { print(join(',', @set), "\n"); }