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 で。