The problem isnt which module but how to call the module recursively to manage nested dynamic sets. I think the constructor for Algorithm::Loops, say, has to be called in a recursive routine that exhausts the different sets being permuted. But that is going to be very slow so I hesitate to put that as a serious solution. I have to think on!
Update: maybe traverse with Parse::RecDescent and have that permute each set encountered.