pc88mxer is right about buffering. You are reading all of the data, but it's not being printed. Perl (and the C STDIO library) will save up output until it has a full page of data, or if it's printing to a terminal a full line. Because the server's response doesn't contain enough data to fill a page or a newline character, Perl won't flush the buffer until STDOUT is closed. And because HTTP 1.1 uses connection keepalives by default, the read loop never exits, and so the program never exits, and so STDOUT is never closed. I also found that adding a:
in reply to Re: Can't read end data out of a socket
in thread Can't read end data out of a socket
header fixed the problem, since then the server closes the connection, allowing the read loop to exit and then the program.
FYI, I found this problem using a system call tracer ( strace specifically), which is a fantastic tool for debugging these sorts of things.