IF Abfrage mit Kombination "oder" und "und" greift nicht

Begonnen von skyfly24, 08 September 2015, 17:02:38

Vorheriges Thema - Nächstes Thema

skyfly24

Hallo an alle,
kann mir jemand sagen, warum folgende Abfrage nicht den "und" Wert (Variable $zaehler) berücksichtigt, sondern nur die "oder" Werte? Die Variable $zaehler wir überhaupt nicht berücksichtigt. Die Abfrage soll nur wahr sein, wenn die Variable $zaehler den Wert 1 hat und eine der Zeiten mit der Variable $hm stimmen. Wenn die Zeiten stimmen wird die Abfrage als Wahr durchlaufen. Die Variable $zaehler wird ignoriert, egal was drin steht. :-(

my $zaehler = 2;
if ($zaehler eq 1 && $hm eq "00:58" || $hm eq "01:58" || $hm eq "02:58" || $hm eq "03:58" || $hm eq "04:58" || $hm eq "05:58" || $hm eq "06:58" || $hm eq "07:58" || $hm eq "08:58" || $hm eq "09:58" || $hm eq "10:58" || $hm eq "11:58" || $hm eq "12:58" || $hm eq "13:58" || $hm eq "14:58" || $hm eq "15:58" || $hm eq "16:00" || $hm eq "17:58" || $hm eq "18:58" || $hm eq "19:58" || $hm eq "20:58" || $hm eq "21:58" || $hm eq "22:58" || $hm eq "23:58") { ...


Danke

JoWiemann

Hallo,

eq ist ein Vergleich für Zeichenketten. Also hier schon mal == benutzen. Und dann würde ich die ganzen "oder" klammern. Also ( und ( oder oder)).



Grüße Jörg

Gesendet von iPhone mit Tapatalk
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

skyfly24

Super Dankeschön. Dachte == und eq ist gleichwertig. Dann teste ich das mal :)

franky08

#3
Numerischer und String- Vergleich  ;)

ZitatPerl unterscheidet Vergleichsoperatoren für Zahlen und für Zeichenketten

http://wiki.selfhtml.org/wiki/Perl/Operatoren

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

skyfly24

Vielen Dank franky08
Wer lesen kann ...  ;D
Hatte vorher schon auf SELFHTML nachgesehen. Muss mir angewöhnen nicht nur alles zu überfliegen, sondern genau zu lesen :-)

Der Vollständigkeit halber hier nun die korrekte Variante:
if ($zaehler == 1 && ($hm eq "00:58" || $hm eq "01:58" || $hm eq "02:58" || $hm eq "03:58" || $hm eq "04:58" || $hm eq "05:58" || $hm eq "06:58" || $hm eq "07:58" || $hm eq "08:58" || $hm eq "09:58" || $hm eq "10:58" || $hm eq "11:58" || $hm eq "12:58" || $hm eq "13:58" || $hm eq "14:58" || $hm eq "15:58" || $hm eq "16:58" || $hm eq "17:58" || $hm eq "18:58" || $hm eq "19:58" || $hm eq "20:58" || $hm eq "21:58" || $hm eq "22:58" || $hm eq "23:58")) {