文字列を分解し、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である点に注意
関連ページ
このブログを応援する
お寄せいただいたお気持ちは全額サーバ代や次の記事を執筆するための原資として活用させていただいております。この記事が参考になった場合などぜひご検討ください。