FHEM mit Perl 5.24.1

Begonnen von PNinBB, 18 Mai 2017, 09:03:56

Vorheriges Thema - Nächstes Thema

PNinBB

Nun scheint ja fast alles klar zu sein. Ich habe auf jeden Fall einiges dazugelernt ! Ich gebe zu, teilweise auf Kosten des "Freizeitbudgets" anderer, wofür ich mich ausdrücklich bedanke.
Für mich bleiben zwei Fragen offen:
1. Wenn eine solche Situation ("Regelverletzung") und damit diese Fehlermeldung auftritt, darf FHEM natürlich nicht abstürzen, oder (siehe 'justme1968') ?
2. Ist es denn tatsächlich eine Regel, dass man 'nur' die kompletten Module laden darf ?
Peter
Raspi 4B + RaZberry2 (Deb 10), FritzBox 7490;
AEOTec: KeyFobGen5: 1x;
Danfoss: Living Connect 2.51: 3x;
Fibaro: FGK: 10x: 3x; FGBS: 001: 8x, 222: 1x; FGMS001: 2x; FGR: 222: 3x, 223: 2x; FGRGBWM-441: 1x; FGBS: 222: 2x, 223: 2x,224: 1x;
Philio: PAN06-1A: 3x;

rudolfkoenig

Zitatdarf FHEM natürlich nicht abstürzen, oder (siehe 'justme1968') ?
"darf" ist so'ne Sache, ich wuesste nicht, wie ich das verhindern soll.

ZitatIst es denn tatsächlich eine Regel, dass man 'nur' die kompletten Module laden darf ?
Nicht unbedingt, und ich halte das fuer einen Fehler des Time Moduls, eine Funktion mit dem gleichen Namen aber anderen Aufruf-Semantik, wie im "Core" anzubieten.

SabineT

Zitat von: PNinBB am 22 Mai 2017, 08:46:38

Für mich bleiben zwei Fragen offen:
1. Wenn eine solche Situation ("Regelverletzung") und damit diese Fehlermeldung auftritt, darf FHEM natürlich nicht abstürzen, oder (siehe 'justme1968') ?
2. Ist es denn tatsächlich eine Regel, dass man 'nur' die kompletten Module laden darf ?
Peter
zu 1. Da Perl Programme nicht compiliert werden sondern nur beim Aufruf interpretiert, lassen sich Fehler im Programm schwer abfangen. Wenn man selber etwas in der Programmierung ändern will empfiehlt sich dann, das erst mal auf einem Test-System zu machen und schauen, ob irgendwelche Fehlermeldungen auftauchen.
zu 2. das hängt immer von der Situation ab. Wenn man nur eine Funktionen eines Modul benötigt wird man auch nur die importieren, wenn man mehrere Funktionen verwenden will ist es vermutlich besser, das ganze Modul zu laden und dann eben beim Aufruf den Modulnamen mit anzugeben.
Nur sollte man vorher immer erst mal die Dokumentation des Moduls studieren und überprüfen, ob eine Funktion nicht eine gleichnamige vom CORE überschreibt. Da muss ich rudolfkoenig zustimmen, Time::localtime ist da eindeutig eine schlecht gelöste Funktion.

PNinBB

Ein paar Ergänzungen zu meinem Punkt 1 und mal so "ins Unreine" gedacht:
1. Mittels des 'sigtrap pragma' (http://perldoc.perl.org/sigtrap.html) einen Händler anhängen, der auf den Absturz reagiert.
2.  Analyse, um die Fehlerursache zu ermitteln; vor allem wäre wichtig, den den Fehler verursachenden Modul zu bestimmen (??).
3. Diesen Deaktivieren, entsprechende Informationen ins Logfile schreiben.
4. Schliesslich fhem.pl neu starten.
Diese Ideen basieren weniger auf Perl-Erfahrungen, als mehr auf Erfahrungen mit anderen Programmiersprachen. Natürlich ist Perl ein Interpretationssystem, aber andererseits existiert ja ein Prozess, an den man sich hängen kann.
Ich bitte um Nachsicht, vor allem wegen des noch starken "Nebels" in Punkt 2.
Peter
Raspi 4B + RaZberry2 (Deb 10), FritzBox 7490;
AEOTec: KeyFobGen5: 1x;
Danfoss: Living Connect 2.51: 3x;
Fibaro: FGK: 10x: 3x; FGBS: 001: 8x, 222: 1x; FGMS001: 2x; FGR: 222: 3x, 223: 2x; FGRGBWM-441: 1x; FGBS: 222: 2x, 223: 2x,224: 1x;
Philio: PAN06-1A: 3x;