On Mon, Mar 21, 2005 at 08:42:11PM -0000, philippe. cote @ usherbrooke. ca wrote: > sv_rvweaken doesn't handle tied variables > > Proof : > > +-------------------------------------------------------------------------+ > Sample code > +-------------------------------------------------------------------------+ > #!/usr/bin/perl > use strict; > use warnings; > use Util::Monitor; > > use Scalar::Util qw(weaken); > use Devel::Peek; > { > my (@a); > $a[0] = [EMAIL PROTECTED]; > #tie @a, 'TestArray'; > Dump($a[0],1); > weaken($a[0]); > Dump($a[0],1); > print "Leaving scope\n"; > } > print "Scope left\n"; > > package TestArray; > use Tie::Array; > use base 'Tie::StdArray'; > > sub DESTROY { print "Monitor::TestArray::DESTROY : $_[0]\n"; }
I'm not really sure what you expect the effect of weakening a tied array element should be. I suspect that in the general case doing this makes no sense. > > 1; > > +-------------------------------------------------------------------------+ > Output without "tie @a, 'TestArray'" > (Just to show you that weaken works without the tie) > +-------------------------------------------------------------------------+ > SV = RV(0x81829c0) at 0x814127c > REFCNT = 1 > FLAGS = (ROK) > RV = 0x814e740 > SV = PVAV(0x81426cc) at 0x814e740 > REFCNT = 2 > FLAGS = (PADBUSY,PADMY) > IV = 0 > NV = 0 > ARRAY = 0x8148888 > FILL = 0 > MAX = 3 > ARYLEN = 0x0 > FLAGS = (REAL) > SV = RV(0x81829c0) at 0x814127c > REFCNT = 1 > FLAGS = (ROK,WEAKREF,IsUV) > RV = 0x814e740 > SV = PVAV(0x81426cc) at 0x814e740 > REFCNT = 1 > FLAGS = (PADBUSY,PADMY,RMG) > IV = 0 > NV = 0 > MAGIC = 0x8266f08 > MG_VIRTUAL = &PL_vtbl_backref > MG_TYPE = PERL_MAGIC_backref(<) > MG_FLAGS = 0x02 > REFCOUNTED > MG_OBJ = 0x81411c8 > SV = PVAV(0x8263704) at 0x81411c8 > REFCNT = 2 > FLAGS = () > IV = 0 > NV = 0 > ARRAY = 0x82677e8 > FILL = 0 > MAX = 3 > ARYLEN = 0x0 > FLAGS = (REAL) > ARRAY = 0x8148888 > FILL = 0 > MAX = 3 > ARYLEN = 0x0 > FLAGS = (REAL) > Leaving scope > Scope left > > +-------------------------------------------------------------------------+ > Output with "tie @a, 'TestArray';" > +-------------------------------------------------------------------------+ > SV = PVLV(0x817c568) at 0x81413f0 > REFCNT = 1 > FLAGS = (TEMP,GMG,SMG,RMG) > IV = 0 > NV = 0 > PV = 0 > MAGIC = 0x81505b8 > MG_VIRTUAL = &PL_vtbl_packelem > MG_TYPE = PERL_MAGIC_tiedelem(p) > MG_FLAGS = 0x02 > REFCOUNTED > MG_OBJ = 0x814139c > SV = RV(0x81829ac) at 0x814139c > REFCNT = 2 > FLAGS = (ROK) > RV = 0x8141354 > TYPE = t > TARGOFF = 0 > TARGLEN = 0 > TARG = 0x81413f0 > SV = PVLV(0x817c568) at 0x81413f0 > REFCNT = 1 > FLAGS = (TEMP,GMG,SMG,RMG) > IV = 0 > NV = 0 > PV = 0 > MAGIC = 0x81505b8 > MG_VIRTUAL = &PL_vtbl_packelem > MG_TYPE = PERL_MAGIC_tiedelem(p) > MG_FLAGS = 0x02 > REFCOUNTED > MG_OBJ = 0x814139c > SV = RV(0x81829ac) at 0x814139c > REFCNT = 2 > FLAGS = (ROK) > RV = 0x8141354 > TYPE = t > TARGOFF = 0 > TARGLEN = 0 > TARG = 0x81413f0 > Leaving scope > Scope left > Monitor::TestArray::DESTROY : TestArray=ARRAY(0x8141354) > > +-------------------------------------------------------------------------+ > Explanations > +-------------------------------------------------------------------------+ > We see that weaken is not applied on a tied variable. I've been > searching in source code and calls goes like this : > > Scalar::Util::weaken -> sv_rvweaken -> Perl_sv_rvweaken > > +-------------------------------------------------------------------------+ > Scalar::Util::weaken source code > +-------------------------------------------------------------------------+ > void > weaken(sv) > SV *sv > PROTOTYPE: $ > CODE: > #ifdef SvWEAKREF > sv_rvweaken(sv); > #else > croak("weak references are not implemented in this release of perl"); > #endif > > We see clearly that it only calls sv_rvweaken from the perl source code. > So this method doesn't contain bugs. > We also finds that sv_rvweaken is associated to Perl_sv_rvweaken as > defined by embed.h > Let's look at this code > > +-------------------------------------------------------------------------+ > Perl_sv_rvweaken source code from sv.c > +-------------------------------------------------------------------------+ > /* > =for apidoc sv_rvweaken > > Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the > referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and > push a back-reference to this RV onto the array of backreferences > associated with that magic. > > =cut > */ > > SV * > Perl_sv_rvweaken(pTHX_ SV *sv) > { > SV *tsv; > if (!SvOK(sv)) /* let undefs pass */ > return sv; > if (!SvROK(sv)) > Perl_croak(aTHX_ "Can't weaken a nonreference"); > else if (SvWEAKREF(sv)) { > if (ckWARN(WARN_MISC)) > Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is > already weak"); > return sv; > } > tsv = SvRV(sv); > sv_add_backref(tsv, sv); > SvWEAKREF_on(sv); > SvREFCNT_dec(tsv); > return sv; > } > > +-------------------------------------------------------------------------+ > Conclusion > +-------------------------------------------------------------------------+ > The bug is in Perl_sv_rvweaken there : > if (!SvOK(sv)) /* let undefs pass */ > return sv; > This code should be modified like this : > if (!SvOK(sv)) /* undef var or tied object or something else */ > if (SvMAGIC(sv)) { > //********************************************/ > //********************************************/ > //********************************************/ > //APPLY WEAKEN HERE (Which I don't know how) > //********************************************/ > //********************************************/ > //********************************************/ > } else { > return sv; > } > } > > Thank you > > Philippe Cote > Centre de genomique fonctionnelle du Canada > > --- > Flags: > category=core > severity=high > --- > Site configuration information for perl v5.8.6: > > Configured by Gentoo at Mon Feb 28 13:17:43 EST 2005. > > Summary of my perl5 (revision 5 version 8 subversion 6) configuration: > Platform: > osname=linux, osvers=2.6.5-gentoo-r1, archname=i686-linux > uname='linux denethor 2.6.5-gentoo-r1 #1 fri may 28 17:11:18 edt > 2004 i686 intel(r) pentium(r) 4 cpu 2.40ghz genuineintel gnulinux ' > config_args='-des -Darchname=i686-linux -Dcccdlflags=-fPIC > -Dccdlflags=-rdynamic -Dcc=gcc -Dprefix=/usr -Dvendorprefix=/usr > -Dsiteprefix=/usr -Dlocincpth= -Doptimize=-O3 -march=pentium4 > -fomit-frame-pointer -pipe -Duselargefiles -Dd_semctl_semun > -Dscriptdir=/usr/bin -Dman1dir=/usr/share/man/man1 > -Dman3dir=/usr/share/man/man3 -Dinstallman1dir=/usr/share/man/man1 > -Dinstallman3dir=/var/tmp/portage/perl-5.8.6-r2/image//usr/share/man/man3 > -Dman1ext=1 -Dman3ext=3pm -Dinc_version_list=5.8.2 5.8.2/i686-linux > 5.8.4 5.8.4/i686-linux 5.8.5 5.8.5/i686-linux -Dcf_by=Gentoo -Ud_csh > -Di_ndbm -Di_gdbm -Di_db' > 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='gcc', ccflags ='-fno-strict-aliasing -pipe -D_LARGEFILE_SOURCE > -D_FILE_OFFSET_BITS=64', > optimize='-O3 -march=pentium4 -fomit-frame-pointer -pipe', > cppflags='-DPERL5 -fno-strict-aliasing -pipe' > ccversion='', gccversion='3.3.3 20040217 (Gentoo Linux 3.3.3, > propolice-3.3-7)', 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=-lpthread -lnsl -lndbm -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc > perllibs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc > libc=/lib/libc-2.3.3.so, so=so, useshrplib=false, libperl=libperl.a > gnulibc_version='2.3.3' > Dynamic Linking: > dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic' > cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib' > > Locally applied patches: > > > --- > @INC for perl v5.8.6: > /usr/local/inHousePerlLib > /var/www/localhost/webapps > /usr/local/inHousePerlLib/monadb/modules > /var/www/localhost/webapps > /usr/local/inHousePerlLib/OOSGD/modules/ > /usr/local/inHousePerlLib/monadb/modules/ > /usr/local/inHousePerlLib/ensembl/modules > /usr/local/inHousePerlLib > /etc/perl > /usr/lib/perl5/site_perl/5.8.6/i686-linux > /usr/lib/perl5/site_perl/5.8.6 > /usr/lib/perl5/site_perl/5.8.2 > /usr/lib/perl5/site_perl/5.8.2/i686-linux > /usr/lib/perl5/site_perl > /usr/lib/perl5/vendor_perl/5.8.6/i686-linux > /usr/lib/perl5/vendor_perl/5.8.6 > /usr/lib/perl5/vendor_perl/5.8.2 > /usr/lib/perl5/vendor_perl/5.8.2/i686-linux > /usr/lib/perl5/vendor_perl > /usr/lib/perl5/5.8.6/i686-linux > /usr/lib/perl5/5.8.6 > /usr/local/lib/site_perl > /usr/lib/perl5/site_perl/5.8.2 > /usr/lib/perl5/site_perl/5.8.2/i686-linux > . > > --- > Environment for perl v5.8.6: > HOME=/home/philippe > LANG (unset) > LANGUAGE (unset) > LD_LIBRARY_PATH (unset) > LOGDIR (unset) > > PATH=/usr/kde/3.2/bin:/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/3.3:/opt/Acrobat5:/usr/X11R6/bin:/opt/blackdown-jdk-1.4.1/bin:/opt/blackdown-jdk-1.4.1/jre/bin:/usr/qt/3/bin:/usr/kde/3.1/bin > > PERL5LIB=/usr/local/inHousePerlLib:/var/www/localhost/webapps:/usr/local/inHousePerlLib/monadb/modules:/var/www/localhost/webapps:/usr/local/inHousePerlLib/OOSGD/modules/:/usr/local/inHousePerlLib/monadb/modules/:/usr/local/inHousePerlLib/ensembl/modules:/usr/local/inHousePerlLib > PERL_BADLANG (unset) > SHELL=/bin/zsh > > Complete configuration data for perl v5.8.6: > > Author='' > CONFIG='true' > Date='$Date' > Header='' > Id='$Id' > Locker='' > Log='$Log' > Mcc='Mcc' > PATCHLEVEL='8' > PERL_API_REVISION='5' > PERL_API_SUBVERSION='0' > PERL_API_VERSION='8' > PERL_CONFIG_SH='true' > PERL_REVISION='5' > PERL_SUBVERSION='6' > PERL_VERSION='8' > RCSfile='$RCSfile' > Revision='$Revision' > SUBVERSION='6' > Source='' > State='' > _a='.a' > _exe='' > _o='.o' > afs='false' > afsroot='/afs' > alignbytes='4' > ansi2knr='' > aphostname='/bin/hostname' > api_revision='5' > api_subversion='0' > api_version='8' > api_versionstring='5.8.0' > ar='ar' > archlib='/usr/lib/perl5/5.8.6/i686-linux' > archlibexp='/usr/lib/perl5/5.8.6/i686-linux' > archname='i686-linux' > archname64='' > archobjs='' > asctime_r_proto='0' > awk='awk' > baserev='5.0' > bash='' > bin='/usr/bin' > binexp='/usr/bin' > bison='bison' > byacc='byacc' > byteorder='1234' > c='' > castflags='0' > cat='cat' > cc='gcc' > cccdlflags='-fPIC' > ccdlflags='-rdynamic' > ccflags='-fno-strict-aliasing -pipe -D_LARGEFILE_SOURCE > -D_FILE_OFFSET_BITS=64' > ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' > ccname='gcc' > ccsymbols='__GNUC_MINOR__=3 __GNUC_PATCHLEVEL__=3' > ccversion='' > cf_by='Gentoo' > cf_email='[EMAIL PROTECTED]' > cf_time='Mon Feb 28 13:17:43 EST 2005' > charsize='1' > chgrp='' > chmod='chmod' > chown='' > clocktype='clock_t' > comm='comm' > compress='' > config_arg0='Configure' > config_arg1='-des' > config_arg10='-Doptimize=-O3 -march=pentium4 -fomit-frame-pointer -pipe' > config_arg11='-Duselargefiles' > config_arg12='-Dd_semctl_semun' > config_arg13='-Dscriptdir=/usr/bin' > config_arg14='-Dman1dir=/usr/share/man/man1' > config_arg15='-Dman3dir=/usr/share/man/man3' > config_arg16='-Dinstallman1dir=/usr/share/man/man1' > config_arg17='-Dinstallman3dir=/usr/share/man/man3' > config_arg18='-Dman1ext=1' > config_arg19='-Dman3ext=3pm' > config_arg2='-Darchname=i686-linux' > config_arg20='-Dinc_version_list=5.8.2 5.8.2/i686-linux 5.8.4 > 5.8.4/i686-linux 5.8.5 5.8.5/i686-linux ' > config_arg21='-Dcf_by=Gentoo' > config_arg22='-Ud_csh' > config_arg23='-Di_ndbm' > config_arg24='-Di_gdbm' > config_arg25='-Di_db' > config_arg3='-Dcccdlflags=-fPIC' > config_arg4='-Dccdlflags=-rdynamic' > config_arg5='-Dcc=gcc' > config_arg6='-Dprefix=/usr' > config_arg7='-Dvendorprefix=/usr' > config_arg8='-Dsiteprefix=/usr' > config_arg9='-Dlocincpth= ' > config_argc='25' > config_args='-des -Darchname=i686-linux -Dcccdlflags=-fPIC > -Dccdlflags=-rdynamic -Dcc=gcc -Dprefix=/usr -Dvendorprefix=/usr > -Dsiteprefix=/usr -Dlocincpth= -Doptimize=-O3 -march=pentium4 > -fomit-frame-pointer -pipe -Duselargefiles -Dd_semctl_semun > -Dscriptdir=/usr/bin -Dman1dir=/usr/share/man/man1 > -Dman3dir=/usr/share/man/man3 -Dinstallman1dir=/usr/share/man/man1 > -Dinstallman3dir=/var/tmp/portage/perl-5.8.6-r2/image//usr/share/man/man3 > -Dman1ext=1 -Dman3ext=3pm -Dinc_version_list=5.8.2 5.8.2/i686-linux > 5.8.4 5.8.4/i686-linux 5.8.5 5.8.5/i686-linux -Dcf_by=Gentoo -Ud_csh > -Di_ndbm -Di_gdbm -Di_db' > contains='grep' > cp='cp' > cpio='' > cpp='cpp' > cpp_stuff='42' > cppccsymbols='__GNUC__=3' > cppflags='-fno-strict-aliasing -pipe' > cpplast='-' > cppminus='-' > cpprun='gcc -E' > cppstdin='gcc -E' > cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=3 > __GNUC_MINOR__=3 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 > _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 > __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 > __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 > i386=1 __i386=1 __i386__=1 linux=1 __linux=1 __linux__=1 unix=1 __unix=1 > __unix__=1' > crypt_r_proto='0' > cryptlib='' > csh='csh' > ctermid_r_proto='0' > ctime_r_proto='0' > d_Gconvert='gcvt((x),(n),(b))' > d_PRIEUldbl='define' > d_PRIFUldbl='define' > d_PRIGUldbl='define' > d_PRIXU64='define' > d_PRId64='define' > d_PRIeldbl='define' > d_PRIfldbl='define' > d_PRIgldbl='define' > d_PRIi64='define' > d_PRIo64='define' > d_PRIu64='define' > d_PRIx64='define' > d_SCNfldbl='define' > d__fwalk='' > d_access='define' > d_accessx='' > d_aintl='' > d_alarm='define' > d_archlib='define' > d_asctime_r='' > d_atolf='' > d_atoll='define' > d_attribut='define' > d_bcmp='define' > d_bcopy='define' > d_bsd='' > d_bsdgetpgrp='' > d_bsdsetpgrp='' > d_bzero='define' > d_casti32='' > d_castneg='define' > d_charvspr='define' > d_chown='define' > d_chroot='define' > d_chsize='' > d_class='' > d_closedir='define' > d_cmsghdr_s='define' > d_const='define' > d_copysignl='define' > d_crypt='define' > d_crypt_r='' > d_csh='' > d_ctermid_r='' > d_ctime_r='' > d_cuserid='define' > d_dbl_dig='define' > d_dbminitproto='' > d_difftime='define' > d_dirfd='define' > d_dirnamlen='' > d_dlerror='define' > d_dlopen='define' > d_dlsymun='' > d_dosuid='' > d_drand48_r='' > d_drand48proto='define' > d_dup2='define' > d_eaccess='' > d_endgrent='define' > d_endgrent_r='' > d_endhent='define' > d_endhostent_r='' > d_endnent='define' > d_endnetent_r='' > d_endpent='define' > d_endprotoent_r='' > d_endpwent='define' > d_endpwent_r='' > d_endsent='define' > d_endservent_r='' > d_eofnblk='define' > d_eunice='' > d_faststdio='' > d_fchdir='define' > d_fchmod='define' > d_fchown='define' > d_fcntl='define' > d_fcntl_can_lock='define' > d_fd_macros='define' > d_fd_set='define' > d_fds_bits='' > d_fgetpos='define' > d_finite='define' > d_finitel='define' > d_flexfnam='define' > d_flock='define' > d_flockproto='define' > d_fork='define' > d_fp_class='' > d_fpathconf='define' > d_fpclass='' > d_fpclassify='' > d_fpclassl='' > d_fpos64_t='' > d_frexpl='define' > d_fs_data_s='' > d_fseeko='define' > d_fsetpos='define' > d_fstatfs='define' > d_fstatvfs='define' > d_fsync='define' > d_ftello='define' > d_ftime='' > d_getcwd='define' > d_getespwnam='' > d_getfsstat='' > d_getgrent='define' > d_getgrent_r='' > d_getgrgid_r='' > d_getgrnam_r='' > d_getgrps='define' > d_gethbyaddr='define' > d_gethbyname='define' > d_gethent='define' > d_gethname='define' > d_gethostbyaddr_r='' > d_gethostbyname_r='' > d_gethostent_r='' > d_gethostprotos='define' > d_getitimer='define' > d_getlogin='define' > d_getlogin_r='' > d_getmnt='' > d_getmntent='define' > d_getnbyaddr='define' > d_getnbyname='define' > d_getnent='define' > d_getnetbyaddr_r='' > d_getnetbyname_r='' > d_getnetent_r='' > d_getnetprotos='define' > d_getpagsz='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_getprotobyname_r='' > d_getprotobynumber_r='' > d_getprotoent_r='' > d_getprotoprotos='define' > d_getprpwnam='' > d_getpwent='define' > d_getpwent_r='' > d_getpwnam_r='' > d_getpwuid_r='' > d_getsbyname='define' > d_getsbyport='define' > d_getsent='define' > d_getservbyname_r='' > d_getservbyport_r='' > d_getservent_r='' > d_getservprotos='define' > d_getspnam='define' > d_getspnam_r='' > d_gettimeod='define' > d_gmtime_r='' > d_gnulibc='define' > d_grpasswd='define' > d_hasmntopt='define' > d_htonl='define' > d_ilogbl='define' > d_index='' > d_inetaton='define' > d_int64_t='define' > d_isascii='define' > d_isfinite='' > d_isinf='define' > d_isnan='define' > d_isnanl='define' > d_killpg='define' > d_lchown='define' > d_ldbl_dig='define' > d_link='define' > d_localtime_r='' > d_locconv='define' > d_lockf='define' > d_longdbl='define' > d_longlong='define' > d_lseekproto='define' > d_lstat='define' > d_madvise='define' > d_mblen='define' > d_mbstowcs='define' > d_mbtowc='define' > d_memchr='define' > d_memcmp='define' > d_memcpy='define' > d_memmove='define' > d_memset='define' > d_mkdir='define' > d_mkdtemp='define' > d_mkfifo='define' > d_mkstemp='define' > d_mkstemps='' > d_mktime='define' > d_mmap='define' > d_modfl='define' > d_modfl_pow32_bug='' > d_modflproto='' > d_mprotect='define' > d_msg='define' > d_msg_ctrunc='define' > d_msg_dontroute='define' > d_msg_oob='define' > d_msg_peek='define' > d_msg_proxy='define' > d_msgctl='define' > d_msgget='define' > d_msghdr_s='define' > d_msgrcv='define' > d_msgsnd='define' > d_msync='define' > d_munmap='define' > d_mymalloc='' > d_nice='define' > d_nl_langinfo='define' > d_nv_preserves_uv='define' > d_off64_t='' > d_old_pthread_create_joinable='' > d_oldpthreads='' > d_oldsock='' > d_open3='define' > d_pathconf='define' > d_pause='define' > d_perl_otherlibdirs='' > d_phostname='' > d_pipe='define' > d_poll='define' > d_portable='define' > d_procselfexe='define' > d_pthread_atfork='define' > d_pthread_attr_setscope='define' > d_pthread_yield='define' > d_pwage='' > d_pwchange='' > d_pwclass='' > d_pwcomment='' > d_pwexpire='' > d_pwgecos='define' > d_pwpasswd='define' > d_pwquota='' > d_qgcvt='define' > d_quad='define' > d_random_r='' > d_readdir='define' > d_readdir64_r='' > d_readdir_r='' > d_readlink='define' > d_readv='define' > d_recvmsg='define' > d_rename='define' > d_rewinddir='define' > d_rmdir='define' > d_safebcpy='' > d_safemcpy='' > d_sanemcmp='define' > d_sbrkproto='define' > d_scalbnl='define' > d_sched_yield='define' > d_scm_rights='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_sendmsg='define' > d_setegid='define' > d_seteuid='define' > d_setgrent='define' > d_setgrent_r='' > d_setgrps='define' > d_sethent='define' > d_sethostent_r='' > d_setitimer='define' > d_setlinebuf='define' > d_setlocale='define' > d_setlocale_r='' > d_setnent='define' > d_setnetent_r='' > d_setpent='define' > d_setpgid='define' > d_setpgrp='define' > d_setpgrp2='' > d_setprior='define' > d_setproctitle='' > d_setprotoent_r='' > d_setpwent='define' > d_setpwent_r='' > d_setregid='define' > d_setresgid='define' > d_setresuid='define' > d_setreuid='define' > d_setrgid='' > d_setruid='' > d_setsent='define' > d_setservent_r='' > 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_sigprocmask='define' > d_sigsetjmp='define' > d_sockatmark='define' > d_sockatmarkproto='' > d_socket='define' > d_socklen_t='define' > d_sockpair='define' > d_socks5_init='' > d_sqrtl='define' > d_srand48_r='' > d_srandom_r='' > d_sresgproto='' > d_sresuproto='' > d_statblks='define' > d_statfs_f_flags='' > d_statfs_s='define' > d_statvfs='define' > d_stdio_cnt_lval='' > d_stdio_ptr_lval='' > d_stdio_ptr_lval_nochange_cnt='' > d_stdio_ptr_lval_sets_cnt='' > d_stdio_stream_array='' > d_stdiobase='' > d_stdstdio='' > d_strchr='define' > d_strcoll='define' > d_strctcpy='define' > d_strerrm='strerror(e)' > d_strerror='define' > d_strerror_r='' > d_strftime='define' > d_strtod='define' > d_strtol='define' > d_strtold='define' > d_strtoll='define' > d_strtoq='define' > d_strtoul='define' > d_strtoull='define' > d_strtouq='define' > d_strxfrm='define' > d_suidsafe='' > d_symlink='define' > d_syscall='define' > d_syscallproto='define' > d_sysconf='define' > d_sysernlst='' > d_syserrlst='define' > d_system='define' > d_tcgetpgrp='define' > d_tcsetpgrp='define' > d_telldir='define' > d_telldirproto='define' > d_time='define' > d_times='define' > d_tm_tm_gmtoff='define' > d_tm_tm_zone='define' > d_tmpnam_r='' > d_truncate='define' > d_ttyname_r='' > d_tzname='define' > d_u32align='' > d_ualarm='define' > d_umask='define' > d_uname='define' > d_union_semun='' > d_unordered='' > d_usleep='define' > d_usleepproto='define' > d_ustat='define' > d_vendorarch='define' > d_vendorbin='define' > d_vendorlib='define' > d_vendorscript='define' > d_vfork='' > d_void_closedir='' > d_voidsig='define' > d_voidtty='' > d_volatile='define' > d_vprintf='define' > d_wait4='define' > d_waitpid='define' > d_wcstombs='define' > d_wctomb='define' > d_writev='define' > d_xenix='' > date='date' > db_hashtype='u_int32_t' > db_prefixtype='size_t' > db_version_major='4' > db_version_minor='1' > db_version_patch='25' > defvoidused='15' > direntrytype='struct dirent' > dlext='so' > dlsrc='dl_dlopen.xs' > doublesize='8' > drand01='drand48()' > drand48_r_proto='0' > dynamic_ext='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf > Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob > Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util > MIME/Base64 NDBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar > PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes > Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared' > eagain='EAGAIN' > ebcdic='' > echo='echo' > egrep='egrep' > emacs='' > endgrent_r_proto='0' > endhostent_r_proto='0' > endnetent_r_proto='0' > endprotoent_r_proto='0' > endpwent_r_proto='0' > endservent_r_proto='0' > eunicefix=':' > exe_ext='' > expr='expr' > extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf > Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob > Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util > MIME/Base64 NDBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar > PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes > Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared > Errno' > extras='' > fflushNULL='define' > fflushall='' > find='' > firstmakefile='makefile' > flex='' > fpossize='16' > fpostype='fpos_t' > freetype='void' > from=':' > full_ar='/usr/bin/ar' > full_csh='/bin/csh' > full_sed='/bin/sed' > gccansipedantic='' > gccosandvers='' > gccversion='3.3.3 20040217 (Gentoo Linux 3.3.3, propolice-3.3-7)' > getgrent_r_proto='0' > getgrgid_r_proto='0' > getgrnam_r_proto='0' > gethostbyaddr_r_proto='0' > gethostbyname_r_proto='0' > gethostent_r_proto='0' > getlogin_r_proto='0' > getnetbyaddr_r_proto='0' > getnetbyname_r_proto='0' > getnetent_r_proto='0' > getprotobyname_r_proto='0' > getprotobynumber_r_proto='0' > getprotoent_r_proto='0' > getpwent_r_proto='0' > getpwnam_r_proto='0' > getpwuid_r_proto='0' > getservbyname_r_proto='0' > getservbyport_r_proto='0' > getservent_r_proto='0' > getspnam_r_proto='0' > gidformat='"lu"' > gidsign='1' > gidsize='4' > gidtype='gid_t' > glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib > /usr/ucblib /usr/local/lib ' > gmake='gmake' > gmtime_r_proto='0' > gnulibc_version='2.3.3' > grep='grep' > groupcat='cat /etc/group' > groupstype='gid_t' > gzip='gzip' > h_fcntl='false' > h_sysfile='true' > hint='recommended' > hostcat='cat /etc/hosts' > html1dir=' ' > html1direxp='' > html3dir=' ' > html3direxp='' > i16size='2' > i16type='short' > i32size='4' > i32type='long' > i64size='8' > i64type='long long' > i8size='1' > i8type='char' > i_arpainet='define' > i_bsdioctl='' > i_crypt='define' > i_db='define' > i_dbm='' > i_dirent='define' > i_dld='' > i_dlfcn='define' > i_fcntl='' > i_float='define' > i_fp='' > i_fp_class='' > i_gdbm='define' > i_grp='define' > i_ieeefp='' > i_inttypes='define' > i_langinfo='define' > i_libutil='' > i_limits='define' > i_locale='define' > i_machcthr='' > i_malloc='define' > i_math='define' > i_memory='' > i_mntent='define' > i_ndbm='define' > i_netdb='define' > i_neterrno='' > i_netinettcp='define' > i_niin='define' > i_poll='define' > i_prot='' > i_pthread='define' > i_pwd='define' > i_rpcsvcdbm='' > i_sfio='' > i_sgtty='' > i_shadow='define' > i_socks='' > i_stdarg='define' > i_stddef='define' > i_stdlib='define' > i_string='define' > i_sunmath='' > i_sysaccess='' > i_sysdir='define' > i_sysfile='define' > i_sysfilio='' > i_sysin='' > i_sysioctl='define' > i_syslog='define' > i_sysmman='define' > i_sysmode='' > i_sysmount='define' > i_sysndir='' > i_sysparam='define' > i_sysresrc='define' > i_syssecrt='' > i_sysselct='define' > i_syssockio='' > i_sysstat='define' > i_sysstatfs='define' > i_sysstatvfs='define' > i_systime='define' > i_systimek='' > i_systimes='define' > i_systypes='define' > i_sysuio='define' > i_sysun='define' > i_sysutsname='define' > i_sysvfs='define' > i_syswait='define' > i_termio='' > i_termios='define' > i_time='define' > i_unistd='define' > i_ustat='define' > i_utime='define' > i_values='define' > i_varargs='' > i_varhdr='stdarg.h' > i_vfork='' > ignore_versioned_solibs='y' > inc_version_list='5.8.2 5.8.2/i686-linux 5.8.4 5.8.4/i686-linux 5.8.5 > 5.8.5/i686-linux ' > inc_version_list_init='"5.8.2","5.8.2/i686-linux","5.8.4","5.8.4/i686-linux","5.8.5","5.8.5/i686-linux",0' > incpath='' > inews='' > installarchlib='/usr/lib/perl5/5.8.6/i686-linux' > installbin='/usr/bin' > installhtml1dir='' > installhtml3dir='' > installman1dir='/usr/share/man/man1' > installman3dir='/usr/share/man/man3' > installprefix='/usr' > installprefixexp='/usr' > installprivlib='/usr/lib/perl5/5.8.6' > installscript='/usr/bin' > installsitearch='/usr/lib/perl5/site_perl/5.8.6/i686-linux' > installsitebin='/usr/bin' > installsitehtml1dir='' > installsitehtml3dir='' > installsitelib='/usr/lib/perl5/site_perl/5.8.6' > installsiteman1dir='/usr/share/man/man1' > installsiteman3dir='/usr/share/man/man3' > installsitescript='/usr/bin' > installstyle='lib/perl5' > installusrbinperl='' > installvendorarch='/usr/lib/perl5/vendor_perl/5.8.6/i686-linux' > installvendorbin='/usr/bin' > installvendorhtml1dir='' > installvendorhtml3dir='' > installvendorlib='/usr/lib/perl5/vendor_perl/5.8.6' > installvendorman1dir='/usr/share/man/man1' > installvendorman3dir='/usr/share/man/man3' > installvendorscript='/usr/bin' > intsize='4' > issymlink='test -h' > ivdformat='"ld"' > ivsize='4' > ivtype='long' > known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf > Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob > Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util > MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/encoding > PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname > Sys/Syslog Thread Time/HiRes Unicode/Normalize XS/APItest XS/Typemap > attrs re threads threads/shared' > ksh='' > ld='gcc' > lddlflags='-shared -L/usr/local/lib' > ldflags=' -L/usr/local/lib' > ldflags_uselargefiles='' > ldlibpthname='LD_LIBRARY_PATH' > less='less' > lib_ext='.a' > libc='/lib/libc-2.3.3.so' > libperl='libperl.a' > libpth='/usr/local/lib /lib /usr/lib' > libs='-lpthread -lnsl -lndbm -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc' > libsdirs=' /usr/lib' > libsfiles=' libpthread.so libnsl.so libndbm.so libgdbm.so libdb.so > libdl.so libm.so libcrypt.so libutil.so libc.so' > libsfound=' /usr/lib/libpthread.so /usr/lib/libnsl.so > /usr/lib/libndbm.so /usr/lib/libgdbm.so /usr/lib/libdb.so > /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libcrypt.so > /usr/lib/libutil.so /usr/lib/libc.so' > libspath=' /usr/local/lib /lib /usr/lib' > libswanted='pthread sfio socket bind inet nsl nm ndbm gdbm dbm db malloc > dl dld ld sun m crypt sec util c cposix posix ucb BSD' > libswanted_uselargefiles='' > line='' > lint='' > lkflags='' > ln='ln' > lns='/bin/ln -s' > localtime_r_proto='0' > locincpth=' ' > loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib > /usr/GNU/lib /opt/GNU/lib' > longdblsize='12' > longlongsize='8' > longsize='4' > lp='' > lpr='' > ls='ls' > lseeksize='8' > lseektype='off_t' > mail='' > mailx='' > make='make' > make_set_make='#' > mallocobj='' > mallocsrc='' > malloctype='void *' > man1dir='/usr/share/man/man1' > man1direxp='/usr/share/man/man1' > man1ext='1' > man3dir='/usr/share/man/man3' > man3direxp='/usr/share/man/man3' > man3ext='3pm' > mips_type='' > mistrustnm='' > mkdir='mkdir' > mmaptype='void *' > modetype='mode_t' > more='more' > multiarch='' > mv='' > myarchname='i686-linux' > mydomain='.med.usherbrooke.ca' > myhostname='denethor' > myuname='linux denethor 2.6.5-gentoo-r1 #1 fri may 28 17:11:18 edt 2004 > i686 intel(r) pentium(r) 4 cpu 2.40ghz genuineintel gnulinux ' > n='-n' > need_va_copy='' > 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='' > nm_so_opt='--dynamic' > nonxs_ext='Errno' > nroff='nroff' > nvEUformat='"E"' > nvFUformat='"F"' > nvGUformat='"G"' > nv_preserves_uv_bits='32' > nveformat='"e"' > nvfformat='"f"' > nvgformat='"g"' > nvsize='8' > nvtype='double' > o_nonblock='O_NONBLOCK' > obj_ext='.o' > old_pthread_create_joinable='' > optimize='-O3 -march=pentium4 -fomit-frame-pointer -pipe' > orderlib='false' > osname='linux' > osvers='2.6.5-gentoo-r1' > otherlibdirs=' ' > package='perl5' > pager='/usr/bin/less' > passcat='cat /etc/passwd' > patchlevel='8' > path_sep=':' > perl='' > perl5='/usr/bin/perl' > perl_patchlevel='' > perladmin='[EMAIL PROTECTED]' > perllibs='-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc' > perlpath='/usr/bin/perl' > pg='pg' > phostname='hostname' > pidtype='pid_t' > plibpth='' > pmake='' > pr='' > prefix='/usr' > prefixexp='/usr' > privlib='/usr/lib/perl5/5.8.6' > privlibexp='/usr/lib/perl5/5.8.6' > procselfexe='"/proc/self/exe"' > prototype='define' > ptrsize='4' > quadkind='3' > quadtype='long long' > randbits='48' > randfunc='drand48' > random_r_proto='0' > randseedtype='long' > ranlib=':' > rd_nodata='-1' > readdir64_r_proto='0' > readdir_r_proto='0' > revision='5' > rm='rm' > rmail='' > run='' > runnm='false' > sPRIEUldbl='"LE"' > sPRIFUldbl='"LF"' > sPRIGUldbl='"LG"' > sPRIXU64='"LX"' > sPRId64='"Ld"' > sPRIeldbl='"Le"' > sPRIfldbl='"Lf"' > sPRIgldbl='"Lg"' > sPRIi64='"Li"' > sPRIo64='"Lo"' > sPRIu64='"Lu"' > sPRIx64='"Lx"' > sSCNfldbl='"Lf"' > sched_yield='sched_yield()' > scriptdir='/usr/bin' > scriptdirexp='/usr/bin' > sed='sed' > seedfunc='srand48' > selectminbits='32' > selecttype='fd_set *' > sendmail='' > setgrent_r_proto='0' > sethostent_r_proto='0' > setlocale_r_proto='0' > setnetent_r_proto='0' > setprotoent_r_proto='0' > setpwent_r_proto='0' > setservent_r_proto='0' > sh='/bin/sh' > shar='' > sharpbang='#!' > shmattype='void *' > shortsize='2' > shrpenv='' > shsharp='true' > sig_count='65' > sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 > PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM > PROF WINCH IO PWR SYS NUM32 NUM33 NUM34 RTMIN NUM36 NUM37 NUM38 NUM39 > NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 > NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 > RTMAX IOT CLD POLL UNUSED ' > sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", > "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", > "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", > "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "NUM33", > "NUM34", "RTMIN", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", > "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", > "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", > "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", > "CLD", "POLL", "UNUSED", 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 64 6 17 29 31 ' > 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, 64, 6, 17, 29, 31, 0' > sig_size='69' > signal_t='void' > sitearch='/usr/lib/perl5/site_perl/5.8.6/i686-linux' > sitearchexp='/usr/lib/perl5/site_perl/5.8.6/i686-linux' > sitebin='/usr/bin' > sitebinexp='/usr/bin' > sitehtml1dir='' > sitehtml1direxp='' > sitehtml3dir='' > sitehtml3direxp='' > sitelib='/usr/lib/perl5/site_perl/5.8.6' > sitelib_stem='/usr/lib/perl5/site_perl' > sitelibexp='/usr/lib/perl5/site_perl/5.8.6' > siteman1dir='/usr/share/man/man1' > siteman1direxp='/usr/share/man/man1' > siteman3dir='/usr/share/man/man3' > siteman3direxp='/usr/share/man/man3' > siteprefix='/usr' > siteprefixexp='/usr' > sitescript='/usr/bin' > sitescriptexp='/usr/bin' > sizesize='4' > sizetype='size_t' > sleep='' > smail='' > so='so' > sockethdr='' > socketlib='' > socksizetype='socklen_t' > sort='sort' > spackage='Perl5' > spitshell='cat' > srand48_r_proto='0' > srandom_r_proto='0' > src='.' > ssizetype='ssize_t' > startperl='#!/usr/bin/perl' > startsh='#!/bin/sh' > static_ext=' ' > stdchar='char' > stdio_base='((fp)->_IO_read_base)' > stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)' > stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)' > stdio_filbuf='' > stdio_ptr='((fp)->_IO_read_ptr)' > stdio_stream_array='' > strerror_r_proto='0' > strings='/usr/include/string.h' > submit='' > subversion='6' > sysman='/usr/share/man/man1' > tail='' > tar='' > targetarch='' > tbl='' > tee='' > test='test' > timeincl='/usr/include/sys/time.h /usr/include/time.h ' > timetype='time_t' > tmpnam_r_proto='0' > to=':' > touch='touch' > tr='tr' > trnl='\n' > troff='' > ttyname_r_proto='0' > u16size='2' > u16type='unsigned short' > u32size='4' > u32type='unsigned long' > u64size='8' > u64type='unsigned long long' > u8size='1' > u8type='unsigned char' > uidformat='"lu"' > uidsign='1' > uidsize='4' > uidtype='uid_t' > uname='uname' > uniq='uniq' > uquadtype='unsigned long long' > use5005threads='' > use64bitall='' > use64bitint='' > usecrosscompile='' > usedl='define' > usefaststdio='define' > useithreads='' > uselargefiles='define' > uselongdouble='' > usemallocwrap='define' > usemorebits='' > usemultiplicity='' > usemymalloc='n' > usenm='false' > useopcode='true' > useperlio='define' > useposix='true' > usereentrant='' > usesfio='false' > useshrplib='false' > usesocks='' > usethreads='' > usevendorprefix='define' > usevfork='false' > usrinc='/usr/include' > uuname='' > uvXUformat='"lX"' > uvoformat='"lo"' > uvsize='4' > uvtype='unsigned long' > uvuformat='"lu"' > uvxformat='"lx"' > vendorarch='/usr/lib/perl5/vendor_perl/5.8.6/i686-linux' > vendorarchexp='/usr/lib/perl5/vendor_perl/5.8.6/i686-linux' > vendorbin='/usr/bin' > vendorbinexp='/usr/bin' > vendorhtml1dir=' ' > vendorhtml1direxp='' > vendorhtml3dir=' ' > vendorhtml3direxp='' > vendorlib='/usr/lib/perl5/vendor_perl/5.8.6' > vendorlib_stem='/usr/lib/perl5/vendor_perl' > vendorlibexp='/usr/lib/perl5/vendor_perl/5.8.6' > vendorman1dir='/usr/share/man/man1' > vendorman1direxp='/usr/share/man/man1' > vendorman3dir='/usr/share/man/man3' > vendorman3direxp='/usr/share/man/man3' > vendorprefix='/usr' > vendorprefixexp='/usr' > vendorscript='/usr/bin' > vendorscriptexp='/usr/bin' > version='5.8.6' > version_patchlevel_string='version 8 subversion 6' > versiononly='' > vi='' > voidflags='15' > xlibpth='/usr/lib/386 /lib/386' > yacc='yacc' > yaccflags='-DPERL5 ' > zcat='' > zip='zip' -- Please note that ash-trays are provided for the use of smokers, whereas the floor is provided for the use of all patrons. -- Bill Royston