文字列を分解し、1文字ずつ処理を行いたい。全角文字、2バイト文字が含まれるなら、Jcode.pmを用いるのがお手軽だ。「指定バイト数で自動的に改行する」で取り上げた、Jcode.pmの「jfold」メソッドを活用すれば良い。
jfoldは指定文字数分取り出してくれる機能を持つ。ここで“1”を指定しておくだけ。その後の全角・半角のチェックはJocdeが自動的に行ってくれる。混在していてももちろん大丈夫だ。
サンプル
;# ;#文字列を1文字ずつ分割する (全角・半角混合) ;# use Jcode; #-- 分割 --# @char = str_jfold('Hello!は日本語でコンニチワです', 1); #-- 表示 --# foreach my $c (@char){ print "$c\n"; } #----------------------------------------------# #■指定文字数で分割する #----------------------------------------------# sub str_jfold{ my $str = shift; #指定文字列 my $byte = shift; #指定バイト my $j = new Jcode($str); my @result = (); foreach my $buff ( $j->jfold($byte) ){ push(@result, $buff); } return(@result); }
実行例
H e l l o ! は 日 本 語 で コ ン ニ チ ワ で す
返却される文字コードがEUCである点に注意