Noch eine Frage zum Stil in Verbindung mit mod_perl:
Meine Subklassen erben von meinem PerlResponseHandler
MyModPerl::FWNG; Es gibt mehrere Subklassen, in denen ich das mit
use base qw(MyModPerl::FWNG); deklariere.
Möglich wäre eine Vorwärtsdeklaration, weil ja alle Klassen von UNIVERSAL erben:
package MyModPerl::FWNG;
require "$class.pm";
unshift @UNIVERSAL::ISA, __PACKAGE__;
Oder so?:
no strict 'refs';
unshift @{$class."::ISA"}, __PACKAGE__;
Macht das jemand oder vergessen wir das lieber?
PS: Ich schreibe gerade mein Framework für mod_perl ins Reine. Bei Interesse werde ich alle Sourcen public machen.
PSPS: Ich werde KEINE der beiden "Vorwärtsdeklarationen" anwenden und schön ordentlich ein
use base qw() einbauen :)
Denn genau davon profitiert mein FWNG: Es ist, verglichen mit anderen Frameworks extrem übersichtlich. Keine schmutzigen Hacks ;)
Nochn Edit: Verlockend sind die Zeilen
no strict 'refs';
@{$class."::ISA"} = (__PACKAGE__);
use strict;
hinsichtlich Kompatibilität meines Perl-Frameworks. Das könnte entweder in der
main notiert sein oder im
PerlResponseHandler. Eine Migration vom reinen CGI-Betrieb zu mod_perl oder umgekehrt würde dann nur noch den Austausch der Basisklasse erfordern, alles Andere, wie Konfigurationsdateien und die Dateien für die Subklassen bleiben unverändert. Die Basisklasse ist entweder die package main oder die dem PerlResponseHandler entsprechende Package, zu ändern ist lediglich die Serverkonfiguration und das ist auch nicht weiter kompliziert.
Als einen schmutzigen Hack würde ich obenstehende Zeilen nicht bezeichnen, ein
use base macht auch nichts anderes, nur halt andersherum.
Last edited: 2015-01-18 09:20:40 +0100 (CET)