2011-01-08 25 views
6

Bir dizinin parçalarını tamamen yeni bir değişken oluşturmak zorunda kalmadan değiştirmek mümkün mü?Perl String - Değiştirme Yeni bir değişken oluşturmadan karakterler

Şu anda böyle yapmak:

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

Ne yapmaya çalışıyorum orijinal dize ($ someString) tutmak ve özgün dize değiştirmeden birkaç karakter yerine muktedir olduğunu. Javascript ile daha yakından tanıyorum ve bunu bir değişken oluşturmak/değiştirmek zorunda kalmadan kodunuzda yapabilirsiniz. Herhangi bir yardım takdir

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

, teşekkür

+1

mümkün kopyası olarak lambda çağrı (değiştir) ve yeni dizgi döndürün] (http://stackoverflow.com/questions/3440363/perl-use-s-replace-and-return-new-string) – daxim

cevap

11

Not oldukça emin bir sürü ben soruyu anlamadım. Orijinal dizeyi değiştirmeden bırakmak isterseniz, yeni bir değişken oluşturmanız gerekir. Değiştirilen dize döndürür yerine bir değişken değiştirmek için - operatörü ben şimdi ne istediğinizi görüyorum =~ değil =

eklenmesi olduğunu

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

Not. Bunu Perl 5.14'te yapmanın bir yolu olacak ama şu an bir yolun farkında değilim. The Effective Perler numaralı telefondan Use the /r substitution flag to work on a copy'a bakın.

Güncelleme s///r işlevselliği bir süre için serbest Perl içinde olmuştur. Eğer

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

Sanırım bir şey gibi isteyebilir print $ someString = ~// nasıl yapılıyor/budur, ancak '$ someString''e dokunmadan. – marcog

+0

Yeni/r bayrağından bahsetmekle ilgili iyi bir iş, sanırım akıllı bir maçtan daha iyi bir şekilde Perl5'e geçecek diye düşünüyorum ~~ –

+0

Yea, sadece bir değişkeni değiştirmek yerine değişen dizgiyi döndürmek istiyordum. Bunu görmek güzel, yakında yetenekli olacak. –

0

Ayrıca lambda kullanabilir yapabilir, yani:/Kullanım s:

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

Bu aynı zamanda durumunda $_ korur Perl [alt { }->($_)

İlgili konular