On Tue, 1 Feb 2005, Stas Bekman wrote:
> colin_e wrote:
> > Geoff,
> > I ran into some weirdness in this area (on a Win XP
> > machine running Apache 2.0.52) that seemed to be related
> > to using lowercase environment variable names. It
> > looked as if PerlSetEnv uppercased the variable names,
> > whereas SetEnv just ignored vars with lower case names.
> >
> > Sounds weird I know, and I didn't pin it down exactly,
> > but try uppercase variables and see if this works for
> > you.
>
> That's probably due to the differences of how perl and
> Apache interpret environ on win32. mod_perl really calls
> perl's funcs to get the env. I'm sure if you try that on
> the command line (plain perl) you will see the same
> behavior. something like:
>
> setenv foo bar (whatever it is on win32)
> perl -le 'print $ENV{FOO}'
>
> on unix that won't work, but on win32 it should print 'bar'.
That's right, Stas - on Win32,
C:\> set foo=bar
C:\> perl -le "print $ENV{FOO}"
prints "bar".
> I believe Randy has mentioned this before.
>
> How does mp1 deals with that?
>
> Randy?
There is a difference in this respect between mp1 and mp2.
For example, with a registry script that has
print "Foo = $ENV{Foo}<BR />";
print "FOO = $ENV{FOO}<BR />";
print "foo = $ENV{foo}<BR />";
one obtains:
- under Apache1/mp1,
SetEnv Foo Bar
SetEnv FOO BAR
yields
Foo = BAR
FOO = BAR
foo = BAR
whereas
PerlSetEnv Foo Bar
PerlSetEnv FOO BAR
yields
Foo = BAR
FOO = BAR
foo = BAR
So under mp1, SetEnv and PerlSetEnv behave the same,
as far as case goes.
- under Apache2/mp2,
SetEnv Foo Bar
SetEnv FOO BAR
yields
Foo = bar
FOO = bar
foo = bar
whereas
PerlSetEnv Foo Bar
PerlSetEnv FOO BAR
yields
Foo = BAR
FOO = BAR
foo = BAR
So the behaviour of SetEnv changed from Apache-1 to
Apache-2, as far as Win32 case goes, while PerlSetEnv
maintained the same behaviour from mp1 to mp2.
I suppose one could argue that we should change
PerlSetEnv under mp2 to lower-case things, so as
to be consistent with SetEnv?
--
best regards,
randy