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?
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.