有没有办法可以为Perl文件中使用的所有库中的少数几个库抑制未初始化的Perl变量警告?
答案 0 :(得分:1)
我想不出任何理由这是一个好主意,肯定使用一个未初始化的变量是一个从你看它的角度来看的错误?
但是,您可以使用以下命令关闭警告:
no warnings 'unintialized';
再次与:
use warnings 'unintialized';
如果用这两个语句包围它,可以禁用单个语句的警告。
答案 1 :(得分:1)
您可能使用了-w
,它会在整个解释器中启用警告(尽管可以使用local $^W = 0;
或no warnings;
覆盖它。)
使用-w
并不是件坏事。所有模块都应该容忍这种情况或对其进行辩护(使用no warnings;
)。但有些不是“警告 - 安全”。
在每个脚本和模块中放置use warnings;
更为常规。这种启用警告的方法不那么具有干扰性,因为它不会影响脚本和模块使用的其他第三方模块。
答案 2 :(得分:0)
如果您能够修改有问题的模块,则可以在任何no warnings 'uninitialized';
声明之外向模块本身添加sub
,并且它将禁用该类别的警告对于模块中的所有代码,正如这两段代码所示:
在warntest
:
#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;
use lib '.';
use UndefMod;
my $x;
say "Main before: $x";
UndefMod::test_mod;
say "Main after: $x";
在UndefMod.pm
(在同一目录中):
package UndefMod;
use strict;
use warnings;
use 5.010;
no warnings 'uninitialized';
sub test_mod {
my $x;
say "Module: $x";
}
1;
运行时,会产生"使用未初始化的值" say
中warntest
的警告,但say
中的UndefMod
没有警告,因此显示文件的warnings
设置没有对另一方的影响。
当然,您可能无法修改模块源,在这种情况下您可能会运气不好。 Perl的范围规则通常不允许您从该范围之外修改范围的警告/无警告状态。 (我说"可能"和#34;一般"因为可能会有一些黑魔法来破解它,可能至少与PadWalker背后的魔法有关,但这些事情超出了我的想法。 )