use IPC::Open3 qw( open3 ); # Avoid having our STDIN closed. open(local *TO_CHILD, '<', '/dev/null') or die $!; my $pipe = "..."; # Use File::Temp mkfifo($pipe, 0700) or die $!; my $pid = open3( 'STDOUT', '>STDERR', '-', # fork without exec ); if (!$pid) { # Child my $command = qq{script -f -a $pipe}; $terminal->feed_child( "$command\n" ); exit(0); } open(my $fh, '<', $pipe) or die $!; while (<$fh>) { ... } waitpid($pid, 0);