my $until_no_upfile = "!ftp_file_exists ( '!!FTP_HOST!!', '$ftp::user', '$ftp::pass', '$ftp::dir', '$script::upfile_name' );"; my $then_upload; map { $then_upload .= "ftp_upload ( '!!FTP_HOST!!', '$ftp::user', '$ftp::pass', '$ftp::dir', '$_' ); " } ($script::order_file, $script::upfile_name); host_cycle($until_no_upfile, $then_upload); #### sub host_cycle { my ($_until,$_then)=@_; my $error_count; { for my $ftp_host (@ftp::host) { warn "ftp_host $ftp_host of @ftp::host"; my $until = $_until ; $until =~ s/!!FTP_HOST!!/$ftp_host/g; my $then = $_then ; $then =~ s/!!FTP_HOST!!/$ftp_host/g; warn "eval $until... ORIGINAL: **$_until**"; defined(my $retval = eval $until) || die "error: $@"; warn "retval $retval"; if (!$retval) { warn " * Unsuccessful"; next; } else { warn " * SUCCESSFUL"; warn "eval $then... ORIGINAL: **$_then**"; defined(my $retval = eval $then) || die "error: $@"; warn "retval $retval"; return 1; } } sleep $host_cycle::sleep; redo if (++$error_count < $host_cycle::retries); } }