Perl 5.018中的自定义字符类

7
我有一个解析环境(Marpa::R2::Scanless),需要使用单个Perl正则表达式字符类来控制标记化。我有一些要标记化的内容,它似乎不符合现有的任何字符类。因此,在perlunicode文档中查找后,我想出了以下代码,但它并没有按预期工作。我期望看到一排点与所有非字母数字(括号除外)交错。相反,我得到了一个关于无法找到字符类的运行时错误。
#!/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;

有什么提示、技巧、窍门或建议吗?

1个回答

7

将子属性命名为IsWow,并将属性命名为Magic::IsWow

引用perlunicode中的用户定义字符属性

您可以通过定义以"In"或"Is"开头的子例程来定义自己的二进制字符属性。


谢谢。令人惊讶的是,在兴奋中,这样的小片段竟然会被忽略。 - PWBENNETT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接