経緯
- 数千万行あるファイルに対して1行ごとに処理するようなバッチを書く
- utf8フラグ付きの文字列を
encode_utf8
せずに処理してしまう - 大量の
Wide character in ...
という警告がログに出力される - 気付かずに本番リリースされ、それが原因で障害発生
- 悲しみに閉ざされる
対策
あれ以来、テストでSTDERRのチェックを行うようにしている。
あと、テストデータにマルチバイト文字列を忘れずに入れる。
my ($stdout, $stderr, $exit) = capture { MyApp->new->run(@argv) }; is $stderr, '', '標準エラー出力には何も出力されていない';