hi, ich brauch mal einen Tip: ich habe eine Zeichenkette die spezielle Muster mit Variablennamen enthält. diese möchte ich durch den WERT der Perl-variablen ersetzen. Bsp: my $TEST = 5; my $sampleText ="x = <\$TEST>\n"; # ... print $sampleText; ausgegeben werden soll: x = 5 versucht habe ich es mit: $sampleText =~ s/\<(.*?)\>/\1/eg; da wird statt 5 eine Scalarreferenz ausgegeben. dereferenziere ich diese mit: $sampleText =~ s/\<(.*?)\>/${\1}/eg; wird ausgegeben x = 1 hat jemand einen Tip warum und wie es richtig geht? im nächsten Schritt will ich das $-Zeichen aus dem template-Text haben also my $TEST = 5; my $sampleText ="x = <TEST>\n"; $sampleText =~ s/\<(.*?)\>/${\$\1}/eg; print $sampleText; hier habe ich das Problem, dass der reguläre ausdruck, bzw die Evaluation des Ersetzugnsstrings abbricht. Ich schaff es nicht das $ Zeichen, was ja dem gefunden String vorangestellt werden muss zu escapen. Hier wäre ich auch für einen Hinweis dankbar. Gruß Vlad
Hi, Pattern: /\<(.*?)\>/ Würde aus x = <$TEST>, x = 123 ergeben. Oder verstehe ich dein Problem falsch? $ musst du mit \\ escapen, da $ für das Ende des Strings steht.
Archie F..... schrieb: > Pattern: /\<(.*?)\>/ Würde aus x = <$TEST>, x = 123 ergeben. wiso? das Pattern matcht auf <$TEST> und liefert in \1 den String "$TEST" dieser soll zu dem Variableinhalt evaluiert werden. und das ganze gematchte pattern ersetzen So dass x = 5 rauskommt. quasi: $sampleText =~ /\<(.*?)\>/; my $temp = eval($1); $sampleText =~ s/\<.*?\>/$temp/; in einem Rutsch. Da das ganze beliebig oft in meinem Inputstring vorkommen kann muss das in einem Rutsch passieren, da sonst auch noch in einer Schleife gemacht werden muss. quasi: while($sampleText =~ /\<(.*?)\>/) { my $temp = eval($1); $sampleText =~ s/\<.*?\>/$temp/; } > Oder > verstehe ich dein Problem falsch? Ich glaube schon Archie F..... schrieb: > $ musst du mit \\ escapen, da $ für das Ende des Strings steht. im pattern selbst, aber doch nicht im zu durchsuchenden Text, oder beziehst du dich auf mein 2. Problem? mit 2 back slashes hab ich es in der Tat noch nicht probiert.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.