Clearly, you should make sure before going too far that you do have the computing resources necessary to allow the computations to really occur “in parallel” on the hardware, and that you do not pay an advantage-overwhelming cost with the disk I/O. Consider using some kind of thread-safe but in-memory queue to send results back ... perhaps sending them, not to the parent, but to a data-collecting child who does nothing else but listen on that queue. (Yes, you are right about blessing: it simply flips a bit and associates the object with a package-name.) But first and foremost ... set up a little-bitty test case as a proof of concept to make sure that your idea is actually worth developing to a full-on implementation. In too-many cases, although certainly not all of them, “fancy-pants multithreading” can actually run slower or, almost as embarrassing, no faster. Stick your toes in the water before putting on your bathing suit on this one.
If it does work for you, Parallel::ForkManager is a very good tool.