Я только что нашел сценарий, который мы используем, в котором есть подпрограмма, в которой говорится 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)
Предупреждения отображаются только в том случае, если я создаю объект одного из моих классов (который содержит 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)
. Замена его... ну, я не уверен, что он сломается.
%INC
. - person simbabque   schedule 29.06.2012%INC
предназначен для использования. Есть только переменная с таким же именем, потому что парень, который ее создал, не знал, что%INC
является зарезервированным именем. В нем просто есть некоторые данные, которые нужны сабвуферу. - person simbabque   schedule 29.06.2012