perl - CR vs LF perl 解析

标签 perl

我有一个 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/

相关文章:

perl - Perl 的 "standard string comparison order"是什么?

windows - 为什么 Strawberry Perl 不调用我的 DllMain?

perl - 如何使用perl建立两个变量之间的关系,类似于代谢网络

linux - 从名称包含特定字符串的目录树中删除文件的最快方法

linux - 火狐 ("$linkurl");问题

perl - 从哪里开始学习 Mojolicious?

regex - Perl 正则表达式将多行转换为单行

Perl 将两个数字连接成另一个数字?

mysql - 找不到 DBI.pm,即使它在路径中

Perl 的 HTML::Element - 仅将后代转储为 HTML