【发布时间】:2012-09-11 13:28:17
【问题描述】:
在将字符串与正则表达式匹配后,我试图替换字符串中的whitespaces。
my $string = "watch download Buffy the Vampire Slayer Season 1 Episode 1 Gorillavid";
if ($string =~ m!(Season\s\d+\sEpisode\s\d+)!){
$1 =~ s!\s+!!g;
say $1;
}
现在当我运行上面的代码时,我得到了Modification of a read-only value attempted。现在,如果我将 $1 的值存储在一个变量中,而不是尝试对该变量执行替换,它就可以正常工作。
那么,有什么方法可以在不创建新临时变量的情况下就地执行替换。
PS:有人可以告诉我如何将上面的代码写成单行代码,因为我不能:)
【问题讨论】:
-
你期待什么结果?只是“Season1Episode1”,没有其他字符串?
-
你不能只做
say s!\s+!!g;吗? -
@qnan 那只会说 1。您可以使用
/r修饰符,尽管这需要 v5.14。此外,您需要将值放入另一个变量中。