Es lebe die Factory, es lebe die Fabrik

Zweckmäßiges Organisieren von Methoden für Subklassen

Methoden einfach aufrufen

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

Herzstück ist AUTOLOAD

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;

Erläuterungen

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. s​os­@rolf­rost.de.