我在 Perl 脚本中有 2 行彼此相邻,可能会抛出 __WARN__
。如果第一个抛出,那么我只想从函数返回而不是尝试继续。
我知道如何在这两行之前设置一个处理程序,这样我就可以报告错误等:
local $SIG{__WARN__} = sub {
my $e = shift;
# log the error etc.
return;
};
# possibly warning-resulting line 1
# possibly warning-resulting line 2
但是这两条线都会发生这种情况。我宁愿它只是捕获第一个实例并从函数返回。但是该处理程序中的返回仅返回处理程序,而不返回外部函数。
有没有办法在处理信号时从函数返回?
最佳答案
将这两行包装在单独的函数中,并让第一行返回一个状态,指示调用函数应该返回。单独的函数可以根据需要处理警告 - 可能使用相同的函数来执行相同的日志记录。
sub wrap_line_1
{
local $SIG{__WARN__} = ...;
...do line 1...
return ($warning_fired ? 1 : 0);
}
sub wrap_line_2
{
local $SIG{__WARN__} = ...;
...do line 2...
return;
}
...calling code...
wrap_line_1() and return;
wrap_line_2();
...
关于perl - 在 Perl 中捕捉信号最优雅的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6160129/