Zweckmäßiges Organisieren von Methoden für Subklassen
use strict;
use warnings;
use base q(Factory);
my $m = main->new();
my $r = $m->selectall_arrayref("show create table chr");
$m->dd($r); # Dump
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.
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.