It superficially appears to me that you are attempting to launch one thread per-file.
That's what I thought too at first. I didn't get the memo that fork on Win32 was ready for actual use so I got real curious about how Parallel::ForkManager dealt with this. Turns out, when you use $pm->start, if you've already used all your children (14 here), it waits for a child and finally launches a new one and continues the parent program. So yeah, it seems that's how you're "supposed" to do it.
As good as Parallel::ForkManager seems to be, it still strikes me as odd to reach for forks on a platform that's natively threaded.