Viele Sachen wurden eh schon gesagt, aber ich loesche jetzt nichts...
1.
sub new {
my $objekt = shift;
my $referenz = {};
bless($referenz,$objekt);
return($referenz);
}
wuerde ich schreiben als:
sub new {
my $class = shift;
my $referenz = {};
bless($referenz,$class);
return($referenz);
}
denn der erste Parameter ist die Klasse (genauer gesagt: das Package), und das Objekt wird erst durch bless erzeugt
2. Du verwendest localtime(time) in skalarem Kontext, was eine Zeichenkette zurueckgibt. Ich weiss nicht, ob die unter allen Umstaenden immer im gleichen Format zurueckkommt, habe jedoch gelernt, auf solche Sachen moeglichst wenig zu vertrauen. Ich verwende da lieber:
my @zeit = localtime(time);
$zeit[4]++; # monat beginnt bei 0 fuer januar
$zeit[5]+=1900; # jahr 0 ist 1900
Dann hast du in @zeit: (sek, min, stunde, tag, monat, jahr, wochentag, tagDesJahres, IstSommerzeitAktiv)
$zeit[6] : 0 ist Sonntag, 1 ist Montag, ...
3. Namensraeume immer Gross schreiben, also Crs, weil die kleine schreibweise (crs) fuer pragmata (wie strict, warnings, ...) reserviert ist.
4.
return bless(&jetzt,ref($klasse) || $klasse || _ _PACKAGE_ _);
das ist natuerlich ein Overkill; er ermoeglicht, dass die Leute den Konstruktor irgendwie aufrufen koennen, und immer ein korrektes Objekt zurueckkommt; ich weiss jedoch nicht, ob das immer sinnvoll ist. Wenn jemand meine Klasse als reine funktion aufrufen will, soll ihm das teil solange um die Ohren fliegen, bis er lernt: my $object = Class->new(...)
also return bless($object, $klasse);
ich glaube mal gehoert zu haben, dass Prototypen bei einem Methodenaufruf nicht ausgewertet werden, sondern nur bei einem funktionalen Aufruf ohne das fuehrende &