Kev*_*Kev 6 perl warnings mod-perl apache2.2
这个脚本:
use warnings FATAL => 'all';
warn 'warning';
die 'death';
Run Code Online (Sandbox Code Playgroud)
...导致'警告'被记录,但不会在那时死亡,而是死于'死亡'.
我有一个mod_perl模块,它覆盖$main::SIG{__DIE__}了在开发过程中基本上向浏览器吐出die()消息,但它没有触及SIG{__WARN__},所以这里发生了什么?
这是在Windows Server 2003上的perl 5.10.1,在PerlSwitches中使用"-w".
inn*_*naM 10
它似乎不起作用,因为您的测试没有测试您要测试的内容.试试这个:
use warnings FATAL => 'all';
print undef;
die 'death';
Run Code Online (Sandbox Code Playgroud)
就像一个no warnings不会阻止warn工作,warnings FATAL不会让warn死.
你误解了warningspragma的目的.它是为完全合法但可能错误的操作发出警告信息.例:
use warnings;
my ($x, $y) = ("hello", "world");
say "same" if $x == $y;
Run Code Online (Sandbox Code Playgroud)
→ Argument "world" isn't numeric….我们可以使某些类别产生致命错误use warnings FATAL => $CATEGORY,类别为numeric或uninitialized.该all类别代表所有类别.
这不每个语义变化warn来die.你可以自己做,例如覆盖a local $SIG{__WARN__}或创建一个warn功能croak @_.您甚至可以覆盖CORE::GLOBAL::warn以更改所有warns,即使它们位于其他模块中也是如此.
该CGI::Carp模块有一个warningsToBrowser选项; 您可能希望查看源代码以了解它是如何实现的.