http://qs1969.pair.com?node_id=1002464


in reply to Issue with env variables set through dos batch

You can't set environment variables set in a program that you call using system (or backticks), and expect them to persist into the parent process. It just doesn't work that way. You'll have to find another way to store them somewhere; or pass them back to the parent (perl).

You can run a perl script in the child process, which can for example use DATA::Dumper or JSON to store multiple environment variables from %ENV, reliably, and either save that into a temporary file where your parent perl script can read it in and parse it easily; or output it on STDOUT so processing the data via backticks is possible. Hell, you can probably just simply use set as the last command in the batch script to get a complete list of environment variables.

BTW as $scriptDir is set to cwd it is unnecessary to use it in your call to system; though in Unix you will have to use "./" instead. And you can always use catfile from File::Spec or File::Spec::Functions to join parts from file paths portably.