微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何捕获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;

原文地址:https://www.jb51.cc/Perl/172508.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐