This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #93638] $ENV{LS_COLORS} causes miniperl glob failure
authorFather Chrysostomos <sprout@cpan.org>
Fri, 16 Sep 2011 21:32:20 +0000 (14:32 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Fri, 16 Sep 2011 21:51:16 +0000 (14:51 -0700)
On some systems, csh croaks if the LS_COLORS envvar contains something
it considers invalid.

The easiest and least intrusive fix for now is to localize %ENV before
running csh, though eventually it might be nice to use File::Glob in
miniperl, either by linking it statically or by inlining it.

doio.c
pod/perldelta.pod

diff --git a/doio.c b/doio.c
index 1edf8d2..838786e 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -2375,6 +2375,7 @@ Perl_vms_start_glob
 #endif
 #endif /* !CSH */
 #endif /* !DOSISH */
+    save_hash(gv_fetchpvs("ENV", 0, SVt_PVHV));
     (void)do_open(PL_last_in_gv, (char*)SvPVX_const(tmpcmd), SvCUR(tmpcmd),
                  FALSE, O_RDONLY, 0, NULL);
     fp = IoIFP(io);
index 352ae42..37a4d5d 100644 (file)
@@ -798,6 +798,13 @@ Weakening the first argument to an automatically-invoked C<DESTROY> method
 could result in erroneous "DESTROY created new reference" errors or
 crashes.  Now it is an error to weaken a read-only reference.
 
+=item *
+
+Under miniperl (used to configure modules when perl itself is built),
+C<glob> now clears %ENV before calling csh, since the latter croaks on some
+systems if it does not like the contents of the LS_COLORS enviroment
+variable [perl #98662].
+
 =back
 
 =head1 Known Problems