in reply to HTTP POSTing problem

Aside from the obvious invective to use CGI, strict, -wT , the first thing I notice is that you never print the required HTTP header:

print "Content-Type: text/html\n\n";

This would be enough to generate a 500 error. BTW, when using all you would have to do to accomplish this is type print header(). Secondly, you wouldn't have to worry about parsing the query string from the buffer. Check out Ovid's words on this, use CGI or die;