Grüße,
ich möchte folgende if-Abfrage im Perl-Modus verwenden. Dabei soll geprüft werden, ob das letzte Zeichen in "$Row" ein "}" ist.
if ($Row =~ /(\})$/) {$iContent_Start=$iContent;};
Ich erhalte den Fehler
right bracket without left bracket
Im Forum habe ich zum escapen die Varianten "\}" und "[}]" gefunden. Beides funktioniert nicht.
Liegt es überhaupt am Escape? oder wie muss ich das im DOIF im Perl-Modus schreiben?
Nur so als Idee, keine Ahnung obs auch kürzer geht.
Erstmal das letzte Zeichen ermitteln und dann abfragen ob es eine } ist ?
{my $Row ="bla}";;$Row=~ /(.{1}$)/;;if ($1 eq "}") {return "bla"}}
Gruß
Thomas
Ich glaube ich hatte so ein Problem auch mal in den userReadings mit einer bestimmten Konstellation aus geschweiften Klammern. Ich habe damals vermutet, dass es am FHEM-Perl-Preparser liegt, aber habe es dann irgendwie umgangen weil ich keinen soliden Bug-Report hinbekommen habe.
Ansonsten vielleicht mal mit chr (https://perldoc.perl.org/functions/chr) versuchen um die Klammer zu maskieren.
Im DOIF-Perlmodus kann man solche Probleme umgehen, indem man den Code in eine Routine auslagert. Im subs-Block finden keine DOIF-Ersetzungen statt, dort herrscht reines Perl.
@TomLee,
in Deiner Zeile steht ja auch die Klammer "}" und damit taucht der Fehler auf. Aber die Idee habe ich benutzt.
@Christoph Morrison,
Die chr-Idee in TomLees Vorschlag eingebaut, funktioniert. Die Lösung sieht dann so aus:
{my $chrBRACKET=chr(125); $Row =~ /(.{1})$/; if ($1 eq $chrBRACKET) {$iContent_Start=$iContent;};};
@Damian,
Der Hinweis auf die DOIF-Ersetzungen und die chr-Variante brachten mich auf die Idee hex in die regex einzubauen. Das Zeichen ist dann ja nicht da. Diese Zeile funktioniert auch:
if ($Row =~ /(\x7D)$/) {$iContent_Start=$iContent;};
Danke für Antworten
PS: Das mit den subs muss ich mir mal anschauen.