在我的主脚本中,我正在做一些归档操作。完成后,我想运行一个单独的脚本将我的档案上传到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循环结束时调用它时,它工作正常。
答案 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
来电时发生的情况。此外,尝试在代码中添加warnings
和strict
以清除任何微妙的错误。
答案 1 :(得分:1)
将这些行添加到您的脚本中:
use strict;
use warnings;
现在,您将获得更多诊断信息,这些信息将引导您找到解决方案。我目前的赌注是你没有指定其他脚本的正确路径,或者它缺少一条shebang线。
答案 2 :(得分:0)
对新脚本的调用是什么?如果使用shell,你检查了环境变量吗?