use IPC::Open3; use Symbol qw /gensym /; use IO::File; use IO::Select; my $pid; my ($in,$out,$err) = map gensym, 1..3; eval { $pid = open3($in,$out,$err,"/usr/bin/",("/home/me/infile")); }; die "Bad error" if ($@); my $sel = IO::Select->new(); $sel->add($out); $sel->add($err); while (my @ready = $sel->can_read(5)) { for my $handle (@ready) { my $buf; if ($handle == $out) { my $bytes = sysread($handle,$buf,1024); if ($bytes == 0) { $sel->remove($handle); next; } $results .= $buf; } } } if (length($results) > 0) { waitpid($pid); } else { kill(9,$pid); }