[HS] script perl avec redondances

Nicolas Roudninski nroudninski at wanadoo.fr
Mer 11 Oct 13:12:52 UTC 2006


Bonjour à tous,

Je sais que je suis hors sujet mais j'ai un petit problème avec un
script perl.
Ce script est chargé de vérifier si j'ai des messages de mes amis.
tout fonctionne bien, sauf que, à la première vérification, le script
m'affiche une fois que j'ai un message (quand j'en ai un). A la
deuxième vérification, le script me dit *deux* fois que j'ai un message
(et je n'ai qu'un message !). A la troisième vérif : *trois* fois la
même chose, etc.

Il y a donc quelque chose de mal écrit, mais je n'arrive pas à trouver
quoi...

Si quelqu'un peut m'aider à y voir plus clair, ce serait super !

Cordialement,

PS1 : ci-dessou, le script (un peu long pour un message, je sais, mais
je ne l'enverrai qu'une fois, c'est promis !)

PS2 : le fichier amis.dat contient la liste de mes amis, un par ligne
de la forme :
Prénom Nom: adresse at mail.fr

#!/usr/bin/perl -w
# -*-coding: utf-8 -*
use strict;
use warnings;
use Mail::POP3Client;

#---------------------------------------------------------------------------
#  Variables globales
#---------------------------------------------------------------------------
my $xdlg = "/usr/bin/zenity";
my $pop;
my $i;
my $nom;
my @amis;
my $amis_data;
my $email;
#chomp(my $user = `whoami`);
my $user = "nicolas";
chomp(my $home_dir = "/home/$user");
my $passwd = "XXXXXXX";
my $popuser = "popuser";
my $pophost = "pop.mail.fr";

#~ sub popconfig {
	#~ open POPCONFIG, "$home_dir/.verifmaim.conf"
#~ }
sub connection {
	print "Connection au serveur...\n";
	$pop = new Mail::POP3Client(	USER
=>	$popuser, PASSWORD	=>	$passwd,
					HOST		=>
$pophost ); }	# ----------  end of subroutine connection
----------

sub read_data {
	open DATAFILE, "$home_dir/amis.dat"
		or die "Fichier introuvable !";
	while (<DATAFILE>) {
		chomp;
		push @amis, $_."\n";
	}
	for ($i = 1; $i <= $pop->Count(); $i++) {
		foreach my $amis (@amis) {
			my @amis_data = split / *: */, $amis;
			$email = $amis_data[1];
			chomp($email);
			$nom = $amis_data[0];
			&compare;
		}
	}
	close DATAFILE;
	return ;
}	# ----------  end of subroutine read_data  ----------

sub compare {
	foreach ( $pop->Head( $i ) ) {
		if (/From:.*$email/) {
			chomp;
			print "Un message de $nom [$email]\n";
			my $adresse = $_;
			system"$xdlg --info --text 'Un message de
$nom'"; }
	}
	return ;
}	# ----------  end of subroutine compare  ----------

#---------------------------------------------------------------------------
#  Programme principal
#---------------------------------------------------------------------------
#~ system "stty -echo";
#~ print "entrez un mot de passe de connexion : ";
#~ chomp($passwd = <STDIN> );
#~ print "\n";
#~ system "stty echo";
while (1) {
	connection;
	read_data;
	print "Deconection du serveur...\n";
	$pop->Close();
	print "Ok, sleep 180.\n\n";
	sleep 180;
}

-- 
Nicolas Roudninski
nroudninski at wanadoo.fr
----------------------
Toute ressemblance avec des fautes d'orthographe, de grammaire
ou de conjugaison existantes ou ayant existé serait entièrement
fortuite et indépendante de la volonté de l'auteur.




Plus d'informations sur la liste de diffusion ubuntu-fr