gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:08:15 24 4
gpt4 key购买 nike

我正在编写一个 Perl 模块,并且我正在使用 carp 向调用程序抛出一个非致命警告。
carp 警告工作正常 - 我正在检查输入参数是否满足特定条件 - 如果它不满足条件,则会使用 carp 发送警告,并且模块继续使用参数的默认值而不是调用程序的参数通过了。警告只是通知正在使用默认参数而不是传入的参数。
我的问题是我的测试脚本。我的测试脚本向模块发送了一个错误的参数,我试图捕捉返回的警告消息并确保我得到了正确的警告消息。
我的模块看起来像这样:

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 没有最好的理解——也许这不是捕捉 carp 警告输出的最佳方法。我尝试使用 $SIG{__WARN__},但那也是空的。
有什么方法可以捕获鲤鱼的输出吗?这不是最大的问题,因为这只是在我的测试脚本中,但我仍然想让我的测试脚本正常工作。
提前致谢!

最佳答案

从这个页面,http://perldoc.perl.org/perlvar.html ,看起来你想设置本地$SIG{__WARN__}到一个子程序,它将把警告变成你的测试脚本的 fatal error 。他们给出的例子是:

local $SIG{__WARN__} = sub { die $_[0] };
eval $proggie;

关于perl - 如何在 Perl 中捕获鲤鱼的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/483622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com