2010-04-06 53 views
2

在我的主脚本中,我正在执行一些归档操作。一旦我完成了,我想运行一个单独的脚本来上传我的档案到FTP服务器。我的perl脚本末尾的'do'语句从不运行

另外,这些脚本运行良好。我想将FTP脚本添加到我的存档脚本的末尾,因此我只需要担心计划一个脚本运行,并且我想保证第一个脚本在调用FTP脚本之前完成它的工作。

查看所有不同的方法来调用我的FTP脚本后,我决定'做',但是,当我的do语句在脚本的末尾时,它永远不会运行。当我把它放在我的主foreach循环中时,它运行良好,但它运行多次,我想避免,因为FTP脚本可以处理多个档案上传。

有什么我失踪?为什么它不运行?

这里是relivant代码:

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循环结束时调用它时它工作正常。

+1

当看不到代码时很难调试。但我会猜测你在循环结束时有一个退出。也许代码太复杂了,以至于你通常没有达到目的? – MJB 2010-04-06 17:43:14

+0

不,我没有在代码中的任何地方退出。实际上,我在相同的位置放置了一个打印语句并打印出来。 – joejoeson 2010-04-06 17:45:26

+1

杰里米 - 请提供代码示例(精简版)。 – DVK 2010-04-06 17:48:06

回答

4

结账the docs for the do 'function'

在那里,你会发现一个代码示例:

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

我建议在把这个代码,找出与您的通话do发生。另外,请尝试将warningsstrict添加到您的代码中,以清除任何细微的错误。

0

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

+0

我使用relivant代码更新了我的评论。 – joejoeson 2010-04-06 17:47:59

1

这些行添加到您的脚本:

use strict; 
use warnings; 

现在你会得到更多的诊断信息,这应该引起你的解决方案。我目前的赌注是,你没有指定到另一个脚本的正确路径,或者它缺少一个shebang线。

+0

脚本在主脚本中是本地的。 shebang线可能是正确的。让我尝试一下,回到你身边。 – joejoeson 2010-04-06 17:52:09

+0

虽然这个解决方案存在一个问题,但它并不能解释为什么如果我将它放在foreach块之前,那么为什么要执行这个操作。 – joejoeson 2010-04-06 17:54:55

+0

我只是看着。 shebang在那里。 – joejoeson 2010-04-06 18:04:30