http://www.perlmonks.org?node_id=289976


in reply to Can't modify variable received from CGI parameter

Altenatively, you could use the '-override' flag, which emoves the stickiness and forces CGI.pm to always use the 'default' value.
print $cgi->hidden( -name => 'species', -default=> $species, -override => 1, );
Cheers, Ben.