http://www.perlmonks.org?node_id=1210573


in reply to Re: CGI: newlines, write exactly "\r\n" to end the headers, then turn off binmode
in thread CGI: newlines, write exactly "\r\n" to end the headers, then turn off binmode

The fact that $cgi->header; returns the string: "Content-Type: text/html; charset=ISO-8859-1" terminated by "\x0D\x0A\x0D\x0A"?

UPDATE: In addition:
What is the correct form of response from a CGI script? ... The CGI specification allows any of the usual newline representations +in the CGI response (it's the server's job to create an accurate HTTP + response based on it). So "\n" written in text mode is technically c +orrect, and recommended. NPH scripts are more tricky: they must put o +ut a complete and accurate set of HTTP transaction response headers; +the HTTP specification calls for records to be terminated with carria +ge-return and line-feed, i.e ASCII \015\012 written in binary mode. Using CGI.pm gives excellent platform independence, including EBCDIC s +ystems. CGI.pm selects an appropriate newline representation ($CGI::C +RLF) and sets binmode as appropriate.
perlfaq9 - Networking

/Update


This article sheds some light on the topic:
The End-of-Line Story
Few people today are aware of the EOL issue, because systems generally (but not always!) make it transparent. For example, the RFC Editor stores the official RFC archive on a Unix system whose native EOL is a single LF. When you click on a link for an RFC from the RFC Editor We +b page, your browser uses an FTP client to retrieve the ASCII text. The RFC's FTP server atranslates the LF in each text line into CR LF for transmission across the Internet, and your FTP client in turn translates each CR LF into whatever the EOL convention of your system.