Folgende Prgrammzeile
push @event, "3:state:" . $db_0 & 1 ? "on" : "off";
liefert an einer Stelle im Programm die Fehlermeldung
Argument "3:state:9" isn't numeric in bitwise and (&) at ./FHEM/10_EnOcean.pm line 1374.
Falls ich statt dessen
push @event, "3:state:" . ($db_0 & 0x01 ? "on" : "off");
verwende, ist der Fehler weg. Nach meiner Auffassung sind die beiden Programmzeilen gleichwertig. Ich habe an anderen Stellen mehrfach die erste Variante genutzt. Dort wird kein Fehler generiert. Wenn ich die Variable $db_0 ausgebe, wird der nummerische Wert "9" angezeigt?!
Mache ich einen Denkfehler? Gibt es da einen Trick oder führt die Fehlermeldung in die Irre?
ZitatNach meiner Auffassung sind die beiden Programmzeilen gleichwertig
Sind sie aber nicht. Die Konkatenation "3:state:" . $db_0 hat Priorität gegenüber dem folgenden &. (siehe z.B. http://de.selfhtml.org/perl/sprache/operatoren.htm (//de.selfhtml.org/perl/sprache/operatoren.htm))
Daher wird in
push @event, "3:state:" . $db_0 & 1 ? "on" : "off";
"3:state:9" & 1 ausgewertet. Das führt zum Fehler. Die Klammerung verändert die Rangfolge der Operatoren.
Gruss, Florian
Danke für den Tipp und danke für die Referenz. Dort ist die Operatorenrangfolge gut beschrieben.