Hallo, ich habe hin und wieder DOIFs, in denen ich mit IF im Ausführungsteil eines DOIFs weitere Bedingungen vergleichen muss.
([FbCallMonitor:event] eq "ring")
(
IF ([Dreambox:state] eq "on")
msg screen Anruf von [FbCallMonitor:external_name] [FbCallMonitor:external_number],
IF ([rr_Bewohner1] eq "home")
msg push @rr_Bewohner1 Anruf von [FbCallMonitor:external_name] [FbCallMonitor:external_number] O[{"Pushover_SOUND":"bike"}],
IF ([rr_Bewohner2] eq "home")
msg push @rr_Bewohner2 Anruf von [FbCallMonitor:external_name] [FbCallMonitor:external_number]
)
Dies alles in der DOIF-Bedingung zu überprüfen kann ich (scheinbar) nicht, da schließlich jede Bedingung wahr werden kann.
(
[FbCallMonitor:event] eq "ring" and [Dreambox:state] eq "on"
)
(
msg screen Anruf von [FbCallMonitor:external_name] [FbCallMonitor:external_number]
)
DOELSEIF
(
[FbCallMonitor:event] eq "ring" and [rr_Bewohner1] eq "home")
)
(
msg push @rr_Bewohner1 Anruf von [FbCallMonitor:external_name] [FbCallMonitor:external_number] O[{"Pushover_SOUND":"bike"}]
)
DOELSEIF
(
[FbCallMonitor:event] eq "ring" and [rr_Bewohner2] eq "home")
)
(
msg push @rr_Bewohner2 Anruf von [FbCallMonitor:external_name] [FbCallMonitor:external_number]
)
Ich dachte nun, dass ich das mit dem neuen Attribut "checkall" umsetzen könnte. Aber laut Doku folgendem Hinweis in der Doku, wird das auch wohl nicht möglich sein:
ZitatZu beachten ist, dass bei einer wahren Bedingung die dazugehörigen Befehle ausgeführt werden und die Abarbeitung immer beendet wird - es wird also grundsätzlich immer nur ein Befehlszweig ausgeführt und niemals mehrere.
Habe ich einen Denkfehler oder muss ich bei der "unsauberen DOIF/IF"-Syntax bleiben?
Warum meinst du wäre die Benutzung von IF "unsauber"?
Die Benutzung von IF innerhalb eines DOIF-Moduls ist explizit im DOIF-Modul berücksichtigt, daher kann man IF als Ergänzung zu DOIF ansehen, zumal bei IF weitgehend die gleiche Syntax benutzt wird.
Ich dachte, dass mein obiger Code ein wenig unelegant wäre und ich nur den "sauberen" Weg nicht finde.
Zitat von: FunkOdyssey am 19 Januar 2017, 18:10:24
Ich dachte, dass mein obiger Code ein wenig unelegant wäre und ich nur den "sauberen" Weg nicht finde.
Wenn man mehrere unabhängige Fälle innerhalb eines DOIF-Zweigs ausführen möchte, ist das, meiner Meinung nach, die sauberste Lösung, wenn man es nicht direkt in Perl programmieren möchte.
Danke, das beruhigt mich. :-)