The number of items being generated is pretty low - usually a hundred or less. For that I thought the loading of a module would be a relatively high overhead for a job which I hoped could be done with a small amount of non-module code, (and the answers have confirmed it's just a small amount of code). Thanks for the Set::Product::XS tip.
And thanks for the credits, haukex. At last I've reached a level of fame in the Perl world. Good to meet another person who knows how to take humour seriously.