バイナリコードを含む文字列を特定の長さに切りたいのですが
どうすれば良いでしょうか?

$str='a壱弐参四五'; # length:11
$str=~s/^(.{10}).*/$1/;

例えばこんな感じで長さを10にする事はできるのですが、
バイナリデータをぶった切ってしまってバイナリの片割れが出てきてしまいます。
切る所がバイナリデータだった場合は回避して、この場合は長さ9にしたいです。
バイナリデータの判別方がわかれば何とかできると思いますがわかりません。
どうすれば実現できるでしょうか?