nysus has asked for the wisdom of the Perl Monks concerning the following question:

I'm running a command from my perl script:

system(qq(lpass $cmd $args));
The lpass command will print to STDERR if there is a problem with the command or arguments it's passed. If it does, that, I'd like to modify that output. Is this possible at all?

Normally, I'd capture the output with backticks and then modify the output if necessary. However, I can't do that because the lpass command does some special formatting to the text before sending it to STDOUT. I lose all this formatting if I use backticks. For example, if I do this when the command prints to STDOUT:

system(qq(lpass $cmd $args 2>&1 | tr 'p' 'x'));

...I lose all the output's formatting. So I need to modify the output only when printed to STDERR.

$PM = "Perl Monk's";
$MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate Priest";
$nysus = $PM . ' ' . $MCF;
Click here if you love Perl Monks

Replies are listed 'Best First'.
Re: Modify system() call output only if printed to STDERR
by hippo (Archbishop) on Jan 24, 2018 at 16:44 UTC

      Perfect. Got it with:

      run3 ['lpass', $cmd, $args], undef, undef, \&_filter; sub _filter { my $output = shift; $output =~ s/lpass/lpp/gm; print $output; }

      What the hell will they think of next. :)

      $PM = "Perl Monk's";
      $MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate Priest";
      $nysus = $PM . ' ' . $MCF;
      Click here if you love Perl Monks