Hallo Chris!
Ausser der von Thomas vorgestellten Variante (welche sicherlich die lesbarste ist, wenn man einen ordentlichen Switch-Block verwendet), sind noch diese beiden Wege machbar.
1. Du baust Dir einen Hash mit Referenzen auf Deine einzelnen Funktionen und benutzt dann den uebergebenen Querystring als Zugriffskey in den Hash:
# die Funktionen, die die Arbeit machen
sub do_action1 {
# laber laber
}
sub do_action2 {
# laber laber
}
sub do_action3 {
# laber laber
}
# Referenzen auf die Fkt. im Hash ablegen
%dispatch = (
'action1' => &do_action1,
'action2' => &do_action2,
'action3' => &do_action3
);
# Fragen, welche action getan werden soll
$command = lc($ENV{'QUERY_STRING'}); # lc(), damit Gross/klein egal ist
# Pruefen, ob Kommando ok
if (!defined($dispatch{$command})) {
die("Unbekannte action!");
}
# und los geht's
&{$dispatch{$command}};
Mit $dispatch{$command} holst Du Dir dabei die jeweilige Referenz aus dem Hash und mit &{$ref} fuehrst Du die dann aus.
2. Benutze eval();
$command = lc($ENV{'QUERY_STRING'});
eval($command);
Mit eval() reisst Du jedoch ein riesiges Sicherheitsloch auf, denn so kann man mit dem Aufruf
/cgi-bin/script.pl?format /u c:
ganz einfach mal das Script veranlassen, beliebige lustige Dinge zu veranstalten.
Calocybe