in reply to FTP wierd return.

Seems to me you are describing the situation where you have a _local_ error, and the messages you see are from the last Net::FTP call. That is, before Net::FTP ever got around to trying an FTP operation it died without clearing out any previous error statuses.

I'm guessing here, but comparing with the situation you checked with, where the local file is missing. See the following snip from Net/FTP.pm:

unless(sysopen($loc, $local, O_RDONLY)) { carp "Cannot open Local file $local: $!\n"; return undef; } }
The put() call could return undef without setting either of the Net::FTP error variables. I don't know if the docs say you should check $! in this situation or not. This behavior does seem kinda hard to deal with.