如何捕获Perl中鲤鱼的输出?

前端之家收集整理的这篇文章主要介绍了如何捕获Perl中鲤鱼的输出?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写一个Perl模块,我正在使用鲤鱼向调用程序发出非致命警告.

鲤鱼警告工作正常 – 我正在检查输入参数是否满足特定条件 – 如果不符合条件,则会发出鲤鱼警告,模块继续使用参数的默认值,而不是调用程序通过.该警告只是通知正在使用默认参数,而不是传入的参数.

我的问题是我的测试脚本.我的测试脚本将错误的参数发送到模块,我正在尝试捕获回来的警告消息,并确保我收到了正确的警告消息.

我的模块看起来像这样:

else {
  carp "value must be numeric - using default value";
}

我的测试脚本如下所示:

eval {
  #call to my module
};
like (
    $@,qr/value must be numeric/,"Should abort on non-numeric value"
);

当我运行测试时,我可以在屏幕上看到警告(它必须去STDERR),但$@变量的内容是” – 空白.

这是我测试脚本的输出

t/04bad_method_calls....ok 10/12value must be numeric - using default value at ...
#   Failed test 'Should abort on non-numeric value'
#   at t/04bad_method_calls.t line 98.
t/04bad_method_calls....NOK 12
#                   '' doesn't match '(?-xism:value must be numeric)'
# Looks like you Failed 1 test of 12.

如果我将鲤鱼变成呱呱呱呱呱呱呱呱呱呱呱呱呱呱.,…….. – – – ……………….

说实话,我没有对eval的最好的了解 – 也许这不是捕捉鲤鱼警告输出的最佳方法.我尝试使用$SIG {WARN},但也是空的.

有没有办法捕捉鲤鱼的输出?这不是最大的事情,因为这只是我的测试脚本,但我仍然希望让我的测试脚本正常工作.

提前致谢!

解决方法

从这个页面,http://perldoc.perl.org/perlvar.html,看起来你想要将本地$SIG {__ WARN__}设置为一个子程序,这将会将警告转换为测试脚本的致命错误.他们给出的例子是:
local $SIG{__WARN__} = sub { die $_[0] };
eval $proggie;

猜你在找的Perl相关文章