考虑这个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。
答案 0 :(得分:6)
您似乎认为<>
仍然会在换行时停止读取,即使您更改了输入记录分隔符。
您的输入包含61 20 62 0D 0A 63
或a␠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
。