Prg*_*tas 1 error-handling perl
我想编写一个小的子例程,它可以以一致的方式装饰所有错误消息,而不必在我的程序中复制它.
但是我希望行号来自调用它的位置,而不是来自die/ warn发生的位置.
在CI中只使用预处理器宏,但Perl没有这些.实现这个的最佳方法是什么?
使用鲤鱼警告/错误.您可以使用__WARN__和__DIE__挂钩来影响对流的warn打印STDERR以及如何die抛出.请注意,它们完全不同.
use warnings;
use strict;
use feature 'say';
use Carp;
$SIG{__WARN__} = \&wrap_warn;
sub wrap_warn {
print "WARNING: @_";
}
sub level_2 {
say "Print from level_2";
carp "carp from level_2(@_)";
}
sub level_1 {
level_2(@_);
}
level_1("from main");
Run Code Online (Sandbox Code Playgroud)
打印到 STDOUT
Print from level_2
WARNING: carp from level_2(from main) at wrap_warn.pl line 19.
main::level_2('from main') called at wrap_warn.pl line 15
main::level_1('from main') called at wrap_warn.pl line 22
Run Code Online (Sandbox Code Playgroud)
如果你想要这个仍然去STDERR使用print STDERR "WARNING: @_";
请务必仔细阅读有关%SIGperlvar的信息并至少提醒.
虽然现在看来,你希望这是全球性的,我想提一提,当地像这样-izing变化是一个想一般的东西,如果可能的话.这篇文章中有一个例子,还有更多.