是换行符,在perl中被视为空格

时间:2018-08-03 05:39:03

标签: perl

考虑这个perl班轮

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

perl.txt的内容是

a b
c

perlMod.txt的内容是

a
b
c

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

61200D0A620D0A630D0A

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

1 个答案:

答案 0 :(得分: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