AKAIK - it's taken from the Algorithm::Permute man page, basically just put in a loop to do all string lengths between 1 and the number of elements in @set.

There's also benchmarks on the man page comparing speeds to other implementations.

There may possibly be a faster way of using the module via the callback interface but I'll have to think and maybe post somewhere about that. [ EDIT I doubt it . The callback thing won't take a perm length argument, and the man page warns against trying to change the array mid execution. ]

Yesterday I had a crack at a version using threads, but there were segfaults - I think Algorithm::Permute is probably not thread-safe. Googling reveals this is likely since (a) any module that does not explicitly state it is thread-safe should be assumed not to be, and (b) it's written in XS code and XS code modules are less likely to be thread-safe.

The smaller ones have run through - aka all under 7 chars. That proved my pass isn't 7 chars or less. Oh well.

Then I did a quick reschedule - new dial is:8-9, 10-11, 12-13, 14-15, 16-17, 18-19, 20-21, 22-23; that is, one process goes through two lengths, instead of one going from 8 to 23. These are all running on the main lappy - load averages have floated above 15 for some time now

I haven't yet applied the fix for adjacent chars, maybe I should have? Haven't had time.

--------------There's no such thing as life. Those mean little jocks invented it ;)-Windows is not a virus. A virus does something!