chomp, by
definition, removes the contents of $/ from the end of a string. Perhaps, if you know that your client will be windows, you should set $/ to \n\r (or is it \r\n, I can never remember).
What it comes down to is that windows uses a \r\n combination as it's end of lines, and *nix appropriately uses \n. The sketchy, but easy way to handle this is to do a regex replacement
(s/to replace/replacement/). But, that could cripple you should you want multi line data to stick around. My preference would be to remove any instance of \r (your ^M) and chomp when necesary.