Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1364 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  perl et l'export d'une varible d'environement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

perl et l'export d'une varible d'environement

n°1496035
donny3
Posté le 26-12-2006 à 13:36:14  profilanswer
 

salut,
 
Est il possible en perl de faire un export d' une variable d'environnement dans l'hypothese ou cette variable n'est pas defini ou si l'on souhaite modifier sa valeur ?
 
Merci

mood
Publicité
Posté le 26-12-2006 à 13:36:14  profilanswer
 

n°1496040
Elmoricq
Modérateur
Posté le 26-12-2006 à 13:46:40  profilanswer
 

Pour quoi faire ?

n°1496045
donny3
Posté le 26-12-2006 à 14:02:00  profilanswer
 

disons que dans mon script j'utilise une variable d'environnement
mais que cette variables d'environnement ne contient pas de valeur;
si j'execute mon script sa va bogué;
alors je souhaiterai tester et si elle n 'en contient pas, je lui en affecte une et ensuite je voudrais exporter cette variable pour pouvoir l'utiliser dans d'autre script;
(en shell on fait quelquechose comme sa mavariabeenv=toto;export mavariabeenv)

n°1496068
Elmoricq
Modérateur
Posté le 26-12-2006 à 15:04:38  profilanswer
 

Dans ce cas, tu peux modifier le hachage %ENV.
 
Exemple :

$ cat test.ksh
#! /bin/ksh
 
echo "machin = $machin"
 
$ cat test.pl  
#! /bin/perl
 
use strict;
 
print "Appel 1 - machin non positionné :\n";
system("test.ksh" );
 
$ENV{machin} = "abcdef";
 
print "Appel 2 - machin positionné :\n";
system("test.ksh" );
                                                                                                     
$ test.pl
Appel 1 - machin non positionné :
machin =  
Appel 2 - machin positionné :
machin = abcdef

n°1496090
donny3
Posté le 26-12-2006 à 16:33:51  profilanswer
 

et le export je le fait quand ?

n°1496095
Elmoricq
Modérateur
Posté le 26-12-2006 à 16:47:40  profilanswer
 

J'ai fait exprès d'appeler un script ksh séparé pour montrer que la variable d'environnement est bien accessible aux processus fils dès lors qu'elle existe dans le hâchage %ENV.
Le "export" (qui est un mot-clef ksh, et non perl) est implicite.

n°1496202
donny3
Posté le 27-12-2006 à 09:33:43  profilanswer
 

j'ai fait cela dans un script

Code :
  1. my $perlvari;
  2. if ( !defined( $ENV{"perlvari"} ) ) {
  3.     print "Saisir une valeur = ";
  4.     $perlvari = <STDIN>;
  5.     chomp ($perlvari);
  6.     $ENV{"perlvari"}=$perlvari;
  7.     print "Affichage de ma nouvelle valeur ".$ENV{"$perlvari"}."\n";
  8.    
  9.    
  10.     }
  11.   foreach my $k (keys(%ENV))
  12. {
  13.    print "Clef=$k Valeur=$ENV{$k}\n";
  14. }


 
quand je lance mon script la variable n'a pas de valeur,
donc je dois en saisir une;
je la saisi et ensuite j'ai une boucle qui m'affiche tous ce que je possede dans %ENV;
A l'affichage des données contenus dans mon %ENV,je constate bien que ma variable possede bien la nouvelle valeur, que j'ai saisi;
Mais le probleme, c'est que j'ai fait dans mon shell un echo de ma variable et la à ma surprise, ma variable est vide;
je relance mon script et il me redemande de saisir une valeur;
je comprend pas , pourtant quand je fait l'affichage du tableau,la variable d'environnement contient bien la bonne valeur  
????

n°1496504
Elmoricq
Modérateur
Posté le 28-12-2006 à 09:20:57  profilanswer
 

Est-ce que tu fais quelque chose comme ça ?

$ ton_script.pl
<saisie puis blabla>
$ echo $perlvari


 
Si oui, alors c'est normal. La modification des variables d'environnement n'est valable que pour le processus courant et, si la variable est "exportée", pour les processus fils.
 
Or, lorsque tu appelles un script PERL, il est lancé dans un processus fils à ton shell. Ton script a beau redéfinir ce qu'il veut dans les variables d'environnement, ton shell est le processus père, et n'est donc pas touché.

n°1496737
donny3
Posté le 28-12-2006 à 17:39:22  profilanswer
 

comment cela Elmoricq, j'ai pas trop saisi ?

n°1496746
Elmoricq
Modérateur
Posté le 28-12-2006 à 17:57:39  profilanswer
 

Une modification des variables d'environnement ne s'applique qu'au processus courant et aux processus fils.
C'est de l'héritage, grosso modo. Un fils hérite de ses parents, mais pas l'inverse (cas théorique :o ).
 
Schématiquement :


- shell courant
 |--- un processus lambda
      |--- un fils du processus lambda
 |--- ton script PERL
      |--- un fils du script PERL
      |--- un autre fils du script PERL
            |--- un fils d'un fils du script PERL
      |--- une fille du script PERL, j'suis pas sexiste


 
Selon ce shéma, une modification des variables d'environnement dans ton script PERL ne profite qu'à ton script PERL lui-même, et à ses fils (et petits-fils, et arrière-petits-fils, etc.)
Par contre, le shell courant, le processus lambda et les fistons du processus lambda ne voient pas leurs variables d'environnement modifiées.

mood
Publicité
Posté le 28-12-2006 à 17:57:39  profilanswer
 

n°1497892
donny3
Posté le 02-01-2007 à 13:04:07  profilanswer
 

ok je comprends mieux
en gros ce que je souhaite faire,c'est pratiquement impossible

n°1497906
Elmoricq
Modérateur
Posté le 02-01-2007 à 13:18:38  profilanswer
 

Voila. Mais généralement, lorsque aucune solution technique n'existe, c'est qu'il y a un problème de conception.

 

Dis-nous ce que tu essaies de faire, il y a sans doute une façon simple d'y remédier.


Message édité par Elmoricq le 02-01-2007 à 13:18:48
n°1498041
sephiburp
Posté le 02-01-2007 à 18:58:04  profilanswer
 

Bonjour,
j'ai exactement le même problème (mis à part que j'utilise un shell windows)
 
Elmoricq,  
Quelles sont les solutions possibles pour récupérer une variable d'un programme Perl lancé à partir d'un batch (.bat) ?
 
La possibilité de passer par un fichier ne me plait pas trop, je trouve çà plutôt dangereux (par exemple, dans le cas ou le fichier d'un ancien traitement est resté par erreur et est réutilisé dans la nouvelle exécution du script...).
Mais peut-être que je ne vois pas tout le potentiel de cette possibilité.  
 
Si quelqu'un a des idées, je suis preneur !! :)

n°1498060
Elmoricq
Modérateur
Posté le 02-01-2007 à 21:52:26  profilanswer
 

Si l'exécution de ton script ressemble à quelque chose comme ça :

 

C:\>script.bat
 |--- le script fait des trucs
 |   puis appel du programme PERL
     |--- exécution du programme PERL
 |    et retour au script

 

Et si tu veux, une fois revenu au script, utiliser des données créées par le programme PERL, alors tu disposes de deux solutions :

  • utiliser la sortie standard : dans le programme PERL, tu imprimes tes données avec de simples printf(), c'est facilement retraitable en script/batch.
  • imprimer le résultat du programme PERL dans un fichier : pour pallier au souci de mauvaise exécution que tu évoques, il suffit de spécifier au programme PERL le nom du fichier dans lequel écrire, et tu crées ce nom de fichier à chaque exécution avec une partie variable (un horodatage, ou un numéro de processus, ou autre chose...). Ou bien, si tu préfères un nom de fichier unique en mode annule&remplace, tu l'effaces en début de batch :o


Il s'agit là de problèmes de conception en fait, le fait qu'il s'agisse de PERL, de shell script ou de batch n'y change rien. [:klem3i1]


Message édité par Elmoricq le 02-01-2007 à 21:54:26
n°1498190
sephiburp
Posté le 03-01-2007 à 12:08:19  profilanswer
 

Merci pour ta réponse :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  perl et l'export d'une varible d'environement

 

Sujets relatifs
Export PHP-ExcelSSh en perl
[VBS] Supprimer une variable d'environement ( W2K)Export CSV, variables justifiees et caracteres speciaux
[PERL] Nom de Variable Dynamique[Question de n00b] Export de bdd et gestion des utilisateurs.
tableau en perlQuelques questions au sujet de Php /Perl / CGI...
[PERL] [Debutant] Commande shell source en perl[Perl] script utilisant les pipe unix, sql, et p'tet fork
Plus de sujets relatifs à : perl et l'export d'une varible d'environement


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR