в целом. не соответствует символам новой строки, поэтому попробуйте ((.|\n)*)<foobar>
От этой страницы, http://perldoc.perl.org/perlvar.html, похоже, что Вы хотите установить локальное $SIG{__WARN__}
к подпрограмме, которая превратит предупреждения в фатальные ошибки для Вашего сценария тестирования. Пример, который они дают:
local $SIG{__WARN__} = sub { die $_[0] };
eval $proggie;
При выполнении этого из сценария тестирования можно использовать Теста::* модули, которые получают вывод для Вас. Я склонен любить Тест:: Вывод .
Иначе, как поймать предупреждения и также весь 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';