EUC-JP交じりの文書の分割が成功したかどうか

日本語の文章を、途中で分割したいことがあると思います。
jperlを使っていればこれはうまく行きますが、日本の文字
1文字はEUC-JPでは2バイトから3バイトで構成されているの
で、普通のPerlの場合運悪く文字のど真ん中で分割してしま
うと場合文字化けを起こしてしまいます。

そこで、分割後、分割がうまくいったかどうかを調べる
ルーチンを考えてみました。以下です。

もし、EUC-JPのG3(なぜかこいつだけ3バイト)が全く使わ
れていないと仮定できれば(実際あまり使われてないと思
う)、MSB(最上位ビット)が立ってるバイト数が奇数かどう
か調べるだけで分割に失敗したかどうかがわかるはずです。

if(tr/[\x8E\xA1-\xFE]/[\x8E\xA1-\xFE]/ % 2){
	# 分割に失敗
}

G3は3バイトなので、1バイト目の\x8Fを数えないようにす
れば、G3の2バイト目と3バイト目が分断されても同じ方法
でうまく行くはずです。

あとは、G3の1バイト目と2バイト目で分断された場合だけ
ですが、これは\x8Fが文字列末にあるかどうかで判断でき
ます。

というわけで、

$_ = 調べたい文字列;

if (/\x8F$/ || tr/[\x8E\xA1-\xFE]/[\x8E\xA1-\xFE]/ % 2){
	# 分割に失敗
}

とすれば、分割に失敗したかどうか判断できます。
例えば$textにEUC-JPの文字列が入っていて、これの
255バイト以降(Pascalか?(笑))を切り落としたいなら

for($text){ # このfor文は単に$_ = $textと同じ。
	$text = substr($text, 0, 255);
	chop($text) if (/\x8F$/ || tr/[\x8E\xA1-\xFE]/[\x8E\xA1-\xFE]/ % 2);
	chop($text) if (/\x8F$/);
}

とすればよいでしょう。

うまく応用すればfold(1)も作れることでしょう。