2013-07-16 30 views
7

我有一個解析環境(Marpa :: R2 :: Scanless),它需要使用單個Perl正則表達式字符類來控制標記化。我有東西來標記,似乎不適合任何現有的字符類。所以,在perlunicode文檔中進行了深入的研究之後,我想出了下面的代碼,除非它不像預期的那樣工作。我期望看到一排點與所有非字母數字(除了parens)交叉點。相反,我得到一個關於無法找到字符類的運行時錯誤。Perl中的自定義字符類5.018

#!/usr/bin/env perl 

use 5.018; 
use utf8; 

local $| = 1; 

for my $i (map { chr($_) } 32 .. 127) { 
    if ($i =~ /\p{Magic::Wow}/) { 
     print $i; 
    } 
    else { 
     print "."; 
    } 
} 

package Magic; 

sub Wow { 
    return <<'MAGIC'; 
+utf8::Assigned 
-utf8::Letter 
-utf8::Number 
-0028 
-0029 
MAGIC 
} 

1; 

任何提示,提示,技巧或建議?

回答

7

命名子IsWow和屬性Magic::IsWow

報價User-Defined Character Properties in perlunicode

您可以通過定義子程序,其名稱以「in」或「是」來定義自己的二進制字符屬性。

+0

謝謝。令人驚喜的是,這樣的小片段可以通過興奮中的裂縫滑落。 – PWBENNETT