我剛剛發現了一個我們正在使用的腳本,其中有一個說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