FHEM Forum

FHEM => Automatisierung => Perl für FHEM-User => Thema gestartet von: juemuc am 02 März 2023, 12:19:37

Titel: [gelöst] Werte ersetzen
Beitrag von: juemuc am 02 März 2023, 12:19:37
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
Titel: Antw:Werte ersetzen
Beitrag von: frober am 02 März 2023, 12:43:53
Was genau ist dein Ziel?

So kann das nicht funktionieren, da '$EVTPART0' nicht in $EVENT enthalten ist. Nur der Inhalt der Variablen ist enthalten.
Titel: Antw:Werte ersetzen
Beitrag von: Beta-User am 02 März 2023, 12:49:34
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?
Titel: Antw:Werte ersetzen
Beitrag von: juemuc am 02 März 2023, 12:59:20
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
Titel: Antw:Werte ersetzen
Beitrag von: Beta-User am 02 März 2023, 13:57:46
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}{};
Titel: Antw:Werte ersetzen
Beitrag von: juemuc am 02 März 2023, 14:09:56
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

Titel: Aw: [gelöst] Werte ersetzen
Beitrag von: Torxgewinde am 13 Juni 2023, 21:35:15
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";