Presumably the difference relates to what happens when you close the writer. You might logically expect this would trigger the sending of EOF, and presumably it does on most OS but not on Win32. It works on Win32 if you formally send the EOF char (0x1a):
C:\>type cat.pl $|++; print while <>; C:\>type ipc.pl use strict; use IPC::Open2; $|++; my $EOF = chr(0x1a); # inline use "\x1a" my $perl = "H:\\perl\\bin\\perl.exe"; my $cat = "C:\\cat.pl"; my $data = "first line\nsecond line"; my $pid = open2(my $rdr, my $wtr, $perl, $cat ); print "Sending:\n$data\n----\n"; print $wtr $data .$EOF; print "Going for read!\n"; print while <$rdr>; C:\>perl ipc.pl Sending: first line second line ---- Going for read! first line second line C:\>
This will hang if you don't send the 0x1a regardless of whether you close $wtr or not.
In reply to Re: ActiveState woes : Is it EOF-blind?
by tachyon-II
in thread ActiveState woes : Is it EOF-blind?
by rovf
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |