July 19, 2006
どうも気になったので。。。
shag の日記 - 日本語(EUC-JP)の substr
はっ!
ひどいマジレスをした。
ついでに言えば、
とは言え、自分も日本語をフンフンしたい場合にどういうやりかたがモダンなのか、ちゃんと理解しながら使っていると胸を張っては言い難い俺ガイル。
shag の日記 - 日本語(EUC-JP)の substr
今の Perl(5.8 以降)は文字列が utf8 だったら標準添付の substr() を使って終了なネタなわけだが、わけあって EUC-JP な文字列で日本語も 1 文字と数えて substr をするサブルーチンを考えてみた。今さら。なんか、かの有名な Perlメモに日本語(EUC-JP)を含む文字列の split というのが(文字単位に分割する)あるんだけど、これを参考に euc_substr() というサブルーチンを書いてみた。一応 offset だけでもイケル。
euc_substr($str, 0, 5) と、LENGTH を 5 に指定しているのに、6 文字切り出されるのは正しい動きだと思いがたかったのと、
use strict;
use Encode;
sub euc_substr {
my($str, $offset, $length) = @_;
return encode('euc-jp', substr(decode('euc-jp', $str), $offset, $length));
}
こんなんだけでいいんじゃないのかな?とか思ってしまつた。はっ!
ひどいマジレスをした。
もっと簡単かつ早いコードがあれば教えて欲しいです。ちゃんとベンチ取ってないですが、これだけでそんなに速度に差は出ない気がします。
ついでに言えば、
use encoding 'euc-jp';としておけば、普通の
substr() で同じ動きになる気ガス。とは言え、自分も日本語をフンフンしたい場合にどういうやりかたがモダンなのか、ちゃんと理解しながら使っていると胸を張っては言い難い俺ガイル。