- ベストアンサー
警告?の補足と条件分岐
Perlは5.8でWindowsを使っています。 次のような警告が出た場合に補足する方法が知りたいです。 "\x{fffd}" does not map to shiftjis at test.pl line 70. スクリプトが中断されず、標準エラー?出力はされるので汚いです。 この警告が出れば、条件を分岐するという記述方法がわかりません。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
警告は、warn で発せられて ハンドラを書くことで捕捉できます。 例えば sub warn_handler { my $msg = shift; $MAPWARN="MAP" if $msg=~/does not map/; } $SIG{'__WARN__'}=\&warn_handler; #warn のハンドラの登録 としておいて、 エラーがでそうな処で $MAPWARN=undef; #エラーがでそうなところ if($MAPWARN){ #ハンドラでセットされる } else { } とすれば、分岐できます。 #3の方も仰っていますが、 おそらく、エンコードの認識が正しくない。 多分、UTF-16を生コードで扱っていて、シフトJISに変換しようとしている時にエラーになっているのではないかと思います。 ちゃんと、内部表現に取り込んでやる(あるいは、コンバートする)必要があると思います。
その他の回答 (3)
- twinkleluz
- ベストアンサー率52% (98/185)
close(STDERR); open(STDERR,">hoge"); とすると標準エラー出力の内容をコンソールに出さずにファイル出力することはできますが、結局"\x{fffd}"は標準出力に出力されるのでエラートラップとしては現実的でない気がします。 おそらくuse encoding 'shiftjis'を使っているんだと思いますが、use encodingをやめてみるか、printする前に変数の中身が正しくshift-jisにマッピングされるかどうかを調べる方が現実的では、と思います。
- t140
- ベストアンサー率39% (59/150)
エラー内容で検索してみました。
- ___noboru___
- ベストアンサー率28% (33/117)
その警告が出ている行 (70行目) はどのように書かれていますか?
補足
print "$s"; print 文です。 evalは、エラーでないと補足できないみたいです。