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

Update:I was able to resolve this by reinstalling Scalar::Util
Thanks to Joost, et al from the chatterbox!
So i got to work this morning and found an unpleasant surprise on one of my development projects. I tracked it down to this:
perl -c XML_query_maker_support.pl Weak references are not implemented in the version of perl at /usr/lib +/perl5/site_perl/5.8.0/Tree/Simple.pm line 9 BEGIN failed--compilation aborted at /usr/lib/perl5/site_perl/5.8.0/Tr +ee/Simple.pm line 9.
This module worked when i left work yesterday, but...

Our network admin has been upgrading Redhat on this machine, and i have no idea why this occured. We're still using the same version of Perl:

perl -v This is perl, v5.8.0 built for i386-linux-thread-multi (with 1 registered patch, see perl -V for more detail) ...
And when I perl -V
Summary of my perl5 (revision 5.0 version 8 subversion 0) configuratio +n: Platform: osname=linux, osvers=2.4.21-23.elsmp, archname=i386-linux-thread-m +ulti uname='linux bug' config_args='-des -Doptimize=-O2 -g -pipe -march=i386 -mcpu=i686 - +Dmyhostname=localhost -Dperladmin=root@localhost -Dcc=gcc -Dcf_by=Red + Hat, Inc. -Dinstallprefix=/usr -Dprefix=/usr -Darchname=i386-linux - +Dvendorprefix=/usr -Dsiteprefix=/usr -Dotherlibdirs=/usr/lib/perl5/5. +8.0 -Duseshrplib -Dusethreads -Duseithreads -Duselargefiles -Dd_dosui +d -Dd_semctl_semun -Di_db -Ui_ndbm -Di_gdbm -Di_shadow -Di_syslog -Dm +an3ext=3pm -Duseperlio -Dinstallusrbinperl -Ubincompat5005 -Uversiono +nly -Dpager=/usr/bin/less -isr' hint=recommended, useposix=true, d_sigaction=define usethreads=define use5005threads=undef' useithreads=define usemultiplicity= useperlio= d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=un uselongdouble= usemymalloc=, bincompat5005=undef Compiler: cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS + -DDEBUGGING -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_S +OURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm', optimize='', cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBUGGI +NG -fno-strict-aliasing -I/usr/local/include -I/usr/include/gdbm' ccversion='', gccversion='3.2.3 20030502 (Red Hat Linux 3.2.3-49)' +, gccosandvers='' gccversion='3.2.3 200305' intsize=o, longsize=s, ptrsize=l, doublesize=8, byteorder=1234 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=1 +2 ivtype='long' k', ivsize=4' ivtype='long' known_exten, nvtype='double', nvsize=, Off_t='', lseeksize=8 alignbytes=4, prototype=define Linker and Libraries: ld='gcc' l', ldflags =' -' libpth=/usr/local/lib /lib /usr/lib libs=-lnsl -lgdbm -ldb -ldl -lm -lpthread -lc -lcrypt -lutil perllibs= libc=/lib/libc-2.3.2.so, so=so, useshrplib=true, libperl=libper gnulibc_version='2.3.2' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so', d_dlsymun=undef, ccdlflags='-rdynam +ic -Wl,-rpath,/usr/lib/perl5/5.8.0/i386-linux-thread-multi/CORE' cccdlflags='-fPIC' ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5', lddlflags='s Unicode/ +Normalize XS/A' Characteristics of this binary (from libperl): Compile-time options: DEBUGGING MULTIPLICITY USE_ITHREADS USE_LARGE_ +FILES PERL_IMPLICIT_CONTEXT Locally applied patches: MAINT18379 Built under linux Compiled at Feb 1 2005 09:37:17 @INC: /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0
From that output, i see that the registered patch was installed february 1, 2005, so it isnt anything new. I'm completely at a loss as to how to deal with this.

I could try re-installing Tree::Simple, and the 6 other Tree::Simple visitors that i need, but i don't know if that will help things at all.

Incidentally, line 9 of Tree::Simple is this:

use Scalar::Util qw(blessed weaken);
Anyone have any idea what might be going on?
I use the most powerful debugger available: print!

Replies are listed 'Best First'.
Re: Weak references not implemented
by BrowserUk (Patriarch) on Aug 05, 2005 at 18:45 UTC

    Scalar::Util::weaken (and isWeak() ) are only exported by the XS version of that module. If the XS version is not available, then most of the functions have pure perl alternatives, but not those two, or dualvar() & is_prototype().

    Whatever upgrades were done on your machine, it looks like the XS binary (Util.so?) has been deleted or moved.


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
    "Science is about questioning the status quo. Questioning authority".
    The "good enough" maybe good enough for the now, and perfection maybe unobtainable, but that should not preclude us from striving for perfection, when time, circumstance or desire allow.
Re: Weak references not implemented
by samtregar (Abbot) on Aug 05, 2005 at 18:43 UTC
    I'm completely at a loss as to how to deal with this.

    Upgrade your Perl, either by compiling from source or installing a more up-to-date RPM. I don't know how or why but Redhat managed to produce several builds of Perl 5.8.x without support for weak-refs. I've seen this problem several times in reports about Config::ApacheFormat, which uses Scalar::Util's weaken(), and each time it's been a bad Redhat Perl to blame.

    -sam