I've seen more than a few questions about the stdout/stderr handles with IPC::Open3, but not yet found people with the issue I'm having on stdin. Here's a one-liner that prints "Hello" on Unix, but hangs on Win32.
perl -MIPC::Open3 -e "open3(\*IN,'>&STDOUT','>&STDERR',qw[perl -pe 1])
+;print IN 'Hello';close IN;wait"
It is about as simplified as I can get it. There's a subprocess which just prints everything it reads from STDIN, that's the perl -pe 1
. Around it is wrapped a call to open3, and the caller prints in a string, closes IN
, which should generate an EOF for the child... but it never happens.
I have tried printing a multi-line string, reading just one line with "readline" or "scalar <>" does work, showing that open3 is indeed communicating over IN. The child sees input written by the parent, it does not see the parent closing IN when running under Win32.
I am about to go to bed, and in the morning will just use open("|cmd") with some fancy redirects to get stdout and stderr where I want to go... unless a genius can point out what I'm doing wrong/a solution... preferably using only standard modules (or those that ship with ActiveState's distribution)
thanks, and sorry for brain cells lost, in advance