Comprendre des lignes d'un script

lefreeman63 Messages postés 136 Date d'inscription   Statut Membre Dernière intervention   -  
-
Bonjour,

Tout le monde je suis en train d'essayer de travailler sur un script en perl développé par un ancien collègue. Et je rencontre un certain problème à comprendre la signification de certaines lignes et la différences entre le "if" et le "else".

J'espère que vous pourrez m'aidez Merci d'avance.

 my $xmlfile = XMLin($xml_file ) or logAndDie "[ERROR] Can not read XML file $xml_file !\n";
        #print Dumper($xmlfile);

      <bold>  if ( ref($xmlfile->{LIST_G_BURSTING}->{G_BURSTING}) ne 'ARRAY' )</bold>
        {
         
                my $Addr = $xmlfile->{LIST_G_BURSTING}->{G_BURSTING};
                if ( $number_version == 2 )
                {
                        &all_burst($Addr);
                }
                else
                {
                        &treat_pdf($Addr);
                }
        }
        else
        {
                
               <bold> foreach my $Addr ( @{ $xmlfile->{LIST_G_BURSTING}->{G_BURSTING} } )</bold>
                {
                        if ( $number_version == 2 )
                        {
                                &all_burst($Addr);
                        }
                        else {
                                &treat_pdf($Addr);
                        }
                }
        }


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

2 réponses


 
Salut lefreeman63,

Il semble que cet extrait de code utilise un module
Perl XML::Simple
(bien que le
use XML::Simple;
ne soit pas présent dans ce que tu as posté) pour parser un fichier XML.

Le module transforme le fichier XML en un hash dont les clefs sont les balises XML.

Dans l'arborescence de ce fichier XML, visiblement, il peut y avoir à l'emplacement {LIST_G_BURSTING}->{G_BURSTING} soit :

- une seule valeur (une seule $Addr)
- ou une liste de plusieurs valeurs (plusieurs $Addr)

Le premier if vérifie si à cet emplacement se trouve une référence à un tableau. Si ce n'est pas le cas, il en déduit qu'une seule valeur est stockée, et cette valeur est mise dans $Addr pour être traitée.

Le else traite donc le cas où cet emplacement stocke une référence à un tableau. Le foreach parcours ce tableau, en extrayant les différentes valeurs successivement dans une variable $Addr et en les traitant successivement.

Regarde la structure du fichier XML traité pour comprendre ce qui est fait.

Voilà aussi de la documentation pouvant t'aider :

https://metacpan.org/pod/release/GRANTM/XML-Simple-2.22/lib/XML/Simple.pm
https://perldoc.perl.org/functions/ref
https://perldoc.perl.org/perlreftut (simplifié)
https://perldoc.perl.org/perlref (complet)


Dal
1
trareon Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   11
 
Bonjour,
Je ne sait pas si cela va répondre à ta question mais le IF défini une première condition (traduit par un SI), dans le cas ou la condition est respecter le script ne va prendre que les ligne dans le IF, si elle n'ait pas respecter il passe à la suite. Le ELSE est la deuxième condition qui peut être traduit par SINON, elle s’exécute quand la condition IF n'est pas respecter.
En espérant avoir pu t'aider.
CDT
0
lefreeman63 Messages postés 136 Date d'inscription   Statut Membre Dernière intervention  
 
C'est gentil pour ton aide.
Il semble que le gras que j'avais mis sur les lignes est disparus en plus :-(

J'ai un souci en particulier avec les conditions du IF et tous ce qui concerne le XML :-/

ref($xmlfile->{LIST_G_BURSTING}->{G_BURSTING}) ne 'ARRAY'
my $Addr = $xmlfile->{LIST_G_BURSTING}->{G_BURSTING};
foreach my $Addr ( @{ $xmlfile->{LIST_G_BURSTING}->{G_BURSTING} }
0