Using System to read mixed cased environment variables on Windows

T

Thierry

On Windows XP Pro 32 bit, if I want to output environment variables
PYTHON or ProgramFiles, I use the set command which output the
following:

C:\set PYTHON
PYTHON=C:\Python24\python.exe
C:\set ProgramFiles
ProgramFiles=C:\Program Files

If I used Perl 5.003_07 and use the system subroutine to show the
environment variables, I get the following. Perl script is:

system("set PYTHON");
system("set ProgramFiles");

Output is:
PYTHON=C:\Python24\python.exe
PROGRAMFILES=C:\Program Files

You'll notice that through system, the environment variable
ProgramFiles is all in upper case. Is there a way to preserve the
mixed case of the environment variable through system(...)?
 
R

Ron Bergin

On Windows XP Pro 32 bit, if I want to output environment variables
PYTHON or ProgramFiles, I use the set command which output the
following:

C:\set PYTHON
PYTHON=C:\Python24\python.exe
C:\set ProgramFiles
ProgramFiles=C:\Program Files

If I used Perl 5.003_07

That's a fairly old version. You should upgrade to at least 5.8
and use the system subroutine to show the
environment variables, I get the following. Perl script is:

system("set PYTHON");
system("set ProgramFiles");
There's no reason to use a system call. Your environment variables
are already stored in the %ENV hash.

print $ENV{'ProgramFiles'};
 
S

sisyphus

On Windows XP Pro 32 bit, if I want to output environment variables
PYTHON or ProgramFiles, I use the set command which output the
following:

C:\set PYTHON
PYTHON=C:\Python24\python.exe
C:\set ProgramFiles
ProgramFiles=C:\Program Files

If I used Perl 5.003_07 and use the system subroutine to show the
environment variables, I get the following.  Perl script is:

system("set PYTHON");
system("set ProgramFiles");

Output is:
PYTHON=C:\Python24\python.exe
PROGRAMFILES=C:\Program Files

You'll notice that through system, the environment variable
ProgramFiles is all in upper case.  Is there a way to preserve the
mixed case of the environment variable through system(...)?

I find that case is preserved with perl 5.6.2, 5.8.8 and 5.10.0:

C:\>set MyTest=C:\MyTest

C:\>set MyTest
MyTest=C:\MyTest

C:\CVS>perl -e "system(\"set MyTest\")"
MyTest=C:\MyTest

C:\CVS>set MITEST=C:\MiTest

C:\CVS>perl -e "system(\"set MiTest\")"
MITEST=C:\MiTest

Not quite sure why you get the behaviour you reported ... perhaps it
is just that antiquated version of perl you're running. I guess you
could update your perl and see if the behaviour changes. (Though as
Ron Bergin has already indicated, there are better ways of accessing
the environment variables anyway.)

Cheers,
Rob
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,774
Messages
2,569,596
Members
45,143
Latest member
SterlingLa
Top