Возможно, это вызвано какой-то проблемой в сети, например, разрыв соединения. Тогда $ftp->message
может быть undef
, поскольку сервер не может отправить здесь ни одного сообщения. Но это только предположение, в документации неясно, откуда на самом деле $ftp->message
.
Явление, что это работает во второй попытке, может усилить эту гипотезу. Неисправное сетевое оборудование иногда «просыпается» после некоторого трафика, который изначально не удался.
Если вы хотите повторить попытку несколько раз, вот эскиз (не проверенный, но должен продемонстрировать идею):
print("put\n");
for (my $counter = 3; $counter; $counter--) {
if (!$ftp->put($fpath1)) {
if (defined($ftp->message)) {
print("Error. Message: $ftp->message\n");
}
else {
print("Error. Message: undef\n");
}
print("retrying...\n");
}
else {
last;
}
}
if (!$counter) {
print("gave up.\n");
# further error handling goes here... e.g. abort the script...
}
Вы можете удалить
if (defined($ftp->message)) {
...
}
else {
...
}
if (!$counter) {
...
}
и print()
s, если вы не хотите обрабатывать это или иметь этот вывод соответственно.
Также при необходимости уменьшите или увеличьте начальное значение счетчика.