develooper Front page | perl.perl5.porters | Postings from November 1999

[ID 19991110.004] passing '-I' flag to embedded interpretercauses core dump

From:
Mitchell Morris
Date:
November 10, 1999 06:07
Subject:
[ID 19991110.004] passing '-I' flag to embedded interpretercauses core dump
Message ID:
19991110090616.A20862@unpkhswm04.bscc.bls.com
While embedding a Perl interpreter into an existing application framework, I
was causing some puzzling core dumps and/or heap crushes. A C++ program to
replicate the problem follows. The workaround was not to pass "-I" to
perl_parse() but to relegate @INC manipulations to the Perl programs
themselves.

+Mitchell

P.S. I've tried to submit this previously, but couldn't find it in the
database so I'm resubmitting. If this is a duplicate, I apologize in
advance.

######################################################################
# file: arrrrgh.C
######################################################################
#include <iostream.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

extern "C" {
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
}

//======================================================================
struct node_t {
//======================================================================
	struct node_t* next;
	long magic;
};

//======================================================================
// Module statics
//======================================================================
struct node_t* root;

//======================================================================
void add_node()
//======================================================================
{
	node_t* p = new node_t;
	p->next = root;
	p->magic = 0xA5A5A5A5;
	root = p;
}

//======================================================================
int verify()
//======================================================================
{
	int rc = 1;
	for(node_t* p = root; p; p = p->next) {
		if(p->magic != 0xA5A5A5A5) {
			rc = 0;
			break;
		}
	}
	return rc;
}

//======================================================================
void cleanup()
//======================================================================
{
	node_t* p;
	node_t* q;
	for(p = root; p; p = q) {
		q = p->next;
		delete p;
	}
	root = 0;
}

//======================================================================
static void dirname(char* buf)
//======================================================================
{
	char* p = strrchr(buf, '/');
	if(p)
		*p = 0;
	else
		strcpy(buf, ".");
}

//======================================================================
int main(int argc, char** argv, char**)
//======================================================================
{
	if(argc != 3) {
		cout << "Usage: " << argv[0] << " script data" << endl;
		return 1;
	}

	int ac = 0;
	char* av[20];
	av[ac++] = "";
	av[ac++] = "-w";
	av[ac++] = "-I/tmp";
	av[ac++] = argv[1];
	av[ac++] = argv[2];
	av[ac] = 0;

	char cmd[1024];
	sprintf(cmd, "/bin/ps auxc %d", getpid());
	for(int i = 0; i < 10000; i++) {
		if(i % 100 == 0)
			cout << i << " iterations" << endl;

		for(int j = 0; j < 100; j++)
			add_node();


		PerlInterpreter* perl = perl_alloc();
		perl_construct(perl);
		int rc = perl_parse(perl, NULL, ac, av, NULL);
		if(!rc)
			rc = perl_run(perl);
		PL_perl_destruct_level = 1;
		perl_destruct(perl);
		perl_free(perl);


		if(!verify()) {
			cout << "heap crushed after " << i << " iterations" << endl;
			break;
		}
		if(i % 1000 == 0) {
			system(cmd);
			// cleanup();
		}
	}

	return 0;
}

######################################################################
# file: sample.pl
######################################################################
open FILE, ">>$ARGV[0]" or die "can't append to [$ARGV[0]]: $!\n";
print FILE "### ARGV=[@ARGV]\n";
close FILE;

######################################################################
# file: sample.data
######################################################################
Here is some data
Job: [NOEXEC=1 select * from anpkhsw1:.sw where mid=4045551212; PRIORITY=1 update anpkhsw1:.vm set foo=bar where baz=bat;]

######################################################################
# perlbug -d -v output
######################################################################
Site configuration information for perl 5.00503:

Configured by mgm at Tue Nov  9 09:37:51 EST 1999.

Summary of my perl5 (5.0 patchlevel 5 subversion 3) configuration:
  Platform:
    osname=aix, osvers=4.3.2.0, archname=aix
    uname='aix anpkmsw1 3 4 00900241c400 '
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef useperlio=undef d_sfio=undef
  Compiler:
    cc='cc', optimize='-O', gccversion=
    cppflags='-D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE -qmaxmem=8192 -I/usr/local/include'
    ccflags ='-D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE -qmaxmem=8192 -I/usr/local/include'
    stdchar='unsigned char', d_stdstdio=define, usevfork=false
    intsize=4, longsize=4, ptrsize=4, doublesize=8
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=8
    alignbytes=8, usemymalloc=n, prototype=define
  Linker and Libraries:
    ld='ld', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib /usr/ccs/lib
    libs=-lnsl -ldbm -ldl -lld -lm -lc -lcrypt -lbsd -lPW
    libc=, so=a, useshrplib=false, libperl=libperl.a
  Dynamic Linking:
    dlsrc=dl_aix.xs, dlext=so, d_dlsymun=undef, ccdlflags='-bE:perl.exp'
    cccdlflags=' ', lddlflags='-bhalt:4 -bM:SRE -bI:$(PERL_INC)/perl.exp -bE:$(BASEEXT).exp -b noentry -lc -L/usr/local/lib'

Locally applied patches:
    

---
@INC for perl 5.00503:
    /usr/local/lib/perl5/5.00503/aix
    /usr/local/lib/perl5/5.00503
    /usr/local/lib/perl5/site_perl/5.005/aix
    /usr/local/lib/perl5/site_perl/5.005
    .

---
Environment for perl 5.00503:
    HOME=/home/mgm
    LANG=C
    LANGUAGE (unset)
    LC_MESSAGES=en_US
    LC__FASTMSG=true
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/apps/rapid/bin:/usr/local/bin:/opt/local/bin:/home/mgm/bin:/bin:/usr/bin:/etc:/usr/ucb:/usr/sbin::/cbss/bin:/home/mgm/bin:/cbss/bin
    PERL_BADLANG (unset)
    SHELL=/bin/ksh

Complete configuration data for perl 5.00503:

Author=''
CONFIG='true'
Date='$Date'
Header=''
Id='$Id'
Locker=''
Log='$Log'
Mcc='Mcc'
PATCHLEVEL='5'
RCSfile='$RCSfile'
Revision='$Revision'
SUBVERSION='3'
Source=''
State=''
_a='.a'
_exe=''
_o='.o'
afs='false'
alignbytes='8'
ansi2knr=''
aphostname=''
apiversion='5.005'
ar='ar'
archlib='/usr/local/lib/perl5/5.00503/aix'
archlibexp='/usr/local/lib/perl5/5.00503/aix'
archname='aix'
archobjs=''
awk='awk'
baserev='5.0'
bash=''
bin='/usr/local/bin'
binexp='/usr/local/bin'
bison=''
byacc='byacc'
byteorder='4321'
c='\c'
castflags='1'
cat='cat'
cc='cc'
cccdlflags=' '
ccdlflags='-bE:perl.exp'
ccflags='-D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE -qmaxmem=8192 -I/usr/local/include'
ccsymbols='_AIX43=1'
cf_by='mgm'
cf_email='mgm@anpkmsw1.uucp'
cf_time='Tue Nov  9 09:37:51 EST 1999'
chgrp=''
chmod=''
chown=''
clocktype='clock_t'
comm='comm'
compress=''
config_arg0='./Configure'
config_arg1='-ds'
config_argc='1'
config_args='-ds'
contains='grep'
cp='cp'
cpio=''
cpp='cpp'
cpp_stuff='42'
cppccsymbols='_AIX=1 _AIX32=1 _AIX41=1 _IBMR2=1 _POWER=1'
cppflags='-D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE -qmaxmem=8192 -I/usr/local/include'
cpplast=''
cppminus=''
cpprun='/usr/lib/cpp'
cppstdin='cppstdin'
cppsymbols=''
cryptlib=''
csh='csh'
d_Gconvert='gcvt((x),(n),(b))'
d_access='define'
d_alarm='define'
d_archlib='define'
d_attribut=''
d_bcmp='define'
d_bcopy='define'
d_bsd='define'
d_bsdgetpgrp=''
d_bsdsetpgrp=''
d_bzero='define'
d_casti32='define'
d_castneg=''
d_charvspr=''
d_chown='define'
d_chroot='define'
d_chsize=''
d_closedir='define'
d_const='define'
d_crypt='define'
d_csh='define'
d_cuserid='define'
d_dbl_dig='define'
d_difftime='define'
d_dirnamlen='define'
d_dlerror='define'
d_dlopen='define'
d_dlsymun=''
d_dosuid=''
d_dup2='define'
d_endgrent='define'
d_endhent='define'
d_endnent='define'
d_endpent='define'
d_endpwent='define'
d_endsent='define'
d_eofnblk='define'
d_eunice=''
d_fchmod='define'
d_fchown='define'
d_fcntl='define'
d_fd_macros='define'
d_fd_set='define'
d_fds_bits='define'
d_fgetpos='define'
d_flexfnam='define'
d_flock='define'
d_fork='define'
d_fpathconf='define'
d_fsetpos='define'
d_fstatfs='define'
d_fstatvfs='define'
d_ftime=''
d_getgrent='define'
d_getgrps='define'
d_gethbyaddr='define'
d_gethbyname='define'
d_gethent='define'
d_gethname=''
d_gethostprotos='define'
d_getlogin='define'
d_getmntent=''
d_getnbyaddr='define'
d_getnbyname='define'
d_getnent='define'
d_getnetprotos='define'
d_getpbyname='define'
d_getpbynumber='define'
d_getpent='define'
d_getpgid='define'
d_getpgrp='define'
d_getpgrp2=''
d_getppid='define'
d_getprior='define'
d_getprotoprotos='define'
d_getpwent='define'
d_getsbyname='define'
d_getsbyport='define'
d_getsent='define'
d_getservprotos='define'
d_gettimeod='define'
d_gnulibc=''
d_grpasswd='define'
d_hasmntopt=''
d_htonl='define'
d_index=''
d_inetaton='define'
d_isascii='define'
d_killpg='define'
d_lchown='define'
d_link='define'
d_locconv='define'
d_lockf='define'
d_longdbl='define'
d_longlong='define'
d_lstat='define'
d_mblen='define'
d_mbstowcs='define'
d_mbtowc='define'
d_memcmp='define'
d_memcpy='define'
d_memmove='define'
d_memset='define'
d_mkdir='define'
d_mkfifo='define'
d_mktime='define'
d_msg='define'
d_msgctl='define'
d_msgget='define'
d_msgrcv='define'
d_msgsnd='define'
d_mymalloc=''
d_nice='define'
d_oldpthreads=''
d_oldsock=''
d_open3='define'
d_pathconf='define'
d_pause='define'
d_phostname=''
d_pipe='define'
d_poll='define'
d_portable='define'
d_pthread_yield=''
d_pthreads_created_joinable=''
d_pwage=''
d_pwchange=''
d_pwclass=''
d_pwcomment=''
d_pwexpire=''
d_pwgecos='define'
d_pwpasswd='define'
d_pwquota=''
d_readdir='define'
d_readlink='define'
d_rename='define'
d_rewinddir='define'
d_rmdir='define'
d_safebcpy='define'
d_safemcpy='define'
d_sanemcmp='define'
d_sched_yield='define'
d_seekdir='define'
d_select='define'
d_sem='define'
d_semctl='define'
d_semctl_semid_ds='define'
d_semctl_semun='define'
d_semget='define'
d_semop='define'
d_setegid='define'
d_seteuid='define'
d_setgrent='define'
d_setgrps='define'
d_sethent='define'
d_setlinebuf='define'
d_setlocale='define'
d_setnent='define'
d_setpent='define'
d_setpgid='define'
d_setpgrp='define'
d_setpgrp2=''
d_setprior='define'
d_setpwent='define'
d_setregid=''
d_setresgid=''
d_setresuid=''
d_setreuid=''
d_setrgid=''
d_setruid=''
d_setsent='define'
d_setsid='define'
d_setvbuf='define'
d_sfio=''
d_shm='define'
d_shmat='define'
d_shmatprototype='define'
d_shmctl='define'
d_shmdt='define'
d_shmget='define'
d_sigaction='define'
d_sigsetjmp='define'
d_socket='define'
d_sockpair='define'
d_statblks='define'
d_statfsflags=''
d_stdio_cnt_lval='define'
d_stdio_ptr_lval='define'
d_stdiobase='define'
d_stdstdio='define'
d_strchr='define'
d_strcoll='define'
d_strctcpy='define'
d_strerrm='strerror(e)'
d_strerror='define'
d_strtod='define'
d_strtol='define'
d_strtoul='define'
d_strxfrm='define'
d_suidsafe=''
d_symlink='define'
d_syscall=''
d_sysconf='define'
d_sysernlst=''
d_syserrlst='define'
d_system='define'
d_tcgetpgrp='define'
d_tcsetpgrp='define'
d_telldir='define'
d_time='define'
d_times='define'
d_truncate='define'
d_tzname='define'
d_umask='define'
d_uname='define'
d_union_semun=''
d_vfork=''
d_void_closedir=''
d_voidsig='define'
d_voidtty=''
d_volatile='define'
d_vprintf='define'
d_wait4=''
d_waitpid='define'
d_wcstombs='define'
d_wctomb='define'
d_xenix=''
date='date'
db_hashtype='u_int32_t'
db_prefixtype='size_t'
defvoidused='15'
direntrytype='struct dirent'
dlext='so'
dlsrc='dl_aix.xs'
doublesize='8'
dynamic_ext='B Data/Dumper Fcntl IO IPC/SysV NDBM_File ODBM_File Opcode POSIX SDBM_File Socket attrs re'
eagain='EAGAIN'
ebcdic=''
echo='echo'
egrep='egrep'
emacs=''
eunicefix=':'
exe_ext=''
expr='expr'
extensions='B Data/Dumper Fcntl IO IPC/SysV NDBM_File ODBM_File Opcode POSIX SDBM_File Socket attrs re Errno'
find='find'
firstmakefile='makefile'
flex=''
fpostype='fpos_t'
freetype='void'
full_ar='/bin/ar'
full_csh='/bin/csh'
full_sed='/bin/sed'
gccversion=''
gidtype='gid_t'
glibpth='/usr/shlib  /shlib /lib/pa1.1 /usr/lib/large /lib /usr/lib /usr/lib/386 /lib/386 /lib/large /usr/lib/small /lib/small /usr/ccs/lib /usr/ucblib /usr/local/lib '
grep='grep'
groupcat='cat /etc/group'
groupstype='gid_t'
gzip='gzip'
h_fcntl='false'
h_sysfile='true'
hint='recommended'
hostcat='cat /etc/hosts'
huge=''
i_arpainet='define'
i_bsdioctl=''
i_db=''
i_dbm='define'
i_dirent='define'
i_dld=''
i_dlfcn='define'
i_fcntl=''
i_float='define'
i_gdbm=''
i_grp='define'
i_limits='define'
i_locale='define'
i_machcthreads=''
i_malloc='define'
i_math='define'
i_memory=''
i_mntent=''
i_ndbm='define'
i_netdb='define'
i_neterrno=''
i_niin='define'
i_pthread='define'
i_pwd='define'
i_rpcsvcdbm=''
i_sfio=''
i_sgtty=''
i_stdarg='define'
i_stddef='define'
i_stdlib='define'
i_string='define'
i_sysdir='define'
i_sysfile='define'
i_sysfilio=''
i_sysin=''
i_sysioctl='define'
i_sysmount=''
i_sysndir=''
i_sysparam='define'
i_sysresrc='define'
i_sysselct='define'
i_syssockio=''
i_sysstat='define'
i_sysstatvfs='define'
i_systime='define'
i_systimek=''
i_systimes='define'
i_systypes='define'
i_sysun='define'
i_syswait='define'
i_termio=''
i_termios='define'
i_time='define'
i_unistd='define'
i_utime='define'
i_values='define'
i_varargs=''
i_varhdr='stdarg.h'
i_vfork=''
ignore_versioned_solibs=''
incpath=''
inews=''
installarchlib='/usr/local/stow/perl5.005_03/lib/perl5/5.00503/aix'
installbin='/usr/local/stow/perl5.005_03/bin'
installman1dir='/usr/local/stow/perl5.005_03/man/man1'
installman3dir='/usr/local/stow/perl5.005_03/lib/perl5/5.00503/man/man3'
installprivlib='/usr/local/stow/perl5.005_03/lib/perl5/5.00503'
installscript='/usr/local/stow/perl5.005_03/bin'
installsitearch='/usr/local/stow/perl5.005_03/lib/perl5/site_perl/5.005/aix'
installsitelib='/usr/local/stow/perl5.005_03/lib/perl5/site_perl/5.005'
installusrbinperl='define'
intsize='4'
known_extensions='B DB_File Data/Dumper Fcntl GDBM_File IO IPC/SysV NDBM_File ODBM_File Opcode POSIX SDBM_File Socket Thread attrs re'
ksh=''
large=''
ld='ld'
lddlflags='-bhalt:4 -bM:SRE -bI:$(PERL_INC)/perl.exp -bE:$(BASEEXT).exp -b noentry -lc -L/usr/local/lib'
ldflags=' -L/usr/local/lib'
less='less'
lib_ext='.a'
libc=''
libperl='libperl.a'
libpth='/usr/local/lib /lib /usr/lib /usr/ccs/lib'
libs='-lnsl -ldbm -ldl -lld -lm -lc -lcrypt -lbsd -lPW'
libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x'
line='line'
lint=''
lkflags=''
ln='ln'
lns='/bin/ln -s'
locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
longdblsize='8'
longlongsize='8'
longsize='4'
lp=''
lpr=''
ls='ls'
lseektype='off_t'
mail=''
mailx=''
make='make'
make_set_make='#'
mallocobj=''
mallocsrc=''
malloctype='void *'
man1dir='/usr/local/man/man1'
man1direxp='/usr/local/man/man1'
man1ext='1'
man3dir='/usr/local/lib/perl5/5.00503/man/man3'
man3direxp='/usr/local/lib/perl5/5.00503/man/man3'
man3ext='3'
medium=''
mips=''
mips_type=''
mkdir='mkdir'
models='none'
modetype='mode_t'
more='more'
mv=''
myarchname='00900241C400-aix'
mydomain='.uucp'
myhostname='anpkmsw1'
myuname='aix anpkmsw1 3 4 00900241c400 '
n=''
netdb_hlen_type='size_t'
netdb_host_type='const void *'
netdb_name_type='const char *'
netdb_net_type='in_addr_t'
nm='nm'
nm_opt='-B'
nm_so_opt=''
nonxs_ext='Errno'
nroff='nroff'
o_nonblock='O_NONBLOCK'
obj_ext='.o'
optimize='-O'
orderlib='false'
osname='aix'
osvers='4.3.2.0'
package='perl5'
pager='/usr/local/bin/less'
passcat='cat /etc/passwd'
patchlevel='5'
path_sep=':'
perl='perl'
perladmin='mgm@anpkmsw1.uucp'
perlpath='/usr/local/bin/perl'
pg='pg'
phostname='hostname'
pidtype='pid_t'
plibpth=''
pmake=''
pr=''
prefix='/usr/local'
prefixexp='/usr/local'
privlib='/usr/local/lib/perl5/5.00503'
privlibexp='/usr/local/lib/perl5/5.00503'
prototype='define'
ptrsize='4'
randbits='15'
ranlib=':'
rd_nodata='-1'
rm='rm'
rmail=''
runnm='false'
scriptdir='/usr/local/bin'
scriptdirexp='/usr/local/bin'
sed='sed'
selectminbits='1'
selecttype='fd_set *'
sendmail='sendmail'
sh='/bin/sh'
shar=''
sharpbang='#!'
shmattype='void *'
shortsize='2'
shrpenv=''
shsharp='true'
sig_name='ZERO HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM IOINT STOP TSTP CONT CHLD TTIN TTOU AIO XCPU XFSZ NUM26 MSG WINCH PWR USR1 USR2 PROF DANGER VTALRM MIGRATE PRE VIRT ALRM1 WAITING NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 GRANT RETRACT SOUND MAX IOT LOST URG CLD IO POLL PTY KAP SAK '
sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "EMT", "FPE", "KILL", "BUS", "SEGV", "SYS", "PIPE", "ALRM", "TERM", "IOINT", "STOP", "TSTP", "CONT", "CHLD", "TTIN", "TTOU", "AIO", "XCPU", "XFSZ", "NUM26", "MSG", "WINCH", "PWR", "USR1", "USR2", "PROF", "DANGER", "VTALRM", "MIGRATE", "PRE", "VIRT", "ALRM1", "WAITING", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "GRANT", "RETRACT", "SOUND", "MAX", "IOT", "LOST", "URG", "CLD", "IO", "POLL", "PTY", "KAP", "SAK", 0'
sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 6 6 16 20 23 23 23 60 63 '
sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 6, 16, 20, 23, 23, 23, 60, 63, 0'
signal_t='void'
sitearch='/usr/local/lib/perl5/site_perl/5.005/aix'
sitearchexp='/usr/local/lib/perl5/site_perl/5.005/aix'
sitelib='/usr/local/lib/perl5/site_perl/5.005'
sitelibexp='/usr/local/lib/perl5/site_perl/5.005'
sizetype='size_t'
sleep=''
smail=''
small=''
so='a'
sockethdr=''
socketlib=''
sort='sort'
spackage='Perl5'
spitshell='cat'
split=''
src='.'
ssizetype='ssize_t'
startperl='#!/usr/local/bin/perl'
startsh='#!/bin/sh'
static_ext=' '
stdchar='unsigned char'
stdio_base='((fp)->_base)'
stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)'
stdio_cnt='((fp)->_cnt)'
stdio_filbuf=''
stdio_ptr='((fp)->_ptr)'
strings='/usr/include/string.h'
submit=''
subversion='3'
sysman='/usr/man/man1'
tail=''
tar=''
tbl=''
tee='tee'
test='test'
timeincl='/usr/include/sys/time.h /usr/include/time.h '
timetype='time_t'
touch='touch'
tr='tr'
trnl='\n'
troff=''
uidtype='uid_t'
uname='uname'
uniq='uniq'
usedl='define'
usemymalloc='n'
usenm='false'
useopcode='true'
useperlio=''
useposix='true'
usesfio='false'
useshrplib='false'
usethreads=''
usevfork='false'
usrinc='/usr/include'
uuname=''
version='5.00503'
vi=''
voidflags='15'
xlibpth='/usr/lib/386 /lib/386'
zcat=''
zip='zip'

-- 
Mitchell Morris

universe -G 6.672e-11 -e 1.602e-19 -h 6.626e-34 -protonmass 1.673e-27.... 
	-- Neal Stephenson




nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About