in reply to Error handling in Inter Process Communication

IPC::Open3::open3 handles its third argument in an special way. If you pass undef there it will send the child STDERR stream to the same handler as STDOUT.

Use non-lexical filehandles or preinitialize $err. From the module SYNOPSIS:

use Symbol 'gensym'; $err = gensym; $pid = open3($wtr, $rdr, $err, 'some cmd and args', 'optarg', ...);