Если вам необходимо повторно загрузить xml-файлы, которые могли измениться, вам также необходимо выполнить сравнение файлов, чтобы убедиться, что ваша локальная копия синхронизируется с удаленной копией на ftp-сервере.
use Cwd;
use Net::FTP;
use File::Compare qw(compare);
my %localf;
my $cdir = cwd;
sub get_xml {
for my $file ($ftp->ls) {
##Skip non-xml files
next if $file !~ m/\.xml$/;
##Simply download if we do not have a local copy
if (!exists $localf{$file}) {
$ftp->get($file);
$localf($file) = 1;
}
##else compare the server version with the local copy
else {
$ftp->get($file, "/tmp/$file");
if (compare("$cdir/$file", "/tmp/$file") == 1) {
copy("/tmp/$file", "$cdir/$file");
}
unlink "/tmp/$file";
}
}
}
Я набрал это прямо в поле для ответа, так что, возможно, потребуется несколько подправок и проверка ошибок перед его внедрением. Для внешней логики вы можете написать цикл, который устанавливает соединение ftp, вызывает эту подпрограмму, закрывает соединение и спит в течение n секунд.