# monitor.pl while(<>) { if(/wantthis/) { dosomething($_); } if(/warning/) {dosomethingelse($_); } print; ## pass on the output } #### # monitor.pl open(INPUT, "./script |") or die $!; while() { # same as above if(/regex/) { dosomething($_); } print; } close INPUT; #### # adapted from Perl Cookbook sub filteroutput { return if my $pid = open(STDOUT, "|-"); die "cannot fork: $!" unless defined $pid; while() { if(/regex/) { dosomething($_); } print; } exit; #exit forked monitoring process }