これらの文字は、2バイト目に「\」が含まれているため、Perlの中ではその次の1バイトがエスケープシーケンスとして解釈され、文字化けしたり、エラーが起こったりします。
これを解消するには、文字を「"」の代わりに「'」で囲んだり、その文字の直後に「\」を入れてエスケープシーケンスを解除すれば良いようです。
これらの文字は、2バイト目に特殊な文字が含まれているため、正規表現中で使うと、例えば「タンス」の場合は「 ^ンス」というわけのわからない正規表現が出来上がり、場合によってはエラーを起こします。
「\」のときのように後ろに「\」を付けてエスケープする方法が使えないので、「'タ'」を「pack("C*", 0x83) . '\^'」に置き換えるなど、1バイト目と2バイト目を別々に表記したり、正規表現を使わない方法にしたりと工夫しなければなりません。
多少の誤差を気にしないのであればこういった文字をすべて「??」に置き換えるという荒技もありですが・・・・
もしかしたらもっといい方法があるかもしれません。
ちなみに、一番簡単で手っ取り早い解決方法は、シフトJISではなくEUCで書いてしまうことです。
シフトJISで表示してやる必要があれば、適当なライブラリを使って表示時に変換すればよいでしょう。