Причина ошибки из Perl Net :: FTP - PullRequest
1 голос
/ 27 января 2012

Я использую Net :: FTP для передачи файлов на мэйнфрейм и проверяю условия сбоя.

Мой код в основном состоит из следующих строк:

    my $ftp = Net::FTP->new ("mainframe.com", Timeout => 20);
    if (! $ftp) {
            logMessage ("Could not connect to host: $!");
            return;
    }

    if (! $ftp->login ("paxdiablo", "demigodemporeroftheuniverse")) {
            logMessage ("Could not log in to host: $!");
            $ftp->quit ();
            return;
    }

    if (! $ftp->put ("myfile.txt", "'CANT.WRITE.TO.THIS'")) {
            logMessage ("Could not put file: $!");
            $ftp->quit ();
            return;
    }

Я знаю Я не могу создать набор данных CANT.WRITE.TO.THIS, поскольку у меня нет необходимых разрешений, но при попытке я вижу только одно сообщение:

Could not put file:

В $! нет указаний на то, в чем заключалась проблема.Я посмотрел в Net::FTP документ и все, что он говорит:

put ( LOCAL_FILE [, REMOTE_FILE ] )

Put a file on the remote server. LOCAL_FILE may be a name or a filehandle. If LOCAL_FILE is a filehandle then REMOTE_FILE must be specified. If REMOTE_FILE is not specified then the file will be stored in the current directory with the same leafname as LOCAL_FILE.

Returns REMOTE_FILE or the generated remote filename if REMOTE_FILE is not given.

Я также не могу найти там ничего о получении конкретной ошибки (например, $ftp->getLastError() или что-то подобное).

Как я могу указатьпользователь почему передача не удалась?

На более ранней итерации я прибегнул к размещению файла, затем получению его снова и локальной проверке содержимого.Я бы действительно не должен был бы снова навязывать людям такой хитрый код.

1 Ответ

5 голосов
/ 27 января 2012

От Нетто :: FTP :

$ftp = Net::FTP->new("some.host.name", Debug => 0)
    or die "Cannot connect to some.host.name: $@"

Примечание $@.

$ftp->cwd("/pub")
    or die "Cannot change working directory ", $ftp->message;

Примечание $ftp->message

...