为什么我不能在字符串中替换所有字符串而是取回空字符串?

Jim*_*Jim 3 regex string perl replace

我试图用新线替换所有出现的回车,新线,但我不能.
尝试:my $new_string = $old_string =~ s/\r\n/\n/g
给空$new_sting.
这个:my $new_string = $old_string =~ s/\r\n$/\n/g 也没有给出一个空字符串.
我在这里搞砸了什么?

Dav*_*idO 5

原始尝试的问题是$old_string与替换运算符绑定(因此它是将被修改的变量),然后替换运算符的返回值将成为匹配成功的次数.该匹配计数被置于$new_string 如果匹配失败,则使用空字符串表示零计数.

您最初的尝试将在更新版本的Perl中正常工作/r,只需稍加修改即可支持修改器:

my $new_string = $old_string =~ s/\r\n/\n/gr;
Run Code Online (Sandbox Code Playgroud)

该修饰符触发替换运算符的"非破坏性"模式,并返回修改后的字符串而不是计数.所述/r改性剂在Perl 5.14引入,并且在描述perlop得到.

在旧版本的Perl中,括号可用于操作优先级:

( my $new_string = $old_string ) =~ s/\r\n/\n/g
Run Code Online (Sandbox Code Playgroud)

此语法my $new_string = $old_string首先计算,然后用于$new_string与替换绑定.