CGI.pm と CGI::Util::utf8_chr

15. CGI::Util::utf8_chr now correctly sets the UTF8 flag on 5.006 or higher perls (fix courtesy Slaven Rezic).

CGI.pm の最近のバージョンから、CGI::Util::utf8_chr という関数により、一部の入力パラメータに UTF-8 フラグが立つようになったみたいです。ざっくり見てみたところ、CGI::Util::unescape を通るときにフラグが立つらしい。

最も正しい UTF-8 の扱い方は、入力で ON、出力で binmode するなり encoding 指定するなり (参照)、ということみたいで、そういう方針でこの変更が入ったのだと思います。

でも、気付かないよなあ、これw かなり深追いして変数一個一個 Devel::Peek で Dump して、CGI->param の戻りにフラグが立ってるのをみつけてようやく気付いた。深追イスト。いまどき CGI.pm とか使ってるのがどうかと思うというツッコミもありそうですが。