原始尝试的问题是$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与替换绑定.