Bonjour les puristes,

J'ai deux soucis qui me semblent un peu illogiques :

1)
Quelqu'un pour me dire s'il vous plaît pourquoi ce code :
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
use  CGI;
use strict;
use Switch;
use warnings;
use Text::CSV;
 
my $system_report ="/path_to_report/system_report.csv";
my %state = (0 => ["CHECK_OK", "#008000"],
             1 => ["CHECK_WARNING", "#FFA500"],
             2 => ["CHECK_CRITICAL", "#FF0000"],
             3 => ["CHECK_UNKNOWN", "#FFA07A"]);
my $csv_source = Text::CSV->new ({
binary => 1,
auto_diag => 1,
sep_char => ';'
});
open(my $fh, '<:encoding(utf8)', $system_report) or die "Could not open '$system_report' $!\n";
#$csv_source->getline($fh);
$csv_source->column_names ($csv_source->getline($fh));
my $query = CGI->new;
print $query->header(-type => 'text/html');
print $query->start_html(-title=>'Systems Check Report',
                         -author=>'toto',
                         -base=>'true',
                         -target=>'_blank',
                         -meta=>{'keywords'=>'pharaoh secret mummy',
                                 'copyright'=>'copyright 1996 King Tut'},
                         -style=>{'src'=>'/styles/system_report.css'},
                         -BGCOLOR=>'blue');
 
print $query->br(), $query->br(), $query->hr(), $query->h3({-align => 'center'}, 'Systems Check Report'); $query->hr();
print $query->start_table({-class => "gridtable", -align => "center"},
                    $query->Tr($query->th(['System Name', 'IP Address', 'Category', 'Environment', 'Location', 'Description', 'List Of Services', 'Service Status', 'Service Information'])));
while (my $fields = $csv_source->getline_hr( $fh ))
{
        #if ($fields->{"Service Status"} eq $state{0}[0])
        #print '$fields->{"Service Status"}', "\n";
        #my $status = $fields->{"Service Status"};
        if ($fields->{'Service Status'} eq $state{0}[0])
        {
                print $query->Tr($query->td([$fields->{"System Name"},
                                 $fields->{"IP Address"},
                                 $fields->{"Category"},
                                 $fields->{"Environment"},
                                 $fields->{"Location"},
                                 $fields->{"Description"},
                                 $fields->{"List Of Services"},
                                 ({-bgcolor => $state{0}[1]}, $fields->{"Service Status"}),
                                 $fields->{"Service Information"}]));
        }
        if ($fields->{'Service Status'} eq $state{1}[0])
        {
                print $query->Tr($query->td([$fields->{"System Name"},
                                 $fields->{"IP Address"},
                                 $fields->{"Category"},
                                 $fields->{"Environment"},
                                 $fields->{"Location"},
                                 $fields->{"Description"},
                                 $fields->{"List Of Services"},
                                 ({-bgcolor => $state{1}[1]}, $fields->{"Service Status"}),
                                 $fields->{"Service Information"}]));
        }
        if ($fields->{'Service Status'} eq $state{2}[0])
        {
                print $query->Tr($query->td([$fields->{"System Name"},
                                 $fields->{"IP Address"},
                                 $fields->{"Category"},
                                 $fields->{"Environment"},
                                 $fields->{"Location"},
                                 $fields->{"Description"},
                                 $fields->{"List Of Services"},
                                 ({-bgcolor => $state{2}[1]}, $fields->{"Service Status"}),
                                 $fields->{"Service Information"}]));
        }
        if ($fields->{'Service Status'} eq $state{3}[0])
        {
                print $query->Tr($query->td([$fields->{"System Name"},
                                 $fields->{"IP Address"},
                                 $fields->{"Category"},
                                 $fields->{"Environment"},
                                 $fields->{"Location"},
                                 $fields->{"Description"},
                                 $fields->{"List Of Services"},
                                 ({-bgcolor => $state{3}[1]}, $fields->{"Service Status"}),
                                 $fields->{"Service Information"}]));
        }
}
print $query->end_table();
print $query->end_html();
close $fh;
me génère cette erreur (un warning en fait) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Use of uninitialized value in string eq at ./system_report.cgi line........, <$fh> line .....
à chaque tour de boucle, si j'utilise les warnigs?

Je sais que votre réponse sera de me demander de tester si la variable est définie. Et oui elle n'est pas undef c'est justement ce qui me sidère, et je n'ai cette erreur que dans le if et les autres lignes j'ai commentées. L'utilisation de la même variable dans la suite du code ne me génère pas d'erreur.
Le test avec print affiche bien la valeur et signale ensuite la même erreur pour la fonction print. Et cette erreur est signalé uniquement pour cette variable :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
$fields->{"Service Status"
dans le statement.

Voici les colonnes et un extrait de mon fichier csv :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
System Name;IP Address;Category;Environment;Location;Description;List Of Services;Service Status;Service Information
SERVER01;4.2.2.2;FTP Server;Linux;Wesr Coast;FTP West Coast Server;connectity;OK;Host is alive
Il est différent bien plus important que ça en contenu, mais vous avez là un copier/coller de mes noms colonnes.

2) Dans la même foulée comme vous pouvez le voir dans mon code, je veux afficher des couleurs en fonction d'une certaine valeur, et donc j'ai affecté une valeur au paramètre -bgcolor de la balise td, mais le code html généré ne contient pas cet attribut. Ce n'est pas une erreur cette fois, mais ça ne marche simplement pas, et je n'ai pas trouver de doc de Perl CGI me permettant de faire ce que je veux faire.

Partie du code concernée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
        if ($fields->{'Service Status'} eq $state{0}[0])
        {
                print $query->Tr($query->td([$fields->{"System Name"},
                                 $fields->{"IP Address"},
                                 $fields->{"Category"},
                                 $fields->{"Environment"},
                                 $fields->{"Location"},
                                 $fields->{"Description"},
                                 $fields->{"List Of Services"},
                                 ({-bgcolor => $state{0}[1]}, $fields->{"Service Status"}),
                                 $fields->{"Service Information"}]));
        }
Pouvez-vous tester de votre côte avec et sans le
s'il vous plaît? Et voir aussi pourquoi mon script ne génère pas le bon code html pour l'attribut de couleur dans ma balise td ici ?

Merci à vous.