在EOL标记处分割线条时出现奇怪的警告

时间:2014-10-14 21:01:23

标签: regex perl

当我运行以下代码时,我得到了预期的输出 - 四条单独的行。当我取消注释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";
}

2 个答案:

答案 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