此脚本:
use warnings FATAL => 'all';
warn 'warning';
die 'death';...results在“警告”中被记录,但在这一点上并没有死亡,而是随着“死亡”而死亡。
我有一个mod_perl模块,它覆盖了$main::SIG{__DIE__},在开发期间基本上将die()消息输出到浏览器,但它没有接触到SIG{__WARN__},那么这里发生了什么?
这是在Windows Server2003上的Perl5.10.1上的,在PerlSwitches中有"-w“。
发布于 2013-06-11 23:07:49
您误解了warnings pragma的用途。它是为了向完全合法但可能是错误的操作发出警告消息。示例:
use warnings;
my ($x, $y) = ("hello", "world");
say "same" if $x == $y;→Argument "world" isn't numeric…。我们可以使用像numeric或uninitialized这样的类别,用use warnings FATAL => $CATEGORY让某些类别产生致命错误。all类别代表所有类别。
它不会将每个warn的语义更改为die。你可以自己做这件事,例如覆盖一个local $SIG{__WARN__},或者创建一个执行croak @_的warn函数。您甚至可以覆盖CORE::GLOBAL::warn来更改所有的warn,即使它们位于其他模块中。
CGI::Carp模块有一个warningsToBrowser选项;您可能希望查看源代码以了解它是如何实现的。
发布于 2013-06-11 23:08:02
它似乎不起作用,因为您的测试没有测试您想要测试的东西。试试这个:
use warnings FATAL => 'all';
print undef;
die 'death';正如no warnings不会阻止warn工作一样,warnings FATAL也不会让warn消亡。
https://stackoverflow.com/questions/17047260
复制相似问题