我可以只在一个子程序中"使用警告"吗?

Ste*_*sky 4 perl warnings cgi

我正在研究一个大约4000行的Perl CGI脚本.我们的编码风格包括use strict并且use warnings通常,但在这个特定的(相当旧的)文件中,"使用警告"被注释掉,注释表明启用警告会泛滥Apache日志.

现在我打算将一些代码分成一个新的子程序.我想use warnings至少在那里.如何安全地限制use warnings一个子程序的效果?只是将use子句放在子程序中就可以了吗?

Fil*_*efp 13

是的,使用use warning将在您编写它的范围内.

use warning在子内写入只会影响给定例程(或块).


示例代码段

sub foo {
  use warnings;
  print  my $a; 
}

{
  use warnings;
  print  my $b;
}

foo;

print my $c;
Run Code Online (Sandbox Code Playgroud)

产量

Use of uninitialized value $b in print at foo.pl line 8.
Use of uninitialized value $a in print at foo.pl line 3.
Run Code Online (Sandbox Code Playgroud)

请注意,没有关于使用的警告print my $c.


文件说什么?

  • perldoc.perllexwarn

    这个pragma就像严格的pragma一样.这意味着警告编译指示的范围仅限于封闭块.这也意味着pragma设置不会泄漏文件(通过use,require或do).这允许作者独立定义将应用于其模块的警告检查的程度.