Perl也替换了换行符

Ibr*_*ish 0 regex perl

我有一个文本文件,其内容如下:

a b
c
Run Code Online (Sandbox Code Playgroud)

我使用下面的Perl代码替换输入行中出现空格char的下划线' - 'char:

while (<>) {
   $_ =~ s/\s/_/;
   print $_;
}
Run Code Online (Sandbox Code Playgroud)

我得到这样的输出:

a_b
c_
Run Code Online (Sandbox Code Playgroud)

所以我的问题是为什么Perl在换行符'\n'字符处替换下划线,这从包含'c'的输入行中可以看出?当我在代码中使用chomp时,它按预期工作.

Сух*_*й27 10

\s匹配所有空格字符[ \t\r\n\f],因此如果要替换普通空格,请使用空格

$_ =~ s/ /_/g;
# or just
s/ /_/g;
Run Code Online (Sandbox Code Playgroud)

翻译也可以用于这种简单的替换,例如. tr/ /_/;