Unescaped left brace in regex is deprecated ... 33_readingsGroup.pm line 1381

Begonnen von linuzer, 01 Mai 2017, 22:20:57

Vorheriges Thema - Nächstes Thema

l2r

Wissen ist Macht.
Ich weiß nix.
Macht nix.

linuzer

Zitat von: linuzer am 07 Mai 2017, 23:41:12
... für meine Begriffe ist das Problem, dass reguläre Ausdrücke auf eine Art und Weise benutzt werden, die heute zwar noch funktioniert, aber veraltet ist und in einer zukünftigen Version von Pearl gar nicht mehr gehen wird. Dann wird aus der Warnung ein harter Fehler werden ...
Ich glaube, das ist jetzt passiert! Habe deswegen einen neuen Thread aufgemacht: https://forum.fhem.de/index.php/topic,78034.0.html

sfancy

Ich habe die Warnung auch seit längerer Zeit.
2018.04.15 11:22:55 1: PERL WARNING: Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/^desired-temp@{ <-- HERE $DEVICE.'_Clima'}$/ at ./FHEM/33_readingsGroup.pm line 1383.
2018.04.15 11:22:55 1: PERL WARNING: Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/^controlMode@{ <-- HERE $DEVICE.'_Clima'}$/ at ./FHEM/33_readingsGroup.pm line 1383.


Die Definition dazu ist:
defmod Einzelne_Heizkoerper readingsGroup <%sani_heating@black>,<Ist>,<Soll>,<Ventil>,<Mode>,<Set>,<Batterie>,<Aktiv> model=HM-CC-RT-DN:FILTER=chanNo=^$:measured-temp,desired-temp,actuator,controlMode@{$DEVICE.'_Clima'},desired-temp@{$DEVICE.'_Clima'},state,batteryLevel,Activity
attr Einzelne_Heizkoerper commands {'desired-temp'=>'desired-temp:', 'state.CMDs_pending'=>'set $DEVICE burstXmit'}
attr Einzelne_Heizkoerper nameStyle style="font-weight:bold"
attr Einzelne_Heizkoerper notime 1
attr Einzelne_Heizkoerper room Heizkoerper
attr Einzelne_Heizkoerper valueColumns {'Set'=>'colspan="2"'}
attr Einzelne_Heizkoerper valueFormat {\
  if($READING =~ /temp/ && $VALUE =~ /(\d+)/)\
  {\
    return sprintf('%.1f °C', $VALUE);;\
  }\
  elsif($READING =~ /actuator/ && $VALUE =~ /(\d+)/)\
  {\
    return sprintf('%.0f %%', $VALUE);;\
  }\
  elsif($READING =~ /battery/ && $VALUE =~ /(\d+)/)\
  {\
    return '0' if($VALUE =~ /(\d+)/ && $VALUE < 2.1);;\
    return '25' if($VALUE =~ /(\d+)/ && $VALUE < 2.3);;\
    return '50' if($VALUE =~ /(\d+)/ && $VALUE < 2.5);;\
    return '75' if($VALUE =~ /(\d+)/ && $VALUE < 2.7);;\
    return '100' if($VALUE =~ /(\d+)/ && $VALUE >= 2.7);;\
    return '100' if($VALUE eq 'ok');;\
  }\
}
attr Einzelne_Heizkoerper valueIcon {\
  'state.CMDs_done' => '&nbsp;; &nbsp;; &nbsp;; &nbsp;;',\
  'state.CMDs_pending' => 'hourglass',\
  'state.CMDs_processing...' => 'refresh',\
  'batteryLevel.100' => 'measure_battery_100@green',\
  'batteryLevel.75' => 'measure_battery_75@green',\
  'batteryLevel.50' => 'measure_battery_50@green',\
  'batteryLevel.25' => 'measure_battery_25@darkorange',\
  'batteryLevel' => 'measure_battery_0@red',\
  'Activity.alive' => 'it_wifi@green',\
  'Activity.dead' => 'it_wifi@red',\
  'Activity' => 'it_wifi@darkorange'\
}
attr Einzelne_Heizkoerper valueStyle {\
  if($READING eq 'measured-temp' && $VALUE =~ /(\d+)/)\
  {\
    if($VALUE > 23) { 'style="color:red"' }\
    elsif($VALUE > 21.5) { 'style="color:darkorange"' }\
    elsif($VALUE > 20) { 'style="color:green"' }\
    elsif($VALUE <= 20) { 'style="color:blue"' }\
  }\
}


Problem ist die laut Doku vorgesehene "unescaped" Nutzung der geschweiften Klammer im Regex. Aus der Doku: "Regex kann die Form <regex>@{perl} haben, um Readings von einem anderen Gerät zu verwenden".

Ich habe etwas nachgeforscht. Laut https://unix.stackexchange.com/questions/238539/automake-error-unescaped-left-brace-in-regex-is-deprecated ist das seit Perl v5.22 deprecated und ab Perl v5.26 ein Syntax Error.

Geht dem Problem schon jemand nach?

th1984

Sorry wenn ich dieses alte Thema wieder hoch hohle, aber gibt es dazu schon eine Lösung oder einen Workaround? Zumindest schmiert mir FHEM jetzt jedesmal ab, wenn ich eine Aktion in der ReadingsGroup mache. Anzeige etc. funktioniert einwandfrei.

In der Definition habe ich:
time1@{("dy_".$DEVICE)}

Die Fehlermeldung aus dem Log:

Unescaped left brace in regex is illegal here in regex; marked by <-- HERE in m/^time1@{ <-- HERE ("dy_".$DEVICE)}$/ at ./FHEM/33_readingsGroup.pm line 1383

Oder soll ich nun einfach Perl downgraden?

th1984