my %INC
使用しているスクリプトに、インセンティブに関する値を格納するサブが含まれているのを見つけました%INC
。これは決して問題とは思われなかったし、誰も気づかなかった。私にとっては、再定義警告の20画面が生成されました。これは%INC
、Perlがdo
ne、require
d、またはuse
dを持つすべてのファイル名を保持しているため、かなり大きく、現在は('stuff' => 123)
です。
私は本当にサブでこれへのすべての参照の名前を変更する必要がありますか、それとも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)
警告は、クラスの1つのオブジェクトを作成した場合にのみ表示されます(これにはたまたま含まれ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)
。それを交換する...まあ、それが何を壊すのかわかりません。