素直な方法は

$string =~ /^(?:$ascii|$twoBytes)*?(?:\Q$key\E)/;

を

$string =~ /^(?:$ascii|$twoBytes)*?(\Q$key\E)/;

にかえて $-[1] じゃないか。$keyの部分がキャプチャされる
のがどうしても嫌なら


$string =~ /^(?:$ascii|$twoBytes)*?()(?:\Q$key\E)/;

でもいいがちと見難いかも。

$'はパターンマッチ使う場所がそこだけしかないような小さい
プログラムならいいが、一般的にはあまりお勧めしない。