Perl Capture и Modify STDERR перед печатью в файл

У меня есть perl-скрипт, который выполняет несколько внешних команд и печатает выходные данные из STDERR и STDOUT в файл журнала вместе с рядом моих собственных операторов печати, которые служат документацией по процессу.

Моя проблема в том, что STDERR повторяет ~ идентичные отпечатки, как показано ниже. Я хотел бы зафиксировать это перед печатью и заменить окончательным результатом для каждой из команд, которые я запускаю.

blocks evaluated : 0
blocks evaluated : 10000
blocks evaluated : 20000
blocks evaluated : 30000
...
blocks evaluated : 3420000
blocks evaluated : 3428776

Вот как я получаю STDOUT и STDERR

my $logfile = "Logfile.log";     #log file name
#--- Open log file for append if specified ---
if ( $logfile ) 
  {
    open ( OLDOUT, ">&", STDOUT )  or die "ERROR: Can't backup STDOUT location.\n";
    close STDOUT;
    open ( STDOUT, ">", $logfile ) or die "ERROR: Logfile [$logfile] cannot be opened.\n"; 
  }

if ( $logfile ) 
  { 
    open ( OLDERR, ">&", STDERR ) or die "ERROR: Can't backup STDERR location.\n";
    close STDERR;
    open ( STDERR, '>&STDOUT'   ) or die "ERROR: failed to pass STDERR to STDOUT.\n";
  }

и закрытие их

close STDERR;  
open ( STDERR, ">&", OLDERR ) or die "ERROR: Can't fix that first thing you broke!\n";
close STDOUT; 
open ( STDOUT, ">&", OLDOUT ) or die "ERROR: Can't fix that other thing you broke!\n";   

Как мне получить доступ к STDERR, когда происходит каждая печать, чтобы выполнить замену? Или предотвратить его печать, если он не последний из партии.

Спасибо заранее.


person MicrobicTiger    schedule 02.07.2013    source источник
comment
Я думаю, что это может быть хорошим местом для начала: perldoc.perl .org/ . Передайте STDERR в разветвленный процесс и отфильтруйте эти строки.   -  person kjprice    schedule 03.07.2013
comment
Похоже, это хорошее место для Capture::Tiny, чтобы захватить STDERR или, возможно, вы можете запустить свой скрипт с помощью IPC::Run, чтобы перенаправить STDERR на функцию.   -  person MkV    schedule 03.07.2013