Hauptmenü

DevIo Bug

Begonnen von RichardCZ, 12 April 2020, 21:58:55

Vorheriges Thema - Nächstes Thema

rudolfkoenig

Danke fuer den Hinweis, ich habe die Zeile in einem "no strict refs" Klammer gesetzt, hoffentlich reicht das.

betateilchen

Scheint zu funktionieren, auf jeden Fall verhält sich meine Testinstallation damit nun unauffällig.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

mahowi

70_KODI.pm scheint mit use strict auch Probleme zu haben: https://forum.fhem.de/index.php?topic=110174
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

CoolTux

#18
Hier mal eine kleine Analyse welche Module alle einen String als Callback übergeben

00_DFPlayerMini.pm
00_SIGNALduino.pm
32_withings.pm
36_LaCrosseGateway.pm     bin ich mir unsicher da anonymous sub
36_PrecipitationSensor.pm   bin ich mir unsicher da anonymous sub
98_Hyperion.pm


Vorschlag:
use strict   wird für 3 Monate wieder entfernt und wir geben den Maintainern damit Zeit Ihre Module gerade zu ziehen.



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

rudolfkoenig

Ich habe die Zele 237 auch in einem "no strict refs" Klammer gesetzt, und fhemupdate.pl angestossen.

CoolTux

Guten Morgen Rudi,

Aber bleibt doch nicht so, oder? Ich meine wir arbeiten schon darauf hin das ganze sauber hin zu bekommen?


Grüße
Marko
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

herrmannj

No strict refs ist imho 'sauber' (wenngleich es sicher den akademischen Weg gibt. )

rudolfkoenig

ZitatAber bleibt doch nicht so, oder? Ich meine wir arbeiten schon darauf hin das ganze sauber hin zu bekommen?
Ich bin (noch?) nicht ueberzeugt, dass Funktionsamen als Callback verboten werden muessen: ich sehe keine Nachteile, aber klare Vorteile.

CoolTux

Zitat von: rudolfkoenig am 14 April 2020, 10:27:41
Ich bin (noch?) nicht ueberzeugt, dass Funktionsamen als Callback verboten werden muessen: ich sehe keine Nachteile, aber klare Vorteile.

Ein Verbot von Funktionsnamen als Callback ist auch nicht meine Intension. Ich dachte mehr daran das ganze use strict sicher zu machen.
Mir würde da nur eine Prüfung zu einfallen. Ich arbeite aber noch am Verständnis des ganzen  :)

Aber lange Rede kurzer Splint, ich schaue ob ich Dir da etwas anbieten kann.
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

Christoph Morrison

Zitat von: CoolTux am 14 April 2020, 09:56:25
Aber bleibt doch nicht so, oder? Ich meine wir arbeiten schon darauf hin das ganze sauber hin zu bekommen?

In guter alter FHEM-Tradition heißt "sauber" dann no strict refs gleich vorne hin geklatscht, der Interpreter nervt nicht mehr und keine macht sich die Mühe zu verstehen, warum etwas ein Problem ist oder sein könnte.

Ich zitiere mal Perldoc zu strict:
Zitat
The strict pragma disables certain Perl expressions that could behave unexpectedly or are difficult to debug, turning them into errors.

Was ist daran "akademisch", herrmannj? strict hat man nicht erfunden weil alle irgendwie dumm oder böse sind, sondern weil andere, besser und länger Perl programmierende Leute bemerkt haben, dass es Stellen gibt, die problematisch sind, weil sie eben anfällig für Fehler sind. Weise Menschen lernen aus den Fehlern anderer.

rudolfkoenig

Weise Menschen waegen die Argumente fuer und wieder ab, und entscheiden.
Und werden nicht hektisch, wenn die Mehrheit laut schreit, oder weil Unfehlbare das so gesagt haben.

herrmannj

Christoph, lass doch bitte die Polemik und außerdem ist Deine Kritik _hier_ objektiv auch komplett falsch. Ja ich verstehe worauf Du hinaus willst.

Schaust Du aber in den patch dann siehst Du dass in der Zeile unmittelbar oberhalb des callbacks steht: 'no strict refs' und direkt darunter steht 'use strict'. Weise Menschen haben das pragma 'no strict refs' genau für diesen Fall eingebaut. Wenn wir, was ich begrüßen würde, konstruktiv über schöner reden dann sähe das für mich so aus:

{
   no strict 'refs';
   $callback->($hash,$r) if($callback);
};


strict ist lexically scoped.

Akademisch: mit verschiedenen Konstruktionen kann man die Notwendigkeit von 'no strict refs' wegbekommen die Funktionalität aber beibehalten. Das ist jetzt in meinen Augen aber Kosmetik, so ist es sauber gerade weil eben niemand "no strict refs gleich vorne hin klatscht". Kinners, lasst die Kirche im Dorf.

CoolTux

Ich habe mir das nun mal eine Stunde lang angeschaut und aktuell halte ich persönlich die derzeitige Lösung als in Ordnung.
Man kann noch eine Prüfung einbauen aber das würde dann auch nur in einem no strict 'refs' enden und sogar eine Zeile mehr Code verlangen.

Daher. Danke Rudi für die schnelle Reaktion!
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

vbs

Nur für mich zum Verständnis: also die Übergabe der Funktionen als Strings in DevIo_OpenDev ist nicht mehr erwünscht/erlaubt mittelfristig? Werde es dann gerne entsprechend ändern.

CoolTux

Zitat von: vbs am 14 April 2020, 12:21:15
Nur für mich zum Verständnis: also die Übergabe der Funktionen als Strings in DevIo_OpenDev ist nicht mehr erwünscht/erlaubt mittelfristig? Werde es dann gerne entsprechend ändern.

Also wenn ich das so alles korrekt verstanden habe wird erwartet das $callback eine Codereferenz ist. Da ja
$calback->(...) ausgeführt wird.

Korrigiert mich bitte jemand wenn ich das falsch verstanden habe.

Ist dem nicht der Fall dann meckert ein use strict rum.
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