Nothing wrong with stating the obvious. I tried the print route. I compared the output of the manually typed telnet request and the lynx/lwp requests and they all have the same exact byte per byte, input and output.
Basically get_request() is not seeing the last line of the request until another request comes in.I think it's an IO::Handle thing. The machine with the problem was just for testing. I've run it on other machines since without problems so probably some deep crusty socket problem. Maybe a bad header or something. Either way I just gave up as the test machine is about to get it's OS replaced.