打开警告然后关闭的目的是什么?

时间:2014-07-26 19:48:54

标签: perl warnings

here读取File::Find::Closure模块的源代码,我无法理解这些行的目的:

package File::Find::Closures;
use strict;

use warnings;
no warnings;
  • 为什么作者在开机后立即关闭警告?
  • 开启后,warnings模块中是否有某些内容无法关闭?

2 个答案:

答案 0 :(得分:7)

从功能上讲,这没有任何意义。这与使用

完全相同
no warnings;

我可以想到三个动机:

  1. 编码员必须遵守一项要求使用use warnings;的政策,并且他仍然希望违反政策的精神,同时仍遵循政策信。

  2. 编码员希望使用-w覆盖no warnings;,他错误地认为必须首先使用use warnings;加载模块。

  3. 编码员希望使用use warnings;,所以他做了,但模块还没有准备就绪,所以他暂时添加了no warnings;

答案 1 :(得分:1)

通常在代码块中使用no warnings,在整个块中使用use warnings

请考虑以下事项:

use warnings;
use strict;

my $one = "one" + 2;

{
no warnings;
my $two = "two" + 2;
}

my $three = "three" + 2;

这会对vars $one$three发出警告,但不会发送$two的警告:

Argument "one" isn't numeric in addition (+) at stack.pl line 5.
Argument "three" isn't numeric in addition (+) at stack.pl line 12.

您在上面描述的用法会使use warnings pragma多余,因为所有no warnings都将应用于块的其余部分。