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

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...