Search code examples
perlftparchive

A 'do' statement at the end of my perl script never runs


In my main script, I am doing some archive manipulation. Once I have completed that, I want to run a separate script to upload my archives to and FTP server.

Separately, these scripts work well. I want to add the FTP script to the end of my archive script so I only need to worry about scheduling one script to run and I want to guarantee that the first script completes it work before the FTP script is called.

After looking at all the different methods to call my FTP script, I settled on 'do', however, when my do statement is at the end of the script, it never runs. When I place it in my main foreach loop, it runs fine, but it runs multiple times which I want to avoid since the FTP script can handle having multiple archives to upload.

Is there something I am missing? Why does it not run?

Here is the relivant code:

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";

Thanks

I ended up copying and pasting the FTP code into the main file as a sub. It works fine when I call it at the end of the foreach loop.


Solution

  • Check out the docs for the do 'function'.

    In there, you'll find a code sample:

    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;
    }
    

    I suggest putting this code in to find out what's happening with your do call. In addition, try adding warnings and strict to your code to weed out any subtle bugs.