J'ai modifié un code qui va chercher des infos dans un fichier texte. il le split et les formatz via un format STDOUT pour les envoyer dans un mail. j'ai ajouté du code pour récupérer les variables contenues dans le STDOUT afin de les intégrer dans une BDD mysql. le problème c'est qu'il ne récupère que la première ligne de valeur et boucle indéfiniment avec un while inscrivant la même ligne dans la BDD. Si j'utilise un foreach il inscrit la première ligne, ne boucle pas et ne passe pas à la 2e ligne...

voici mon code complet

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 
# script modifié par A.ROUSSEL le 16 05 2008
use DBI;
 
my $db = 'DBI:mysql:essai:127.0.0.1';
my $user = 'root';
my $pass = '';
my $dbh = DBI->connect($db, $user, $pass) 
  or die "connexion impossible";
use POSIX qw(strftime);
$Time = strftime "%Y-%m-%d", localtime;
$Seuil="10%"; 
 
while (<>) {
    undef @free;
    chomp;
    if ( /System information for \\\\(.*)\:/ ) {
        $host = $1;
    }
 
    if ( /Fixed/ ) {
	push @free, split ();
    } else {
	next;
    }
 
    $Volume = $free[0];
    $Type   = $free[1];
    $Format = $free[2];
 
    if ( $#free == 7 ) {
	$Size = "$free[3] $free[4]";
	$Frees = "$free[5] $free[6]";
	$Freep =$free[7];
    }
 
    if ( $#free == 8 ) {
	$Label = $free[3];
	$Size = "$free[4] $free[5]";
        $Frees = "$free[6] $free[7]";
        $Freep =$free[8];
    }
    if ($Freep <= $Seuil){
    write STDOUT;
 
    my $req = $dbh->prepare("INSERT INTO checkfs VALUES(?, ?, ?, ?, ?, ?, ?)");
 
foreach (<STDOUT>){
  $req->execute( $Time, $host, $Volume, $Label, $Size, $Frees, $Freep )
    or die "requete impossible";
	}
 
$dbh->disconnect();
    }
 
}
 
format STDOUT_TOP =
@<<<<:@<<<<<<<<<
Date, $Time
@<<<<<<<<<|@>>>>>|@<<<<<<<<|@>>>>>>>|@>>>>>>|@>>>>
Hostname, Volume, Label, Size, Frees, Freep
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
__________________________________________________
.
 
format STDOUT =
@<<<<<<<<<|@>>>>>|@<<<<<<<<|@>>>>>>>|@>>>>>>|@>>>>
$host, $Volume, $Label, $Size, $Frees, $Freep
.
 
__END__
je m'arrache les cheveux car je sais que je dois inclure un compteur ça me parait l'évidence même mais je ne sais pas comment compter le nombre de lignes contenues dans le STDOUT



HELP ME PLEASE (je veux pas finir chauve)