2010-04-06 6 views
2

Dans mon script principal, je fais de la manipulation d'archives. Une fois que j'ai terminé cela, je veux exécuter un script séparé pour télécharger mes archives et serveur FTP.Une instruction 'do' à la fin de mon script perl ne s'exécute jamais

Séparément, ces scripts fonctionnent bien. Je veux ajouter le script FTP à la fin de mon script d'archivage, donc je n'ai qu'à m'inquiéter de la programmation d'un script à exécuter et je veux garantir que le premier script l'achèvera avant que le script FTP ne soit appelé.

Après avoir regardé toutes les différentes méthodes pour appeler mon script FTP, je me suis arrêté sur 'do', cependant, quand mon instruction do est à la fin du script, elle ne fonctionne jamais. Quand je le place dans ma boucle foreach principale, il fonctionne bien, mais il s'exécute plusieurs fois que je veux éviter car le script FTP peut gérer plusieurs archives à télécharger.

Y a-t-il quelque chose qui me manque? Pourquoi ne fonctionne-t-il pas?

Voici le code 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"; 

Merci

j'ai fini de copier et coller le code FTP dans le fichier principal en tant que sous. Cela fonctionne bien quand je l'appelle à la fin de la boucle foreach.

+1

Difficile à déboguer lorsque le code n'est pas visible. Mais je vais deviner que tu as une sortie au dessus de la fin de la boucle. Peut-être que le code est si complexe qu'il n'est pas clair que vous atteignez la fin normalement? – MJB

+0

Non, je n'ai pas de sortie dans le code. En fait, j'ai placé une déclaration d'impression au même endroit et imprimée. – joejoeson

+1

Jeremy - veuillez fournir un échantillon de code (condensé). – DVK

Répondre

4

Découvrez the docs for the do 'function'.

là, vous trouverez un exemple de code:

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

Je suggère de mettre ce code pour savoir ce qui se passe avec votre appel do. En outre, essayez d'ajouter warnings et strict à votre code pour éliminer les bugs subtils.

0

Quel est l'appel au nouveau script? Si vous utilisez un shell, avez-vous vérifié vos variables d'environnement?

+0

J'ai mis à jour mon commentaire avec le code relivant. – joejoeson

1

Ajoutez ces lignes à vos scripts:

use strict; 
use warnings; 

Vous allez maintenant obtenir des informations plus de diagnostic, ce qui devrait vous conduire à la solution. Mon pari actuel est que vous ne spécifiez pas le bon chemin vers l'autre script, ou qu'il manque une ligne shebang.

+0

le script est local au script principal. La ligne Shebang est probablement correcte. laissez-moi essayer cela et revenir à vous. – joejoeson

+0

Un problème avec cette solution cependant, il n'explique pas pourquoi le statut est exécuté si je le place avant le bloc foreach. – joejoeson

+0

Je viens de regarder. le shebang est là. – joejoeson

Questions connexes