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 :
$LOG étant une variable shell contenant par exemple /tmp
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
Le code qui fonctionne, mais que je ne trouve pas très propre :
Je n'ai pas trouvé mieux que de faire un "echo" de chaque valeur pour obtenir la valeur désiré.
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;
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
Je n'arrive pas à lui faire remplacer $ENV par la valeur de la variable.
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
Auriez-vous une idée qui me passerait du echo ?
Partager