【问题标题】:Any sequence of \r or \n as a line separator?任何 \r 或 \n 序列作为行分隔符?
【发布时间】:2014-06-30 21:27:07
【问题描述】:

我正在维护一个 Perl 脚本(Linux 上的 Perl 5.10),它需要逐行处理文件,同时在行分隔符方面尽可能灵活。任何换行符和/或回车符的序列都应该标记一行的结尾。文件中的空行不重要。例如,所有这些都应该产生两行:

FOO\nBAR        FOO\rBAR
FOO\r\nBAR      FOO\n\rBAR
FOO\r\n\r\r\r\n\n\nBAR

似乎无法通过PerlIO 或设置$/ 获得此行为。文件不大,所以我想我可以将整个文件读入内存,然后用正则表达式拆分它。在 Perl 中是否有更聪明的方法来做到这一点?

【问题讨论】:

标签: perl


【解决方案1】:

只需 slurp 文件并使用 split:

use strict;
use warnings;
use autodie;

use Data::Dump;

my @data = (
    "FOO\nBAR",
    "FOO\rBAR",
    "FOO\r\nBAR",
    "FOO\n\rBAR",
    "FOO\r\n\r\r\r\n\n\nBAR",
);

for my $filedata (@data) {
    dd $filedata;

    open my $fh, "<", \"$filedata";
    local $/;
    for my $line (split /[\n\r]+/, <$fh>) {
        print "   $line\n";
    }
}

输出:

"FOO\nBAR"
   FOO
   BAR
"FOO\rBAR"
   FOO
   BAR
"FOO\r\nBAR"
   FOO
   BAR
"FOO\n\rBAR"
   FOO
   BAR
"FOO\r\n\r\r\r\n\n\nBAR"
   FOO
   BAR

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    相关资源
    最近更新 更多