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:
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.