Unicodeブロック使おうと思ってググってたら。
\p{InHalfwidthAndFullwidthForms} # 半角カナなど(※0-9とかA-Zにもマッチするみたい・・)
http://blog.livedoor.jp/sasata299/archives/51194035.html
あら、そうなんだ。
perldoc unicodeを読み直すと、Unicodeブロックを組み合わせてユーザー定義の文字プロパティ(User-Defined Character Properties)を作れると書いてあった。In/Isから始まる次のような関数を定義する。
package Hoge; sub InHankakuKana { return <<'END'; +utf8::InHalfwidthAndFullwidthForms -utf8::N -utf8::Ll -utf8::Lu END }
これで、Hoge::InHankakuKana を\p{}/\P{}に使えるようになる。
この定義では"-"から始まる部分で、数字と英語の大文字小文字を削除している(他の適切なブロックがあるかもしれないけど)。
my $str = "はひふへほハヒフヘホABC0-9とかA-Z"; my @m = $hoge =~m{(\p{InHalfwidthAndFullwidthForms})}g; print join " - ", @m; print "\n"; my @m = $hoge =~m{(\p{Hoge::InHankakuKana})}g; print join " - ", @m; print "\n";
結果は以下のようになる。
ハ - ヒ - フ - ヘ - ホ - 0 - 9 - A - Z ハ - ヒ - フ - ヘ - ホ
後者では、ちゃんと、0-9 A-Zは除かれています。
perldoc unicode の "User-Defined Character Properties" に書いてあります。
http://perldoc.jp/docs/perl/5.10.0/perlunicode.pod