in reply to Forking Queue with Pipe (grabbing stderr)

I don't know about your STDERR problem but...

my $lpar = shift; if ( ( scalar keys %children ) < $max_children ) { my $pid = (open($lpar,"-|"));

You are apparently passing a file name to the subroutine and then overwritting that file name with a filehandle which you then try to use as a file name in subsequent code.