Perl: Zwei Pakete in derselben Datei können nicht dasselbe Paket importieren?
Dies ist ein interessantes Perl-Verhalten. (zumindest für mich :))
Ich habe zwei PaketePACKAGE1
undPACKAGE2
Welche Exporte funktionieren mit dem gleichen NamenMethod1()
.
Da es so viele Pakete geben wird, die dieselbe Funktion exportieren,use
-Alles in einer Perl-Datei ist mühsam. Also habe ich eine allgemeine Include-Datei erstelltINCLUDES.pm
welche haben dieseuse
s.
INKLUSIVE.pm:
use PACKAGE1;
use PACKAGE2;
1;
PAKET1.pm:
package PACKAGE1;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw (
Method1
);
sub Method1{
print "PACKAGE1_Method1 \n";
}
1;
PAKET2.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();
Das Motiv ist, nur die neuesten PaketeMethod1()
sollte in jeder Perl-Datei verwendet werden.
Die Ausgabe überrascht mich. Ich würde das beide erwartenMethod1()
ruft anTests.pl
sollte Erfolg sein. Aber nur der ersteMethod1()
führt das zweite ausMethod1()
Anruf sagt "undefiniert".
AUSGABE:
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.
Hat jemand irgendwelche Antworten / Ansichten dazu?
Das eigentliche Szenario:
Die Methoden in mehreren Perl-Modulen haben denselben Namen. Die Methoden des Perl-Moduls "Hohe Präferenz" sollten jedoch nur verwendet werden.
Zum Beispiel, wennPACKAGE1
enthältMethod1(), Method2()
& PACKAGE2
enthält nurMethod1()
, dannMethod1()
sollte verwendet werden vonPACKAGE2
& Method2()
sollte verwendet werden vonPACKAGE1
Grundsätzlich möchte ich eine Hierarchie zwischen Modulen basierend auf Präferenzen erreichen. Gibt es dafür einen Weg?