roooot+2008-06-13 21:47:37--Hallo. Ich verewende eine Lookuptabelle um verschachtelten if Bedingungen zu vermeiden.
Das ist zwar eine gute Idee, allerdings solltest Du vielleicht trotzdem nicht sinnlos alle möglichen Arten von Ausgabedaten generieren, obwohl nur eine gebraucht wird:
Quote
[...]
my $send_handler = (
html => do { $self->generate_html() },
js => do { $self->generate_js() },
jpg => do { $self->generate_jpg() },
zip => do { $self->generate_zip() },
);
[...]
Hier wird jeder der
do-Blöcke ausgewertet, ganz egal welchen Ausgabetyp Du im Endeffekt benötigst. Ich würde lieber
do durch
sub ersetzen.
Quote
[...]
my $output = $send_handler{$outputtype};
[...]
Klar funktioniert das nicht, denn die Variable
%send_handler existiert ja vermutlich gar nicht. Lokal hast Du jedenfalls nur
$send_handler deklariert.
Der korrekte Zugriff wäre daher
my $output = $send_handler->{$outputtype};
beziehungsweise
my $output = $send_handler->{$outputtype}->();
für den Fall, dass Du meinen Rat annimmst, lieber anonyme Subroutinen zu speichern, die die Ausgabedaten nach Bedarf berechnen, statt immer alle Typen von Ausgabedaten direkt in dem assoziativen Array zu speichern.
Hättest Du, wie sich das gehört,
strict verwendet, so wäre Dir der Fehler auch bereits beim Kompilieren des Skriptes aufgefallen.
When C++ is your hammer, every problem looks like your thumb.