基本的な部分ですが、Perlでは文字列を数字として評価した場合に0以外が返されることはあるのでしょうか?
%formの中から値が数字で1以上でないものは削除したいんです。

%form = map { $form{$_} > 0 ? ($_,$form{$key}):() } keys %form;

これで文字列ははじけますか?