我的perl脚本末尾的'do'语句永远不会运行

时间:2010-04-06 17:40:43

标签: perl ftp archive

在我的主脚本中,我正在做一些归档操作。完成后,我想运行一个单独的脚本将我的档案上传到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 个答案:

答案 0 :(得分:4)

查看the docs for the 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来电时发生的情况。此外,尝试在代码中添加warningsstrict以清除任何微妙的错误。

答案 1 :(得分:1)

将这些行添加到您的脚本中:

use strict;
use warnings;

现在,您将获得更多诊断信息,这些信息将引导您找到解决方案。我目前的赌注是你没有指定其他脚本的正确路径,或者它缺少一条shebang线。

答案 2 :(得分:0)

对新脚本的调用是什么?如果使用shell,你检查了环境变量吗?