use IPC::Open3 qw( open3 ); open(local *CHILD_STDIN, '<', '/dev/null') or die $!; my $pid = open3( '<&CHILD_STDIN', '>&STDOUT', local *CHILD_STDERR, 'ls file-that-does-not-exist.txt', ); while () { print $tied_fh $_; } waitpid($pid, 0);