perlで日本語切り出し

日本語を含んだ文字列で文字を切り出す場合、切り出した文字列の間にASCIIコードが奇数個含まれていると、切り出したおしりが文字化けを起こすはず。でも、文字コードEUC-JPで、perlで実現する場合、これを使えばなんとかなるようだ。

http://blog.nomadscafe.jp/archives/000152.html

sub jtruncate{
	my($str,$n)=@_;
	$n ||=200;
	return $str if(length($str) <= $n);
	my $substr = substr($str,0,$n-3);
	if($substr =~ /\x8F$/ or $substr =~ tr/\x8E?xA1-\xFE// % 2){
		chop $substr;
	}
	$substr .= "...";
	return $substr;
}
$short = &jtruncate($long,$length);

ちなみに、

tr/\x8E?xA1-\xFE//

ではなく、

tr/\x8E\xA1-\xFE//

のはずである。

また、なぜ$n-3になっているのかよくわからないのだが、これで実現可能だ。
#$nでよいと思うのだが。