Perl - 未知的行尾字符

时间:2013-02-08 11:59:29

标签: perl eol file-processing

我想逐行读取输入文件,但此文件的结尾字符未知

编辑器vim也不知道它,它将此字符表示为^A,并立即以新行中的字符开头。 perl也是如此。它试图加载所有行,因为它忽略了这些奇怪的行尾字符。

如何将此字符设置为perl的行尾?我不想为它使用任何特殊模块(因为我们的严格系统),我只想定义行尾的字符(可能在hex代码中)。

另一个选项是将文件转换为另一个文件,具有良好的行尾字符(替换它们)。我可以用一些简单的方法(输入文件中的sed之类的东西)来制作它吗?但是一切都需要在perl中完成。

有可能吗?

现在,我的阅读部分看起来像:

open (IN, $in_file);
$event=<IN>;   # read one line

1 个答案:

答案 0 :(得分:4)

你提到的^A字符是&#34;标题的开头&#34;字符。您可以将特殊的Perl变量$/设置为此字符。虽然,如果你希望你的代码可以被追随你的人(并使用另一个编辑器)阅读和编辑,我会做这样的事情:

use English;

local $INPUT_RECORD_SEPARATOR = "\cA" # 'start of heading' character

while (<>)
{
    chomp; # remove the unwanted 'start of heading' character
    print $_ . "\n";
}

来自Perldoc

  

$ INPUT_RECORD_SEPARATOR
  $ /

     

输入记录分隔符,默认为换行符。这会影响Perl关于&#34; line&#34;是

更多关于PerlMonks的special character escaping

哦,如果你愿意,你可以输入&#34;标题的开头&#34; VI中的字符,<插入模式下的 ,按 CTRL + V ,然后 CTRL + A < / KBD>。

编辑:根据Drt的建议添加local