7

トークン化を制御するために単一の Perl 正規表現文字クラスを使用する必要がある解析環境 (Marpa::R2::Scanless) があります。既存の文字クラスのいずれにも適合しないと思われるものをトークン化する必要があります。それで、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;

ヒント、ヒント、トリック、または提案はありますか?

4

1 に答える 1

7

サブIsWowとプロパティに名前を付けますMagic::IsWow

perlunicodeのユーザー定義文字プロパティの引用:

名前が「In」または「Is」で始まるサブルーチンを定義することにより、独自のバイナリ文字プロパティを定義できます。

于 2013-07-16T10:28:05.023 に答える