FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: wkarl am 15 Juli 2013, 17:41:53

Titel: perl key value array Frage
Beitrag von: wkarl am 15 Juli 2013, 17:41:53
Hallo,

irgendwie kann ich nicht nachvollziehen was hier schiefläuft. Folgendes sub habe ich geschrieben (o, zusammenkopiert)
sub
HMLANRepeaterCfgOG() {
    my $rptr = "HMLAN_RepeaterOG";
    my $no = 1;
    my $sendName = "";
    my $recName = "";
    my %cfgArr = (
                    "F15D62"                    =>  "Badezimmer_TC",
                    "Badezimmer_TC"             =>  "F15D62",
                    "F15D62"                    =>  "Badezimmer_FH",
                    "Badezimmer_FH"             =>  "F15D62",
                    "F15D62"                    =>  "Schlafzimmer_TC",
                    "Schlafzimmer_TC"           =>  "F15D62",
                    "F15D62"                    =>  "Schlafzimmer_FH_Tuer",
                    "Schlafzimmer_FH_Tuer"      =>  "F15D62",
                    "F15D62"                    =>  "Schlafzimmer_FH_Fenster",
                    "Schlafzimmer_FH_Fenster"   =>  "F15D62",
                    "F15D62"                    =>  "Janine_TC",
                    "Janine_TC"                 =>  "F15D62",
                    "F15D62"                    =>  "Janine_FH_Tuer",
                    "Janine_FH_Tuer"            =>  "F15D62",
                    "F15D62"                    =>  "Janine_FH_Fenster",
                    "Janine_FH_Fenster"         =>  "F15D62",
                    "F15D62"                    =>  "Janine_TC",
                    "Vanessa_TC"                =>  "F15D62",
                    "F15D62"                    =>  "Vanessa_FH_Tuer",
                    "Vanessa_FH_Tuer"           =>  "F15D62",
                    "F15D62"                    =>  "Vanessa_FH_Fenster",
                    "Vanessa_FH_Fenster"        =>  "F15D62",
                    "F15D62"                    =>  "BadezimmerRolladen",
                    "BadezimmerRolladen"        =>  "F15D62",);
    while ( ($sendName, $recName) = each %cfgArr ) {
        Log 1, ">>> $no $sendName $recName";
        $no++;
    };
}

Dies ergibt dann diesen Log-Eintrag.
2013.07.15 17:31:44.319 1: >>> 1 Vanessa_TC F15D62
2013.07.15 17:31:45.102 1: >>> 2 Schlafzimmer_FH_Tuer F15D62
2013.07.15 17:31:45.102 1: >>> 3 F15D62 BadezimmerRolladen
2013.07.15 17:31:45.102 1: >>> 4 BadezimmerRolladen F15D62
2013.07.15 17:31:45.103 1: >>> 5 Schlafzimmer_TC F15D62
2013.07.15 17:31:45.103 1: >>> 6 Badezimmer_TC F15D62
2013.07.15 17:31:45.103 1: >>> 7 Janine_FH_Tuer F15D62
2013.07.15 17:31:45.107 1: >>> 8 Schlafzimmer_FH_Fenster F15D62
2013.07.15 17:31:45.109 1: >>> 9 Janine_FH_Fenster F15D62
2013.07.15 17:31:45.112 1: >>> 10 Janine_TC F15D62
2013.07.15 17:31:45.113 1: >>> 11 Vanessa_FH_Fenster F15D62
2013.07.15 17:31:45.113 1: >>> 12 Badezimmer_FH F15D62
2013.07.15 17:31:45.113 1: >>> 13 Vanessa_FH_Tuer F15D62

Zum einen nicht volständig, zum anderen sollte das nicht sauber von oben nach unten abgearbeitet werden?

Verzweifelten Dank schon mal.

ciao walter
Titel: Aw: perl key value array Frage
Beitrag von: justme1968 am 15 Juli 2013, 18:13:45
bei einem assoziativen array kannst du für jeden key (dein index) genau einen wert hinterlegen. wenn du für den gleichen key einen zweiten wert hinterlegst überschreibst du den ersten. die reihenfolge der keys ist nicht definiert.

wenn du mehr als einen wert pro key hinterlegen willst musst du als value etwas verwenden das mehrere elemente halten kann. also eine liste oder ein array. z.b. etwas in der art:

  ... "F15D62" => ["Badezimmer_TC", "Badezimmer_FH",...],...

gruss
  andre
Titel: Aw: perl key value array Frage
Beitrag von: wkarl am 16 Juli 2013, 11:51:55
ok, Danke Andre.
ciao walter