Hauptmenü

Perl Fehlermeldung

Begonnen von klaus.schauer, 19 März 2013, 20:56:54

Vorheriges Thema - Nächstes Thema

klaus.schauer

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?

decaflo

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)
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

klaus.schauer

Danke für den Tipp und danke für die Referenz. Dort ist die Operatorenrangfolge gut beschrieben.