我正在尝试读取只有CR作为行分隔符的文件.我正在使用Mac OS X和Perl v.5.8.8.对于每种行分隔符(CR,LF,CRLF),此脚本应在每个平台上运行.
我目前的代码如下:
open(FILE,"test.txt"); while($record = <FILE>){ print $record; } close(TEST);
目前只打印最后一行(或最差).到底是怎么回事?
很明显,我想不转换文件.可能吗?
解决方法
您可以使用特殊变量$/设置分隔符:
local $/ = "\r" # CR,use "\r\n" for CRLF or "\n" for LF my $line = <FILE>;
有关详细信息,请参见perldoc perlvar.
另一种适用于各种换行符的解决方案是立即对整个文件进行啜食,然后使用正则表达式将其拆分为多行:
local $/ = undef; my $content = <FILE>; my @lines = split /\r\n|\n|\r/,$content;
但是,对于非常大的文件,您不应该这样做,因为文件完全被读入内存.请注意,将$/设置为未定义的值会禁用行分隔符,这意味着在文件结束之前一直读取所有内容.