http://qs321.pair.com?node_id=277321


in reply to reading output from another script

The other solutions listed here are better, but if you really want to do it in your perl script:

First way: ./script | ./monitor.pl
# monitor.pl while(<>) { if(/wantthis/) { dosomething($_); } if(/warning/) {dosomethingelse($_); } print; ## pass on the output }

Option 2 - run the program from perl
# monitor.pl open(INPUT, "./script |") or die $!; while(<INPUT>) { # same as above if(/regex/) { dosomething($_); } print; } close INPUT;

Yet another way: If the script itself is perl, have it monitor it's own output.
# adapted from Perl Cookbook sub filteroutput { return if my $pid = open(STDOUT, "|-"); die "cannot fork: $!" unless defined $pid; while(<STDIN>) { if(/regex/) { dosomething($_); } print; } exit; #exit forked monitoring process }
Now add filteroutput(); above the rest of the script's normal code. It's self-monitoring.