Perl or multiple

Fermé
sbouli Messages postés 200 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 14 août 2014 - 30 oct. 2009 à 14:00
sbouli Messages postés 200 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 14 août 2014 - 30 oct. 2009 à 16:53
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

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
30 oct. 2009 à 16:39
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
30 oct. 2009 à 16:13
Salut,

or do BLOC


mais je ne comprends pas l'histoire de ton return
0
sbouli Messages postés 200 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 14 août 2014 2
30 oct. 2009 à 16:33
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
0
sbouli Messages postés 200 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 14 août 2014 2
30 oct. 2009 à 16:53
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
0