use IO::Pty; use IO::Select; my $pty = new IO::Pty; pipe($readerr, $writeerr); if (my $pid = fork) { close($writeerr); my $select = new IO::Select; $select->add($pty); $select->add($readerr); while (1) { foreach my $fh ($select->can_read) { my $buf; if (sysread($fh, $buf, 4096)) { print "Read ... $buf ...\n"; } } } } else { close($readerr); $pty->make_slave_controlling_terminal(); my $slave = $pty->slave(); close $pty; $slave->clone_winsize_from(\*STDIN); $slave->set_raw(); open(STDOUT, ">&" . $slave->fileno); open(STDERR, ">&" . $writeerr->fileno); close($slave); exec("/home/hagus/foo.pl"); }