我刚刚找到了一个我们正在使用的脚本,其中有一个子说明my %INC
,其中存储了一些关于激励的值,因此%INC
. 这似乎从来都不是问题,或者没有人注意到。对我来说,它产生了 20 个重新定义警告屏幕,因为%INC
.perl 包含所有文件名do
ne、require
d 或use
d,非常大,而现在是('stuff' => 123)
.
我真的必须去重命名 sub 中对 this 的每一个引用,还是有另一种方法可以让 Perl 原谅这个......?
这是输出的一部分:
print Dumper \%INC; # I added this line
my %INC;
print Dumper \%INC; # I added this line
exit; # I added this line
输出:
[...]
'SqlConnect.pm' => 'lib1/SqlConnect.pm',
'Lib/RateRequest.pm' => 'Lib/RateRequest.pm'
};
$VAR1 = {};
[Fri Jun 29 16:09:13 2012] live_batch_test.pl: Subroutine export_fail redefined at /usr/lib/perl5/5.14.2/Carp.pm line 43.
[Fri Jun 29 16:09:13 2012] live_batch_test.pl: Subroutine _cgc redefined at /usr/lib/perl5/5.14.2/Carp.pm line 45.
[Fri Jun 29 16:09:13 2012] live_batch_test.pl: Subroutine longmess redefined at /usr/lib/perl5/5.14.2/Carp.pm line 51.
[Fri Jun 29 16:09:13 2012] live_batch_test.pl: Subroutine shortmess redefined at /usr/lib/perl5/5.14.2/Carp.pm line 71.
[...] (Snipped like 20 screens of redefine warnings)
警告仅显示我是否创建了我的一个类的对象(它恰好包含SOAP::WSDL
所以它有很多东西)。我不确定为什么这些是重新定义警告。如果%INC
是空的,它怎么知道东西正在被重新定义?
更新:
看来您实际上可以创建一个词法my %INC
.
use strict; use warnings; use Data::Dumper;
print Dumper \%INC;
{
my %INC = ('asdf' => 'asdf');
print Dumper \%INC;
}
print Dumper \%INC;
产生(剪断):
'feature.pm' => 'C:/Perl/lib/feature.pm'
};
$VAR1 = {
'asdf' => 'asdf'
};
$VAR1 = {
'warnings/register.pm' => 'C:/Perl/lib/warnings/register.pm',
在我的情况下的问题似乎不是my %INC
,而是%INC = &sub_that_has_my_percent_INC_and_returns_it()
我实际上必须在脚本中require
。现在,反过来,也有use vars qw(%INC)
。更换它......好吧,我不确定它会破坏什么。