Как я могу поймать выход из карпа в Perl?

в целом. не соответствует символам новой строки, поэтому попробуйте ((.|\n)*)<foobar>

13
задан brian d foy 28 January 2009 в 04:07
поделиться

3 ответа

От этой страницы, http://perldoc.perl.org/perlvar.html, похоже, что Вы хотите установить локальное $SIG{__WARN__} к подпрограмме, которая превратит предупреждения в фатальные ошибки для Вашего сценария тестирования. Пример, который они дают:

local $SIG{__WARN__} = sub { die $_[0] };
eval $proggie;
19
ответ дан Tracy Hurley 28 January 2009 в 04:07
поделиться

При выполнении этого из сценария тестирования можно использовать Теста::* модули, которые получают вывод для Вас. Я склонен любить Тест:: Вывод .

6
ответ дан brian d foy 28 January 2009 в 04:07
поделиться

Иначе, как поймать предупреждения и также весь STERR вывод:

my $stderr = '';
{
    local *STDERR;
    open STDERR, '>', \$stderr;
    do_stuf_here();
}
like( $stderr, qr/my result/, 'test stderr output' );

можно сделать необычную тестовую функцию:

sub stderr_test (&$) {
    my ( $code, $pattern, $text ) = @_;
    my $result = '';
    {
        local *STDERR;
        open STDERR, '>', \$result;
        $code->();
    }
    if ( UNIVERSAL::isa( $pattern, 'Regexp' ) ) {
        like( $result, $pattern, $text );
    }
    else {
        is( $result, $pattern, $text );
    }
}

# usage
stderr_test {do_stuf_here} qr/my expected STDERR output/,
    'stderr is like';
stderr_test {do_stuf_here} 'my expected STDERR output',
    'stderr is exactly';
7
ответ дан Hynek -Pichi- Vychodil 28 January 2009 в 04:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: