shiftjisとcp932の両方を候補に入れるとほとんどの場合区別がつかなくて
Encode::Guess->guessがエラー返すと思うのだが。

おおざっぱにいうとEncode::Guessの判定アルゴリズムは

1行ずつ候補のencodingでdecodeしていって、候補が1つになったら
それを返す。候補がなくなったり複数残ったらエラー(ただしasciiが
最終候補に含まれていたらascii)

だからね。