Der OOP-Ansatz im Allgemeinen ist mir noch unklar, viel zu abstrakt für mein konkretes Verständnis ;)
Du solltest mal ins SVN gucken ;))
Nehmen wir also Siechfreds Beispiel:
Das ich mal kommentiere:
sub new {
my $pkg = shift;
my $wert = shift || 42;
my $self = { Wert => $wert };
bless $self, $pkg;
return $self;
}
Rufst Du die Konstruktorfunktion auf, die hier new heißt, ist ihr erstes Argument ($_[0]) immer der Name der Klasse. Alles, was Du new in den Klammern mitgibst, hat den Index 1 pp. (also $_[1] bis $_[n]). Die Konstruktorfunktion holt sich also als erstes den Klassennamen, dann den via new übergebenen Parameter. Dann wird mit $self eine Hashreferenz angelegt, wo dem Schlüssel 'Wert' der Inhalt von $wert zugewiesen wird. Mehr passiert bis hierher nicht.
Knackpunkt ist bless, denn damit wird die Hashreferenz an den Klassennamen gebunden und erst dadurch bekommt man das gewünschte Objekt. Alles, was an Schlüsseln in $self enthalten ist, wird damit zur Objekteigenschaft.
sub TEST {
my $obj = shift;
return $obj->{Wert};
}
TEST ist eine Objektmethode. Wurde ein neues Objekt erzeugt, bekommen alle Methodenaufrufe automatisch als ersten Wert die Objektreferenz übergeben. Da TEST keine Parameter erwartet, musst Du ihr auch nichts weiter übergeben. Ein Beispiel wäre:
sub TEST {
my $obj = shift;
my $prop = shift;
return $obj->{$prop};
}
Obiges Beispiel soll Objekteigenschaften ausgeben, sodass der Aufruf ohne weitere Parameter einen Fehler ergeben würde, man muss ihr das gesuchte mitteilen:
print $Client->TEST('Wert');
HTH,
Siechfred
--
Hinter den Kulissen passiert viel mehr, als man denkt, aber meistens nicht das, was man denkt.