Pipe STDERR используя IO :: Pipe Perl - PullRequest
       11

Pipe STDERR используя IO :: Pipe Perl

0 голосов
/ 29 октября 2018
my $writer = IO::Pipe->new();
$writer->writer();
print $writer $some_function();
$writer->flush();
$writer->close;

Что произойдет, если some_function выдаст какое-то исключение или STDERR? Это записано в $writer? Если нет, то как этого добиться?

1 Ответ

0 голосов
/ 29 октября 2018

Вам нужно поймать $SIG{__WARN__} и / или $SIG{__DIE__}

{
    my $writer = IO::Pipe->new();
    $writer->writer();
    local $SIG{__WARN__} = sub { print $writer $_[0] };
    local $SIG{__DIE__} = sub { print $writer $_[0] };
    print $writer $some_function();
    $writer->flush();
    $writer->close;
}
Обработчик

$SIG{__DIE__} нуждается в модификации в зависимости от того, как вы хотите обрабатывать критические ошибки.

https://perldoc.perl.org/perlvar.html#%25SIG

...