2011-01-08 9 views
6

Ist es möglich, Teile eines Strings zu ersetzen, ohne eine ganz neue Variable zu erstellen?Perl String - Ersatzzeichen ohne eine neue Variable zu bilden

Im Moment mache ich es wie folgt aus:

$someString = "how do you do this"; 
$someString = s/how do/this is how/; 

Was ich versuche, die ursprüngliche Zeichenfolge ($ somestring) ist zu halten zu tun und ein paar Zeichen ersetzen können, ohne dass die ursprüngliche Zeichenfolge zu ändern. Ich bin mit Javascript besser vertraut und kann das in Ihrem Code so machen, ohne eine Variable erstellen/ändern zu müssen.

someString.replace(/how do/, "this is how") 

Jede Hilfe ist willkommen, vielen Dank

+1

möglich Duplikat [Perl: Verwenden Sie s/(Ersetze) und gebe einen neuen String zurück] (http://stackoverflow.com/questions/3440363/perl-use-s-replace-and-return-new-string) – daxim

Antwort

11

Hinweis ganz sicher, verstehe ich die Frage. Wenn Sie die ursprüngliche Zeichenfolge unverändert lassen möchten, müssen Sie eine neue Variable erstellen.

$newstring = $someString ; 
$newstring =~ s/how do/this is how/; 

Beachten Sie, dass der Betreiber =~ nicht =

hinaus Ich glaube, ich jetzt sehen, was Sie wollen - die geänderte Zeichenfolge zurück, anstatt eine Variable. Es wird einen Weg geben, dies in Perl 5.14 zu tun, aber mir ist derzeit kein Weg bekannt. Siehe Use the /r substitution flag to work on a copy unter The Effective Perler.

aktualisieren Die s///r functionallity ist seit einiger Zeit in Perl veröffentlicht worden. Sie können Sie

use 5.14.0 ; 
my $someString = "how do you do this"; 
say ($someString =~ s/how do/this is how/r) ; 
+0

Ich denke, er könnte etwas wie 'print $ someString = wollen ~ s/wie// wie//, aber ohne '$ someString' zu berühren. – marcog

+0

Gute Arbeit bei der Erwähnung der neuen/r-Flag, ich denke, das wird eine noch bessere Ergänzung zu Perl5 als die intelligente Übereinstimmung ~~ –

+0

Ja, ich wollte nur die geänderte Zeichenfolge zurückgeben, anstatt eine Variable zu ändern. Gut zu sehen, dass dies bald möglich sein wird. –

0

tun Lambda auch verwenden kann, das heißt:

sub { local $_ = shift; s/how do/this is how/; $_ }->($someString) 

Dies auch $_ bei bewahrt rufen Sie die Lambda als Unter { }->($_)

Verwandte Themen