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