bytes::length

最近の Perl って unicode は 1文字とみなすけど、変数のバイト数を調べたかったり、バイト単位でいろいろするときは use bytes; を使えばできる。
こんなスクリプトEUC-JP で書いて、

#!/usr/local/bin/perl

use strict;
use warnings;
use Encode qw /decode/;

my $euc_text  = 'あいうえお';
my $utf8_text = decode( 'euc-jp', $euc_text );

for my $text ( $euc_text, $utf8_text ) {
    printf "length        = %s\n", length $text;
    printf "bytes::length = %s\n", bytes::length($text);
    printf "-" x 20 . "\n";
}

実行すると

% ./test.pl
length        = 10
bytes::length = 10
--------------------
length        = 5
bytes::length = 15
--------------------

unicode でもちゃんと byte 数が get できる。use bytes すると length だけじゃなくって他関数(substr, ord, ...)も全部バイトセマンティクスを強制できるけど、bytes::length みたいにも呼び出せる。前にある人に存在を聞いてたんだけど、やっと使い方を勉強した。
もっと知りたい人は perldoc bytes とか perldoc perluniintro で。