http://www.perlmonks.org?node_id=1012296


in reply to Help with Net::FTP module

The object is defined, but it won't work anymore, and you should get errors if you try to do anything with it (assuming you are checking for errors). You'll have to reconnect with a new object if you lose the connection.

Replies are listed 'Best First'.
Re^2: Help with Net::FTP module
by spacebar (Beadle) on Jan 09, 2013 at 05:12 UTC
    I would recommend changing the timeout to +240 and check/use return value after each operation, something like:

    sub ftp_put_file { # If rename_file = "Y" transfer file with '.xferring' as extension. if ( $rename_file eq "Y" ) { $file_name_to_xfer = "$file_name" . ".xferring"; } else { $file_name_to_xfer = "$file_name"; } $ftp->put( "${source_directory}/${file_name}", "${file_name_to_xfer} +" ) or $retval = 1; if ($retval == 1) { print "**Error occurred .........etc.\n"; } else { print "**Successfully put file(${source_directory}/${file_name_to_ +xfer}) to host($host).\n"; } return $retval; } # End ftp_put_file()

      I prefer exceptions and including the reason for failure, and I don't care for functions that return non-zero (true) on failure (perl is not 'C' or shell) nor unnecessarily wrapping variables in quotes, so I might write you sub more like (I also would probably pass in arguments and make it self-contained and 'use strict' compliant, but I'll leave that out for now):
      sub ftp_put_file { # If rename_file = "Y" transfer file with '.xferring' as extension. if ( $rename_file eq "Y" ) { $file_name_to_xfer = "$file_name.xferring"; } else { $file_name_to_xfer = $file_name; } $ftp->put( "$source_directory/$file_name", $file_name_to_xfer ) or d +ie "Failed to transfer $source_directory/$file_name: ".$ftp->message( +); print "**Successfully put file($source_directory/$file_name_to_xfer) + to host($host).\n"; return 1; } # End ftp_put_file()