Я решил более общую проблему, которая может быть полезна здесь:
Как анализировать большой файл построчно с любым разделителем строк (CR / CRLF / LF), но заранее неизвестным.
«Большой» файл означает, что нельзя читать весь файл в одну переменную.Здесь функция 'detectEndOfLine' получает имя файла и возвращает либо '\ r', либо '\ n', независимо от того, что используется для окончания строки (она искала символ '\ r' или '\ n' char-by-char, начиная сконец файла).
my $file = "test.txt";
local $/ = detectEndOfLine($file);
open(IN, $file) or die "Can't open file \"$file\" for reading: $!\n";
while(<IN>) {
s/\r\n|\n|\r$//;
print "$_\n";
}
sub detectEndOfLine {
my $file = $_[0];
my $size = -s $file;
print "\"$size\"\n";
open(IN, $file) or die "Can't open file \"$file\" for reading: $!\n";
for(my $i = $size; $i >= 0; --$i) {
seek(IN, $i, 0);
$_ = <IN>;
my $sym = substr($_, 0, 1);
return $sym if( $sym eq "\n" or $sym eq "\r" );
}
return undef;
}