Bonjour,

j'ai un problème dans l'un de mes scripts perl :

le principe:

un script lit un fichier de configuration texte , et charge les paramètres contenu dans le bloc "NOM_SCRIPT" dans une liste .

La plupart de ces variables contiennent du texte, mais certaines peuvent contenir des variables d'environnement shell

Exemple de bloc :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
DEBUT NOM_SCRIPT
# Un commentaire
VAL1 = XXXXX
VAL2= XXXXXXX
VAL3 = $LOG/essai.txt
FIN NOM_SCRIPT
$LOG étant une variable shell contenant par exemple /tmp

Le code qui fonctionne, mais que je ne trouve pas très propre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
my %liste;
## on recupère les lignes ds le bloc
 if ((/\s*DEBUT NOM_SCRIPT\s*$/ ... /\s*FIN NOM_SCRIPT\s*$/) =~ /^\d+(?<!^1)$/) {
 
      next if /\s*#/;
      if (  /\s*(\S+)\s*=\s*(\S+)\s*/){
          chomp($liste{$1}=`echo $2`);
     }
}
 
return %liste;
Je n'ai pas trouvé mieux que de faire un "echo" de chaque valeur pour obtenir la valeur désiré.

Mais je trouve cela limite sachant que je dois avoir 1% des valeurs du fichier qui contiennent des variables shells.

j'ai essayé de modifier mon fichier de conf pour mettre des $ENV au lieu de $ pour tester, mais là j'obtient
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
print $titre{VAL3} ==> $ENV{LOG}/essai.txt au lieu de /tmp/essai.txt
Je n'arrive pas à lui faire remplacer $ENV par la valeur de la variable.

Auriez-vous une idée qui me passerait du echo ?