换行符被视为perl中的空格

aji*_*.mk 0 perl

考虑这个perl one liner

perl -e "$\=qq{\n};$/=qq{ };while(<>){print;}" "perl.txt" > perlMod.txt
Run Code Online (Sandbox Code Playgroud)

perl.txt的内容是

a b
c
Run Code Online (Sandbox Code Playgroud)

perlMod.txt的内容是

a
b
c
Run Code Online (Sandbox Code Playgroud)

以十六进制表示的perlMod.txt的内容是

61200D0A620D0A630D0A
Run Code Online (Sandbox Code Playgroud)

请注意,我已将空间指定为输入记录分隔符,并将"\n"指定为默认输出记录分隔符.我期待b之后的两个'0D0A(十六进制为62).一个0D0A是b之后的新行.另一个0D0A属于输出记录分隔符.为什么只有一个0D0A.

ike*_*ami 6

<>即使您更改了输入记录分隔符,您似乎仍然认为仍然会停止读取换行符.


您的输入包含61 20 62 0D 0A 63a?b??c.

第一次阅读a?.

你打印a?.
为此,$\得到补充,给予a??.
然后:crlf做翻译,给予a???.

文件中没有其他空格,因此您的第二次读取将读取文件的其余部分:b??c.
然后:crlf做翻译,给予b?c.

你打印b?c.
为此,$\得到补充,给予b?c?.
然后:crlf做翻译,给予b??c??.

所以,总而言之,你得到a???b??c??,或者61 20 0D 0A 62 0D 0A 63 0D 0A.