2012-09-14 12 views
5

Die Perl-doc heißt es:Wie verwendet man das Flag/r in Perl regex?

e Evaluate 'replacement' as an expression 
r Return substitution and leave the original string untouched. 

sind verfügbar Flaggen in Ersatzmuster verwendet werden. Wenn ich das Flag r an mein Substitutionsmuster übergebe, wird es als Syntaxfehler interpretiert. Ich betreibe Perl 5.8.8. Ist es möglich, dass es in meiner Version von Perl nicht unterstützt wird? Kann jemand auch ein funktionierendes Beispiel für die Verwendung der Flagge und das Aufrufen des neu erstellten Ersatzes bereitstellen?

Antwort

15

Vielleicht sollten Sie die Dokumente für 5.8.8 dann lesen?/r wurde zu 5.14 hinzugefügt!

In 5.8.8, können Sie das Äquivalent tun von

s/foo/bar/r 

mit

do { (my $s = $_) =~ s/foo/bar/; $s } 

Beispielverwendungen von s /// r:

print "abba" =~ s/b/!/rg;   # Prints a!!a 

my $new = $old =~ s/this/that/r; # Leaves $old intact. 

my $trimmed = $val =~ s/^\s+//r =~ s/\s+\z//r; 
my $trimmed = (($val =~ s/^\s+//r) =~ s/\s+\z//r); # Same as previous 
+0

Könnten Sie zeige, wie es in 5.14 aufgerufen wird. Ich bin verwirrt darüber, wie es eine andere Variable zurückgibt, aber Sie müssen immer noch die Variable notieren, um es auszuführen. Zum Beispiel: $ var = ~ s/this/that/r; Wo wird die neue Variable gespeichert? – user1671989

+0

@ user1671989, Es wird zurückgegeben. «' Print "abc" = ~ s/b /!/Rg; '» druckt «' a! C' ». – ikegami

+0

Also, wenn es zurückgegeben wird, und ich nannte es wie $ var = ~ s/this/that/r; es würde tatsächlich überschreiben $ var? Wie kann ich es auf $ var ausführen und es an $ new_var zurückgeben? Tut mir leid, dass ich ein Noob bin, weil ich Schwierigkeiten habe, meinen Kopf darum zu wickeln. – user1671989