in reply to Parsing "&" from header.

If your results aren't what is expected, then you need to start debugging, try...
use CGI::Simple; use Data::Dumper; my $q = CGI::Simple->new(); my %input = $q->Vars; print $q->header('text/plain'); print Dumper(\%input, \%ENV, \$q);
Send your form data to this using a browser, it will print out a representation of all the data sent to the script %input, all the environment data %ENV and the CGI::Simple object.

See if the script is being fed what you expect it to, if that doesn't help, then post the results here to give us all a bit more context.