In deinem ersten Fall gehst du hin und generierst bereits beim Laden deiner Klasse ein Objekt und nutzt dieses. Das ist nicht wirklich das was man üblicherweise machen möchte.
Dein zweites Beispiel kannst du so nutzen. Wenn es nur "Helfer" Routinen sind dann ist es so auch okay.
Wenn diese Methoden allerdiengs Werte aus dem Objekt brauchen dann solltest du auch "$self->routine()" nutzen.
Die Funktion "routine()" ist allerdiengs in beiden Beispielen trotzdem noch von ausen erreichbar. Kann also jederzeit auch über "$obj->routine()" aufgerufen werden.
Wenn du sozusagen eine "Private" Methode erstellen möchtest dann geht das leider nicht in Perl 5. Moose kann es glaube ich auch nicht. In der Regel schreibt man dann aber vor der Funktion einen Unterstrich. Das kennzeichnet dann das diese Routine Privat ist, und nicht von einem Benutzer der Klasse aufgerufen werden soll. Verhindern tut es das allerdiengs nicht.
Ein anderer und letzter weg ist dann der umweg über eine Anonyme Subroutine. "my $routine = sub { ... }". Das gewährleistet dir das niemand von ausen darauf zugreifen kann.
Mit diesem Weg kannst du dann nur im lexikalischen Bereich (Block oder höchstens die Datei) darauf zugreifen.
Ich würde wegen einfachheit wohl einfach den Weg der Methode gehen der du einem unterstrich vorhängst, und dieses dann als Methode ganz normal aufrufen wie jede andere Methode auch.
Eine andere Frage ist ob die Methode/Funktion überhaupt Privat sein muss? Oft tut es nicht weh diese Funktionalität einfach zusätzlich anzubieten, da sie ja sowieso schon da ist, und evtl. kann jemand damit etwas anfangen.
Wenn du mehrere/viele solcher Helfer Routinen hast und diese in mehreren Klassen benötigst würde ich diese übrigens noch in einem eigenen Modul exportieren.
Last edited: 2009-04-09 10:34:47 +0200 (CEST)
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de