perlquestion
Yary
Howdy monks,
<p>
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.
<code>
perl -MIPC::Open3 -e "open3(\*IN,'>&STDOUT','>&STDERR',qw[perl -pe 1]);print IN 'Hello';close IN;wait"
</code>
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 <tt>perl -pe 1</tt>. Around it is wrapped a call to open3, and the caller prints in a string, closes <tt>IN</tt>, which should generate an EOF for the child... but it never happens.
<p>
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.
<p>
I am about to go to bed, and in the morning will just use <tt>open("|cmd")</tt> 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)
<p>
thanks, and sorry for brain cells lost, in advance