设置 $/="\R" 是否允许 chomp() 正确处理 perl 中的大多数文件?
Will setting $/="\R" allow chomp() to work correctly with most files in perl?
有谁知道设置 $/="\R";
是否会可靠地让 chomp() 做正确的事情,即删除一行中的任何行尾约定?
具体来说,我 运行 在 Windows 和 UNIX 上编写脚本,并且必须处理来自网络的文件,并且具有未知的行尾约定:MS-DOS、UNIX、 MacOS < 9,随便什么。
我最近偶然发现了“\R”,但我以前没有见过它。我认为这是新的。嗯,比 Perl 5.006 更新。 (已经有一段时间了。)
“\R”声称也可以使用 Unicode 换行符。我无法正确测试它。
谢谢。
-埃里克
我惊讶地发现 Whosebug 中实际上有一个 "newline" 标签。
Will setting $/='\R' allow chomp() to work correctly with most files in perl?
将 $/
设置为 '\R'
会将双字符序列 "\R"
视为换行符。
将 $/
设置为 "\R"
将导致关于 Unrecognized escape
.
的警告
\R
不是字符串,但仅在正则表达式的上下文中才有意义。但是 $/
的文档明确指出:
Remember: the value of $/
is a string, not a regex. awk has to be better for something. :-)
我刚才开玩笑创建了 Acme::InputRecordSeparatorIsRegexp
,但它确实为 $/
不能是正则表达式的限制提供了解决方法。使用0.04版本(刚刚上传),你可以说
use Acme::InputRecordSeparatorIsRegexp ':all';
open my $fh, '<:irs(\R)', 'file-with-ambiguous-line-endings.txt';
autochomp($fh,1); # or (tied *$fh)->autochomp(1)
@lines = <$fh>;
...
有谁知道设置 $/="\R";
是否会可靠地让 chomp() 做正确的事情,即删除一行中的任何行尾约定?
具体来说,我 运行 在 Windows 和 UNIX 上编写脚本,并且必须处理来自网络的文件,并且具有未知的行尾约定:MS-DOS、UNIX、 MacOS < 9,随便什么。
我最近偶然发现了“\R”,但我以前没有见过它。我认为这是新的。嗯,比 Perl 5.006 更新。 (已经有一段时间了。)
“\R”声称也可以使用 Unicode 换行符。我无法正确测试它。
谢谢。
-埃里克
我惊讶地发现 Whosebug 中实际上有一个 "newline" 标签。
Will setting $/='\R' allow chomp() to work correctly with most files in perl?
将 $/
设置为 '\R'
会将双字符序列 "\R"
视为换行符。
将 $/
设置为 "\R"
将导致关于 Unrecognized escape
.
\R
不是字符串,但仅在正则表达式的上下文中才有意义。但是 $/
的文档明确指出:
Remember: the value of
$/
is a string, not a regex. awk has to be better for something. :-)
我刚才开玩笑创建了 Acme::InputRecordSeparatorIsRegexp
,但它确实为 $/
不能是正则表达式的限制提供了解决方法。使用0.04版本(刚刚上传),你可以说
use Acme::InputRecordSeparatorIsRegexp ':all';
open my $fh, '<:irs(\R)', 'file-with-ambiguous-line-endings.txt';
autochomp($fh,1); # or (tied *$fh)->autochomp(1)
@lines = <$fh>;
...