arthurg has asked for the wisdom of the Perl Monks concerning the following question:

Some code stopped working 1.5 days ago, and we're unsure why. I have full, daily backups, so I could restore from them, but I'd really like to know what's happened. First, I cannot locate any changes that would account for the problem. e.g., 'find' doesn't seem to identify significant file changes in the last 5 days:

$ find /var/www/cgi-bin/vpweb2/VirtualPlant /usr/lib64/perl5/site_per +l/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr +/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux- +thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_p +erl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5 +.8.8 -mtime -5 /var/www/cgi-bin/vpweb2/VirtualPlant/Analysis /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/perllocal.pod /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/auto/CPAN/.packlist /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/auto/Test/Harness/.pa +cklist /usr/lib/perl5/5.8.8 /usr/lib/perl5/5.8.8/CPAN /usr/lib/perl5/5.8.8/Test

(I reinstalled Test::Harness, as CPAN was reporting an old version.)

We use perl_mod and Apache; perl loaded by Apache has started reporting:

[Mon Dec 07 11:41:51 2009] [error] [client 128.122.61.181] failed to r +esolve handler `virtualplantCGI': Weak references are not implemented + in the version of perl at /usr/lib/perl5/site_perl/5.8.8/Graph/Easy/ +Group.pm line 10 BEGIN failed--compilation aborted at /usr/lib/perl5/site_perl/5.8.8/Gr +aph/Easy/Group.pm line 10. Compilation failed in require at /usr/lib/perl5/site_perl/5.8.8/Graph/ +Easy.pm line 12. BEGIN failed--compilation aborted at /usr/lib/perl5/site_perl/5.8.8/Gr +aph/Easy.pm line 12. Compilation failed in require at /var/www/cgi-bin/vpweb2/VirtualPlant/ +Analysis/Cytoscape.pm line 348. BEGIN failed--compilation aborted at /var/www/cgi-bin/vpweb2/VirtualPl +ant/Analysis/Cytoscape.pm line 348. Compilation failed in require at /var/www/cgi-bin/vpweb2/Includes.pm l +ine 25. BEGIN failed--compilation aborted at /var/www/cgi-bin/vpweb2/Includes. +pm line 25. Compilation failed in require at ...

In addition, CPAN has stopped working. Even installing it by hand fails:

[49 root@xxx:~/Downloads/CPAN-1.9402]$ perl Makefile.PL Importing PAUSE public key into your GnuPG keychain... done! (You may wish to trust it locally with 'gpg --lsign-key 450F89EC') WARNING: SIGN is not a known parameter. Checking if your kit is complete... Looks good 'SIGN' is not a known MakeMaker parameter name. Writing Makefile for CPAN

[50 root@xxx:~/Downloads/CPAN-1.9402]$ make test cp lib/CPAN.pm blib/lib/CPAN.pm cp lib/CPAN/CacheMgr.pm blib/lib/CPAN/CacheMgr.pm cp lib/CPAN/FTP/netrc.pm blib/lib/CPAN/FTP/netrc.pm cp lib/CPAN/LWP/UserAgent.pm blib/lib/CPAN/LWP/UserAgent.pm cp lib/CPAN/FTP.pm blib/lib/CPAN/FTP.pm cp lib/CPAN/Queue.pm blib/lib/CPAN/Queue.pm cp lib/CPAN/Distroprefs.pm blib/lib/CPAN/Distroprefs.pm cp lib/CPAN/Kwalify/distroprefs.yml blib/lib/CPAN/Kwalify/distroprefs. +yml cp lib/CPAN/Kwalify.pm blib/lib/CPAN/Kwalify.pm cp lib/CPAN/Module.pm blib/lib/CPAN/Module.pm cp lib/CPAN/Author.pm blib/lib/CPAN/Author.pm cp lib/CPAN/Debug.pm blib/lib/CPAN/Debug.pm cp lib/CPAN/API/HOWTO.pod blib/lib/CPAN/API/HOWTO.pod cp lib/CPAN/Complete.pm blib/lib/CPAN/Complete.pm cp lib/CPAN/FirstTime.pm blib/lib/CPAN/FirstTime.pm cp lib/CPAN/Exception/blocked_urllist.pm blib/lib/CPAN/Exception/block +ed_urllist.pm cp lib/CPAN/Distrostatus.pm blib/lib/CPAN/Distrostatus.pm cp lib/CPAN/Prompt.pm blib/lib/CPAN/Prompt.pm cp lib/CPAN/Tarzip.pm blib/lib/CPAN/Tarzip.pm cp lib/CPAN/Admin.pm blib/lib/CPAN/Admin.pm cp lib/CPAN/URL.pm blib/lib/CPAN/URL.pm cp lib/CPAN/Version.pm blib/lib/CPAN/Version.pm cp lib/CPAN/DeferredCode.pm blib/lib/CPAN/DeferredCode.pm cp lib/CPAN/Distribution.pm blib/lib/CPAN/Distribution.pm cp lib/CPAN/Nox.pm blib/lib/CPAN/Nox.pm cp lib/CPAN/Exception/RecursiveDependency.pm blib/lib/CPAN/Exception/R +ecursiveDependency.pm cp lib/CPAN/Bundle.pm blib/lib/CPAN/Bundle.pm cp lib/CPAN/Shell.pm blib/lib/CPAN/Shell.pm cp lib/CPAN/InfoObj.pm blib/lib/CPAN/InfoObj.pm cp lib/CPAN/HandleConfig.pm blib/lib/CPAN/HandleConfig.pm cp lib/CPAN/Exception/yaml_not_installed.pm blib/lib/CPAN/Exception/ya +ml_not_installed.pm cp lib/CPAN/Index.pm blib/lib/CPAN/Index.pm cp lib/CPAN/Kwalify/distroprefs.dd blib/lib/CPAN/Kwalify/distroprefs.d +d cp scripts/cpan blib/script/cpan /usr/bin/perl "-MExtUtils::MY" -e "MY->fixin(shift)" blib/script/cpan PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_h +arness(0, 'blib/lib', 'blib/arch')" t/*.t t/00signature.t ........ skipped: No Module::Signature found [INC = /r +oot/Downloads/CPAN-1.9402/blib/lib /root/Downloads/CPAN-1.9402/blib/a +rch /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/l +ib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/ve +ndor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/ +5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux- +thread-multi /usr/lib/perl5/5.8.8 .] t/01loadme.t ........... ok t/02nox.t .............. ok t/03pkgs.t ............. ok t/04clean_load.t ....... ok t/10version.t .......... ok t/11mirroredby.t ....... ok t/12cpan.t ............. 1/28 Use of uninitialized value in concatenat +ion (.) or string at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi +/Scalar/Util.pm line 30. gzip: /root/Downloads/CPAN-1.9402/t/CPAN/authors/01mailrc.txt: not in +gzip format Use of uninitialized value in concatenation (.) or string at /usr/lib6 +4/perl5/5.8.8/x86_64-linux-thread-multi/Scalar/Util.pm line 30. gzip: /root/Downloads/CPAN-1.9402/t/CPAN/modules/02packages.details.tx +t: not in gzip format Use of uninitialized value in concatenation (.) or string at /usr/lib6 +4/perl5/5.8.8/x86_64-linux-thread-multi/Scalar/Util.pm line 30. gzip: /root/Downloads/CPAN-1.9402/t/CPAN/modules/03modlist.data: not i +n gzip format t/12cpan.t ............. ok t/13tarzip.t ........... Use of uninitialized value in concatenation ( +.) or string at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/Scal +ar/Util.pm line 30. Undefined subroutine &Compress::Zlib::gzopen called at /root/Downloads +/CPAN-1.9402/blib/lib/CPAN/Tarzip.pm line 122. # Looks like your test died before it could output anything. t/13tarzip.t ........... Dubious, test returned 255 (wstat 65280, 0xff +00) Failed 1/1 subtests t/14forkbomb.t ......... skipped: test only run when called with --doi +t t/30shell.t ............ skipped: no Expect, maybe try env CPAN_RUN_SH +ELL_TEST_WITHOUT_EXPECT=1 t/31sessions.t ......... Use of uninitialized value in concatenation ( +.) or string at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/Scal +ar/Util.pm line 30, <DATA> line 579. ...

<code>

Replies are listed 'Best First'.
Re: CPAN and "Weak references"
by almut (Canon) on Dec 07, 2009 at 20:10 UTC
    Weak references are not implemented in the version of perl

    Usually, this has to do with the XS component of Scalar::Util not being found (in which case weaken() is not available):

    $ perl -MScalar::Util=weaken -e'weaken(\my $var)' $ sudo mv /usr/lib/perl5/5.8.8/x86_64-linux-thread-multi/auto/List/Uti +l/Util.so /usr/lib/perl5/5.8.8/x86_64-linux-thread-multi/auto/List/Ut +il/Util.so_hide $ perl -MScalar::Util=weaken -e'weaken(\my $var)' Weak references are not implemented in the version of perl at -e line +0 BEGIN failed--compilation aborted.
      Thanks Almut, but that doesn't seem to be the case; auto/List/Util/Util.so is in an element of @INC:
      $ perl -MScalar::Util=weaken -e'weaken(\my $var)' Weak references are not implemented in the version of perl at -e line +0 BEGIN failed--compilation aborted.
      $ locate Util.so /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/auto/List/Util/Util.s +o /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/auto/APR/ +Util/Util.so /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/auto/Apac +he2/ConnectionUtil/ConnectionUtil.so /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/auto/Apac +he2/RequestUtil/RequestUtil.so /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/auto/Apac +he2/ServerUtil/ServerUtil.so /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/auto/Apac +he2/Util/Util.so /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/auto/ModP +erl/Util/Util.so
      $ perl -e 'print join( "\n", @INC), "\n";' /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .

        You might additionally want to check whether Util.so is in fact being loaded:

        $ strace -efile perl -MScalar::Util=weaken -e'weaken(\my $var)' 2>&1 | + grep Util\.so

        With a working installation, the results should look something like

        stat("/usr/lib/perl5/5.8.8/auto/List/Util/Util.so", 0x63b140) = -1 ENO +ENT (No such file or directory) stat("/usr/lib/perl5/5.8.8/x86_64-linux-thread-multi/auto/List/Util/Ut +il.so", {st_mode=S_IFREG|0555, st_size=40616, ...}) = 0 open("/usr/lib/perl5/5.8.8/x86_64-linux-thread-multi/auto/List/Util/Ut +il.so", O_RDONLY) = 6

        Otherwise, you'd get stat()s with ENOENT only (several dozens, typically), or maybe an attempted open() with EACCES (Permission denied), but no successful open()

        But List::Util (to which List/Util/Util.so belongs) is a different module than Scalar::Util. Most likely, in your upgrade, your Perl did not compile the XS component of Scalar::Util, and your search seems to confirm that for me. So, reinstall Scalar::Util and make sure you have a matching C compiler for the Perl you're using available, so the XS component gets compiled.

Re: CPAN and "Weak references"
by Khen1950fx (Canon) on Dec 08, 2009 at 04:18 UTC
    Adam Kennedy wrote a module that fixes this problem. Try Task::Weaken. I've used it with excellent results.
Re: CPAN and "Weak references"
by ikegami (Patriarch) on Dec 07, 2009 at 21:44 UTC
    Have you tried reinstalling it?