[quote=m1chaeL-,05.01.2005, 23:31]Warum klappt es manchmal (bei einfachen Datentypen) auch mit dem return $class?[/quote]
solange du keine attribute hast, funktioniert return $class auch, nur rufst du die methode dann nicht als objektmethode (d.h. auf das Objekt $self), sondern als Klassenmethode (auf die Klasse $class) auf, was ein ziemlicher unterschied ist, weil du in $self zwar was speichern kannst, in $class aber nur der Klassenname als skalarer wert steht.
$class->new() uebergibt den Namen der Klasse als ersten Parameter
$object->new() uebergibt das Objekt als ersten parameter
manchmal sieht man in einem konstruktor (z.B. ->new) folgende zeilen
sub new {
my $proto = shift;
my $class = ref($proto) || $proto;
bless ({}, $class);
}
die zeile:
my $class = ref($proto) || $proto ist da interessant:
wenn z.B. $object->new()
dann liefert ref($proto) den Namen der Klasse des objektes;
wenn $class->new()
dann liefert ref($proto) eine leere zeichenkette, weil ja der Klassenname ein string ist und keine referenz, dadurch wird das || ausgewertet und $proto (d.h. der Klassenname) dann $class zugewiesen.
aber so einen dualen konstruktor (als klassen- und objektmethode) finde ich nicht schoen; wenn man ein objekt klonen will, kommt meistens $object->clone() besser...