当我运行以下代码时,我得到了预期的输出 - 四条单独的行。当我取消注释use warnings
行时,我会打印出一条消息:
无法识别的转义
\R
在./regex.pl
第13行传递。
这是什么意思?我在搜索该消息时找不到多少但该程序似乎有效(换句话说,转义\R
已被识别)。
我正在使用Perl 5.8.8
#!/usr/bin/perl
use strict;
#use warnings;
my $txt = <<EOF;
dddddddddddddddd
eeeeeeeeeeeeeeee
ffffffffffffffff
gggggggggggggggg
EOF
my @tarr = split(/\R/, $txt);
foreach my $t (@tarr )
{
print $t . "\n";
}
答案 0 :(得分:5)
\R
是在Perl v5.10中引入的。
因此,您的脚本实际上并没有分割线条,因为您要查看是否在每条&#34;线条周围放置了文字&#34;或者只是计算数组中的结果:
#!/usr/bin/perl
use strict;
use warnings;
my $txt = <<'EOF';
dddddddddddddddd
eeeeeeeeeeeeeeee
ffffffffffffffff
gggggggggggggggg
EOF
foreach my $t (split /\R/, $txt ) {
print "<$t>\n";
}
在Perl v5.8.9下运行时的输出:
Unrecognized escape \R passed through at e.pl line 12.
<dddddddddddddddd
eeeeeeeeeeeeeeee
ffffffffffffffff
gggggggggggggggg
>
您可以在perl5100delta #Regular-expressions
中阅读相关内容
纵横空格和换行
正则表达式现在分别识别与垂直和水平空白匹配的
\v
和\h
转义符。\V
和\H
在逻辑上匹配其补充。
\R
匹配通用换行符,即垂直空格,加上多字符序列"\x0D\x0A"
。
答案 1 :(得分:0)
perl中插值字符串中的特殊序列 - 包括正则表达式由\
标记
例如\n
是换行符,\t
是标签
\R
并不代表任何特殊内容,因此perl会警告您
\r
是回车
更新:刚检查了perlrebackslash,显然\ R是&#34; \ R Generic新行。不在[]。&#34;在regexps中似乎是perl 5.10中的新功能所以如果你的perl比那个旧了....请查看perl -v