Silvio: Perl: Den Valuestring zu einem vorhandenen Key in einem Hash erweitern

Hallo,

ich zerlege einen String, der aus Key-Value-Paaren besteht und speichere das dann in einem Hash.

Nun möchte ich, falls es den Key im Hash schon gibt, den Value einfach an den schon vorhandenen Value anhängen.

Wäre das die sauberste Lösung?

	if ($hash{$key}) { $hash{$key} = $hash{$key} . ',' . $value}
	else { $hash{$key} = $value }

Danke!

  1. Hallo,

    ich zerlege einen String, der aus Key-Value-Paaren besteht und speichere das dann in einem Hash.

    Nun möchte ich, falls es den Key im Hash schon gibt, den Value einfach an den schon vorhandenen Value anhängen.

    Wäre das die sauberste Lösung?

    Nein. Besser ist es, auf den key zu pushen, dann sind die Werte sauber voneinander getrennt und über den Array-Index direkt adressierbar. Beispiel:

    push @{$hash{$key}}, $value;
    
    # Ergebnis als Beispiel
    $hash{numbers} = [99,3,5,4712];
    

    Der Code zum Zugriff ist dann entsprechend anzupassen, z.B. wäre abzufragen wieviele Elemente das Array enthält. MfG

    1. Hm, das hatte ich auch überlegt. Aber muss ich dann immer, wenn ich auf $hash{numbers} zugreife, vorher dereferenzieren?

      1. Hm, das hatte ich auch überlegt. Aber muss ich dann immer, wenn ich auf $hash{numbers} zugreife, vorher dereferenzieren?

        Ja, denn $hash{numbers} ist ja eine Referenz auf ein Array. Beispiel:

        my %repos = (
            numbers => [13,14,15]
        );
        
        print $repos{numbers}->[1]; # 14
        

        Also einfach mit dem Pfeil aufn Index und Du kriegst den Wert. Wenn Du das ganze Array haben willst, nimm es so: print scalar @{$repos{numbers}}; (zeigt die Anzahl der Arrayelemente).

        MfG