2012-09-10 6 views
8

このコード:YAPE :: Regex ::使用5.014で動作しません。

use strict; 
use warnings; 
use YAPE::Regex::Explain; 
print YAPE::Regex::Explain->new(qr/d+/)->explain(); 

プリント

The regular expression: 

(?-imsx:d+) 

matches as follows: 

NODE      EXPLANATION 
---------------------------------------------------------------------- 
(?-imsx:     group, but do not capture (case-sensitive) 
         (with^and $ matching normally) (with . not 
         matching \n) (matching whitespace and # 
         normally): 
---------------------------------------------------------------------- 
    d+      'd' (1 or more times (matching the most 
          amount possible)) 
---------------------------------------------------------------------- 
)      end of grouping 
---------------------------------------------------------------------- 

しかし

use 5.014; #added this 
use strict; 
use warnings; 
use YAPE::Regex::Explain; 
print YAPE::Regex::Explain->new(qr/d+/)->explain(); 

プリントのみ、このコード:

The regular expression: 



matches as follows: 

NODE      EXPLANATION 
---------------------------------------------------------------------- 

何が悪いのでしょうか?

+0

私は、実際の答えを持っていないが、あなたは、[正規表現::デバッガ](http://search.cpan.org/perldoc?Regexp%3A%3ADebugger)を試してみましたか? – stu42j

+1

[unicode_stringsの機能](http://www.perl.com/pub/2011/06/new-features-of-perl-514-unicode-strings.html)と思われます。あなたは 'use feature" unicode_strings "で同じ動作をします; – stu42j

答えて

7

フィーチャーunicode_stringsは、どのパターンが作成されるかを変更します。

$ perl -le'no feature qw(unicode_strings); print qr/\d+/' 
(?^:\d+) 

$ perl -le'use feature qw(unicode_strings); print qr/\d+/' 
(?^u:\d+) 

YAPE::Regex::Explainは、メンテナンスが不足しているため、多くの新しい(とないので、新しい)機能を扱うことができません。これは、制限事項に記載されています。

私はそれは(それが(?-imsx:d+)代わりの(?^:\d+)を表示する理由を説明)re::regexp_patternを使用してフラグを取得し、それを知らない「u」フラグにチョーク賭けます。

$ perl -le'no feature qw(unicode_strings); print +(re::regexp_pattern(qr/\d+/))[1]' 


$ perl -le'use feature qw(unicode_strings); print +(re::regexp_pattern(qr/\d+/))[1]' 
u 
関連する問題