2013-07-16 10 views
7

Mam środowisko parsowania (Marpa :: R2 :: Scanless), które musi używać pojedynczych klas znaków wyrażeń regularnych Perla do kontrolowania tokenizacji. Mam coś do tokena, które nie pasuje do żadnej z istniejących klas postaci. Po zapoznaniu się z dokumentacją perlunicode, wymyślam następujący kod, z tym że nie działa zgodnie z oczekiwaniami. Spodziewam się zobaczyć rząd kropek przeplatany wszystkimi nie-alfanumerycznymi (z wyjątkiem parenów). Zamiast tego dostaję błąd runtime o tym, że nie mogę znaleźć klasy znaków.Niestandardowa klasa znaków w Perlu 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; 

Wszelkie wskazówki, porady, porady lub sugestie?

Odpowiedz

7

Podaj nazwę sub IsWow i właściwość Magic::IsWow.

Cytowanie User-Defined Character Properties in perlunicode:

Można zdefiniować własne właściwości znaków binarnych poprzez określenie podprogramów, których nazwy zaczynają się od „W” lub „jest”.

+0

Dzięki. To niesamowite, jak niewiele takich ułamków może się przebić przez pęknięcia w podnieceniu. – PWBENNETT

Powiązane problemy