Perl or multiple

Bonjour,

Je cherche à transformer :

$ftp = Net::FTP->new($ftp_host, Debug => 0, Timeout=>240)
or die "connexion impossible sur $ftp_host: $@";
en
$ftp = Net::FTP->new($ftp_host, Debug => 0, Timeout=>240)
or {
print "connexion impossible sur $ftp_host: $@\n";
return 0;
}

mais je dois rater quelque chose car j'ai une erreur à la ligne suivante, disant que j'ai surement oublié un ; au dessus ....

au secours.

Stéphane

4 réponses

  1. pff ... parfois je suis trop nul ...

    bon, je comprend pas, mes print dans les sub n'affichent rien ...
     dans le sub ftp_upload :
       ....
                   print "upload de $repertoire/$fichier\n";
    	
    	$ftp->put("$repertoire/$fichier")
    		or do {
    			print "put impossible sur $ftp_host de $repertoire$fichier :",$ftp->message;
    			return 0;
    		};
    		#or die "put failed ", $ftp->message;
    	
    	print "fin upload de $repertoire/$fichier\n";
    

    et de même si je met :

    $retry=3;
    $ftp_ok=false;
    until ($retry = 0 || $ftp_ok) {
    	$ftp_ok=ftp_upload($repertoire_destinataire,$fichier_destinataire);
    	print "retour : $ftp_ok\n";
    	$retry--;
    	if (!$ftp_ok) {sleep(30);}
    }
    print "retourfin : $ftp_ok\n";
    if (!$ftp_ok) {
    	#Envoi d'un mail et arret
    	@args=("/usr/bin/mail", "-s", "Erreur lors de l'upload FTP de $fichier_destinataire vers le FTP : $ftp_host");
    	system (@args) == 0
    		or die "erreur lors de l'envoi d'un mail @args failed: $?";
    	die "envoi par FTP impossible vers $ftp_host après 3 tentatives.";
    }
    


    le print "retour : $ftp_ok\n"; dans le until n'est pas affiché alors que le retourfin affiche false ... j'ai donc bien un bug à l'upload du FTP mais pas de message ...

    J'ai dû rater un truc.

    Stéphane
    1. Modérateur
      Re,

      Regarde tes blocs do { }

      Il faut mettre ; partout

      donc
      do { BLOC };


      Voilà
      sub ftp_upload
      {
      	($repertoire, $fichier) = @_;
      	
      	$ftp = Net::FTP->new($ftp_host, Debug => 0, Timeout=>240)
      		or do {
      			print "connexion impossible sur $ftp_host: $@\n";
      			return 0;
      		};
      		#or die "Cannot connect to $goftp_ftp: $@";
      	
      	$ftp->login($ftp_usr,$ftp_mdp)
      		or do {
      			print "login impossible sur $ftp_host:",$ftp->message;
      			return 0;
      		};
      		#or die "Cannot login ", $ftp->message; 
      	
      	$ftp->put("$repertoire/$fichier")
      		or do {
      			print "put impossible sur $ftp_host de $repertoire$fichier :",$ftp->message;
      			return 0;
      		};
      		#or die "put failed ", $ftp->message;
      	
      	$ftp->quit;
      	return 1;
      }
      
      
      sub ftp_erase {
      
      	($fichier_distant) = @_;
      
      	$ftp = Net::FTP->new($ftp_host, Debug => 0, Timeout=>240)
      		or do {
      			print "connexion impossible sur $ftp_host: $@";
      			return 0;
      		};
      		#or die "Cannot connect to $ftp_host: $@";
      	
      	$ftp->login($ftp_usr,$ftp_mdp)
      		or do {
      			print "login impossible sur $ftp_host:",$ftp->message;
      			return 0;
      		};
      		#or die "Cannot login ", $ftp->message; 
      	
      	$ftp->delete($fichier_distant)
      		or do {
      			print "delete impossible sur $ftp_host:",$ftp->message;
      			return 0;
      		};
      		#or die "delete failed ", $ftp->message;
      	
      	$ftp->quit;
      	return 1;
      }
      
      
      1. hello,

        en fait j'ai créé 2 fonctions en charge du FTP (upload et erase) :

        comme je veux pouvoir faire des retry, je sors le die et je met un return 0 qui me permet de voir que ça a merdouillé :

        appel :

        $retry=3;
        $ftp_ok=false;
        until ($retry = 0 || $ftp_ok) {
        	$ftp_ok=ftp_upload($repertoire_destinataire,$fichier_destinataire);
        	$retry--;
        	if (!$ftp_ok) {sleep(30);}
        }
        if (!$ftp_ok) {
        	#Envoi d'un mail et arret
        	@args=("/usr/bin/mail", "-s", "Erreur lors de l'upload FTP de $fichier_destinataire vers le FTP : $ftp_host");
        	system (@args) == 0
        		or die "erreur lors de l'envoi d'un mail @args failed: $?";
        	die "envoi par FTP impossible vers $ftp_host après 3 tentatives.";
        }
        


        et mes fonctions :

        sub ftp_upload
        {
        	($repertoire, $fichier) = @_;
        	
        	$ftp = Net::FTP->new($ftp_host, Debug => 0, Timeout=>240)
        		or do {
        			print "connexion impossible sur $ftp_host: $@\n";
        			return 0;
        		};
        		#or die "Cannot connect to $goftp_ftp: $@";
        	
        	$ftp->login($ftp_usr,$ftp_mdp)
        		or do {
        			print "login impossible sur $ftp_host:",$ftp->message;
        			return 0;
        		};
        		#or die "Cannot login ", $ftp->message; 
        	
        	$ftp->put("$repertoire/$fichier")
        		or do {
        			print "put impossible sur $ftp_host de $repertoire$fichier :",$ftp->message;
        			return 0;
        		};
        		#or die "put failed ", $ftp->message;
        	
        	$ftp->quit;
        	return 1;
        }
        
        
        sub ftp_erase {
        
        	($fichier_distant) = @_;
        
        	$ftp = Net::FTP->new($ftp_host, Debug => 0, Timeout=>240)
        		or do {
        			print "connexion impossible sur $ftp_host: $@";
        			return 0;
        		}
        		#or die "Cannot connect to $ftp_host: $@";
        	
        	$ftp->login($ftp_usr,$ftp_mdp)
        		or do {
        			print "login impossible sur $ftp_host:",$ftp->message;
        			return 0;
        		}
        		#or die "Cannot login ", $ftp->message; 
        	
        	$ftp->delete($fichier_distant)
        		or do {
        			print "delete impossible sur $ftp_host:",$ftp->message;
        			return 0;
        		}
        		#or die "delete failed ", $ftp->message;
        	
        	$ftp->quit;
        	return 1;
        }
        
        


        Cependant même avec le do, j'ai des erreurs :

        Scalar found where operator expected at /test.pl line 308, near "$ftp"
                (Missing semicolon on previous line?)
        Scalar found where operator expected at /test.pl line 315, near "$ftp"
                (Missing semicolon on previous line?)
        Scalar found where operator expected at /test.pl line 322, near "$ftp"
                (Missing semicolon on previous line?)
        syntax error at /test.pl line 308, near "$ftp"
        syntax error at /test.pl line 322, near "$ftp"
        syntax error at /test.pl line 324, near "}"
        


        la ligne 308 c'est : $ftp->login($ftp_usr,$ftp_mdp)

        au secours

        Merci d'avance.

        Stéphane
        1. Modérateur
          Salut,

          or do BLOC


          mais je ne comprends pas l'histoire de ton return