• ベストアンサー

警告?の補足と条件分岐

Perlは5.8でWindowsを使っています。 次のような警告が出た場合に補足する方法が知りたいです。 "\x{fffd}" does not map to shiftjis at test.pl line 70. スクリプトが中断されず、標準エラー?出力はされるので汚いです。 この警告が出れば、条件を分岐するという記述方法がわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.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)

回答No.3

close(STDERR); open(STDERR,">hoge"); とすると標準エラー出力の内容をコンソールに出さずにファイル出力することはできますが、結局"\x{fffd}"は標準出力に出力されるのでエラートラップとしては現実的でない気がします。 おそらくuse encoding 'shiftjis'を使っているんだと思いますが、use encodingをやめてみるか、printする前に変数の中身が正しくshift-jisにマッピングされるかどうかを調べる方が現実的では、と思います。

  • t140
  • ベストアンサー率39% (59/150)
回答No.2

エラー内容で検索してみました。

参考URL:
http://okweb.em-net.ne.jp/kotaeru.php3?q=1136771
回答No.1

その警告が出ている行 (70行目) はどのように書かれていますか?

kyoui
質問者

補足

print "$s"; print 文です。 evalは、エラーでないと補足できないみたいです。

関連するQ&A