Verhalten von notify bei Definition mit Semikolons

Begonnen von viegener, 09 September 2017, 11:44:38

Vorheriges Thema - Nächstes Thema

viegener

Ich sehe das nicht wirklich als Fehler, trotzdem hat es zumindest cooltux und mich etwas beschäftigt - siehe hier
https://forum.fhem.de/index.php/topic,76391.0.html

Folgende Definition eines notifys funktioniert nicht (Alle definitionen im def-editor in FHEMWEB)
testnotify {
my $VAR = "Hugo";
Log3(undef, 1, "Hallo".$VAR);
};


Fehler:
2017.09.09 11:38:35 5: Triggering testnotify
2017.09.09 11:38:35 4: testnotify exec {
my $VAR = "Hugo";
Log3(undef, 1, "Hallo".$VAR);
};
2017.09.09 11:38:35 3: testnotify return value: Unknown command {
my, try help.
Unknown command Log3(undef,, try help.
Unknown command }, try help.


Das Problem ist hier das Semikolon am Ende - denn damit wird der Gesamtausdruck nicht mehr als perl-Kommando erkannt. Das ist auch im Code nachvollziehbar und die Definition ist ja eigentlich inkorrekt (da ein weiteres Kommando folgen sollte)
Man könnte sich hier eine Warnung vorstellen?

Interessanterweise funktioniert aber die Definition mit doppelten Semikolons innerhalb des perl-Ausdrucks ohne Fehlermeldung:

testnotify {
my $VAR = "Hugo";;
Log3(undef, 1, "Hallo".$VAR);;
};


Da habe ich nicht weiter geschaut warum das plötzlich geht und eigentlich ist auch das kein Fehler sondern einfach erstmal überraschend.

@Rudi: Ob Du daran etwas ändern willst, ist wohl Deine Entscheidung.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

rudolfkoenig

Erstmal nicht, es sei denn irgendwer liefert einen Patch.

Vmtl. nicht sehr bekannt, dass vor dem eingegebenen/sichtbaren Perl-Ausdruck noch eine Liste an Variablen ($EVENT, $NAME, $EVTPART1, usw) mit my gesetzt wird, das spielt evtl. auch eine Rolle.

betateilchen

Zitat von: viegener am 09 September 2017, 11:44:38
Interessanterweise funktioniert aber die Definition mit doppelten Semikolons innerhalb des perl-Ausdrucks ohne Fehlermeldung:

Um es auf die Spitze zu treiben - das hier funktioniert auch ;)


blub {
my $VAR = "Hugo";;
Log3(undef, 1, "Hallo ".$VAR)
};


Aber ich sehe da auch keinen Handlungsbedarf. Wenn man die Logik der Auflösung solcher Ausdrücke verstanden hat, muss man darüber nicht mehr nachdenken, sondern macht es automatisch richtig.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

viegener

@rudi: Verstehe ich und ich halte es auch nicht für einen Fehler.

Das mit den zusätzlichen Variablen war mir schon klar, trotzdem konnte ich nicht sehen warum das mit den doppelten Semikolons geht, denn eigentlich ist es damit ja genausowenig ein perl-befehl, da nicht mit } abgeschlossen wird.

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

CoolTux

Deswegen haben wir es ja auch nicht als Bug eingestellt sondern eben als Meldung zum kurz drüber nachdenken.
Es ist auch für andere Helfenden interessant worauf man immer so achten muß. Gibt schon komische Konstruktionen.
Erinnere mich da gerade an Sabines Code unter Codeschnipsel wo direkt Hash's abgefragt werden in einer tieferen Ebene. Wo wir doch letztens erst gesehen haben das diese Hash's dann erst angelegt werden wenn sie nicht vorhanden sind.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

Zitat von: CoolTux am 09 September 2017, 12:25:12
Wo wir doch letztens erst gesehen haben das diese Hash's dann erst angelegt werden wenn sie nicht vorhanden sind.

Das ist aber seit sehr langer Zeit bekannt und Rudi weist auch in schöner Regelmäßigkeit auf diese Tatsache hin...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Zitat von: betateilchen am 09 September 2017, 12:35:12
Das ist aber seit sehr langer Zeit bekannt und Rudi weist auch in schöner Regelmäßigkeit auf diese Tatsache hin...

Ich weiß, das letztens war auch schon bisschen her. Und ich weise auch regelmäßig darauf hin. Habe gestern gesucht wo Rudi das so gut erklärt hat um es in Sabines Thread zu posten, habe es aber nicht mehr gefunden und dann die Lust verloren.  :-[
Aber wir schweifen ab  ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net