I did consider Parallel::Forkmanager, about a half dozen other fork management modules in CPAN and doing it by forks manually. The need of the individual threads to access a shared corpus of data requires a lot more work than than the threads::shared module. So after a lot of testing with both forks and threads, I decided to go the threads route.