What does the file you are transferring look like? In particular, does it contain DOS-style (CR/LF) or Unix-style (LF) line endings? There are several parts of this process that will try to fix the line endings, and if the file doesn't look how they expect, they may truncate lines. In this case they are expecting DOS-style CR/LF line endings.
in reply to Net::FTP and corrupted uploads
Beyond that, it could be Net::FTP screwing up the file, the underlying I/O libraries, or the FTP server. Using a packet sniffer to look at what's being sent across the wire would be a good way to see if the client is behaving correctly. A debugger would be the easiest way to see whether it's the I/O library or the FTP module.
Is there a reason you don't want to transfer the file in binary? It's much less error-prone.
Update: Fixed formatting.