rput does not fails on errors, it just ignores then, but you can handle then using the on_error callback.
in reply to SFTP->RPUT Crashes
To get debugging information from Net::SFTP::Foreign, at the beginning of your script, redirect STDERR to some file and activate the following debugging flags:
open STDERR, '>', 'c:\\sftp.debug';
$Net::SFTP::Foreign::debug = (2|4|64|256|4096|8192|32768);
You can send me the output to the email that appears on Net::SFTP::Foreign documentation (I am its author) for inspection.
IMO, the most likely cause of the problem may be some bug in Net::SSH2, ensure you are using the latest version compiled also against the latest version of libssh2 as both are continuosly being improved.