I came across a strange side effect while using File::Spec::tmpdir.
$ENV{TMPDIR} is being created and set to undef, as though it is being autovivified. I pulled the pieces out of File::Spec::Win32 and ::Unix and got it down to this example:
#!perl -w
use strict;
use warnings;
sub see_args {
printf "I see args '%s'\n", join("', '",@_);
return;
}
warn sprintf "In test, at start (1): TMPDIR '%s'\n",
! exists $ENV{TMPDIR} ? '<absent>' : ! defined $ENV{TMPDIR} ?
+ '<undef>' : $ENV{TMPDIR};
see_args( @ENV{qw(TMPDIR TEMP TMP)} );
warn sprintf "In test, at end (2): TMPDIR '%s'\n",
! exists $ENV{TMPDIR} ? '<absent>' : ! defined $ENV{TMPDIR} ?
+ '<undef>' : $ENV{TMPDIR};
produces output:
In test, at start (1): TMPDIR '<absent>'
Use of uninitialized value in join or string at test3.pl line 7.
I see args '', 'C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp', 'C:\DOCUME~1\ADMI
+NI~1\LOCALS~1\Temp'
In test, at end (2): TMPDIR '<undef>'
Just to be sure it wasn't the _use_ of the subroutine arguments, I commented out the printf, and got output
In test, at start (1): TMPDIR '<absent>'
In test, at end (2): TMPDIR '<undef>'
so it is the call itself doing the nasty thing to my mind. Can someone make this make sense to me?