独自のプロパティを作って正規表現置換してみる修行、ついでにコメントつきヒアドキュメントの試み
記号っぽいものを特定して置換しなければならない。おそらく、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/ ♠ ◊  /; $str =~ s{ \p{InUnauSymbol} }{-}xmsg; print encode_utf8($str), "\n"; __END__
cut_here では、行頭の空白と、「# の直前の空白」以降を削除する。これによってヒアドキュメントがちょっとは見やすくなってコメントも書ける。
実行結果。
[takeyuki@sunya ~]$ perl d.pl - - -
うまくいっているみたい。あとは InUnauSymbol にどんどんブロックや文字を追加していくだけだ。
追記
U+F8C5 は中黒じゃないかもしれない。てか違うよね。