Perl: Dois pacotes no mesmo arquivo não podem importar o mesmo pacote?

Esse é um comportamento interessante do Perl. (pelo menos para mim :))

Eu tenho dois pacotesPACKAGE1 ePACKAGE2 quais exportações funcionam com o mesmo nomeMethod1().

Como haverá tantos pacotes que exportarão essa mesma função,use-ing tudo em um arquivo Perl será tedioso. Então, eu criei um arquivo de inclusão geralINCLUDES.pm que terá estesuses.

INCLUI.pm:

use PACKAGE1;
use PACKAGE2;

1;

PACOTE1.pm:

package PACKAGE1;

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

sub Method1{
print "PACKAGE1_Method1 \n";
}

1;

PACOTE2.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();

O motivo é apenas o pacote mais recenteMethod1() deve ser usado em qualquer arquivo Perl.

A saída me surpreende. Eu esperaria que ambosMethod1() chama emTests.pl deve ser sucesso. Mas apenas o primeiroMethod1() executa, o segundoMethod1() chamada diz "indefinido".

SAÍDA:

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.

Alguém tem alguma resposta / opinião sobre isso?

O cenário atual:

os métodos em vários módulos Perl terão o mesmo nome. Mas os métodos do módulo perl de alta preferência devem ser usados ​​apenas.

Por exemplo, sePACKAGE1 contémMethod1(), Method2() & PACKAGE2 contém apenasMethod1(), entãoMethod1() deve ser usado a partir dePACKAGE2 & Method2() deve ser usado a partir dePACKAGE1

Basicamente, eu quero alcançar uma hierarquia entre os módulos baseados em Preferência. Existe alguma maneira para isso?

questionAnswers(2)

yourAnswerToTheQuestion