Hallo,
ich versuche in einer Variablen Werte zu ersetzen. Leider ohne Erfolg. Wer kann helfen?
Ich möchte aus der Variablen $EVENT den Teil $EVTPART0 löschen.
Hier meine Definition:
my $Info=$EVENT;
$Info=~ s/$EVTPART0//
In $Info steht aber weiterhin $EVENT komplett.
Viele Grüße
Jürgen
Was genau ist dein Ziel?
So kann das nicht funktionieren, da '$EVTPART0' nicht in $EVENT enthalten ist. Nur der Inhalt der Variablen ist enthalten.
Bezugnehmend auf https://forum.fhem.de/index.php/topic,132472.msg1266265.html#msg1266265: Falls du $EVENT selbst splittest, musst du auf das Array-Element verweisen.
my $Info=$EVENT;
my @EVTPART = split m{ },$EVENT;
$Info=~ s{$EVTPART[0]}{}x
Steht nichts im Log?
Ich möchte ja nicht selbst splitten. Ich möchte einfach das was in $EVTPART0 steht aus $EVENT löschen.
Im log steht nichts.
Mit
my $Info=$EVENT;
$Info=~ s/[$EVTPART0]//g;
wird zuviel gelöscht. Ohne den Parameter g nur das erste Zeichen aus $EVTPART0 :-[
Allgemein geht es darum, aus der Zeichenkette in "VAR1" die Zeichenkette aus "VAR2" zu löschen (nur das erste vorkommen).
Viele Grüße
Jürgen
Kannst du das ganze mal im Zusammenhang zeigen? Ist das ein notify-DEF?
Vielleicht zum Hintergrund: fhem.pl macht vorab eine Text-Erstetzung mit den $EVENT(-Bestandteilen), das sind (jedenfalls nach meinem begrenzten Verständnis) keine echten Variablen. Es kann also durchaus sein, dass das "anders" interpretiert wird, als man das bei Perl an sich annehmen würde.
Vielleicht klappt das hier:
my $Info=$EVENT;
my $del=$EVTPART0;
$Info=~ s{$del}{};
Ich habe das Problem gelöst. In $EVTPART0 war ein "+" enthalten. Dadurch wurde der String nicht korrekt interpretiert. Wenn die Variable kein "Perl-Sonderzeichen" enthält, funktioniert es sofort.
Ich muss also das "+" vorher durch \+ ersetzen.
Trotzdem Danke für Eure Unterstützung.
Viele Grüße
Jürgen
Nicht immer kann man vorher die Sonderzeichen händisch escapen. Dafür gibt es eine praktische Funktion quotemeta() (https://perldoc.perl.org/functions/quotemeta):
my $EVENT = "Dies ist ein BeispielDasweg+gutso?Text";
my $EVTPART0 = "Dasweg+gutso?";
my $Info = $EVENT;
my $escaped_EVTPART0 = quotemeta($EVTPART0);
$Info =~ s/$escaped_EVTPART0//;
print "Ursprünglicher Wert von \$EVENT: $EVENT\n";
print "Wert von \$EVTPART0: $EVTPART0\n";
print "Ergebnis von \$Info nach der Substitution: $Info\n";