Wie rufe ich einen Funktionsnamen auf, der in Perl in einem Hash gespeichert ist?

8

Ich bin mir sicher, dass das irgendwo in der Dokumentation behandelt wird, aber ich konnte es nicht finden ... Ich suche nach dem syntaktischen Zucker, der es möglich macht, eine Methode für eine Klasse aufzurufen, in der ihr Name gespeichert ist ein Hash (im Gegensatz zu einem einfachen Skalar):

%Vor%

Wenn ich $hash{func} zuerst in eine skalare Variable kopiere, dann kann ich Foo->$func einfach aufrufen ... aber was fehlt, damit Foo->$hash{func} funktioniert?

(BEARBEITEN: Ich möchte nichts Besonderes machen, indem ich eine Methode für die Klasse Foo aufruft - das könnte genauso gut ein gesegnetes Objekt sein (und in meinem eigentlichen Code ist es das), es war einfach einfacher schreibe ein eigenständiges Beispiel mit einer Klassenmethode auf.)

BEARBEITEN SIE 2: Nur zur Vollständigkeit re die Kommentare unten, das ist, was ich eigentlich tue (dies ist in einer Bibliothek von Moose Attribut Zucker, erstellt mit Elch :: Exporteur ):

%Vor%

Ich habe die markierte Zeile oben durch folgende ersetzt:

%Vor%

PS. Ich habe gerade bemerkt, dass dieselbe Technik (die Moose-Meta-Klasse verwendet, um die Coderef nachzuschlagen, anstatt ihre Namenskonvention anzunehmen) nicht auch für Prädikate verwendet werden kann, wie Class::MOP::Attribute hat keinen ähnlichen get_predicate_method_ref -Accessor. : (

    
Ether 02.12.2009, 22:06
quelle

3 Antworten

14
%Vor%

Aber aus Gründen der Klarheit würde ich es wahrscheinlich immer noch als:

schreiben %Vor%     
runrig 02.12.2009, 22:35
quelle
2

Gibt es einen Grund, warum Sie Subroutinennamen anstelle der Referenzen auf Code speichern?

z.B.

%Vor%

Sie werden den Klassennamen nicht weitergeben, aber wenn Ihnen das wichtig ist, können Sie etwas wie

verwenden %Vor%     
jsoverson 02.12.2009 22:13
quelle
1

Haben Sie die Methode von UNIVERSAL können ausprobiert? Sie sollten in der Lage sein, etwas wie folgt zu implementieren:

%Vor%

Ich machte ein unbrauchbares, einzeiliges Beispiel, um zu demonstrieren:

%Vor%     
gpojd 03.12.2009 20:33
quelle