sub retrieve_file { my($file) = shift; my($site) = shift; my($user) = shift; my($pass) = shift; my($dir) = shift; my($params_ref) = shift; my($pwd) = (); my($retval) = 0; chomp($pwd = `/bin/pwd`); chdir($TOP_DIR); chdir($$params_ref{FILE_DIR}); my($ftp) = Net::FTP->new($site, Debug => 1) or warn_msg("retrieve_file: couldn't start FTP session for $site: $!") && return 0; $ftp->login($user, $pass) or warn_msg("retrieve_file: couldn't access $site: " . $ftp->message()) && return 0; $ftp->cwd($dir) or warn_msg("retrieve_file: couldn't access $dir on $site: " . $ftp->message()) && return 0; if ($file =~ /\//) { my(@dirs) = split(/\//,$file); foreach (@dirs) { if ($_ eq $dirs[$#dirs]) { $file = $_; last; } $ftp->cwd($_) or warn_msg("retrieve_file: couldn't access $_ on $site: " . $ftp->message()) && return 0; } } $ftp->binary(); $ftp->get($file, $file) or warn_msg("retrieve_file: couldn't get $file: " . $ftp->message()) && return 0; $ftp->quit; chdir($pwd); return 1; }