Using bi-directional pipes should work fine. You'll need to be careful to avoid deadlock, but otherwise it should be fairly straight-forward. I just finished a small project which uses Parallel::ForkManager, IO::Pipe and IO::Select to farm out SMTP-sending jobs to a pool of sub-processes. It seems to be working well so far.