Оператор «do» в конце моего Perl-скрипта никогда не запускается - PullRequest
2 голосов
/ 06 апреля 2010

В моем основном скрипте я делаю некоторые манипуляции с архивом. После этого я хочу запустить отдельный скрипт для загрузки моих архивов на FTP-сервер.

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

Изучив все различные методы для вызова моего сценария FTP, я остановился на 'do', однако, когда мое утверждение do находится в конце сценария, оно никогда не запускается. Когда я помещаю его в мой основной цикл foreach, он работает нормально, но работает несколько раз, чего я хочу избежать, поскольку сценарий FTP может обрабатывать несколько архивов для загрузки.

Что-то мне не хватает? Почему не работает?

Вот соответствующий код:

chdir $input_dir;
@folder_list = <*>;
foreach $file (@folder_list)
{
    if($file =~ m/.*zip/)
    {
    print "found $file\n";
    print "Processing Files...\n";
        mkdir 'BuildDir';
        $new_archive = Archive::Zip->new();
        $archive_name = $file;
        $zip = Archive::Zip->new($file);
        $zip->extractTree('', $build_dir);
        &Process_Files;
    }
}
do 'ArchiveToFTPServer.pl';
print "sending files to FTP server";

Спасибо

Я закончил копированием и вставкой кода FTP в основной файл как подпрограмму. Он отлично работает, когда я вызываю его в конце цикла foreach.

Ответы [ 3 ]

4 голосов
/ 06 апреля 2010

Проверьте документы для do 'function' .

Там вы найдете пример кода:

unless ($return = do $file) {
  warn "couldn't parse $file: $@" if $@;
  warn "couldn't do $file: $!" unless defined $return;
  warn "couldn't run $file" unless $return;
}

Я предлагаю ввести этот код, чтобы узнать, что происходит с вашим do звонком. Кроме того, попробуйте добавить warnings и strict в ваш код, чтобы отсеять любые тонкие ошибки.

1 голос
/ 06 апреля 2010

Добавьте эти строки в ваши скрипты:

use strict;
use warnings;

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

0 голосов
/ 06 апреля 2010

Какой вызов новому сценарию? Если вы используете оболочку, вы проверяли переменные окружения?

...