Thread Hin- und Her-"blessen" (7 answers)
Opened by Max_Perlbeginner at 2018-06-10 07:23

Max_Perlbeginner
 2018-06-10 07:23
#188515 #188515
User since
2016-04-04
107 Artikel
BenutzerIn
[default_avatar]
Hallo, ihr Lieben,

Ich wollte mal kurz Eure Einschätzung, ob folgendes noch vertretbar ist, oder zu "schutzig".

Ich versuche ein Modul zu erweitern, dass eine AUTOLOAD Funktion bereitstellt. Natürlich soll auch mein Modul zu dieser Zugang haben. Blöderweise destilliert die AUTOLOAD Funktion die aufgerufene Methode aus der Variablen $Super::Package::AUTOLOAD heraus, entfernt "SUPER::Package::" vom übergebenen Methodennamen und leitet diesen zu einem anderen Prozess weiter.

Wird nun die AUTOLOAD Methode aus meinem Modul aufgerufen hat, so hat $SUPER::Package::AUTOLOAD leider den Inhalt "SUPER::Package::MYPackage::method. Da nur Der Name des Elternmoduls herausgeschnitten wird, wird MYPackage::method als Methode weitergeleitet, was zu einem Fehler führt.

Die einzige Lösung, die ich bislang gefunden habe ($SUPER::Package::AUTOLOAD kann ich leider aus meinem Modul nicht ändern), ist wie folgt (wobei SUPER::Package der Name des Elternmoduls ist, und SUPER::Package::MyPackage der Name meines Moduls ist):
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
sub AUTOLOAD {
        my $self = shift;
        my ($method) = (our $AUTOLOAD) =~ /^SUPER::Package::MyPackage::(\w+)$/ or 
                die "Curious value at AUTOLOAD: $AUTOLOAD";
        bless $self, 'SUPER::Package';
        $self->$method(@_);
        bless $self, 'SUPER::Package::MyPackage';
        
}


Ist das noch vertretbar? Mir kommt es irgendwie komisch vor, ein erzeugtes Objekt ständig einer neuen Klasse zuzuweisen?
Als einzige Alternative fiele mir ein, die gesamte AUTOLOAD Methode aus dem Elternmodul in mein Modul zu kopieren und entsprechend anzupassen. Aber richtig effizient ist das ja auch nicht...

Danke für Eure Einschätzungen,
Max
Last edited: 2018-06-10 11:03:00 +0200 (CEST)

View full thread Hin- und Her-"blessen"