考えれば当たり前なんですが。
use Jcode; sub get_undef() {return undef}; sub empty_list() {return ()}; print jcode(get_undef(), 'sjis')->euc(), "?n"; print jcode(empty_list(), 'sjis')->euc(), "?n"; # [結果] # # sjis
関数からundefが返れば、そのままjcode噛ましても '' が返るんですが*1、関数が空っぽのリストを返すと、'sjis'が第一引数になってこれが返っちゃうんですねー。
で、これが問題になったのが以下のコードです。
my $val = jcode($request->param('key') ,'sjis')->euc();
このソースで、param()が、空リスト返す作りになってました。画面に 'sjis' って意味不明の文字列が表示されたときは、吹くとこでしたよ・・・。
my $val = jcode($request->param('key') || '' ,'sjis')->euc();
ならOKです。
*1:warningは出ますから、やっちゃだめです