Autor Thema: [geklärt] PERL WARNING: Use of uninitialized value within @d in string at ...  (Gelesen 3649 mal)

Offline Beta-User

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 18359
...eher gar nicht mit map. Ging da nur um die Frage, wie man es noch unleserlicher notieren könnte...
Server: HP-T620@Debian 11, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files
Zustimmung Zustimmung x 1 Liste anzeigen

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 4148
  • ... wer sät, der erntet ...
Kann ich mangels Erfahrung ja nicht beurteilen, wenn ich mir den fertigen Code anschaue empfinde ich die map-Variante als angenehm und man spart sich noch die Definition einer Variable.


{
my @d = split(/,/,ReadingsVal($NAME,'speech_cmnd','none'));
my @e = split(/,/,ReadingsVal($NAME,'zones','none'));
my ($i, %pct2cmd);
    for my $v (@d) {$i++;$pct2cmd{$i} = $v;}
$i= keys %pct2cmd;
    for my $w (@e) {$i++;$pct2cmd{$i} = 'zone '.$w;};
my $cmd = $pct2cmd{$EVTPART1};
    return if !$cmd;
    return fhem("set $NAME !$cmd;setreading $NAME pct $EVTPART1");}

{
my @d = split(/,/,ReadingsVal($NAME,'speech_cmnd','none'));
my @e = split(/,/,ReadingsVal($NAME,'zones','none'));
my ($i,%pct2cmd);
    map {$i++;$pct2cmd{$i} = $_;} (@d);
$i= keys %pct2cmd;
    map {$i++;$pct2cmd{$i} = 'zone '.$_;} (@e);
my $cmd = $pct2cmd{$EVTPART1};
    return if !$cmd;
    return fhem("set $NAME $cmd;setreading $NAME pct $EVTPART1");
}

Offline Christoph Morrison

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1820
Wie sieht denn $EVTPART1 typischerweise aus?

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 4148
  • ... wer sät, der erntet ...
Das sind die Rückgabewerte des pct-slider, hab ich in #13 verlinkt.

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 4148
  • ... wer sät, der erntet ...
Hier meine fertige Lösung des pct-setter die bisher nach mehrerem testen problemlos klappt.