Discussion:
findnode() results in Invalid Expression only on non-self-compiled perl
(too old to reply)
h***@cenix-bioscience.com
2008-01-08 11:48:55 UTC
Permalink
Hello,

I'm a bit new to perl, but I think I'm experiencing a very strange
behavior in perl.
findnodes() gives me an Invalid expression only on perl which comes
with the distribution on SuSE 10.3, RHEL4 and RHEL 5.1.

But if I compile the entire perl by myself it doesnt occur and works
just find.
I tried with different versions of perl and XML-Lib but no difference.

Here is the code:

#!/usr/bin/perl -w
use strict;
use XML::LibXML;
use Getopt::Std;
use vars qw/$opt_x/;

{ # main

my $parser = XML::LibXML->new();
my $usercfg = $parser->parse_file('./user.cfg');
my $mailcfg = $parser->parse_file('./server.cfg');
my $uroot = $usercfg->documentElement;
my $mroot = $mailcfg->documentElement;

my @unodes = $uroot->findnodes('./');
my @mnodes = $mroot->findnodes('./');


The different config show this:
/usr/bin/perl -V (Distribution:

Summary of my perl5 (revision 5 version 8 subversion 5) configuration:
Platform:
osname=linux, osvers=2.6.9-55.0.9.elsmp, archname=i386-linux-
thread-multi
uname='linux hs20-bc1-5.build.redhat.com 2.6.9-55.0.9.elsmp #1 smp
tue sep 25 02:16:15 edt 2007 i686 i686 i386 gnulinux '
config_args='-des -Doptimize=-O2 -g -pipe -m32 -march=i386 -
mtune=pentium4 -Dversion=5.8.5 -Dmyhostname=localhost -
Dperladmin=***@localhost -Dcc=gcc -Dcf_by=Red Hat, Inc. -
Dinstallprefix=/usr -Dprefix=/usr -Darchname=i386-linux -
Dvendorprefix=/usr -Dsiteprefix=/usr -Duseshrplib -Dusethreads -
Duseithreads -Duselargefiles -Dd_dosuid -Dd_semctl_semun -Di_db -
Ui_ndbm -Di_gdbm -Di_shadow -Di_syslog -Dman3ext=3pm -Duseperlio -
Dinstallusrbinperl -Ubincompat5005 -Uversiononly -Dpager=/usr/bin/less
-isr -Dinc_version_list=5.8.4 5.8.3 5.8.2 5.8.1 5.8.0'
hint=recommended, useposix=true, d_sigaction=define
usethreads=define use5005threads=undef useithreads=define
usemultiplicity=define
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBUGGING -fno-
strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -
D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm',
optimize='-O2 -g -pipe -m32 -march=i386 -mtune=pentium4',
cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBUGGING -fno-strict-
aliasing -pipe -I/usr/local/include -I/usr/include/gdbm'
ccversion='', gccversion='3.4.6 20060404 (Red Hat 3.4.6-8)',
gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=4, prototype=define
Linker and Libraries:
ld='gcc', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lresolv -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -
lc
perllibs=-lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
libc=/lib/libc-2.3.4.so, so=so, useshrplib=true, libperl=libperl.so
gnulibc_version='2.3.4'
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E -
Wl,-rpath,/usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE'
cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'


Characteristics of this binary (from libperl):
Compile-time options: DEBUGGING MULTIPLICITY USE_ITHREADS
USE_LARGE_FILES PERL_IMPLICIT_CONTEXT
Built under linux
Compiled at Oct 22 2007 16:12:50


/usr/local/bin/perl -V (self compiled)
Summary of my perl5 (revision 5 version 8 subversion 7) configuration:
Platform:
osname=linux, osvers=2.6.9-42.0.3.elsmp, archname=i686-linux
uname='linux pony.cenix-bioscience.com 2.6.9-42.0.3.elsmp #1 smp
mon sep 25 17:28:02 edt 2006 i686 athlon i386 gnulinux '
config_args=''
hint=recommended, useposix=true, d_sigaction=define
usethreads=undef use5005threads=undef useithreads=undef
usemultiplicity=undef
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='cc', ccflags ='-fno-strict-aliasing -pipe -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm',
optimize='-O2',
cppflags='-fno-strict-aliasing -pipe -I/usr/local/include -I/usr/
include/gdbm'
ccversion='', gccversion='3.4.6 20060404 (Red Hat 3.4.6-3)',
gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=4, prototype=define
Linker and Libraries:
ld='cc', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc
perllibs=-lnsl -ldl -lm -lcrypt -lutil -lc
libc=/lib/libc-2.3.4.so, so=so, useshrplib=false, libperl=libperl.a
gnulibc_version='2.3.4'
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'


Characteristics of this binary (from libperl):
Compile-time options: USE_LARGE_FILES
Built under linux
Compiled at Oct 11 2006 02:59:09

It would be great if someone could pojnt me in the right direction. I
would like to use the script on several machines and therefore dont
like to compile perl everytime.
Adam Kennedy
2008-01-09 14:04:30 UTC
Permalink
RedHat :)

So the problem here typically is that SOME Perl distribution maintainers
like to apply the occasional non-standard bleadperl patches to their
release, and then version it the same as the regular one.

This results in bugs (I had to update 9 CPAN modules the week after I
first got access to a RHEL 4 Update 1 machine).

I know for a fact there's still some bizarre thread bugs hidden in some
versions of RedHat Enterprise Linux 4 that cause Test::More to fail its
tests.

At my company we've just plain given up on RHEL 4 and we're moving to 5
to try to avoid them.

If you are having troubles with a vendor-screwed-up Perl version, my
main recommendation would be to build your /opt/perl and use that for
your application.

Alternatively, if you have formal support contracts with those vendors
PLEASE file formal bug reports. It's one of the few weapons we have to
push them to not pull this crap.

Adam K
Post by h***@cenix-bioscience.com
Hello,
I'm a bit new to perl, but I think I'm experiencing a very strange
behavior in perl.
findnodes() gives me an Invalid expression only on perl which comes with
the distribution on SuSE 10.3, RHEL4 and RHEL 5.1.
But if I compile the entire perl by myself it doesnt occur and works
just find.
I tried with different versions of perl and XML-Lib but no difference.
#!/usr/bin/perl -w
use strict;
use XML::LibXML;
use Getopt::Std;
use vars qw/$opt_x/;
{ # main
my $parser = XML::LibXML->new();
my $usercfg = $parser->parse_file('./user.cfg');
my $mailcfg = $parser->parse_file('./server.cfg');
my $uroot = $usercfg->documentElement;
my $mroot = $mailcfg->documentElement;
osname=linux, osvers=2.6.9-55.0.9.elsmp,
archname=i386-linux-thread-multi
uname='linux hs20-bc1-5.build.redhat.com 2.6.9-55.0.9.elsmp #1 smp
tue sep 25 02:16:15 edt 2007 i686 i686 i386 gnulinux '
config_args='-des -Doptimize=-O2 -g -pipe -m32 -march=i386
-mtune=pentium4 -Dversion=5.8.5 -Dmyhostname=localhost
-Dinstallprefix=/usr -Dprefix=/usr -Darchname=i386-linux
-Dvendorprefix=/usr -Dsiteprefix=/usr -Duseshrplib -Dusethreads
-Duseithreads -Duselargefiles -Dd_dosuid -Dd_semctl_semun -Di_db
-Ui_ndbm -Di_gdbm -Di_shadow -Di_syslog -Dman3ext=3pm -Duseperlio
-Dinstallusrbinperl -Ubincompat5005 -Uversiononly -Dpager=/usr/bin/less
-isr -Dinc_version_list=5.8.4 5.8.3 5.8.2 5.8.1 5.8.0'
hint=recommended, useposix=true, d_sigaction=define
usethreads=define use5005threads=undef useithreads=define
usemultiplicity=define
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBUGGING
-fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm',
optimize='-O2 -g -pipe -m32 -march=i386 -mtune=pentium4',
cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBUGGING -fno-strict-aliasing
-pipe -I/usr/local/include -I/usr/include/gdbm'
ccversion='', gccversion='3.4.6 20060404 (Red Hat 3.4.6-8)',
gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=4, prototype=define
ld='gcc', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lresolv -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc
perllibs=-lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
libc=/lib/libc-2.3.4.so, so=so, useshrplib=true, libperl=libperl.so
gnulibc_version='2.3.4'
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E
-Wl,-rpath,/usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE'
cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'
Compile-time options: DEBUGGING MULTIPLICITY USE_ITHREADS
USE_LARGE_FILES PERL_IMPLICIT_CONTEXT
Built under linux
Compiled at Oct 22 2007 16:12:50
/usr/local/bin/perl -V (self compiled)
osname=linux, osvers=2.6.9-42.0.3.elsmp, archname=i686-linux
uname='linux pony.cenix-bioscience.com 2.6.9-42.0.3.elsmp #1 smp mon
sep 25 17:28:02 edt 2006 i686 athlon i386 gnulinux '
config_args=''
hint=recommended, useposix=true, d_sigaction=define
usethreads=undef use5005threads=undef useithreads=undef
usemultiplicity=undef
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
cc='cc', ccflags ='-fno-strict-aliasing -pipe -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm',
optimize='-O2',
cppflags='-fno-strict-aliasing -pipe -I/usr/local/include
-I/usr/include/gdbm'
ccversion='', gccversion='3.4.6 20060404 (Red Hat 3.4.6-3)',
gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=4, prototype=define
ld='cc', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc
perllibs=-lnsl -ldl -lm -lcrypt -lutil -lc
libc=/lib/libc-2.3.4.so, so=so, useshrplib=false, libperl=libperl.a
gnulibc_version='2.3.4'
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'
Compile-time options: USE_LARGE_FILES
Built under linux
Compiled at Oct 11 2006 02:59:09
It would be great if someone could pojnt me in the right direction. I
would like to use the script on several machines and therefore dont like
to compile perl everytime.
Loading...