use IO::Handle; if ($pid = open $child, "-|") { while (<$child>) { #look ma! I'm processing! } close $child; } else { die "Couldn't fork: $!" unless defined $pid; STDOUT->autoflush(1); #exec program that wrties to STDOUT exit; }