文字列を一文字ずつ分割する(全角半角混合) - Perl

文字列を分解し、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である点に注意

関連ページ

blog.katsubemakito.net