Subject: | Uninitialized variable errors from CPAN::Distribution |
Date: | Wed, 31 Dec 2014 15:55:14 -0500 |
To: | bug-CPAN [...] rt.cpan.org |
From: | tlhackque <tlhackque [...] yahoo.com> |
CPAN::Distribution generates uninitialized variable errors from install,
test commands.
Typical errors:
Use of uninitialized value in scalar assignment at
.../CPAN/Distribution.pm line 1838.
Use of uninitialized value in scalar assignment at
.../CPAN/Distribution.pm line 2138.
(Google will turn up dozens of examples of these errors in the wild.)
Environment:
CPAN 2.05
perl, v5.8.8 built for i386-linux-thread-multi
Linux 2.6.22.14-72.fc6 #1 SMP Wed Nov 21 15:12:59 EST 2007 i686
i686 i386 GNU/Linux
This patch seems to fix the issues I've seen & should be safe. There
may be other occurrences of the idiom
local $ENV{x} = $ENV{x} where $ENV{x} doesn't exist or has an undef
value. These should be fixed.
--- /usr/lib/perl5/5.8.8/CPAN/Distribution.pm~ 2014-04-09
17:04:35.000000000 -0400
+++ /usr/lib/perl5/5.8.8/CPAN/Distribution.pm 2014-12-31
15:32:26.000000000 -0500
@@ -1833,12 +1833,12 @@
return;
}
$self->debug("Changed directory to $builddir") if $CPAN::DEBUG;
- local $ENV{PERL_AUTOINSTALL} = $ENV{PERL_AUTOINSTALL};
- local $ENV{PERL_EXTUTILS_AUTOINSTALL} =
$ENV{PERL_EXTUTILS_AUTOINSTALL};
+ local $ENV{PERL_AUTOINSTALL} = $ENV{PERL_AUTOINSTALL} || '';
+ local $ENV{PERL_EXTUTILS_AUTOINSTALL} =
$ENV{PERL_EXTUTILS_AUTOINSTALL} || '';
$self->choose_MM_or_MB
or return;
my $configurator = $self->{configure} ? "Configure"
: $self->{modulebuild} ? "Build.PL"
@@ -1854,12 +1854,12 @@
my $system;
my $pl_commandline;
if ($self->prefs->{pl}) {
$pl_commandline = $self->prefs->{pl}{commandline};
}
- local $ENV{PERL} = $ENV{PERL};
- local $ENV{PERL5_CPAN_IS_EXECUTING} = $ENV{PERL5_CPAN_IS_EXECUTING};
+ local $ENV{PERL} = defined $ENV{PERL}? $ENV{PERL} : $^X;
+ local $ENV{PERL5_CPAN_IS_EXECUTING} = $ENV{PERL5_CPAN_IS_EXECUTING}
|| '';
local $ENV{PERL_MM_USE_DEFAULT} = 1 if
$CPAN::Config->{use_prompt_default};
local $ENV{NONINTERACTIVE_TESTING} = 1 if
$CPAN::Config->{use_prompt_default};
if ($pl_commandline) {
$system = $pl_commandline;
$ENV{PERL} = $^X;
@@ -2133,11 +2133,11 @@
my $system;
my $make_commandline;
if ($self->prefs->{make}) {
$make_commandline = $self->prefs->{make}{commandline};
}
- local $ENV{PERL} = $ENV{PERL};
+ local $ENV{PERL} = defined $ENV{PERL}? $ENV{PERL} : $^X;
local $ENV{PERL_MM_USE_DEFAULT} = 1 if
$CPAN::Config->{use_prompt_default};
local $ENV{NONINTERACTIVE_TESTING} = 1 if
$CPAN::Config->{use_prompt_default};
if ($make_commandline) {
$system = $make_commandline;
$ENV{PERL} = CPAN::find_perl();
--
This communication may not represent my employer's views,
if any, on the matters discussed.