madtoperl: it's a pity you didn't google this before you posted, otherwise you might have noticed this livejournal entry from "timwi" a few years ago that had the exact same problem (and nearly the exact same code, and wording, of your question).
It's reproduced here for your convenience:
Timwi (timwi) wrote in perl,
@ 2004-10-21 00:11:00
Continued problems with binary files
Dear hackers again,
thanks for your hints in the previous entry. However, I'm still having
+ problems here.
How do I simply load a file into memory? Again, without corrupting any
+ line endings?
I've tried this:
print "Content-Type: image/jpeg\n\n";
local $/ = undef;
open F, 'C:\Temp\temp.jpg';
my $content = <F>;
and this produces a corrupt response. What is the correct way of loadi
+ng a binary file? Thanks for any help in advance.
s**lil*; $*=join'',sort split q**; s;.*;grr; &&s+(.(.)).+$2$1+; $; =
qq-$_-;s,.*,ahc,;$,.=chop for split q,,,reverse;print for($,,$;,$*,$/)