The main thing is probably the URL "http://~zach3327/public_html/chapter12/c12case1b.html": ~zach3327 is probably not the hostname. Try removing the http:// and starting the URL with just /~zach3327/... instead (you could also get the script's location in different formats via CGI.pm's url function, and if you need further URL manipulation, see URI - Update: see my other post). It also seems that you've embedded hard newlines in the string as "Location:\n\t ..." - I'd recommend not doing that, i.e. "print "Location: /~zach3327/...".
I also see a few other issues:
- Note the casing: <input type="text" name="name" vs. param('Name')
- You're not using warnings, which would help you catch other potential problems if they arise.
- Your style of HTML is fairly old, and contain at least one typo that I see right off the bat (...</HEAD\n"). If you are going from a tutorial of some kind, I think it's a pretty old one. That'd also explain the use of CGI.pm, which isn't really modern anymore. See also UP-TO-DATE Comparison of CGI Alternatives, CGI Parameters, and CGI::Alternatives.
- By printing out $name as part of the
URLHTML without escaping it, you are exposing yourself to a Cross-site scripting (XSS) attack (tutorial). You should at least use escapeHTML from CGI::HTML::Functions.
- You are printing some things yourself that you could be using CGI.pm's functionality for: see its header and redirect functions.
Edit: Fixed thinko.