bonjour,

je vous contacte car je n'arrive pas à faire un truc qui est à priori simple, j'ai du louper un épisode sur les hash de hashs de arrays de hashs.. & co..

Comment puis-je accéder au contenu de cette structure (provient data::dumper) :

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
 
$VAR1 = {
          'db_conn_ora' => [
                           {
                             'password' => 'xxxxxxxxx',
                             'criticity' => '1',
                             'description' => 'database connection',
                             'port' => '15210',
                             'username' => 'toto',
                             'host' => 'hostmachinchose'
                           }
                         ],
          'ping' => [
                    {
                      'criticity' => '1',
                      'description' => 'Appserver Nodes availability',
                      'host' => 'hostici'
                    }
                  ],
          'TCP_Port' => [
                        {
                          'criticity' => '1',
                          'description' => 'RMI Port',
                          'port' => '40598',
                          'host' => 'hostla'
                        },
                        {
                          'criticity' => '1',
                          'description' => 'Oracle listener',
                          'port' => '1521',
                          'host' => 'hostoracleici'
                        }
                      ]
        };
pour l'instant j'ai testé un :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
foreach my $mcheck (@{$data->{checks}}) {
  foreach my $check (keys %{ $mcheck }) {
    print "$check\n";
  }
}
et cela m'affiche bien le nom du check (ping, db_conn_ora ou TCP_Port), mais comment puis-je accéder aux sous valeurs ?

globalement, j'aimerais faire une boucle, pour chaque type de check trouvé, chopper les valeurs du dessous.

si vous voulez plus d'infos et que cela vous aide, je lis un XML avec XML::Simple qui ressemble à ça :

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
 
<?xml version="1.0" encoding="UTF-8"?>
 
  <morningcheck>
     <application>XXXX</application>
     <environment>UAT</environment>
     <checks>
 
           <ping
              criticity="1"
              description="Appserver Nodes availability"
              host="hostici" />
 
           <TCP_Port
              criticity="1"
              description="RMI Port"
              host="hostmachinchose"
              port="40598" />
 
           <TCP_Port
              criticity="1"
              description="Oracle listener "
              host="hostoracleici"
              port="1521" />
 
           <db_conn_ora
              criticity="1"
              description="atabase connection"
              host="hostmachinchose"
              port="1521"
              username="userici"
              password="xxxxxxxxx" />
 
     </checks>
  </morningcheck>
merci encore de vos lumières

en gros j'aimerais boucler sur les checks, en disant "pour chaque check trouvé (il peut y avoir plusieurs checks de chaque type, exemple plusieurs "ping" ou "tcp_port", ) alors fait telle et telle action avec les valeurs que tu trouves dedans, mais je n'arrive pas à récupérer les valeurs.

j'ai du mal avec ce concept de hash qui contient de l'array qui contient du hash etc..

merci !