Thread Ternärer Operator und inexistente Hash-Schlüssel (6 answers)
Opened by borisd at 2014-09-23 12:25

borisd
 2014-09-23 12:25
#177477 #177477
User since
2014-04-23
15 Artikel
BenutzerIn
[default_avatar]
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
2
3
4
$ perl h.pl 
Use of uninitialized value $var1 in concatenation (.) or string at h.pl line 23.
var1 ->
var2 -> kein Eintrag


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)

View full thread Ternärer Operator und inexistente Hash-Schlüssel