Hallo zusammen,
nachdem ich au perl 5.28.1 upgedated habe, bekommt ich im log folgende Warning:
2019.09.06 22:33:37 1: PERL WARNING: Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.32), passed through in regex; marked by <-- HERE in m/^(.*)({ <-- HERE .*})(.*)$/ at ./FHEM/10_MQTT_GENERIC_BRIDGE.pm line 1358, <$fh> line 882.
Ist erstmal nur zur Info. Aber Perl 5.32 wirds kritisch.
Gruß,
Claus
Hallo,
gestern habe ich ein auf
Raspbian Buster basierendes System aufgesetzt; dies verwendet automatisch eine neuere Perl-Version. Beim Einrichten von MQTT_GENERIC_BRIDGE bzw. nach jedem Neustart von FHEM wird die folgende Warnmeldung im Logfile generiert:
2019.10.18 09:01:24.669 1: PERL WARNING: Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.32), passed through in regex; marked by <-- HERE in m/^(.*)({ <-- HERE .*})(.*)$/ at ./FHEM/10_MQTT_GENERIC_BRIDGE.pm line 1358, <$fh> line 74.
Betroffen ist folglich die Zeile 1358 in 10_MQTT_GENERIC_BRIDGE.pm
if($str =~ m/^(.*)({.*})(.*)$/) {
Wenn ich ein wenig allgemeiner im Forum bzgl. der Warnmeldung suche, tauchen mehrere ähnlich lautende Logmeldungen für andere Module auf.
https://forum.fhem.de/index.php?topic=71402.0 (https://forum.fhem.de/index.php?topic=71402.0) ; 01 Mai 2017, 22:20:57
https://forum.fhem.de/index.php?topic=90256.0 (https://forum.fhem.de/index.php?topic=90256.0) ; 14 August 2018, 15:12:22
https://forum.fhem.de/index.php?topic=91920.0 (https://forum.fhem.de/index.php?topic=91920.0) ; 09 Oktober 2018, 20:49:46
Eine allgemeine Recherche im Internet führt scheinbar zu folgender (warnfreier) Änderung für die Zeile 1358 in 10_MQTT_GENERIC_BRIDGE.pm:
if($str =~ m/^(.*)(\{.*})(.*)$/) {
Die sich ergebende Änderung basiert vor allem auf der folgenden Schilderung:
Zitat
While migrating code from an older perl version all literal left braces should be escaped now. A literal "{" should now be escaped in a pattern. If you want a literal left curly bracket (also called a left brace) in a regular expression pattern, you should now escape it by either preceding it with a backslash ("\{") or enclosing it within square brackets "[{]" ; otherwise a deprecation warning will be raised.