In Win32 IPC::Open3 + IO::Select does not work that well
Jarkko Hietaniemi [Mon, 8 Sep 2003 09:52:40 +0000 (09:52 +0000)]
so mostly undo the change #21072 and revert back to using
a temp file.
p4raw-link: @21072 on //depot/perl: cc5fd0943567be6ee0408b6bc088cce15ca15861

p4raw-id: //depot/perl@21080

lib/perl5db/de0.t

index 400b1f4..116bbaa 100644 (file)
@@ -3,19 +3,16 @@
 BEGIN {
     chdir 't' if -d 't';
     @INC = '../lib';
-    require Config; import Config;
-    unless ($Config{d_fork}) {
-       print "1..0 # no fork\n";
+    $ENV{PERL5LIB} = '../lib';    # so children will see it too
+    if ($^O eq 'VMS') {
+       print "1..0 # skip on $^O, no piped open\n";
        exit 0;
     }
-    $ENV{PERL5LIB} = '../lib';    # so children will see it too
 }
 
 use strict;
-use IPC::Open3 qw(open3);
-use IO::Select;
 
-$|=1;
+$| = 1;
 
 my @prgs;
 
@@ -31,25 +28,22 @@ plan tests => scalar @prgs;
 
 require "dumpvar.pl";
 
+use File::Temp qw/tempfile/;
+
+our ($tmpfh, $tmpfile) = tempfile();
+
 $ENV{PERLDB_OPTS} = "TTY=0";
-my($ornament1,$ornament2,$wtrfh,$rdrfh);
-open3 $wtrfh, $rdrfh, 0, $^X, "-de0";
-my $ios = IO::Select->new();
-$ios->add($rdrfh);
+my($ornament1,$ornament2);
 for (@prgs){
-    my($prog,$expected) = split(/\nEXPECT\n?/, $_);
-    print $wtrfh $prog, "\n";
-    my $got;
-    while (not defined $got) {
-       while ($ios->can_read(0.25)) {
-           sysread $rdrfh, $got, 1024, length($got);
-       }
-    }
+    my($prog, $expected) = split(/\nEXPECT\n?/, $_);
+    open my $select, "| $^X -de0 2> $tmpfile" or die $!;
+    print $select $prog;
+    close $select;
+    my $got = do { open my($fh), $tmpfile or die; local $/; <$fh>; };
     $got =~ s/^\s*Loading.*\nEditor.*\n\nEnter.*\n\nmain::\(-e:1\):\s0\n//;
     unless (defined $ornament1) {
-         $got =~ s/^\s*Loading.*\nEditor.*\n\nEnter.*\n\nmain::\(-e:1\):\s0\n//;
-         ($ornament1,$ornament2) = $got =~
-             /(.*?)0\s+'reserved example for calibrating the ornaments'\n(.*)/
+        ($ornament1, $ornament2) = $got =~
+            /(.*?)0\s+'reserved example for calibrating the ornaments'\n(.*)/
     }
     $got =~ s/^\Q$ornament1\E//;
     $got =~ s/\Q$ornament2\E\z//;