QuoteIch denke der Kontakt zum CGI-Modul ist nicht mehr vorhanden ... aber wie kann man diese "Umgebungsdaten" an andere Module weitergeben?
Stichworte: Vererbung, Delegation
Letztere ist eine feine Sache ;)
Delegation:
package BasisModul;
use CGI;
sub new{
my $class = shift;
my $self = bless{
CGI => CGI->new,
}, $class;
return $self;
}
Jetzt hat die Instanz vom BasisModul ein Attribut {CGI}. Damit nun diese Instanz die CGI::param()-Funktion aufrufen kann, wird diese delegiert:
sub param{
my $self = shift;
return $self->{CGI}->param(@_);
}
Wenn weitere Klassen von BasisModul erben, wird dann auch die param()-Methode geerbt.
Von 'Modul zu Modul hangeln' ist kein guter Weg, die Erfahrung habe ich gemacht. Und i.d.R. ist eine Vererbung über mehr als 2 Instanzen im Nachhinein schwer durchschaubar. Vielmehr gibt es immer die Möglichkeit, weitere/fremde Klassen bei Bedarf anzubinden oder auch Instanzen anderer Klassen als Attribute der eigenen Klasse zu erzeugen ohne von den fremden Klassen alle Methoden erben zu müssen.
Anbindung:
1
2
3
4
5
6
7
8
9
10
11
12
13
package Foo;
our @ISA = qw(BasisModul);
use IO::File;
sub foo{
my $self = shift;
my $fh = IO::File->new;
$self->{FH} = IO::File->new;
$fh->open(...);
}
--Rosti