文字コードが utf8 の場合、日本語は 3 バイトになるため、カウントしたい文字列をいったんデコードしてから文字数をカウントする必要があります。その際、正確に文字数をカウントするために改行は削除しておくこと。
以下のようにして Encode モジュールを使用し、デコードしてから文字数のカウントを行います。
#!/usr/bin/perl -w use Encode qw(decode); my $text = 'こんにちは世界'; my $c_text = $text; $c_text =~ s/\r//sig; $c_text =~ s/\n//sig; my $length = length(decode('utf-8', $c_text)); print 'length => ' . $length;
出力結果は以下のようになります。
length => 7
デコードせずに出力する場合は、文字数が正確に認識されません。デコードせずに文字数をカウントするには、以下のようなソースになります。
#!/usr/bin/perl -w my $text = 'こんにちは世界'; my $c_text = $text; $c_text =~ s/\r//sig; $c_text =~ s/\n//sig; my $length = length($c_text); print 'length => ' . $length;
この場合の出力結果は以下のようになります。$text に代入した「こんにちは世界」は 7 文字なので、ちょうど 3 倍になっていることがわかります。
length => 21
Comments