Perl String - Замена символов без формирования новой переменной - PullRequest
8 голосов
/ 08 января 2011

Можно ли заменить части строки, не создавая совершенно новую переменную?

Сейчас я делаю это так:

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

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

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

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

Ответы [ 2 ]

15 голосов
/ 08 января 2011

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

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

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

сложение Думаю, теперь я вижу, что вы хотите - возвращать измененную строку, а не изменять переменную. Будет способ сделать это в Perl 5.14, но в настоящее время я не знаю, как это сделать. См. Используйте флаг подстановки / r для работы с копией в The Effective Perler .

Обновление Функциональность s/ / /r уже давно выпущена в Perl. Вы можете сделать

use 5.14.0 ;
my $someString = "how do you do this";
say ($someString =~ s/how do/this is how/r) ;
0 голосов
/ 31 января 2014

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...