utf8オンな文字列のバイト数の取得方法

use utf8している時のlengthは文字数を数えてしまうけど、それ以外のときは、バイト数を数えるそうだ。ところで、以下のようにしたらutf8のバイト数が取れるんじゃないかと思うんだけど、あまりutf8文字列のバイト数に需要がないのか、ググっても例が出てこない。

何か見おとしているのかもしれないな。

use utf8;
my $bytes = length unpack('a*',$utf8_str);
use utf8での文字列のバイト数

これ、僕も昔取得方法わかんなくて困ったことがある。

ってことで啓蒙活動しとく。

bytes::lengthを使います。

use utf8;
require bytes;

my $bytes = bytes::length $utf8_str;

「require bytes」が大事ね「require bytes」が。もし「use bytes」しちゃったらそのレキシカルスコープの間全ての文字列がバイト列として扱われちゃうので(bytesについて詳しくはこちら

ってかunpack使ってバイト数取る方法とか色々やり方があるってのは面白いね、さすがPerlTMTOWTDI


追記

関数をimportしたくないときはrequireする以外にも

use bytes ();

のようにカッコをつける方法もありますね。

確かにrequireじゃなくってimportをさせないやり方でもOKですね。

id:lyokatoさんどもです。