Autor Thema: Verhalten von notify bei Definition mit Semikolons  (Gelesen 289 mal)

Offline viegener

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3235
    • Meine Seite im fhemwiki
Verhalten von notify bei Definition mit Semikolons
« am: 09 September 2017, 11:44:38 »
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

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 17262
Antw:Verhalten von notify bei Definition mit Semikolons
« Antwort #1 am: 09 September 2017, 11:51:01 »
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.
Informativ Informativ x 1 Liste anzeigen

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 13591
  • Das "S" in "IoT" steht für "Security"
Antw:Verhalten von notify bei Definition mit Semikolons
« Antwort #2 am: 09 September 2017, 12:11:48 »
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.
-----------------------
Nächster Hamburg-Stammtisch: 15.12.2017

Offline viegener

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3235
    • Meine Seite im fhemwiki
Antw:Verhalten von notify bei Definition mit Semikolons
« Antwort #3 am: 09 September 2017, 12:24:31 »
@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

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 11730
Antw:Verhalten von notify bei Definition mit Semikolons
« Antwort #4 am: 09 September 2017, 12:25:12 »
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 13591
  • Das "S" in "IoT" steht für "Security"
Antw:Verhalten von notify bei Definition mit Semikolons
« Antwort #5 am: 09 September 2017, 12:35: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...
-----------------------
Nächster Hamburg-Stammtisch: 15.12.2017

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 11730
Antw:Verhalten von notify bei Definition mit Semikolons
« Antwort #6 am: 09 September 2017, 12:40:00 »
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier

 

decade-submarginal