Thread Lookup Tabelle - Kein Rückgabewert (3 answers)
Opened by roooot at 2008-06-13 23:47

murphy
 2008-06-14 02:54
#111025 #111025
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
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
Code (perl): (dl )
1
2
3
4
5
6
7
8
[...]
    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
Code (perl): (dl )
1
2
3
[...]
    my $output = $send_handler{$outputtype}; # OUTPUT IST LEER
[...]


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
Code (perl): (dl )
    my $output = $send_handler->{$outputtype};

beziehungsweise
Code (perl): (dl )
    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.

View full thread Lookup Tabelle - Kein Rückgabewert