设置$/="\ R"是否允许chomp()与perl中的大多数文件一起正常工作?

Eri*_*ett 4 regex perl newline

有没有人确切知道设置$/="\R";是否可靠让chomp()做正确的事情,即删除行上的任何行尾约定?

具体来说,我在Windows和UNIX上运行脚本,并且必须处理来自网络的文件,并且具有未知的行尾约定:MS-DOS,UNIX,MacOS <9,等等.

我最近偶然发现了"\ R",但我之前没见过.我认为这是新的.嗯,比Perl 5.006更新.(有一阵子了.)

"\ R"声称也会执行Unicode换行符.我没办法正确测试.

谢谢.

-Erik

我很惊讶地发现stackoverflow中实际上有一个"换行符"标记 .

Ste*_*ich 8

设置$/='\ R'是否允许chomp()与perl中的大多数文件一起正常工作?

设置$/'\R'将双字符序列"\\R"视为换行符.
设置$/"\R"将导致警告Unrecognized escape.

\R不是字符串,而是仅在正则表达式的上下文中有意义.但文件$/清楚地说明:

记住:值$/是字符串,而不是正则表达式.awk必须更好的东西.:-)

  • @Erik:请记住,如果你做'split'',$ _`,那么行终止符(以及任何尾随空格)将被删除.如果尾随任何类型的空格无关紧要,你也可以使用`s /\s +\z //`而不是`chomp`.最后,您可以安装[`PerlIO :: eol`](https://metacpan.org/pod/PerlIO::eol),这将允许您"打开我的$ fh",<:raw:eol(LF) ',$ file`之后*所有*行结尾将在输入流中显示为简单的`LF`.显然,必须明确选择输出文件的行终止符. (2认同)