Moin,
wegen der Optik nochmal der Ausgangspunkt
{my %h =('leave','4Move','enter','3Significant');;fhem("set $NAME mode $h{$EVTPART1}")}
In der Tat wäre set magic am kürzesten und im Fall "2 Werte" auch übersichtlich - wenn man auf die extra Prüfung der Alternative verzichtet.
Bei set magic rollen alle (außer rudi

) immer mit den Augen

set $NAME mode {($EVTPART1 eq 'leave'?'4Move':'3Significant')}
Wenn man die Alternative noch eindeutig prüft wird es schon etwas holprig und nicht kürzer, wenn jetzt noch was dazu kommt.

set $NAME mode {($EVTPART1 eq 'leave'?'4Move':($EVTPART1 eq 'enter'?'3Significant':''))}
Der if else Wurm ... muss man den Befehl zweimal schreiben
{if ($EVTPART1 eq 'leave'){set $NAME mode '4Move'} else {set $NAME mode '3Significant'}}
Ist mit Prüfung der Alternative schon länger
{if ($EVTPART1 eq 'leave'){set $NAME mode '4Move'} elsif ($EVTPART1 eq 'enter') {set $NAME mode '3Significant'}}
Mit zusätzlicher Variable hätte man den Kram am Anfang des Codes geprüft, braucht den Befehl bloß einmal und der Code muss langsam in die 99_myUtils

{my $c;;if ($EVTPART1 eq 'leave'){$c='4Move'} elsif ($EVTPART1 eq 'enter'){$c='3Significant'};;set $NAME mode $c}
Da gibt es sicher noch viele Möglichkeiten. Ich finde jetzt erstmal meinen Ansatz gar nicht schlecht. Man muss ja auch was haben was man quasi aus der Schublade zieht und was gut wartbar ist

Gruß Otto