Skip Menu |

This queue is for tickets about the List-MoreUtils CPAN distribution.

Report information
The Basics
Id: 63342
Status: resolved
Priority: 0/
Queue: List-MoreUtils

People
Owner: Nobody in particular
Requestors: dmcbride [...] cpan.org
Cc:
AdminCc:

Bug Information
Severity: Critical
Broken in: 0.24
Fixed in: 0.30



Subject: Recent changes mess up with diagnostics enabled on perl 5.8.8
$ perl5.8.8 -Mstrict -Mwarnings -Mdiagnostics -MList::MoreUtils=all -e 1 Use of uninitialized value in scalar assignment at /home/dmcbride/perl/5.8.8/lib/site_perl/5.8.8/x86_64-linux-thread- multi/List/MoreUtils.pm line 24 (#1) (W uninitialized) An undefined value was used as if it were already defined. It was interpreted as a "" or a 0, but maybe it was a mistake. To suppress this warning assign a defined value to your variables. To help you figure out what was undefined, perl tells you what operation you used the undefined value in. Note, however, that perl optimizes your program and the operation displayed in the warning may not necessarily appear literally in your program. For example, "that $foo" is usually optimized into "that " . $foo, and the warning will refer to the concatenation (.) operator, even though there is no . in your program. (This problem does not appear on Perl 5.12.2 or even 5.10.1)
Note that this problem basically boils down to this: $ perl5.8.8 -Mdiagnostics -e '$ENV{foo} = $ENV{foo}' produces an error if foo is not in the environment. Due to the magic in %ENV, you cannot set undef to an environment variable: $ perl5.8.8 -Mdiagnostics -e '$ENV{foo} = undef' Also produces the same error. It seems like we need to change the line that sets PERL_DL_NONLAZY. The intention of the code seems to be "if PERL_DL_NONLAZY is *true*, set it to zero, else keep it." The only non-true value that seems to be of interest is zero - which, as far as I can tell, has the same effect as having it not set at all. Thus, always set it to zero. I also can't find anything in the tests where it matters. That is, I just commented out the line altogether, make test succeeds. I also explicitly set to 0 and to 1, and make test still succeeds for each. Maybe it only affects some platforms? If the purpose is to turn off nonlazy, then I would suggest just turning off nonlazy, and always set it to zero, regardless of the old value.
One more bit: I've narrowed it down even more. We don't need diagnostics, we just need global warnings enabled with perl 5.8.8: $ perl5.8.8 -w -MList::MoreUtils -e 1 this is sufficient to show the warning. As is simply adding "use warnings;" before that BEGIN block.
From: tlhackque [...] yahoo.com
This IS still broken in 0.26 (Select multiple versions with ctrl/click.) I'd raise the importance to Critical - among other applications, this breaks TWiki.
Fixed in 0.30 but I cannot replicate still. Please open this ticket again if the problem still exists.