Subroutine aufrufen
|
Seitenanfang |
| Hallo! Ich mochte einen variablen Aufruf einer Subroutine kreieren. Leider funktioniert das nicht. Im Hash-Key $hash{'sub'} befindet sich der Wert "uebersicht" oder der Wert "detail". Nun soll je nachdem ob der Wert uebersicht oder detail ist die zugehörige Subroutine &uebersicht; oder &detail; aufgerufen werden. Mit &{$hash{sub}} funktioniert das soweit, wenn ich allerdings strict benutze (und das tue ich) bekomme ich den Fehler: "Can't use string ("uebersicht") as a subroutine ref while "strict refs" in use at..." Weis jemand Abhilfe? mfg, Speed
Datum: 26.03.2007-18:57

|
re: Subroutine aufrufen
|
Seitenanfang |
| siehe den erst kürzlich erstellten Thread: http://www.perlunity.de/cgi-bin/forum/forum_thread_linear.cgi?tid=19861&mid=40218&fid=8&pn=0
Datum: 26.03.2007-19:56

|
re: Subroutine aufrufen
|
Seitenanfang |
| So hatte ichs vorher ;-) Habe genau wie auch der andere Member nach einer Möglichkeit gesucht, ohne alle subnames einpflegen zu müssen und mir den zusätzlichen Hash zu sparen. Trotzdem danke ;-)
Datum: 26.03.2007-20:34

|
re: Subroutine aufrufen
|
Seitenanfang |
Was ist denn von der Preformance her besser, ein Baum mit if-Abfrage
if ($action eq "daten"){&daten;} elsif ($action eq "daten_speichern"){&daten_speichern;} else{&daten;}
oder die von dir gezeigte Variante mit dem Hash
my %actions = ( 'daten' => \&daten, 'daten_exe' => \&daten_exe); $query{'action'} ? $actions{$query{'action'}}->() : &daten;
mfg
Datum: 27.03.2007-15:09

|
re: Subroutine aufrufen
|
Seitenanfang |
Das mit dem Hash ist die *beste* Lösung. Eine unschöne Lösung ist es, strict für den kleinen Codeteil auszuschalten:my $sub = "daten"; { no strict 'refs'; &{$sub}; }
Datum: 28.03.2007-13:27

|
re: Subroutine aufrufen
|
Seitenanfang |
| Hmm von der Laufzeit wärs sicher am besten denke ich, aber ich möchte in absehbarer Zeit auf mod_perl umrüsten und somit use strict im vollen Umfang verwenden.
Datum: 28.03.2007-14:21

|