diff options
author | Nick Ing-Simmons <nik@tiuk.ti.com> | 2001-05-18 07:23:03 +0000 |
---|---|---|
committer | Nick Ing-Simmons <nik@tiuk.ti.com> | 2001-05-18 07:23:03 +0000 |
commit | 50bd636b8a953239c6900a5df6032cafe9cf956a (patch) | |
tree | 34e37c341adfa2abd3841c5bbd242c10c742d0c3 | |
parent | 16ad5aca1f5177638c984f3315f96c0cd2f10334 (diff) | |
parent | efb30f323b8a33c623d2f52ac4de2a6e862d909a (diff) | |
download | perl-50bd636b8a953239c6900a5df6032cafe9cf956a.tar.gz |
Integrate mainline.
p4raw-id: //depot/perlio@10154
52 files changed, 1576 insertions, 572 deletions
@@ -31,6 +31,191 @@ or any other branch. Version v5.7.1 Development release working toward v5.8 -------------- ____________________________________________________________________________ +[ 10132] By: jhi on 2001/05/16 14:50:55 + Log: Deprecate pseudo-hashes. + Branch: perl + ! pod/perl572delta.pod pod/perlref.pod pod/perltodo.pod +____________________________________________________________________________ +[ 10131] By: jhi on 2001/05/16 14:26:01 + Log: HP-UX hints update from Merijn. + Branch: perl + ! hints/hpux.sh +____________________________________________________________________________ +[ 10130] By: jhi on 2001/05/16 14:23:01 + Log: README.hpux update from Merijn. + Branch: perl + ! README.hpux +____________________________________________________________________________ +[ 10129] By: jhi on 2001/05/16 14:18:56 + Log: Subject: Re: [PATCH] Abstract "utility" information from installman + From: Simon Cozens <simon@netthink.co.uk> + Date: Wed, 16 May 2001 15:57:55 +0100 + Message-ID: <20010516155755.A4728@netthink.co.uk> + Branch: perl + + utils.lst + ! MANIFEST installman installperl +____________________________________________________________________________ +[ 10128] By: jhi on 2001/05/16 14:15:36 + Log: Subject: Re: [ID 20010515.001] -DPERL_Y2KWARN doesn't do what it should (Not OK: perl v5.7.1 +DEVEL10104 on i586-linux 2.2.16-22 (UNINST + From: "Philip Newton" <pnewton@gmx.de> + Date: Tue, 15 May 2001 16:31:05 +0200 + Message-ID: <3B0159C9.1905.1C6AEF9@localhost> + + Fix PERL_Y2KWARN test to check before rather than after appending. + Branch: perl + ! pp_hot.c +____________________________________________________________________________ +[ 10127] By: jhi on 2001/05/16 14:08:15 + Log: Regen Porting stuff. + Branch: perl + ! Configure Porting/Glossary Porting/config.sh Porting/config_H + ! config_h.SH +____________________________________________________________________________ +[ 10126] By: jhi on 2001/05/16 13:41:50 + Log: Metaconfig unit change for #10125. + Branch: metaconfig + ! U/modified/Oldconfig.U +____________________________________________________________________________ +[ 10125] By: jhi on 2001/05/16 13:41:35 + Log: Use OSVERS. + Branch: perl + ! Configure config_h.SH perl.c +____________________________________________________________________________ +[ 10124] By: jhi on 2001/05/16 13:41:09 + Log: Regen toc. + Branch: perl + ! pod/buildtoc.PL pod/perl.pod pod/perltoc.pod +____________________________________________________________________________ +[ 10123] By: jhi on 2001/05/16 13:25:38 + Log: Adding the README.dgux to the MANIFEST would be a good idea. + Branch: perl + ! MANIFEST +____________________________________________________________________________ +[ 10122] By: jhi on 2001/05/16 13:08:33 + Log: Move the stack desire definition to thread.h. + Branch: perl + ! ext/Thread/Thread.xs thread.h +____________________________________________________________________________ +[ 10121] By: jhi on 2001/05/16 13:00:12 + Log: DG-UX threading patches, including a README.dgux, + from Takis Psarogiannakopoulos. + Branch: perl + + README.dgux + ! config_h.SH ext/Thread/Thread.xs hints/dgux.sh perl.c +____________________________________________________________________________ +[ 10120] By: jhi on 2001/05/16 12:55:33 + Log: Subject: [PATCH B::Deparse] More on /x regexes + From: Robin Houston <robin@kitsite.com> + Date: Tue, 15 May 2001 19:09:35 +0100 + Message-ID: <20010515190935.A27268@penderel> + Branch: perl + ! ext/B/B/Deparse.pm +____________________________________________________________________________ +[ 10119] By: jhi on 2001/05/16 12:45:29 + Log: Document that the core time() may be rounding rather + than truncating, would have saved at least my confusion. + Branch: perl + ! ext/Time/HiRes/HiRes.pm +____________________________________________________________________________ +[ 10118] By: jhi on 2001/05/16 12:37:57 + Log: Subject: perl-current/t/time-hires.t + From: John Peacock <jpeacock@rowman.com> + Date: Fri, 11 May 2001 14:09:41 -0400 + Message-ID: <3AFC2AE5.5E787E54@rowman.com> + Branch: perl + ! t/lib/time-hires.t +____________________________________________________________________________ +[ 10117] By: jhi on 2001/05/15 13:40:33 + Log: Subject: [PATCH dump.c] Op private flags + From: Simon Cozens <simon@netthink.co.uk> + Date: Sun, 13 May 2001 20:20:36 +0100 + Message-ID: <20010513202036.A21896@netthink.co.uk> + Branch: perl + ! dump.c +____________________________________________________________________________ +[ 10116] By: jhi on 2001/05/15 13:28:26 + Log: Upgrade to Switch 2.03. + Branch: perl + ! lib/Switch.pm +____________________________________________________________________________ +[ 10115] By: jhi on 2001/05/15 13:19:01 + Log: Integrate change #10113 from mainline: rename CONFIGDOTSH + to PERL_CONFIG_SH and use it consistently. + Branch: maint-5.6/perl + !> Configure Makefile.SH Policy_sh.SH cflags.SH config_h.SH + !> configpm configure.com makeaperl.SH makedepend.SH makedir.SH + !> myconfig.SH writemain.SH +____________________________________________________________________________ +[ 10114] By: jhi on 2001/05/15 13:13:21 + Log: Metaconfig units changes for #10113. + Branch: metaconfig + ! U/modified/Config_h.U U/modified/Extract.U U/modified/Oldsym.U +____________________________________________________________________________ +[ 10113] By: jhi on 2001/05/15 13:12:40 + Log: The problem described in 20010514.031 still wasn't + fully cured, there were remnants of $CONFIG when + $CONFIGDOTSH was expected. Now renamed to PERL_CONFIG_SH + to avoid future conflicts. + Branch: perl + ! Configure Makefile.SH Policy_sh.SH cflags.SH config_h.SH + ! configpm configure.com makeaperl.SH makedepend.SH makedir.SH + ! myconfig.SH writemain.SH +____________________________________________________________________________ +[ 10112] By: jhi on 2001/05/15 11:55:44 + Log: Half of #10107 got lost. + Branch: perl + ! ext/B/B/Deparse.pm +____________________________________________________________________________ +[ 10111] By: nick on 2001/05/15 08:39:14 + Log: Integrate mainline. + Branch: perlio + +> ext/POSIX/hints/uts.pl + - Todo Todo-5.6 t/camel-III/vstring.t + !> (integrate 48 files) +____________________________________________________________________________ +[ 10110] By: jhi on 2001/05/15 02:04:05 + Log: Subject: [PATCH TestInit.pm] Give Deparse tester a fair chance + From: Robin Houston <robin@kitsite.com> + Date: Mon, 14 May 2001 22:27:08 +0100 + Message-ID: <20010514222708.A22963@penderel> + Branch: perl + ! t/TestInit.pm +____________________________________________________________________________ +[ 10109] By: jhi on 2001/05/15 02:03:12 + Log: Subject: [PATCH B::Deparse] Lvaluable method calls + From: Robin Houston <robin@kitsite.com> + Date: Mon, 14 May 2001 22:16:43 +0100 + Message-ID: <20010514221643.A22437@penderel> + Branch: perl + ! ext/B/B/Deparse.pm +____________________________________________________________________________ +[ 10108] By: jhi on 2001/05/15 02:02:17 + Log: Subject: [PATCH B::Deparse] C<$foo =~ give_me_a_regex>; /x modifier + From: Robin Houston <robin@kitsite.com> + Date: Mon, 14 May 2001 22:03:44 +0100 + Message-ID: <20010514220344.A20643@penderel> + Branch: perl + ! ext/B/B/Deparse.pm +____________________________________________________________________________ +[ 10107] By: jhi on 2001/05/15 02:01:24 + Log: Subject: [PATCH B::Deparse] "${foo}_bar" + From: Robin Houston <robin@kitsite.com> + Date: Mon, 14 May 2001 22:10:07 +0100 + Message-ID: <20010514221007.A21118@penderel> + Branch: perl + ! ext/B/B/Deparse.pm +____________________________________________________________________________ +[ 10106] By: jhi on 2001/05/15 01:41:26 + Log: Fix for 20010514.037; substr() didn't invalidate the locale + collation magic. + Branch: perl + ! pp.c +____________________________________________________________________________ +[ 10105] By: jhi on 2001/05/14 18:18:24 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h +____________________________________________________________________________ [ 10104] By: jhi on 2001/05/14 18:09:07 Log: Retract #10094. Branch: perl @@ -20,7 +20,7 @@ # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $ # -# Generated on Thu May 10 17:37:57 EET DST 2001 [metaconfig 3.0 PL70] +# Generated on Wed May 16 17:18:11 EET DST 2001 [metaconfig 3.0 PL70] # (with additional metaconfig patches by perlbug@perl.org) cat >c1$$ <<EOF @@ -1499,7 +1499,7 @@ esac : script used to extract .SH files with variable substitutions cat >extract <<'EOS' -CONFIGDOTSH=true +PERL_CONFIG_SH=true echo "Doing variable substitutions on .SH files..." if test -f $src/MANIFEST; then set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'` @@ -16892,7 +16892,7 @@ $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh : add special variables $test -f $src/patchlevel.h && \ awk '/^#define[ ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh -echo "CONFIGDOTSH=true" >>config.sh +echo "PERL_CONFIG_SH=true" >>config.sh : propagate old symbols if $test -f UU/config.sh; then @@ -41,7 +41,8 @@ README.apollo Notes about Apollo DomainOS port README.beos Notes about BeOS port README.bs2000 Notes about BS2000 POSIX port README.cygwin Notes about Cygwin port -README.dos Notes about dos/djgpp port +README.dgux Notes about DG/UX port +README.dos Notes about DOS/DJGPP port README.epoc Notes about EPOC port README.hpux Notes about HP-UX port README.hurd Notes about GNU/Hurd port @@ -1534,6 +1535,7 @@ t/lib/h2ph.h Test header file for h2ph t/lib/h2ph.pht Generated output from h2ph.h by h2ph, for comparison t/lib/h2ph.t See if h2ph works like it should t/lib/hostname.t See if Sys::Hostname works +t/lib/i18n-collate.t See if I18N::Collate works t/lib/io_const.t See if constants from IO work t/lib/io_dir.t See if directory-related methods from IO work t/lib/io_dup.t See if dup()-related methods from IO work @@ -1857,6 +1859,7 @@ utf8.h Unicode header utfebcdic.h Unicode on EBCDIC (UTF-EBCDIC, tr16) header util.c Utility routines util.h Dummy header +utils.lst Lists utilities bundled with Perl utils/Makefile Extract the utility scripts utils/c2ph.PL program to translate dbx stabs to perl utils/dprofpp.PL Perl code profile post-processor diff --git a/Makefile.SH b/Makefile.SH index c3b1548a24..7c160d9e81 100644 --- a/Makefile.SH +++ b/Makefile.SH @@ -1,5 +1,5 @@ #! /bin/sh -case $CONFIGDOTSH in +case $PERL_CONFIG_SH in '') if test -f config.sh then TOP=. diff --git a/Policy_sh.SH b/Policy_sh.SH index fec18b9385..aefa08f367 100644 --- a/Policy_sh.SH +++ b/Policy_sh.SH @@ -1,4 +1,4 @@ -case $CONFIGDOTSH in +case $PERL_CONFIG_SH in '') . ./config.sh ;; esac echo "Extracting Policy.sh (with variable substitutions)" diff --git a/Porting/Glossary b/Porting/Glossary index 4507f19af1..3c6730a310 100644 --- a/Porting/Glossary +++ b/Porting/Glossary @@ -258,10 +258,6 @@ compress (Loc.U): This variable is defined but not used by Configure. The value is a plain '' and is not useful. -CONFIGDOTSH (Oldsyms.U): - This is set to 'true' in config.sh so that a shell script - sourcing config.sh can tell if it has been sourced already. - contains (contains.U): This variable holds the command to do a grep with a proper return status. On most sane systems it is simply "grep". On insane systems diff --git a/Porting/config.sh b/Porting/config.sh index 415fa44af2..9563d12c00 100644 --- a/Porting/config.sh +++ b/Porting/config.sh @@ -8,7 +8,7 @@ # Package name : perl5 # Source directory : . -# Configuration time: Thu Apr 19 03:59:37 EET DST 2001 +# Configuration time: Wed May 16 17:42:51 EET DST 2001 # Configured by : jhi # Target system : osf1 alpha.hut.fi v4.0 878 alpha @@ -62,7 +62,7 @@ ccsymbols='__alpha=1 __LANGUAGE_C__=1 __osf__=1 __unix__=1 _LONGLONG=1 _SYSTYPE_ ccversion='V5.6-082' cf_by='jhi' cf_email='yourname@yourhost.yourplace.com' -cf_time='Thu Apr 19 03:59:37 EET DST 2001' +cf_time='Wed May 16 17:42:51 EET DST 2001' charsize='1' chgrp='' chmod='' @@ -416,7 +416,7 @@ dlext='so' dlsrc='dl_dlopen.xs' doublesize='8' drand01='drand48()' -dynamic_ext='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes XS/Typemap attrs re' +dynamic_ext='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Time/Piece XS/Typemap attrs re' eagain='EAGAIN' ebcdic='undef' echo='echo' @@ -425,7 +425,7 @@ emacs='' eunicefix=':' exe_ext='' expr='expr' -extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes XS/Typemap attrs re Errno' +extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Time/Piece XS/Typemap attrs re Errno' fflushNULL='define' fflushall='undef' find='' @@ -565,7 +565,7 @@ issymlink='test -h' ivdformat='"ld"' ivsize='8' ivtype='long' -known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes XS/Typemap attrs re' +known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Time/Piece XS/Typemap attrs re' ksh='' ld='ld' lddlflags='-shared -expect_unresolved "*" -msym -std -s' @@ -851,6 +851,6 @@ PERL_SUBVERSION=1 PERL_API_REVISION=5 PERL_API_VERSION=5 PERL_API_SUBVERSION=0 -CONFIGDOTSH=true +PERL_CONFIG_SH=true # Variables propagated from previous config.sh file. pp_sys_cflags='ccflags="$ccflags -DNO_EFF_ONLY_OK"' diff --git a/Porting/config_H b/Porting/config_H index 98150fcfba..1dd033ca97 100644 --- a/Porting/config_H +++ b/Porting/config_H @@ -17,7 +17,7 @@ /* * Package name : perl5 * Source directory : . - * Configuration time: Thu Apr 19 03:59:37 EET DST 2001 + * Configuration time: Wed May 16 17:42:51 EET DST 2001 * Configured by : jhi * Target system : osf1 alpha.hut.fi v4.0 878 alpha */ @@ -1042,7 +1042,13 @@ * by Configure. You shouldn't rely on it too much; the specific * feature tests from Configure are generally more reliable. */ +/* OSVERS: + * This symbol contains the version of the operating system, as determined + * by Configure. You shouldn't rely on it too much; the specific + * feature tests from Configure are generally more reliable. + */ #define OSNAME "dec_osf" /**/ +#define OSVERS "4.0d" /**/ /* MEM_ALIGNBYTES: * This symbol contains the number of bytes required to align a diff --git a/README.dgux b/README.dgux new file mode 100644 index 0000000000..7ff0534947 --- /dev/null +++ b/README.dgux @@ -0,0 +1,121 @@ +If you read this file _as_is_, just ignore the funny characters you +see. It is written in the POD format (see perlpod manpage) which is +specially designed to be readable as is. + +=head1 NAME + +perldgux - Perl under DG/UX. + +=head1 SYNOPSIS + +One can read this document in the following formats: + + man perldgux + view perl perldgux + explorer perldgux.html + info perldgux + +to list some (not all may be available simultaneously), or it may +be read I<as is>: as F<README.dgux>. + +=cut + +Contents + + perldgux - Perl under DG/UX. + + NAME + SYNOPSIS + DESCRIPTION + BUILD + - Non-threaded Case + - Threaded Case + - Testing + - Installing the built perl + AUTHOR + SEE ALSO + +=head1 DESCRIPTION + +Perl 5.7/8.x for DG/UX ix86 R4.20MU0x + +=head1 BUILD + +=head2 Non-threaded Case + +Just run ./Configure script from the top directory. +Then give "make" to compile. + +=head2 Threaded Case + +If you are using as compiler GCC-2.95.x rev(DG/UX) +an easy solution for configuring perl in your DG/UX +machine is to run the command: + +./Configure -Dusethreads -Duse5005threads -des + +This will automatically accept all the defaults and +in particular /usr/local/ as installation directory. +Note that GCC-2.95.x rev(DG/UX) knows the switch +-pthread whcih allows it to link correctly DG/UX's +-lthread library. + +If you want to change the installtion directory or +have a standard DG/UX with C compiler GCC-2.7.2.x +then you have no choice than to do an interactive +build by issuing the command: + +./Configure -Dusethreads -Duse5005threads + +In particular with GCC-2.7.2.x accept all the defaults +and *watch* out for the message: + +==== +Any additional ld flags (NOT including libraries)? [ -pthread] +==== + +Instead of -pthread put here -lthread. CGCC-2.7.2.x +that comes with the DG/UX OS does NOT know the -pthread +switch. So your build will fail if you choose the defaults. +After configuration is done correctly give "make" to compile. + +=head2 Testing + +Issuing a "make test" will run all the tests. +If the test lib/ftmp-security gives you as a result +something like + +===== +lib/ftmp-security....File::Temp::_gettemp: +Parent directory (/tmp/) is not safe (sticky bit not set +when world writable?) at lib/ftmp-security.t line 100 +===== + +don't panic and just set the sticky bit in your /tmp +directory by doing the following as root: + +cd / +chmod +t /tmp (=set the sticky bit to /tmp). + +Then rerun the tests. This time all must be OK. + +=head2 Installing the built perl + +Run the command "make install" + +=head1 AUTHOR + +Takis Psarogiannakopoulos +Universirty of Cambridge +Centre for Mathematical Sciences +Department of Pure Mathematics +Wilberforce road +Cambridge CB3 0WB , UK +email <takis@xfree86.org> + +=head1 SEE ALSO + +perl(1). + +=cut + diff --git a/README.hpux b/README.hpux index 7d0198353c..732fdec044 100644 --- a/README.hpux +++ b/README.hpux @@ -42,7 +42,7 @@ update is 2.0. The original version of PA-RISC, HP no longer sells any system with this chip. -The following systems contain PA-RISC 1.0 chips: +The following systems contained PA-RISC 1.0 chips: 600, 635, 645, 808, 815, 822, 825, 832, 834, 835, 840, 842, 845, 850, 852, 855, 860, 865, 870, 890 @@ -83,7 +83,7 @@ A complete list of models at the time the OS was built is in the file /opt/langtools/lib/sched.models. The first column corresponds to the output of the "uname -m" command (without the leading "9000/"). The second column is the PA-RISC version and the third column is the exact -chip type used. +chip type used. (Start browsing at the bottom to prevent confusion ;-) =head2 Portability Between PA-RISC Versions @@ -94,12 +94,27 @@ Perl to to also run on a PA-RISC 1.1, the compiler flags +DAportable and +DS32 should be used. It is no longer possible to compile PA-RISC 1.0 executables on either -the PA-RISC 1.1 or 2.0 platforms. +the PA-RISC 1.1 or 2.0 platforms. The command-line flags are accepted, +but the resulting executable will not run when transferred to a PA-RISC +1.0 system. + +=head2 Itanium Processor Family + +HP-UX also runs on the new Itanium processor. This requires the use +of a different version of HP-UX (currently 11.20), and with the exception +of a few differences detailed below and in later sections, Perl should +compile with no problems. + +Although PA-RISC binaries can run on Itanium systems, you should not +attempt to use a PA-RISC version of Perl on an Itanium system. This is +because shared libraries created on an Itanium system cannot be loaded +while running a PA-RISC executable. =head2 Building Dynamic Extensions on HP-UX HP-UX supports dynamically loadable libraries (shared libraries). -Shared libraries end with the suffix .sl. +Shared libraries end with the suffix .sl. On Itanium systems, +they end with the suffix .so. Shared libraries created on a platform using a particular PA-RISC version are not usable on platforms using an earlier PA-RISC version by @@ -107,6 +122,12 @@ default. However, this backwards compatibility may be enabled using the same +DAportable compiler flag (with the same PA-RISC 1.0 caveat mentioned above). +Shared libraries created on an Itanium platform cannot be loaded on +a PA-RISC platform. Shared libraries created on a PA-RISC platform +can only be loaded on an Itanium platform if it is a PA-RISC executable +that is attempting to load the PA-RISC library. A PA-RISC shared +library cannot be loaded into an Itanium executable nor vice-versa. + To create a shared library, the following steps must be performed: 1. Compile source modules with +z or +Z flag to create a .o module @@ -140,13 +161,57 @@ modules are then linked into the shared library. Note that it is okay to create a library which contains a dependent library that is already linked into perl. -It is no longer possible to link PA-RISC 1.0 shared libraries. +Some extensions, like DB_File and Compress::Zlib use/require prebuilt +libraries for the perl extensions/modules to work. If these libraries +are built using the default configuration, it might happen that you run +into an error like "invalid loader fixup" during load phase. HP is aware +of this problem and address it at + http://devresource.hp.com/devresource/Docs/TechTips/cxxTips.html#tip13 + +A more general approach is to intervene manually, as with an example for +the DB_File module, which requires SleepyCat's libdb.sl: + + # cd .../db-3.2.9/build_unix + # vi Makefile + ... add +Z to all cflags to create shared objects + CFLAGS= -c $(CPPFLAGS) +Z -Ae +O2 +Onolimit \ + -I/usr/local/include -I/usr/include/X11R6 + CXXFLAGS= -c $(CPPFLAGS) +Z -Ae +O2 +Onolimit \ + -I/usr/local/include -I/usr/include/X11R6 + + # make clean + # make + # mkdir tmp + # cd tmp + # ar x ../libdb.a + # ld -b -o libdb-3.2.sl *.o + # mv libdb-3.2.sl /usr/local/lib + # rm *.o + # cd /usr/local/lib + # rm -f libdb.sl + # ln -s libdb-3.2.sl libdb.sl + + # cd .../DB_File-1.76 + # make distclean + # perl Makefile.PL + # make + # make test + # make install + +It is no longer possible to link PA-RISC 1.0 shared libraries (even +though the command-line flags are still present). + +PA-RISC and Itanium object files are not interchangeable. Although +you may be able to use ar to create an archive library of PA-RISC +object files on an Itanium system, you cannot link against it using +an Itanium link editor. =head2 The HP ANSI C Compiler When using this compiler to build Perl, you should make sure that the flag -Aa is added to the cpprun and cppstdin variables in the config.sh -file (though see the section on 64-bit perl below). +file (though see the section on 64-bit perl below). If you are using a +recent version of the Perl distribution, these flags are set automatically. =head2 Using Large Files with Perl @@ -192,10 +257,9 @@ HP-UX 11.00 at least. To compile Perl with threads, add -Dusethreads to the arguments of Configure. Verify that the -D_POSIX_C_SOURCE=199506L compiler flag is automatically added to the list of flags. Also make sure that -lpthread -is listed before -lc in the list of libraries to link Perl with. - -As of the date of this document, Perl threads are not fully supported on -HP-UX. +is listed before -lc in the list of libraries to link Perl with. The +hints provided for HP-UX during Configure will try very hard to get +this right for you. HP-UX versions before 10.30 require a seperate installation of a POSIX threads library package. Two examples are the HP DCE package, available @@ -267,6 +331,23 @@ like for example C<"!">: s!foo!!; +=head2 Kernel parameters (maxdsiz) + +By default, HP-UX comes configured with a maximum data segment size of +64MB. This is too small to correctly compile Perl with the maximum +optimization levels. You can increase the size of the maxdsiz kernel +parameter through the use of SAM. + +When using the GUI version of SAM, click on the Kernel Configuration +icon, then the Configurable Parameters icon. Scroll down and select +the maxdsiz line. From the Actions menu, select the Modify Configurable +Parameter item. Insert the new formula into the Formula/Value box. +Then follow the instructions to rebuild your kernel and reboot your +system. + +In general, a value of 256MB (or "256*1024*1024") is sufficient for +Perl to compile at maximum optimization. + =head1 AUTHOR Jeff Okamoto <okamoto@corp.hp.com> @@ -275,6 +356,6 @@ With much assistance regarding shared libraries from Marc Sabatella. =head1 DATE -Version 0.6.2: 2001-02-02 +Version 0.6.3: 2001-05-16 =cut @@ -1,4 +1,4 @@ -case $CONFIG in +case $PERL_CONFIG_SH in '') if test -f config.sh; then TOP=.; elif test -f ../config.sh; then TOP=..; @@ -28,7 +28,7 @@ $startsh : In the following dollars and backticks do not need the extra backslash. $spitshell >>cflags <<'!NO!SUBS!' -case $CONFIGDOTSH in +case $PERL_CONFIG_SH in '') if test -f config.sh; then TOP=.; elif test -f ../config.sh; then TOP=..; diff --git a/config_h.SH b/config_h.SH index 9188b7991c..c0a9146cf0 100644 --- a/config_h.SH +++ b/config_h.SH @@ -4,7 +4,7 @@ esac case "$CONFIG_H" in '') CONFIG_H=config.h ;; esac -case $CONFIG in +case $PERL_CONFIG_SH in '') if test -f $CONFIG_SH; then TOP=.; elif test -f ../$CONFIG_SH; then TOP=..; @@ -1062,7 +1062,13 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un * by Configure. You shouldn't rely on it too much; the specific * feature tests from Configure are generally more reliable. */ +/* OSVERS: + * This symbol contains the version of the operating system, as determined + * by Configure. You shouldn't rely on it too much; the specific + * feature tests from Configure are generally more reliable. + */ #define OSNAME "$osname" /**/ +#define OSVERS "$osvers" /**/ /* MEM_ALIGNBYTES: * This symbol contains the number of bytes required to align a @@ -60,7 +60,7 @@ $in_v = 0; while (<>) { next if m:^#!/bin/sh:; - # Catch CONFIGDOTSH=true and PERL_VERSION=n line from Configure. + # Catch PERL_CONFIG_SH=true and PERL_VERSION=n line from Configure. s/^(\w+)=(true|\d+)\s*$/$1='$2'\n/; my ($k,$v) = ($1,$2); # grandfather PATCHLEVEL and SUBVERSION and CONFIG @@ -71,7 +71,7 @@ while (<>) { elsif ($k eq 'PERL_SUBVERSION') { push @v_others, "SUBVERSION='$v'\n"; } - elsif ($k eq 'CONFIGDOTSH') { + elsif ($k eq 'PERL_CONFIG_SH') { push @v_others, "CONFIG='$v'\n"; } } @@ -474,11 +474,11 @@ require $config_pm; import Config; die "$0: $config_pm not valid" - unless $Config{'CONFIGDOTSH'} eq 'true'; + unless $Config{'PERL_CONFIG_SH'} eq 'true'; die "$0: error processing $config_pm" if defined($Config{'an impossible name'}) - or $Config{'CONFIGDOTSH'} ne 'true' # test cache + or $Config{'PERL_CONFIG_SH'} ne 'true' # test cache ; die "$0: error processing $config_pm" diff --git a/configure.com b/configure.com index a1c26a71cb..209f4ecdfc 100644 --- a/configure.com +++ b/configure.com @@ -5580,7 +5580,7 @@ $ WC "vms_prefix='" + vms_prefix + "'" ! VMS specific $ WC "vms_ver='" + vms_ver + "'" ! VMS specific $ WC "voidflags='15'" $ WC "xs_apiversion='" + version + "'" -$ WC "CONFIGDOTSH='true'" +$ WC "PERL_CONFIG_SH='true'" $! $! ##END WRITE NEW CONSTANTS HERE## $! @@ -436,7 +436,14 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, OP *o) if (o->op_private & OPpTARGET_MY) sv_catpv(tmpsv, ",TARGET_MY"); } - if (o->op_type == OP_AASSIGN) { + else if (o->op_type == OP_LEAVESUB || + o->op_type == OP_LEAVE || + o->op_type == OP_LEAVESUBLV || + o->op_type == OP_LEAVEWRITE) { + if (o->op_private & OPpREFCOUNTED) + sv_catpv(tmpsv, ",REFCOUNTED"); + } + else if (o->op_type == OP_AASSIGN) { if (o->op_private & OPpASSIGN_COMMON) sv_catpv(tmpsv, ",COMMON"); if (o->op_private & OPpASSIGN_HASH) @@ -453,6 +460,10 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, OP *o) sv_catpv(tmpsv, ",DELETE"); if (o->op_private & OPpTRANS_COMPLEMENT) sv_catpv(tmpsv, ",COMPLEMENT"); + if (o->op_private & OPpTRANS_IDENTICAL) + sv_catpv(tmpsv, ",IDENTICAL"); + if (o->op_private & OPpTRANS_GROWS) + sv_catpv(tmpsv, ",GROWS"); } else if (o->op_type == OP_REPEAT) { if (o->op_private & OPpREPEAT_DOLIST) @@ -474,8 +485,12 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, OP *o) sv_catpv(tmpsv, ",DB"); if (o->op_private & OPpENTERSUB_HASTARG) sv_catpv(tmpsv, ",HASTARG"); + if (o->op_private & OPpENTERSUB_NOPAREN) + sv_catpv(tmpsv, ",NOPAREN"); + if (o->op_private & OPpENTERSUB_INARGS) + sv_catpv(tmpsv, ",INARGS"); } - else + else { switch (o->op_private & OPpDEREF) { case OPpDEREF_SV: sv_catpv(tmpsv, ",SV"); @@ -487,6 +502,9 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, OP *o) sv_catpv(tmpsv, ",HV"); break; } + if (o->op_private & OPpMAYBE_LVSUB) + sv_catpv(tmpsv, ",MAYBE_LVSUB"); + } if (o->op_type == OP_AELEM || o->op_type == OP_HELEM) { if (o->op_private & OPpLVAL_DEFER) sv_catpv(tmpsv, ",LVAL_DEFER"); @@ -503,6 +521,12 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, OP *o) sv_catpv(tmpsv, ",BARE"); if (o->op_private & OPpCONST_STRICT) sv_catpv(tmpsv, ",STRICT"); + if (o->op_private & OPpCONST_ARYBASE) + sv_catpv(tmpsv, ",ARYBASE"); + if (o->op_private & OPpCONST_WARNING) + sv_catpv(tmpsv, ",WARNING"); + if (o->op_private & OPpCONST_ENTERED) + sv_catpv(tmpsv, ",ENTERED"); } else if (o->op_type == OP_FLIP) { if (o->op_private & OPpFLIP_LINENUM) @@ -515,6 +539,48 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, OP *o) if (o->op_private & OPpLVAL_INTRO) sv_catpv(tmpsv, ",INTRO"); } + else if (o->op_type == OP_GV) { + if (o->op_private & OPpEARLY_CV) + sv_catpv(tmpsv, ",EARLY_CV"); + } + else if (o->op_type == OP_LIST) { + if (o->op_private & OPpLIST_GUESSED) + sv_catpv(tmpsv, ",GUESSED"); + } + else if (o->op_type == OP_DELETE) { + if (o->op_private & OPpSLICE) + sv_catpv(tmpsv, ",SLICE"); + } + else if (o->op_type == OP_EXISTS) { + if (o->op_private & OPpEXISTS_SUB) + sv_catpv(tmpsv, ",EXISTS_SUB"); + } + else if (o->op_type == OP_SORT) { + if (o->op_private & OPpSORT_NUMERIC) + sv_catpv(tmpsv, ",NUMERIC"); + if (o->op_private & OPpSORT_INTEGER) + sv_catpv(tmpsv, ",INTEGER"); + if (o->op_private & OPpSORT_REVERSE) + sv_catpv(tmpsv, ",REVERSE"); + } + else if (o->op_type == OP_THREADSV) { + if (o->op_private & OPpDONE_SVREF) + sv_catpv(tmpsv, ",SVREF"); + } + else if (o->op_type == OP_OPEN || o->op_type == OP_BACKTICK) { + if (o->op_private & OPpOPEN_IN_RAW) + sv_catpv(tmpsv, ",IN_RAW"); + if (o->op_private & OPpOPEN_IN_CRLF) + sv_catpv(tmpsv, ",IN_CRLF"); + if (o->op_private & OPpOPEN_OUT_RAW) + sv_catpv(tmpsv, ",OUT_RAW"); + if (o->op_private & OPpOPEN_OUT_CRLF) + sv_catpv(tmpsv, ",OUT_CRLF"); + } + else if (o->op_type == OP_EXIT) { + if (o->op_private & OPpEXIT_VMSISH) + sv_catpv(tmpsv, ",EXIST_VMSISH"); + } if (o->op_flags & OPf_MOD && o->op_private & OPpLVAL_INTRO) sv_catpv(tmpsv, ",INTRO"); if (SvCUR(tmpsv)) diff --git a/ext/B/B/Deparse.pm b/ext/B/B/Deparse.pm index 221ca22b07..7b8bf13d1c 100644 --- a/ext/B/B/Deparse.pm +++ b/ext/B/B/Deparse.pm @@ -2962,13 +2962,12 @@ sub uninterp { return $str; } -# the same, but treat $|, $), $( and $ at the end of the string differently -sub re_uninterp { - my($str) = @_; - +{ +my $bal; +BEGIN { use re "eval"; # Matches any string which is balanced with respect to {braces} - my $bal = qr( + $bal = qr( (?: [^\\{}] | \\\\ @@ -2976,6 +2975,11 @@ sub re_uninterp { | \{(??{$bal})\} )* )x; +} + +# the same, but treat $|, $), $( and $ at the end of the string differently +sub re_uninterp { + my($str) = @_; $str =~ s/ ( ^|\G # $1 @@ -2998,11 +3002,34 @@ sub re_uninterp { return $str; } +# This is for regular expressions with the /x modifier +# We have to leave comments unmangled. sub re_uninterp_extended { - my ($str) = @_; - $str =~ s/^([^#]*)/re_uninterp($1)/emg; + my($str) = @_; + + $str =~ s/ + ( ^|\G # $1 + | [^\\] + ) + + ( # $2 + (?:\\\\)* + ) + + ( # $3 + ( \(\?\??\{$bal\}\) # $4 (skip over (?{}) and (??{}) blocks) + | \#[^\n]* # (skip over comments) + ) + | [\$\@] + (?!\||\)|\(|$) + | \\[uUlLQE] + ) + + /length($4) ? "$1$2$4" : "$1$2\\$3"/xeg; + return $str; } +} # character escapes, but not delimiters that might need to be escaped sub escape_str { # ASCII, UTF8 @@ -3020,6 +3047,8 @@ sub escape_str { # ASCII, UTF8 return $str; } +# For regexes with the /x modifier. +# Leave whitespace unmangled. sub escape_extended_re { my($str) = @_; $str =~ s/(.)/ord($1)>255 ? sprintf("\\x{%x}", ord($1)) : $1/eg; @@ -3153,7 +3182,7 @@ sub dq { my $first = $self->dq($op->first); my $last = $self->dq($op->last); - # Disambiguate "${foo}bar", "${foo}{bar}", "${foo}[1]" + # Disambiguate "${foo}bar", "${foo}{bar}", "${foo}[1]" ($last =~ /^[A-Z\\\^\[\]_?]/ && $first =~ s/([\$@])\^$/${1}{^}/) # "${^}W" etc || ($last =~ /^[{\[\w_]/ && @@ -3458,13 +3487,13 @@ sub re_dq { } elsif ($type eq "concat") { my $first = $self->re_dq($op->first, $extended); my $last = $self->re_dq($op->last, $extended); + # Disambiguate "${foo}bar", "${foo}{bar}", "${foo}[1]" - if ($last =~ /^[A-Z\\\^\[\]_?]/) { - $first =~ s/([\$@])\^$/${1}{^}/; - } - elsif ($last =~ /^[{\[\w]/) { - $first =~ s/([\$@])([A-Za-z_]\w*)$/${1}{$2}/; - } + ($last =~ /^[A-Z\\\^\[\]_?]/ && + $first =~ s/([\$@])\^$/${1}{^}/) # "${^}W" etc + || ($last =~ /^[{\[\w_]/ && + $first =~ s/([\$@])([A-Za-z_]\w*)$/${1}{$2}/); + return $first . $last; } elsif ($type eq "uc") { return '\U' . $self->re_dq($op->first->sibling, $extended) . '\E'; @@ -3655,10 +3684,17 @@ sub pp_subst { $repl = $self->dq($repl); } } + my $extended = ($op->pmflags & PMf_EXTENDED); if (null $kid) { - $re = re_uninterp(escape_str(re_unback($op->precomp))); + my $unbacked = re_unback($op->precomp); + if ($extended) { + $re = re_uninterp_extended(escape_extended_re($unbacked)); + } + else { + $re = re_uninterp(escape_str($unbacked)); + } } else { - $re = $self->deparse($kid, 1); + ($re) = $self->regcomp($kid, 1, $extended); } $flags .= "e" if $op->pmflags & PMf_EVAL; $flags .= "g" if $op->pmflags & PMf_GLOBAL; @@ -3666,7 +3702,7 @@ sub pp_subst { $flags .= "m" if $op->pmflags & PMf_MULTILINE; $flags .= "o" if $op->pmflags & PMf_KEEP; $flags .= "s" if $op->pmflags & PMf_SINGLELINE; - $flags .= "x" if $op->pmflags & PMf_EXTENDED; + $flags .= "x" if $extended; $flags = $substwords{$flags} if $substwords{$flags}; if ($binop) { return $self->maybe_parens("$var =~ s" @@ -4081,11 +4117,16 @@ The obvious fix doesn't work, because these are different: =item * Constants (other than simple strings or numbers) don't work properly. -Examples that fail include: +Pathological examples that fail (and probably always will) include: use constant E2BIG => ($!=7); use constant x=>\$x; print x +The following could (and should) be made to work: + + use constant regex => qr/blah/; + print regex; + =item * An input file that uses source filtering probably won't be deparsed into diff --git a/ext/Thread/Thread.xs b/ext/Thread/Thread.xs index cb2e395051..b81ee26d9c 100644 --- a/ext/Thread/Thread.xs +++ b/ext/Thread/Thread.xs @@ -279,10 +279,19 @@ newthread (pTHX_ SV *startsv, AV *initargs, char *classname) if (!attr_inited) { attr_inited = 1; err = pthread_attr_init(&attr); +# ifdef THREAD_CREATE_NEEDS_STACK + if (err == 0) + err = pthread_attr_setstacksize(&attr, THREAD_CREATE_NEEDS_STACK); + if (err) + croak("panic: pthread_attr_setstacksize failed"); +#else + croak("panic: can't pthread_attr_setstacksize"); +# endif # ifdef PTHREAD_ATTR_SETDETACHSTATE if (err == 0) err = PTHREAD_ATTR_SETDETACHSTATE(&attr, attr_joinable); - + if (err) + croak("panic: pthread_attr_setdetachstate failed"); # else croak("panic: can't pthread_attr_setdetachstate"); # endif diff --git a/ext/Time/HiRes/HiRes.pm b/ext/Time/HiRes/HiRes.pm index 0f9d07b54b..0ff4798576 100644 --- a/ext/Time/HiRes/HiRes.pm +++ b/ext/Time/HiRes/HiRes.pm @@ -262,6 +262,12 @@ Here is an example of using NVtime from C: myNVtime = (double(*)()) SvIV(*svp); printf("The current time is: %f\n", (*myNVtime)()); +=head1 CAVEATS + +Notice that the core time() maybe rounding rather than truncating. +What this means that the core time() may be giving time one second +later than gettimeofday(), also known as Time::HiRes::time(). + =head1 AUTHORS D. Wegscheid <wegscd@whirlpool.com> diff --git a/hints/dgux.sh b/hints/dgux.sh index 9a6f7a4879..4f5e03ec15 100644 --- a/hints/dgux.sh +++ b/hints/dgux.sh @@ -1,7 +1,7 @@ -# $Id: dgux.sh,v 1.8 1996-11-29 18:16:43-05 roderick Exp $ +# $Id: dgux.sh,v 1.9 2001-05-07 00:06:00-05 Takis Exp $ -# This is a hints file for DGUX, which is Data General's Unix. It was -# originally developed with version 5.4.3.10 of the OS, and then was +# This is a hints file for DGUX, which is EMC's Data General's Unix. It +# was originally developed with version 5.4.3.10 of the OS, and then was # later updated running under version 4.11.2 (running on m88k hardware). # The gross features should work with versions going back to 2.nil but # some tweaking will probably be necessary. @@ -16,57 +16,76 @@ # # -Roderick Schertler <roderick@argon.org> -# Here are the things from some old DGUX hints files which are different -# from what's in here now. I don't know the exact reasons that most of -# these settings were in the hints files, presumably they can be chalked -# up to old Configure inadequacies and changes in the OS headers and the -# like. These settings might make a good place to start looking if you -# have problems. -# -# This was specified the the 4.036 hints file. That hints file didn't -# say what version of the OS it was developed using. -# -# cppstdin='/lib/cpp' -# -# The 4.036 and 5.001 hints files both contained these. The 5.001 hints -# file said it was developed with version 2.01 of DGUX. -# -# gidtype='gid_t' -# groupstype='gid_t' -# uidtype='uid_t' -# d_index='define' -# cc='gcc' -# -# These were peculiar to the 5.001 hints file. -# -# ccflags='-D_POSIX_SOURCE -D_DGUX_SOURCE' -# -# # an ugly hack, since the Configure test for "gcc -P -" hangs. -# # can't just use 'cppstdin', since our DG has a broken cppstdin :-( -# cppstdin=`cd ..; pwd`/cppstdin -# cpprun=`cd ..; pwd`/cppstdin -# -# One last note: The 5.001 hints file said "you don't want to use -# /usr/ucb/cc" in the place at which it set cc to gcc. That in -# particular baffles me, as I used to have 2.01 loaded and my memory -# is telling me that even then /usr/ucb was a symlink to /usr/bin. - - # The standard system compiler is gcc, but invoking it as cc changes its # behavior. I have to pick one name or the other so I can get the # dynamic loading switches right (they vary depending on this). I'm # picking gcc because there's no way to get at the optimization options # and so on when you call it cc. -case $cc in - '') - cc=gcc - case $optimize in - '') optimize=-O2;; - esac - ;; + +########################################## +# Modified by Takis Psarogiannakopoulos +# Universirty of Cambridge +# Centre for Mathematical Sciences +# Department of Pure Mathematics +# Wilberforce road +# Cambridge CB3 0WB , UK +# e-mail <takis@xfree86.org> +# Use GCC-2.95.2/3 rev (DG/UX) for threads +# This compiler supports the -pthread switch +# to link correctly DG/UX 's -lthread. +########################################### + +cc=gcc +ccflags="-DDGUX -D_DGUX_SOURCE" +# Debug build with GNU as,ld and -gstabs+ +# ccflags="-DDGUX -D_DGUX_SOURCE -gstabs+" +# Dummy ; always compile with -O2 on GCC 2.95.2/3 rev (DG/UX) +optimize="-mno-legend -O2" + +archname="ix86-dgux" +libpth="/usr/lib" + +##################################### +# <takis@xfree86.org> +# Change this if you want. +# prefix =/usr/local +##################################### + +prefix=/usr/local +perlpath="$prefix/bin/perl57" +startperl="#! $prefix/bin/perl57" +privlib="$prefix/lib/perl57" +man1dir="$prefix/man/man1" +man3dir="$prefix/man/man3" + +sitearch="$prefix/lib/perl57/$archname" +sitelib="$prefix/lib/perl57" + +#Do not overwrite by default /usr/bin/perl of DG/UX +installusrbinperl="$undef" + +# Configure may fail to find lstat() +# function in <sys/stat.h>. +d_lstat=define + +# Internal malloc is needed for correct operation +# of perl-5.7.x +# DG/UX native malloc is causing problems. +# Some perl tests they failing badly. +# I have no time to investigate more. +# <takis@xfree86.org> + +case "$usemymalloc" in +'') usemymalloc='y' ;; esac -usevfork=true +case "$uselongdouble" in +'') uselongdouble='y' ;; +esac + +#### No for threads ???? ##### +#usevfork=true +usevfork=false # DG has this thing set up with symlinks which point to different places # depending on environment variables (see elink(5)) and the compiler and @@ -117,20 +136,99 @@ done plibpth="$plibpth $sde_path/$sde/usr/lib" unset sde_path default_sde sde +##################################### +# <takis@xfree86.org> +##################################### + +libperl="libperl57.so" + # Many functions (eg, gethostent(), killpg(), getpriority(), setruid() # dbm_*(), and plenty more) are defined in -ldgc. Usually you don't # need to know this (it seems that libdgc.so is searched automatically # by ld), but Configure needs to check it otherwise it will report all # those functions as missing. -libswanted="dgc $libswanted" + +##################################### +# <takis@xfree86.org> +##################################### + +# libswanted="dgc gdbm $libswanted" +#libswanted="dbm posix $libswanted" +# Remove malloc since we use the internal perl one. +libswanted="dbm posix resolv socket nsl dl m" + +##################################### +# <takis@xfree86.org> +##################################### + +mydomain='.localhost' +cf_by=`(whoami) 2>/dev/null` +cf_email="$cf_by@localhost" # Dynamic loading works using the dlopen() functions. Note that dlfcn.h # used to be broken, it declared _dl*() rather than dl*(). This was the # case up to 3.10, it has been fixed in 4.11. I'm not sure if it was # fixed in 4.10. If you have the older header just ignore the warnings # (since pointers and integers have the same format on m88k). -usedl=true + +# usedl=true +usedl=false + # For cc rather than gcc the flags would be `-K PIC' for compiling and # -G for loading. I haven't tested this. -cccdlflags=-fpic -lddlflags=-shared + +##################################### +# <takis@xfree86.org> +# Use -fPIC instead -fpic +##################################### + +cccdlflags=-fPIC +#We must use gcc +ld="gcc" +lddlflags="-shared" + +############################################################################ +# DGUX Posix 4A Draft 10 Thread support +# <takis@xfree86.org> +# use Configure -Dusethreads to enable +############################################################################ + +cat > UU/usethreads.cbu <<'EOCBU' +case "$usethreads" in +$define|true|[yY]*) + ccflags="$ccflags" + shift + # DG/UX's sched_yield is in -lrte + # Remove malloc since we use the internal perl one. + libswanted="dbm posix resolv socket nsl dl m rte" + archname="ix86-dgux-thread" + sitearch="$prefix/lib/perl57/$archname" + sitelib="$prefix/lib/perl57" + case "$cc" in + *gcc*) + #### Use GCC -2.95.2/3 rev (DG/UX) and -pthread + #### Otherwise take out the switch -pthread + #### And add manually the -D_POSIX4A_DRAFT10_SOURCE flag. + ld="gcc" + ccflags="$ccflags -D_POSIX4A_DRAFT10_SOURCE" + # Debug build : use -DS flag on command line perl + # ccflags="$ccflags -DDEBUGGING -D_POSIX4A_DRAFT10_SOURCE -pthread" + cccdlflags='-fPIC' + lddlflags="-shared" + #### Use GCC -2.95.2/3 rev (DG/UX) and -pthread + #### Otherwise take out the switch -pthread + #### And add manually the -lthread library. + ldflags="$ldflags -pthread" + ;; + + *) + echo "Not supported DG/UX cc and threads !" + ;; + esac +esac +EOCBU + +# "./Configure -d" can't figure this out easily +d_suidsafe='define' + +################################################### diff --git a/hints/hpux.sh b/hints/hpux.sh index 5b0dd7ea54..da8485f717 100644 --- a/hints/hpux.sh +++ b/hints/hpux.sh @@ -45,19 +45,6 @@ set `echo "X $libswanted " | sed -e 's/ ld / /' -e 's/ dbm / /' -e 's/ BSD / /' shift libswanted="$*" -# By setting the deferred flag below, this means that if you run perl -# on a system that does not have the required shared library that you -# linked it with, it will die when you try to access a symbol in the -# (missing) shared library. If you would rather know at perl startup -# time that you are missing an important shared library, switch the -# comments so that immediate, rather than deferred loading is -# performed. Even with immediate loading, you can postpone errors for -# undefined (or multiply defined) routines until actual access by -# adding the "nonfatal" option. -# ccdlflags="-Wl,-E -Wl,-B,immediate $ccdlflags" -# ccdlflags="-Wl,-E -Wl,-B,immediate,-B,nonfatal $ccdlflags" -ccdlflags="-Wl,-E -Wl,-B,deferred $ccdlflags" - cc=${cc:-cc} ar=/usr/bin/ar # Yes, truly override. We do not want the GNU ar. full_ar=$ar # I repeat, no GNU ar. arrr. @@ -71,13 +58,34 @@ case "$prefix" in "") prefix='/opt/perl5' ;; esac + gnu_as=no + gnu_ld=no case `$cc -v 2>&1`"" in *gcc*) ccisgcc="$define" - ccflags="$cc_cppflags -Wl,+vnocompatwarnings" + ccflags="$cc_cppflags" case "`getconf KERNEL_BITS 2>/dev/null`" in - *64*) ldflags="$ldflags -Wl,+vnocompatwarnings" - ccflags="$ccflags -Wl,+vnocompatwarnings -Wa,+DA2.0" - ;; + *64*) + echo "main(){}">try.c + # gcc with gas will not accept +DA2.0 + case "`$cc -c -Wa,+DA2.0 try.c 2>&1`" in + *"+DA2.0"*) # gas + gnu_as=yes + ;; + *) # HPas + ccflags="$ccflags -Wa,+DA2.0" + ;; + esac + # gcc with gld will not accept +vnocompatwarnings + case "`$cc -o try -Wl,+vnocompatwarnings try.c 2>&1`" in + *"+vnocompat"*) # gld + gnu_ld=yes + ;; + *) # HPld + ldflags="$ldflags -Wl,+vnocompatwarnings" + ccflags="$ccflags -Wl,+vnocompatwarnings" + ;; + esac + ;; esac ;; *) ccisgcc='' @@ -99,6 +107,25 @@ toke_cflags='ccflags="$ccflags -DARG_ZERO_IS_SCRIPT"' ### 64 BITNESS +# Some gcc versions do native 64 bit long (e.g. 2.9-hppa-000310) +# We have to force 64bitness to go search the right libraries + gcc_64native=no +case "$ccisgcc" in + $define|true|[Yy]) + echo 'int main(){long l;printf("%d\n",sizeof(l));}'>try.c + $cc -o try $ccflags $ldflags try.c + if [ "`try`" = "8" ]; then + cat <<EOM >&4 + +*** This version of gcc uses 64 bit longs. -Duse64bitall is +*** implicitly set to enable continuation +EOM + use64bitall=$define + gcc_64native=yes + fi + ;; + esac + case "$use64bitall" in $define|true|[yY]*) use64bitint="$define" ;; esac @@ -149,8 +176,23 @@ EOM exit 1 fi - ccflags="$ccflags +DD64" - ldflags="$ldflags +DD64" + case "$ccisgcc" in + $define|true|[Yy]) + # For the moment, don't care that it ain't supported (yet) + # by gcc (up to and including 2.95.3), cause it'll crash + # anyway. Expect auto-detection of 64-bit enabled gcc on + # HP-UX soon, including a user-friendly exit + case $gcc_64native in + no) ccflags="$ccflags -mlp64" + ldflags="$ldflags -Wl,+DD64" + ;; + esac + ;; + *) + ccflags="$ccflags +DD64" + ldflags="$ldflags +DD64" + ;; + esac # Reset the library checker to make sure libraries # are the right type @@ -173,6 +215,23 @@ EOM ;; esac +# By setting the deferred flag below, this means that if you run perl +# on a system that does not have the required shared library that you +# linked it with, it will die when you try to access a symbol in the +# (missing) shared library. If you would rather know at perl startup +# time that you are missing an important shared library, switch the +# comments so that immediate, rather than deferred loading is +# performed. Even with immediate loading, you can postpone errors for +# undefined (or multiply defined) routines until actual access by +# adding the "nonfatal" option. +# ccdlflags="-Wl,-E -Wl,-B,immediate $ccdlflags" +# ccdlflags="-Wl,-E -Wl,-B,immediate,-B,nonfatal $ccdlflags" +if [ "$gnu_ld" = "yes" ]; then + ccdlflags="-Wl,-E $ccdlflags" +else + ccdlflags="-Wl,-E -Wl,-B,deferred $ccdlflags" + fi + ### COMPILER SPECIFICS diff --git a/installman b/installman index 2b6e6275a2..dad91820cf 100755 --- a/installman +++ b/installman @@ -67,6 +67,7 @@ $opts{verbose} ||= $opts{V} || $opts{notify}; $packlist = ExtUtils::Packlist->new("$Config{installarchlib}/.packlist"); + # Install the main pod pages. runpod2man('pod', $opts{man1dir}, $opts{man1ext}); @@ -74,22 +75,17 @@ runpod2man('pod', $opts{man1dir}, $opts{man1ext}); runpod2man('lib', $opts{man3dir}, $opts{man3ext}); # Install the pods embedded in the installed scripts -runpod2man('utils', $opts{man1dir}, $opts{man1ext}, 'c2ph', 'h2ph', 'h2xs', - 'perlcc', 'perldoc', 'perlbug', 'pl2pm', 'splain', 'dprofpp'); -runpod2man('x2p', $opts{man1dir}, $opts{man1ext}, 's2p', 'a2p.pod', - 'find2perl'); -runpod2man('pod', $opts{man1dir}, $opts{man1ext}, 'pod2man', 'pod2html', - 'pod2text', 'pod2usage', 'podchecker', 'podselect'); - -# It would probably be better to have this page linked -# to the c2ph man page. Or, this one could say ".so man1/c2ph.1", -# but then it would have to pay attention to $opts{man1dir} and $opts{man1ext}. -runpod2man('utils', $opts{man1dir}, $opts{man1ext}, 'pstruct'); - -# Similar concern as with pstruct/c2ph above: psed is s2p by other name. -runpod2man('x2p', $opts{man1dir}, $opts{man1ext}, 'psed'); - -runpod2man('lib/ExtUtils', $opts{man1dir}, $opts{man1ext}, 'xsubpp'); +open UTILS, "utils.lst" or die "Can't open 'utils.lst': $!"; +while (<UTILS>) { + next if /^#/; + chomp; + $_ = $1 if /#.*pod\s*=\s*(\S+)/; + my ($where, $what) = m|^(.*?)/(\S+)|; + runpod2man($where, $opts{man1dir}, $opts{man1ext}, $what); + if (($where, $what) = m|#.*link\s*=\s*(\S+)/(\S+)|) { + runpod2man($where, $opts{man1dir}, $opts{man1ext}, $what); + } +} sub runpod2man { # @script is scripts names if we are installing manpages embedded diff --git a/installperl b/installperl index 6adcdf2992..6bfbdc9a92 100755 --- a/installperl +++ b/installperl @@ -63,12 +63,20 @@ while (@ARGV) { } $versiononly = 1 if $Config{versiononly} && !defined $versiononly; - -my @scripts = qw(utils/c2ph utils/h2ph utils/h2xs utils/perlbug utils/perldoc - utils/pl2pm utils/splain utils/perlcc utils/dprofpp - x2p/s2p x2p/find2perl - pod/pod2man pod/pod2html pod/pod2latex pod/pod2text - pod/pod2usage pod/podchecker pod/podselect); +my (@scripts, @tolink); +open SCRIPTS, "utils.lst" or die "Can't open utils.lst: $!"; +while (<SCRIPTS>) { + next if /^#/; + next if /#\s*pod\s*=/; # Binary programs need separate treatment + chomp; + if (/(\S*)\s*#\s*link\s*=\s*(\S*)/) { + push @scripts, $1; + push @tolink, [$1, $2]; + } else { + push @scripts, $_; + } +} +close SCRIPTS; if ($scr_ext) { @scripts = map { "$_$scr_ext" } @scripts; } @@ -417,11 +425,12 @@ if (! $versiononly) { chmod(0755, "$installscript/$base"); } - # pstruct should be a link to c2ph - script_alias($installscript, 'c2ph', 'pstruct', $scr_ext); - - # psed should be a link to s2p - script_alias($installscript, 's2p', 'psed', $scr_ext); + for (@tolink) { + my ($from, $to)= @$_; + (my $frbase = $from) =~ s#.*/##; + (my $tobase = $to) =~ s#.*/##; + script_alias($installscript, $frbase, $tobase, $scr_ext); + } } # Install pod pages. Where? I guess in $installprivlib/pod diff --git a/lib/Switch.pm b/lib/Switch.pm index 2a3093c359..910002eb92 100644 --- a/lib/Switch.pm +++ b/lib/Switch.pm @@ -4,7 +4,7 @@ use strict; use vars qw($VERSION); use Carp; -$VERSION = '2.02'; +$VERSION = '2.03'; # LOAD FILTERING MODULE... @@ -24,7 +24,7 @@ sub import $DB::single = 1; $fallthrough = grep /\bfallthrough\b/, @_; $offset = (caller)[2]+1; - filter_add({}) unless @_>1 && $_[1] ne '__'; + filter_add({}) unless @_>1 && $_[1] eq 'noimport'; my $pkg = caller; no strict 'refs'; for ( qw( on_defined on_exists ) ) @@ -182,11 +182,11 @@ sub in my @numy; for my $nextx ( @$x ) { - my $numx = ref($nextx) || (~$nextx&$nextx) eq 0; + my $numx = ref($nextx) || defined $nextx && (~$nextx&$nextx) eq 0; for my $j ( 0..$#$y ) { my $nexty = $y->[$j]; - push @numy, ref($nexty) || (~$nexty&$nexty) eq 0 + push @numy, ref($nexty) || defined $nexty && (~$nexty&$nexty) eq 0 if @numy <= $j; return 1 if $numx && $numy[$j] && $nextx==$nexty || $nextx eq $nexty; @@ -222,12 +222,13 @@ sub switch(;$) return $s_val->($c_val); }; } - elsif ($s_ref eq "" && (~$s_val&$s_val) eq 0) # NUMERIC SCALAR + elsif ($s_ref eq "" && defined $s_val && (~$s_val&$s_val) eq 0) # NUMERIC SCALAR { $::_S_W_I_T_C_H = sub { my $c_val = $_[0]; my $c_ref = ref $c_val; return $s_val == $c_val if $c_ref eq "" + && defined $c_val && (~$c_val&$c_val) eq 0; return $s_val eq $c_val if $c_ref eq ""; return in([$s_val],$c_val) if $c_ref eq 'ARRAY'; @@ -454,8 +455,8 @@ Switch - A switch statement for Perl =head1 VERSION -This document describes version 2.02 of Switch, -released April 26, 2001. +This document describes version 2.03 of Switch, +released May 15, 2001. =head1 SYNOPSIS diff --git a/makeaperl.SH b/makeaperl.SH index 45812ba7dc..80c0f21319 100644 --- a/makeaperl.SH +++ b/makeaperl.SH @@ -1,4 +1,4 @@ -case $CONFIGDOTSH in +case $PERL_CONFIG_SH in '') if test -f config.sh; then TOP=.; elif test -f ../config.sh; then TOP=..; diff --git a/makedepend.SH b/makedepend.SH index 579be0b748..ec21795429 100755 --- a/makedepend.SH +++ b/makedepend.SH @@ -1,5 +1,5 @@ #! /bin/sh -case $CONFIGDOTSH in +case $PERL_CONFIG_SH in '') if test -f config.sh; then TOP=.; elif test -f ../config.sh; then TOP=..; @@ -41,7 +41,7 @@ esac export PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh \$0; kill \$\$) -case $CONFIGDOTSH in +case $PERL_CONFIG_SH in '') if test -f config.sh; then TOP=.; elif test -f ../config.sh; then TOP=..; diff --git a/makedir.SH b/makedir.SH index d1650e789f..19a6ad61b6 100755 --- a/makedir.SH +++ b/makedir.SH @@ -1,4 +1,4 @@ -case $CONFIGDOTSH in +case $PERL_CONFIG_SH in '') if test ! -f config.sh; then ln ../config.sh . || \ diff --git a/myconfig.SH b/myconfig.SH index e80dfb5b5f..59a173d0d0 100644 --- a/myconfig.SH +++ b/myconfig.SH @@ -1,4 +1,4 @@ -case $CONFIGDOTSH in +case $PERL_CONFIG_SH in '') if test -f config.sh; then TOP=.; elif test -f ../config.sh; then TOP=..; diff --git a/patchlevel.h b/patchlevel.h index 49c96184f8..6b5ddeae7a 100644 --- a/patchlevel.h +++ b/patchlevel.h @@ -70,7 +70,7 @@ #if !defined(PERL_PATCHLEVEL_H_IMPLICIT) && !defined(LOCAL_PATCH_COUNT) static char *local_patches[] = { NULL - ,"DEVEL10104" + ,"DEVEL10132" ,NULL }; @@ -2287,9 +2287,22 @@ Perl_moreswitches(pTHX_ char *s) s++; return s; case 'v': +#if !defined(DGUX) PerlIO_printf(PerlIO_stdout(), Perl_form(aTHX_ "\nThis is perl, v%"VDf" built for %s", PL_patchlevel, ARCHNAME)); +#else /* DGUX */ +/* Adjust verbose output as in the perl that ships with the DG/UX OS from EMC */ + PerlIO_printf(PerlIO_stdout(), + Perl_form(aTHX_ "\nThis is perl, version %vd\n", PL_patchlevel)); + PerlIO_printf(PerlIO_stdout(), + Perl_form(aTHX_ " built under %s at %s %s\n", + OSNAME, __DATE__, __TIME__)); + PerlIO_printf(PerlIO_stdout(), + Perl_form(aTHX_ " OS Specific Release: %s\n", + OSVERS)); +#endif /* !DGUX */ + #if defined(LOCAL_PATCH_COUNT) if (LOCAL_PATCH_COUNT > 0) PerlIO_printf(PerlIO_stdout(), diff --git a/pod/buildtoc.PL b/pod/buildtoc.PL index 26be6e854b..6c43035889 100644 --- a/pod/buildtoc.PL +++ b/pod/buildtoc.PL @@ -148,6 +148,7 @@ if (-d "pod") { perlhist perldelta + perl572delta perl571delta perl570delta perl56delta @@ -158,6 +159,7 @@ if (-d "pod") { perlamiga perlbs2000 perlcygwin + perldgux perldos perlepoc perlhpux @@ -178,6 +180,7 @@ if (-d "pod") { perlamiga perlbs2000 perlcygwin + perldgux perldos perlepoc perlhpux diff --git a/pod/perl.pod b/pod/perl.pod index a1bc034142..c047d347d5 100644 --- a/pod/perl.pod +++ b/pod/perl.pod @@ -102,6 +102,7 @@ For ease of access, the Perl manual has been split up into several sections: perlhist Perl history records perldelta Perl changes since previous version + perl572delta Perl changes in version 5.7.2 perl571delta Perl changes in version 5.7.1 perl570delta Perl changes in version 5.7.0 perl56delta Perl changes in version 5.6 @@ -112,6 +113,7 @@ For ease of access, the Perl manual has been split up into several sections: perlamiga Perl notes for Amiga perlbs2000 Perl notes for POSIX-BC BS2000 perlcygwin Perl notes for Cygwin + perldgux Perl notes for DG/UX perldos Perl notes for DOS perlepoc Perl notes for EPOC perlhpux Perl notes for HP-UX diff --git a/pod/perl572delta.pod b/pod/perl572delta.pod index bce73285c8..fe1eed0d4f 100644 --- a/pod/perl572delta.pod +++ b/pod/perl572delta.pod @@ -27,6 +27,15 @@ for more information. =head1 Incompatible Changes +=head1 Future Deprecations + +The current user-visible implementation of pseudo-hashes (the weird +use of the first array element) is deprecated starting from Perl 5.8.0 +and will be removed in Perl 5.10.0, and the feature will be implemented +differently. Not only is the current interface rather ugly, but the +current implementation slows down normal array and hash use quite +noticeably. The 'fields' pragma interface will remain available. + =head1 Core Enhancements =head1 Modules and Pragmata diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 7b69b63e89..19ac8f31b4 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -567,10 +567,10 @@ C<-i.bak>, or some such. characters and Perl was unable to create a unique filename during inplace editing with the B<-i> switch. The file was ignored. -=item Can't do {n,m} with n > m before << HERE in regex m/%s/ +=item Can't do {n,m} with n > m in regex; marked by <-- HERE in m/%s/ (F) Minima must be less than or equal to maxima. If you really want your -regexp to match something 0 times, just put {0}. The << HERE shows in the +regexp to match something 0 times, just put {0}. The <-- HERE shows in the regular expression about where the problem was discovered. See L<perlre>. =item Can't do setegid! @@ -1363,12 +1363,13 @@ Check the #! line, or manually feed your script into Perl yourself. END subroutine. Processing of the remainder of the queue of such routines has been prematurely ended. -=item false [] range "%s" in regexp +=item False [] range "%s" in regex; marked by <-- HERE in m/%s/ (W regexp) A character class range must start and end at a literal -character, not another character class like C<\d> or C<[:alpha:]>. The -"-" in your false range is interpreted as a literal "-". Consider -quoting the "-", "\-". See L<perlre>. +character, not another character class like C<\d> or C<[:alpha:]>. The "-" +in your false range is interpreted as a literal "-". Consider quoting the +"-", "\-". The <-- HERE shows in the regular expression about where the +problem was discovered. See L<perlre>. =item Fatal VMS error at %s, line %d @@ -1417,11 +1418,11 @@ some time before now. Check your control flow. flock() operates on filehandles. Are you attempting to call flock() on a dirhandle by the same name? -=item Quantifier follows nothing before << HERE in regex m/%s/ +=item Quantifier follows nothing in regex; marked by <-- HERE in m/%s/ (F) You started a regular expression with a quantifier. Backslash it if you -meant it literally. The << HERE shows in the regular expression about where the -problem was discovered. See L<perlre>. +meant it literally. The <-- HERE shows in the regular expression about +where the problem was discovered. See L<perlre>. =item Format not terminated @@ -1667,10 +1668,10 @@ transparently promotes all numbers to a floating point representation internally--subject to loss of precision errors in subsequent operations. -=item Internal disaster before << HERE in regex m/%s/ +=item Internal disaster in regex; marked by <-- HERE in m/%s/ (P) Something went badly wrong in the regular expression parser. -The << HERE shows in the regular expression about where the problem was +The <-- HERE shows in the regular expression about where the problem was discovered. @@ -1683,10 +1684,11 @@ L<perlvms/"exec LIST">). Somehow, this count has become scrambled, so Perl is making a guess and treating this C<exec> as a request to terminate the Perl script and execute the specified command. -=item Internal urp before << HERE in regex m/%s/ +=item Internal urp in regex; marked by <-- HERE in m/%s/ -(P) Something went badly awry in the regular expression parser. The <<<HERE -shows in the regular expression about where the problem was discovered. +(P) Something went badly awry in the regular expression parser. The +<-- HERE shows in the regular expression about where the problem was +discovered. =item %s (...) interpreted as function @@ -1711,14 +1713,15 @@ recognized by Perl or by a user-supplied handler. See L<attributes>. (W printf) Perl does not understand the given format conversion. See L<perlfunc/sprintf>. -=item invalid [] range "%s" in regexp +=item Invalid [] range "%s" in regex; marked by <-- HERE in m/%s/ (F) The range specified in a character class had a minimum character -greater than the maximum character. One possibility is that you -forgot the C<{}> from your ending C<\x{}> - C<\x> without the curly -braces can go only up to C<ff>. See L<perlre>. +greater than the maximum character. One possibility is that you forgot the +C<{}> from your ending C<\x{}> - C<\x> without the curly braces can go only +up to C<ff>. The <-- HERE shows in the regular expression about where the +problem was discovered. See L<perlre>. -=item invalid [] range "%s" in transliteration operator +=item Invalid [] range "%s" in transliteration operator (F) The range specified in the tr/// or y/// operator had a minimum character greater than the maximum character. See L<perlop>. @@ -1813,11 +1816,11 @@ instead on the filehandle.) values cannot be returned in subroutines used in lvalue context. See L<perlsub/"Lvalue subroutines">. -=item Lookbehind longer than %d not implemented before << HERE %s +=item Lookbehind longer than %d not implemented in regex; marked by <-- HERE in m/%s/ (F) There is currently a limit on the length of string which lookbehind can -handle. This restriction may be eased in a future release. The << HERE shows in -the regular expression about where the problem was discovered. +handle. This restriction may be eased in a future release. The <-- HERE +shows in the regular expression about where the problem was discovered. =item Malformed PERLLIB_PREFIX @@ -1843,11 +1846,12 @@ Perl detected something that didn't comply with UTF-8 encoding rules. Perl thought it was reading UTF-16 encoded character data but while doing it Perl met a malformed Unicode surrogate. -=item %s matches null string many times +=item %s matches null string many times in regex; marked by <-- HERE in m/%s/ (W regexp) The pattern you've specified would be an infinite loop if the -regular expression engine didn't specifically check for that. See -L<perlre>. +regular expression engine didn't specifically check for that. The <-- HERE +shows in the regular expression about where the problem was discovered. +See L<perlre>. =item % may only be used in unpack @@ -2008,16 +2012,15 @@ provided for this purpose. (F) You tried to do a read/write/send/recv operation with a buffer length that is less than 0. This is difficult to imagine. -=item Nested quantifiers before << HERE in regex m/%s/ +=item Nested quantifiers in regex; marked by <-- HERE in m/%s/ (F) You can't quantify a quantifier without intervening parentheses. So -things like ** or +* or ?* are illegal. The << HERE shows in the regular +things like ** or +* or ?* are illegal. The <-- HERE shows in the regular expression about where the problem was discovered. -Note, however, that the minimal matching quantifiers, C<*?>, C<+?>, and +Note that the minimal matching quantifiers, C<*?>, C<+?>, and C<??> appear to be nested quantifiers, but aren't. See L<perlre>. - =item %s never introduced (S internal) The symbol in question was declared but somehow went out of @@ -2658,34 +2661,38 @@ value of the environment variable PERLIO. process which isn't a subprocess of the current process. While this is fine from VMS' perspective, it's probably not what you intended. -=item POSIX syntax [%s] belongs inside character classes +=item POSIX syntax [%s] belongs inside character classes in regex; marked by <-- HERE in m/%s/ (W unsafe) The character class constructs [: :], [= =], and [. .] go -I<inside> character classes, the [] are part of the construct, for -example: /[012[:alpha:]345]/. Note that [= =] and [. .] are not -currently implemented; they are simply placeholders for future -extensions and will cause fatal errors. +I<inside> character classes, the [] are part of the construct, for example: +/[012[:alpha:]345]/. Note that [= =] and [. .] are not currently +implemented; they are simply placeholders for future extensions and will +cause fatal errors. The <-- HERE shows in the regular expression about +where the problem was discovered. See L<perlre>. -=item POSIX syntax [. .] is reserved for future extensions +=item POSIX syntax [. .] is reserved for future extensions in regex; marked by <-- HERE in m/%s/ (F regexp) Within regular expression character classes ([]) the syntax -beginning with "[." and ending with ".]" is reserved for future -extensions. If you need to represent those character sequences inside -a regular expression character class, just quote the square brackets -with the backslash: "\[." and ".\]". +beginning with "[." and ending with ".]" is reserved for future extensions. +If you need to represent those character sequences inside a regular +expression character class, just quote the square brackets with the +backslash: "\[." and ".\]". The <-- HERE shows in the regular expression +about where the problem was discovered. See L<perlre>. -=item POSIX syntax [= =] is reserved for future extensions +=item POSIX syntax [= =] is reserved for future extensions in regex; marked by <-- HERE in m/%s/ -(F) Within regular expression character classes ([]) the syntax -beginning with "[=" and ending with "=]" is reserved for future -extensions. If you need to represent those character sequences inside -a regular expression character class, just quote the square brackets -with the backslash: "\[=" and "=\]". +(F) Within regular expression character classes ([]) the syntax beginning +with "[=" and ending with "=]" is reserved for future extensions. If you +need to represent those character sequences inside a regular expression +character class, just quote the square brackets with the backslash: "\[=" +and "=\]". The <-- HERE shows in the regular expression about where the +problem was discovered. See L<perlre>. -=item POSIX class [:%s:] unknown +=item POSIX class [:%s:] unknown in regex; marked by <-- HERE in m/%s/ -(F) The class in the character class [: :] syntax is unknown. See -L<perlre>. +(F) The class in the character class [: :] syntax is unknown. The <-- HERE +shows in the regular expression about where the problem was discovered. +See L<perlre>. =item POSIX getpgrp can't take an argument @@ -2809,13 +2816,13 @@ in L<perlos2>. (S unsafe) The subroutine being declared or defined had previously been declared or defined with a different function prototype. -=item Quantifier in {,} bigger than %d before << HERE in regex m/%s/ +=item Quantifier in {,} bigger than %d in regex; marked by <-- HERE in m/%s/ (F) There is currently a limit to the size of the min and max values of the -{min,max} construct. The << HERE shows in the regular expression about where +{min,max} construct. The <-- HERE shows in the regular expression about where the problem was discovered. See L<perlre>. -=item Quantifier unexpected on zero-length expression before << HERE %s +=item Quantifier unexpected on zero-length expression; marked by <-- HERE in m/%s/ (W regexp) You applied a regular expression quantifier in a place where it makes no sense, such as on a zero-width assertion. Try putting the @@ -2823,6 +2830,9 @@ quantifier inside the assertion instead. For example, the way to match "abc" provided that it is followed by three repetitions of "xyz" is C</abc(?=(?:xyz){3})/>, not C</abc(?=xyz){3}/>. +The <-- HERE shows in the regular expression about where the problem was +discovered. + =item Range iterator outside integer range (F) One (or both) of the numeric arguments to the range operator ".." @@ -2883,14 +2893,14 @@ Doing so has no effect. (W internal) The internal sv_replace() function was handed a new SV with a reference count of other than 1. -=item Reference to nonexistent group before << HERE in regex m/%s/ +=item Reference to nonexistent group in regex; marked by <-- HERE in m/%s/ (F) You used something like C<\7> in your regular expression, but there are not at least seven sets of capturing parentheses in the expression. If you wanted to have the character with value 7 inserted into the regular expression, prepend a zero to make the number at least two digits: C<\07> -The << HERE shows in the regular expression about where the problem was +The <-- HERE shows in the regular expression about where the problem was discovered. =item regexp memory corruption @@ -3007,34 +3017,37 @@ scalar that had previously been marked as free. (W closed) The socket you're sending to got itself closed sometime before now. Check your control flow. -=item Sequence (? incomplete before << HERE mark in regex m/%s/ +=item Sequence (? incomplete in regex; marked by <-- HERE in m/%s/ -(F) A regular expression ended with an incomplete extension (?. The <<<HERE +(F) A regular expression ended with an incomplete extension (?. The <-- HERE shows in the regular expression about where the problem was discovered. See L<perlre>. -=item Sequence (?{...}) not terminated or not {}-balanced in %s +=item Sequence (?{...}) not terminated or not {}-balanced in regex; marked by <-- HERE in m/%s/ (F) If the contents of a (?{...}) clause contains braces, they must balance -for Perl to properly detect the end of the clause. See L<perlre>. +for Perl to properly detect the end of the clause. The <-- HERE shows in +the regular expression about where the problem was discovered. See +L<perlre>. -=item Sequence (?%s...) not implemented before << HERE mark in %s +=item Sequence (?%s...) not implemented in regex; marked by <-- HERE in m/%s/ (F) A proposed regular expression extension has the character reserved but -has not yet been written. The << HERE shows in the regular expression about +has not yet been written. The <-- HERE shows in the regular expression about where the problem was discovered. See L<perlre>. -=item Sequence (?%s...) not recognized before << HERE mark in %s +=item Sequence (?%s...) not recognized in regex; marked by <-- HERE in m/%s/ -(F) You used a regular expression extension that doesn't make sense. -The << HERE shows in the regular expression about -where the problem was discovered. -See L<perlre>. +(F) You used a regular expression extension that doesn't make sense. The +<-- HERE shows in the regular expression about where the problem was +discovered. See L<perlre>. -=item Sequence (?#... not terminated in regex m/%s/ +=item Sequence (?#... not terminated in regex; marked by <-- HERE in m/%s/ (F) A regular expression comment must be terminated by a closing -parenthesis. Embedded parentheses aren't allowed. See L<perlre>. +parenthesis. Embedded parentheses aren't allowed. The <-- HERE shows in +the regular expression about where the problem was discovered. See +L<perlre>. =item 500 Server error @@ -3215,7 +3228,7 @@ assignment or as a subroutine argument for example). (F) Your Perl was compiled with B<-D>SETUID_SCRIPTS_ARE_SECURE_NOW, but a version of the setuid emulator somehow got run anyway. -=item Switch (?(condition)... contains too many branches before << HE%s +=item Switch (?(condition)... contains too many branches in regex; marked by <-- HERE in m/%s/ (F) A (?(condition)if-clause|else-clause) construct can have at most two branches (the if-clause and the else-clause). If you want one or both to @@ -3224,13 +3237,13 @@ clustering parentheses: (?(condition)(?:this|that|other)|else-clause) -The << HERE shows in the regular expression about where the problem was +The <-- HERE shows in the regular expression about where the problem was discovered. See L<perlre>. -=item Switch condition not recognized before << HERE in regex m/%s/ +=item Switch condition not recognized in regex; marked by <-- HERE in m/%s/ (F) If the argument to the (?(...)if-clause|else-clause) construct is a -number, it can be only a number. The << HERE shows in the regular expression +number, it can be only a number. The <-- HERE shows in the regular expression about where the problem was discovered. See L<perlre>. =item switching effective %s is not implemented @@ -3394,7 +3407,7 @@ Check the #! line, or manually feed your script into Perl yourself. =item Too many ('s -=item trailing \ in regexp +=item Trailing \ in regex m/%s/ (F) The regular expression ends with an unbackslashed backslash. Backslash it. See L<perlre>. @@ -3508,15 +3521,16 @@ representative, who probably put it there in the first place. (F) There are no byte-swapping functions for a machine with this byte order. -=item Unknown switch condition (?(%.2s before << HERE in regex m/%s/ +=item Unknown switch condition (?(%.2s in regex; marked by <-- HERE in m/%s/ -(F) The condition of a (?(condition)if-clause|else-clause) construct is not -known. The condition may be lookaround (the condition is true if the -lookaround is true), a (?{...}) construct (the condition is true if the -code evaluates to a true value), or a number (the condition is true if the -set of capturing parentheses named by the number is defined). +(F) The condition part of a (?(condition)if-clause|else-clause) construct +is not known. The condition may be lookahead or lookbehind (the condition +is true if the lookahead or lookbehind is true), a (?{...}) construct (the +condition is true if the code evaluates to a true value), or a number (the +condition is true if the set of capturing parentheses named by the number +matched). -The << HERE shows in the regular expression about where the problem was +The <-- HERE shows in the regular expression about where the problem was discovered. See L<perlre>. =item Unknown open() mode '%s' @@ -3532,18 +3546,19 @@ iterating over it, and someone else stuck a message in the stream of data Perl expected. Someone's very confused, or perhaps trying to subvert Perl's population of %ENV for nefarious purposes. -=item unmatched [ before << HERE mark in regex m/%s/ +=item unmatched [ in regex; marked by <-- HERE in m/%s/ (F) The brackets around a character class must match. If you wish to include a closing bracket in a character class, backslash it or put it -first. See L<perlre>. The << HERE shows in the regular expression about -where the escape was discovered. +first. The <-- HERE shows in the regular expression about where the problem +was discovered. See L<perlre>. -=item unmatched ( in regexp before << HERE mark in regex m/%s/ +=item unmatched ( in regex; marked by <-- HERE in m/%s/ (F) Unbackslashed parentheses must always be balanced in regular -expressions. If you're a vi user, the % key is valuable for finding the -matching parenthesis. See L<perlre>. +expressions. If you're a vi user, the % key is valuable for finding the +matching parenthesis. The <-- HERE shows in the regular expression about +where the problem was discovered. See L<perlre>. =item Unmatched right %s bracket @@ -3571,14 +3586,13 @@ script, a binary program, or a directory as a Perl program. recognized by Perl inside character classes. The character was understood literally. -=item Unrecognized escape \\%c passed through before << HERE in m/%s/ +=item Unrecognized escape \\%c passed through in regex; marked by <-- HERE in m/%s/ (W regexp) You used a backslash-character combination which is not recognized by Perl. This combination appears in an interpolated variable or a C<'>-delimited regular expression. The character was understood -literally. The << HERE shows in the regular expression about where the escape -was discovered. - +literally. The <-- HERE shows in the regular expression about where the +escape was discovered. =item Unrecognized escape \\%c passed through @@ -3905,11 +3919,11 @@ anonymous, using the C<sub {}> syntax. When inner anonymous subs that reference variables in outer subroutines are called or referenced, they are automatically rebound to the current values of such variables. -=item Variable length lookbehind not implemented before << HERE in %s +=item Variable length lookbehind not implemented in regex; marked by <-- HERE in m/%s/ (F) Lookbehind is allowed only for subexpressions whose length is fixed and -known at compile time. The << HERE shows in the regular expression about where -the problem was discovered. +known at compile time. The <-- HERE shows in the regular expression about +where the problem was discovered. See L<perlre>. =item Version number must be a constant number diff --git a/pod/perlref.pod b/pod/perlref.pod index 2727e95ae9..a62276b782 100644 --- a/pod/perlref.pod +++ b/pod/perlref.pod @@ -538,6 +538,13 @@ string is effectively quoted. B<WARNING>: This section describes an experimental feature. Details may change without notice in future versions. +B<NOTE>: The current user-visible implementation of pseudo-hashes +(the weird use of the first array element) is deprecated starting from +Perl 5.8.0 and will be removed in Perl 5.10.0, and the feature will be +implemented differently. Not only is the current interface rather ugly, +but the current implementation slows down normal array and hash use quite +noticeably. The 'fields' pragma interface will remain available. + Beginning with release 5.005 of Perl, you may use an array reference in some contexts that would normally require a hash reference. This allows you to access array elements using symbolic names, as if they diff --git a/pod/perltoc.pod b/pod/perltoc.pod index ccc4480079..a75f39ea1f 100644 --- a/pod/perltoc.pod +++ b/pod/perltoc.pod @@ -362,20 +362,21 @@ mkdir FILENAME,MASK, mkdir FILENAME, msgctl ID,CMD,ARG, msgget KEY,FLAGS, msgrcv ID,VAR,SIZE,TYPE,FLAGS, msgsnd ID,MSG,FLAGS, my EXPR, my EXPR : ATTRIBUTES, next LABEL, next, no Module LIST, oct EXPR, oct, open FILEHANDLE,MODE,LIST, open FILEHANDLE,EXPR, open FILEHANDLE, opendir -DIRHANDLE,EXPR, ord EXPR, ord, our EXPR, pack TEMPLATE,LIST, package -NAMESPACE, package, pipe READHANDLE,WRITEHANDLE, pop ARRAY, pop, pos -SCALAR, pos, print FILEHANDLE LIST, print LIST, print, printf FILEHANDLE -FORMAT, LIST, printf FORMAT, LIST, prototype FUNCTION, push ARRAY,LIST, -q/STRING/, qq/STRING/, qr/STRING/, qx/STRING/, qw/STRING/, quotemeta EXPR, -quotemeta, rand EXPR, rand, read FILEHANDLE,SCALAR,LENGTH,OFFSET, read -FILEHANDLE,SCALAR,LENGTH, readdir DIRHANDLE, readline EXPR, readlink EXPR, -readlink, readpipe EXPR, recv SOCKET,SCALAR,LENGTH,FLAGS, redo LABEL, redo, -ref EXPR, ref, rename OLDNAME,NEWNAME, require VERSION, require EXPR, -require, reset EXPR, reset, return EXPR, return, reverse LIST, rewinddir -DIRHANDLE, rindex STR,SUBSTR,POSITION, rindex STR,SUBSTR, rmdir FILENAME, -rmdir, s///, scalar EXPR, seek FILEHANDLE,POSITION,WHENCE, seekdir -DIRHANDLE,POS, select FILEHANDLE, select, select RBITS,WBITS,EBITS,TIMEOUT, -semctl ID,SEMNUM,CMD,ARG, semget KEY,NSEMS,FLAGS, semop KEY,OPSTRING, send +DIRHANDLE,EXPR, ord EXPR, ord, our EXPR, our EXPR : ATTRIBUTES, pack +TEMPLATE,LIST, package NAMESPACE, package, pipe READHANDLE,WRITEHANDLE, pop +ARRAY, pop, pos SCALAR, pos, print FILEHANDLE LIST, print LIST, print, +printf FILEHANDLE FORMAT, LIST, printf FORMAT, LIST, prototype FUNCTION, +push ARRAY,LIST, q/STRING/, qq/STRING/, qr/STRING/, qx/STRING/, qw/STRING/, +quotemeta EXPR, quotemeta, rand EXPR, rand, read +FILEHANDLE,SCALAR,LENGTH,OFFSET, read FILEHANDLE,SCALAR,LENGTH, readdir +DIRHANDLE, readline EXPR, readlink EXPR, readlink, readpipe EXPR, recv +SOCKET,SCALAR,LENGTH,FLAGS, redo LABEL, redo, ref EXPR, ref, rename +OLDNAME,NEWNAME, require VERSION, require EXPR, require, reset EXPR, reset, +return EXPR, return, reverse LIST, rewinddir DIRHANDLE, rindex +STR,SUBSTR,POSITION, rindex STR,SUBSTR, rmdir FILENAME, rmdir, s///, scalar +EXPR, seek FILEHANDLE,POSITION,WHENCE, seekdir DIRHANDLE,POS, select +FILEHANDLE, select, select RBITS,WBITS,EBITS,TIMEOUT, semctl +ID,SEMNUM,CMD,ARG, semget KEY,NSEMS,FLAGS, semop KEY,OPSTRING, send SOCKET,MSG,FLAGS,TO, send SOCKET,MSG,FLAGS, setpgrp PID,PGRP, setpriority WHICH,WHO,PRIORITY, setsockopt SOCKET,LEVEL,OPTNAME,OPTVAL, shift ARRAY, shift, shmctl ID,CMD,ARG, shmget KEY,SIZE,FLAGS, shmread ID,VAR,POS,SIZE, @@ -2459,8 +2460,8 @@ References, Tutorials, Task-Oriented, Special Topics =item Is there an IDE or Windows Perl Editor? -CodeMagicCD, Komodo, The Object System, PerlBuilder, Perl code magic, -visiPerl+, GNU Emacs, MicroEMACS, XEmacs, Elvis, Vile, Vim, Codewright, +Komodo, The Object System, Open Perl IDE, PerlBuilder, visiPerl+, +CodeMagicCD, GNU Emacs, MicroEMACS, XEmacs, Elvis, Vile, Vim, Codewright, MultiEdit, SlickEdit, Bash, Ksh, Tcsh, Zsh, BBEdit and BBEdit Lite, Alpha =item Where can I get Perl macros for vi? @@ -4053,301 +4054,336 @@ PerlIO_apply_layers(f,mode,layers), PerlIO_binmode(f,ptype,imode,layers), =item DESCRIPTION -=item Infrastructure +=item To do during 5.6.x =over 4 -=item Mailing list archives +=item Support for I/O disciplines -=item Bug tracking system +=item Eliminate need for "use utf8"; -=item Regression Tests +=item Autoload byte.pm -Coverage, Regression, __DIE__, suidperl, The 25% slowdown from perl4 to -perl5 +=item Make "\u{XXXX}" et al work -=back +=item Overloadable regex assertions -=item Configure +=item Unicode collation and normalization -=over 4 +=item Unicode case mappings -=item Install HTML +=item Unicode regular expression character classes -=back +=item use Thread for iThreads -=item Perl Language +=item Work out exit/die semantics for threads -=over 4 +=item Typed lexicals for compiler -=item 64-bit Perl +=item Compiler workarounds for Win32 -=item Prototypes +=item AUTOLOADing in the compiler -Named prototypes, Indirect objects, Method calls, Context, Scoped subs +=item Fixing comppadlist when compiling -=back +=item Cleaning up exported namespace -=item Perl Internals +=item Complete signal handling -=over 4 +=item Out-of-source builds -=item magic_setisa +=item POSIX realtime support -=item Garbage Collection +=item UNIX98 support -=item Reliable signals +=item IPv6 Support -Alternate runops() for signal despatch, Figure out how to die() in delayed -sighandler, Add tests for Thread::Signal, Automatic tests against CPAN +=item Long double conversion -=item Interpolated regex performance bugs +=item Locales -=item Memory leaks from failed eval/regcomp +=item Thread-safe regexes -=item Make XS easier to use +=item Arithmetic on non-Arabic numerals + +=item POSIX Unicode character classes + +=item Factoring out common suffices/prefices in regexps (trie optimization) + +=item Security audit shipped utilities + +=item Custom opcodes + +=item spawnvp() on Win32 + +=item DLL Versioning + +=item Introduce @( and @) + +=item Floating point handling + +=item IV/UV preservation + +=item Replace pod2html with something using Pod::Parser + +=item Automate module testing on CPAN + +=item sendmsg and recvmsg + +=item Rewrite perlre documentation -=item Make embedded Perl easier to use +=item Convert example code to IO::Handle filehandles -=item Namespace cleanup +=item Document Win32 choices -=item MULTIPLICITY +=item Check new modules -=item MacPerl +=item Make roffitall find pods and libs itself =back -=item Documentation +=item To do at some point =over 4 -=item A clear division into tutorial and reference +=item Remove regular expression recursion -=item Remove the artificial distinction between operators and functions +=item Memory leaks after failed eval -=item More tutorials +=item pack "(stuff)*" -Regular expressions, I/O, pack/unpack, Debugging +=item bitfields in pack -=item Include a search tool +=item Cross compilation -=item Include a locate tool +=item Perl preprocessor / macros -=item Separate function manpages by default +=item Perl lexer in Perl -=item Users can't find the manpages +=item Using POSIX calls internally -=item Install ALL Documentation +=item -i rename file when changed -=item Outstanding issues to be documented +=item All ARGV input should act like E<lt>E<gt> -=item Adapt www.linuxhq.com for Perl +=item Support for rerunning debugger -=item Replace man with a perl program +=item my sub foo { } -=item Unicode tutorial +=item One-pass global destruction -=back +=item Rewrite regexp parser -=item Modules +=item Cache recently used regexps -=over 4 +=item Re-entrant functions -=item Update the POSIX extension to conform with the POSIX 1003.1 Edition 2 +=item Cross-compilation support -=item Module versions +=item Bit-shifting bitvectors -=item New modules +=item debugger pragma -=item Profiler +=item use less pragma -=item Tie Modules +=item switch structures -VecArray, SubstrArray, VirtualArray, ShiftSplice +=item Cache eval tree -=item Procedural options +=item rcatmaybe -=item RPC +=item Shrink opcode tables -=item y2k localtime/gmtime +=item Optimize away @_ -=item Export File::Find variables +=item Prototypes versus indirect objects -=item Ioctl +=item Install HMTL -=item Debugger attach/detach +=item Prototype method calls -=item Regular Expression debugger +=item Return context prototype declarations -=item Alternative RE Syntax +=item magic_setisa -=item Bundled modules +=item Garbage collection -=item Expect +=item IO tutorial -=item GUI::Native +=item pack/unpack tutorial -=item Update semibroken auxiliary tools; h2ph, a2p, etc. +=item Rewrite perldoc -=item pod2html +=item Install .3p man pages + +=item Unicode tutorial -=item Podchecker +=item Update POSIX.pm for 1003.1-2 +=head2 Retargetable installation + +=item POSIX emulation on non-POSIX systems + +=item Rename Win32 headers + +=item Finish off lvalue functions + +=item Update sprintf documentation + +=item Use fchown/fchmod internally =back -=item Tom's Wishes +=item Vague ideas =over 4 -=item Webperl +=item ref() in list context -=item Mobile agents +=item Make tr/// return histogram -=item POSIX on non-POSIX +=item Compile to real threaded code +=head2 Structured types +=head2 Modifiable $1 et al. -=item Portable installations +=item Procedural interfaces for IO::*, etc. -=back +=item RPC modules -=item Win32 Stuff +=item Attach/detach debugger from running program -=over 4 +=item Alternative RE syntax module -=item Rename new headers to be consistent with the rest +=item GUI::Native -=item Sort out the spawnvp() mess +=item foreach(reverse ...) -=item Work out DLL versioning +=item Constant function cache -=item Style-check +=item Approximate regular expression matching =back -=item Would be nice to have +=item Ongoing -C<pack "(stuff)*">, Contiguous bitfields in pack/unpack, lexperl, Bundled -perl preprocessor, Use posix calls internally where possible, format -BOTTOM, -i rename file only when successfully changed, All ARGV input -should act like <>, report HANDLE [formats], support in perlmain to rerun -debugger, lvalue functions +=over 4 -=item Possible pragmas +=item Update guts documentation -=over 4 +=item Add more tests -=item 'less' +=item Update auxiliary tools =back -=item Optimizations +=item Recently done things =over 4 -=item constant function cache +=item Safe signal handling -=item foreach(reverse...) +=item Tie Modules -=item Cache eval tree +=item gettimeofday -=item rcatmaybe +=item setitimer and getimiter -=item Shrink opcode tables +=item Testing __DIE__ hook -=item Cache hash value +=item CPP equivalent in Perl -=item Optimize away @_ where possible +=item Explicit switch statements -=item Optimize sort by { $a <=> $b } +=item autocroak -=item Rewrite regexp parser for better integrated optimization +=item UTF/EBCDIC -=back +=item UTF Regexes -=item Vague possibilities +=item perlcc to produce executable -ref function in list context, make tr/// return histogram in list context?, -Loop control on do{} et al, Explicit switch statements, compile to real -threaded code, structured types, Modifiable $1 et al +=item END blocks saved in compiled output -=item To Do Or Not To Do +=item Secure temporary file module -=over 4 +=item Integrate Time::HiRes -=item Making my() work on "package" variables +=item Turn Cwd into XS -=item "or" testing defined not truth +=item Mmap for input -=item "dynamic" lexicals +=item Byte to/from UTF8 and UTF8 to/from local conversion -=item "class"-based, rather than package-based "lexicals" +=item Add sockatmark support -=back +=item Mailing list archives -=item Threading +=item Bug tracking -=over 4 +=item Integrate MacPerl -=item Modules +=item Web "nerve center" for Perl -=item Testing +=item Regular expression tutorial -=item $AUTOLOAD +=item Debugging Tutorial -=item exit/die +=item Integrate new modules -=item External threads +=item Integrate profiler -=item Thread::Pool +=item Y2K error detection -=item thread-safety +=item Regular expression debugger -=item Per-thread GVs +=item POD checker -=back +=item "Dynamic" lexicals -=item Compiler +=item Cache precompiled modules -=over 4 +=back -=item Optimization +=item Deprecated Wishes -=item Byteperl +=over 4 -=item Precompiled modules +=item Loop control on do{} -=item Executables +=item Lexically scoped typeglobs -=item Typed lexicals +=item format BOTTOM +=head2 report HANDLE -=item Win32 +=item Generalised want()/caller()) +=head2 Named prototypes -=item END blocks +=item Built-in globbing -=item _AUTOLOAD +=item Regression tests for suidperl -=item comppadlist +=item Cached hash values -=item Cached compilation +=item Add compression modules -=back +=item Reorganise documentation into tutorials/references -=item Recently Finished Tasks +=item Remove distinction between functions and operators -=over 4 +=item Make XS easier to use -=item Figure a way out of $^(capital letter) +=item Make embedding easier to use -=item Filenames +=item man for perl -=item Foreign lines +=item my $Package::variable -=item Namespace cleanup +=item "or" tests defined, not truth -=item ISA.pm +=item "class"-based lexicals -=item gettimeofday +=item byteperl -=item autocroak? +=item Lazy evaluation / tail recursion removal =back @@ -4432,7 +4468,8 @@ DEFINES, USE_MULTI = define, #PERL_MALLOC = define, CFG = Debug =item Pixie Profiling --h, -l, -p, -h, -i, -l, -testcoverage, -zero +-h, -l, -p[rodecures], -h[eavy], -i[nvocations], -l[ines], -testcoverage, +-z[ero] =item CONCLUSION @@ -4488,6 +4525,104 @@ I<The Road goes ever on and on, down from the door where it began.> =back +=head2 perl572delta, perl571delta - what's new for perl v5.7.2 + +=over 4 + +=item DESCRIPTION + +=item Security Vulnerability Closed + +=item Incompatible Changes + +=item Core Enhancements + +=item Modules and Pragmata + +=over 4 + +=item New Modules + +=item Updated And Improved Modules and Pragmata + +=back + +=item Performance Enhancements + +=item Utility Changes + +=item New Documentation + +=item Installation and Configuration Improvements + +=over 4 + +=item New Or Improved Platforms + +=item Generic Improvements + +=back + +=item Selected Bug Fixes + +=over 4 + +=item Platform Specific Changes and Fixes + +=back + +=item New or Changed Diagnostics + +=item Changed Internals + +=over 4 + +=item Regex pre-/post-compilation items matched up + +=back + +=item New Tests + +=item Known Problems + +=over 4 + +=item AIX vac 5.0.0.0 May Produce Buggy Code For Perl + +=item lib/ftmp-security tests warn 'system possibly insecure' + +=item lib/io_multihomed Fails In LP64-Configured HP-UX + +=item Test lib/posix Subtest 9 Fails In LP64-Configured HP-UX + +=item lib/b test 19 + +=item Linux With Sfio Fails op/misc Test 48 + +=item sigaction test 13 in VMS + +=item sprintf tests 129 and 130 + +=item Failure of Thread tests + +=item Localising a Tied Variable Leaks Memory + +=item Self-tying of Arrays and Hashes Is Forbidden + +=item Building Extensions Can Fail Because Of Largefiles + +=item The Compiler Suite Is Still Experimental + +=back + +=item Reporting Bugs + +=item SEE ALSO + +=item HISTORY + +=back + =head2 perl571delta - what's new for perl v5.7.1 =over 4 @@ -4500,6 +4635,16 @@ I<The Road goes ever on and on, down from the door where it began.> =item Core Enhancements +=item AUTOLOAD Is Now Lvaluable + +=over 4 + +=item PerlIO is Now The Default + +=item Signals Are Now Safe + +=back + =item Modules and Pragmata =over 4 @@ -5680,6 +5825,38 @@ Source, Compiled Module Source, Perl Modules/Scripts =back +=head2 perldgux - Perl under DG/UX. + +=over 4 + +=item SYNOPSIS + +=back + +=over 4 + +=item DESCRIPTION + +=item BUILD + +=over 4 + +=item Non-threaded Case + +=item Threaded Case + +=item Testing + +=item Installing the built perl + +=back + +=item AUTHOR + +=item SEE ALSO + +=back + =head2 perlepoc, README.epoc - Perl for EPOC =over 4 @@ -8934,8 +9111,6 @@ reference, e.g.: =item Encoding and IO -=item Encode and PerlIO - =item Encoding How to ... IO with mixed content (faking iso-2020-*), MIME's Content-Length:, UTF-8 @@ -13896,15 +14071,16 @@ TIESCALAR classname, LIST, FETCH this, STORE this, value, DESTROY this =item DESCRIPTION gettimeofday (), usleep ( $useconds ), ualarm ( $useconds [, -$interval_useconds ] ), tv_interval ( $ref_to_gettimeofday [, -$ref_to_later_gettimeofday] ), time (), sleep ( $floating_seconds ), alarm -( $floating_seconds [, $interval_floating_seconds ] ), setitimer ( $which, -$floating_seconds [, $interval_floating_seconds ] ), getitimer ( $which ) +$interval_useconds ] ), tv_interval, time (), sleep ( $floating_seconds ), +alarm ( $floating_seconds [, $interval_floating_seconds ] ), setitimer, +getitimer ( $which ) =item EXAMPLES =item C API +=item CAVEATS + =item AUTHORS =item REVISION diff --git a/pod/perltodo.pod b/pod/perltodo.pod index 39aa37f35c..8c94a29c9a 100644 --- a/pod/perltodo.pod +++ b/pod/perltodo.pod @@ -747,7 +747,7 @@ Suggesting this on P5P B<will> cause a boring and interminable flamewar. =head2 "class"-based lexicals -Use flyweight objects, secure hashes or, dare I say it, pseudohashes instead. +Use flyweight objects, secure hashes or, dare I say it, pseudo-hashes instead. =head2 byteperl @@ -156,6 +156,19 @@ PP(pp_concat) if (TARG != left) sv_setsv(TARG, left); +#if defined(PERL_Y2KWARN) + if ((SvIOK(right) || SvNOK(right)) && ckWARN(WARN_Y2K) && SvOK(TARG)) { + STRLEN n; + char *s = SvPV(TARG,n); + if (n >= 2 && s[n-2] == '1' && s[n-1] == '9' + && (n == 2 || !isDIGIT(s[n-3]))) + { + Perl_warner(aTHX_ WARN_Y2K, "Possible Y2K bug: %s", + "about to append an integer to '19'"); + } + } +#endif + if (TARG == right) { if (left == right) { /* $right = $right . $right; */ @@ -175,19 +188,6 @@ PP(pp_concat) sv_catsv(TARG, right); } -#if defined(PERL_Y2KWARN) - if ((SvIOK(right) || SvNOK(right)) && ckWARN(WARN_Y2K)) { - STRLEN n; - char *s = SvPV(TARG,n); - if (n >= 2 && s[n-2] == '1' && s[n-1] == '9' - && (n == 2 || !isDIGIT(s[n-3]))) - { - Perl_warner(aTHX_ WARN_Y2K, "Possible Y2K bug: %s", - "about to append an integer to '19'"); - } - } -#endif - SETTARG; RETURN; } @@ -1812,9 +1812,17 @@ PP(pp_iter) SvREFCNT_dec(*itersvp); - if ((sv = SvMAGICAL(av) - ? *av_fetch(av, ++cx->blk_loop.iterix, FALSE) - : AvARRAY(av)[++cx->blk_loop.iterix])) + if (SvMAGICAL(av) || AvREIFY(av)) { + SV **svp = av_fetch(av, ++cx->blk_loop.iterix, FALSE); + if (svp) + sv = *svp; + else + sv = Nullsv; + } + else { + sv = AvARRAY(av)[++cx->blk_loop.iterix]; + } + if (sv) SvTEMP_off(sv); else sv = &PL_sv_undef; @@ -250,10 +250,10 @@ static scan_data_t zero_scan_data = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, * of t/op/regmesg.t, the tests in t/op/re_tests, and those in * op/pragma/warn/regcomp. */ -#define MARKER1 "HERE" /* marker as it appears in the description */ -#define MARKER2 " << HERE " /* marker as it appears within the regex */ +#define MARKER1 "<-- HERE" /* marker as it appears in the description */ +#define MARKER2 " <-- HERE " /* marker as it appears within the regex */ -#define REPORT_LOCATION " before " MARKER1 " mark in regex m/%.*s" MARKER2 "%s/" +#define REPORT_LOCATION " in regex; marked by " MARKER1 " in m/%.*s" MARKER2 "%s/" /* * Calls SAVEDESTRUCTOR_X if needed, then calls Perl_croak with the given @@ -116,6 +116,15 @@ #define HOPc(pos,off) ((char*)HOP(pos,off)) #define HOPMAYBEc(pos,off) ((char*)HOPMAYBE(pos,off)) +#define HOPBACK(pos, off) ( \ + (UTF && DO_UTF8(PL_reg_sv)) \ + ? reghopmaybe((U8*)pos, -off) \ + : (pos - off >= PL_bostr) \ + ? (U8*)(pos - off) \ + : (U8*)NULL \ +) +#define HOPBACKc(pos, off) (char*)HOPBACK(pos, off) + #define reghop3_c(pos,off,lim) ((char*)reghop3((U8*)pos, off, (U8*)lim)) #define reghopmaybe3_c(pos,off,lim) ((char*)reghopmaybe3((U8*)pos, off, (U8*)lim)) #define HOP3(pos,off,lim) (DO_UTF8(PL_reg_sv) ? reghop3((U8*)pos, off, (U8*)lim) : (U8*)(pos + off)) @@ -3368,20 +3377,10 @@ S_regmatch(pTHX_ regnode *prog) case UNLESSM: n = 0; if (scan->flags) { - if (UTF) { /* XXXX This is absolutely - broken, we read before - start of string. */ - s = HOPMAYBEc(locinput, -scan->flags); - if (!s) - goto say_yes; - PL_reginput = s; - } - else { - if (locinput < PL_bostr + scan->flags) - goto say_yes; - PL_reginput = locinput - scan->flags; - goto do_ifmatch; - } + s = HOPBACKc(locinput, scan->flags); + if (!s) + goto say_yes; + PL_reginput = s; } else PL_reginput = locinput; @@ -3389,20 +3388,10 @@ S_regmatch(pTHX_ regnode *prog) case IFMATCH: n = 1; if (scan->flags) { - if (UTF) { /* XXXX This is absolutely - broken, we read before - start of string. */ - s = HOPMAYBEc(locinput, -scan->flags); - if (!s || s < PL_bostr) - goto say_no; - PL_reginput = s; - } - else { - if (locinput < PL_bostr + scan->flags) - goto say_no; - PL_reginput = locinput - scan->flags; - goto do_ifmatch; - } + s = HOPBACKc(locinput, scan->flags); + if (!s) + goto say_no; + PL_reginput = s; } else PL_reginput = locinput; diff --git a/t/lib/1_compile.t b/t/lib/1_compile.t index 75801bb945..f1196f42f9 100644 --- a/t/lib/1_compile.t +++ b/t/lib/1_compile.t @@ -158,6 +158,7 @@ FindBin GDBM_File Getopt::Long Getopt::Std +I18N:Collate IO::Dir IO::File IO::Handle diff --git a/t/lib/glob-basic.t b/t/lib/glob-basic.t index 6c12c2624c..fe7f9ef32f 100755 --- a/t/lib/glob-basic.t +++ b/t/lib/glob-basic.t @@ -118,9 +118,10 @@ unless (@a == 3 and $a[1] eq 'a' and $a[2] eq 'b') { - print "not "; + print "not ok 8 # @a"; +} else { + print "ok 8\n"; } -print "ok 8\n"; # "~" should expand to $ENV{HOME} $ENV{HOME} = "sweet home"; diff --git a/t/lib/i18n-collate.t b/t/lib/i18n-collate.t new file mode 100644 index 0000000000..bf3ba20b6a --- /dev/null +++ b/t/lib/i18n-collate.t @@ -0,0 +1,44 @@ +#!./perl + +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if (!$Config{d_setlocale} || $Config{ccflags} =~ /\bD?NO_LOCALE\b/) { + print "1..0\n"; + exit; + } +} + +print "1..7\n"; + +use I18N::Collate; + +print "ok 1\n"; + +$a = I18N::Collate->new("foo"); + +print "ok 2\n"; + +{ + use warnings; + local $SIG{__WARN__} = sub { $@ = $_[0] }; + $b = I18N::Collate->new("foo"); + print "not " unless $@ =~ /\bHAS BEEN DEPRECATED\b/; + print "ok 3\n"; + $@ = ''; +} + +print "not " unless $a eq $b; +print "ok 4\n"; + +$b = I18N::Collate->new("bar"); +print "not " if $@ =~ /\bHAS BEEN DEPRECATED\b/; +print "ok 5\n"; + +print "not " if $a eq $b; +print "ok 6\n"; + +print "not " if $a lt $b == $a gt $b; +print "ok 7\n"; + diff --git a/t/lib/time-hires.t b/t/lib/time-hires.t index cc741e7669..db35b955a5 100644 --- a/t/lib/time-hires.t +++ b/t/lib/time-hires.t @@ -132,7 +132,7 @@ else { { my $t = time(); my $tf = Time::HiRes::time(); - ok 14, ($tf >= $t) && (($tf - $t) <= 1), + ok 14, (abs($tf - $t) <= 1), "time $t differs from Time::HiRes::time $tf"; } diff --git a/t/op/misc.t b/t/op/misc.t index 730e661912..885fad4ee5 100755 --- a/t/op/misc.t +++ b/t/op/misc.t @@ -358,7 +358,7 @@ print "you die joe!\n" unless "@x" eq 'x y z'; /(?{"{"})/ # Check it outside of eval too EXPECT Sequence (?{...}) not terminated or not {}-balanced at - line 1, within pattern -Sequence (?{...}) not terminated or not {}-balanced before HERE mark in regex m/(?{ << HERE "{"})/ at - line 1. +Sequence (?{...}) not terminated or not {}-balanced in regex; marked by <-- HERE in m/(?{ <-- HERE "{"})/ at - line 1. ######## /(?{"{"}})/ # Check it outside of eval too EXPECT @@ -660,3 +660,15 @@ new_pmop "abcdef"; reset; # coredump in 5.7.1 close STDERR; die; EXPECT +######## +# Bug 20010515.004 +my @h = 1 .. 10; +bad(@h); +sub bad { + undef @h; + print "O"; + print for @_; + print "K"; +} +EXPECT +OK diff --git a/t/op/re_tests b/t/op/re_tests index 806760f8ce..c83d742c19 100644 --- a/t/op/re_tests +++ b/t/op/re_tests @@ -45,9 +45,9 @@ a[b-d]e ace y $& ace a[b-d] aac y $& ac a[-b] a- y $& a- a[b-] a- y $& a- -a[b-a] - c - Invalid [] range "b-a" before HERE mark in regex m/a[b-a << HERE ]/ -a[]b - c - Unmatched [ before HERE mark in regex m/a[ << HERE ]b/ -a[ - c - Unmatched [ before HERE mark in regex m/a[ << HERE / +a[b-a] - c - Invalid [] range "b-a" +a[]b - c - Unmatched [ +a[ - c - Unmatched [ a] a] y $& a] a[]]b a]b y $& a]b a[^bc]d aed y $& aed @@ -95,21 +95,21 @@ a[\S]b a-b y - - ab|cd abc y $& ab ab|cd abcd y $& ab ()ef def y $&-$1 ef- -*a - c - Quantifier follows nothing before HERE mark in regex m/* << HERE a/ -(*)b - c - Quantifier follows nothing before HERE mark in regex m/(* << HERE )b/ +*a - c - Quantifier follows nothing +(*)b - c - Quantifier follows nothing $b b n - - a\ - c - Search pattern not terminated a\(b a(b y $&-$1 a(b- a\(*b ab y $& ab a\(*b a((b y $& a((b a\\b a\b y $& a\b -abc) - c - Unmatched ) before HERE mark in regex m/abc) << HERE / -(abc - c - Unmatched ( before HERE mark in regex m/( << HERE abc/ +abc) - c - Unmatched ) +(abc - c - Unmatched ( ((a)) abc y $&-$1-$2 a-a-a (a)b(c) abc y $&-$1-$2 abc-a-c a+b+c aabbabc y $& abc a{1,}b{1,}c aabbabc y $& abc -a** - c - Nested quantifiers before HERE mark in regex m/a** << HERE / +a** - c - Nested quantifiers a.+?c abcabc y $& abc (a+|b)* ab y $&-$1 ab-b (a+|b){0,} ab y $&-$1 ab-b @@ -117,7 +117,7 @@ a.+?c abcabc y $& abc (a+|b){1,} ab y $&-$1 ab-b (a+|b)? ab y $&-$1 a-a (a+|b){0,1} ab y $&-$1 a-a -)( - c - Unmatched ) before HERE mark in regex m/) << HERE (/ +)( - c - Unmatched ) [^ab]* cde y $& cde abc n - - a* y $& @@ -218,9 +218,9 @@ a[-]?c ac y $& ac 'a[b-d]'i AAC y $& AC 'a[-b]'i A- y $& A- 'a[b-]'i A- y $& A- -'a[b-a]'i - c - Invalid [] range "b-a" before HERE mark in regex m/a[b-a << HERE ]/ -'a[]b'i - c - Unmatched [ before HERE mark in regex m/a[ << HERE ]b/ -'a['i - c - Unmatched [ before HERE mark in regex m/a[ << HERE / +'a[b-a]'i - c - Invalid [] range "b-a" +'a[]b'i - c - Unmatched [ +'a['i - c - Unmatched [ 'a]'i A] y $& A] 'a[]]b'i A]B y $& A]B 'a[^bc]d'i AED y $& AED @@ -232,21 +232,21 @@ a[-]?c ac y $& ac 'ab|cd'i ABC y $& AB 'ab|cd'i ABCD y $& AB '()ef'i DEF y $&-$1 EF- -'*a'i - c - Quantifier follows nothing before HERE mark in regex m/* << HERE a/ -'(*)b'i - c - Quantifier follows nothing before HERE mark in regex m/(* << HERE )b/ +'*a'i - c - Quantifier follows nothing +'(*)b'i - c - Quantifier follows nothing '$b'i B n - - 'a\'i - c - Search pattern not terminated 'a\(b'i A(B y $&-$1 A(B- 'a\(*b'i AB y $& AB 'a\(*b'i A((B y $& A((B 'a\\b'i A\B y $& A\B -'abc)'i - c - Unmatched ) before HERE mark in regex m/abc) << HERE / -'(abc'i - c - Unmatched ( before HERE mark in regex m/( << HERE abc/ +'abc)'i - c - Unmatched ) +'(abc'i - c - Unmatched ( '((a))'i ABC y $&-$1-$2 A-A-A '(a)b(c)'i ABC y $&-$1-$2 ABC-A-C 'a+b+c'i AABBABC y $& ABC 'a{1,}b{1,}c'i AABBABC y $& ABC -'a**'i - c - Nested quantifiers before HERE mark in regex m/a** << HERE / +'a**'i - c - Nested quantifiers 'a.+?c'i ABCABC y $& ABC 'a.*?c'i ABCABC y $& ABC 'a.{0,5}?c'i ABCABC y $& ABC @@ -257,7 +257,7 @@ a[-]?c ac y $& ac '(a+|b)?'i AB y $&-$1 A-A '(a+|b){0,1}'i AB y $&-$1 A-A '(a+|b){0,1}?'i AB y $&-$1 - -')('i - c - Unmatched ) before HERE mark in regex m/) << HERE (/ +')('i - c - Unmatched ) '[^ab]*'i CDE y $& CDE 'abc'i n - - 'a*'i y $& @@ -346,7 +346,7 @@ a(?:b|(c|e){1,2}?|d)+?(.) ace y $1$2 ce (?<!c)b cb n - - (?<!c)b b y - - (?<!c)b b y $& b -(?<%)b - c - Sequence (?<%...) not recognized before HERE mark in regex m/(?<% << HERE )b/ +(?<%)b - c - Sequence (?<%...) not recognized (?:..)*a aba y $& aba (?:..)*?a aba y $& a ^(?:b|a(?=(.)))*\1 abc y $& ab @@ -397,10 +397,10 @@ a(?:b|(c|e){1,2}?|d)+?(.) ace y $1$2 ce '(ab)\d\1'i ab4Ab y $1 ab foo\w*\d{4}baz foobar1234baz y $& foobar1234baz a(?{})b cabd y $& ab -a(?{)b - c - Sequence (?{...}) not terminated or not {}-balanced before HERE mark in regex m/a(?{ << HERE )b/ -a(?{{})b - c - Sequence (?{...}) not terminated or not {}-balanced before HERE mark in regex m/a(?{ << HERE {})b/ +a(?{)b - c - Sequence (?{...}) not terminated or not {}-balanced +a(?{{})b - c - Sequence (?{...}) not terminated or not {}-balanced a(?{}})b - c - -a(?{"{"})b - c - Sequence (?{...}) not terminated or not {}-balanced before HERE mark in regex m/a(?{ << HERE "{"})b/ +a(?{"{"})b - c - Sequence (?{...}) not terminated or not {}-balanced a(?{"\{"})b cabd y $& ab a(?{"{"}})b - c - Unmatched right curly bracket a(?{$bl="\{"}).b caxbd y $bl { @@ -441,7 +441,7 @@ x(~~)*(?:(?:F)?)? x~~ y - - ^(\(+)?blah(?(1)(\)))$ blah y ($2) () ^(\(+)?blah(?(1)(\)))$ blah) n - - ^(\(+)?blah(?(1)(\)))$ (blah n - - -(?(1?)a|b) a c - Switch condition not recognized before HERE mark in regex m/(?(1? << HERE )a|b)/ +(?(1?)a|b) a c - Switch condition not recognized (?(1)a|b|c) a c - Switch (?(condition)... contains too many branches (?(?{0})a|b) a n - - (?(?{0})b|a) a y $& a @@ -473,10 +473,10 @@ $(?<=^(a)) a y $1 a ([[:]+) a:[b]: y $1 :[ ([[=]+) a=[b]= y $1 =[ ([[.]+) a.[b]. y $1 .[ -[a[:xyz: - c - Unmatched [ before HERE mark in regex m/[ << HERE a[:xyz:/ -[a[:xyz:] - c - POSIX class [:xyz:] unknown before HERE mark in regex m/[a[:xyz:] << HERE / +[a[:xyz: - c - Unmatched [ +[a[:xyz:] - c - POSIX class [:xyz:] unknown [a[:]b[:c] abc y $& abc -([a[:xyz:]b]+) pbaq c - POSIX class [:xyz:] unknown before HERE mark in regex m/([a[:xyz:] << HERE b]+)/ +([a[:xyz:]b]+) pbaq c - POSIX class [:xyz:] unknown [a[:]b[:c] abc y $& abc ([[:alpha:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd ([[:alnum:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01Xy @@ -503,8 +503,8 @@ $(?<=^(a)) a y $1 a ([[:^word:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 -- ${nulnul}${ffff} ([[:^upper:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 cd01 ([[:^xdigit:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 Xy__-- ${nulnul}${ffff} -[[:foo:]] - c - POSIX class [:foo:] unknown before HERE mark in regex m/[[:foo:] << HERE ]/ -[[:^foo:]] - c - POSIX class [:^foo:] unknown before HERE mark in regex m/[[:^foo:] << HERE ]/ +[[:foo:]] - c - POSIX class [:foo:] unknown +[[:^foo:]] - c - POSIX class [:^foo:] unknown ((?>a+)b) aaab y $1 aaab (?>(a+))b aaab y $1 aaa ((?>[^()]+)|\([^()]*\))+ ((abc(ade)ufh()()x y $& abc(ade)ufh()()x diff --git a/t/op/regmesg.t b/t/op/regmesg.t index 7ee1bb4261..24f6f31f77 100644 --- a/t/op/regmesg.t +++ b/t/op/regmesg.t @@ -13,8 +13,8 @@ my $debug = 1; ## arrays below. The {#} is a meta-marker -- it marks where the marker should ## go. -my $marker1 = "HERE"; -my $marker2 = " << HERE "; +my $marker1 = "<-- HERE"; +my $marker2 = " <-- HERE "; ## ## Key-value pairs of code/error of code that should have fatal errors. @@ -26,75 +26,75 @@ my $inf_m1 = ($Config{reg_infty} || 32767) - 1; my $inf_p1 = $inf_m1 + 2; my @death = ( - '/[[=foo=]]/' => 'POSIX syntax [= =] is reserved for future extensions before {#} mark in regex m/[[=foo=]{#}]/', + '/[[=foo=]]/' => 'POSIX syntax [= =] is reserved for future extensions in regex; marked by {#} in m/[[=foo=]{#}]/', - '/(?<= .*)/' => 'Variable length lookbehind not implemented before {#} mark in regex m/(?<= .*){#}/', + '/(?<= .*)/' => 'Variable length lookbehind not implemented in regex; marked by {#} in m/(?<= .*){#}/', - '/(?<= x{1000})/' => 'Lookbehind longer than 255 not implemented before {#} mark in regex m/(?<= x{1000}){#}/', + '/(?<= x{1000})/' => 'Lookbehind longer than 255 not implemented in regex; marked by {#} in m/(?<= x{1000}){#}/', - '/(?@)/' => 'Sequence (?@...) not implemented before {#} mark in regex m/(?@{#})/', + '/(?@)/' => 'Sequence (?@...) not implemented in regex; marked by {#} in m/(?@{#})/', - '/(?{ 1/' => 'Sequence (?{...}) not terminated or not {}-balanced before {#} mark in regex m/(?{{#} 1/', + '/(?{ 1/' => 'Sequence (?{...}) not terminated or not {}-balanced in regex; marked by {#} in m/(?{{#} 1/', - '/(?(1x))/' => 'Switch condition not recognized before {#} mark in regex m/(?(1x{#}))/', + '/(?(1x))/' => 'Switch condition not recognized in regex; marked by {#} in m/(?(1x{#}))/', - '/(?(1)x|y|z)/' => 'Switch (?(condition)... contains too many branches before {#} mark in regex m/(?(1)x|y|{#}z)/', + '/(?(1)x|y|z)/' => 'Switch (?(condition)... contains too many branches in regex; marked by {#} in m/(?(1)x|y|{#}z)/', - '/(?(x)y|x)/' => 'Unknown switch condition (?(x) before {#} mark in regex m/(?({#}x)y|x)/', + '/(?(x)y|x)/' => 'Unknown switch condition (?(x) in regex; marked by {#} in m/(?({#}x)y|x)/', - '/(?/' => 'Sequence (? incomplete before {#} mark in regex m/(?{#}/', + '/(?/' => 'Sequence (? incomplete in regex; marked by {#} in m/(?{#}/', - '/(?;x/' => 'Sequence (?;...) not recognized before {#} mark in regex m/(?;{#}x/', - '/(?<;x/' => 'Sequence (?<;...) not recognized before {#} mark in regex m/(?<;{#}x/', + '/(?;x/' => 'Sequence (?;...) not recognized in regex; marked by {#} in m/(?;{#}x/', + '/(?<;x/' => 'Sequence (?<;...) not recognized in regex; marked by {#} in m/(?<;{#}x/', - '/((x)/' => 'Unmatched ( before {#} mark in regex m/({#}(x)/', + '/((x)/' => 'Unmatched ( in regex; marked by {#} in m/({#}(x)/', - "/x{$inf_p1}/" => "Quantifier in {,} bigger than $inf_m1 before {#} mark in regex m/x{{#}$inf_p1}/", + "/x{$inf_p1}/" => "Quantifier in {,} bigger than $inf_m1 in regex; marked by {#} in m/x{{#}$inf_p1}/", - '/x{3,1}/' => 'Can\'t do {n,m} with n > m before {#} mark in regex m/x{3,1}{#}/', + '/x{3,1}/' => 'Can\'t do {n,m} with n > m in regex; marked by {#} in m/x{3,1}{#}/', - '/x**/' => 'Nested quantifiers before {#} mark in regex m/x**{#}/', + '/x**/' => 'Nested quantifiers in regex; marked by {#} in m/x**{#}/', - '/x[/' => 'Unmatched [ before {#} mark in regex m/x[{#}/', + '/x[/' => 'Unmatched [ in regex; marked by {#} in m/x[{#}/', - '/*/', => 'Quantifier follows nothing before {#} mark in regex m/*{#}/', + '/*/', => 'Quantifier follows nothing in regex; marked by {#} in m/*{#}/', - '/\p{x/' => 'Missing right brace on \p{} before {#} mark in regex m/\p{{#}x/', + '/\p{x/' => 'Missing right brace on \p{} in regex; marked by {#} in m/\p{{#}x/', - 'use utf8; /[\p{x]/' => 'Missing right brace on \p{} before {#} mark in regex m/[\p{{#}x]/', + 'use utf8; /[\p{x]/' => 'Missing right brace on \p{} in regex; marked by {#} in m/[\p{{#}x]/', - '/(x)\2/' => 'Reference to nonexistent group before {#} mark in regex m/(x)\2{#}/', + '/(x)\2/' => 'Reference to nonexistent group in regex; marked by {#} in m/(x)\2{#}/', 'my $m = "\\\"; $m =~ $m', => 'Trailing \ in regex m/\/', - '/\x{1/' => 'Missing right brace on \x{} before {#} mark in regex m/\x{{#}1/', + '/\x{1/' => 'Missing right brace on \x{} in regex; marked by {#} in m/\x{{#}1/', - 'use utf8; /[\x{X]/' => 'Missing right brace on \x{} before {#} mark in regex m/[\x{{#}X]/', + 'use utf8; /[\x{X]/' => 'Missing right brace on \x{} in regex; marked by {#} in m/[\x{{#}X]/', - '/[[:barf:]]/' => 'POSIX class [:barf:] unknown before {#} mark in regex m/[[:barf:]{#}]/', + '/[[:barf:]]/' => 'POSIX class [:barf:] unknown in regex; marked by {#} in m/[[:barf:]{#}]/', - '/[[=barf=]]/' => 'POSIX syntax [= =] is reserved for future extensions before {#} mark in regex m/[[=barf=]{#}]/', + '/[[=barf=]]/' => 'POSIX syntax [= =] is reserved for future extensions in regex; marked by {#} in m/[[=barf=]{#}]/', - '/[[.barf.]]/' => 'POSIX syntax [. .] is reserved for future extensions before {#} mark in regex m/[[.barf.]{#}]/', + '/[[.barf.]]/' => 'POSIX syntax [. .] is reserved for future extensions in regex; marked by {#} in m/[[.barf.]{#}]/', - '/[z-a]/' => 'Invalid [] range "z-a" before {#} mark in regex m/[z-a{#}]/', + '/[z-a]/' => 'Invalid [] range "z-a" in regex; marked by {#} in m/[z-a{#}]/', ); ## ## Key-value pairs of code/error of code that should have non-fatal warnings. ## @warning = ( - "m/(?p{ 'a' })/" => "(?p{}) is deprecated - use (??{}) before {#} mark in regex m/(?p{#}{ 'a' })/", + "m/(?p{ 'a' })/" => "(?p{}) is deprecated - use (??{}) in regex; marked by {#} in m/(?p{#}{ 'a' })/", - 'm/\b*/' => '\b* matches null string many times before {#} mark in regex m/\b*{#}/', + 'm/\b*/' => '\b* matches null string many times in regex; marked by {#} in m/\b*{#}/', - 'm/[:blank:]/' => 'POSIX syntax [: :] belongs inside character classes before {#} mark in regex m/[:blank:]{#}/', + 'm/[:blank:]/' => 'POSIX syntax [: :] belongs inside character classes in regex; marked by {#} in m/[:blank:]{#}/', - "m'[\\y]'" => 'Unrecognized escape \y in character class passed through before {#} mark in regex m/[\y{#}]/', + "m'[\\y]'" => 'Unrecognized escape \y in character class passed through in regex; marked by {#} in m/[\y{#}]/', - 'm/[a-\d]/' => 'False [] range "a-\d" before {#} mark in regex m/[a-\d{#}]/', - 'm/[\w-x]/' => 'False [] range "\w-" before {#} mark in regex m/[\w-{#}x]/', - "m'\\y'" => 'Unrecognized escape \y passed through before {#} mark in regex m/\y{#}/', + 'm/[a-\d]/' => 'False [] range "a-\d" in regex; marked by {#} in m/[a-\d{#}]/', + 'm/[\w-x]/' => 'False [] range "\w-" in regex; marked by {#} in m/[\w-{#}x]/', + "m'\\y'" => 'Unrecognized escape \y passed through in regex; marked by {#} in m/\y{#}/', ); my $total = (@death + @warning)/2; diff --git a/t/pragma/warn/pp_hot b/t/pragma/warn/pp_hot index b21117ca86..3ee853f6e2 100644 --- a/t/pragma/warn/pp_hot +++ b/t/pragma/warn/pp_hot @@ -225,6 +225,10 @@ $x = "19$yy\n"; $x = "19" . $yy . "\n"; $x = "319$yy\n"; $x = "319" . $yy . "\n"; +$yy = 19; +$x = "ok $yy\n"; +$yy = 9; +$x = 1 . $yy; no warnings 'y2k'; $x = "19$yy\n"; $x = "19" . $yy . "\n"; diff --git a/t/pragma/warn/regcomp b/t/pragma/warn/regcomp index 8b86b5082f..7ab4a796a5 100644 --- a/t/pragma/warn/regcomp +++ b/t/pragma/warn/regcomp @@ -29,7 +29,7 @@ $a =~ /(?=a)*/ ; no warnings 'regexp' ; $a =~ /(?=a)*/ ; EXPECT -(?=a)* matches null string many times before HERE mark in regex m/(?=a)* << HERE / at - line 4. +(?=a)* matches null string many times in regex; marked by <-- HERE in m/(?=a)* <-- HERE / at - line 4. ######## # regcomp.c [S_study_chunk] use warnings 'regexp' ; @@ -38,7 +38,7 @@ $_ = "" ; no warnings 'regexp' ; /(?=a)?/; EXPECT -Quantifier unexpected on zero-length expression before HERE mark in regex m/(?=a)? << HERE / at - line 4. +Quantifier unexpected on zero-length expression in regex; marked by <-- HERE in m/(?=a)? <-- HERE / at - line 4. ######## # regcomp.c [S_regatom] $x = '\m' ; @@ -47,7 +47,7 @@ $a =~ /a$x/ ; no warnings 'regexp' ; $a =~ /a$x/ ; EXPECT -Unrecognized escape \m passed through before HERE mark in regex m/a\m << HERE / at - line 4. +Unrecognized escape \m passed through in regex; marked by <-- HERE in m/a\m <-- HERE / at - line 4. ######## # regcomp.c [S_regpposixcc S_checkposixcc] # @@ -61,9 +61,9 @@ no warnings 'regexp' ; /[:zog:]/; /[[:zog:]]/; EXPECT -POSIX syntax [: :] belongs inside character classes before HERE mark in regex m/[:alpha:] << HERE / at - line 5. -POSIX syntax [: :] belongs inside character classes before HERE mark in regex m/[:zog:] << HERE / at - line 6. -POSIX class [:zog:] unknown before HERE mark in regex m/[[:zog:] << HERE ]/ +POSIX syntax [: :] belongs inside character classes in regex; marked by <-- HERE in m/[:alpha:] <-- HERE / at - line 5. +POSIX syntax [: :] belongs inside character classes in regex; marked by <-- HERE in m/[:zog:] <-- HERE / at - line 6. +POSIX class [:zog:] unknown in regex; marked by <-- HERE in m/[[:zog:] <-- HERE ]/ ######## # regcomp.c [S_checkposixcc] # @@ -73,8 +73,8 @@ $_ = "" ; no warnings 'regexp' ; /[.zog.]/; EXPECT -POSIX syntax [. .] belongs inside character classes before HERE mark in regex m/[.zog.] << HERE / at - line 5. -POSIX syntax [. .] is reserved for future extensions before HERE mark in regex m/[.zog.] << HERE / +POSIX syntax [. .] belongs inside character classes in regex; marked by <-- HERE in m/[.zog.] <-- HERE / at - line 5. +POSIX syntax [. .] is reserved for future extensions in regex; marked by <-- HERE in m/[.zog.] <-- HERE / ######## # regcomp.c [S_checkposixcc] # @@ -84,7 +84,7 @@ $_ = "" ; no warnings 'regexp' ; /[[.zog.]]/; EXPECT -POSIX syntax [. .] is reserved for future extensions before HERE mark in regex m/[[.zog.] << HERE ]/ +POSIX syntax [. .] is reserved for future extensions in regex; marked by <-- HERE in m/[[.zog.] <-- HERE ]/ ######## # regcomp.c [S_regclass] $_ = ""; @@ -109,14 +109,14 @@ no warnings 'regexp' ; /[[:alpha:]-[:digit:]]/; /[[:digit:]-[:alpha:]]/; EXPECT -False [] range "a-\d" before HERE mark in regex m/[a-\d << HERE ]/ at - line 5. -False [] range "\d-" before HERE mark in regex m/[\d- << HERE b]/ at - line 6. -False [] range "\s-" before HERE mark in regex m/[\s- << HERE \d]/ at - line 7. -False [] range "\d-" before HERE mark in regex m/[\d- << HERE \s]/ at - line 8. -False [] range "a-[:digit:]" before HERE mark in regex m/[a-[:digit:] << HERE ]/ at - line 9. -False [] range "[:digit:]-" before HERE mark in regex m/[[:digit:]- << HERE b]/ at - line 10. -False [] range "[:alpha:]-" before HERE mark in regex m/[[:alpha:]- << HERE [:digit:]]/ at - line 11. -False [] range "[:digit:]-" before HERE mark in regex m/[[:digit:]- << HERE [:alpha:]]/ at - line 12. +False [] range "a-\d" in regex; marked by <-- HERE in m/[a-\d <-- HERE ]/ at - line 5. +False [] range "\d-" in regex; marked by <-- HERE in m/[\d- <-- HERE b]/ at - line 6. +False [] range "\s-" in regex; marked by <-- HERE in m/[\s- <-- HERE \d]/ at - line 7. +False [] range "\d-" in regex; marked by <-- HERE in m/[\d- <-- HERE \s]/ at - line 8. +False [] range "a-[:digit:]" in regex; marked by <-- HERE in m/[a-[:digit:] <-- HERE ]/ at - line 9. +False [] range "[:digit:]-" in regex; marked by <-- HERE in m/[[:digit:]- <-- HERE b]/ at - line 10. +False [] range "[:alpha:]-" in regex; marked by <-- HERE in m/[[:alpha:]- <-- HERE [:digit:]]/ at - line 11. +False [] range "[:digit:]-" in regex; marked by <-- HERE in m/[[:digit:]- <-- HERE [:alpha:]]/ at - line 12. ######## # regcomp.c [S_regclassutf8] BEGIN { @@ -148,14 +148,14 @@ no warnings 'regexp' ; /[[:alpha:]-[:digit:]]/; /[[:digit:]-[:alpha:]]/; EXPECT -False [] range "a-\d" before HERE mark in regex m/[a-\d << HERE ]/ at - line 12. -False [] range "\d-" before HERE mark in regex m/[\d- << HERE b]/ at - line 13. -False [] range "\s-" before HERE mark in regex m/[\s- << HERE \d]/ at - line 14. -False [] range "\d-" before HERE mark in regex m/[\d- << HERE \s]/ at - line 15. -False [] range "a-[:digit:]" before HERE mark in regex m/[a-[:digit:] << HERE ]/ at - line 16. -False [] range "[:digit:]-" before HERE mark in regex m/[[:digit:]- << HERE b]/ at - line 17. -False [] range "[:alpha:]-" before HERE mark in regex m/[[:alpha:]- << HERE [:digit:]]/ at - line 18. -False [] range "[:digit:]-" before HERE mark in regex m/[[:digit:]- << HERE [:alpha:]]/ at - line 19. +False [] range "a-\d" in regex; marked by <-- HERE in m/[a-\d <-- HERE ]/ at - line 12. +False [] range "\d-" in regex; marked by <-- HERE in m/[\d- <-- HERE b]/ at - line 13. +False [] range "\s-" in regex; marked by <-- HERE in m/[\s- <-- HERE \d]/ at - line 14. +False [] range "\d-" in regex; marked by <-- HERE in m/[\d- <-- HERE \s]/ at - line 15. +False [] range "a-[:digit:]" in regex; marked by <-- HERE in m/[a-[:digit:] <-- HERE ]/ at - line 16. +False [] range "[:digit:]-" in regex; marked by <-- HERE in m/[[:digit:]- <-- HERE b]/ at - line 17. +False [] range "[:alpha:]-" in regex; marked by <-- HERE in m/[[:alpha:]- <-- HERE [:digit:]]/ at - line 18. +False [] range "[:digit:]-" in regex; marked by <-- HERE in m/[[:digit:]- <-- HERE [:alpha:]]/ at - line 19. ######## # regcomp.c [S_regclass S_regclassutf8] use warnings 'regexp' ; @@ -163,5 +163,5 @@ $a =~ /[a\zb]/ ; no warnings 'regexp' ; $a =~ /[a\zb]/ ; EXPECT -Unrecognized escape \z in character class passed through before HERE mark in regex m/[a\z << HERE b]/ at - line 3. +Unrecognized escape \z in character class passed through in regex; marked by <-- HERE in m/[a\z <-- HERE b]/ at - line 3. @@ -73,6 +73,10 @@ # endif #endif +#ifdef DGUX +# define THREAD_CREATE_NEEDS_STACK (16*1024) +#endif + #ifdef I_MACH_CTHREADS /* cthreads interface */ @@ -245,8 +249,22 @@ } STMT_END #endif /* JOIN */ +/* Use an unchecked fetch of thread-specific data instead of a checked one. + * It would fail if the key were bogus, but if the key were bogus then + * Really Bad Things would be happening anyway. --dan */ +#if (defined(__ALPHA) && (__VMS_VER >= 70000000)) || \ + (defined(__alpha) && defined(__osf__)) /* Available only on >= 4.0 */ +# define HAS_PTHREAD_UNCHECKED_GETSPECIFIC_NP /* Configure test needed */ +#endif + +#ifdef HAS_PTHREAD_UNCHECKED_GETSPECIFIC_NP +# define PTHREAD_GETSPECIFIC(key) pthread_unchecked_getspecific_np(key) +#else +# define PTHREAD_GETSPECIFIC(key) pthread_getspecific(key) +#endif + #ifndef PERL_GET_CONTEXT -# define PERL_GET_CONTEXT pthread_getspecific(PL_thr_key) +# define PERL_GET_CONTEXT PTHREAD_GETSPECIFIC(PL_thr_key) #endif #ifndef PERL_SET_CONTEXT @@ -3489,11 +3489,11 @@ Perl_get_context(void) Perl_croak_nocontext("panic: pthread_getspecific"); return (void*)t; # else -# ifdef I_MACH_CTHREADS +# ifdef I_MACH_CTHREADS return (void*)cthread_data(cthread_self()); -# else - return (void*)pthread_getspecific(PL_thr_key); -# endif +# else + return (void*)PTHREAD_GETSPECIFIC(PL_thr_key); +# endif # endif #else return (void*)NULL; diff --git a/utils.lst b/utils.lst new file mode 100644 index 0000000000..b4a839dfa5 --- /dev/null +++ b/utils.lst @@ -0,0 +1,20 @@ +lib/ExtUtils/xsubpp +pod/pod2html +pod/pod2latex +pod/pod2man +pod/pod2text +pod/pod2usage +pod/podchecker +pod/podselect +utils/c2ph # link = utils/pstruct +utils/dprofpp +utils/h2ph +utils/h2xs +utils/perlbug +utils/perlcc +utils/perldoc +utils/pl2pm +utils/splain +x2p/a2p # pod = x2p/a2p.pod +x2p/find2perl +x2p/s2p # link = x2p/psed diff --git a/writemain.SH b/writemain.SH index 18544c1f81..ed8aca69ed 100644 --- a/writemain.SH +++ b/writemain.SH @@ -1,4 +1,4 @@ -case $CONFIGDOTSH in +case $PERL_CONFIG_SH in '') if test -f config.sh; then TOP=.; elif test -f ../config.sh; then TOP=..; |