2011-01-08 3 views
6

Возможно ли заменить части строки без создания целой новой переменной?Perl String - Заменить символы без формирования новой переменной

Прямо сейчас я делаю это так:

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

То, что я пытаюсь сделать, это сохранить исходную строку ($ SomeString) и быть в состоянии заменить несколько символов, не изменяя исходную строку. Я больше знаком с Javascript, и я могу сделать это в вашем коде без необходимости создавать/изменять переменную.

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

Любая помощь приветствуется, спасибо большое

+1

возможный дубликат [Perl: Использование s/(замените) и верните новую строку] (http://stackoverflow.com/questions/3440363/perl-use-s-replace-and-return-new-string) – daxim

ответ

11

Примечание вполне уверен, что понял вопрос. Если вы хотите оставить исходную строку неизменной, вам нужно создать новую переменную.

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

Обратите внимание, что оператор =~ не =

дополнение Я думаю, теперь я понимаю, что вы хотите - вернуть измененную строку, а не изменять переменную. В Perl 5.14 есть способ сделать это, но в данный момент я не знаю, как это сделать. См. Use the /r substitution flag to work on a copy по адресу The Effective Perler.

Update s///r Функция добавления в выпущенном Perl в течение некоторого времени. вы можете сделать

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

Думаю, он может захотеть что-то вроде 'print $ someString = ~ s/how do/this, как /; 'но не касаясь' $ someString'. – marcog

+0

Хорошая работа по упоминанию нового флага/r, я думаю, что это будет еще лучшее дополнение к Perl5, чем умное соответствие. ~~ –

+0

Да, я просто хотел вернуть измененную строку, а не изменять переменную. Приятно видеть, что скоро это будет возможно. –

0

Вы также можете использовать лямбда, то есть:

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

Это также сохраняет $_ в случае, если вы звоните лямбда как к югу { }->($_)

Смежные вопросы