in reply to Unexpected Hash Assignment using cgi->params

yes.
In this case  $cgi->param('user_email') returns empty and $cgi->param read the hash-value as a pair. Also it makes  'work_phone' as an undef value eventhough it's valid.
so u should undef the value if it's empty. like
my %data; = ( 'email'=>$cgi->param('user_email') || undef, 'name'=>$cgi->param('user_name') || undef, 'cell_phone'=>$cgi->param('user_cell_phone') || undef, 'home_phone'=>$cgi->param('user_home_phone') || undef, 'work_phone'=>$cgi->param('user_work_phone')|| undef , );

It's shows the exact result for me.
-kulls