Doesn't seem to be working. This code prints select()'ed, then blocks for 5 seconds and prints [Piped output] instead of printing nothing yet immediately and exiting.
#!/usr/bin/perl -w
use strict;
use Symbol;
my $sym = gensym;
open($sym, "perl -e 'sleep(5); print qq!Piped output!;' |") or die $!;
my ($rin, $rout);
$rin = '';
vec($rin, fileno $sym, 1) = 1;
my $changed = select($rout = $rin, undef, undef, 0);
print "select()'ed\n";
if ($changed && vec($rout, fileno $sym, 1) == 1) {
my $buf;
sysread($sym, $buf, 4096);
print "[$buf]";
} else {
print "nothing yet";
}
|