首先,您甚至不尝试将 CRLF 更改为 LF。你只需打印出你得到的东西。
在 Windows 系统上,Perl 将:crlf
层添加到文件句柄中。这意味着 CRLF 在读取时更改为 LF,而 LF 在写入时更改为 CRLF。
最后一点是问题所在。默认情况下,Perl 假定您正在创建一个文本文件,但是您正在创建的内容与 Windows 上文本文件的定义不匹配。因此,您需要将输出切换为binmode
.
仅适用于 Windows 系统的解决方案:
use strict;
use warnings;
binmode(STDOUT);
open(my $fh, '<', 'file.txt') or die $!;
print while <$fh>;
或者,如果您希望它在任何系统上工作,
use strict;
use warnings;
binmode(STDOUT);
open(my $fh, '<', 'file.txt') or die $!;
while (<$fh>) {
s/\r?\n\z//;
print "$_\n";
}
在输入上没有 binmode,
- 在非 Windows 系统上,您将获得 CRLF for CRLF。
- 在 Windows 系统上,您将获得 LF for CRLF。
- 您将在所有系统上获得 LF for LF。
s/\r?\n\z//
处理所有这些。