我有一个 perl 脚本,它解析一个文本文件并将每行分解成一个数组。
当每行都由 LF 终止时,它工作正常,但当它们由 CR 终止时,我的脚本无法正确处理。
如何修改此行以解决此问题
my @allLines = split(/^/, $entireFile);
编辑:
我的文件混合了以下任一行
结束 LF 或结束 CR 它只是在以 CR 结尾时折叠所有行
最佳答案
Perl 可以使用内置的 :crlf
处理 CRLF 和 LF 行尾。 PerlIO层:
open(my $in, '<:crlf', $filename);
将自动将 CRLF 行尾转换为 LF,并保持 LF 行尾不变。但是只有 CR 的文件是个奇怪的人。如果您知道该文件仅使用 CR,那么您可以设置 $/至
"\r"
它将逐行读取(但不会将 CR 更改为 LF)。如果您必须处理未知行结尾的文件(甚至是单个文件中的混合行结尾),您可能需要安装 PerlIO::eol模块。然后你可以说:
open(my $in, '<:raw:eol(LF)', $filename);
它会在您读取文件时自动将 CR、CRLF 或 LF 行结尾转换为 LF。
另一种选择是设置
$/
至undef
,它将一口气读取整个文件。然后在 /\r\n?|\n/
上拆分它.但这假设文件足够小以适合内存。
关于perl - CR vs LF perl 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7534591/