Perl puede manejar tanto CRLF y LF el fin de línea con la incorporada en el :crlf
PerlIO capa:
open(my $in, '<:crlf', $filename);
convertirá automáticamente las terminaciones de línea CRLF a LF, y dejará las terminaciones de líneas LF sin cambios. Pero los archivos de solo CR son extraños. Si sabe que el archivo usa solo CR, puede establecer $/ en "\r"
y leerá línea por línea (pero no cambiará el CR a una LF).
Si tiene que tratar con archivos de terminaciones de línea desconocidas (o incluso terminaciones de línea mixtas en un único archivo), es posible que desee instalar el módulo PerlIO::eol. Entonces se puede decir:
open(my $in, '<:raw:eol(LF)', $filename);
y éste se convertirá automáticamente CR, CRLF, o los finales de línea LF LF en al leer el archivo.
Otra opción es establecer $/
en undef
, que leerá todo el archivo en un sorbo. Luego divídelo en /\r\n?|\n/
. Pero eso supone que el archivo es lo suficientemente pequeño como para caber en la memoria.
¿Es compatible con algo que '\ R' coincida? – tchrist
@tchrist, ¿te refieres a PerlIO :: eol? Es XS, y no he examinado de cerca el código, pero creo que solo maneja terminaciones de línea CR, LF y CRLF, pero eso cubre todos los archivos que he visto. – cjm