in reply to IPC::Open3 and Win32

Part 1:

I'm guessing it's executing join(' ', @command) and the child perl parses it, or the joined string is passed to cmd /c which parses it.

Part 2:

1) I like this tying approach. However, I heard tie was really slow compared to a class that do the same thing. You might want to write and use a subclass of IO::Handle instead of tying.

2) Try not using > inside of <>: <$$self{handle}>.

3) gensym works great: (tested)

use IO::Handle; # for gensym my $handle = gensym; tie *$handle, 'call_waitpid', $rdrfh, $pid; return $handle;