Tobi's Blog

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(&notexisting_sub); # false
print defined(&notexisting_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.

2 Kommentare zu “Vorhandensein von Methoden in Klassen prüfen”

  1. Martin Seibert sagt:

    Hi Tobi,

    endlich kann ich mal wieder was beitragen: “In der Headline fehlt eine ‘h’.” :-)

    Ciao
    Martin

  2. Tobi sagt:

    Danke, Rechtschreibmeister. Wenn es darum geht, dürftest Du aber bei so ziemlich allen Beiträgen eine ganze Menge beitragen können :?

Kommentar schreiben

XHTML: Sie können diese Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>