Moin Moin!
Und siehe da, der Konstruktor heißt hier new() und kann auch was zurückgeben ;)
Du übersiehst hier etwas Wesentliches:
Perl hat keinen new-Operator.
Ein Konstruktor ist in Perl nichts anderes als eine stinknormale Methode, die typischerweise als Klassenmethode aufgerufen wird. Die Methode heißt oft "new", das ist aber reine Konvention, damit Leute, die aus anderen OO-Systemen wie C++ kommen, nicht völlig im Regen stehen.
Weil der Konstruktor eine Methode wie jede andere ist, steht es in Perl dem Konstruktor natürlich auch frei, statt einer blessed Reference im Fehlerfall schlicht nichts zurückzugeben (return;
), was sowohl im Scalar-Kontext als auch im List-Kontext als false gewertet wird. Alternativ kann der Konstruktor natürlich auch eine Exception auslösen, sprich: die, croak oder confess aufrufen.
package main;
my $obj = new myClass() or die("Instanz konnte nicht erstellt werden");
Dass "new" (oder nahezu jeder andere Methodenname) dem Klassennamen (oder einem Objekt) vorangestellt werden kann, ist eine Altlast, die [Indirect Object Syntax](http://perldoc.perl.org/perlobj.html#Invoking-Class-Methods), die nur noch für Filehandles benutzt werden sollte. ("Outside of the file handle case, use of this syntax is discouraged, as it can confuse the Perl interpreter.") Vermeide so etwas in neuem Code, entferne es aus altem Code. Diese Syntax macht dem Interpreter wesentlich mehr Arbeit als die folgende.
Sauber ist `my $obj=My::Class->new(...)`{:.language-perl}. Aber auch das ist noch nicht ganz eindeutig, denn wenn im package My eine Funktion Class existiert, wird diese aufgerufen und deren Rückgabewert wird als Klasse oder Objekt gewertet, mit dem new aufgerufen werden soll. (Solche Konstrukte bastelt man gelegentlich als Notlösung für Legacy-Code.) Zweifelsfrei eindeutig sind `my $obj=My::Class::->new(...)`{:.language-perl} und `my $obj='My::Class'->new(...)`{:.language-perl}, das schreibt aber nahezu niemand.
Alexander
--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".