parcourir un hash de hash

parcourir un hash de hash - Perl - Programmation

Marsh Posté le 09-07-2021 à 16:23:54    

J'obtiens cette erreur à l'exécution du script ci dessous
 
Quelle esst l'erreur dans le parcours du hash imbriqué ?
 
Reference found where even-sized list expected at ./test.pl line 20.
Use of uninitialized value $dossier in concatenation (.) or string at ./test.pl line 40.
Use of uninitialized value $dossier in concatenation (.) or string at ./test.pl line 41.
Use of uninitialized value $dossier in concatenation (.) or string at ./test.pl line 42.
Use of uninitialized value $specialite in concatenation (.) or string at ./test.pl line 42.
Use of uninitialized value $annee in concatenation (.) or string at ./test.pl line 42.
traitement do dossier  pour la specialite et l'annee

 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use File::Glob ':globally';
  5. use File::Basename;
  6. use File::stat;
  7. use XML::LibXML;
  8. use utf8;
  9. use MIME::Lite;
  10. my $dossier;
  11. my $repTraitement;
  12. my $repTraite;
  13. my $specialite;
  14. my $annee;
  15. my $repPrincipal = "/export/share/current/TEST-STAGE-ESIR/";
  16. my %lescursus = {Informatique1 => {
  17.                         dossier => "Informatique-1",
  18.                         specialite => "Informatique",
  19.                         annee => "Esir1" },
  20.               Materiaux2 => {
  21.                         dossier => "Materiaux-2",
  22.                         specialite => "Materiaux",
  23.                         annee => "Esir2" },
  24.               TNR3 => {
  25.                         dossier => "TNR-3",
  26.                         specialite => "TNR",
  27.                         annee =>  "Esir3"}
  28.         };
  29. foreach my $cursus(keys(%lescursus)) {
  30.         $dossier=$lescursus{$cursus}{'dossier'};
  31.         $specialite=$lescursus{$cursus}{'specialite'};
  32.         $annee=$lescursus{$cursus}{'annee'};
  33.         $repTraitement= $repPrincipal."/".$dossier."/A_TRAITER/";
  34.         $repTraite= $repPrincipal."/".$dossier;
  35.         print "traitement do dossier $dossier pour la specialité $specialite et l\'annee $annee\n";
  36.         #$identifiantDocument = obtenirListeFichiers($repTraitement, $identifiantDocument);
  37.         }

Reply

Marsh Posté le 09-07-2021 à 16:23:54   

Reply

Marsh Posté le 09-07-2021 à 19:39:01    

Bonjour,

 

Tiens, y a encore des gens qui vont du Perl5...

 

Tu devrais lire les messages d'erreurs / warnings depuis le début:
>Reference found where even-sized list expected at test.pl line 15.

 

En effet, il faut mettre des parenthèses, pas des accolades. Un hash s'initialise avec une liste.

 

>my %lescursus = ( Informatique1 => {...}, ... )


Message édité par rat de combat le 09-07-2021 à 19:39:18
Reply

Marsh Posté le 10-07-2021 à 12:34:38    

ca marche, merci beaucoup  :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed