Perl: два пакета в одном файле не могут импортировать один и тот же пакет?

Это интересное поведение Perl. (по крайней мере для меня :))

У меня есть две посылкиPACKAGE1 а такжеPACKAGE2 которая экспортирует функцию с тем же именем.Method1()

Поскольку будет так много пакетов, которые будут экспортировать эту же функцию,useвсе в файле Perl будет утомительным. Итак, я создал общий файл включенияINCLUDES.pm которые будут иметь этиuses.

INCLUDES.pm:

use PACKAGE1;
use PACKAGE2;

1;

PACKAGE1.pm:

package PACKAGE1;

use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw (
          Method1
);

sub Method1{
print "PACKAGE1_Method1 \n";
}

1;

PACKAGE2.pm:

package PACKAGE2;

use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw (
    Method1
);

sub Method1{
    print "PACKAGE2_Method1 \n";
}

1;

Tests.pl:

##################first package################
package Test1;
use INCLUDES;
my @array = values(%INC);
print  "@array  \n";

Method1();

##################second package################
package Test2;
use INCLUDES;  #do "INCLUDES.pm";
my @array = values(%INC);
print  "@array  \n";

Method1();

Мотив, только последние пакетыMethod1() должен использоваться в любом файле Perl.

Результат меня удивляет. Я ожидаю, что обаMethod1() звонит вTests.pl должен быть успех. Но только первыйMethod1() выполняет, второйMethod1() Звонок говорит "не определенно».

ВЫХОД:

C:/Perl/site/lib/sitecustomize.pl PACKAGE1.pm C:/Perl/lib/Exporter.pm PACKAGE2
.pmINCLUDES.pm

PACKAGE2_Method1

C:/Perl/site/lib/sitecustomize.pl PACKAGE1.pm C:/Perl/lib/Exporter.pm PACKAGE2
.pm INCLUDES.pm

Undefined subroutine &Test2::Method1 called at C:\Temp\PackageSample\Tests.pl line 15.

Есть ли у кого-нибудь ответы / взгляды на это?

Фактический сценарий:

методы в нескольких модулях Perl будут иметь одинаковые имена. Но методы из Perl-модуля High preference следует использовать только.

Например, еслиPACKAGE1 содержитMethod1(), Method2() & PACKAGE2 содержит толькоMethod1(), затемMethod1() следует использовать изPACKAGE2 & Method2() следует использовать изPACKAGE1

В основном я хочу достичь иерархии среди модулей на основе предпочтений. Есть ли способ для этого?

Ответы на вопрос(2)

Ваш ответ на вопрос