回答編集履歴

1 解決方法を追記

argius

argius score 9414

2015/12/16 22:16  投稿

残念ながら回答ではないのですが、
(追記)
最後の出力の直前に、`utf8::decode($value)`を行うことで、解消すると思います。
私もこの辺は詳しくないので、下記リンク先を参照してください。
一部引用:
> use utf8 とは、 このCGIスクリプト内で扱う全角文字は文字コードがUTF-8であり、且つ、扱う全角文字データ全てにutf8フラグ(目印みたいなもの/以下単に「フラグ」と呼称)を付けてあるのでそのつもりで処理してね、とPerl側に教えてやる宣言のこと。
PerlのCGIのutf-8改造で文字化けしたときの処方箋
[http://mycc.s33.xrea.com/data/pc/perl_use_utf8.html](http://mycc.s33.xrea.com/data/pc/perl_use_utf8.html)
---
(最初の回答)
残念ながら回答ではないのですが、(※回答を追記しました)
確かに再現はしましたので、ここにご報告します。
環境:
- OS X 10.11.2
- Apache 2.4.16
- Perl 5.18.2
入力値には、環境依存文字でないと`guess_encoding`で`utf-8 or shiftjis`と推測されてしまうので、環境依存文字を入力値に加えました。
(例:名前①)
解せないのは、ハッシュに値を設定した直後(116行目)では文字化けしていないのに、出力の箇所(139行目)では文字化けしてしまうという点です。`conv_html`を外しても文字化けします。
以上、他の回答者の方々の参考になれば。
私ももう少し調べてみます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る