我必须理解错误的警告文档.我读它的方式,这段代码:
use warnings;
use warnings FATAL => 'all';
warnings::warn('numeric', 'blarg');
print "finished\n";
Run Code Online (Sandbox Code Playgroud)
应该打印'blarg'警告并死掉,因为我要求所有警告都是致命的.但是,当我运行代码时,我得到:
$> /opt/local/bin/perl x.pl
blarg at x.pl line 3
finished
Run Code Online (Sandbox Code Playgroud)
可以帮我理解为什么我不能被警告死?
hob*_*bbs 12
好的.这很难看.我有一个半准备的帖子,将其解释为一个bug warnings
,然后我意识到它不是,它只是一个非常邪恶的微妙方式warnings
.
警告开始寻找相关的堆栈帧从在得到警告位warnings::warn
的主叫方的来电显示.您的想法是,您正在编写一些模块,并且您在函数中使用warnings::warn
或使用warnings::warnif
,以及警告是否打印(或致命)取决于使用模块的代码use warnings
中的范围设置.没有选项可以让它从而不是开始,所以你想要的效果是不可能的.caller(1)
caller(2)
一个有效的代码示例(并演示了编写它的人如何使用此接口):
package Foo;
require warnings;
sub bail {
warnings::warnif('numeric', "You fool! You divided by zero!");
}
package main;
use warnings FATAL => all;
Foo::bail();
print "Will never be reached\n";
Run Code Online (Sandbox Code Playgroud)
并且你不能通过添加另一个级别的子例程来打败它的工作方式,因为它从第一个调用者的标记中获取与/// etc 的调用者不同的包中的标记.warn
warnif
enable
归档时间: |
|
查看次数: |
343 次 |
最近记录: |