in reply to ftp return value

To do proper error checking after each put. I think you should check the return code explicitly and then return the error message from ftp. Here is how I would do it.
$ftp = Net::FTP->new("mysys",Port => 9021,Timeout => 20, Debug => 0); $ftp->login("anonymous",''); $ftp->put("$dir/$file1"); my $rtncode=$ftp->code; if ($rtncode != 226 && $rtncode != 250) { my $msg=$ftp->message; print "FTP Failed: $msg\n"; $ftp->quit; } #do remainder of your puts here.

The '226' and the '250' are both return codes used in FTP. You can read more about them in the RFC for ftp.
update: to fix link