regex / ms表现不如预期的perl 5.8.8

时间:2012-06-27 17:01:24

标签: perl

我在5.8.8上有一个失败的测试,我不明白为什么,尤其是当它在更新的版本中工作时(也许它只是一个bug)(这里是一个link to the full code

use strict;                                                                                                          
use warnings;                                                                                                        
use Test::More;                                                                                                      

my $fname = 'Fo';                                                                                                    

my $content = do { local $/ ; <DATA> };                                                                             
like $content, qr/^$fname $/xms, q[includes first name];                                                             

done_testing;                                                                                                        
__DATA__                                                                                                             
use strict;                                                                                                          
use warnings;                                                                                                        
use Test::More;                                                                                                      

# generated by Dist::Zilla::Plugin::Test::PodSpelling bootstrapped version                                           
eval "use Test::Spelling 0.12; use Pod::Wordlist::hanekomu; 1" or die $@;                                            

add_stopwords(<DATA>);
all_pod_files_spelling_ok('bin', 'lib');
__DATA__
Fo
oer
bar

在所有最新版本的perl上运行正常。但是在5.8.8中,测试失败了。我发现通过删除代码的^$,它就像Perls正则表达式引擎忽略了/mthe documentation表示支持它。

为什么这不起作用?什么是最正确的修复方法? (注意:我认为测试应该检查这些元素是否在一条线上)

1 个答案:

答案 0 :(得分:3)

这是错误RT#7781。它固定在5.8.9和5.10.0。

解决方法:

  • qr/^/m相当于qr/(?:^|(?<=\n))/
  • qr/$/m相当于qr/(?=\n|\z)/