Se connecter avec
S'enregistrer | Connectez-vous

[Perl] Récupérer valeur d'un programme Perl dans un batch

Dernière réponse : dans Programmation

Bonjour,

J'ai un script "appel.bat" qui appelle un programme Perl "pgm.pl".

J'aimerais pouvoir récupérer, dans "appel.bat", des valeurs générées par "pgm.pl".

Dans l'autre sens, çà ne pose pas de problème. C'est-à-dire :
Dans "appel.bat" j'appelle le programme Perl en passant une variable VAR1 :
C:\Perl\bin\perl.exe "C:\pgm.pl" %VAR1%
et dans le "pgm.pl", on peut récupérer la valeur de VAR1 en utilisant la variable $ARGV[0]

Mais ceci ne marche pas pour passer une valeur de "pgm.pl" au batch "appel.bat". Voici ce que j'ai essayé :

Dans "appel.bat" :
  1. C:\Perl\bin\perl.exe "C:\pgm.pl" %VAR1%
  2. echo %VAR1%


Dans "pgm.pl" :
  1. $ARGV[0]="coucou";



Mais dans "appel.bat", la variable %VAR1% reste vide.


Une solution serait de passer par un fichier mais çà me convient pas car je fais des print dans le "pgm.pl"


Quelqu'un a une idée svp ??
Lassé par la pub ? Créez un compte

Bonne année !!


J'ai un nouveau problème.

En Perl, j'arrive à écrire dans des variables d'environnement avec $ENV{''} mais je n'arrive pas à lire les valeurs en batch.

Toujours avec le même exemple :


Dans "appel.bat" :
  1. SET MAVAR=AAA
  2. C:\Perl\bin\perl.exe "C:\pgm.pl"
  3. ECHO %MAVAR%


Dans "pgm.pl" :
  1. print $ENV{'MAVAR'}; # Affiche "AAA"
  2. $ENV{'MAVAR'} = "BBB";
  3. print $ENV{'MAVAR'}; # Affiche "BBB"


La variable MAVAR est bien lue et bien modifiée dans "pgm.pl"
Mais dans le batch "appel.bat", le ECHO en ligne 3 affiche toujours "AAA" pourtant la valeur a bien été modifiée dans le pgm.pl



Expert Programmation

M'enfin, une variable d'environnement ne peut pas être modifiée par un sous-programme (en perl, en C, en ce-que-tu-veux), c'est le principe des variables d'environnement.
Expert Programmation

Un hack (peut-on vraiment parler de hack sous DOS :lol: ) est de faire écrire au sous programme un fichier BAT temporaire contenant
SET VAR=valeur
Il suffit alors d'exécuter ce batch avec un CALL puis de le supprimer :

  1. ECHO OFF
  2. SETLOCAL
  3.  
  4. SET AN=2006
  5.  
  6. ECHO SET AN=2007 > %TEMP%\ANNEE.BAT
  7.  
  8. ECHO Joyeux Noël %AN%
  9. CALL %TEMP%\ANNEE.BAT
  10. ECHO Et bonne année %AN%
  11.  
  12. DEL %TEMP%\ANNEE.BAT
Lassé par la pub ? Créez un compte