Zweckmäßiges Organisieren von Methoden für Subklassen
Zunächst ein par Zeilen Perlcode:
use strict;
use warnings;
my $m = bless{};
$m->foo(123);
sub AUTOLOAD{
my $self = shift;
our $AUTOLOAD;
#print $AUTOLOAD; # main::foo
eval{
$AUTOLOAD =~ /(\w+)$/;
require "factory/$1.pm";
my $code = $self->can($1);
$self->$code(@_);
} or die $@;
}
Und eine Datei die wir erstellen:
# Dateiname foo.pm
use strict;
use warnings;
sub foo{
my $self = shift;
print "@_";
}
1;
Sinn und Zweck dieser Übung ist es, Funktionen/Methoden aus verschiedenen Subklassen heraus einfach aufrufen zu können ohne diese Funktionen in den Subklassen jedesmal neu schreiben oder die Basisklasse verändern zu müssen. Für diesen Fall, also wenn eine Funktion nicht in der aktuellen Package definiert ist, ruft der Perl-Interpreter eine Methode namens AUTOLOAD.
Diese Methode muß natürlich definiert sein, zweckmäßigerweise in derjenigen Package von welcher alle unsere Subklassen erben. Sodann versucht AUTOLOAD
ein require
auf die Datei welche den gleichen Namen hat wie die aufgerufene Methode. Dieser Name ist in der Variablen $AUTOLOAD
zu finden und wird über den Ausdruck (\w+)
ermittelt.
Dann wird mit $self->can($1)
noch geprüft, ob es die aufgerufene Methode mit dem Namen in $1
tatsächlich gibt und schließlich wird sie aufgerufen und ausgeführt.
Rev.: 2023-06-03 13:43:57
Datenschutzerklärung: Diese Seite dient rein privaten Zwecken. Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. sos@rolfrost.de und wenn Sie möchten daß mein Prepaid nicht verfällt dürfen Sie mich auch gerne anrufen 01625 26 40 76.