in reply to multiple forks running in parallel yet still getting their data

You really would need a pair of pipes for each child and to use select to determine which has output ready for reading. See perldoc perlipc and perldoc IO::Select, or perhaps IPC::Run. Or better yet, use POE!.