Vorhandensein von Methoden in Klassen prüfen
Erstellt von Tobi am Donnerstag 17. April 2008
Wenn man wissen will, ob eine Methode in einer Klasse nur deklariert (sub method;) oder ob eben auch ein Methodenkörper existiert (sub method { die 1; }) sollte man sich nicht nur auf can() verlassen.
sub existing_sub;
sub defined sub { die 1; }
print __PACKAGE__->can('notexisting_sub'); #false
print exists(¬existing_sub); # false
print defined(¬existing_sub); # false
print __PACKAGE__->can('existing_sub'); #true
print exists(&existing_sub); # true
print defined(&existing_sub); # false
print __PACKAGE__->can('defined_sub'); #true
print exists(&defined_sub); # true
print defined(&defined_sub); # true
Der Aufruf einer Methode, die nur deklariert, führt zu einem “Undefined subroutine .. called” fehler, den man ja eigentlich mit dem can() verhindern wollte. Mir ist noch nie eine solche, blanke Deklaration über den Weg gelaufen, aber man weiß ja nie.

Freitag 18. April 2008 um 05:42
Hi Tobi,
endlich kann ich mal wieder was beitragen: “In der Headline fehlt eine ‘h’.”
Ciao
Martin
Freitag 18. April 2008 um 06:33
Danke, Rechtschreibmeister. Wenn es darum geht, dürftest Du aber bei so ziemlich allen Beiträgen eine ganze Menge beitragen können