Question encapsulation debutant en Perl [HELP]

Question encapsulation debutant en Perl [HELP] - Perl - Programmation

Marsh Posté le 08-04-2010 à 15:01:22    

Bonjour à tous,
 
Question simple pour un débutant en Perl.
 
J'essais à partir d'un script principal (main.pl) d'appeler un script d'environnement (SetEnv.pl). Mon problème c'est que mes variables d'environnement définit dans SetEnv.pl ne sont pas visible dans mon script principal.
 
Main.pl
`perl "SetEnv.pl"`;
 
SetEnv.pl
$ENV{'ENCRYPT_PATH'}="E:\Code\S5_2\Script\Encrypt";
 
Quelqu'un peut m'aider je n'arrive pas à trouver.
Merci

Reply

Marsh Posté le 08-04-2010 à 15:01:22   

Reply

Marsh Posté le 08-04-2010 à 16:22:21    

Ça n'a rien a voir avec perl, cela, c'est juste une question de shell.
Sous Windows, vous pouvez utiliser le module Win32::Env
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 08-04-2010 à 16:29:02    

Pour expliquer le comportement constaté rapidement : quand tu appelles une commande avec les backquotes (alt.gr 7), tu crées un processus fils. Ici, ce processus fils est un script perl qui modifie les variables d'environnement, mais ces modifications ne seront appliquées que pour CE processus fils, et SES fils à lui.
Une fois l'appel terminé, le processus fils en question est détruit. Quant au processus père, il n'a jamais vu aucun changement de variable d'environnement. Nada, que dalle, zilch.

 

Conclusion : tu ne pourras jamais modifier les variables d'environnement en appelant une autre commande perl de cette manière. Le plus simple : crée un petit module (ou passe par Win32::Env comme le suggère gilou, je ne connais pas ce module :o)


Message édité par Elmoricq le 08-04-2010 à 16:31:14
Reply

Marsh Posté le 08-04-2010 à 19:04:13    

C'est un petit module tout simple, la doc en est ici: http://search.cpan.org/~ROWAA/Win3 [...] n32/Env.pm
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 09-04-2010 à 15:54:08    

Résolut
Merci mais j'ai trouvé un moyen de contourner ce problème.
 
Fils SetEnv.pl
print("ENCRYPT_PASSWORD dnBtY3VzdG0=\n" );
 
Père Main.pl
chomp( my @Cmds = `perl "SetEnv.pl"` );
foreach my $Cmds(@Cmds) {  
   my @ListArg = split(/ /,$Cmds);
   $ENV{$ListArg[0]}="$ListArg[1]";
}
 
C'est pas ce qui a de plus sexy mais sa me suffit amplement.
Je vais quand même jeter un oeil sur le Win32::Env mais comme mes scripts sont utilisés sur Windows et sur Unix...

Reply

Marsh Posté le 09-04-2010 à 21:40:22    

Pour unix, il y a le module Env::C
Et tu peux écrire du code dépendant de l'OS en utilisant la variable $^O qui vaut toujours MSWin32 sous Windows
 
Donc ça pourrait commencer par
 
if ($^O eq 'MSWin32') {
use Win32::Env;
.....
} else {
use Env::C;
....
}
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

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