2023-02-01T12:43:56
lern_nochDas Ausblenden des Unterstrichs geschieht bereits in der Zeile
my $soll = $_;
Aus v_21 wird dann v <neue Zeile> 21.
Das wirst Du nochmal genauer untersuchen müssen. Das passiert irgendwo anders, denn diese Zeile blendet definitiv keinen Unterstrich aus! Hast Du eine Möglichkeit, den Inhalt der Variablen zu protokollieren? Oder das ganze im Debugger laufen zu lassen?
Ich möchte noch auf ein paar stilistische Auffälligkeiten hinweisen, die nicht unbedingt falsch sind, aber manchmal schwer zu lokalisierende Fehler auslösen:
- Anstelle von open(DATEI,"kontrolle.lh"); solltest Du die open-Variante mit drei Argumenten verwenden:
open(my $datei, '<', 'kontrolle.lh');
Warum ist das wichtig? DATEI ist eine "old-style" globale Variable und es besteht die (zugegebenermaßen unwahrscheinliche) Chance, dass an anderer Stelle im Code das gleiche Handle verwendet wird. - Anstelle der impliziten Nutzung von $_ solltest Du Deine Zeilen gleich in eine "eigene" Variable schreiben:
while (my $soll = <$datei>){
Warum ist das wichtig? $_ ist ebenfalls eine globale Variable. Wenn der Teil von FHEM, der Deine Routine aufruft, auch $_ verwendet, dann überschreibst Du dessen Inhalt mit Deinen Zeilen. - Anstelle von chop($soll); schreibt man besser:
Warum ist das wichtig? chop frisst nicht gezielt den Zeilenumbruch, sondern das letzte Zeichen der Zeile. "Normalerweise" macht das keinen großen Unterschied, aber die letzte Zeile einer Datei muss nicht unbedingt mit einem Zeilenumbruch aufhören. - Das sieht wie ein Fehler mit Copypaste aus:
2023-02-01T12:43:56
lern_noch
if (ReadingsVal ($isoll,"state","") ne ReadingsVal ($isoll,"state","")) {
Sollten da nicht einfach $isoll und $iist verglichen werden?
Last edited: 2023-02-01 22:48:35 +0100 (CET)