in reply to ftp a file

Sounds like you have figured out how to use Net::FTP.
Put() and get() transfer files. you probably also want to set binmode.
Can you explain what you've tried and what errors you are getting? As well as what you are using to read the remote directory. Are you sure you have write access to the remote directory?

Update: I looked back again at this and "no, your question is not at all clear".
Usually the hardest part of this is getting the connection established (firewall, proxy problems), getting authenticated and running a command on the remote machine (like tell me the files in the remote server's directory). You say that you can do all of those things (send and receive messages to/from the remote server, authenticate as a valid user and run commands like 'ls' on the server whose results are sent to you). Given that, I am completely mystified as to why you can't just put() a file. Can you transfer a file manually with say, FireFTP a Firefox add-in?