^* matches null string many times in regex;

Begonnen von housekeeper, 21 März 2013, 09:16:09

Vorheriges Thema - Nächstes Thema

housekeeper

^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE $/ at /var/InternerSpeicher/fhem/usr/bin/fhem.pl line 777.

Muß ich mir da was draus machen, oder kann ich das ignorieren ?

   eval {                              # a bad regexp may shut down fhem.pl
      if($l =~ m/[*\[\]^\$]/) {         # Regexp
777        push @ret, grep($_ =~ m/^$l$/, sort keys %defs);
        $regok = 1;
      }
    };


rudolfkoenig

Sagt auf komplizierte weise, dass die Argumente fuer devspec nicht shell-globs sondern regexps sind.
Fuer nicht eingeweihte: das was im Shell * ist, ist im regexp .*, und das ? sollte man in FHEM als . (Punkt) eingeben.

Also statt "set * off" lieber "set .* off" verwenden.

fiedel

Mal eine Frage an die Perl- Hasen:

Wie finde ich zielgerichtet heraus, wo genau ich meine(n) Syntaxfehler gemacht habe?

Meldung im Log:

^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE $/ at ./FHEM/01_FHEMWEB.pm line 2179.

Betroffene Codezeile:

    my @list = split(" ", $devStateIcon);
    foreach my $l (@list) {
      my ($re, $iconName, $link) = split(":", $l, 3);
2179      if(defined($re) && $state =~ m/^$re$/) {
        if($iconName eq "") {
          $rlink = $link;
          last;
        }
        return ($iconName, $link, (defined(FW_iconName($iconName)) ? 0 : 1));
      }
    }
  }


Vielen Dank... ;o)

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

rudolfkoenig

^ ist Anfang der Zeile
* das vorherige Zeichen beliebig oft
In Kombination ist das fuer perl sinnfrei.

fiedel

Hi Rudi,

vielen Dank für die schnelle Antwort!
Jetzt habe ich also mal die Suchfunktion auf das Zeichen Stern (*) in der CFG gehetzt und kontrolliert, ob irgendwo ein Punkt davor fehlt. Gefunden habe ich z.B. das:


attr Dum_fp_Name_D devStateIcon *:Transparent


Dann geändert in:


attr Dum_fp_Name_D devStateIcon .*:Transparent


Und schon ist Ruhe im Karton. ;o)

Viele Grüße

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423