我刚刚发现了一个我们正在使用的脚本,其中有一个说my %INC
的子,它存储了一些关于激励的值,因此%INC
。这似乎不是一个问题,或者从来没有人注意过。对我来说,它产生了20个重新定义警告屏幕,因为%INC
,保存所有文件名Perl有do
ne,require
d或use
d,非常大,现在是('stuff' => 123)
。是否可以诱使Perl使用变量%INC并仍然保持全局%INC不变?
我真的必须去重命名每个单引用这个在子,还是有另一种方式让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
,而是在我实际上是require
脚本的%INC = &sub_that_has_my_percent_INC_and_returns_it()
。现在,反过来,也有use vars qw(%INC)
。替换它......好吧,我不确定那会是什么样的结果。
我打算和建立这个的人聊聊天...... – simbabque
你的意思是'@ INC'? – mkb
本地%INC;会更有意义。我想你现在不能改变它而不会造成意想不到的后果,对吧? – d5e5