in reply to Combinatorics problem
You could try List::Comprehensions
use List::Comprehensions; local $"=","; print comp1 { "@_\n" } [1,2], [qw(a b)], [qw(# * &)]; [download]
Output:
1,a,# 1,a,* 1,a,& 1,b,# 1,b,* 1,b,& 2,a,# 2,a,* 2,a,& 2,b,# 2,b,* 2,b,& [download]