首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不使用warnings FATAL => 'all‘似乎有效?

为什么不使用warnings FATAL => 'all‘似乎有效?
EN

Stack Overflow用户
提问于 2013-06-11 22:56:08
回答 2查看 575关注 0票数 6

此脚本:

代码语言:javascript
复制
use warnings FATAL => 'all';

warn 'warning';
die 'death';

...results在“警告”中被记录,但在这一点上并没有死亡,而是随着“死亡”而死亡。

我有一个mod_perl模块,它覆盖了$main::SIG{__DIE__},在开发期间基本上将die()消息输出到浏览器,但它没有接触到SIG{__WARN__},那么这里发生了什么?

这是在Windows Server2003上的Perl5.10.1上的,在PerlSwitches中有"-w“。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-11 23:07:49

您误解了warnings pragma的用途。它是为了向完全合法但可能是错误的操作发出警告消息。示例:

代码语言:javascript
复制
use warnings;
my ($x, $y) = ("hello", "world");
say "same" if $x == $y;

Argument "world" isn't numeric…。我们可以使用像numericuninitialized这样的类别,用use warnings FATAL => $CATEGORY让某些类别产生致命错误。all类别代表所有类别。

它不会将每个warn的语义更改为die。你可以自己做这件事,例如覆盖一个local $SIG{__WARN__},或者创建一个执行croak @_warn函数。您甚至可以覆盖CORE::GLOBAL::warn来更改所有的warn,即使它们位于其他模块中。

CGI::Carp模块有一个warningsToBrowser选项;您可能希望查看源代码以了解它是如何实现的。

票数 9
EN

Stack Overflow用户

发布于 2013-06-11 23:08:02

它似乎不起作用,因为您的测试没有测试您想要测试的东西。试试这个:

代码语言:javascript
复制
use warnings FATAL => 'all';

print undef;
die 'death';

正如no warnings不会阻止warn工作一样,warnings FATAL也不会让warn消亡。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17047260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档