以前に、UTF-8文字列をバイト数でカットした時の末尾の処理というのを考えたのですが、この記事はUTF-8文字列をPerlの内部コードとしてではなく、単なるバイト列として扱っていたものでした。しかしUnicodeを内部文字列としてサポートしたPerlのことを考えると、将来的にはあまりよろしくない方法のように思えてきました(今更ではありますが)。 実際、文字列をPerlの内部文字列(utf8フラグの付いた文字列)として扱うと、lengthやsubstr等の関数や正規表現などでもバイト単位でなく文字単位で操作することができて便利です。ただ出力する際に文字数ではなくデータ長(バイト単位)で制限したいこともあるので、内部文字列として扱いつつバイト数でカットする方法はないかと考えてみました。 で、色々試してみて、そのようなサブルーチンを比較的短く書くことができました。 use strict; use