Thank you to all your suggestions. So I tried to modify my example program in two ways:
- Make output unbuffered in both programs
- Make sure that Control-Z is sent on Windows before the output handle is closed.
This results in the following programs:
# This is cat.pl
$|=1;
while(<>) {
print;
}
chr(0x1a) if $^O eq 'MSWin32';
and
# This is ls.pl
use strict;
use warnings;
use IPC::Open2;
# OUTPUT: Filehandle for output from cat.pl
# INPUT: Filehandle for input to cat.pl
open2(*OUTPUT,*INPUT,"$^X", "cat.pl") or die "$!";
print INPUT "first line\nsecond line\n";
if ($^O eq 'MSWin32') {
select INPUT;
$| = 1;
print INPUT chr(0x1a);
}
close INPUT;
my @result=<OUTPUT>;
close OUTPUT;
print "RESULT:\n@result\n";
Still, using the programs on Windows like this:
perl ls.pl
causes it to hang.
--
Ronald Fischer <ynnor@mm.st>
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.