Thread Ternärer Operator und inexistente Hash-Schlüssel
(6 answers)
Opened by borisd at 2014-09-23 12:25
Gestern musste ich Werte von grossen Hash-Strukturen einlesen und es konnte vorkommen, dass ein Schlüssel nicht vorhanden war. Ich dachte mir, dass es dann wohl am besten wäre auf diesen Fall mit exists zu prüfen und gegebenenfalls dann einen Default zu setzten (könnte auch einfach '' sein).
Das eleganteste was ich gefunden habe seht Ihr auf unten Zeile 19 bei my $var2 (Lösung mit ternärem Operator). Mich stört allerdings, dass man - gerade bei grösseren Hash-Strukturen - den ganzen Rattenschwanz zwei mal aufschreiben muss. Wirkt total unübersichtlich. Kennt jemand einen besseren Ansatz? Ist mein Szenario mit dem Default gar quatsch? Cool wäre doch, wenn man den Hash nicht zweimal da stehen hätte... Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 use strict; use warnings; use feature qw(say); my $data = { very => { deep => { hash => { structure => 1, }, }, } }; # gibt "undef" zurück my $var1 = $data->{very}{deep}{hash}{fail}; # setzt Default aber viel Redundanz im Code my $var2 = exists $data->{very}{deep}{hash}{fail} ? $data->{very}{deep}{hash}{fail} : 'kein Eintrag'; say "var1 -> $var1"; say "var2 -> $var2"; Die Ausgabe: Code: (dl
)
1 $ perl h.pl var1: Wenn man den Fall "undef" nicht behandelt besteht die Gefahr von Warnungen später im Programm. var2: Geht ganz gut, aber wenn man viele Keys auslesen möchte wird es ganz schön viel Code mit all den doppelten Zeilen. Ideen hierzu? Danke! [Edit: Korrekturen gemäss Kommentaren, betreffend Warnung/undef] Last edited: 2014-09-23 14:26:33 +0200 (CEST) |