めっちゃ久々に Perl5系 書いたのですが、そのときに今更 Perl にはユーザ定義文字特性というものがあることを知りました。
perlunicode - Perl における Unicode サポート - perldoc.jp
ユーザ定義文字特性によって、例えば半角のカタカナだけヒットさせるのを作ろうとなった場合、半角カタカナの範囲をユニコードの表で確認して
https://unicode.org/charts/PDF/UFF00.pdf
`ヲ`である `FF66` から `゚` の `FF9F` までヒットさせようと試みる場合、以下のような文字特性をかけます
package Experopero::Sample; use utf8; use strict; use warnings; ... # 半角カナ文字 `ヲ` ~ `゚` を指定したユーザ定義文字特性 # see: https://unicode.org/charts/PDF/UFF00.pdf sub InHalfWidthKatakana { return <<END; FF66\tFF9F END }
この文字特性は組み合わせることもできます。自作の文字特性と既存の文字特性を組み合わせてみるとこんな感じ。`return <<'END';` となっている点が注意です。
package Experopero::Sample; use utf8; use strict; use warnings; ... # 半角カナ文字 `ヲ` ~ `゚` を指定したユーザ定義文字特性 # see: https://unicode.org/charts/PDF/UFF00.pdf sub InHalfWidthKatakana { return <<END; FF66\tFF9F END } # utf8::InBasicLatin と組み合わせ sub InHalfWidthKatakanaAndInBasicLatin { return <<'END'; +Experopero::Sample::InHalfWidthKatakana +utf8::InBasicLatin END }
`+` は条件の prefix です。他にも -, !, & があります
こういう感じで正規表現で使えます
my @chars = $text =~ m|\p{InHalfWidthKatakana}|g;