独自のプロパティを作って正規表現置換してみる修行、ついでにコメントつきヒアドキュメントの試み

記号っぽいものを特定して置換しなければならない。おそらく、Perl で定義されているユニコードプロパティとは一致しない。そこで独自にプロパティを作ってみることにした。ついでに、ヒアドキュメントを見やすく、かつコメントもつけられるように試みた。ユーザ定義プロパティについてはperlunicode - Perl における Unicode サポート - perldoc.jpを参考に。

use strict;
use warnings;
use utf8;
use Encode;

# an utility function                                                           
sub cut_here {
    my ($lines) = @_;
    $lines =~ s{ ^[ ]+ }{}xmsg;
    $lines =~ s{ [ ]+ \# .* $}{}xmg; # (?-s)                                    
    $lines;
}

# an original property                                                          
sub InUnauSymbol {
    return cut_here <<"EOD";
      +utf8::InGeometricShapes      # U+25A0 -                                  
      +utf8::InMiscellaneousSymbols # U+2600 -                                  
       f8c5 #  nakaguro                                                         
EOD
}

my $str = q/  &#9824;    &#9674;    &#63685;     /;

$str =~ s{ \p{InUnauSymbol} }{-}xmsg;
print encode_utf8($str), "\n";

__END__

cut_here では、行頭の空白と、「# の直前の空白」以降を削除する。これによってヒアドキュメントがちょっとは見やすくなってコメントも書ける。

実行結果。

[takeyuki@sunya ~]$ perl d.pl
  -   -    -

うまくいっているみたい。あとは InUnauSymbol にどんどんブロックや文字を追加していくだけだ。

追記

U+F8C5 は中黒じゃないかもしれない。てか違うよね。