[geklärt] PERL WARNING: Use of uninitialized value within @d in string at ...

Begonnen von TomLee, 23 Dezember 2021, 12:04:46

Vorheriges Thema - Nächstes Thema

Beta-User

...eher gar nicht mit map. Ging da nur um die Frage, wie man es noch unleserlicher notieren könnte...
Server: HP-elitedesk@Debian 12, 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

TomLee

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");
}

Christoph Morrison


TomLee

Das sind die Rückgabewerte des pct-slider, hab ich in #13 verlinkt.

TomLee

Hier meine fertige Lösung des pct-setter die bisher nach mehrerem testen problemlos klappt.