[Midnightbsd-cvs] src [6452] trunk/contrib/perl: remove files from previous perl version
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Tue Dec 3 19:48:22 EST 2013
Revision: 6452
http://svnweb.midnightbsd.org/src/?rev=6452
Author: laffer1
Date: 2013-12-03 19:48:19 -0500 (Tue, 03 Dec 2013)
Log Message:
-----------
remove files from previous perl version
Removed Paths:
-------------
trunk/contrib/perl/README.beos
trunk/contrib/perl/README.epoc
trunk/contrib/perl/README.mpeix
trunk/contrib/perl/README.uts
trunk/contrib/perl/README.vmesa
trunk/contrib/perl/beos/
trunk/contrib/perl/cpan/Compress-Raw-Bzip2/pod/FAQ.pod
trunk/contrib/perl/cpan/Compress-Raw-Zlib/pod/FAQ.pod
trunk/contrib/perl/cpan/Devel-DProf/
trunk/contrib/perl/cpan/Digest-SHA/src/hmac.c
trunk/contrib/perl/cpan/Digest-SHA/src/hmac.h
trunk/contrib/perl/cpan/Digest-SHA/src/hmacxtra.c
trunk/contrib/perl/cpan/Digest-SHA/src/shaxtra.c
trunk/contrib/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/YAML.pm
trunk/contrib/perl/cpan/File-Temp/Temp.pm
trunk/contrib/perl/cpan/Getopt-Long/t/gol-compat.t
trunk/contrib/perl/cpan/HTTP-Tiny/t/120_put.t
trunk/contrib/perl/cpan/IO-Compress/pod/FAQ.pod
trunk/contrib/perl/cpan/List-Util/XS.pp
trunk/contrib/perl/cpan/List-Util/lib/List/Util/PP.pm
trunk/contrib/perl/cpan/List-Util/lib/Scalar/Util/PP.pm
trunk/contrib/perl/cpan/List-Util/t/expfail.t
trunk/contrib/perl/cpan/List-Util/t/p_00version.t
trunk/contrib/perl/cpan/List-Util/t/p_blessed.t
trunk/contrib/perl/cpan/List-Util/t/p_first.t
trunk/contrib/perl/cpan/List-Util/t/p_lln.t
trunk/contrib/perl/cpan/List-Util/t/p_max.t
trunk/contrib/perl/cpan/List-Util/t/p_maxstr.t
trunk/contrib/perl/cpan/List-Util/t/p_min.t
trunk/contrib/perl/cpan/List-Util/t/p_minstr.t
trunk/contrib/perl/cpan/List-Util/t/p_readonly.t
trunk/contrib/perl/cpan/List-Util/t/p_refaddr.t
trunk/contrib/perl/cpan/List-Util/t/p_shuffle.t
trunk/contrib/perl/cpan/List-Util/t/p_tainted.t
trunk/contrib/perl/cpan/Locale-Codes/lib/Locale/Constants.pm
trunk/contrib/perl/cpan/Locale-Codes/lib/Locale/Constants.pod
trunk/contrib/perl/cpan/Module-Load-Conditional/t/02_Parse_Version.t
trunk/contrib/perl/cpan/Perl-OSType/t/00-compile.t
trunk/contrib/perl/cpan/Pod-Parser/lib/Pod/Checker.pm
trunk/contrib/perl/cpan/Pod-Parser/lib/Pod/Usage.pm
trunk/contrib/perl/cpan/Pod-Parser/scripts/pod2usage.PL
trunk/contrib/perl/cpan/Pod-Parser/scripts/podchecker.PL
trunk/contrib/perl/lib/Test/
trunk/contrib/perl/lib/Test.pm
trunk/contrib/perl/lib/Text/
trunk/contrib/perl/lib/Thread/
trunk/contrib/perl/lib/Tie/File/
trunk/contrib/perl/lib/Tie/File.pm
trunk/contrib/perl/lib/Tie/Hash/
trunk/contrib/perl/lib/Tie/Memoize.pm
trunk/contrib/perl/lib/Tie/Memoize.t
trunk/contrib/perl/lib/Tie/RefHash/
trunk/contrib/perl/lib/Tie/RefHash.pm
trunk/contrib/perl/lib/Time/Local.pm
trunk/contrib/perl/lib/Time/Local.t
trunk/contrib/perl/lib/Unicode/Collate/
trunk/contrib/perl/lib/Unicode/Collate.pm
trunk/contrib/perl/lib/abbrev.pl
trunk/contrib/perl/lib/assert.pl
trunk/contrib/perl/lib/attributes.pm
trunk/contrib/perl/lib/autodie/
trunk/contrib/perl/lib/autodie.pm
trunk/contrib/perl/lib/autouse.pm
trunk/contrib/perl/lib/autouse.t
trunk/contrib/perl/lib/base/
trunk/contrib/perl/lib/base.pm
trunk/contrib/perl/lib/bigfloat.pl
trunk/contrib/perl/lib/bigfloatpl.t
trunk/contrib/perl/lib/bigint.pl
trunk/contrib/perl/lib/bigint.pm
trunk/contrib/perl/lib/bigintpl.t
trunk/contrib/perl/lib/bignum/
trunk/contrib/perl/lib/bignum.pm
trunk/contrib/perl/lib/bigrat.pl
trunk/contrib/perl/lib/bigrat.pm
trunk/contrib/perl/lib/cacheout.pl
trunk/contrib/perl/lib/complete.pl
trunk/contrib/perl/lib/constant.pm
trunk/contrib/perl/lib/constant.t
trunk/contrib/perl/lib/ctime.pl
trunk/contrib/perl/lib/dotsh.pl
trunk/contrib/perl/lib/encoding/
trunk/contrib/perl/lib/exceptions.pl
trunk/contrib/perl/lib/fastcwd.pl
trunk/contrib/perl/lib/fields.pm
trunk/contrib/perl/lib/find.pl
trunk/contrib/perl/lib/finddepth.pl
trunk/contrib/perl/lib/flush.pl
trunk/contrib/perl/lib/getcwd.pl
trunk/contrib/perl/lib/getopt.pl
trunk/contrib/perl/lib/getopts.pl
trunk/contrib/perl/lib/hostname.pl
trunk/contrib/perl/lib/if.pm
trunk/contrib/perl/lib/if.t
trunk/contrib/perl/lib/importenv.pl
trunk/contrib/perl/lib/lib.t
trunk/contrib/perl/lib/lib_pm.PL
trunk/contrib/perl/lib/look.pl
trunk/contrib/perl/lib/mro.pm
trunk/contrib/perl/lib/newgetopt.pl
trunk/contrib/perl/lib/open2.pl
trunk/contrib/perl/lib/open3.pl
trunk/contrib/perl/lib/parent/
trunk/contrib/perl/lib/parent.pm
trunk/contrib/perl/lib/pwd.pl
trunk/contrib/perl/lib/shellwords.pl
trunk/contrib/perl/lib/stat.pl
trunk/contrib/perl/lib/syslog.pl
trunk/contrib/perl/lib/tainted.pl
trunk/contrib/perl/lib/termcap.pl
trunk/contrib/perl/lib/timelocal.pl
trunk/contrib/perl/lib/unicore/mktables.lst
trunk/contrib/perl/lib/validate.pl
trunk/contrib/perl/lib/version.t
trunk/contrib/perl/mpeix/
trunk/contrib/perl/pod/checkpods.PL
trunk/contrib/perl/pod/perl5110delta.pod
trunk/contrib/perl/pod/perl5111delta.pod
trunk/contrib/perl/pod/perl5112delta.pod
trunk/contrib/perl/pod/perl5113delta.pod
trunk/contrib/perl/pod/perl5114delta.pod
trunk/contrib/perl/pod/perl5115delta.pod
trunk/contrib/perl/pod/perl5130delta.pod
trunk/contrib/perl/pod/perl51310delta.pod
trunk/contrib/perl/pod/perl51311delta.pod
trunk/contrib/perl/pod/perl5131delta.pod
trunk/contrib/perl/pod/perl5132delta.pod
trunk/contrib/perl/pod/perl5133delta.pod
trunk/contrib/perl/pod/perl5134delta.pod
trunk/contrib/perl/pod/perl5135delta.pod
trunk/contrib/perl/pod/perl5136delta.pod
trunk/contrib/perl/pod/perl5137delta.pod
trunk/contrib/perl/pod/perl5138delta.pod
trunk/contrib/perl/pod/perl5139delta.pod
trunk/contrib/perl/pod/perl570delta.pod
trunk/contrib/perl/pod/perl571delta.pod
trunk/contrib/perl/pod/perl572delta.pod
trunk/contrib/perl/pod/perl573delta.pod
trunk/contrib/perl/pod/perl590delta.pod
trunk/contrib/perl/pod/perl591delta.pod
trunk/contrib/perl/pod/perl592delta.pod
trunk/contrib/perl/pod/perl593delta.pod
trunk/contrib/perl/pod/perl594delta.pod
trunk/contrib/perl/pod/perl595delta.pod
trunk/contrib/perl/pod/perlapi.pod
trunk/contrib/perl/pod/perlcompile.pod
trunk/contrib/perl/pod/perldoc.pod
trunk/contrib/perl/pod/perlfaq.pod
trunk/contrib/perl/pod/perlfaq1.pod
trunk/contrib/perl/pod/perlfaq2.pod
trunk/contrib/perl/pod/perlfaq3.pod
trunk/contrib/perl/pod/perlfaq4.pod
trunk/contrib/perl/pod/perlfaq5.pod
trunk/contrib/perl/pod/perlfaq6.pod
trunk/contrib/perl/pod/perlfaq7.pod
trunk/contrib/perl/pod/perlfaq8.pod
trunk/contrib/perl/pod/perlfaq9.pod
trunk/contrib/perl/pod/perlglossary.pod
trunk/contrib/perl/pod/perlintern.pod
trunk/contrib/perl/pod/perlmodlib.pod
trunk/contrib/perl/pod/perlothrtut.pod
trunk/contrib/perl/pod/perlrepository.pod
trunk/contrib/perl/pod/perltoc.pod
trunk/contrib/perl/pod/perlxs.pod
trunk/contrib/perl/pod/perlxstut.pod
trunk/contrib/perl/pod/pod2html.PL
trunk/contrib/perl/pod/pod2latex.PL
trunk/contrib/perl/pod/pod2man.PL
trunk/contrib/perl/pod/pod2text.PL
trunk/contrib/perl/pod/pod2usage.PL
trunk/contrib/perl/pod/podchecker.PL
trunk/contrib/perl/pod/podselect.PL
trunk/contrib/perl/pod/roffitall
trunk/contrib/perl/pod.lst
trunk/contrib/perl/t/Module_Pluggable/
trunk/contrib/perl/t/TestInit.pm
trunk/contrib/perl/t/cmd/while.t
trunk/contrib/perl/t/comp/cpp.aux
trunk/contrib/perl/t/comp/cpp.t
trunk/contrib/perl/t/comp/script.t
trunk/contrib/perl/t/lib/Dev/
trunk/contrib/perl/t/lib/Dummy.pm
trunk/contrib/perl/t/lib/Filter/
trunk/contrib/perl/t/lib/HasSigDie.pm
trunk/contrib/perl/t/lib/MakeMaker/
trunk/contrib/perl/t/lib/Math/
trunk/contrib/perl/t/lib/NoExporter.pm
trunk/contrib/perl/t/lib/Parse/
trunk/contrib/perl/t/lib/Test/
trunk/contrib/perl/t/lib/TieIn.pm
trunk/contrib/perl/t/lib/TieOut.pm
trunk/contrib/perl/t/lib/compress/
trunk/contrib/perl/t/lib/contains_bad_pod.xr
trunk/contrib/perl/t/lib/contains_pod.xr
trunk/contrib/perl/t/lib/dprof/
trunk/contrib/perl/t/lib/filter-util.pl
trunk/contrib/perl/t/lib/manifest.t
trunk/contrib/perl/t/lib/sample-tests/
trunk/contrib/perl/t/op/arith.t
trunk/contrib/perl/t/op/array_base.aux
trunk/contrib/perl/t/op/cmp.t
trunk/contrib/perl/t/op/concat.t
trunk/contrib/perl/t/op/lc_user.t
trunk/contrib/perl/t/op/magic_phase.t
trunk/contrib/perl/t/op/pat.t
trunk/contrib/perl/t/op/pat_thr.t
trunk/contrib/perl/t/op/qq.t
trunk/contrib/perl/t/op/qr_gc.t
trunk/contrib/perl/t/op/qrstack.t
trunk/contrib/perl/t/op/re.t
trunk/contrib/perl/t/op/re_tests
trunk/contrib/perl/t/op/reg_email.t
trunk/contrib/perl/t/op/reg_email_thr.t
trunk/contrib/perl/t/op/reg_fold.t
trunk/contrib/perl/t/op/reg_mesg.t
trunk/contrib/perl/t/op/reg_namedcapture.t
trunk/contrib/perl/t/op/reg_nc_tie.t
trunk/contrib/perl/t/op/reg_pmod.t
trunk/contrib/perl/t/op/reg_posixcc.t
trunk/contrib/perl/t/op/reg_unsafe.t
trunk/contrib/perl/t/op/regexp.t
trunk/contrib/perl/t/op/regexp_noamp.t
trunk/contrib/perl/t/op/regexp_notrie.t
trunk/contrib/perl/t/op/regexp_qr.t
trunk/contrib/perl/t/op/regexp_qr_embed.t
trunk/contrib/perl/t/op/regexp_qr_embed_thr.t
trunk/contrib/perl/t/op/regexp_trielist.t
trunk/contrib/perl/t/op/regexp_unicode_prop.t
trunk/contrib/perl/t/op/regexp_unicode_prop_thr.t
trunk/contrib/perl/t/op/rxcode.t
trunk/contrib/perl/t/op/subst.t
trunk/contrib/perl/t/op/substT.t
trunk/contrib/perl/t/op/subst_amp.t
trunk/contrib/perl/t/op/subst_wamp.t
trunk/contrib/perl/t/op/substr.t
trunk/contrib/perl/t/op/turkish.t
trunk/contrib/perl/t/op/while_readdir.t
trunk/contrib/perl/t/pod/
trunk/contrib/perl/t/porting/buildtoc.t
trunk/contrib/perl/t/re/substr.t
trunk/contrib/perl/t/re/substr_thr.t
trunk/contrib/perl/t/run/switchPx.aux
trunk/contrib/perl/t/run/switchPx.t
trunk/contrib/perl/utils/dprofpp.PL
trunk/contrib/perl/uts/
trunk/contrib/perl/vmesa/
trunk/contrib/perl/vms/sockadapt.c
trunk/contrib/perl/vms/sockadapt.h
trunk/contrib/perl/vos/syslog.h
trunk/contrib/perl/win32/config.bc
trunk/contrib/perl/win32/config.gc64
trunk/contrib/perl/win32/config.gc64nox
trunk/contrib/perl/win32/config.vc64
trunk/contrib/perl/win32/config_H.bc
trunk/contrib/perl/win32/config_H.gc64
trunk/contrib/perl/win32/config_H.gc64nox
trunk/contrib/perl/win32/config_H.vc64
trunk/contrib/perl/win32/genmk95.pl
trunk/contrib/perl/win32/mdelete.bat
trunk/contrib/perl/win32/sync_ext.pl
Deleted: trunk/contrib/perl/README.beos
===================================================================
--- trunk/contrib/perl/README.beos 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/README.beos 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,109 +0,0 @@
-If you read this file _as_is_, just ignore the funny characters you see.
-It is written in the POD format (see pod/perlpod.pod) which is specially
-designed to be readable as is.
-
-=head1 NAME
-
-README.beos - Perl version 5.8+ on BeOS
-
-=head1 DESCRIPTION
-
-This file contains instructions how to build Perl under BeOS and lists
-known problems.
-
-=head1 BUILD AND INSTALL
-
-=head2 Requirements
-
-I have built and tested Perl 5.8.6 and 5.9.1 under BeOS R5 x86 net server.
-I can't say anything with regard to PPC. Since Perl 5.8.0 had been released
-for BeOS BONE, I suspect, there is a good chance, that it still compiles on
-a BONE system. The only change I've made, that affects BONE systems is the
-recognition of whether it is a BONE system or not in C<hints/beos.sh>. Now
-network socket support should remain enabled on BONE systems. This might
-as well break the build, though.
-
-As more recent versions of autoconf require flock() support, I wrote a flock()
-emulation (flock_server) and released it on BeBits:
-
- http://www.bebits.com/app/4030
-
-If you want to build a Perl with flock() support, you have to install this
-package first.
-
-=head2 Configure
-
-With flock() support:
-
- CFLAGS=-I/path/to/flock/server/headers ./configure.gnu \
- --prefix=/boot/home/config
-
-Replace C</path/to/flock/server/headers> with the path to the directory
-containing the C<flock.h> header.
-
-Without flock() support:
-
- ./configure.gnu --prefix=/boot/home/config
-
-=head2 Build
-
-With flock() support:
-
- make LDLOADLIBS="-lnet -lflock"
-
-Without flock() support:
-
- make LDLOADLIBS="-lnet"
-
-C<-lnet> is needed on net server systems only and if the compiler doesn't
-add it automatically (Be's R5 gcc does, Oliver Tappe's gcc 2.95.3 does not).
-
-=head2 Install
-
-Install all perl files:
-
- make install
-
-Create a symlink for libperl:
-
- cd ~/config/lib; ln -s perl5/5.8.6/BePC-beos/CORE/libperl.so .
-
-Replace C<5.8.6> with your respective version of Perl.
-
-=head1 KNOWN PROBLEMS
-
-=over 4
-
-=item *
-
-Network socket support is disabled for BeOS R5 net server. I didn't dare yet
-to try enabling it and see what problems occur.
-
-=item *
-
-The LFS (large file support) tests (C<t/op/lfs> and C<xt/Fcntl/t/syslfs>) are
-disabled as seeking beyond 2 GB is broken according to jhi at iki.fi who was the
-last one checking the BeOS port and updating this file before me. Haven't
-checked this myself.
-
-=item *
-
-The C<t/io/fflush> test fails at #6. As far as I can tell, this is caused by
-a bug in the BeOS pipes implementation that occurs when starting other child
-processes. In the particular test case a C<system("perl -e 0")> flushes the
-stdout pipe of another child process.
-
-=item *
-
-The C<ext/POSIX/t/waitpid> test fails at #1. After all child processes are
-gone BeOS' waitpid(-1,...) returns 0 instead of -1 (as it should). No idea
-how to fix this.
-
-=back
-
-=head1 CONTACT
-
-For BeOS specifics problems feel free to mail to:
-Ingo Weinhold <bonefish at cs.tu-berlin.de>
-
-Last update: 2004-12-16
Deleted: trunk/contrib/perl/README.epoc
===================================================================
--- trunk/contrib/perl/README.epoc 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/README.epoc 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,154 +0,0 @@
-If you read this file _as_is_, just ignore the funny characters you
-see. It is written in the POD format (see pod/perlpod.pod) which is
-specially designed to be readable as is.
-
-=head1 NAME
-
-README.epoc - Perl for EPOC
-
-=head1 SYNOPSIS
-
-Perl 5 README file for the EPOC Release 5 operating system.
-
-=head1 INTRODUCTION
-
-EPOC is an OS for palmtops and mobile phones. For more information look
-at: L<http://www.symbian.com/>
-
-This is a port of perl to the epocemx SDK by Eberhard Mattes, which
-itself uses the SDK by symbian. Essentially epocemx it is a POSIX
-look alike environment for the EPOC OS. For more information look at:
-L<http://epocemx.sourceforge.net/>
-
-perl and epocemx runs on Epoc Release 5 machines: Psion 5mx, 5mx Pro,
-Psion Revo, Psion Netbook and on the Ericsson M128. It may run on Epoc
-Release 3 Hardware (Series 5 classic), too. For more information about
-this hardware please refer to L<http://www.psion.com/>
-
-Vendors which like to have support for their devices are free to send
-me a sample.
-
-=head1 INSTALLING PERL ON EPOC
-
-You can download a ready-to-install version from
-L<http://www.oflebbe.de/perl/perl5.html>
-
-You will need at least ~6MB free space in order to install and run perl.
-
-Please install the emxusr.sis package from
-L<http://epocemx.sourceforge.net/> first.
-
-Install perl.sis on the EPOC machine. If you do not know how to do
-that, consult your PsiWin documentation.
-
-Perl itself and its standard library is using 4 MB disk space.
-Unicode support and some other modules are left out. (For details,
-please look into epoc/createpkg.pl). If you like to use these modules,
-you are free to copy them from a current perl release.
-
-=head1 STARTING PERL ON EPOC
-
-Please use the epocemx shell to start perl. perl integrates with the
-conventions of epocemx.
-
-=head2 Features of Perl on Epoc
-
-The built-in function EPOC::getcwd returns the current directory.
-
-=head2 Restrictions of Perl on Epoc
-
-Features are left out, because of restrictions of the POSIX support in
-EPOC:
-
-=over 4
-
-=item *
-
-socket IO is only implemented poorly. You can only use sysread and
-syswrite on them. The commands read, write, print, <> do not work for
-sockets. This may change iff epocemx supports sockets.
-
-=item *
-
-kill, alarm and signals. Do not try to use them. This may be
-impossible to implement on EPOC.
-
-=item *
-
-select is missing.
-
-=item *
-
-binmode does not exist. (No CR LF to LF translation for text files)
-
-=item *
-
-EPOC does not handle the notion of current drive and current
-directory very well (i.e. not at all, but it tries hard to emulate
-one). See PATH.
-
-=item *
-
-Heap is limited to 4MB.
-
-=item *
-
-Dynamic loading is not implemented.
-
-=back
-
-=head2 Compiling Perl 5 on the EPOC cross compiling environment
-
-Sorry, this is far too short.
-
-=over 4
-
-=item *
-
-You will need the epocemx SDK from Eberhard Mattes.
-
-=item *
-
-Get the Perl sources from your nearest CPAN site.
-
-=item *
-
-Unpack the sources.
-
-=item *
-
-Build a native perl from this sources... Make sure to save the
-miniperl executable as miniperl.native.
-
-Start again from scratch
-
- cp epoc/* .
- ./Configure -S
- make
- cp miniperl.native miniperl
- touch miniperl.exe
- make
- perl createpkg.pl
-
- emxsis perl.pkg perl.sis
-
-=back
-
-=head1 SUPPORT STATUS OF PERL ON EPOC
-
-I'm offering this port "as is". You can ask me questions, but I can't
-guarantee I'll be able to answer them. Since the port to epocemx is
-quite new, please check the web for updates first.
-
-Very special thanks to Eberhard Mattes for epocemx.
-
-=head1 AUTHOR
-
-Olaf Flebbe <olaf at oflebbe.de>
-L<http://www.oflebbe.de/perl/perl5.html>
-
-=head1 LAST UPDATE
-
-2003-01-18
-
-=cut
Deleted: trunk/contrib/perl/README.mpeix
===================================================================
--- trunk/contrib/perl/README.mpeix 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/README.mpeix 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,711 +0,0 @@
-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
-
-README.mpeix - Perl/iX for HP e3000 MPE
-
-=head1 SYNOPSIS
-
- http://www.bixby.org/mark/perlix.html
- Perl language for MPE
- Last updated January 12, 2006 @ 2100 UTC
-
-
-=head1 NOTE
-
-This is a podified version of what used to be on the above-mentioned web page,
-podified by Jarkko Hietaniemi 2001-Jan-01.
-
-=head1 What's New in Perl for MPE/iX
-
-January 12, 2006
-
-=over 4
-
-=item *
-
-Updated for perl-5.8.8 and perl-5.9.3 by Ken Hirsch.
-
-Simplified the build process by using the MPEAUTOCONF
-functionality in Mark Klein's ld.
-
-If you build this from scratch, make sure you have a version
-of ld which supports it. In the shell, type
-
- ld --help
- and look for AUTOCONF or MPEAUTOCONF near the bottom
-
- or do this:
- ld --help 2>&1 | grep AUTOCONF
-
-If you see don't see AUTOCONF or MPEAUTOCONF, make sure you get a new
-version.
-
-You also do not have to use mpeix/relink after building, so the
-recommend sequence is:
-
- ./Configure -de
-
- # or ./Configure -de -Dusedevel
- # if you're building a development version
-
- make
- make test
- # if you run this in a job, do "make test_notty"
-
- make install
-
-Be prepared for a wait. These take much longer on MPE/iX than on a Unix
-system, because of a slow forking, mostly. On a lightly-loaded HP3000
-Series 979 running MPE/iX 7.5:
-
- Configure: 1 hour
- make: 1 hour 15 minutes
- make test 1 hour 45 minutes
-
-Various socket problems were fixed in mpeix.c.
-
-Mark Klein provided a fixed sigsetjmp (that works with dynamic
-libraries) in mpeix_setjmp.c
-
-=back
-
-June 1, 2000
-
-=over 4
-
-=item *
-
-Rebuilt to be compatible with mod_perl. If you plan on using
-mod_perl, you MUST download and install this version of Perl/iX!
-
-=item *
-
-uselargefiles="undef": not available in MPE for POSIX files yet.
-
-=item *
-
-Now bundled with various add-on packages:
-
-=over 8
-
-=item *
-
-libnet (as seen on CPAN)
-
-=item *
-
-libwww-perl (LWP) which lets Perl programs behave like web browsers:
-
-=item *
-
-mod_perl (just the perl portion; the actual DSO will be released
-soon with Apache/iX 1.3.12 from bixby.org). This module allows you to
-write high performance persistent Perl CGI scripts and all sorts of
-cool things. (L<http://perl.apache.org/>)
-
-and much much more hiding under /PERL/PUB/.cpan/
-
-=item *
-
-The CPAN module now works for automatic downloading and
-installing of add-on packages:
-
- 1. export FTP_PASSIVE=1
- 2. perl -MCPAN -e shell
- 3. Ignore any terminal I/O related complaints!
-
-(L<http://search.cpan.org/dist/CPAN/>)
-
-=back
-
-=back
-
-May 20, 2000
-
-=over 4
-
-=item *
-
-Updated to version 5.6.0. Builds straight out of the box on MPE/iX.
-
-=item *
-
-Perl's getpwnam() function which had regressed to being
-unimplemented on MPE is now implemented once again.
-
-=back
-
-September 17, 1999
-
-=over 4
-
-=item *
-
-Migrated from cccd.edu to bixby.org.
-
-=back
-
-=head1 Welcome to Perl/iX
-
-This is the official home page for the HP e3000 MPE/iX
-( L<http://www.hp.com/go/e3000> ) port of the Perl scripting
-language ( L<http://www.perl.com/> ) which gives you all of the power of C,
-awk, sed, and sh in a single language. Check here for the latest news,
-implemented functionality, known bugs, to-do list, etc. Status reports
-about major milestones will also be posted to the HP3000-L mailing list
-( L<http://www.lsoft.com/scripts/wl.exe?SL1=HP3000-L&H=RAVEN.UTC.EDU> ) and
-its associated gatewayed newsgroup comp.sys.hp.mpe.
-
-I'm doing this port because I can't live without Perl on the Unix
-machines that I administer, and I want to have the same power
-available to me on MPE.
-
-Please send your comments, questions, and bug reports directly to me,
-Mark Bixby ( L<http://www.bixby.org/mark/> ). Or just post them to HP3000-L.
-
-The platform I'm using to do this port is an HP 3000 957RX running
-MPE/iX 6.0 and using the GNU gcc C compiler
-( L<http://jazz.external.hp.com/src/gnu/gnuframe.html> ).
-
-The combined porting wisdom from all of my ports can be found in my
-MPE/iX Porting Guide (L<http://www.bixby.org/mark/porting.html>).
-
-IMPORTANT NOTICE: Yes, I do work for the HP CSY R&D lab, but ALL of
-the software you download from bixby.org is my personal freeware that
-is NOT supported by HP.
-
-=head1 System Requirements for Perl/iX
-
-=over 4
-
-=item *
-
-MPE/iX 5.5 or later. This version of Perl/iX does NOT run on
-MPE/iX 5.0 or earlier, nor does it run on "classic" MPE/V machines.
-
-=item *
-
-If you wish to recompile Perl, you must install both GNUCORE and
-GNUGCC from jazz (L<http://jazz.external.hp.com/src/gnu/gnuframe.html>).
-
-=item *
-
-Perl/iX will be happier on MPE/iX 5.5 if you install the MPEKX40B
-extended POSIX filename characters patch, but this is optional.
-
-=item *
-
-Patch LBCJXT6A is required on MPE/iX 5.5 machines in order to
-prevent Perl/iX from dying with an unresolved external reference
-to _getenv_libc.
-
-=item *
-
-If you will be compiling Perl/iX yourself, you will also need
-Syslog/iX ( L<http://www.bixby.org/mark/syslogix.html> ) and the
-/BIND/PUB/include and /BIND/PUB/lib portions of BIND/iX
-( L<http://www.bixby.org/mark/bindix.html> ).
-
-=back
-
-=head1 How to Obtain Perl/iX
-
-=over 4
-
-=item 1.
-
-Download Perl using either FTP.ARPA.SYS or some other client
-
-=item 2.
-
-Extract the installation script
-
-=item 3.
-
-Edit the installation script
-
-=item 4.
-
-Run the installation script
-
-=item 5.
-
-Convert your *.a system archive libraries to *.sl shared libraries
-
-=back
-
-Download Perl using FTP.ARPA.SYS from your HP 3000 (the preferred
-method).....
-
- :HELLO MANAGER.SYS
- :XEQ FTP.ARPA.SYS
- open ftp.bixby.org
- anonymous
- your at email.address
- bytestream
- cd /pub/mpe
- get perl-5.6.0-mpe.tar.Z /tmp/perl.tar.Z;disc=2147483647
- exit
-
-.....Or download using some other generic web or ftp client (the alternate
-method)
-
-Download the following files (make sure that you use "binary mode" or
-whatever client feature that is 8-bit clean):
-
-=over 4
-
-=item *
-
-Perl from
-
- http://www.bixby.org/ftp/pub/mpe/perl-5.6.0-mpe.tar.Z
-
-or
-
- ftp://ftp.bixby.org/pub/mpe/perl-5.6.0-mpe.tar.Z
-
-=item *
-
-Upload those files to your HP 3000 in an 8-bit clean bytestream manner to:
-
- /tmp/perl.tar.Z
-
-=item *
-
-Then extract the installation script (after both download methods)
-
- :CHDIR /tmp
- :XEQ TAR.HPBIN.SYS 'xvfopz /tmp/perl.tar.Z INSTALL'
-
-=item *
-
-Edit the installation script
-
-Examine the accounting structure creation commands and modify if
-necessary (adding additional capabilities, choosing a non-system
-volume set, etc).
-
- :XEQ VI.HPBIN.SYS /tmp/INSTALL
-
-=item *
-
-Run the installation script.
-
-The accounting structure will be created and then all files will be
-extracted from the archive.
-
- :XEQ SH.HPBIN.SYS /tmp/INSTALL
-
-=item *
-
-Convert your *.a system archive libraries to *.sl shared libraries
-
-You only have to do this ONCE on your MPE/iX 5.5 machine in order to
-convert /lib/lib*.a and /usr/lib/lib*.a libraries to their *.sl
-equivalents. This step should not be necessary on MPE/iX 6.0 or later
-machines because the 6.0 or later update process does it for you.
-
- :XEQ SH.HPBIN.SYS /PERL/PUB/LIBSHP3K
-
-=back
-
-=head1 Perl/iX Distribution Contents Highlights
-
-=over 4
-
-=item README
-
-The file you're reading now.
-
-=item INSTALL
-
-Perl/iX Installation script.
-
-=item LIBSHP3K
-
-Script to convert *.a system archive libraries to *.sl shared libraries.
-
-=item PERL
-
-Perl NMPRG executable. A version-numbered backup copy also
-exists. You might wish to "ln -s /PERL/PUB/PERL /usr/local/bin/perl".
-
-=item .cpan/
-
-Much add-on source code downloaded with the CPAN module.
-
-=item lib/
-
-Perl libraries, both core and add-on.
-
-=item man/
-
-Perl man page documentation.
-
-=item public_html/feedback.cgi
-
-Sample feedback CGI form written in Perl.
-
-=item src/perl-5.6.0-mpe
-
-Source code.
-
-=back
-
-=head1 How to Compile Perl/iX
-
-=over 4
-
-=item 1.
-
-cd src/perl-5.6.0-mpe
-
-=item 2.
-
-Read the INSTALL file for the official instructions
-
-=item 3.
-
-./Configure -d
-
-=item 4.
-
-make
-
-=item 5.
-
-./mpeix/relink
-
-=item 6.
-
-make test (expect approximately 15 out of 11306 subtests to fail,
-mostly due to MPE not supporting hard links, UDP socket problems,
-and handling exit() return codes improperly)
-
-=item 7.
-
-make install
-
-=item 8.
-
-Optionally create symbolic links that point to the Perl
-executable, i.e. ln -s /PERL/PUB/PERL /usr/local/bin/perl
-
-=back
-
-The summary test results from "cd t; ./perl -I../lib harness":
-
- Failed Test Status Wstat Total Fail Failed List of failed
- ---------------------------------------------------------------------------
- io/fs.t 29 8 27.59% 2-5, 7-9, 11
- io/openpid.t 10 1 10.00% 7
- lib/io_sock.t 14 1 7.14% 13
- lib/io_udp.t 7 2 28.57% 3, 5
- lib/posix.t 27 1 3.70% 12
- op/lex_assign.t 187 1 0.53% 13
- op/stat.t 58 1 1.72% 3
- 15 tests and 94 subtests skipped.
- Failed 7/236 test scripts, 97.03% okay. 15/11306 subtests failed, 99.87% okay.
-
-=head1 Getting Started with Perl/iX
-
-Create your Perl script files with "#!/PERL/PUB/perl" (or an
-equivalent symbolic link) as the first line. Use the chmod command to
-make sure that your script has execute permission. Run your script!
-
-Be sure to take a look at the CPAN module list
-( L<http://www.cpan.org/CPAN.html> ). A wide variety of free Perl software
-is available. You can automatically download these packages by using
-the CPAN module ( L<http://search.cpan.org/dist/CPAN/> ).
-
-=head1 MPE/iX Implementation Considerations
-
-There some minor functionality issues to be aware of when comparing
-Perl for Unix (Perl/UX) to Perl/iX:
-
-=over 4
-
-=item *
-
-MPE gcc/ld doesn't properly support linking NMPRG executables against
-NMXL dynamic libraries, so you must manually run mpeix/relink after
-each re-build of Perl.
-
-=item *
-
-Perl/iX File::Copy will use MPE's /bin/cp command to copy files by
-name in order to preserve file attributes like file code.
-
-=item *
-
-MPE (and thus Perl/iX) lacks support for setgrent(), endgrent(),
-setpwent(), endpwent().
-
-=item *
-
-MPE (and thus Perl/iX) lacks support for hard links.
-
-=item *
-
-MPE requires GETPRIVMODE() in order to bind() to ports less than 1024.
-Perl/iX will call GETPRIVMODE() automatically on your behalf if you
-attempt to bind() to these low-numbered ports. Note that the Perl/iX
-executable and the PERL account do not normally have CAP=PM, so if you
-will be bind()-ing to these privileged ports, you will manually need
-to add PM capability as appropriate.
-
-=item *
-
-MPE requires that you bind() to an IP address of zero. Perl/iX
-automatically replaces the IP address that you pass to bind() with
-a zero.
-
-=item *
-
-MPE requires GETPRIVMODE() in order to setuid(). There are too many
-calls to setuid() within Perl/iX, so I have not attempted an automatic
-GETPRIVMODE() solution similar to bind().
-
-=back
-
-=head1 Known Perl/iX Bugs Under Investigation
-
-None.
-
-=head1 Perl/iX To-Do List
-
-=over 4
-
-=item *
-
-Make setuid()/setgid() support work.
-
-=item *
-
-Make sure that fcntl() against a socket descriptor is redirected to sfcntl().
-
-=item *
-
-Add support for Berkeley DB once I've finished porting Berkeley DB.
-
-=item *
-
-Write an MPE XS extension library containing miscellaneous important
-MPE functions like GETPRIVMODE(), GETUSERMODE(), and sfcntl().
-
-=back
-
-=head1 Perl/iX Change History
-
-May 6, 1999
-
-=over 4
-
-=item *
-
-Patch LBCJXT6A is required on MPE/iX 5.5 machines in order to prevent
-Perl/iX from dying with an unresolved external reference to _getenv_libc.
-
-=back
-
-April 7, 1999
-
-=over 4
-
-=item *
-
-Updated to version 5.005_03.
-
-=item *
-
-The official source distribution once again compiles "straight out
-of the box" for MPE.
-
-=item *
-
-The current incarnation of the 5.5 POSIX filename extended
-characters patch is now MPEKX40B.
-
-=item *
-
-The LIBSHP3K *.a -> *.sl library conversion script is now included
-as /PERL/PUB/LIBSHP3K.
-
-=back
-
-November 20, 1998
-
-=over 4
-
-=item *
-
-Updated to version 5.005_02.
-
-=item *
-
-Fixed a DynaLoader bug that was unable to load symbols from relative
-path name libraries.
-
-=item *
-
-Fixed a .xs compilation bug where the mpeixish.sh include file wasn't
-being installed into the proper directory.
-
-=item *
-
-All bugfixes will be submitted back to the official Perl developers.
-
-=item *
-
-The current incarnation of the POSIX filename extended characters
-patch is now MPEKXJ3A.
-
-=back
-
-August 14, 1998
-
-=over 4
-
-=item *
-
-The previous POSIX filename extended characters patch MPEKX44C has
-been superseded by MPEKXB5A.
-
-=back
-
-August 7, 1998
-
-=over 4
-
-=item *
-
-The previous POSIX filename extended characters patch MPEKX76A has
-been superseded by MPEKX44C.
-
-=back
-
-July 28, 1998
-
-=over 4
-
-=item *
-
-Updated to version 5.005_01.
-
-=back
-
-July 23, 1998
-
-=over 4
-
-=item *
-
-Updated to version 5.005 (production release). The public
-freeware sources are now 100% MPE-ready "straight out of the box".
-
-=back
-
-July 17, 1998
-
-=over 4
-
-=item *
-
-Updated to version 5.005b1 (public beta release). The public
-freeware sources are now 99.9% MPE-ready. By installing and
-testing this beta on your own HP3000, you will be helping to
-insure that the final release of 5.005 will be 100% MPE-ready and
-100% bug free.
-
-=item *
-
-My MPE binary release is now extracted using my standard INSTALL script.
-
-=back
-
-July 15, 1998
-
-=over 4
-
-=item *
-
-Changed startperl to #!/PERL/PUB/perl so that Perl will recognize
-scripts more easily and efficiently.
-
-=back
-
-July 8, 1998
-
-=over 4
-
-=item *
-
-Updated to version 5.004_70 (internal developer release) which is now
-MPE-ready. The next public freeware release of Perl should compile
-"straight out of the box" on MPE. Note that this version of Perl/iX
-was strictly internal to me and never publicly released. Note that
-[21]BIND/iX is now required (well, the include files and libbind.a) if
-you wish to compile Perl/iX.
-
-=back
-
-November 6, 1997
-
-=over 4
-
-=item *
-
-Updated to version 5.004_04. No changes in MPE-specific functionality.
-
-=back
-
-October 16, 1997
-
-=over 4
-
-=item *
-
-Added Demos section to the Perl/iX home page so you can see some
-sample Perl applications running on my 3000.
-
-=back
-
-October 3, 1997
-
-=over 4
-
-=item *
-
-Added System Requirements section to the Perl/iX home page just so the
-prerequisites stand out more. Various other home page tweaks.
-
-=back
-
-October 2, 1997
-
-=over 4
-
-=item *
-
-Initial public release.
-
-=back
-
-September 1997
-
-=over 4
-
-=item *
-
-Porting begins.
-
-=back
-
-=head1 AUTHOR
-
-Mark Bixby, L<http://www.bixby.org/mark/>
-
Deleted: trunk/contrib/perl/README.uts
===================================================================
--- trunk/contrib/perl/README.uts 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/README.uts 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,107 +0,0 @@
-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
-
-perluts - Perl under UTS
-
-=head1 SYNOPSIS
-
-This document can be read I<as is>: as F<README.uts>, or you
-can read it after you build your package using "man perluts".
-
-The purpose is to help you build Perl for UTS, which, if you
-follow these instructions, should be easy, and result in
-a solidly working installation.
-
-=head1 DESCRIPTION
-
-Perl 5.7.2 (Developmental) or Perl 5.8.x (forthcoming) for UTS
-
-=head1 BUILDING PERL ON UTS
-
-NOTE: Some sites have redefined the way uname works, and if yours
-does this, special steps must be taken so that Configure can
-recognize your system as a UTS system. To see if you are in
-this category, issue the command "uname -a". It should look
-something like:
-
- uts juno 4 4.4 9672 370
-
-At any rate, the first field should be "uts". If this is not
-the case; supposing it is, say telcoUTS, create a script, uts/uname
-(i.e. uname, in the subdirectory "uts" of the main Perl source dir):
- # uname
- /usr/bin/uname "$@" | sed -e 's/^telcoUTS/uts/'
-
-and when you execute Configure, do it as below, except for adding
-PATH=uts:$PATH as a prefix. I.e. do:
-
- PATH=uts:$PATH ./Configure ...
-
-There is no need to do an interactive configure, just type
-
- ./Configure -de [-Dusedevel] [-Doptimize=-g ] 2>&1 | tee Conf.out
-
-"-Dusedevel" may be required to configure Perl 5.7.2 non-interactively.
-Use -Doptimize=-g if you want to run Perl under sdb or gdb, OR
-if you want to be able to use the -D command line flags to perl,
-which are occasionally useful in debugging perl scripts.
-
-In this and the following steps, the "2>&1 | tee XXX.out" records all
-output from the process, which will be useful if anything unexpected
-goes wrong.
-
-Then do the compilation with
-
- make 2>&1 | tee make.out
-
-Finally, test using
-
- make test 2>&1 | tee make-test.out
-
-In the output, the only failures you should see should look like:
-
- lib/Math/BigInt/t/bigfltpm.........Use of uninitialized value ...
- FAILED at test 57
- lib/Math/BigInt/t/bigintc..........ok
- lib/Math/BigInt/t/bigintpm.........FAILED at test 204
- lib/Math/BigInt/t/mbimbf...........Use of uninitialized value ...
- Illegal division by zero at ../lib/Math/BigInt/Calc.pm line 314.
- FAILED at test 71
- lib/Math/Complex...................exp: OVERFLOW
- FAILED at test 250
- lib/Math/Trig......................exp: OVERFLOW
- ok
- lib/Memoize/t/array................ok
- ...
- lib/Net/protoent...................ok
- lib/Net/servent....................FAILED at test 0
-
-This means that everything passes except for some problems in the
-packages "Math::BigInt", "Math::Complex", and "Math::Trig".
-The lib/Net/servent failure seems to be a bug in the test
-program. To confirm this, from the main Perl source dir, do:
-
- LD_LIBRARY_PATH=`pwd` ./perl -Ilib lib/Net/servent.t
-
-and it should output
-
- 1..3
- ok 1
- ok 2
- ok 3
-
-=head1 Installing the built perl on UTS
-
-Run the command "make install"
-
-=head1 AUTHOR
-
- Hal Morris
- UTS Global LLC
- email: hom00 at utsglobal.com
-
-=cut
-
Deleted: trunk/contrib/perl/README.vmesa
===================================================================
--- trunk/contrib/perl/README.vmesa 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/README.vmesa 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,140 +0,0 @@
-
-This document is written in pod format hence there are punctuation
-characters in odd places. Do not worry, you've apparently got
-the ASCII->EBCDIC translation worked out correctly. You can read
-more about pod in pod/perlpod.pod or the short summary in the
-INSTALL file.
-
-=head1 NAME
-
-README.vmesa - building and installing Perl for VM/ESA.
-
-=head1 SYNOPSIS
-
-This document will help you Configure, build, test and install Perl
-on VM/ESA.
-
-=head1 DESCRIPTION
-
-This is a fully ported perl for VM/ESA 2.3.0. It may work on
-other versions, but that's the one we've tested it on.
-
-If you've downloaded the binary distribution, it needs to be
-installed below /usr/local. Source code distributions have an
-automated "make install" step that means you do not need to extract
-the source code below /usr/local (though that is where it will be
-installed by default). You may need to worry about the networking
-configuration files discussed in the last bullet below.
-
-=head2 Unpacking Perl Distribution on VM/ESA
-
-To extract an ASCII tar archive on VM/ESA, try this:
-
- pax -o to=IBM-1047,from=ISO8859-1 -r < latest.tar
-
-=head2 Setup Perl and utilities on VM/ESA
-
-GNU make for VM/ESA, which may be required for the build of perl,
-is available from:
-
-L<http://vm.marist.edu/~neale/vmoe.html>
-
-=head2 Configure Perl on VM/ESA
-
-Once you've unpacked the distribution, run Configure (see INSTALL for
-full discussion of the Configure options), and then run make, then
-"make test" then "make install" (this last step may require UID=0
-privileges).
-
-There is a "hints" file for vmesa that specifies the correct values
-for most things. Some things to watch out for are:
-
-=over 4
-
-=item *
-
-this port does support dynamic loading but it's not had much testing
-
-=item *
-
-Don't turn on the compiler optimization flag "-O". There's
-a bug in the compiler (APAR PQ18812) that generates some bad code
-the optimizer is on.
-
-=item *
-
-As VM/ESA doesn't fully support the fork() API programs relying on
-this call will not work. I've replaced fork()/exec() with spawn()
-and the standalone exec() with spawn(). This has a side effect when
-opening unnamed pipes in a shell script: there is no child process
-generated under.
-
-=item *
-
-At the moment the hints file for VM/ESA basically bypasses all of the
-automatic configuration process. This is because Configure relies on:
-1. The header files living in the Byte File System (you could put the
-there if you want); 2. The C preprocessor including the #include
-statements in the preprocessor output (.i) file.
-
-=back
-
-=head2 Testing Anomalies of Perl on VM/ESA
-
-The "make test" step runs a Perl Verification Procedure, usually before
-installation. As the 5.6.1 kit was being assembled
-the following "failures" were known to appear on some machines
-during "make test" (mostly due to ASCII vs. EBCDIC conflicts),
-your results may differ:
-
-[the list of failures being compiled]
-
-=head2 Usage Hints for Perl on VM/ESA
-
-When using perl on VM/ESA please keep in mind that the EBCDIC and ASCII
-character sets are different. Perl builtin functions that may behave
-differently under EBCDIC are mentioned in the perlport.pod document.
-
-OpenEdition (UNIX System Services) does not (yet) support the #! means
-of script invocation.
-See:
-
- head `whence perldoc`
-
-for an example of how to use the "eval exec" trick to ask the shell to
-have perl run your scripts for you.
-
-=head1 AUTHORS
-
-Neale Ferguson.
-
-=head1 SEE ALSO
-
-L<INSTALL>, L<perlport>, L<perlebcdic>.
-
-=head2 Mailing list for Perl on VM/ESA
-
-If you are interested in the VM/ESA, z/OS (formerly known as OS/390)
-and POSIX-BC (BS2000) ports of Perl then see the perl-mvs mailing list.
-To subscribe, send an empty message to perl-mvs-subscribe at perl.org.
-
-See also:
-
-L<http://lists.perl.org/showlist.cgi?name=perl-mvs>
-
-There are web archives of the mailing list at:
-
-=over 4
-
-=item *
-
-L<http://www.xray.mpe.mpg.de/mailing-lists/perl-mvs/>
-
-=item *
-
-L<http://archive.develooper.com/perl-mvs@perl.org/>
-
-=back
-
-=cut
-
Deleted: trunk/contrib/perl/cpan/Compress-Raw-Bzip2/pod/FAQ.pod
===================================================================
--- trunk/contrib/perl/cpan/Compress-Raw-Bzip2/pod/FAQ.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/Compress-Raw-Bzip2/pod/FAQ.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,104 +0,0 @@
-
-=head1 NAME
-
-Compress::Raw::Bzip2::FAQ -- Frequently Asked Questions about Compress::Raw::Bzip2
-
-=head1 DESCRIPTION
-
-Common questions answered.
-
-=head2 Compatibility with Unix compress/uncompress.
-
-This module is not compatible with Unix C<compress>.
-
-If you have the C<uncompress> program available, you can use this to read
-compressed files
-
- open F, "uncompress -c $filename |";
- while (<F>)
- {
- ...
-
-Alternatively, if you have the C<gunzip> program available, you can use
-this to read compressed files
-
- open F, "gunzip -c $filename |";
- while (<F>)
- {
- ...
-
-and this to write compress files, if you have the C<compress> program
-available
-
- open F, "| compress -c $filename ";
- print F "data";
- ...
- close F ;
-
-=head2 Accessing .tar.Z files
-
-See previous FAQ item.
-
-If the C<Archive::Tar> module is installed and either the C<uncompress> or
-C<gunzip> programs are available, you can use one of these workarounds to
-read C<.tar.Z> files.
-
-Firstly with C<uncompress>
-
- use strict;
- use warnings;
- use Archive::Tar;
-
- open F, "uncompress -c $filename |";
- my $tar = Archive::Tar->new(*F);
- ...
-
-and this with C<gunzip>
-
- use strict;
- use warnings;
- use Archive::Tar;
-
- open F, "gunzip -c $filename |";
- my $tar = Archive::Tar->new(*F);
- ...
-
-Similarly, if the C<compress> program is available, you can use this to
-write a C<.tar.Z> file
-
- use strict;
- use warnings;
- use Archive::Tar;
- use IO::File;
-
- my $fh = new IO::File "| compress -c >$filename";
- my $tar = Archive::Tar->new();
- ...
- $tar->write($fh);
- $fh->close ;
-
-=head1 SEE ALSO
-
-L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
-
-L<Compress::Zlib::FAQ|Compress::Zlib::FAQ>
-
-L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
-L<Archive::Tar|Archive::Tar>,
-L<IO::Zlib|IO::Zlib>
-
-=head1 AUTHOR
-
-This module was written by Paul Marquess, F<pmqs at cpan.org>.
-
-=head1 MODIFICATION HISTORY
-
-See the Changes file.
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright (c) 2005-2011 Paul Marquess. All rights reserved.
-
-This program is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
-
Deleted: trunk/contrib/perl/cpan/Compress-Raw-Zlib/pod/FAQ.pod
===================================================================
--- trunk/contrib/perl/cpan/Compress-Raw-Zlib/pod/FAQ.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/Compress-Raw-Zlib/pod/FAQ.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,127 +0,0 @@
-
-=head1 NAME
-
-Compress::Raw::Zlib::FAQ -- Frequently Asked Questions about Compress::Raw::Zlib
-
-=head1 DESCRIPTION
-
-Common questions answered.
-
-=head2 Compatibility with Unix compress/uncompress.
-
-This module is not compatible with Unix C<compress>.
-
-If you have the C<uncompress> program available, you can use this to read
-compressed files
-
- open F, "uncompress -c $filename |";
- while (<F>)
- {
- ...
-
-Alternatively, if you have the C<gunzip> program available, you can use
-this to read compressed files
-
- open F, "gunzip -c $filename |";
- while (<F>)
- {
- ...
-
-and this to write compress files, if you have the C<compress> program
-available
-
- open F, "| compress -c $filename ";
- print F "data";
- ...
- close F ;
-
-=head2 Accessing .tar.Z files
-
-See previous FAQ item.
-
-If the C<Archive::Tar> module is installed and either the C<uncompress> or
-C<gunzip> programs are available, you can use one of these workarounds to
-read C<.tar.Z> files.
-
-Firstly with C<uncompress>
-
- use strict;
- use warnings;
- use Archive::Tar;
-
- open F, "uncompress -c $filename |";
- my $tar = Archive::Tar->new(*F);
- ...
-
-and this with C<gunzip>
-
- use strict;
- use warnings;
- use Archive::Tar;
-
- open F, "gunzip -c $filename |";
- my $tar = Archive::Tar->new(*F);
- ...
-
-Similarly, if the C<compress> program is available, you can use this to
-write a C<.tar.Z> file
-
- use strict;
- use warnings;
- use Archive::Tar;
- use IO::File;
-
- my $fh = new IO::File "| compress -c >$filename";
- my $tar = Archive::Tar->new();
- ...
- $tar->write($fh);
- $fh->close ;
-
-=head2 Zlib Library Version Support
-
-By default C<Compress::Raw::Zlib> will build with a private copy of version
-1.2.5 of the zlib library. (See the F<README> file for details of
-how to override this behaviour)
-
-If you decide to use a different version of the zlib library, you need to be
-aware of the following issues
-
-=over 5
-
-=item *
-
-First off, you must have zlib 1.0.5 or better.
-
-=item *
-
-You need to have zlib 1.2.1 or better if you want to use the C<-Merge>
-option with C<IO::Compress::Gzip>, C<IO::Compress::Deflate> and
-C<IO::Compress::RawDeflate>.
-
-=back
-
-=head1 SEE ALSO
-
-L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
-
-L<Compress::Zlib::FAQ|Compress::Zlib::FAQ>
-
-L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
-L<Archive::Tar|Archive::Tar>,
-L<IO::Zlib|IO::Zlib>
-
-=head1 AUTHOR
-
-This module was written by Paul Marquess, F<pmqs at cpan.org>.
-
-=head1 MODIFICATION HISTORY
-
-See the Changes file.
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright (c) 2005-2011 Paul Marquess. All rights reserved.
-
-This program is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
-
Deleted: trunk/contrib/perl/cpan/Digest-SHA/src/hmac.c
===================================================================
--- trunk/contrib/perl/cpan/Digest-SHA/src/hmac.c 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/Digest-SHA/src/hmac.c 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,103 +0,0 @@
-/*
- * hmac.c: routines to compute HMAC-SHA-1/224/256/384/512 digests
- *
- * Ref: FIPS PUB 198 The Keyed-Hash Message Authentication Code
- *
- * Copyright (C) 2003-2011 Mark Shelor, All Rights Reserved
- *
- * Version: 5.61
- * Wed Mar 9 05:26:36 MST 2011
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "hmac.h"
-#include "sha.h"
-
-/* hmacopen: creates a new HMAC-SHA digest object */
-HMAC *hmacopen(int alg, unsigned char *key, unsigned int keylen)
-{
- unsigned int i;
- HMAC *h;
-
- SHA_newz(0, h, 1, HMAC);
- if (h == NULL)
- return(NULL);
- if ((h->isha = shaopen(alg)) == NULL) {
- SHA_free(h);
- return(NULL);
- }
- if ((h->osha = shaopen(alg)) == NULL) {
- shaclose(h->isha);
- SHA_free(h);
- return(NULL);
- }
- if (keylen <= h->osha->blocksize / 8)
- memcpy(h->key, key, keylen);
- else {
- if ((h->ksha = shaopen(alg)) == NULL) {
- shaclose(h->isha);
- shaclose(h->osha);
- SHA_free(h);
- return(NULL);
- }
- shawrite(key, keylen * 8, h->ksha);
- shafinish(h->ksha);
- memcpy(h->key, shadigest(h->ksha), h->ksha->digestlen);
- shaclose(h->ksha);
- }
- for (i = 0; i < h->osha->blocksize / 8; i++)
- h->key[i] ^= 0x5c;
- shawrite(h->key, h->osha->blocksize, h->osha);
- for (i = 0; i < h->isha->blocksize / 8; i++)
- h->key[i] ^= (0x5c ^ 0x36);
- shawrite(h->key, h->isha->blocksize, h->isha);
- memset(h->key, 0, sizeof(h->key));
- return(h);
-}
-
-/* hmacwrite: triggers a state update using data in bitstr/bitcnt */
-unsigned long hmacwrite(unsigned char *bitstr, unsigned long bitcnt, HMAC *h)
-{
- return(shawrite(bitstr, bitcnt, h->isha));
-}
-
-/* hmacfinish: computes final digest state */
-void hmacfinish(HMAC *h)
-{
- shafinish(h->isha);
- shawrite(shadigest(h->isha), h->isha->digestlen * 8, h->osha);
- shaclose(h->isha);
- shafinish(h->osha);
-}
-
-/* hmacdigest: returns pointer to digest (binary) */
-unsigned char *hmacdigest(HMAC *h)
-{
- return(shadigest(h->osha));
-}
-
-/* hmachex: returns pointer to digest (hexadecimal) */
-char *hmachex(HMAC *h)
-{
- return(shahex(h->osha));
-}
-
-/* hmacbase64: returns pointer to digest (Base 64) */
-char *hmacbase64(HMAC *h)
-{
- return(shabase64(h->osha));
-}
-
-/* hmacclose: de-allocates digest object */
-int hmacclose(HMAC *h)
-{
- if (h != NULL) {
- shaclose(h->osha);
- memset(h, 0, sizeof(HMAC));
- SHA_free(h);
- }
- return(0);
-}
Deleted: trunk/contrib/perl/cpan/Digest-SHA/src/hmac.h
===================================================================
--- trunk/contrib/perl/cpan/Digest-SHA/src/hmac.h 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/Digest-SHA/src/hmac.h 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,64 +0,0 @@
-/*
- * hmac.h: header file for HMAC-SHA-1/224/256/384/512 routines
- *
- * Ref: FIPS PUB 198 The Keyed-Hash Message Authentication Code
- *
- * Copyright (C) 2003-2011 Mark Shelor, All Rights Reserved
- *
- * Version: 5.61
- * Wed Mar 9 05:26:36 MST 2011
- *
- */
-
-#ifndef _INCLUDE_HMAC_H_
-#define _INCLUDE_HMAC_H_
-
-#include "sha.h"
-
-typedef struct {
- SHA *ksha;
- SHA *isha;
- SHA *osha;
- unsigned char key[SHA_MAX_BLOCK_BITS/8];
-} HMAC;
-
-#define _HMAC_STATE HMAC *h
-#define _HMAC_ALG int alg
-#define _HMAC_DATA unsigned char *bitstr, unsigned long bitcnt
-#define _HMAC_KEY unsigned char *key, unsigned int keylen
-
-HMAC *hmacopen (_HMAC_ALG, _HMAC_KEY);
-unsigned long hmacwrite (_HMAC_DATA, _HMAC_STATE);
-void hmacfinish (_HMAC_STATE);
-unsigned char *hmacdigest (_HMAC_STATE);
-char *hmachex (_HMAC_STATE);
-char *hmacbase64 (_HMAC_STATE);
-int hmacclose (_HMAC_STATE);
-
-#ifndef SHA_PERL_MODULE
-
-unsigned char *hmac1digest (_HMAC_DATA, _HMAC_KEY);
-char *hmac1hex (_HMAC_DATA, _HMAC_KEY);
-char *hmac1base64 (_HMAC_DATA, _HMAC_KEY);
-unsigned char *hmac224digest (_HMAC_DATA, _HMAC_KEY);
-char *hmac224hex (_HMAC_DATA, _HMAC_KEY);
-char *hmac224base64 (_HMAC_DATA, _HMAC_KEY);
-unsigned char *hmac256digest (_HMAC_DATA, _HMAC_KEY);
-char *hmac256hex (_HMAC_DATA, _HMAC_KEY);
-char *hmac256base64 (_HMAC_DATA, _HMAC_KEY);
-unsigned char *hmac384digest (_HMAC_DATA, _HMAC_KEY);
-char *hmac384hex (_HMAC_DATA, _HMAC_KEY);
-char *hmac384base64 (_HMAC_DATA, _HMAC_KEY);
-unsigned char *hmac512digest (_HMAC_DATA, _HMAC_KEY);
-char *hmac512hex (_HMAC_DATA, _HMAC_KEY);
-char *hmac512base64 (_HMAC_DATA, _HMAC_KEY);
-unsigned char *hmac512224digest (_HMAC_DATA, _HMAC_KEY);
-char *hmac512224hex (_HMAC_DATA, _HMAC_KEY);
-char *hmac512224base64 (_HMAC_DATA, _HMAC_KEY);
-unsigned char *hmac512256digest (_HMAC_DATA, _HMAC_KEY);
-char *hmac512256hex (_HMAC_DATA, _HMAC_KEY);
-char *hmac512256base64 (_HMAC_DATA, _HMAC_KEY);
-
-#endif
-
-#endif /* _INCLUDE_HMAC_H_ */
Deleted: trunk/contrib/perl/cpan/Digest-SHA/src/hmacxtra.c
===================================================================
--- trunk/contrib/perl/cpan/Digest-SHA/src/hmacxtra.c 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/Digest-SHA/src/hmacxtra.c 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,62 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include "hmac.h"
-
-static unsigned char *hmaccomp(alg, fmt, bitstr, bitcnt, key, keylen)
-int alg;
-int fmt;
-unsigned char *bitstr;
-unsigned long bitcnt;
-unsigned char *key;
-unsigned int keylen;
-{
- HMAC *h;
- static unsigned char digest[SHA_MAX_HEX_LEN+1];
- unsigned char *ret = digest;
-
- if ((h = hmacopen(alg, key, keylen)) == NULL)
- return(NULL);
- hmacwrite(bitstr, bitcnt, h);
- hmacfinish(h);
- if (fmt == SHA_FMT_RAW)
- memcpy(digest, hmacdigest(h), h->osha->digestlen);
- else if (fmt == SHA_FMT_HEX)
- strcpy((char *) digest, hmachex(h));
- else if (fmt == SHA_FMT_BASE64)
- strcpy((char *) digest, hmacbase64(h));
- else
- ret = NULL;
- hmacclose(h);
- return(ret);
-}
-
-#define HMAC_DIRECT(type, name, alg, fmt) \
-type name(bitstr, bitcnt, key, keylen) \
-unsigned char *bitstr; \
-unsigned long bitcnt; \
-unsigned char *key; \
-unsigned int keylen; \
-{ \
- return((type) hmaccomp(alg, fmt, bitstr, bitcnt, \
- key, keylen)); \
-}
-
-HMAC_DIRECT(unsigned char *, hmac1digest, SHA1, SHA_FMT_RAW)
-HMAC_DIRECT(char *, hmac1hex, SHA1, SHA_FMT_HEX)
-HMAC_DIRECT(char *, hmac1base64, SHA1, SHA_FMT_BASE64)
-
-HMAC_DIRECT(unsigned char *, hmac224digest, SHA224, SHA_FMT_RAW)
-HMAC_DIRECT(char *, hmac224hex, SHA224, SHA_FMT_HEX)
-HMAC_DIRECT(char *, hmac224base64, SHA224, SHA_FMT_BASE64)
-
-HMAC_DIRECT(unsigned char *, hmac256digest, SHA256, SHA_FMT_RAW)
-HMAC_DIRECT(char *, hmac256hex, SHA256, SHA_FMT_HEX)
-HMAC_DIRECT(char *, hmac256base64, SHA256, SHA_FMT_BASE64)
-
-HMAC_DIRECT(unsigned char *, hmac384digest, SHA384, SHA_FMT_RAW)
-HMAC_DIRECT(char *, hmac384hex, SHA384, SHA_FMT_HEX)
-HMAC_DIRECT(char *, hmac384base64, SHA384, SHA_FMT_BASE64)
-
-HMAC_DIRECT(unsigned char *, hmac512digest, SHA512, SHA_FMT_RAW)
-HMAC_DIRECT(char *, hmac512hex, SHA512, SHA_FMT_HEX)
-HMAC_DIRECT(char *, hmac512base64, SHA512, SHA_FMT_BASE64)
Deleted: trunk/contrib/perl/cpan/Digest-SHA/src/shaxtra.c
===================================================================
--- trunk/contrib/perl/cpan/Digest-SHA/src/shaxtra.c 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/Digest-SHA/src/shaxtra.c 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,57 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include "sha.h"
-
-static unsigned char *shacomp(alg, fmt, bitstr, bitcnt)
-int alg;
-int fmt;
-unsigned char *bitstr;
-unsigned long bitcnt;
-{
- SHA *s;
- static unsigned char digest[SHA_MAX_HEX_LEN+1];
- unsigned char *ret = digest;
-
- if ((s = shaopen(alg)) == NULL)
- return(NULL);
- shawrite(bitstr, bitcnt, s);
- shafinish(s);
- if (fmt == SHA_FMT_RAW)
- memcpy(digest, shadigest(s), s->digestlen);
- else if (fmt == SHA_FMT_HEX)
- strcpy((char *) digest, shahex(s));
- else if (fmt == SHA_FMT_BASE64)
- strcpy((char *) digest, shabase64(s));
- else
- ret = NULL;
- shaclose(s);
- return(ret);
-}
-
-#define SHA_DIRECT(type, name, alg, fmt) \
-type name(bitstr, bitcnt) \
-unsigned char *bitstr; \
-unsigned long bitcnt; \
-{ \
- return((type) shacomp(alg, fmt, bitstr, bitcnt)); \
-}
-
-SHA_DIRECT(unsigned char *, sha1digest, SHA1, SHA_FMT_RAW)
-SHA_DIRECT(char *, sha1hex, SHA1, SHA_FMT_HEX)
-SHA_DIRECT(char *, sha1base64, SHA1, SHA_FMT_BASE64)
-
-SHA_DIRECT(unsigned char *, sha224digest, SHA224, SHA_FMT_RAW)
-SHA_DIRECT(char *, sha224hex, SHA224, SHA_FMT_HEX)
-SHA_DIRECT(char *, sha224base64, SHA224, SHA_FMT_BASE64)
-
-SHA_DIRECT(unsigned char *, sha256digest, SHA256, SHA_FMT_RAW)
-SHA_DIRECT(char *, sha256hex, SHA256, SHA_FMT_HEX)
-SHA_DIRECT(char *, sha256base64, SHA256, SHA_FMT_BASE64)
-
-SHA_DIRECT(unsigned char *, sha384digest, SHA384, SHA_FMT_RAW)
-SHA_DIRECT(char *, sha384hex, SHA384, SHA_FMT_HEX)
-SHA_DIRECT(char *, sha384base64, SHA384, SHA_FMT_BASE64)
-
-SHA_DIRECT(unsigned char *, sha512digest, SHA512, SHA_FMT_RAW)
-SHA_DIRECT(char *, sha512hex, SHA512, SHA_FMT_HEX)
-SHA_DIRECT(char *, sha512base64, SHA512, SHA_FMT_BASE64)
Deleted: trunk/contrib/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/YAML.pm
===================================================================
--- trunk/contrib/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/YAML.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/YAML.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,658 +0,0 @@
-package ExtUtils::MakeMaker::YAML;
-
-use strict;
-
-# UTF Support?
-sub HAVE_UTF8 () { $] >= 5.007003 }
-BEGIN {
- if ( HAVE_UTF8 ) {
- # The string eval helps hide this from Test::MinimumVersion
- eval "require utf8;";
- die "Failed to load UTF-8 support" if $@;
- }
-
- # Class structure
- require 5.004;
- require Exporter;
- require Carp;
- $ExtUtils::MakeMaker::YAML::VERSION = '1.44';
- @ExtUtils::MakeMaker::YAML::ISA = qw{ Exporter };
- @ExtUtils::MakeMaker::YAML::EXPORT = qw{ Load Dump };
- @ExtUtils::MakeMaker::YAML::EXPORT_OK = qw{ LoadFile DumpFile freeze thaw };
-
- # Error storage
- $ExtUtils::MakeMaker::YAML::errstr = '';
-}
-
-# The character class of all characters we need to escape
-# NOTE: Inlined, since it's only used once
-# my $RE_ESCAPE = '[\\x00-\\x08\\x0b-\\x0d\\x0e-\\x1f\"\n]';
-
-# Printed form of the unprintable characters in the lowest range
-# of ASCII characters, listed by ASCII ordinal position.
-my @UNPRINTABLE = qw(
- z x01 x02 x03 x04 x05 x06 a
- x08 t n v f r x0e x0f
- x10 x11 x12 x13 x14 x15 x16 x17
- x18 x19 x1a e x1c x1d x1e x1f
-);
-
-# Printable characters for escapes
-my %UNESCAPES = (
- z => "\x00", a => "\x07", t => "\x09",
- n => "\x0a", v => "\x0b", f => "\x0c",
- r => "\x0d", e => "\x1b", '\\' => '\\',
-);
-
-# Special magic boolean words
-my %QUOTE = map { $_ => 1 } qw{
- null Null NULL
- y Y yes Yes YES n N no No NO
- true True TRUE false False FALSE
- on On ON off Off OFF
-};
-
-
-
-
-
-#####################################################################
-# Implementation
-
-# Create an empty ExtUtils::MakeMaker::YAML object
-sub new {
- my $class = shift;
- bless [ @_ ], $class;
-}
-
-# Create an object from a file
-sub read {
- my $class = ref $_[0] ? ref shift : shift;
-
- # Check the file
- my $file = shift or return $class->_error( 'You did not specify a file name' );
- return $class->_error( "File '$file' does not exist" ) unless -e $file;
- return $class->_error( "'$file' is a directory, not a file" ) unless -f _;
- return $class->_error( "Insufficient permissions to read '$file'" ) unless -r _;
-
- # Slurp in the file
- local $/ = undef;
- local *CFG;
- unless ( open(CFG, $file) ) {
- return $class->_error("Failed to open file '$file': $!");
- }
- my $contents = <CFG>;
- unless ( close(CFG) ) {
- return $class->_error("Failed to close file '$file': $!");
- }
-
- $class->read_string( $contents );
-}
-
-# Create an object from a string
-sub read_string {
- my $class = ref $_[0] ? ref shift : shift;
- my $self = bless [], $class;
- my $string = $_[0];
- unless ( defined $string ) {
- return $self->_error("Did not provide a string to load");
- }
-
- # Byte order marks
- # NOTE: Keeping this here to educate maintainers
- # my %BOM = (
- # "\357\273\277" => 'UTF-8',
- # "\376\377" => 'UTF-16BE',
- # "\377\376" => 'UTF-16LE',
- # "\377\376\0\0" => 'UTF-32LE'
- # "\0\0\376\377" => 'UTF-32BE',
- # );
- if ( $string =~ /^(?:\376\377|\377\376|\377\376\0\0|\0\0\376\377)/ ) {
- return $self->_error("Stream has a non UTF-8 BOM");
- } else {
- # Strip UTF-8 bom if found, we'll just ignore it
- $string =~ s/^\357\273\277//;
- }
-
- # Try to decode as utf8
- utf8::decode($string) if HAVE_UTF8;
-
- # Check for some special cases
- return $self unless length $string;
- unless ( $string =~ /[\012\015]+\z/ ) {
- return $self->_error("Stream does not end with newline character");
- }
-
- # Split the file into lines
- my @lines = grep { ! /^\s*(?:\#.*)?\z/ }
- split /(?:\015{1,2}\012|\015|\012)/, $string;
-
- # Strip the initial YAML header
- @lines and $lines[0] =~ /^\%YAML[: ][\d\.]+.*\z/ and shift @lines;
-
- # A nibbling parser
- while ( @lines ) {
- # Do we have a document header?
- if ( $lines[0] =~ /^---\s*(?:(.+)\s*)?\z/ ) {
- # Handle scalar documents
- shift @lines;
- if ( defined $1 and $1 !~ /^(?:\#.+|\%YAML[: ][\d\.]+)\z/ ) {
- push @$self, $self->_read_scalar( "$1", [ undef ], \@lines );
- next;
- }
- }
-
- if ( ! @lines or $lines[0] =~ /^(?:---|\.\.\.)/ ) {
- # A naked document
- push @$self, undef;
- while ( @lines and $lines[0] !~ /^---/ ) {
- shift @lines;
- }
-
- } elsif ( $lines[0] =~ /^\s*\-/ ) {
- # An array at the root
- my $document = [ ];
- push @$self, $document;
- $self->_read_array( $document, [ 0 ], \@lines );
-
- } elsif ( $lines[0] =~ /^(\s*)\S/ ) {
- # A hash at the root
- my $document = { };
- push @$self, $document;
- $self->_read_hash( $document, [ length($1) ], \@lines );
-
- } else {
- Carp::croak("ExtUtils::MakeMaker::YAML failed to classify the line '$lines[0]'");
- }
- }
-
- $self;
-}
-
-# Deparse a scalar string to the actual scalar
-sub _read_scalar {
- my ($self, $string, $indent, $lines) = @_;
-
- # Trim trailing whitespace
- $string =~ s/\s*\z//;
-
- # Explitic null/undef
- return undef if $string eq '~';
-
- # Single quote
- if ( $string =~ /^\'(.*?)\'\z/ ) {
- return '' unless defined $1;
- $string = $1;
- $string =~ s/\'\'/\'/g;
- return $string;
- }
-
- # Double quote.
- # The commented out form is simpler, but overloaded the Perl regex
- # engine due to recursion and backtracking problems on strings
- # larger than 32,000ish characters. Keep it for reference purposes.
- # if ( $string =~ /^\"((?:\\.|[^\"])*)\"\z/ ) {
- if ( $string =~ /^\"([^\\"]*(?:\\.[^\\"]*)*)\"\z/ ) {
- # Reusing the variable is a little ugly,
- # but avoids a new variable and a string copy.
- $string = $1;
- $string =~ s/\\"/"/g;
- $string =~ s/\\([never\\fartz]|x([0-9a-fA-F]{2}))/(length($1)>1)?pack("H2",$2):$UNESCAPES{$1}/gex;
- return $string;
- }
-
- # Special cases
- if ( $string =~ /^[\'\"!&]/ ) {
- Carp::croak("ExtUtils::MakeMaker::YAML does not support a feature in line '$lines->[0]'");
- }
- return {} if $string eq '{}';
- return [] if $string eq '[]';
-
- # Regular unquoted string
- return $string unless $string =~ /^[>|]/;
-
- # Error
- Carp::croak("ExtUtils::MakeMaker::YAML failed to find multi-line scalar content") unless @$lines;
-
- # Check the indent depth
- $lines->[0] =~ /^(\s*)/;
- $indent->[-1] = length("$1");
- if ( defined $indent->[-2] and $indent->[-1] <= $indent->[-2] ) {
- Carp::croak("ExtUtils::MakeMaker::YAML found bad indenting in line '$lines->[0]'");
- }
-
- # Pull the lines
- my @multiline = ();
- while ( @$lines ) {
- $lines->[0] =~ /^(\s*)/;
- last unless length($1) >= $indent->[-1];
- push @multiline, substr(shift(@$lines), length($1));
- }
-
- my $j = (substr($string, 0, 1) eq '>') ? ' ' : "\n";
- my $t = (substr($string, 1, 1) eq '-') ? '' : "\n";
- return join( $j, @multiline ) . $t;
-}
-
-# Parse an array
-sub _read_array {
- my ($self, $array, $indent, $lines) = @_;
-
- while ( @$lines ) {
- # Check for a new document
- if ( $lines->[0] =~ /^(?:---|\.\.\.)/ ) {
- while ( @$lines and $lines->[0] !~ /^---/ ) {
- shift @$lines;
- }
- return 1;
- }
-
- # Check the indent level
- $lines->[0] =~ /^(\s*)/;
- if ( length($1) < $indent->[-1] ) {
- return 1;
- } elsif ( length($1) > $indent->[-1] ) {
- Carp::croak("ExtUtils::MakeMaker::YAML found bad indenting in line '$lines->[0]'");
- }
-
- if ( $lines->[0] =~ /^(\s*\-\s+)[^\'\"]\S*\s*:(?:\s+|$)/ ) {
- # Inline nested hash
- my $indent2 = length("$1");
- $lines->[0] =~ s/-/ /;
- push @$array, { };
- $self->_read_hash( $array->[-1], [ @$indent, $indent2 ], $lines );
-
- } elsif ( $lines->[0] =~ /^\s*\-(\s*)(.+?)\s*\z/ ) {
- # Array entry with a value
- shift @$lines;
- push @$array, $self->_read_scalar( "$2", [ @$indent, undef ], $lines );
-
- } elsif ( $lines->[0] =~ /^\s*\-\s*\z/ ) {
- shift @$lines;
- unless ( @$lines ) {
- push @$array, undef;
- return 1;
- }
- if ( $lines->[0] =~ /^(\s*)\-/ ) {
- my $indent2 = length("$1");
- if ( $indent->[-1] == $indent2 ) {
- # Null array entry
- push @$array, undef;
- } else {
- # Naked indenter
- push @$array, [ ];
- $self->_read_array( $array->[-1], [ @$indent, $indent2 ], $lines );
- }
-
- } elsif ( $lines->[0] =~ /^(\s*)\S/ ) {
- push @$array, { };
- $self->_read_hash( $array->[-1], [ @$indent, length("$1") ], $lines );
-
- } else {
- Carp::croak("ExtUtils::MakeMaker::YAML failed to classify line '$lines->[0]'");
- }
-
- } elsif ( defined $indent->[-2] and $indent->[-1] == $indent->[-2] ) {
- # This is probably a structure like the following...
- # ---
- # foo:
- # - list
- # bar: value
- #
- # ... so lets return and let the hash parser handle it
- return 1;
-
- } else {
- Carp::croak("ExtUtils::MakeMaker::YAML failed to classify line '$lines->[0]'");
- }
- }
-
- return 1;
-}
-
-# Parse an array
-sub _read_hash {
- my ($self, $hash, $indent, $lines) = @_;
-
- while ( @$lines ) {
- # Check for a new document
- if ( $lines->[0] =~ /^(?:---|\.\.\.)/ ) {
- while ( @$lines and $lines->[0] !~ /^---/ ) {
- shift @$lines;
- }
- return 1;
- }
-
- # Check the indent level
- $lines->[0] =~ /^(\s*)/;
- if ( length($1) < $indent->[-1] ) {
- return 1;
- } elsif ( length($1) > $indent->[-1] ) {
- Carp::croak("ExtUtils::MakeMaker::YAML found bad indenting in line '$lines->[0]'");
- }
-
- # Get the key
- unless ( $lines->[0] =~ s/^\s*([^\'\" ][^\n]*?)\s*:(\s+|$)// ) {
- if ( $lines->[0] =~ /^\s*[?\'\"]/ ) {
- Carp::croak("ExtUtils::MakeMaker::YAML does not support a feature in line '$lines->[0]'");
- }
- Carp::croak("ExtUtils::MakeMaker::YAML failed to classify line '$lines->[0]'");
- }
- my $key = $1;
-
- # Do we have a value?
- if ( length $lines->[0] ) {
- # Yes
- $hash->{$key} = $self->_read_scalar( shift(@$lines), [ @$indent, undef ], $lines );
- } else {
- # An indent
- shift @$lines;
- unless ( @$lines ) {
- $hash->{$key} = undef;
- return 1;
- }
- if ( $lines->[0] =~ /^(\s*)-/ ) {
- $hash->{$key} = [];
- $self->_read_array( $hash->{$key}, [ @$indent, length($1) ], $lines );
- } elsif ( $lines->[0] =~ /^(\s*)./ ) {
- my $indent2 = length("$1");
- if ( $indent->[-1] >= $indent2 ) {
- # Null hash entry
- $hash->{$key} = undef;
- } else {
- $hash->{$key} = {};
- $self->_read_hash( $hash->{$key}, [ @$indent, length($1) ], $lines );
- }
- }
- }
- }
-
- return 1;
-}
-
-# Save an object to a file
-sub write {
- my $self = shift;
- my $file = shift or return $self->_error('No file name provided');
-
- # Write it to the file
- open( CFG, '>' . $file ) or return $self->_error(
- "Failed to open file '$file' for writing: $!"
- );
- print CFG $self->write_string;
- close CFG;
-
- return 1;
-}
-
-# Save an object to a string
-sub write_string {
- my $self = shift;
- return '' unless @$self;
-
- # Iterate over the documents
- my $indent = 0;
- my @lines = ();
- foreach my $cursor ( @$self ) {
- push @lines, '---';
-
- # An empty document
- if ( ! defined $cursor ) {
- # Do nothing
-
- # A scalar document
- } elsif ( ! ref $cursor ) {
- $lines[-1] .= ' ' . $self->_write_scalar( $cursor, $indent );
-
- # version object
- } elsif ( ref $cursor eq 'version' ) {
- $lines[-1] .= ' ' . $self->_write_scalar( $cursor->stringify, $indent );
-
- # A list at the root
- } elsif ( ref $cursor eq 'ARRAY' ) {
- unless ( @$cursor ) {
- $lines[-1] .= ' []';
- next;
- }
- push @lines, $self->_write_array( $cursor, $indent, {} );
-
- # A hash at the root
- } elsif ( ref $cursor eq 'HASH' ) {
- unless ( %$cursor ) {
- $lines[-1] .= ' {}';
- next;
- }
- push @lines, $self->_write_hash( $cursor, $indent, {} );
-
- } else {
- Carp::croak("Cannot serialize " . ref($cursor));
- }
- }
-
- join '', map { "$_\n" } @lines;
-}
-
-sub _write_scalar {
- my $string = $_[1];
- return '~' unless defined $string;
- return "''" unless length $string;
- if ( $string =~ /[\x00-\x08\x0b-\x0d\x0e-\x1f\"\'\n]/ ) {
- $string =~ s/\\/\\\\/g;
- $string =~ s/"/\\"/g;
- $string =~ s/\n/\\n/g;
- $string =~ s/([\x00-\x1f])/\\$UNPRINTABLE[ord($1)]/g;
- return qq|"$string"|;
- }
- if ( $string =~ /(?:^\W|\s)/ or $QUOTE{$string} ) {
- return "'$string'";
- }
- return $string;
-}
-
-sub _write_array {
- my ($self, $array, $indent, $seen) = @_;
- if ( $seen->{refaddr($array)}++ ) {
- die "ExtUtils::MakeMaker::YAML does not support circular references";
- }
- my @lines = ();
- foreach my $el ( @$array ) {
- my $line = (' ' x $indent) . '-';
- my $type = ref $el;
- if ( ! $type ) {
- $line .= ' ' . $self->_write_scalar( $el, $indent + 1 );
- push @lines, $line;
-
- # version object
- } elsif ( $type eq 'version' ) {
- $line .= ' ' . $self->_write_scalar( $el->stringify, $indent + 1 );
- push @lines, $line;
-
- } elsif ( $type eq 'ARRAY' ) {
- if ( @$el ) {
- push @lines, $line;
- push @lines, $self->_write_array( $el, $indent + 1, $seen );
- } else {
- $line .= ' []';
- push @lines, $line;
- }
-
- } elsif ( $type eq 'HASH' ) {
- if ( keys %$el ) {
- push @lines, $line;
- push @lines, $self->_write_hash( $el, $indent + 1, $seen );
- } else {
- $line .= ' {}';
- push @lines, $line;
- }
-
- } else {
- die "ExtUtils::MakeMaker::YAML does not support $type references";
- }
- }
-
- @lines;
-}
-
-sub _write_hash {
- my ($self, $hash, $indent, $seen) = @_;
- if ( $seen->{refaddr($hash)}++ ) {
- die "ExtUtils::MakeMaker::YAML does not support circular references";
- }
- my @lines = ();
- foreach my $name ( sort keys %$hash ) {
- my $el = $hash->{$name};
- my $line = (' ' x $indent) . "$name:";
- my $type = ref $el;
- if ( ! $type ) {
- $line .= ' ' . $self->_write_scalar( $el, $indent + 1 );
- push @lines, $line;
-
- # version object
- } elsif ( $type eq 'version' ) {
- $line .= ' ' . $self->_write_scalar( $el->stringify, $indent + 1 );
- push @lines, $line;
-
- } elsif ( $type eq 'ARRAY' ) {
- if ( @$el ) {
- push @lines, $line;
- push @lines, $self->_write_array( $el, $indent + 1, $seen );
- } else {
- $line .= ' []';
- push @lines, $line;
- }
-
- } elsif ( $type eq 'HASH' ) {
- if ( keys %$el ) {
- push @lines, $line;
- push @lines, $self->_write_hash( $el, $indent + 1, $seen );
- } else {
- $line .= ' {}';
- push @lines, $line;
- }
-
- } else {
- die "ExtUtils::MakeMaker::YAML does not support $type references";
- }
- }
-
- @lines;
-}
-
-# Set error
-sub _error {
- $ExtUtils::MakeMaker::YAML::errstr = $_[1];
- undef;
-}
-
-# Retrieve error
-sub errstr {
- $ExtUtils::MakeMaker::YAML::errstr;
-}
-
-
-
-
-
-#####################################################################
-# YAML Compatibility
-
-sub Dump {
- ExtUtils::MakeMaker::YAML->new(@_)->write_string;
-}
-
-sub Load {
- my $self = ExtUtils::MakeMaker::YAML->read_string(@_);
- unless ( $self ) {
- Carp::croak("Failed to load YAML document from string");
- }
- if ( wantarray ) {
- return @$self;
- } else {
- # To match YAML.pm, return the last document
- return $self->[-1];
- }
-}
-
-BEGIN {
- *freeze = *Dump;
- *thaw = *Load;
-}
-
-sub DumpFile {
- my $file = shift;
- ExtUtils::MakeMaker::YAML->new(@_)->write($file);
-}
-
-sub LoadFile {
- my $self = ExtUtils::MakeMaker::YAML->read($_[0]);
- unless ( $self ) {
- Carp::croak("Failed to load YAML document from '" . ($_[0] || '') . "'");
- }
- if ( wantarray ) {
- return @$self;
- } else {
- # Return only the last document to match YAML.pm,
- return $self->[-1];
- }
-}
-
-
-
-
-
-#####################################################################
-# Use Scalar::Util if possible, otherwise emulate it
-
-BEGIN {
- eval {
- require Scalar::Util;
- *refaddr = *Scalar::Util::refaddr;
- };
- eval <<'END_PERL' if $@;
-# Failed to load Scalar::Util
-sub refaddr {
- my $pkg = ref($_[0]) or return undef;
- if (!!UNIVERSAL::can($_[0], 'can')) {
- bless $_[0], 'Scalar::Util::Fake';
- } else {
- $pkg = undef;
- }
- "$_[0]" =~ /0x(\w+)/;
- my $i = do { local $^W; hex $1 };
- bless $_[0], $pkg if defined $pkg;
- $i;
-}
-END_PERL
-
-}
-
-1;
-
-__END__
-
-=pod
-
-=head1 NAME
-
-ExtUtils::MakeMaker::YAML - clone of YAML::Tiny
-
-=head1 SYNOPSIS
-
-See L<YAML::Tiny>
-
-=head1 AUTHOR
-
-Adam Kennedy E<lt>adamk at cpan.orgE<gt>
-
-=head1 SEE ALSO
-
-L<YAML>, L<YAML::Syck>
-
-=head1 COPYRIGHT
-
-Copyright 2006 - 2010 Adam Kennedy.
-
-This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-=cut
Deleted: trunk/contrib/perl/cpan/File-Temp/Temp.pm
===================================================================
--- trunk/contrib/perl/cpan/File-Temp/Temp.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/File-Temp/Temp.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,2452 +0,0 @@
-package File::Temp;
-
-=head1 NAME
-
-File::Temp - return name and handle of a temporary file safely
-
-=begin __INTERNALS
-
-=head1 PORTABILITY
-
-This section is at the top in order to provide easier access to
-porters. It is not expected to be rendered by a standard pod
-formatting tool. Please skip straight to the SYNOPSIS section if you
-are not trying to port this module to a new platform.
-
-This module is designed to be portable across operating systems and it
-currently supports Unix, VMS, DOS, OS/2, Windows and Mac OS
-(Classic). When porting to a new OS there are generally three main
-issues that have to be solved:
-
-=over 4
-
-=item *
-
-Can the OS unlink an open file? If it can not then the
-C<_can_unlink_opened_file> method should be modified.
-
-=item *
-
-Are the return values from C<stat> reliable? By default all the
-return values from C<stat> are compared when unlinking a temporary
-file using the filename and the handle. Operating systems other than
-unix do not always have valid entries in all fields. If C<unlink0> fails
-then the C<stat> comparison should be modified accordingly.
-
-=item *
-
-Security. Systems that can not support a test for the sticky bit
-on a directory can not use the MEDIUM and HIGH security tests.
-The C<_can_do_level> method should be modified accordingly.
-
-=back
-
-=end __INTERNALS
-
-=head1 SYNOPSIS
-
- use File::Temp qw/ tempfile tempdir /;
-
- $fh = tempfile();
- ($fh, $filename) = tempfile();
-
- ($fh, $filename) = tempfile( $template, DIR => $dir);
- ($fh, $filename) = tempfile( $template, SUFFIX => '.dat');
- ($fh, $filename) = tempfile( $template, TMPDIR => 1 );
-
- binmode( $fh, ":utf8" );
-
- $dir = tempdir( CLEANUP => 1 );
- ($fh, $filename) = tempfile( DIR => $dir );
-
-Object interface:
-
- require File::Temp;
- use File::Temp ();
- use File::Temp qw/ :seekable /;
-
- $fh = File::Temp->new();
- $fname = $fh->filename;
-
- $fh = File::Temp->new(TEMPLATE => $template);
- $fname = $fh->filename;
-
- $tmp = File::Temp->new( UNLINK => 0, SUFFIX => '.dat' );
- print $tmp "Some data\n";
- print "Filename is $tmp\n";
- $tmp->seek( 0, SEEK_END );
-
-The following interfaces are provided for compatibility with
-existing APIs. They should not be used in new code.
-
-MkTemp family:
-
- use File::Temp qw/ :mktemp /;
-
- ($fh, $file) = mkstemp( "tmpfileXXXXX" );
- ($fh, $file) = mkstemps( "tmpfileXXXXXX", $suffix);
-
- $tmpdir = mkdtemp( $template );
-
- $unopened_file = mktemp( $template );
-
-POSIX functions:
-
- use File::Temp qw/ :POSIX /;
-
- $file = tmpnam();
- $fh = tmpfile();
-
- ($fh, $file) = tmpnam();
-
-Compatibility functions:
-
- $unopened_file = File::Temp::tempnam( $dir, $pfx );
-
-=head1 DESCRIPTION
-
-C<File::Temp> can be used to create and open temporary files in a safe
-way. There is both a function interface and an object-oriented
-interface. The File::Temp constructor or the tempfile() function can
-be used to return the name and the open filehandle of a temporary
-file. The tempdir() function can be used to create a temporary
-directory.
-
-The security aspect of temporary file creation is emphasized such that
-a filehandle and filename are returned together. This helps guarantee
-that a race condition can not occur where the temporary file is
-created by another process between checking for the existence of the
-file and its opening. Additional security levels are provided to
-check, for example, that the sticky bit is set on world writable
-directories. See L<"safe_level"> for more information.
-
-For compatibility with popular C library functions, Perl implementations of
-the mkstemp() family of functions are provided. These are, mkstemp(),
-mkstemps(), mkdtemp() and mktemp().
-
-Additionally, implementations of the standard L<POSIX|POSIX>
-tmpnam() and tmpfile() functions are provided if required.
-
-Implementations of mktemp(), tmpnam(), and tempnam() are provided,
-but should be used with caution since they return only a filename
-that was valid when function was called, so cannot guarantee
-that the file will not exist by the time the caller opens the filename.
-
-Filehandles returned by these functions support the seekable methods.
-
-=cut
-
-# 5.6.0 gives us S_IWOTH, S_IWGRP, our and auto-vivifying filehandls
-# People would like a version on 5.004 so give them what they want :-)
-use 5.004;
-use strict;
-use Carp;
-use File::Spec 0.8;
-use File::Path qw/ rmtree /;
-use Fcntl 1.03;
-use IO::Seekable; # For SEEK_*
-use Errno;
-require VMS::Stdio if $^O eq 'VMS';
-
-# pre-emptively load Carp::Heavy. If we don't when we run out of file
-# handles and attempt to call croak() we get an error message telling
-# us that Carp::Heavy won't load rather than an error telling us we
-# have run out of file handles. We either preload croak() or we
-# switch the calls to croak from _gettemp() to use die.
-eval { require Carp::Heavy; };
-
-# Need the Symbol package if we are running older perl
-require Symbol if $] < 5.006;
-
-### For the OO interface
-use base qw/ IO::Handle IO::Seekable /;
-use overload '""' => "STRINGIFY", fallback => 1;
-
-# use 'our' on v5.6.0
-use vars qw($VERSION @EXPORT_OK %EXPORT_TAGS $DEBUG $KEEP_ALL);
-
-$DEBUG = 0;
-$KEEP_ALL = 0;
-
-# We are exporting functions
-
-use base qw/Exporter/;
-
-# Export list - to allow fine tuning of export table
-
- at EXPORT_OK = qw{
- tempfile
- tempdir
- tmpnam
- tmpfile
- mktemp
- mkstemp
- mkstemps
- mkdtemp
- unlink0
- cleanup
- SEEK_SET
- SEEK_CUR
- SEEK_END
- };
-
-# Groups of functions for export
-
-%EXPORT_TAGS = (
- 'POSIX' => [qw/ tmpnam tmpfile /],
- 'mktemp' => [qw/ mktemp mkstemp mkstemps mkdtemp/],
- 'seekable' => [qw/ SEEK_SET SEEK_CUR SEEK_END /],
- );
-
-# add contents of these tags to @EXPORT
-Exporter::export_tags('POSIX','mktemp','seekable');
-
-# Version number
-
-$VERSION = '0.22';
-
-# This is a list of characters that can be used in random filenames
-
-my @CHARS = (qw/ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
- a b c d e f g h i j k l m n o p q r s t u v w x y z
- 0 1 2 3 4 5 6 7 8 9 _
- /);
-
-# Maximum number of tries to make a temp file before failing
-
-use constant MAX_TRIES => 1000;
-
-# Minimum number of X characters that should be in a template
-use constant MINX => 4;
-
-# Default template when no template supplied
-
-use constant TEMPXXX => 'X' x 10;
-
-# Constants for the security level
-
-use constant STANDARD => 0;
-use constant MEDIUM => 1;
-use constant HIGH => 2;
-
-# OPENFLAGS. If we defined the flag to use with Sysopen here this gives
-# us an optimisation when many temporary files are requested
-
-my $OPENFLAGS = O_CREAT | O_EXCL | O_RDWR;
-my $LOCKFLAG;
-
-unless ($^O eq 'MacOS') {
- for my $oflag (qw/ NOFOLLOW BINARY LARGEFILE NOINHERIT /) {
- my ($bit, $func) = (0, "Fcntl::O_" . $oflag);
- no strict 'refs';
- $OPENFLAGS |= $bit if eval {
- # Make sure that redefined die handlers do not cause problems
- # e.g. CGI::Carp
- local $SIG{__DIE__} = sub {};
- local $SIG{__WARN__} = sub {};
- $bit = &$func();
- 1;
- };
- }
- # Special case O_EXLOCK
- $LOCKFLAG = eval {
- local $SIG{__DIE__} = sub {};
- local $SIG{__WARN__} = sub {};
- &Fcntl::O_EXLOCK();
- };
-}
-
-# On some systems the O_TEMPORARY flag can be used to tell the OS
-# to automatically remove the file when it is closed. This is fine
-# in most cases but not if tempfile is called with UNLINK=>0 and
-# the filename is requested -- in the case where the filename is to
-# be passed to another routine. This happens on windows. We overcome
-# this by using a second open flags variable
-
-my $OPENTEMPFLAGS = $OPENFLAGS;
-unless ($^O eq 'MacOS') {
- for my $oflag (qw/ TEMPORARY /) {
- my ($bit, $func) = (0, "Fcntl::O_" . $oflag);
- local($@);
- no strict 'refs';
- $OPENTEMPFLAGS |= $bit if eval {
- # Make sure that redefined die handlers do not cause problems
- # e.g. CGI::Carp
- local $SIG{__DIE__} = sub {};
- local $SIG{__WARN__} = sub {};
- $bit = &$func();
- 1;
- };
- }
-}
-
-# Private hash tracking which files have been created by each process id via the OO interface
-my %FILES_CREATED_BY_OBJECT;
-
-# INTERNAL ROUTINES - not to be used outside of package
-
-# Generic routine for getting a temporary filename
-# modelled on OpenBSD _gettemp() in mktemp.c
-
-# The template must contain X's that are to be replaced
-# with the random values
-
-# Arguments:
-
-# TEMPLATE - string containing the XXXXX's that is converted
-# to a random filename and opened if required
-
-# Optionally, a hash can also be supplied containing specific options
-# "open" => if true open the temp file, else just return the name
-# default is 0
-# "mkdir"=> if true, we are creating a temp directory rather than tempfile
-# default is 0
-# "suffixlen" => number of characters at end of PATH to be ignored.
-# default is 0.
-# "unlink_on_close" => indicates that, if possible, the OS should remove
-# the file as soon as it is closed. Usually indicates
-# use of the O_TEMPORARY flag to sysopen.
-# Usually irrelevant on unix
-# "use_exlock" => Indicates that O_EXLOCK should be used. Default is true.
-
-# Optionally a reference to a scalar can be passed into the function
-# On error this will be used to store the reason for the error
-# "ErrStr" => \$errstr
-
-# "open" and "mkdir" can not both be true
-# "unlink_on_close" is not used when "mkdir" is true.
-
-# The default options are equivalent to mktemp().
-
-# Returns:
-# filehandle - open file handle (if called with doopen=1, else undef)
-# temp name - name of the temp file or directory
-
-# For example:
-# ($fh, $name) = _gettemp($template, "open" => 1);
-
-# for the current version, failures are associated with
-# stored in an error string and returned to give the reason whilst debugging
-# This routine is not called by any external function
-sub _gettemp {
-
- croak 'Usage: ($fh, $name) = _gettemp($template, OPTIONS);'
- unless scalar(@_) >= 1;
-
- # the internal error string - expect it to be overridden
- # Need this in case the caller decides not to supply us a value
- # need an anonymous scalar
- my $tempErrStr;
-
- # Default options
- my %options = (
- "open" => 0,
- "mkdir" => 0,
- "suffixlen" => 0,
- "unlink_on_close" => 0,
- "use_exlock" => 1,
- "ErrStr" => \$tempErrStr,
- );
-
- # Read the template
- my $template = shift;
- if (ref($template)) {
- # Use a warning here since we have not yet merged ErrStr
- carp "File::Temp::_gettemp: template must not be a reference";
- return ();
- }
-
- # Check that the number of entries on stack are even
- if (scalar(@_) % 2 != 0) {
- # Use a warning here since we have not yet merged ErrStr
- carp "File::Temp::_gettemp: Must have even number of options";
- return ();
- }
-
- # Read the options and merge with defaults
- %options = (%options, @_) if @_;
-
- # Make sure the error string is set to undef
- ${$options{ErrStr}} = undef;
-
- # Can not open the file and make a directory in a single call
- if ($options{"open"} && $options{"mkdir"}) {
- ${$options{ErrStr}} = "doopen and domkdir can not both be true\n";
- return ();
- }
-
- # Find the start of the end of the Xs (position of last X)
- # Substr starts from 0
- my $start = length($template) - 1 - $options{"suffixlen"};
-
- # Check that we have at least MINX x X (e.g. 'XXXX") at the end of the string
- # (taking suffixlen into account). Any fewer is insecure.
-
- # Do it using substr - no reason to use a pattern match since
- # we know where we are looking and what we are looking for
-
- if (substr($template, $start - MINX + 1, MINX) ne 'X' x MINX) {
- ${$options{ErrStr}} = "The template must end with at least ".
- MINX . " 'X' characters\n";
- return ();
- }
-
- # Replace all the X at the end of the substring with a
- # random character or just all the XX at the end of a full string.
- # Do it as an if, since the suffix adjusts which section to replace
- # and suffixlen=0 returns nothing if used in the substr directly
- # and generate a full path from the template
-
- my $path = _replace_XX($template, $options{"suffixlen"});
-
-
- # Split the path into constituent parts - eventually we need to check
- # whether the directory exists
- # We need to know whether we are making a temp directory
- # or a tempfile
-
- my ($volume, $directories, $file);
- my $parent; # parent directory
- if ($options{"mkdir"}) {
- # There is no filename at the end
- ($volume, $directories, $file) = File::Spec->splitpath( $path, 1);
-
- # The parent is then $directories without the last directory
- # Split the directory and put it back together again
- my @dirs = File::Spec->splitdir($directories);
-
- # If @dirs only has one entry (i.e. the directory template) that means
- # we are in the current directory
- if ($#dirs == 0) {
- $parent = File::Spec->curdir;
- } else {
-
- if ($^O eq 'VMS') { # need volume to avoid relative dir spec
- $parent = File::Spec->catdir($volume, @dirs[0..$#dirs-1]);
- $parent = 'sys$disk:[]' if $parent eq '';
- } else {
-
- # Put it back together without the last one
- $parent = File::Spec->catdir(@dirs[0..$#dirs-1]);
-
- # ...and attach the volume (no filename)
- $parent = File::Spec->catpath($volume, $parent, '');
- }
-
- }
-
- } else {
-
- # Get rid of the last filename (use File::Basename for this?)
- ($volume, $directories, $file) = File::Spec->splitpath( $path );
-
- # Join up without the file part
- $parent = File::Spec->catpath($volume,$directories,'');
-
- # If $parent is empty replace with curdir
- $parent = File::Spec->curdir
- unless $directories ne '';
-
- }
-
- # Check that the parent directories exist
- # Do this even for the case where we are simply returning a name
- # not a file -- no point returning a name that includes a directory
- # that does not exist or is not writable
-
- unless (-e $parent) {
- ${$options{ErrStr}} = "Parent directory ($parent) does not exist";
- return ();
- }
- unless (-d $parent) {
- ${$options{ErrStr}} = "Parent directory ($parent) is not a directory";
- return ();
- }
-
- # Check the stickiness of the directory and chown giveaway if required
- # If the directory is world writable the sticky bit
- # must be set
-
- if (File::Temp->safe_level == MEDIUM) {
- my $safeerr;
- unless (_is_safe($parent,\$safeerr)) {
- ${$options{ErrStr}} = "Parent directory ($parent) is not safe ($safeerr)";
- return ();
- }
- } elsif (File::Temp->safe_level == HIGH) {
- my $safeerr;
- unless (_is_verysafe($parent, \$safeerr)) {
- ${$options{ErrStr}} = "Parent directory ($parent) is not safe ($safeerr)";
- return ();
- }
- }
-
-
- # Now try MAX_TRIES time to open the file
- for (my $i = 0; $i < MAX_TRIES; $i++) {
-
- # Try to open the file if requested
- if ($options{"open"}) {
- my $fh;
-
- # If we are running before perl5.6.0 we can not auto-vivify
- if ($] < 5.006) {
- $fh = &Symbol::gensym;
- }
-
- # Try to make sure this will be marked close-on-exec
- # XXX: Win32 doesn't respect this, nor the proper fcntl,
- # but may have O_NOINHERIT. This may or may not be in Fcntl.
- local $^F = 2;
-
- # Attempt to open the file
- my $open_success = undef;
- if ( $^O eq 'VMS' and $options{"unlink_on_close"} && !$KEEP_ALL) {
- # make it auto delete on close by setting FAB$V_DLT bit
- $fh = VMS::Stdio::vmssysopen($path, $OPENFLAGS, 0600, 'fop=dlt');
- $open_success = $fh;
- } else {
- my $flags = ( ($options{"unlink_on_close"} && !$KEEP_ALL) ?
- $OPENTEMPFLAGS :
- $OPENFLAGS );
- $flags |= $LOCKFLAG if (defined $LOCKFLAG && $options{use_exlock});
- $open_success = sysopen($fh, $path, $flags, 0600);
- }
- if ( $open_success ) {
-
- # in case of odd umask force rw
- chmod(0600, $path);
-
- # Opened successfully - return file handle and name
- return ($fh, $path);
-
- } else {
-
- # Error opening file - abort with error
- # if the reason was anything but EEXIST
- unless ($!{EEXIST}) {
- ${$options{ErrStr}} = "Could not create temp file $path: $!";
- return ();
- }
-
- # Loop round for another try
-
- }
- } elsif ($options{"mkdir"}) {
-
- # Open the temp directory
- if (mkdir( $path, 0700)) {
- # in case of odd umask
- chmod(0700, $path);
-
- return undef, $path;
- } else {
-
- # Abort with error if the reason for failure was anything
- # except EEXIST
- unless ($!{EEXIST}) {
- ${$options{ErrStr}} = "Could not create directory $path: $!";
- return ();
- }
-
- # Loop round for another try
-
- }
-
- } else {
-
- # Return true if the file can not be found
- # Directory has been checked previously
-
- return (undef, $path) unless -e $path;
-
- # Try again until MAX_TRIES
-
- }
-
- # Did not successfully open the tempfile/dir
- # so try again with a different set of random letters
- # No point in trying to increment unless we have only
- # 1 X say and the randomness could come up with the same
- # file MAX_TRIES in a row.
-
- # Store current attempt - in principal this implies that the
- # 3rd time around the open attempt that the first temp file
- # name could be generated again. Probably should store each
- # attempt and make sure that none are repeated
-
- my $original = $path;
- my $counter = 0; # Stop infinite loop
- my $MAX_GUESS = 50;
-
- do {
-
- # Generate new name from original template
- $path = _replace_XX($template, $options{"suffixlen"});
-
- $counter++;
-
- } until ($path ne $original || $counter > $MAX_GUESS);
-
- # Check for out of control looping
- if ($counter > $MAX_GUESS) {
- ${$options{ErrStr}} = "Tried to get a new temp name different to the previous value $MAX_GUESS times.\nSomething wrong with template?? ($template)";
- return ();
- }
-
- }
-
- # If we get here, we have run out of tries
- ${ $options{ErrStr} } = "Have exceeded the maximum number of attempts ("
- . MAX_TRIES . ") to open temp file/dir";
-
- return ();
-
-}
-
-# Internal routine to replace the XXXX... with random characters
-# This has to be done by _gettemp() every time it fails to
-# open a temp file/dir
-
-# Arguments: $template (the template with XXX),
-# $ignore (number of characters at end to ignore)
-
-# Returns: modified template
-
-sub _replace_XX {
-
- croak 'Usage: _replace_XX($template, $ignore)'
- unless scalar(@_) == 2;
-
- my ($path, $ignore) = @_;
-
- # Do it as an if, since the suffix adjusts which section to replace
- # and suffixlen=0 returns nothing if used in the substr directly
- # Alternatively, could simply set $ignore to length($path)-1
- # Don't want to always use substr when not required though.
- my $end = ( $] >= 5.006 ? "\\z" : "\\Z" );
-
- if ($ignore) {
- substr($path, 0, - $ignore) =~ s/X(?=X*$end)/$CHARS[ int( rand( @CHARS ) ) ]/ge;
- } else {
- $path =~ s/X(?=X*$end)/$CHARS[ int( rand( @CHARS ) ) ]/ge;
- }
- return $path;
-}
-
-# Internal routine to force a temp file to be writable after
-# it is created so that we can unlink it. Windows seems to occassionally
-# force a file to be readonly when written to certain temp locations
-sub _force_writable {
- my $file = shift;
- chmod 0600, $file;
-}
-
-
-# internal routine to check to see if the directory is safe
-# First checks to see if the directory is not owned by the
-# current user or root. Then checks to see if anyone else
-# can write to the directory and if so, checks to see if
-# it has the sticky bit set
-
-# Will not work on systems that do not support sticky bit
-
-#Args: directory path to check
-# Optionally: reference to scalar to contain error message
-# Returns true if the path is safe and false otherwise.
-# Returns undef if can not even run stat() on the path
-
-# This routine based on version written by Tom Christiansen
-
-# Presumably, by the time we actually attempt to create the
-# file or directory in this directory, it may not be safe
-# anymore... Have to run _is_safe directly after the open.
-
-sub _is_safe {
-
- my $path = shift;
- my $err_ref = shift;
-
- # Stat path
- my @info = stat($path);
- unless (scalar(@info)) {
- $$err_ref = "stat(path) returned no values";
- return 0;
- }
- ;
- return 1 if $^O eq 'VMS'; # owner delete control at file level
-
- # Check to see whether owner is neither superuser (or a system uid) nor me
- # Use the effective uid from the $> variable
- # UID is in [4]
- if ($info[4] > File::Temp->top_system_uid() && $info[4] != $>) {
-
- Carp::cluck(sprintf "uid=$info[4] topuid=%s euid=$> path='$path'",
- File::Temp->top_system_uid());
-
- $$err_ref = "Directory owned neither by root nor the current user"
- if ref($err_ref);
- return 0;
- }
-
- # check whether group or other can write file
- # use 066 to detect either reading or writing
- # use 022 to check writability
- # Do it with S_IWOTH and S_IWGRP for portability (maybe)
- # mode is in info[2]
- if (($info[2] & &Fcntl::S_IWGRP) || # Is group writable?
- ($info[2] & &Fcntl::S_IWOTH) ) { # Is world writable?
- # Must be a directory
- unless (-d $path) {
- $$err_ref = "Path ($path) is not a directory"
- if ref($err_ref);
- return 0;
- }
- # Must have sticky bit set
- unless (-k $path) {
- $$err_ref = "Sticky bit not set on $path when dir is group|world writable"
- if ref($err_ref);
- return 0;
- }
- }
-
- return 1;
-}
-
-# Internal routine to check whether a directory is safe
-# for temp files. Safer than _is_safe since it checks for
-# the possibility of chown giveaway and if that is a possibility
-# checks each directory in the path to see if it is safe (with _is_safe)
-
-# If _PC_CHOWN_RESTRICTED is not set, does the full test of each
-# directory anyway.
-
-# Takes optional second arg as scalar ref to error reason
-
-sub _is_verysafe {
-
- # Need POSIX - but only want to bother if really necessary due to overhead
- require POSIX;
-
- my $path = shift;
- print "_is_verysafe testing $path\n" if $DEBUG;
- return 1 if $^O eq 'VMS'; # owner delete control at file level
-
- my $err_ref = shift;
-
- # Should Get the value of _PC_CHOWN_RESTRICTED if it is defined
- # and If it is not there do the extensive test
- local($@);
- my $chown_restricted;
- $chown_restricted = &POSIX::_PC_CHOWN_RESTRICTED()
- if eval { &POSIX::_PC_CHOWN_RESTRICTED(); 1};
-
- # If chown_resticted is set to some value we should test it
- if (defined $chown_restricted) {
-
- # Return if the current directory is safe
- return _is_safe($path,$err_ref) if POSIX::sysconf( $chown_restricted );
-
- }
-
- # To reach this point either, the _PC_CHOWN_RESTRICTED symbol
- # was not avialable or the symbol was there but chown giveaway
- # is allowed. Either way, we now have to test the entire tree for
- # safety.
-
- # Convert path to an absolute directory if required
- unless (File::Spec->file_name_is_absolute($path)) {
- $path = File::Spec->rel2abs($path);
- }
-
- # Split directory into components - assume no file
- my ($volume, $directories, undef) = File::Spec->splitpath( $path, 1);
-
- # Slightly less efficient than having a function in File::Spec
- # to chop off the end of a directory or even a function that
- # can handle ../ in a directory tree
- # Sometimes splitdir() returns a blank at the end
- # so we will probably check the bottom directory twice in some cases
- my @dirs = File::Spec->splitdir($directories);
-
- # Concatenate one less directory each time around
- foreach my $pos (0.. $#dirs) {
- # Get a directory name
- my $dir = File::Spec->catpath($volume,
- File::Spec->catdir(@dirs[0.. $#dirs - $pos]),
- ''
- );
-
- print "TESTING DIR $dir\n" if $DEBUG;
-
- # Check the directory
- return 0 unless _is_safe($dir,$err_ref);
-
- }
-
- return 1;
-}
-
-
-
-# internal routine to determine whether unlink works on this
-# platform for files that are currently open.
-# Returns true if we can, false otherwise.
-
-# Currently WinNT, OS/2 and VMS can not unlink an opened file
-# On VMS this is because the O_EXCL flag is used to open the
-# temporary file. Currently I do not know enough about the issues
-# on VMS to decide whether O_EXCL is a requirement.
-
-sub _can_unlink_opened_file {
-
- if ($^O eq 'MSWin32' || $^O eq 'os2' || $^O eq 'VMS' || $^O eq 'dos' || $^O eq 'MacOS') {
- return 0;
- } else {
- return 1;
- }
-
-}
-
-# internal routine to decide which security levels are allowed
-# see safe_level() for more information on this
-
-# Controls whether the supplied security level is allowed
-
-# $cando = _can_do_level( $level )
-
-sub _can_do_level {
-
- # Get security level
- my $level = shift;
-
- # Always have to be able to do STANDARD
- return 1 if $level == STANDARD;
-
- # Currently, the systems that can do HIGH or MEDIUM are identical
- if ( $^O eq 'MSWin32' || $^O eq 'os2' || $^O eq 'cygwin' || $^O eq 'dos' || $^O eq 'MacOS' || $^O eq 'mpeix') {
- return 0;
- } else {
- return 1;
- }
-
-}
-
-# This routine sets up a deferred unlinking of a specified
-# filename and filehandle. It is used in the following cases:
-# - Called by unlink0 if an opened file can not be unlinked
-# - Called by tempfile() if files are to be removed on shutdown
-# - Called by tempdir() if directories are to be removed on shutdown
-
-# Arguments:
-# _deferred_unlink( $fh, $fname, $isdir );
-#
-# - filehandle (so that it can be expclicitly closed if open
-# - filename (the thing we want to remove)
-# - isdir (flag to indicate that we are being given a directory)
-# [and hence no filehandle]
-
-# Status is not referred to since all the magic is done with an END block
-
-{
- # Will set up two lexical variables to contain all the files to be
- # removed. One array for files, another for directories They will
- # only exist in this block.
-
- # This means we only have to set up a single END block to remove
- # all files.
-
- # in order to prevent child processes inadvertently deleting the parent
- # temp files we use a hash to store the temp files and directories
- # created by a particular process id.
-
- # %files_to_unlink contains values that are references to an array of
- # array references containing the filehandle and filename associated with
- # the temp file.
- my (%files_to_unlink, %dirs_to_unlink);
-
- # Set up an end block to use these arrays
- END {
- local($., $@, $!, $^E, $?);
- cleanup();
- }
-
- # Cleanup function. Always triggered on END but can be invoked
- # manually.
- sub cleanup {
- if (!$KEEP_ALL) {
- # Files
- my @files = (exists $files_to_unlink{$$} ?
- @{ $files_to_unlink{$$} } : () );
- foreach my $file (@files) {
- # close the filehandle without checking its state
- # in order to make real sure that this is closed
- # if its already closed then I dont care about the answer
- # probably a better way to do this
- close($file->[0]); # file handle is [0]
-
- if (-f $file->[1]) { # file name is [1]
- _force_writable( $file->[1] ); # for windows
- unlink $file->[1] or warn "Error removing ".$file->[1];
- }
- }
- # Dirs
- my @dirs = (exists $dirs_to_unlink{$$} ?
- @{ $dirs_to_unlink{$$} } : () );
- foreach my $dir (@dirs) {
- if (-d $dir) {
- # Some versions of rmtree will abort if you attempt to remove
- # the directory you are sitting in. We protect that and turn it
- # into a warning. We do this because this occurs during
- # cleanup and so can not be caught by the user.
- eval { rmtree($dir, $DEBUG, 0); };
- warn $@ if ($@ && $^W);
- }
- }
-
- # clear the arrays
- @{ $files_to_unlink{$$} } = ()
- if exists $files_to_unlink{$$};
- @{ $dirs_to_unlink{$$} } = ()
- if exists $dirs_to_unlink{$$};
- }
- }
-
-
- # This is the sub called to register a file for deferred unlinking
- # This could simply store the input parameters and defer everything
- # until the END block. For now we do a bit of checking at this
- # point in order to make sure that (1) we have a file/dir to delete
- # and (2) we have been called with the correct arguments.
- sub _deferred_unlink {
-
- croak 'Usage: _deferred_unlink($fh, $fname, $isdir)'
- unless scalar(@_) == 3;
-
- my ($fh, $fname, $isdir) = @_;
-
- warn "Setting up deferred removal of $fname\n"
- if $DEBUG;
-
- # If we have a directory, check that it is a directory
- if ($isdir) {
-
- if (-d $fname) {
-
- # Directory exists so store it
- # first on VMS turn []foo into [.foo] for rmtree
- $fname = VMS::Filespec::vmspath($fname) if $^O eq 'VMS';
- $dirs_to_unlink{$$} = []
- unless exists $dirs_to_unlink{$$};
- push (@{ $dirs_to_unlink{$$} }, $fname);
-
- } else {
- carp "Request to remove directory $fname could not be completed since it does not exist!\n" if $^W;
- }
-
- } else {
-
- if (-f $fname) {
-
- # file exists so store handle and name for later removal
- $files_to_unlink{$$} = []
- unless exists $files_to_unlink{$$};
- push(@{ $files_to_unlink{$$} }, [$fh, $fname]);
-
- } else {
- carp "Request to remove file $fname could not be completed since it is not there!\n" if $^W;
- }
-
- }
-
- }
-
-
-}
-
-=head1 OBJECT-ORIENTED INTERFACE
-
-This is the primary interface for interacting with
-C<File::Temp>. Using the OO interface a temporary file can be created
-when the object is constructed and the file can be removed when the
-object is no longer required.
-
-Note that there is no method to obtain the filehandle from the
-C<File::Temp> object. The object itself acts as a filehandle. Also,
-the object is configured such that it stringifies to the name of the
-temporary file, and can be compared to a filename directly. The object
-isa C<IO::Handle> and isa C<IO::Seekable> so all those methods are
-available.
-
-=over 4
-
-=item B<new>
-
-Create a temporary file object.
-
- my $tmp = File::Temp->new();
-
-by default the object is constructed as if C<tempfile>
-was called without options, but with the additional behaviour
-that the temporary file is removed by the object destructor
-if UNLINK is set to true (the default).
-
-Supported arguments are the same as for C<tempfile>: UNLINK
-(defaulting to true), DIR, EXLOCK and SUFFIX. Additionally, the filename
-template is specified using the TEMPLATE option. The OPEN option
-is not supported (the file is always opened).
-
- $tmp = File::Temp->new( TEMPLATE => 'tempXXXXX',
- DIR => 'mydir',
- SUFFIX => '.dat');
-
-Arguments are case insensitive.
-
-Can call croak() if an error occurs.
-
-=cut
-
-sub new {
- my $proto = shift;
- my $class = ref($proto) || $proto;
-
- # read arguments and convert keys to upper case
- my %args = @_;
- %args = map { uc($_), $args{$_} } keys %args;
-
- # see if they are unlinking (defaulting to yes)
- my $unlink = (exists $args{UNLINK} ? $args{UNLINK} : 1 );
- delete $args{UNLINK};
-
- # template (store it in an array so that it will
- # disappear from the arg list of tempfile)
- my @template = ( exists $args{TEMPLATE} ? $args{TEMPLATE} : () );
- delete $args{TEMPLATE};
-
- # Protect OPEN
- delete $args{OPEN};
-
- # Open the file and retain file handle and file name
- my ($fh, $path) = tempfile( @template, %args );
-
- print "Tmp: $fh - $path\n" if $DEBUG;
-
- # Store the filename in the scalar slot
- ${*$fh} = $path;
-
- # Cache the filename by pid so that the destructor can decide whether to remove it
- $FILES_CREATED_BY_OBJECT{$$}{$path} = 1;
-
- # Store unlink information in hash slot (plus other constructor info)
- %{*$fh} = %args;
-
- # create the object
- bless $fh, $class;
-
- # final method-based configuration
- $fh->unlink_on_destroy( $unlink );
-
- return $fh;
-}
-
-=item B<newdir>
-
-Create a temporary directory using an object oriented interface.
-
- $dir = File::Temp->newdir();
-
-By default the directory is deleted when the object goes out of scope.
-
-Supports the same options as the C<tempdir> function. Note that directories
-created with this method default to CLEANUP => 1.
-
- $dir = File::Temp->newdir( $template, %options );
-
-=cut
-
-sub newdir {
- my $self = shift;
-
- # need to handle args as in tempdir because we have to force CLEANUP
- # default without passing CLEANUP to tempdir
- my $template = (scalar(@_) % 2 == 1 ? shift(@_) : undef );
- my %options = @_;
- my $cleanup = (exists $options{CLEANUP} ? $options{CLEANUP} : 1 );
-
- delete $options{CLEANUP};
-
- my $tempdir;
- if (defined $template) {
- $tempdir = tempdir( $template, %options );
- } else {
- $tempdir = tempdir( %options );
- }
- return bless { DIRNAME => $tempdir,
- CLEANUP => $cleanup,
- LAUNCHPID => $$,
- }, "File::Temp::Dir";
-}
-
-=item B<filename>
-
-Return the name of the temporary file associated with this object
-(if the object was created using the "new" constructor).
-
- $filename = $tmp->filename;
-
-This method is called automatically when the object is used as
-a string.
-
-=cut
-
-sub filename {
- my $self = shift;
- return ${*$self};
-}
-
-sub STRINGIFY {
- my $self = shift;
- return $self->filename;
-}
-
-=item B<dirname>
-
-Return the name of the temporary directory associated with this
-object (if the object was created using the "newdir" constructor).
-
- $dirname = $tmpdir->dirname;
-
-This method is called automatically when the object is used in string context.
-
-=item B<unlink_on_destroy>
-
-Control whether the file is unlinked when the object goes out of scope.
-The file is removed if this value is true and $KEEP_ALL is not.
-
- $fh->unlink_on_destroy( 1 );
-
-Default is for the file to be removed.
-
-=cut
-
-sub unlink_on_destroy {
- my $self = shift;
- if (@_) {
- ${*$self}{UNLINK} = shift;
- }
- return ${*$self}{UNLINK};
-}
-
-=item B<DESTROY>
-
-When the object goes out of scope, the destructor is called. This
-destructor will attempt to unlink the file (using C<unlink1>)
-if the constructor was called with UNLINK set to 1 (the default state
-if UNLINK is not specified).
-
-No error is given if the unlink fails.
-
-If the object has been passed to a child process during a fork, the
-file will be deleted when the object goes out of scope in the parent.
-
-For a temporary directory object the directory will be removed
-unless the CLEANUP argument was used in the constructor (and set to
-false) or C<unlink_on_destroy> was modified after creation.
-
-If the global variable $KEEP_ALL is true, the file or directory
-will not be removed.
-
-=cut
-
-sub DESTROY {
- local($., $@, $!, $^E, $?);
- my $self = shift;
-
- # Make sure we always remove the file from the global hash
- # on destruction. This prevents the hash from growing uncontrollably
- # and post-destruction there is no reason to know about the file.
- my $file = $self->filename;
- my $was_created_by_proc;
- if (exists $FILES_CREATED_BY_OBJECT{$$}{$file}) {
- $was_created_by_proc = 1;
- delete $FILES_CREATED_BY_OBJECT{$$}{$file};
- }
-
- if (${*$self}{UNLINK} && !$KEEP_ALL) {
- print "# ---------> Unlinking $self\n" if $DEBUG;
-
- # only delete if this process created it
- return unless $was_created_by_proc;
-
- # The unlink1 may fail if the file has been closed
- # by the caller. This leaves us with the decision
- # of whether to refuse to remove the file or simply
- # do an unlink without test. Seems to be silly
- # to do this when we are trying to be careful
- # about security
- _force_writable( $file ); # for windows
- unlink1( $self, $file )
- or unlink($file);
- }
-}
-
-=back
-
-=head1 FUNCTIONS
-
-This section describes the recommended interface for generating
-temporary files and directories.
-
-=over 4
-
-=item B<tempfile>
-
-This is the basic function to generate temporary files.
-The behaviour of the file can be changed using various options:
-
- $fh = tempfile();
- ($fh, $filename) = tempfile();
-
-Create a temporary file in the directory specified for temporary
-files, as specified by the tmpdir() function in L<File::Spec>.
-
- ($fh, $filename) = tempfile($template);
-
-Create a temporary file in the current directory using the supplied
-template. Trailing `X' characters are replaced with random letters to
-generate the filename. At least four `X' characters must be present
-at the end of the template.
-
- ($fh, $filename) = tempfile($template, SUFFIX => $suffix)
-
-Same as previously, except that a suffix is added to the template
-after the `X' translation. Useful for ensuring that a temporary
-filename has a particular extension when needed by other applications.
-But see the WARNING at the end.
-
- ($fh, $filename) = tempfile($template, DIR => $dir);
-
-Translates the template as before except that a directory name
-is specified.
-
- ($fh, $filename) = tempfile($template, TMPDIR => 1);
-
-Equivalent to specifying a DIR of "File::Spec->tmpdir", writing the file
-into the same temporary directory as would be used if no template was
-specified at all.
-
- ($fh, $filename) = tempfile($template, UNLINK => 1);
-
-Return the filename and filehandle as before except that the file is
-automatically removed when the program exits (dependent on
-$KEEP_ALL). Default is for the file to be removed if a file handle is
-requested and to be kept if the filename is requested. In a scalar
-context (where no filename is returned) the file is always deleted
-either (depending on the operating system) on exit or when it is
-closed (unless $KEEP_ALL is true when the temp file is created).
-
-Use the object-oriented interface if fine-grained control of when
-a file is removed is required.
-
-If the template is not specified, a template is always
-automatically generated. This temporary file is placed in tmpdir()
-(L<File::Spec>) unless a directory is specified explicitly with the
-DIR option.
-
- $fh = tempfile( DIR => $dir );
-
-If called in scalar context, only the filehandle is returned and the
-file will automatically be deleted when closed on operating systems
-that support this (see the description of tmpfile() elsewhere in this
-document). This is the preferred mode of operation, as if you only
-have a filehandle, you can never create a race condition by fumbling
-with the filename. On systems that can not unlink an open file or can
-not mark a file as temporary when it is opened (for example, Windows
-NT uses the C<O_TEMPORARY> flag) the file is marked for deletion when
-the program ends (equivalent to setting UNLINK to 1). The C<UNLINK>
-flag is ignored if present.
-
- (undef, $filename) = tempfile($template, OPEN => 0);
-
-This will return the filename based on the template but
-will not open this file. Cannot be used in conjunction with
-UNLINK set to true. Default is to always open the file
-to protect from possible race conditions. A warning is issued
-if warnings are turned on. Consider using the tmpnam()
-and mktemp() functions described elsewhere in this document
-if opening the file is not required.
-
-If the operating system supports it (for example BSD derived systems), the
-filehandle will be opened with O_EXLOCK (open with exclusive file lock).
-This can sometimes cause problems if the intention is to pass the filename
-to another system that expects to take an exclusive lock itself (such as
-DBD::SQLite) whilst ensuring that the tempfile is not reused. In this
-situation the "EXLOCK" option can be passed to tempfile. By default EXLOCK
-will be true (this retains compatibility with earlier releases).
-
- ($fh, $filename) = tempfile($template, EXLOCK => 0);
-
-Options can be combined as required.
-
-Will croak() if there is an error.
-
-=cut
-
-sub tempfile {
-
- # Can not check for argument count since we can have any
- # number of args
-
- # Default options
- my %options = (
- "DIR" => undef, # Directory prefix
- "SUFFIX" => '', # Template suffix
- "UNLINK" => 0, # Do not unlink file on exit
- "OPEN" => 1, # Open file
- "TMPDIR" => 0, # Place tempfile in tempdir if template specified
- "EXLOCK" => 1, # Open file with O_EXLOCK
- );
-
- # Check to see whether we have an odd or even number of arguments
- my $template = (scalar(@_) % 2 == 1 ? shift(@_) : undef);
-
- # Read the options and merge with defaults
- %options = (%options, @_) if @_;
-
- # First decision is whether or not to open the file
- if (! $options{"OPEN"}) {
-
- warn "tempfile(): temporary filename requested but not opened.\nPossibly unsafe, consider using tempfile() with OPEN set to true\n"
- if $^W;
-
- }
-
- if ($options{"DIR"} and $^O eq 'VMS') {
-
- # on VMS turn []foo into [.foo] for concatenation
- $options{"DIR"} = VMS::Filespec::vmspath($options{"DIR"});
- }
-
- # Construct the template
-
- # Have a choice of trying to work around the mkstemp/mktemp/tmpnam etc
- # functions or simply constructing a template and using _gettemp()
- # explicitly. Go for the latter
-
- # First generate a template if not defined and prefix the directory
- # If no template must prefix the temp directory
- if (defined $template) {
- # End up with current directory if neither DIR not TMPDIR are set
- if ($options{"DIR"}) {
-
- $template = File::Spec->catfile($options{"DIR"}, $template);
-
- } elsif ($options{TMPDIR}) {
-
- $template = File::Spec->catfile(File::Spec->tmpdir, $template );
-
- }
-
- } else {
-
- if ($options{"DIR"}) {
-
- $template = File::Spec->catfile($options{"DIR"}, TEMPXXX);
-
- } else {
-
- $template = File::Spec->catfile(File::Spec->tmpdir, TEMPXXX);
-
- }
-
- }
-
- # Now add a suffix
- $template .= $options{"SUFFIX"};
-
- # Determine whether we should tell _gettemp to unlink the file
- # On unix this is irrelevant and can be worked out after the file is
- # opened (simply by unlinking the open filehandle). On Windows or VMS
- # we have to indicate temporary-ness when we open the file. In general
- # we only want a true temporary file if we are returning just the
- # filehandle - if the user wants the filename they probably do not
- # want the file to disappear as soon as they close it (which may be
- # important if they want a child process to use the file)
- # For this reason, tie unlink_on_close to the return context regardless
- # of OS.
- my $unlink_on_close = ( wantarray ? 0 : 1);
-
- # Create the file
- my ($fh, $path, $errstr);
- croak "Error in tempfile() using $template: $errstr"
- unless (($fh, $path) = _gettemp($template,
- "open" => $options{'OPEN'},
- "mkdir"=> 0 ,
- "unlink_on_close" => $unlink_on_close,
- "suffixlen" => length($options{'SUFFIX'}),
- "ErrStr" => \$errstr,
- "use_exlock" => $options{EXLOCK},
- ) );
-
- # Set up an exit handler that can do whatever is right for the
- # system. This removes files at exit when requested explicitly or when
- # system is asked to unlink_on_close but is unable to do so because
- # of OS limitations.
- # The latter should be achieved by using a tied filehandle.
- # Do not check return status since this is all done with END blocks.
- _deferred_unlink($fh, $path, 0) if $options{"UNLINK"};
-
- # Return
- if (wantarray()) {
-
- if ($options{'OPEN'}) {
- return ($fh, $path);
- } else {
- return (undef, $path);
- }
-
- } else {
-
- # Unlink the file. It is up to unlink0 to decide what to do with
- # this (whether to unlink now or to defer until later)
- unlink0($fh, $path) or croak "Error unlinking file $path using unlink0";
-
- # Return just the filehandle.
- return $fh;
- }
-
-
-}
-
-=item B<tempdir>
-
-This is the recommended interface for creation of temporary
-directories. By default the directory will not be removed on exit
-(that is, it won't be temporary; this behaviour can not be changed
-because of issues with backwards compatibility). To enable removal
-either use the CLEANUP option which will trigger removal on program
-exit, or consider using the "newdir" method in the object interface which
-will allow the directory to be cleaned up when the object goes out of
-scope.
-
-The behaviour of the function depends on the arguments:
-
- $tempdir = tempdir();
-
-Create a directory in tmpdir() (see L<File::Spec|File::Spec>).
-
- $tempdir = tempdir( $template );
-
-Create a directory from the supplied template. This template is
-similar to that described for tempfile(). `X' characters at the end
-of the template are replaced with random letters to construct the
-directory name. At least four `X' characters must be in the template.
-
- $tempdir = tempdir ( DIR => $dir );
-
-Specifies the directory to use for the temporary directory.
-The temporary directory name is derived from an internal template.
-
- $tempdir = tempdir ( $template, DIR => $dir );
-
-Prepend the supplied directory name to the template. The template
-should not include parent directory specifications itself. Any parent
-directory specifications are removed from the template before
-prepending the supplied directory.
-
- $tempdir = tempdir ( $template, TMPDIR => 1 );
-
-Using the supplied template, create the temporary directory in
-a standard location for temporary files. Equivalent to doing
-
- $tempdir = tempdir ( $template, DIR => File::Spec->tmpdir);
-
-but shorter. Parent directory specifications are stripped from the
-template itself. The C<TMPDIR> option is ignored if C<DIR> is set
-explicitly. Additionally, C<TMPDIR> is implied if neither a template
-nor a directory are supplied.
-
- $tempdir = tempdir( $template, CLEANUP => 1);
-
-Create a temporary directory using the supplied template, but
-attempt to remove it (and all files inside it) when the program
-exits. Note that an attempt will be made to remove all files from
-the directory even if they were not created by this module (otherwise
-why ask to clean it up?). The directory removal is made with
-the rmtree() function from the L<File::Path|File::Path> module.
-Of course, if the template is not specified, the temporary directory
-will be created in tmpdir() and will also be removed at program exit.
-
-Will croak() if there is an error.
-
-=cut
-
-# '
-
-sub tempdir {
-
- # Can not check for argument count since we can have any
- # number of args
-
- # Default options
- my %options = (
- "CLEANUP" => 0, # Remove directory on exit
- "DIR" => '', # Root directory
- "TMPDIR" => 0, # Use tempdir with template
- );
-
- # Check to see whether we have an odd or even number of arguments
- my $template = (scalar(@_) % 2 == 1 ? shift(@_) : undef );
-
- # Read the options and merge with defaults
- %options = (%options, @_) if @_;
-
- # Modify or generate the template
-
- # Deal with the DIR and TMPDIR options
- if (defined $template) {
-
- # Need to strip directory path if using DIR or TMPDIR
- if ($options{'TMPDIR'} || $options{'DIR'}) {
-
- # Strip parent directory from the filename
- #
- # There is no filename at the end
- $template = VMS::Filespec::vmspath($template) if $^O eq 'VMS';
- my ($volume, $directories, undef) = File::Spec->splitpath( $template, 1);
-
- # Last directory is then our template
- $template = (File::Spec->splitdir($directories))[-1];
-
- # Prepend the supplied directory or temp dir
- if ($options{"DIR"}) {
-
- $template = File::Spec->catdir($options{"DIR"}, $template);
-
- } elsif ($options{TMPDIR}) {
-
- # Prepend tmpdir
- $template = File::Spec->catdir(File::Spec->tmpdir, $template);
-
- }
-
- }
-
- } else {
-
- if ($options{"DIR"}) {
-
- $template = File::Spec->catdir($options{"DIR"}, TEMPXXX);
-
- } else {
-
- $template = File::Spec->catdir(File::Spec->tmpdir, TEMPXXX);
-
- }
-
- }
-
- # Create the directory
- my $tempdir;
- my $suffixlen = 0;
- if ($^O eq 'VMS') { # dir names can end in delimiters
- $template =~ m/([\.\]:>]+)$/;
- $suffixlen = length($1);
- }
- if ( ($^O eq 'MacOS') && (substr($template, -1) eq ':') ) {
- # dir name has a trailing ':'
- ++$suffixlen;
- }
-
- my $errstr;
- croak "Error in tempdir() using $template: $errstr"
- unless ((undef, $tempdir) = _gettemp($template,
- "open" => 0,
- "mkdir"=> 1 ,
- "suffixlen" => $suffixlen,
- "ErrStr" => \$errstr,
- ) );
-
- # Install exit handler; must be dynamic to get lexical
- if ( $options{'CLEANUP'} && -d $tempdir) {
- _deferred_unlink(undef, $tempdir, 1);
- }
-
- # Return the dir name
- return $tempdir;
-
-}
-
-=back
-
-=head1 MKTEMP FUNCTIONS
-
-The following functions are Perl implementations of the
-mktemp() family of temp file generation system calls.
-
-=over 4
-
-=item B<mkstemp>
-
-Given a template, returns a filehandle to the temporary file and the name
-of the file.
-
- ($fh, $name) = mkstemp( $template );
-
-In scalar context, just the filehandle is returned.
-
-The template may be any filename with some number of X's appended
-to it, for example F</tmp/temp.XXXX>. The trailing X's are replaced
-with unique alphanumeric combinations.
-
-Will croak() if there is an error.
-
-=cut
-
-
-
-sub mkstemp {
-
- croak "Usage: mkstemp(template)"
- if scalar(@_) != 1;
-
- my $template = shift;
-
- my ($fh, $path, $errstr);
- croak "Error in mkstemp using $template: $errstr"
- unless (($fh, $path) = _gettemp($template,
- "open" => 1,
- "mkdir"=> 0 ,
- "suffixlen" => 0,
- "ErrStr" => \$errstr,
- ) );
-
- if (wantarray()) {
- return ($fh, $path);
- } else {
- return $fh;
- }
-
-}
-
-
-=item B<mkstemps>
-
-Similar to mkstemp(), except that an extra argument can be supplied
-with a suffix to be appended to the template.
-
- ($fh, $name) = mkstemps( $template, $suffix );
-
-For example a template of C<testXXXXXX> and suffix of C<.dat>
-would generate a file similar to F<testhGji_w.dat>.
-
-Returns just the filehandle alone when called in scalar context.
-
-Will croak() if there is an error.
-
-=cut
-
-sub mkstemps {
-
- croak "Usage: mkstemps(template, suffix)"
- if scalar(@_) != 2;
-
-
- my $template = shift;
- my $suffix = shift;
-
- $template .= $suffix;
-
- my ($fh, $path, $errstr);
- croak "Error in mkstemps using $template: $errstr"
- unless (($fh, $path) = _gettemp($template,
- "open" => 1,
- "mkdir"=> 0 ,
- "suffixlen" => length($suffix),
- "ErrStr" => \$errstr,
- ) );
-
- if (wantarray()) {
- return ($fh, $path);
- } else {
- return $fh;
- }
-
-}
-
-=item B<mkdtemp>
-
-Create a directory from a template. The template must end in
-X's that are replaced by the routine.
-
- $tmpdir_name = mkdtemp($template);
-
-Returns the name of the temporary directory created.
-
-Directory must be removed by the caller.
-
-Will croak() if there is an error.
-
-=cut
-
-#' # for emacs
-
-sub mkdtemp {
-
- croak "Usage: mkdtemp(template)"
- if scalar(@_) != 1;
-
- my $template = shift;
- my $suffixlen = 0;
- if ($^O eq 'VMS') { # dir names can end in delimiters
- $template =~ m/([\.\]:>]+)$/;
- $suffixlen = length($1);
- }
- if ( ($^O eq 'MacOS') && (substr($template, -1) eq ':') ) {
- # dir name has a trailing ':'
- ++$suffixlen;
- }
- my ($junk, $tmpdir, $errstr);
- croak "Error creating temp directory from template $template\: $errstr"
- unless (($junk, $tmpdir) = _gettemp($template,
- "open" => 0,
- "mkdir"=> 1 ,
- "suffixlen" => $suffixlen,
- "ErrStr" => \$errstr,
- ) );
-
- return $tmpdir;
-
-}
-
-=item B<mktemp>
-
-Returns a valid temporary filename but does not guarantee
-that the file will not be opened by someone else.
-
- $unopened_file = mktemp($template);
-
-Template is the same as that required by mkstemp().
-
-Will croak() if there is an error.
-
-=cut
-
-sub mktemp {
-
- croak "Usage: mktemp(template)"
- if scalar(@_) != 1;
-
- my $template = shift;
-
- my ($tmpname, $junk, $errstr);
- croak "Error getting name to temp file from template $template: $errstr"
- unless (($junk, $tmpname) = _gettemp($template,
- "open" => 0,
- "mkdir"=> 0 ,
- "suffixlen" => 0,
- "ErrStr" => \$errstr,
- ) );
-
- return $tmpname;
-}
-
-=back
-
-=head1 POSIX FUNCTIONS
-
-This section describes the re-implementation of the tmpnam()
-and tmpfile() functions described in L<POSIX>
-using the mkstemp() from this module.
-
-Unlike the L<POSIX|POSIX> implementations, the directory used
-for the temporary file is not specified in a system include
-file (C<P_tmpdir>) but simply depends on the choice of tmpdir()
-returned by L<File::Spec|File::Spec>. On some implementations this
-location can be set using the C<TMPDIR> environment variable, which
-may not be secure.
-If this is a problem, simply use mkstemp() and specify a template.
-
-=over 4
-
-=item B<tmpnam>
-
-When called in scalar context, returns the full name (including path)
-of a temporary file (uses mktemp()). The only check is that the file does
-not already exist, but there is no guarantee that that condition will
-continue to apply.
-
- $file = tmpnam();
-
-When called in list context, a filehandle to the open file and
-a filename are returned. This is achieved by calling mkstemp()
-after constructing a suitable template.
-
- ($fh, $file) = tmpnam();
-
-If possible, this form should be used to prevent possible
-race conditions.
-
-See L<File::Spec/tmpdir> for information on the choice of temporary
-directory for a particular operating system.
-
-Will croak() if there is an error.
-
-=cut
-
-sub tmpnam {
-
- # Retrieve the temporary directory name
- my $tmpdir = File::Spec->tmpdir;
-
- croak "Error temporary directory is not writable"
- if $tmpdir eq '';
-
- # Use a ten character template and append to tmpdir
- my $template = File::Spec->catfile($tmpdir, TEMPXXX);
-
- if (wantarray() ) {
- return mkstemp($template);
- } else {
- return mktemp($template);
- }
-
-}
-
-=item B<tmpfile>
-
-Returns the filehandle of a temporary file.
-
- $fh = tmpfile();
-
-The file is removed when the filehandle is closed or when the program
-exits. No access to the filename is provided.
-
-If the temporary file can not be created undef is returned.
-Currently this command will probably not work when the temporary
-directory is on an NFS file system.
-
-Will croak() if there is an error.
-
-=cut
-
-sub tmpfile {
-
- # Simply call tmpnam() in a list context
- my ($fh, $file) = tmpnam();
-
- # Make sure file is removed when filehandle is closed
- # This will fail on NFS
- unlink0($fh, $file)
- or return undef;
-
- return $fh;
-
-}
-
-=back
-
-=head1 ADDITIONAL FUNCTIONS
-
-These functions are provided for backwards compatibility
-with common tempfile generation C library functions.
-
-They are not exported and must be addressed using the full package
-name.
-
-=over 4
-
-=item B<tempnam>
-
-Return the name of a temporary file in the specified directory
-using a prefix. The file is guaranteed not to exist at the time
-the function was called, but such guarantees are good for one
-clock tick only. Always use the proper form of C<sysopen>
-with C<O_CREAT | O_EXCL> if you must open such a filename.
-
- $filename = File::Temp::tempnam( $dir, $prefix );
-
-Equivalent to running mktemp() with $dir/$prefixXXXXXXXX
-(using unix file convention as an example)
-
-Because this function uses mktemp(), it can suffer from race conditions.
-
-Will croak() if there is an error.
-
-=cut
-
-sub tempnam {
-
- croak 'Usage tempnam($dir, $prefix)' unless scalar(@_) == 2;
-
- my ($dir, $prefix) = @_;
-
- # Add a string to the prefix
- $prefix .= 'XXXXXXXX';
-
- # Concatenate the directory to the file
- my $template = File::Spec->catfile($dir, $prefix);
-
- return mktemp($template);
-
-}
-
-=back
-
-=head1 UTILITY FUNCTIONS
-
-Useful functions for dealing with the filehandle and filename.
-
-=over 4
-
-=item B<unlink0>
-
-Given an open filehandle and the associated filename, make a safe
-unlink. This is achieved by first checking that the filename and
-filehandle initially point to the same file and that the number of
-links to the file is 1 (all fields returned by stat() are compared).
-Then the filename is unlinked and the filehandle checked once again to
-verify that the number of links on that file is now 0. This is the
-closest you can come to making sure that the filename unlinked was the
-same as the file whose descriptor you hold.
-
- unlink0($fh, $path)
- or die "Error unlinking file $path safely";
-
-Returns false on error but croaks() if there is a security
-anomaly. The filehandle is not closed since on some occasions this is
-not required.
-
-On some platforms, for example Windows NT, it is not possible to
-unlink an open file (the file must be closed first). On those
-platforms, the actual unlinking is deferred until the program ends and
-good status is returned. A check is still performed to make sure that
-the filehandle and filename are pointing to the same thing (but not at
-the time the end block is executed since the deferred removal may not
-have access to the filehandle).
-
-Additionally, on Windows NT not all the fields returned by stat() can
-be compared. For example, the C<dev> and C<rdev> fields seem to be
-different. Also, it seems that the size of the file returned by stat()
-does not always agree, with C<stat(FH)> being more accurate than
-C<stat(filename)>, presumably because of caching issues even when
-using autoflush (this is usually overcome by waiting a while after
-writing to the tempfile before attempting to C<unlink0> it).
-
-Finally, on NFS file systems the link count of the file handle does
-not always go to zero immediately after unlinking. Currently, this
-command is expected to fail on NFS disks.
-
-This function is disabled if the global variable $KEEP_ALL is true
-and an unlink on open file is supported. If the unlink is to be deferred
-to the END block, the file is still registered for removal.
-
-This function should not be called if you are using the object oriented
-interface since the it will interfere with the object destructor deleting
-the file.
-
-=cut
-
-sub unlink0 {
-
- croak 'Usage: unlink0(filehandle, filename)'
- unless scalar(@_) == 2;
-
- # Read args
- my ($fh, $path) = @_;
-
- cmpstat($fh, $path) or return 0;
-
- # attempt remove the file (does not work on some platforms)
- if (_can_unlink_opened_file()) {
-
- # return early (Without unlink) if we have been instructed to retain files.
- return 1 if $KEEP_ALL;
-
- # XXX: do *not* call this on a directory; possible race
- # resulting in recursive removal
- croak "unlink0: $path has become a directory!" if -d $path;
- unlink($path) or return 0;
-
- # Stat the filehandle
- my @fh = stat $fh;
-
- print "Link count = $fh[3] \n" if $DEBUG;
-
- # Make sure that the link count is zero
- # - Cygwin provides deferred unlinking, however,
- # on Win9x the link count remains 1
- # On NFS the link count may still be 1 but we cant know that
- # we are on NFS
- return ( $fh[3] == 0 or $^O eq 'cygwin' ? 1 : 0);
-
- } else {
- _deferred_unlink($fh, $path, 0);
- return 1;
- }
-
-}
-
-=item B<cmpstat>
-
-Compare C<stat> of filehandle with C<stat> of provided filename. This
-can be used to check that the filename and filehandle initially point
-to the same file and that the number of links to the file is 1 (all
-fields returned by stat() are compared).
-
- cmpstat($fh, $path)
- or die "Error comparing handle with file";
-
-Returns false if the stat information differs or if the link count is
-greater than 1. Calls croak if there is a security anomaly.
-
-On certain platforms, for example Windows, not all the fields returned by stat()
-can be compared. For example, the C<dev> and C<rdev> fields seem to be
-different in Windows. Also, it seems that the size of the file
-returned by stat() does not always agree, with C<stat(FH)> being more
-accurate than C<stat(filename)>, presumably because of caching issues
-even when using autoflush (this is usually overcome by waiting a while
-after writing to the tempfile before attempting to C<unlink0> it).
-
-Not exported by default.
-
-=cut
-
-sub cmpstat {
-
- croak 'Usage: cmpstat(filehandle, filename)'
- unless scalar(@_) == 2;
-
- # Read args
- my ($fh, $path) = @_;
-
- warn "Comparing stat\n"
- if $DEBUG;
-
- # Stat the filehandle - which may be closed if someone has manually
- # closed the file. Can not turn off warnings without using $^W
- # unless we upgrade to 5.006 minimum requirement
- my @fh;
- {
- local ($^W) = 0;
- @fh = stat $fh;
- }
- return unless @fh;
-
- if ($fh[3] > 1 && $^W) {
- carp "unlink0: fstat found too many links; SB=@fh" if $^W;
- }
-
- # Stat the path
- my @path = stat $path;
-
- unless (@path) {
- carp "unlink0: $path is gone already" if $^W;
- return;
- }
-
- # this is no longer a file, but may be a directory, or worse
- unless (-f $path) {
- confess "panic: $path is no longer a file: SB=@fh";
- }
-
- # Do comparison of each member of the array
- # On WinNT dev and rdev seem to be different
- # depending on whether it is a file or a handle.
- # Cannot simply compare all members of the stat return
- # Select the ones we can use
- my @okstat = (0..$#fh); # Use all by default
- if ($^O eq 'MSWin32') {
- @okstat = (1,2,3,4,5,7,8,9,10);
- } elsif ($^O eq 'os2') {
- @okstat = (0, 2..$#fh);
- } elsif ($^O eq 'VMS') { # device and file ID are sufficient
- @okstat = (0, 1);
- } elsif ($^O eq 'dos') {
- @okstat = (0,2..7,11..$#fh);
- } elsif ($^O eq 'mpeix') {
- @okstat = (0..4,8..10);
- }
-
- # Now compare each entry explicitly by number
- for (@okstat) {
- print "Comparing: $_ : $fh[$_] and $path[$_]\n" if $DEBUG;
- # Use eq rather than == since rdev, blksize, and blocks (6, 11,
- # and 12) will be '' on platforms that do not support them. This
- # is fine since we are only comparing integers.
- unless ($fh[$_] eq $path[$_]) {
- warn "Did not match $_ element of stat\n" if $DEBUG;
- return 0;
- }
- }
-
- return 1;
-}
-
-=item B<unlink1>
-
-Similar to C<unlink0> except after file comparison using cmpstat, the
-filehandle is closed prior to attempting to unlink the file. This
-allows the file to be removed without using an END block, but does
-mean that the post-unlink comparison of the filehandle state provided
-by C<unlink0> is not available.
-
- unlink1($fh, $path)
- or die "Error closing and unlinking file";
-
-Usually called from the object destructor when using the OO interface.
-
-Not exported by default.
-
-This function is disabled if the global variable $KEEP_ALL is true.
-
-Can call croak() if there is a security anomaly during the stat()
-comparison.
-
-=cut
-
-sub unlink1 {
- croak 'Usage: unlink1(filehandle, filename)'
- unless scalar(@_) == 2;
-
- # Read args
- my ($fh, $path) = @_;
-
- cmpstat($fh, $path) or return 0;
-
- # Close the file
- close( $fh ) or return 0;
-
- # Make sure the file is writable (for windows)
- _force_writable( $path );
-
- # return early (without unlink) if we have been instructed to retain files.
- return 1 if $KEEP_ALL;
-
- # remove the file
- return unlink($path);
-}
-
-=item B<cleanup>
-
-Calling this function will cause any temp files or temp directories
-that are registered for removal to be removed. This happens automatically
-when the process exits but can be triggered manually if the caller is sure
-that none of the temp files are required. This method can be registered as
-an Apache callback.
-
-On OSes where temp files are automatically removed when the temp file
-is closed, calling this function will have no effect other than to remove
-temporary directories (which may include temporary files).
-
- File::Temp::cleanup();
-
-Not exported by default.
-
-=back
-
-=head1 PACKAGE VARIABLES
-
-These functions control the global state of the package.
-
-=over 4
-
-=item B<safe_level>
-
-Controls the lengths to which the module will go to check the safety of the
-temporary file or directory before proceeding.
-Options are:
-
-=over 8
-
-=item STANDARD
-
-Do the basic security measures to ensure the directory exists and is
-writable, that temporary files are opened only if they do not already
-exist, and that possible race conditions are avoided. Finally the
-L<unlink0|"unlink0"> function is used to remove files safely.
-
-=item MEDIUM
-
-In addition to the STANDARD security, the output directory is checked
-to make sure that it is owned either by root or the user running the
-program. If the directory is writable by group or by other, it is then
-checked to make sure that the sticky bit is set.
-
-Will not work on platforms that do not support the C<-k> test
-for sticky bit.
-
-=item HIGH
-
-In addition to the MEDIUM security checks, also check for the
-possibility of ``chown() giveaway'' using the L<POSIX|POSIX>
-sysconf() function. If this is a possibility, each directory in the
-path is checked in turn for safeness, recursively walking back to the
-root directory.
-
-For platforms that do not support the L<POSIX|POSIX>
-C<_PC_CHOWN_RESTRICTED> symbol (for example, Windows NT) it is
-assumed that ``chown() giveaway'' is possible and the recursive test
-is performed.
-
-=back
-
-The level can be changed as follows:
-
- File::Temp->safe_level( File::Temp::HIGH );
-
-The level constants are not exported by the module.
-
-Currently, you must be running at least perl v5.6.0 in order to
-run with MEDIUM or HIGH security. This is simply because the
-safety tests use functions from L<Fcntl|Fcntl> that are not
-available in older versions of perl. The problem is that the version
-number for Fcntl is the same in perl 5.6.0 and in 5.005_03 even though
-they are different versions.
-
-On systems that do not support the HIGH or MEDIUM safety levels
-(for example Win NT or OS/2) any attempt to change the level will
-be ignored. The decision to ignore rather than raise an exception
-allows portable programs to be written with high security in mind
-for the systems that can support this without those programs failing
-on systems where the extra tests are irrelevant.
-
-If you really need to see whether the change has been accepted
-simply examine the return value of C<safe_level>.
-
- $newlevel = File::Temp->safe_level( File::Temp::HIGH );
- die "Could not change to high security"
- if $newlevel != File::Temp::HIGH;
-
-=cut
-
-{
- # protect from using the variable itself
- my $LEVEL = STANDARD;
- sub safe_level {
- my $self = shift;
- if (@_) {
- my $level = shift;
- if (($level != STANDARD) && ($level != MEDIUM) && ($level != HIGH)) {
- carp "safe_level: Specified level ($level) not STANDARD, MEDIUM or HIGH - ignoring\n" if $^W;
- } else {
- # Dont allow this on perl 5.005 or earlier
- if ($] < 5.006 && $level != STANDARD) {
- # Cant do MEDIUM or HIGH checks
- croak "Currently requires perl 5.006 or newer to do the safe checks";
- }
- # Check that we are allowed to change level
- # Silently ignore if we can not.
- $LEVEL = $level if _can_do_level($level);
- }
- }
- return $LEVEL;
- }
-}
-
-=item TopSystemUID
-
-This is the highest UID on the current system that refers to a root
-UID. This is used to make sure that the temporary directory is
-owned by a system UID (C<root>, C<bin>, C<sys> etc) rather than
-simply by root.
-
-This is required since on many unix systems C</tmp> is not owned
-by root.
-
-Default is to assume that any UID less than or equal to 10 is a root
-UID.
-
- File::Temp->top_system_uid(10);
- my $topid = File::Temp->top_system_uid;
-
-This value can be adjusted to reduce security checking if required.
-The value is only relevant when C<safe_level> is set to MEDIUM or higher.
-
-=cut
-
-{
- my $TopSystemUID = 10;
- $TopSystemUID = 197108 if $^O eq 'interix'; # "Administrator"
- sub top_system_uid {
- my $self = shift;
- if (@_) {
- my $newuid = shift;
- croak "top_system_uid: UIDs should be numeric"
- unless $newuid =~ /^\d+$/s;
- $TopSystemUID = $newuid;
- }
- return $TopSystemUID;
- }
-}
-
-=item B<$KEEP_ALL>
-
-Controls whether temporary files and directories should be retained
-regardless of any instructions in the program to remove them
-automatically. This is useful for debugging but should not be used in
-production code.
-
- $File::Temp::KEEP_ALL = 1;
-
-Default is for files to be removed as requested by the caller.
-
-In some cases, files will only be retained if this variable is true
-when the file is created. This means that you can not create a temporary
-file, set this variable and expect the temp file to still be around
-when the program exits.
-
-=item B<$DEBUG>
-
-Controls whether debugging messages should be enabled.
-
- $File::Temp::DEBUG = 1;
-
-Default is for debugging mode to be disabled.
-
-=back
-
-=head1 WARNING
-
-For maximum security, endeavour always to avoid ever looking at,
-touching, or even imputing the existence of the filename. You do not
-know that that filename is connected to the same file as the handle
-you have, and attempts to check this can only trigger more race
-conditions. It's far more secure to use the filehandle alone and
-dispense with the filename altogether.
-
-If you need to pass the handle to something that expects a filename
-then, on a unix system, use C<"/dev/fd/" . fileno($fh)> for arbitrary
-programs, or more generally C<< "+<=&" . fileno($fh) >> for Perl
-programs. You will have to clear the close-on-exec bit on that file
-descriptor before passing it to another process.
-
- use Fcntl qw/F_SETFD F_GETFD/;
- fcntl($tmpfh, F_SETFD, 0)
- or die "Can't clear close-on-exec flag on temp fh: $!\n";
-
-=head2 Temporary files and NFS
-
-Some problems are associated with using temporary files that reside
-on NFS file systems and it is recommended that a local filesystem
-is used whenever possible. Some of the security tests will most probably
-fail when the temp file is not local. Additionally, be aware that
-the performance of I/O operations over NFS will not be as good as for
-a local disk.
-
-=head2 Forking
-
-In some cases files created by File::Temp are removed from within an
-END block. Since END blocks are triggered when a child process exits
-(unless C<POSIX::_exit()> is used by the child) File::Temp takes care
-to only remove those temp files created by a particular process ID. This
-means that a child will not attempt to remove temp files created by the
-parent process.
-
-If you are forking many processes in parallel that are all creating
-temporary files, you may need to reset the random number seed using
-srand(EXPR) in each child else all the children will attempt to walk
-through the same set of random file names and may well cause
-themselves to give up if they exceed the number of retry attempts.
-
-=head2 Directory removal
-
-Note that if you have chdir'ed into the temporary directory and it is
-subsequently cleaned up (either in the END block or as part of object
-destruction), then you will get a warning from File::Path::rmtree().
-
-=head2 BINMODE
-
-The file returned by File::Temp will have been opened in binary mode
-if such a mode is available. If that is not correct, use the C<binmode()>
-function to change the mode of the filehandle.
-
-Note that you can modify the encoding of a file opened by File::Temp
-also by using C<binmode()>.
-
-=head1 HISTORY
-
-Originally began life in May 1999 as an XS interface to the system
-mkstemp() function. In March 2000, the OpenBSD mkstemp() code was
-translated to Perl for total control of the code's
-security checking, to ensure the presence of the function regardless of
-operating system and to help with portability. The module was shipped
-as a standard part of perl from v5.6.1.
-
-=head1 SEE ALSO
-
-L<POSIX/tmpnam>, L<POSIX/tmpfile>, L<File::Spec>, L<File::Path>
-
-See L<IO::File> and L<File::MkTemp>, L<Apache::TempFile> for
-different implementations of temporary file handling.
-
-See L<File::Tempdir> for an alternative object-oriented wrapper for
-the C<tempdir> function.
-
-=head1 AUTHOR
-
-Tim Jenness E<lt>tjenness at cpan.orgE<gt>
-
-Copyright (C) 2007-2009 Tim Jenness.
-Copyright (C) 1999-2007 Tim Jenness and the UK Particle Physics and
-Astronomy Research Council. All Rights Reserved. This program is free
-software; you can redistribute it and/or modify it under the same
-terms as Perl itself.
-
-Original Perl implementation loosely based on the OpenBSD C code for
-mkstemp(). Thanks to Tom Christiansen for suggesting that this module
-should be written and providing ideas for code improvements and
-security enhancements.
-
-=cut
-
-package File::Temp::Dir;
-
-use File::Path qw/ rmtree /;
-use strict;
-use overload '""' => "STRINGIFY", fallback => 1;
-
-# private class specifically to support tempdir objects
-# created by File::Temp->newdir
-
-# ostensibly the same method interface as File::Temp but without
-# inheriting all the IO::Seekable methods and other cruft
-
-# Read-only - returns the name of the temp directory
-
-sub dirname {
- my $self = shift;
- return $self->{DIRNAME};
-}
-
-sub STRINGIFY {
- my $self = shift;
- return $self->dirname;
-}
-
-sub unlink_on_destroy {
- my $self = shift;
- if (@_) {
- $self->{CLEANUP} = shift;
- }
- return $self->{CLEANUP};
-}
-
-sub DESTROY {
- my $self = shift;
- local($., $@, $!, $^E, $?);
- if ($self->unlink_on_destroy &&
- $$ == $self->{LAUNCHPID} && !$File::Temp::KEEP_ALL) {
- if (-d $self->{DIRNAME}) {
- # Some versions of rmtree will abort if you attempt to remove
- # the directory you are sitting in. We protect that and turn it
- # into a warning. We do this because this occurs during object
- # destruction and so can not be caught by the user.
- eval { rmtree($self->{DIRNAME}, $File::Temp::DEBUG, 0); };
- warn $@ if ($@ && $^W);
- }
- }
-}
-
-
-1;
Deleted: trunk/contrib/perl/cpan/Getopt-Long/t/gol-compat.t
===================================================================
--- trunk/contrib/perl/cpan/Getopt-Long/t/gol-compat.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/Getopt-Long/t/gol-compat.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,39 +0,0 @@
-#!./perl -w
-
-no strict;
-
-BEGIN {
- if ($ENV{PERL_CORE}) {
- @INC = '../lib';
- chdir 't';
- }
-}
-
-{
- # Silence the deprecation warnings from newgetopt.pl for the purpose
- # of testing. These tests will be removed along with newgetopt.pl in
- # the next major release of perl.
- local $SIG{__WARN__} = sub {
- if ($_[0] !~ /will be removed from the Perl core distribution/) {
- print(STDERR @_);
- }
- };
- require "newgetopt.pl";
-}
-
-print "1..9\n";
-
- at ARGV = qw(-Foo -baR --foo bar);
-$newgetopt::ignorecase = 0;
-$newgetopt::ignorecase = 0;
-undef $opt_baR;
-undef $opt_bar;
-print "ok 1\n" if NGetOpt ("foo", "Foo=s");
-print ((defined $opt_foo) ? "" : "not ", "ok 2\n");
-print (($opt_foo == 1) ? "" : "not ", "ok 3\n");
-print ((defined $opt_Foo) ? "" : "not ", "ok 4\n");
-print (($opt_Foo eq "-baR") ? "" : "not ", "ok 5\n");
-print ((@ARGV == 1) ? "" : "not ", "ok 6\n");
-print (($ARGV[0] eq "bar") ? "" : "not ", "ok 7\n");
-print (!(defined $opt_baR) ? "" : "not ", "ok 8\n");
-print (!(defined $opt_bar) ? "" : "not ", "ok 9\n");
Deleted: trunk/contrib/perl/cpan/HTTP-Tiny/t/120_put.t
===================================================================
--- trunk/contrib/perl/cpan/HTTP-Tiny/t/120_put.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/HTTP-Tiny/t/120_put.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,82 +0,0 @@
-#!perl
-#
-# This file is part of HTTP-Tiny
-#
-# This software is copyright (c) 2011 by Christian Hansen.
-#
-# This is free software; you can redistribute it and/or modify it under
-# the same terms as the Perl 5 programming language system itself.
-#
-
-use strict;
-use warnings;
-
-use File::Basename;
-use Test::More 0.88;
-use t::Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case
- set_socket_source sort_headers $CRLF $LF];
-use HTTP::Tiny;
-BEGIN { monkey_patch() }
-
-for my $file ( dir_list("t/cases", qr/^put/ ) ) {
- my $data = do { local (@ARGV,$/) = $file; <> };
- my ($params, $expect_req, $give_res) = split /--+\n/, $data;
- # cleanup source data
- my $version = HTTP::Tiny->VERSION || 0;
- $expect_req =~ s{VERSION}{$version};
- s{\n}{$CRLF}g for ($expect_req, $give_res);
-
- # figure out what request to make
- my $case = parse_case($params);
- my $url = $case->{url}[0];
- my %options;
-
- my %headers;
- for my $line ( @{ $case->{headers} } ) {
- my ($k,$v) = ($line =~ m{^([^:]+): (.*)$}g);
- $headers{$k} = $v;
- }
- $options{headers} = \%headers if %headers;
-
- if ( $case->{content} ) {
- $options{content} = $case->{content}[0];
- }
- elsif ( $case->{content_cb} ) {
- $options{content} = eval join "\n", @{$case->{content_cb}};
- }
-
- if ( $case->{trailer_cb} ) {
- $options{trailer_callback} = eval join "\n", @{$case->{trailer_cb}};
- }
-
- # setup mocking and test
- my $res_fh = tmpfile($give_res);
- my $req_fh = tmpfile();
-
- my $http = HTTP::Tiny->new;
- set_socket_source($req_fh, $res_fh);
-
- (my $url_basename = $url) =~ s{.*/}{};
-
- my @call_args = %options ? ($url, \%options) : ($url);
- my $response = $http->request('PUT', at call_args);
-
- my $got_req = slurp($req_fh);
-
- my $label = basename($file);
-
- is( sort_headers($got_req), sort_headers($expect_req), "$label request" );
-
- my ($rc) = $give_res =~ m{\S+\s+(\d+)}g;
- is( $response->{status}, $rc, "$label response code $rc" )
- or diag $response->{content};
-
- if ( substr($rc,0,1) eq '2' ) {
- ok( $response->{success}, "$label success flag true" );
- }
- else {
- ok( ! $response->{success}, "$label success flag false" );
- }
-}
-
-done_testing;
Deleted: trunk/contrib/perl/cpan/IO-Compress/pod/FAQ.pod
===================================================================
--- trunk/contrib/perl/cpan/IO-Compress/pod/FAQ.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/IO-Compress/pod/FAQ.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,514 +0,0 @@
-
-=head1 NAME
-
-IO::Compress::FAQ -- Frequently Asked Questions about IO::Compress
-
-=head1 DESCRIPTION
-
-Common questions answered.
-
-=head2 Compatibility with Unix compress/uncompress.
-
-Although C<Compress::Zlib> has a pair of functions called C<compress> and
-C<uncompress>, they are I<not> related to the Unix programs of the same
-name. The C<Compress::Zlib> module is not compatible with Unix
-C<compress>.
-
-If you have the C<uncompress> program available, you can use this to read
-compressed files
-
- open F, "uncompress -c $filename |";
- while (<F>)
- {
- ...
-
-Alternatively, if you have the C<gunzip> program available, you can use
-this to read compressed files
-
- open F, "gunzip -c $filename |";
- while (<F>)
- {
- ...
-
-and this to write compress files, if you have the C<compress> program
-available
-
- open F, "| compress -c $filename ";
- print F "data";
- ...
- close F ;
-
-=head2 Accessing .tar.Z files
-
-The C<Archive::Tar> module can optionally use C<Compress::Zlib> (via the
-C<IO::Zlib> module) to access tar files that have been compressed with
-C<gzip>. Unfortunately tar files compressed with the Unix C<compress>
-utility cannot be read by C<Compress::Zlib> and so cannot be directly
-accessed by C<Archive::Tar>.
-
-If the C<uncompress> or C<gunzip> programs are available, you can use one
-of these workarounds to read C<.tar.Z> files from C<Archive::Tar>
-
-Firstly with C<uncompress>
-
- use strict;
- use warnings;
- use Archive::Tar;
-
- open F, "uncompress -c $filename |";
- my $tar = Archive::Tar->new(*F);
- ...
-
-and this with C<gunzip>
-
- use strict;
- use warnings;
- use Archive::Tar;
-
- open F, "gunzip -c $filename |";
- my $tar = Archive::Tar->new(*F);
- ...
-
-Similarly, if the C<compress> program is available, you can use this to
-write a C<.tar.Z> file
-
- use strict;
- use warnings;
- use Archive::Tar;
- use IO::File;
-
- my $fh = new IO::File "| compress -c >$filename";
- my $tar = Archive::Tar->new();
- ...
- $tar->write($fh);
- $fh->close ;
-
-=head2 Accessing Zip Files
-
-This module provides support for reading/writing zip files using the
-C<IO::Compress::Zip> and C<IO::Uncompress::Unzip> modules.
-
-The primary focus of the C<IO::Compress::Zip> and C<IO::Uncompress::Unzip>
-modules is to provide an C<IO::File> compatible streaming read/write
-interface to zip files/buffers. They are not fully flegged archivers. If
-you are looking for an archiver check out the C<Archive::Zip> module. You
-can find it on CPAN at
-
- http://www.cpan.org/modules/by-module/Archive/Archive-Zip-*.tar.gz
-
-=head2 Compressed files and Net::FTP
-
-The C<Net::FTP> module provides two low-level methods called C<stor> and
-C<retr> that both return filehandles. These filehandles can used with the
-C<IO::Compress/Uncompress> modules to compress or uncompress files read
-from or written to an FTP Server on the fly, without having to create a
-temporary file.
-
-Firstly, here is code that uses C<retr> to uncompressed a file as it is
-read from the FTP Server.
-
- use Net::FTP;
- use IO::Uncompress::Gunzip qw(:all);
-
- my $ftp = new Net::FTP ...
-
- my $retr_fh = $ftp->retr($compressed_filename);
- gunzip $retr_fh => $outFilename, AutoClose => 1
- or die "Cannot uncompress '$compressed_file': $GunzipError\n";
-
-and this to compress a file as it is written to the FTP Server
-
- use Net::FTP;
- use IO::Compress::Gzip qw(:all);
-
- my $stor_fh = $ftp->stor($filename);
- gzip "filename" => $stor_fh, AutoClose => 1
- or die "Cannot compress '$filename': $GzipError\n";
-
-=head2 How do I recompress using a different compression?
-
-This is easier that you might expect if you realise that all the
-C<IO::Compress::*> objects are derived from C<IO::File> and that all the
-C<IO::Uncompress::*> modules can read from an C<IO::File> filehandle.
-
-So, for example, say you have a file compressed with gzip that you want to
-recompress with bzip2. Here is all that is needed to carry out the
-recompression.
-
- use IO::Uncompress::Gunzip ':all';
- use IO::Compress::Bzip2 ':all';
-
- my $gzipFile = "somefile.gz";
- my $bzipFile = "somefile.bz2";
-
- my $gunzip = new IO::Uncompress::Gunzip $gzipFile
- or die "Cannot gunzip $gzipFile: $GunzipError\n" ;
-
- bzip2 $gunzip => $bzipFile
- or die "Cannot bzip2 to $bzipFile: $Bzip2Error\n" ;
-
-Note, there is a limitation of this technique. Some compression file
-formats store extra information along with the compressed data payload. For
-example, gzip can optionally store the original filename and Zip stores a
-lot of information about the original file. If the original compressed file
-contains any of this extra information, it will not be transferred to the
-new compressed file usign the technique above.
-
-=head2 Apache::GZip Revisited
-
-Below is a mod_perl Apache compression module, called C<Apache::GZip>,
-taken from
-F<http://perl.apache.org/docs/tutorials/tips/mod_perl_tricks/mod_perl_tricks.html#On_the_Fly_Compression>
-
- package Apache::GZip;
- #File: Apache::GZip.pm
-
- use strict vars;
- use Apache::Constants ':common';
- use Compress::Zlib;
- use IO::File;
- use constant GZIP_MAGIC => 0x1f8b;
- use constant OS_MAGIC => 0x03;
-
- sub handler {
- my $r = shift;
- my ($fh,$gz);
- my $file = $r->filename;
- return DECLINED unless $fh=IO::File->new($file);
- $r->header_out('Content-Encoding'=>'gzip');
- $r->send_http_header;
- return OK if $r->header_only;
-
- tie *STDOUT,'Apache::GZip',$r;
- print($_) while <$fh>;
- untie *STDOUT;
- return OK;
- }
-
- sub TIEHANDLE {
- my($class,$r) = @_;
- # initialize a deflation stream
- my $d = deflateInit(-WindowBits=>-MAX_WBITS()) || return undef;
-
- # gzip header -- don't ask how I found out
- $r->print(pack("nccVcc",GZIP_MAGIC,Z_DEFLATED,0,time(),0,OS_MAGIC));
-
- return bless { r => $r,
- crc => crc32(undef),
- d => $d,
- l => 0
- },$class;
- }
-
- sub PRINT {
- my $self = shift;
- foreach (@_) {
- # deflate the data
- my $data = $self->{d}->deflate($_);
- $self->{r}->print($data);
- # keep track of its length and crc
- $self->{l} += length($_);
- $self->{crc} = crc32($_,$self->{crc});
- }
- }
-
- sub DESTROY {
- my $self = shift;
-
- # flush the output buffers
- my $data = $self->{d}->flush;
- $self->{r}->print($data);
-
- # print the CRC and the total length (uncompressed)
- $self->{r}->print(pack("LL",@{$self}{qw/crc l/}));
- }
-
- 1;
-
-Here's the Apache configuration entry you'll need to make use of it. Once
-set it will result in everything in the /compressed directory will be
-compressed automagically.
-
- <Location /compressed>
- SetHandler perl-script
- PerlHandler Apache::GZip
- </Location>
-
-Although at first sight there seems to be quite a lot going on in
-C<Apache::GZip>, you could sum up what the code was doing as follows --
-read the contents of the file in C<< $r->filename >>, compress it and write
-the compressed data to standard output. That's all.
-
-This code has to jump through a few hoops to achieve this because
-
-=over
-
-=item 1.
-
-The gzip support in C<Compress::Zlib> version 1.x can only work with a real
-filesystem filehandle. The filehandles used by Apache modules are not
-associated with the filesystem.
-
-=item 2.
-
-That means all the gzip support has to be done by hand - in this case by
-creating a tied filehandle to deal with creating the gzip header and
-trailer.
-
-=back
-
-C<IO::Compress::Gzip> doesn't have that filehandle limitation (this was one
-of the reasons for writing it in the first place). So if
-C<IO::Compress::Gzip> is used instead of C<Compress::Zlib> the whole tied
-filehandle code can be removed. Here is the rewritten code.
-
- package Apache::GZip;
-
- use strict vars;
- use Apache::Constants ':common';
- use IO::Compress::Gzip;
- use IO::File;
-
- sub handler {
- my $r = shift;
- my ($fh,$gz);
- my $file = $r->filename;
- return DECLINED unless $fh=IO::File->new($file);
- $r->header_out('Content-Encoding'=>'gzip');
- $r->send_http_header;
- return OK if $r->header_only;
-
- my $gz = new IO::Compress::Gzip '-', Minimal => 1
- or return DECLINED ;
-
- print $gz $_ while <$fh>;
-
- return OK;
- }
-
-or even more succinctly, like this, using a one-shot gzip
-
- package Apache::GZip;
-
- use strict vars;
- use Apache::Constants ':common';
- use IO::Compress::Gzip qw(gzip);
-
- sub handler {
- my $r = shift;
- $r->header_out('Content-Encoding'=>'gzip');
- $r->send_http_header;
- return OK if $r->header_only;
-
- gzip $r->filename => '-', Minimal => 1
- or return DECLINED ;
-
- return OK;
- }
-
- 1;
-
-The use of one-shot C<gzip> above just reads from C<< $r->filename >> and
-writes the compressed data to standard output.
-
-Note the use of the C<Minimal> option in the code above. When using gzip
-for Content-Encoding you should I<always> use this option. In the example
-above it will prevent the filename being included in the gzip header and
-make the size of the gzip data stream a slight bit smaller.
-
-=head2 Using C<InputLength> to uncompress data embedded in a larger file/buffer.
-
-A fairly common use-case is where compressed data is embedded in a larger
-file/buffer and you want to read both.
-
-As an example consider the structure of a zip file. This is a well-defined
-file format that mixes both compressed and uncompressed sections of data in
-a single file.
-
-For the purposes of this discussion you can think of a zip file as sequence
-of compressed data streams, each of which is prefixed by an uncompressed
-local header. The local header contains information about the compressed
-data stream, including the name of the compressed file and, in particular,
-the length of the compressed data stream.
-
-To illustrate how to use C<InputLength> here is a script that walks a zip
-file and prints out how many lines are in each compressed file (if you
-intend write code to walking through a zip file for real see
-L<IO::Uncompress::Unzip/"Walking through a zip file"> ). Also, although
-this example uses the zlib-based compression, the technique can be used by
-the other C<IO::Uncompress::*> modules.
-
- use strict;
- use warnings;
-
- use IO::File;
- use IO::Uncompress::RawInflate qw(:all);
-
- use constant ZIP_LOCAL_HDR_SIG => 0x04034b50;
- use constant ZIP_LOCAL_HDR_LENGTH => 30;
-
- my $file = $ARGV[0] ;
-
- my $fh = new IO::File "<$file"
- or die "Cannot open '$file': $!\n";
-
- while (1)
- {
- my $sig;
- my $buffer;
-
- my $x ;
- ($x = $fh->read($buffer, ZIP_LOCAL_HDR_LENGTH)) == ZIP_LOCAL_HDR_LENGTH
- or die "Truncated file: $!\n";
-
- my $signature = unpack ("V", substr($buffer, 0, 4));
-
- last unless $signature == ZIP_LOCAL_HDR_SIG;
-
- # Read Local Header
- my $gpFlag = unpack ("v", substr($buffer, 6, 2));
- my $compressedMethod = unpack ("v", substr($buffer, 8, 2));
- my $compressedLength = unpack ("V", substr($buffer, 18, 4));
- my $uncompressedLength = unpack ("V", substr($buffer, 22, 4));
- my $filename_length = unpack ("v", substr($buffer, 26, 2));
- my $extra_length = unpack ("v", substr($buffer, 28, 2));
-
- my $filename ;
- $fh->read($filename, $filename_length) == $filename_length
- or die "Truncated file\n";
-
- $fh->read($buffer, $extra_length) == $extra_length
- or die "Truncated file\n";
-
- if ($compressedMethod != 8 && $compressedMethod != 0)
- {
- warn "Skipping file '$filename' - not deflated $compressedMethod\n";
- $fh->read($buffer, $compressedLength) == $compressedLength
- or die "Truncated file\n";
- next;
- }
-
- if ($compressedMethod == 0 && $gpFlag & 8 == 8)
- {
- die "Streamed Stored not supported for '$filename'\n";
- }
-
- next if $compressedLength == 0;
-
- # Done reading the Local Header
-
- my $inf = new IO::Uncompress::RawInflate $fh,
- Transparent => 1,
- InputLength => $compressedLength
- or die "Cannot uncompress $file [$filename]: $RawInflateError\n" ;
-
- my $line_count = 0;
-
- while (<$inf>)
- {
- ++ $line_count;
- }
-
- print "$filename: $line_count\n";
- }
-
-The majority of the code above is concerned with reading the zip local
-header data. The code that I want to focus on is at the bottom.
-
- while (1) {
-
- # read local zip header data
- # get $filename
- # get $compressedLength
-
- my $inf = new IO::Uncompress::RawInflate $fh,
- Transparent => 1,
- InputLength => $compressedLength
- or die "Cannot uncompress $file [$filename]: $RawInflateError\n" ;
-
- my $line_count = 0;
-
- while (<$inf>)
- {
- ++ $line_count;
- }
-
- print "$filename: $line_count\n";
- }
-
-The call to C<IO::Uncompress::RawInflate> creates a new filehandle C<$inf>
-that can be used to read from the parent filehandle C<$fh>, uncompressing
-it as it goes. The use of the C<InputLength> option will guarantee that
-I<at most> C<$compressedLength> bytes of compressed data will be read from
-the C<$fh> filehandle (The only exception is for an error case like a
-truncated file or a corrupt data stream).
-
-This means that once RawInflate is finished C<$fh> will be left at the
-byte directly after the compressed data stream.
-
-Now consider what the code looks like without C<InputLength>
-
- while (1) {
-
- # read local zip header data
- # get $filename
- # get $compressedLength
-
- # read all the compressed data into $data
- read($fh, $data, $compressedLength);
-
- my $inf = new IO::Uncompress::RawInflate \$data,
- Transparent => 1,
- or die "Cannot uncompress $file [$filename]: $RawInflateError\n" ;
-
- my $line_count = 0;
-
- while (<$inf>)
- {
- ++ $line_count;
- }
-
- print "$filename: $line_count\n";
- }
-
-The difference here is the addition of the temporary variable C<$data>.
-This is used to store a copy of the compressed data while it is being
-uncompressed.
-
-If you know that C<$compressedLength> isn't that big then using temporary
-storage won't be a problem. But if C<$compressedLength> is very large or
-you are writing an application that other people will use, and so have no
-idea how big C<$compressedLength> will be, it could be an issue.
-
-Using C<InputLength> avoids the use of temporary storage and means the
-application can cope with large compressed data streams.
-
-One final point -- obviously C<InputLength> can only be used whenever you
-know the length of the compressed data beforehand, like here with a zip
-file.
-
-=head1 SEE ALSO
-
-L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
-
-L<Compress::Zlib::FAQ|Compress::Zlib::FAQ>
-
-L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
-L<Archive::Tar|Archive::Tar>,
-L<IO::Zlib|IO::Zlib>
-
-=head1 AUTHOR
-
-This module was written by Paul Marquess, F<pmqs at cpan.org>.
-
-=head1 MODIFICATION HISTORY
-
-See the Changes file.
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright (c) 2005-2011 Paul Marquess. All rights reserved.
-
-This program is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
-
Deleted: trunk/contrib/perl/cpan/List-Util/XS.pp
===================================================================
--- trunk/contrib/perl/cpan/List-Util/XS.pp 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/List-Util/XS.pp 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,45 +0,0 @@
-package List::Util::XS;
-use strict;
-use vars qw($VERSION);
-
-$VERSION = undef;
-
-sub VERSION {
- require Carp;
- Carp::croak("You need to install Scalar-List-Utils with a C compiler to ensure the XS is compiled")
- if defined $_[1];
- $VERSION;
-}
-
-1;
-__END__
-
-=head1 NAME
-
-List::Util::XS - Indicate if List::Util was compiled with a C compiler
-
-=head1 SYNOPSIS
-
- use List::Util::XS 1.20;
-
-=head1 DESCRIPTION
-
-B<*** This instalation does not have XS installed ***>
-
-C<List::Util::XS> can be used as a dependency to ensure List::Util was
-installed using a C compiler and that the XS version is installed.
-
-During installation C<$List::Util::XS::VERSION> will be set to
-C<undef> if the XS was not compiled.
-
-=head1 SEE ALSO
-
-L<Scalar::Util>, L<List::Util>, L<List::MoreUtils>
-
-=head1 COPYRIGHT
-
-Copyright (c) 2008 Graham Barr <gbarr at pobox.com>. All rights reserved.
-This program is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
-
-=cut
Deleted: trunk/contrib/perl/cpan/List-Util/lib/List/Util/PP.pm
===================================================================
--- trunk/contrib/perl/cpan/List-Util/lib/List/Util/PP.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/List-Util/lib/List/Util/PP.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,83 +0,0 @@
-# List::Util::PP.pm
-#
-# Copyright (c) 1997-2009 Graham Barr <gbarr at pobox.com>. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-
-package List::Util::PP;
-
-use strict;
-use warnings;
-use vars qw(@ISA @EXPORT $VERSION $a $b);
-require Exporter;
-
- at ISA = qw(Exporter);
- at EXPORT = qw(first min max minstr maxstr reduce sum shuffle);
-$VERSION = "1.23";
-$VERSION = eval $VERSION;
-
-sub reduce (&@) {
- my $code = shift;
- require Scalar::Util;
- my $type = Scalar::Util::reftype($code);
- unless($type and $type eq 'CODE') {
- require Carp;
- Carp::croak("Not a subroutine reference");
- }
- no strict 'refs';
-
- return shift unless @_ > 1;
-
- use vars qw($a $b);
-
- my $caller = caller;
- local(*{$caller."::a"}) = \my $a;
- local(*{$caller."::b"}) = \my $b;
-
- $a = shift;
- foreach (@_) {
- $b = $_;
- $a = &{$code}();
- }
-
- $a;
-}
-
-sub first (&@) {
- my $code = shift;
- require Scalar::Util;
- my $type = Scalar::Util::reftype($code);
- unless($type and $type eq 'CODE') {
- require Carp;
- Carp::croak("Not a subroutine reference");
- }
-
- foreach (@_) {
- return $_ if &{$code}();
- }
-
- undef;
-}
-
-
-sub sum (@) { reduce { $a + $b } @_ }
-
-sub min (@) { reduce { $a < $b ? $a : $b } @_ }
-
-sub max (@) { reduce { $a > $b ? $a : $b } @_ }
-
-sub minstr (@) { reduce { $a lt $b ? $a : $b } @_ }
-
-sub maxstr (@) { reduce { $a gt $b ? $a : $b } @_ }
-
-sub shuffle (@) {
- my @a=\(@_);
- my $n;
- my $i=@_;
- map {
- $n = rand($i--);
- (${$a[$n]}, $a[$n] = $a[$i])[0];
- } @_;
-}
-
-1;
Deleted: trunk/contrib/perl/cpan/List-Util/lib/Scalar/Util/PP.pm
===================================================================
--- trunk/contrib/perl/cpan/List-Util/lib/Scalar/Util/PP.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/List-Util/lib/Scalar/Util/PP.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,108 +0,0 @@
-# Scalar::Util::PP.pm
-#
-# Copyright (c) 1997-2009 Graham Barr <gbarr at pobox.com>. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-#
-# This module is normally only loaded if the XS module is not available
-
-package Scalar::Util::PP;
-
-use strict;
-use warnings;
-use vars qw(@ISA @EXPORT $VERSION $recurse);
-require Exporter;
-use B qw(svref_2object);
-
- at ISA = qw(Exporter);
- at EXPORT = qw(blessed reftype tainted readonly refaddr looks_like_number);
-$VERSION = "1.23";
-$VERSION = eval $VERSION;
-
-sub blessed ($) {
- return undef unless length(ref($_[0]));
- my $b = svref_2object($_[0]);
- return undef unless $b->isa('B::PVMG');
- my $s = $b->SvSTASH;
- return $s->isa('B::HV') ? $s->NAME : undef;
-}
-
-sub refaddr($) {
- return undef unless length(ref($_[0]));
-
- my $addr;
- if(defined(my $pkg = blessed($_[0]))) {
- $addr .= bless $_[0], 'Scalar::Util::Fake';
- bless $_[0], $pkg;
- }
- else {
- $addr .= $_[0]
- }
-
- $addr =~ /0x(\w+)/;
- local $^W;
- no warnings 'portable';
- hex($1);
-}
-
-{
- my %tmap = qw(
- B::NULL SCALAR
-
- B::HV HASH
- B::AV ARRAY
- B::CV CODE
- B::IO IO
- B::GV GLOB
- B::REGEXP REGEXP
- );
-
- sub reftype ($) {
- my $r = shift;
-
- return undef unless length(ref($r));
-
- my $t = ref(svref_2object($r));
-
- return
- exists $tmap{$t} ? $tmap{$t}
- : length(ref($$r)) ? 'REF'
- : 'SCALAR';
- }
-}
-
-sub tainted {
- local($@, $SIG{__DIE__}, $SIG{__WARN__});
- local $^W = 0;
- no warnings;
- eval { kill 0 * $_[0] };
- $@ =~ /^Insecure/;
-}
-
-sub readonly {
- return 0 if tied($_[0]) || (ref(\($_[0])) ne "SCALAR");
-
- local($@, $SIG{__DIE__}, $SIG{__WARN__});
- my $tmp = $_[0];
-
- !eval { $_[0] = $tmp; 1 };
-}
-
-sub looks_like_number {
- local $_ = shift;
-
- # checks from perlfaq4
- return 0 if !defined($_);
- if (ref($_)) {
- require overload;
- return overload::Overloaded($_) ? defined(0 + $_) : 0;
- }
- return 1 if (/^[+-]?[0-9]+$/); # is a +/- integer
- return 1 if (/^([+-]?)(?=[0-9]|\.[0-9])[0-9]*(\.[0-9]*)?([Ee]([+-]?[0-9]+))?$/); # a C float
- return 1 if ($] >= 5.008 and /^(Inf(inity)?|NaN)$/i) or ($] >= 5.006001 and /^Inf$/i);
-
- 0;
-}
-
-
-1;
Deleted: trunk/contrib/perl/cpan/List-Util/t/expfail.t
===================================================================
--- trunk/contrib/perl/cpan/List-Util/t/expfail.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/List-Util/t/expfail.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,29 +0,0 @@
-#!./perl
-
-BEGIN {
- unless (-d 'blib') {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- keys %Config; # Silence warning
- if ($Config{extensions} !~ /\bList\/Util\b/) {
- print "1..0 # Skip: List::Util was not built\n";
- exit 0;
- }
- }
-}
-
-use Test::More tests => 3;
-use strict;
-
-$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
-require Scalar::Util;
-
-for my $func (qw(dualvar set_prototype weaken)) {
- eval { Scalar::Util->import($func); };
- like(
- $@,
- qr/$func is only available with the XS/,
- "no pure perl $func: error raised",
- );
-}
Deleted: trunk/contrib/perl/cpan/List-Util/t/p_00version.t
===================================================================
--- trunk/contrib/perl/cpan/List-Util/t/p_00version.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/List-Util/t/p_00version.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,26 +0,0 @@
-#!./perl
-
-BEGIN {
- unless (-d 'blib') {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- keys %Config; # Silence warning
- if ($Config{extensions} !~ /\bList\/Util\b/) {
- print "1..0 # Skip: List::Util was not built\n";
- exit 0;
- }
- }
-}
-
-use Test::More tests => 2;
-
-# force perl-only version to be tested
-$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
-
-require Scalar::Util;
-require List::Util;
-
-is( $Scalar::Util::PP::VERSION, $List::Util::VERSION, "VERSION mismatch");
-is( $List::Util::PP::VERSION, $List::Util::VERSION, "VERSION mismatch");
-
Deleted: trunk/contrib/perl/cpan/List-Util/t/p_blessed.t
===================================================================
--- trunk/contrib/perl/cpan/List-Util/t/p_blessed.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/List-Util/t/p_blessed.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,7 +0,0 @@
-#!./perl
-
-# force perl-only version to be tested
-$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
-
-(my $f = __FILE__) =~ s/p_//;
-do $f; die $@ if $@;
Deleted: trunk/contrib/perl/cpan/List-Util/t/p_first.t
===================================================================
--- trunk/contrib/perl/cpan/List-Util/t/p_first.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/List-Util/t/p_first.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,8 +0,0 @@
-#!./perl
-
-# force perl-only version to be tested
-$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
-
-(my $f = __FILE__) =~ s/p_//;
-$::PERL_ONLY = $::PERL_ONLY = 1; # Mustn't use it only once!
-do $f; die $@ if $@;
Deleted: trunk/contrib/perl/cpan/List-Util/t/p_lln.t
===================================================================
--- trunk/contrib/perl/cpan/List-Util/t/p_lln.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/List-Util/t/p_lln.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,7 +0,0 @@
-#!./perl
-
-# force perl-only version to be tested
-$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
-
-(my $f = __FILE__) =~ s/p_//;
-do $f; die $@ if $@;
Deleted: trunk/contrib/perl/cpan/List-Util/t/p_max.t
===================================================================
--- trunk/contrib/perl/cpan/List-Util/t/p_max.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/List-Util/t/p_max.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,7 +0,0 @@
-#!./perl
-
-# force perl-only version to be tested
-$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
-
-(my $f = __FILE__) =~ s/p_//;
-do $f; die $@ if $@;
Deleted: trunk/contrib/perl/cpan/List-Util/t/p_maxstr.t
===================================================================
--- trunk/contrib/perl/cpan/List-Util/t/p_maxstr.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/List-Util/t/p_maxstr.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,7 +0,0 @@
-#!./perl
-
-# force perl-only version to be tested
-$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
-
-(my $f = __FILE__) =~ s/p_//;
-do $f; die $@ if $@;
Deleted: trunk/contrib/perl/cpan/List-Util/t/p_min.t
===================================================================
--- trunk/contrib/perl/cpan/List-Util/t/p_min.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/List-Util/t/p_min.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,7 +0,0 @@
-#!./perl
-
-# force perl-only version to be tested
-$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
-
-(my $f = __FILE__) =~ s/p_//;
-do $f; die $@ if $@;
Deleted: trunk/contrib/perl/cpan/List-Util/t/p_minstr.t
===================================================================
--- trunk/contrib/perl/cpan/List-Util/t/p_minstr.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/List-Util/t/p_minstr.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,7 +0,0 @@
-#!./perl
-
-# force perl-only version to be tested
-$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
-
-(my $f = __FILE__) =~ s/p_//;
-do $f; die $@ if $@;
Deleted: trunk/contrib/perl/cpan/List-Util/t/p_readonly.t
===================================================================
--- trunk/contrib/perl/cpan/List-Util/t/p_readonly.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/List-Util/t/p_readonly.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,7 +0,0 @@
-#!./perl
-
-# force perl-only version to be tested
-$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
-
-(my $f = __FILE__) =~ s/p_//;
-do $f; die $@ if $@;
Deleted: trunk/contrib/perl/cpan/List-Util/t/p_refaddr.t
===================================================================
--- trunk/contrib/perl/cpan/List-Util/t/p_refaddr.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/List-Util/t/p_refaddr.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,7 +0,0 @@
-#!./perl
-
-# force perl-only version to be tested
-$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
-
-(my $f = __FILE__) =~ s/p_//;
-do $f; die $@ if $@;
Deleted: trunk/contrib/perl/cpan/List-Util/t/p_shuffle.t
===================================================================
--- trunk/contrib/perl/cpan/List-Util/t/p_shuffle.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/List-Util/t/p_shuffle.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,7 +0,0 @@
-#!./perl
-
-# force perl-only version to be tested
-$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
-
-(my $f = __FILE__) =~ s/p_//;
-do $f; die $@ if $@;
Deleted: trunk/contrib/perl/cpan/List-Util/t/p_tainted.t
===================================================================
--- trunk/contrib/perl/cpan/List-Util/t/p_tainted.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/List-Util/t/p_tainted.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,12 +0,0 @@
-#!./perl -T
-
-use File::Spec;
-
-# force perl-only version to be tested
-$List::Util::TESTING_PERL_ONLY = $List::Util::TESTING_PERL_ONLY = 1;
-
-(my $f = __FILE__) =~ s/p_//;
-my $filename = ($^O eq 'MSWin32' || $^O eq 'VMS')
- ? File::Spec->rel2abs(File::Spec->catfile(".", $f))
- : File::Spec->catfile(".", $f);
-do $filename; die $@ if $@;
Deleted: trunk/contrib/perl/cpan/Locale-Codes/lib/Locale/Constants.pm
===================================================================
--- trunk/contrib/perl/cpan/Locale-Codes/lib/Locale/Constants.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/Locale-Codes/lib/Locale/Constants.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,80 +0,0 @@
-package Locale::Constants;
-# Copyright (C) 2001 Canon Research Centre Europe (CRE).
-# Copyright (C) 2002-2009 Neil Bowers
-# Copyright (c) 2010-2011 Sullivan Beck
-# This program is free software; you can redistribute it and/or modify it
-# under the same terms as Perl itself.
-
-use strict;
-use warnings;
-
-require Exporter;
-
-#-----------------------------------------------------------------------
-# Public Global Variables
-#-----------------------------------------------------------------------
-
-our($VERSION, at ISA, at EXPORT);
-
-$VERSION='3.16';
- at ISA = qw(Exporter);
- at EXPORT = qw(LOCALE_CODE_ALPHA_2
- LOCALE_CODE_ALPHA_3
- LOCALE_CODE_NUMERIC
- LOCALE_CODE_FIPS
- LOCALE_CODE_DOM
- LOCALE_CODE_DEFAULT
-
- LOCALE_LANG_ALPHA_2
- LOCALE_LANG_ALPHA_3
- LOCALE_LANG_TERM
- LOCALE_LANG_DEFAULT
-
- LOCALE_CURR_ALPHA
- LOCALE_CURR_NUMERIC
- LOCALE_CURR_DEFAULT
-
- LOCALE_SCRIPT_ALPHA
- LOCALE_SCRIPT_NUMERIC
- LOCALE_SCRIPT_DEFAULT
- );
-
-#-----------------------------------------------------------------------
-# Constants
-#-----------------------------------------------------------------------
-
-use constant LOCALE_CODE_ALPHA_2 => 1;
-use constant LOCALE_CODE_ALPHA_3 => 2;
-use constant LOCALE_CODE_NUMERIC => 3;
-use constant LOCALE_CODE_FIPS => 4;
-use constant LOCALE_CODE_DOM => 5;
-
-use constant LOCALE_CODE_DEFAULT => LOCALE_CODE_ALPHA_2;
-
-use constant LOCALE_LANG_ALPHA_2 => 1;
-use constant LOCALE_LANG_ALPHA_3 => 2;
-use constant LOCALE_LANG_TERM => 3;
-
-use constant LOCALE_LANG_DEFAULT => LOCALE_LANG_ALPHA_2;
-
-use constant LOCALE_CURR_ALPHA => 1;
-use constant LOCALE_CURR_NUMERIC => 2;
-
-use constant LOCALE_CURR_DEFAULT => LOCALE_CURR_ALPHA;
-
-use constant LOCALE_SCRIPT_ALPHA => 1;
-use constant LOCALE_SCRIPT_NUMERIC => 2;
-
-use constant LOCALE_SCRIPT_DEFAULT => LOCALE_SCRIPT_ALPHA;
-
-1;
-# Local Variables:
-# mode: cperl
-# indent-tabs-mode: nil
-# cperl-indent-level: 3
-# cperl-continued-statement-offset: 2
-# cperl-continued-brace-offset: 0
-# cperl-brace-offset: 0
-# cperl-brace-imaginary-offset: 0
-# cperl-label-offset: -2
-# End:
Deleted: trunk/contrib/perl/cpan/Locale-Codes/lib/Locale/Constants.pod
===================================================================
--- trunk/contrib/perl/cpan/Locale-Codes/lib/Locale/Constants.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/Locale-Codes/lib/Locale/Constants.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,41 +0,0 @@
-=pod
-
-=head1 NAME
-
-Locale::Constants - constants for Locale codes
-
-=head1 DESCRIPTION
-
-B<Locale::Constants> defines symbols which are used in the other
-modules from the Locale-Codes distribution.
-
-You shouldn't have to C<use> this module directly yourself - it is
-used by the other Locale modules, which in turn export the symbols.
-
-The constants are documented in each of the Locale modules.
-
-=head1 KNOWN BUGS AND LIMITATIONS
-
-None known.
-
-=head1 SEE ALSO
-
-Locale::Codes
-
-=head1 AUTHOR
-
-See Locale::Codes for full author history.
-
-Currently maintained by Sullivan Beck (sbeck at cpan.org).
-
-=head1 COPYRIGHT
-
- Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
- Copyright (c) 2001-2010 Neil Bowers
- Copyright (c) 2010-2011 Sullivan Beck
-
-This module is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
-
-=cut
-
Deleted: trunk/contrib/perl/cpan/Module-Load-Conditional/t/02_Parse_Version.t
===================================================================
--- trunk/contrib/perl/cpan/Module-Load-Conditional/t/02_Parse_Version.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/Module-Load-Conditional/t/02_Parse_Version.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,99 +0,0 @@
-BEGIN { chdir 't' if -d 't' }
-
-use strict;
-use lib qw[../lib];
-use Test::More 'no_plan';
-
-my $Class = 'Module::Load::Conditional';
-my $Meth = '_parse_version';
-my $Verbose = @ARGV ? 1 : 0;
-
-use_ok( $Class );
-
-### versions that should parse
-{ for my $str ( __PACKAGE__->_succeed ) {
- my $res = $Class->$Meth( $str, $Verbose );
- ok( defined $res, "String '$str' identified as version string" );
-
- ### XXX version.pm 0.69 pure perl fails tests under 5.6.2.
- ### XXX version.pm <= 0.69 do not have a complete overload
- ### implementation, which causes the following error:
- ### $ perl -Mversion -le'qv(1)+0'
- ### Operation "+": no method found,
- ### left argument in overloaded package version,
- ### right argument has no overloaded magic at -e line 1
- ### so we do the comparison ourselves, and then feed it to
- ### the Test::More::ok().
- ###
- ### Mailed jpeacock and p5p about both issues on 25-1-2007:
- ### http://xrl.us/uem7
- ### (http://www.xray.mpe.mpg.de/mailing-lists/
- ### perl5-porters/2007-01/msg00805.html)
-
- ### Quell "Argument isn't numeric in gt" warnings...
- my $bool = do { local $^W; $res > 0 };
-
- ok( $bool, " Version is '$res'" );
- isnt( $res, '0.0', " Not the default value" );
- }
-}
-
-### version that should fail
-{ for my $str ( __PACKAGE__->_fail ) {
- my $res = $Class->$Meth( $str, $Verbose );
- ok( ! defined $res, "String '$str' is not a version string" );
- }
-}
-
-
-################################
-###
-### VERSION declarations to test
-###
-################################
-
-sub _succeed {
- return grep { /\S/ } map { s/^\s*//; $_ } split "\n", q[
- $VERSION = 1;
- *VERSION = \'1.01';
- use version; $VERSION = qv('0.0.2');
- use version; $VERSION = qv('3.0.14');
- ($VERSION) = '$Revision: 1.1.1.1 $' =~ /\s(\d+\.\d+)\s/;
- ( $VERSION ) = sprintf "%d.%02d", q$Revision: 1.1.1.1 $ =~ m/ (\d+) \. (\d+) /gx;
- ($GD::Graph::area::VERSION) = '$Revision: 1.1.1.1 $' =~ /\s([\d.]+)/;
- ($GD::Graph::axestype::VERSION) = '$Revision: 1.1.1.1 $' =~ /\s([\d.]+)/;
- ($GD::Graph::colour::VERSION) = '$Revision: 1.1.1.1 $' =~ /\s([\d.]+)/;
- ($GD::Graph::pie::VERSION) = '$Revision: 1.1.1.1 $' =~ /\s([\d.]+)/;
- ($GD::Text::Align::VERSION) = '$Revision: 1.1.1.1 $' =~ /\s([\d.]+)/;
- $VERSION = qv('0.0.1');
- use version; $VERSION = qv('0.0.3');
- $VERSION = do { my @r = ( ( $v = q<Version value="0.20.1"> ) =~ /\d+/g ); sprintf "%d.%02d", $r[0], int( $r[1] / 10 ) };
- ($VERSION) = sprintf '%i.%03i', split(/\./,('$Revision: 1.1.1.1 $' =~ /Revision: (\S+)\s/)[0]); # $Date: 2011-05-18 13:33:29 $
- ( $VERSION = q($Id: 02_Parse_Version.t,v 1.1.1.1 2011-05-18 13:33:29 laffer1 Exp $) ) =~ s/^.*\s+(\d+)\/(\d+)\/(\d+).*$/$1$2$3/; # all one line for MakeMaker
- ($VERSION) = q $Revision: 1.1.1.1 $ =~ /([\d.]+)/;
- ($VERSION) = q$Revision: 1.1.1.1 $ =~ /([\d.]+)/;
- $VERSION = "3.0.8";
- $VERSION = '1.0.5';
- ];
-}
-
-sub _fail {
- return grep { /\S/ } map { s/^\s*//; $_ } split "\n", q[
- use vars qw($VERSION $AUTOLOAD %ERROR $ERROR $Warn $Die);
- sub version { $GD::Graph::colour::VERSION }
- my $VERS = qr{ $HWS VERSION $HWS \n }xms;
- diag( "Testing $main_module \$${main_module}::VERSION" );
- our ( $VERSION, $v, $_VERSION );
- my $seen = { q{::} => { 'VERSION' => 1 } }; # avoid multiple scans
- eval "$module->VERSION"
- 'VERSION' => '1.030' # Variable and Value
- 'VERSION' => '2.121_020'
- 'VERSION' => '0.050', # Standard variable $VERSION
- use vars qw( $VERSION $seq @FontDirs );
- $VERSION
- # *VERSION = \'1.01';
- # ( $VERSION ) = '$Revision: 1.1.1.1 $ ' =~ /\$Revision:\s+([^\s]+)/;
- #$VERSION = sprintf("%d.%s", map {s/_//g; $_} q$Name: not supported by cvs2svn $ =~ /-(\d+)_([\d_]+)/);
- #$VERSION = sprintf("%d.%s", map {s/_//g; $_} q$Name: not supported by cvs2svn $ =~ /-(\d+)_([\d_]+)/);
- ];
-}
Deleted: trunk/contrib/perl/cpan/Perl-OSType/t/00-compile.t
===================================================================
--- trunk/contrib/perl/cpan/Perl-OSType/t/00-compile.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/Perl-OSType/t/00-compile.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,53 +0,0 @@
-#!perl
-#
-# This file is part of Perl-OSType
-#
-# This software is copyright (c) 2010 by David Golden.
-#
-# This is free software; you can redistribute it and/or modify it under
-# the same terms as the Perl 5 programming language system itself.
-#
-
-use strict;
-use warnings;
-
-use Test::More;
-use File::Find;
-use File::Temp qw{ tempdir };
-
-my @modules;
-find(
- sub {
- return if $File::Find::name !~ /\.pm\z/;
- my $found = $File::Find::name;
- $found =~ s{^lib/}{};
- $found =~ s{[/\\]}{::}g;
- $found =~ s/\.pm$//;
- # nothing to skip
- push @modules, $found;
- },
- 'lib',
-);
-
-my @scripts = glob "bin/*";
-
-my $plan = scalar(@modules) + scalar(@scripts);
-$plan ? (plan tests => $plan) : (plan skip_all => "no tests to run");
-
-{
- # fake home for cpan-testers
- local $ENV{HOME} = tempdir( CLEANUP => 1 );
-
- like( qx{ $^X -Ilib -e "require $_; print '$_ ok'" }, qr/^\s*$_ ok/s, "$_ loaded ok" )
- for sort @modules;
-
- SKIP: {
- eval "use Test::Script 1.05; 1;";
- skip "Test::Script needed to test script compilation", scalar(@scripts) if $@;
- foreach my $file ( @scripts ) {
- my $script = $file;
- $script =~ s!.*/!!;
- script_compiles( $file, "$script script compiles" );
- }
- }
-}
Deleted: trunk/contrib/perl/cpan/Pod-Parser/lib/Pod/Checker.pm
===================================================================
--- trunk/contrib/perl/cpan/Pod-Parser/lib/Pod/Checker.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/Pod-Parser/lib/Pod/Checker.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1268 +0,0 @@
-#############################################################################
-# Pod/Checker.pm -- check pod documents for syntax errors
-#
-# Copyright (C) 1994-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-package Pod::Checker;
-use strict;
-
-use vars qw($VERSION @ISA @EXPORT %VALID_COMMANDS %VALID_SEQUENCES);
-$VERSION = '1.45'; ## Current version of this package
-require 5.005; ## requires this Perl version or later
-
-use Pod::ParseUtils; ## for hyperlinks and lists
-
-=head1 NAME
-
-Pod::Checker, podchecker() - check pod documents for syntax errors
-
-=head1 SYNOPSIS
-
- use Pod::Checker;
-
- $syntax_okay = podchecker($filepath, $outputpath, %options);
-
- my $checker = new Pod::Checker %options;
- $checker->parse_from_file($filepath, \*STDERR);
-
-=head1 OPTIONS/ARGUMENTS
-
-C<$filepath> is the input POD to read and C<$outputpath> is
-where to write POD syntax error messages. Either argument may be a scalar
-indicating a file-path, or else a reference to an open filehandle.
-If unspecified, the input-file it defaults to C<\*STDIN>, and
-the output-file defaults to C<\*STDERR>.
-
-=head2 podchecker()
-
-This function can take a hash of options:
-
-=over 4
-
-=item B<-warnings> =E<gt> I<val>
-
-Turn warnings on/off. I<val> is usually 1 for on, but higher values
-trigger additional warnings. See L<"Warnings">.
-
-=back
-
-=head1 DESCRIPTION
-
-B<podchecker> will perform syntax checking of Perl5 POD format documentation.
-
-Curious/ambitious users are welcome to propose additional features they wish
-to see in B<Pod::Checker> and B<podchecker> and verify that the checks are
-consistent with L<perlpod>.
-
-The following checks are currently performed:
-
-=over 4
-
-=item *
-
-Unknown '=xxxx' commands, unknown 'XE<lt>...E<gt>' interior-sequences,
-and unterminated interior sequences.
-
-=item *
-
-Check for proper balancing of C<=begin> and C<=end>. The contents of such
-a block are generally ignored, i.e. no syntax checks are performed.
-
-=item *
-
-Check for proper nesting and balancing of C<=over>, C<=item> and C<=back>.
-
-=item *
-
-Check for same nested interior-sequences (e.g.
-C<LE<lt>...LE<lt>...E<gt>...E<gt>>).
-
-=item *
-
-Check for malformed or non-existing entities C<EE<lt>...E<gt>>.
-
-=item *
-
-Check for correct syntax of hyperlinks C<LE<lt>...E<gt>>. See L<perlpod>
-for details.
-
-=item *
-
-Check for unresolved document-internal links. This check may also reveal
-misspelled links that seem to be internal links but should be links
-to something else.
-
-=back
-
-=head1 DIAGNOSTICS
-
-=head2 Errors
-
-=over 4
-
-=item * empty =headn
-
-A heading (C<=head1> or C<=head2>) without any text? That ain't no
-heading!
-
-=item * =over on line I<N> without closing =back
-
-The C<=over> command does not have a corresponding C<=back> before the
-next heading (C<=head1> or C<=head2>) or the end of the file.
-
-=item * =item without previous =over
-
-=item * =back without previous =over
-
-An C<=item> or C<=back> command has been found outside a
-C<=over>/C<=back> block.
-
-=item * No argument for =begin
-
-A C<=begin> command was found that is not followed by the formatter
-specification.
-
-=item * =end without =begin
-
-A standalone C<=end> command was found.
-
-=item * Nested =begin's
-
-There were at least two consecutive C<=begin> commands without
-the corresponding C<=end>. Only one C<=begin> may be active at
-a time.
-
-=item * =for without formatter specification
-
-There is no specification of the formatter after the C<=for> command.
-
-=item * unresolved internal link I<NAME>
-
-The given link to I<NAME> does not have a matching node in the current
-POD. This also happened when a single word node name is not enclosed in
-C<"">.
-
-=item * Unknown command "I<CMD>"
-
-An invalid POD command has been found. Valid are C<=head1>, C<=head2>,
-C<=head3>, C<=head4>, C<=over>, C<=item>, C<=back>, C<=begin>, C<=end>,
-C<=for>, C<=pod>, C<=cut>
-
-=item * Unknown interior-sequence "I<SEQ>"
-
-An invalid markup command has been encountered. Valid are:
-C<BE<lt>E<gt>>, C<CE<lt>E<gt>>, C<EE<lt>E<gt>>, C<FE<lt>E<gt>>,
-C<IE<lt>E<gt>>, C<LE<lt>E<gt>>, C<SE<lt>E<gt>>, C<XE<lt>E<gt>>,
-C<ZE<lt>E<gt>>
-
-=item * nested commands I<CMD>E<lt>...I<CMD>E<lt>...E<gt>...E<gt>
-
-Two nested identical markup commands have been found. Generally this
-does not make sense.
-
-=item * garbled entity I<STRING>
-
-The I<STRING> found cannot be interpreted as a character entity.
-
-=item * Entity number out of range
-
-An entity specified by number (dec, hex, oct) is out of range (1-255).
-
-=item * malformed link LE<lt>E<gt>
-
-The link found cannot be parsed because it does not conform to the
-syntax described in L<perlpod>.
-
-=item * nonempty ZE<lt>E<gt>
-
-The C<ZE<lt>E<gt>> sequence is supposed to be empty.
-
-=item * empty XE<lt>E<gt>
-
-The index entry specified contains nothing but whitespace.
-
-=item * Spurious text after =pod / =cut
-
-The commands C<=pod> and C<=cut> do not take any arguments.
-
-=item * Spurious character(s) after =back
-
-The C<=back> command does not take any arguments.
-
-=back
-
-=head2 Warnings
-
-These may not necessarily cause trouble, but indicate mediocre style.
-
-=over 4
-
-=item * multiple occurrence of link target I<name>
-
-The POD file has some C<=item> and/or C<=head> commands that have
-the same text. Potential hyperlinks to such a text cannot be unique then.
-This warning is printed only with warning level greater than one.
-
-=item * line containing nothing but whitespace in paragraph
-
-There is some whitespace on a seemingly empty line. POD is very sensitive
-to such things, so this is flagged. B<vi> users switch on the B<list>
-option to avoid this problem.
-
-=begin _disabled_
-
-=item * file does not start with =head
-
-The file starts with a different POD directive than head.
-This is most probably something you do not want.
-
-=end _disabled_
-
-=item * previous =item has no contents
-
-There is a list C<=item> right above the flagged line that has no
-text contents. You probably want to delete empty items.
-
-=item * preceding non-item paragraph(s)
-
-A list introduced by C<=over> starts with a text or verbatim paragraph,
-but continues with C<=item>s. Move the non-item paragraph out of the
-C<=over>/C<=back> block.
-
-=item * =item type mismatch (I<one> vs. I<two>)
-
-A list started with e.g. a bullet-like C<=item> and continued with a
-numbered one. This is obviously inconsistent. For most translators the
-type of the I<first> C<=item> determines the type of the list.
-
-=item * I<N> unescaped C<E<lt>E<gt>> in paragraph
-
-Angle brackets not written as C<E<lt>ltE<gt>> and C<E<lt>gtE<gt>>
-can potentially cause errors as they could be misinterpreted as
-markup commands. This is only printed when the -warnings level is
-greater than 1.
-
-=item * Unknown entity
-
-A character entity was found that does not belong to the standard
-ISO set or the POD specials C<verbar> and C<sol>.
-
-=item * No items in =over
-
-The list opened with C<=over> does not contain any items.
-
-=item * No argument for =item
-
-C<=item> without any parameters is deprecated. It should either be followed
-by C<*> to indicate an unordered list, by a number (optionally followed
-by a dot) to indicate an ordered (numbered) list or simple text for a
-definition list.
-
-=item * empty section in previous paragraph
-
-The previous section (introduced by a C<=head> command) does not contain
-any text. This usually indicates that something is missing. Note: A
-C<=head1> followed immediately by C<=head2> does not trigger this warning.
-
-=item * Verbatim paragraph in NAME section
-
-The NAME section (C<=head1 NAME>) should consist of a single paragraph
-with the script/module name, followed by a dash `-' and a very short
-description of what the thing is good for.
-
-=item * =headI<n> without preceding higher level
-
-For example if there is a C<=head2> in the POD file prior to a
-C<=head1>.
-
-=back
-
-=head2 Hyperlinks
-
-There are some warnings with respect to malformed hyperlinks:
-
-=over 4
-
-=item * ignoring leading/trailing whitespace in link
-
-There is whitespace at the beginning or the end of the contents of
-LE<lt>...E<gt>.
-
-=item * (section) in '$page' deprecated
-
-There is a section detected in the page name of LE<lt>...E<gt>, e.g.
-C<LE<lt>passwd(2)E<gt>>. POD hyperlinks may point to POD documents only.
-Please write C<CE<lt>passwd(2)E<gt>> instead. Some formatters are able
-to expand this to appropriate code. For links to (builtin) functions,
-please say C<LE<lt>perlfunc/mkdirE<gt>>, without ().
-
-=item * alternative text/node '%s' contains non-escaped | or /
-
-The characters C<|> and C</> are special in the LE<lt>...E<gt> context.
-Although the hyperlink parser does its best to determine which "/" is
-text and which is a delimiter in case of doubt, one ought to escape
-these literal characters like this:
-
- / E<sol>
- | E<verbar>
-
-=back
-
-=head1 RETURN VALUE
-
-B<podchecker> returns the number of POD syntax errors found or -1 if
-there were no POD commands at all found in the file.
-
-=head1 EXAMPLES
-
-See L</SYNOPSIS>
-
-=head1 INTERFACE
-
-While checking, this module collects document properties, e.g. the nodes
-for hyperlinks (C<=headX>, C<=item>) and index entries (C<XE<lt>E<gt>>).
-POD translators can use this feature to syntax-check and get the nodes in
-a first pass before actually starting to convert. This is expensive in terms
-of execution time, but allows for very robust conversions.
-
-Since PodParser-1.24 the B<Pod::Checker> module uses only the B<poderror>
-method to print errors and warnings. The summary output (e.g.
-"Pod syntax OK") has been dropped from the module and has been included in
-B<podchecker> (the script). This allows users of B<Pod::Checker> to
-control completely the output behavior. Users of B<podchecker> (the script)
-get the well-known behavior.
-
-=cut
-
-#############################################################################
-
-#use diagnostics;
-use Carp qw(croak);
-use Exporter;
-use Pod::Parser;
-
- at ISA = qw(Pod::Parser);
- at EXPORT = qw(&podchecker);
-
-my %VALID_COMMANDS = (
- 'pod' => 1,
- 'cut' => 1,
- 'head1' => 1,
- 'head2' => 1,
- 'head3' => 1,
- 'head4' => 1,
- 'over' => 1,
- 'back' => 1,
- 'item' => 1,
- 'for' => 1,
- 'begin' => 1,
- 'end' => 1,
- 'encoding' => 1,
-);
-
-my %VALID_SEQUENCES = (
- 'I' => 1,
- 'B' => 1,
- 'S' => 1,
- 'C' => 1,
- 'L' => 1,
- 'F' => 1,
- 'X' => 1,
- 'Z' => 1,
- 'E' => 1,
-);
-
-# stolen from HTML::Entities
-my %ENTITIES = (
- # Some normal chars that have special meaning in SGML context
- amp => '&', # ampersand
-'gt' => '>', # greater than
-'lt' => '<', # less than
- quot => '"', # double quote
-
- # PUBLIC ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML
- AElig => '\xC6', # capital AE diphthong (ligature)
- Aacute => '\xC1', # capital A, acute accent
- Acirc => '\xC2', # capital A, circumflex accent
- Agrave => '\xC0', # capital A, grave accent
- Aring => '\xC5', # capital A, ring
- Atilde => '\xC3', # capital A, tilde
- Auml => '\xC4', # capital A, dieresis or umlaut mark
- Ccedil => '\xC7', # capital C, cedilla
- ETH => '\xD0', # capital Eth, Icelandic
- Eacute => '\xC9', # capital E, acute accent
- Ecirc => '\xCA', # capital E, circumflex accent
- Egrave => '\xC8', # capital E, grave accent
- Euml => '\xCB', # capital E, dieresis or umlaut mark
- Iacute => '\xCD', # capital I, acute accent
- Icirc => '\xCE', # capital I, circumflex accent
- Igrave => '\xCC', # capital I, grave accent
- Iuml => '\xCF', # capital I, dieresis or umlaut mark
- Ntilde => '\xD1', # capital N, tilde
- Oacute => '\xD3', # capital O, acute accent
- Ocirc => '\xD4', # capital O, circumflex accent
- Ograve => '\xD2', # capital O, grave accent
- Oslash => '\xD8', # capital O, slash
- Otilde => '\xD5', # capital O, tilde
- Ouml => '\xD6', # capital O, dieresis or umlaut mark
- THORN => '\xDE', # capital THORN, Icelandic
- Uacute => '\xDA', # capital U, acute accent
- Ucirc => '\xDB', # capital U, circumflex accent
- Ugrave => '\xD9', # capital U, grave accent
- Uuml => '\xDC', # capital U, dieresis or umlaut mark
- Yacute => '\xDD', # capital Y, acute accent
- aacute => '\xE1', # small a, acute accent
- acirc => '\xE2', # small a, circumflex accent
- aelig => '\xE6', # small ae diphthong (ligature)
- agrave => '\xE0', # small a, grave accent
- aring => '\xE5', # small a, ring
- atilde => '\xE3', # small a, tilde
- auml => '\xE4', # small a, dieresis or umlaut mark
- ccedil => '\xE7', # small c, cedilla
- eacute => '\xE9', # small e, acute accent
- ecirc => '\xEA', # small e, circumflex accent
- egrave => '\xE8', # small e, grave accent
- eth => '\xF0', # small eth, Icelandic
- euml => '\xEB', # small e, dieresis or umlaut mark
- iacute => '\xED', # small i, acute accent
- icirc => '\xEE', # small i, circumflex accent
- igrave => '\xEC', # small i, grave accent
- iuml => '\xEF', # small i, dieresis or umlaut mark
- ntilde => '\xF1', # small n, tilde
- oacute => '\xF3', # small o, acute accent
- ocirc => '\xF4', # small o, circumflex accent
- ograve => '\xF2', # small o, grave accent
- oslash => '\xF8', # small o, slash
- otilde => '\xF5', # small o, tilde
- ouml => '\xF6', # small o, dieresis or umlaut mark
- szlig => '\xDF', # small sharp s, German (sz ligature)
- thorn => '\xFE', # small thorn, Icelandic
- uacute => '\xFA', # small u, acute accent
- ucirc => '\xFB', # small u, circumflex accent
- ugrave => '\xF9', # small u, grave accent
- uuml => '\xFC', # small u, dieresis or umlaut mark
- yacute => '\xFD', # small y, acute accent
- yuml => '\xFF', # small y, dieresis or umlaut mark
-
- # Some extra Latin 1 chars that are listed in the HTML3.2 draft (21-May-96)
- copy => '\xA9', # copyright sign
- reg => '\xAE', # registered sign
- nbsp => "\240", # non breaking space
-
- # Additional ISO-8859/1 entities listed in rfc1866 (section 14)
- iexcl => '\xA1',
- cent => '\xA2',
- pound => '\xA3',
- curren => '\xA4',
- yen => '\xA5',
- brvbar => '\xA6',
- sect => '\xA7',
- uml => '\xA8',
- ordf => '\xAA',
- laquo => '\xAB',
-'not' => '\xAC', # not is a keyword in perl
- shy => '\xAD',
- macr => '\xAF',
- deg => '\xB0',
- plusmn => '\xB1',
- sup1 => '\xB9',
- sup2 => '\xB2',
- sup3 => '\xB3',
- acute => '\xB4',
- micro => '\xB5',
- para => '\xB6',
- middot => '\xB7',
- cedil => '\xB8',
- ordm => '\xBA',
- raquo => '\xBB',
- frac14 => '\xBC',
- frac12 => '\xBD',
- frac34 => '\xBE',
- iquest => '\xBF',
-'times' => '\xD7', # times is a keyword in perl
- divide => '\xF7',
-
-# some POD special entities
- verbar => '|',
- sol => '/'
-);
-
-##---------------------------------------------------------------------------
-
-##---------------------------------
-## Function definitions begin here
-##---------------------------------
-
-sub podchecker {
- my ($infile, $outfile, %options) = @_;
- local $_;
-
- ## Set defaults
- $infile ||= \*STDIN;
- $outfile ||= \*STDERR;
-
- ## Now create a pod checker
- my $checker = new Pod::Checker(%options);
-
- ## Now check the pod document for errors
- $checker->parse_from_file($infile, $outfile);
-
- ## Return the number of errors found
- return $checker->num_errors();
-}
-
-##---------------------------------------------------------------------------
-
-##-------------------------------
-## Method definitions begin here
-##-------------------------------
-
-##################################
-
-=over 4
-
-=item C<Pod::Checker-E<gt>new( %options )>
-
-Return a reference to a new Pod::Checker object that inherits from
-Pod::Parser and is used for calling the required methods later. The
-following options are recognized:
-
-C<-warnings =E<gt> num>
- Print warnings if C<num> is true. The higher the value of C<num>,
-the more warnings are printed. Currently there are only levels 1 and 2.
-
-C<-quiet =E<gt> num>
- If C<num> is true, do not print any errors/warnings. This is useful
-when Pod::Checker is used to munge POD code into plain text from within
-POD formatters.
-
-=cut
-
-## sub new {
-## my $this = shift;
-## my $class = ref($this) || $this;
-## my %params = @_;
-## my $self = {%params};
-## bless $self, $class;
-## $self->initialize();
-## return $self;
-## }
-
-sub initialize {
- my $self = shift;
- ## Initialize number of errors, and setup an error function to
- ## increment this number and then print to the designated output.
- $self->{_NUM_ERRORS} = 0;
- $self->{_NUM_WARNINGS} = 0;
- $self->{-quiet} ||= 0;
- # set the error handling subroutine
- $self->errorsub($self->{-quiet} ? sub { 1; } : 'poderror');
- $self->{_commands} = 0; # total number of POD commands encountered
- $self->{_list_stack} = []; # stack for nested lists
- $self->{_have_begin} = ''; # stores =begin
- $self->{_links} = []; # stack for internal hyperlinks
- $self->{_nodes} = []; # stack for =head/=item nodes
- $self->{_index} = []; # text in X<>
- # print warnings?
- $self->{-warnings} = 1 unless(defined $self->{-warnings});
- $self->{_current_head1} = ''; # the current =head1 block
- $self->parseopts(-process_cut_cmd => 1, -warnings => $self->{-warnings});
-}
-
-##################################
-
-=item C<$checker-E<gt>poderror( @args )>
-
-=item C<$checker-E<gt>poderror( {%opts}, @args )>
-
-Internal method for printing errors and warnings. If no options are
-given, simply prints "@_". The following options are recognized and used
-to form the output:
-
- -msg
-
-A message to print prior to C<@args>.
-
- -line
-
-The line number the error occurred in.
-
- -file
-
-The file (name) the error occurred in.
-
- -severity
-
-The error level, should be 'WARNING' or 'ERROR'.
-
-=cut
-
-# Invoked as $self->poderror( @args ), or $self->poderror( {%opts}, @args )
-sub poderror {
- my $self = shift;
- my %opts = (ref $_[0]) ? %{shift()} : ();
-
- ## Retrieve options
- chomp( my $msg = ($opts{-msg} || '')."@_" );
- my $line = (exists $opts{-line}) ? " at line $opts{-line}" : '';
- my $file = (exists $opts{-file}) ? " in file $opts{-file}" : '';
- unless (exists $opts{-severity}) {
- ## See if can find severity in message prefix
- $opts{-severity} = $1 if ( $msg =~ s/^\**\s*([A-Z]{3,}):\s+// );
- }
- my $severity = (exists $opts{-severity}) ? "*** $opts{-severity}: " : '';
-
- ## Increment error count and print message "
- ++($self->{_NUM_ERRORS})
- if(!%opts || ($opts{-severity} && $opts{-severity} eq 'ERROR'));
- ++($self->{_NUM_WARNINGS})
- if(!%opts || ($opts{-severity} && $opts{-severity} eq 'WARNING'));
- unless($self->{-quiet}) {
- my $out_fh = $self->output_handle() || \*STDERR;
- print $out_fh ($severity, $msg, $line, $file, "\n")
- if($self->{-warnings} || !%opts || $opts{-severity} ne 'WARNING');
- }
-}
-
-##################################
-
-=item C<$checker-E<gt>num_errors()>
-
-Set (if argument specified) and retrieve the number of errors found.
-
-=cut
-
-sub num_errors {
- return (@_ > 1) ? ($_[0]->{_NUM_ERRORS} = $_[1]) : $_[0]->{_NUM_ERRORS};
-}
-
-##################################
-
-=item C<$checker-E<gt>num_warnings()>
-
-Set (if argument specified) and retrieve the number of warnings found.
-
-=cut
-
-sub num_warnings {
- return (@_ > 1) ? ($_[0]->{_NUM_WARNINGS} = $_[1]) : $_[0]->{_NUM_WARNINGS};
-}
-
-##################################
-
-=item C<$checker-E<gt>name()>
-
-Set (if argument specified) and retrieve the canonical name of POD as
-found in the C<=head1 NAME> section.
-
-=cut
-
-sub name {
- return (@_ > 1 && $_[1]) ?
- ($_[0]->{-name} = $_[1]) : $_[0]->{-name};
-}
-
-##################################
-
-=item C<$checker-E<gt>node()>
-
-Add (if argument specified) and retrieve the nodes (as defined by C<=headX>
-and C<=item>) of the current POD. The nodes are returned in the order of
-their occurrence. They consist of plain text, each piece of whitespace is
-collapsed to a single blank.
-
-=cut
-
-sub node {
- my ($self,$text) = @_;
- if(defined $text) {
- $text =~ s/\s+$//s; # strip trailing whitespace
- $text =~ s/\s+/ /gs; # collapse whitespace
- # add node, order important!
- push(@{$self->{_nodes}}, $text);
- # keep also a uniqueness counter
- $self->{_unique_nodes}->{$text}++ if($text !~ /^\s*$/s);
- return $text;
- }
- @{$self->{_nodes}};
-}
-
-##################################
-
-=item C<$checker-E<gt>idx()>
-
-Add (if argument specified) and retrieve the index entries (as defined by
-C<XE<lt>E<gt>>) of the current POD. They consist of plain text, each piece
-of whitespace is collapsed to a single blank.
-
-=cut
-
-# set/return index entries of current POD
-sub idx {
- my ($self,$text) = @_;
- if(defined $text) {
- $text =~ s/\s+$//s; # strip trailing whitespace
- $text =~ s/\s+/ /gs; # collapse whitespace
- # add node, order important!
- push(@{$self->{_index}}, $text);
- # keep also a uniqueness counter
- $self->{_unique_nodes}->{$text}++ if($text !~ /^\s*$/s);
- return $text;
- }
- @{$self->{_index}};
-}
-
-##################################
-
-=item C<$checker-E<gt>hyperlink()>
-
-Add (if argument specified) and retrieve the hyperlinks (as defined by
-C<LE<lt>E<gt>>) of the current POD. They consist of a 2-item array: line
-number and C<Pod::Hyperlink> object.
-
-=back
-
-=cut
-
-# set/return hyperlinks of the current POD
-sub hyperlink {
- my $self = shift;
- if($_[0]) {
- push(@{$self->{_links}}, $_[0]);
- return $_[0];
- }
- @{$self->{_links}};
-}
-
-## overrides for Pod::Parser
-
-sub end_pod {
- ## Do some final checks and
- ## print the number of errors found
- my $self = shift;
- my $infile = $self->input_file();
-
- if(@{$self->{_list_stack}}) {
- my $list;
- while(($list = $self->_close_list('EOF',$infile)) &&
- $list->indent() ne 'auto') {
- $self->poderror({ -line => 'EOF', -file => $infile,
- -severity => 'ERROR', -msg => '=over on line ' .
- $list->start() . ' without closing =back' });
- }
- }
-
- # check validity of document internal hyperlinks
- # first build the node names from the paragraph text
- my %nodes;
- foreach($self->node()) {
- $nodes{$_} = 1;
- if(/^(\S+)\s+\S/) {
- # we have more than one word. Use the first as a node, too.
- # This is used heavily in perlfunc.pod
- $nodes{$1} ||= 2; # derived node
- }
- }
- foreach($self->idx()) {
- $nodes{$_} = 3; # index node
- }
- foreach($self->hyperlink()) {
- my ($line,$link) = @$_;
- # _TODO_ what if there is a link to the page itself by the name,
- # e.g. in Tk::Pod : L<Tk::Pod/"DESCRIPTION">
- if($link->node() && !$link->page() && $link->type() ne 'hyperlink') {
- my $node = $self->_check_ptree($self->parse_text($link->node(),
- $line), $line, $infile, 'L');
- if($node && !$nodes{$node}) {
- $self->poderror({ -line => $line || '', -file => $infile,
- -severity => 'ERROR',
- -msg => "unresolved internal link '$node'"});
- }
- }
- }
-
- # check the internal nodes for uniqueness. This pertains to
- # =headX, =item and X<...>
- if($self->{-warnings} && $self->{-warnings}>1) {
- foreach(grep($self->{_unique_nodes}->{$_} > 1,
- keys %{$self->{_unique_nodes}})) {
- $self->poderror({ -line => '-', -file => $infile,
- -severity => 'WARNING',
- -msg => "multiple occurrence of link target '$_'"});
- }
- }
-
- # no POD found here
- $self->num_errors(-1) if($self->{_commands} == 0);
-}
-
-# check a POD command directive
-sub command {
- my ($self, $cmd, $paragraph, $line_num, $pod_para) = @_;
- my ($file, $line) = $pod_para->file_line;
- ## Check the command syntax
- my $arg; # this will hold the command argument
- if (! $VALID_COMMANDS{$cmd}) {
- $self->poderror({ -line => $line, -file => $file, -severity => 'ERROR',
- -msg => "Unknown command '$cmd'" });
- }
- else { # found a valid command
- $self->{_commands}++; # delete this line if below is enabled again
-
- ##### following check disabled due to strong request
- #if(!$self->{_commands}++ && $cmd !~ /^head/) {
- # $self->poderror({ -line => $line, -file => $file,
- # -severity => 'WARNING',
- # -msg => "file does not start with =head" });
- #}
-
- # check syntax of particular command
- if($cmd eq 'over') {
- # check for argument
- $arg = $self->interpolate_and_check($paragraph, $line,$file);
- my $indent = 4; # default
- if($arg && $arg =~ /^\s*(\d+)\s*$/) {
- $indent = $1;
- }
- # start a new list
- $self->_open_list($indent,$line,$file);
- }
- elsif($cmd eq 'item') {
- # are we in a list?
- unless(@{$self->{_list_stack}}) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => '=item without previous =over' });
- # auto-open in case we encounter many more
- $self->_open_list('auto',$line,$file);
- }
- my $list = $self->{_list_stack}->[0];
- # check whether the previous item had some contents
- if(defined $self->{_list_item_contents} &&
- $self->{_list_item_contents} == 0) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => 'previous =item has no contents' });
- }
- if($list->{_has_par}) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => 'preceding non-item paragraph(s)' });
- delete $list->{_has_par};
- }
- # check for argument
- $arg = $self->interpolate_and_check($paragraph, $line, $file);
- if($arg && $arg =~ /(\S+)/) {
- $arg =~ s/[\s\n]+$//;
- my $type;
- if($arg =~ /^[*]\s*(\S*.*)/) {
- $type = 'bullet';
- $self->{_list_item_contents} = $1 ? 1 : 0;
- $arg = $1;
- }
- elsif($arg =~ /^\d+\.?\s+(\S*)/) {
- $type = 'number';
- $self->{_list_item_contents} = $1 ? 1 : 0;
- $arg = $1;
- }
- else {
- $type = 'definition';
- $self->{_list_item_contents} = 1;
- }
- my $first = $list->type();
- if($first && $first ne $type) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => "=item type mismatch ('$first' vs. '$type')"});
- }
- else { # first item
- $list->type($type);
- }
- }
- else {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => 'No argument for =item' });
- $arg = ' '; # empty
- $self->{_list_item_contents} = 0;
- }
- # add this item
- $list->item($arg);
- # remember this node
- $self->node($arg);
- }
- elsif($cmd eq 'back') {
- # check if we have an open list
- unless(@{$self->{_list_stack}}) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => '=back without previous =over' });
- }
- else {
- # check for spurious characters
- $arg = $self->interpolate_and_check($paragraph, $line,$file);
- if($arg && $arg =~ /\S/) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => 'Spurious character(s) after =back' });
- }
- # close list
- my $list = $self->_close_list($line,$file);
- # check for empty lists
- if(!$list->item() && $self->{-warnings}) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => 'No items in =over (at line ' .
- $list->start() . ') / =back list'});
- }
- }
- }
- elsif($cmd =~ /^head(\d+)/) {
- my $hnum = $1;
- $self->{"_have_head_$hnum"}++; # count head types
- if($hnum > 1 && !$self->{'_have_head_'.($hnum -1)}) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => "=head$hnum without preceding higher level"});
- }
- # check whether the previous =head section had some contents
- if(defined $self->{_commands_in_head} &&
- $self->{_commands_in_head} == 0 &&
- defined $self->{_last_head} &&
- $self->{_last_head} >= $hnum) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => 'empty section in previous paragraph'});
- }
- $self->{_commands_in_head} = -1;
- $self->{_last_head} = $hnum;
- # check if there is an open list
- if(@{$self->{_list_stack}}) {
- my $list;
- while(($list = $self->_close_list($line,$file)) &&
- $list->indent() ne 'auto') {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => '=over on line '. $list->start() .
- " without closing =back (at $cmd)" });
- }
- }
- # remember this node
- $arg = $self->interpolate_and_check($paragraph, $line,$file);
- $arg =~ s/[\s\n]+$//s;
- $self->node($arg);
- unless(length($arg)) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => "empty =$cmd"});
- }
- if($cmd eq 'head1') {
- $self->{_current_head1} = $arg;
- } else {
- $self->{_current_head1} = '';
- }
- }
- elsif($cmd eq 'begin') {
- if($self->{_have_begin}) {
- # already have a begin
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => q{Nested =begin's (first at line } .
- $self->{_have_begin} . ')'});
- }
- else {
- # check for argument
- $arg = $self->interpolate_and_check($paragraph, $line,$file);
- unless($arg && $arg =~ /(\S+)/) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => 'No argument for =begin'});
- }
- # remember the =begin
- $self->{_have_begin} = "$line:$1";
- }
- }
- elsif($cmd eq 'end') {
- if($self->{_have_begin}) {
- # close the existing =begin
- $self->{_have_begin} = '';
- # check for spurious characters
- $arg = $self->interpolate_and_check($paragraph, $line,$file);
- # the closing argument is optional
- #if($arg && $arg =~ /\S/) {
- # $self->poderror({ -line => $line, -file => $file,
- # -severity => 'WARNING',
- # -msg => "Spurious character(s) after =end" });
- #}
- }
- else {
- # don't have a matching =begin
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => '=end without =begin' });
- }
- }
- elsif($cmd eq 'for') {
- unless($paragraph =~ /\s*(\S+)\s*/) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => '=for without formatter specification' });
- }
- $arg = ''; # do not expand paragraph below
- }
- elsif($cmd =~ /^(pod|cut)$/) {
- # check for argument
- $arg = $self->interpolate_and_check($paragraph, $line,$file);
- if($arg && $arg =~ /(\S+)/) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => "Spurious text after =$cmd"});
- }
- }
- $self->{_commands_in_head}++;
- ## Check the interior sequences in the command-text
- $self->interpolate_and_check($paragraph, $line,$file)
- unless(defined $arg);
- }
-}
-
-sub _open_list
-{
- my ($self,$indent,$line,$file) = @_;
- my $list = Pod::List->new(
- -indent => $indent,
- -start => $line,
- -file => $file);
- unshift(@{$self->{_list_stack}}, $list);
- undef $self->{_list_item_contents};
- $list;
-}
-
-sub _close_list
-{
- my ($self,$line,$file) = @_;
- my $list = shift(@{$self->{_list_stack}});
- if(defined $self->{_list_item_contents} &&
- $self->{_list_item_contents} == 0) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => 'previous =item has no contents' });
- }
- undef $self->{_list_item_contents};
- $list;
-}
-
-# process a block of some text
-sub interpolate_and_check {
- my ($self, $paragraph, $line, $file) = @_;
- ## Check the interior sequences in the command-text
- # and return the text
- $self->_check_ptree(
- $self->parse_text($paragraph,$line), $line, $file, '');
-}
-
-sub _check_ptree {
- my ($self,$ptree,$line,$file,$nestlist) = @_;
- local($_);
- my $text = '';
- # process each node in the parse tree
- foreach(@$ptree) {
- # regular text chunk
- unless(ref) {
- # count the unescaped angle brackets
- # complain only when warning level is greater than 1
- if($self->{-warnings} && $self->{-warnings}>1) {
- my $count;
- if($count = tr/<>/<>/) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => "$count unescaped <> in paragraph" });
- }
- }
- $text .= $_;
- next;
- }
- # have an interior sequence
- my $cmd = $_->cmd_name();
- my $contents = $_->parse_tree();
- ($file,$line) = $_->file_line();
- # check for valid tag
- if (! $VALID_SEQUENCES{$cmd}) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => qq(Unknown interior-sequence '$cmd')});
- # expand it anyway
- $text .= $self->_check_ptree($contents, $line, $file, "$nestlist$cmd");
- next;
- }
- if($nestlist =~ /$cmd/) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => "nested commands $cmd<...$cmd<...>...>"});
- # _TODO_ should we add the contents anyway?
- # expand it anyway, see below
- }
- if($cmd eq 'E') {
- # preserve entities
- if(@$contents > 1 || ref $$contents[0] || $$contents[0] !~ /^\w+$/) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => 'garbled entity ' . $_->raw_text()});
- next;
- }
- my $ent = $$contents[0];
- my $val;
- if($ent =~ /^0x[0-9a-f]+$/i) {
- # hexadec entity
- $val = hex($ent);
- }
- elsif($ent =~ /^0\d+$/) {
- # octal
- $val = oct($ent);
- }
- elsif($ent =~ /^\d+$/) {
- # numeric entity
- $val = $ent;
- }
- if(defined $val) {
- if($val>0 && $val<256) {
- $text .= chr($val);
- }
- else {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => 'Entity number out of range ' . $_->raw_text()});
- }
- }
- elsif($ENTITIES{$ent}) {
- # known ISO entity
- $text .= $ENTITIES{$ent};
- }
- else {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => 'Unknown entity ' . $_->raw_text()});
- $text .= "E<$ent>";
- }
- }
- elsif($cmd eq 'L') {
- # try to parse the hyperlink
- my $link = Pod::Hyperlink->new($contents->raw_text());
- unless(defined $link) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => 'malformed link ' . $_->raw_text() ." : $@"});
- next;
- }
- $link->line($line); # remember line
- if($self->{-warnings}) {
- foreach my $w ($link->warning()) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => $w });
- }
- }
- # check the link text
- $text .= $self->_check_ptree($self->parse_text($link->text(),
- $line), $line, $file, "$nestlist$cmd");
- # remember link
- $self->hyperlink([$line,$link]);
- }
- elsif($cmd =~ /[BCFIS]/) {
- # add the guts
- $text .= $self->_check_ptree($contents, $line, $file, "$nestlist$cmd");
- }
- elsif($cmd eq 'Z') {
- if(length($contents->raw_text())) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => 'Nonempty Z<>'});
- }
- }
- elsif($cmd eq 'X') {
- my $idx = $self->_check_ptree($contents, $line, $file, "$nestlist$cmd");
- if($idx =~ /^\s*$/s) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => 'Empty X<>'});
- }
- else {
- # remember this node
- $self->idx($idx);
- }
- }
- else {
- # not reached
- croak 'internal error';
- }
- }
- $text;
-}
-
-# process a block of verbatim text
-sub verbatim {
- ## Nothing particular to check
- my ($self, $paragraph, $line_num, $pod_para) = @_;
-
- $self->_preproc_par($paragraph);
-
- if($self->{_current_head1} eq 'NAME') {
- my ($file, $line) = $pod_para->file_line;
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => 'Verbatim paragraph in NAME section' });
- }
-}
-
-# process a block of regular text
-sub textblock {
- my ($self, $paragraph, $line_num, $pod_para) = @_;
- my ($file, $line) = $pod_para->file_line;
-
- $self->_preproc_par($paragraph);
-
- # skip this paragraph if in a =begin block
- unless($self->{_have_begin}) {
- my $block = $self->interpolate_and_check($paragraph, $line,$file);
- if($self->{_current_head1} eq 'NAME') {
- if($block =~ /^\s*(\S+?)\s*[,-]/) {
- # this is the canonical name
- $self->{-name} = $1 unless(defined $self->{-name});
- }
- }
- }
-}
-
-sub _preproc_par
-{
- my $self = shift;
- $_[0] =~ s/[\s\n]+$//;
- if($_[0]) {
- $self->{_commands_in_head}++;
- $self->{_list_item_contents}++ if(defined $self->{_list_item_contents});
- if(@{$self->{_list_stack}} && !$self->{_list_stack}->[0]->item()) {
- $self->{_list_stack}->[0]->{_has_par} = 1;
- }
- }
-}
-
-1;
-
-__END__
-
-=head1 AUTHOR
-
-Please report bugs using L<http://rt.cpan.org>.
-
-Brad Appleton E<lt>bradapp at enteract.comE<gt> (initial version),
-Marek Rouchal E<lt>marekr at cpan.orgE<gt>
-
-Based on code for B<Pod::Text::pod2text()> written by
-Tom Christiansen E<lt>tchrist at mox.perl.comE<gt>
-
-=cut
-
Deleted: trunk/contrib/perl/cpan/Pod-Parser/lib/Pod/Usage.pm
===================================================================
--- trunk/contrib/perl/cpan/Pod-Parser/lib/Pod/Usage.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/Pod-Parser/lib/Pod/Usage.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,730 +0,0 @@
-#############################################################################
-# Pod/Usage.pm -- print usage messages for the running script.
-#
-# Copyright (C) 1996-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-package Pod::Usage;
-use strict;
-
-use vars qw($VERSION @ISA @EXPORT);
-$VERSION = '1.36'; ## Current version of this package
-require 5.005; ## requires this Perl version or later
-
-=head1 NAME
-
-Pod::Usage, pod2usage() - print a usage message from embedded pod documentation
-
-=head1 SYNOPSIS
-
- use Pod::Usage
-
- my $message_text = "This text precedes the usage message.";
- my $exit_status = 2; ## The exit status to use
- my $verbose_level = 0; ## The verbose level to use
- my $filehandle = \*STDERR; ## The filehandle to write to
-
- pod2usage($message_text);
-
- pod2usage($exit_status);
-
- pod2usage( { -message => $message_text ,
- -exitval => $exit_status ,
- -verbose => $verbose_level,
- -output => $filehandle } );
-
- pod2usage( -msg => $message_text ,
- -exitval => $exit_status ,
- -verbose => $verbose_level,
- -output => $filehandle );
-
- pod2usage( -verbose => 2,
- -noperldoc => 1 )
-
-=head1 ARGUMENTS
-
-B<pod2usage> should be given either a single argument, or a list of
-arguments corresponding to an associative array (a "hash"). When a single
-argument is given, it should correspond to exactly one of the following:
-
-=over 4
-
-=item *
-
-A string containing the text of a message to print I<before> printing
-the usage message
-
-=item *
-
-A numeric value corresponding to the desired exit status
-
-=item *
-
-A reference to a hash
-
-=back
-
-If more than one argument is given then the entire argument list is
-assumed to be a hash. If a hash is supplied (either as a reference or
-as a list) it should contain one or more elements with the following
-keys:
-
-=over 4
-
-=item C<-message>
-
-=item C<-msg>
-
-The text of a message to print immediately prior to printing the
-program's usage message.
-
-=item C<-exitval>
-
-The desired exit status to pass to the B<exit()> function.
-This should be an integer, or else the string "NOEXIT" to
-indicate that control should simply be returned without
-terminating the invoking process.
-
-=item C<-verbose>
-
-The desired level of "verboseness" to use when printing the usage
-message. If the corresponding value is 0, then only the "SYNOPSIS"
-section of the pod documentation is printed. If the corresponding value
-is 1, then the "SYNOPSIS" section, along with any section entitled
-"OPTIONS", "ARGUMENTS", or "OPTIONS AND ARGUMENTS" is printed. If the
-corresponding value is 2 or more then the entire manpage is printed.
-
-The special verbosity level 99 requires to also specify the -sections
-parameter; then these sections are extracted (see L<Pod::Select>)
-and printed.
-
-=item C<-sections>
-
-A string representing a selection list for sections to be printed
-when -verbose is set to 99, e.g. C<"NAME|SYNOPSIS|DESCRIPTION|VERSION">.
-
-Alternatively, an array reference of section specifications can be used:
-
- pod2usage(-verbose => 99,
- -sections => [ qw(fred fred/subsection) ] );
-
-=item C<-output>
-
-A reference to a filehandle, or the pathname of a file to which the
-usage message should be written. The default is C<\*STDERR> unless the
-exit value is less than 2 (in which case the default is C<\*STDOUT>).
-
-=item C<-input>
-
-A reference to a filehandle, or the pathname of a file from which the
-invoking script's pod documentation should be read. It defaults to the
-file indicated by C<$0> (C<$PROGRAM_NAME> for users of F<English.pm>).
-
-If you are calling B<pod2usage()> from a module and want to display
-that module's POD, you can use this:
-
- use Pod::Find qw(pod_where);
- pod2usage( -input => pod_where({-inc => 1}, __PACKAGE__) );
-
-=item C<-pathlist>
-
-A list of directory paths. If the input file does not exist, then it
-will be searched for in the given directory list (in the order the
-directories appear in the list). It defaults to the list of directories
-implied by C<$ENV{PATH}>. The list may be specified either by a reference
-to an array, or by a string of directory paths which use the same path
-separator as C<$ENV{PATH}> on your system (e.g., C<:> for Unix, C<;> for
-MSWin32 and DOS).
-
-=item C<-noperldoc>
-
-By default, Pod::Usage will call L<perldoc> when -verbose >= 2 is
-specified. This does not work well e.g. if the script was packed
-with L<PAR>. The -noperldoc option suppresses the external call to
-L<perldoc> and uses the simple text formatter (L<Pod::Text>) to
-output the POD.
-
-=back
-
-=head1 DESCRIPTION
-
-B<pod2usage> will print a usage message for the invoking script (using
-its embedded pod documentation) and then exit the script with the
-desired exit status. The usage message printed may have any one of three
-levels of "verboseness": If the verbose level is 0, then only a synopsis
-is printed. If the verbose level is 1, then the synopsis is printed
-along with a description (if present) of the command line options and
-arguments. If the verbose level is 2, then the entire manual page is
-printed.
-
-Unless they are explicitly specified, the default values for the exit
-status, verbose level, and output stream to use are determined as
-follows:
-
-=over 4
-
-=item *
-
-If neither the exit status nor the verbose level is specified, then the
-default is to use an exit status of 2 with a verbose level of 0.
-
-=item *
-
-If an exit status I<is> specified but the verbose level is I<not>, then the
-verbose level will default to 1 if the exit status is less than 2 and
-will default to 0 otherwise.
-
-=item *
-
-If an exit status is I<not> specified but verbose level I<is> given, then
-the exit status will default to 2 if the verbose level is 0 and will
-default to 1 otherwise.
-
-=item *
-
-If the exit status used is less than 2, then output is printed on
-C<STDOUT>. Otherwise output is printed on C<STDERR>.
-
-=back
-
-Although the above may seem a bit confusing at first, it generally does
-"the right thing" in most situations. This determination of the default
-values to use is based upon the following typical Unix conventions:
-
-=over 4
-
-=item *
-
-An exit status of 0 implies "success". For example, B<diff(1)> exits
-with a status of 0 if the two files have the same contents.
-
-=item *
-
-An exit status of 1 implies possibly abnormal, but non-defective, program
-termination. For example, B<grep(1)> exits with a status of 1 if
-it did I<not> find a matching line for the given regular expression.
-
-=item *
-
-An exit status of 2 or more implies a fatal error. For example, B<ls(1)>
-exits with a status of 2 if you specify an illegal (unknown) option on
-the command line.
-
-=item *
-
-Usage messages issued as a result of bad command-line syntax should go
-to C<STDERR>. However, usage messages issued due to an explicit request
-to print usage (like specifying B<-help> on the command line) should go
-to C<STDOUT>, just in case the user wants to pipe the output to a pager
-(such as B<more(1)>).
-
-=item *
-
-If program usage has been explicitly requested by the user, it is often
-desirable to exit with a status of 1 (as opposed to 0) after issuing
-the user-requested usage message. It is also desirable to give a
-more verbose description of program usage in this case.
-
-=back
-
-B<pod2usage> doesn't force the above conventions upon you, but it will
-use them by default if you don't expressly tell it to do otherwise. The
-ability of B<pod2usage()> to accept a single number or a string makes it
-convenient to use as an innocent looking error message handling function:
-
- use Pod::Usage;
- use Getopt::Long;
-
- ## Parse options
- GetOptions("help", "man", "flag1") || pod2usage(2);
- pod2usage(1) if ($opt_help);
- pod2usage(-verbose => 2) if ($opt_man);
-
- ## Check for too many filenames
- pod2usage("$0: Too many files given.\n") if (@ARGV > 1);
-
-Some user's however may feel that the above "economy of expression" is
-not particularly readable nor consistent and may instead choose to do
-something more like the following:
-
- use Pod::Usage;
- use Getopt::Long;
-
- ## Parse options
- GetOptions("help", "man", "flag1") || pod2usage(-verbose => 0);
- pod2usage(-verbose => 1) if ($opt_help);
- pod2usage(-verbose => 2) if ($opt_man);
-
- ## Check for too many filenames
- pod2usage(-verbose => 2, -message => "$0: Too many files given.\n")
- if (@ARGV > 1);
-
-As with all things in Perl, I<there's more than one way to do it>, and
-B<pod2usage()> adheres to this philosophy. If you are interested in
-seeing a number of different ways to invoke B<pod2usage> (although by no
-means exhaustive), please refer to L<"EXAMPLES">.
-
-=head1 EXAMPLES
-
-Each of the following invocations of C<pod2usage()> will print just the
-"SYNOPSIS" section to C<STDERR> and will exit with a status of 2:
-
- pod2usage();
-
- pod2usage(2);
-
- pod2usage(-verbose => 0);
-
- pod2usage(-exitval => 2);
-
- pod2usage({-exitval => 2, -output => \*STDERR});
-
- pod2usage({-verbose => 0, -output => \*STDERR});
-
- pod2usage(-exitval => 2, -verbose => 0);
-
- pod2usage(-exitval => 2, -verbose => 0, -output => \*STDERR);
-
-Each of the following invocations of C<pod2usage()> will print a message
-of "Syntax error." (followed by a newline) to C<STDERR>, immediately
-followed by just the "SYNOPSIS" section (also printed to C<STDERR>) and
-will exit with a status of 2:
-
- pod2usage("Syntax error.");
-
- pod2usage(-message => "Syntax error.", -verbose => 0);
-
- pod2usage(-msg => "Syntax error.", -exitval => 2);
-
- pod2usage({-msg => "Syntax error.", -exitval => 2, -output => \*STDERR});
-
- pod2usage({-msg => "Syntax error.", -verbose => 0, -output => \*STDERR});
-
- pod2usage(-msg => "Syntax error.", -exitval => 2, -verbose => 0);
-
- pod2usage(-message => "Syntax error.",
- -exitval => 2,
- -verbose => 0,
- -output => \*STDERR);
-
-Each of the following invocations of C<pod2usage()> will print the
-"SYNOPSIS" section and any "OPTIONS" and/or "ARGUMENTS" sections to
-C<STDOUT> and will exit with a status of 1:
-
- pod2usage(1);
-
- pod2usage(-verbose => 1);
-
- pod2usage(-exitval => 1);
-
- pod2usage({-exitval => 1, -output => \*STDOUT});
-
- pod2usage({-verbose => 1, -output => \*STDOUT});
-
- pod2usage(-exitval => 1, -verbose => 1);
-
- pod2usage(-exitval => 1, -verbose => 1, -output => \*STDOUT});
-
-Each of the following invocations of C<pod2usage()> will print the
-entire manual page to C<STDOUT> and will exit with a status of 1:
-
- pod2usage(-verbose => 2);
-
- pod2usage({-verbose => 2, -output => \*STDOUT});
-
- pod2usage(-exitval => 1, -verbose => 2);
-
- pod2usage({-exitval => 1, -verbose => 2, -output => \*STDOUT});
-
-=head2 Recommended Use
-
-Most scripts should print some type of usage message to C<STDERR> when a
-command line syntax error is detected. They should also provide an
-option (usually C<-H> or C<-help>) to print a (possibly more verbose)
-usage message to C<STDOUT>. Some scripts may even wish to go so far as to
-provide a means of printing their complete documentation to C<STDOUT>
-(perhaps by allowing a C<-man> option). The following complete example
-uses B<Pod::Usage> in combination with B<Getopt::Long> to do all of these
-things:
-
- use Getopt::Long;
- use Pod::Usage;
-
- my $man = 0;
- my $help = 0;
- ## Parse options and print usage if there is a syntax error,
- ## or if usage was explicitly requested.
- GetOptions('help|?' => \$help, man => \$man) or pod2usage(2);
- pod2usage(1) if $help;
- pod2usage(-verbose => 2) if $man;
-
- ## If no arguments were given, then allow STDIN to be used only
- ## if it's not connected to a terminal (otherwise print usage)
- pod2usage("$0: No files given.") if ((@ARGV == 0) && (-t STDIN));
- __END__
-
- =head1 NAME
-
- sample - Using GetOpt::Long and Pod::Usage
-
- =head1 SYNOPSIS
-
- sample [options] [file ...]
-
- Options:
- -help brief help message
- -man full documentation
-
- =head1 OPTIONS
-
- =over 8
-
- =item B<-help>
-
- Print a brief help message and exits.
-
- =item B<-man>
-
- Prints the manual page and exits.
-
- =back
-
- =head1 DESCRIPTION
-
- B<This program> will read the given input file(s) and do something
- useful with the contents thereof.
-
- =cut
-
-=head1 CAVEATS
-
-By default, B<pod2usage()> will use C<$0> as the path to the pod input
-file. Unfortunately, not all systems on which Perl runs will set C<$0>
-properly (although if C<$0> isn't found, B<pod2usage()> will search
-C<$ENV{PATH}> or else the list specified by the C<-pathlist> option).
-If this is the case for your system, you may need to explicitly specify
-the path to the pod docs for the invoking script using something
-similar to the following:
-
- pod2usage(-exitval => 2, -input => "/path/to/your/pod/docs");
-
-In the pathological case that a script is called via a relative path
-I<and> the script itself changes the current working directory
-(see L<perlfunc/chdir>) I<before> calling pod2usage, Pod::Usage will
-fail even on robust platforms. Don't do that.
-
-=head1 AUTHOR
-
-Please report bugs using L<http://rt.cpan.org>.
-
-Marek Rouchal E<lt>marekr at cpan.orgE<gt>
-
-Brad Appleton E<lt>bradapp at enteract.comE<gt>
-
-Based on code for B<Pod::Text::pod2text()> written by
-Tom Christiansen E<lt>tchrist at mox.perl.comE<gt>
-
-=head1 ACKNOWLEDGMENTS
-
-Steven McDougall E<lt>swmcd at world.std.comE<gt> for his help and patience
-with re-writing this manpage.
-
-=head1 SEE ALSO
-
-L<Pod::Parser>, L<Getopt::Long>, L<Pod::Find>
-
-=cut
-
-#############################################################################
-
-#use diagnostics;
-use Carp;
-use Config;
-use Exporter;
-use File::Spec;
-
- at EXPORT = qw(&pod2usage);
-BEGIN {
- if ( $] >= 5.005_58 ) {
- require Pod::Text;
- @ISA = qw( Pod::Text );
- }
- else {
- require Pod::PlainText;
- @ISA = qw( Pod::PlainText );
- }
-}
-
-require Pod::Select;
-
-##---------------------------------------------------------------------------
-
-##---------------------------------
-## Function definitions begin here
-##---------------------------------
-
-sub pod2usage {
- local($_) = shift;
- my %opts;
- ## Collect arguments
- if (@_ > 0) {
- ## Too many arguments - assume that this is a hash and
- ## the user forgot to pass a reference to it.
- %opts = ($_, @_);
- }
- elsif (!defined $_) {
- $_ = '';
- }
- elsif (ref $_) {
- ## User passed a ref to a hash
- %opts = %{$_} if (ref($_) eq 'HASH');
- }
- elsif (/^[-+]?\d+$/) {
- ## User passed in the exit value to use
- $opts{'-exitval'} = $_;
- }
- else {
- ## User passed in a message to print before issuing usage.
- $_ and $opts{'-message'} = $_;
- }
-
- ## Need this for backward compatibility since we formerly used
- ## options that were all uppercase words rather than ones that
- ## looked like Unix command-line options.
- ## to be uppercase keywords)
- %opts = map {
- my ($key, $val) = ($_, $opts{$_});
- $key =~ s/^(?=\w)/-/;
- $key =~ /^-msg/i and $key = '-message';
- $key =~ /^-exit/i and $key = '-exitval';
- lc($key) => $val;
- } (keys %opts);
-
- ## Now determine default -exitval and -verbose values to use
- if ((! defined $opts{'-exitval'}) && (! defined $opts{'-verbose'})) {
- $opts{'-exitval'} = 2;
- $opts{'-verbose'} = 0;
- }
- elsif (! defined $opts{'-exitval'}) {
- $opts{'-exitval'} = ($opts{'-verbose'} > 0) ? 1 : 2;
- }
- elsif (! defined $opts{'-verbose'}) {
- $opts{'-verbose'} = (lc($opts{'-exitval'}) eq 'noexit' ||
- $opts{'-exitval'} < 2);
- }
-
- ## Default the output file
- $opts{'-output'} = (lc($opts{'-exitval'}) eq 'noexit' ||
- $opts{'-exitval'} < 2) ? \*STDOUT : \*STDERR
- unless (defined $opts{'-output'});
- ## Default the input file
- $opts{'-input'} = $0 unless (defined $opts{'-input'});
-
- ## Look up input file in path if it doesnt exist.
- unless ((ref $opts{'-input'}) || (-e $opts{'-input'})) {
- my $basename = $opts{'-input'};
- my $pathsep = ($^O =~ /^(?:dos|os2|MSWin32)$/i) ? ';'
- : (($^O eq 'MacOS' || $^O eq 'VMS') ? ',' : ':');
- my $pathspec = $opts{'-pathlist'} || $ENV{PATH} || $ENV{PERL5LIB};
-
- my @paths = (ref $pathspec) ? @$pathspec : split($pathsep, $pathspec);
- for my $dirname (@paths) {
- $_ = File::Spec->catfile($dirname, $basename) if length;
- last if (-e $_) && ($opts{'-input'} = $_);
- }
- }
-
- ## Now create a pod reader and constrain it to the desired sections.
- my $parser = new Pod::Usage(USAGE_OPTIONS => \%opts);
- if ($opts{'-verbose'} == 0) {
- $parser->select('(?:SYNOPSIS|USAGE)\s*');
- }
- elsif ($opts{'-verbose'} == 1) {
- my $opt_re = '(?i)' .
- '(?:OPTIONS|ARGUMENTS)' .
- '(?:\s*(?:AND|\/)\s*(?:OPTIONS|ARGUMENTS))?';
- $parser->select( '(?:SYNOPSIS|USAGE)\s*', $opt_re, "DESCRIPTION/$opt_re" );
- }
- elsif ($opts{'-verbose'} >= 2 && $opts{'-verbose'} != 99) {
- $parser->select('.*');
- }
- elsif ($opts{'-verbose'} == 99) {
- my $sections = $opts{'-sections'};
- $parser->select( (ref $sections) ? @$sections : $sections );
- $opts{'-verbose'} = 1;
- }
-
- ## Now translate the pod document and then exit with the desired status
- if ( !$opts{'-noperldoc'}
- and $opts{'-verbose'} >= 2
- and !ref($opts{'-input'})
- and $opts{'-output'} == \*STDOUT )
- {
- ## spit out the entire PODs. Might as well invoke perldoc
- my $progpath = File::Spec->catfile($Config{scriptdir}, 'perldoc');
- print { $opts{'-output'} } ($opts{'-message'}, "\n") if($opts{'-message'});
- if(defined $opts{-input} && $opts{-input} =~ /^\s*(\S.*?)\s*$/) {
- # the perldocs back to 5.005 should all have -F
- # without -F there are warnings in -T scripts
- system($progpath, '-F', $1);
- if($?) {
- # RT16091: fall back to more if perldoc failed
- system(($Config{pager} || $ENV{PAGER} || '/bin/more'), $1);
- }
- } else {
- croak "Unspecified input file or insecure argument.\n";
- }
- }
- else {
- $parser->parse_from_file($opts{'-input'}, $opts{'-output'});
- }
-
- exit($opts{'-exitval'}) unless (lc($opts{'-exitval'}) eq 'noexit');
-}
-
-##---------------------------------------------------------------------------
-
-##-------------------------------
-## Method definitions begin here
-##-------------------------------
-
-sub new {
- my $this = shift;
- my $class = ref($this) || $this;
- my %params = @_;
- my $self = {%params};
- bless $self, $class;
- if ($self->can('initialize')) {
- $self->initialize();
- } else {
- $self = $self->SUPER::new();
- %$self = (%$self, %params);
- }
- return $self;
-}
-
-sub select {
- my ($self, @sections) = @_;
- if ($ISA[0]->can('select')) {
- $self->SUPER::select(@sections);
- } else {
- # we're using Pod::Simple - need to mimic the behavior of Pod::Select
- my $add = ($sections[0] eq '+') ? shift(@sections) : '';
- ## Reset the set of sections to use
- unless (@sections) {
- delete $self->{USAGE_SELECT} unless ($add);
- return;
- }
- $self->{USAGE_SELECT} = []
- unless ($add && $self->{USAGE_SELECT});
- my $sref = $self->{USAGE_SELECT};
- ## Compile each spec
- for my $spec (@sections) {
- my $cs = Pod::Select::_compile_section_spec($spec);
- if ( defined $cs ) {
- ## Store them in our sections array
- push(@$sref, $cs);
- } else {
- carp qq{Ignoring section spec "$spec"!\n};
- }
- }
- }
-}
-
-# Override Pod::Text->seq_i to return just "arg", not "*arg*".
-sub seq_i { return $_[1] }
-
-# This overrides the Pod::Text method to do something very akin to what
-# Pod::Select did as well as the work done below by preprocess_paragraph.
-# Note that the below is very, very specific to Pod::Text.
-sub _handle_element_end {
- my ($self, $element) = @_;
- if ($element eq 'head1') {
- $self->{USAGE_HEADINGS} = [ $$self{PENDING}[-1][1] ];
- if ($self->{USAGE_OPTIONS}->{-verbose} < 2) {
- $$self{PENDING}[-1][1] =~ s/^\s*SYNOPSIS\s*$/USAGE/;
- }
- } elsif ($element =~ /^head(\d+)$/ && $1) { # avoid 0
- my $idx = $1 - 1;
- $self->{USAGE_HEADINGS} = [] unless($self->{USAGE_HEADINGS});
- $self->{USAGE_HEADINGS}->[$idx] = $$self{PENDING}[-1][1];
- }
- if ($element =~ /^head\d+$/) {
- $$self{USAGE_SKIPPING} = 1;
- if (!$$self{USAGE_SELECT} || !@{ $$self{USAGE_SELECT} }) {
- $$self{USAGE_SKIPPING} = 0;
- } else {
- my @headings = @{$$self{USAGE_HEADINGS}};
- for my $section_spec ( @{$$self{USAGE_SELECT}} ) {
- my $match = 1;
- for (my $i = 0; $i < $Pod::Select::MAX_HEADING_LEVEL; ++$i) {
- $headings[$i] = '' unless defined $headings[$i];
- my $regex = $section_spec->[$i];
- my $negated = ($regex =~ s/^\!//);
- $match &= ($negated ? ($headings[$i] !~ /${regex}/)
- : ($headings[$i] =~ /${regex}/));
- last unless ($match);
- } # end heading levels
- if ($match) {
- $$self{USAGE_SKIPPING} = 0;
- last;
- }
- } # end sections
- }
-
- # Try to do some lowercasing instead of all-caps in headings, and use
- # a colon to end all headings.
- if($self->{USAGE_OPTIONS}->{-verbose} < 2) {
- local $_ = $$self{PENDING}[-1][1];
- s{([A-Z])([A-Z]+)}{((length($2) > 2) ? $1 : lc($1)) . lc($2)}ge;
- s/\s*$/:/ unless (/:\s*$/);
- $_ .= "\n";
- $$self{PENDING}[-1][1] = $_;
- }
- }
- if ($$self{USAGE_SKIPPING} && $element !~ m/^over-/) {
- pop @{ $$self{PENDING} };
- } else {
- $self->SUPER::_handle_element_end($element);
- }
-}
-
-# required for Pod::Simple API
-sub start_document {
- my $self = shift;
- $self->SUPER::start_document();
- my $msg = $self->{USAGE_OPTIONS}->{-message} or return 1;
- my $out_fh = $self->output_fh();
- print $out_fh "$msg\n";
-}
-
-# required for old Pod::Parser API
-sub begin_pod {
- my $self = shift;
- $self->SUPER::begin_pod(); ## Have to call superclass
- my $msg = $self->{USAGE_OPTIONS}->{-message} or return 1;
- my $out_fh = $self->output_handle();
- print $out_fh "$msg\n";
-}
-
-sub preprocess_paragraph {
- my $self = shift;
- local $_ = shift;
- my $line = shift;
- ## See if this is a heading and we arent printing the entire manpage.
- if (($self->{USAGE_OPTIONS}->{-verbose} < 2) && /^=head/) {
- ## Change the title of the SYNOPSIS section to USAGE
- s/^=head1\s+SYNOPSIS\s*$/=head1 USAGE/;
- ## Try to do some lowercasing instead of all-caps in headings
- s{([A-Z])([A-Z]+)}{((length($2) > 2) ? $1 : lc($1)) . lc($2)}ge;
- ## Use a colon to end all headings
- s/\s*$/:/ unless (/:\s*$/);
- $_ .= "\n";
- }
- return $self->SUPER::preprocess_paragraph($_);
-}
-
-1; # keep require happy
Deleted: trunk/contrib/perl/cpan/Pod-Parser/scripts/pod2usage.PL
===================================================================
--- trunk/contrib/perl/cpan/Pod-Parser/scripts/pod2usage.PL 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/Pod-Parser/scripts/pod2usage.PL 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,180 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir(dirname($0));
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{'startperl'}
- eval 'exec perl -S \$0 "\$@"'
- if 0;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-#############################################################################
-# pod2usage -- command to print usage messages from embedded pod docs
-#
-# Copyright (c) 1996-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-use strict;
-#use diagnostics;
-
-=head1 NAME
-
-pod2usage - print usage messages from embedded pod docs in files
-
-=head1 SYNOPSIS
-
-=over 12
-
-=item B<pod2usage>
-
-[B<-help>]
-[B<-man>]
-[B<-exit>S< >I<exitval>]
-[B<-output>S< >I<outfile>]
-[B<-verbose> I<level>]
-[B<-pathlist> I<dirlist>]
-I<file>
-
-=back
-
-=head1 OPTIONS AND ARGUMENTS
-
-=over 8
-
-=item B<-help>
-
-Print a brief help message and exit.
-
-=item B<-man>
-
-Print this command's manual page and exit.
-
-=item B<-exit> I<exitval>
-
-The exit status value to return.
-
-=item B<-output> I<outfile>
-
-The output file to print to. If the special names "-" or ">&1" or ">&STDOUT"
-are used then standard output is used. If ">&2" or ">&STDERR" is used then
-standard error is used.
-
-=item B<-verbose> I<level>
-
-The desired level of verbosity to use:
-
- 1 : print SYNOPSIS only
- 2 : print SYNOPSIS sections and any OPTIONS/ARGUMENTS sections
- 3 : print the entire manpage (similar to running pod2text)
-
-=item B<-pathlist> I<dirlist>
-
-Specifies one or more directories to search for the input file if it
-was not supplied with an absolute path. Each directory path in the given
-list should be separated by a ':' on Unix (';' on MSWin32 and DOS).
-
-=item I<file>
-
-The pathname of a file containing pod documentation to be output in
-usage message format (defaults to standard input).
-
-=back
-
-=head1 DESCRIPTION
-
-B<pod2usage> will read the given input file looking for pod
-documentation and will print the corresponding usage message.
-If no input file is specified then standard input is read.
-
-B<pod2usage> invokes the B<pod2usage()> function in the B<Pod::Usage>
-module. Please see L<Pod::Usage/pod2usage()>.
-
-=head1 SEE ALSO
-
-L<Pod::Usage>, L<pod2text(1)>
-
-=head1 AUTHOR
-
-Please report bugs using L<http://rt.cpan.org>.
-
-Brad Appleton E<lt>bradapp at enteract.comE<gt>
-
-Based on code for B<pod2text(1)> written by
-Tom Christiansen E<lt>tchrist at mox.perl.comE<gt>
-
-=cut
-
-use Pod::Usage;
-use Getopt::Long;
-
-## Define options
-my %options = ();
-my @opt_specs = (
- 'help',
- 'man',
- 'exit=i',
- 'output=s',
- 'pathlist=s',
- 'verbose=i',
-);
-
-## Parse options
-GetOptions(\%options, @opt_specs) || pod2usage(2);
-pod2usage(1) if ($options{help});
-pod2usage(VERBOSE => 2) if ($options{man});
-
-## Dont default to STDIN if connected to a terminal
-pod2usage(2) if ((@ARGV == 0) && (-t STDIN));
-
- at ARGV = ('-') unless (@ARGV);
-if (@ARGV > 1) {
- print STDERR "pod2usage: Too many filenames given\n\n";
- pod2usage(2);
-}
-
-my %usage = ();
-$usage{-input} = shift(@ARGV);
-$usage{-exitval} = $options{'exit'} if (defined $options{'exit'});
-$usage{-output} = $options{'output'} if (defined $options{'output'});
-$usage{-verbose} = $options{'verbose'} if (defined $options{'verbose'});
-$usage{-pathlist} = $options{'pathlist'} if (defined $options{'pathlist'});
-
-pod2usage(\%usage);
-
-
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
Deleted: trunk/contrib/perl/cpan/Pod-Parser/scripts/podchecker.PL
===================================================================
--- trunk/contrib/perl/cpan/Pod-Parser/scripts/podchecker.PL 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/cpan/Pod-Parser/scripts/podchecker.PL 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,186 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
- if ($^O eq 'VMS' or $^O eq 'os2' or $^O eq 'dos'); # "case-forgiving"
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{'startperl'}
- eval 'exec perl -S \$0 "\$@"'
- if 0;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-#############################################################################
-# podchecker -- command to invoke the podchecker function in Pod::Checker
-#
-# Copyright (c) 1998-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-use strict;
-#use diagnostics;
-
-=head1 NAME
-
-podchecker - check the syntax of POD format documentation files
-
-=head1 SYNOPSIS
-
-B<podchecker> [B<-help>] [B<-man>] [B<-(no)warnings>] [I<file>S< >...]
-
-=head1 OPTIONS AND ARGUMENTS
-
-=over 8
-
-=item B<-help>
-
-Print a brief help message and exit.
-
-=item B<-man>
-
-Print the manual page and exit.
-
-=item B<-warnings> B<-nowarnings>
-
-Turn on/off printing of warnings. Repeating B<-warnings> increases the
-warning level, i.e. more warnings are printed. Currently increasing to
-level two causes flagging of unescaped "E<lt>,E<gt>" characters.
-
-=item I<file>
-
-The pathname of a POD file to syntax-check (defaults to standard input).
-
-=back
-
-=head1 DESCRIPTION
-
-B<podchecker> will read the given input files looking for POD
-syntax errors in the POD documentation and will print any errors
-it find to STDERR. At the end, it will print a status message
-indicating the number of errors found.
-
-Directories are ignored, an appropriate warning message is printed.
-
-B<podchecker> invokes the B<podchecker()> function exported by B<Pod::Checker>
-Please see L<Pod::Checker/podchecker()> for more details.
-
-=head1 RETURN VALUE
-
-B<podchecker> returns a 0 (zero) exit status if all specified
-POD files are ok.
-
-=head1 ERRORS
-
-B<podchecker> returns the exit status 1 if at least one of
-the given POD files has syntax errors.
-
-The status 2 indicates that at least one of the specified
-files does not contain I<any> POD commands.
-
-Status 1 overrides status 2. If you want unambiguous
-results, call B<podchecker> with one single argument only.
-
-=head1 SEE ALSO
-
-L<Pod::Parser> and L<Pod::Checker>
-
-=head1 AUTHORS
-
-Please report bugs using L<http://rt.cpan.org>.
-
-Brad Appleton E<lt>bradapp at enteract.comE<gt>,
-Marek Rouchal E<lt>marekr at cpan.orgE<gt>
-
-Based on code for B<Pod::Text::pod2text(1)> written by
-Tom Christiansen E<lt>tchrist at mox.perl.comE<gt>
-
-=cut
-
-
-use Pod::Checker;
-use Pod::Usage;
-use Getopt::Long;
-
-## Define options
-my %options;
-
-## Parse options
-GetOptions(\%options, qw(help man warnings+ nowarnings)) || pod2usage(2);
-pod2usage(1) if ($options{help});
-pod2usage(-verbose => 2) if ($options{man});
-
-if($options{nowarnings}) {
- $options{warnings} = 0;
-}
-elsif(!defined $options{warnings}) {
- $options{warnings} = 1; # default is warnings on
-}
-
-## Dont default to STDIN if connected to a terminal
-pod2usage(2) if ((@ARGV == 0) && (-t STDIN));
-
-## Invoke podchecker()
-my $status = 0;
- at ARGV = qw(-) unless(@ARGV);
-for my $podfile (@ARGV) {
- if($podfile eq '-') {
- $podfile = '<&STDIN';
- }
- elsif(-d $podfile) {
- warn "podchecker: Warning: Ignoring directory '$podfile'\n";
- next;
- }
- my $errors =
- podchecker($podfile, undef, '-warnings' => $options{warnings});
- if($errors > 0) {
- # errors occurred
- $status = 1;
- printf STDERR ("%s has %d pod syntax %s.\n",
- $podfile, $errors,
- ($errors == 1) ? 'error' : 'errors');
- }
- elsif($errors < 0) {
- # no pod found
- $status = 2 unless($status);
- print STDERR "$podfile does not contain any pod commands.\n";
- }
- else {
- print STDERR "$podfile pod syntax OK.\n";
- }
-}
-exit $status;
-
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
Deleted: trunk/contrib/perl/lib/Test.pm
===================================================================
--- trunk/contrib/perl/lib/Test.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/Test.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,954 +0,0 @@
-
-require 5.004;
-package Test;
-
-use strict;
-
-use Carp;
-use vars (qw($VERSION @ISA @EXPORT @EXPORT_OK $ntest $TestLevel), #public-ish
- qw($TESTOUT $TESTERR %Program_Lines $told_about_diff
- $ONFAIL %todo %history $planned @FAILDETAIL) #private-ish
- );
-
-# In case a test is run in a persistent environment.
-sub _reset_globals {
- %todo = ();
- %history = ();
- @FAILDETAIL = ();
- $ntest = 1;
- $TestLevel = 0; # how many extra stack frames to skip
- $planned = 0;
-}
-
-$VERSION = '1.25_02';
-require Exporter;
- at ISA=('Exporter');
-
- at EXPORT = qw(&plan &ok &skip);
- at EXPORT_OK = qw($ntest $TESTOUT $TESTERR);
-
-$|=1;
-$TESTOUT = *STDOUT{IO};
-$TESTERR = *STDERR{IO};
-
-# Use of this variable is strongly discouraged. It is set mainly to
-# help test coverage analyzers know which test is running.
-$ENV{REGRESSION_TEST} = $0;
-
-
-=head1 NAME
-
-Test - provides a simple framework for writing test scripts
-
-=head1 SYNOPSIS
-
- use strict;
- use Test;
-
- # use a BEGIN block so we print our plan before MyModule is loaded
- BEGIN { plan tests => 14, todo => [3,4] }
-
- # load your module...
- use MyModule;
-
- # Helpful notes. All note-lines must start with a "#".
- print "# I'm testing MyModule version $MyModule::VERSION\n";
-
- ok(0); # failure
- ok(1); # success
-
- ok(0); # ok, expected failure (see todo list, above)
- ok(1); # surprise success!
-
- ok(0,1); # failure: '0' ne '1'
- ok('broke','fixed'); # failure: 'broke' ne 'fixed'
- ok('fixed','fixed'); # success: 'fixed' eq 'fixed'
- ok('fixed',qr/x/); # success: 'fixed' =~ qr/x/
-
- ok(sub { 1+1 }, 2); # success: '2' eq '2'
- ok(sub { 1+1 }, 3); # failure: '2' ne '3'
-
- my @list = (0,0);
- ok @list, 3, "\@list=".join(',', at list); #extra notes
- ok 'segmentation fault', '/(?i)success/'; #regex match
-
- skip(
- $^O =~ m/MSWin/ ? "Skip if MSWin" : 0, # whether to skip
- $foo, $bar # arguments just like for ok(...)
- );
- skip(
- $^O =~ m/MSWin/ ? 0 : "Skip unless MSWin", # whether to skip
- $foo, $bar # arguments just like for ok(...)
- );
-
-=head1 DESCRIPTION
-
-This module simplifies the task of writing test files for Perl modules,
-such that their output is in the format that
-L<Test::Harness|Test::Harness> expects to see.
-
-=head1 QUICK START GUIDE
-
-To write a test for your new (and probably not even done) module, create
-a new file called F<t/test.t> (in a new F<t> directory). If you have
-multiple test files, to test the "foo", "bar", and "baz" feature sets,
-then feel free to call your files F<t/foo.t>, F<t/bar.t>, and
-F<t/baz.t>
-
-=head2 Functions
-
-This module defines three public functions, C<plan(...)>, C<ok(...)>,
-and C<skip(...)>. By default, all three are exported by
-the C<use Test;> statement.
-
-=over 4
-
-=item C<plan(...)>
-
- BEGIN { plan %theplan; }
-
-This should be the first thing you call in your test script. It
-declares your testing plan, how many there will be, if any of them
-should be allowed to fail, and so on.
-
-Typical usage is just:
-
- use Test;
- BEGIN { plan tests => 23 }
-
-These are the things that you can put in the parameters to plan:
-
-=over
-
-=item C<tests =E<gt> I<number>>
-
-The number of tests in your script.
-This means all ok() and skip() calls.
-
-=item C<todo =E<gt> [I<1,5,14>]>
-
-A reference to a list of tests which are allowed to fail.
-See L</TODO TESTS>.
-
-=item C<onfail =E<gt> sub { ... }>
-
-=item C<onfail =E<gt> \&some_sub>
-
-A subroutine reference to be run at the end of the test script, if
-any of the tests fail. See L</ONFAIL>.
-
-=back
-
-You must call C<plan(...)> once and only once. You should call it
-in a C<BEGIN {...}> block, like so:
-
- BEGIN { plan tests => 23 }
-
-=cut
-
-sub plan {
- croak "Test::plan(%args): odd number of arguments" if @_ & 1;
- croak "Test::plan(): should not be called more than once" if $planned;
-
- local($\, $,); # guard against -l and other things that screw with
- # print
-
- _reset_globals();
-
- _read_program( (caller)[1] );
-
- my $max=0;
- while (@_) {
- my ($k,$v) = splice(@_, 0, 2);
- if ($k =~ /^test(s)?$/) { $max = $v; }
- elsif ($k eq 'todo' or
- $k eq 'failok') { for (@$v) { $todo{$_}=1; }; }
- elsif ($k eq 'onfail') {
- ref $v eq 'CODE' or croak "Test::plan(onfail => $v): must be CODE";
- $ONFAIL = $v;
- }
- else { carp "Test::plan(): skipping unrecognized directive '$k'" }
- }
- my @todo = sort { $a <=> $b } keys %todo;
- if (@todo) {
- print $TESTOUT "1..$max todo ".join(' ', @todo).";\n";
- } else {
- print $TESTOUT "1..$max\n";
- }
- ++$planned;
- print $TESTOUT "# Running under perl version $] for $^O",
- (chr(65) eq 'A') ? "\n" : " in a non-ASCII world\n";
-
- print $TESTOUT "# Win32::BuildNumber ", &Win32::BuildNumber(), "\n"
- if defined(&Win32::BuildNumber) and defined &Win32::BuildNumber();
-
- print $TESTOUT "# MacPerl version $MacPerl::Version\n"
- if defined $MacPerl::Version;
-
- printf $TESTOUT
- "# Current time local: %s\n# Current time GMT: %s\n",
- scalar(localtime($^T)), scalar(gmtime($^T));
-
- print $TESTOUT "# Using Test.pm version $VERSION\n";
-
- # Retval never used:
- return undef;
-}
-
-sub _read_program {
- my($file) = shift;
- return unless defined $file and length $file
- and -e $file and -f _ and -r _;
- open(SOURCEFILE, "<$file") || return;
- $Program_Lines{$file} = [<SOURCEFILE>];
- close(SOURCEFILE);
-
- foreach my $x (@{$Program_Lines{$file}})
- { $x =~ tr/\cm\cj\n\r//d }
-
- unshift @{$Program_Lines{$file}}, '';
- return 1;
-}
-
-=begin _private
-
-=item B<_to_value>
-
- my $value = _to_value($input);
-
-Converts an C<ok> parameter to its value. Typically this just means
-running it, if it's a code reference. You should run all inputted
-values through this.
-
-=cut
-
-sub _to_value {
- my ($v) = @_;
- return ref $v eq 'CODE' ? $v->() : $v;
-}
-
-sub _quote {
- my $str = $_[0];
- return "<UNDEF>" unless defined $str;
- $str =~ s/\\/\\\\/g;
- $str =~ s/"/\\"/g;
- $str =~ s/\a/\\a/g;
- $str =~ s/[\b]/\\b/g;
- $str =~ s/\e/\\e/g;
- $str =~ s/\f/\\f/g;
- $str =~ s/\n/\\n/g;
- $str =~ s/\r/\\r/g;
- $str =~ s/\t/\\t/g;
- $str =~ s/([\0-\037])(?!\d)/sprintf('\\%o',ord($1))/eg;
- $str =~ s/([\0-\037\177-\377])/sprintf('\\x%02X',ord($1))/eg;
- $str =~ s/([^\0-\176])/sprintf('\\x{%X}',ord($1))/eg;
- #if( $_[1] ) {
- # substr( $str , 218-3 ) = "..."
- # if length($str) >= 218 and !$ENV{PERL_TEST_NO_TRUNC};
- #}
- return qq("$str");
-}
-
-
-=end _private
-
-=item C<ok(...)>
-
- ok(1 + 1 == 2);
- ok($have, $expect);
- ok($have, $expect, $diagnostics);
-
-This function is the reason for C<Test>'s existence. It's
-the basic function that
-handles printing "C<ok>" or "C<not ok>", along with the
-current test number. (That's what C<Test::Harness> wants to see.)
-
-In its most basic usage, C<ok(...)> simply takes a single scalar
-expression. If its value is true, the test passes; if false,
-the test fails. Examples:
-
- # Examples of ok(scalar)
-
- ok( 1 + 1 == 2 ); # ok if 1 + 1 == 2
- ok( $foo =~ /bar/ ); # ok if $foo contains 'bar'
- ok( baz($x + $y) eq 'Armondo' ); # ok if baz($x + $y) returns
- # 'Armondo'
- ok( @a == @b ); # ok if @a and @b are the same length
-
-The expression is evaluated in scalar context. So the following will
-work:
-
- ok( @stuff ); # ok if @stuff has any elements
- ok( !grep !defined $_, @stuff ); # ok if everything in @stuff is
- # defined.
-
-A special case is if the expression is a subroutine reference (in either
-C<sub {...}> syntax or C<\&foo> syntax). In
-that case, it is executed and its value (true or false) determines if
-the test passes or fails. For example,
-
- ok( sub { # See whether sleep works at least passably
- my $start_time = time;
- sleep 5;
- time() - $start_time >= 4
- });
-
-In its two-argument form, C<ok(I<arg1>, I<arg2>)> compares the two
-scalar values to see if they match. They match if both are undefined,
-or if I<arg2> is a regex that matches I<arg1>, or if they compare equal
-with C<eq>.
-
- # Example of ok(scalar, scalar)
-
- ok( "this", "that" ); # not ok, 'this' ne 'that'
- ok( "", undef ); # not ok, "" is defined
-
-The second argument is considered a regex if it is either a regex
-object or a string that looks like a regex. Regex objects are
-constructed with the qr// operator in recent versions of perl. A
-string is considered to look like a regex if its first and last
-characters are "/", or if the first character is "m"
-and its second and last characters are both the
-same non-alphanumeric non-whitespace character. These regexp
-
-Regex examples:
-
- ok( 'JaffO', '/Jaff/' ); # ok, 'JaffO' =~ /Jaff/
- ok( 'JaffO', 'm|Jaff|' ); # ok, 'JaffO' =~ m|Jaff|
- ok( 'JaffO', qr/Jaff/ ); # ok, 'JaffO' =~ qr/Jaff/;
- ok( 'JaffO', '/(?i)jaff/ ); # ok, 'JaffO' =~ /jaff/i;
-
-If either (or both!) is a subroutine reference, it is run and used
-as the value for comparing. For example:
-
- ok sub {
- open(OUT, ">x.dat") || die $!;
- print OUT "\x{e000}";
- close OUT;
- my $bytecount = -s 'x.dat';
- unlink 'x.dat' or warn "Can't unlink : $!";
- return $bytecount;
- },
- 4
- ;
-
-The above test passes two values to C<ok(arg1, arg2)> -- the first
-a coderef, and the second is the number 4. Before C<ok> compares them,
-it calls the coderef, and uses its return value as the real value of
-this parameter. Assuming that C<$bytecount> returns 4, C<ok> ends up
-testing C<4 eq 4>. Since that's true, this test passes.
-
-Finally, you can append an optional third argument, in
-C<ok(I<arg1>,I<arg2>, I<note>)>, where I<note> is a string value that
-will be printed if the test fails. This should be some useful
-information about the test, pertaining to why it failed, and/or
-a description of the test. For example:
-
- ok( grep($_ eq 'something unique', @stuff), 1,
- "Something that should be unique isn't!\n".
- '@stuff = '.join ', ', @stuff
- );
-
-Unfortunately, a note cannot be used with the single argument
-style of C<ok()>. That is, if you try C<ok(I<arg1>, I<note>)>, then
-C<Test> will interpret this as C<ok(I<arg1>, I<arg2>)>, and probably
-end up testing C<I<arg1> eq I<arg2>> -- and that's not what you want!
-
-All of the above special cases can occasionally cause some
-problems. See L</BUGS and CAVEATS>.
-
-=cut
-
-# A past maintainer of this module said:
-# <<ok(...)'s special handling of subroutine references is an unfortunate
-# "feature" that can't be removed due to compatibility.>>
-#
-
-sub ok ($;$$) {
- croak "ok: plan before you test!" if !$planned;
-
- local($\,$,); # guard against -l and other things that screw with
- # print
-
- my ($pkg,$file,$line) = caller($TestLevel);
- my $repetition = ++$history{"$file:$line"};
- my $context = ("$file at line $line".
- ($repetition > 1 ? " fail \#$repetition" : ''));
-
- # Are we comparing two values?
- my $compare = 0;
-
- my $ok=0;
- my $result = _to_value(shift);
- my ($expected, $isregex, $regex);
- if (@_ == 0) {
- $ok = $result;
- } else {
- $compare = 1;
- $expected = _to_value(shift);
- if (!defined $expected) {
- $ok = !defined $result;
- } elsif (!defined $result) {
- $ok = 0;
- } elsif (ref($expected) eq 'Regexp') {
- $ok = $result =~ /$expected/;
- $regex = $expected;
- } elsif (($regex) = ($expected =~ m,^ / (.+) / $,sx) or
- (undef, $regex) = ($expected =~ m,^ m([^\w\s]) (.+) \1 $,sx)) {
- $ok = $result =~ /$regex/;
- } else {
- $ok = $result eq $expected;
- }
- }
- my $todo = $todo{$ntest};
- if ($todo and $ok) {
- $context .= ' TODO?!' if $todo;
- print $TESTOUT "ok $ntest # ($context)\n";
- } else {
- # Issuing two seperate prints() causes problems on VMS.
- if (!$ok) {
- print $TESTOUT "not ok $ntest\n";
- }
- else {
- print $TESTOUT "ok $ntest\n";
- }
-
- $ok or _complain($result, $expected,
- {
- 'repetition' => $repetition, 'package' => $pkg,
- 'result' => $result, 'todo' => $todo,
- 'file' => $file, 'line' => $line,
- 'context' => $context, 'compare' => $compare,
- @_ ? ('diagnostic' => _to_value(shift)) : (),
- });
-
- }
- ++ $ntest;
- $ok;
-}
-
-
-sub _complain {
- my($result, $expected, $detail) = @_;
- $$detail{expected} = $expected if defined $expected;
-
- # Get the user's diagnostic, protecting against multi-line
- # diagnostics.
- my $diag = $$detail{diagnostic};
- $diag =~ s/\n/\n#/g if defined $diag;
-
- $$detail{context} .= ' *TODO*' if $$detail{todo};
- if (!$$detail{compare}) {
- if (!$diag) {
- print $TESTERR "# Failed test $ntest in $$detail{context}\n";
- } else {
- print $TESTERR "# Failed test $ntest in $$detail{context}: $diag\n";
- }
- } else {
- my $prefix = "Test $ntest";
-
- print $TESTERR "# $prefix got: " . _quote($result) .
- " ($$detail{context})\n";
- $prefix = ' ' x (length($prefix) - 5);
- my $expected_quoted = (defined $$detail{regex})
- ? 'qr{'.($$detail{regex}).'}' : _quote($expected);
-
- print $TESTERR "# $prefix Expected: $expected_quoted",
- $diag ? " ($diag)" : (), "\n";
-
- _diff_complain( $result, $expected, $detail, $prefix )
- if defined($expected) and 2 < ($expected =~ tr/\n//);
- }
-
- if(defined $Program_Lines{ $$detail{file} }[ $$detail{line} ]) {
- print $TESTERR
- "# $$detail{file} line $$detail{line} is: $Program_Lines{ $$detail{file} }[ $$detail{line} ]\n"
- if $Program_Lines{ $$detail{file} }[ $$detail{line} ]
- =~ m/[^\s\#\(\)\{\}\[\]\;]/; # Otherwise it's uninformative
-
- undef $Program_Lines{ $$detail{file} }[ $$detail{line} ];
- # So we won't repeat it.
- }
-
- push @FAILDETAIL, $detail;
- return;
-}
-
-
-
-sub _diff_complain {
- my($result, $expected, $detail, $prefix) = @_;
- return _diff_complain_external(@_) if $ENV{PERL_TEST_DIFF};
- return _diff_complain_algdiff(@_)
- if eval { require Algorithm::Diff; Algorithm::Diff->VERSION(1.15); 1; };
-
- $told_about_diff++ or print $TESTERR <<"EOT";
-# $prefix (Install the Algorithm::Diff module to have differences in multiline
-# $prefix output explained. You might also set the PERL_TEST_DIFF environment
-# $prefix variable to run a diff program on the output.)
-EOT
- ;
- return;
-}
-
-
-
-sub _diff_complain_external {
- my($result, $expected, $detail, $prefix) = @_;
- my $diff = $ENV{PERL_TEST_DIFF} || die "WHAAAA?";
-
- require File::Temp;
- my($got_fh, $got_filename) = File::Temp::tempfile("test-got-XXXXX");
- my($exp_fh, $exp_filename) = File::Temp::tempfile("test-exp-XXXXX");
- unless ($got_fh && $exp_fh) {
- warn "Can't get tempfiles";
- return;
- }
-
- print $got_fh $result;
- print $exp_fh $expected;
- if (close($got_fh) && close($exp_fh)) {
- my $diff_cmd = "$diff $exp_filename $got_filename";
- print $TESTERR "#\n# $prefix $diff_cmd\n";
- if (open(DIFF, "$diff_cmd |")) {
- local $_;
- while (<DIFF>) {
- print $TESTERR "# $prefix $_";
- }
- close(DIFF);
- }
- else {
- warn "Can't run diff: $!";
- }
- } else {
- warn "Can't write to tempfiles: $!";
- }
- unlink($got_filename);
- unlink($exp_filename);
- return;
-}
-
-
-
-sub _diff_complain_algdiff {
- my($result, $expected, $detail, $prefix) = @_;
-
- my @got = split(/^/, $result);
- my @exp = split(/^/, $expected);
-
- my $diff_kind;
- my @diff_lines;
-
- my $diff_flush = sub {
- return unless $diff_kind;
-
- my $count_lines = @diff_lines;
- my $s = $count_lines == 1 ? "" : "s";
- my $first_line = $diff_lines[0][0] + 1;
-
- print $TESTERR "# $prefix ";
- if ($diff_kind eq "GOT") {
- print $TESTERR "Got $count_lines extra line$s at line $first_line:\n";
- for my $i (@diff_lines) {
- print $TESTERR "# $prefix + " . _quote($got[$i->[0]]) . "\n";
- }
- } elsif ($diff_kind eq "EXP") {
- if ($count_lines > 1) {
- my $last_line = $diff_lines[-1][0] + 1;
- print $TESTERR "Lines $first_line-$last_line are";
- }
- else {
- print $TESTERR "Line $first_line is";
- }
- print $TESTERR " missing:\n";
- for my $i (@diff_lines) {
- print $TESTERR "# $prefix - " . _quote($exp[$i->[1]]) . "\n";
- }
- } elsif ($diff_kind eq "CH") {
- if ($count_lines > 1) {
- my $last_line = $diff_lines[-1][0] + 1;
- print $TESTERR "Lines $first_line-$last_line are";
- }
- else {
- print $TESTERR "Line $first_line is";
- }
- print $TESTERR " changed:\n";
- for my $i (@diff_lines) {
- print $TESTERR "# $prefix - " . _quote($exp[$i->[1]]) . "\n";
- print $TESTERR "# $prefix + " . _quote($got[$i->[0]]) . "\n";
- }
- }
-
- # reset
- $diff_kind = undef;
- @diff_lines = ();
- };
-
- my $diff_collect = sub {
- my $kind = shift;
- &$diff_flush() if $diff_kind && $diff_kind ne $kind;
- $diff_kind = $kind;
- push(@diff_lines, [@_]);
- };
-
-
- Algorithm::Diff::traverse_balanced(
- \@got, \@exp,
- {
- DISCARD_A => sub { &$diff_collect("GOT", @_) },
- DISCARD_B => sub { &$diff_collect("EXP", @_) },
- CHANGE => sub { &$diff_collect("CH", @_) },
- MATCH => sub { &$diff_flush() },
- },
- );
- &$diff_flush();
-
- return;
-}
-
-
-
-
-#~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~
-
-
-=item C<skip(I<skip_if_true>, I<args...>)>
-
-This is used for tests that under some conditions can be skipped. It's
-basically equivalent to:
-
- if( $skip_if_true ) {
- ok(1);
- } else {
- ok( args... );
- }
-
-...except that the C<ok(1)> emits not just "C<ok I<testnum>>" but
-actually "C<ok I<testnum> # I<skip_if_true_value>>".
-
-The arguments after the I<skip_if_true> are what is fed to C<ok(...)> if
-this test isn't skipped.
-
-Example usage:
-
- my $if_MSWin =
- $^O =~ m/MSWin/ ? 'Skip if under MSWin' : '';
-
- # A test to be skipped if under MSWin (i.e., run except under MSWin)
- skip($if_MSWin, thing($foo), thing($bar) );
-
-Or, going the other way:
-
- my $unless_MSWin =
- $^O =~ m/MSWin/ ? '' : 'Skip unless under MSWin';
-
- # A test to be skipped unless under MSWin (i.e., run only under MSWin)
- skip($unless_MSWin, thing($foo), thing($bar) );
-
-The tricky thing to remember is that the first parameter is true if
-you want to I<skip> the test, not I<run> it; and it also doubles as a
-note about why it's being skipped. So in the first codeblock above, read
-the code as "skip if MSWin -- (otherwise) test whether C<thing($foo)> is
-C<thing($bar)>" or for the second case, "skip unless MSWin...".
-
-Also, when your I<skip_if_reason> string is true, it really should (for
-backwards compatibility with older Test.pm versions) start with the
-string "Skip", as shown in the above examples.
-
-Note that in the above cases, C<thing($foo)> and C<thing($bar)>
-I<are> evaluated -- but as long as the C<skip_if_true> is true,
-then we C<skip(...)> just tosses out their value (i.e., not
-bothering to treat them like values to C<ok(...)>. But if
-you need to I<not> eval the arguments when skipping the
-test, use
-this format:
-
- skip( $unless_MSWin,
- sub {
- # This code returns true if the test passes.
- # (But it doesn't even get called if the test is skipped.)
- thing($foo) eq thing($bar)
- }
- );
-
-or even this, which is basically equivalent:
-
- skip( $unless_MSWin,
- sub { thing($foo) }, sub { thing($bar) }
- );
-
-That is, both are like this:
-
- if( $unless_MSWin ) {
- ok(1); # but it actually appends "# $unless_MSWin"
- # so that Test::Harness can tell it's a skip
- } else {
- # Not skipping, so actually call and evaluate...
- ok( sub { thing($foo) }, sub { thing($bar) } );
- }
-
-=cut
-
-sub skip ($;$$$) {
- local($\, $,); # guard against -l and other things that screw with
- # print
-
- my $whyskip = _to_value(shift);
- if (!@_ or $whyskip) {
- $whyskip = '' if $whyskip =~ m/^\d+$/;
- $whyskip =~ s/^[Ss]kip(?:\s+|$)//; # backwards compatibility, old
- # versions required the reason
- # to start with 'skip'
- # We print in one shot for VMSy reasons.
- my $ok = "ok $ntest # skip";
- $ok .= " $whyskip" if length $whyskip;
- $ok .= "\n";
- print $TESTOUT $ok;
- ++ $ntest;
- return 1;
- } else {
- # backwards compatibility (I think). skip() used to be
- # called like ok(), which is weird. I haven't decided what to do with
- # this yet.
-# warn <<WARN if $^W;
-#This looks like a skip() using the very old interface. Please upgrade to
-#the documented interface as this has been deprecated.
-#WARN
-
- local($TestLevel) = $TestLevel+1; #to ignore this stack frame
- return &ok(@_);
- }
-}
-
-=back
-
-=cut
-
-END {
- $ONFAIL->(\@FAILDETAIL) if @FAILDETAIL && $ONFAIL;
-}
-
-1;
-__END__
-
-=head1 TEST TYPES
-
-=over 4
-
-=item * NORMAL TESTS
-
-These tests are expected to succeed. Usually, most or all of your tests
-are in this category. If a normal test doesn't succeed, then that
-means that something is I<wrong>.
-
-=item * SKIPPED TESTS
-
-The C<skip(...)> function is for tests that might or might not be
-possible to run, depending
-on the availability of platform-specific features. The first argument
-should evaluate to true (think "yes, please skip") if the required
-feature is I<not> available. After the first argument, C<skip(...)> works
-exactly the same way as C<ok(...)> does.
-
-=item * TODO TESTS
-
-TODO tests are designed for maintaining an B<executable TODO list>.
-These tests are I<expected to fail.> If a TODO test does succeed,
-then the feature in question shouldn't be on the TODO list, now
-should it?
-
-Packages should NOT be released with succeeding TODO tests. As soon
-as a TODO test starts working, it should be promoted to a normal test,
-and the newly working feature should be documented in the release
-notes or in the change log.
-
-=back
-
-=head1 ONFAIL
-
- BEGIN { plan test => 4, onfail => sub { warn "CALL 911!" } }
-
-Although test failures should be enough, extra diagnostics can be
-triggered at the end of a test run. C<onfail> is passed an array ref
-of hash refs that describe each test failure. Each hash will contain
-at least the following fields: C<package>, C<repetition>, and
-C<result>. (You shouldn't rely on any other fields being present.) If the test
-had an expected value or a diagnostic (or "note") string, these will also be
-included.
-
-The I<optional> C<onfail> hook might be used simply to print out the
-version of your package and/or how to report problems. It might also
-be used to generate extremely sophisticated diagnostics for a
-particularly bizarre test failure. However it's not a panacea. Core
-dumps or other unrecoverable errors prevent the C<onfail> hook from
-running. (It is run inside an C<END> block.) Besides, C<onfail> is
-probably over-kill in most cases. (Your test code should be simpler
-than the code it is testing, yes?)
-
-
-=head1 BUGS and CAVEATS
-
-=over
-
-=item *
-
-C<ok(...)>'s special handing of strings which look like they might be
-regexes can also cause unexpected behavior. An innocent:
-
- ok( $fileglob, '/path/to/some/*stuff/' );
-
-will fail, since Test.pm considers the second argument to be a regex!
-The best bet is to use the one-argument form:
-
- ok( $fileglob eq '/path/to/some/*stuff/' );
-
-=item *
-
-C<ok(...)>'s use of string C<eq> can sometimes cause odd problems
-when comparing
-numbers, especially if you're casting a string to a number:
-
- $foo = "1.0";
- ok( $foo, 1 ); # not ok, "1.0" ne 1
-
-Your best bet is to use the single argument form:
-
- ok( $foo == 1 ); # ok "1.0" == 1
-
-=item *
-
-As you may have inferred from the above documentation and examples,
-C<ok>'s prototype is C<($;$$)> (and, incidentally, C<skip>'s is
-C<($;$$$)>). This means, for example, that you can do C<ok @foo, @bar>
-to compare the I<size> of the two arrays. But don't be fooled into
-thinking that C<ok @foo, @bar> means a comparison of the contents of two
-arrays -- you're comparing I<just> the number of elements of each. It's
-so easy to make that mistake in reading C<ok @foo, @bar> that you might
-want to be very explicit about it, and instead write C<ok scalar(@foo),
-scalar(@bar)>.
-
-=item *
-
-This almost definitely doesn't do what you expect:
-
- ok $thingy->can('some_method');
-
-Why? Because C<can> returns a coderef to mean "yes it can (and the
-method is this...)", and then C<ok> sees a coderef and thinks you're
-passing a function that you want it to call and consider the truth of
-the result of! I.e., just like:
-
- ok $thingy->can('some_method')->();
-
-What you probably want instead is this:
-
- ok $thingy->can('some_method') && 1;
-
-If the C<can> returns false, then that is passed to C<ok>. If it
-returns true, then the larger expression S<< C<<
-$thingy->can('some_method') && 1 >> >> returns 1, which C<ok> sees as
-a simple signal of success, as you would expect.
-
-
-=item *
-
-The syntax for C<skip> is about the only way it can be, but it's still
-quite confusing. Just start with the above examples and you'll
-be okay.
-
-Moreover, users may expect this:
-
- skip $unless_mswin, foo($bar), baz($quux);
-
-to not evaluate C<foo($bar)> and C<baz($quux)> when the test is being
-skipped. But in reality, they I<are> evaluated, but C<skip> just won't
-bother comparing them if C<$unless_mswin> is true.
-
-You could do this:
-
- skip $unless_mswin, sub{foo($bar)}, sub{baz($quux)};
-
-But that's not terribly pretty. You may find it simpler or clearer in
-the long run to just do things like this:
-
- if( $^O =~ m/MSWin/ ) {
- print "# Yay, we're under $^O\n";
- ok foo($bar), baz($quux);
- ok thing($whatever), baz($stuff);
- ok blorp($quux, $whatever);
- ok foo($barzbarz), thang($quux);
- } else {
- print "# Feh, we're under $^O. Watch me skip some tests...\n";
- for(1 .. 4) { skip "Skip unless under MSWin" }
- }
-
-But be quite sure that C<ok> is called exactly as many times in the
-first block as C<skip> is called in the second block.
-
-=back
-
-
-=head1 ENVIRONMENT
-
-If C<PERL_TEST_DIFF> environment variable is set, it will be used as a
-command for comparing unexpected multiline results. If you have GNU
-diff installed, you might want to set C<PERL_TEST_DIFF> to C<diff -u>.
-If you don't have a suitable program, you might install the
-C<Text::Diff> module and then set C<PERL_TEST_DIFF> to be C<perl
--MText::Diff -e 'print diff(@ARGV)'>. If C<PERL_TEST_DIFF> isn't set
-but the C<Algorithm::Diff> module is available, then it will be used
-to show the differences in multiline results.
-
-=for comment
-If C<PERL_TEST_NO_TRUNC> is set, then the initial "Got 'something' but
-expected 'something_else'" readings for long multiline output values aren't
-truncated at about the 230th column, as they normally could be in some
-cases. Normally you won't need to use this, unless you were carefully
-parsing the output of your test programs.
-
-
-=head1 NOTE
-
-A past developer of this module once said that it was no longer being
-actively developed. However, rumors of its demise were greatly
-exaggerated. Feedback and suggestions are quite welcome.
-
-Be aware that the main value of this module is its simplicity. Note
-that there are already more ambitious modules out there, such as
-L<Test::More> and L<Test::Unit>.
-
-Some earlier versions of this module had docs with some confusing
-typos in the description of C<skip(...)>.
-
-
-=head1 SEE ALSO
-
-L<Test::Harness>
-
-L<Test::Simple>, L<Test::More>, L<Devel::Cover>
-
-L<Test::Builder> for building your own testing library.
-
-L<Test::Unit> is an interesting XUnit-style testing library.
-
-L<Test::Inline> and L<SelfTest> let you embed tests in code.
-
-
-=head1 AUTHOR
-
-Copyright (c) 1998-2000 Joshua Nathaniel Pritikin.
-
-Copyright (c) 2001-2002 Michael G. Schwern.
-
-Copyright (c) 2002-2004 Sean M. Burke.
-
-Current maintainer: Jesse Vincent. E<lt>jesse at bestpractical.comE<gt>
-
-This package is free software and is provided "as is" without express
-or implied warranty. It may be used, redistributed and/or modified
-under the same terms as Perl itself.
-
-=cut
-
-# "Your mistake was a hidden intention."
-# -- /Oblique Strategies/, Brian Eno and Peter Schmidt
Deleted: trunk/contrib/perl/lib/Tie/File.pm
===================================================================
--- trunk/contrib/perl/lib/Tie/File.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/Tie/File.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,2632 +0,0 @@
-
-package Tie::File;
-require 5.005;
-use Carp ':DEFAULT', 'confess';
-use POSIX 'SEEK_SET';
-use Fcntl 'O_CREAT', 'O_RDWR', 'LOCK_EX', 'LOCK_SH', 'O_WRONLY', 'O_RDONLY';
-sub O_ACCMODE () { O_RDONLY | O_RDWR | O_WRONLY }
-
-
-$VERSION = "0.97_02";
-my $DEFAULT_MEMORY_SIZE = 1<<21; # 2 megabytes
-my $DEFAULT_AUTODEFER_THRESHHOLD = 3; # 3 records
-my $DEFAULT_AUTODEFER_FILELEN_THRESHHOLD = 65536; # 16 disk blocksful
-
-my %good_opt = map {$_ => 1, "-$_" => 1}
- qw(memory dw_size mode recsep discipline
- autodefer autochomp autodefer_threshhold concurrent);
-
-sub TIEARRAY {
- if (@_ % 2 != 0) {
- croak "usage: tie \@array, $_[0], filename, [option => value]...";
- }
- my ($pack, $file, %opts) = @_;
-
- # transform '-foo' keys into 'foo' keys
- for my $key (keys %opts) {
- unless ($good_opt{$key}) {
- croak("$pack: Unrecognized option '$key'\n");
- }
- my $okey = $key;
- if ($key =~ s/^-+//) {
- $opts{$key} = delete $opts{$okey};
- }
- }
-
- if ($opts{concurrent}) {
- croak("$pack: concurrent access not supported yet\n");
- }
-
- unless (defined $opts{memory}) {
- # default is the larger of the default cache size and the
- # deferred-write buffer size (if specified)
- $opts{memory} = $DEFAULT_MEMORY_SIZE;
- $opts{memory} = $opts{dw_size}
- if defined $opts{dw_size} && $opts{dw_size} > $DEFAULT_MEMORY_SIZE;
- # Dora Winifred Read
- }
- $opts{dw_size} = $opts{memory} unless defined $opts{dw_size};
- if ($opts{dw_size} > $opts{memory}) {
- croak("$pack: dw_size may not be larger than total memory allocation\n");
- }
- # are we in deferred-write mode?
- $opts{defer} = 0 unless defined $opts{defer};
- $opts{deferred} = {}; # no records are presently deferred
- $opts{deferred_s} = 0; # count of total bytes in ->{deferred}
- $opts{deferred_max} = -1; # empty
-
- # What's a good way to arrange that this class can be overridden?
- $opts{cache} = Tie::File::Cache->new($opts{memory});
-
- # autodeferment is enabled by default
- $opts{autodefer} = 1 unless defined $opts{autodefer};
- $opts{autodeferring} = 0; # but is not initially active
- $opts{ad_history} = [];
- $opts{autodefer_threshhold} = $DEFAULT_AUTODEFER_THRESHHOLD
- unless defined $opts{autodefer_threshhold};
- $opts{autodefer_filelen_threshhold} = $DEFAULT_AUTODEFER_FILELEN_THRESHHOLD
- unless defined $opts{autodefer_filelen_threshhold};
-
- $opts{offsets} = [0];
- $opts{filename} = $file;
- unless (defined $opts{recsep}) {
- $opts{recsep} = _default_recsep();
- }
- $opts{recseplen} = length($opts{recsep});
- if ($opts{recseplen} == 0) {
- croak "Empty record separator not supported by $pack";
- }
-
- $opts{autochomp} = 1 unless defined $opts{autochomp};
-
- $opts{mode} = O_CREAT|O_RDWR unless defined $opts{mode};
- $opts{rdonly} = (($opts{mode} & O_ACCMODE) == O_RDONLY);
- $opts{sawlastrec} = undef;
-
- my $fh;
-
- if (UNIVERSAL::isa($file, 'GLOB')) {
- # We use 1 here on the theory that some systems
- # may not indicate failure if we use 0.
- # MSWin32 does not indicate failure with 0, but I don't know if
- # it will indicate failure with 1 or not.
- unless (seek $file, 1, SEEK_SET) {
- croak "$pack: your filehandle does not appear to be seekable";
- }
- seek $file, 0, SEEK_SET; # put it back
- $fh = $file; # setting binmode is the user's problem
- } elsif (ref $file) {
- croak "usage: tie \@array, $pack, filename, [option => value]...";
- } else {
- # $fh = \do { local *FH }; # XXX this is buggy
- if ($] < 5.006) {
- # perl 5.005 and earlier don't autovivify filehandles
- require Symbol;
- $fh = Symbol::gensym();
- }
- sysopen $fh, $file, $opts{mode}, 0666 or return;
- binmode $fh;
- ++$opts{ourfh};
- }
- { my $ofh = select $fh; $| = 1; select $ofh } # autoflush on write
- if (defined $opts{discipline} && $] >= 5.006) {
- # This avoids a compile-time warning under 5.005
- eval 'binmode($fh, $opts{discipline})';
- croak $@ if $@ =~ /unknown discipline/i;
- die if $@;
- }
- $opts{fh} = $fh;
-
- bless \%opts => $pack;
-}
-
-sub FETCH {
- my ($self, $n) = @_;
- my $rec;
-
- # check the defer buffer
- $rec = $self->{deferred}{$n} if exists $self->{deferred}{$n};
- $rec = $self->_fetch($n) unless defined $rec;
-
- # inlined _chomp1
- substr($rec, - $self->{recseplen}) = ""
- if defined $rec && $self->{autochomp};
- $rec;
-}
-
-# Chomp many records in-place; return nothing useful
-sub _chomp {
- my $self = shift;
- return unless $self->{autochomp};
- if ($self->{autochomp}) {
- for (@_) {
- next unless defined;
- substr($_, - $self->{recseplen}) = "";
- }
- }
-}
-
-# Chomp one record in-place; return modified record
-sub _chomp1 {
- my ($self, $rec) = @_;
- return $rec unless $self->{autochomp};
- return unless defined $rec;
- substr($rec, - $self->{recseplen}) = "";
- $rec;
-}
-
-sub _fetch {
- my ($self, $n) = @_;
-
- # check the record cache
- { my $cached = $self->{cache}->lookup($n);
- return $cached if defined $cached;
- }
-
- if ($#{$self->{offsets}} < $n) {
- return if $self->{eof}; # request for record beyond end of file
- my $o = $self->_fill_offsets_to($n);
- # If it's still undefined, there is no such record, so return 'undef'
- return unless defined $o;
- }
-
- my $fh = $self->{FH};
- $self->_seek($n); # we can do this now that offsets is populated
- my $rec = $self->_read_record;
-
-# If we happen to have just read the first record, check to see if
-# the length of the record matches what 'tell' says. If not, Tie::File
-# won't work, and should drop dead.
-#
-# if ($n == 0 && defined($rec) && tell($self->{fh}) != length($rec)) {
-# if (defined $self->{discipline}) {
-# croak "I/O discipline $self->{discipline} not supported";
-# } else {
-# croak "File encoding not supported";
-# }
-# }
-
- $self->{cache}->insert($n, $rec) if defined $rec && not $self->{flushing};
- $rec;
-}
-
-sub STORE {
- my ($self, $n, $rec) = @_;
- die "STORE called from _check_integrity!" if $DIAGNOSTIC;
-
- $self->_fixrecs($rec);
-
- if ($self->{autodefer}) {
- $self->_annotate_ad_history($n);
- }
-
- return $self->_store_deferred($n, $rec) if $self->_is_deferring;
-
-
- # We need this to decide whether the new record will fit
- # It incidentally populates the offsets table
- # Note we have to do this before we alter the cache
- # 20020324 Wait, but this DOES alter the cache. TODO BUG?
- my $oldrec = $self->_fetch($n);
-
- if (not defined $oldrec) {
- # We're storing a record beyond the end of the file
- $self->_extend_file_to($n+1);
- $oldrec = $self->{recsep};
- }
-# return if $oldrec eq $rec; # don't bother
- my $len_diff = length($rec) - length($oldrec);
-
- # length($oldrec) here is not consistent with text mode TODO XXX BUG
- $self->_mtwrite($rec, $self->{offsets}[$n], length($oldrec));
- $self->_oadjust([$n, 1, $rec]);
- $self->{cache}->update($n, $rec);
-}
-
-sub _store_deferred {
- my ($self, $n, $rec) = @_;
- $self->{cache}->remove($n);
- my $old_deferred = $self->{deferred}{$n};
-
- if (defined $self->{deferred_max} && $n > $self->{deferred_max}) {
- $self->{deferred_max} = $n;
- }
- $self->{deferred}{$n} = $rec;
-
- my $len_diff = length($rec);
- $len_diff -= length($old_deferred) if defined $old_deferred;
- $self->{deferred_s} += $len_diff;
- $self->{cache}->adj_limit(-$len_diff);
- if ($self->{deferred_s} > $self->{dw_size}) {
- $self->_flush;
- } elsif ($self->_cache_too_full) {
- $self->_cache_flush;
- }
-}
-
-# Remove a single record from the deferred-write buffer without writing it
-# The record need not be present
-sub _delete_deferred {
- my ($self, $n) = @_;
- my $rec = delete $self->{deferred}{$n};
- return unless defined $rec;
-
- if (defined $self->{deferred_max}
- && $n == $self->{deferred_max}) {
- undef $self->{deferred_max};
- }
-
- $self->{deferred_s} -= length $rec;
- $self->{cache}->adj_limit(length $rec);
-}
-
-sub FETCHSIZE {
- my $self = shift;
- my $n = $self->{eof} ? $#{$self->{offsets}} : $self->_fill_offsets;
-
- my $top_deferred = $self->_defer_max;
- $n = $top_deferred+1 if defined $top_deferred && $n < $top_deferred+1;
- $n;
-}
-
-sub STORESIZE {
- my ($self, $len) = @_;
-
- if ($self->{autodefer}) {
- $self->_annotate_ad_history('STORESIZE');
- }
-
- my $olen = $self->FETCHSIZE;
- return if $len == $olen; # Woo-hoo!
-
- # file gets longer
- if ($len > $olen) {
- if ($self->_is_deferring) {
- for ($olen .. $len-1) {
- $self->_store_deferred($_, $self->{recsep});
- }
- } else {
- $self->_extend_file_to($len);
- }
- return;
- }
-
- # file gets shorter
- if ($self->_is_deferring) {
- # TODO maybe replace this with map-plus-assignment?
- for (grep $_ >= $len, keys %{$self->{deferred}}) {
- $self->_delete_deferred($_);
- }
- $self->{deferred_max} = $len-1;
- }
-
- $self->_seek($len);
- $self->_chop_file;
- $#{$self->{offsets}} = $len;
-# $self->{offsets}[0] = 0; # in case we just chopped this
-
- $self->{cache}->remove(grep $_ >= $len, $self->{cache}->ckeys);
-}
-
-### OPTIMIZE ME
-### It should not be necessary to do FETCHSIZE
-### Just seek to the end of the file.
-sub PUSH {
- my $self = shift;
- $self->SPLICE($self->FETCHSIZE, scalar(@_), @_);
-
- # No need to return:
- # $self->FETCHSIZE; # because av.c takes care of this for me
-}
-
-sub POP {
- my $self = shift;
- my $size = $self->FETCHSIZE;
- return if $size == 0;
-# print STDERR "# POPPITY POP POP POP\n";
- scalar $self->SPLICE($size-1, 1);
-}
-
-sub SHIFT {
- my $self = shift;
- scalar $self->SPLICE(0, 1);
-}
-
-sub UNSHIFT {
- my $self = shift;
- $self->SPLICE(0, 0, @_);
- # $self->FETCHSIZE; # av.c takes care of this for me
-}
-
-sub CLEAR {
- my $self = shift;
-
- if ($self->{autodefer}) {
- $self->_annotate_ad_history('CLEAR');
- }
-
- $self->_seekb(0);
- $self->_chop_file;
- $self->{cache}->set_limit($self->{memory});
- $self->{cache}->empty;
- @{$self->{offsets}} = (0);
- %{$self->{deferred}}= ();
- $self->{deferred_s} = 0;
- $self->{deferred_max} = -1;
-}
-
-sub EXTEND {
- my ($self, $n) = @_;
-
- # No need to pre-extend anything in this case
- return if $self->_is_deferring;
-
- $self->_fill_offsets_to($n);
- $self->_extend_file_to($n);
-}
-
-sub DELETE {
- my ($self, $n) = @_;
-
- if ($self->{autodefer}) {
- $self->_annotate_ad_history('DELETE');
- }
-
- my $lastrec = $self->FETCHSIZE-1;
- my $rec = $self->FETCH($n);
- $self->_delete_deferred($n) if $self->_is_deferring;
- if ($n == $lastrec) {
- $self->_seek($n);
- $self->_chop_file;
- $#{$self->{offsets}}--;
- $self->{cache}->remove($n);
- # perhaps in this case I should also remove trailing null records?
- # 20020316
- # Note that delete @a[-3..-1] deletes the records in the wrong order,
- # so we only chop the very last one out of the file. We could repair this
- # by tracking deleted records inside the object.
- } elsif ($n < $lastrec) {
- $self->STORE($n, "");
- }
- $rec;
-}
-
-sub EXISTS {
- my ($self, $n) = @_;
- return 1 if exists $self->{deferred}{$n};
- $n < $self->FETCHSIZE;
-}
-
-sub SPLICE {
- my $self = shift;
-
- if ($self->{autodefer}) {
- $self->_annotate_ad_history('SPLICE');
- }
-
- $self->_flush if $self->_is_deferring; # move this up?
- if (wantarray) {
- $self->_chomp(my @a = $self->_splice(@_));
- @a;
- } else {
- $self->_chomp1(scalar $self->_splice(@_));
- }
-}
-
-sub DESTROY {
- my $self = shift;
- $self->flush if $self->_is_deferring;
- $self->{cache}->delink if defined $self->{cache}; # break circular link
- if ($self->{fh} and $self->{ourfh}) {
- delete $self->{ourfh};
- close delete $self->{fh};
- }
-}
-
-sub _splice {
- my ($self, $pos, $nrecs, @data) = @_;
- my @result;
-
- $pos = 0 unless defined $pos;
-
- # Deal with negative and other out-of-range positions
- # Also set default for $nrecs
- {
- my $oldsize = $self->FETCHSIZE;
- $nrecs = $oldsize unless defined $nrecs;
- my $oldpos = $pos;
-
- if ($pos < 0) {
- $pos += $oldsize;
- if ($pos < 0) {
- croak "Modification of non-creatable array value attempted, subscript $oldpos";
- }
- }
-
- if ($pos > $oldsize) {
- return unless @data;
- $pos = $oldsize; # This is what perl does for normal arrays
- }
-
- # The manual is very unclear here
- if ($nrecs < 0) {
- $nrecs = $oldsize - $pos + $nrecs;
- $nrecs = 0 if $nrecs < 0;
- }
-
- # nrecs is too big---it really means "until the end"
- # 20030507
- if ($nrecs + $pos > $oldsize) {
- $nrecs = $oldsize - $pos;
- }
- }
-
- $self->_fixrecs(@data);
- my $data = join '', @data;
- my $datalen = length $data;
- my $oldlen = 0;
-
- # compute length of data being removed
- for ($pos .. $pos+$nrecs-1) {
- last unless defined $self->_fill_offsets_to($_);
- my $rec = $self->_fetch($_);
- last unless defined $rec;
- push @result, $rec;
-
- # Why don't we just use length($rec) here?
- # Because that record might have come from the cache. _splice
- # might have been called to flush out the deferred-write records,
- # and in this case length($rec) is the length of the record to be
- # *written*, not the length of the actual record in the file. But
- # the offsets are still true. 20020322
- $oldlen += $self->{offsets}[$_+1] - $self->{offsets}[$_]
- if defined $self->{offsets}[$_+1];
- }
- $self->_fill_offsets_to($pos+$nrecs);
-
- # Modify the file
- $self->_mtwrite($data, $self->{offsets}[$pos], $oldlen);
- # Adjust the offsets table
- $self->_oadjust([$pos, $nrecs, @data]);
-
- { # Take this read cache stuff out into a separate function
- # You made a half-attempt to put it into _oadjust.
- # Finish something like that up eventually.
- # STORE also needs to do something similarish
-
- # update the read cache, part 1
- # modified records
- for ($pos .. $pos+$nrecs-1) {
- my $new = $data[$_-$pos];
- if (defined $new) {
- $self->{cache}->update($_, $new);
- } else {
- $self->{cache}->remove($_);
- }
- }
-
- # update the read cache, part 2
- # moved records - records past the site of the change
- # need to be renumbered
- # Maybe merge this with the previous block?
- {
- my @oldkeys = grep $_ >= $pos + $nrecs, $self->{cache}->ckeys;
- my @newkeys = map $_-$nrecs+ at data, @oldkeys;
- $self->{cache}->rekey(\@oldkeys, \@newkeys);
- }
-
- # Now there might be too much data in the cache, if we spliced out
- # some short records and spliced in some long ones. If so, flush
- # the cache.
- $self->_cache_flush;
- }
-
- # Yes, the return value of 'splice' *is* actually this complicated
- wantarray ? @result : @result ? $result[-1] : undef;
-}
-
-
-# write data into the file
-# $data is the data to be written.
-# it should be written at position $pos, and should overwrite
-# exactly $len of the following bytes.
-# Note that if length($data) > $len, the subsequent bytes will have to
-# be moved up, and if length($data) < $len, they will have to
-# be moved down
-sub _twrite {
- my ($self, $data, $pos, $len) = @_;
-
- unless (defined $pos) {
- die "\$pos was undefined in _twrite";
- }
-
- my $len_diff = length($data) - $len;
-
- if ($len_diff == 0) { # Woo-hoo!
- my $fh = $self->{fh};
- $self->_seekb($pos);
- $self->_write_record($data);
- return; # well, that was easy.
- }
-
- # the two records are of different lengths
- # our strategy here: rewrite the tail of the file,
- # reading ahead one buffer at a time
- # $bufsize is required to be at least as large as the data we're overwriting
- my $bufsize = _bufsize($len_diff);
- my ($writepos, $readpos) = ($pos, $pos+$len);
- my $next_block;
- my $more_data;
-
- # Seems like there ought to be a way to avoid the repeated code
- # and the special case here. The read(1) is also a little weird.
- # Think about this.
- do {
- $self->_seekb($readpos);
- my $br = read $self->{fh}, $next_block, $bufsize;
- $more_data = read $self->{fh}, my($dummy), 1;
- $self->_seekb($writepos);
- $self->_write_record($data);
- $readpos += $br;
- $writepos += length $data;
- $data = $next_block;
- } while $more_data;
- $self->_seekb($writepos);
- $self->_write_record($next_block);
-
- # There might be leftover data at the end of the file
- $self->_chop_file if $len_diff < 0;
-}
-
-# _iwrite(D, S, E)
-# Insert text D at position S.
-# Let C = E-S-|D|. If C < 0; die.
-# Data in [S,S+C) is copied to [S+D,S+D+C) = [S+D,E).
-# Data in [S+C = E-D, E) is returned. Data in [E, oo) is untouched.
-#
-# In a later version, don't read the entire intervening area into
-# memory at once; do the copying block by block.
-sub _iwrite {
- my $self = shift;
- my ($D, $s, $e) = @_;
- my $d = length $D;
- my $c = $e-$s-$d;
- local *FH = $self->{fh};
- confess "Not enough space to insert $d bytes between $s and $e"
- if $c < 0;
- confess "[$s,$e) is an invalid insertion range" if $e < $s;
-
- $self->_seekb($s);
- read FH, my $buf, $e-$s;
-
- $D .= substr($buf, 0, $c, "");
-
- $self->_seekb($s);
- $self->_write_record($D);
-
- return $buf;
-}
-
-# Like _twrite, but the data-pos-len triple may be repeated; you may
-# write several chunks. All the writing will be done in
-# one pass. Chunks SHALL be in ascending order and SHALL NOT overlap.
-sub _mtwrite {
- my $self = shift;
- my $unwritten = "";
- my $delta = 0;
-
- @_ % 3 == 0
- or die "Arguments to _mtwrite did not come in groups of three";
-
- while (@_) {
- my ($data, $pos, $len) = splice @_, 0, 3;
- my $end = $pos + $len; # The OLD end of the segment to be replaced
- $data = $unwritten . $data;
- $delta -= length($unwritten);
- $unwritten = "";
- $pos += $delta; # This is where the data goes now
- my $dlen = length $data;
- $self->_seekb($pos);
- if ($len >= $dlen) { # the data will fit
- $self->_write_record($data);
- $delta += ($dlen - $len); # everything following moves down by this much
- $data = ""; # All the data in the buffer has been written
- } else { # won't fit
- my $writable = substr($data, 0, $len - $delta, "");
- $self->_write_record($writable);
- $delta += ($dlen - $len); # everything following moves down by this much
- }
-
- # At this point we've written some but maybe not all of the data.
- # There might be a gap to close up, or $data might still contain a
- # bunch of unwritten data that didn't fit.
- my $ndlen = length $data;
- if ($delta == 0) {
- $self->_write_record($data);
- } elsif ($delta < 0) {
- # upcopy (close up gap)
- if (@_) {
- $self->_upcopy($end, $end + $delta, $_[1] - $end);
- } else {
- $self->_upcopy($end, $end + $delta);
- }
- } else {
- # downcopy (insert data that didn't fit; replace this data in memory
- # with _later_ data that doesn't fit)
- if (@_) {
- $unwritten = $self->_downcopy($data, $end, $_[1] - $end);
- } else {
- # Make the file longer to accommodate the last segment that doesn'
- $unwritten = $self->_downcopy($data, $end);
- }
- }
- }
-}
-
-# Copy block of data of length $len from position $spos to position $dpos
-# $dpos must be <= $spos
-#
-# If $len is undefined, go all the way to the end of the file
-# and then truncate it ($spos - $dpos bytes will be removed)
-sub _upcopy {
- my $blocksize = 8192;
- my ($self, $spos, $dpos, $len) = @_;
- if ($dpos > $spos) {
- die "source ($spos) was upstream of destination ($dpos) in _upcopy";
- } elsif ($dpos == $spos) {
- return;
- }
-
- while (! defined ($len) || $len > 0) {
- my $readsize = ! defined($len) ? $blocksize
- : $len > $blocksize ? $blocksize
- : $len;
-
- my $fh = $self->{fh};
- $self->_seekb($spos);
- my $bytes_read = read $fh, my($data), $readsize;
- $self->_seekb($dpos);
- if ($data eq "") {
- $self->_chop_file;
- last;
- }
- $self->_write_record($data);
- $spos += $bytes_read;
- $dpos += $bytes_read;
- $len -= $bytes_read if defined $len;
- }
-}
-
-# Write $data into a block of length $len at position $pos,
-# moving everything in the block forwards to make room.
-# Instead of writing the last length($data) bytes from the block
-# (because there isn't room for them any longer) return them.
-#
-# Undefined $len means 'until the end of the file'
-sub _downcopy {
- my $blocksize = 8192;
- my ($self, $data, $pos, $len) = @_;
- my $fh = $self->{fh};
-
- while (! defined $len || $len > 0) {
- my $readsize = ! defined($len) ? $blocksize
- : $len > $blocksize? $blocksize : $len;
- $self->_seekb($pos);
- read $fh, my($old), $readsize;
- my $last_read_was_short = length($old) < $readsize;
- $data .= $old;
- my $writable;
- if ($last_read_was_short) {
- # If last read was short, then $data now contains the entire rest
- # of the file, so there's no need to write only one block of it
- $writable = $data;
- $data = "";
- } else {
- $writable = substr($data, 0, $readsize, "");
- }
- last if $writable eq "";
- $self->_seekb($pos);
- $self->_write_record($writable);
- last if $last_read_was_short && $data eq "";
- $len -= $readsize if defined $len;
- $pos += $readsize;
- }
- return $data;
-}
-
-# Adjust the object data structures following an '_mtwrite'
-# Arguments are
-# [$pos, $nrecs, @length] items
-# indicating that $nrecs records were removed at $recpos (a record offset)
-# and replaced with records of length @length...
-# Arguments guarantee that $recpos is strictly increasing.
-# No return value
-sub _oadjust {
- my $self = shift;
- my $delta = 0;
- my $delta_recs = 0;
- my $prev_end = -1;
- my %newkeys;
-
- for (@_) {
- my ($pos, $nrecs, @data) = @$_;
- $pos += $delta_recs;
-
- # Adjust the offsets of the records after the previous batch up
- # to the first new one of this batch
- for my $i ($prev_end+2 .. $pos - 1) {
- $self->{offsets}[$i] += $delta;
- $newkey{$i} = $i + $delta_recs;
- }
-
- $prev_end = $pos + @data - 1; # last record moved on this pass
-
- # Remove the offsets for the removed records;
- # replace with the offsets for the inserted records
- my @newoff = ($self->{offsets}[$pos] + $delta);
- for my $i (0 .. $#data) {
- my $newlen = length $data[$i];
- push @newoff, $newoff[$i] + $newlen;
- $delta += $newlen;
- }
-
- for my $i ($pos .. $pos+$nrecs-1) {
- last if $i+1 > $#{$self->{offsets}};
- my $oldlen = $self->{offsets}[$i+1] - $self->{offsets}[$i];
- $delta -= $oldlen;
- }
-
-# # also this data has changed, so update it in the cache
-# for (0 .. $#data) {
-# $self->{cache}->update($pos + $_, $data[$_]);
-# }
-# if ($delta_recs) {
-# my @oldkeys = grep $_ >= $pos + @data, $self->{cache}->ckeys;
-# my @newkeys = map $_ + $delta_recs, @oldkeys;
-# $self->{cache}->rekey(\@oldkeys, \@newkeys);
-# }
-
- # replace old offsets with new
- splice @{$self->{offsets}}, $pos, $nrecs+1, @newoff;
- # What if we just spliced out the end of the offsets table?
- # shouldn't we clear $self->{eof}? Test for this XXX BUG TODO
-
- $delta_recs += @data - $nrecs; # net change in total number of records
- }
-
- # The trailing records at the very end of the file
- if ($delta) {
- for my $i ($prev_end+2 .. $#{$self->{offsets}}) {
- $self->{offsets}[$i] += $delta;
- }
- }
-
- # If we scrubbed out all known offsets, regenerate the trivial table
- # that knows that the file does indeed start at 0.
- $self->{offsets}[0] = 0 unless @{$self->{offsets}};
- # If the file got longer, the offsets table is no longer complete
- # $self->{eof} = 0 if $delta_recs > 0;
-
- # Now there might be too much data in the cache, if we spliced out
- # some short records and spliced in some long ones. If so, flush
- # the cache.
- $self->_cache_flush;
-}
-
-# If a record does not already end with the appropriate terminator
-# string, append one.
-sub _fixrecs {
- my $self = shift;
- for (@_) {
- $_ = "" unless defined $_;
- $_ .= $self->{recsep}
- unless substr($_, - $self->{recseplen}) eq $self->{recsep};
- }
-}
-
-
-################################################################
-#
-# Basic read, write, and seek
-#
-
-# seek to the beginning of record #$n
-# Assumes that the offsets table is already correctly populated
-#
-# Note that $n=-1 has a special meaning here: It means the start of
-# the last known record; this may or may not be the very last record
-# in the file, depending on whether the offsets table is fully populated.
-#
-sub _seek {
- my ($self, $n) = @_;
- my $o = $self->{offsets}[$n];
- defined($o)
- or confess("logic error: undefined offset for record $n");
- seek $self->{fh}, $o, SEEK_SET
- or confess "Couldn't seek filehandle: $!"; # "Should never happen."
-}
-
-# seek to byte $b in the file
-sub _seekb {
- my ($self, $b) = @_;
- seek $self->{fh}, $b, SEEK_SET
- or die "Couldn't seek filehandle: $!"; # "Should never happen."
-}
-
-# populate the offsets table up to the beginning of record $n
-# return the offset of record $n
-sub _fill_offsets_to {
- my ($self, $n) = @_;
-
- return $self->{offsets}[$n] if $self->{eof};
-
- my $fh = $self->{fh};
- local *OFF = $self->{offsets};
- my $rec;
-
- until ($#OFF >= $n) {
- $self->_seek(-1); # tricky -- see comment at _seek
- $rec = $self->_read_record;
- if (defined $rec) {
- push @OFF, int(tell $fh); # Tels says that int() saves memory here
- } else {
- $self->{eof} = 1;
- return; # It turns out there is no such record
- }
- }
-
- # we have now read all the records up to record n-1,
- # so we can return the offset of record n
- $OFF[$n];
-}
-
-sub _fill_offsets {
- my ($self) = @_;
-
- my $fh = $self->{fh};
- local *OFF = $self->{offsets};
-
- $self->_seek(-1); # tricky -- see comment at _seek
-
- # Tels says that inlining read_record() would make this loop
- # five times faster. 20030508
- while ( defined $self->_read_record()) {
- # int() saves us memory here
- push @OFF, int(tell $fh);
- }
-
- $self->{eof} = 1;
- $#OFF;
-}
-
-# assumes that $rec is already suitably terminated
-sub _write_record {
- my ($self, $rec) = @_;
- my $fh = $self->{fh};
- local $\ = "";
- print $fh $rec
- or die "Couldn't write record: $!"; # "Should never happen."
-# $self->{_written} += length($rec);
-}
-
-sub _read_record {
- my $self = shift;
- my $rec;
- { local $/ = $self->{recsep};
- my $fh = $self->{fh};
- $rec = <$fh>;
- }
- return unless defined $rec;
- if (substr($rec, -$self->{recseplen}) ne $self->{recsep}) {
- # improperly terminated final record --- quietly fix it.
-# my $ac = substr($rec, -$self->{recseplen});
-# $ac =~ s/\n/\\n/g;
- $self->{sawlastrec} = 1;
- unless ($self->{rdonly}) {
- local $\ = "";
- my $fh = $self->{fh};
- print $fh $self->{recsep};
- }
- $rec .= $self->{recsep};
- }
-# $self->{_read} += length($rec) if defined $rec;
- $rec;
-}
-
-sub _rw_stats {
- my $self = shift;
- @{$self}{'_read', '_written'};
-}
-
-################################################################
-#
-# Read cache management
-
-sub _cache_flush {
- my ($self) = @_;
- $self->{cache}->reduce_size_to($self->{memory} - $self->{deferred_s});
-}
-
-sub _cache_too_full {
- my $self = shift;
- $self->{cache}->bytes + $self->{deferred_s} >= $self->{memory};
-}
-
-################################################################
-#
-# File custodial services
-#
-
-
-# We have read to the end of the file and have the offsets table
-# entirely populated. Now we need to write a new record beyond
-# the end of the file. We prepare for this by writing
-# empty records into the file up to the position we want
-#
-# assumes that the offsets table already contains the offset of record $n,
-# if it exists, and extends to the end of the file if not.
-sub _extend_file_to {
- my ($self, $n) = @_;
- $self->_seek(-1); # position after the end of the last record
- my $pos = $self->{offsets}[-1];
-
- # the offsets table has one entry more than the total number of records
- my $extras = $n - $#{$self->{offsets}};
-
- # Todo : just use $self->{recsep} x $extras here?
- while ($extras-- > 0) {
- $self->_write_record($self->{recsep});
- push @{$self->{offsets}}, int(tell $self->{fh});
- }
-}
-
-# Truncate the file at the current position
-sub _chop_file {
- my $self = shift;
- truncate $self->{fh}, tell($self->{fh});
-}
-
-
-# compute the size of a buffer suitable for moving
-# all the data in a file forward $n bytes
-# ($n may be negative)
-# The result should be at least $n.
-sub _bufsize {
- my $n = shift;
- return 8192 if $n <= 0;
- my $b = $n & ~8191;
- $b += 8192 if $n & 8191;
- $b;
-}
-
-################################################################
-#
-# Miscellaneous public methods
-#
-
-# Lock the file
-sub flock {
- my ($self, $op) = @_;
- unless (@_ <= 3) {
- my $pack = ref $self;
- croak "Usage: $pack\->flock([OPERATION])";
- }
- my $fh = $self->{fh};
- $op = LOCK_EX unless defined $op;
- my $locked = flock $fh, $op;
-
- if ($locked && ($op & (LOCK_EX | LOCK_SH))) {
- # If you're locking the file, then presumably it's because
- # there might have been a write access by another process.
- # In that case, the read cache contents and the offsets table
- # might be invalid, so discard them. 20030508
- $self->{offsets} = [0];
- $self->{cache}->empty;
- }
-
- $locked;
-}
-
-# Get/set autochomp option
-sub autochomp {
- my $self = shift;
- if (@_) {
- my $old = $self->{autochomp};
- $self->{autochomp} = shift;
- $old;
- } else {
- $self->{autochomp};
- }
-}
-
-# Get offset table entries; returns offset of nth record
-sub offset {
- my ($self, $n) = @_;
-
- if ($#{$self->{offsets}} < $n) {
- return if $self->{eof}; # request for record beyond the end of file
- my $o = $self->_fill_offsets_to($n);
- # If it's still undefined, there is no such record, so return 'undef'
- return unless defined $o;
- }
-
- $self->{offsets}[$n];
-}
-
-sub discard_offsets {
- my $self = shift;
- $self->{offsets} = [0];
-}
-
-################################################################
-#
-# Matters related to deferred writing
-#
-
-# Defer writes
-sub defer {
- my $self = shift;
- $self->_stop_autodeferring;
- @{$self->{ad_history}} = ();
- $self->{defer} = 1;
-}
-
-# Flush deferred writes
-#
-# This could be better optimized to write the file in one pass, instead
-# of one pass per block of records. But that will require modifications
-# to _twrite, so I should have a good _twrite test suite first.
-sub flush {
- my $self = shift;
-
- $self->_flush;
- $self->{defer} = 0;
-}
-
-sub _old_flush {
- my $self = shift;
- my @writable = sort {$a<=>$b} (keys %{$self->{deferred}});
-
- while (@writable) {
- # gather all consecutive records from the front of @writable
- my $first_rec = shift @writable;
- my $last_rec = $first_rec+1;
- ++$last_rec, shift @writable while @writable && $last_rec == $writable[0];
- --$last_rec;
- $self->_fill_offsets_to($last_rec);
- $self->_extend_file_to($last_rec);
- $self->_splice($first_rec, $last_rec-$first_rec+1,
- @{$self->{deferred}}{$first_rec .. $last_rec});
- }
-
- $self->_discard; # clear out defered-write-cache
-}
-
-sub _flush {
- my $self = shift;
- my @writable = sort {$a<=>$b} (keys %{$self->{deferred}});
- my @args;
- my @adjust;
-
- while (@writable) {
- # gather all consecutive records from the front of @writable
- my $first_rec = shift @writable;
- my $last_rec = $first_rec+1;
- ++$last_rec, shift @writable while @writable && $last_rec == $writable[0];
- --$last_rec;
- my $end = $self->_fill_offsets_to($last_rec+1);
- if (not defined $end) {
- $self->_extend_file_to($last_rec);
- $end = $self->{offsets}[$last_rec];
- }
- my ($start) = $self->{offsets}[$first_rec];
- push @args,
- join("", @{$self->{deferred}}{$first_rec .. $last_rec}), # data
- $start, # position
- $end-$start; # length
- push @adjust, [$first_rec, # starting at this position...
- $last_rec-$first_rec+1, # this many records...
- # are replaced with these...
- @{$self->{deferred}}{$first_rec .. $last_rec},
- ];
- }
-
- $self->_mtwrite(@args); # write multiple record groups
- $self->_discard; # clear out defered-write-cache
- $self->_oadjust(@adjust);
-}
-
-# Discard deferred writes and disable future deferred writes
-sub discard {
- my $self = shift;
- $self->_discard;
- $self->{defer} = 0;
-}
-
-# Discard deferred writes, but retain old deferred writing mode
-sub _discard {
- my $self = shift;
- %{$self->{deferred}} = ();
- $self->{deferred_s} = 0;
- $self->{deferred_max} = -1;
- $self->{cache}->set_limit($self->{memory});
-}
-
-# Deferred writing is enabled, either explicitly ($self->{defer})
-# or automatically ($self->{autodeferring})
-sub _is_deferring {
- my $self = shift;
- $self->{defer} || $self->{autodeferring};
-}
-
-# The largest record number of any deferred record
-sub _defer_max {
- my $self = shift;
- return $self->{deferred_max} if defined $self->{deferred_max};
- my $max = -1;
- for my $key (keys %{$self->{deferred}}) {
- $max = $key if $key > $max;
- }
- $self->{deferred_max} = $max;
- $max;
-}
-
-################################################################
-#
-# Matters related to autodeferment
-#
-
-# Get/set autodefer option
-sub autodefer {
- my $self = shift;
- if (@_) {
- my $old = $self->{autodefer};
- $self->{autodefer} = shift;
- if ($old) {
- $self->_stop_autodeferring;
- @{$self->{ad_history}} = ();
- }
- $old;
- } else {
- $self->{autodefer};
- }
-}
-
-# The user is trying to store record #$n Record that in the history,
-# and then enable (or disable) autodeferment if that seems useful.
-# Note that it's OK for $n to be a non-number, as long as the function
-# is prepared to deal with that. Nobody else looks at the ad_history.
-#
-# Now, what does the ad_history mean, and what is this function doing?
-# Essentially, the idea is to enable autodeferring when we see that the
-# user has made three consecutive STORE calls to three consecutive records.
-# ("Three" is actually ->{autodefer_threshhold}.)
-# A STORE call for record #$n inserts $n into the autodefer history,
-# and if the history contains three consecutive records, we enable
-# autodeferment. An ad_history of [X, Y] means that the most recent
-# STOREs were for records X, X+1, ..., Y, in that order.
-#
-# Inserting a nonconsecutive number erases the history and starts over.
-#
-# Performing a special operation like SPLICE erases the history.
-#
-# There's one special case: CLEAR means that CLEAR was just called.
-# In this case, we prime the history with [-2, -1] so that if the next
-# write is for record 0, autodeferring goes on immediately. This is for
-# the common special case of "@a = (...)".
-#
-sub _annotate_ad_history {
- my ($self, $n) = @_;
- return unless $self->{autodefer}; # feature is disabled
- return if $self->{defer}; # already in explicit defer mode
- return unless $self->{offsets}[-1] >= $self->{autodefer_filelen_threshhold};
-
- local *H = $self->{ad_history};
- if ($n eq 'CLEAR') {
- @H = (-2, -1); # prime the history with fake records
- $self->_stop_autodeferring;
- } elsif ($n =~ /^\d+$/) {
- if (@H == 0) {
- @H = ($n, $n);
- } else { # @H == 2
- if ($H[1] == $n-1) { # another consecutive record
- $H[1]++;
- if ($H[1] - $H[0] + 1 >= $self->{autodefer_threshhold}) {
- $self->{autodeferring} = 1;
- }
- } else { # nonconsecutive- erase and start over
- @H = ($n, $n);
- $self->_stop_autodeferring;
- }
- }
- } else { # SPLICE or STORESIZE or some such
- @H = ();
- $self->_stop_autodeferring;
- }
-}
-
-# If autodeferring was enabled, cut it out and discard the history
-sub _stop_autodeferring {
- my $self = shift;
- if ($self->{autodeferring}) {
- $self->_flush;
- }
- $self->{autodeferring} = 0;
-}
-
-################################################################
-
-
-# This is NOT a method. It is here for two reasons:
-# 1. To factor a fairly complicated block out of the constructor
-# 2. To provide access for the test suite, which need to be sure
-# files are being written properly.
-sub _default_recsep {
- my $recsep = $/;
- if ($^O eq 'MSWin32') { # Dos too?
- # Windows users expect files to be terminated with \r\n
- # But $/ is set to \n instead
- # Note that this also transforms \n\n into \r\n\r\n.
- # That is a feature.
- $recsep =~ s/\n/\r\n/g;
- }
- $recsep;
-}
-
-# Utility function for _check_integrity
-sub _ci_warn {
- my $msg = shift;
- $msg =~ s/\n/\\n/g;
- $msg =~ s/\r/\\r/g;
- print "# $msg\n";
-}
-
-# Given a file, make sure the cache is consistent with the
-# file contents and the internal data structures are consistent with
-# each other. Returns true if everything checks out, false if not
-#
-# The $file argument is no longer used. It is retained for compatibility
-# with the existing test suite.
-sub _check_integrity {
- my ($self, $file, $warn) = @_;
- my $rsl = $self->{recseplen};
- my $rs = $self->{recsep};
- my $good = 1;
- local *_; # local $_ does not work here
- local $DIAGNOSTIC = 1;
-
- if (not defined $rs) {
- _ci_warn("recsep is undef!");
- $good = 0;
- } elsif ($rs eq "") {
- _ci_warn("recsep is empty!");
- $good = 0;
- } elsif ($rsl != length $rs) {
- my $ln = length $rs;
- _ci_warn("recsep <$rs> has length $ln, should be $rsl");
- $good = 0;
- }
-
- if (not defined $self->{offsets}[0]) {
- _ci_warn("offset 0 is missing!");
- $good = 0;
-
- } elsif ($self->{offsets}[0] != 0) {
- _ci_warn("rec 0: offset <$self->{offsets}[0]> s/b 0!");
- $good = 0;
- }
-
- my $cached = 0;
- {
- local *F = $self->{fh};
- seek F, 0, SEEK_SET;
- local $. = 0;
- local $/ = $rs;
-
- while (<F>) {
- my $n = $. - 1;
- my $cached = $self->{cache}->_produce($n);
- my $offset = $self->{offsets}[$.];
- my $ao = tell F;
- if (defined $offset && $offset != $ao) {
- _ci_warn("rec $n: offset <$offset> actual <$ao>");
- $good = 0;
- }
- if (defined $cached && $_ ne $cached && ! $self->{deferred}{$n}) {
- $good = 0;
- _ci_warn("rec $n: cached <$cached> actual <$_>");
- }
- if (defined $cached && substr($cached, -$rsl) ne $rs) {
- $good = 0;
- _ci_warn("rec $n in the cache is missing the record separator");
- }
- if (! defined $offset && $self->{eof}) {
- $good = 0;
- _ci_warn("The offset table was marked complete, but it is missing element $.");
- }
- }
- if (@{$self->{offsets}} > $.+1) {
- $good = 0;
- my $n = @{$self->{offsets}};
- _ci_warn("The offset table has $n items, but the file has only $.");
- }
-
- my $deferring = $self->_is_deferring;
- for my $n ($self->{cache}->ckeys) {
- my $r = $self->{cache}->_produce($n);
- $cached += length($r);
- next if $n+1 <= $.; # checked this already
- _ci_warn("spurious caching of record $n");
- $good = 0;
- }
- my $b = $self->{cache}->bytes;
- if ($cached != $b) {
- _ci_warn("cache size is $b, should be $cached");
- $good = 0;
- }
- }
-
- # That cache has its own set of tests
- $good = 0 unless $self->{cache}->_check_integrity;
-
- # Now let's check the deferbuffer
- # Unless deferred writing is enabled, it should be empty
- if (! $self->_is_deferring && %{$self->{deferred}}) {
- _ci_warn("deferred writing disabled, but deferbuffer nonempty");
- $good = 0;
- }
-
- # Any record in the deferbuffer should *not* be present in the readcache
- my $deferred_s = 0;
- while (my ($n, $r) = each %{$self->{deferred}}) {
- $deferred_s += length($r);
- if (defined $self->{cache}->_produce($n)) {
- _ci_warn("record $n is in the deferbuffer *and* the readcache");
- $good = 0;
- }
- if (substr($r, -$rsl) ne $rs) {
- _ci_warn("rec $n in the deferbuffer is missing the record separator");
- $good = 0;
- }
- }
-
- # Total size of deferbuffer should match internal total
- if ($deferred_s != $self->{deferred_s}) {
- _ci_warn("buffer size is $self->{deferred_s}, should be $deferred_s");
- $good = 0;
- }
-
- # Total size of deferbuffer should not exceed the specified limit
- if ($deferred_s > $self->{dw_size}) {
- _ci_warn("buffer size is $self->{deferred_s} which exceeds the limit of $self->{dw_size}");
- $good = 0;
- }
-
- # Total size of cached data should not exceed the specified limit
- if ($deferred_s + $cached > $self->{memory}) {
- my $total = $deferred_s + $cached;
- _ci_warn("total stored data size is $total which exceeds the limit of $self->{memory}");
- $good = 0;
- }
-
- # Stuff related to autodeferment
- if (!$self->{autodefer} && @{$self->{ad_history}}) {
- _ci_warn("autodefer is disabled, but ad_history is nonempty");
- $good = 0;
- }
- if ($self->{autodeferring} && $self->{defer}) {
- _ci_warn("both autodeferring and explicit deferring are active");
- $good = 0;
- }
- if (@{$self->{ad_history}} == 0) {
- # That's OK, no additional tests required
- } elsif (@{$self->{ad_history}} == 2) {
- my @non_number = grep !/^-?\d+$/, @{$self->{ad_history}};
- if (@non_number) {
- my $msg;
- { local $" = ')(';
- $msg = "ad_history contains non-numbers (@{$self->{ad_history}})";
- }
- _ci_warn($msg);
- $good = 0;
- } elsif ($self->{ad_history}[1] < $self->{ad_history}[0]) {
- _ci_warn("ad_history has nonsensical values @{$self->{ad_history}}");
- $good = 0;
- }
- } else {
- _ci_warn("ad_history has bad length <@{$self->{ad_history}}>");
- $good = 0;
- }
-
- $good;
-}
-
-################################################################
-#
-# Tie::File::Cache
-#
-# Read cache
-
-package Tie::File::Cache;
-$Tie::File::Cache::VERSION = $Tie::File::VERSION;
-use Carp ':DEFAULT', 'confess';
-
-sub HEAP () { 0 }
-sub HASH () { 1 }
-sub MAX () { 2 }
-sub BYTES() { 3 }
-#sub STAT () { 4 } # Array with request statistics for each record
-#sub MISS () { 5 } # Total number of cache misses
-#sub REQ () { 6 } # Total number of cache requests
-use strict 'vars';
-
-sub new {
- my ($pack, $max) = @_;
- local *_;
- croak "missing argument to ->new" unless defined $max;
- my $self = [];
- bless $self => $pack;
- @$self = (Tie::File::Heap->new($self), {}, $max, 0);
- $self;
-}
-
-sub adj_limit {
- my ($self, $n) = @_;
- $self->[MAX] += $n;
-}
-
-sub set_limit {
- my ($self, $n) = @_;
- $self->[MAX] = $n;
-}
-
-# For internal use only
-# Will be called by the heap structure to notify us that a certain
-# piece of data has moved from one heap element to another.
-# $k is the hash key of the item
-# $n is the new index into the heap at which it is stored
-# If $n is undefined, the item has been removed from the heap.
-sub _heap_move {
- my ($self, $k, $n) = @_;
- if (defined $n) {
- $self->[HASH]{$k} = $n;
- } else {
- delete $self->[HASH]{$k};
- }
-}
-
-sub insert {
- my ($self, $key, $val) = @_;
- local *_;
- croak "missing argument to ->insert" unless defined $key;
- unless (defined $self->[MAX]) {
- confess "undefined max" ;
- }
- confess "undefined val" unless defined $val;
- return if length($val) > $self->[MAX];
-
-# if ($self->[STAT]) {
-# $self->[STAT][$key] = 1;
-# return;
-# }
-
- my $oldnode = $self->[HASH]{$key};
- if (defined $oldnode) {
- my $oldval = $self->[HEAP]->set_val($oldnode, $val);
- $self->[BYTES] -= length($oldval);
- } else {
- $self->[HEAP]->insert($key, $val);
- }
- $self->[BYTES] += length($val);
- $self->flush if $self->[BYTES] > $self->[MAX];
-}
-
-sub expire {
- my $self = shift;
- my $old_data = $self->[HEAP]->popheap;
- return unless defined $old_data;
- $self->[BYTES] -= length $old_data;
- $old_data;
-}
-
-sub remove {
- my ($self, @keys) = @_;
- my @result;
-
-# if ($self->[STAT]) {
-# for my $key (@keys) {
-# $self->[STAT][$key] = 0;
-# }
-# return;
-# }
-
- for my $key (@keys) {
- next unless exists $self->[HASH]{$key};
- my $old_data = $self->[HEAP]->remove($self->[HASH]{$key});
- $self->[BYTES] -= length $old_data;
- push @result, $old_data;
- }
- @result;
-}
-
-sub lookup {
- my ($self, $key) = @_;
- local *_;
- croak "missing argument to ->lookup" unless defined $key;
-
-# if ($self->[STAT]) {
-# $self->[MISS]++ if $self->[STAT][$key]++ == 0;
-# $self->[REQ]++;
-# my $hit_rate = 1 - $self->[MISS] / $self->[REQ];
-# # Do some testing to determine this threshhold
-# $#$self = STAT - 1 if $hit_rate > 0.20;
-# }
-
- if (exists $self->[HASH]{$key}) {
- $self->[HEAP]->lookup($self->[HASH]{$key});
- } else {
- return;
- }
-}
-
-# For internal use only
-sub _produce {
- my ($self, $key) = @_;
- my $loc = $self->[HASH]{$key};
- return unless defined $loc;
- $self->[HEAP][$loc][2];
-}
-
-# For internal use only
-sub _promote {
- my ($self, $key) = @_;
- $self->[HEAP]->promote($self->[HASH]{$key});
-}
-
-sub empty {
- my ($self) = @_;
- %{$self->[HASH]} = ();
- $self->[BYTES] = 0;
- $self->[HEAP]->empty;
-# @{$self->[STAT]} = ();
-# $self->[MISS] = 0;
-# $self->[REQ] = 0;
-}
-
-sub is_empty {
- my ($self) = @_;
- keys %{$self->[HASH]} == 0;
-}
-
-sub update {
- my ($self, $key, $val) = @_;
- local *_;
- croak "missing argument to ->update" unless defined $key;
- if (length($val) > $self->[MAX]) {
- my ($oldval) = $self->remove($key);
- $self->[BYTES] -= length($oldval) if defined $oldval;
- } elsif (exists $self->[HASH]{$key}) {
- my $oldval = $self->[HEAP]->set_val($self->[HASH]{$key}, $val);
- $self->[BYTES] += length($val);
- $self->[BYTES] -= length($oldval) if defined $oldval;
- } else {
- $self->[HEAP]->insert($key, $val);
- $self->[BYTES] += length($val);
- }
- $self->flush;
-}
-
-sub rekey {
- my ($self, $okeys, $nkeys) = @_;
- local *_;
- my %map;
- @map{@$okeys} = @$nkeys;
- croak "missing argument to ->rekey" unless defined $nkeys;
- croak "length mismatch in ->rekey arguments" unless @$nkeys == @$okeys;
- my %adjusted; # map new keys to heap indices
- # You should be able to cut this to one loop TODO XXX
- for (0 .. $#$okeys) {
- $adjusted{$nkeys->[$_]} = delete $self->[HASH]{$okeys->[$_]};
- }
- while (my ($nk, $ix) = each %adjusted) {
- # @{$self->[HASH]}{keys %adjusted} = values %adjusted;
- $self->[HEAP]->rekey($ix, $nk);
- $self->[HASH]{$nk} = $ix;
- }
-}
-
-sub ckeys {
- my $self = shift;
- my @a = keys %{$self->[HASH]};
- @a;
-}
-
-# Return total amount of cached data
-sub bytes {
- my $self = shift;
- $self->[BYTES];
-}
-
-# Expire oldest item from cache until cache size is smaller than $max
-sub reduce_size_to {
- my ($self, $max) = @_;
- until ($self->[BYTES] <= $max) {
- # Note that Tie::File::Cache::expire has been inlined here
- my $old_data = $self->[HEAP]->popheap;
- return unless defined $old_data;
- $self->[BYTES] -= length $old_data;
- }
-}
-
-# Why not just $self->reduce_size_to($self->[MAX])?
-# Try this when things stabilize TODO XXX
-# If the cache is too full, expire the oldest records
-sub flush {
- my $self = shift;
- $self->reduce_size_to($self->[MAX]) if $self->[BYTES] > $self->[MAX];
-}
-
-# For internal use only
-sub _produce_lru {
- my $self = shift;
- $self->[HEAP]->expire_order;
-}
-
-BEGIN { *_ci_warn = \&Tie::File::_ci_warn }
-
-sub _check_integrity { # For CACHE
- my $self = shift;
- my $good = 1;
-
- # Test HEAP
- $self->[HEAP]->_check_integrity or $good = 0;
-
- # Test HASH
- my $bytes = 0;
- for my $k (keys %{$self->[HASH]}) {
- if ($k ne '0' && $k !~ /^[1-9][0-9]*$/) {
- $good = 0;
- _ci_warn "Cache hash key <$k> is non-numeric";
- }
-
- my $h = $self->[HASH]{$k};
- if (! defined $h) {
- $good = 0;
- _ci_warn "Heap index number for key $k is undefined";
- } elsif ($h == 0) {
- $good = 0;
- _ci_warn "Heap index number for key $k is zero";
- } else {
- my $j = $self->[HEAP][$h];
- if (! defined $j) {
- $good = 0;
- _ci_warn "Heap contents key $k (=> $h) are undefined";
- } else {
- $bytes += length($j->[2]);
- if ($k ne $j->[1]) {
- $good = 0;
- _ci_warn "Heap contents key $k (=> $h) is $j->[1], should be $k";
- }
- }
- }
- }
-
- # Test BYTES
- if ($bytes != $self->[BYTES]) {
- $good = 0;
- _ci_warn "Total data in cache is $bytes, expected $self->[BYTES]";
- }
-
- # Test MAX
- if ($bytes > $self->[MAX]) {
- $good = 0;
- _ci_warn "Total data in cache is $bytes, exceeds maximum $self->[MAX]";
- }
-
- return $good;
-}
-
-sub delink {
- my $self = shift;
- $self->[HEAP] = undef; # Bye bye heap
-}
-
-################################################################
-#
-# Tie::File::Heap
-#
-# Heap data structure for use by cache LRU routines
-
-package Tie::File::Heap;
-use Carp ':DEFAULT', 'confess';
-$Tie::File::Heap::VERSION = $Tie::File::Cache::VERSION;
-sub SEQ () { 0 };
-sub KEY () { 1 };
-sub DAT () { 2 };
-
-sub new {
- my ($pack, $cache) = @_;
- die "$pack: Parent cache object $cache does not support _heap_move method"
- unless eval { $cache->can('_heap_move') };
- my $self = [[0,$cache,0]];
- bless $self => $pack;
-}
-
-# Allocate a new sequence number, larger than all previously allocated numbers
-sub _nseq {
- my $self = shift;
- $self->[0][0]++;
-}
-
-sub _cache {
- my $self = shift;
- $self->[0][1];
-}
-
-sub _nelts {
- my $self = shift;
- $self->[0][2];
-}
-
-sub _nelts_inc {
- my $self = shift;
- ++$self->[0][2];
-}
-
-sub _nelts_dec {
- my $self = shift;
- --$self->[0][2];
-}
-
-sub is_empty {
- my $self = shift;
- $self->_nelts == 0;
-}
-
-sub empty {
- my $self = shift;
- $#$self = 0;
- $self->[0][2] = 0;
- $self->[0][0] = 0; # might as well reset the sequence numbers
-}
-
-# notify the parent cache object that we moved something
-sub _heap_move {
- my $self = shift;
- $self->_cache->_heap_move(@_);
-}
-
-# Insert a piece of data into the heap with the indicated sequence number.
-# The item with the smallest sequence number is always at the top.
-# If no sequence number is specified, allocate a new one and insert the
-# item at the bottom.
-sub insert {
- my ($self, $key, $data, $seq) = @_;
- $seq = $self->_nseq unless defined $seq;
- $self->_insert_new([$seq, $key, $data]);
-}
-
-# Insert a new, fresh item at the bottom of the heap
-sub _insert_new {
- my ($self, $item) = @_;
- my $i = @$self;
- $i = int($i/2) until defined $self->[$i/2];
- $self->[$i] = $item;
- $self->[0][1]->_heap_move($self->[$i][KEY], $i);
- $self->_nelts_inc;
-}
-
-# Insert [$data, $seq] pair at or below item $i in the heap.
-# If $i is omitted, default to 1 (the top element.)
-sub _insert {
- my ($self, $item, $i) = @_;
-# $self->_check_loc($i) if defined $i;
- $i = 1 unless defined $i;
- until (! defined $self->[$i]) {
- if ($self->[$i][SEQ] > $item->[SEQ]) { # inserted item is older
- ($self->[$i], $item) = ($item, $self->[$i]);
- $self->[0][1]->_heap_move($self->[$i][KEY], $i);
- }
- # If either is undefined, go that way. Otherwise, choose at random
- my $dir;
- $dir = 0 if !defined $self->[2*$i];
- $dir = 1 if !defined $self->[2*$i+1];
- $dir = int(rand(2)) unless defined $dir;
- $i = 2*$i + $dir;
- }
- $self->[$i] = $item;
- $self->[0][1]->_heap_move($self->[$i][KEY], $i);
- $self->_nelts_inc;
-}
-
-# Remove the item at node $i from the heap, moving child items upwards.
-# The item with the smallest sequence number is always at the top.
-# Moving items upwards maintains this condition.
-# Return the removed item. Return undef if there was no item at node $i.
-sub remove {
- my ($self, $i) = @_;
- $i = 1 unless defined $i;
- my $top = $self->[$i];
- return unless defined $top;
- while (1) {
- my $ii;
- my ($L, $R) = (2*$i, 2*$i+1);
-
- # If either is undefined, go the other way.
- # Otherwise, go towards the smallest.
- last unless defined $self->[$L] || defined $self->[$R];
- $ii = $R if not defined $self->[$L];
- $ii = $L if not defined $self->[$R];
- unless (defined $ii) {
- $ii = $self->[$L][SEQ] < $self->[$R][SEQ] ? $L : $R;
- }
-
- $self->[$i] = $self->[$ii]; # Promote child to fill vacated spot
- $self->[0][1]->_heap_move($self->[$i][KEY], $i);
- $i = $ii; # Fill new vacated spot
- }
- $self->[0][1]->_heap_move($top->[KEY], undef);
- undef $self->[$i];
- $self->_nelts_dec;
- return $top->[DAT];
-}
-
-sub popheap {
- my $self = shift;
- $self->remove(1);
-}
-
-# set the sequence number of the indicated item to a higher number
-# than any other item in the heap, and bubble the item down to the
-# bottom.
-sub promote {
- my ($self, $n) = @_;
-# $self->_check_loc($n);
- $self->[$n][SEQ] = $self->_nseq;
- my $i = $n;
- while (1) {
- my ($L, $R) = (2*$i, 2*$i+1);
- my $dir;
- last unless defined $self->[$L] || defined $self->[$R];
- $dir = $R unless defined $self->[$L];
- $dir = $L unless defined $self->[$R];
- unless (defined $dir) {
- $dir = $self->[$L][SEQ] < $self->[$R][SEQ] ? $L : $R;
- }
- @{$self}[$i, $dir] = @{$self}[$dir, $i];
- for ($i, $dir) {
- $self->[0][1]->_heap_move($self->[$_][KEY], $_) if defined $self->[$_];
- }
- $i = $dir;
- }
-}
-
-# Return item $n from the heap, promoting its LRU status
-sub lookup {
- my ($self, $n) = @_;
-# $self->_check_loc($n);
- my $val = $self->[$n];
- $self->promote($n);
- $val->[DAT];
-}
-
-
-# Assign a new value for node $n, promoting it to the bottom of the heap
-sub set_val {
- my ($self, $n, $val) = @_;
-# $self->_check_loc($n);
- my $oval = $self->[$n][DAT];
- $self->[$n][DAT] = $val;
- $self->promote($n);
- return $oval;
-}
-
-# The hask key has changed for an item;
-# alter the heap's record of the hash key
-sub rekey {
- my ($self, $n, $new_key) = @_;
-# $self->_check_loc($n);
- $self->[$n][KEY] = $new_key;
-}
-
-sub _check_loc {
- my ($self, $n) = @_;
- unless (1 || defined $self->[$n]) {
- confess "_check_loc($n) failed";
- }
-}
-
-BEGIN { *_ci_warn = \&Tie::File::_ci_warn }
-
-sub _check_integrity {
- my $self = shift;
- my $good = 1;
- my %seq;
-
- unless (eval {$self->[0][1]->isa("Tie::File::Cache")}) {
- _ci_warn "Element 0 of heap corrupt";
- $good = 0;
- }
- $good = 0 unless $self->_satisfies_heap_condition(1);
- for my $i (2 .. $#{$self}) {
- my $p = int($i/2); # index of parent node
- if (defined $self->[$i] && ! defined $self->[$p]) {
- _ci_warn "Element $i of heap defined, but parent $p isn't";
- $good = 0;
- }
-
- if (defined $self->[$i]) {
- if ($seq{$self->[$i][SEQ]}) {
- my $seq = $self->[$i][SEQ];
- _ci_warn "Nodes $i and $seq{$seq} both have SEQ=$seq";
- $good = 0;
- } else {
- $seq{$self->[$i][SEQ]} = $i;
- }
- }
- }
-
- return $good;
-}
-
-sub _satisfies_heap_condition {
- my $self = shift;
- my $n = shift || 1;
- my $good = 1;
- for (0, 1) {
- my $c = $n*2 + $_;
- next unless defined $self->[$c];
- if ($self->[$n][SEQ] >= $self->[$c]) {
- _ci_warn "Node $n of heap does not predate node $c";
- $good = 0 ;
- }
- $good = 0 unless $self->_satisfies_heap_condition($c);
- }
- return $good;
-}
-
-# Return a list of all the values, sorted by expiration order
-sub expire_order {
- my $self = shift;
- my @nodes = sort {$a->[SEQ] <=> $b->[SEQ]} $self->_nodes;
- map { $_->[KEY] } @nodes;
-}
-
-sub _nodes {
- my $self = shift;
- my $i = shift || 1;
- return unless defined $self->[$i];
- ($self->[$i], $self->_nodes($i*2), $self->_nodes($i*2+1));
-}
-
-"Cogito, ergo sum."; # don't forget to return a true value from the file
-
-__END__
-
-=head1 NAME
-
-Tie::File - Access the lines of a disk file via a Perl array
-
-=head1 SYNOPSIS
-
- # This file documents Tie::File version 0.97
- use Tie::File;
-
- tie @array, 'Tie::File', filename or die ...;
-
- $array[13] = 'blah'; # line 13 of the file is now 'blah'
- print $array[42]; # display line 42 of the file
-
- $n_recs = @array; # how many records are in the file?
- $#array -= 2; # chop two records off the end
-
-
- for (@array) {
- s/PERL/Perl/g; # Replace PERL with Perl everywhere in the file
- }
-
- # These are just like regular push, pop, unshift, shift, and splice
- # Except that they modify the file in the way you would expect
-
- push @array, new recs...;
- my $r1 = pop @array;
- unshift @array, new recs...;
- my $r2 = shift @array;
- @old_recs = splice @array, 3, 7, new recs...;
-
- untie @array; # all finished
-
-
-=head1 DESCRIPTION
-
-C<Tie::File> represents a regular text file as a Perl array. Each
-element in the array corresponds to a record in the file. The first
-line of the file is element 0 of the array; the second line is element
-1, and so on.
-
-The file is I<not> loaded into memory, so this will work even for
-gigantic files.
-
-Changes to the array are reflected in the file immediately.
-
-Lazy people and beginners may now stop reading the manual.
-
-=head2 C<recsep>
-
-What is a 'record'? By default, the meaning is the same as for the
-C<E<lt>...E<gt>> operator: It's a string terminated by C<$/>, which is
-probably C<"\n">. (Minor exception: on DOS and Win32 systems, a
-'record' is a string terminated by C<"\r\n">.) You may change the
-definition of "record" by supplying the C<recsep> option in the C<tie>
-call:
-
- tie @array, 'Tie::File', $file, recsep => 'es';
-
-This says that records are delimited by the string C<es>. If the file
-contained the following data:
-
- Curse these pesky flies!\n
-
-then the C<@array> would appear to have four elements:
-
- "Curse th"
- "e p"
- "ky fli"
- "!\n"
-
-An undefined value is not permitted as a record separator. Perl's
-special "paragraph mode" semantics (E<agrave> la C<$/ = "">) are not
-emulated.
-
-Records read from the tied array do not have the record separator
-string on the end; this is to allow
-
- $array[17] .= "extra";
-
-to work as expected.
-
-(See L<"autochomp">, below.) Records stored into the array will have
-the record separator string appended before they are written to the
-file, if they don't have one already. For example, if the record
-separator string is C<"\n">, then the following two lines do exactly
-the same thing:
-
- $array[17] = "Cherry pie";
- $array[17] = "Cherry pie\n";
-
-The result is that the contents of line 17 of the file will be
-replaced with "Cherry pie"; a newline character will separate line 17
-from line 18. This means that this code will do nothing:
-
- chomp $array[17];
-
-Because the C<chomp>ed value will have the separator reattached when
-it is written back to the file. There is no way to create a file
-whose trailing record separator string is missing.
-
-Inserting records that I<contain> the record separator string is not
-supported by this module. It will probably produce a reasonable
-result, but what this result will be may change in a future version.
-Use 'splice' to insert records or to replace one record with several.
-
-=head2 C<autochomp>
-
-Normally, array elements have the record separator removed, so that if
-the file contains the text
-
- Gold
- Frankincense
- Myrrh
-
-the tied array will appear to contain C<("Gold", "Frankincense",
-"Myrrh")>. If you set C<autochomp> to a false value, the record
-separator will not be removed. If the file above was tied with
-
- tie @gifts, "Tie::File", $gifts, autochomp => 0;
-
-then the array C<@gifts> would appear to contain C<("Gold\n",
-"Frankincense\n", "Myrrh\n")>, or (on Win32 systems) C<("Gold\r\n",
-"Frankincense\r\n", "Myrrh\r\n")>.
-
-=head2 C<mode>
-
-Normally, the specified file will be opened for read and write access,
-and will be created if it does not exist. (That is, the flags
-C<O_RDWR | O_CREAT> are supplied in the C<open> call.) If you want to
-change this, you may supply alternative flags in the C<mode> option.
-See L<Fcntl> for a listing of available flags.
-For example:
-
- # open the file if it exists, but fail if it does not exist
- use Fcntl 'O_RDWR';
- tie @array, 'Tie::File', $file, mode => O_RDWR;
-
- # create the file if it does not exist
- use Fcntl 'O_RDWR', 'O_CREAT';
- tie @array, 'Tie::File', $file, mode => O_RDWR | O_CREAT;
-
- # open an existing file in read-only mode
- use Fcntl 'O_RDONLY';
- tie @array, 'Tie::File', $file, mode => O_RDONLY;
-
-Opening the data file in write-only or append mode is not supported.
-
-=head2 C<memory>
-
-This is an upper limit on the amount of memory that C<Tie::File> will
-consume at any time while managing the file. This is used for two
-things: managing the I<read cache> and managing the I<deferred write
-buffer>.
-
-Records read in from the file are cached, to avoid having to re-read
-them repeatedly. If you read the same record twice, the first time it
-will be stored in memory, and the second time it will be fetched from
-the I<read cache>. The amount of data in the read cache will not
-exceed the value you specified for C<memory>. If C<Tie::File> wants
-to cache a new record, but the read cache is full, it will make room
-by expiring the least-recently visited records from the read cache.
-
-The default memory limit is 2Mib. You can adjust the maximum read
-cache size by supplying the C<memory> option. The argument is the
-desired cache size, in bytes.
-
- # I have a lot of memory, so use a large cache to speed up access
- tie @array, 'Tie::File', $file, memory => 20_000_000;
-
-Setting the memory limit to 0 will inhibit caching; records will be
-fetched from disk every time you examine them.
-
-The C<memory> value is not an absolute or exact limit on the memory
-used. C<Tie::File> objects contains some structures besides the read
-cache and the deferred write buffer, whose sizes are not charged
-against C<memory>.
-
-The cache itself consumes about 310 bytes per cached record, so if
-your file has many short records, you may want to decrease the cache
-memory limit, or else the cache overhead may exceed the size of the
-cached data.
-
-
-=head2 C<dw_size>
-
-(This is an advanced feature. Skip this section on first reading.)
-
-If you use deferred writing (See L<"Deferred Writing">, below) then
-data you write into the array will not be written directly to the
-file; instead, it will be saved in the I<deferred write buffer> to be
-written out later. Data in the deferred write buffer is also charged
-against the memory limit you set with the C<memory> option.
-
-You may set the C<dw_size> option to limit the amount of data that can
-be saved in the deferred write buffer. This limit may not exceed the
-total memory limit. For example, if you set C<dw_size> to 1000 and
-C<memory> to 2500, that means that no more than 1000 bytes of deferred
-writes will be saved up. The space available for the read cache will
-vary, but it will always be at least 1500 bytes (if the deferred write
-buffer is full) and it could grow as large as 2500 bytes (if the
-deferred write buffer is empty.)
-
-If you don't specify a C<dw_size>, it defaults to the entire memory
-limit.
-
-=head2 Option Format
-
-C<-mode> is a synonym for C<mode>. C<-recsep> is a synonym for
-C<recsep>. C<-memory> is a synonym for C<memory>. You get the
-idea.
-
-=head1 Public Methods
-
-The C<tie> call returns an object, say C<$o>. You may call
-
- $rec = $o->FETCH($n);
- $o->STORE($n, $rec);
-
-to fetch or store the record at line C<$n>, respectively; similarly
-the other tied array methods. (See L<perltie> for details.) You may
-also call the following methods on this object:
-
-=head2 C<flock>
-
- $o->flock(MODE)
-
-will lock the tied file. C<MODE> has the same meaning as the second
-argument to the Perl built-in C<flock> function; for example
-C<LOCK_SH> or C<LOCK_EX | LOCK_NB>. (These constants are provided by
-the C<use Fcntl ':flock'> declaration.)
-
-C<MODE> is optional; the default is C<LOCK_EX>.
-
-C<Tie::File> maintains an internal table of the byte offset of each
-record it has seen in the file.
-
-When you use C<flock> to lock the file, C<Tie::File> assumes that the
-read cache is no longer trustworthy, because another process might
-have modified the file since the last time it was read. Therefore, a
-successful call to C<flock> discards the contents of the read cache
-and the internal record offset table.
-
-C<Tie::File> promises that the following sequence of operations will
-be safe:
-
- my $o = tie @array, "Tie::File", $filename;
- $o->flock;
-
-In particular, C<Tie::File> will I<not> read or write the file during
-the C<tie> call. (Exception: Using C<mode =E<gt> O_TRUNC> will, of
-course, erase the file during the C<tie> call. If you want to do this
-safely, then open the file without C<O_TRUNC>, lock the file, and use
-C<@array = ()>.)
-
-The best way to unlock a file is to discard the object and untie the
-array. It is probably unsafe to unlock the file without also untying
-it, because if you do, changes may remain unwritten inside the object.
-That is why there is no shortcut for unlocking. If you really want to
-unlock the file prematurely, you know what to do; if you don't know
-what to do, then don't do it.
-
-All the usual warnings about file locking apply here. In particular,
-note that file locking in Perl is B<advisory>, which means that
-holding a lock will not prevent anyone else from reading, writing, or
-erasing the file; it only prevents them from getting another lock at
-the same time. Locks are analogous to green traffic lights: If you
-have a green light, that does not prevent the idiot coming the other
-way from plowing into you sideways; it merely guarantees to you that
-the idiot does not also have a green light at the same time.
-
-=head2 C<autochomp>
-
- my $old_value = $o->autochomp(0); # disable autochomp option
- my $old_value = $o->autochomp(1); # enable autochomp option
-
- my $ac = $o->autochomp(); # recover current value
-
-See L<"autochomp">, above.
-
-=head2 C<defer>, C<flush>, C<discard>, and C<autodefer>
-
-See L<"Deferred Writing">, below.
-
-=head2 C<offset>
-
- $off = $o->offset($n);
-
-This method returns the byte offset of the start of the C<$n>th record
-in the file. If there is no such record, it returns an undefined
-value.
-
-=head1 Tying to an already-opened filehandle
-
-If C<$fh> is a filehandle, such as is returned by C<IO::File> or one
-of the other C<IO> modules, you may use:
-
- tie @array, 'Tie::File', $fh, ...;
-
-Similarly if you opened that handle C<FH> with regular C<open> or
-C<sysopen>, you may use:
-
- tie @array, 'Tie::File', \*FH, ...;
-
-Handles that were opened write-only won't work. Handles that were
-opened read-only will work as long as you don't try to modify the
-array. Handles must be attached to seekable sources of data---that
-means no pipes or sockets. If C<Tie::File> can detect that you
-supplied a non-seekable handle, the C<tie> call will throw an
-exception. (On Unix systems, it can detect this.)
-
-Note that Tie::File will only close any filehandles that it opened
-internally. If you passed it a filehandle as above, you "own" the
-filehandle, and are responsible for closing it after you have untied
-the @array.
-
-=head1 Deferred Writing
-
-(This is an advanced feature. Skip this section on first reading.)
-
-Normally, modifying a C<Tie::File> array writes to the underlying file
-immediately. Every assignment like C<$a[3] = ...> rewrites as much of
-the file as is necessary; typically, everything from line 3 through
-the end will need to be rewritten. This is the simplest and most
-transparent behavior. Performance even for large files is reasonably
-good.
-
-However, under some circumstances, this behavior may be excessively
-slow. For example, suppose you have a million-record file, and you
-want to do:
-
- for (@FILE) {
- $_ = "> $_";
- }
-
-The first time through the loop, you will rewrite the entire file,
-from line 0 through the end. The second time through the loop, you
-will rewrite the entire file from line 1 through the end. The third
-time through the loop, you will rewrite the entire file from line 2 to
-the end. And so on.
-
-If the performance in such cases is unacceptable, you may defer the
-actual writing, and then have it done all at once. The following loop
-will perform much better for large files:
-
- (tied @a)->defer;
- for (@a) {
- $_ = "> $_";
- }
- (tied @a)->flush;
-
-If C<Tie::File>'s memory limit is large enough, all the writing will
-done in memory. Then, when you call C<-E<gt>flush>, the entire file
-will be rewritten in a single pass.
-
-(Actually, the preceding discussion is something of a fib. You don't
-need to enable deferred writing to get good performance for this
-common case, because C<Tie::File> will do it for you automatically
-unless you specifically tell it not to. See L<"autodeferring">,
-below.)
-
-Calling C<-E<gt>flush> returns the array to immediate-write mode. If
-you wish to discard the deferred writes, you may call C<-E<gt>discard>
-instead of C<-E<gt>flush>. Note that in some cases, some of the data
-will have been written already, and it will be too late for
-C<-E<gt>discard> to discard all the changes. Support for
-C<-E<gt>discard> may be withdrawn in a future version of C<Tie::File>.
-
-Deferred writes are cached in memory up to the limit specified by the
-C<dw_size> option (see above). If the deferred-write buffer is full
-and you try to write still more deferred data, the buffer will be
-flushed. All buffered data will be written immediately, the buffer
-will be emptied, and the now-empty space will be used for future
-deferred writes.
-
-If the deferred-write buffer isn't yet full, but the total size of the
-buffer and the read cache would exceed the C<memory> limit, the oldest
-records will be expired from the read cache until the total size is
-under the limit.
-
-C<push>, C<pop>, C<shift>, C<unshift>, and C<splice> cannot be
-deferred. When you perform one of these operations, any deferred data
-is written to the file and the operation is performed immediately.
-This may change in a future version.
-
-If you resize the array with deferred writing enabled, the file will
-be resized immediately, but deferred records will not be written.
-This has a surprising consequence: C<@a = (...)> erases the file
-immediately, but the writing of the actual data is deferred. This
-might be a bug. If it is a bug, it will be fixed in a future version.
-
-=head2 Autodeferring
-
-C<Tie::File> tries to guess when deferred writing might be helpful,
-and to turn it on and off automatically.
-
- for (@a) {
- $_ = "> $_";
- }
-
-In this example, only the first two assignments will be done
-immediately; after this, all the changes to the file will be deferred
-up to the user-specified memory limit.
-
-You should usually be able to ignore this and just use the module
-without thinking about deferring. However, special applications may
-require fine control over which writes are deferred, or may require
-that all writes be immediate. To disable the autodeferment feature,
-use
-
- (tied @o)->autodefer(0);
-
-or
-
- tie @array, 'Tie::File', $file, autodefer => 0;
-
-
-Similarly, C<-E<gt>autodefer(1)> re-enables autodeferment, and
-C<-E<gt>autodefer()> recovers the current value of the autodefer setting.
-
-
-=head1 CONCURRENT ACCESS TO FILES
-
-Caching and deferred writing are inappropriate if you want the same
-file to be accessed simultaneously from more than one process. Other
-optimizations performed internally by this module are also
-incompatible with concurrent access. A future version of this module will
-support a C<concurrent =E<gt> 1> option that enables safe concurrent access.
-
-Previous versions of this documentation suggested using C<memory
-=E<gt> 0> for safe concurrent access. This was mistaken. Tie::File
-will not support safe concurrent access before version 0.98.
-
-=head1 CAVEATS
-
-(That's Latin for 'warnings'.)
-
-=over 4
-
-=item *
-
-Reasonable effort was made to make this module efficient. Nevertheless,
-changing the size of a record in the middle of a large file will
-always be fairly slow, because everything after the new record must be
-moved.
-
-=item *
-
-The behavior of tied arrays is not precisely the same as for regular
-arrays. For example:
-
- # This DOES print "How unusual!"
- undef $a[10]; print "How unusual!\n" if defined $a[10];
-
-C<undef>-ing a C<Tie::File> array element just blanks out the
-corresponding record in the file. When you read it back again, you'll
-get the empty string, so the supposedly-C<undef>'ed value will be
-defined. Similarly, if you have C<autochomp> disabled, then
-
- # This DOES print "How unusual!" if 'autochomp' is disabled
- undef $a[10];
- print "How unusual!\n" if $a[10];
-
-Because when C<autochomp> is disabled, C<$a[10]> will read back as
-C<"\n"> (or whatever the record separator string is.)
-
-There are other minor differences, particularly regarding C<exists>
-and C<delete>, but in general, the correspondence is extremely close.
-
-=item *
-
-I have supposed that since this module is concerned with file I/O,
-almost all normal use of it will be heavily I/O bound. This means
-that the time to maintain complicated data structures inside the
-module will be dominated by the time to actually perform the I/O.
-When there was an opportunity to spend CPU time to avoid doing I/O, I
-usually tried to take it.
-
-=item *
-
-You might be tempted to think that deferred writing is like
-transactions, with C<flush> as C<commit> and C<discard> as
-C<rollback>, but it isn't, so don't.
-
-=item *
-
-There is a large memory overhead for each record offset and for each
-cache entry: about 310 bytes per cached data record, and about 21 bytes per offset table entry.
-
-The per-record overhead will limit the maximum number of records you
-can access per file. Note that I<accessing> the length of the array
-via C<$x = scalar @tied_file> accesses B<all> records and stores their
-offsets. The same for C<foreach (@tied_file)>, even if you exit the
-loop early.
-
-=back
-
-=head1 SUBCLASSING
-
-This version promises absolutely nothing about the internals, which
-may change without notice. A future version of the module will have a
-well-defined and stable subclassing API.
-
-=head1 WHAT ABOUT C<DB_File>?
-
-People sometimes point out that L<DB_File> will do something similar,
-and ask why C<Tie::File> module is necessary.
-
-There are a number of reasons that you might prefer C<Tie::File>.
-A list is available at C<http://perl.plover.com/TieFile/why-not-DB_File>.
-
-=head1 AUTHOR
-
-Mark Jason Dominus
-
-To contact the author, send email to: C<mjd-perl-tiefile+ at plover.com>
-
-To receive an announcement whenever a new version of this module is
-released, send a blank email message to
-C<mjd-perl-tiefile-subscribe at plover.com>.
-
-The most recent version of this module, including documentation and
-any news of importance, will be available at
-
- http://perl.plover.com/TieFile/
-
-
-=head1 LICENSE
-
-C<Tie::File> version 0.97 is copyright (C) 2003 Mark Jason Dominus.
-
-This library is free software; you may redistribute it and/or modify
-it under the same terms as Perl itself.
-
-These terms are your choice of any of (1) the Perl Artistic Licence,
-or (2) version 2 of the GNU General Public License as published by the
-Free Software Foundation, or (3) any later version of the GNU General
-Public License.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library program; it should be in the file C<COPYING>.
-If not, write to the Free Software Foundation, Inc., 51 Franklin Street,
-Fifth Floor, Boston, MA 02110-1301, USA
-
-For licensing inquiries, contact the author at:
-
- Mark Jason Dominus
- 255 S. Warnock St.
- Philadelphia, PA 19107
-
-=head1 WARRANTY
-
-C<Tie::File> version 0.97 comes with ABSOLUTELY NO WARRANTY.
-For details, see the license.
-
-=head1 THANKS
-
-Gigantic thanks to Jarkko Hietaniemi, for agreeing to put this in the
-core when I hadn't written it yet, and for generally being helpful,
-supportive, and competent. (Usually the rule is "choose any one.")
-Also big thanks to Abhijit Menon-Sen for all of the same things.
-
-Special thanks to Craig Berry and Peter Prymmer (for VMS portability
-help), Randy Kobes (for Win32 portability help), Clinton Pierce and
-Autrijus Tang (for heroic eleventh-hour Win32 testing above and beyond
-the call of duty), Michael G Schwern (for testing advice), and the
-rest of the CPAN testers (for testing generally).
-
-Special thanks to Tels for suggesting several speed and memory
-optimizations.
-
-Additional thanks to:
-Edward Avis /
-Mattia Barbon /
-Tom Christiansen /
-Gerrit Haase /
-Gurusamy Sarathy /
-Jarkko Hietaniemi (again) /
-Nikola Knezevic /
-John Kominetz /
-Nick Ing-Simmons /
-Tassilo von Parseval /
-H. Dieter Pearcey /
-Slaven Rezic /
-Eric Roode /
-Peter Scott /
-Peter Somu /
-Autrijus Tang (again) /
-Tels (again) /
-Juerd Waalboer
-
-=head1 TODO
-
-More tests. (Stuff I didn't think of yet.)
-
-Paragraph mode?
-
-Fixed-length mode. Leave-blanks mode.
-
-Maybe an autolocking mode?
-
-For many common uses of the module, the read cache is a liability.
-For example, a program that inserts a single record, or that scans the
-file once, will have a cache hit rate of zero. This suggests a major
-optimization: The cache should be initially disabled. Here's a hybrid
-approach: Initially, the cache is disabled, but the cache code
-maintains statistics about how high the hit rate would be *if* it were
-enabled. When it sees the hit rate get high enough, it enables
-itself. The STAT comments in this code are the beginning of an
-implementation of this.
-
-Record locking with fcntl()? Then the module might support an undo
-log and get real transactions. What a tour de force that would be.
-
-Keeping track of the highest cached record. This would allow reads-in-a-row
-to skip the cache lookup faster (if reading from 1..N with empty cache at
-start, the last cached value will be always N-1).
-
-More tests.
-
-=cut
-
Deleted: trunk/contrib/perl/lib/Tie/Memoize.pm
===================================================================
--- trunk/contrib/perl/lib/Tie/Memoize.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/Tie/Memoize.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,128 +0,0 @@
-use strict;
-package Tie::Memoize;
-use Tie::Hash;
-our @ISA = 'Tie::ExtraHash';
-our $VERSION = '1.1';
-
-our $exists_token = \undef;
-
-sub croak {require Carp; goto &Carp::croak}
-
-# Format: [0: STORAGE, 1: EXISTS-CACHE, 2: FETCH_function;
-# 3: EXISTS_function, 4: DATA, 5: EXISTS_different ]
-
-sub FETCH {
- my ($h,$key) = ($_[0][0], $_[1]);
- my $res = $h->{$key};
- return $res if defined $res; # Shortcut if accessible
- return $res if exists $h->{$key}; # Accessible, but undef
- my $cache = $_[0][1]{$key};
- return if defined $cache and not $cache; # Known to not exist
- my @res = $_[0][2]->($key, $_[0][4]); # Autoload
- $_[0][1]{$key} = 0, return unless @res; # Cache non-existence
- delete $_[0][1]{$key}; # Clear existence cache, not needed any more
- $_[0][0]{$key} = $res[0]; # Store data and return
-}
-
-sub EXISTS {
- my ($a,$key) = (shift, shift);
- return 1 if exists $a->[0]{$key}; # Have data
- my $cache = $a->[1]{$key};
- return $cache if defined $cache; # Existence cache
- my @res = $a->[3]($key,$a->[4]);
- $a->[1]{$key} = 0, return unless @res; # Cache non-existence
- # Now we know it exists
- return ($a->[1]{$key} = 1) if $a->[5]; # Only existence reported
- # Now know the value
- $a->[0]{$key} = $res[0]; # Store data
- return 1
-}
-
-sub TIEHASH {
- croak 'syntax: tie %hash, \'Tie::AutoLoad\', \&fetch_subr' if @_ < 2;
- croak 'syntax: tie %hash, \'Tie::AutoLoad\', \&fetch_subr, $data, \&exists_subr, \%data_cache, \%existence_cache' if @_ > 6;
- push @_, undef if @_ < 3; # Data
- push @_, $_[1] if @_ < 4; # exists
- push @_, {} while @_ < 6; # initial value and caches
- bless [ @_[4,5,1,3,2], $_[1] ne $_[3]], $_[0]
-}
-
-1;
-
-=head1 NAME
-
-Tie::Memoize - add data to hash when needed
-
-=head1 SYNOPSIS
-
- require Tie::Memoize;
- tie %hash, 'Tie::Memoize',
- \&fetch, # The rest is optional
- $DATA, \&exists,
- {%ini_value}, {%ini_existence};
-
-=head1 DESCRIPTION
-
-This package allows a tied hash to autoload its values on the first access,
-and to use the cached value on the following accesses.
-
-Only read-accesses (via fetching the value or C<exists>) result in calls to
-the functions; the modify-accesses are performed as on a normal hash.
-
-The required arguments during C<tie> are the hash, the package, and
-the reference to the C<FETCH>ing function. The optional arguments are
-an arbitrary scalar $data, the reference to the C<EXISTS> function,
-and initial values of the hash and of the existence cache.
-
-Both the C<FETCH>ing function and the C<EXISTS> functions have the
-same signature: the arguments are C<$key, $data>; $data is the same
-value as given as argument during tie()ing. Both functions should
-return an empty list if the value does not exist. If C<EXISTS>
-function is different from the C<FETCH>ing function, it should return
-a TRUE value on success. The C<FETCH>ing function should return the
-intended value if the key is valid.
-
-=head1 Inheriting from B<Tie::Memoize>
-
-The structure of the tied() data is an array reference with elements
-
- 0: cache of known values
- 1: cache of known existence of keys
- 2: FETCH function
- 3: EXISTS function
- 4: $data
-
-The rest is for internal usage of this package. In particular, if
-TIEHASH is overwritten, it should call SUPER::TIEHASH.
-
-=head1 EXAMPLE
-
- sub slurp {
- my ($key, $dir) = shift;
- open my $h, '<', "$dir/$key" or return;
- local $/; <$h> # slurp it all
- }
- sub exists { my ($key, $dir) = shift; return -f "$dir/$key" }
-
- tie %hash, 'Tie::Memoize', \&slurp, $directory, \&exists,
- { fake_file1 => $content1, fake_file2 => $content2 },
- { pretend_does_not_exists => 0, known_to_exist => 1 };
-
-This example treats the slightly modified contents of $directory as a
-hash. The modifications are that the keys F<fake_file1> and
-F<fake_file2> fetch values $content1 and $content2, and
-F<pretend_does_not_exists> will never be accessed. Additionally, the
-existence of F<known_to_exist> is never checked (so if it does not
-exists when its content is needed, the user of %hash may be confused).
-
-=head1 BUGS
-
-FIRSTKEY and NEXTKEY methods go through the keys which were already read,
-not all the possible keys of the hash.
-
-=head1 AUTHOR
-
-Ilya Zakharevich L<mailto:perl-module-hash-memoize at ilyaz.org>.
-
-=cut
-
Deleted: trunk/contrib/perl/lib/Tie/Memoize.t
===================================================================
--- trunk/contrib/perl/lib/Tie/Memoize.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/Tie/Memoize.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,61 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use strict;
-use Tie::Memoize;
-use Test::More tests => 28;
-use File::Spec;
-
-sub slurp {
- my ($key, $dir) = @_;
- open my $h, '<', File::Spec->catfile($dir, $key) or return;
- local $/;
- <$h> # slurp it all
-}
-sub exists { my ($key, $dir) = @_; return -f File::Spec->catfile($dir, $key) }
-
-my $directory = File::Spec->catdir(File::Spec->updir, 'lib');
-
-tie my %hash, 'Tie::Memoize', \&slurp, $directory, \&exists,
- { fake_file1 => 123, fake_file2 => 45678 },
- { 'strict.pm' => 0, known_to_exist => 1 };
-
-ok(not exists $hash{'strict.pm'});
-ok(exists $hash{known_to_exist});
-ok($hash{fake_file2} eq 45678);
-ok($hash{fake_file1} eq 123);
-ok(exists $hash{known_to_exist});
-ok(not exists $hash{'strict.pm'});
-ok(not defined $hash{fake_file3});
-ok(not defined $hash{known_to_exist});
-ok(not exists $hash{known_to_exist});
-ok(not exists $hash{'strict.pm'});
-my $c = slurp('constant.pm', $directory);
-ok($c);
-ok($hash{'constant.pm'} eq $c);
-ok($hash{'constant.pm'} eq $c);
-ok(not exists $hash{'strict.pm'});
-ok(exists $hash{'blib.pm'});
-
-untie %hash;
-
-tie %hash, 'Tie::Memoize', \&slurp, $directory;
-
-ok(exists $hash{'strict.pm'}, 'existing file');
-ok(not exists $hash{fake_file2});
-ok(not exists $hash{fake_file1});
-ok(not exists $hash{known_to_exist});
-ok(exists $hash{'strict.pm'}, 'existing file again');
-ok(not defined $hash{fake_file3});
-ok(not defined $hash{known_to_exist});
-ok(not exists $hash{known_to_exist});
-ok(exists $hash{'strict.pm'}, 'existing file again');
-ok($hash{'constant.pm'} eq $c);
-ok($hash{'constant.pm'} eq $c);
-ok(exists $hash{'strict.pm'}, 'existing file again');
-ok(exists $hash{'blib.pm'}, 'another existing file');
-
Deleted: trunk/contrib/perl/lib/Tie/RefHash.pm
===================================================================
--- trunk/contrib/perl/lib/Tie/RefHash.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/Tie/RefHash.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,274 +0,0 @@
-package Tie::RefHash;
-
-use vars qw/$VERSION/;
-
-$VERSION = "1.38";
-
-use 5.005;
-
-=head1 NAME
-
-Tie::RefHash - use references as hash keys
-
-=head1 SYNOPSIS
-
- require 5.004;
- use Tie::RefHash;
- tie HASHVARIABLE, 'Tie::RefHash', LIST;
- tie HASHVARIABLE, 'Tie::RefHash::Nestable', LIST;
-
- untie HASHVARIABLE;
-
-=head1 DESCRIPTION
-
-This module provides the ability to use references as hash keys if you
-first C<tie> the hash variable to this module. Normally, only the
-keys of the tied hash itself are preserved as references; to use
-references as keys in hashes-of-hashes, use Tie::RefHash::Nestable,
-included as part of Tie::RefHash.
-
-It is implemented using the standard perl TIEHASH interface. Please
-see the C<tie> entry in perlfunc(1) and perltie(1) for more information.
-
-The Nestable version works by looking for hash references being stored
-and converting them to tied hashes so that they too can have
-references as keys. This will happen without warning whenever you
-store a reference to one of your own hashes in the tied hash.
-
-=head1 EXAMPLE
-
- use Tie::RefHash;
- tie %h, 'Tie::RefHash';
- $a = [];
- $b = {};
- $c = \*main;
- $d = \"gunk";
- $e = sub { 'foo' };
- %h = ($a => 1, $b => 2, $c => 3, $d => 4, $e => 5);
- $a->[0] = 'foo';
- $b->{foo} = 'bar';
- for (keys %h) {
- print ref($_), "\n";
- }
-
- tie %h, 'Tie::RefHash::Nestable';
- $h{$a}->{$b} = 1;
- for (keys %h, keys %{$h{$a}}) {
- print ref($_), "\n";
- }
-
-=head1 THREAD SUPPORT
-
-L<Tie::RefHash> fully supports threading using the C<CLONE> method.
-
-=head1 STORABLE SUPPORT
-
-L<Storable> hooks are provided for semantically correct serialization and
-cloning of tied refhashes.
-
-=head1 RELIC SUPPORT
-
-This version of Tie::RefHash seems to no longer work with 5.004. This has not
-been throughly investigated. Patches welcome ;-)
-
-=head1 MAINTAINER
-
-Yuval Kogman E<lt>nothingmuch at woobling.orgE<gt>
-
-=head1 AUTHOR
-
-Gurusamy Sarathy gsar at activestate.com
-
-'Nestable' by Ed Avis ed at membled.com
-
-=head1 SEE ALSO
-
-perl(1), perlfunc(1), perltie(1)
-
-=cut
-
-use Tie::Hash;
-use vars '@ISA';
- at ISA = qw(Tie::Hash);
-use strict;
-use Carp qw/croak/;
-
-BEGIN {
- local $@;
- # determine whether we need to take care of threads
- use Config ();
- my $usethreads = $Config::Config{usethreads}; # && exists $INC{"threads.pm"}
- *_HAS_THREADS = $usethreads ? sub () { 1 } : sub () { 0 };
- *_HAS_SCALAR_UTIL = eval { require Scalar::Util; 1 } ? sub () { 1 } : sub () { 0 };
- *_HAS_WEAKEN = defined(&Scalar::Util::weaken) ? sub () { 1 } : sub () { 0 };
-}
-
-BEGIN {
- # create a refaddr function
-
- local $@;
-
- if ( _HAS_SCALAR_UTIL ) {
- Scalar::Util->import("refaddr");
- } else {
- require overload;
-
- *refaddr = sub {
- if ( overload::StrVal($_[0]) =~ /\( 0x ([a-zA-Z0-9]+) \)$/x) {
- return $1;
- } else {
- die "couldn't parse StrVal: " . overload::StrVal($_[0]);
- }
- };
- }
-}
-
-my (@thread_object_registry, $count); # used by the CLONE method to rehash the keys after their refaddr changed
-
-sub TIEHASH {
- my $c = shift;
- my $s = [];
- bless $s, $c;
- while (@_) {
- $s->STORE(shift, shift);
- }
-
- if (_HAS_THREADS ) {
-
- if ( _HAS_WEAKEN ) {
- # remember the object so that we can rekey it on CLONE
- push @thread_object_registry, $s;
- # but make this a weak reference, so that there are no leaks
- Scalar::Util::weaken( $thread_object_registry[-1] );
-
- if ( ++$count > 1000 ) {
- # this ensures we don't fill up with a huge array dead weakrefs
- @thread_object_registry = grep { defined } @thread_object_registry;
- $count = 0;
- }
- } else {
- $count++; # used in the warning
- }
- }
-
- return $s;
-}
-
-my $storable_format_version = join("/", __PACKAGE__, "0.01");
-
-sub STORABLE_freeze {
- my ( $self, $is_cloning ) = @_;
- my ( $refs, $reg ) = @$self;
- return ( $storable_format_version, [ values %$refs ], $reg );
-}
-
-sub STORABLE_thaw {
- my ( $self, $is_cloning, $version, $refs, $reg ) = @_;
- croak "incompatible versions of Tie::RefHash between freeze and thaw"
- unless $version eq $storable_format_version;
-
- @$self = ( {}, $reg );
- $self->_reindex_keys( $refs );
-}
-
-sub CLONE {
- my $pkg = shift;
-
- if ( $count and not _HAS_WEAKEN ) {
- warn "Tie::RefHash is not threadsafe without Scalar::Util::weaken";
- }
-
- # when the thread has been cloned all the objects need to be updated.
- # dead weakrefs are undefined, so we filter them out
- @thread_object_registry = grep { defined && do { $_->_reindex_keys; 1 } } @thread_object_registry;
- $count = 0; # we just cleaned up
-}
-
-sub _reindex_keys {
- my ( $self, $extra_keys ) = @_;
- # rehash all the ref keys based on their new StrVal
- %{ $self->[0] } = map { refaddr($_->[0]) => $_ } (values(%{ $self->[0] }), @{ $extra_keys || [] });
-}
-
-sub FETCH {
- my($s, $k) = @_;
- if (ref $k) {
- my $kstr = refaddr($k);
- if (defined $s->[0]{$kstr}) {
- $s->[0]{$kstr}[1];
- }
- else {
- undef;
- }
- }
- else {
- $s->[1]{$k};
- }
-}
-
-sub STORE {
- my($s, $k, $v) = @_;
- if (ref $k) {
- $s->[0]{refaddr($k)} = [$k, $v];
- }
- else {
- $s->[1]{$k} = $v;
- }
- $v;
-}
-
-sub DELETE {
- my($s, $k) = @_;
- (ref $k)
- ? (delete($s->[0]{refaddr($k)}) || [])->[1]
- : delete($s->[1]{$k});
-}
-
-sub EXISTS {
- my($s, $k) = @_;
- (ref $k) ? exists($s->[0]{refaddr($k)}) : exists($s->[1]{$k});
-}
-
-sub FIRSTKEY {
- my $s = shift;
- keys %{$s->[0]}; # reset iterator
- keys %{$s->[1]}; # reset iterator
- $s->[2] = 0; # flag for iteration, see NEXTKEY
- $s->NEXTKEY;
-}
-
-sub NEXTKEY {
- my $s = shift;
- my ($k, $v);
- if (!$s->[2]) {
- if (($k, $v) = each %{$s->[0]}) {
- return $v->[0];
- }
- else {
- $s->[2] = 1;
- }
- }
- return each %{$s->[1]};
-}
-
-sub CLEAR {
- my $s = shift;
- $s->[2] = 0;
- %{$s->[0]} = ();
- %{$s->[1]} = ();
-}
-
-package Tie::RefHash::Nestable;
-use vars '@ISA';
- at ISA = 'Tie::RefHash';
-
-sub STORE {
- my($s, $k, $v) = @_;
- if (ref($v) eq 'HASH' and not tied %$v) {
- my @elems = %$v;
- tie %$v, ref($s), @elems;
- }
- $s->SUPER::STORE($k, $v);
-}
-
-1;
Deleted: trunk/contrib/perl/lib/Time/Local.pm
===================================================================
--- trunk/contrib/perl/lib/Time/Local.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/Time/Local.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,371 +0,0 @@
-package Time::Local;
-
-require Exporter;
-use Carp;
-use Config;
-use strict;
-use integer;
-
-use vars qw( $VERSION @ISA @EXPORT @EXPORT_OK );
-$VERSION = '1.1901';
-
- at ISA = qw( Exporter );
- at EXPORT = qw( timegm timelocal );
- at EXPORT_OK = qw( timegm_nocheck timelocal_nocheck );
-
-my @MonthDays = ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
-
-# Determine breakpoint for rolling century
-my $ThisYear = ( localtime() )[5];
-my $Breakpoint = ( $ThisYear + 50 ) % 100;
-my $NextCentury = $ThisYear - $ThisYear % 100;
-$NextCentury += 100 if $Breakpoint < 50;
-my $Century = $NextCentury - 100;
-my $SecOff = 0;
-
-my ( %Options, %Cheat );
-
-use constant SECS_PER_MINUTE => 60;
-use constant SECS_PER_HOUR => 3600;
-use constant SECS_PER_DAY => 86400;
-
-my $MaxInt;
-if ( $^O eq 'MacOS' ) {
- # time_t is unsigned...
- $MaxInt = ( 1 << ( 8 * $Config{ivsize} ) ) - 1;
-}
-else {
- $MaxInt = ( ( 1 << ( 8 * $Config{ivsize} - 2 ) ) - 1 ) * 2 + 1;
-}
-
-my $MaxDay = int( ( $MaxInt - ( SECS_PER_DAY / 2 ) ) / SECS_PER_DAY ) - 1;
-
-# Determine the EPOC day for this machine
-my $Epoc = 0;
-if ( $^O eq 'vos' ) {
- # work around posix-977 -- VOS doesn't handle dates in the range
- # 1970-1980.
- $Epoc = _daygm( 0, 0, 0, 1, 0, 70, 4, 0 );
-}
-elsif ( $^O eq 'MacOS' ) {
- $MaxDay *=2 if $^O eq 'MacOS'; # time_t unsigned ... quick hack?
- # MacOS time() is seconds since 1 Jan 1904, localtime
- # so we need to calculate an offset to apply later
- $Epoc = 693901;
- $SecOff = timelocal( localtime(0)) - timelocal( gmtime(0) ) ;
- $Epoc += _daygm( gmtime(0) );
-}
-else {
- $Epoc = _daygm( gmtime(0) );
-}
-
-%Cheat = (); # clear the cache as epoc has changed
-
-sub _daygm {
-
- # This is written in such a byzantine way in order to avoid
- # lexical variables and sub calls, for speed
- return $_[3] + (
- $Cheat{ pack( 'ss', @_[ 4, 5 ] ) } ||= do {
- my $month = ( $_[4] + 10 ) % 12;
- my $year = ( $_[5] + 1900 ) - ( $month / 10 );
-
- ( ( 365 * $year )
- + ( $year / 4 )
- - ( $year / 100 )
- + ( $year / 400 )
- + ( ( ( $month * 306 ) + 5 ) / 10 )
- )
- - $Epoc;
- }
- );
-}
-
-sub _timegm {
- my $sec =
- $SecOff + $_[0] + ( SECS_PER_MINUTE * $_[1] ) + ( SECS_PER_HOUR * $_[2] );
-
- return $sec + ( SECS_PER_DAY * &_daygm );
-}
-
-sub timegm {
- my ( $sec, $min, $hour, $mday, $month, $year ) = @_;
-
- if ( $year >= 1000 ) {
- $year -= 1900;
- }
- elsif ( $year < 100 and $year >= 0 ) {
- $year += ( $year > $Breakpoint ) ? $Century : $NextCentury;
- }
-
- unless ( $Options{no_range_check} ) {
- croak "Month '$month' out of range 0..11"
- if $month > 11
- or $month < 0;
-
- my $md = $MonthDays[$month];
- ++$md
- if $month == 1 && _is_leap_year( $year + 1900 );
-
- croak "Day '$mday' out of range 1..$md" if $mday > $md or $mday < 1;
- croak "Hour '$hour' out of range 0..23" if $hour > 23 or $hour < 0;
- croak "Minute '$min' out of range 0..59" if $min > 59 or $min < 0;
- croak "Second '$sec' out of range 0..59" if $sec > 59 or $sec < 0;
- }
-
- my $days = _daygm( undef, undef, undef, $mday, $month, $year );
-
- unless ($Options{no_range_check} or abs($days) < $MaxDay) {
- my $msg = '';
- $msg .= "Day too big - $days > $MaxDay\n" if $days > $MaxDay;
-
- $year += 1900;
- $msg .= "Cannot handle date ($sec, $min, $hour, $mday, $month, $year)";
-
- croak $msg;
- }
-
- return $sec
- + $SecOff
- + ( SECS_PER_MINUTE * $min )
- + ( SECS_PER_HOUR * $hour )
- + ( SECS_PER_DAY * $days );
-}
-
-sub _is_leap_year {
- return 0 if $_[0] % 4;
- return 1 if $_[0] % 100;
- return 0 if $_[0] % 400;
-
- return 1;
-}
-
-sub timegm_nocheck {
- local $Options{no_range_check} = 1;
- return &timegm;
-}
-
-sub timelocal {
- my $ref_t = &timegm;
- my $loc_for_ref_t = _timegm( localtime($ref_t) );
-
- my $zone_off = $loc_for_ref_t - $ref_t
- or return $loc_for_ref_t;
-
- # Adjust for timezone
- my $loc_t = $ref_t - $zone_off;
-
- # Are we close to a DST change or are we done
- my $dst_off = $ref_t - _timegm( localtime($loc_t) );
-
- # If this evaluates to true, it means that the value in $loc_t is
- # the _second_ hour after a DST change where the local time moves
- # backward.
- if ( ! $dst_off &&
- ( ( $ref_t - SECS_PER_HOUR ) - _timegm( localtime( $loc_t - SECS_PER_HOUR ) ) < 0 )
- ) {
- return $loc_t - SECS_PER_HOUR;
- }
-
- # Adjust for DST change
- $loc_t += $dst_off;
-
- return $loc_t if $dst_off > 0;
-
- # If the original date was a non-extent gap in a forward DST jump,
- # we should now have the wrong answer - undo the DST adjustment
- my ( $s, $m, $h ) = localtime($loc_t);
- $loc_t -= $dst_off if $s != $_[0] || $m != $_[1] || $h != $_[2];
-
- return $loc_t;
-}
-
-sub timelocal_nocheck {
- local $Options{no_range_check} = 1;
- return &timelocal;
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-Time::Local - efficiently compute time from local and GMT time
-
-=head1 SYNOPSIS
-
- $time = timelocal($sec,$min,$hour,$mday,$mon,$year);
- $time = timegm($sec,$min,$hour,$mday,$mon,$year);
-
-=head1 DESCRIPTION
-
-This module provides functions that are the inverse of built-in perl
-functions C<localtime()> and C<gmtime()>. They accept a date as a
-six-element array, and return the corresponding C<time(2)> value in
-seconds since the system epoch (Midnight, January 1, 1970 GMT on Unix,
-for example). This value can be positive or negative, though POSIX
-only requires support for positive values, so dates before the
-system's epoch may not work on all operating systems.
-
-It is worth drawing particular attention to the expected ranges for
-the values provided. The value for the day of the month is the actual
-day (ie 1..31), while the month is the number of months since January
-(0..11). This is consistent with the values returned from
-C<localtime()> and C<gmtime()>.
-
-=head1 FUNCTIONS
-
-=head2 C<timelocal()> and C<timegm()>
-
-This module exports two functions by default, C<timelocal()> and
-C<timegm()>.
-
-The C<timelocal()> and C<timegm()> functions perform range checking on
-the input $sec, $min, $hour, $mday, and $mon values by default.
-
-=head2 C<timelocal_nocheck()> and C<timegm_nocheck()>
-
-If you are working with data you know to be valid, you can speed your
-code up by using the "nocheck" variants, C<timelocal_nocheck()> and
-C<timegm_nocheck()>. These variants must be explicitly imported.
-
- use Time::Local 'timelocal_nocheck';
-
- # The 365th day of 1999
- print scalar localtime timelocal_nocheck 0,0,0,365,0,99;
-
-If you supply data which is not valid (month 27, second 1,000) the
-results will be unpredictable (so don't do that).
-
-=head2 Year Value Interpretation
-
-Strictly speaking, the year should be specified in a form consistent
-with C<localtime()>, i.e. the offset from 1900. In order to make the
-interpretation of the year easier for humans, however, who are more
-accustomed to seeing years as two-digit or four-digit values, the
-following conventions are followed:
-
-=over 4
-
-=item *
-
-Years greater than 999 are interpreted as being the actual year,
-rather than the offset from 1900. Thus, 1964 would indicate the year
-Martin Luther King won the Nobel prize, not the year 3864.
-
-=item *
-
-Years in the range 100..999 are interpreted as offset from 1900, so
-that 112 indicates 2012. This rule also applies to years less than
-zero (but see note below regarding date range).
-
-=item *
-
-Years in the range 0..99 are interpreted as shorthand for years in the
-rolling "current century," defined as 50 years on either side of the
-current year. Thus, today, in 1999, 0 would refer to 2000, and 45 to
-2045, but 55 would refer to 1955. Twenty years from now, 55 would
-instead refer to 2055. This is messy, but matches the way people
-currently think about two digit dates. Whenever possible, use an
-absolute four digit year instead.
-
-=back
-
-The scheme above allows interpretation of a wide range of dates,
-particularly if 4-digit years are used.
-
-=head2 Limits of time_t
-
-The range of dates that can be actually be handled depends on the size
-of C<time_t> (usually a signed integer) on the given
-platform. Currently, this is 32 bits for most systems, yielding an
-approximate range from Dec 1901 to Jan 2038.
-
-Both C<timelocal()> and C<timegm()> croak if given dates outside the
-supported range.
-
-=head2 Ambiguous Local Times (DST)
-
-Because of DST changes, there are many time zones where the same local
-time occurs for two different GMT times on the same day. For example,
-in the "Europe/Paris" time zone, the local time of 2001-10-28 02:30:00
-can represent either 2001-10-28 00:30:00 GMT, B<or> 2001-10-28
-01:30:00 GMT.
-
-When given an ambiguous local time, the timelocal() function should
-always return the epoch for the I<earlier> of the two possible GMT
-times.
-
-=head2 Non-Existent Local Times (DST)
-
-When a DST change causes a locale clock to skip one hour forward,
-there will be an hour's worth of local times that don't exist. Again,
-for the "Europe/Paris" time zone, the local clock jumped from
-2001-03-25 01:59:59 to 2001-03-25 03:00:00.
-
-If the C<timelocal()> function is given a non-existent local time, it
-will simply return an epoch value for the time one hour later.
-
-=head2 Negative Epoch Values
-
-Negative epoch (C<time_t>) values are not officially supported by the
-POSIX standards, so this module's tests do not test them. On some
-systems, they are known not to work. These include MacOS (pre-OSX) and
-Win32.
-
-On systems which do support negative epoch values, this module should
-be able to cope with dates before the start of the epoch, down the
-minimum value of time_t for the system.
-
-=head1 IMPLEMENTATION
-
-These routines are quite efficient and yet are always guaranteed to
-agree with C<localtime()> and C<gmtime()>. We manage this by caching
-the start times of any months we've seen before. If we know the start
-time of the month, we can always calculate any time within the month.
-The start times are calculated using a mathematical formula. Unlike
-other algorithms that do multiple calls to C<gmtime()>.
-
-The C<timelocal()> function is implemented using the same cache. We
-just assume that we're translating a GMT time, and then fudge it when
-we're done for the timezone and daylight savings arguments. Note that
-the timezone is evaluated for each date because countries occasionally
-change their official timezones. Assuming that C<localtime()> corrects
-for these changes, this routine will also be correct.
-
-=head1 BUGS
-
-The whole scheme for interpreting two-digit years can be considered a
-bug.
-
-=head1 SUPPORT
-
-Support for this module is provided via the datetime at perl.org email
-list. See http://lists.perl.org/ for more details.
-
-Please submit bugs to the CPAN RT system at
-http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Time-Local or via email
-at bug-time-local at rt.cpan.org.
-
-=head1 COPYRIGHT
-
-Copyright (c) 1997-2003 Graham Barr, 2003-2007 David Rolsky. All
-rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-The full text of the license can be found in the LICENSE file included
-with this module.
-
-=head1 AUTHOR
-
-This module is based on a Perl 4 library, timelocal.pl, that was
-included with Perl 4.036, and was most likely written by Tom
-Christiansen.
-
-The current version was written by Graham Barr.
-
-It is now being maintained separately from the Perl core by Dave
-Rolsky, <autarch at urth.org>.
-
-=cut
Deleted: trunk/contrib/perl/lib/Time/Local.t
===================================================================
--- trunk/contrib/perl/lib/Time/Local.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/Time/Local.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,283 +0,0 @@
-#!./perl
-
-BEGIN {
- if ($ENV{PERL_CORE}){
- chdir('t') if -d 't';
- @INC = ('.', '../lib');
- }
-}
-
-use strict;
-
-use Config;
-use Test::More;
-use Time::Local;
-
-# Set up time values to test
-my @time =
- (
- #year,mon,day,hour,min,sec
- [1970, 1, 2, 00, 00, 00],
- [1980, 2, 28, 12, 00, 00],
- [1980, 2, 29, 12, 00, 00],
- [1999, 12, 31, 23, 59, 59],
- [2000, 1, 1, 00, 00, 00],
- [2010, 10, 12, 14, 13, 12],
- # leap day
- [2020, 2, 29, 12, 59, 59],
- [2030, 7, 4, 17, 07, 06],
-# The following test fails on a surprising number of systems
-# so it is commented out. The end of the Epoch for a 32-bit signed
-# implementation of time_t should be Jan 19, 2038 03:14:07 UTC.
-# [2038, 1, 17, 23, 59, 59], # last full day in any tz
- );
-
-my @bad_time =
- (
- # month too large
- [1995, 13, 01, 01, 01, 01],
- # day too large
- [1995, 02, 30, 01, 01, 01],
- # hour too large
- [1995, 02, 10, 25, 01, 01],
- # minute too large
- [1995, 02, 10, 01, 60, 01],
- # second too large
- [1995, 02, 10, 01, 01, 60],
- );
-
-my @neg_time =
- (
- # test negative epochs for systems that handle it
- [ 1969, 12, 31, 16, 59, 59 ],
- [ 1950, 04, 12, 9, 30, 31 ],
- );
-
-# Leap year tests
-my @years =
- (
- [ 1900 => 0 ],
- [ 1947 => 0 ],
- [ 1996 => 1 ],
- [ 2000 => 1 ],
- [ 2100 => 0 ],
- );
-
-# Use 3 days before the start of the epoch because with Borland on
-# Win32 it will work for -3600 _if_ your time zone is +01:00 (or
-# greater).
-my $neg_epoch_ok = defined ((localtime(-259200))[0]) ? 1 : 0;
-
-# use vmsish 'time' makes for oddness around the Unix epoch
-if ($^O eq 'VMS') {
- $time[0][2]++;
- $neg_epoch_ok = 0; # time_t is unsigned
-}
-
-my $epoch_is_64 = eval { $Config{ivsize} == 8 && ( gmtime 2**40 )[5] == 34912 };
-
-my $tests = (@time * 12);
-$tests += @neg_time * 12;
-$tests += @bad_time;
-$tests += @years;
-$tests += 23;
-
-plan tests => $tests;
-
-for (@time, @neg_time) {
- my($year, $mon, $mday, $hour, $min, $sec) = @$_;
- $year -= 1900;
- $mon--;
-
- SKIP: {
- skip '1970 test on VOS fails.', 12
- if $^O eq 'vos' && $year == 70;
- skip 'this platform does not support negative epochs.', 12
- if $year < 70 && ! $neg_epoch_ok;
-
- {
- my $year_in = $year < 70 ? $year + 1900 : $year;
- my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in);
-
- my($s,$m,$h,$D,$M,$Y) = localtime($time);
-
- is($s, $sec, "timelocal second for @$_");
- is($m, $min, "timelocal minute for @$_");
- is($h, $hour, "timelocal hour for @$_");
- is($D, $mday, "timelocal day for @$_");
- is($M, $mon, "timelocal month for @$_");
- is($Y, $year, "timelocal year for @$_");
- }
-
- {
- my $year_in = $year < 70 ? $year + 1900 : $year;
- my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in);
-
- my($s,$m,$h,$D,$M,$Y) = gmtime($time);
-
- is($s, $sec, "timegm second for @$_");
- is($m, $min, "timegm minute for @$_");
- is($h, $hour, "timegm hour for @$_");
- is($D, $mday, "timegm day for @$_");
- is($M, $mon, "timegm month for @$_");
- is($Y, $year, "timegm year for @$_");
- }
- }
-}
-
-for (@bad_time) {
- my($year, $mon, $mday, $hour, $min, $sec) = @$_;
- $year -= 1900;
- $mon--;
-
- eval { timegm($sec,$min,$hour,$mday,$mon,$year) };
-
- like($@, qr/.*out of range.*/, 'invalid time caused an error');
-}
-
-{
- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600,
- 'one hour difference between two calls to timelocal');
-
- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600,
- 'one day difference between two calls to timelocal');
-
- # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days)
- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600,
- '60 day difference between two calls to timegm');
-}
-
-# bugid #19393
-# At a DST transition, the clock skips forward, eg from 01:59:59 to
-# 03:00:00. In this case, 02:00:00 is an invalid time, and should be
-# treated like 03:00:00 rather than 01:00:00 - negative zone offsets used
-# to do the latter
-{
- my $hour = (localtime(timelocal(0, 0, 2, 7, 3, 102)))[2];
- # testers in US/Pacific should get 3,
- # other testers should get 2
- ok($hour == 2 || $hour == 3, 'hour should be 2 or 3');
-}
-
-for my $p (@years) {
- my ( $year, $is_leap_year ) = @$p;
-
- my $string = $is_leap_year ? 'is' : 'is not';
- is( Time::Local::_is_leap_year($year), $is_leap_year,
- "$year $string a leap year" );
-}
-
-SKIP:
-{
- skip 'this platform does not support negative epochs.', 6
- unless $neg_epoch_ok;
-
- eval { timegm(0,0,0,29,1,1900) };
- like($@, qr/Day '29' out of range 1\.\.28/,
- 'does not accept leap day in 1900');
-
- eval { timegm(0,0,0,29,1,200) };
- like($@, qr/Day '29' out of range 1\.\.28/,
- 'does not accept leap day in 2100 (year passed as 200)');
-
- eval { timegm(0,0,0,29,1,0) };
- is($@, '', 'no error with leap day of 2000 (year passed as 0)');
-
- eval { timegm(0,0,0,29,1,1904) };
- is($@, '', 'no error with leap day of 1904');
-
- eval { timegm(0,0,0,29,1,4) };
- is($@, '', 'no error with leap day of 2004 (year passed as 4)');
-
- eval { timegm(0,0,0,29,1,96) };
- is($@, '', 'no error with leap day of 1996 (year passed as 96)');
-}
-
-SKIP:
-{
- skip 'These tests require a system with 64-bit time_t.', 3
- unless $epoch_is_64;
-
- is( timegm( 8, 14, 3, 19, 0, ( 1900 + 138 ) ), 2**31,
- 'can call timegm for 2**31 epoch seconds' );
- is( timegm( 16, 28, 6, 7, 1, ( 1900 + 206 ) ), 2**32,
- 'can call timegm for 2**32 epoch seconds (on a 64-bit system)' );
- is( timegm( 16, 36, 0, 20, 1, ( 34912 + 1900 ) ), 2**40,
- 'can call timegm for 2**40 epoch seconds (on a 64-bit system)' );
-}
-
-SKIP:
-{
- skip 'These tests only run for the package maintainer.', 8
- unless $ENV{MAINTAINER};
-
- require POSIX;
-
- local $ENV{TZ} = 'Europe/Vienna';
- POSIX::tzset();
-
- # 2001-10-28 02:30:00 - could be either summer or standard time,
- # prefer earlier of the two, in this case summer
- my $time = timelocal(0, 30, 2, 28, 9, 101);
- is($time, 1004229000,
- 'timelocal prefers earlier epoch in the presence of a DST change');
-
- local $ENV{TZ} = 'America/Chicago';
- POSIX::tzset();
-
- # Same local time in America/Chicago. There is a transition here
- # as well.
- $time = timelocal(0, 30, 1, 28, 9, 101);
- is($time, 1004250600,
- 'timelocal prefers earlier epoch in the presence of a DST change');
-
- $time = timelocal(0, 30, 2, 1, 3, 101);
- is($time, 986113800,
- 'timelocal for non-existent time gives you the time one hour later');
-
- local $ENV{TZ} = 'Australia/Sydney';
- POSIX::tzset();
- # 2001-03-25 02:30:00 in Australia/Sydney. This is the transition
- # _to_ summer time. The southern hemisphere transitions are
- # opposite those of the northern.
- $time = timelocal(0, 30, 2, 25, 2, 101);
- is($time, 985447800,
- 'timelocal prefers earlier epoch in the presence of a DST change');
-
- $time = timelocal(0, 30, 2, 28, 9, 101);
- is($time, 1004200200,
- 'timelocal for non-existent time gives you the time one hour later');
-
- local $ENV{TZ} = 'Europe/London';
- POSIX::tzset();
- $time = timelocal( localtime(1111917720) );
- is($time, 1111917720,
- 'timelocal for round trip bug on date of DST change for Europe/London');
-
- # There is no 1:00 AM on this date, as it leaps forward to
- # 2:00 on the DST change - this should return 2:00 per the
- # docs.
- is( ( localtime( timelocal( 0, 0, 1, 27, 2, 2005 ) ) )[2], 2,
- 'hour is 2 when given 1:00 AM on Europe/London date change' );
-
- is( ( localtime( timelocal( 0, 0, 2, 27, 2, 2005 ) ) )[2], 2,
- 'hour is 2 when given 2:00 AM on Europe/London date change' );
-}
-
-SKIP:
-{
- skip 'These tests are only run when $ENV{PERL_CORE} is true.', 2
- unless $ENV{PERL_CORE};
-
- {
- package test;
- require 'timelocal.pl';
-
- # need to get ok() from main package
- ::is(timegm(0,0,0,1,0,80), main::timegm(0,0,0,1,0,80),
- 'timegm in timelocal.pl');
-
- ::is(timelocal(1,2,3,4,5,88), main::timelocal(1,2,3,4,5,88),
- 'timelocal in timelocal.pl');
- }
-}
Deleted: trunk/contrib/perl/lib/Unicode/Collate.pm
===================================================================
--- trunk/contrib/perl/lib/Unicode/Collate.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/Unicode/Collate.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1877 +0,0 @@
-package Unicode::Collate;
-
-BEGIN {
- unless ("A" eq pack('U', 0x41)) {
- die "Unicode::Collate cannot stringify a Unicode code point\n";
- }
-}
-
-use 5.006;
-use strict;
-use warnings;
-use Carp;
-use File::Spec;
-
-no warnings 'utf8';
-
-our $VERSION = '0.52';
-our $PACKAGE = __PACKAGE__;
-
-my @Path = qw(Unicode Collate);
-my $KeyFile = "allkeys.txt";
-
-# Perl's boolean
-use constant TRUE => 1;
-use constant FALSE => "";
-use constant NOMATCHPOS => -1;
-
-# A coderef to get combining class imported from Unicode::Normalize
-# (i.e. \&Unicode::Normalize::getCombinClass).
-# This is also used as a HAS_UNICODE_NORMALIZE flag.
-my $CVgetCombinClass;
-
-# Supported Levels
-use constant MinLevel => 1;
-use constant MaxLevel => 4;
-
-# Minimum weights at level 2 and 3, respectively
-use constant Min2Wt => 0x20;
-use constant Min3Wt => 0x02;
-
-# Shifted weight at 4th level
-use constant Shift4Wt => 0xFFFF;
-
-# A boolean for Variable and 16-bit weights at 4 levels of Collation Element
-# PROBLEM: The Default Unicode Collation Element Table
-# has weights over 0xFFFF at the 4th level.
-# The tie-breaking in the variable weights
-# other than "shift" (as well as "shift-trimmed") is unreliable.
-use constant VCE_TEMPLATE => 'Cn4';
-
-# A sort key: 16-bit weights
-# See also the PROBLEM on VCE_TEMPLATE above.
-use constant KEY_TEMPLATE => 'n*';
-
-# Level separator in a sort key:
-# i.e. pack(KEY_TEMPLATE, 0)
-use constant LEVEL_SEP => "\0\0";
-
-# As Unicode code point separator for hash keys.
-# A joined code point string (denoted by JCPS below)
-# like "65;768" is used for internal processing
-# instead of Perl's Unicode string like "\x41\x{300}",
-# as the native code point is different from the Unicode code point
-# on EBCDIC platform.
-# This character must not be included in any stringified
-# representation of an integer.
-use constant CODE_SEP => ';';
-
-# boolean values of variable weights
-use constant NON_VAR => 0; # Non-Variable character
-use constant VAR => 1; # Variable character
-
-# specific code points
-use constant Hangul_LBase => 0x1100;
-use constant Hangul_LIni => 0x1100;
-use constant Hangul_LFin => 0x1159;
-use constant Hangul_LFill => 0x115F;
-use constant Hangul_VBase => 0x1161;
-use constant Hangul_VIni => 0x1160; # from Vowel Filler
-use constant Hangul_VFin => 0x11A2;
-use constant Hangul_TBase => 0x11A7; # from "no-final" codepoint
-use constant Hangul_TIni => 0x11A8;
-use constant Hangul_TFin => 0x11F9;
-use constant Hangul_TCount => 28;
-use constant Hangul_NCount => 588;
-use constant Hangul_SBase => 0xAC00;
-use constant Hangul_SIni => 0xAC00;
-use constant Hangul_SFin => 0xD7A3;
-use constant CJK_UidIni => 0x4E00;
-use constant CJK_UidFin => 0x9FA5;
-use constant CJK_UidF41 => 0x9FBB;
-use constant CJK_ExtAIni => 0x3400;
-use constant CJK_ExtAFin => 0x4DB5;
-use constant CJK_ExtBIni => 0x20000;
-use constant CJK_ExtBFin => 0x2A6D6;
-use constant BMP_Max => 0xFFFF;
-
-# Logical_Order_Exception in PropList.txt
-my $DefaultRearrange = [ 0x0E40..0x0E44, 0x0EC0..0x0EC4 ];
-
-sub UCA_Version { "14" }
-
-sub Base_Unicode_Version { "4.1.0" }
-
-######
-
-sub pack_U {
- return pack('U*', @_);
-}
-
-sub unpack_U {
- return unpack('U*', shift(@_).pack('U*'));
-}
-
-######
-
-my (%VariableOK);
- at VariableOK{ qw/
- blanked non-ignorable shifted shift-trimmed
- / } = (); # keys lowercased
-
-our @ChangeOK = qw/
- alternate backwards level normalization rearrange
- katakana_before_hiragana upper_before_lower
- overrideHangul overrideCJK preprocess UCA_Version
- hangul_terminator variable
- /;
-
-our @ChangeNG = qw/
- entry mapping table maxlength
- ignoreChar ignoreName undefChar undefName variableTable
- versionTable alternateTable backwardsTable forwardsTable rearrangeTable
- derivCode normCode rearrangeHash
- backwardsFlag
- /;
-# The hash key 'ignored' is deleted at v 0.21.
-# The hash key 'isShift' is deleted at v 0.23.
-# The hash key 'combining' is deleted at v 0.24.
-# The hash key 'entries' is deleted at v 0.30.
-# The hash key 'L3_ignorable' is deleted at v 0.40.
-
-sub version {
- my $self = shift;
- return $self->{versionTable} || 'unknown';
-}
-
-my (%ChangeOK, %ChangeNG);
- at ChangeOK{ @ChangeOK } = ();
- at ChangeNG{ @ChangeNG } = ();
-
-sub change {
- my $self = shift;
- my %hash = @_;
- my %old;
- if (exists $hash{variable} && exists $hash{alternate}) {
- delete $hash{alternate};
- }
- elsif (!exists $hash{variable} && exists $hash{alternate}) {
- $hash{variable} = $hash{alternate};
- }
- foreach my $k (keys %hash) {
- if (exists $ChangeOK{$k}) {
- $old{$k} = $self->{$k};
- $self->{$k} = $hash{$k};
- }
- elsif (exists $ChangeNG{$k}) {
- croak "change of $k via change() is not allowed!";
- }
- # else => ignored
- }
- $self->checkCollator();
- return wantarray ? %old : $self;
-}
-
-sub _checkLevel {
- my $level = shift;
- my $key = shift; # 'level' or 'backwards'
- MinLevel <= $level or croak sprintf
- "Illegal level %d (in value for key '%s') lower than %d.",
- $level, $key, MinLevel;
- $level <= MaxLevel or croak sprintf
- "Unsupported level %d (in value for key '%s') higher than %d.",
- $level, $key, MaxLevel;
-}
-
-my %DerivCode = (
- 8 => \&_derivCE_8,
- 9 => \&_derivCE_9,
- 11 => \&_derivCE_9, # 11 == 9
- 14 => \&_derivCE_14,
-);
-
-sub checkCollator {
- my $self = shift;
- _checkLevel($self->{level}, "level");
-
- $self->{derivCode} = $DerivCode{ $self->{UCA_Version} }
- or croak "Illegal UCA version (passed $self->{UCA_Version}).";
-
- $self->{variable} ||= $self->{alternate} || $self->{variableTable} ||
- $self->{alternateTable} || 'shifted';
- $self->{variable} = $self->{alternate} = lc($self->{variable});
- exists $VariableOK{ $self->{variable} }
- or croak "$PACKAGE unknown variable parameter name: $self->{variable}";
-
- if (! defined $self->{backwards}) {
- $self->{backwardsFlag} = 0;
- }
- elsif (! ref $self->{backwards}) {
- _checkLevel($self->{backwards}, "backwards");
- $self->{backwardsFlag} = 1 << $self->{backwards};
- }
- else {
- my %level;
- $self->{backwardsFlag} = 0;
- for my $b (@{ $self->{backwards} }) {
- _checkLevel($b, "backwards");
- $level{$b} = 1;
- }
- for my $v (sort keys %level) {
- $self->{backwardsFlag} += 1 << $v;
- }
- }
-
- defined $self->{rearrange} or $self->{rearrange} = [];
- ref $self->{rearrange}
- or croak "$PACKAGE: list for rearrangement must be store in ARRAYREF";
-
- # keys of $self->{rearrangeHash} are $self->{rearrange}.
- $self->{rearrangeHash} = undef;
-
- if (@{ $self->{rearrange} }) {
- @{ $self->{rearrangeHash} }{ @{ $self->{rearrange} } } = ();
- }
-
- $self->{normCode} = undef;
-
- if (defined $self->{normalization}) {
- eval { require Unicode::Normalize };
- $@ and croak "Unicode::Normalize is required to normalize strings";
-
- $CVgetCombinClass ||= \&Unicode::Normalize::getCombinClass;
-
- if ($self->{normalization} =~ /^(?:NF)D\z/) { # tweak for default
- $self->{normCode} = \&Unicode::Normalize::NFD;
- }
- elsif ($self->{normalization} ne 'prenormalized') {
- my $norm = $self->{normalization};
- $self->{normCode} = sub {
- Unicode::Normalize::normalize($norm, shift);
- };
- eval { $self->{normCode}->("") }; # try
- $@ and croak "$PACKAGE unknown normalization form name: $norm";
- }
- }
- return;
-}
-
-sub new
-{
- my $class = shift;
- my $self = bless { @_ }, $class;
-
- # If undef is passed explicitly, no file is read.
- $self->{table} = $KeyFile if ! exists $self->{table};
- $self->read_table() if defined $self->{table};
-
- if ($self->{entry}) {
- while ($self->{entry} =~ /([^\n]+)/g) {
- $self->parseEntry($1);
- }
- }
-
- $self->{level} ||= MaxLevel;
- $self->{UCA_Version} ||= UCA_Version();
-
- $self->{overrideHangul} = FALSE
- if ! exists $self->{overrideHangul};
- $self->{overrideCJK} = FALSE
- if ! exists $self->{overrideCJK};
- $self->{normalization} = 'NFD'
- if ! exists $self->{normalization};
- $self->{rearrange} = $self->{rearrangeTable} ||
- ($self->{UCA_Version} <= 11 ? $DefaultRearrange : [])
- if ! exists $self->{rearrange};
- $self->{backwards} = $self->{backwardsTable}
- if ! exists $self->{backwards};
-
- $self->checkCollator();
-
- return $self;
-}
-
-sub read_table {
- my $self = shift;
-
- my($f, $fh);
- foreach my $d (@INC) {
- $f = File::Spec->catfile($d, @Path, $self->{table});
- last if open($fh, $f);
- $f = undef;
- }
- if (!defined $f) {
- $f = File::Spec->catfile(@Path, $self->{table});
- croak("$PACKAGE: Can't locate $f in \@INC (\@INC contains: @INC)");
- }
-
- while (my $line = <$fh>) {
- next if $line =~ /^\s*#/;
- unless ($line =~ s/^\s*\@//) {
- $self->parseEntry($line);
- next;
- }
-
- # matched ^\s*\@
- if ($line =~ /^version\s*(\S*)/) {
- $self->{versionTable} ||= $1;
- }
- elsif ($line =~ /^variable\s+(\S*)/) { # since UTS #10-9
- $self->{variableTable} ||= $1;
- }
- elsif ($line =~ /^alternate\s+(\S*)/) { # till UTS #10-8
- $self->{alternateTable} ||= $1;
- }
- elsif ($line =~ /^backwards\s+(\S*)/) {
- push @{ $self->{backwardsTable} }, $1;
- }
- elsif ($line =~ /^forwards\s+(\S*)/) { # parhaps no use
- push @{ $self->{forwardsTable} }, $1;
- }
- elsif ($line =~ /^rearrange\s+(.*)/) { # (\S*) is NG
- push @{ $self->{rearrangeTable} }, _getHexArray($1);
- }
- }
- close $fh;
-}
-
-
-##
-## get $line, parse it, and write an entry in $self
-##
-sub parseEntry
-{
- my $self = shift;
- my $line = shift;
- my($name, $entry, @uv, @key);
-
- return if $line !~ /^\s*[0-9A-Fa-f]/;
-
- # removes comment and gets name
- $name = $1
- if $line =~ s/[#%]\s*(.*)//;
- return if defined $self->{undefName} && $name =~ /$self->{undefName}/;
-
- # gets element
- my($e, $k) = split /;/, $line;
- croak "Wrong Entry: <charList> must be separated by ';' from <collElement>"
- if ! $k;
-
- @uv = _getHexArray($e);
- return if !@uv;
-
- $entry = join(CODE_SEP, @uv); # in JCPS
-
- if (defined $self->{undefChar} || defined $self->{ignoreChar}) {
- my $ele = pack_U(@uv);
-
- # regarded as if it were not entried in the table
- return
- if defined $self->{undefChar} && $ele =~ /$self->{undefChar}/;
-
- # replaced as completely ignorable
- $k = '[.0000.0000.0000.0000]'
- if defined $self->{ignoreChar} && $ele =~ /$self->{ignoreChar}/;
- }
-
- # replaced as completely ignorable
- $k = '[.0000.0000.0000.0000]'
- if defined $self->{ignoreName} && $name =~ /$self->{ignoreName}/;
-
- my $is_L3_ignorable = TRUE;
-
- foreach my $arr ($k =~ /\[([^\[\]]+)\]/g) { # SPACEs allowed
- my $var = $arr =~ /\*/; # exactly /^\*/ but be lenient.
- my @wt = _getHexArray($arr);
- push @key, pack(VCE_TEMPLATE, $var, @wt);
- $is_L3_ignorable = FALSE
- if $wt[0] || $wt[1] || $wt[2];
- # Conformance Test for 3.1.1 and 4.0.0 shows Level 3 ignorable
- # is completely ignorable.
- # For expansion, an entry $is_L3_ignorable
- # if and only if "all" CEs are [.0000.0000.0000].
- }
-
- $self->{mapping}{$entry} = $is_L3_ignorable ? [] : \@key;
-
- if (@uv > 1) {
- (!$self->{maxlength}{$uv[0]} || $self->{maxlength}{$uv[0]} < @uv)
- and $self->{maxlength}{$uv[0]} = @uv;
- }
-}
-
-
-##
-## VCE = _varCE(variable term, VCE)
-##
-sub _varCE
-{
- my $vbl = shift;
- my $vce = shift;
- if ($vbl eq 'non-ignorable') {
- return $vce;
- }
- my ($var, @wt) = unpack VCE_TEMPLATE, $vce;
-
- if ($var) {
- return pack(VCE_TEMPLATE, $var, 0, 0, 0,
- $vbl eq 'blanked' ? $wt[3] : $wt[0]);
- }
- elsif ($vbl eq 'blanked') {
- return $vce;
- }
- else {
- return pack(VCE_TEMPLATE, $var, @wt[0..2],
- $vbl eq 'shifted' && $wt[0]+$wt[1]+$wt[2] ? Shift4Wt : 0);
- }
-}
-
-sub viewSortKey
-{
- my $self = shift;
- $self->visualizeSortKey($self->getSortKey(@_));
-}
-
-sub visualizeSortKey
-{
- my $self = shift;
- my $view = join " ", map sprintf("%04X", $_), unpack(KEY_TEMPLATE, shift);
-
- if ($self->{UCA_Version} <= 8) {
- $view =~ s/ ?0000 ?/|/g;
- } else {
- $view =~ s/\b0000\b/|/g;
- }
- return "[$view]";
-}
-
-
-##
-## arrayref of JCPS = splitEnt(string to be collated)
-## arrayref of arrayref[JCPS, ini_pos, fin_pos] = splitEnt(string, true)
-##
-sub splitEnt
-{
- my $self = shift;
- my $wLen = $_[1];
-
- my $code = $self->{preprocess};
- my $norm = $self->{normCode};
- my $map = $self->{mapping};
- my $max = $self->{maxlength};
- my $reH = $self->{rearrangeHash};
- my $ver9 = $self->{UCA_Version} >= 9 && $self->{UCA_Version} <= 11;
-
- my ($str, @buf);
-
- if ($wLen) {
- $code and croak "Preprocess breaks character positions. "
- . "Don't use with index(), match(), etc.";
- $norm and croak "Normalization breaks character positions. "
- . "Don't use with index(), match(), etc.";
- $str = $_[0];
- }
- else {
- $str = $_[0];
- $str = &$code($str) if ref $code;
- $str = &$norm($str) if ref $norm;
- }
-
- # get array of Unicode code point of string.
- my @src = unpack_U($str);
-
- # rearrangement:
- # Character positions are not kept if rearranged,
- # then neglected if $wLen is true.
- if ($reH && ! $wLen) {
- for (my $i = 0; $i < @src; $i++) {
- if (exists $reH->{ $src[$i] } && $i + 1 < @src) {
- ($src[$i], $src[$i+1]) = ($src[$i+1], $src[$i]);
- $i++;
- }
- }
- }
-
- # remove a code point marked as a completely ignorable.
- for (my $i = 0; $i < @src; $i++) {
- $src[$i] = undef
- if _isIllegal($src[$i]) || ($ver9 &&
- $map->{ $src[$i] } && @{ $map->{ $src[$i] } } == 0);
- }
-
- for (my $i = 0; $i < @src; $i++) {
- my $jcps = $src[$i];
-
- # skip removed code point
- if (! defined $jcps) {
- if ($wLen && @buf) {
- $buf[-1][2] = $i + 1;
- }
- next;
- }
-
- my $i_orig = $i;
-
- # find contraction
- if ($max->{$jcps}) {
- my $temp_jcps = $jcps;
- my $jcpsLen = 1;
- my $maxLen = $max->{$jcps};
-
- for (my $p = $i + 1; $jcpsLen < $maxLen && $p < @src; $p++) {
- next if ! defined $src[$p];
- $temp_jcps .= CODE_SEP . $src[$p];
- $jcpsLen++;
- if ($map->{$temp_jcps}) {
- $jcps = $temp_jcps;
- $i = $p;
- }
- }
-
- # not-contiguous contraction with Combining Char (cf. UTS#10, S2.1).
- # This process requires Unicode::Normalize.
- # If "normalization" is undef, here should be skipped *always*
- # (in spite of bool value of $CVgetCombinClass),
- # since canonical ordering cannot be expected.
- # Blocked combining character should not be contracted.
-
- if ($self->{normalization})
- # $self->{normCode} is false in the case of "prenormalized".
- {
- my $preCC = 0;
- my $curCC = 0;
-
- for (my $p = $i + 1; $p < @src; $p++) {
- next if ! defined $src[$p];
- $curCC = $CVgetCombinClass->($src[$p]);
- last unless $curCC;
- my $tail = CODE_SEP . $src[$p];
- if ($preCC != $curCC && $map->{$jcps.$tail}) {
- $jcps .= $tail;
- $src[$p] = undef;
- } else {
- $preCC = $curCC;
- }
- }
- }
- }
-
- # skip completely ignorable
- if ($map->{$jcps} && @{ $map->{$jcps} } == 0) {
- if ($wLen && @buf) {
- $buf[-1][2] = $i + 1;
- }
- next;
- }
-
- push @buf, $wLen ? [$jcps, $i_orig, $i + 1] : $jcps;
- }
- return \@buf;
-}
-
-
-##
-## list of VCE = getWt(JCPS)
-##
-sub getWt
-{
- my $self = shift;
- my $u = shift;
- my $vbl = $self->{variable};
- my $map = $self->{mapping};
- my $der = $self->{derivCode};
-
- return if !defined $u;
- return map(_varCE($vbl, $_), @{ $map->{$u} })
- if $map->{$u};
-
- # JCPS must not be a contraction, then it's a code point.
- if (Hangul_SIni <= $u && $u <= Hangul_SFin) {
- my $hang = $self->{overrideHangul};
- my @hangulCE;
- if ($hang) {
- @hangulCE = map(pack(VCE_TEMPLATE, NON_VAR, @$_), &$hang($u));
- }
- elsif (!defined $hang) {
- @hangulCE = $der->($u);
- }
- else {
- my $max = $self->{maxlength};
- my @decH = _decompHangul($u);
-
- if (@decH == 2) {
- my $contract = join(CODE_SEP, @decH);
- @decH = ($contract) if $map->{$contract};
- } else { # must be <@decH == 3>
- if ($max->{$decH[0]}) {
- my $contract = join(CODE_SEP, @decH);
- if ($map->{$contract}) {
- @decH = ($contract);
- } else {
- $contract = join(CODE_SEP, @decH[0,1]);
- $map->{$contract} and @decH = ($contract, $decH[2]);
- }
- # even if V's ignorable, LT contraction is not supported.
- # If such a situatution were required, NFD should be used.
- }
- if (@decH == 3 && $max->{$decH[1]}) {
- my $contract = join(CODE_SEP, @decH[1,2]);
- $map->{$contract} and @decH = ($decH[0], $contract);
- }
- }
-
- @hangulCE = map({
- $map->{$_} ? @{ $map->{$_} } : $der->($_);
- } @decH);
- }
- return map _varCE($vbl, $_), @hangulCE;
- }
- elsif (_isUIdeo($u, $self->{UCA_Version})) {
- my $cjk = $self->{overrideCJK};
- return map _varCE($vbl, $_),
- $cjk
- ? map(pack(VCE_TEMPLATE, NON_VAR, @$_), &$cjk($u))
- : defined $cjk && $self->{UCA_Version} <= 8 && $u < 0x10000
- ? _uideoCE_8($u)
- : $der->($u);
- }
- else {
- return map _varCE($vbl, $_), $der->($u);
- }
-}
-
-
-##
-## string sortkey = getSortKey(string arg)
-##
-sub getSortKey
-{
- my $self = shift;
- my $lev = $self->{level};
- my $rEnt = $self->splitEnt(shift); # get an arrayref of JCPS
- my $v2i = $self->{UCA_Version} >= 9 &&
- $self->{variable} ne 'non-ignorable';
-
- my @buf; # weight arrays
- if ($self->{hangul_terminator}) {
- my $preHST = '';
- foreach my $jcps (@$rEnt) {
- # weird things like VL, TL-contraction are not considered!
- my $curHST = '';
- foreach my $u (split /;/, $jcps) {
- $curHST .= getHST($u);
- }
- if ($preHST && !$curHST || # hangul before non-hangul
- $preHST =~ /L\z/ && $curHST =~ /^T/ ||
- $preHST =~ /V\z/ && $curHST =~ /^L/ ||
- $preHST =~ /T\z/ && $curHST =~ /^[LV]/) {
-
- push @buf, $self->getWtHangulTerm();
- }
- $preHST = $curHST;
-
- push @buf, $self->getWt($jcps);
- }
- $preHST # end at hangul
- and push @buf, $self->getWtHangulTerm();
- }
- else {
- foreach my $jcps (@$rEnt) {
- push @buf, $self->getWt($jcps);
- }
- }
-
- # make sort key
- my @ret = ([],[],[],[]);
- my $last_is_variable;
-
- foreach my $vwt (@buf) {
- my($var, @wt) = unpack(VCE_TEMPLATE, $vwt);
-
- # "Ignorable (L1, L2) after Variable" since track. v. 9
- if ($v2i) {
- if ($var) {
- $last_is_variable = TRUE;
- }
- elsif (!$wt[0]) { # ignorable
- next if $last_is_variable;
- }
- else {
- $last_is_variable = FALSE;
- }
- }
- foreach my $v (0..$lev-1) {
- 0 < $wt[$v] and push @{ $ret[$v] }, $wt[$v];
- }
- }
-
- # modification of tertiary weights
- if ($self->{upper_before_lower}) {
- foreach my $w (@{ $ret[2] }) {
- if (0x8 <= $w && $w <= 0xC) { $w -= 6 } # lower
- elsif (0x2 <= $w && $w <= 0x6) { $w += 6 } # upper
- elsif ($w == 0x1C) { $w += 1 } # square upper
- elsif ($w == 0x1D) { $w -= 1 } # square lower
- }
- }
- if ($self->{katakana_before_hiragana}) {
- foreach my $w (@{ $ret[2] }) {
- if (0x0F <= $w && $w <= 0x13) { $w -= 2 } # katakana
- elsif (0x0D <= $w && $w <= 0x0E) { $w += 5 } # hiragana
- }
- }
-
- if ($self->{backwardsFlag}) {
- for (my $v = MinLevel; $v <= MaxLevel; $v++) {
- if ($self->{backwardsFlag} & (1 << $v)) {
- @{ $ret[$v-1] } = reverse @{ $ret[$v-1] };
- }
- }
- }
-
- join LEVEL_SEP, map pack(KEY_TEMPLATE, @$_), @ret;
-}
-
-
-##
-## int compare = cmp(string a, string b)
-##
-sub cmp { $_[0]->getSortKey($_[1]) cmp $_[0]->getSortKey($_[2]) }
-sub eq { $_[0]->getSortKey($_[1]) eq $_[0]->getSortKey($_[2]) }
-sub ne { $_[0]->getSortKey($_[1]) ne $_[0]->getSortKey($_[2]) }
-sub lt { $_[0]->getSortKey($_[1]) lt $_[0]->getSortKey($_[2]) }
-sub le { $_[0]->getSortKey($_[1]) le $_[0]->getSortKey($_[2]) }
-sub gt { $_[0]->getSortKey($_[1]) gt $_[0]->getSortKey($_[2]) }
-sub ge { $_[0]->getSortKey($_[1]) ge $_[0]->getSortKey($_[2]) }
-
-##
-## list[strings] sorted = sort(list[strings] arg)
-##
-sub sort {
- my $obj = shift;
- return
- map { $_->[1] }
- sort{ $a->[0] cmp $b->[0] }
- map [ $obj->getSortKey($_), $_ ], @_;
-}
-
-
-sub _derivCE_14 {
- my $u = shift;
- my $base =
- (CJK_UidIni <= $u && $u <= CJK_UidF41)
- ? 0xFB40 : # CJK
- (CJK_ExtAIni <= $u && $u <= CJK_ExtAFin ||
- CJK_ExtBIni <= $u && $u <= CJK_ExtBFin)
- ? 0xFB80 # CJK ext.
- : 0xFBC0; # others
-
- my $aaaa = $base + ($u >> 15);
- my $bbbb = ($u & 0x7FFF) | 0x8000;
- return
- pack(VCE_TEMPLATE, NON_VAR, $aaaa, Min2Wt, Min3Wt, $u),
- pack(VCE_TEMPLATE, NON_VAR, $bbbb, 0, 0, $u);
-}
-
-sub _derivCE_9 {
- my $u = shift;
- my $base =
- (CJK_UidIni <= $u && $u <= CJK_UidFin)
- ? 0xFB40 : # CJK
- (CJK_ExtAIni <= $u && $u <= CJK_ExtAFin ||
- CJK_ExtBIni <= $u && $u <= CJK_ExtBFin)
- ? 0xFB80 # CJK ext.
- : 0xFBC0; # others
-
- my $aaaa = $base + ($u >> 15);
- my $bbbb = ($u & 0x7FFF) | 0x8000;
- return
- pack(VCE_TEMPLATE, NON_VAR, $aaaa, Min2Wt, Min3Wt, $u),
- pack(VCE_TEMPLATE, NON_VAR, $bbbb, 0, 0, $u);
-}
-
-sub _derivCE_8 {
- my $code = shift;
- my $aaaa = 0xFF80 + ($code >> 15);
- my $bbbb = ($code & 0x7FFF) | 0x8000;
- return
- pack(VCE_TEMPLATE, NON_VAR, $aaaa, 2, 1, $code),
- pack(VCE_TEMPLATE, NON_VAR, $bbbb, 0, 0, $code);
-}
-
-sub _uideoCE_8 {
- my $u = shift;
- return pack(VCE_TEMPLATE, NON_VAR, $u, Min2Wt, Min3Wt, $u);
-}
-
-sub _isUIdeo {
- my ($u, $uca_vers) = @_;
- return(
- (CJK_UidIni <= $u &&
- ($uca_vers >= 14 ? ( $u <= CJK_UidF41) : ($u <= CJK_UidFin)))
- ||
- (CJK_ExtAIni <= $u && $u <= CJK_ExtAFin)
- ||
- (CJK_ExtBIni <= $u && $u <= CJK_ExtBFin)
- );
-}
-
-
-sub getWtHangulTerm {
- my $self = shift;
- return _varCE($self->{variable},
- pack(VCE_TEMPLATE, NON_VAR, $self->{hangul_terminator}, 0,0,0));
-}
-
-
-##
-## "hhhh hhhh hhhh" to (dddd, dddd, dddd)
-##
-sub _getHexArray { map hex, $_[0] =~ /([0-9a-fA-F]+)/g }
-
-#
-# $code *must* be in Hangul syllable.
-# Check it before you enter here.
-#
-sub _decompHangul {
- my $code = shift;
- my $si = $code - Hangul_SBase;
- my $li = int( $si / Hangul_NCount);
- my $vi = int(($si % Hangul_NCount) / Hangul_TCount);
- my $ti = $si % Hangul_TCount;
- return (
- Hangul_LBase + $li,
- Hangul_VBase + $vi,
- $ti ? (Hangul_TBase + $ti) : (),
- );
-}
-
-sub _isIllegal {
- my $code = shift;
- return ! defined $code # removed
- || ($code < 0 || 0x10FFFF < $code) # out of range
- || (($code & 0xFFFE) == 0xFFFE) # ??FFF[EF] (cf. utf8.c)
- || (0xD800 <= $code && $code <= 0xDFFF) # unpaired surrogates
- || (0xFDD0 <= $code && $code <= 0xFDEF) # other non-characters
- ;
-}
-
-# Hangul Syllable Type
-sub getHST {
- my $u = shift;
- return
- Hangul_LIni <= $u && $u <= Hangul_LFin || $u == Hangul_LFill ? "L" :
- Hangul_VIni <= $u && $u <= Hangul_VFin ? "V" :
- Hangul_TIni <= $u && $u <= Hangul_TFin ? "T" :
- Hangul_SIni <= $u && $u <= Hangul_SFin ?
- ($u - Hangul_SBase) % Hangul_TCount ? "LVT" : "LV" : "";
-}
-
-
-##
-## bool _nonIgnorAtLevel(arrayref weights, int level)
-##
-sub _nonIgnorAtLevel($$)
-{
- my $wt = shift;
- return if ! defined $wt;
- my $lv = shift;
- return grep($wt->[$_-1] != 0, MinLevel..$lv) ? TRUE : FALSE;
-}
-
-##
-## bool _eqArray(
-## arrayref of arrayref[weights] source,
-## arrayref of arrayref[weights] substr,
-## int level)
-## * comparison of graphemes vs graphemes.
-## @$source >= @$substr must be true (check it before call this);
-##
-sub _eqArray($$$)
-{
- my $source = shift;
- my $substr = shift;
- my $lev = shift;
-
- for my $g (0..@$substr-1){
- # Do the $g'th graphemes have the same number of AV weigths?
- return if @{ $source->[$g] } != @{ $substr->[$g] };
-
- for my $w (0..@{ $substr->[$g] }-1) {
- for my $v (0..$lev-1) {
- return if $source->[$g][$w][$v] != $substr->[$g][$w][$v];
- }
- }
- }
- return 1;
-}
-
-##
-## (int position, int length)
-## int position = index(string, substring, position, [undoc'ed grobal])
-##
-## With "grobal" (only for the list context),
-## returns list of arrayref[position, length].
-##
-sub index
-{
- my $self = shift;
- my $str = shift;
- my $len = length($str);
- my $subE = $self->splitEnt(shift);
- my $pos = @_ ? shift : 0;
- $pos = 0 if $pos < 0;
- my $grob = shift;
-
- my $lev = $self->{level};
- my $v2i = $self->{UCA_Version} >= 9 &&
- $self->{variable} ne 'non-ignorable';
-
- if (! @$subE) {
- my $temp = $pos <= 0 ? 0 : $len <= $pos ? $len : $pos;
- return $grob
- ? map([$_, 0], $temp..$len)
- : wantarray ? ($temp,0) : $temp;
- }
- $len < $pos
- and return wantarray ? () : NOMATCHPOS;
- my $strE = $self->splitEnt($pos ? substr($str, $pos) : $str, TRUE);
- @$strE
- or return wantarray ? () : NOMATCHPOS;
-
- my(@strWt, @iniPos, @finPos, @subWt, @g_ret);
-
- my $last_is_variable;
- for my $vwt (map $self->getWt($_), @$subE) {
- my($var, @wt) = unpack(VCE_TEMPLATE, $vwt);
- my $to_be_pushed = _nonIgnorAtLevel(\@wt,$lev);
-
- # "Ignorable (L1, L2) after Variable" since track. v. 9
- if ($v2i) {
- if ($var) {
- $last_is_variable = TRUE;
- }
- elsif (!$wt[0]) { # ignorable
- $to_be_pushed = FALSE if $last_is_variable;
- }
- else {
- $last_is_variable = FALSE;
- }
- }
-
- if (@subWt && !$var && !$wt[0]) {
- push @{ $subWt[-1] }, \@wt if $to_be_pushed;
- } else {
- push @subWt, [ \@wt ];
- }
- }
-
- my $count = 0;
- my $end = @$strE - 1;
-
- $last_is_variable = FALSE; # reuse
- for (my $i = 0; $i <= $end; ) { # no $i++
- my $found_base = 0;
-
- # fetch a grapheme
- while ($i <= $end && $found_base == 0) {
- for my $vwt ($self->getWt($strE->[$i][0])) {
- my($var, @wt) = unpack(VCE_TEMPLATE, $vwt);
- my $to_be_pushed = _nonIgnorAtLevel(\@wt,$lev);
-
- # "Ignorable (L1, L2) after Variable" since track. v. 9
- if ($v2i) {
- if ($var) {
- $last_is_variable = TRUE;
- }
- elsif (!$wt[0]) { # ignorable
- $to_be_pushed = FALSE if $last_is_variable;
- }
- else {
- $last_is_variable = FALSE;
- }
- }
-
- if (@strWt && !$var && !$wt[0]) {
- push @{ $strWt[-1] }, \@wt if $to_be_pushed;
- $finPos[-1] = $strE->[$i][2];
- } elsif ($to_be_pushed) {
- push @strWt, [ \@wt ];
- push @iniPos, $found_base ? NOMATCHPOS : $strE->[$i][1];
- $finPos[-1] = NOMATCHPOS if $found_base;
- push @finPos, $strE->[$i][2];
- $found_base++;
- }
- # else ===> no-op
- }
- $i++;
- }
-
- # try to match
- while ( @strWt > @subWt || (@strWt == @subWt && $i > $end) ) {
- if ($iniPos[0] != NOMATCHPOS &&
- $finPos[$#subWt] != NOMATCHPOS &&
- _eqArray(\@strWt, \@subWt, $lev)) {
- my $temp = $iniPos[0] + $pos;
-
- if ($grob) {
- push @g_ret, [$temp, $finPos[$#subWt] - $iniPos[0]];
- splice @strWt, 0, $#subWt;
- splice @iniPos, 0, $#subWt;
- splice @finPos, 0, $#subWt;
- }
- else {
- return wantarray
- ? ($temp, $finPos[$#subWt] - $iniPos[0])
- : $temp;
- }
- }
- shift @strWt;
- shift @iniPos;
- shift @finPos;
- }
- }
-
- return $grob
- ? @g_ret
- : wantarray ? () : NOMATCHPOS;
-}
-
-##
-## scalarref to matching part = match(string, substring)
-##
-sub match
-{
- my $self = shift;
- if (my($pos,$len) = $self->index($_[0], $_[1])) {
- my $temp = substr($_[0], $pos, $len);
- return wantarray ? $temp : \$temp;
- # An lvalue ref \substr should be avoided,
- # since its value is affected by modification of its referent.
- }
- else {
- return;
- }
-}
-
-##
-## arrayref matching parts = gmatch(string, substring)
-##
-sub gmatch
-{
- my $self = shift;
- my $str = shift;
- my $sub = shift;
- return map substr($str, $_->[0], $_->[1]),
- $self->index($str, $sub, 0, 'g');
-}
-
-##
-## bool subst'ed = subst(string, substring, replace)
-##
-sub subst
-{
- my $self = shift;
- my $code = ref $_[2] eq 'CODE' ? $_[2] : FALSE;
-
- if (my($pos,$len) = $self->index($_[0], $_[1])) {
- if ($code) {
- my $mat = substr($_[0], $pos, $len);
- substr($_[0], $pos, $len, $code->($mat));
- } else {
- substr($_[0], $pos, $len, $_[2]);
- }
- return TRUE;
- }
- else {
- return FALSE;
- }
-}
-
-##
-## int count = gsubst(string, substring, replace)
-##
-sub gsubst
-{
- my $self = shift;
- my $code = ref $_[2] eq 'CODE' ? $_[2] : FALSE;
- my $cnt = 0;
-
- # Replacement is carried out from the end, then use reverse.
- for my $pos_len (reverse $self->index($_[0], $_[1], 0, 'g')) {
- if ($code) {
- my $mat = substr($_[0], $pos_len->[0], $pos_len->[1]);
- substr($_[0], $pos_len->[0], $pos_len->[1], $code->($mat));
- } else {
- substr($_[0], $pos_len->[0], $pos_len->[1], $_[2]);
- }
- $cnt++;
- }
- return $cnt;
-}
-
-1;
-__END__
-
-=head1 NAME
-
-Unicode::Collate - Unicode Collation Algorithm
-
-=head1 SYNOPSIS
-
- use Unicode::Collate;
-
- #construct
- $Collator = Unicode::Collate->new(%tailoring);
-
- #sort
- @sorted = $Collator->sort(@not_sorted);
-
- #compare
- $result = $Collator->cmp($a, $b); # returns 1, 0, or -1.
-
- # If %tailoring is false (i.e. empty),
- # $Collator should do the default collation.
-
-=head1 DESCRIPTION
-
-This module is an implementation of Unicode Technical Standard #10
-(a.k.a. UTS #10) - Unicode Collation Algorithm (a.k.a. UCA).
-
-=head2 Constructor and Tailoring
-
-The C<new> method returns a collator object.
-
- $Collator = Unicode::Collate->new(
- UCA_Version => $UCA_Version,
- alternate => $alternate, # deprecated: use of 'variable' is recommended.
- backwards => $levelNumber, # or \@levelNumbers
- entry => $element,
- hangul_terminator => $term_primary_weight,
- ignoreName => qr/$ignoreName/,
- ignoreChar => qr/$ignoreChar/,
- katakana_before_hiragana => $bool,
- level => $collationLevel,
- normalization => $normalization_form,
- overrideCJK => \&overrideCJK,
- overrideHangul => \&overrideHangul,
- preprocess => \&preprocess,
- rearrange => \@charList,
- table => $filename,
- undefName => qr/$undefName/,
- undefChar => qr/$undefChar/,
- upper_before_lower => $bool,
- variable => $variable,
- );
-
-=over 4
-
-=item UCA_Version
-
-If the tracking version number of UCA is given,
-behavior of that tracking version is emulated on collating.
-If omitted, the return value of C<UCA_Version()> is used.
-C<UCA_Version()> should return the latest tracking version supported.
-
-The supported tracking version: 8, 9, 11, or 14.
-
- UCA Unicode Standard DUCET (@version)
- ---------------------------------------------------
- 8 3.1 3.0.1 (3.0.1d9)
- 9 3.1 with Corrigendum 3 3.1.1 (3.1.1)
- 11 4.0 4.0.0 (4.0.0)
- 14 4.1.0 4.1.0 (4.1.0)
-
-Note: Recent UTS #10 renames "Tracking Version" to "Revision."
-
-=item alternate
-
--- see 3.2.2 Alternate Weighting, version 8 of UTS #10
-
-For backward compatibility, C<alternate> (old name) can be used
-as an alias for C<variable>.
-
-=item backwards
-
--- see 3.1.2 French Accents, UTS #10.
-
- backwards => $levelNumber or \@levelNumbers
-
-Weights in reverse order; ex. level 2 (diacritic ordering) in French.
-If omitted, forwards at all the levels.
-
-=item entry
-
--- see 3.1 Linguistic Features; 3.2.1 File Format, UTS #10.
-
-If the same character (or a sequence of characters) exists
-in the collation element table through C<table>,
-mapping to collation elements is overrided.
-If it does not exist, the mapping is defined additionally.
-
- entry => <<'ENTRY', # for DUCET v4.0.0 (allkeys-4.0.0.txt)
-0063 0068 ; [.0E6A.0020.0002.0063] # ch
-0043 0068 ; [.0E6A.0020.0007.0043] # Ch
-0043 0048 ; [.0E6A.0020.0008.0043] # CH
-006C 006C ; [.0F4C.0020.0002.006C] # ll
-004C 006C ; [.0F4C.0020.0007.004C] # Ll
-004C 004C ; [.0F4C.0020.0008.004C] # LL
-00F1 ; [.0F7B.0020.0002.00F1] # n-tilde
-006E 0303 ; [.0F7B.0020.0002.00F1] # n-tilde
-00D1 ; [.0F7B.0020.0008.00D1] # N-tilde
-004E 0303 ; [.0F7B.0020.0008.00D1] # N-tilde
-ENTRY
-
- entry => <<'ENTRY', # for DUCET v4.0.0 (allkeys-4.0.0.txt)
-00E6 ; [.0E33.0020.0002.00E6][.0E8B.0020.0002.00E6] # ae ligature as <a><e>
-00C6 ; [.0E33.0020.0008.00C6][.0E8B.0020.0008.00C6] # AE ligature as <A><E>
-ENTRY
-
-B<NOTE:> The code point in the UCA file format (before C<';'>)
-B<must> be a Unicode code point (defined as hexadecimal),
-but not a native code point.
-So C<0063> must always denote C<U+0063>,
-but not a character of C<"\x63">.
-
-Weighting may vary depending on collation element table.
-So ensure the weights defined in C<entry> will be consistent with
-those in the collation element table loaded via C<table>.
-
-In DUCET v4.0.0, primary weight of C<C> is C<0E60>
-and that of C<D> is C<0E6D>. So setting primary weight of C<CH> to C<0E6A>
-(as a value between C<0E60> and C<0E6D>)
-makes ordering as C<C E<lt> CH E<lt> D>.
-Exactly speaking DUCET already has some characters between C<C> and C<D>:
-C<small capital C> (C<U+1D04>) with primary weight C<0E64>,
-C<c-hook/C-hook> (C<U+0188/U+0187>) with C<0E65>,
-and C<c-curl> (C<U+0255>) with C<0E69>.
-Then primary weight C<0E6A> for C<CH> makes C<CH>
-ordered between C<c-curl> and C<D>.
-
-=item hangul_terminator
-
--- see 7.1.4 Trailing Weights, UTS #10.
-
-If a true value is given (non-zero but should be positive),
-it will be added as a terminator primary weight to the end of
-every standard Hangul syllable. Secondary and any higher weights
-for terminator are set to zero.
-If the value is false or C<hangul_terminator> key does not exist,
-insertion of terminator weights will not be performed.
-
-Boundaries of Hangul syllables are determined
-according to conjoining Jamo behavior in F<the Unicode Standard>
-and F<HangulSyllableType.txt>.
-
-B<Implementation Note:>
-(1) For expansion mapping (Unicode character mapped
-to a sequence of collation elements), a terminator will not be added
-between collation elements, even if Hangul syllable boundary exists there.
-Addition of terminator is restricted to the next position
-to the last collation element.
-
-(2) Non-conjoining Hangul letters
-(Compatibility Jamo, halfwidth Jamo, and enclosed letters) are not
-automatically terminated with a terminator primary weight.
-These characters may need terminator included in a collation element
-table beforehand.
-
-=item ignoreChar
-
-=item ignoreName
-
--- see 3.2.2 Variable Weighting, UTS #10.
-
-Makes the entry in the table completely ignorable;
-i.e. as if the weights were zero at all level.
-
-Through C<ignoreChar>, any character matching C<qr/$ignoreChar/>
-will be ignored. Through C<ignoreName>, any character whose name
-(given in the C<table> file as a comment) matches C<qr/$ignoreName/>
-will be ignored.
-
-E.g. when 'a' and 'e' are ignorable,
-'element' is equal to 'lament' (or 'lmnt').
-
-=item katakana_before_hiragana
-
--- see 7.3.1 Tertiary Weight Table, UTS #10.
-
-By default, hiragana is before katakana.
-If the parameter is made true, this is reversed.
-
-B<NOTE>: This parameter simplemindedly assumes that any hiragana/katakana
-distinctions must occur in level 3, and their weights at level 3 must be
-same as those mentioned in 7.3.1, UTS #10.
-If you define your collation elements which violate this requirement,
-this parameter does not work validly.
-
-=item level
-
--- see 4.3 Form Sort Key, UTS #10.
-
-Set the maximum level.
-Any higher levels than the specified one are ignored.
-
- Level 1: alphabetic ordering
- Level 2: diacritic ordering
- Level 3: case ordering
- Level 4: tie-breaking (e.g. in the case when variable is 'shifted')
-
- ex.level => 2,
-
-If omitted, the maximum is the 4th.
-
-=item normalization
-
--- see 4.1 Normalize, UTS #10.
-
-If specified, strings are normalized before preparation of sort keys
-(the normalization is executed after preprocess).
-
-A form name C<Unicode::Normalize::normalize()> accepts will be applied
-as C<$normalization_form>.
-Acceptable names include C<'NFD'>, C<'NFC'>, C<'NFKD'>, and C<'NFKC'>.
-See C<Unicode::Normalize::normalize()> for detail.
-If omitted, C<'NFD'> is used.
-
-C<normalization> is performed after C<preprocess> (if defined).
-
-Furthermore, special values, C<undef> and C<"prenormalized">, can be used,
-though they are not concerned with C<Unicode::Normalize::normalize()>.
-
-If C<undef> (not a string C<"undef">) is passed explicitly
-as the value for this key,
-any normalization is not carried out (this may make tailoring easier
-if any normalization is not desired). Under C<(normalization =E<gt> undef)>,
-only contiguous contractions are resolved;
-e.g. even if C<A-ring> (and C<A-ring-cedilla>) is ordered after C<Z>,
-C<A-cedilla-ring> would be primary equal to C<A>.
-In this point,
-C<(normalization =E<gt> undef, preprocess =E<gt> sub { NFD(shift) })>
-B<is not> equivalent to C<(normalization =E<gt> 'NFD')>.
-
-In the case of C<(normalization =E<gt> "prenormalized")>,
-any normalization is not performed, but
-non-contiguous contractions with combining characters are performed.
-Therefore
-C<(normalization =E<gt> 'prenormalized', preprocess =E<gt> sub { NFD(shift) })>
-B<is> equivalent to C<(normalization =E<gt> 'NFD')>.
-If source strings are finely prenormalized,
-C<(normalization =E<gt> 'prenormalized')> may save time for normalization.
-
-Except C<(normalization =E<gt> undef)>,
-B<Unicode::Normalize> is required (see also B<CAVEAT>).
-
-=item overrideCJK
-
--- see 7.1 Derived Collation Elements, UTS #10.
-
-By default, CJK Unified Ideographs are ordered in Unicode codepoint order
-but C<CJK Unified Ideographs> (if C<UCA_Version> is 8 to 11, its range is
-C<U+4E00..U+9FA5>; if C<UCA_Version> is 14, its range is C<U+4E00..U+9FBB>)
-are lesser than C<CJK Unified Ideographs Extension> (its range is
-C<U+3400..U+4DB5> and C<U+20000..U+2A6D6>).
-
-Through C<overrideCJK>, ordering of CJK Unified Ideographs can be overrided.
-
-ex. CJK Unified Ideographs in the JIS code point order.
-
- overrideCJK => sub {
- my $u = shift; # get a Unicode codepoint
- my $b = pack('n', $u); # to UTF-16BE
- my $s = your_unicode_to_sjis_converter($b); # convert
- my $n = unpack('n', $s); # convert sjis to short
- [ $n, 0x20, 0x2, $u ]; # return the collation element
- },
-
-ex. ignores all CJK Unified Ideographs.
-
- overrideCJK => sub {()}, # CODEREF returning empty list
-
- # where ->eq("Pe\x{4E00}rl", "Perl") is true
- # as U+4E00 is a CJK Unified Ideograph and to be ignorable.
-
-If C<undef> is passed explicitly as the value for this key,
-weights for CJK Unified Ideographs are treated as undefined.
-But assignment of weight for CJK Unified Ideographs
-in table or C<entry> is still valid.
-
-=item overrideHangul
-
--- see 7.1 Derived Collation Elements, UTS #10.
-
-By default, Hangul Syllables are decomposed into Hangul Jamo,
-even if C<(normalization =E<gt> undef)>.
-But the mapping of Hangul Syllables may be overrided.
-
-This parameter works like C<overrideCJK>, so see there for examples.
-
-If you want to override the mapping of Hangul Syllables,
-NFD, NFKD, and FCD are not appropriate,
-since they will decompose Hangul Syllables before overriding.
-
-If C<undef> is passed explicitly as the value for this key,
-weight for Hangul Syllables is treated as undefined
-without decomposition into Hangul Jamo.
-But definition of weight for Hangul Syllables
-in table or C<entry> is still valid.
-
-=item preprocess
-
--- see 5.1 Preprocessing, UTS #10.
-
-If specified, the coderef is used to preprocess
-before the formation of sort keys.
-
-ex. dropping English articles, such as "a" or "the".
-Then, "the pen" is before "a pencil".
-
- preprocess => sub {
- my $str = shift;
- $str =~ s/\b(?:an?|the)\s+//gi;
- return $str;
- },
-
-C<preprocess> is performed before C<normalization> (if defined).
-
-=item rearrange
-
--- see 3.1.3 Rearrangement, UTS #10.
-
-Characters that are not coded in logical order and to be rearranged.
-If C<UCA_Version> is equal to or lesser than 11, default is:
-
- rearrange => [ 0x0E40..0x0E44, 0x0EC0..0x0EC4 ],
-
-If you want to disallow any rearrangement, pass C<undef> or C<[]>
-(a reference to empty list) as the value for this key.
-
-If C<UCA_Version> is equal to 14, default is C<[]> (i.e. no rearrangement).
-
-B<According to the version 9 of UCA, this parameter shall not be used;
-but it is not warned at present.>
-
-=item table
-
--- see 3.2 Default Unicode Collation Element Table, UTS #10.
-
-You can use another collation element table if desired.
-
-The table file should locate in the F<Unicode/Collate> directory
-on C<@INC>. Say, if the filename is F<Foo.txt>,
-the table file is searched as F<Unicode/Collate/Foo.txt> in C<@INC>.
-
-By default, F<allkeys.txt> (as the filename of DUCET) is used.
-If you will prepare your own table file, any name other than F<allkeys.txt>
-may be better to avoid namespace conflict.
-
-If C<undef> is passed explicitly as the value for this key,
-no file is read (but you can define collation elements via C<entry>).
-
-A typical way to define a collation element table
-without any file of table:
-
- $onlyABC = Unicode::Collate->new(
- table => undef,
- entry => << 'ENTRIES',
-0061 ; [.0101.0020.0002.0061] # LATIN SMALL LETTER A
-0041 ; [.0101.0020.0008.0041] # LATIN CAPITAL LETTER A
-0062 ; [.0102.0020.0002.0062] # LATIN SMALL LETTER B
-0042 ; [.0102.0020.0008.0042] # LATIN CAPITAL LETTER B
-0063 ; [.0103.0020.0002.0063] # LATIN SMALL LETTER C
-0043 ; [.0103.0020.0008.0043] # LATIN CAPITAL LETTER C
-ENTRIES
- );
-
-If C<ignoreName> or C<undefName> is used, character names should be
-specified as a comment (following C<#>) on each line.
-
-=item undefChar
-
-=item undefName
-
--- see 6.3.4 Reducing the Repertoire, UTS #10.
-
-Undefines the collation element as if it were unassigned in the table.
-This reduces the size of the table.
-If an unassigned character appears in the string to be collated,
-the sort key is made from its codepoint
-as a single-character collation element,
-as it is greater than any other assigned collation elements
-(in the codepoint order among the unassigned characters).
-But, it'd be better to ignore characters
-unfamiliar to you and maybe never used.
-
-Through C<undefChar>, any character matching C<qr/$undefChar/>
-will be undefined. Through C<undefName>, any character whose name
-(given in the C<table> file as a comment) matches C<qr/$undefName/>
-will be undefined.
-
-ex. Collation weights for beyond-BMP characters are not stored in object:
-
- undefChar => qr/[^\0-\x{fffd}]/,
-
-=item upper_before_lower
-
--- see 6.6 Case Comparisons, UTS #10.
-
-By default, lowercase is before uppercase.
-If the parameter is made true, this is reversed.
-
-B<NOTE>: This parameter simplemindedly assumes that any lowercase/uppercase
-distinctions must occur in level 3, and their weights at level 3 must be
-same as those mentioned in 7.3.1, UTS #10.
-If you define your collation elements which differs from this requirement,
-this parameter doesn't work validly.
-
-=item variable
-
--- see 3.2.2 Variable Weighting, UTS #10.
-
-This key allows to variable weighting for variable collation elements,
-which are marked with an ASTERISK in the table
-(NOTE: Many punction marks and symbols are variable in F<allkeys.txt>).
-
- variable => 'blanked', 'non-ignorable', 'shifted', or 'shift-trimmed'.
-
-These names are case-insensitive.
-By default (if specification is omitted), 'shifted' is adopted.
-
- 'Blanked' Variable elements are made ignorable at levels 1 through 3;
- considered at the 4th level.
-
- 'Non-Ignorable' Variable elements are not reset to ignorable.
-
- 'Shifted' Variable elements are made ignorable at levels 1 through 3
- their level 4 weight is replaced by the old level 1 weight.
- Level 4 weight for Non-Variable elements is 0xFFFF.
-
- 'Shift-Trimmed' Same as 'shifted', but all FFFF's at the 4th level
- are trimmed.
-
-=back
-
-=head2 Methods for Collation
-
-=over 4
-
-=item C<@sorted = $Collator-E<gt>sort(@not_sorted)>
-
-Sorts a list of strings.
-
-=item C<$result = $Collator-E<gt>cmp($a, $b)>
-
-Returns 1 (when C<$a> is greater than C<$b>)
-or 0 (when C<$a> is equal to C<$b>)
-or -1 (when C<$a> is lesser than C<$b>).
-
-=item C<$result = $Collator-E<gt>eq($a, $b)>
-
-=item C<$result = $Collator-E<gt>ne($a, $b)>
-
-=item C<$result = $Collator-E<gt>lt($a, $b)>
-
-=item C<$result = $Collator-E<gt>le($a, $b)>
-
-=item C<$result = $Collator-E<gt>gt($a, $b)>
-
-=item C<$result = $Collator-E<gt>ge($a, $b)>
-
-They works like the same name operators as theirs.
-
- eq : whether $a is equal to $b.
- ne : whether $a is not equal to $b.
- lt : whether $a is lesser than $b.
- le : whether $a is lesser than $b or equal to $b.
- gt : whether $a is greater than $b.
- ge : whether $a is greater than $b or equal to $b.
-
-=item C<$sortKey = $Collator-E<gt>getSortKey($string)>
-
--- see 4.3 Form Sort Key, UTS #10.
-
-Returns a sort key.
-
-You compare the sort keys using a binary comparison
-and get the result of the comparison of the strings using UCA.
-
- $Collator->getSortKey($a) cmp $Collator->getSortKey($b)
-
- is equivalent to
-
- $Collator->cmp($a, $b)
-
-=item C<$sortKeyForm = $Collator-E<gt>viewSortKey($string)>
-
-Converts a sorting key into its representation form.
-If C<UCA_Version> is 8, the output is slightly different.
-
- use Unicode::Collate;
- my $c = Unicode::Collate->new();
- print $c->viewSortKey("Perl"),"\n";
-
- # output:
- # [0B67 0A65 0B7F 0B03 | 0020 0020 0020 0020 | 0008 0002 0002 0002 | FFFF FFFF FFFF FFFF]
- # Level 1 Level 2 Level 3 Level 4
-
-=back
-
-=head2 Methods for Searching
-
-B<DISCLAIMER:> If C<preprocess> or C<normalization> parameter is true
-for C<$Collator>, calling these methods (C<index>, C<match>, C<gmatch>,
-C<subst>, C<gsubst>) is croaked,
-as the position and the length might differ
-from those on the specified string.
-(And C<rearrange> and C<hangul_terminator> parameters are neglected.)
-
-The C<match>, C<gmatch>, C<subst>, C<gsubst> methods work
-like C<m//>, C<m//g>, C<s///>, C<s///g>, respectively,
-but they are not aware of any pattern, but only a literal substring.
-
-=over 4
-
-=item C<$position = $Collator-E<gt>index($string, $substring[, $position])>
-
-=item C<($position, $length) = $Collator-E<gt>index($string, $substring[, $position])>
-
-If C<$substring> matches a part of C<$string>, returns
-the position of the first occurrence of the matching part in scalar context;
-in list context, returns a two-element list of
-the position and the length of the matching part.
-
-If C<$substring> does not match any part of C<$string>,
-returns C<-1> in scalar context and
-an empty list in list context.
-
-e.g. you say
-
- my $Collator = Unicode::Collate->new( normalization => undef, level => 1 );
- # (normalization => undef) is REQUIRED.
- my $str = "Ich mu\xDF studieren Perl.";
- my $sub = "M\xDCSS";
- my $match;
- if (my($pos,$len) = $Collator->index($str, $sub)) {
- $match = substr($str, $pos, $len);
- }
-
-and get C<"mu\xDF"> in C<$match> since C<"mu\xDF">
-is primary equal to C<"M\xDCSS">.
-
-=item C<$match_ref = $Collator-E<gt>match($string, $substring)>
-
-=item C<($match) = $Collator-E<gt>match($string, $substring)>
-
-If C<$substring> matches a part of C<$string>, in scalar context, returns
-B<a reference to> the first occurrence of the matching part
-(C<$match_ref> is always true if matches,
-since every reference is B<true>);
-in list context, returns the first occurrence of the matching part.
-
-If C<$substring> does not match any part of C<$string>,
-returns C<undef> in scalar context and
-an empty list in list context.
-
-e.g.
-
- if ($match_ref = $Collator->match($str, $sub)) { # scalar context
- print "matches [$$match_ref].\n";
- } else {
- print "doesn't match.\n";
- }
-
- or
-
- if (($match) = $Collator->match($str, $sub)) { # list context
- print "matches [$match].\n";
- } else {
- print "doesn't match.\n";
- }
-
-=item C<@match = $Collator-E<gt>gmatch($string, $substring)>
-
-If C<$substring> matches a part of C<$string>, returns
-all the matching parts (or matching count in scalar context).
-
-If C<$substring> does not match any part of C<$string>,
-returns an empty list.
-
-=item C<$count = $Collator-E<gt>subst($string, $substring, $replacement)>
-
-If C<$substring> matches a part of C<$string>,
-the first occurrence of the matching part is replaced by C<$replacement>
-(C<$string> is modified) and return C<$count> (always equals to C<1>).
-
-C<$replacement> can be a C<CODEREF>,
-taking the matching part as an argument,
-and returning a string to replace the matching part
-(a bit similar to C<s/(..)/$coderef-E<gt>($1)/e>).
-
-=item C<$count = $Collator-E<gt>gsubst($string, $substring, $replacement)>
-
-If C<$substring> matches a part of C<$string>,
-all the occurrences of the matching part is replaced by C<$replacement>
-(C<$string> is modified) and return C<$count>.
-
-C<$replacement> can be a C<CODEREF>,
-taking the matching part as an argument,
-and returning a string to replace the matching part
-(a bit similar to C<s/(..)/$coderef-E<gt>($1)/eg>).
-
-e.g.
-
- my $Collator = Unicode::Collate->new( normalization => undef, level => 1 );
- # (normalization => undef) is REQUIRED.
- my $str = "Camel donkey zebra came\x{301}l CAMEL horse cAm\0E\0L...";
- $Collator->gsubst($str, "camel", sub { "<b>$_[0]</b>" });
-
- # now $str is "<b>Camel</b> donkey zebra <b>came\x{301}l</b> <b>CAMEL</b> horse <b>cAm\0E\0L</b>...";
- # i.e., all the camels are made bold-faced.
-
-=back
-
-=head2 Other Methods
-
-=over 4
-
-=item C<%old_tailoring = $Collator-E<gt>change(%new_tailoring)>
-
-Change the value of specified keys and returns the changed part.
-
- $Collator = Unicode::Collate->new(level => 4);
-
- $Collator->eq("perl", "PERL"); # false
-
- %old = $Collator->change(level => 2); # returns (level => 4).
-
- $Collator->eq("perl", "PERL"); # true
-
- $Collator->change(%old); # returns (level => 2).
-
- $Collator->eq("perl", "PERL"); # false
-
-Not all C<(key,value)>s are allowed to be changed.
-See also C<@Unicode::Collate::ChangeOK> and C<@Unicode::Collate::ChangeNG>.
-
-In the scalar context, returns the modified collator
-(but it is B<not> a clone from the original).
-
- $Collator->change(level => 2)->eq("perl", "PERL"); # true
-
- $Collator->eq("perl", "PERL"); # true; now max level is 2nd.
-
- $Collator->change(level => 4)->eq("perl", "PERL"); # false
-
-=item C<$version = $Collator-E<gt>version()>
-
-Returns the version number (a string) of the Unicode Standard
-which the C<table> file used by the collator object is based on.
-If the table does not include a version line (starting with C<@version>),
-returns C<"unknown">.
-
-=item C<UCA_Version()>
-
-Returns the tracking version number of UTS #10 this module consults.
-
-=item C<Base_Unicode_Version()>
-
-Returns the version number of UTS #10 this module consults.
-
-=back
-
-=head1 EXPORT
-
-No method will be exported.
-
-=head1 INSTALL
-
-Though this module can be used without any C<table> file,
-to use this module easily, it is recommended to install a table file
-in the UCA format, by copying it under the directory
-<a place in @INC>/Unicode/Collate.
-
-The most preferable one is "The Default Unicode Collation Element Table"
-(aka DUCET), available from the Unicode Consortium's website:
-
- http://www.unicode.org/Public/UCA/
-
- http://www.unicode.org/Public/UCA/latest/allkeys.txt (latest version)
-
-If DUCET is not installed, it is recommended to copy the file
-from http://www.unicode.org/Public/UCA/latest/allkeys.txt
-to <a place in @INC>/Unicode/Collate/allkeys.txt
-manually.
-
-=head1 CAVEATS
-
-=over 4
-
-=item Normalization
-
-Use of the C<normalization> parameter requires the B<Unicode::Normalize>
-module (see L<Unicode::Normalize>).
-
-If you need not it (say, in the case when you need not
-handle any combining characters),
-assign C<normalization =E<gt> undef> explicitly.
-
--- see 6.5 Avoiding Normalization, UTS #10.
-
-=item Conformance Test
-
-The Conformance Test for the UCA is available
-under L<http://www.unicode.org/Public/UCA/>.
-
-For F<CollationTest_SHIFTED.txt>,
-a collator via C<Unicode::Collate-E<gt>new( )> should be used;
-for F<CollationTest_NON_IGNORABLE.txt>, a collator via
-C<Unicode::Collate-E<gt>new(variable =E<gt> "non-ignorable", level =E<gt> 3)>.
-
-B<Unicode::Normalize is required to try The Conformance Test.>
-
-=back
-
-=head1 AUTHOR, COPYRIGHT AND LICENSE
-
-The Unicode::Collate module for perl was written by SADAHIRO Tomoyuki,
-<SADAHIRO at cpan.org>. This module is Copyright(C) 2001-2005,
-SADAHIRO Tomoyuki. Japan. All rights reserved.
-
-This module is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
-
-The file Unicode/Collate/allkeys.txt was copied directly
-from L<http://www.unicode.org/Public/UCA/4.1.0/allkeys.txt>.
-This file is Copyright (c) 1991-2005 Unicode, Inc. All rights reserved.
-Distributed under the Terms of Use in L<http://www.unicode.org/copyright.html>.
-
-=head1 SEE ALSO
-
-=over 4
-
-=item Unicode Collation Algorithm - UTS #10
-
-L<http://www.unicode.org/reports/tr10/>
-
-=item The Default Unicode Collation Element Table (DUCET)
-
-L<http://www.unicode.org/Public/UCA/latest/allkeys.txt>
-
-=item The conformance test for the UCA
-
-L<http://www.unicode.org/Public/UCA/latest/CollationTest.html>
-
-L<http://www.unicode.org/Public/UCA/latest/CollationTest.zip>
-
-=item Hangul Syllable Type
-
-L<http://www.unicode.org/Public/UNIDATA/HangulSyllableType.txt>
-
-=item Unicode Normalization Forms - UAX #15
-
-L<http://www.unicode.org/reports/tr15/>
-
-=back
-
-=cut
Deleted: trunk/contrib/perl/lib/abbrev.pl
===================================================================
--- trunk/contrib/perl/lib/abbrev.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/abbrev.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,46 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-;# Usage:
-;# %foo = ();
-;# &abbrev(*foo,LIST);
-;# ...
-;# $long = $foo{$short};
-
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Text::Abbrev
-#
-
-package abbrev;
-
-sub main'abbrev {
- local(*domain) = @_;
- shift(@_);
- @cmp = @_;
- foreach $name (@_) {
- @extra = split(//,$name);
- $abbrev = shift(@extra);
- $len = 1;
- foreach $cmp (@cmp) {
- next if $cmp eq $name;
- while (@extra && substr($cmp,0,$len) eq $abbrev) {
- $abbrev .= shift(@extra);
- ++$len;
- }
- }
- $domain{$abbrev} = $name;
- while ($#extra >= 0) {
- $abbrev .= shift(@extra);
- $domain{$abbrev} = $name;
- }
- }
-}
-
-1;
Deleted: trunk/contrib/perl/lib/assert.pl
===================================================================
--- trunk/contrib/perl/lib/assert.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/assert.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,63 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# assert.pl
-# tchrist at convex.com (Tom Christiansen)
-#
-# Usage:
-#
-# &assert('@x > @y');
-# &assert('$var > 10', $var, $othervar, @various_info);
-#
-# That is, if the first expression evals false, we blow up. The
-# rest of the args, if any, are nice to know because they will
-# be printed out by &panic, which is just the stack-backtrace
-# routine shamelessly borrowed from the perl debugger.
-
-sub assert {
- &panic("ASSERTION BOTCHED: $_[0]",$@) unless eval $_[0];
-}
-
-sub panic {
- package DB;
-
- select(STDERR);
-
- print "\npanic: @_\n";
-
- exit 1 if $] <= 4.003; # caller broken
-
- # stack traceback gratefully borrowed from perl debugger
-
- local $_;
- my $i;
- my ($p,$f,$l,$s,$h,$a, at a, at frames);
- for ($i = 0; ($p,$f,$l,$s,$h,$w) = caller($i); $i++) {
- @a = @args;
- for (@a) {
- if (/^StB\000/ && length($_) == length($_main{'_main'})) {
- $_ = sprintf("%s",$_);
- }
- else {
- s/'/\\'/g;
- s/([^\0]*)/'$1'/ unless /^-?[\d.]+$/;
- s/([\200-\377])/sprintf("M-%c",ord($1)&0177)/eg;
- s/([\0-\37\177])/sprintf("^%c",ord($1)^64)/eg;
- }
- }
- $w = $w ? '@ = ' : '$ = ';
- $a = $h ? '(' . join(', ', @a) . ')' : '';
- push(@frames, "$w&$s$a from file $f line $l\n");
- }
- for ($i=0; $i <= $#frames; $i++) {
- print $frames[$i];
- }
- exit 1;
-}
-
-1;
Deleted: trunk/contrib/perl/lib/attributes.pm
===================================================================
--- trunk/contrib/perl/lib/attributes.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/attributes.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,495 +0,0 @@
-package attributes;
-
-our $VERSION = 0.09;
-
- at EXPORT_OK = qw(get reftype);
- at EXPORT = ();
-%EXPORT_TAGS = (ALL => [@EXPORT, @EXPORT_OK]);
-
-use strict;
-
-sub croak {
- require Carp;
- goto &Carp::croak;
-}
-
-sub carp {
- require Carp;
- goto &Carp::carp;
-}
-
-## forward declaration(s) rather than wrapping the bootstrap call in BEGIN{}
-#sub reftype ($) ;
-#sub _fetch_attrs ($) ;
-#sub _guess_stash ($) ;
-#sub _modify_attrs ;
-#
-# The extra trips through newATTRSUB in the interpreter wipe out any savings
-# from avoiding the BEGIN block. Just do the bootstrap now.
-BEGIN { bootstrap attributes }
-
-sub import {
- @_ > 2 && ref $_[2] or do {
- require Exporter;
- goto &Exporter::import;
- };
- my (undef,$home_stash,$svref, at attrs) = @_;
-
- my $svtype = uc reftype($svref);
- my $pkgmeth;
- $pkgmeth = UNIVERSAL::can($home_stash, "MODIFY_${svtype}_ATTRIBUTES")
- if defined $home_stash && $home_stash ne '';
- my @badattrs;
- if ($pkgmeth) {
- my @pkgattrs = _modify_attrs($svref, @attrs);
- @badattrs = $pkgmeth->($home_stash, $svref, @pkgattrs);
- if (!@badattrs && @pkgattrs) {
- require warnings;
- return unless warnings::enabled('reserved');
- @pkgattrs = grep { m/\A[[:lower:]]+(?:\z|\()/ } @pkgattrs;
- if (@pkgattrs) {
- for my $attr (@pkgattrs) {
- $attr =~ s/\(.+\z//s;
- }
- my $s = ((@pkgattrs == 1) ? '' : 's');
- carp "$svtype package attribute$s " .
- "may clash with future reserved word$s: " .
- join(' : ' , @pkgattrs);
- }
- }
- }
- else {
- @badattrs = _modify_attrs($svref, @attrs);
- }
- if (@badattrs) {
- croak "Invalid $svtype attribute" .
- (( @badattrs == 1 ) ? '' : 's') .
- ": " .
- join(' : ', @badattrs);
- }
-}
-
-sub get ($) {
- @_ == 1 && ref $_[0] or
- croak 'Usage: '.__PACKAGE__.'::get $ref';
- my $svref = shift;
- my $svtype = uc reftype $svref;
- my $stash = _guess_stash $svref;
- $stash = caller unless defined $stash;
- my $pkgmeth;
- $pkgmeth = UNIVERSAL::can($stash, "FETCH_${svtype}_ATTRIBUTES")
- if defined $stash && $stash ne '';
- return $pkgmeth ?
- (_fetch_attrs($svref), $pkgmeth->($stash, $svref)) :
- (_fetch_attrs($svref))
- ;
-}
-
-sub require_version { goto &UNIVERSAL::VERSION }
-
-1;
-__END__
-#The POD goes here
-
-=head1 NAME
-
-attributes - get/set subroutine or variable attributes
-
-=head1 SYNOPSIS
-
- sub foo : method ;
- my ($x, at y,%z) : Bent = 1;
- my $s = sub : method { ... };
-
- use attributes (); # optional, to get subroutine declarations
- my @attrlist = attributes::get(\&foo);
-
- use attributes 'get'; # import the attributes::get subroutine
- my @attrlist = get \&foo;
-
-=head1 DESCRIPTION
-
-Subroutine declarations and definitions may optionally have attribute lists
-associated with them. (Variable C<my> declarations also may, but see the
-warning below.) Perl handles these declarations by passing some information
-about the call site and the thing being declared along with the attribute
-list to this module. In particular, the first example above is equivalent to
-the following:
-
- use attributes __PACKAGE__, \&foo, 'method';
-
-The second example in the synopsis does something equivalent to this:
-
- use attributes ();
- my ($x, at y,%z);
- attributes::->import(__PACKAGE__, \$x, 'Bent');
- attributes::->import(__PACKAGE__, \@y, 'Bent');
- attributes::->import(__PACKAGE__, \%z, 'Bent');
- ($x, at y,%z) = 1;
-
-Yes, that's a lot of expansion.
-
-B<WARNING>: attribute declarations for variables are still evolving.
-The semantics and interfaces of such declarations could change in
-future versions. They are present for purposes of experimentation
-with what the semantics ought to be. Do not rely on the current
-implementation of this feature.
-
-There are only a few attributes currently handled by Perl itself (or
-directly by this module, depending on how you look at it.) However,
-package-specific attributes are allowed by an extension mechanism.
-(See L<"Package-specific Attribute Handling"> below.)
-
-The setting of subroutine attributes happens at compile time.
-Variable attributes in C<our> declarations are also applied at compile time.
-However, C<my> variables get their attributes applied at run-time.
-This means that you have to I<reach> the run-time component of the C<my>
-before those attributes will get applied. For example:
-
- my $x : Bent = 42 if 0;
-
-will neither assign 42 to $x I<nor> will it apply the C<Bent> attribute
-to the variable.
-
-An attempt to set an unrecognized attribute is a fatal error. (The
-error is trappable, but it still stops the compilation within that
-C<eval>.) Setting an attribute with a name that's all lowercase
-letters that's not a built-in attribute (such as "foo") will result in
-a warning with B<-w> or C<use warnings 'reserved'>.
-
-=head2 What C<import> does
-
-In the description it is mentioned that
-
- sub foo : method;
-
-is equivalent to
-
- use attributes __PACKAGE__, \&foo, 'method';
-
-As you might know this calls the C<import> function of C<attributes> at compile
-time with these parameters: 'attributes', the caller's package name, the reference
-to the code and 'method'.
-
- attributes->import( __PACKAGE__, \&foo, 'method' );
-
-So you want to know what C<import> actually does?
-
-First of all C<import> gets the type of the third parameter ('CODE' in this case).
-C<attributes.pm> checks if there is a subroutine called C<< MODIFY_<reftype>_ATTRIBUTES >>
-in the caller's namespace (here: 'main'). In this case a subroutine C<MODIFY_CODE_ATTRIBUTES> is
-required. Then this method is called to check if you have used a "bad attribute".
-The subroutine call in this example would look like
-
- MODIFY_CODE_ATTRIBUTES( 'main', \&foo, 'method' );
-
-C<< MODIFY_<reftype>_ATTRIBUTES >> has to return a list of all "bad attributes".
-If there are any bad attributes C<import> croaks.
-
-(See L<"Package-specific Attribute Handling"> below.)
-
-=head2 Built-in Attributes
-
-The following are the built-in attributes for subroutines:
-
-=over 4
-
-=item locked
-
-B<5.005 threads only! The use of the "locked" attribute currently
-only makes sense if you are using the deprecated "Perl 5.005 threads"
-implementation of threads.>
-
-Setting this attribute is only meaningful when the subroutine or
-method is to be called by multiple threads. When set on a method
-subroutine (i.e., one marked with the B<method> attribute below),
-Perl ensures that any invocation of it implicitly locks its first
-argument before execution. When set on a non-method subroutine,
-Perl ensures that a lock is taken on the subroutine itself before
-execution. The semantics of the lock are exactly those of one
-explicitly taken with the C<lock> operator immediately after the
-subroutine is entered.
-
-=item method
-
-Indicates that the referenced subroutine is a method.
-This has a meaning when taken together with the B<locked> attribute,
-as described there. It also means that a subroutine so marked
-will not trigger the "Ambiguous call resolved as CORE::%s" warning.
-
-=item lvalue
-
-Indicates that the referenced subroutine is a valid lvalue and can
-be assigned to. The subroutine must return a modifiable value such
-as a scalar variable, as described in L<perlsub>.
-
-=back
-
-For global variables there is C<unique> attribute: see L<perlfunc/our>.
-
-=head2 Available Subroutines
-
-The following subroutines are available for general use once this module
-has been loaded:
-
-=over 4
-
-=item get
-
-This routine expects a single parameter--a reference to a
-subroutine or variable. It returns a list of attributes, which may be
-empty. If passed invalid arguments, it uses die() (via L<Carp::croak|Carp>)
-to raise a fatal exception. If it can find an appropriate package name
-for a class method lookup, it will include the results from a
-C<FETCH_I<type>_ATTRIBUTES> call in its return list, as described in
-L<"Package-specific Attribute Handling"> below.
-Otherwise, only L<built-in attributes|"Built-in Attributes"> will be returned.
-
-=item reftype
-
-This routine expects a single parameter--a reference to a subroutine or
-variable. It returns the built-in type of the referenced variable,
-ignoring any package into which it might have been blessed.
-This can be useful for determining the I<type> value which forms part of
-the method names described in L<"Package-specific Attribute Handling"> below.
-
-=back
-
-Note that these routines are I<not> exported by default.
-
-=head2 Package-specific Attribute Handling
-
-B<WARNING>: the mechanisms described here are still experimental. Do not
-rely on the current implementation. In particular, there is no provision
-for applying package attributes to 'cloned' copies of subroutines used as
-closures. (See L<perlref/"Making References"> for information on closures.)
-Package-specific attribute handling may change incompatibly in a future
-release.
-
-When an attribute list is present in a declaration, a check is made to see
-whether an attribute 'modify' handler is present in the appropriate package
-(or its @ISA inheritance tree). Similarly, when C<attributes::get> is
-called on a valid reference, a check is made for an appropriate attribute
-'fetch' handler. See L<"EXAMPLES"> to see how the "appropriate package"
-determination works.
-
-The handler names are based on the underlying type of the variable being
-declared or of the reference passed. Because these attributes are
-associated with subroutine or variable declarations, this deliberately
-ignores any possibility of being blessed into some package. Thus, a
-subroutine declaration uses "CODE" as its I<type>, and even a blessed
-hash reference uses "HASH" as its I<type>.
-
-The class methods invoked for modifying and fetching are these:
-
-=over 4
-
-=item FETCH_I<type>_ATTRIBUTES
-
-This method is called with two arguments: the relevant package name,
-and a reference to a variable or subroutine for which package-defined
-attributes are desired. The expected return value is a list of
-associated attributes. This list may be empty.
-
-=item MODIFY_I<type>_ATTRIBUTES
-
-This method is called with two fixed arguments, followed by the list of
-attributes from the relevant declaration. The two fixed arguments are
-the relevant package name and a reference to the declared subroutine or
-variable. The expected return value is a list of attributes which were
-not recognized by this handler. Note that this allows for a derived class
-to delegate a call to its base class, and then only examine the attributes
-which the base class didn't already handle for it.
-
-The call to this method is currently made I<during> the processing of the
-declaration. In particular, this means that a subroutine reference will
-probably be for an undefined subroutine, even if this declaration is
-actually part of the definition.
-
-=back
-
-Calling C<attributes::get()> from within the scope of a null package
-declaration C<package ;> for an unblessed variable reference will
-not provide any starting package name for the 'fetch' method lookup.
-Thus, this circumstance will not result in a method call for package-defined
-attributes. A named subroutine knows to which symbol table entry it belongs
-(or originally belonged), and it will use the corresponding package.
-An anonymous subroutine knows the package name into which it was compiled
-(unless it was also compiled with a null package declaration), and so it
-will use that package name.
-
-=head2 Syntax of Attribute Lists
-
-An attribute list is a sequence of attribute specifications, separated by
-whitespace or a colon (with optional whitespace).
-Each attribute specification is a simple
-name, optionally followed by a parenthesised parameter list.
-If such a parameter list is present, it is scanned past as for the rules
-for the C<q()> operator. (See L<perlop/"Quote and Quote-like Operators">.)
-The parameter list is passed as it was found, however, and not as per C<q()>.
-
-Some examples of syntactically valid attribute lists:
-
- switch(10,foo(7,3)) : expensive
- Ugly('\(") :Bad
- _5x5
- locked method
-
-Some examples of syntactically invalid attribute lists (with annotation):
-
- switch(10,foo() # ()-string not balanced
- Ugly('(') # ()-string not balanced
- 5x5 # "5x5" not a valid identifier
- Y2::north # "Y2::north" not a simple identifier
- foo + bar # "+" neither a colon nor whitespace
-
-=head1 EXPORTS
-
-=head2 Default exports
-
-None.
-
-=head2 Available exports
-
-The routines C<get> and C<reftype> are exportable.
-
-=head2 Export tags defined
-
-The C<:ALL> tag will get all of the above exports.
-
-=head1 EXAMPLES
-
-Here are some samples of syntactically valid declarations, with annotation
-as to how they resolve internally into C<use attributes> invocations by
-perl. These examples are primarily useful to see how the "appropriate
-package" is found for the possible method lookups for package-defined
-attributes.
-
-=over 4
-
-=item 1.
-
-Code:
-
- package Canine;
- package Dog;
- my Canine $spot : Watchful ;
-
-Effect:
-
- use attributes ();
- attributes::->import(Canine => \$spot, "Watchful");
-
-=item 2.
-
-Code:
-
- package Felis;
- my $cat : Nervous;
-
-Effect:
-
- use attributes ();
- attributes::->import(Felis => \$cat, "Nervous");
-
-=item 3.
-
-Code:
-
- package X;
- sub foo : locked ;
-
-Effect:
-
- use attributes X => \&foo, "locked";
-
-=item 4.
-
-Code:
-
- package X;
- sub Y::x : locked { 1 }
-
-Effect:
-
- use attributes Y => \&Y::x, "locked";
-
-=item 5.
-
-Code:
-
- package X;
- sub foo { 1 }
-
- package Y;
- BEGIN { *bar = \&X::foo; }
-
- package Z;
- sub Y::bar : locked ;
-
-Effect:
-
- use attributes X => \&X::foo, "locked";
-
-=back
-
-This last example is purely for purposes of completeness. You should not
-be trying to mess with the attributes of something in a package that's
-not your own.
-
-=head1 MORE EXAMPLES
-
-=over 4
-
-=item 1.
-
- sub MODIFY_CODE_ATTRIBUTES {
- my ($class,$code, at attrs) = @_;
-
- my $allowed = 'MyAttribute';
- my @bad = grep { $_ ne $allowed } @attrs;
-
- return @bad;
- }
-
- sub foo : MyAttribute {
- print "foo\n";
- }
-
-This example runs. At compile time C<MODIFY_CODE_ATTRIBUTES> is called. In that
-subroutine, we check if any attribute is disallowed and we return a list of
-these "bad attributes".
-
-As we return an empty list, everything is fine.
-
-=item 2.
-
- sub MODIFY_CODE_ATTRIBUTES {
- my ($class,$code, at attrs) = @_;
-
- my $allowed = 'MyAttribute';
- my @bad = grep{ $_ ne $allowed }@attrs;
-
- return @bad;
- }
-
- sub foo : MyAttribute Test {
- print "foo\n";
- }
-
-This example is aborted at compile time as we use the attribute "Test" which
-isn't allowed. C<MODIFY_CODE_ATTRIBUTES> returns a list that contains a single
-element ('Test').
-
-=back
-
-=head1 SEE ALSO
-
-L<perlsub/"Private Variables via my()"> and
-L<perlsub/"Subroutine Attributes"> for details on the basic declarations;
-L<attrs> for the obsolescent form of subroutine attribute specification
-which this module replaces;
-L<perlfunc/use> for details on the normal invocation mechanism.
-
-=cut
-
Deleted: trunk/contrib/perl/lib/autodie.pm
===================================================================
--- trunk/contrib/perl/lib/autodie.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/autodie.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,424 +0,0 @@
-package autodie;
-use 5.008;
-use strict;
-use warnings;
-
-use Fatal ();
-our @ISA = qw(Fatal);
-our $VERSION;
-
-BEGIN {
- $VERSION = '2.06_01';
-}
-
-use constant ERROR_WRONG_FATAL => q{
-Incorrect version of Fatal.pm loaded by autodie.
-
-The autodie pragma uses an updated version of Fatal to do its
-heavy lifting. We seem to have loaded Fatal version %s, which is
-probably the version that came with your version of Perl. However
-autodie needs version %s, which would have come bundled with
-autodie.
-
-You may be able to solve this problem by adding the following
-line of code to your main program, before any use of Fatal or
-autodie.
-
- use lib "%s";
-
-};
-
-# We have to check we've got the right version of Fatal before we
-# try to compile the rest of our code, lest we use a constant
-# that doesn't exist.
-
-BEGIN {
-
- # If we have the wrong Fatal, then we've probably loaded the system
- # one, not our own. Complain, and give a useful hint. ;)
-
- if ($Fatal::VERSION ne $VERSION) {
- my $autodie_path = $INC{'autodie.pm'};
-
- $autodie_path =~ s/autodie\.pm//;
-
- require Carp;
-
- Carp::croak sprintf(
- ERROR_WRONG_FATAL, $Fatal::VERSION, $VERSION, $autodie_path
- );
- }
-}
-
-# When passing args to Fatal we want to keep the first arg
-# (our package) in place. Hence the splice.
-
-sub import {
- splice(@_,1,0,Fatal::LEXICAL_TAG);
- goto &Fatal::import;
-}
-
-sub unimport {
- splice(@_,1,0,Fatal::LEXICAL_TAG);
- goto &Fatal::unimport;
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-autodie - Replace functions with ones that succeed or die with lexical scope
-
-=head1 SYNOPSIS
-
- use autodie; # Recommended: implies 'use autodie qw(:default)'
-
- use autodie qw(:all); # Recommended more: defaults and system/exec.
-
- use autodie qw(open close); # open/close succeed or die
-
- open(my $fh, "<", $filename); # No need to check!
-
- {
- no autodie qw(open); # open failures won't die
- open(my $fh, "<", $filename); # Could fail silently!
- no autodie; # disable all autodies
- }
-
-=head1 DESCRIPTION
-
- bIlujDI' yIchegh()Qo'; yIHegh()!
-
- It is better to die() than to return() in failure.
-
- -- Klingon programming proverb.
-
-The C<autodie> pragma provides a convenient way to replace functions
-that normally return false on failure with equivalents that throw
-an exception on failure.
-
-The C<autodie> pragma has I<lexical scope>, meaning that functions
-and subroutines altered with C<autodie> will only change their behaviour
-until the end of the enclosing block, file, or C<eval>.
-
-If C<system> is specified as an argument to C<autodie>, then it
-uses L<IPC::System::Simple> to do the heavy lifting. See the
-description of that module for more information.
-
-=head1 EXCEPTIONS
-
-Exceptions produced by the C<autodie> pragma are members of the
-L<autodie::exception> class. The preferred way to work with
-these exceptions under Perl 5.10 is as follows:
-
- use feature qw(switch);
-
- eval {
- use autodie;
-
- open(my $fh, '<', $some_file);
-
- my @records = <$fh>;
-
- # Do things with @records...
-
- close($fh);
-
- };
-
- given ($@) {
- when (undef) { say "No error"; }
- when ('open') { say "Error from open"; }
- when (':io') { say "Non-open, IO error."; }
- when (':all') { say "All other autodie errors." }
- default { say "Not an autodie error at all." }
- }
-
-Under Perl 5.8, the C<given/when> structure is not available, so the
-following structure may be used:
-
- eval {
- use autodie;
-
- open(my $fh, '<', $some_file);
-
- my @records = <$fh>;
-
- # Do things with @records...
-
- close($fh);
- };
-
- if ($@ and $@->isa('autodie::exception')) {
- if ($@->matches('open')) { print "Error from open\n"; }
- if ($@->matches(':io' )) { print "Non-open, IO error."; }
- } elsif ($@) {
- # A non-autodie exception.
- }
-
-See L<autodie::exception> for further information on interrogating
-exceptions.
-
-=head1 CATEGORIES
-
-Autodie uses a simple set of categories to group together similar
-built-ins. Requesting a category type (starting with a colon) will
-enable autodie for all built-ins beneath that category. For example,
-requesting C<:file> will enable autodie for C<close>, C<fcntl>,
-C<fileno>, C<open> and C<sysopen>.
-
-The categories are currently:
-
- :all
- :default
- :io
- read
- seek
- sysread
- sysseek
- syswrite
- :dbm
- dbmclose
- dbmopen
- :file
- binmode
- close
- fcntl
- fileno
- flock
- ioctl
- open
- sysopen
- truncate
- :filesys
- chdir
- closedir
- opendir
- link
- mkdir
- readlink
- rename
- rmdir
- symlink
- unlink
- :ipc
- pipe
- :msg
- msgctl
- msgget
- msgrcv
- msgsnd
- :semaphore
- semctl
- semget
- semop
- :shm
- shmctl
- shmget
- shmread
- :socket
- accept
- bind
- connect
- getsockopt
- listen
- recv
- send
- setsockopt
- shutdown
- socketpair
- :threads
- fork
- :system
- system
- exec
-
-
-Note that while the above category system is presently a strict
-hierarchy, this should not be assumed.
-
-A plain C<use autodie> implies C<use autodie qw(:default)>. Note that
-C<system> and C<exec> are not enabled by default. C<system> requires
-the optional L<IPC::System::Simple> module to be installed, and enabling
-C<system> or C<exec> will invalidate their exotic forms. See L</BUGS>
-below for more details.
-
-The syntax:
-
- use autodie qw(:1.994);
-
-allows the C<:default> list from a particular version to be used. This
-provides the convenience of using the default methods, but the surety
-that no behavorial changes will occur if the C<autodie> module is
-upgraded.
-
-C<autodie> can be enabled for all of Perl's built-ins, including
-C<system> and C<exec> with:
-
- use autodie qw(:all);
-
-=head1 FUNCTION SPECIFIC NOTES
-
-=head2 flock
-
-It is not considered an error for C<flock> to return false if it fails
-to an C<EWOULDBLOCK> (or equivalent) condition. This means one can
-still use the common convention of testing the return value of
-C<flock> when called with the C<LOCK_NB> option:
-
- use autodie;
-
- if ( flock($fh, LOCK_EX | LOCK_NB) ) {
- # We have a lock
- }
-
-Autodying C<flock> will generate an exception if C<flock> returns
-false with any other error.
-
-=head2 system/exec
-
-The C<system> built-in is considered to have failed in the following
-circumstances:
-
-=over 4
-
-=item *
-
-The command does not start.
-
-=item *
-
-The command is killed by a signal.
-
-=item *
-
-The command returns a non-zero exit value (but see below).
-
-=back
-
-On success, the autodying form of C<system> returns the I<exit value>
-rather than the contents of C<$?>.
-
-Additional allowable exit values can be supplied as an optional first
-argument to autodying C<system>:
-
- system( [ 0, 1, 2 ], $cmd, @args); # 0,1,2 are good exit values
-
-C<autodie> uses the L<IPC::System::Simple> module to change C<system>.
-See its documentation for further information.
-
-Applying C<autodie> to C<system> or C<exec> causes the exotic
-forms C<system { $cmd } @args > or C<exec { $cmd } @args>
-to be considered a syntax error until the end of the lexical scope.
-If you really need to use the exotic form, you can call C<CORE::system>
-or C<CORE::exec> instead, or use C<no autodie qw(system exec)> before
-calling the exotic form.
-
-=head1 GOTCHAS
-
-Functions called in list context are assumed to have failed if they
-return an empty list, or a list consisting only of a single undef
-element.
-
-=head1 DIAGNOSTICS
-
-=over 4
-
-=item :void cannot be used with lexical scope
-
-The C<:void> option is supported in L<Fatal>, but not
-C<autodie>. To workaround this, C<autodie> may be explicitly disabled until
-the end of the current block with C<no autodie>.
-To disable autodie for only a single function (eg, open)
-use C<no autodie qw(open)>.
-
-=item No user hints defined for %s
-
-You've insisted on hints for user-subroutines, either by pre-pending
-a C<!> to the subroutine name itself, or earlier in the list of arguments
-to C<autodie>. However the subroutine in question does not have
-any hints available.
-
-=back
-
-See also L<Fatal/DIAGNOSTICS>.
-
-=head1 BUGS
-
-"Used only once" warnings can be generated when C<autodie> or C<Fatal>
-is used with package filehandles (eg, C<FILE>). Scalar filehandles are
-strongly recommended instead.
-
-When using C<autodie> or C<Fatal> with user subroutines, the
-declaration of those subroutines must appear before the first use of
-C<Fatal> or C<autodie>, or have been exported from a module.
-Attempting to use C<Fatal> or C<autodie> on other user subroutines will
-result in a compile-time error.
-
-Due to a bug in Perl, C<autodie> may "lose" any format which has the
-same name as an autodying built-in or function.
-
-C<autodie> may not work correctly if used inside a file with a
-name that looks like a string eval, such as F<eval (3)>.
-
-=head2 autodie and string eval
-
-Due to the current implementation of C<autodie>, unexpected results
-may be seen when used near or with the string version of eval.
-I<None of these bugs exist when using block eval>.
-
-Under Perl 5.8 only, C<autodie> I<does not> propagate into string C<eval>
-statements, although it can be explicitly enabled inside a string
-C<eval>.
-
-Under Perl 5.10 only, using a string eval when C<autodie> is in
-effect can cause the autodie behaviour to leak into the surrounding
-scope. This can be worked around by using a C<no autodie> at the
-end of the scope to explicitly remove autodie's effects, or by
-avoiding the use of string eval.
-
-I<None of these bugs exist when using block eval>. The use of
-C<autodie> with block eval is considered good practice.
-
-=head2 REPORTING BUGS
-
-Please report bugs via the CPAN Request Tracker at
-L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie>.
-
-=head1 FEEDBACK
-
-If you find this module useful, please consider rating it on the
-CPAN Ratings service at
-L<http://cpanratings.perl.org/rate?distribution=autodie> .
-
-The module author loves to hear how C<autodie> has made your life
-better (or worse). Feedback can be sent to
-E<lt>pjf at perltraining.com.auE<gt>.
-
-=head1 AUTHOR
-
-Copyright 2008-2009, Paul Fenwick E<lt>pjf at perltraining.com.auE<gt>
-
-=head1 LICENSE
-
-This module is free software. You may distribute it under the
-same terms as Perl itself.
-
-=head1 SEE ALSO
-
-L<Fatal>, L<autodie::exception>, L<autodie::hints>, L<IPC::System::Simple>
-
-I<Perl tips, autodie> at
-L<http://perltraining.com.au/tips/2008-08-20.html>
-
-=head1 ACKNOWLEDGEMENTS
-
-Mark Reed and Roland Giersig -- Klingon translators.
-
-See the F<AUTHORS> file for full credits. The latest version of this
-file can be found at
-L<http://github.com/pfenwick/autodie/tree/master/AUTHORS> .
-
-=cut
Deleted: trunk/contrib/perl/lib/autouse.pm
===================================================================
--- trunk/contrib/perl/lib/autouse.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/autouse.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,171 +0,0 @@
-package autouse;
-
-#use strict; # debugging only
-use 5.006; # use warnings
-
-$autouse::VERSION = '1.06';
-
-$autouse::DEBUG ||= 0;
-
-sub vet_import ($);
-
-sub croak {
- require Carp;
- Carp::croak(@_);
-}
-
-sub import {
- my $class = @_ ? shift : 'autouse';
- croak "usage: use $class MODULE [,SUBS...]" unless @_;
- my $module = shift;
-
- (my $pm = $module) =~ s{::}{/}g;
- $pm .= '.pm';
- if (exists $INC{$pm}) {
- vet_import $module;
- local $Exporter::ExportLevel = $Exporter::ExportLevel + 1;
- # $Exporter::Verbose = 1;
- return $module->import(map { (my $f = $_) =~ s/\(.*?\)$//; $f } @_);
- }
-
- # It is not loaded: need to do real work.
- my $callpkg = caller(0);
- print "autouse called from $callpkg\n" if $autouse::DEBUG;
-
- my $index;
- for my $f (@_) {
- my $proto;
- $proto = $1 if (my $func = $f) =~ s/\((.*)\)$//;
-
- my $closure_import_func = $func; # Full name
- my $closure_func = $func; # Name inside package
- my $index = rindex($func, '::');
- if ($index == -1) {
- $closure_import_func = "${callpkg}::$func";
- } else {
- $closure_func = substr $func, $index + 2;
- croak "autouse into different package attempted"
- unless substr($func, 0, $index) eq $module;
- }
-
- my $load_sub = sub {
- unless ($INC{$pm}) {
- require $pm;
- vet_import $module;
- }
- no warnings qw(redefine prototype);
- *$closure_import_func = \&{"${module}::$closure_func"};
- print "autousing $module; "
- ."imported $closure_func as $closure_import_func\n"
- if $autouse::DEBUG;
- goto &$closure_import_func;
- };
-
- if (defined $proto) {
- *$closure_import_func = eval "sub ($proto) { goto &\$load_sub }"
- || die;
- } else {
- *$closure_import_func = $load_sub;
- }
- }
-}
-
-sub vet_import ($) {
- my $module = shift;
- if (my $import = $module->can('import')) {
- croak "autoused module $module has unique import() method"
- unless defined(&Exporter::import)
- && ($import == \&Exporter::import ||
- $import == \&UNIVERSAL::import)
- }
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-autouse - postpone load of modules until a function is used
-
-=head1 SYNOPSIS
-
- use autouse 'Carp' => qw(carp croak);
- carp "this carp was predeclared and autoused ";
-
-=head1 DESCRIPTION
-
-If the module C<Module> is already loaded, then the declaration
-
- use autouse 'Module' => qw(func1 func2($;$));
-
-is equivalent to
-
- use Module qw(func1 func2);
-
-if C<Module> defines func2() with prototype C<($;$)>, and func1() has
-no prototypes. (At least if C<Module> uses C<Exporter>'s C<import>,
-otherwise it is a fatal error.)
-
-If the module C<Module> is not loaded yet, then the above declaration
-declares functions func1() and func2() in the current package. When
-these functions are called, they load the package C<Module> if needed,
-and substitute themselves with the correct definitions.
-
-=begin _deprecated
-
- use Module qw(Module::func3);
-
-will work and is the equivalent to:
-
- use Module qw(func3);
-
-It is not a very useful feature and has been deprecated.
-
-=end _deprecated
-
-
-=head1 WARNING
-
-Using C<autouse> will move important steps of your program's execution
-from compile time to runtime. This can
-
-=over 4
-
-=item *
-
-Break the execution of your program if the module you C<autouse>d has
-some initialization which it expects to be done early.
-
-=item *
-
-hide bugs in your code since important checks (like correctness of
-prototypes) is moved from compile time to runtime. In particular, if
-the prototype you specified on C<autouse> line is wrong, you will not
-find it out until the corresponding function is executed. This will be
-very unfortunate for functions which are not always called (note that
-for such functions C<autouse>ing gives biggest win, for a workaround
-see below).
-
-=back
-
-To alleviate the second problem (partially) it is advised to write
-your scripts like this:
-
- use Module;
- use autouse Module => qw(carp($) croak(&$));
- carp "this carp was predeclared and autoused ";
-
-The first line ensures that the errors in your argument specification
-are found early. When you ship your application you should comment
-out the first line, since it makes the second one useless.
-
-=head1 AUTHOR
-
-Ilya Zakharevich (ilya at math.ohio-state.edu)
-
-=head1 SEE ALSO
-
-perl(1).
-
-=cut
Deleted: trunk/contrib/perl/lib/autouse.t
===================================================================
--- trunk/contrib/perl/lib/autouse.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/autouse.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,71 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config;
- if (($Config::Config{'extensions'} !~ m!\bList/Util\b!) ){
- print "1..0 # Skip -- Perl configured without List::Util module\n";
- exit 0;
- }
-}
-
-use Test;
-BEGIN { plan tests => 12; }
-
-BEGIN {
- require autouse;
- eval {
- "autouse"->import('List::Util' => 'List::Util::first(&@)');
- };
- ok( !$@ );
-
- eval {
- "autouse"->import('List::Util' => 'Foo::min');
- };
- ok( $@, qr/^autouse into different package attempted/ );
-
- "autouse"->import('List::Util' => qw(max first(&@)));
-}
-
-my @a = (1,2,3,4,5.5);
-ok( max(@a), 5.5);
-
-
-# first() has a prototype of &@. Make sure that's preserved.
-ok( (first { $_ > 3 } @a), 4);
-
-
-# Example from the docs.
-use autouse 'Carp' => qw(carp croak);
-
-{
- my @warning;
- local $SIG{__WARN__} = sub { push @warning, @_ };
- carp "this carp was predeclared and autoused\n";
- ok( scalar @warning, 1 );
- ok( $warning[0], qr/^this carp was predeclared and autoused\n/ );
-
- eval { croak "It is but a scratch!" };
- ok( $@, qr/^It is but a scratch!/);
-}
-
-
-# Test that autouse's lazy module loading works.
-use autouse 'Errno' => qw(EPERM);
-
-my $mod_file = 'Errno.pm'; # just fine and portable for %INC
-ok( !exists $INC{$mod_file} );
-ok( EPERM ); # test if non-zero
-ok( exists $INC{$mod_file} );
-
-use autouse Env => "something";
-eval { something() };
-ok( $@, qr/^\Qautoused module Env has unique import() method/ );
-
-# Check that UNIVERSAL.pm doesn't interfere with modules that don't use
-# Exporter and have no import() of their own.
-require UNIVERSAL;
-autouse->import("Class::ISA" => 'self_and_super_versions');
-my %versions = self_and_super_versions("Class::ISA");
-ok( $versions{"Class::ISA"}, $Class::ISA::VERSION );
Deleted: trunk/contrib/perl/lib/base.pm
===================================================================
--- trunk/contrib/perl/lib/base.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/base.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,265 +0,0 @@
-package base;
-
-use strict 'vars';
-use vars qw($VERSION);
-$VERSION = '2.14';
-$VERSION = eval $VERSION;
-
-# constant.pm is slow
-sub SUCCESS () { 1 }
-
-sub PUBLIC () { 2**0 }
-sub PRIVATE () { 2**1 }
-sub INHERITED () { 2**2 }
-sub PROTECTED () { 2**3 }
-
-
-my $Fattr = \%fields::attr;
-
-sub has_fields {
- my($base) = shift;
- my $fglob = ${"$base\::"}{FIELDS};
- return( ($fglob && 'GLOB' eq ref($fglob) && *$fglob{HASH}) ? 1 : 0 );
-}
-
-sub has_version {
- my($base) = shift;
- my $vglob = ${$base.'::'}{VERSION};
- return( ($vglob && *$vglob{SCALAR}) ? 1 : 0 );
-}
-
-sub has_attr {
- my($proto) = shift;
- my($class) = ref $proto || $proto;
- return exists $Fattr->{$class};
-}
-
-sub get_attr {
- $Fattr->{$_[0]} = [1] unless $Fattr->{$_[0]};
- return $Fattr->{$_[0]};
-}
-
-if ($] < 5.009) {
- *get_fields = sub {
- # Shut up a possible typo warning.
- () = \%{$_[0].'::FIELDS'};
- my $f = \%{$_[0].'::FIELDS'};
-
- # should be centralized in fields? perhaps
- # fields::mk_FIELDS_be_OK. Peh. As long as %{ $package . '::FIELDS' }
- # is used here anyway, it doesn't matter.
- bless $f, 'pseudohash' if (ref($f) ne 'pseudohash');
-
- return $f;
- }
-}
-else {
- *get_fields = sub {
- # Shut up a possible typo warning.
- () = \%{$_[0].'::FIELDS'};
- return \%{$_[0].'::FIELDS'};
- }
-}
-
-sub import {
- my $class = shift;
-
- return SUCCESS unless @_;
-
- # List of base classes from which we will inherit %FIELDS.
- my $fields_base;
-
- my $inheritor = caller(0);
- my @isa_classes;
-
- my @bases;
- foreach my $base (@_) {
- if ( $inheritor eq $base ) {
- warn "Class '$inheritor' tried to inherit from itself\n";
- }
-
- next if grep $_->isa($base), ($inheritor, @bases);
-
- if (has_version($base)) {
- ${$base.'::VERSION'} = '-1, set by base.pm'
- unless defined ${$base.'::VERSION'};
- }
- else {
- my $sigdie;
- {
- local $SIG{__DIE__};
- eval "require $base";
- # Only ignore "Can't locate" errors from our eval require.
- # Other fatal errors (syntax etc) must be reported.
- die if $@ && $@ !~ /^Can't locate .*? at \(eval /;
- unless (%{"$base\::"}) {
- require Carp;
- local $" = " ";
- Carp::croak(<<ERROR);
-Base class package "$base" is empty.
- (Perhaps you need to 'use' the module which defines that package first,
- or make that module available in \@INC (\@INC contains: @INC).
-ERROR
- }
- $sigdie = $SIG{__DIE__} || undef;
- }
- # Make sure a global $SIG{__DIE__} makes it out of the localization.
- $SIG{__DIE__} = $sigdie if defined $sigdie;
- ${$base.'::VERSION'} = "-1, set by base.pm"
- unless defined ${$base.'::VERSION'};
- }
- push @bases, $base;
-
- if ( has_fields($base) || has_attr($base) ) {
- # No multiple fields inheritance *suck*
- if ($fields_base) {
- require Carp;
- Carp::croak("Can't multiply inherit fields");
- } else {
- $fields_base = $base;
- }
- }
- }
- # Save this until the end so it's all or nothing if the above loop croaks.
- push @{"$inheritor\::ISA"}, @isa_classes;
-
- push @{"$inheritor\::ISA"}, @bases;
-
- if( defined $fields_base ) {
- inherit_fields($inheritor, $fields_base);
- }
-}
-
-
-sub inherit_fields {
- my($derived, $base) = @_;
-
- return SUCCESS unless $base;
-
- my $battr = get_attr($base);
- my $dattr = get_attr($derived);
- my $dfields = get_fields($derived);
- my $bfields = get_fields($base);
-
- $dattr->[0] = @$battr;
-
- if( keys %$dfields ) {
- warn <<"END";
-$derived is inheriting from $base but already has its own fields!
-This will cause problems. Be sure you use base BEFORE declaring fields.
-END
-
- }
-
- # Iterate through the base's fields adding all the non-private
- # ones to the derived class. Hang on to the original attribute
- # (Public, Private, etc...) and add Inherited.
- # This is all too complicated to do efficiently with add_fields().
- while (my($k,$v) = each %$bfields) {
- my $fno;
- if ($fno = $dfields->{$k} and $fno != $v) {
- require Carp;
- Carp::croak ("Inherited fields can't override existing fields");
- }
-
- if( $battr->[$v] & PRIVATE ) {
- $dattr->[$v] = PRIVATE | INHERITED;
- }
- else {
- $dattr->[$v] = INHERITED | $battr->[$v];
- $dfields->{$k} = $v;
- }
- }
-
- foreach my $idx (1..$#{$battr}) {
- next if defined $dattr->[$idx];
- $dattr->[$idx] = $battr->[$idx] & INHERITED;
- }
-}
-
-
-1;
-
-__END__
-
-=head1 NAME
-
-base - Establish an ISA relationship with base classes at compile time
-
-=head1 SYNOPSIS
-
- package Baz;
- use base qw(Foo Bar);
-
-=head1 DESCRIPTION
-
-Unless you are using the C<fields> pragma, consider this module discouraged
-in favor of the lighter-weight C<parent>.
-
-Allows you to both load one or more modules, while setting up inheritance from
-those modules at the same time. Roughly similar in effect to
-
- package Baz;
- BEGIN {
- require Foo;
- require Bar;
- push @ISA, qw(Foo Bar);
- }
-
-C<base> employs some heuristics to determine if a module has already been
-loaded, if it has it doesn't try again. If C<base> tries to C<require> the
-module it will not die if it cannot find the module's file, but will die on any
-other error. After all this, should your base class be empty, containing no
-symbols, it will die. This is useful for inheriting from classes in the same
-file as yourself, like so:
-
- package Foo;
- sub exclaim { "I can have such a thing?!" }
-
- package Bar;
- use base "Foo";
-
-If $VERSION is not detected even after loading it, <base> will define $VERSION
-in the base package, setting it to the string C<-1, set by base.pm>.
-
-C<base> will also initialize the fields if one of the base classes has it.
-Multiple inheritance of fields is B<NOT> supported, if two or more base classes
-each have inheritable fields the 'base' pragma will croak. See L<fields>,
-L<public> and L<protected> for a description of this feature.
-
-The base class' C<import> method is B<not> called.
-
-
-=head1 DIAGNOSTICS
-
-=over 4
-
-=item Base class package "%s" is empty.
-
-base.pm was unable to require the base package, because it was not
-found in your path.
-
-=item Class 'Foo' tried to inherit from itself
-
-Attempting to inherit from yourself generates a warning.
-
- use Foo;
- use base 'Foo';
-
-=back
-
-=head1 HISTORY
-
-This module was introduced with Perl 5.004_04.
-
-=head1 CAVEATS
-
-Due to the limitations of the implementation, you must use
-base I<before> you declare any of your own fields.
-
-
-=head1 SEE ALSO
-
-L<fields>
-
-=cut
Deleted: trunk/contrib/perl/lib/bigfloat.pl
===================================================================
--- trunk/contrib/perl/lib/bigfloat.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/bigfloat.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,258 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-package bigfloat;
-require "bigint.pl";
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Math::BigFloat
-
-# Arbitrary length float math package
-#
-# by Mark Biggar
-#
-# number format
-# canonical strings have the form /[+-]\d+E[+-]\d+/
-# Input values can have embedded whitespace
-# Error returns
-# 'NaN' An input parameter was "Not a Number" or
-# divide by zero or sqrt of negative number
-# Division is computed to
-# max($div_scale,length(dividend)+length(divisor))
-# digits by default.
-# Also used for default sqrt scale
-
-$div_scale = 40;
-
-# Rounding modes one of 'even', 'odd', '+inf', '-inf', 'zero' or 'trunc'.
-
-$rnd_mode = 'even';
-
-# bigfloat routines
-#
-# fadd(NSTR, NSTR) return NSTR addition
-# fsub(NSTR, NSTR) return NSTR subtraction
-# fmul(NSTR, NSTR) return NSTR multiplication
-# fdiv(NSTR, NSTR[,SCALE]) returns NSTR division to SCALE places
-# fneg(NSTR) return NSTR negation
-# fabs(NSTR) return NSTR absolute value
-# fcmp(NSTR,NSTR) return CODE compare undef,<0,=0,>0
-# fround(NSTR, SCALE) return NSTR round to SCALE digits
-# ffround(NSTR, SCALE) return NSTR round at SCALEth place
-# fnorm(NSTR) return (NSTR) normalize
-# fsqrt(NSTR[, SCALE]) return NSTR sqrt to SCALE places
-
-# Convert a number to canonical string form.
-# Takes something that looks like a number and converts it to
-# the form /^[+-]\d+E[+-]\d+$/.
-sub main'fnorm { #(string) return fnum_str
- local($_) = @_;
- s/\s+//g; # strip white space
- if (/^([+-]?)(\d*)(\.(\d*))?([Ee]([+-]?\d+))?$/
- && ($2 ne '' || defined($4))) {
- my $x = defined($4) ? $4 : '';
- &norm(($1 ? "$1$2$x" : "+$2$x"), (($x ne '') ? $6-length($x) : $6));
- } else {
- 'NaN';
- }
-}
-
-# normalize number -- for internal use
-sub norm { #(mantissa, exponent) return fnum_str
- local($_, $exp) = @_;
- if ($_ eq 'NaN') {
- 'NaN';
- } else {
- s/^([+-])0+/$1/; # strip leading zeros
- if (length($_) == 1) {
- '+0E+0';
- } else {
- $exp += length($1) if (s/(0+)$//); # strip trailing zeros
- sprintf("%sE%+ld", $_, $exp);
- }
- }
-}
-
-# negation
-sub main'fneg { #(fnum_str) return fnum_str
- local($_) = &'fnorm($_[0]);
- vec($_,0,8) ^= ord('+') ^ ord('-') unless $_ eq '+0E+0'; # flip sign
- if ( ord("\t") == 9 ) { # ascii
- s/^H/N/;
- }
- else { # ebcdic character set
- s/\373/N/;
- }
- $_;
-}
-
-# absolute value
-sub main'fabs { #(fnum_str) return fnum_str
- local($_) = &'fnorm($_[0]);
- s/^-/+/; # mash sign
- $_;
-}
-
-# multiplication
-sub main'fmul { #(fnum_str, fnum_str) return fnum_str
- local($x,$y) = (&'fnorm($_[0]),&'fnorm($_[1]));
- if ($x eq 'NaN' || $y eq 'NaN') {
- 'NaN';
- } else {
- local($xm,$xe) = split('E',$x);
- local($ym,$ye) = split('E',$y);
- &norm(&'bmul($xm,$ym),$xe+$ye);
- }
-}
-
-# addition
-sub main'fadd { #(fnum_str, fnum_str) return fnum_str
- local($x,$y) = (&'fnorm($_[0]),&'fnorm($_[1]));
- if ($x eq 'NaN' || $y eq 'NaN') {
- 'NaN';
- } else {
- local($xm,$xe) = split('E',$x);
- local($ym,$ye) = split('E',$y);
- ($xm,$xe,$ym,$ye) = ($ym,$ye,$xm,$xe) if ($xe < $ye);
- &norm(&'badd($ym,$xm.('0' x ($xe-$ye))),$ye);
- }
-}
-
-# subtraction
-sub main'fsub { #(fnum_str, fnum_str) return fnum_str
- &'fadd($_[0],&'fneg($_[1]));
-}
-
-# division
-# args are dividend, divisor, scale (optional)
-# result has at most max(scale, length(dividend), length(divisor)) digits
-sub main'fdiv #(fnum_str, fnum_str[,scale]) return fnum_str
-{
- local($x,$y,$scale) = (&'fnorm($_[0]),&'fnorm($_[1]),$_[2]);
- if ($x eq 'NaN' || $y eq 'NaN' || $y eq '+0E+0') {
- 'NaN';
- } else {
- local($xm,$xe) = split('E',$x);
- local($ym,$ye) = split('E',$y);
- $scale = $div_scale if (!$scale);
- $scale = length($xm)-1 if (length($xm)-1 > $scale);
- $scale = length($ym)-1 if (length($ym)-1 > $scale);
- $scale = $scale + length($ym) - length($xm);
- &norm(&round(&'bdiv($xm.('0' x $scale),$ym),&'babs($ym)),
- $xe-$ye-$scale);
- }
-}
-
-# round int $q based on fraction $r/$base using $rnd_mode
-sub round { #(int_str, int_str, int_str) return int_str
- local($q,$r,$base) = @_;
- if ($q eq 'NaN' || $r eq 'NaN') {
- 'NaN';
- } elsif ($rnd_mode eq 'trunc') {
- $q; # just truncate
- } else {
- local($cmp) = &'bcmp(&'bmul($r,'+2'),$base);
- if ( $cmp < 0 ||
- ($cmp == 0 &&
- ( $rnd_mode eq 'zero' ||
- ($rnd_mode eq '-inf' && (substr($q,0,1) eq '+')) ||
- ($rnd_mode eq '+inf' && (substr($q,0,1) eq '-')) ||
- ($rnd_mode eq 'even' && $q =~ /[24680]$/) ||
- ($rnd_mode eq 'odd' && $q =~ /[13579]$/) )) ) {
- $q; # round down
- } else {
- &'badd($q, ((substr($q,0,1) eq '-') ? '-1' : '+1'));
- # round up
- }
- }
-}
-
-# round the mantissa of $x to $scale digits
-sub main'fround { #(fnum_str, scale) return fnum_str
- local($x,$scale) = (&'fnorm($_[0]),$_[1]);
- if ($x eq 'NaN' || $scale <= 0) {
- $x;
- } else {
- local($xm,$xe) = split('E',$x);
- if (length($xm)-1 <= $scale) {
- $x;
- } else {
- &norm(&round(substr($xm,0,$scale+1),
- "+0".substr($xm,$scale+1,1),"+10"),
- $xe+length($xm)-$scale-1);
- }
- }
-}
-
-# round $x at the 10 to the $scale digit place
-sub main'ffround { #(fnum_str, scale) return fnum_str
- local($x,$scale) = (&'fnorm($_[0]),$_[1]);
- if ($x eq 'NaN') {
- 'NaN';
- } else {
- local($xm,$xe) = split('E',$x);
- if ($xe >= $scale) {
- $x;
- } else {
- $xe = length($xm)+$xe-$scale;
- if ($xe < 1) {
- '+0E+0';
- } elsif ($xe == 1) {
- # The first substr preserves the sign, which means that
- # we'll pass a non-normalized "-0" to &round when rounding
- # -0.006 (for example), purely so that &round won't lose
- # the sign.
- &norm(&round(substr($xm,0,1).'0',
- "+0".substr($xm,1,1),"+10"), $scale);
- } else {
- &norm(&round(substr($xm,0,$xe),
- "+0".substr($xm,$xe,1),"+10"), $scale);
- }
- }
- }
-}
-
-# compare 2 values returns one of undef, <0, =0, >0
-# returns undef if either or both input value are not numbers
-sub main'fcmp #(fnum_str, fnum_str) return cond_code
-{
- local($x, $y) = (&'fnorm($_[0]),&'fnorm($_[1]));
- if ($x eq "NaN" || $y eq "NaN") {
- undef;
- } else {
- ord($y) <=> ord($x)
- ||
- ( local($xm,$xe,$ym,$ye) = split('E', $x."E$y"),
- (($xe <=> $ye) * (substr($x,0,1).'1')
- || &bigint'cmp($xm,$ym))
- );
- }
-}
-
-# square root by Newtons method.
-sub main'fsqrt { #(fnum_str[, scale]) return fnum_str
- local($x, $scale) = (&'fnorm($_[0]), $_[1]);
- if ($x eq 'NaN' || $x =~ /^-/) {
- 'NaN';
- } elsif ($x eq '+0E+0') {
- '+0E+0';
- } else {
- local($xm, $xe) = split('E',$x);
- $scale = $div_scale if (!$scale);
- $scale = length($xm)-1 if ($scale < length($xm)-1);
- local($gs, $guess) = (1, sprintf("1E%+d", (length($xm)+$xe-1)/2));
- while ($gs < 2*$scale) {
- $guess = &'fmul(&'fadd($guess,&'fdiv($x,$guess,$gs*2)),".5");
- $gs *= 2;
- }
- &'fround($guess, $scale);
- }
-}
-
-1;
Deleted: trunk/contrib/perl/lib/bigfloatpl.t
===================================================================
--- trunk/contrib/perl/lib/bigfloatpl.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/bigfloatpl.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,422 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-{
- # Silence the deprecation warnings from bigfloat.pl for the purpose
- # of testing. These tests will be removed along with bigfloat.pl in
- # the next major release of perl.
- local $SIG{__WARN__} = sub {
- if ($_[0] !~ /will be removed from the Perl core distribution/) {
- print(STDERR @_);
- }
- };
- require "bigfloat.pl";
-}
-
-$test = 0;
-$| = 1;
-print "1..355\n";
-while (<DATA>) {
- chop;
- if (/^&/) {
- $f = $_;
- } elsif (/^\$.*/) {
- eval "$_;";
- } else {
- ++$test;
- @args = split(/:/,$_,99);
- $ans = pop(@args);
- $try = "$f('" . join("','", @args) . "');";
- if (($ans1 = eval($try)) eq $ans) {
- print "ok $test\n";
- } else {
- print "not ok $test\n";
- print "# '$try' expected: '$ans' got: '$ans1'\n";
- }
- }
-}
-__END__
-&fnorm
-abc:NaN
- 1 a:NaN
-1bcd2:NaN
-11111b:NaN
-+1z:NaN
--1z:NaN
-0:+0E+0
-+0:+0E+0
-+00:+0E+0
-+0 0 0:+0E+0
-000000 0000000 00000:+0E+0
--0:+0E+0
--0000:+0E+0
-+1:+1E+0
-+01:+1E+0
-+001:+1E+0
-+00000100000:+1E+5
-123456789:+123456789E+0
--1:-1E+0
--01:-1E+0
--001:-1E+0
--123456789:-123456789E+0
--00000100000:-1E+5
-123.456a:NaN
-123.456:+123456E-3
-0.01:+1E-2
-.002:+2E-3
--0.0003:-3E-4
--.0000000004:-4E-10
-123456E2:+123456E+2
-123456E-2:+123456E-2
--123456E2:-123456E+2
--123456E-2:-123456E-2
-1e1:+1E+1
-2e-11:+2E-11
--3e111:-3E+111
--4e-1111:-4E-1111
-&fneg
-abd:NaN
-+0:+0E+0
-+1:-1E+0
--1:+1E+0
-+123456789:-123456789E+0
--123456789:+123456789E+0
-+123.456789:-123456789E-6
--123456.789:+123456789E-3
-&fabs
-abc:NaN
-+0:+0E+0
-+1:+1E+0
--1:+1E+0
-+123456789:+123456789E+0
--123456789:+123456789E+0
-+123.456789:+123456789E-6
--123456.789:+123456789E-3
-&fround
-$bigfloat::rnd_mode = 'trunc'
-+10123456789:5:+10123E+6
--10123456789:5:-10123E+6
-+10123456789:9:+101234567E+2
--10123456789:9:-101234567E+2
-+101234500:6:+101234E+3
--101234500:6:-101234E+3
-$bigfloat::rnd_mode = 'zero'
-+20123456789:5:+20123E+6
--20123456789:5:-20123E+6
-+20123456789:9:+201234568E+2
--20123456789:9:-201234568E+2
-+201234500:6:+201234E+3
--201234500:6:-201234E+3
-$bigfloat::rnd_mode = '+inf'
-+30123456789:5:+30123E+6
--30123456789:5:-30123E+6
-+30123456789:9:+301234568E+2
--30123456789:9:-301234568E+2
-+301234500:6:+301235E+3
--301234500:6:-301234E+3
-$bigfloat::rnd_mode = '-inf'
-+40123456789:5:+40123E+6
--40123456789:5:-40123E+6
-+40123456789:9:+401234568E+2
--40123456789:9:-401234568E+2
-+401234500:6:+401234E+3
--401234500:6:-401235E+3
-$bigfloat::rnd_mode = 'odd'
-+50123456789:5:+50123E+6
--50123456789:5:-50123E+6
-+50123456789:9:+501234568E+2
--50123456789:9:-501234568E+2
-+501234500:6:+501235E+3
--501234500:6:-501235E+3
-$bigfloat::rnd_mode = 'even'
-+60123456789:5:+60123E+6
--60123456789:5:-60123E+6
-+60123456789:9:+601234568E+2
--60123456789:9:-601234568E+2
-+601234500:6:+601234E+3
--601234500:6:-601234E+3
-&ffround
-$bigfloat::rnd_mode = 'trunc'
-+1.23:-1:+12E-1
--1.23:-1:-12E-1
-+1.27:-1:+12E-1
--1.27:-1:-12E-1
-+1.25:-1:+12E-1
--1.25:-1:-12E-1
-+1.35:-1:+13E-1
--1.35:-1:-13E-1
--0.006:-1:+0E+0
--0.006:-2:+0E+0
-$bigfloat::rnd_mode = 'zero'
-+2.23:-1:+22E-1
--2.23:-1:-22E-1
-+2.27:-1:+23E-1
--2.27:-1:-23E-1
-+2.25:-1:+22E-1
--2.25:-1:-22E-1
-+2.35:-1:+23E-1
--2.35:-1:-23E-1
--0.0065:-1:+0E+0
--0.0065:-2:-1E-2
--0.0065:-3:-6E-3
--0.0065:-4:-65E-4
--0.0065:-5:-65E-4
-$bigfloat::rnd_mode = '+inf'
-+3.23:-1:+32E-1
--3.23:-1:-32E-1
-+3.27:-1:+33E-1
--3.27:-1:-33E-1
-+3.25:-1:+33E-1
--3.25:-1:-32E-1
-+3.35:-1:+34E-1
--3.35:-1:-33E-1
--0.0065:-1:+0E+0
--0.0065:-2:-1E-2
--0.0065:-3:-6E-3
--0.0065:-4:-65E-4
--0.0065:-5:-65E-4
-$bigfloat::rnd_mode = '-inf'
-+4.23:-1:+42E-1
--4.23:-1:-42E-1
-+4.27:-1:+43E-1
--4.27:-1:-43E-1
-+4.25:-1:+42E-1
--4.25:-1:-43E-1
-+4.35:-1:+43E-1
--4.35:-1:-44E-1
--0.0065:-1:+0E+0
--0.0065:-2:-1E-2
--0.0065:-3:-7E-3
--0.0065:-4:-65E-4
--0.0065:-5:-65E-4
-$bigfloat::rnd_mode = 'odd'
-+5.23:-1:+52E-1
--5.23:-1:-52E-1
-+5.27:-1:+53E-1
--5.27:-1:-53E-1
-+5.25:-1:+53E-1
--5.25:-1:-53E-1
-+5.35:-1:+53E-1
--5.35:-1:-53E-1
--0.0065:-1:+0E+0
--0.0065:-2:-1E-2
--0.0065:-3:-7E-3
--0.0065:-4:-65E-4
--0.0065:-5:-65E-4
-$bigfloat::rnd_mode = 'even'
-+6.23:-1:+62E-1
--6.23:-1:-62E-1
-+6.27:-1:+63E-1
--6.27:-1:-63E-1
-+6.25:-1:+62E-1
--6.25:-1:-62E-1
-+6.35:-1:+64E-1
--6.35:-1:-64E-1
--0.0065:-1:+0E+0
--0.0065:-2:-1E-2
--0.0065:-3:-6E-3
--0.0065:-4:-65E-4
--0.0065:-5:-65E-4
-&fcmp
-abc:abc:
-abc:+0:
-+0:abc:
-+0:+0:0
--1:+0:-1
-+0:-1:1
-+1:+0:1
-+0:+1:-1
--1:+1:-1
-+1:-1:1
--1:-1:0
-+1:+1:0
-+123:+123:0
-+123:+12:1
-+12:+123:-1
--123:-123:0
--123:-12:-1
--12:-123:1
-+123:+124:-1
-+124:+123:1
--123:-124:1
--124:-123:-1
-&fadd
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:+0E+0
-+1:+0:+1E+0
-+0:+1:+1E+0
-+1:+1:+2E+0
--1:+0:-1E+0
-+0:-1:-1E+0
--1:-1:-2E+0
--1:+1:+0E+0
-+1:-1:+0E+0
-+9:+1:+1E+1
-+99:+1:+1E+2
-+999:+1:+1E+3
-+9999:+1:+1E+4
-+99999:+1:+1E+5
-+999999:+1:+1E+6
-+9999999:+1:+1E+7
-+99999999:+1:+1E+8
-+999999999:+1:+1E+9
-+9999999999:+1:+1E+10
-+99999999999:+1:+1E+11
-+10:-1:+9E+0
-+100:-1:+99E+0
-+1000:-1:+999E+0
-+10000:-1:+9999E+0
-+100000:-1:+99999E+0
-+1000000:-1:+999999E+0
-+10000000:-1:+9999999E+0
-+100000000:-1:+99999999E+0
-+1000000000:-1:+999999999E+0
-+10000000000:-1:+9999999999E+0
-+123456789:+987654321:+111111111E+1
--123456789:+987654321:+864197532E+0
--123456789:-987654321:-111111111E+1
-+123456789:-987654321:-864197532E+0
-&fsub
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:+0E+0
-+1:+0:+1E+0
-+0:+1:-1E+0
-+1:+1:+0E+0
--1:+0:-1E+0
-+0:-1:+1E+0
--1:-1:+0E+0
--1:+1:-2E+0
-+1:-1:+2E+0
-+9:+1:+8E+0
-+99:+1:+98E+0
-+999:+1:+998E+0
-+9999:+1:+9998E+0
-+99999:+1:+99998E+0
-+999999:+1:+999998E+0
-+9999999:+1:+9999998E+0
-+99999999:+1:+99999998E+0
-+999999999:+1:+999999998E+0
-+9999999999:+1:+9999999998E+0
-+99999999999:+1:+99999999998E+0
-+10:-1:+11E+0
-+100:-1:+101E+0
-+1000:-1:+1001E+0
-+10000:-1:+10001E+0
-+100000:-1:+100001E+0
-+1000000:-1:+1000001E+0
-+10000000:-1:+10000001E+0
-+100000000:-1:+100000001E+0
-+1000000000:-1:+1000000001E+0
-+10000000000:-1:+10000000001E+0
-+123456789:+987654321:-864197532E+0
--123456789:+987654321:-111111111E+1
--123456789:-987654321:+864197532E+0
-+123456789:-987654321:+111111111E+1
-&fmul
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:+0E+0
-+0:+1:+0E+0
-+1:+0:+0E+0
-+0:-1:+0E+0
--1:+0:+0E+0
-+123456789123456789:+0:+0E+0
-+0:+123456789123456789:+0E+0
--1:-1:+1E+0
--1:+1:-1E+0
-+1:-1:-1E+0
-+1:+1:+1E+0
-+2:+3:+6E+0
--2:+3:-6E+0
-+2:-3:-6E+0
--2:-3:+6E+0
-+111:+111:+12321E+0
-+10101:+10101:+102030201E+0
-+1001001:+1001001:+1002003002001E+0
-+100010001:+100010001:+10002000300020001E+0
-+10000100001:+10000100001:+100002000030000200001E+0
-+11111111111:+9:+99999999999E+0
-+22222222222:+9:+199999999998E+0
-+33333333333:+9:+299999999997E+0
-+44444444444:+9:+399999999996E+0
-+55555555555:+9:+499999999995E+0
-+66666666666:+9:+599999999994E+0
-+77777777777:+9:+699999999993E+0
-+88888888888:+9:+799999999992E+0
-+99999999999:+9:+899999999991E+0
-&fdiv
-abc:abc:NaN
-abc:+1:abc:NaN
-+1:abc:NaN
-+0:+0:NaN
-+0:+1:+0E+0
-+1:+0:NaN
-+0:-1:+0E+0
--1:+0:NaN
-+1:+1:+1E+0
--1:-1:+1E+0
-+1:-1:-1E+0
--1:+1:-1E+0
-+1:+2:+5E-1
-+2:+1:+2E+0
-+10:+5:+2E+0
-+100:+4:+25E+0
-+1000:+8:+125E+0
-+10000:+16:+625E+0
-+10000:-16:-625E+0
-+999999999999:+9:+111111111111E+0
-+999999999999:+99:+10101010101E+0
-+999999999999:+999:+1001001001E+0
-+999999999999:+9999:+100010001E+0
-+999999999999999:+99999:+10000100001E+0
-+1000000000:+9:+1111111111111111111111111111111111111111E-31
-+2000000000:+9:+2222222222222222222222222222222222222222E-31
-+3000000000:+9:+3333333333333333333333333333333333333333E-31
-+4000000000:+9:+4444444444444444444444444444444444444444E-31
-+5000000000:+9:+5555555555555555555555555555555555555556E-31
-+6000000000:+9:+6666666666666666666666666666666666666667E-31
-+7000000000:+9:+7777777777777777777777777777777777777778E-31
-+8000000000:+9:+8888888888888888888888888888888888888889E-31
-+9000000000:+9:+1E+9
-+35500000:+113:+3141592920353982300884955752212389380531E-34
-+71000000:+226:+3141592920353982300884955752212389380531E-34
-+106500000:+339:+3141592920353982300884955752212389380531E-34
-+1000000000:+3:+3333333333333333333333333333333333333333E-31
-$bigfloat::div_scale = 20
-+1000000000:+9:+11111111111111111111E-11
-+2000000000:+9:+22222222222222222222E-11
-+3000000000:+9:+33333333333333333333E-11
-+4000000000:+9:+44444444444444444444E-11
-+5000000000:+9:+55555555555555555556E-11
-+6000000000:+9:+66666666666666666667E-11
-+7000000000:+9:+77777777777777777778E-11
-+8000000000:+9:+88888888888888888889E-11
-+9000000000:+9:+1E+9
-+35500000:+113:+314159292035398230088E-15
-+71000000:+226:+314159292035398230088E-15
-+106500000:+339:+31415929203539823009E-14
-+1000000000:+3:+33333333333333333333E-11
-$bigfloat::div_scale = 40
-&fsqrt
-+0:+0E+0
--1:NaN
--2:NaN
--16:NaN
--123.456:NaN
-+1:+1E+0
-+1.44:+12E-1
-+2:+141421356237309504880168872420969807857E-38
-+4:+2E+0
-+16:+4E+0
-+100:+1E+1
-+123.456:+1111107555549866648462149404118219234119E-38
-+15241.383936:+123456E-3
Deleted: trunk/contrib/perl/lib/bigint.pl
===================================================================
--- trunk/contrib/perl/lib/bigint.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/bigint.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,324 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-package bigint;
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# Suggested alternative: Math::BigInt
-
-# arbitrary size integer math package
-#
-# by Mark Biggar
-#
-# Canonical Big integer value are strings of the form
-# /^[+-]\d+$/ with leading zeros suppressed
-# Input values to these routines may be strings of the form
-# /^\s*[+-]?[\d\s]+$/.
-# Examples:
-# '+0' canonical zero value
-# ' -123 123 123' canonical value '-123123123'
-# '1 23 456 7890' canonical value '+1234567890'
-# Output values always in canonical form
-#
-# Actual math is done in an internal format consisting of an array
-# whose first element is the sign (/^[+-]$/) and whose remaining
-# elements are base 100000 digits with the least significant digit first.
-# The string 'NaN' is used to represent the result when input arguments
-# are not numbers, as well as the result of dividing by zero
-#
-# routines provided are:
-#
-# bneg(BINT) return BINT negation
-# babs(BINT) return BINT absolute value
-# bcmp(BINT,BINT) return CODE compare numbers (undef,<0,=0,>0)
-# badd(BINT,BINT) return BINT addition
-# bsub(BINT,BINT) return BINT subtraction
-# bmul(BINT,BINT) return BINT multiplication
-# bdiv(BINT,BINT) return (BINT,BINT) division (quo,rem) just quo if scalar
-# bmod(BINT,BINT) return BINT modulus
-# bgcd(BINT,BINT) return BINT greatest common divisor
-# bnorm(BINT) return BINT normalization
-#
-
-# overcome a floating point problem on certain osnames (posix-bc, os390)
-BEGIN {
- my $x = 100000.0;
- my $use_mult = int($x*1e-5)*1e5 == $x ? 1 : 0;
-}
-
-$zero = 0;
-
-
-# normalize string form of number. Strip leading zeros. Strip any
-# white space and add a sign, if missing.
-# Strings that are not numbers result the value 'NaN'.
-
-sub main'bnorm { #(num_str) return num_str
- local($_) = @_;
- s/\s+//g; # strip white space
- if (s/^([+-]?)0*(\d+)$/$1$2/) { # test if number
- substr($_,0,0) = '+' unless $1; # Add missing sign
- s/^-0/+0/;
- $_;
- } else {
- 'NaN';
- }
-}
-
-# Convert a number from string format to internal base 100000 format.
-# Assumes normalized value as input.
-sub internal { #(num_str) return int_num_array
- local($d) = @_;
- ($is,$il) = (substr($d,0,1),length($d)-2);
- substr($d,0,1) = '';
- ($is, reverse(unpack("a" . ($il%5+1) . ("a5" x ($il/5)), $d)));
-}
-
-# Convert a number from internal base 100000 format to string format.
-# This routine scribbles all over input array.
-sub external { #(int_num_array) return num_str
- $es = shift;
- grep($_ > 9999 || ($_ = substr('0000'.$_,-5)), @_); # zero pad
- &'bnorm(join('', $es, reverse(@_))); # reverse concat and normalize
-}
-
-# Negate input value.
-sub main'bneg { #(num_str) return num_str
- local($_) = &'bnorm(@_);
- vec($_,0,8) ^= ord('+') ^ ord('-') unless $_ eq '+0';
- s/^./N/ unless /^[-+]/; # works both in ASCII and EBCDIC
- $_;
-}
-
-# Returns the absolute value of the input.
-sub main'babs { #(num_str) return num_str
- &abs(&'bnorm(@_));
-}
-
-sub abs { # post-normalized abs for internal use
- local($_) = @_;
- s/^-/+/;
- $_;
-}
-
-# Compares 2 values. Returns one of undef, <0, =0, >0. (suitable for sort)
-sub main'bcmp { #(num_str, num_str) return cond_code
- local($x,$y) = (&'bnorm($_[0]),&'bnorm($_[1]));
- if ($x eq 'NaN') {
- undef;
- } elsif ($y eq 'NaN') {
- undef;
- } else {
- &cmp($x,$y);
- }
-}
-
-sub cmp { # post-normalized compare for internal use
- local($cx, $cy) = @_;
- return 0 if ($cx eq $cy);
-
- local($sx, $sy) = (substr($cx, 0, 1), substr($cy, 0, 1));
- local($ld);
-
- if ($sx eq '+') {
- return 1 if ($sy eq '-' || $cy eq '+0');
- $ld = length($cx) - length($cy);
- return $ld if ($ld);
- return $cx cmp $cy;
- } else { # $sx eq '-'
- return -1 if ($sy eq '+');
- $ld = length($cy) - length($cx);
- return $ld if ($ld);
- return $cy cmp $cx;
- }
-
-}
-
-sub main'badd { #(num_str, num_str) return num_str
- local(*x, *y); ($x, $y) = (&'bnorm($_[0]),&'bnorm($_[1]));
- if ($x eq 'NaN') {
- 'NaN';
- } elsif ($y eq 'NaN') {
- 'NaN';
- } else {
- @x = &internal($x); # convert to internal form
- @y = &internal($y);
- local($sx, $sy) = (shift @x, shift @y); # get signs
- if ($sx eq $sy) {
- &external($sx, &add(*x, *y)); # if same sign add
- } else {
- ($x, $y) = (&abs($x),&abs($y)); # make abs
- if (&cmp($y,$x) > 0) {
- &external($sy, &sub(*y, *x));
- } else {
- &external($sx, &sub(*x, *y));
- }
- }
- }
-}
-
-sub main'bsub { #(num_str, num_str) return num_str
- &'badd($_[0],&'bneg($_[1]));
-}
-
-# GCD -- Euclid's algorithm Knuth Vol 2 pg 296
-sub main'bgcd { #(num_str, num_str) return num_str
- local($x,$y) = (&'bnorm($_[0]),&'bnorm($_[1]));
- if ($x eq 'NaN' || $y eq 'NaN') {
- 'NaN';
- } else {
- ($x, $y) = ($y,&'bmod($x,$y)) while $y ne '+0';
- $x;
- }
-}
-
-# routine to add two base 1e5 numbers
-# stolen from Knuth Vol 2 Algorithm A pg 231
-# there are separate routines to add and sub as per Kunth pg 233
-sub add { #(int_num_array, int_num_array) return int_num_array
- local(*x, *y) = @_;
- $car = 0;
- for $x (@x) {
- last unless @y || $car;
- $x -= 1e5 if $car = (($x += shift(@y) + $car) >= 1e5) ? 1 : 0;
- }
- for $y (@y) {
- last unless $car;
- $y -= 1e5 if $car = (($y += $car) >= 1e5) ? 1 : 0;
- }
- (@x, @y, $car);
-}
-
-# subtract base 1e5 numbers -- stolen from Knuth Vol 2 pg 232, $x > $y
-sub sub { #(int_num_array, int_num_array) return int_num_array
- local(*sx, *sy) = @_;
- $bar = 0;
- for $sx (@sx) {
- last unless @y || $bar;
- $sx += 1e5 if $bar = (($sx -= shift(@sy) + $bar) < 0);
- }
- @sx;
-}
-
-# multiply two numbers -- stolen from Knuth Vol 2 pg 233
-sub main'bmul { #(num_str, num_str) return num_str
- local(*x, *y); ($x, $y) = (&'bnorm($_[0]), &'bnorm($_[1]));
- if ($x eq 'NaN') {
- 'NaN';
- } elsif ($y eq 'NaN') {
- 'NaN';
- } else {
- @x = &internal($x);
- @y = &internal($y);
- local($signr) = (shift @x ne shift @y) ? '-' : '+';
- @prod = ();
- for $x (@x) {
- ($car, $cty) = (0, 0);
- for $y (@y) {
- $prod = $x * $y + $prod[$cty] + $car;
- if ($use_mult) {
- $prod[$cty++] =
- $prod - ($car = int($prod * 1e-5)) * 1e5;
- }
- else {
- $prod[$cty++] =
- $prod - ($car = int($prod / 1e5)) * 1e5;
- }
- }
- $prod[$cty] += $car if $car;
- $x = shift @prod;
- }
- &external($signr, @x, @prod);
- }
-}
-
-# modulus
-sub main'bmod { #(num_str, num_str) return num_str
- (&'bdiv(@_))[1];
-}
-
-sub main'bdiv { #(dividend: num_str, divisor: num_str) return num_str
- local (*x, *y); ($x, $y) = (&'bnorm($_[0]), &'bnorm($_[1]));
- return wantarray ? ('NaN','NaN') : 'NaN'
- if ($x eq 'NaN' || $y eq 'NaN' || $y eq '+0');
- return wantarray ? ('+0',$x) : '+0' if (&cmp(&abs($x),&abs($y)) < 0);
- @x = &internal($x); @y = &internal($y);
- $srem = $y[0];
- $sr = (shift @x ne shift @y) ? '-' : '+';
- $car = $bar = $prd = 0;
- if (($dd = int(1e5/($y[$#y]+1))) != 1) {
- for $x (@x) {
- $x = $x * $dd + $car;
- if ($use_mult) {
- $x -= ($car = int($x * 1e-5)) * 1e5;
- }
- else {
- $x -= ($car = int($x / 1e5)) * 1e5;
- }
- }
- push(@x, $car); $car = 0;
- for $y (@y) {
- $y = $y * $dd + $car;
- if ($use_mult) {
- $y -= ($car = int($y * 1e-5)) * 1e5;
- }
- else {
- $y -= ($car = int($y / 1e5)) * 1e5;
- }
- }
- }
- else {
- push(@x, 0);
- }
- @q = (); ($v2,$v1) = @y[-2,-1];
- while ($#x > $#y) {
- ($u2,$u1,$u0) = @x[-3..-1];
- $q = (($u0 == $v1) ? 99999 : int(($u0*1e5+$u1)/$v1));
- --$q while ($v2*$q > ($u0*1e5+$u1-$q*$v1)*1e5+$u2);
- if ($q) {
- ($car, $bar) = (0,0);
- for ($y = 0, $x = $#x-$#y-1; $y <= $#y; ++$y,++$x) {
- $prd = $q * $y[$y] + $car;
- if ($use_mult) {
- $prd -= ($car = int($prd * 1e-5)) * 1e5;
- }
- else {
- $prd -= ($car = int($prd / 1e5)) * 1e5;
- }
- $x[$x] += 1e5 if ($bar = (($x[$x] -= $prd + $bar) < 0));
- }
- if ($x[$#x] < $car + $bar) {
- $car = 0; --$q;
- for ($y = 0, $x = $#x-$#y-1; $y <= $#y; ++$y,++$x) {
- $x[$x] -= 1e5
- if ($car = (($x[$x] += $y[$y] + $car) > 1e5));
- }
- }
- }
- pop(@x); unshift(@q, $q);
- }
- if (wantarray) {
- @d = ();
- if ($dd != 1) {
- $car = 0;
- for $x (reverse @x) {
- $prd = $car * 1e5 + $x;
- $car = $prd - ($tmp = int($prd / $dd)) * $dd;
- unshift(@d, $tmp);
- }
- }
- else {
- @d = @x;
- }
- (&external($sr, @q), &external($srem, @d, $zero));
- } else {
- &external($sr, @q);
- }
-}
-1;
Deleted: trunk/contrib/perl/lib/bigint.pm
===================================================================
--- trunk/contrib/perl/lib/bigint.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/bigint.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,675 +0,0 @@
-package bigint;
-use 5.006;
-
-$VERSION = '0.23';
-use Exporter;
- at ISA = qw( Exporter );
- at EXPORT_OK = qw( PI e bpi bexp );
- at EXPORT = qw( inf NaN );
-
-use strict;
-use overload;
-
-##############################################################################
-
-# These are all alike, and thus faked by AUTOLOAD
-
-my @faked = qw/round_mode accuracy precision div_scale/;
-use vars qw/$VERSION $AUTOLOAD $_lite/; # _lite for testsuite
-
-sub AUTOLOAD
- {
- my $name = $AUTOLOAD;
-
- $name =~ s/.*:://; # split package
- no strict 'refs';
- foreach my $n (@faked)
- {
- if ($n eq $name)
- {
- *{"bigint::$name"} = sub
- {
- my $self = shift;
- no strict 'refs';
- if (defined $_[0])
- {
- return Math::BigInt->$name($_[0]);
- }
- return Math::BigInt->$name();
- };
- return &$name;
- }
- }
-
- # delayed load of Carp and avoid recursion
- require Carp;
- Carp::croak ("Can't call bigint\-\>$name, not a valid method");
- }
-
-sub upgrade
- {
- $Math::BigInt::upgrade;
- }
-
-sub _binary_constant
- {
- # this takes a binary/hexadecimal/octal constant string and returns it
- # as string suitable for new. Basically it converts octal to decimal, and
- # passes every thing else unmodified back.
- my $string = shift;
-
- return Math::BigInt->new($string) if $string =~ /^0[bx]/;
-
- # so it must be an octal constant
- Math::BigInt->from_oct($string);
- }
-
-sub _float_constant
- {
- # this takes a floating point constant string and returns it truncated to
- # integer. For instance, '4.5' => '4', '1.234e2' => '123' etc
- my $float = shift;
-
- # some simple cases first
- return $float if ($float =~ /^[+-]?[0-9]+$/); # '+123','-1','0' etc
- return $float
- if ($float =~ /^[+-]?[0-9]+\.?[eE]\+?[0-9]+$/); # 123e2, 123.e+2
- return '0' if ($float =~ /^[+-]?[0]*\.[0-9]+$/); # .2, 0.2, -.1
- if ($float =~ /^[+-]?[0-9]+\.[0-9]*$/) # 1., 1.23, -1.2 etc
- {
- $float =~ s/\..*//;
- return $float;
- }
- my ($mis,$miv,$mfv,$es,$ev) = Math::BigInt::_split($float);
- return $float if !defined $mis; # doesn't look like a number to me
- my $ec = int($$ev);
- my $sign = $$mis; $sign = '' if $sign eq '+';
- if ($$es eq '-')
- {
- # ignore fraction part entirely
- if ($ec >= length($$miv)) # 123.23E-4
- {
- return '0';
- }
- return $sign . substr ($$miv,0,length($$miv)-$ec); # 1234.45E-2 = 12
- }
- # xE+y
- if ($ec >= length($$mfv))
- {
- $ec -= length($$mfv);
- return $sign.$$miv.$$mfv if $ec == 0; # 123.45E+2 => 12345
- return $sign.$$miv.$$mfv.'E'.$ec; # 123.45e+3 => 12345e1
- }
- $mfv = substr($$mfv,0,$ec);
- $sign.$$miv.$mfv; # 123.45e+1 => 1234
- }
-
-sub unimport
- {
- $^H{bigint} = undef; # no longer in effect
- overload::remove_constant('binary','','float','','integer');
- }
-
-sub in_effect
- {
- my $level = shift || 0;
- my $hinthash = (caller($level))[10];
- $hinthash->{bigint};
- }
-
-#############################################################################
-# the following two routines are for "use bigint qw/hex oct/;":
-
-sub _hex_global
- {
- my $i = $_[0];
- $i = '0x'.$i unless $i =~ /^0x/;
- Math::BigInt->new($i);
- }
-
-sub _oct_global
- {
- my $i = $_[0];
- return Math::BigInt->from_oct($i) if $i =~ /^0[0-7]/;
- Math::BigInt->new($i);
- }
-
-#############################################################################
-# the following two routines are for Perl 5.9.4 or later and are lexical
-
-sub _hex
- {
- return CORE::hex($_[0]) unless in_effect(1);
- my $i = $_[0];
- $i = '0x'.$i unless $i =~ /^0x/;
- Math::BigInt->new($i);
- }
-
-sub _oct
- {
- return CORE::oct($_[0]) unless in_effect(1);
- my $i = $_[0];
- return Math::BigInt->from_oct($i) if $i =~ /^0[0-7]/;
- Math::BigInt->new($i);
- }
-
-sub import
- {
- my $self = shift;
-
- $^H{bigint} = 1; # we are in effect
-
- my ($hex,$oct);
- # for newer Perls always override hex() and oct() with a lexical version:
- if ($] > 5.009004)
- {
- $oct = \&_oct;
- $hex = \&_hex;
- }
- # some defaults
- my $lib = ''; my $lib_kind = 'try';
-
- my @import = ( ':constant' ); # drive it w/ constant
- my @a = @_; my $l = scalar @_; my $j = 0;
- my ($ver,$trace); # version? trace?
- my ($a,$p); # accuracy, precision
- for ( my $i = 0; $i < $l ; $i++,$j++ )
- {
- if ($_[$i] =~ /^(l|lib|try|only)$/)
- {
- # this causes a different low lib to take care...
- $lib_kind = $1; $lib_kind = 'lib' if $lib_kind eq 'l';
- $lib = $_[$i+1] || '';
- my $s = 2; $s = 1 if @a-$j < 2; # avoid "can not modify non-existant..."
- splice @a, $j, $s; $j -= $s; $i++;
- }
- elsif ($_[$i] =~ /^(a|accuracy)$/)
- {
- $a = $_[$i+1];
- my $s = 2; $s = 1 if @a-$j < 2; # avoid "can not modify non-existant..."
- splice @a, $j, $s; $j -= $s; $i++;
- }
- elsif ($_[$i] =~ /^(p|precision)$/)
- {
- $p = $_[$i+1];
- my $s = 2; $s = 1 if @a-$j < 2; # avoid "can not modify non-existant..."
- splice @a, $j, $s; $j -= $s; $i++;
- }
- elsif ($_[$i] =~ /^(v|version)$/)
- {
- $ver = 1;
- splice @a, $j, 1; $j --;
- }
- elsif ($_[$i] =~ /^(t|trace)$/)
- {
- $trace = 1;
- splice @a, $j, 1; $j --;
- }
- elsif ($_[$i] eq 'hex')
- {
- splice @a, $j, 1; $j --;
- $hex = \&_hex_global;
- }
- elsif ($_[$i] eq 'oct')
- {
- splice @a, $j, 1; $j --;
- $oct = \&_oct_global;
- }
- elsif ($_[$i] !~ /^(PI|e|bpi|bexp)\z/)
- {
- die ("unknown option $_[$i]");
- }
- }
- my $class;
- $_lite = 0; # using M::BI::L ?
- if ($trace)
- {
- require Math::BigInt::Trace; $class = 'Math::BigInt::Trace';
- }
- else
- {
- # see if we can find Math::BigInt::Lite
- if (!defined $a && !defined $p) # rounding won't work to well
- {
- eval 'require Math::BigInt::Lite;';
- if ($@ eq '')
- {
- @import = ( ); # :constant in Lite, not MBI
- Math::BigInt::Lite->import( ':constant' );
- $_lite= 1; # signal okay
- }
- }
- require Math::BigInt if $_lite == 0; # not already loaded?
- $class = 'Math::BigInt'; # regardless of MBIL or not
- }
- push @import, $lib_kind => $lib if $lib ne '';
- # Math::BigInt::Trace or plain Math::BigInt
- $class->import(@import);
-
- bigint->accuracy($a) if defined $a;
- bigint->precision($p) if defined $p;
- if ($ver)
- {
- print "bigint\t\t\t v$VERSION\n";
- print "Math::BigInt::Lite\t v$Math::BigInt::Lite::VERSION\n" if $_lite;
- print "Math::BigInt\t\t v$Math::BigInt::VERSION";
- my $config = Math::BigInt->config();
- print " lib => $config->{lib} v$config->{lib_version}\n";
- exit;
- }
- # we take care of floating point constants, since BigFloat isn't available
- # and BigInt doesn't like them:
- overload::constant float => sub { Math::BigInt->new( _float_constant(shift) ); };
- # Take care of octal/hexadecimal constants
- overload::constant binary => sub { _binary_constant(shift) };
-
- # if another big* was already loaded:
- my ($package) = caller();
-
- no strict 'refs';
- if (!defined *{"${package}::inf"})
- {
- $self->export_to_level(1,$self, at a); # export inf and NaN, e and PI
- }
- {
- no warnings 'redefine';
- *CORE::GLOBAL::oct = $oct if $oct;
- *CORE::GLOBAL::hex = $hex if $hex;
- }
- }
-
-sub inf () { Math::BigInt::binf(); }
-sub NaN () { Math::BigInt::bnan(); }
-
-sub PI () { Math::BigInt->new(3); }
-sub e () { Math::BigInt->new(2); }
-sub bpi ($) { Math::BigInt->new(3); }
-sub bexp ($$) { my $x = Math::BigInt->new($_[0]); $x->bexp($_[1]); }
-
-1;
-
-__END__
-
-=head1 NAME
-
-bigint - Transparent BigInteger support for Perl
-
-=head1 SYNOPSIS
-
- use bigint;
-
- $x = 2 + 4.5,"\n"; # BigInt 6
- print 2 ** 512,"\n"; # really is what you think it is
- print inf + 42,"\n"; # inf
- print NaN * 7,"\n"; # NaN
- print hex("0x1234567890123490"),"\n"; # Perl v5.9.4 or later
-
- {
- no bigint;
- print 2 ** 256,"\n"; # a normal Perl scalar now
- }
-
- # Note that this will be global:
- use bigint qw/hex oct/;
- print hex("0x1234567890123490"),"\n";
- print oct("01234567890123490"),"\n";
-
-=head1 DESCRIPTION
-
-All operators (including basic math operations) are overloaded. Integer
-constants are created as proper BigInts.
-
-Floating point constants are truncated to integer. All parts and results of
-expressions are also truncated.
-
-Unlike L<integer>, this pragma creates integer constants that are only
-limited in their size by the available memory and CPU time.
-
-=head2 use integer vs. use bigint
-
-There is one small difference between C<use integer> and C<use bigint>: the
-former will not affect assignments to variables and the return value of
-some functions. C<bigint> truncates these results to integer too:
-
- # perl -Minteger -wle 'print 3.2'
- 3.2
- # perl -Minteger -wle 'print 3.2 + 0'
- 3
- # perl -Mbigint -wle 'print 3.2'
- 3
- # perl -Mbigint -wle 'print 3.2 + 0'
- 3
-
- # perl -Mbigint -wle 'print exp(1) + 0'
- 2
- # perl -Mbigint -wle 'print exp(1)'
- 2
- # perl -Minteger -wle 'print exp(1)'
- 2.71828182845905
- # perl -Minteger -wle 'print exp(1) + 0'
- 2
-
-In practice this makes seldom a difference as B<parts and results> of
-expressions will be truncated anyway, but this can, for instance, affect the
-return value of subroutines:
-
- sub three_integer { use integer; return 3.2; }
- sub three_bigint { use bigint; return 3.2; }
-
- print three_integer(), " ", three_bigint(),"\n"; # prints "3.2 3"
-
-=head2 Options
-
-bigint recognizes some options that can be passed while loading it via use.
-The options can (currently) be either a single letter form, or the long form.
-The following options exist:
-
-=over 2
-
-=item a or accuracy
-
-This sets the accuracy for all math operations. The argument must be greater
-than or equal to zero. See Math::BigInt's bround() function for details.
-
- perl -Mbigint=a,2 -le 'print 12345+1'
-
-Note that setting precision and accurary at the same time is not possible.
-
-=item p or precision
-
-This sets the precision for all math operations. The argument can be any
-integer. Negative values mean a fixed number of digits after the dot, and
-are <B>ignored</B> since all operations happen in integer space.
-A positive value rounds to this digit left from the dot. 0 or 1 mean round to
-integer and are ignore like negative values.
-
-See Math::BigInt's bfround() function for details.
-
- perl -Mbignum=p,5 -le 'print 123456789+123'
-
-Note that setting precision and accurary at the same time is not possible.
-
-=item t or trace
-
-This enables a trace mode and is primarily for debugging bigint or
-Math::BigInt.
-
-=item hex
-
-Override the built-in hex() method with a version that can handle big
-integers. Note that under Perl v5.9.4 or ealier, this will be global
-and cannot be disabled with "no bigint;".
-
-=item oct
-
-Override the built-in oct() method with a version that can handle big
-integers. Note that under Perl v5.9.4 or ealier, this will be global
-and cannot be disabled with "no bigint;".
-
-=item l, lib, try or only
-
-Load a different math lib, see L<Math Library>.
-
- perl -Mbigint=lib,GMP -e 'print 2 ** 512'
- perl -Mbigint=try,GMP -e 'print 2 ** 512'
- perl -Mbigint=only,GMP -e 'print 2 ** 512'
-
-Currently there is no way to specify more than one library on the command
-line. This means the following does not work:
-
- perl -Mbignum=l,GMP,Pari -e 'print 2 ** 512'
-
-This will be hopefully fixed soon ;)
-
-=item v or version
-
-This prints out the name and version of all modules used and then exits.
-
- perl -Mbigint=v
-
-=back
-
-=head2 Math Library
-
-Math with the numbers is done (by default) by a module called
-Math::BigInt::Calc. This is equivalent to saying:
-
- use bigint lib => 'Calc';
-
-You can change this by using:
-
- use bignum lib => 'GMP';
-
-The following would first try to find Math::BigInt::Foo, then
-Math::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc:
-
- use bigint lib => 'Foo,Math::BigInt::Bar';
-
-Using C<lib> warns if none of the specified libraries can be found and
-L<Math::BigInt> did fall back to one of the default libraries.
-To supress this warning, use C<try> instead:
-
- use bignum try => 'GMP';
-
-If you want the code to die instead of falling back, use C<only> instead:
-
- use bignum only => 'GMP';
-
-Please see respective module documentation for further details.
-
-=head2 Internal Format
-
-The numbers are stored as objects, and their internals might change at anytime,
-especially between math operations. The objects also might belong to different
-classes, like Math::BigInt, or Math::BigInt::Lite. Mixing them together, even
-with normal scalars is not extraordinary, but normal and expected.
-
-You should not depend on the internal format, all accesses must go through
-accessor methods. E.g. looking at $x->{sign} is not a good idea since there
-is no guaranty that the object in question has such a hash key, nor is a hash
-underneath at all.
-
-=head2 Sign
-
-The sign is either '+', '-', 'NaN', '+inf' or '-inf'.
-You can access it with the sign() method.
-
-A sign of 'NaN' is used to represent the result when input arguments are not
-numbers or as a result of 0/0. '+inf' and '-inf' represent plus respectively
-minus infinity. You will get '+inf' when dividing a positive number by 0, and
-'-inf' when dividing any negative number by 0.
-
-=head2 Methods
-
-Since all numbers are now objects, you can use all functions that are part of
-the BigInt API. You can only use the bxxx() notation, and not the fxxx()
-notation, though.
-
-=over 2
-
-=item inf()
-
-A shortcut to return Math::BigInt->binf(). Useful because Perl does not always
-handle bareword C<inf> properly.
-
-=item NaN()
-
-A shortcut to return Math::BigInt->bnan(). Useful because Perl does not always
-handle bareword C<NaN> properly.
-
-=item e
-
- # perl -Mbigint=e -wle 'print e'
-
-Returns Euler's number C<e>, aka exp(1). Note that under bigint, this is
-truncated to an integer, and hence simple '2'.
-
-=item PI
-
- # perl -Mbigint=PI -wle 'print PI'
-
-Returns PI. Note that under bigint, this is truncated to an integer, and hence
-simple '3'.
-
-=item bexp()
-
- bexp($power,$accuracy);
-
-Returns Euler's number C<e> raised to the appropriate power, to
-the wanted accuracy.
-
-Note that under bigint, the result is truncated to an integer.
-
-Example:
-
- # perl -Mbigint=bexp -wle 'print bexp(1,80)'
-
-=item bpi()
-
- bpi($accuracy);
-
-Returns PI to the wanted accuracy. Note that under bigint, this is truncated
-to an integer, and hence simple '3'.
-
-Example:
-
- # perl -Mbigint=bpi -wle 'print bpi(80)'
-
-=item upgrade()
-
-Return the class that numbers are upgraded to, is in fact returning
-C<$Math::BigInt::upgrade>.
-
-=item in_effect()
-
- use bigint;
-
- print "in effect\n" if bigint::in_effect; # true
- {
- no bigint;
- print "in effect\n" if bigint::in_effect; # false
- }
-
-Returns true or false if C<bigint> is in effect in the current scope.
-
-This method only works on Perl v5.9.4 or later.
-
-=back
-
-=head2 MATH LIBRARY
-
-Math with the numbers is done (by default) by a module called
-
-=head2 Caveat
-
-But a warning is in order. When using the following to make a copy of a number,
-only a shallow copy will be made.
-
- $x = 9; $y = $x;
- $x = $y = 7;
-
-Using the copy or the original with overloaded math is okay, e.g. the
-following work:
-
- $x = 9; $y = $x;
- print $x + 1, " ", $y,"\n"; # prints 10 9
-
-but calling any method that modifies the number directly will result in
-B<both> the original and the copy being destroyed:
-
- $x = 9; $y = $x;
- print $x->badd(1), " ", $y,"\n"; # prints 10 10
-
- $x = 9; $y = $x;
- print $x->binc(1), " ", $y,"\n"; # prints 10 10
-
- $x = 9; $y = $x;
- print $x->bmul(2), " ", $y,"\n"; # prints 18 18
-
-Using methods that do not modify, but testthe contents works:
-
- $x = 9; $y = $x;
- $z = 9 if $x->is_zero(); # works fine
-
-See the documentation about the copy constructor and C<=> in overload, as
-well as the documentation in BigInt for further details.
-
-=head1 CAVAETS
-
-=over 2
-
-=item in_effect()
-
-This method only works on Perl v5.9.4 or later.
-
-=item hex()/oct()
-
-C<bigint> overrides these routines with versions that can also handle
-big integer values. Under Perl prior to version v5.9.4, however, this
-will not happen unless you specifically ask for it with the two
-import tags "hex" and "oct" - and then it will be global and cannot be
-disabled inside a scope with "no bigint":
-
- use bigint qw/hex oct/;
-
- print hex("0x1234567890123456");
- {
- no bigint;
- print hex("0x1234567890123456");
- }
-
-The second call to hex() will warn about a non-portable constant.
-
-Compare this to:
-
- use bigint;
-
- # will warn only under Perl older than v5.9.4
- print hex("0x1234567890123456");
-
-=back
-
-=head1 MODULES USED
-
-C<bigint> is just a thin wrapper around various modules of the Math::BigInt
-family. Think of it as the head of the family, who runs the shop, and orders
-the others to do the work.
-
-The following modules are currently used by bigint:
-
- Math::BigInt::Lite (for speed, and only if it is loadable)
- Math::BigInt
-
-=head1 EXAMPLES
-
-Some cool command line examples to impress the Python crowd ;) You might want
-to compare them to the results under -Mbignum or -Mbigrat:
-
- perl -Mbigint -le 'print sqrt(33)'
- perl -Mbigint -le 'print 2*255'
- perl -Mbigint -le 'print 4.5+2*255'
- perl -Mbigint -le 'print 3/7 + 5/7 + 8/3'
- perl -Mbigint -le 'print 123->is_odd()'
- perl -Mbigint -le 'print log(2)'
- perl -Mbigint -le 'print 2 ** 0.5'
- perl -Mbigint=a,65 -le 'print 2 ** 0.2'
- perl -Mbignum=a,65,l,GMP -le 'print 7 ** 7777'
-
-=head1 LICENSE
-
-This program is free software; you may redistribute it and/or modify it under
-the same terms as Perl itself.
-
-=head1 SEE ALSO
-
-Especially L<bigrat> as in C<perl -Mbigrat -le 'print 1/3+1/4'> and
-L<bignum> as in C<perl -Mbignum -le 'print sqrt(2)'>.
-
-L<Math::BigInt>, L<Math::BigRat> and L<Math::Big> as well
-as L<Math::BigInt::BitVect>, L<Math::BigInt::Pari> and L<Math::BigInt::GMP>.
-
-=head1 AUTHORS
-
-(C) by Tels L<http://bloodgate.com/> in early 2002 - 2007.
-
-=cut
Deleted: trunk/contrib/perl/lib/bigintpl.t
===================================================================
--- trunk/contrib/perl/lib/bigintpl.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/bigintpl.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,296 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-{
- # Silence the deprecation warnings from bigint.pl for the purpose
- # of testing. These tests will be removed along with bigint.pl in
- # the next major release of perl.
- local $SIG{__WARN__} = sub {
- if ($_[0] !~ /will be removed from the Perl core distribution/) {
- print(STDERR @_);
- }
- };
- require "bigint.pl";
-}
-
-$test = 0;
-$| = 1;
-print "1..246\n";
-while (<DATA>) {
- chop;
- if (/^&/) {
- $f = $_;
- } else {
- ++$test;
- @args = split(/:/,$_,99);
- $ans = pop(@args);
- $try = "$f('" . join("','", @args) . "');";
- if (($ans1 = eval($try)) eq $ans) {
- print "ok $test\n";
- } else {
- print "not ok $test\n";
- print "# '$try' expected: '$ans' got: '$ans1'\n";
- }
- }
-}
-__END__
-&bnorm
-abc:NaN
- 1 a:NaN
-1bcd2:NaN
-11111b:NaN
-+1z:NaN
--1z:NaN
-0:+0
-+0:+0
-+00:+0
-+0 0 0:+0
-000000 0000000 00000:+0
--0:+0
--0000:+0
-+1:+1
-+01:+1
-+001:+1
-+00000100000:+100000
-123456789:+123456789
--1:-1
--01:-1
--001:-1
--123456789:-123456789
--00000100000:-100000
-&bneg
-abd:NaN
-+0:+0
-+1:-1
--1:+1
-+123456789:-123456789
--123456789:+123456789
-&babs
-abc:NaN
-+0:+0
-+1:+1
--1:+1
-+123456789:+123456789
--123456789:+123456789
-&bcmp
-abc:abc:
-abc:+0:
-+0:abc:
-+0:+0:0
--1:+0:-1
-+0:-1:1
-+1:+0:1
-+0:+1:-1
--1:+1:-1
-+1:-1:1
--1:-1:0
-+1:+1:0
-+123:+123:0
-+123:+12:1
-+12:+123:-1
--123:-123:0
--123:-12:-1
--12:-123:1
-+123:+124:-1
-+124:+123:1
--123:-124:1
--124:-123:-1
-&badd
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:+0
-+1:+0:+1
-+0:+1:+1
-+1:+1:+2
--1:+0:-1
-+0:-1:-1
--1:-1:-2
--1:+1:+0
-+1:-1:+0
-+9:+1:+10
-+99:+1:+100
-+999:+1:+1000
-+9999:+1:+10000
-+99999:+1:+100000
-+999999:+1:+1000000
-+9999999:+1:+10000000
-+99999999:+1:+100000000
-+999999999:+1:+1000000000
-+9999999999:+1:+10000000000
-+99999999999:+1:+100000000000
-+10:-1:+9
-+100:-1:+99
-+1000:-1:+999
-+10000:-1:+9999
-+100000:-1:+99999
-+1000000:-1:+999999
-+10000000:-1:+9999999
-+100000000:-1:+99999999
-+1000000000:-1:+999999999
-+10000000000:-1:+9999999999
-+123456789:+987654321:+1111111110
--123456789:+987654321:+864197532
--123456789:-987654321:-1111111110
-+123456789:-987654321:-864197532
-&bsub
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:+0
-+1:+0:+1
-+0:+1:-1
-+1:+1:+0
--1:+0:-1
-+0:-1:+1
--1:-1:+0
--1:+1:-2
-+1:-1:+2
-+9:+1:+8
-+99:+1:+98
-+999:+1:+998
-+9999:+1:+9998
-+99999:+1:+99998
-+999999:+1:+999998
-+9999999:+1:+9999998
-+99999999:+1:+99999998
-+999999999:+1:+999999998
-+9999999999:+1:+9999999998
-+99999999999:+1:+99999999998
-+10:-1:+11
-+100:-1:+101
-+1000:-1:+1001
-+10000:-1:+10001
-+100000:-1:+100001
-+1000000:-1:+1000001
-+10000000:-1:+10000001
-+100000000:-1:+100000001
-+1000000000:-1:+1000000001
-+10000000000:-1:+10000000001
-+123456789:+987654321:-864197532
--123456789:+987654321:-1111111110
--123456789:-987654321:+864197532
-+123456789:-987654321:+1111111110
-&bmul
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:+0
-+0:+1:+0
-+1:+0:+0
-+0:-1:+0
--1:+0:+0
-+123456789123456789:+0:+0
-+0:+123456789123456789:+0
--1:-1:+1
--1:+1:-1
-+1:-1:-1
-+1:+1:+1
-+2:+3:+6
--2:+3:-6
-+2:-3:-6
--2:-3:+6
-+111:+111:+12321
-+10101:+10101:+102030201
-+1001001:+1001001:+1002003002001
-+100010001:+100010001:+10002000300020001
-+10000100001:+10000100001:+100002000030000200001
-+11111111111:+9:+99999999999
-+22222222222:+9:+199999999998
-+33333333333:+9:+299999999997
-+44444444444:+9:+399999999996
-+55555555555:+9:+499999999995
-+66666666666:+9:+599999999994
-+77777777777:+9:+699999999993
-+88888888888:+9:+799999999992
-+99999999999:+9:+899999999991
-&bdiv
-abc:abc:NaN
-abc:+1:abc:NaN
-+1:abc:NaN
-+0:+0:NaN
-+0:+1:+0
-+1:+0:NaN
-+0:-1:+0
--1:+0:NaN
-+1:+1:+1
--1:-1:+1
-+1:-1:-1
--1:+1:-1
-+1:+2:+0
-+2:+1:+2
-+1000000000:+9:+111111111
-+2000000000:+9:+222222222
-+3000000000:+9:+333333333
-+4000000000:+9:+444444444
-+5000000000:+9:+555555555
-+6000000000:+9:+666666666
-+7000000000:+9:+777777777
-+8000000000:+9:+888888888
-+9000000000:+9:+1000000000
-+35500000:+113:+314159
-+71000000:+226:+314159
-+106500000:+339:+314159
-+1000000000:+3:+333333333
-+10:+5:+2
-+100:+4:+25
-+1000:+8:+125
-+10000:+16:+625
-+999999999999:+9:+111111111111
-+999999999999:+99:+10101010101
-+999999999999:+999:+1001001001
-+999999999999:+9999:+100010001
-+999999999999999:+99999:+10000100001
-&bmod
-abc:abc:NaN
-abc:+1:abc:NaN
-+1:abc:NaN
-+0:+0:NaN
-+0:+1:+0
-+1:+0:NaN
-+0:-1:+0
--1:+0:NaN
-+1:+1:+0
--1:-1:+0
-+1:-1:+0
--1:+1:+0
-+1:+2:+1
-+2:+1:+0
-+1000000000:+9:+1
-+2000000000:+9:+2
-+3000000000:+9:+3
-+4000000000:+9:+4
-+5000000000:+9:+5
-+6000000000:+9:+6
-+7000000000:+9:+7
-+8000000000:+9:+8
-+9000000000:+9:+0
-+35500000:+113:+33
-+71000000:+226:+66
-+106500000:+339:+99
-+1000000000:+3:+1
-+10:+5:+0
-+100:+4:+0
-+1000:+8:+0
-+10000:+16:+0
-+999999999999:+9:+0
-+999999999999:+99:+0
-+999999999999:+999:+0
-+999999999999:+9999:+0
-+999999999999999:+99999:+0
-&bgcd
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:+0
-+0:+1:+1
-+1:+0:+1
-+1:+1:+1
-+2:+3:+1
-+3:+2:+1
-+100:+625:+25
-+4096:+81:+1
Deleted: trunk/contrib/perl/lib/bignum.pm
===================================================================
--- trunk/contrib/perl/lib/bignum.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/bignum.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,681 +0,0 @@
-package bignum;
-use 5.006;
-
-$VERSION = '0.23';
-use Exporter;
- at ISA = qw( bigint );
- at EXPORT_OK = qw( PI e bexp bpi );
- at EXPORT = qw( inf NaN );
-
-use strict;
-use overload;
-require bigint; # no "use" to avoid import being called
-
-##############################################################################
-
-BEGIN
- {
- *inf = \&bigint::inf;
- *NaN = \&bigint::NaN;
- }
-
-# These are all alike, and thus faked by AUTOLOAD
-
-my @faked = qw/round_mode accuracy precision div_scale/;
-use vars qw/$VERSION $AUTOLOAD $_lite/; # _lite for testsuite
-
-sub AUTOLOAD
- {
- my $name = $AUTOLOAD;
-
- $name =~ s/.*:://; # split package
- no strict 'refs';
- foreach my $n (@faked)
- {
- if ($n eq $name)
- {
- *{"bignum::$name"} = sub
- {
- my $self = shift;
- no strict 'refs';
- if (defined $_[0])
- {
- Math::BigInt->$name($_[0]);
- return Math::BigFloat->$name($_[0]);
- }
- return Math::BigInt->$name();
- };
- return &$name;
- }
- }
-
- # delayed load of Carp and avoid recursion
- require Carp;
- Carp::croak ("Can't call bignum\-\>$name, not a valid method");
- }
-
-sub unimport
- {
- $^H{bignum} = undef; # no longer in effect
- overload::remove_constant('binary','','float','','integer');
- }
-
-sub in_effect
- {
- my $level = shift || 0;
- my $hinthash = (caller($level))[10];
- $hinthash->{bignum};
- }
-
-#############################################################################
-# the following two routines are for Perl 5.9.4 or later and are lexical
-
-sub _hex
- {
- return CORE::hex($_[0]) unless in_effect(1);
- my $i = $_[0];
- $i = '0x'.$i unless $i =~ /^0x/;
- Math::BigInt->new($i);
- }
-
-sub _oct
- {
- return CORE::oct($_[0]) unless in_effect(1);
- my $i = $_[0];
- return Math::BigInt->from_oct($i) if $i =~ /^0[0-7]/;
- Math::BigInt->new($i);
- }
-
-sub import
- {
- my $self = shift;
-
- $^H{bignum} = 1; # we are in effect
-
- my ($hex,$oct);
-
- # for newer Perls override hex() and oct() with a lexical version:
- if ($] > 5.009003)
- {
- $hex = \&_hex;
- $oct = \&_oct;
- }
-
- # some defaults
- my $lib = ''; my $lib_kind = 'try';
- my $upgrade = 'Math::BigFloat';
- my $downgrade = 'Math::BigInt';
-
- my @import = ( ':constant' ); # drive it w/ constant
- my @a = @_; my $l = scalar @_; my $j = 0;
- my ($ver,$trace); # version? trace?
- my ($a,$p); # accuracy, precision
- for ( my $i = 0; $i < $l ; $i++,$j++ )
- {
- if ($_[$i] eq 'upgrade')
- {
- # this causes upgrading
- $upgrade = $_[$i+1]; # or undef to disable
- my $s = 2; $s = 1 if @a-$j < 2; # avoid "can not modify non-existant..."
- splice @a, $j, $s; $j -= $s; $i++;
- }
- elsif ($_[$i] eq 'downgrade')
- {
- # this causes downgrading
- $downgrade = $_[$i+1]; # or undef to disable
- my $s = 2; $s = 1 if @a-$j < 2; # avoid "can not modify non-existant..."
- splice @a, $j, $s; $j -= $s; $i++;
- }
- elsif ($_[$i] =~ /^(l|lib|try|only)$/)
- {
- # this causes a different low lib to take care...
- $lib_kind = $1; $lib_kind = 'lib' if $lib_kind eq 'l';
- $lib = $_[$i+1] || '';
- my $s = 2; $s = 1 if @a-$j < 2; # avoid "can not modify non-existant..."
- splice @a, $j, $s; $j -= $s; $i++;
- }
- elsif ($_[$i] =~ /^(a|accuracy)$/)
- {
- $a = $_[$i+1];
- my $s = 2; $s = 1 if @a-$j < 2; # avoid "can not modify non-existant..."
- splice @a, $j, $s; $j -= $s; $i++;
- }
- elsif ($_[$i] =~ /^(p|precision)$/)
- {
- $p = $_[$i+1];
- my $s = 2; $s = 1 if @a-$j < 2; # avoid "can not modify non-existant..."
- splice @a, $j, $s; $j -= $s; $i++;
- }
- elsif ($_[$i] =~ /^(v|version)$/)
- {
- $ver = 1;
- splice @a, $j, 1; $j --;
- }
- elsif ($_[$i] =~ /^(t|trace)$/)
- {
- $trace = 1;
- splice @a, $j, 1; $j --;
- }
- elsif ($_[$i] eq 'hex')
- {
- splice @a, $j, 1; $j --;
- $hex = \&bigint::_hex_global;
- }
- elsif ($_[$i] eq 'oct')
- {
- splice @a, $j, 1; $j --;
- $oct = \&bigint::_oct_global;
- }
- elsif ($_[$i] !~ /^(PI|e|bexp|bpi)\z/)
- {
- die ("unknown option $_[$i]");
- }
- }
- my $class;
- $_lite = 0; # using M::BI::L ?
- if ($trace)
- {
- require Math::BigInt::Trace; $class = 'Math::BigInt::Trace';
- $upgrade = 'Math::BigFloat::Trace';
- }
- else
- {
- # see if we can find Math::BigInt::Lite
- if (!defined $a && !defined $p) # rounding won't work to well
- {
- eval 'require Math::BigInt::Lite;';
- if ($@ eq '')
- {
- @import = ( ); # :constant in Lite, not MBI
- Math::BigInt::Lite->import( ':constant' );
- $_lite= 1; # signal okay
- }
- }
- require Math::BigInt if $_lite == 0; # not already loaded?
- $class = 'Math::BigInt'; # regardless of MBIL or not
- }
- push @import, $lib_kind => $lib if $lib ne '';
- # Math::BigInt::Trace or plain Math::BigInt
- $class->import(@import, upgrade => $upgrade);
-
- if ($trace)
- {
- require Math::BigFloat::Trace; $class = 'Math::BigFloat::Trace';
- $downgrade = 'Math::BigInt::Trace';
- }
- else
- {
- require Math::BigFloat; $class = 'Math::BigFloat';
- }
- $class->import(':constant','downgrade',$downgrade);
-
- bignum->accuracy($a) if defined $a;
- bignum->precision($p) if defined $p;
- if ($ver)
- {
- print "bignum\t\t\t v$VERSION\n";
- print "Math::BigInt::Lite\t v$Math::BigInt::Lite::VERSION\n" if $_lite;
- print "Math::BigInt\t\t v$Math::BigInt::VERSION";
- my $config = Math::BigInt->config();
- print " lib => $config->{lib} v$config->{lib_version}\n";
- print "Math::BigFloat\t\t v$Math::BigFloat::VERSION\n";
- exit;
- }
-
- # Take care of octal/hexadecimal constants
- overload::constant binary => sub { bigint::_binary_constant(shift) };
-
- # if another big* was already loaded:
- my ($package) = caller();
-
- no strict 'refs';
- if (!defined *{"${package}::inf"})
- {
- $self->export_to_level(1,$self, at a); # export inf and NaN
- }
- {
- no warnings 'redefine';
- *CORE::GLOBAL::oct = $oct if $oct;
- *CORE::GLOBAL::hex = $hex if $hex;
- }
- }
-
-sub PI () { Math::BigFloat->new('3.141592653589793238462643383279502884197'); }
-sub e () { Math::BigFloat->new('2.718281828459045235360287471352662497757'); }
-sub bpi ($) { Math::BigFloat::bpi(@_); }
-sub bexp ($$) { my $x = Math::BigFloat->new($_[0]); $x->bexp($_[1]); }
-
-1;
-
-__END__
-
-=head1 NAME
-
-bignum - Transparent BigNumber support for Perl
-
-=head1 SYNOPSIS
-
- use bignum;
-
- $x = 2 + 4.5,"\n"; # BigFloat 6.5
- print 2 ** 512 * 0.1,"\n"; # really is what you think it is
- print inf * inf,"\n"; # prints inf
- print NaN * 3,"\n"; # prints NaN
-
- {
- no bignum;
- print 2 ** 256,"\n"; # a normal Perl scalar now
- }
-
- # for older Perls, note that this will be global:
- use bignum qw/hex oct/;
- print hex("0x1234567890123490"),"\n";
- print oct("01234567890123490"),"\n";
-
-=head1 DESCRIPTION
-
-All operators (including basic math operations) are overloaded. Integer and
-floating-point constants are created as proper BigInts or BigFloats,
-respectively.
-
-If you do
-
- use bignum;
-
-at the top of your script, Math::BigFloat and Math::BigInt will be loaded
-and any constant number will be converted to an object (Math::BigFloat for
-floats like 3.1415 and Math::BigInt for integers like 1234).
-
-So, the following line:
-
- $x = 1234;
-
-creates actually a Math::BigInt and stores a reference to in $x.
-This happens transparently and behind your back, so to speak.
-
-You can see this with the following:
-
- perl -Mbignum -le 'print ref(1234)'
-
-Don't worry if it says Math::BigInt::Lite, bignum and friends will use Lite
-if it is installed since it is faster for some operations. It will be
-automatically upgraded to BigInt whenever necessary:
-
- perl -Mbignum -le 'print ref(2**255)'
-
-This also means it is a bad idea to check for some specific package, since
-the actual contents of $x might be something unexpected. Due to the
-transparent way of bignum C<ref()> should not be necessary, anyway.
-
-Since Math::BigInt and BigFloat also overload the normal math operations,
-the following line will still work:
-
- perl -Mbignum -le 'print ref(1234+1234)'
-
-Since numbers are actually objects, you can call all the usual methods from
-BigInt/BigFloat on them. This even works to some extent on expressions:
-
- perl -Mbignum -le '$x = 1234; print $x->bdec()'
- perl -Mbignum -le 'print 1234->copy()->binc();'
- perl -Mbignum -le 'print 1234->copy()->binc->badd(6);'
- perl -Mbignum -le 'print +(1234)->copy()->binc()'
-
-(Note that print doesn't do what you expect if the expression starts with
-'(' hence the C<+>)
-
-You can even chain the operations together as usual:
-
- perl -Mbignum -le 'print 1234->copy()->binc->badd(6);'
- 1241
-
-Under bignum (or bigint or bigrat), Perl will "upgrade" the numbers
-appropriately. This means that:
-
- perl -Mbignum -le 'print 1234+4.5'
- 1238.5
-
-will work correctly. These mixed cases don't do always work when using
-Math::BigInt or Math::BigFloat alone, or at least not in the way normal Perl
-scalars work.
-
-If you do want to work with large integers like under C<use integer;>, try
-C<use bigint;>:
-
- perl -Mbigint -le 'print 1234.5+4.5'
- 1238
-
-There is also C<use bigrat;> which gives you big rationals:
-
- perl -Mbigrat -le 'print 1234+4.1'
- 12381/10
-
-The entire upgrading/downgrading is still experimental and might not work
-as you expect or may even have bugs. You might get errors like this:
-
- Can't use an undefined value as an ARRAY reference at
- /usr/local/lib/perl5/5.8.0/Math/BigInt/Calc.pm line 864
-
-This means somewhere a routine got a BigFloat/Lite but expected a BigInt (or
-vice versa) and the upgrade/downgrad path was missing. This is a bug, please
-report it so that we can fix it.
-
-You might consider using just Math::BigInt or Math::BigFloat, since they
-allow you finer control over what get's done in which module/space. For
-instance, simple loop counters will be Math::BigInts under C<use bignum;> and
-this is slower than keeping them as Perl scalars:
-
- perl -Mbignum -le 'for ($i = 0; $i < 10; $i++) { print ref($i); }'
-
-Please note the following does not work as expected (prints nothing), since
-overloading of '..' is not yet possible in Perl (as of v5.8.0):
-
- perl -Mbignum -le 'for (1..2) { print ref($_); }'
-
-=head2 Options
-
-bignum recognizes some options that can be passed while loading it via use.
-The options can (currently) be either a single letter form, or the long form.
-The following options exist:
-
-=over 2
-
-=item a or accuracy
-
-This sets the accuracy for all math operations. The argument must be greater
-than or equal to zero. See Math::BigInt's bround() function for details.
-
- perl -Mbignum=a,50 -le 'print sqrt(20)'
-
-Note that setting precision and accurary at the same time is not possible.
-
-=item p or precision
-
-This sets the precision for all math operations. The argument can be any
-integer. Negative values mean a fixed number of digits after the dot, while
-a positive value rounds to this digit left from the dot. 0 or 1 mean round to
-integer. See Math::BigInt's bfround() function for details.
-
- perl -Mbignum=p,-50 -le 'print sqrt(20)'
-
-Note that setting precision and accurary at the same time is not possible.
-
-=item t or trace
-
-This enables a trace mode and is primarily for debugging bignum or
-Math::BigInt/Math::BigFloat.
-
-=item l or lib
-
-Load a different math lib, see L<MATH LIBRARY>.
-
- perl -Mbignum=l,GMP -e 'print 2 ** 512'
-
-Currently there is no way to specify more than one library on the command
-line. This means the following does not work:
-
- perl -Mbignum=l,GMP,Pari -e 'print 2 ** 512'
-
-This will be hopefully fixed soon ;)
-
-=item hex
-
-Override the built-in hex() method with a version that can handle big
-integers. Note that under Perl older than v5.9.4, this will be global
-and cannot be disabled with "no bigint;".
-
-=item oct
-
-Override the built-in oct() method with a version that can handle big
-integers. Note that under Perl older than v5.9.4, this will be global
-and cannot be disabled with "no bigint;".
-
-=item v or version
-
-This prints out the name and version of all modules used and then exits.
-
- perl -Mbignum=v
-
-=back
-
-=head2 Methods
-
-Beside import() and AUTOLOAD() there are only a few other methods.
-
-Since all numbers are now objects, you can use all functions that are part of
-the BigInt or BigFloat API. It is wise to use only the bxxx() notation, and not
-the fxxx() notation, though. This makes it possible that the underlying object
-might morph into a different class than BigFloat.
-
-=head2 Caveats
-
-But a warning is in order. When using the following to make a copy of a number,
-only a shallow copy will be made.
-
- $x = 9; $y = $x;
- $x = $y = 7;
-
-If you want to make a real copy, use the following:
-
- $y = $x->copy();
-
-Using the copy or the original with overloaded math is okay, e.g. the
-following work:
-
- $x = 9; $y = $x;
- print $x + 1, " ", $y,"\n"; # prints 10 9
-
-but calling any method that modifies the number directly will result in
-B<both> the original and the copy being destroyed:
-
- $x = 9; $y = $x;
- print $x->badd(1), " ", $y,"\n"; # prints 10 10
-
- $x = 9; $y = $x;
- print $x->binc(1), " ", $y,"\n"; # prints 10 10
-
- $x = 9; $y = $x;
- print $x->bmul(2), " ", $y,"\n"; # prints 18 18
-
-Using methods that do not modify, but test the contents works:
-
- $x = 9; $y = $x;
- $z = 9 if $x->is_zero(); # works fine
-
-See the documentation about the copy constructor and C<=> in overload, as
-well as the documentation in BigInt for further details.
-
-=over 2
-
-=item inf()
-
-A shortcut to return Math::BigInt->binf(). Useful because Perl does not always
-handle bareword C<inf> properly.
-
-=item NaN()
-
-A shortcut to return Math::BigInt->bnan(). Useful because Perl does not always
-handle bareword C<NaN> properly.
-
-=item e
-
- # perl -Mbignum=e -wle 'print e'
-
-Returns Euler's number C<e>, aka exp(1).
-
-=item PI()
-
- # perl -Mbignum=PI -wle 'print PI'
-
-Returns PI.
-
-=item bexp()
-
- bexp($power,$accuracy);
-
-Returns Euler's number C<e> raised to the appropriate power, to
-the wanted accuracy.
-
-Example:
-
- # perl -Mbignum=bexp -wle 'print bexp(1,80)'
-
-=item bpi()
-
- bpi($accuracy);
-
-Returns PI to the wanted accuracy.
-
-Example:
-
- # perl -Mbignum=bpi -wle 'print bpi(80)'
-
-=item upgrade()
-
-Return the class that numbers are upgraded to, is in fact returning
-C<$Math::BigInt::upgrade>.
-
-=item in_effect()
-
- use bignum;
-
- print "in effect\n" if bignum::in_effect; # true
- {
- no bignum;
- print "in effect\n" if bignum::in_effect; # false
- }
-
-Returns true or false if C<bignum> is in effect in the current scope.
-
-This method only works on Perl v5.9.4 or later.
-
-=back
-
-=head2 Math Library
-
-Math with the numbers is done (by default) by a module called
-Math::BigInt::Calc. This is equivalent to saying:
-
- use bignum lib => 'Calc';
-
-You can change this by using:
-
- use bignum lib => 'GMP';
-
-The following would first try to find Math::BigInt::Foo, then
-Math::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc:
-
- use bignum lib => 'Foo,Math::BigInt::Bar';
-
-Please see respective module documentation for further details.
-
-Using C<lib> warns if none of the specified libraries can be found and
-L<Math::BigInt> did fall back to one of the default libraries.
-To supress this warning, use C<try> instead:
-
- use bignum try => 'GMP';
-
-If you want the code to die instead of falling back, use C<only> instead:
-
- use bignum only => 'GMP';
-
-=head2 INTERNAL FORMAT
-
-The numbers are stored as objects, and their internals might change at anytime,
-especially between math operations. The objects also might belong to different
-classes, like Math::BigInt, or Math::BigFLoat. Mixing them together, even
-with normal scalars is not extraordinary, but normal and expected.
-
-You should not depend on the internal format, all accesses must go through
-accessor methods. E.g. looking at $x->{sign} is not a bright idea since there
-is no guaranty that the object in question has such a hashkey, nor is a hash
-underneath at all.
-
-=head2 SIGN
-
-The sign is either '+', '-', 'NaN', '+inf' or '-inf' and stored seperately.
-You can access it with the sign() method.
-
-A sign of 'NaN' is used to represent the result when input arguments are not
-numbers or as a result of 0/0. '+inf' and '-inf' represent plus respectively
-minus infinity. You will get '+inf' when dividing a positive number by 0, and
-'-inf' when dividing any negative number by 0.
-
-=head1 CAVAETS
-
-=over 2
-
-=item in_effect()
-
-This method only works on Perl v5.9.4 or later.
-
-=item hex()/oct()
-
-C<bigint> overrides these routines with versions that can also handle
-big integer values. Under Perl prior to version v5.9.4, however, this
-will not happen unless you specifically ask for it with the two
-import tags "hex" and "oct" - and then it will be global and cannot be
-disabled inside a scope with "no bigint":
-
- use bigint qw/hex oct/;
-
- print hex("0x1234567890123456");
- {
- no bigint;
- print hex("0x1234567890123456");
- }
-
-The second call to hex() will warn about a non-portable constant.
-
-Compare this to:
-
- use bigint;
-
- # will warn only under older than v5.9.4
- print hex("0x1234567890123456");
-
-=back
-
-=head1 MODULES USED
-
-C<bignum> is just a thin wrapper around various modules of the Math::BigInt
-family. Think of it as the head of the family, who runs the shop, and orders
-the others to do the work.
-
-The following modules are currently used by bignum:
-
- Math::BigInt::Lite (for speed, and only if it is loadable)
- Math::BigInt
- Math::BigFloat
-
-=head1 EXAMPLES
-
-Some cool command line examples to impress the Python crowd ;)
-
- perl -Mbignum -le 'print sqrt(33)'
- perl -Mbignum -le 'print 2*255'
- perl -Mbignum -le 'print 4.5+2*255'
- perl -Mbignum -le 'print 3/7 + 5/7 + 8/3'
- perl -Mbignum -le 'print 123->is_odd()'
- perl -Mbignum -le 'print log(2)'
- perl -Mbignum -le 'print exp(1)'
- perl -Mbignum -le 'print 2 ** 0.5'
- perl -Mbignum=a,65 -le 'print 2 ** 0.2'
- perl -Mbignum=a,65,l,GMP -le 'print 7 ** 7777'
-
-=head1 LICENSE
-
-This program is free software; you may redistribute it and/or modify it under
-the same terms as Perl itself.
-
-=head1 SEE ALSO
-
-Especially L<bigrat> as in C<perl -Mbigrat -le 'print 1/3+1/4'>.
-
-L<Math::BigFloat>, L<Math::BigInt>, L<Math::BigRat> and L<Math::Big> as well
-as L<Math::BigInt::BitVect>, L<Math::BigInt::Pari> and L<Math::BigInt::GMP>.
-
-=head1 AUTHORS
-
-(C) by Tels L<http://bloodgate.com/> in early 2002 - 2007.
-
-=cut
Deleted: trunk/contrib/perl/lib/bigrat.pl
===================================================================
--- trunk/contrib/perl/lib/bigrat.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/bigrat.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,159 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-package bigrat;
-require "bigint.pl";
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Arbitrary size rational math package
-
-# by Mark Biggar
-#
-# Input values to these routines consist of strings of the form
-# m|^\s*[+-]?[\d\s]+(/[\d\s]+)?$|.
-# Examples:
-# "+0/1" canonical zero value
-# "3" canonical value "+3/1"
-# " -123/123 123" canonical value "-1/1001"
-# "123 456/7890" canonical value "+20576/1315"
-# Output values always include a sign and no leading zeros or
-# white space.
-# This package makes use of the bigint package.
-# The string 'NaN' is used to represent the result when input arguments
-# that are not numbers, as well as the result of dividing by zero and
-# the sqrt of a negative number.
-# Extremely naive algorithms are used.
-#
-# Routines provided are:
-#
-# rneg(RAT) return RAT negation
-# rabs(RAT) return RAT absolute value
-# rcmp(RAT,RAT) return CODE compare numbers (undef,<0,=0,>0)
-# radd(RAT,RAT) return RAT addition
-# rsub(RAT,RAT) return RAT subtraction
-# rmul(RAT,RAT) return RAT multiplication
-# rdiv(RAT,RAT) return RAT division
-# rmod(RAT) return (RAT,RAT) integer and fractional parts
-# rnorm(RAT) return RAT normalization
-# rsqrt(RAT, cycles) return RAT square root
-
-# Convert a number to the canonical string form m|^[+-]\d+/\d+|.
-sub main'rnorm { #(string) return rat_num
- local($_) = @_;
- s/\s+//g;
- if (m#^([+-]?\d+)(/(\d*[1-9]0*))?$#) {
- &norm($1, $3 ? $3 : '+1');
- } else {
- 'NaN';
- }
-}
-
-# Normalize by reducing to lowest terms
-sub norm { #(bint, bint) return rat_num
- local($num,$dom) = @_;
- if ($num eq 'NaN') {
- 'NaN';
- } elsif ($dom eq 'NaN') {
- 'NaN';
- } elsif ($dom =~ /^[+-]?0+$/) {
- 'NaN';
- } else {
- local($gcd) = &'bgcd($num,$dom);
- $gcd =~ s/^-/+/;
- if ($gcd ne '+1') {
- $num = &'bdiv($num,$gcd);
- $dom = &'bdiv($dom,$gcd);
- } else {
- $num = &'bnorm($num);
- $dom = &'bnorm($dom);
- }
- substr($dom,0,1) = '';
- "$num/$dom";
- }
-}
-
-# negation
-sub main'rneg { #(rat_num) return rat_num
- local($_) = &'rnorm(@_);
- tr/-+/+-/ if ($_ ne '+0/1');
- $_;
-}
-
-# absolute value
-sub main'rabs { #(rat_num) return $rat_num
- local($_) = &'rnorm(@_);
- substr($_,0,1) = '+' unless $_ eq 'NaN';
- $_;
-}
-
-# multipication
-sub main'rmul { #(rat_num, rat_num) return rat_num
- local($xn,$xd) = split('/',&'rnorm($_[0]));
- local($yn,$yd) = split('/',&'rnorm($_[1]));
- &norm(&'bmul($xn,$yn),&'bmul($xd,$yd));
-}
-
-# division
-sub main'rdiv { #(rat_num, rat_num) return rat_num
- local($xn,$xd) = split('/',&'rnorm($_[0]));
- local($yn,$yd) = split('/',&'rnorm($_[1]));
- &norm(&'bmul($xn,$yd),&'bmul($xd,$yn));
-}
-
-# addition
-sub main'radd { #(rat_num, rat_num) return rat_num
- local($xn,$xd) = split('/',&'rnorm($_[0]));
- local($yn,$yd) = split('/',&'rnorm($_[1]));
- &norm(&'badd(&'bmul($xn,$yd),&'bmul($yn,$xd)),&'bmul($xd,$yd));
-}
-
-# subtraction
-sub main'rsub { #(rat_num, rat_num) return rat_num
- local($xn,$xd) = split('/',&'rnorm($_[0]));
- local($yn,$yd) = split('/',&'rnorm($_[1]));
- &norm(&'bsub(&'bmul($xn,$yd),&'bmul($yn,$xd)),&'bmul($xd,$yd));
-}
-
-# comparison
-sub main'rcmp { #(rat_num, rat_num) return cond_code
- local($xn,$xd) = split('/',&'rnorm($_[0]));
- local($yn,$yd) = split('/',&'rnorm($_[1]));
- &bigint'cmp(&'bmul($xn,$yd),&'bmul($yn,$xd));
-}
-
-# int and frac parts
-sub main'rmod { #(rat_num) return (rat_num,rat_num)
- local($xn,$xd) = split('/',&'rnorm(@_));
- local($i,$f) = &'bdiv($xn,$xd);
- if (wantarray) {
- ("$i/1", "$f/$xd");
- } else {
- "$i/1";
- }
-}
-
-# square root by Newtons method.
-# cycles specifies the number of iterations default: 5
-sub main'rsqrt { #(fnum_str[, cycles]) return fnum_str
- local($x, $scale) = (&'rnorm($_[0]), $_[1]);
- if ($x eq 'NaN') {
- 'NaN';
- } elsif ($x =~ /^-/) {
- 'NaN';
- } else {
- local($gscale, $guess) = (0, '+1/1');
- $scale = 5 if (!$scale);
- while ($gscale++ < $scale) {
- $guess = &'rmul(&'radd($guess,&'rdiv($x,$guess)),"+1/2");
- }
- "$guess"; # quotes necessary due to perl bug
- }
-}
-
-1;
Deleted: trunk/contrib/perl/lib/bigrat.pm
===================================================================
--- trunk/contrib/perl/lib/bigrat.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/bigrat.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,566 +0,0 @@
-package bigrat;
-use 5.006;
-
-$VERSION = '0.23';
-require Exporter;
- at ISA = qw( bigint );
- at EXPORT_OK = qw( PI e bpi bexp );
- at EXPORT = qw( inf NaN );
-
-use strict;
-use overload;
-require bigint; # no "use" to avoid callind import
-
-##############################################################################
-
-BEGIN
- {
- *inf = \&bigint::inf;
- *NaN = \&bigint::NaN;
- }
-
-# These are all alike, and thus faked by AUTOLOAD
-
-my @faked = qw/round_mode accuracy precision div_scale/;
-use vars qw/$VERSION $AUTOLOAD $_lite/; # _lite for testsuite
-
-sub AUTOLOAD
- {
- my $name = $AUTOLOAD;
-
- $name =~ s/.*:://; # split package
- no strict 'refs';
- foreach my $n (@faked)
- {
- if ($n eq $name)
- {
- *{"bigrat::$name"} = sub
- {
- my $self = shift;
- no strict 'refs';
- if (defined $_[0])
- {
- Math::BigInt->$name($_[0]);
- Math::BigFloat->$name($_[0]);
- return Math::BigRat->$name($_[0]);
- }
- return Math::BigInt->$name();
- };
- return &$name;
- }
- }
-
- # delayed load of Carp and avoid recursion
- require Carp;
- Carp::croak ("Can't call bigrat\-\>$name, not a valid method");
- }
-
-sub unimport
- {
- $^H{bigrat} = undef; # no longer in effect
- overload::remove_constant('binary','','float','','integer');
- }
-
-sub in_effect
- {
- my $level = shift || 0;
- my $hinthash = (caller($level))[10];
- $hinthash->{bigrat};
- }
-
-#############################################################################
-# the following two routines are for Perl 5.9.4 or later and are lexical
-
-sub _hex
- {
- return CORE::hex($_[0]) unless in_effect(1);
- my $i = $_[0];
- $i = '0x'.$i unless $i =~ /^0x/;
- Math::BigInt->new($i);
- }
-
-sub _oct
- {
- return CORE::oct($_[0]) unless in_effect(1);
- my $i = $_[0];
- return Math::BigInt->from_oct($i) if $i =~ /^0[0-7]/;
- Math::BigInt->new($i);
- }
-
-sub import
- {
- my $self = shift;
-
- # see also bignum->import() for additional comments
-
- $^H{bigrat} = 1; # we are in effect
-
- my ($hex,$oct);
- # for newer Perls always override hex() and oct() with a lexical version:
- if ($] > 5.009004)
- {
- $oct = \&_oct;
- $hex = \&_hex;
- }
- # some defaults
- my $lib = ''; my $lib_kind = 'try'; my $upgrade = 'Math::BigFloat';
-
- my @import = ( ':constant' ); # drive it w/ constant
- my @a = @_; my $l = scalar @_; my $j = 0;
- my ($a,$p);
- my ($ver,$trace); # version? trace?
- for ( my $i = 0; $i < $l ; $i++,$j++ )
- {
- if ($_[$i] eq 'upgrade')
- {
- # this causes upgrading
- $upgrade = $_[$i+1]; # or undef to disable
- my $s = 2; $s = 1 if @a-$j < 2; # avoid "can not modify non-existant..."
- splice @a, $j, $s; $j -= $s;
- }
- elsif ($_[$i] =~ /^(l|lib|try|only)$/)
- {
- # this causes a different low lib to take care...
- $lib_kind = $1; $lib_kind = 'lib' if $lib_kind eq 'l';
- $lib = $_[$i+1] || '';
- my $s = 2; $s = 1 if @a-$j < 2; # avoid "can not modify non-existant..."
- splice @a, $j, $s; $j -= $s; $i++;
- }
- elsif ($_[$i] =~ /^(a|accuracy)$/)
- {
- $a = $_[$i+1];
- my $s = 2; $s = 1 if @a-$j < 2; # avoid "can not modify non-existant..."
- splice @a, $j, $s; $j -= $s; $i++;
- }
- elsif ($_[$i] =~ /^(p|precision)$/)
- {
- $p = $_[$i+1];
- my $s = 2; $s = 1 if @a-$j < 2; # avoid "can not modify non-existant..."
- splice @a, $j, $s; $j -= $s; $i++;
- }
- elsif ($_[$i] =~ /^(v|version)$/)
- {
- $ver = 1;
- splice @a, $j, 1; $j --;
- }
- elsif ($_[$i] =~ /^(t|trace)$/)
- {
- $trace = 1;
- splice @a, $j, 1; $j --;
- }
- elsif ($_[$i] eq 'hex')
- {
- splice @a, $j, 1; $j --;
- $hex = \&bigint::_hex_global;
- }
- elsif ($_[$i] eq 'oct')
- {
- splice @a, $j, 1; $j --;
- $oct = \&bigint::_oct_global;
- }
- elsif ($_[$i] !~ /^(PI|e|bpi|bexp)\z/)
- {
- die ("unknown option $_[$i]");
- }
- }
- my $class;
- $_lite = 0; # using M::BI::L ?
- if ($trace)
- {
- require Math::BigInt::Trace; $class = 'Math::BigInt::Trace';
- $upgrade = 'Math::BigFloat::Trace';
- }
- else
- {
- # see if we can find Math::BigInt::Lite
- if (!defined $a && !defined $p) # rounding won't work to well
- {
- eval 'require Math::BigInt::Lite;';
- if ($@ eq '')
- {
- @import = ( ); # :constant in Lite, not MBI
- Math::BigInt::Lite->import( ':constant' );
- $_lite= 1; # signal okay
- }
- }
- require Math::BigInt if $_lite == 0; # not already loaded?
- $class = 'Math::BigInt'; # regardless of MBIL or not
- }
- push @import, $lib_kind => $lib if $lib ne '';
- # Math::BigInt::Trace or plain Math::BigInt
- $class->import(@import, upgrade => $upgrade);
-
- require Math::BigFloat;
- Math::BigFloat->import( upgrade => 'Math::BigRat', ':constant' );
- require Math::BigRat;
-
- bigrat->accuracy($a) if defined $a;
- bigrat->precision($p) if defined $p;
- if ($ver)
- {
- print "bigrat\t\t\t v$VERSION\n";
- print "Math::BigInt::Lite\t v$Math::BigInt::Lite::VERSION\n" if $_lite;
- print "Math::BigInt\t\t v$Math::BigInt::VERSION";
- my $config = Math::BigInt->config();
- print " lib => $config->{lib} v$config->{lib_version}\n";
- print "Math::BigFloat\t\t v$Math::BigFloat::VERSION\n";
- print "Math::BigRat\t\t v$Math::BigRat::VERSION\n";
- exit;
- }
-
- # Take care of octal/hexadecimal constants
- overload::constant binary => sub { bigint::_binary_constant(shift) };
-
- # if another big* was already loaded:
- my ($package) = caller();
-
- no strict 'refs';
- if (!defined *{"${package}::inf"})
- {
- $self->export_to_level(1,$self, at a); # export inf and NaN
- }
- {
- no warnings 'redefine';
- *CORE::GLOBAL::oct = $oct if $oct;
- *CORE::GLOBAL::hex = $hex if $hex;
- }
- }
-
-sub PI () { Math::BigFloat->new('3.141592653589793238462643383279502884197'); }
-sub e () { Math::BigFloat->new('2.718281828459045235360287471352662497757'); }
-
-sub bpi ($) { local $Math::BigFloat::upgrade; Math::BigFloat::bpi(@_); }
-
-sub bexp ($$)
- {
- local $Math::BigFloat::upgrade;
- my $x = Math::BigFloat->new($_[0]); $x->bexp($_[1]);
- }
-
-1;
-
-__END__
-
-=head1 NAME
-
-bigrat - Transparent BigNumber/BigRational support for Perl
-
-=head1 SYNOPSIS
-
- use bigrat;
-
- print 2 + 4.5,"\n"; # BigFloat 6.5
- print 1/3 + 1/4,"\n"; # produces 7/12
-
- {
- no bigrat;
- print 1/3,"\n"; # 0.33333...
- }
-
- # Note that this will make hex() and oct() be globally overriden:
- use bigrat qw/hex oct/;
- print hex("0x1234567890123490"),"\n";
- print oct("01234567890123490"),"\n";
-
-=head1 DESCRIPTION
-
-All operators (including basic math operations) are overloaded. Integer and
-floating-point constants are created as proper BigInts or BigFloats,
-respectively.
-
-Other than L<bignum>, this module upgrades to Math::BigRat, meaning that
-instead of 2.5 you will get 2+1/2 as output.
-
-=head2 Modules Used
-
-C<bigrat> is just a thin wrapper around various modules of the Math::BigInt
-family. Think of it as the head of the family, who runs the shop, and orders
-the others to do the work.
-
-The following modules are currently used by bignum:
-
- Math::BigInt::Lite (for speed, and only if it is loadable)
- Math::BigInt
- Math::BigFloat
- Math::BigRat
-
-=head2 Math Library
-
-Math with the numbers is done (by default) by a module called
-Math::BigInt::Calc. This is equivalent to saying:
-
- use bigrat lib => 'Calc';
-
-You can change this by using:
-
- use bignum lib => 'GMP';
-
-The following would first try to find Math::BigInt::Foo, then
-Math::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc:
-
- use bigrat lib => 'Foo,Math::BigInt::Bar';
-
-Using C<lib> warns if none of the specified libraries can be found and
-L<Math::BigInt> did fall back to one of the default libraries.
-To supress this warning, use C<try> instead:
-
- use bignum try => 'GMP';
-
-If you want the code to die instead of falling back, use C<only> instead:
-
- use bignum only => 'GMP';
-
-Please see respective module documentation for further details.
-
-=head2 Sign
-
-The sign is either '+', '-', 'NaN', '+inf' or '-inf'.
-
-A sign of 'NaN' is used to represent the result when input arguments are not
-numbers or as a result of 0/0. '+inf' and '-inf' represent plus respectively
-minus infinity. You will get '+inf' when dividing a positive number by 0, and
-'-inf' when dividing any negative number by 0.
-
-=head2 Methods
-
-Since all numbers are not objects, you can use all functions that are part of
-the BigInt or BigFloat API. It is wise to use only the bxxx() notation, and not
-the fxxx() notation, though. This makes you independed on the fact that the
-underlying object might morph into a different class than BigFloat.
-
-=over 2
-
-=item inf()
-
-A shortcut to return Math::BigInt->binf(). Useful because Perl does not always
-handle bareword C<inf> properly.
-
-=item NaN()
-
-A shortcut to return Math::BigInt->bnan(). Useful because Perl does not always
-handle bareword C<NaN> properly.
-
-=item e
-
- # perl -Mbigrat=e -wle 'print e'
-
-Returns Euler's number C<e>, aka exp(1).
-
-=item PI
-
- # perl -Mbigrat=PI -wle 'print PI'
-
-Returns PI.
-
-=item bexp()
-
- bexp($power,$accuracy);
-
-
-Returns Euler's number C<e> raised to the appropriate power, to
-the wanted accuracy.
-
-Example:
-
- # perl -Mbigrat=bexp -wle 'print bexp(1,80)'
-
-=item bpi()
-
- bpi($accuracy);
-
-Returns PI to the wanted accuracy.
-
-Example:
-
- # perl -Mbigrat=bpi -wle 'print bpi(80)'
-
-=item upgrade()
-
-Return the class that numbers are upgraded to, is in fact returning
-C<$Math::BigInt::upgrade>.
-
-=item in_effect()
-
- use bigrat;
-
- print "in effect\n" if bigrat::in_effect; # true
- {
- no bigrat;
- print "in effect\n" if bigrat::in_effect; # false
- }
-
-Returns true or false if C<bigrat> is in effect in the current scope.
-
-This method only works on Perl v5.9.4 or later.
-
-=back
-
-=head2 MATH LIBRARY
-
-Math with the numbers is done (by default) by a module called
-
-=head2 Cavaet
-
-But a warning is in order. When using the following to make a copy of a number,
-only a shallow copy will be made.
-
- $x = 9; $y = $x;
- $x = $y = 7;
-
-If you want to make a real copy, use the following:
-
- $y = $x->copy();
-
-Using the copy or the original with overloaded math is okay, e.g. the
-following work:
-
- $x = 9; $y = $x;
- print $x + 1, " ", $y,"\n"; # prints 10 9
-
-but calling any method that modifies the number directly will result in
-B<both> the original and the copy being destroyed:
-
- $x = 9; $y = $x;
- print $x->badd(1), " ", $y,"\n"; # prints 10 10
-
- $x = 9; $y = $x;
- print $x->binc(1), " ", $y,"\n"; # prints 10 10
-
- $x = 9; $y = $x;
- print $x->bmul(2), " ", $y,"\n"; # prints 18 18
-
-Using methods that do not modify, but testthe contents works:
-
- $x = 9; $y = $x;
- $z = 9 if $x->is_zero(); # works fine
-
-See the documentation about the copy constructor and C<=> in overload, as
-well as the documentation in BigInt for further details.
-
-=head2 Options
-
-bignum recognizes some options that can be passed while loading it via use.
-The options can (currently) be either a single letter form, or the long form.
-The following options exist:
-
-=over 2
-
-=item a or accuracy
-
-This sets the accuracy for all math operations. The argument must be greater
-than or equal to zero. See Math::BigInt's bround() function for details.
-
- perl -Mbigrat=a,50 -le 'print sqrt(20)'
-
-Note that setting precision and accurary at the same time is not possible.
-
-=item p or precision
-
-This sets the precision for all math operations. The argument can be any
-integer. Negative values mean a fixed number of digits after the dot, while
-a positive value rounds to this digit left from the dot. 0 or 1 mean round to
-integer. See Math::BigInt's bfround() function for details.
-
- perl -Mbigrat=p,-50 -le 'print sqrt(20)'
-
-Note that setting precision and accurary at the same time is not possible.
-
-=item t or trace
-
-This enables a trace mode and is primarily for debugging bignum or
-Math::BigInt/Math::BigFloat.
-
-=item l or lib
-
-Load a different math lib, see L<MATH LIBRARY>.
-
- perl -Mbigrat=l,GMP -e 'print 2 ** 512'
-
-Currently there is no way to specify more than one library on the command
-line. This means the following does not work:
-
- perl -Mbignum=l,GMP,Pari -e 'print 2 ** 512'
-
-This will be hopefully fixed soon ;)
-
-=item hex
-
-Override the built-in hex() method with a version that can handle big
-integers. Note that under Perl v5.9.4 or ealier, this will be global
-and cannot be disabled with "no bigint;".
-
-=item oct
-
-Override the built-in oct() method with a version that can handle big
-integers. Note that under Perl v5.9.4 or ealier, this will be global
-and cannot be disabled with "no bigint;".
-
-=item v or version
-
-This prints out the name and version of all modules used and then exits.
-
- perl -Mbigrat=v
-
-=back
-
-=head1 CAVAETS
-
-=over 2
-
-=item in_effect()
-
-This method only works on Perl v5.9.4 or later.
-
-=item hex()/oct()
-
-C<bigint> overrides these routines with versions that can also handle
-big integer values. Under Perl prior to version v5.9.4, however, this
-will not happen unless you specifically ask for it with the two
-import tags "hex" and "oct" - and then it will be global and cannot be
-disabled inside a scope with "no bigint":
-
- use bigint qw/hex oct/;
-
- print hex("0x1234567890123456");
- {
- no bigint;
- print hex("0x1234567890123456");
- }
-
-The second call to hex() will warn about a non-portable constant.
-
-Compare this to:
-
- use bigint;
-
- # will warn only under Perl older than v5.9.4
- print hex("0x1234567890123456");
-
-=back
-
-=head1 EXAMPLES
-
- perl -Mbigrat -le 'print sqrt(33)'
- perl -Mbigrat -le 'print 2*255'
- perl -Mbigrat -le 'print 4.5+2*255'
- perl -Mbigrat -le 'print 3/7 + 5/7 + 8/3'
- perl -Mbigrat -le 'print 12->is_odd()';
- perl -Mbignum=l,GMP -le 'print 7 ** 7777'
-
-=head1 LICENSE
-
-This program is free software; you may redistribute it and/or modify it under
-the same terms as Perl itself.
-
-=head1 SEE ALSO
-
-Especially L<bignum>.
-
-L<Math::BigFloat>, L<Math::BigInt>, L<Math::BigRat> and L<Math::Big> as well
-as L<Math::BigInt::BitVect>, L<Math::BigInt::Pari> and L<Math::BigInt::GMP>.
-
-=head1 AUTHORS
-
-(C) by Tels L<http://bloodgate.com/> in early 2002 - 2007.
-
-=cut
Deleted: trunk/contrib/perl/lib/cacheout.pl
===================================================================
--- trunk/contrib/perl/lib/cacheout.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/cacheout.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,59 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: FileCache
-
-# Open in their package.
-
-sub cacheout'open {
- open($_[0], $_[1]);
-}
-
-# Close as well
-
-sub cacheout'close {
- close($_[0]);
-}
-
-# But only this sub name is visible to them.
-
-sub cacheout {
- package cacheout;
-
- ($file) = @_;
- if (!$isopen{$file}) {
- if (++$numopen > $maxopen) {
- local(@lru) = sort {$isopen{$a} <=> $isopen{$b};} keys(%isopen);
- splice(@lru, $maxopen / 3);
- $numopen -= @lru;
- for (@lru) { &close($_); delete $isopen{$_}; }
- }
- &open($file, ($saw{$file}++ ? '>>' : '>') . $file)
- || die "Can't create $file: $!\n";
- }
- $isopen{$file} = ++$seq;
-}
-
-package cacheout;
-
-$seq = 0;
-$numopen = 0;
-
-if (open(PARAM,'/usr/include/sys/param.h')) {
- local($_, $.);
- while (<PARAM>) {
- $maxopen = $1 - 4 if /^\s*#\s*define\s+NOFILE\s+(\d+)/;
- }
- close PARAM;
-}
-$maxopen = 16 unless $maxopen;
-
-1;
Deleted: trunk/contrib/perl/lib/complete.pl
===================================================================
--- trunk/contrib/perl/lib/complete.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/complete.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,124 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-;#
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Term::Complete
-
-;# @(#)complete.pl,v1.1 (me at anywhere.EBay.Sun.COM) 09/23/91
-;#
-;# Author: Wayne Thompson
-;#
-;# Description:
-;# This routine provides word completion.
-;# (TAB) attempts word completion.
-;# (^D) prints completion list.
-;# (These may be changed by setting $Complete'complete, etc.)
-;#
-;# Diagnostics:
-;# Bell when word completion fails.
-;#
-;# Dependencies:
-;# The tty driver is put into raw mode.
-;#
-;# Bugs:
-;#
-;# Usage:
-;# $input = &Complete('prompt_string', *completion_list);
-;# or
-;# $input = &Complete('prompt_string', @completion_list);
-;#
-
-CONFIG: {
- package Complete;
-
- $complete = "\004";
- $kill = "\025";
- $erase1 = "\177";
- $erase2 = "\010";
-}
-
-sub Complete {
- package Complete;
-
- local($prompt, @cmp_list, $return, @match, $l, $test, $cmp, $r);
- if ($_[1] =~ /^StB\0/) {
- ($prompt, *_) = @_;
- }
- else {
- $prompt = shift(@_);
- }
- @cmp_lst = sort(@_);
-
- system('stty raw -echo');
- LOOP: {
- print($prompt, $return);
- while (($_ = getc(STDIN)) ne "\r") {
- CASE: {
- # (TAB) attempt completion
- $_ eq "\t" && do {
- @match = grep(/^$return/, @cmp_lst);
- $l = length($test = shift(@match));
- unless ($#match < 0) {
- foreach $cmp (@match) {
- until (substr($cmp, 0, $l) eq substr($test, 0, $l)) {
- $l--;
- }
- }
- print("\a");
- }
- print($test = substr($test, $r, $l - $r));
- $r = length($return .= $test);
- last CASE;
- };
-
- # (^D) completion list
- $_ eq $complete && do {
- print(join("\r\n", '', grep(/^$return/, @cmp_lst)), "\r\n");
- redo LOOP;
- };
-
- # (^U) kill
- $_ eq $kill && do {
- if ($r) {
- undef $r;
- undef $return;
- print("\r\n");
- redo LOOP;
- }
- last CASE;
- };
-
- # (DEL) || (BS) erase
- ($_ eq $erase1 || $_ eq $erase2) && do {
- if($r) {
- print("\b \b");
- chop($return);
- $r--;
- }
- last CASE;
- };
-
- # printable char
- ord >= 32 && do {
- $return .= $_;
- $r++;
- print;
- last CASE;
- };
- }
- }
- }
- system('stty -raw echo');
- print("\n");
- $return;
-}
-
-1;
Deleted: trunk/contrib/perl/lib/constant.pm
===================================================================
--- trunk/contrib/perl/lib/constant.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/constant.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,374 +0,0 @@
-package constant;
-use 5.005;
-use strict;
-use warnings::register;
-
-use vars qw($VERSION %declared);
-$VERSION = '1.17';
-
-#=======================================================================
-
-# Some names are evil choices.
-my %keywords = map +($_, 1), qw{ BEGIN INIT CHECK END DESTROY AUTOLOAD };
-$keywords{UNITCHECK}++ if $] > 5.009;
-
-my %forced_into_main = map +($_, 1),
- qw{ STDIN STDOUT STDERR ARGV ARGVOUT ENV INC SIG };
-
-my %forbidden = (%keywords, %forced_into_main);
-
-#=======================================================================
-# import() - import symbols into user's namespace
-#
-# What we actually do is define a function in the caller's namespace
-# which returns the value. The function we create will normally
-# be inlined as a constant, thereby avoiding further sub calling
-# overhead.
-#=======================================================================
-sub import {
- my $class = shift;
- return unless @_; # Ignore 'use constant;'
- my $constants;
- my $multiple = ref $_[0];
- my $pkg = caller;
- my $symtab;
- my $str_end = $] >= 5.006 ? "\\z" : "\\Z";
-
- if ($] > 5.009002) {
- no strict 'refs';
- $symtab = \%{$pkg . '::'};
- };
-
- if ( $multiple ) {
- if (ref $_[0] ne 'HASH') {
- require Carp;
- Carp::croak("Invalid reference type '".ref(shift)."' not 'HASH'");
- }
- $constants = shift;
- } else {
- $constants->{+shift} = undef;
- }
-
- foreach my $name ( keys %$constants ) {
- unless (defined $name) {
- require Carp;
- Carp::croak("Can't use undef as constant name");
- }
-
- # Normal constant name
- if ($name =~ /^_?[^\W_0-9]\w*$str_end/ and !$forbidden{$name}) {
- # Everything is okay
-
- # Name forced into main, but we're not in main. Fatal.
- } elsif ($forced_into_main{$name} and $pkg ne 'main') {
- require Carp;
- Carp::croak("Constant name '$name' is forced into main::");
-
- # Starts with double underscore. Fatal.
- } elsif ($name =~ /^__/) {
- require Carp;
- Carp::croak("Constant name '$name' begins with '__'");
-
- # Maybe the name is tolerable
- } elsif ($name =~ /^[A-Za-z_]\w*$str_end/) {
- # Then we'll warn only if you've asked for warnings
- if (warnings::enabled()) {
- if ($keywords{$name}) {
- warnings::warn("Constant name '$name' is a Perl keyword");
- } elsif ($forced_into_main{$name}) {
- warnings::warn("Constant name '$name' is " .
- "forced into package main::");
- }
- }
-
- # Looks like a boolean
- # use constant FRED == fred;
- } elsif ($name =~ /^[01]?$str_end/) {
- require Carp;
- if (@_) {
- Carp::croak("Constant name '$name' is invalid");
- } else {
- Carp::croak("Constant name looks like boolean value");
- }
-
- } else {
- # Must have bad characters
- require Carp;
- Carp::croak("Constant name '$name' has invalid characters");
- }
-
- {
- no strict 'refs';
- my $full_name = "${pkg}::$name";
- $declared{$full_name}++;
- if ($multiple || @_ == 1) {
- my $scalar = $multiple ? $constants->{$name} : $_[0];
- if ($symtab && !exists $symtab->{$name}) {
- # No typeglob yet, so we can use a reference as space-
- # efficient proxy for a constant subroutine
- # The check in Perl_ck_rvconst knows that inlinable
- # constants from cv_const_sv are read only. So we have to:
- Internals::SvREADONLY($scalar, 1);
- $symtab->{$name} = \$scalar;
- mro::method_changed_in($pkg);
- } else {
- *$full_name = sub () { $scalar };
- }
- } elsif (@_) {
- my @list = @_;
- *$full_name = sub () { @list };
- } else {
- *$full_name = sub () { };
- }
- }
- }
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-constant - Perl pragma to declare constants
-
-=head1 SYNOPSIS
-
- use constant PI => 4 * atan2(1, 1);
- use constant DEBUG => 0;
-
- print "Pi equals ", PI, "...\n" if DEBUG;
-
- use constant {
- SEC => 0,
- MIN => 1,
- HOUR => 2,
- MDAY => 3,
- MON => 4,
- YEAR => 5,
- WDAY => 6,
- YDAY => 7,
- ISDST => 8,
- };
-
- use constant WEEKDAYS => qw(
- Sunday Monday Tuesday Wednesday Thursday Friday Saturday
- );
-
- print "Today is ", (WEEKDAYS)[ (localtime)[WDAY] ], ".\n";
-
-=head1 DESCRIPTION
-
-This pragma allows you to declare constants at compile-time.
-
-When you declare a constant such as C<PI> using the method shown
-above, each machine your script runs upon can have as many digits
-of accuracy as it can use. Also, your program will be easier to
-read, more likely to be maintained (and maintained correctly), and
-far less likely to send a space probe to the wrong planet because
-nobody noticed the one equation in which you wrote C<3.14195>.
-
-When a constant is used in an expression, Perl replaces it with its
-value at compile time, and may then optimize the expression further.
-In particular, any code in an C<if (CONSTANT)> block will be optimized
-away if the constant is false.
-
-=head1 NOTES
-
-As with all C<use> directives, defining a constant happens at
-compile time. Thus, it's probably not correct to put a constant
-declaration inside of a conditional statement (like C<if ($foo)
-{ use constant ... }>).
-
-Constants defined using this module cannot be interpolated into
-strings like variables. However, concatenation works just fine:
-
- print "Pi equals PI...\n"; # WRONG: does not expand "PI"
- print "Pi equals ".PI."...\n"; # right
-
-Even though a reference may be declared as a constant, the reference may
-point to data which may be changed, as this code shows.
-
- use constant ARRAY => [ 1,2,3,4 ];
- print ARRAY->[1];
- ARRAY->[1] = " be changed";
- print ARRAY->[1];
-
-Dereferencing constant references incorrectly (such as using an array
-subscript on a constant hash reference, or vice versa) will be trapped at
-compile time.
-
-Constants belong to the package they are defined in. To refer to a
-constant defined in another package, specify the full package name, as
-in C<Some::Package::CONSTANT>. Constants may be exported by modules,
-and may also be called as either class or instance methods, that is,
-as C<< Some::Package->CONSTANT >> or as C<< $obj->CONSTANT >> where
-C<$obj> is an instance of C<Some::Package>. Subclasses may define
-their own constants to override those in their base class.
-
-The use of all caps for constant names is merely a convention,
-although it is recommended in order to make constants stand out
-and to help avoid collisions with other barewords, keywords, and
-subroutine names. Constant names must begin with a letter or
-underscore. Names beginning with a double underscore are reserved. Some
-poor choices for names will generate warnings, if warnings are enabled at
-compile time.
-
-=head2 List constants
-
-Constants may be lists of more (or less) than one value. A constant
-with no values evaluates to C<undef> in scalar context. Note that
-constants with more than one value do I<not> return their last value in
-scalar context as one might expect. They currently return the number
-of values, but B<this may change in the future>. Do not use constants
-with multiple values in scalar context.
-
-B<NOTE:> This implies that the expression defining the value of a
-constant is evaluated in list context. This may produce surprises:
-
- use constant TIMESTAMP => localtime; # WRONG!
- use constant TIMESTAMP => scalar localtime; # right
-
-The first line above defines C<TIMESTAMP> as a 9-element list, as
-returned by C<localtime()> in list context. To set it to the string
-returned by C<localtime()> in scalar context, an explicit C<scalar>
-keyword is required.
-
-List constants are lists, not arrays. To index or slice them, they
-must be placed in parentheses.
-
- my @workdays = WEEKDAYS[1 .. 5]; # WRONG!
- my @workdays = (WEEKDAYS)[1 .. 5]; # right
-
-=head2 Defining multiple constants at once
-
-Instead of writing multiple C<use constant> statements, you may define
-multiple constants in a single statement by giving, instead of the
-constant name, a reference to a hash where the keys are the names of
-the constants to be defined. Obviously, all constants defined using
-this method must have a single value.
-
- use constant {
- FOO => "A single value",
- BAR => "This", "won't", "work!", # Error!
- };
-
-This is a fundamental limitation of the way hashes are constructed in
-Perl. The error messages produced when this happens will often be
-quite cryptic -- in the worst case there may be none at all, and
-you'll only later find that something is broken.
-
-When defining multiple constants, you cannot use the values of other
-constants defined in the same declaration. This is because the
-calling package doesn't know about any constant within that group
-until I<after> the C<use> statement is finished.
-
- use constant {
- BITMASK => 0xAFBAEBA8,
- NEGMASK => ~BITMASK, # Error!
- };
-
-=head2 Magic constants
-
-Magical values and references can be made into constants at compile
-time, allowing for way cool stuff like this. (These error numbers
-aren't totally portable, alas.)
-
- use constant E2BIG => ($! = 7);
- print E2BIG, "\n"; # something like "Arg list too long"
- print 0+E2BIG, "\n"; # "7"
-
-You can't produce a tied constant by giving a tied scalar as the
-value. References to tied variables, however, can be used as
-constants without any problems.
-
-=head1 TECHNICAL NOTES
-
-In the current implementation, scalar constants are actually
-inlinable subroutines. As of version 5.004 of Perl, the appropriate
-scalar constant is inserted directly in place of some subroutine
-calls, thereby saving the overhead of a subroutine call. See
-L<perlsub/"Constant Functions"> for details about how and when this
-happens.
-
-In the rare case in which you need to discover at run time whether a
-particular constant has been declared via this module, you may use
-this function to examine the hash C<%constant::declared>. If the given
-constant name does not include a package name, the current package is
-used.
-
- sub declared ($) {
- use constant 1.01; # don't omit this!
- my $name = shift;
- $name =~ s/^::/main::/;
- my $pkg = caller;
- my $full_name = $name =~ /::/ ? $name : "${pkg}::$name";
- $constant::declared{$full_name};
- }
-
-=head1 CAVEATS
-
-In the current version of Perl, list constants are not inlined
-and some symbols may be redefined without generating a warning.
-
-It is not possible to have a subroutine or a keyword with the same
-name as a constant in the same package. This is probably a Good Thing.
-
-A constant with a name in the list C<STDIN STDOUT STDERR ARGV ARGVOUT
-ENV INC SIG> is not allowed anywhere but in package C<main::>, for
-technical reasons.
-
-Unlike constants in some languages, these cannot be overridden
-on the command line or via environment variables.
-
-You can get into trouble if you use constants in a context which
-automatically quotes barewords (as is true for any subroutine call).
-For example, you can't say C<$hash{CONSTANT}> because C<CONSTANT> will
-be interpreted as a string. Use C<$hash{CONSTANT()}> or
-C<$hash{+CONSTANT}> to prevent the bareword quoting mechanism from
-kicking in. Similarly, since the C<< => >> operator quotes a bareword
-immediately to its left, you have to say C<< CONSTANT() => 'value' >>
-(or simply use a comma in place of the big arrow) instead of
-C<< CONSTANT => 'value' >>.
-
-=head1 SEE ALSO
-
-L<Readonly> - Facility for creating read-only scalars, arrays, hashes.
-
-L<Const> - Facility for creating read-only variables. Similar to C<Readonly>,
-but uses C<SvREADONLY> instead of C<tie>.
-
-L<Attribute::Constant> - Make read-only variables via attribute
-
-L<Scalar::Readonly> - Perl extension to the C<SvREADONLY> scalar flag
-
-L<Hash::Util> - A selection of general-utility hash subroutines (mostly
-to lock/unlock keys and values)
-
-=head1 BUGS
-
-Please report any bugs or feature requests via the perlbug(1) utility.
-
-=head1 AUTHORS
-
-Tom Phoenix, E<lt>F<rootbeer at redcat.com>E<gt>, with help from
-many other folks.
-
-Multiple constant declarations at once added by Casey West,
-E<lt>F<casey at geeknest.com>E<gt>.
-
-Documentation mostly rewritten by Ilmari Karonen,
-E<lt>F<perl at itz.pp.sci.fi>E<gt>.
-
-This program is maintained by the Perl 5 Porters.
-The CPAN distribution is maintained by SE<eacute>bastien Aperghis-Tramoni
-E<lt>F<sebastien at aperghis.net>E<gt>.
-
-=head1 COPYRIGHT & LICENSE
-
-Copyright (C) 1997, 1999 Tom Phoenix
-
-This module is free software; you can redistribute it or modify it
-under the same terms as Perl itself.
-
-=cut
Deleted: trunk/contrib/perl/lib/constant.t
===================================================================
--- trunk/contrib/perl/lib/constant.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/constant.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,350 +0,0 @@
-#!./perl -T
-
-BEGIN {
- if ($ENV{PERL_CORE}) {
- chdir 't' if -d 't';
- @INC = '../lib';
- }
-}
-
-use warnings;
-use vars qw{ @warnings $fagwoosh $putt $kloong};
-BEGIN { # ...and save 'em for later
- $SIG{'__WARN__'} = sub { push @warnings, @_ }
-}
-END { @warnings && print STDERR join "\n- ", "accumulated warnings:", @warnings }
-
-
-use strict;
-use Test::More tests => 95;
-my $TB = Test::More->builder;
-
-BEGIN { use_ok('constant'); }
-
-use constant PI => 4 * atan2 1, 1;
-
-ok defined PI, 'basic scalar constant';
-is substr(PI, 0, 7), '3.14159', ' in substr()';
-
-sub deg2rad { PI * $_[0] / 180 }
-
-my $ninety = deg2rad 90;
-
-cmp_ok abs($ninety - 1.5707), '<', 0.0001, ' in math expression';
-
-use constant UNDEF1 => undef; # the right way
-use constant UNDEF2 => ; # the weird way
-use constant 'UNDEF3' ; # the 'short' way
-use constant EMPTY => ( ) ; # the right way for lists
-
-is UNDEF1, undef, 'right way to declare an undef';
-is UNDEF2, undef, ' weird way';
-is UNDEF3, undef, ' short way';
-
-# XXX Why is this way different than the other ones?
-my @undef = UNDEF1;
-is @undef, 1;
-is $undef[0], undef;
-
- at undef = UNDEF2;
-is @undef, 0;
- at undef = UNDEF3;
-is @undef, 0;
- at undef = EMPTY;
-is @undef, 0;
-
-use constant COUNTDOWN => scalar reverse 1, 2, 3, 4, 5;
-use constant COUNTLIST => reverse 1, 2, 3, 4, 5;
-use constant COUNTLAST => (COUNTLIST)[-1];
-
-is COUNTDOWN, '54321';
-my @cl = COUNTLIST;
-is @cl, 5;
-is COUNTDOWN, join '', @cl;
-is COUNTLAST, 1;
-is((COUNTLIST)[1], 4);
-
-use constant ABC => 'ABC';
-is "abc${\( ABC )}abc", "abcABCabc";
-
-use constant DEF => 'D', 'E', chr ord 'F';
-is "d e f @{[ DEF ]} d e f", "d e f D E F d e f";
-
-use constant SINGLE => "'";
-use constant DOUBLE => '"';
-use constant BACK => '\\';
-my $tt = BACK . SINGLE . DOUBLE ;
-is $tt, q(\\'");
-
-use constant MESS => q('"'\\"'"\\);
-is MESS, q('"'\\"'"\\);
-is length(MESS), 8;
-
-use constant LEADING => " \t1234";
-cmp_ok LEADING, '==', 1234;
-is LEADING, " \t1234";
-
-use constant ZERO1 => 0;
-use constant ZERO2 => 0.0;
-use constant ZERO3 => '0.0';
-is ZERO1, '0';
-is ZERO2, '0';
-is ZERO3, '0.0';
-
-{
- package Other;
- use constant PI => 3.141;
-}
-
-cmp_ok(abs(PI - 3.1416), '<', 0.0001);
-is Other::PI, 3.141;
-
-use constant E2BIG => $! = 7;
-cmp_ok E2BIG, '==', 7;
-# This is something like "Arg list too long", but the actual message
-# text may vary, so we can't test much better than this.
-cmp_ok length(E2BIG), '>', 6;
-
-is @warnings, 0 or diag join "\n- ", "unexpected warning:", @warnings;
- at warnings = (); # just in case
-undef &PI;
-ok @warnings && ($warnings[0] =~ /Constant sub.* undefined/) or
- diag join "\n", "unexpected warning", @warnings;
-shift @warnings;
-
-is @warnings, 0, "unexpected warning";
-
-my $curr_test = $TB->current_test;
-use constant CSCALAR => \"ok 35\n";
-use constant CHASH => { foo => "ok 36\n" };
-use constant CARRAY => [ undef, "ok 37\n" ];
-use constant CCODE => sub { "ok $_[0]\n" };
-
-my $output = $TB->output ;
-print $output ${+CSCALAR};
-print $output CHASH->{foo};
-print $output CARRAY->[1];
-print $output CCODE->($curr_test+4);
-
-$TB->current_test($curr_test+4);
-
-eval q{ CCODE->{foo} };
-ok scalar($@ =~ /^Constant is not a HASH/);
-
-
-# Allow leading underscore
-use constant _PRIVATE => 47;
-is _PRIVATE, 47;
-
-# Disallow doubled leading underscore
-eval q{
- use constant __DISALLOWED => "Oops";
-};
-like $@, qr/begins with '__'/;
-
-# Check on declared() and %declared. This sub should be EXACTLY the
-# same as the one quoted in the docs!
-sub declared ($) {
- use constant 1.01; # don't omit this!
- my $name = shift;
- $name =~ s/^::/main::/;
- my $pkg = caller;
- my $full_name = $name =~ /::/ ? $name : "${pkg}::$name";
- $constant::declared{$full_name};
-}
-
-ok declared 'PI';
-ok $constant::declared{'main::PI'};
-
-ok !declared 'PIE';
-ok !$constant::declared{'main::PIE'};
-
-{
- package Other;
- use constant IN_OTHER_PACK => 42;
- ::ok ::declared 'IN_OTHER_PACK';
- ::ok $constant::declared{'Other::IN_OTHER_PACK'};
- ::ok ::declared 'main::PI';
- ::ok $constant::declared{'main::PI'};
-}
-
-ok declared 'Other::IN_OTHER_PACK';
-ok $constant::declared{'Other::IN_OTHER_PACK'};
-
- at warnings = ();
-eval q{
- no warnings;
- #local $^W if $] < 5.006;
- use warnings 'constant';
- use constant 'BEGIN' => 1 ;
- use constant 'INIT' => 1 ;
- use constant 'CHECK' => 1 ;
- use constant 'END' => 1 ;
- use constant 'DESTROY' => 1 ;
- use constant 'AUTOLOAD' => 1 ;
- use constant 'STDIN' => 1 ;
- use constant 'STDOUT' => 1 ;
- use constant 'STDERR' => 1 ;
- use constant 'ARGV' => 1 ;
- use constant 'ARGVOUT' => 1 ;
- use constant 'ENV' => 1 ;
- use constant 'INC' => 1 ;
- use constant 'SIG' => 1 ;
- use constant 'UNITCHECK' => 1;
-};
-
-my @Expected_Warnings =
- (
- qr/^Constant name 'BEGIN' is a Perl keyword at/,
- qr/^Constant subroutine BEGIN redefined at/,
- qr/^Constant name 'INIT' is a Perl keyword at/,
- qr/^Constant name 'CHECK' is a Perl keyword at/,
- qr/^Constant name 'END' is a Perl keyword at/,
- qr/^Constant name 'DESTROY' is a Perl keyword at/,
- qr/^Constant name 'AUTOLOAD' is a Perl keyword at/,
- qr/^Constant name 'STDIN' is forced into package main:: a/,
- qr/^Constant name 'STDOUT' is forced into package main:: at/,
- qr/^Constant name 'STDERR' is forced into package main:: at/,
- qr/^Constant name 'ARGV' is forced into package main:: at/,
- qr/^Constant name 'ARGVOUT' is forced into package main:: at/,
- qr/^Constant name 'ENV' is forced into package main:: at/,
- qr/^Constant name 'INC' is forced into package main:: at/,
- qr/^Constant name 'SIG' is forced into package main:: at/,
- qr/^Constant name 'UNITCHECK' is a Perl keyword at/,
-);
-
-unless ($] > 5.009) {
- # Remove the UNITCHECK warning
- pop @Expected_Warnings;
- # But keep the count the same
- push @Expected_Warnings, qr/^$/;
- push @warnings, "";
-}
-
-# when run under "make test"
-if (@warnings == 16) {
- push @warnings, "";
- push @Expected_Warnings, qr/^$/;
-}
-# when run directly: perl -wT -Ilib t/constant.t
-elsif (@warnings == 17) {
- splice @Expected_Warnings, 1, 0,
- qr/^Prototype mismatch: sub main::BEGIN \(\) vs none at/;
-}
-# when run directly under 5.6.2: perl -wT -Ilib t/constant.t
-elsif (@warnings == 15) {
- splice @Expected_Warnings, 1, 1;
- push @warnings, "", "";
- push @Expected_Warnings, qr/^$/, qr/^$/;
-}
-else {
- my $rule = " -" x 20;
- diag "/!\\ unexpected case: ", scalar @warnings, " warnings\n$rule\n";
- diag map { " $_" } @warnings;
- diag $rule, $/;
-}
-
-is @warnings, 17;
-
-for my $idx (0..$#warnings) {
- like $warnings[$idx], $Expected_Warnings[$idx];
-}
-
- at warnings = ();
-
-
-use constant {
- THREE => 3,
- FAMILY => [ qw( John Jane Sally ) ],
- AGES => { John => 33, Jane => 28, Sally => 3 },
- RFAM => [ [ qw( John Jane Sally ) ] ],
- SPIT => sub { shift },
-};
-
-is @{+FAMILY}, THREE;
-is @{+FAMILY}, @{RFAM->[0]};
-is FAMILY->[2], RFAM->[0]->[2];
-is AGES->{FAMILY->[1]}, 28;
-is THREE**3, SPIT->(@{+FAMILY}**3);
-
-# Allow name of digits/underscores only if it begins with underscore
-{
- use warnings FATAL => 'constant';
- eval q{
- use constant _1_2_3 => 'allowed';
- };
- ok( $@ eq '' );
-}
-
-sub slotch ();
-
-{
- my @warnings;
- local $SIG{'__WARN__'} = sub { push @warnings, @_ };
- eval 'use constant slotch => 3; 1' or die $@;
-
- is ("@warnings", "", "No warnings if a prototype exists");
-
- my $value = eval 'slotch';
- is ($@, '');
- is ($value, 3);
-}
-
-sub zit;
-
-{
- my @warnings;
- local $SIG{'__WARN__'} = sub { push @warnings, @_ };
- eval 'use constant zit => 4; 1' or die $@;
-
- # empty prototypes are reported differently in different versions
- my $no_proto = $] < 5.008004 ? "" : ": none";
-
- is(scalar @warnings, 1, "1 warning");
- like ($warnings[0], qr/^Prototype mismatch: sub main::zit$no_proto vs \(\)/,
- "about the prototype mismatch");
-
- my $value = eval 'zit';
- is ($@, '');
- is ($value, 4);
-}
-
-$fagwoosh = 'geronimo';
-$putt = 'leutwein';
-$kloong = 'schlozhauer';
-
-{
- my @warnings;
- local $SIG{'__WARN__'} = sub { push @warnings, @_ };
- eval 'use constant fagwoosh => 5; 1' or die $@;
-
- is ("@warnings", "", "No warnings if the typeglob exists already");
-
- my $value = eval 'fagwoosh';
- is ($@, '');
- is ($value, 5);
-
- my @value = eval 'fagwoosh';
- is ($@, '');
- is_deeply (\@value, [5]);
-
- eval 'use constant putt => 6, 7; 1' or die $@;
-
- is ("@warnings", "", "No warnings if the typeglob exists already");
-
- @value = eval 'putt';
- is ($@, '');
- is_deeply (\@value, [6, 7]);
-
- eval 'use constant "klong"; 1' or die $@;
-
- is ("@warnings", "", "No warnings if the typeglob exists already");
-
- $value = eval 'klong';
- is ($@, '');
- is ($value, undef);
-
- @value = eval 'klong';
- is ($@, '');
- is_deeply (\@value, []);
-}
Deleted: trunk/contrib/perl/lib/ctime.pl
===================================================================
--- trunk/contrib/perl/lib/ctime.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/ctime.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,63 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-;# ctime.pl is a simple Perl emulation for the well known ctime(3C) function.
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: the POSIX ctime function
-
-;#
-;# Waldemar Kebsch, Federal Republic of Germany, November 1988
-;# kebsch.pad at nixpbe.UUCP
-;# Modified March 1990, Feb 1991 to properly handle timezones
-;# $RCSfile: ctime.pl,v $$Revision: 1.1.1.2 $$Date: 2011-05-18 13:33:26 $
-;# Marion Hakanson (hakanson at cse.ogi.edu)
-;# Oregon Graduate Institute of Science and Technology
-;#
-;# usage:
-;#
-;# #include <ctime.pl> # see the -P and -I option in perl.man
-;# $Date = &ctime(time);
-
-CONFIG: {
- package ctime;
-
- @DoW = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
- @MoY = ('Jan','Feb','Mar','Apr','May','Jun',
- 'Jul','Aug','Sep','Oct','Nov','Dec');
-}
-
-sub ctime {
- package ctime;
-
- local($time) = @_;
- local($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst);
-
- # Determine what time zone is in effect.
- # Use GMT if TZ is defined as null, local time if TZ undefined.
- # There's no portable way to find the system default timezone.
-
- $TZ = defined($ENV{'TZ'}) ? ( $ENV{'TZ'} ? $ENV{'TZ'} : 'GMT' ) : '';
- ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
- ($TZ eq 'GMT') ? gmtime($time) : localtime($time);
-
- # Hack to deal with 'PST8PDT' format of TZ
- # Note that this can't deal with all the esoteric forms, but it
- # does recognize the most common: [:]STDoff[DST[off][,rule]]
-
- if($TZ=~/^([^:\d+\-,]{3,})([+-]?\d{1,2}(:\d{1,2}){0,2})([^\d+\-,]{3,})?/){
- $TZ = $isdst ? $4 : $1;
- }
- $TZ .= ' ' unless $TZ eq '';
-
- $year += 1900;
- sprintf("%s %s %2d %2d:%02d:%02d %s%4d\n",
- $DoW[$wday], $MoY[$mon], $mday, $hour, $min, $sec, $TZ, $year);
-}
-1;
Deleted: trunk/contrib/perl/lib/dotsh.pl
===================================================================
--- trunk/contrib/perl/lib/dotsh.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/dotsh.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,78 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-#
-# @(#)dotsh.pl 03/19/94
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Author: Charles Collins
-#
-# Description:
-# This routine takes a shell script and 'dots' it into the current perl
-# environment. This makes it possible to use existing system scripts
-# to alter environment variables on the fly.
-#
-# Usage:
-# &dotsh ('ShellScript', 'DependentVariable(s)');
-#
-# where
-#
-# 'ShellScript' is the full name of the shell script to be dotted
-#
-# 'DependentVariable(s)' is an optional list of shell variables in the
-# form VARIABLE=VALUE,VARIABLE=VALUE,... that 'ShellScript' is
-# dependent upon. These variables MUST be defined using shell syntax.
-#
-# Example:
-# &dotsh ('/foo/bar', 'arg1');
-# &dotsh ('/foo/bar');
-# &dotsh ('/foo/bar arg1 ... argN');
-#
-
-sub dotsh {
- local(@sh) = @_;
- local($tmp,$key,$shell,$command,$args,$vars) = '';
- local(*dotsh);
- undef *dotsh;
- $dotsh = shift(@sh);
- @dotsh = split (/\s/, $dotsh);
- $command = shift (@dotsh);
- $args = join (" ", @dotsh);
- $vars = join ("\n", @sh);
- open (_SH_ENV, "$command") || die "Could not open $dotsh!\n";
- chop($_ = <_SH_ENV>);
- $shell = "$1 -c" if ($_ =~ /^\#\!\s*(\S+(\/sh|\/ksh|\/zsh|\/csh))\s*$/);
- close (_SH_ENV);
- if (!$shell) {
- if ($ENV{'SHELL'} =~ /\/sh$|\/ksh$|\/zsh$|\/bash$|\/csh$/) {
- $shell = "$ENV{'SHELL'} -c";
- } else {
- print "SHELL not recognized!\nUsing /bin/sh...\n";
- $shell = "/bin/sh -c";
- }
- }
- if (length($vars) > 0) {
- open (_SH_ENV, "$shell \"$vars && . $command $args && set \" |") || die;
- } else {
- open (_SH_ENV, "$shell \". $command $args && set \" |") || die;
- }
-
- while (<_SH_ENV>) {
- chop;
- m/^([^=]*)=(.*)/s;
- $ENV{$1} = $2;
- }
- close (_SH_ENV);
-
- foreach $key (keys(%ENV)) {
- $tmp .= "\$$key = \$ENV{'$key'};" if $key =~ /^[A-Za-z]\w*$/;
- }
- eval $tmp;
-}
-1;
Deleted: trunk/contrib/perl/lib/exceptions.pl
===================================================================
--- trunk/contrib/perl/lib/exceptions.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/exceptions.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,64 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-# exceptions.pl
-# tchrist at convex.com
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-
-# Here's a little code I use for exception handling. It's really just
-# glorified eval/die. The way to use use it is when you might otherwise
-# exit, use &throw to raise an exception. The first enclosing &catch
-# handler looks at the exception and decides whether it can catch this kind
-# (catch takes a list of regexps to catch), and if so, it returns the one it
-# caught. If it *can't* catch it, then it will reraise the exception
-# for someone else to possibly see, or to die otherwise.
-#
-# I use oddly named variables in order to make darn sure I don't conflict
-# with my caller. I also hide in my own package, and eval the code in his.
-#
-# The EXCEPTION: prefix is so you can tell whether it's a user-raised
-# exception or a perl-raised one (eval error).
-#
-# --tom
-#
-# examples:
-# if (&catch('/$user_input/', 'regexp', 'syntax error') {
-# warn "oops try again";
-# redo;
-# }
-#
-# if ($error = &catch('&subroutine()')) { # catches anything
-#
-# &throw('bad input') if /^$/;
-
-sub catch {
- package exception;
- local($__code__, @__exceptions__) = @_;
- local($__package__) = caller;
- local($__exception__);
-
- eval "package $__package__; $__code__";
- if ($__exception__ = &'thrown) {
- for (@__exceptions__) {
- return $__exception__ if /$__exception__/;
- }
- &'throw($__exception__);
- }
-}
-
-sub throw {
- local($exception) = @_;
- die "EXCEPTION: $exception\n";
-}
-
-sub thrown {
- $@ =~ /^(EXCEPTION: )+(.+)/ && $2;
-}
-
-1;
Deleted: trunk/contrib/perl/lib/fastcwd.pl
===================================================================
--- trunk/contrib/perl/lib/fastcwd.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/fastcwd.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,47 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-# By John Bazik
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Cwd
-
-# Usage: $cwd = &fastcwd;
-#
-# This is a faster version of getcwd. It's also more dangerous because
-# you might chdir out of a directory that you can't chdir back into.
-
-sub fastcwd {
- local($odev, $oino, $cdev, $cino, $tdev, $tino);
- local(@path, $path);
- local(*DIR);
-
- ($cdev, $cino) = stat('.');
- for (;;) {
- ($odev, $oino) = ($cdev, $cino);
- chdir('..');
- ($cdev, $cino) = stat('.');
- last if $odev == $cdev && $oino == $cino;
- opendir(DIR, '.');
- for (;;) {
- $_ = readdir(DIR);
- next if $_ eq '.';
- next if $_ eq '..';
-
- last unless $_;
- ($tdev, $tino) = lstat($_);
- last unless $tdev != $odev || $tino != $oino;
- }
- closedir(DIR);
- unshift(@path, $_);
- }
- chdir($path = '/' . join('/', @path));
- $path;
-}
-1;
Deleted: trunk/contrib/perl/lib/fields.pm
===================================================================
--- trunk/contrib/perl/lib/fields.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/fields.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,327 +0,0 @@
-package fields;
-
-require 5.005;
-use strict;
-no strict 'refs';
-unless( eval q{require warnings::register; warnings::register->import; 1} ) {
- *warnings::warnif = sub {
- require Carp;
- Carp::carp(@_);
- }
-}
-use vars qw(%attr $VERSION);
-
-$VERSION = '2.14';
-
-# constant.pm is slow
-sub PUBLIC () { 2**0 }
-sub PRIVATE () { 2**1 }
-sub INHERITED () { 2**2 }
-sub PROTECTED () { 2**3 }
-
-
-# The %attr hash holds the attributes of the currently assigned fields
-# per class. The hash is indexed by class names and the hash value is
-# an array reference. The first element in the array is the lowest field
-# number not belonging to a base class. The remaining elements' indices
-# are the field numbers. The values are integer bit masks, or undef
-# in the case of base class private fields (which occupy a slot but are
-# otherwise irrelevant to the class).
-
-sub import {
- my $class = shift;
- return unless @_;
- my $package = caller(0);
- # avoid possible typo warnings
- %{"$package\::FIELDS"} = () unless %{"$package\::FIELDS"};
- my $fields = \%{"$package\::FIELDS"};
- my $fattr = ($attr{$package} ||= [1]);
- my $next = @$fattr;
-
- # Quiet pseudo-hash deprecation warning for uses of fields::new.
- bless \%{"$package\::FIELDS"}, 'pseudohash';
-
- if ($next > $fattr->[0]
- and ($fields->{$_[0]} || 0) >= $fattr->[0])
- {
- # There are already fields not belonging to base classes.
- # Looks like a possible module reload...
- $next = $fattr->[0];
- }
- foreach my $f (@_) {
- my $fno = $fields->{$f};
-
- # Allow the module to be reloaded so long as field positions
- # have not changed.
- if ($fno and $fno != $next) {
- require Carp;
- if ($fno < $fattr->[0]) {
- if ($] < 5.006001) {
- warn("Hides field '$f' in base class") if $^W;
- } else {
- warnings::warnif("Hides field '$f' in base class") ;
- }
- } else {
- Carp::croak("Field name '$f' already in use");
- }
- }
- $fields->{$f} = $next;
- $fattr->[$next] = ($f =~ /^_/) ? PRIVATE : PUBLIC;
- $next += 1;
- }
- if (@$fattr > $next) {
- # Well, we gave them the benefit of the doubt by guessing the
- # module was reloaded, but they appear to be declaring fields
- # in more than one place. We can't be sure (without some extra
- # bookkeeping) that the rest of the fields will be declared or
- # have the same positions, so punt.
- require Carp;
- Carp::croak ("Reloaded module must declare all fields at once");
- }
-}
-
-sub inherit {
- require base;
- goto &base::inherit_fields;
-}
-
-sub _dump # sometimes useful for debugging
-{
- for my $pkg (sort keys %attr) {
- print "\n$pkg";
- if (@{"$pkg\::ISA"}) {
- print " (", join(", ", @{"$pkg\::ISA"}), ")";
- }
- print "\n";
- my $fields = \%{"$pkg\::FIELDS"};
- for my $f (sort {$fields->{$a} <=> $fields->{$b}} keys %$fields) {
- my $no = $fields->{$f};
- print " $no: $f";
- my $fattr = $attr{$pkg}[$no];
- if (defined $fattr) {
- my @a;
- push(@a, "public") if $fattr & PUBLIC;
- push(@a, "private") if $fattr & PRIVATE;
- push(@a, "inherited") if $fattr & INHERITED;
- print "\t(", join(", ", @a), ")";
- }
- print "\n";
- }
- }
-}
-
-if ($] < 5.009) {
- *new = sub {
- my $class = shift;
- $class = ref $class if ref $class;
- return bless [\%{$class . "::FIELDS"}], $class;
- }
-} else {
- *new = sub {
- my $class = shift;
- $class = ref $class if ref $class;
- require Hash::Util;
- my $self = bless {}, $class;
-
- # The lock_keys() prototype won't work since we require Hash::Util :(
- &Hash::Util::lock_keys(\%$self, _accessible_keys($class));
- return $self;
- }
-}
-
-sub _accessible_keys {
- my ($class) = @_;
- return (
- keys %{$class.'::FIELDS'},
- map(_accessible_keys($_), @{$class.'::ISA'}),
- );
-}
-
-sub phash {
- die "Pseudo-hashes have been removed from Perl" if $] >= 5.009;
- my $h;
- my $v;
- if (@_) {
- if (ref $_[0] eq 'ARRAY') {
- my $a = shift;
- @$h{@$a} = 1 .. @$a;
- if (@_) {
- $v = shift;
- unless (! @_ and ref $v eq 'ARRAY') {
- require Carp;
- Carp::croak ("Expected at most two array refs\n");
- }
- }
- }
- else {
- if (@_ % 2) {
- require Carp;
- Carp::croak ("Odd number of elements initializing pseudo-hash\n");
- }
- my $i = 0;
- @$h{grep ++$i % 2, @_} = 1 .. @_ / 2;
- $i = 0;
- $v = [grep $i++ % 2, @_];
- }
- }
- else {
- $h = {};
- $v = [];
- }
- [ $h, @$v ];
-
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-fields - compile-time class fields
-
-=head1 SYNOPSIS
-
- {
- package Foo;
- use fields qw(foo bar _Foo_private);
- sub new {
- my Foo $self = shift;
- unless (ref $self) {
- $self = fields::new($self);
- $self->{_Foo_private} = "this is Foo's secret";
- }
- $self->{foo} = 10;
- $self->{bar} = 20;
- return $self;
- }
- }
-
- my $var = Foo->new;
- $var->{foo} = 42;
-
- # this will generate an error
- $var->{zap} = 42;
-
- # subclassing
- {
- package Bar;
- use base 'Foo';
- use fields qw(baz _Bar_private); # not shared with Foo
- sub new {
- my $class = shift;
- my $self = fields::new($class);
- $self->SUPER::new(); # init base fields
- $self->{baz} = 10; # init own fields
- $self->{_Bar_private} = "this is Bar's secret";
- return $self;
- }
- }
-
-=head1 DESCRIPTION
-
-The C<fields> pragma enables compile-time verified class fields.
-
-NOTE: The current implementation keeps the declared fields in the %FIELDS
-hash of the calling package, but this may change in future versions.
-Do B<not> update the %FIELDS hash directly, because it must be created
-at compile-time for it to be fully useful, as is done by this pragma.
-
-B<Only valid for perl before 5.9.0:>
-
-If a typed lexical variable holding a reference is used to access a
-hash element and a package with the same name as the type has
-declared class fields using this pragma, then the operation is
-turned into an array access at compile time.
-
-
-The related C<base> pragma will combine fields from base classes and any
-fields declared using the C<fields> pragma. This enables field
-inheritance to work properly.
-
-Field names that start with an underscore character are made private to
-the class and are not visible to subclasses. Inherited fields can be
-overridden but will generate a warning if used together with the C<-w>
-switch.
-
-B<Only valid for perls before 5.9.0:>
-
-The effect of all this is that you can have objects with named
-fields which are as compact and as fast arrays to access. This only
-works as long as the objects are accessed through properly typed
-variables. If the objects are not typed, access is only checked at
-run time.
-
-
-The following functions are supported:
-
-=over 4
-
-=item new
-
-B< perl before 5.9.0: > fields::new() creates and blesses a
-pseudo-hash comprised of the fields declared using the C<fields>
-pragma into the specified class.
-
-B< perl 5.9.0 and higher: > fields::new() creates and blesses a
-restricted-hash comprised of the fields declared using the C<fields>
-pragma into the specified class.
-
-This function is usable with or without pseudo-hashes. It is the
-recommended way to construct a fields-based object.
-
-This makes it possible to write a constructor like this:
-
- package Critter::Sounds;
- use fields qw(cat dog bird);
-
- sub new {
- my $self = shift;
- $self = fields::new($self) unless ref $self;
- $self->{cat} = 'meow'; # scalar element
- @$self{'dog','bird'} = ('bark','tweet'); # slice
- return $self;
- }
-
-=item phash
-
-B< before perl 5.9.0: >
-
-fields::phash() can be used to create and initialize a plain (unblessed)
-pseudo-hash. This function should always be used instead of creating
-pseudo-hashes directly.
-
-If the first argument is a reference to an array, the pseudo-hash will
-be created with keys from that array. If a second argument is supplied,
-it must also be a reference to an array whose elements will be used as
-the values. If the second array contains less elements than the first,
-the trailing elements of the pseudo-hash will not be initialized.
-This makes it particularly useful for creating a pseudo-hash from
-subroutine arguments:
-
- sub dogtag {
- my $tag = fields::phash([qw(name rank ser_num)], [@_]);
- }
-
-fields::phash() also accepts a list of key-value pairs that will
-be used to construct the pseudo hash. Examples:
-
- my $tag = fields::phash(name => "Joe",
- rank => "captain",
- ser_num => 42);
-
- my $pseudohash = fields::phash(%args);
-
-B< perl 5.9.0 and higher: >
-
-Pseudo-hashes have been removed from Perl as of 5.10. Consider using
-restricted hashes or fields::new() instead. Using fields::phash()
-will cause an error.
-
-=back
-
-=head1 SEE ALSO
-
-L<base>
-
-=cut
Deleted: trunk/contrib/perl/lib/find.pl
===================================================================
--- trunk/contrib/perl/lib/find.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/find.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,54 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-# This library is deprecated and unmaintained. It is included for
-# compatibility with Perl 4 scripts which may use it, but it will be
-# removed in a future version of Perl. Please use the File::Find module
-# instead.
-
-# Usage:
-# require "find.pl";
-#
-# &find('/foo','/bar');
-#
-# sub wanted { ... }
-# where wanted does whatever you want. $dir contains the
-# current directory name, and $_ the current filename within
-# that directory. $name contains "$dir/$_". You are cd'ed
-# to $dir when the function is called. The function may
-# set $prune to prune the tree.
-#
-# For example,
-#
-# find / -name .nfs\* -mtime +7 -exec rm -f {} \; -o -fstype nfs -prune
-#
-# corresponds to this
-#
-# sub wanted {
-# /^\.nfs.*$/ &&
-# (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
-# int(-M _) > 7 &&
-# unlink($_)
-# ||
-# ($nlink || (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_))) &&
-# $dev < 0 &&
-# ($prune = 1);
-# }
-#
-# Set the variable $dont_use_nlink if you're using AFS, since AFS cheats.
-
-use File::Find ();
-
-*name = *File::Find::name;
-*prune = *File::Find::prune;
-*dir = *File::Find::dir;
-*topdir = *File::Find::topdir;
-*topdev = *File::Find::topdev;
-*topino = *File::Find::topino;
-*topmode = *File::Find::topmode;
-*topnlink = *File::Find::topnlink;
-
-sub find {
- &File::Find::find(\&wanted, @_);
-}
-
-1;
Deleted: trunk/contrib/perl/lib/finddepth.pl
===================================================================
--- trunk/contrib/perl/lib/finddepth.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/finddepth.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,53 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-# This library is deprecated and unmaintained. It is included for
-# compatibility with Perl 4 scripts which may use it, but it will be
-# removed in a future version of Perl. Please use the File::Find module
-# instead.
-
-# Usage:
-# require "finddepth.pl";
-#
-# &finddepth('/foo','/bar');
-#
-# sub wanted { ... }
-# where wanted does whatever you want. $dir contains the
-# current directory name, and $_ the current filename within
-# that directory. $name contains "$dir/$_". You are cd'ed
-# to $dir when the function is called. The function may
-# set $prune to prune the tree.
-#
-# For example,
-#
-# find / -name .nfs\* -mtime +7 -exec rm -f {} \; -o -fstype nfs -prune
-#
-# corresponds to this
-#
-# sub wanted {
-# /^\.nfs.*$/ &&
-# (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
-# int(-M _) > 7 &&
-# unlink($_)
-# ||
-# ($nlink || (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_))) &&
-# $dev < 0 &&
-# ($prune = 1);
-# }
-
-
-use File::Find ();
-
-*name = *File::Find::name;
-*prune = *File::Find::prune;
-*dir = *File::Find::dir;
-*topdir = *File::Find::topdir;
-*topdev = *File::Find::topdev;
-*topino = *File::Find::topino;
-*topmode = *File::Find::topmode;
-*topnlink = *File::Find::topnlink;
-
-sub finddepth {
- &File::Find::finddepth(\&wanted, @_);
-}
-
-1;
Deleted: trunk/contrib/perl/lib/flush.pl
===================================================================
--- trunk/contrib/perl/lib/flush.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/flush.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,36 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: IO::Handle
-
-;# Usage: &flush(FILEHANDLE)
-;# flushes the named filehandle
-
-;# Usage: &printflush(FILEHANDLE, "prompt: ")
-;# prints arguments and flushes filehandle
-
-sub flush {
- local($old) = select(shift);
- $| = 1;
- print "";
- $| = 0;
- select($old);
-}
-
-sub printflush {
- local($old) = select(shift);
- $| = 1;
- print @_;
- $| = 0;
- select($old);
-}
-
-1;
Deleted: trunk/contrib/perl/lib/getcwd.pl
===================================================================
--- trunk/contrib/perl/lib/getcwd.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/getcwd.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,74 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-# By Brandon S. Allbery
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Cwd
-
-#
-# Usage: $cwd = &getcwd;
-
-sub getcwd
-{
- local($dotdots, $cwd, @pst, @cst, $dir, @tst);
-
- unless (@cst = stat('.'))
- {
- warn "stat(.): $!";
- return '';
- }
- $cwd = '';
- do
- {
- $dotdots .= '/' if $dotdots;
- $dotdots .= '..';
- @pst = @cst;
- unless (opendir(getcwd'PARENT, $dotdots)) #'))
- {
- warn "opendir($dotdots): $!";
- return '';
- }
- unless (@cst = stat($dotdots))
- {
- warn "stat($dotdots): $!";
- closedir(getcwd'PARENT); #');
- return '';
- }
- if ($pst[0] == $cst[0] && $pst[1] == $cst[1])
- {
- $dir = '';
- }
- else
- {
- do
- {
- unless (defined ($dir = readdir(getcwd'PARENT))) #'))
- {
- warn "readdir($dotdots): $!";
- closedir(getcwd'PARENT); #');
- return '';
- }
- unless (@tst = lstat("$dotdots/$dir"))
- {
- # warn "lstat($dotdots/$dir): $!";
- # closedir(getcwd'PARENT); #');
- # return '';
- }
- }
- while ($dir eq '.' || $dir eq '..' || $tst[0] != $pst[0] ||
- $tst[1] != $pst[1]);
- }
- $cwd = "$dir/$cwd";
- closedir(getcwd'PARENT); #');
- } while ($dir ne '');
- chop($cwd);
- $cwd;
-}
-
-1;
Deleted: trunk/contrib/perl/lib/getopt.pl
===================================================================
--- trunk/contrib/perl/lib/getopt.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/getopt.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,52 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-;# $RCSfile: getopt.pl,v $$Revision: 1.1.1.2 $$Date: 2011-05-18 13:33:26 $
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternatives: Getopt::Long or Getopt::Std
-
-;# Process single-character switches with switch clustering. Pass one argument
-;# which is a string containing all switches that take an argument. For each
-;# switch found, sets $opt_x (where x is the switch name) to the value of the
-;# argument, or 1 if no argument. Switches which take an argument don't care
-;# whether there is a space between the switch and the argument.
-
-;# Usage:
-;# do Getopt('oDI'); # -o, -D & -I take arg. Sets opt_* as a side effect.
-
-sub Getopt {
- local($argumentative) = @_;
- local($_,$first,$rest);
-
- while (@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) {
- ($first,$rest) = ($1,$2);
- if (index($argumentative,$first) >= 0) {
- if ($rest ne '') {
- shift(@ARGV);
- }
- else {
- shift(@ARGV);
- $rest = shift(@ARGV);
- }
- ${"opt_$first"} = $rest;
- }
- else {
- ${"opt_$first"} = 1;
- if ($rest ne '') {
- $ARGV[0] = "-$rest";
- }
- else {
- shift(@ARGV);
- }
- }
- }
-}
-
-1;
Deleted: trunk/contrib/perl/lib/getopts.pl
===================================================================
--- trunk/contrib/perl/lib/getopts.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/getopts.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,67 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-;# getopts.pl - a better getopt.pl
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternatives: Getopt::Long or Getopt::Std
-
-;# Usage:
-;# do Getopts('a:bc'); # -a takes arg. -b & -c not. Sets opt_* as a
-;# # side effect.
-
-sub Getopts {
- local($argumentative) = @_;
- local(@args,$_,$first,$rest);
- local($errs) = 0;
-
- @args = split( / */, $argumentative );
- while(@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) {
- ($first,$rest) = ($1,$2);
- $pos = index($argumentative,$first);
- if($pos >= 0) {
- if($args[$pos+1] eq ':') {
- shift(@ARGV);
- if($rest eq '') {
- ++$errs unless(@ARGV);
- $rest = shift(@ARGV);
- }
- eval "
- push(\@opt_$first, \$rest);
- if (!defined \$opt_$first or \$opt_$first eq '') {
- \$opt_$first = \$rest;
- }
- else {
- \$opt_$first .= ' ' . \$rest;
- }
- ";
- }
- else {
- eval "\$opt_$first = 1";
- if($rest eq '') {
- shift(@ARGV);
- }
- else {
- $ARGV[0] = "-$rest";
- }
- }
- }
- else {
- print STDERR "Unknown option: $first\n";
- ++$errs;
- if($rest ne '') {
- $ARGV[0] = "-$rest";
- }
- else {
- shift(@ARGV);
- }
- }
- }
- $errs == 0;
-}
-
-1;
Deleted: trunk/contrib/perl/lib/hostname.pl
===================================================================
--- trunk/contrib/perl/lib/hostname.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/hostname.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,35 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-# From: asherman at fmrco.com (Aaron Sherman)
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Sys::Hostname
-
-sub hostname
-{
- local(*P, at tmp,$hostname,$_);
- if (open(P,"hostname 2>&1 |") && (@tmp = <P>) && close(P))
- {
- chop($hostname = $tmp[$#tmp]);
- }
- elsif (open(P,"uname -n 2>&1 |") && (@tmp = <P>) && close(P))
- {
- chop($hostname = $tmp[$#tmp]);
- }
- else
- {
- die "$0: Cannot get hostname from 'hostname' or 'uname -n'\n";
- }
- @tmp = ();
- close P; # Just in case we failed in an odd spot....
- $hostname;
-}
-
-1;
Deleted: trunk/contrib/perl/lib/if.pm
===================================================================
--- trunk/contrib/perl/lib/if.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/if.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,56 +0,0 @@
-package if;
-
-$VERSION = '0.05';
-
-sub work {
- my $method = shift() ? 'import' : 'unimport';
- die "Too few arguments to `use if' (some code returning an empty list in list context?)"
- unless @_ >= 2;
- return unless shift; # CONDITION
-
- my $p = $_[0]; # PACKAGE
- (my $file = "$p.pm") =~ s!::!/!g;
- require $file; # Works even if $_[0] is a keyword (like open)
- my $m = $p->can($method);
- goto &$m if $m;
-}
-
-sub import { shift; unshift @_, 1; goto &work }
-sub unimport { shift; unshift @_, 0; goto &work }
-
-1;
-__END__
-
-=head1 NAME
-
-if - C<use> a Perl module if a condition holds
-
-=head1 SYNOPSIS
-
- use if CONDITION, MODULE => ARGUMENTS;
-
-=head1 DESCRIPTION
-
-The construct
-
- use if CONDITION, MODULE => ARGUMENTS;
-
-has no effect unless C<CONDITION> is true. In this case the effect is
-the same as of
-
- use MODULE ARGUMENTS;
-
-Above C<< => >> provides necessary quoting of C<MODULE>. If not used (e.g.,
-no ARGUMENTS to give), you'd better quote C<MODULE> yourselves.
-
-=head1 BUGS
-
-The current implementation does not allow specification of the
-required version of the module.
-
-=head1 AUTHOR
-
-Ilya Zakharevich L<mailto:perl-module-if at ilyaz.org>.
-
-=cut
-
Deleted: trunk/contrib/perl/lib/if.t
===================================================================
--- trunk/contrib/perl/lib/if.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/if.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,41 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' and @INC = '../lib' if $ENV{PERL_CORE};
-}
-
-my $t = 1;
-print "1..5\n";
-sub ok {
- print "not " unless shift;
- print "ok $t # ", shift, "\n";
- $t++;
-}
-
-my $v_plus = $] + 1;
-my $v_minus = $] - 1;
-
-unless (eval 'use open ":std"; 1') {
- # pretend that open.pm is present
- $INC{'open.pm'} = 'open.pm';
- eval 'sub open::foo{}'; # Just in case...
-}
-
-
-ok( eval "use if ($v_minus > \$]), strict => 'subs'; \${'f'} = 12" eq 12,
- '"use if" with a false condition, fake pragma');
-
-ok( eval "use if ($v_minus > \$]), strict => 'refs'; \${'f'} = 12" eq 12,
- '"use if" with a false condition and a pragma');
-
-ok( eval "use if ($v_plus > \$]), strict => 'subs'; \${'f'} = 12" eq 12,
- '"use if" with a true condition, fake pragma');
-
-ok( (not defined eval "use if ($v_plus > \$]), strict => 'refs'; \${'f'} = 12"
- and $@ =~ /while "strict refs" in use/),
- '"use if" with a true condition and a pragma');
-
-# Old version had problems with the module name `open', which is a keyword too
-# Use 'open' =>, since pre-5.6.0 could interpret differently
-ok( (eval "use if ($v_plus > \$]), 'open' => IN => ':crlf'; 12" || 0) eq 12,
- '"use if" with open');
Deleted: trunk/contrib/perl/lib/importenv.pl
===================================================================
--- trunk/contrib/perl/lib/importenv.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/importenv.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,21 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-
-;# This file, when interpreted, pulls the environment into normal variables.
-;# Usage:
-;# require 'importenv.pl';
-;# or
-;# #include <importenv.pl>
-
-local($tmp,$key) = '';
-
-foreach $key (keys(%ENV)) {
- $tmp .= "\$$key = \$ENV{'$key'};" if $key =~ /^[A-Za-z]\w*$/;
-}
-eval $tmp;
-
-1;
Deleted: trunk/contrib/perl/lib/lib.t
===================================================================
--- trunk/contrib/perl/lib/lib.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/lib.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,91 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir 't';
- unshift @INC, '..';
- unshift @INC, '../lib';
- @OrigINC = @INC;
-}
-
-use Test::More tests => 13;
-use Config;
-use File::Spec;
-use File::Path;
-
-#set up files and directories
-my @lib_dir;
-my $Lib_Dir;
-my $Arch_Dir;
-my $Auto_Dir;
-my $Module;
-BEGIN {
- # lib.pm is documented to only work with Unix filepaths.
- @lib_dir = qw(stuff moo);
- $Lib_Dir = join "/", @lib_dir;
- $Arch_Dir = join "/", @lib_dir, $Config{archname};
-
- # create the auto/ directory and a module
- $Auto_Dir = File::Spec->catdir(@lib_dir, $Config{archname},'auto');
- $Module = File::Spec->catfile(@lib_dir, 'Yup.pm');
-
- mkpath [$Auto_Dir];
-
- open(MOD, ">$Module") || DIE $!;
- print MOD <<'MODULE';
-package Yup;
-$Plan = 9;
-return '42';
-MODULE
-
- close MOD;
-}
-
-END {
- # cleanup the auto/ directory we created.
- rmtree([$lib_dir[0]]);
-}
-
-
-use lib $Lib_Dir;
-use lib $Lib_Dir;
-
-BEGIN { use_ok('Yup') }
-
-BEGIN {
- if ($^O eq 'MacOS') {
- for ($Lib_Dir, $Arch_Dir) {
- tr|/|:|;
- $_ .= ":" unless /:$/;
- $_ = ":$_" unless /^:/; # we know this path is relative
- }
- }
- is( $INC[1], $Lib_Dir, 'lib adding at end of @INC' );
- print "# \@INC == @INC\n";
- is( $INC[0], $Arch_Dir, ' auto/ dir in front of that' );
- is( grep(/^\Q$Lib_Dir\E$/, @INC), 1, ' no duplicates' );
-
- # Yes, %INC uses Unixy filepaths.
- # Not on Mac OS, it doesn't ... it never has, at least.
- my $path = join("/",$Lib_Dir, 'Yup.pm');
- if ($^O eq 'MacOS') {
- $path = $Lib_Dir . 'Yup.pm';
- }
- is( $INC{'Yup.pm'}, $path, '%INC set properly' );
-
- is( eval { do 'Yup.pm' }, 42, 'do() works' );
- ok( eval { require Yup; }, ' require()' );
- ok( eval "use Yup; 1;", ' use()' );
- is( $@, '' );
-
- is_deeply(\@OrigINC, \@lib::ORIG_INC, '@lib::ORIG_INC' );
-}
-
-no lib $Lib_Dir;
-
-unlike( do { eval 'use lib $Config{installsitelib};'; $@ || '' },
- qr/::Config is read-only/, 'lib handles readonly stuff' );
-
-BEGIN {
- is( grep(/stuff/, @INC), 0, 'no lib' );
- ok( !do 'Yup.pm', ' do() effected' );
-}
Deleted: trunk/contrib/perl/lib/lib_pm.PL
===================================================================
--- trunk/contrib/perl/lib/lib_pm.PL 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/lib_pm.PL 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,319 +0,0 @@
-use Config;
-use File::Basename qw(&basename &dirname);
-use File::Spec;
-use Cwd;
-
-my $origdir = cwd;
-chdir dirname($0);
-my $file = basename($0, '.PL');
-$file =~ s/_(pm)$/.$1/i;
-
-my $useConfig;
-my $Config_archname;
-my $Config_version;
-my $Config_inc_version_list;
-
-# Expand the variables only if explicitly requested
-# or if a previously installed lib.pm does this, too
-# because otherwise relocating Perl becomes much harder.
-
-my $expand_config_vars = 0;
-if ($ENV{PERL_BUILD_EXPAND_CONFIG_VARS}) {
- $expand_config_vars = 1;
-}
-elsif (exists $ENV{PERL_BUILD_EXPAND_CONFIG_VARS}) {
- $expand_config_vars = 0;
-}
-else {
- eval <<'HERE';
- require lib;
- my $lib_file = $INC{"lib.pm"};
- open my $fh, '<', $lib_file
- or die "Could not open file '$lib_file' for reading: $!";
- my $ConfigRegex = qr/(?:use|require)\s+Config(?:\s+|;)/;
- my $found_config = 0;
- while (defined($_ = <$fh>)) {
- # crude heuristics to check that we were using Config
- if (/^\s*$ConfigRegex/ || /^\s*eval.*$ConfigRegex/) {
- $found_config = 1;
- last;
- }
- }
- $expand_config_vars = $found_config ? 0 : 1;
-HERE
- $expand_config_vars = 0 if $@;
-}
-
-if ($expand_config_vars) {
- $useConfig = '';
- $Config_archname = qq('$Config{archname}');
- $Config_version = qq('$Config{version}');
- my @Config_inc_version_list =
- reverse split / /, $Config{inc_version_list};
- $Config_inc_version_list =
- @Config_inc_version_list ?
- qq(qw(@Config_inc_version_list)) : q(());
-} else {
- $useConfig = 'use Config;';
- $Config_archname = q($Config{archname});
- $Config_version = q($Config{version});
- $Config_inc_version_list =
- q(reverse split / /, $Config{inc_version_list});
-}
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-package lib;
-
-# THIS FILE IS AUTOMATICALLY GENERATED FROM lib_pm.PL.
-# ANY CHANGES TO THIS FILE WILL BE OVERWRITTEN BY THE NEXT PERL BUILD.
-
-$useConfig
-
-use strict;
-
-my \$archname = $Config_archname;
-my \$version = $Config_version;
-my \@inc_version_list = $Config_inc_version_list;
-
-!GROK!THIS!
-print OUT <<'!NO!SUBS!';
-
-our @ORIG_INC = @INC; # take a handy copy of 'original' value
-our $VERSION = '0.62';
-my $Is_MacOS = $^O eq 'MacOS';
-my $Mac_FS;
-if ($Is_MacOS) {
- require File::Spec;
- $Mac_FS = eval { require Mac::FileSpec::Unixish };
-}
-
-sub import {
- shift;
-
- my %names;
- foreach (reverse @_) {
- my $path = $_; # we'll be modifying it, so break the alias
- if ($path eq '') {
- require Carp;
- Carp::carp("Empty compile time value given to use lib");
- }
-
- $path = _nativize($path);
-
- if ($path !~ /\.par$/i && -e $path && ! -d _) {
- require Carp;
- Carp::carp("Parameter to use lib must be directory, not file");
- }
- unshift(@INC, $path);
- # Add any previous version directories we found at configure time
- foreach my $incver (@inc_version_list)
- {
- my $dir = $Is_MacOS
- ? File::Spec->catdir( $path, $incver )
- : "$path/$incver";
- unshift(@INC, $dir) if -d $dir;
- }
- # Put a corresponding archlib directory in front of $path if it
- # looks like $path has an archlib directory below it.
- my($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir)
- = _get_dirs($path);
- unshift(@INC, $arch_dir) if -d $arch_auto_dir;
- unshift(@INC, $version_dir) if -d $version_dir;
- unshift(@INC, $version_arch_dir) if -d $version_arch_dir;
- }
-
- # remove trailing duplicates
- @INC = grep { ++$names{$_} == 1 } @INC;
- return;
-}
-
-
-sub unimport {
- shift;
-
- my %names;
- foreach (@_) {
- my $path = _nativize($_);
-
- my($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir)
- = _get_dirs($path);
- ++$names{$path};
- ++$names{$arch_dir} if -d $arch_auto_dir;
- ++$names{$version_dir} if -d $version_dir;
- ++$names{$version_arch_dir} if -d $version_arch_dir;
- }
-
- # Remove ALL instances of each named directory.
- @INC = grep { !exists $names{$_} } @INC;
- return;
-}
-
-sub _get_dirs {
- my($dir) = @_;
- my($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir);
-
- # we could use this for all platforms in the future, but leave it
- # Mac-only for now, until there is more time for testing it.
- if ($Is_MacOS) {
- $arch_auto_dir = File::Spec->catdir( $dir, $archname, 'auto' );
- $arch_dir = File::Spec->catdir( $dir, $archname, );
- $version_dir = File::Spec->catdir( $dir, $version );
- $version_arch_dir = File::Spec->catdir( $dir, $version, $archname );
- } else {
- $arch_auto_dir = "$dir/$archname/auto";
- $arch_dir = "$dir/$archname";
- $version_dir = "$dir/$version";
- $version_arch_dir = "$dir/$version/$archname";
- }
- return($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir);
-}
-
-sub _nativize {
- my($dir) = @_;
-
- if ($Is_MacOS && $Mac_FS && ! -d $dir) {
- $dir = Mac::FileSpec::Unixish::nativize($dir);
- $dir .= ":" unless $dir =~ /:$/;
- }
-
- return $dir;
-}
-
-1;
-__END__
-
-=head1 NAME
-
-lib - manipulate @INC at compile time
-
-=head1 SYNOPSIS
-
- use lib LIST;
-
- no lib LIST;
-
-=head1 DESCRIPTION
-
-This is a small simple module which simplifies the manipulation of @INC
-at compile time.
-
-It is typically used to add extra directories to perl's search path so
-that later C<use> or C<require> statements will find modules which are
-not located on perl's default search path.
-
-=head2 Adding directories to @INC
-
-The parameters to C<use lib> are added to the start of the perl search
-path. Saying
-
- use lib LIST;
-
-is I<almost> the same as saying
-
- BEGIN { unshift(@INC, LIST) }
-
-For each directory in LIST (called $dir here) the lib module also
-checks to see if a directory called $dir/$archname/auto exists.
-If so the $dir/$archname directory is assumed to be a corresponding
-architecture specific directory and is added to @INC in front of $dir.
-lib.pm also checks if directories called $dir/$version and $dir/$version/$archname
-exist and adds these directories to @INC.
-
-The current value of C<$archname> can be found with this command:
-
- perl -V:archname
-
-The corresponding command to get the current value of C<$version> is:
-
- perl -V:version
-
-To avoid memory leaks, all trailing duplicate entries in @INC are
-removed.
-
-=head2 Deleting directories from @INC
-
-You should normally only add directories to @INC. If you need to
-delete directories from @INC take care to only delete those which you
-added yourself or which you are certain are not needed by other modules
-in your script. Other modules may have added directories which they
-need for correct operation.
-
-The C<no lib> statement deletes all instances of each named directory
-from @INC.
-
-For each directory in LIST (called $dir here) the lib module also
-checks to see if a directory called $dir/$archname/auto exists.
-If so the $dir/$archname directory is assumed to be a corresponding
-architecture specific directory and is also deleted from @INC.
-
-=head2 Restoring original @INC
-
-When the lib module is first loaded it records the current value of @INC
-in an array C<@lib::ORIG_INC>. To restore @INC to that value you
-can say
-
- @INC = @lib::ORIG_INC;
-
-=head1 CAVEATS
-
-In order to keep lib.pm small and simple, it only works with Unix
-filepaths. This doesn't mean it only works on Unix, but non-Unix
-users must first translate their file paths to Unix conventions.
-
- # VMS users wanting to put [.stuff.moo] into
- # their @INC would write
- use lib 'stuff/moo';
-
-=head1 NOTES
-
-In the future, this module will likely use File::Spec for determining
-paths, as it does now for Mac OS (where Unix-style or Mac-style paths
-work, and Unix-style paths are converted properly to Mac-style paths
-before being added to @INC).
-
-If you try to add a file to @INC as follows:
-
- use lib 'this_is_a_file.txt';
-
-C<lib> will warn about this. The sole exceptions are files with the
-C<.par> extension which are intended to be used as libraries.
-
-=head1 SEE ALSO
-
-FindBin - optional module which deals with paths relative to the source file.
-
-PAR - optional module which can treat C<.par> files as Perl libraries.
-
-=head1 AUTHOR
-
-Tim Bunce, 2nd June 1995.
-
-C<lib> is maintained by the perl5-porters. Please direct
-any questions to the canonical mailing list. Anything that
-is applicable to the CPAN release can be sent to its maintainer,
-though.
-
-Maintainer: The Perl5-Porters <perl5-porters at perl.org>
-
-Maintainer of the CPAN release: Steffen Mueller <smueller at cpan.org>
-
-=head1 COPYRIGHT AND LICENSE
-
-This package has been part of the perl core since perl 5.001.
-It has been released separately to CPAN so older installations
-can benefit from bug fixes.
-
-This package has the same copyright and license as the perl core.
-
-=cut
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chdir $origdir;
Deleted: trunk/contrib/perl/lib/look.pl
===================================================================
--- trunk/contrib/perl/lib/look.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/look.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,54 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-;# Usage: &look(*FILEHANDLE,$key,$dict,$fold)
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-
-;# Sets file position in FILEHANDLE to be first line greater than or equal
-;# (stringwise) to $key. Pass flags for dictionary order and case folding.
-
-sub look {
- local(*FH,$key,$dict,$fold) = @_;
- local($max,$min,$mid,$_);
- local($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat(FH);
- $blksize = 8192 unless $blksize;
- $key =~ s/[^\w\s]//g if $dict;
- $key = lc $key if $fold;
- $max = int($size / $blksize);
- while ($max - $min > 1) {
- $mid = int(($max + $min) / 2);
- seek(FH,$mid * $blksize,0);
- $_ = <FH> if $mid; # probably a partial line
- $_ = <FH>;
- chop;
- s/[^\w\s]//g if $dict;
- $_ = lc $_ if $fold;
- if ($_ lt $key) {
- $min = $mid;
- }
- else {
- $max = $mid;
- }
- }
- $min *= $blksize;
- seek(FH,$min,0);
- <FH> if $min;
- while (<FH>) {
- chop;
- s/[^\w\s]//g if $dict;
- $_ = lc $_ if $fold;
- last if $_ ge $key;
- $min = tell(FH);
- }
- seek(FH,$min,0);
- $min;
-}
-
-1;
Deleted: trunk/contrib/perl/lib/mro.pm
===================================================================
--- trunk/contrib/perl/lib/mro.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/mro.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,378 +0,0 @@
-# mro.pm
-#
-# Copyright (c) 2007 Brandon L Black
-#
-# You may distribute under the terms of either the GNU General Public
-# License or the Artistic License, as specified in the README file.
-#
-package mro;
-use strict;
-use warnings;
-
-# mro.pm versions < 1.00 reserved for MRO::Compat
-# for partial back-compat to 5.[68].x
-our $VERSION = '1.00';
-
-sub import {
- mro::set_mro(scalar(caller), $_[1]) if $_[1];
-}
-
-package # hide me from PAUSE
- next;
-
-sub can { mro::_nextcan($_[0], 0) }
-
-sub method {
- my $method = mro::_nextcan($_[0], 1);
- goto &$method;
-}
-
-package # hide me from PAUSE
- maybe::next;
-
-sub method {
- my $method = mro::_nextcan($_[0], 0);
- goto &$method if defined $method;
- return;
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-mro - Method Resolution Order
-
-=head1 SYNOPSIS
-
- use mro; # enables next::method and friends globally
-
- use mro 'dfs'; # enable DFS MRO for this class (Perl default)
- use mro 'c3'; # enable C3 MRO for this class
-
-=head1 DESCRIPTION
-
-The "mro" namespace provides several utilities for dealing
-with method resolution order and method caching in general.
-
-These interfaces are only available in Perl 5.9.5 and higher.
-See L<MRO::Compat> on CPAN for a mostly forwards compatible
-implementation for older Perls.
-
-=head1 OVERVIEW
-
-It's possible to change the MRO of a given class either by using C<use
-mro> as shown in the synopsis, or by using the L</mro::set_mro> function
-below. The functions in the mro namespace do not require loading the
-C<mro> module, as they are actually provided by the core perl interpreter.
-
-The special methods C<next::method>, C<next::can>, and
-C<maybe::next::method> are not available until this C<mro> module
-has been loaded via C<use> or C<require>.
-
-=head1 The C3 MRO
-
-In addition to the traditional Perl default MRO (depth first
-search, called C<DFS> here), Perl now offers the C3 MRO as
-well. Perl's support for C3 is based on the work done in
-Stevan Little's module L<Class::C3>, and most of the C3-related
-documentation here is ripped directly from there.
-
-=head2 What is C3?
-
-C3 is the name of an algorithm which aims to provide a sane method
-resolution order under multiple inheritance. It was first introduced in
-the language Dylan (see links in the L</"SEE ALSO"> section), and then
-later adopted as the preferred MRO (Method Resolution Order) for the
-new-style classes in Python 2.3. Most recently it has been adopted as the
-"canonical" MRO for Perl 6 classes, and the default MRO for Parrot objects
-as well.
-
-=head2 How does C3 work
-
-C3 works by always preserving local precendence ordering. This essentially
-means that no class will appear before any of its subclasses. Take, for
-instance, the classic diamond inheritance pattern:
-
- <A>
- / \
- <B> <C>
- \ /
- <D>
-
-The standard Perl 5 MRO would be (D, B, A, C). The result being that B<A>
-appears before B<C>, even though B<C> is the subclass of B<A>. The C3 MRO
-algorithm however, produces the following order: (D, B, C, A), which does
-not have this issue.
-
-This example is fairly trivial; for more complex cases and a deeper
-explanation, see the links in the L</"SEE ALSO"> section.
-
-=head1 Functions
-
-=head2 mro::get_linear_isa($classname[, $type])
-
-Returns an arrayref which is the linearized MRO of the given class.
-Uses whichever MRO is currently in effect for that class by default,
-or the given MRO (either C<c3> or C<dfs> if specified as C<$type>).
-
-The linearized MRO of a class is an ordered array of all of the
-classes one would search when resolving a method on that class,
-starting with the class itself.
-
-If the requested class doesn't yet exist, this function will still
-succeed, and return C<[ $classname ]>
-
-Note that C<UNIVERSAL> (and any members of C<UNIVERSAL>'s MRO) are not
-part of the MRO of a class, even though all classes implicitly inherit
-methods from C<UNIVERSAL> and its parents.
-
-=head2 mro::set_mro($classname, $type)
-
-Sets the MRO of the given class to the C<$type> argument (either
-C<c3> or C<dfs>).
-
-=head2 mro::get_mro($classname)
-
-Returns the MRO of the given class (either C<c3> or C<dfs>).
-
-=head2 mro::get_isarev($classname)
-
-Gets the C<mro_isarev> for this class, returned as an
-arrayref of class names. These are every class that "isa"
-the given class name, even if the isa relationship is
-indirect. This is used internally by the MRO code to
-keep track of method/MRO cache invalidations.
-
-Currently, this list only grows, it never shrinks. This
-was a performance consideration (properly tracking and
-deleting isarev entries when someone removes an entry
-from an C<@ISA> is costly, and it doesn't happen often
-anyways). The fact that a class which no longer truly
-"isa" this class at runtime remains on the list should be
-considered a quirky implementation detail which is subject
-to future change. It shouldn't be an issue as long as
-you're looking at this list for the same reasons the
-core code does: as a performance optimization
-over having to search every class in existence.
-
-As with C<mro::get_mro> above, C<UNIVERSAL> is special.
-C<UNIVERSAL> (and parents') isarev lists do not include
-every class in existence, even though all classes are
-effectively descendants for method inheritance purposes.
-
-=head2 mro::is_universal($classname)
-
-Returns a boolean status indicating whether or not
-the given classname is either C<UNIVERSAL> itself,
-or one of C<UNIVERSAL>'s parents by C<@ISA> inheritance.
-
-Any class for which this function returns true is
-"universal" in the sense that all classes potentially
-inherit methods from it.
-
-For similar reasons to C<isarev> above, this flag is
-permanent. Once it is set, it does not go away, even
-if the class in question really isn't universal anymore.
-
-=head2 mro::invalidate_all_method_caches()
-
-Increments C<PL_sub_generation>, which invalidates method
-caching in all packages.
-
-=head2 mro::method_changed_in($classname)
-
-Invalidates the method cache of any classes dependent on the
-given class. This is not normally necessary. The only
-known case where pure perl code can confuse the method
-cache is when you manually install a new constant
-subroutine by using a readonly scalar value, like the
-internals of L<constant> do. If you find another case,
-please report it so we can either fix it or document
-the exception here.
-
-=head2 mro::get_pkg_gen($classname)
-
-Returns an integer which is incremented every time a
-real local method in the package C<$classname> changes,
-or the local C<@ISA> of C<$classname> is modified.
-
-This is intended for authors of modules which do lots
-of class introspection, as it allows them to very quickly
-check if anything important about the local properties
-of a given class have changed since the last time they
-looked. It does not increment on method/C<@ISA>
-changes in superclasses.
-
-It's still up to you to seek out the actual changes,
-and there might not actually be any. Perhaps all
-of the changes since you last checked cancelled each
-other out and left the package in the state it was in
-before.
-
-This integer normally starts off at a value of C<1>
-when a package stash is instantiated. Calling it
-on packages whose stashes do not exist at all will
-return C<0>. If a package stash is completely
-deleted (not a normal occurence, but it can happen
-if someone does something like C<undef %PkgName::>),
-the number will be reset to either C<0> or C<1>,
-depending on how completely package was wiped out.
-
-=head2 next::method
-
-This is somewhat like C<SUPER>, but it uses the C3 method
-resolution order to get better consistency in multiple
-inheritance situations. Note that while inheritance in
-general follows whichever MRO is in effect for the
-given class, C<next::method> only uses the C3 MRO.
-
-One generally uses it like so:
-
- sub some_method {
- my $self = shift;
- my $superclass_answer = $self->next::method(@_);
- return $superclass_answer + 1;
- }
-
-Note that you don't (re-)specify the method name.
-It forces you to always use the same method name
-as the method you started in.
-
-It can be called on an object or a class, of course.
-
-The way it resolves which actual method to call is:
-
-=over 4
-
-=item 1
-
-First, it determines the linearized C3 MRO of
-the object or class it is being called on.
-
-=item 2
-
-Then, it determines the class and method name
-of the context it was invoked from.
-
-=item 3
-
-Finally, it searches down the C3 MRO list until
-it reaches the contextually enclosing class, then
-searches further down the MRO list for the next
-method with the same name as the contextually
-enclosing method.
-
-=back
-
-Failure to find a next method will result in an
-exception being thrown (see below for alternatives).
-
-This is substantially different than the behavior
-of C<SUPER> under complex multiple inheritance.
-(This becomes obvious when one realizes that the
-common superclasses in the C3 linearizations of
-a given class and one of its parents will not
-always be ordered the same for both.)
-
-B<Caveat>: Calling C<next::method> from methods defined outside the class:
-
-There is an edge case when using C<next::method> from within a subroutine
-which was created in a different module than the one it is called from. It
-sounds complicated, but it really isn't. Here is an example which will not
-work correctly:
-
- *Foo::foo = sub { (shift)->next::method(@_) };
-
-The problem exists because the anonymous subroutine being assigned to the
-C<*Foo::foo> glob will show up in the call stack as being called
-C<__ANON__> and not C<foo> as you might expect. Since C<next::method> uses
-C<caller> to find the name of the method it was called in, it will fail in
-this case.
-
-But fear not, there's a simple solution. The module C<Sub::Name> will
-reach into the perl internals and assign a name to an anonymous subroutine
-for you. Simply do this:
-
- use Sub::Name 'subname';
- *Foo::foo = subname 'Foo::foo' => sub { (shift)->next::method(@_) };
-
-and things will Just Work.
-
-=head2 next::can
-
-This is similar to C<next::method>, but just returns either a code
-reference or C<undef> to indicate that no further methods of this name
-exist.
-
-=head2 maybe::next::method
-
-In simple cases, it is equivalent to:
-
- $self->next::method(@_) if $self->next_can;
-
-But there are some cases where only this solution
-works (like C<goto &maybe::next::method>);
-
-=head1 SEE ALSO
-
-=head2 The original Dylan paper
-
-=over 4
-
-=item L<http://www.webcom.com/haahr/dylan/linearization-oopsla96.html>
-
-=back
-
-=head2 The prototype Perl 6 Object Model uses C3
-
-=over 4
-
-=item L<http://svn.openfoundry.org/pugs/perl5/Perl6-MetaModel/>
-
-=back
-
-=head2 Parrot now uses C3
-
-=over 4
-
-=item L<http://aspn.activestate.com/ASPN/Mail/Message/perl6-internals/2746631>
-
-=item L<http://use.perl.org/~autrijus/journal/25768>
-
-=back
-
-=head2 Python 2.3 MRO related links
-
-=over 4
-
-=item L<http://www.python.org/2.3/mro.html>
-
-=item L<http://www.python.org/2.2.2/descrintro.html#mro>
-
-=back
-
-=head2 C3 for TinyCLOS
-
-=over 4
-
-=item L<http://www.call-with-current-continuation.org/eggs/c3.html>
-
-=back
-
-=head2 Class::C3
-
-=over 4
-
-=item L<Class::C3>
-
-=back
-
-=head1 AUTHOR
-
-Brandon L. Black, E<lt>blblack at gmail.comE<gt>
-
-Based on Stevan Little's L<Class::C3>
-
-=cut
Deleted: trunk/contrib/perl/lib/newgetopt.pl
===================================================================
--- trunk/contrib/perl/lib/newgetopt.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/newgetopt.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,77 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# It is now just a wrapper around the Getopt::Long module.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Getopt::Long
-
-{ package newgetopt;
-
- # Values for $order. See GNU getopt.c for details.
- $REQUIRE_ORDER = 0;
- $PERMUTE = 1;
- $RETURN_IN_ORDER = 2;
-
- # Handle POSIX compliance.
- if ( defined $ENV{"POSIXLY_CORRECT"} ) {
- $autoabbrev = 0; # no automatic abbrev of options (???)
- $getopt_compat = 0; # disallow '+' to start options
- $option_start = "(--|-)";
- $order = $REQUIRE_ORDER;
- $bundling = 0;
- $passthrough = 0;
- }
- else {
- $autoabbrev = 1; # automatic abbrev of options
- $getopt_compat = 1; # allow '+' to start options
- $option_start = "(--|-|\\+)";
- $order = $PERMUTE;
- $bundling = 0;
- $passthrough = 0;
- }
-
- # Other configurable settings.
- $debug = 0; # for debugging
- $ignorecase = 1; # ignore case when matching options
- $argv_end = "--"; # don't change this!
-}
-
-use Getopt::Long;
-
-################ Subroutines ################
-
-sub NGetOpt {
-
- $Getopt::Long::debug = $newgetopt::debug
- if defined $newgetopt::debug;
- $Getopt::Long::autoabbrev = $newgetopt::autoabbrev
- if defined $newgetopt::autoabbrev;
- $Getopt::Long::getopt_compat = $newgetopt::getopt_compat
- if defined $newgetopt::getopt_compat;
- $Getopt::Long::option_start = $newgetopt::option_start
- if defined $newgetopt::option_start;
- $Getopt::Long::order = $newgetopt::order
- if defined $newgetopt::order;
- $Getopt::Long::bundling = $newgetopt::bundling
- if defined $newgetopt::bundling;
- $Getopt::Long::ignorecase = $newgetopt::ignorecase
- if defined $newgetopt::ignorecase;
- $Getopt::Long::ignorecase = $newgetopt::ignorecase
- if defined $newgetopt::ignorecase;
- $Getopt::Long::passthrough = $newgetopt::passthrough
- if defined $newgetopt::passthrough;
-
- &GetOptions;
-}
-
-################ Package return ################
-
-1;
-
-################ End of newgetopt.pl ################
Deleted: trunk/contrib/perl/lib/open2.pl
===================================================================
--- trunk/contrib/perl/lib/open2.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/open2.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,17 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# This is a compatibility interface to IPC::Open2. New programs should
-# do
-#
-# use IPC::Open2;
-#
-# instead of
-#
-# require 'open2.pl';
-
-package main;
-use IPC::Open2 'open2';
-1
Deleted: trunk/contrib/perl/lib/open3.pl
===================================================================
--- trunk/contrib/perl/lib/open3.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/open3.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,17 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# This is a compatibility interface to IPC::Open3. New programs should
-# do
-#
-# use IPC::Open3;
-#
-# instead of
-#
-# require 'open3.pl';
-
-package main;
-use IPC::Open3 'open3';
-1
Deleted: trunk/contrib/perl/lib/parent.pm
===================================================================
--- trunk/contrib/perl/lib/parent.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/parent.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,136 +0,0 @@
-package parent;
-use strict;
-use vars qw($VERSION);
-$VERSION = '0.221';
-
-sub import {
- my $class = shift;
-
- my $inheritor = caller(0);
-
- if ( @_ and $_[0] eq '-norequire' ) {
- shift @_;
- } else {
- for ( my @filename = @_ ) {
- if ( $_ eq $inheritor ) {
- warn "Class '$inheritor' tried to inherit from itself\n";
- };
-
- s{::|'}{/}g;
- require "$_.pm"; # dies if the file is not found
- }
- }
-
- {
- no strict 'refs';
- # This is more efficient than push for the new MRO
- # at least until the new MRO is fixed
- @{"$inheritor\::ISA"} = (@{"$inheritor\::ISA"} , @_);
- };
-};
-
-"All your base are belong to us"
-
-__END__
-
-=head1 NAME
-
-parent - Establish an ISA relationship with base classes at compile time
-
-=head1 SYNOPSIS
-
- package Baz;
- use parent qw(Foo Bar);
-
-=head1 DESCRIPTION
-
-Allows you to both load one or more modules, while setting up inheritance from
-those modules at the same time. Mostly similar in effect to
-
- package Baz;
- BEGIN {
- require Foo;
- require Bar;
- push @ISA, qw(Foo Bar);
- }
-
-By default, every base class needs to live in a file of its own.
-If you want to have a subclass and its parent class in the same file, you
-can tell C<parent> not to load any modules by using the C<-norequire> switch:
-
- package Foo;
- sub exclaim { "I CAN HAS PERL" }
-
- package DoesNotLoadFooBar;
- use parent -norequire, 'Foo', 'Bar';
- # will not go looking for Foo.pm or Bar.pm
-
-This is equivalent to the following code:
-
- package Foo;
- sub exclaim { "I CAN HAS PERL" }
-
- package DoesNotLoadFooBar;
- push @DoesNotLoadFooBar::ISA, 'Foo';
-
-This is also helpful for the case where a package lives within
-a differently named file:
-
- package MyHash;
- use Tie::Hash;
- use parent -norequire, 'Tie::StdHash';
-
-This is equivalent to the following code:
-
- package MyHash;
- require Tie::Hash;
- push @ISA, 'Tie::StdHash';
-
-If you want to load a subclass from a file that C<require> would
-not consider an eligible filename (that is, it does not end in
-either C<.pm> or C<.pmc>), use the following code:
-
- package MySecondPlugin;
- require './plugins/custom.plugin'; # contains Plugin::Custom
- use parent -norequire, 'Plugin::Custom';
-
-=head1 DIAGNOSTICS
-
-=over 4
-
-=item Class 'Foo' tried to inherit from itself
-
-Attempting to inherit from yourself generates a warning.
-
- use Foo;
- use parent 'Foo';
-
-=back
-
-=head1 HISTORY
-
-This module was forked from L<base> to remove the cruft
-that had accumulated in it.
-
-=head1 CAVEATS
-
-=head1 SEE ALSO
-
-L<base>
-
-=head1 AUTHORS AND CONTRIBUTORS
-
-Rafa\xEBl Garcia-Suarez, Bart Lateur, Max Maischein, Anno Siegel, Michael Schwern
-
-=head1 MAINTAINER
-
-Max Maischein C< corion at cpan.org >
-
-Copyright (c) 2007 Max Maischein C<< <corion at cpan.org> >>
-Based on the idea of C<base.pm>, which was introduced with Perl 5.004_04.
-
-=head1 LICENSE
-
-This module is released under the same terms as Perl itself.
-
-=cut
Deleted: trunk/contrib/perl/lib/pwd.pl
===================================================================
--- trunk/contrib/perl/lib/pwd.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/pwd.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,71 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-;# pwd.pl - keeps track of current working directory in PWD environment var
-;#
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Cwd
-
-;# $RCSfile: pwd.pl,v $$Revision: 1.1.1.2 $$Date: 2011-05-18 13:33:26 $
-;#
-;# $Log: not supported by cvs2svn $
-;#
-;# Usage:
-;# require "pwd.pl";
-;# &initpwd;
-;# ...
-;# &chdir($newdir);
-
-package pwd;
-
-sub main'initpwd {
- if ($ENV{'PWD'}) {
- local($dd,$di) = stat('.');
- local($pd,$pi) = stat($ENV{'PWD'});
- if (!defined $dd or !defined $pd or $di != $pi or $dd != $pd) {
- chop($ENV{'PWD'} = `pwd`);
- }
- }
- else {
- chop($ENV{'PWD'} = `pwd`);
- }
- if ($ENV{'PWD'} =~ m|(/[^/]+(/[^/]+/[^/]+))(.*)|) {
- local($pd,$pi) = stat($2);
- local($dd,$di) = stat($1);
- if (defined $pd and defined $dd and $di == $pi and $dd == $pd) {
- $ENV{'PWD'}="$2$3";
- }
- }
-}
-
-sub main'chdir {
- local($newdir) = shift;
- $newdir =~ s|/{2,}|/|g;
- if (chdir $newdir) {
- if ($newdir =~ m#^/#) {
- $ENV{'PWD'} = $newdir;
- }
- else {
- local(@curdir) = split(m#/#,$ENV{'PWD'});
- @curdir = '' unless @curdir;
- foreach $component (split(m#/#, $newdir)) {
- next if $component eq '.';
- pop(@curdir),next if $component eq '..';
- push(@curdir,$component);
- }
- $ENV{'PWD'} = join('/', at curdir) || '/';
- }
- }
- else {
- 0;
- }
-}
-
-1;
Deleted: trunk/contrib/perl/lib/shellwords.pl
===================================================================
--- trunk/contrib/perl/lib/shellwords.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/shellwords.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,19 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-;# This legacy library is deprecated and will be removed in a future
-;# release of perl.
-;#
-;# shellwords.pl
-;#
-;# Usage:
-;# require 'shellwords.pl';
-;# @words = shellwords($line);
-;# or
-;# @words = shellwords(@lines);
-;# or
-;# @words = shellwords(); # defaults to $_ (and clobbers it)
-
-require Text::ParseWords;
-*shellwords = \&Text::ParseWords::old_shellwords;
-
-1;
Deleted: trunk/contrib/perl/lib/stat.pl
===================================================================
--- trunk/contrib/perl/lib/stat.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/stat.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,35 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-;# This legacy library is deprecated and will be removed in a future
-;# release of perl.
-;#
-;# Usage:
-;# require 'stat.pl';
-;# @ary = stat(foo);
-;# $st_dev = @ary[$ST_DEV];
-;#
-
-$ST_DEV = 0;
-$ST_INO = 1;
-$ST_MODE = 2;
-$ST_NLINK = 3;
-$ST_UID = 4;
-$ST_GID = 5;
-$ST_RDEV = 6;
-$ST_SIZE = 7;
-$ST_ATIME = 8;
-$ST_MTIME = 9;
-$ST_CTIME = 10;
-$ST_BLKSIZE = 11;
-$ST_BLOCKS = 12;
-
-;# Usage:
-;# require 'stat.pl';
-;# do Stat('foo'); # sets st_* as a side effect
-;#
-sub Stat {
- ($st_dev,$st_ino,$st_mode,$st_nlink,$st_uid,$st_gid,$st_rdev,$st_size,
- $st_atime,$st_mtime,$st_ctime,$st_blksize,$st_blocks) = stat(shift(@_));
-}
-
-1;
Deleted: trunk/contrib/perl/lib/syslog.pl
===================================================================
--- trunk/contrib/perl/lib/syslog.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/syslog.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,201 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-#
-# syslog.pl
-#
-# $Log: not supported by cvs2svn $
-#
-# tom christiansen <tchrist at convex.com>
-# modified to use sockets by Larry Wall <lwall at jpl-devvax.jpl.nasa.gov>
-# NOTE: openlog now takes three arguments, just like openlog(3)
-#
-# call syslog() with a string priority and a list of printf() args
-# like syslog(3)
-#
-# usage: require 'syslog.pl';
-#
-# then (put these all in a script to test function)
-#
-#
-# do openlog($program,'cons,pid','user');
-# do syslog('info','this is another test');
-# do syslog('mail|warning','this is a better test: %d', time);
-# do closelog();
-#
-# do syslog('debug','this is the last test');
-# do openlog("$program $$",'ndelay','user');
-# do syslog('notice','fooprogram: this is really done');
-#
-# $! = 55;
-# do syslog('info','problem was %m'); # %m == $! in syslog(3)
-
-package syslog;
-
-use warnings::register;
-
-$host = 'localhost' unless $host; # set $syslog'host to change
-
-if ($] >= 5 && warnings::enabled()) {
- warnings::warn("You should 'use Sys::Syslog' instead; continuing");
-}
-
-require 'syslog.ph';
-
- eval 'use Socket; 1' ||
- eval { require "socket.ph" } ||
- require "sys/socket.ph";
-
-$maskpri = &LOG_UPTO(&LOG_DEBUG);
-
-sub main'openlog {
- ($ident, $logopt, $facility) = @_; # package vars
- $lo_pid = $logopt =~ /\bpid\b/;
- $lo_ndelay = $logopt =~ /\bndelay\b/;
- $lo_cons = $logopt =~ /\bcons\b/;
- $lo_nowait = $logopt =~ /\bnowait\b/;
- &connect if $lo_ndelay;
-}
-
-sub main'closelog {
- $facility = $ident = '';
- &disconnect;
-}
-
-sub main'setlogmask {
- local($oldmask) = $maskpri;
- $maskpri = shift;
- $oldmask;
-}
-
-sub main'syslog {
- local($priority) = shift;
- local($mask) = shift;
- local($message, $whoami);
- local(@words, $num, $numpri, $numfac, $sum);
- local($facility) = $facility; # may need to change temporarily.
-
- die "syslog: expected both priority and mask" unless $mask && $priority;
-
- @words = split(/\W+/, $priority, 2);# Allow "level" or "level|facility".
- undef $numpri;
- undef $numfac;
- foreach (@words) {
- $num = &xlate($_); # Translate word to number.
- if (/^kern$/ || $num < 0) {
- die "syslog: invalid level/facility: $_\n";
- }
- elsif ($num <= &LOG_PRIMASK) {
- die "syslog: too many levels given: $_\n" if defined($numpri);
- $numpri = $num;
- return 0 unless &LOG_MASK($numpri) & $maskpri;
- }
- else {
- die "syslog: too many facilities given: $_\n" if defined($numfac);
- $facility = $_;
- $numfac = $num;
- }
- }
-
- die "syslog: level must be given\n" unless defined($numpri);
-
- if (!defined($numfac)) { # Facility not specified in this call.
- $facility = 'user' unless $facility;
- $numfac = &xlate($facility);
- }
-
- &connect unless $connected;
-
- $whoami = $ident;
-
- if (!$ident && $mask =~ /^(\S.*):\s?(.*)/) {
- $whoami = $1;
- $mask = $2;
- }
-
- unless ($whoami) {
- ($whoami = getlogin) ||
- ($whoami = getpwuid($<)) ||
- ($whoami = 'syslog');
- }
-
- $whoami .= "[$$]" if $lo_pid;
-
- $mask =~ s/%m/$!/g;
- $mask .= "\n" unless $mask =~ /\n$/;
- $message = sprintf ($mask, @_);
-
- $sum = $numpri + $numfac;
- unless (send(SYSLOG,"<$sum>$whoami: $message",0)) {
- if ($lo_cons) {
- if ($pid = fork) {
- unless ($lo_nowait) {
- do {$died = wait;} until $died == $pid || $died < 0;
- }
- }
- else {
- open(CONS,">/dev/console");
- print CONS "<$facility.$priority>$whoami: $message\r";
- exit if defined $pid; # if fork failed, we're parent
- close CONS;
- }
- }
- }
-}
-
-sub xlate {
- local($name) = @_;
- $name = uc $name;
- $name = "LOG_$name" unless $name =~ /^LOG_/;
- $name = "syslog'$name";
- defined &$name ? &$name : -1;
-}
-
-sub connect {
- $pat = 'S n C4 x8';
-
- $af_unix = &AF_UNIX;
- $af_inet = &AF_INET;
-
- $stream = &SOCK_STREAM;
- $datagram = &SOCK_DGRAM;
-
- ($name,$aliases,$proto) = getprotobyname('udp');
- $udp = $proto;
-
- ($name,$aliases,$port,$proto) = getservbyname('syslog','udp');
- $syslog = $port;
-
- if (chop($myname = `hostname`)) {
- ($name,$aliases,$addrtype,$length, at addrs) = gethostbyname($myname);
- die "Can't lookup $myname\n" unless $name;
- @bytes = unpack("C4",$addrs[0]);
- }
- else {
- @bytes = (0,0,0,0);
- }
- $this = pack($pat, $af_inet, 0, @bytes);
-
- if ($host =~ /^\d+\./) {
- @bytes = split(/\./,$host);
- }
- else {
- ($name,$aliases,$addrtype,$length, at addrs) = gethostbyname($host);
- die "Can't lookup $host\n" unless $name;
- @bytes = unpack("C4",$addrs[0]);
- }
- $that = pack($pat,$af_inet,$syslog, at bytes);
-
- socket(SYSLOG,$af_inet,$datagram,$udp) || die "socket: $!\n";
- bind(SYSLOG,$this) || die "bind: $!\n";
- connect(SYSLOG,$that) || die "connect: $!\n";
-
- local($old) = select(SYSLOG); $| = 1; select($old);
- $connected = 1;
-}
-
-sub disconnect {
- close SYSLOG;
- $connected = 0;
-}
-
-1;
Deleted: trunk/contrib/perl/lib/tainted.pl
===================================================================
--- trunk/contrib/perl/lib/tainted.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/tainted.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,14 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-# This subroutine returns true if its argument is tainted, false otherwise.
-#
-
-sub tainted {
- local($@);
- eval { kill 0 * $_[0] };
- $@ =~ /^Insecure/;
-}
-
-1;
Deleted: trunk/contrib/perl/lib/termcap.pl
===================================================================
--- trunk/contrib/perl/lib/termcap.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/termcap.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,183 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-;# $RCSfile: termcap.pl,v $$Revision: 1.1.1.2 $$Date: 2011-05-18 13:33:26 $
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-# This legacy library is deprecated and will be removed in a future
-# release of perl.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Term::Cap
-#
-
-;#
-;# Usage:
-;# require 'ioctl.pl';
-;# ioctl(TTY,$TIOCGETP,$foo);
-;# ($ispeed,$ospeed) = unpack('cc',$foo);
-;# require 'termcap.pl';
-;# &Tgetent('vt100'); # sets $TC{'cm'}, etc.
-;# &Tputs(&Tgoto($TC{'cm'},$col,$row), 0, 'FILEHANDLE');
-;# &Tputs($TC{'dl'},$affcnt,'FILEHANDLE');
-;#
-sub Tgetent {
- local($TERM) = @_;
- local($TERMCAP,$_,$entry,$loop,$field);
-
- # warn "Tgetent: no ospeed set" unless $ospeed;
- foreach $key (keys %TC) {
- delete $TC{$key};
- }
- $TERM = $ENV{'TERM'} unless $TERM;
- $TERM =~ s/(\W)/\\$1/g;
- $TERMCAP = $ENV{'TERMCAP'};
- $TERMCAP = '/etc/termcap' unless $TERMCAP;
- if ($TERMCAP !~ m:^/:) {
- if ($TERMCAP !~ /(^|\|)$TERM[:\|]/) {
- $TERMCAP = '/etc/termcap';
- }
- }
- if ($TERMCAP =~ m:^/:) {
- $entry = '';
- do {
- $loop = "
- open(TERMCAP,'<$TERMCAP') || die \"Can't open $TERMCAP\";
- while (<TERMCAP>) {
- next if /^#/;
- next if /^\t/;
- if (/(^|\\|)${TERM}[:\\|]/) {
- chop;
- while (chop eq '\\\\') {
- \$_ .= <TERMCAP>;
- chop;
- }
- \$_ .= ':';
- last;
- }
- }
- close TERMCAP;
- \$entry .= \$_;
- ";
- eval $loop;
- } while s/:tc=([^:]+):/:/ && ($TERM = $1);
- $TERMCAP = $entry;
- }
-
- foreach $field (split(/:[\s:\\]*/,$TERMCAP)) {
- if ($field =~ /^\w\w$/) {
- $TC{$field} = 1;
- }
- elsif ($field =~ /^(\w\w)#(.*)/) {
- $TC{$1} = $2 if $TC{$1} eq '';
- }
- elsif ($field =~ /^(\w\w)=(.*)/) {
- $entry = $1;
- $_ = $2;
- s/\\E/\033/g;
- s/\\(200)/pack('c',0)/eg; # NUL character
- s/\\(0\d\d)/pack('c',oct($1))/eg; # octal
- s/\\(0x[0-9A-Fa-f][0-9A-Fa-f])/pack('c',hex($1))/eg; # hex
- s/\\(\d\d\d)/pack('c',$1 & 0177)/eg;
- s/\\n/\n/g;
- s/\\r/\r/g;
- s/\\t/\t/g;
- s/\\b/\b/g;
- s/\\f/\f/g;
- s/\\\^/\377/g;
- s/\^\?/\177/g;
- s/\^(.)/pack('c',ord($1) & 31)/eg;
- s/\\(.)/$1/g;
- s/\377/^/g;
- $TC{$entry} = $_ if $TC{$entry} eq '';
- }
- }
- $TC{'pc'} = "\0" if $TC{'pc'} eq '';
- $TC{'bc'} = "\b" if $TC{'bc'} eq '';
-}
-
- at Tputs = (0,200,133.3,90.9,74.3,66.7,50,33.3,16.7,8.3,5.5,4.1,2,1,.5,.2);
-
-sub Tputs {
- local($string,$affcnt,$FH) = @_;
- local($ms);
- if ($string =~ /(^[\d.]+)(\*?)(.*)$/) {
- $ms = $1;
- $ms *= $affcnt if $2;
- $string = $3;
- $decr = $Tputs[$ospeed];
- if ($decr > .1) {
- $ms += $decr / 2;
- $string .= $TC{'pc'} x ($ms / $decr);
- }
- }
- print $FH $string if $FH;
- $string;
-}
-
-sub Tgoto {
- local($string) = shift(@_);
- local($result) = '';
- local($after) = '';
- local($code,$tmp) = @_;
- local(@tmp);
- @tmp = ($tmp,$code);
- local($online) = 0;
- while ($string =~ /^([^%]*)%(.)(.*)/) {
- $result .= $1;
- $code = $2;
- $string = $3;
- if ($code eq 'd') {
- $result .= sprintf("%d",shift(@tmp));
- }
- elsif ($code eq '.') {
- $tmp = shift(@tmp);
- if ($tmp == 0 || $tmp == 4 || $tmp == 10) {
- if ($online) {
- ++$tmp, $after .= $TC{'up'} if $TC{'up'};
- }
- else {
- ++$tmp, $after .= $TC{'bc'};
- }
- }
- $result .= sprintf("%c",$tmp);
- $online = !$online;
- }
- elsif ($code eq '+') {
- $result .= sprintf("%c",shift(@tmp)+ord($string));
- $string = substr($string,1,99);
- $online = !$online;
- }
- elsif ($code eq 'r') {
- ($code,$tmp) = @tmp;
- @tmp = ($tmp,$code);
- $online = !$online;
- }
- elsif ($code eq '>') {
- ($code,$tmp,$string) = unpack("CCa99",$string);
- if ($tmp[0] > $code) {
- $tmp[0] += $tmp;
- }
- }
- elsif ($code eq '2') {
- $result .= sprintf("%02d",shift(@tmp));
- $online = !$online;
- }
- elsif ($code eq '3') {
- $result .= sprintf("%03d",shift(@tmp));
- $online = !$online;
- }
- elsif ($code eq 'i') {
- ($code,$tmp) = @tmp;
- @tmp = ($code+1,$tmp+1);
- }
- else {
- return "OOPS";
- }
- }
- $result . $string . $after;
-}
-
-1;
Deleted: trunk/contrib/perl/lib/timelocal.pl
===================================================================
--- trunk/contrib/perl/lib/timelocal.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/timelocal.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,23 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-;# timelocal.pl
-;#
-;# Usage:
-;# $time = timelocal($sec,$min,$hours,$mday,$mon,$year);
-;# $time = timegm($sec,$min,$hours,$mday,$mon,$year);
-
-;# This file has been superseded by the Time::Local library module.
-;# It is implemented as a call to that module for backwards compatibility
-;# with code written for perl4; new code should use Time::Local directly.
-;# This legacy library is deprecated and will be removed in a future
-;# release of perl.
-
-;# The current implementation shares with the original the questionable
-;# behavior of defining the timelocal() and timegm() functions in the
-;# namespace of whatever package was current when the first instance of
-;# C<require 'timelocal.pl';> was executed in a program.
-
-use Time::Local;
-
-*timelocal::cheat = \&Time::Local::cheat;
-
Deleted: trunk/contrib/perl/lib/unicore/mktables.lst
===================================================================
--- trunk/contrib/perl/lib/unicore/mktables.lst 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/unicore/mktables.lst 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,563 +0,0 @@
-#
-# mktables.lst -- File list for mktables.
-#
-# Autogenerated on Mon Jan 26 17:57:26 2009
-#
-# - First section is input files
-# (mktables itself is automatically included)
-# - Section seperator is /^=+$/
-# - Second section is a list of output files.
-# - Lines matching /^\s*#/ are treated as comments
-# which along with blank lines are ignored.
-#
-
-# Input files:
-
-ArabicShaping.txt
-BidiMirroring.txt
-Blocks.txt
-CaseFolding.txt
-CompositionExclusions.txt
-EastAsianWidth.txt
-HangulSyllableType.txt
-Index.txt
-Jamo.txt
-LineBreak.txt
-NameAliases.txt
-NamedSequences.txt
-NamedSqProv.txt
-NamesList.txt
-NormalizationCorrections.txt
-PropList.txt
-PropValueAliases.txt
-PropertyAliases.txt
-ReadMe.txt
-Scripts.txt
-SpecialCasing.txt
-StandardizedVariants.txt
-UnicodeData.txt
-version
-
-=================================
-
-# Output files:
-
-Properties
-Canonical.pl
-CombiningClass.pl
-Decomposition.pl
-Exact.pl
-Name.pl
-PVA.pl
-To/Digit.pl
-To/Fold.pl
-To/Lower.pl
-To/Title.pl
-To/Upper.pl
-lib/bc/AL.pl
-lib/bc/AN.pl
-lib/bc/B.pl
-lib/bc/BN.pl
-lib/bc/CS.pl
-lib/bc/EN.pl
-lib/bc/ES.pl
-lib/bc/ET.pl
-lib/bc/L.pl
-lib/bc/LRE.pl
-lib/bc/LRO.pl
-lib/bc/NSM.pl
-lib/bc/ON.pl
-lib/bc/PDF.pl
-lib/bc/R.pl
-lib/bc/RLE.pl
-lib/bc/RLO.pl
-lib/bc/S.pl
-lib/bc/WS.pl
-lib/ccc/A.pl
-lib/ccc/AL.pl
-lib/ccc/AR.pl
-lib/ccc/ATAR.pl
-lib/ccc/ATB.pl
-lib/ccc/ATBL.pl
-lib/ccc/B.pl
-lib/ccc/BL.pl
-lib/ccc/BR.pl
-lib/ccc/DA.pl
-lib/ccc/DB.pl
-lib/ccc/IS.pl
-lib/ccc/KV.pl
-lib/ccc/L.pl
-lib/ccc/NK.pl
-lib/ccc/NR.pl
-lib/ccc/OV.pl
-lib/ccc/R.pl
-lib/ccc/VR.pl
-lib/dt/Can.pl
-lib/dt/Com.pl
-lib/dt/Enc.pl
-lib/dt/Fin.pl
-lib/dt/Font.pl
-lib/dt/Fra.pl
-lib/dt/Init.pl
-lib/dt/Iso.pl
-lib/dt/Med.pl
-lib/dt/Nar.pl
-lib/dt/Nb.pl
-lib/dt/Sml.pl
-lib/dt/Sqr.pl
-lib/dt/Sub.pl
-lib/dt/Sup.pl
-lib/dt/Vert.pl
-lib/dt/Wide.pl
-lib/ea/A.pl
-lib/ea/F.pl
-lib/ea/H.pl
-lib/ea/N.pl
-lib/ea/Na.pl
-lib/ea/W.pl
-lib/gc_sc/AHex.pl
-lib/gc_sc/ASCII.pl
-lib/gc_sc/Alnum.pl
-lib/gc_sc/Alpha.pl
-lib/gc_sc/Alphabet.pl
-lib/gc_sc/Any.pl
-lib/gc_sc/Arab.pl
-lib/gc_sc/Armn.pl
-lib/gc_sc/AsciiHex.pl
-lib/gc_sc/Assigned.pl
-lib/gc_sc/Bali.pl
-lib/gc_sc/Beng.pl
-lib/gc_sc/BidiC.pl
-lib/gc_sc/BidiCont.pl
-lib/gc_sc/Blank.pl
-lib/gc_sc/Bopo.pl
-lib/gc_sc/Brai.pl
-lib/gc_sc/Bugi.pl
-lib/gc_sc/Buhd.pl
-lib/gc_sc/C.pl
-lib/gc_sc/Canadian.pl
-lib/gc_sc/Cari.pl
-lib/gc_sc/Cc.pl
-lib/gc_sc/Cf.pl
-lib/gc_sc/Cham.pl
-lib/gc_sc/Cher.pl
-lib/gc_sc/Cn.pl
-lib/gc_sc/Cntrl.pl
-lib/gc_sc/Co.pl
-lib/gc_sc/Copt.pl
-lib/gc_sc/Cprt.pl
-lib/gc_sc/Cs.pl
-lib/gc_sc/Cyrl.pl
-lib/gc_sc/Dash.pl
-lib/gc_sc/Dash2.pl
-lib/gc_sc/DefaultI.pl
-lib/gc_sc/Dep.pl
-lib/gc_sc/Deprecat.pl
-lib/gc_sc/Deva.pl
-lib/gc_sc/Dia.pl
-lib/gc_sc/Diacriti.pl
-lib/gc_sc/Digit.pl
-lib/gc_sc/Dsrt.pl
-lib/gc_sc/Ethi.pl
-lib/gc_sc/Ext.pl
-lib/gc_sc/Extender.pl
-lib/gc_sc/Geor.pl
-lib/gc_sc/Glag.pl
-lib/gc_sc/Goth.pl
-lib/gc_sc/Graph.pl
-lib/gc_sc/Grek.pl
-lib/gc_sc/Gujr.pl
-lib/gc_sc/Guru.pl
-lib/gc_sc/Hang.pl
-lib/gc_sc/Hani.pl
-lib/gc_sc/Hano.pl
-lib/gc_sc/Hebr.pl
-lib/gc_sc/Hex.pl
-lib/gc_sc/HexDigit.pl
-lib/gc_sc/Hira.pl
-lib/gc_sc/HorizSpa.pl
-lib/gc_sc/Hyphen.pl
-lib/gc_sc/Hyphen2.pl
-lib/gc_sc/IDSB.pl
-lib/gc_sc/IDST.pl
-lib/gc_sc/IdContin.pl
-lib/gc_sc/IdStart.pl
-lib/gc_sc/Ideo.pl
-lib/gc_sc/Ideograp.pl
-lib/gc_sc/IdsBinar.pl
-lib/gc_sc/IdsTrina.pl
-lib/gc_sc/InAegean.pl
-lib/gc_sc/InAlphab.pl
-lib/gc_sc/InAncie2.pl
-lib/gc_sc/InAncie3.pl
-lib/gc_sc/InAncien.pl
-lib/gc_sc/InArabi2.pl
-lib/gc_sc/InArabi3.pl
-lib/gc_sc/InArabi4.pl
-lib/gc_sc/InArabic.pl
-lib/gc_sc/InArmeni.pl
-lib/gc_sc/InArrows.pl
-lib/gc_sc/InBaline.pl
-lib/gc_sc/InBasicL.pl
-lib/gc_sc/InBengal.pl
-lib/gc_sc/InBlockE.pl
-lib/gc_sc/InBopom2.pl
-lib/gc_sc/InBopomo.pl
-lib/gc_sc/InBoxDra.pl
-lib/gc_sc/InBraill.pl
-lib/gc_sc/InBugine.pl
-lib/gc_sc/InBuhid.pl
-lib/gc_sc/InByzant.pl
-lib/gc_sc/InCarian.pl
-lib/gc_sc/InCham.pl
-lib/gc_sc/InCherok.pl
-lib/gc_sc/InCjkCo2.pl
-lib/gc_sc/InCjkCo3.pl
-lib/gc_sc/InCjkCo4.pl
-lib/gc_sc/InCjkCom.pl
-lib/gc_sc/InCjkRad.pl
-lib/gc_sc/InCjkStr.pl
-lib/gc_sc/InCjkSym.pl
-lib/gc_sc/InCjkUn2.pl
-lib/gc_sc/InCjkUn3.pl
-lib/gc_sc/InCjkUni.pl
-lib/gc_sc/InCombi2.pl
-lib/gc_sc/InCombi3.pl
-lib/gc_sc/InCombi4.pl
-lib/gc_sc/InCombin.pl
-lib/gc_sc/InContro.pl
-lib/gc_sc/InCoptic.pl
-lib/gc_sc/InCounti.pl
-lib/gc_sc/InCunei2.pl
-lib/gc_sc/InCuneif.pl
-lib/gc_sc/InCurren.pl
-lib/gc_sc/InCyprio.pl
-lib/gc_sc/InCyril2.pl
-lib/gc_sc/InCyril3.pl
-lib/gc_sc/InCyril4.pl
-lib/gc_sc/InCyrill.pl
-lib/gc_sc/InDesere.pl
-lib/gc_sc/InDevana.pl
-lib/gc_sc/InDingba.pl
-lib/gc_sc/InDomino.pl
-lib/gc_sc/InEnclo2.pl
-lib/gc_sc/InEnclos.pl
-lib/gc_sc/InEthio2.pl
-lib/gc_sc/InEthio3.pl
-lib/gc_sc/InEthiop.pl
-lib/gc_sc/InGenera.pl
-lib/gc_sc/InGeomet.pl
-lib/gc_sc/InGeorg2.pl
-lib/gc_sc/InGeorgi.pl
-lib/gc_sc/InGlagol.pl
-lib/gc_sc/InGothic.pl
-lib/gc_sc/InGreekA.pl
-lib/gc_sc/InGreekE.pl
-lib/gc_sc/InGujara.pl
-lib/gc_sc/InGurmuk.pl
-lib/gc_sc/InHalfwi.pl
-lib/gc_sc/InHangu2.pl
-lib/gc_sc/InHangu3.pl
-lib/gc_sc/InHangul.pl
-lib/gc_sc/InHanuno.pl
-lib/gc_sc/InHebrew.pl
-lib/gc_sc/InHighPr.pl
-lib/gc_sc/InHighSu.pl
-lib/gc_sc/InHiraga.pl
-lib/gc_sc/InIdeogr.pl
-lib/gc_sc/InIpaExt.pl
-lib/gc_sc/InKanbun.pl
-lib/gc_sc/InKangxi.pl
-lib/gc_sc/InKannad.pl
-lib/gc_sc/InKatak2.pl
-lib/gc_sc/InKataka.pl
-lib/gc_sc/InKayahL.pl
-lib/gc_sc/InKharos.pl
-lib/gc_sc/InKhmer.pl
-lib/gc_sc/InKhmerS.pl
-lib/gc_sc/InLao.pl
-lib/gc_sc/InLatin1.pl
-lib/gc_sc/InLatin2.pl
-lib/gc_sc/InLatin3.pl
-lib/gc_sc/InLatin4.pl
-lib/gc_sc/InLatin5.pl
-lib/gc_sc/InLatinE.pl
-lib/gc_sc/InLepcha.pl
-lib/gc_sc/InLetter.pl
-lib/gc_sc/InLimbu.pl
-lib/gc_sc/InLinea2.pl
-lib/gc_sc/InLinear.pl
-lib/gc_sc/InLowSur.pl
-lib/gc_sc/InLycian.pl
-lib/gc_sc/InLydian.pl
-lib/gc_sc/InMahjon.pl
-lib/gc_sc/InMalaya.pl
-lib/gc_sc/InMathe2.pl
-lib/gc_sc/InMathem.pl
-lib/gc_sc/InMisce2.pl
-lib/gc_sc/InMisce3.pl
-lib/gc_sc/InMisce4.pl
-lib/gc_sc/InMisce5.pl
-lib/gc_sc/InMiscel.pl
-lib/gc_sc/InModifi.pl
-lib/gc_sc/InMongol.pl
-lib/gc_sc/InMusica.pl
-lib/gc_sc/InMyanma.pl
-lib/gc_sc/InNewTai.pl
-lib/gc_sc/InNko.pl
-lib/gc_sc/InNumber.pl
-lib/gc_sc/InOgham.pl
-lib/gc_sc/InOlChik.pl
-lib/gc_sc/InOldIta.pl
-lib/gc_sc/InOldPer.pl
-lib/gc_sc/InOptica.pl
-lib/gc_sc/InOriya.pl
-lib/gc_sc/InOsmany.pl
-lib/gc_sc/InPhagsP.pl
-lib/gc_sc/InPhaist.pl
-lib/gc_sc/InPhoeni.pl
-lib/gc_sc/InPhone2.pl
-lib/gc_sc/InPhonet.pl
-lib/gc_sc/InPrivat.pl
-lib/gc_sc/InRejang.pl
-lib/gc_sc/InRunic.pl
-lib/gc_sc/InSauras.pl
-lib/gc_sc/InShavia.pl
-lib/gc_sc/InSinhal.pl
-lib/gc_sc/InSmallF.pl
-lib/gc_sc/InSpacin.pl
-lib/gc_sc/InSpecia.pl
-lib/gc_sc/InSundan.pl
-lib/gc_sc/InSupers.pl
-lib/gc_sc/InSuppl2.pl
-lib/gc_sc/InSuppl3.pl
-lib/gc_sc/InSuppl4.pl
-lib/gc_sc/InSuppl5.pl
-lib/gc_sc/InSuppl6.pl
-lib/gc_sc/InSupple.pl
-lib/gc_sc/InSyloti.pl
-lib/gc_sc/InSyriac.pl
-lib/gc_sc/InTagalo.pl
-lib/gc_sc/InTagban.pl
-lib/gc_sc/InTags.pl
-lib/gc_sc/InTaiLe.pl
-lib/gc_sc/InTaiXua.pl
-lib/gc_sc/InTamil.pl
-lib/gc_sc/InTelugu.pl
-lib/gc_sc/InThaana.pl
-lib/gc_sc/InThai.pl
-lib/gc_sc/InTibeta.pl
-lib/gc_sc/InTifina.pl
-lib/gc_sc/InUgarit.pl
-lib/gc_sc/InUnifie.pl
-lib/gc_sc/InVai.pl
-lib/gc_sc/InVaria2.pl
-lib/gc_sc/InVariat.pl
-lib/gc_sc/InVertic.pl
-lib/gc_sc/InYiRadi.pl
-lib/gc_sc/InYiSyll.pl
-lib/gc_sc/InYijing.pl
-lib/gc_sc/JoinC.pl
-lib/gc_sc/JoinCont.pl
-lib/gc_sc/Kana.pl
-lib/gc_sc/KayahLi.pl
-lib/gc_sc/Khar.pl
-lib/gc_sc/Khmr.pl
-lib/gc_sc/Knda.pl
-lib/gc_sc/L.pl
-lib/gc_sc/LC.pl
-lib/gc_sc/LOE.pl
-lib/gc_sc/Laoo.pl
-lib/gc_sc/Latn.pl
-lib/gc_sc/Lepc.pl
-lib/gc_sc/Limb.pl
-lib/gc_sc/LinearB.pl
-lib/gc_sc/Ll.pl
-lib/gc_sc/Lm.pl
-lib/gc_sc/Lo.pl
-lib/gc_sc/LogicalO.pl
-lib/gc_sc/Lower.pl
-lib/gc_sc/Lowercas.pl
-lib/gc_sc/Lt.pl
-lib/gc_sc/Lu.pl
-lib/gc_sc/Lyci.pl
-lib/gc_sc/Lydi.pl
-lib/gc_sc/M.pl
-lib/gc_sc/Math.pl
-lib/gc_sc/Mc.pl
-lib/gc_sc/Me.pl
-lib/gc_sc/Mlym.pl
-lib/gc_sc/Mn.pl
-lib/gc_sc/Mong.pl
-lib/gc_sc/Mymr.pl
-lib/gc_sc/N.pl
-lib/gc_sc/NChar.pl
-lib/gc_sc/Nd.pl
-lib/gc_sc/NewTaiLu.pl
-lib/gc_sc/Nkoo.pl
-lib/gc_sc/Nl.pl
-lib/gc_sc/No.pl
-lib/gc_sc/Nonchara.pl
-lib/gc_sc/OAlpha.pl
-lib/gc_sc/ODI.pl
-lib/gc_sc/OGrExt.pl
-lib/gc_sc/OIDC.pl
-lib/gc_sc/OIDS.pl
-lib/gc_sc/OLower.pl
-lib/gc_sc/OMath.pl
-lib/gc_sc/OUpper.pl
-lib/gc_sc/Ogam.pl
-lib/gc_sc/OlChiki.pl
-lib/gc_sc/OldItali.pl
-lib/gc_sc/OldPersi.pl
-lib/gc_sc/Orya.pl
-lib/gc_sc/Osma.pl
-lib/gc_sc/OtherAlp.pl
-lib/gc_sc/OtherDef.pl
-lib/gc_sc/OtherGra.pl
-lib/gc_sc/OtherIdC.pl
-lib/gc_sc/OtherIdS.pl
-lib/gc_sc/OtherLow.pl
-lib/gc_sc/OtherMat.pl
-lib/gc_sc/OtherUpp.pl
-lib/gc_sc/P.pl
-lib/gc_sc/PatSyn.pl
-lib/gc_sc/PatWS.pl
-lib/gc_sc/PatternS.pl
-lib/gc_sc/PatternW.pl
-lib/gc_sc/Pc.pl
-lib/gc_sc/Pd.pl
-lib/gc_sc/Pe.pl
-lib/gc_sc/PerlSpac.pl
-lib/gc_sc/PerlWord.pl
-lib/gc_sc/Pf.pl
-lib/gc_sc/PhagsPa.pl
-lib/gc_sc/Phnx.pl
-lib/gc_sc/Pi.pl
-lib/gc_sc/Po.pl
-lib/gc_sc/PosixAln.pl
-lib/gc_sc/PosixAlp.pl
-lib/gc_sc/PosixBla.pl
-lib/gc_sc/PosixCnt.pl
-lib/gc_sc/PosixDig.pl
-lib/gc_sc/PosixGra.pl
-lib/gc_sc/PosixLow.pl
-lib/gc_sc/PosixPri.pl
-lib/gc_sc/PosixPun.pl
-lib/gc_sc/PosixSpa.pl
-lib/gc_sc/PosixUpp.pl
-lib/gc_sc/Print.pl
-lib/gc_sc/Ps.pl
-lib/gc_sc/Punct.pl
-lib/gc_sc/QMark.pl
-lib/gc_sc/Qaai.pl
-lib/gc_sc/Quotatio.pl
-lib/gc_sc/Radical.pl
-lib/gc_sc/Radical2.pl
-lib/gc_sc/Rjng.pl
-lib/gc_sc/Runr.pl
-lib/gc_sc/S.pl
-lib/gc_sc/SD.pl
-lib/gc_sc/STerm.pl
-lib/gc_sc/Saur.pl
-lib/gc_sc/Sc.pl
-lib/gc_sc/Shaw.pl
-lib/gc_sc/Sinh.pl
-lib/gc_sc/Sk.pl
-lib/gc_sc/Sm.pl
-lib/gc_sc/So.pl
-lib/gc_sc/SoftDott.pl
-lib/gc_sc/Space.pl
-lib/gc_sc/SpacePer.pl
-lib/gc_sc/Sterm2.pl
-lib/gc_sc/Sund.pl
-lib/gc_sc/SylotiNa.pl
-lib/gc_sc/Syrc.pl
-lib/gc_sc/Tagb.pl
-lib/gc_sc/TaiLe.pl
-lib/gc_sc/Taml.pl
-lib/gc_sc/Telu.pl
-lib/gc_sc/Term.pl
-lib/gc_sc/Terminal.pl
-lib/gc_sc/Tfng.pl
-lib/gc_sc/Tglg.pl
-lib/gc_sc/Thaa.pl
-lib/gc_sc/Thai.pl
-lib/gc_sc/Tibt.pl
-lib/gc_sc/Title.pl
-lib/gc_sc/UIdeo.pl
-lib/gc_sc/Ugar.pl
-lib/gc_sc/UnifiedI.pl
-lib/gc_sc/Upper.pl
-lib/gc_sc/Uppercas.pl
-lib/gc_sc/VS.pl
-lib/gc_sc/Vaii.pl
-lib/gc_sc/Variatio.pl
-lib/gc_sc/VertSpac.pl
-lib/gc_sc/WSpace.pl
-lib/gc_sc/WhiteSpa.pl
-lib/gc_sc/Word.pl
-lib/gc_sc/XDigit.pl
-lib/gc_sc/Xsux.pl
-lib/gc_sc/Yiii.pl
-lib/gc_sc/Z.pl
-lib/gc_sc/Zl.pl
-lib/gc_sc/Zp.pl
-lib/gc_sc/Zs.pl
-lib/gc_sc/Zyyy.pl
-lib/gc_sc/_CanonDC.pl
-lib/gc_sc/_CaseIgn.pl
-lib/gc_sc/_CombAbo.pl
-lib/hst/L.pl
-lib/hst/LV.pl
-lib/hst/LVT.pl
-lib/hst/T.pl
-lib/hst/V.pl
-lib/jt/C.pl
-lib/jt/D.pl
-lib/jt/R.pl
-lib/jt/U.pl
-lib/lb/AI.pl
-lib/lb/AL.pl
-lib/lb/B2.pl
-lib/lb/BA.pl
-lib/lb/BB.pl
-lib/lb/BK.pl
-lib/lb/CB.pl
-lib/lb/CL.pl
-lib/lb/CM.pl
-lib/lb/CR.pl
-lib/lb/EX.pl
-lib/lb/GL.pl
-lib/lb/H2.pl
-lib/lb/H3.pl
-lib/lb/HY.pl
-lib/lb/ID.pl
-lib/lb/IN.pl
-lib/lb/IS.pl
-lib/lb/JL.pl
-lib/lb/JT.pl
-lib/lb/JV.pl
-lib/lb/LF.pl
-lib/lb/NL.pl
-lib/lb/NS.pl
-lib/lb/NU.pl
-lib/lb/OP.pl
-lib/lb/PO.pl
-lib/lb/PR.pl
-lib/lb/QU.pl
-lib/lb/SA.pl
-lib/lb/SG.pl
-lib/lb/SP.pl
-lib/lb/SY.pl
-lib/lb/WJ.pl
-lib/lb/XX.pl
-lib/lb/ZW.pl
-lib/nt/De.pl
-lib/nt/Di.pl
-lib/nt/Nu.pl
-
-# 24 input files
-# 514 output files
-
-# End list
Deleted: trunk/contrib/perl/lib/validate.pl
===================================================================
--- trunk/contrib/perl/lib/validate.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/validate.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,104 +0,0 @@
-warn "Legacy library @{[(caller(0))[6]]} will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at @{[(caller)[1]]}, line @{[(caller)[2]]}.\n";
-
-;# The validate routine takes a single multiline string consisting of
-;# lines containing a filename plus a file test to try on it. (The
-;# file test may also be a 'cd', causing subsequent relative filenames
-;# to be interpreted relative to that directory.) After the file test
-;# you may put '|| die' to make it a fatal error if the file test fails.
-;# The default is '|| warn'. The file test may optionally have a ! prepended
-;# to test for the opposite condition. If you do a cd and then list some
-;# relative filenames, you may want to indent them slightly for readability.
-;# If you supply your own "die" or "warn" message, you can use $file to
-;# interpolate the filename.
-
-;# Filetests may be bunched: -rwx tests for all of -r, -w and -x.
-;# Only the first failed test of the bunch will produce a warning.
-
-;# The routine returns the number of warnings issued.
-
-;# Usage:
-;# require "validate.pl";
-;# $warnings += do validate('
-;# /vmunix -e || die
-;# /boot -e || die
-;# /bin cd
-;# csh -ex
-;# csh !-ug
-;# sh -ex
-;# sh !-ug
-;# /usr -d || warn "What happened to $file?\n"
-;# ');
-
-sub validate {
- local($file,$test,$warnings,$oldwarnings);
- foreach $check (split(/\n/,$_[0])) {
- next if $check =~ /^#/;
- next if $check =~ /^$/;
- ($file,$test) = split(' ',$check,2);
- if ($test =~ s/^(!?-)(\w{2,}\b)/$1Z/) {
- $testlist = $2;
- @testlist = split(//,$testlist);
- }
- else {
- @testlist = ('Z');
- }
- $oldwarnings = $warnings;
- foreach $one (@testlist) {
- $this = $test;
- $this =~ s/(-\w\b)/$1 \$file/g;
- $this =~ s/-Z/-$one/;
- $this .= ' || warn' unless $this =~ /\|\|/;
- $this =~ s/^(.*\S)\s*\|\|\s*(die|warn)$/$1 || do valmess('$2','$1')/;
- $this =~ s/\bcd\b/chdir (\$cwd = \$file)/g;
- eval $this;
- last if $warnings > $oldwarnings;
- }
- }
- $warnings;
-}
-
-sub valmess {
- local($disposition,$this) = @_;
- $file = $cwd . '/' . $file unless $file =~ m|^/|;
- if ($this =~ /^(!?)-(\w)\s+\$file\s*$/) {
- $neg = $1;
- $tmp = $2;
- $tmp eq 'r' && ($mess = "$file is not readable by uid $>.");
- $tmp eq 'w' && ($mess = "$file is not writable by uid $>.");
- $tmp eq 'x' && ($mess = "$file is not executable by uid $>.");
- $tmp eq 'o' && ($mess = "$file is not owned by uid $>.");
- $tmp eq 'R' && ($mess = "$file is not readable by you.");
- $tmp eq 'W' && ($mess = "$file is not writable by you.");
- $tmp eq 'X' && ($mess = "$file is not executable by you.");
- $tmp eq 'O' && ($mess = "$file is not owned by you.");
- $tmp eq 'e' && ($mess = "$file does not exist.");
- $tmp eq 'z' && ($mess = "$file does not have zero size.");
- $tmp eq 's' && ($mess = "$file does not have non-zero size.");
- $tmp eq 'f' && ($mess = "$file is not a plain file.");
- $tmp eq 'd' && ($mess = "$file is not a directory.");
- $tmp eq 'l' && ($mess = "$file is not a symbolic link.");
- $tmp eq 'p' && ($mess = "$file is not a named pipe (FIFO).");
- $tmp eq 'S' && ($mess = "$file is not a socket.");
- $tmp eq 'b' && ($mess = "$file is not a block special file.");
- $tmp eq 'c' && ($mess = "$file is not a character special file.");
- $tmp eq 'u' && ($mess = "$file does not have the setuid bit set.");
- $tmp eq 'g' && ($mess = "$file does not have the setgid bit set.");
- $tmp eq 'k' && ($mess = "$file does not have the sticky bit set.");
- $tmp eq 'T' && ($mess = "$file is not a text file.");
- $tmp eq 'B' && ($mess = "$file is not a binary file.");
- if ($neg eq '!') {
- $mess =~ s/ is not / should not be / ||
- $mess =~ s/ does not / should not / ||
- $mess =~ s/ not / /;
- }
- print STDERR $mess,"\n";
- }
- else {
- $this =~ s/\$file/'$file'/g;
- print STDERR "Can't do $this.\n";
- }
- if ($disposition eq 'die') { exit 1; }
- ++$warnings;
-}
-
-1;
Deleted: trunk/contrib/perl/lib/version.t
===================================================================
--- trunk/contrib/perl/lib/version.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/lib/version.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,894 +0,0 @@
-#! /usr/local/perl -w
-
-use Test::More qw(no_plan);
-use Data::Dumper;
-require Test::Harness;
-no warnings 'once';
-*Verbose = \$Test::Harness::Verbose;
-use POSIX qw/locale_h/;
-use File::Temp qw/tempfile/;
-use File::Basename;
-
-BEGIN {
- use_ok("version", 0.77);
- # If we made it this far, we are ok.
-}
-
-my $Verbose;
-
-diag "Tests with base class" unless $ENV{PERL_CORE};
-
-BaseTests("version","new","qv");
-BaseTests("version","new","declare");
-BaseTests("version","parse", "qv");
-BaseTests("version","parse", "declare");
-
-# dummy up a redundant call to satisfy David Wheeler
-local $SIG{__WARN__} = sub { die $_[0] };
-eval 'use version;';
-unlike ($@, qr/^Subroutine main::declare redefined/,
- "Only export declare once per package (to prevent redefined warnings).");
-
-package version::Bad;
-use base 'version';
-sub new { my($self,$n)=@_; bless \$n, $self }
-
-package main;
-
-my $warning;
-local $SIG{__WARN__} = sub { $warning = $_[0] };
-my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
-(my $package = basename($filename)) =~ s/\.pm$//;
-print $fh <<"EOF";
-# This is an empty subclass
-package $package;
-use base 'version';
-use vars '\$VERSION';
-\$VERSION=0.001;
-EOF
-close $fh;
-
-sub main_reset {
- delete $main::INC{'$package'};
- undef &qv; undef *::qv; # avoid 'used once' warning
- undef &declare; undef *::declare; # avoid 'used once' warning
-}
-
-diag "Tests with empty derived class" unless $ENV{PERL_CORE};
-
-use_ok($package, 0.001);
-my $testobj = $package->new(1.002_003);
-isa_ok( $testobj, $package );
-ok( $testobj->numify == 1.002003, "Numified correctly" );
-ok( $testobj->stringify eq "1.002003", "Stringified correctly" );
-ok( $testobj->normal eq "v1.2.3", "Normalified correctly" );
-
-my $verobj = version::->new("1.2.4");
-ok( $verobj > $testobj, "Comparison vs parent class" );
-
-BaseTests($package, "new", "qv");
-main_reset;
-use_ok($package, 0.001, "declare");
-BaseTests($package, "new", "declare");
-main_reset;
-use_ok($package, 0.001);
-BaseTests($package, "parse", "qv");
-main_reset;
-use_ok($package, 0.001, "declare");
-BaseTests($package, "parse", "declare");
-
-diag "tests with bad subclass" unless $ENV{PERL_CORE};
-$testobj = version::Bad->new(1.002_003);
-isa_ok( $testobj, "version::Bad" );
-eval { my $string = $testobj->numify };
-like($@, qr/Invalid version object/,
- "Bad subclass numify");
-eval { my $string = $testobj->normal };
-like($@, qr/Invalid version object/,
- "Bad subclass normal");
-eval { my $string = $testobj->stringify };
-like($@, qr/Invalid version object/,
- "Bad subclass stringify");
-eval { my $test = ($testobj > 1.0) };
-like($@, qr/Invalid version object/,
- "Bad subclass vcmp");
-
-# Invalid structure
-eval { $a = \\version->new(1); bless $a, "version"; print "# $a\n" };
-like($@, qr/Invalid version object/,
- "Bad internal structure (RT#78286)");
-
-# do strict lax tests in a sub to isolate a package to test importing
-strict_lax_tests();
-
-sub strict_lax_tests {
- package temp12345;
- # copied from perl core test t/op/packagev.t
- # format: STRING STRICT_OK LAX_OK
- my $strict_lax_data = << 'CASE_DATA';
-1.00 pass pass
-1.00001 pass pass
-0.123 pass pass
-12.345 pass pass
-42 pass pass
-0 pass pass
-0.0 pass pass
-v1.2.3 pass pass
-v1.2.3.4 pass pass
-v0.1.2 pass pass
-v0.0.0 pass pass
-01 fail pass
-01.0203 fail pass
-v01 fail pass
-v01.02.03 fail pass
-.1 fail pass
-.1.2 fail pass
-1. fail pass
-1.a fail fail
-1._ fail fail
-1.02_03 fail pass
-v1.2_3 fail pass
-v1.02_03 fail pass
-v1.2_3_4 fail fail
-v1.2_3.4 fail fail
-1.2_3.4 fail fail
-0_ fail fail
-1_ fail fail
-1_. fail fail
-1.1_ fail fail
-1.02_03_04 fail fail
-1.2.3 fail pass
-v1.2 fail pass
-v0 fail pass
-v1 fail pass
-v.1.2.3 fail fail
-v fail fail
-v1.2345.6 fail pass
-undef fail pass
-1a fail fail
-1.2a3 fail fail
-bar fail fail
-_ fail fail
-CASE_DATA
-
- require version;
- version->import( qw/is_strict is_lax/ );
- for my $case ( split qr/\n/, $strict_lax_data ) {
- my ($v, $strict, $lax) = split qr/\t+/, $case;
- main::ok( $strict eq 'pass' ? is_strict($v) : ! is_strict($v), "is_strict($v) [$strict]" );
- main::ok( $strict eq 'pass' ? version::is_strict($v) : ! version::is_strict($v), "version::is_strict($v) [$strict]" );
- main::ok( $lax eq 'pass' ? is_lax($v) : ! is_lax($v), "is_lax($v) [$lax]" );
- main::ok( $lax eq 'pass' ? version::is_lax($v) : ! version::is_lax($v), "version::is_lax($v) [$lax]" );
- }
-}
-
-sub BaseTests {
-
- my ($CLASS, $method, $qv_declare) = @_;
- my $warning;
- local $SIG{__WARN__} = sub { $warning = $_[0] };
-
- # Insert your test code below, the Test module is use()ed here so read
- # its man page ( perldoc Test ) for help writing this test script.
-
- # Test bare number processing
- diag "tests with bare numbers" unless $ENV{PERL_CORE};
- $version = $CLASS->$method(5.005_03);
- is ( "$version" , "5.00503" , '5.005_03 eq 5.00503' );
- $version = $CLASS->$method(1.23);
- is ( "$version" , "1.23" , '1.23 eq "1.23"' );
-
- # Test quoted number processing
- diag "tests with quoted numbers" unless $ENV{PERL_CORE};
- $version = $CLASS->$method("5.005_03");
- is ( "$version" , "5.005_03" , '"5.005_03" eq "5.005_03"' );
- $version = $CLASS->$method("v1.23");
- is ( "$version" , "v1.23" , '"v1.23" eq "v1.23"' );
-
- # Test stringify operator
- diag "tests with stringify" unless $ENV{PERL_CORE};
- $version = $CLASS->$method("5.005");
- is ( "$version" , "5.005" , '5.005 eq "5.005"' );
- $version = $CLASS->$method("5.006.001");
- is ( "$version" , "5.006.001" , '5.006.001 eq v5.6.1' );
- unlike ($warning, qr/v-string without leading 'v' deprecated/, 'No leading v');
- $version = $CLASS->$method("v1.2.3_4");
- is ( "$version" , "v1.2.3_4" , 'alpha version 1.2.3_4 eq v1.2.3_4' );
-
- # test illegal formats
- diag "test illegal formats" unless $ENV{PERL_CORE};
- eval {my $version = $CLASS->$method("1.2_3_4")};
- like($@, qr/multiple underscores/,
- "Invalid version format (multiple underscores)");
-
- eval {my $version = $CLASS->$method("1.2_3.4")};
- like($@, qr/underscores before decimal/,
- "Invalid version format (underscores before decimal)");
-
- eval {my $version = $CLASS->$method("1_2")};
- like($@, qr/alpha without decimal/,
- "Invalid version format (alpha without decimal)");
-
- eval { $version = $CLASS->$method("1.2b3")};
- like($@, qr/non-numeric data/,
- "Invalid version format (non-numeric data)");
-
- # from here on out capture the warning and test independently
- {
- eval{$version = $CLASS->$method("99 and 44/100 pure")};
-
- like($@, qr/non-numeric data/,
- "Invalid version format (non-numeric data)");
-
- eval{$version = $CLASS->$method("something")};
- like($@, qr/non-numeric data/,
- "Invalid version format (non-numeric data)");
-
- # reset the test object to something reasonable
- $version = $CLASS->$method("1.2.3");
-
- # Test boolean operator
- ok ($version, 'boolean');
-
- # Test class membership
- isa_ok ( $version, $CLASS );
-
- # Test comparison operators with self
- diag "tests with self" unless $ENV{PERL_CORE};
- is ( $version <=> $version, 0, '$version <=> $version == 0' );
- ok ( $version == $version, '$version == $version' );
-
- # Test Numeric Comparison operators
- # test first with non-object
- $version = $CLASS->$method("5.006.001");
- $new_version = "5.8.0";
- diag "numeric tests with non-objects" unless $ENV{PERL_CORE};
- ok ( $version == $version, '$version == $version' );
- ok ( $version < $new_version, '$version < $new_version' );
- ok ( $new_version > $version, '$new_version > $version' );
- ok ( $version != $new_version, '$version != $new_version' );
-
- # now test with existing object
- $new_version = $CLASS->$method($new_version);
- diag "numeric tests with objects" unless $ENV{PERL_CORE};
- ok ( $version < $new_version, '$version < $new_version' );
- ok ( $new_version > $version, '$new_version > $version' );
- ok ( $version != $new_version, '$version != $new_version' );
-
- # now test with actual numbers
- diag "numeric tests with numbers" unless $ENV{PERL_CORE};
- ok ( $version->numify() == 5.006001, '$version->numify() == 5.006001' );
- ok ( $version->numify() <= 5.006001, '$version->numify() <= 5.006001' );
- ok ( $version->numify() < 5.008, '$version->numify() < 5.008' );
- #ok ( $version->numify() > v5.005_02, '$version->numify() > 5.005_02' );
-
- # test with long decimals
- diag "Tests with extended decimal versions" unless $ENV{PERL_CORE};
- $version = $CLASS->$method(1.002003);
- ok ( $version == "1.2.3", '$version == "1.2.3"');
- ok ( $version->numify == 1.002003, '$version->numify == 1.002003');
- $version = $CLASS->$method("2002.09.30.1");
- ok ( $version == "2002.9.30.1",'$version == 2002.9.30.1');
- ok ( $version->numify == 2002.009030001,
- '$version->numify == 2002.009030001');
-
- # now test with alpha version form with string
- $version = $CLASS->$method("1.2.3");
- $new_version = "1.2.3_4";
- diag "numeric tests with alpha-style non-objects" unless $ENV{PERL_CORE};
- ok ( $version < $new_version, '$version < $new_version' );
- ok ( $new_version > $version, '$new_version > $version' );
- ok ( $version != $new_version, '$version != $new_version' );
-
- $version = $CLASS->$method("1.2.4");
- diag "numeric tests with alpha-style non-objects"
- unless $ENV{PERL_CORE};
- ok ( $version > $new_version, '$version > $new_version' );
- ok ( $new_version < $version, '$new_version < $version' );
- ok ( $version != $new_version, '$version != $new_version' );
-
- # now test with alpha version form with object
- $version = $CLASS->$method("1.2.3");
- $new_version = $CLASS->$method("1.2.3_4");
- diag "tests with alpha-style objects" unless $ENV{PERL_CORE};
- ok ( $version < $new_version, '$version < $new_version' );
- ok ( $new_version > $version, '$new_version > $version' );
- ok ( $version != $new_version, '$version != $new_version' );
- ok ( !$version->is_alpha, '!$version->is_alpha');
- ok ( $new_version->is_alpha, '$new_version->is_alpha');
-
- $version = $CLASS->$method("1.2.4");
- diag "tests with alpha-style objects" unless $ENV{PERL_CORE};
- ok ( $version > $new_version, '$version > $new_version' );
- ok ( $new_version < $version, '$new_version < $version' );
- ok ( $version != $new_version, '$version != $new_version' );
-
- $version = $CLASS->$method("1.2.3.4");
- $new_version = $CLASS->$method("1.2.3_4");
- diag "tests with alpha-style objects with same subversion"
- unless $ENV{PERL_CORE};
- ok ( $version > $new_version, '$version > $new_version' );
- ok ( $new_version < $version, '$new_version < $version' );
- ok ( $version != $new_version, '$version != $new_version' );
-
- diag "test implicit [in]equality" unless $ENV{PERL_CORE};
- $version = $CLASS->$method("v1.2.3");
- $new_version = $CLASS->$method("1.2.3.0");
- ok ( $version == $new_version, '$version == $new_version' );
- $new_version = $CLASS->$method("1.2.3_0");
- ok ( $version == $new_version, '$version == $new_version' );
- $new_version = $CLASS->$method("1.2.3.1");
- ok ( $version < $new_version, '$version < $new_version' );
- $new_version = $CLASS->$method("1.2.3_1");
- ok ( $version < $new_version, '$version < $new_version' );
- $new_version = $CLASS->$method("1.1.999");
- ok ( $version > $new_version, '$version > $new_version' );
-
- # that which is not expressly permitted is forbidden
- diag "forbidden operations" unless $ENV{PERL_CORE};
- ok ( !eval { ++$version }, "noop ++" );
- ok ( !eval { --$version }, "noop --" );
- ok ( !eval { $version/1 }, "noop /" );
- ok ( !eval { $version*3 }, "noop *" );
- ok ( !eval { abs($version) }, "noop abs" );
-
-SKIP: {
- skip "version require'd instead of use'd, cannot test $qv_declare", 3
- unless defined $qv_declare;
- # test the $qv_declare() sub
- diag "testing $qv_declare" unless $ENV{PERL_CORE};
- $version = $CLASS->$qv_declare("1.2");
- is ( "$version", "v1.2", $qv_declare.'("1.2") == "1.2.0"' );
- $version = $CLASS->$qv_declare(1.2);
- is ( "$version", "v1.2", $qv_declare.'(1.2) == "1.2.0"' );
- isa_ok( $CLASS->$qv_declare('5.008'), $CLASS );
-}
-
- # test creation from existing version object
- diag "create new from existing version" unless $ENV{PERL_CORE};
- ok (eval {$new_version = $CLASS->$method($version)},
- "new from existing object");
- ok ($new_version == $version, "class->$method($version) identical");
- $new_version = $version->$method(0);
- isa_ok ($new_version, $CLASS );
- is ($new_version, "0", "version->$method() doesn't clone");
- $new_version = $version->$method("1.2.3");
- is ($new_version, "1.2.3" , '$version->$method("1.2.3") works too');
-
- # test the CVS revision mode
- diag "testing CVS Revision" unless $ENV{PERL_CORE};
- $version = new $CLASS qw$Revision: 1.1.1.3 $;
- ok ( $version == "1.2.0", 'qw$Revision: 1.1.1.3 $ == 1.2.0' );
- $version = new $CLASS qw$Revision: 1.1.1.3 $;
- ok ( $version == "1.2.3.4", 'qw$Revision: 1.1.1.3 $ == 1.2.3.4' );
-
- # test the CPAN style reduced significant digit form
- diag "testing CPAN-style versions" unless $ENV{PERL_CORE};
- $version = $CLASS->$method("1.23_01");
- is ( "$version" , "1.23_01", "CPAN-style alpha version" );
- ok ( $version > 1.23, "1.23_01 > 1.23");
- ok ( $version < 1.24, "1.23_01 < 1.24");
-
- # test reformed UNIVERSAL::VERSION
- diag "Replacement UNIVERSAL::VERSION tests" unless $ENV{PERL_CORE};
-
- my $error_regex = $] < 5.006
- ? 'version \d required'
- : 'does not define \$t.{7}::VERSION';
-
- {
- my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
- (my $package = basename($filename)) =~ s/\.pm$//;
- print $fh "package $package;\n\$$package\::VERSION=0.58;\n1;\n";
- close $fh;
-
- $version = 0.58;
- eval "use lib '.'; use $package $version";
- unlike($@, qr/$package version $version/,
- 'Replacement eval works with exact version');
-
- # test as class method
- $new_version = $package->VERSION;
- cmp_ok($new_version,'==',$version, "Called as class method");
-
- eval "print Completely::Unknown::Module->VERSION";
- if ( $] < 5.008 ) {
- unlike($@, qr/$error_regex/,
- "Don't freak if the module doesn't even exist");
- }
- else {
- unlike($@, qr/defines neither package nor VERSION/,
- "Don't freak if the module doesn't even exist");
- }
-
- # this should fail even with old UNIVERSAL::VERSION
- $version += 0.01;
- eval "use lib '.'; use $package $version";
- like($@, qr/$package version $version/,
- 'Replacement eval works with incremented version');
-
- $version =~ s/0+$//; #convert to string and remove trailing 0's
- chop($version); # shorten by 1 digit, should still succeed
- eval "use lib '.'; use $package $version";
- unlike($@, qr/$package version $version/,
- 'Replacement eval works with single digit');
-
- # this would fail with old UNIVERSAL::VERSION
- $version += 0.1;
- eval "use lib '.'; use $package $version";
- like($@, qr/$package version $version/,
- 'Replacement eval works with incremented digit');
- unlink $filename;
- }
-
- { # dummy up some variously broken modules for testing
- my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
- (my $package = basename($filename)) =~ s/\.pm$//;
- print $fh "1;\n";
- close $fh;
-
- eval "use lib '.'; use $package 3;";
- if ( $] < 5.008 ) {
- like($@, qr/$error_regex/,
- 'Replacement handles modules without package or VERSION');
- }
- else {
- like($@, qr/defines neither package nor VERSION/,
- 'Replacement handles modules without package or VERSION');
- }
- eval "use lib '.'; use $package; \$version = $package->VERSION";
- unlike ($@, qr/$error_regex/,
- 'Replacement handles modules without package or VERSION');
- ok (!defined($version), "Called as class method");
- unlink $filename;
- }
-
- { # dummy up some variously broken modules for testing
- my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
- (my $package = basename($filename)) =~ s/\.pm$//;
- print $fh "package $package;\n#look ma no VERSION\n1;\n";
- close $fh;
- eval "use lib '.'; use $package 3;";
- like ($@, qr/$error_regex/,
- 'Replacement handles modules without VERSION');
- eval "use lib '.'; use $package; print $package->VERSION";
- unlike ($@, qr/$error_regex/,
- 'Replacement handles modules without VERSION');
- unlink $filename;
- }
-
- { # dummy up some variously broken modules for testing
- my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
- (my $package = basename($filename)) =~ s/\.pm$//;
- print $fh "package $package;\n\@VERSION = ();\n1;\n";
- close $fh;
- eval "use lib '.'; use $package 3;";
- like ($@, qr/$error_regex/,
- 'Replacement handles modules without VERSION');
- eval "use lib '.'; use $package; print $package->VERSION";
- unlike ($@, qr/$error_regex/,
- 'Replacement handles modules without VERSION');
- unlink $filename;
- }
-
-SKIP: {
- skip 'Cannot test bare v-strings with Perl < 5.6.0', 4
- if $] < 5.006_000;
- diag "Tests with v-strings" unless $ENV{PERL_CORE};
- $version = $CLASS->$method(1.2.3);
- ok("$version" eq "v1.2.3", '"$version" eq 1.2.3');
- $version = $CLASS->$method(1.0.0);
- $new_version = $CLASS->$method(1);
- ok($version == $new_version, '$version == $new_version');
- skip "version require'd instead of use'd, cannot test declare", 1
- unless defined $qv_declare;
- $version = &$qv_declare(1.2.3);
- ok("$version" eq "v1.2.3", 'v-string initialized $qv_declare()');
- }
-
-SKIP: {
- skip 'Cannot test bare alpha v-strings with Perl < 5.8.1', 2
- if $] lt 5.008_001;
- diag "Tests with bare alpha v-strings" unless $ENV{PERL_CORE};
- $version = $CLASS->$method(v1.2.3_4);
- is($version, "v1.2.3_4", '"$version" eq "v1.2.3_4"');
- $version = $CLASS->$method(eval "v1.2.3_4");
- is($version, "v1.2.3_4", '"$version" eq "v1.2.3_4" (from eval)');
- }
-
- diag "Tests with real-world (malformed) data" unless $ENV{PERL_CORE};
-
- # trailing zero testing (reported by Andreas Koenig).
- $version = $CLASS->$method("1");
- ok($version->numify eq "1.000", "trailing zeros preserved");
- $version = $CLASS->$method("1.0");
- ok($version->numify eq "1.000", "trailing zeros preserved");
- $version = $CLASS->$method("1.0.0");
- ok($version->numify eq "1.000000", "trailing zeros preserved");
- $version = $CLASS->$method("1.0.0.0");
- ok($version->numify eq "1.000000000", "trailing zeros preserved");
-
- # leading zero testing (reported by Andreas Koenig).
- $version = $CLASS->$method(".7");
- ok($version->numify eq "0.700", "leading zero inferred");
-
- # leading space testing (reported by Andreas Koenig).
- $version = $CLASS->$method(" 1.7");
- ok($version->numify eq "1.700", "leading space ignored");
-
- # RT 19517 - deal with undef and 'undef' initialization
- ok("$version" ne 'undef', "Undef version comparison #1");
- ok("$version" ne undef, "Undef version comparison #2");
- $version = $CLASS->$method('undef');
- unlike($warning, qr/^Version string 'undef' contains invalid data/,
- "Version string 'undef'");
-
- $version = $CLASS->$method(undef);
- like($warning, qr/^Use of uninitialized value/,
- "Version string 'undef'");
- ok($version == 'undef', "Undef version comparison #3");
- ok($version == undef, "Undef version comparison #4");
- eval "\$version = \$CLASS->$method()"; # no parameter at all
- unlike($@, qr/^Bizarre copy of CODE/, "No initializer at all");
- ok($version == 'undef', "Undef version comparison #5");
- ok($version == undef, "Undef version comparison #6");
-
- $version = $CLASS->$method(0.000001);
- unlike($warning, qr/^Version string '1e-06' contains invalid data/,
- "Very small version objects");
- }
-
-SKIP: {
- my $warning;
- local $SIG{__WARN__} = sub { $warning = $_[0] };
- # dummy up a legal module for testing RT#19017
- my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
- (my $package = basename($filename)) =~ s/\.pm$//;
- print $fh <<"EOF";
-package $package;
-use $CLASS; \$VERSION = ${CLASS}->new('0.0.4');
-1;
-EOF
- close $fh;
-
- eval "use lib '.'; use $package 0.000008;";
- like ($@, qr/^$package version 0.000008 required/,
- "Make sure very small versions don't freak");
- eval "use lib '.'; use $package 1;";
- like ($@, qr/^$package version 1 required/,
- "Comparing vs. version with no decimal");
- eval "use lib '.'; use $package 1.;";
- like ($@, qr/^$package version 1 required/,
- "Comparing vs. version with decimal only");
- if ( $] < 5.006_000 ) {
- skip 'Cannot "use" extended versions with Perl < 5.6.0', 3;
- }
- eval "use lib '.'; use $package v0.0.8;";
- my $regex = "^$package version v0.0.8 required";
- like ($@, qr/$regex/, "Make sure very small versions don't freak");
-
- $regex =~ s/8/4/; # set for second test
- eval "use lib '.'; use $package v0.0.4;";
- unlike($@, qr/$regex/, 'Succeed - required == VERSION');
- cmp_ok ( $package->VERSION, 'eq', '0.0.4', 'No undef warnings' );
- unlink $filename;
- }
-
-SKIP: {
- skip 'Cannot test "use base qw(version)" when require is used', 3
- unless defined $qv_declare;
- my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
- (my $package = basename($filename)) =~ s/\.pm$//;
- print $fh <<"EOF";
-package $package;
-use base qw(version);
-1;
-EOF
- close $fh;
- # need to eliminate any other $qv_declare()'s
- undef *{"main\::$qv_declare"};
- ok(!defined(&{"main\::$qv_declare"}), "make sure we cleared $qv_declare() properly");
- eval "use lib '.'; use $package qw/declare qv/;";
- ok(defined(&{"main\::$qv_declare"}), "make sure we exported $qv_declare() properly");
- isa_ok( &$qv_declare(1.2), $package);
- unlink $filename;
-}
-
-SKIP: {
- if ( $] < 5.006_000 ) {
- skip 'Cannot "use" extended versions with Perl < 5.6.0', 3;
- }
- my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
- (my $package = basename($filename)) =~ s/\.pm$//;
- print $fh <<"EOF";
-package $package;
-\$VERSION = 1.0;
-1;
-EOF
- close $fh;
- eval "use lib '.'; use $package 1.001;";
- like ($@, qr/^$package version 1.001 required/,
- "User typed numeric so we error with numeric");
- eval "use lib '.'; use $package v1.1.0;";
- like ($@, qr/^$package version v1.1.0 required/,
- "User typed extended so we error with extended");
- unlink $filename;
- }
-
-SKIP: {
- # test locale handling
- my $warning;
- local $SIG{__WARN__} = sub { $warning = $_[0] };
-
-$DB::single = 1;
- my $v = eval { $CLASS->$method('1,7') };
-# is( $@, "", 'Directly test comma as decimal compliance');
-
- my $ver = 1.23; # has to be floating point number
- my $orig_loc = setlocale( LC_ALL );
- my $loc;
- while (<DATA>) {
- chomp;
- $loc = setlocale( LC_ALL, $_);
- last if localeconv()->{decimal_point} eq ',';
- }
- skip 'Cannot test locale handling without a comma locale', 4
- unless ( $loc and ($ver eq '1,23') );
-
- diag ("Testing locale handling with $loc") unless $ENV{PERL_CORE};
-
- $v = $CLASS->$method($ver);
- unlike($warning, qr/Version string '1,23' contains invalid data/,
- "Process locale-dependent floating point");
- is ($v, "1.23", "Locale doesn't apply to version objects");
- ok ($v == $ver, "Comparison to locale floating point");
-
- setlocale( LC_ALL, $orig_loc); # reset this before possible skip
- skip 'Cannot test RT#46921 with Perl < 5.008', 1
- if ($] < 5.008);
- skip 'Cannot test RT#46921 with pure Perl module', 1
- if exists $INC{'version/vpp.pm'};
- my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
- (my $package = basename($filename)) =~ s/\.pm$//;
- print $fh <<"EOF";
-package $package;
-use POSIX qw(locale_h);
-\$^W = 1;
-use $CLASS;
-setlocale (LC_ALL, '$loc');
-use $CLASS ;
-eval "use Socket 1.7";
-setlocale( LC_ALL, '$orig_loc');
-1;
-EOF
- close $fh;
-
- eval "use lib '.'; use $package;";
- unlike($warning, qr"Version string '1,7' contains invalid data",
- 'Handle locale action-at-a-distance');
- }
-
- eval 'my $v = $CLASS->$method("1._1");';
- unlike($@, qr/^Invalid version format \(alpha with zero width\)/,
- "Invalid version format 1._1");
-
- {
- my $warning;
- local $SIG{__WARN__} = sub { $warning = $_[0] };
- eval 'my $v = $CLASS->$method(~0);';
- unlike($@, qr/Integer overflow in version/, "Too large version");
- like($warning, qr/Integer overflow in version/, "Too large version");
- }
-
- {
- # http://rt.cpan.org/Public/Bug/Display.html?id=30004
- my $v1 = $CLASS->$method("v0.1_1");
- (my $alpha1 = Dumper($v1)) =~ s/.+'alpha' => ([^,]+),.+/$1/ms;
- my $v2 = $CLASS->$method($v1);
- (my $alpha2 = Dumper($v2)) =~ s/.+'alpha' => ([^,]+),.+/$1/ms;
- is $alpha2, $alpha1, "Don't fall for Data::Dumper's tricks";
- }
-
- {
- # http://rt.perl.org/rt3/Ticket/Display.html?id=56606
- my $badv = bless { version => [1,2,3] }, "version";
- is $badv, '1.002003', "Deal with badly serialized versions from YAML";
- my $badv2 = bless { qv => 1, version => [1,2,3] }, "version";
- is $badv2, 'v1.2.3', "Deal with badly serialized versions from YAML ";
- }
-SKIP: {
- if ( $] < 5.006_000 ) {
- skip 'No v-string support at all < 5.6.0', 2;
- }
- # https://rt.cpan.org/Ticket/Display.html?id=49348
- my $v = $CLASS->$method("420");
- is "$v", "420", 'Correctly guesses this is not a v-string';
- $v = $CLASS->$method(4.2.0);
- is "$v", 'v4.2.0', 'Correctly guess that this is a v-string';
- }
-SKIP: {
- if ( $] < 5.006_000 ) {
- skip 'No v-string support at all < 5.6.0', 4;
- }
- # https://rt.cpan.org/Ticket/Display.html?id=50347
- # Check that the qv() implementation does not change
-
- ok $CLASS->$method(1.2.3) < $CLASS->$method(1.2.3.1), 'Compare 3 and 4 digit v-strings' ;
- ok $CLASS->$method(v1.2.3) < $CLASS->$method(v1.2.3.1), 'Compare 3 and 4 digit v-strings, leaving v';
- ok $CLASS->$method("1.2.3") < $CLASS->$method("1.2.3.1"), 'Compare 3 and 4 digit v-strings, quoted';
- ok $CLASS->$method("v1.2.3") < $CLASS->$method("v1.2.3.1"), 'Compare 3 and 4 digit v-strings, quoted leading v';
- }
-}
-
-1;
-
-__DATA__
-af_ZA
-af_ZA.utf8
-an_ES
-an_ES.utf8
-az_AZ.utf8
-be_BY
-be_BY.utf8
-bg_BG
-bg_BG.utf8
-br_FR
-br_FR at euro
-br_FR.utf8
-bs_BA
-bs_BA.utf8
-ca_ES
-ca_ES at euro
-ca_ES.utf8
-cs_CZ
-cs_CZ.utf8
-da_DK
-da_DK.utf8
-de_AT
-de_AT at euro
-de_AT.utf8
-de_BE
-de_BE at euro
-de_BE.utf8
-de_DE
-de_DE at euro
-de_DE.utf8
-de_LU
-de_LU at euro
-de_LU.utf8
-el_GR
-el_GR.utf8
-en_DK
-en_DK.utf8
-es_AR
-es_AR.utf8
-es_BO
-es_BO.utf8
-es_CL
-es_CL.utf8
-es_CO
-es_CO.utf8
-es_EC
-es_EC.utf8
-es_ES
-es_ES at euro
-es_ES.utf8
-es_PY
-es_PY.utf8
-es_UY
-es_UY.utf8
-es_VE
-es_VE.utf8
-et_EE
-et_EE.iso885915
-et_EE.utf8
-eu_ES
-eu_ES at euro
-eu_ES.utf8
-fi_FI
-fi_FI at euro
-fi_FI.utf8
-fo_FO
-fo_FO.utf8
-fr_BE
-fr_BE at euro
-fr_BE.utf8
-fr_CA
-fr_CA.utf8
-fr_CH
-fr_CH.utf8
-fr_FR
-fr_FR at euro
-fr_FR.utf8
-fr_LU
-fr_LU at euro
-fr_LU.utf8
-gl_ES
-gl_ES at euro
-gl_ES.utf8
-hr_HR
-hr_HR.utf8
-hu_HU
-hu_HU.utf8
-id_ID
-id_ID.utf8
-is_IS
-is_IS.utf8
-it_CH
-it_CH.utf8
-it_IT
-it_IT at euro
-it_IT.utf8
-ka_GE
-ka_GE.utf8
-kk_KZ
-kk_KZ.utf8
-kl_GL
-kl_GL.utf8
-lt_LT
-lt_LT.utf8
-lv_LV
-lv_LV.utf8
-mk_MK
-mk_MK.utf8
-mn_MN
-mn_MN.utf8
-nb_NO
-nb_NO.utf8
-nl_BE
-nl_BE at euro
-nl_BE.utf8
-nl_NL
-nl_NL at euro
-nl_NL.utf8
-nn_NO
-nn_NO.utf8
-no_NO
-no_NO.utf8
-oc_FR
-oc_FR.utf8
-pl_PL
-pl_PL.utf8
-pt_BR
-pt_BR.utf8
-pt_PT
-pt_PT at euro
-pt_PT.utf8
-ro_RO
-ro_RO.utf8
-ru_RU
-ru_RU.koi8r
-ru_RU.utf8
-ru_UA
-ru_UA.utf8
-se_NO
-se_NO.utf8
-sh_YU
-sh_YU.utf8
-sk_SK
-sk_SK.utf8
-sl_SI
-sl_SI.utf8
-sq_AL
-sq_AL.utf8
-sr_CS
-sr_CS.utf8
-sv_FI
-sv_FI at euro
-sv_FI.utf8
-sv_SE
-sv_SE.iso885915
-sv_SE.utf8
-tg_TJ
-tg_TJ.utf8
-tr_TR
-tr_TR.utf8
-tt_RU.utf8
-uk_UA
-uk_UA.utf8
-vi_VN
-vi_VN.tcvn
-wa_BE
-wa_BE at euro
-wa_BE.utf8
-
Deleted: trunk/contrib/perl/pod/checkpods.PL
===================================================================
--- trunk/contrib/perl/pod/checkpods.PL 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/checkpods.PL 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,85 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-# From roderick at gate.netThu Sep 5 17:19:30 1996
-# Date: Thu, 05 Sep 1996 00:11:22 -0400
-# From: Roderick Schertler <roderick at gate.net>
-# To: perl5-porters at africa.nicoh.com
-# Subject: POD lines with only spaces
-#
-# There are some places in the documentation where a POD directive is
-# ignored because the line before it contains whitespace (and so the
-# directive doesn't start a paragraph). This patch adds a way to check
-# for these to the pod Makefile (though it isn't made part of the build
-# process, which would be a good idea), and fixes those places where the
-# problem currently exists.
-#
-# Version 1.00 Original.
-# Version 1.01 Andy Dougherty <doughera at lafayette.edu>
-# Trivial modifications to output format for easier auto-parsing
-# Broke it out as a separate function to avoid nasty
-# Make/Shell/Perl quoting problems, and also to make it easier
-# to grow. Someone will probably want to rewrite in terms of
-# some sort of Pod::Checker module. Or something. Consider this
-# a placeholder for the future.
-# Version 1.02 Roderick Schertler <roderick at argon.org>
-# Check for pod directives following any kind of unempty line, not
-# just lines of whitespace.
-
- at directive = qw(head1 head2 item over back cut pod for begin end);
- at directive{@directive} = (1) x @directive;
-
-$exit = $last_unempty = 0;
-while (<>) {
- s/(\012|\015\012|\015)$//;
- if (/^=(\S+)/ && $directive{$1} && $last_unempty) {
- printf "%s: line %5d, no blank line preceding directive =%s\n",
- $ARGV, $., $1;
- $exit = 1;
- }
- $last_unempty = ($_ ne '');
- if (eof) {
- close(ARGV);
- $last_unempty = 0;
- }
-}
-exit $exit
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
Deleted: trunk/contrib/perl/pod/perl5110delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl5110delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl5110delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1624 +0,0 @@
-=encoding utf8
-
-=head1 NAME
-
-perl5110delta - what is new for perl v5.11.0
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.10.0 release and
-the 5.11.0 development release.
-
-=head1 Incompatible Changes
-
-=head2 Unicode interpretation of \w, \d, \s, and the POSIX character classes redefined.
-
-Previous versions of Perl tried to map POSIX style character class definitions onto
-Unicode property names so that patterns would "dwim" when matches were made against latin-1 or
-unicode strings. This proved to be a mistake, breaking character class negation, causing
-forward compatibility problems (as Unicode keeps updating their property definitions and adding
-new characters), and other problems.
-
-Therefore we have now defined a new set of artificial "unicode" property names which will be
-used to do unicode matching of patterns using POSIX style character classes and perl short-form
-escape character classes like \w and \d.
-
-The key change here is that \d will no longer match every digit in the unicode standard
-(there are thousands) nor will \w match every word character in the standard, instead they
-will match precisely their POSIX or Perl definition.
-
-Those needing to match based on Unicode properties can continue to do so by using the \p{} syntax
-to match whichever property they like, including the new artificial definitions.
-
-B<NOTE:> This is a backwards incompatible no-warning change in behaviour. If you are upgrading
-and you process large volumes of text look for POSIX and Perl style character classes and
-change them to the relevant property name (by removing the word 'Posix' from the current name).
-
-The following table maps the POSIX character class names, the escapes and the old and new
-Unicode property mappings:
-
- POSIX Esc Class New-Property ! Old-Property
- ----------------------------------------------+-------------
- alnum [0-9A-Za-z] IsPosixAlnum ! IsAlnum
- alpha [A-Za-z] IsPosixAlpha ! IsAlpha
- ascii [\000-\177] IsASCII = IsASCII
- blank [\011 ] IsPosixBlank !
- cntrl [\0-\37\177] IsPosixCntrl ! IsCntrl
- digit \d [0-9] IsPosixDigit ! IsDigit
- graph [!-~] IsPosixGraph ! IsGraph
- lower [a-z] IsPosixLower ! IsLower
- print [ -~] IsPosixPrint ! IsPrint
- punct [!-/:-@[-`{-~] IsPosixPunct ! IsPunct
- space [\11-\15 ] IsPosixSpace ! IsSpace
- \s [\11\12\14\15 ] IsPerlSpace ! IsSpacePerl
- upper [A-Z] IsPosixUpper ! IsUpper
- word \w [0-9A-Z_a-z] IsPerlWord ! IsWord
- xdigit [0-9A-Fa-f] IsXDigit = IsXDigit
-
-If you wish to build perl with the old mapping you may do so by setting
-
- #define PERL_LEGACY_UNICODE_CHARCLASS_MAPPINGS 1
-
-in regcomp.h, and then setting
-
- PERL_TEST_LEGACY_POSIX_CC
-
-to true your environment when testing.
-
-
-=head2 @INC reorganization
-
-In @INC, ARCHLIB and PRIVLIB now occur after after the current version's
-site_perl and vendor_perl.
-
-=head2 Switch statement changes
-
-The handling of complex expressions by the C<given>/C<when> switch
-statement has been enhanced. These enhancements are also available in
-5.10.1 and subsequent 5.10 releases. There are two new cases where C<when> now
-interprets its argument as a boolean, instead of an expression to be used
-in a smart match:
-
-=over 4
-
-=item flip-flop operators
-
-The C<..> and C<...> flip-flop operators are now evaluated in boolean
-context, following their usual semantics; see L<perlop/"Range Operators">.
-
-Note that, as in perl 5.10.0, C<when (1..10)> will not work to test
-whether a given value is an integer between 1 and 10; you should use
-C<when ([1..10])> instead (note the array reference).
-
-However, contrary to 5.10.0, evaluating the flip-flop operators in boolean
-context ensures it can now be useful in a C<when()>, notably for
-implementing bistable conditions, like in:
-
- when (/^=begin/ .. /^=end/) {
- # do something
- }
-
-=item defined-or operator
-
-A compound expression involving the defined-or operator, as in
-C<when (expr1 // expr2)>, will be treated as boolean if the first
-expression is boolean. (This just extends the existing rule that applies
-to the regular or operator, as in C<when (expr1 || expr2)>.)
-
-=back
-
-The next section details more changes brought to the semantics to
-the smart match operator, that naturally also modify the behaviour
-of the switch statements where smart matching is implicitly used.
-These changers were also made for the 5.10.1 release, and will remain in
-subsequent 5.10 releases.
-
-=head2 Smart match changes
-
-=head3 Changes to type-based dispatch
-
-The smart match operator C<~~> is no longer commutative. The behaviour of
-a smart match now depends primarily on the type of its right hand
-argument. Moreover, its semantics have been adjusted for greater
-consistency or usefulness in several cases. While the general backwards
-compatibility is maintained, several changes must be noted:
-
-=over 4
-
-=item *
-
-Code references with an empty prototype are no longer treated specially.
-They are passed an argument like the other code references (even if they
-choose to ignore it).
-
-=item *
-
-C<%hash ~~ sub {}> and C<@array ~~ sub {}> now test that the subroutine
-returns a true value for each key of the hash (or element of the
-array), instead of passing the whole hash or array as a reference to
-the subroutine.
-
-=item *
-
-Due to the commutativity breakage, code references are no longer
-treated specially when appearing on the left of the C<~~> operator,
-but like any vulgar scalar.
-
-=item *
-
-C<undef ~~ %hash> is always false (since C<undef> can't be a key in a
-hash). No implicit conversion to C<""> is done (as was the case in perl
-5.10.0).
-
-=item *
-
-C<$scalar ~~ @array> now always distributes the smart match across the
-elements of the array. It's true if one element in @array verifies
-C<$scalar ~~ $element>. This is a generalization of the old behaviour
-that tested whether the array contained the scalar.
-
-=back
-
-The full dispatch table for the smart match operator is given in
-L<perlsyn/"Smart matching in detail">.
-
-=head3 Smart match and overloading
-
-According to the rule of dispatch based on the rightmost argument type,
-when an object overloading C<~~> appears on the right side of the
-operator, the overload routine will always be called (with a 3rd argument
-set to a true value, see L<overload>.) However, when the object will
-appear on the left, the overload routine will be called only when the
-rightmost argument is a simple scalar. This way distributivity of smart match
-across arrays is not broken, as well as the other behaviours with complex
-types (coderefs, hashes, regexes). Thus, writers of overloading routines
-for smart match mostly need to worry only with comparing against a scalar,
-and possibly with stringification overloading; the other common cases
-will be automatically handled consistently.
-
-C<~~> will now refuse to work on objects that do not overload it (in order
-to avoid relying on the object's underlying structure). (However, if the
-object overloads the stringification or the numification operators, and
-if overload fallback is active, it will be used instead, as usual.)
-
-=head2 Labels can't be keywords
-
-Labels used as targets for the C<goto>, C<last>, C<next> or C<redo>
-statements cannot be keywords anymore. This restriction will prevent
-potential confusion between the C<goto LABEL> and C<goto EXPR> syntaxes:
-for example, a statement like C<goto print> would jump to a label whose
-name would be the return value of C<print()>, (usually 1), instead of a
-label named C<print>. Moreover, the other control flow statements
-would just ignore any keyword passed to them as a label name. Since
-such labels cannot be defined anymore, this kind of error will be
-avoided.
-
-=head2 Other incompatible changes
-
-=over 4
-
-=item *
-
-The semantics of C<use feature :5.10*> have changed slightly.
-See L<"Modules and Pragmata"> for more information.
-
-=item *
-
-It is now a run-time error to use the smart match operator C<~~>
-with an object that has no overload defined for it. (This way
-C<~~> will not break encapsulation by matching against the
-object's internal representation as a reference.)
-
-=item *
-
-The version control system used for the development of the perl
-interpreter has been switched from Perforce to git. This is mainly an
-internal issue that only affects people actively working on the perl core;
-but it may have minor external visibility, for example in some of details
-of the output of C<perl -V>. See L<perlrepository> for more information.
-
-=item *
-
-The internal structure of the C<ext/> directory in the perl source has
-been reorganised. In general, a module C<Foo::Bar> whose source was
-stored under F<ext/Foo/Bar/> is now located under F<ext/Foo-Bar/>. Also,
-nearly all dual-life modules have been moved from F<lib/> to F<ext/>. This
-is purely a source tarball change, and should make no difference to the
-compilation or installation of perl, unless you have a very customised build
-process that explicitly relies on this structure, or which hard-codes the
-C<nonxs_ext> F<Configure> parameter. Specifically, this change does not by
-default alter the location of any files in the final installation.
-
-=item *
-
-As part of the C<Test::Harness> 2.x to 3.x upgrade, the experimental
-C<Test::Harness::Straps> module has been removed.
-See L</"Updated Modules"> for more details.
-
-=item *
-
-As part of the C<ExtUtils::MakeMaker> upgrade, the
-C<ExtUtils::MakeMaker::bytes> and C<ExtUtils::MakeMaker::vmsish> modules
-have been removed from this distribution.
-
-=item *
-
-C<Module::CoreList> no longer contains the C<%:patchlevel> hash.
-
-=item *
-
-This one is actually a change introduced in 5.10.0, but it was missed
-from that release's perldelta, so it is mentioned here instead.
-
-A bugfix related to the handling of the C</m> modifier and C<qr> resulted
-in a change of behaviour between 5.8.x and 5.10.0:
-
- # matches in 5.8.x, doesn't match in 5.10.0
- $re = qr/^bar/; "foo\nbar" =~ /$re/m;
-
-=item *
-
-C<length undef> now returns undef.
-
-=item *
-
-Unsupported private C API functions are now declared "static" to prevent
-leakage to Perl's public API.
-
-=item *
-
-To support the bootstrapping process, F<miniperl> no longer builds with
-UTF-8 support in the regexp engine.
-
-This allows a build to complete with PERL_UNICODE set and a UTF-8 locale.
-Without this there's a bootstrapping problem, as miniperl can't load the UTF-8
-components of the regexp engine, because they're not yet built.
-
-=item *
-
-F<miniperl>'s @INC is now restricted to just -I..., the split of $ENV{PERL5LIB}, and "."
-
-=item *
-
-A space or a newline is now required after a C<"#line XXX"> directive.
-
-=item *
-
-Tied filehandles now have an additional method EOF which provides the EOF type
-
-=item *
-
-To better match all other flow control statements, C<foreach> may no longer be used as an attribute.
-
-=back
-
-=head1 Core Enhancements
-
-=head2 Unicode Character Database 5.1.0
-
-The copy of the Unicode Character Database included in Perl 5.11.0 has
-been updated to 5.1.0 from 5.0.0. See
-L<http://www.unicode.org/versions/Unicode5.1.0/#Notable_Changes> for the
-notable changes.
-
-=head2 A proper interface for pluggable Method Resolution Orders
-
-As of Perl 5.11.0 there is a new interface for plugging and using method
-resolution orders other than the default (linear depth first search).
-The C3 method resolution order added in 5.10.0 has been re-implemented as
-a plugin, without changing its Perl-space interface. See L<perlmroapi> for
-more information.
-
-=head2 The C<overloading> pragma
-
-This pragma allows you to lexically disable or enable overloading
-for some or all operations. (Yuval Kogman)
-
-=head2 C<\N> regex escape
-
-A new regex escape has been added, C<\N>. It will match any character that
-is not a newline, independently from the presence or absence of the single
-line match modifier C</s>. (If C<\N> is followed by an opening brace and
-by a letter, perl will still assume that a Unicode character name is
-coming, so compatibility is preserved.) (Rafael Garcia-Suarez)
-
-=head2 Implicit strictures
-
-Using the C<use VERSION> syntax with a version number greater or equal
-to 5.11.0 will also lexically enable strictures just like C<use strict>
-would do (in addition to enabling features.) So, the following:
-
- use 5.11.0;
-
-will now imply:
-
- use strict;
- use feature ':5.11';
-
-=head2 Parallel tests
-
-The core distribution can now run its regression tests in parallel on
-Unix-like platforms. Instead of running C<make test>, set C<TEST_JOBS> in
-your environment to the number of tests to run in parallel, and run
-C<make test_harness>. On a Bourne-like shell, this can be done as
-
- TEST_JOBS=3 make test_harness # Run 3 tests in parallel
-
-An environment variable is used, rather than parallel make itself, because
-L<TAP::Harness> needs to be able to schedule individual non-conflicting test
-scripts itself, and there is no standard interface to C<make> utilities to
-interact with their job schedulers.
-
-Note that currently some test scripts may fail when run in parallel (most
-notably C<ext/IO/t/io_dir.t>). If necessary run just the failing scripts
-again sequentially and see if the failures go away.
-
-=head2 The C<...> operator
-
-A new operator, C<...>, nicknamed the Yada Yada operator, has been added.
-It is intended to mark placeholder code, that is not yet implemented.
-See L<perlop/"Yada Yada Operator">. (chromatic)
-
-=head2 DTrace support
-
-Some support for DTrace has been added. See "DTrace support" in F<INSTALL>.
-
-=head2 Support for C<configure_requires> in CPAN module metadata
-
-Both C<CPAN> and C<CPANPLUS> now support the C<configure_requires> keyword
-in the F<META.yml> metadata file included in most recent CPAN distributions.
-This allows distribution authors to specify configuration prerequisites that
-must be installed before running F<Makefile.PL> or F<Build.PL>.
-
-See the documentation for C<ExtUtils::MakeMaker> or C<Module::Build> for more
-on how to specify C<configure_requires> when creating a distribution for CPAN.
-
-=head2 C<each> is now more flexible
-
-The C<each> function can now operate on arrays.
-
-=head2 Y2038 compliance
-
-Perl's core time-related functions are now Y2038 compliant. (With 29
-years to spare!)
-
-=head2 C<$,> flexibility
-
-The variable C<$,> may now be tied.
-
-=head2 // in where clauses
-
-// now behaves like || in when clauses
-
-=head2 Enabling warnings from your shell environment
-
-You can now set C<-W> from the C<PERL5OPT> environment variable
-
-=head2 C<delete local>
-
-C<delete local> now allows you to locally delete a hash entry.
-
-=head2 New support for Abstract namespace sockets
-
-Abstract namespace sockets are Linux-specific socket type that live in
-AF_UNIX family, slightly abusing it to be able to use arbitrary
-character arrays as addresses: They start with nul byte and are not
-terminated by nul byte, but with the length passed to the socket()
-system call.
-
-=head1 Modules and Pragmata
-
-=head2 Dual-lifed modules moved
-
-Dual-lifed modules maintained primarily in the Perl core now live in dist/.
-Dual-lifed modules maintained primarily on CPAN now live in cpan/
-
-In previous releases of Perl, it was customary to enumerate all module
-changes in this section of the C<perldelta> file. From 5.11.0 forward
-only notable updates (such as new or deprecated modules ) will be
-listed in this section. For a complete reference to the versions of
-modules shipped in a given release of perl, please see L<Module::CoreList>.
-
-=head2 New Modules and Pragmata
-
-=over 4
-
-=item C<autodie>
-
-This is a new lexically-scoped alternative for the C<Fatal> module.
-The bundled version is 2.06_01. Note that in this release, using a string
-eval when C<autodie> is in effect can cause the autodie behaviour to leak
-into the surrounding scope. See L<autodie/"BUGS"> for more details.
-
-=item C<Compress::Raw::Bzip2>
-
-This has been added to the core (version 2.020).
-
-=item C<parent>
-
-This pragma establishes an ISA relationship with base classes at compile
-time. It provides the key feature of C<base> without the feature creep.
-
-=item C<Parse::CPAN::Meta>
-
-This has been added to the core (version 1.39).
-
-=back
-
-=head2 Pragmata Changes
-
-=over 4
-
-=item C<overloading>
-
-See L</"The C<overloading> pragma"> above.
-
-=item C<attrs>
-
-The C<attrs> pragma has been removed. It had been marked as deprecated since
-5.6.0.
-
-=item C<charnames>
-
-The Unicode F<NameAliases.txt> database file has been added. This has the
-effect of adding some extra C<\N> character names that formerly wouldn't
-have been recognised; for example, C<"\N{LATIN CAPITAL LETTER GHA}">.
-
-=item C<feature>
-
-The meaning of the C<:5.10> and C<:5.10.X> feature bundles has
-changed slightly. The last component, if any (i.e. C<X>) is simply ignored.
-This is predicated on the assumption that new features will not, in
-general, be added to maintenance releases. So C<:5.10> and C<:5.10.X>
-have identical effect. This is a change to the behaviour documented for
-5.10.0.
-
-=item C<mro>
-
-Upgraded from version 1.00 to 1.01. Performance for single inheritance is 40%
-faster - see L</"Performance Enhancements"> below.
-
-C<mro> is now implemented as an XS extension. The documented interface has not
-changed. Code relying on the implementation detail that some C<mro::>
-methods happened to be available at all times gets to "keep both pieces".
-
-=back
-
-=head2 Updated Modules
-
-=over 4
-
-=item C<ExtUtils::MakeMaker>
-
-Upgraded from version 6.42 to 6.55_02.
-
-Note that C<ExtUtils::MakeMaker::bytes> and C<ExtUtils::MakeMaker::vmsish>
-have been removed from this distribution.
-
-=item C<Test::Harness>
-
-Upgraded from version 2.64 to 3.17.
-
-Note that one side-effect of the 2.x to 3.x upgrade is that the
-experimental C<Test::Harness::Straps> module (and its supporting
-C<Assert>, C<Iterator>, C<Point> and C<Results> modules) have been
-removed. If you still need this, then they are available in the
-(unmaintained) C<Test-Harness-Straps> distribution on CPAN.
-
-=item C<UNIVERSAL>
-
-Upgraded from version 1.04 to 1.05.
-
-C<< UNIVERSAL-E<gt>import() >> is now deprecated.
-
-=back
-
-=head1 Utility Changes
-
-=over 4
-
-=item F<h2ph>
-
-Now looks in C<include-fixed> too, which is a recent addition to gcc's
-search path.
-
-=item F<h2xs>
-
-No longer incorrectly treats enum values like macros (Daniel Burr).
-
-Now handles C++ style constants (C<//>) properly in enums. (A patch from
-Rainer Weikusat was used; Daniel Burr also proposed a similar fix).
-
-=item F<perl5db.pl>
-
-C<LVALUE> subroutines now work under the debugger.
-
-The debugger now correctly handles proxy constant subroutines, and
-subroutine stubs.
-
-=item F<perlbug>
-
-F<perlbug> now uses C<%Module::CoreList::bug_tracker> to print out upstream bug
-tracker URLs.
-
-Where the user names a module that their bug report is about, and we know the
-URL for its upstream bug tracker, provide a message to the user explaining
-that the core copies the CPAN version directly, and provide the URL for
-reporting the bug directly to upstream.
-
-=item F<perlthanks>
-
-Perl 5.11.0 added a new utility F<perlthanks>, which is a variant of
-F<perlbug>, but for sending non-bug-reports to the authors and maintainers
-of Perl. Getting nothing but bug reports can become a bit demoralising:
-we'll see if this changes things.
-
-=back
-
-=head1 New Documentation
-
-=over 4
-
-=item L<perlhaiku>
-
-This contains instructions on how to build perl for the Haiku platform.
-
-=item L<perlmroapi>
-
-This describes the new interface for pluggable Method Resolution Orders.
-
-=item L<perlperf>
-
-This document, by Richard Foley, provides an introduction to the use of
-performance and optimization techniques which can be used with particular
-reference to perl programs.
-
-=item L<perlrepository>
-
-This describes how to access the perl source using the I<git> version
-control system.
-
-=back
-
-=head1 Changes to Existing Documentation
-
-The various large F<Changes*> files (which listed every change made to perl
-over the last 18 years) have been removed, and replaced by a small file,
-also called F<Changes>, which just explains how that same information may
-be extracted from the git version control system.
-
-The file F<Porting/patching.pod> has been deleted, as it mainly described
-interacting with the old Perforce-based repository, which is now obsolete.
-Information still relevant has been moved to L<perlrepository>.
-
-L<perlapi>, L<perlintern>, L<perlmodlib> and L<perltoc> are now all
-generated at build time, rather than being shipped as part of the release.
-
-=over
-
-=item *
-
-Documented -X overloading.
-
-=item *
-
-Documented that C<when()> treats specially most of the filetest operators
-
-=item *
-
-Documented when as a syntax modifier
-
-=item *
-
-Eliminated "Old Perl threads tutorial", which describes 5005 threads.
-
-F<pod/perlthrtut.pod> is the same material reworked for ithreads.
-
-=item *
-
-Correct previous documentation: v-strings are not deprecated
-
-With version objects, we need them to use MODULE VERSION syntax. This
-patch removes the deprecation note.
-
-=item *
-
-Added security contact information to L<perlsec>
-
-=back
-
-=head1 Performance Enhancements
-
-
-=over 4
-
-=item *
-
-A new internal cache means that C<isa()> will often be faster.
-
-=item *
-
-The implementation of C<C3> Method Resolution Order has been optimised -
-linearisation for classes with single inheritance is 40% faster. Performance
-for multiple inheritance is unchanged.
-
-=item *
-
-Under C<use locale>, the locale-relevant information is now cached on
-read-only values, such as the list returned by C<keys %hash>. This makes
-operations such as C<sort keys %hash> in the scope of C<use locale> much
-faster.
-
-=item *
-
-Empty C<DESTROY> methods are no longer called.
-
-=item *
-
-Faster C<Perl_sv_utf8_upgrade()>
-
-=item *
-
-Speed up C<keys> on empty hash
-
-=back
-
-=head1 Installation and Configuration Improvements
-
-=head2 F<ext/> reorganisation
-
-The layout of directories in F<ext> has been revised. Specifically, all
-extensions are now flat, and at the top level, with C</> in pathnames
-replaced by C<->, so that F<ext/Data/Dumper/> is now F<ext/Data-Dumper/>,
-etc. The names of the extensions as specified to F<Configure>, and as
-reported by C<%Config::Config> under the keys C<dynamic_ext>,
-C<known_extensions>, C<nonxs_ext> and C<static_ext> have not changed, and
-still use C</>. Hence this change will not have any affect once perl is
-installed. C<Safe> has been split out from being part of C<Opcode>, and
-C<mro> is now an extension in its own right.
-
-Nearly all dual-life modules have been moved from F<lib> to F<ext>, and will
-now appear as known C<nonxs_ext>. This will made no difference to the
-structure of an installed perl, nor will the modules installed differ,
-unless you run F<Configure> with options to specify an exact list of
-extensions to build. In this case, you will rapidly become aware that you
-need to add to your list, because various modules needed to complete the
-build, such as C<ExtUtils::ParseXS>, have now become extensions, and
-without them the build will fail well before it attempts to run the
-regression tests.
-
-=head2 Configuration improvements
-
-If C<vendorlib> and C<vendorarch> are the same, then they are only added to
-C<@INC> once.
-
-C<$Config{usedevel}> and the C-level C<PERL_USE_DEVEL> are now defined if
-perl is built with C<-Dusedevel>.
-
-F<Configure> will enable use of C<-fstack-protector>, to provide protection
-against stack-smashing attacks, if the compiler supports it.
-
-F<Configure> will now determine the correct prototypes for re-entrant
-functions, and for C<gconvert>, if you are using a C++ compiler rather
-than a C compiler.
-
-On Unix, if you build from a tree containing a git repository, the
-configuration process will note the commit hash you have checked out, for
-display in the output of C<perl -v> and C<perl -V>. Unpushed local commits
-are automatically added to the list of local patches displayed by
-C<perl -V>.
-
-=head2 Compilation improvements
-
-As part of the flattening of F<ext>, all extensions on all platforms are
-built by F<make_ext.pl>. This replaces the Unix-specific
-F<ext/util/make_ext>, VMS-specific F<make_ext.com> and Win32-specific
-F<win32/buildext.pl>.
-
-=head2 Platform Specific Changes
-
-=over 4
-
-=item AIX
-
-Removed F<libbsd> for AIX 5L and 6.1. Only C<flock()> was used from F<libbsd>.
-
-Removed F<libgdbm> for AIX 5L and 6.1. The F<libgdbm> is delivered as an
-optional package with the AIX Toolbox. Unfortunately the 64 bit version
-is broken.
-
-Hints changes mean that AIX 4.2 should work again.
-
-=item Cygwin
-
-On Cygwin we now strip the last number from the DLL. This has been the
-behaviour in the cygwin.com build for years. The hints files have been
-updated.
-
-=item DomainOS
-
-Support for Apollo DomainOS was removed in Perl 5.11.0
-
-=item FreeBSD
-
-The hints files now identify the correct threading libraries on FreeBSD 7
-and later.
-
-=item Irix
-
-We now work around a bizarre preprocessor bug in the Irix 6.5 compiler:
-C<cc -E -> unfortunately goes into K&R mode, but C<cc -E file.c> doesn't.
-
-=item Haiku
-
-Patches from the Haiku maintainers have been merged in. Perl should now
-build on Haiku.
-
-=item MachTen
-
-Support for Tenon Intersystems MachTen Unix layer for MacOS Classic was
-removed in Perl 5.11.0
-
-=item MiNT
-
-Support for Atari MiNT was removed in Perl 5.11.0.
-
-=item MirOS BSD
-
-Perl should now build on MirOS BSD.
-
-=item NetBSD
-
-Hints now supports versions 5.*.
-
-=item Stratus VOS
-
-Various changes from Stratus have been merged in.
-
-=item Symbian
-
-There is now support for Symbian S60 3.2 SDK and S60 5.0 SDK.
-
-=item Win32
-
-Improved message window handling means that C<alarm> and C<kill> messages
-will no longer be dropped under race conditions.
-
-=item VMS
-
-Reads from the in-memory temporary files of C<PerlIO::scalar> used to fail
-if C<$/> was set to a numeric reference (to indicate record-style reads).
-This is now fixed.
-
-VMS now supports C<getgrgid>.
-
-Many improvements and cleanups have been made to the VMS file name handling
-and conversion code.
-
-Enabling the C<PERL_VMS_POSIX_EXIT> logical name now encodes a POSIX exit
-status in a VMS condition value for better interaction with GNV's bash
-shell and other utilities that depend on POSIX exit values. See
-L<perlvms/"$?"> for details.
-
-C<File::Copy> now detects Unix compatibility mode on VMS.
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item *
-
-C<-I> on shebang line now adds directories in front of @INC
-as documented, and as does C<-I> when specified on the command-line.
-
-=item *
-
-C<kill> is now fatal when called on non-numeric process identifiers.
-Previously, an 'undef' process identifier would be interpreted as a request to
-kill process "0", which would terminate the current process group on POSIX
-systems. Since process identifiers are always integers, killing a non-numeric
-process is now fatal.
-
-=item *
-
-5.10.0 inadvertently disabled an optimisation, which caused a measurable
-performance drop in list assignment, such as is often used to assign
-function parameters from C<@_>. The optimisation has been re-instated, and
-the performance regression fixed.
-
-=item *
-
-Fixed memory leak on C<while (1) { map 1, 1 }> [RT #53038].
-
-=item *
-
-Some potential coredumps in PerlIO fixed [RT #57322,54828].
-
-=item *
-
-The debugger now works with lvalue subroutines.
-
-=item *
-
-The debugger's C<m> command was broken on modules that defined constants
-[RT #61222].
-
-=item *
-
-C<crypt> and string complement could return tainted values for untainted
-arguments [RT #59998].
-
-=item *
-
-The C<-i>I<.suffix> command-line switch now recreates the file using
-restricted permissions, before changing its mode to match the original
-file. This eliminates a potential race condition [RT #60904].
-
-=item *
-
-On some Unix systems, the value in C<$?> would not have the top bit set
-(C<$? & 128>) even if the child core dumped.
-
-=item *
-
-Under some circumstances, C<$^R> could incorrectly become undefined
-[RT #57042].
-
-=item *
-
-In the XS API, various hash functions, when passed a pre-computed hash where
-the key is UTF-8, might result in an incorrect lookup.
-
-=item *
-
-XS code including F<XSUB.h> before F<perl.h> gave a compile-time error
-[RT #57176].
-
-=item *
-
-C<< $object-E<gt>isa('Foo') >> would report false if the package C<Foo> didn't
-exist, even if the object's C<@ISA> contained C<Foo>.
-
-=item *
-
-Various bugs in the new-to 5.10.0 mro code, triggered by manipulating
-C<@ISA>, have been found and fixed.
-
-=item *
-
-Bitwise operations on references could crash the interpreter, e.g.
-C<$x=\$y; $x |= "foo"> [RT #54956].
-
-=item *
-
-Patterns including alternation might be sensitive to the internal UTF-8
-representation, e.g.
-
- my $byte = chr(192);
- my $utf8 = chr(192); utf8::upgrade($utf8);
- $utf8 =~ /$byte|X}/i; # failed in 5.10.0
-
-=item *
-
-Within UTF8-encoded Perl source files (i.e. where C<use utf8> is in
-effect), double-quoted literal strings could be corrupted where a C<\xNN>,
-C<\0NNN> or C<\N{}> is followed by a literal character with ordinal value
-greater than 255 [RT #59908].
-
-=item *
-
-C<B::Deparse> failed to correctly deparse various constructs:
-C<readpipe STRING> [RT #62428], C<CORE::require(STRING)> [RT #62488],
-C<sub foo(_)> [RT #62484].
-
-=item *
-
-Using C<setpgrp> with no arguments could corrupt the perl stack.
-
-=item *
-
-The block form of C<eval> is now specifically trappable by C<Safe> and
-C<ops>. Previously it was erroneously treated like string C<eval>.
-
-=item *
-
-In 5.10.0, the two characters C<[~> were sometimes parsed as the smart
-match operator (C<~~>) [RT #63854].
-
-=item *
-
-In 5.10.0, the C<*> quantifier in patterns was sometimes treated as
-C<{0,32767}> [RT #60034, #60464]. For example, this match would fail:
-
- ("ab" x 32768) =~ /^(ab)*$/
-
-=item *
-
-C<shmget> was limited to a 32 bit segment size on a 64 bit OS [RT #63924].
-
-=item *
-
-Using C<next> or C<last> to exit a C<given> block no longer produces a
-spurious warning like the following:
-
- Exiting given via last at foo.pl line 123
-
-=item *
-
-On Windows, C<'.\foo'> and C<'..\foo'> were treated differently than
-C<'./foo'> and C<'../foo'> by C<do> and C<require> [RT #63492].
-
-=item *
-
-Assigning a format to a glob could corrupt the format; e.g.:
-
- *bar=*foo{FORMAT}; # foo format now bad
-
-=item *
-
-Attempting to coerce a typeglob to a string or number could cause an
-assertion failure. The correct error message is now generated,
-C<Can't coerce GLOB to I<$type>>.
-
-=item *
-
-Under C<use filetest 'access'>, C<-x> was using the wrong access mode. This
-has been fixed [RT #49003].
-
-=item *
-
-C<length> on a tied scalar that returned a Unicode value would not be
-correct the first time. This has been fixed.
-
-=item *
-
-Using an array C<tie> inside in array C<tie> could SEGV. This has been
-fixed. [RT #51636]
-
-=item *
-
-A race condition inside C<PerlIOStdio_close()> has been identified and
-fixed. This used to cause various threading issues, including SEGVs.
-
-=item *
-
-In C<unpack>, the use of C<()> groups in scalar context was internally
-placing a list on the interpreter's stack, which manifested in various
-ways, including SEGVs. This is now fixed [RT #50256].
-
-=item *
-
-Magic was called twice in C<substr>, C<\&$x>, C<tie $x, $m> and C<chop>.
-These have all been fixed.
-
-=item *
-
-A 5.10.0 optimisation to clear the temporary stack within the implicit
-loop of C<s///ge> has been reverted, as it turned out to be the cause of
-obscure bugs in seemingly unrelated parts of the interpreter [commit
-ef0d4e17921ee3de].
-
-=item *
-
-The line numbers for warnings inside C<elsif> are now correct.
-
-=item *
-
-The C<..> operator now works correctly with ranges whose ends are at or
-close to the values of the smallest and largest integers.
-
-=item *
-
-C<binmode STDIN, ':raw'> could lead to segmentation faults on some platforms.
-This has been fixed [RT #54828].
-
-=item *
-
-An off-by-one error meant that C<index $str, ...> was effectively being
-executed as C<index "$str\0", ...>. This has been fixed [RT #53746].
-
-=item *
-
-Various leaks associated with named captures in regexes have been fixed
-[RT #57024].
-
-=item *
-
-A weak reference to a hash would leak. This was affecting C<DBI>
-[RT #56908].
-
-=item *
-
-Using (?|) in a regex could cause a segfault [RT #59734].
-
-=item *
-
-Use of a UTF-8 C<tr//> within a closure could cause a segfault [RT #61520].
-
-=item *
-
-Calling C<Perl_sv_chop()> or otherwise upgrading an SV could result in an
-unaligned 64-bit access on the SPARC architecture [RT #60574].
-
-=item *
-
-In the 5.10.0 release, C<inc_version_list> would incorrectly list
-C<5.10.*> after C<5.8.*>; this affected the C<@INC> search order
-[RT #67628].
-
-=item *
-
-In 5.10.0, C<pack "a*", $tainted_value> returned a non-tainted value
-[RT #52552].
-
-=item *
-
-In 5.10.0, C<printf> and C<sprintf> could produce the fatal error
-C<panic: utf8_mg_pos_cache_update> when printing UTF-8 strings
-[RT #62666].
-
-=item *
-
-In the 5.10.0 release, a dynamically created C<AUTOLOAD> method might be
-missed (method cache issue) [RT #60220,60232].
-
-=item *
-
-In the 5.10.0 release, a combination of C<use feature> and C<//ee> could
-cause a memory leak [RT #63110].
-
-=item *
-
-C<-C> on the shebang (C<#!>) line is once more permitted if it is also
-specified on the command line. C<-C> on the shebang line used to be a
-silent no-op I<if> it was not also on the command line, so perl 5.10.0
-disallowed it, which broke some scripts. Now perl checks whether it is
-also on the command line and only dies if it is not [RT #67880].
-
-=item *
-
-In 5.10.0, certain types of re-entrant regular expression could crash,
-or cause the following assertion failure [RT #60508]:
-
- Assertion rx->sublen >= (s - rx->subbeg) + i failed
-
-=item *
-
-Previously missing files from Unicode 5.1 Character Database are now included.
-
-=item *
-
-C<TMPDIR> is now honored when opening an anonymous temporary file
-
-=back
-
-=head1 New or Changed Diagnostics
-
-=over 4
-
-=item C<panic: sv_chop %s>
-
-This new fatal error occurs when the C routine C<Perl_sv_chop()> was
-passed a position that is not within the scalar's string buffer. This
-could be caused by buggy XS code, and at this point recovery is not
-possible.
-
-=item C<Can't locate package %s for the parents of %s>
-
-This warning has been removed. In general, it only got produced in
-conjunction with other warnings, and removing it allowed an ISA lookup
-optimisation to be added.
-
-=item C<v-string in use/require is non-portable>
-
-This warning has been removed.
-
-=item C<Deep recursion on subroutine "%s">
-
-It is now possible to change the depth threshold for this warning from the
-default of 100, by recompiling the F<perl> binary, setting the C
-pre-processor macro C<PERL_SUB_DEPTH_WARN> to the desired value.
-
-=back
-
-=head1 Changed Internals
-
-=over 4
-
-=item *
-
-TODO: C<SVt_RV> is gone. RVs are now stored in IVs
-
-=item *
-
-TODO: REGEXPs are first class
-
-=item *
-
-TODO: OOK is reworked, such that an OOKed scalar is PV not PVIV
-
-=item *
-
-The J.R.R. Tolkien quotes at the head of C source file have been checked and
-proper citations added, thanks to a patch from Tom Christiansen.
-
-=item *
-
-C<Perl_vcroak()> now accepts a null first argument. In addition, a full audit
-was made of the "not NULL" compiler annotations, and those for several
-other internal functions were corrected.
-
-=item *
-
-New macros C<dSAVEDERRNO>, C<dSAVE_ERRNO>, C<SAVE_ERRNO>, C<RESTORE_ERRNO>
-have been added to formalise the temporary saving of the C<errno>
-variable.
-
-=item *
-
-The function C<Perl_sv_insert_flags> has been added to augment
-C<Perl_sv_insert>.
-
-=item *
-
-The function C<Perl_newSV_type(type)> has been added, equivalent to
-C<Perl_newSV()> followed by C<Perl_sv_upgrade(type)>.
-
-=item *
-
-The function C<Perl_newSVpvn_flags()> has been added, equivalent to
-C<Perl_newSVpvn()> and then performing the action relevant to the flag.
-
-Two flag bits are currently supported.
-
-=over 4
-
-=item C<SVf_UTF8>
-
-This will call C<SvUTF8_on()> for you. (Note that this does not convert an
-sequence of ISO 8859-1 characters to UTF-8). A wrapper, C<newSVpvn_utf8()>
-is available for this.
-
-=item C<SVs_TEMP>
-
-Call C<Perl_sv_2mortal()> on the new SV.
-
-=back
-
-There is also a wrapper that takes constant strings, C<newSVpvs_flags()>.
-
-=item *
-
-The function C<Perl_croak_xs_usage> has been added as a wrapper to
-C<Perl_croak>.
-
-=item *
-
-The functions C<PerlIO_find_layer> and C<PerlIO_list_alloc> are now
-exported.
-
-=item *
-
-C<PL_na> has been exterminated from the core code, replaced by local STRLEN
-temporaries, or C<*_nolen()> calls. Either approach is faster than C<PL_na>,
-which is a pointer deference into the interpreter structure under ithreads,
-and a global variable otherwise.
-
-=item *
-
-C<Perl_mg_free()> used to leave freed memory accessible via C<SvMAGIC()> on
-the scalar. It now updates the linked list to remove each piece of magic
-as it is freed.
-
-=item *
-
-Under ithreads, the regex in C<PL_reg_curpm> is now reference counted. This
-eliminates a lot of hackish workarounds to cope with it not being reference
-counted.
-
-=item *
-
-C<Perl_mg_magical()> would sometimes incorrectly turn on C<SvRMAGICAL()>.
-This has been fixed.
-
-=item *
-
-The I<public> IV and NV flags are now not set if the string value has
-trailing "garbage". This behaviour is consistent with not setting the
-public IV or NV flags if the value is out of range for the type.
-
-=item *
-
-SV allocation tracing has been added to the diagnostics enabled by C<-Dm>.
-The tracing can alternatively output via the C<PERL_MEM_LOG> mechanism, if
-that was enabled when the F<perl> binary was compiled.
-
-=item *
-
-Smartmatch resolution tracing has been added as a new diagnostic. Use C<-DM> to
-enable it.
-
-
-=item *
-
-A new debugging flag C<-DB> now dumps subroutine definitions, leaving
-C<-Dx> for its original purpose of dumping syntax trees.
-
-=item *
-
-Uses of C<Nullav>, C<Nullcv>, C<Nullhv>, C<Nullop>, C<Nullsv> etc have been
-replaced by C<NULL> in the core code, and non-dual-life modules, as C<NULL>
-is clearer to those unfamiliar with the core code.
-
-=item *
-
-A macro C<MUTABLE_PTR(p)> has been added, which on (non-pedantic) gcc will
-not cast away C<const>, returning a C<void *>. Macros C<MUTABLE_SV(av)>,
-C<MUTABLE_SV(cv)> etc build on this, casting to C<AV *> etc without
-casting away C<const>. This allows proper compile-time auditing of
-C<const> correctness in the core, and helped picked up some errors (now
-fixed).
-
-=item *
-
-Macros C<mPUSHs()> and C<mXPUSHs()> have been added, for pushing SVs on the
-stack and mortalizing them.
-
-=item *
-
-Use of the private structure C<mro_meta> has changed slightly. Nothing
-outside the core should be accessing this directly anyway.
-
-=item *
-
-A new tool, F<Porting/expand-macro.pl> has been added, that allows you
-to view how a C preprocessor macro would be expanded when compiled.
-This is handy when trying to decode the macro hell that is the perl
-guts.
-
-=back
-
-=head1 New Tests
-
-Many modules updated from CPAN incorporate new tests.
-
-Several tests that have the potential to hang forever if they fail now
-incorporate a "watchdog" functionality that will kill them after a timeout,
-which helps ensure that C<make test> and C<make test_harness> run to
-completion automatically. (Jerry Hedden).
-
-Some core-specific tests have been added:
-
-=over 4
-
-=item t/comp/retainedlines.t
-
-Check that the debugger can retain source lines from C<eval>.
-
-=item t/io/perlio_fail.t
-
-Check that bad layers fail.
-
-=item t/io/perlio_leaks.t
-
-Check that PerlIO layers are not leaking.
-
-=item t/io/perlio_open.t
-
-Check that certain special forms of open work.
-
-=item t/io/perlio.t
-
-General PerlIO tests.
-
-=item t/io/pvbm.t
-
-Check that there is no unexpected interaction between the internal types
-C<PVBM> and C<PVGV>.
-
-=item t/mro/package_aliases.t
-
-Check that mro works properly in the presence of aliased packages.
-
-=item t/op/dbm.t
-
-Tests for C<dbmopen> and C<dbmclose>.
-
-=item t/op/index_thr.t
-
-Tests for the interaction of C<index> and threads.
-
-=item t/op/pat_thr.t
-
-Tests for the interaction of esoteric patterns and threads.
-
-=item t/op/qr_gc.t
-
-Test that C<qr> doesn't leak.
-
-=item t/op/reg_email_thr.t
-
-Tests for the interaction of regex recursion and threads.
-
-=item t/op/regexp_qr_embed_thr.t
-
-Tests for the interaction of patterns with embedded C<qr//> and threads.
-
-=item t/op/regexp_unicode_prop.t
-
-Tests for Unicode properties in regular expressions.
-
-=item t/op/regexp_unicode_prop_thr.t
-
-Tests for the interaction of Unicode properties and threads.
-
-=item t/op/reg_nc_tie.t
-
-Test the tied methods of C<Tie::Hash::NamedCapture>.
-
-=item t/op/reg_posixcc.t
-
-Check that POSIX character classes behave consistently.
-
-=item t/op/re.t
-
-Check that exportable C<re> functions in F<universal.c> work.
-
-=item t/op/setpgrpstack.t
-
-Check that C<setpgrp> works.
-
-=item t/op/substr_thr.t
-
-Tests for the interaction of C<substr> and threads.
-
-=item t/op/upgrade.t
-
-Check that upgrading and assigning scalars works.
-
-=item t/uni/lex_utf8.t
-
-Check that Unicode in the lexer works.
-
-=item t/uni/tie.t
-
-Check that Unicode and C<tie> work.
-
-=back
-
-=head1 Known Problems
-
-This is a list of some significant unfixed bugs, which are regressions
-from either 5.10.0 or 5.8.x.
-
-=over 4
-
-=item *
-
-C<List::Util::first> misbehaves in the presence of a lexical C<$_>
-(typically introduced by C<my $_> or implicitly by C<given>). The variable
-which gets set for each iteration is the package variable C<$_>, not the
-lexical C<$_> [RT #67694].
-
-A similar issue may occur in other modules that provide functions which
-take a block as their first argument, like
-
- foo { ... $_ ...} list
-
-=item *
-
-The C<charnames> pragma may generate a run-time error when a regex is
-interpolated [RT #56444]:
-
- use charnames ':full';
- my $r1 = qr/\N{THAI CHARACTER SARA I}/;
- "foo" =~ $r1; # okay
- "foo" =~ /$r1+/; # runtime error
-
-A workaround is to generate the character outside of the regex:
-
- my $a = "\N{THAI CHARACTER SARA I}";
- my $r1 = qr/$a/;
-
-=item *
-
-Some regexes may run much more slowly when run in a child thread compared
-with the thread the pattern was compiled into [RT #55600].
-
-=back
-
-=head1 Deprecations
-
-The following items are now deprecated.
-
-=over 4
-
-=item *
-
-C<Switch> is buggy and should be avoided. From perl 5.11.0 onwards, it is
-intended that any use of the core version of this module will emit a
-warning, and that the module will eventually be removed from the core
-(probably in perl 5.14.0). See L<perlsyn/"Switch statements"> for its
-replacement.
-
-=item *
-
-The following modules will be removed from the core distribution in a future
-release, and should be installed from CPAN instead. Distributions on CPAN
-which require these should add them to their prerequisites. The core versions
-of these modules warnings will issue a deprecation warning.
-
-=over
-
-=item *
-
-C<Class::ISA>
-
-=item *
-
-C<Pod::Plainer>
-
-=item *
-
-C<Shell>
-
-=back
-
-Currently support to install from CPAN without a I<force> is C<TODO> in CPAN
-and CPANPLUS. This will be addressed before 5.12.0 ships.
-
-=item *
-
-C<suidperl> has been removed. It used to provide a mechanism to
-emulate setuid permission bits on systems that don't support it properly.
-
-=item *
-
-Deprecate assignment to $[
-
-=item *
-
-Remove attrs, which has been deprecated since 1999/10/02.
-
-=item *
-
-Deprecate use of the attribute :locked on subroutines.
-
-=item *
-
-Deprecate using "locked" with the attributes pragma.
-
-=item *
-
-Deprecate using "unique" with the attributes pragma.
-
-=item *
-
-warn if ++ or -- are unable to change the value because it's beyond the limit of representation
-
-This uses a new warnings category: "imprecision".
-
-=item *
-
-Make lc/uc/lcfirst/ucfirst warn when passed undef.
-
-=item *
-
-Show constant in "Useless use of a constant in void context"
-
-=item *
-
-Make the new warning report undef constants as undef
-
-=item *
-
-Add a new warning, "Prototype after '%s'"
-
-=item *
-
-Tweak the "Illegal character in prototype" warning so it's more precise when reporting illegal characters after _
-
-=item *
-
-Unintended interpolation of $\ in regex
-
-=item *
-
-Make overflow warnings in gmtime/localtime only occur when warnings are on
-
-=item *
-
-Improve mro merging error messages.
-
-They are now very similar to those produced by Algorithm::C3.
-
-=item *
-
-Amelioration of the error message "Unrecognized character %s in column %d"
-
-Changes the error message to "Unrecognized character %s; marked by E<lt>--
-HERE after %sE<lt>-- HERE near column %d". This should make it a little
-simpler to spot and correct the suspicious character.
-
-=item *
-
-Explicitly point to $. when it causes an uninitialized warning for ranges in scalar context
-
-
-=item *
-
-Deprecated numerous Perl 4-era libraries:
-
-F<termcap.pl>, F<tainted.pl>, F<stat.pl>, F<shellwords.pl>, F<pwd.pl>,
-F<open3.pl>, F<open2.pl>, F<newgetopt.pl>, F<look.pl>, F<find.pl>,
-F<finddepth.pl>, F<importenv.pl>, F<hostname.pl>, F<getopts.pl>,
-F<getopt.pl>, F<getcwd.pl>, F<flush.pl>, F<fastcwd.pl>, F<exceptions.pl>,
-F<ctime.pl>, F<complete.pl>, F<cacheout.pl>, F<bigrat.pl>, F<bigint.pl>,
-F<bigfloat.pl>, F<assert.pl>, F<abbrev.pl>, F<dotsh.pl>, and
-F<timelocal.pl> are all now deprecated. Using them will incur a warning.
-
-=back
-
-=head1 Acknowledgements
-
-Some of the work in this release was funded by a TPF grant funded by
-Dijkmat BV, The Netherlands.
-
-Steffen Mueller and David Golden in particular helped getting CPAN modules
-polished and synchronised with their in-core equivalents.
-
-Craig Berry was tireless in getting maint to run under VMS, no matter how
-many times we broke it for him.
-
-The other core committers contributed most of the changes, and applied most
-of the patches sent in by the hundreds of contributors listed in F<AUTHORS>.
-
-Much of the work of categorizing changes in this perldelta file was contributed
-by the following porters using changelogger.bestpractical.com:
-
-Nicholas Clark, leon, shawn, alexm, rjbs, rafl, Pedro Melo, brunorc,
-anonymous, ☄, Tom Hukins, anonymous, Jesse, dagolden, Moritz Onken,
-Mark Fowler, chorny, anonymous, tmtm
-
-Finally, thanks to Larry Wall, without whom none of this would be
-necessary.
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://rt.perl.org/perlbug/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please send
-it to perl5-security-report at perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
-to help assess the impact of issues, figure out a resolution, and help
-co-ordinate the release of patches to mitigate or fix the problem across all
-platforms on which Perl is supported. Please only use this address for
-security issues in the Perl core, not for modules independently
-distributed on CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive details
-on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
-
-
Deleted: trunk/contrib/perl/pod/perl5111delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl5111delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl5111delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,365 +0,0 @@
-=head1 NAME
-
-perl5111delta - what is new for perl v5.11.1
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.11.0 release and
-the 5.11.1 release.
-
-=head1 Incompatible Changes
-
-=over
-
-=item *
-
-The boolkeys op moved to the group of hash ops. This breaks binary compatibility.
-
-=item *
-
-C<\s> C<\w> and C<\d> once again have the semantics they had in Perl 5.8.x.
-
-
-=back
-
-=head1 Core Enhancements
-
-=head2 Add C<package NAME VERSION> syntax
-
-This new syntax allows a module author to set the $VERSION of a namespace
-when the namespace is declared with 'package'. It eliminates the need
-for C<our $VERSION = ...> and similar constructs. E.g.
-
- package Foo::Bar 1.23;
- # $Foo::Bar::VERSION == 1.23
-
-There are several advantages to this:
-
-=over
-
-=item *
-
-C<$VERSION> is parsed in I<exactly> the same way as C<use NAME VERSION>
-
-=item *
-
-C<$VERSION> is set at compile time
-
-=item *
-
-Eliminates C<$VERSION = ...> and C<eval $VERSION> clutter
-
-=item *
-
-As it requires VERSION to be a numeric literal or v-string
-literal, it can be statically parsed by toolchain modules
-without C<eval> the way MM-E<gt>parse_version does for C<$VERSION = ...>
-
-=item *
-
-Alpha versions with underscores do not need to be quoted; static
-parsing will preserve the underscore, but during compilation, Perl
-will remove underscores as it does for all numeric literals
-
-It does not break old code with only C<package NAME>, but code that uses
-C<package NAME VERSION> will need to be restricted to perl 5.11.X or newer
-This is analogous to the change to C<open> from two-args to three-args.
-Users requiring the latest Perl will benefit, and perhaps N years from
-now it will become standard practice when Perl 5.12 is targeted the way
-that 5.6 is today.
-
-=back
-
-=head1 Modules and Pragmata
-
-=head2 Updated Modules
-
-=over 4
-
-=item *
-
-Upgrade to Test-Simple 0.94
-
-=item *
-
-Upgrade to Storable 2.21
-
-=item *
-
-Upgrade to Pod-Simple 3.08
-
-=item *
-
-Upgrade to Parse-CPAN-Meta 1.40
-
-=item *
-
-Upgrade to ExtUtils-Manifest 1.57
-
-=item *
-
-Upgrade to ExtUtils-CBuilder 0.260301
-
-=item *
-
-Upgrade to CGI.pm-3.48
-
-=item *
-
-Upgrade CPANPLUS to CPAN version 0.89_02
-
-=item *
-
-Upgrade to threads::shared 1.32
-
-=item *
-
-Upgrade ExtUtils::ParseXS to 2.21
-
-=item *
-
-Upgrade File::Path to 2.08 (and add taint.t test)
-
-=item *
-
-Upgrade Module::CoreList to 2.20
-
-=item *
-
-Updated Object::Accessor to0.36
-
-=back
-
-=head1 New Documentation
-
-=over 4
-
-=item *
-
-L<perlpolicy> extends the "Social contract about contributed modules" into
-the beginnings of a document on Perl porting policies.
-
-=back
-
-=head1 Changes to Existing Documentation
-
-=over
-
-=item Documentation for C<$1> in perlvar.pod clarified
-
-=back
-
-=head1 Performance Enhancements
-
-=over 4
-
-=item C<if (%foo)> has been optimized to be faster than C<if (keys %foo)>
-
-=back
-
-=head1 Platform Specific Notes
-
-=over 4
-
-=item Darwin (Mac OS X)
-
-=over 4
-
-=item *
-
-Skip testing the be_BY.CP1131 locale on Darwin 10 (Mac OS X 10.6),
-as it's still buggy.
-
-=item *
-
-Correct infelicities in the regexp used to identify buggy locales
-on Darwin 8 and 9 (Mac OS X 10.4 and 10.5, respectively).
-
-=back
-
-=item DragonFly BSD
-
-=over 4
-
-=item *
-
-Fix thread library selection [perl #69686]
-
-=back
-
-=item Win32
-
-=over 4
-
-=item *
-
-Initial support for mingw64 is now available
-
-=item *
-
-Various bits of Perl's build infrastructure are no longer converted to win32 line endings at release time. If this hurts you, please speak up.
-
-=back
-
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item *
-
-Perl now properly returns a syntax error instead of segfaulting
-if C<each>, C<keys> or C<values> is used without an argument
-
-=item *
-
-C<tell()> now fails properly if called without an argument and when no previous file was read
-
-C<tell()> now returns C<-1>, and sets errno to C<EBADF>, thus restoring the 5.8.x behaviour
-
-=item *
-
-overload no longer implicitly unsets fallback on repeated 'use overload' lines
-
-=item *
-
-POSIX::strftime() can now handle Unicode characters in the format string.
-
-=item *
-
-The Windows select() implementation now supports all empty C<fd_set>s more correctly.
-
-=back
-
-=head1 New or Changed Diagnostics
-
-=over 4
-
-
-=item *
-
-The 'syntax' category was removed from 5 warnings that should only be in 'deprecated'.
-
-=item *
-
-Three fatal pack/unpack error messages have been normalized to "panic: %s"
-
-=item *
-
-"Unicode character is illegal" has been rephrased to be more accurate
-
-It now reads C<Unicode non-character is illegal in interchange> and the
-perldiag documentation has been expanded a bit.
-
-=item *
-
-Perl now defaults to issuing a warning if a deprecated language feature is used.
-
-To disable this feature in a given lexical scope, you should use C<no
-warnings 'deprecated';> For information about which language features
-are deprecated and explanations of various deprecation warnings, please
-see L<perldiag>
-
-=back
-
-=head1 Testing
-
-=over 4
-
-=item *
-
-Significant cleanups to core tests to ensure that language and
-interpreter features are not used before they're tested.
-
-=item *
-
-C<make test_porting> now runs a number of important pre-commit checks which might be of use to anyone working on the Perl core.
-
-=item *
-
-F<t/porting/podcheck.t> automatically checks the well-formedness of
-POD found in all .pl, .pm and .pod files in the F<MANIFEST>, other than in
-dual-lifed modules which are primarily maintained outside the Perl core.
-
-=item *
-
-F<t/porting/manifest.t> now tests that all files listed in MANIFEST are present.
-
-=back
-
-=head1 Known Problems
-
-=over 4
-
-=item Untriaged test crashes on Windows 2000
-
-Several porters have reported mysterious crashes when Perl's entire test suite is run after a build on certain Windows 2000 systems. When run by hand, the individual tests reportedly work fine.
-
-=item Known test failures on VMS
-
-Perl 5.11.1 fails a small set of core and CPAN tests as of this release.
-With luck, that'll be sorted out for 5.11.2
-
-=back
-
-=head1 Errata for 5.11.0
-
-=over
-
-=item The Perl 5.11.0 release notes incorrectly described 'delete local'
-
-=back
-
-=head1 Acknowledgements
-
-Perl 5.11.1 represents approximately 3 weeks development since Perl 5.11.0
-contains 22,000 lines of changes across 396 files from 26 authors and committers:
-
-Abigail, Alex Vandiver, brian d foy, Chris Williams, Craig A. Berry,
-David Fifield, David Golden, demerphq, Eric Brine, Geoffrey T. Dairiki,
-George Greer, H.Merijn Brand, Jan Dubois, Jerry D. Hedden, Jesse Vincent,
-Josh ben Jore, Max Maischein, Nicholas Clark, Rafael Garcia-Suarez,
-Simon Schubert, Sisyphus, Smylers, Steve Hay, Steve Peters, Vincent Pit
-and Yves Orton.
-
-Many of the changes included in this version originated in the CPAN
-modules included in Perl's core. We're grateful to the entire CPAN
-community for helping Perl to flourish.
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://rt.perl.org/perlbug/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please send
-it to perl5-security-report at perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
-to help assess the impact of issues, figure out a resolution, and help
-co-ordinate the release of patches to mitigate or fix the problem across all
-platforms on which Perl is supported. Please only use this address for
-security issues in the Perl core, not for modules independently
-distributed on CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive details
-on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl5112delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl5112delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl5112delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,348 +0,0 @@
-=head1 NAME
-
-perl5112delta - what is new for perl v5.11.2
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.11.1 release and the
-5.11.2 release.
-
-=head1 Core Enhancements
-
-=head2 qr overloading
-
-It is now possible to overload the C<qr//> operator, that is,
-conversion to regexp, like it was already possible to overload
-conversion to boolean, string or number of objects. It is invoked when
-an object appears on the right hand side of the C<=~> operator, or when
-it is interpolated into a regexp. See L<overload>.
-
-=head2 Pluggable keywords
-
-Extension modules can now cleanly hook into the Perl parser to define
-new kinds of keyword-headed expression and compound statement. The
-syntax following the keyword is defined entirely by the extension. This
-allow a completely non-Perl sublanguage to be parsed inline, with the
-right ops cleanly generated. This feature is currently considered
-experimental.
-
-See L<perlapi/PL_keyword_plugin> for the mechanism. The Perl core
-source distribution also includes a new module
-L<XS::APItest::KeywordRPN>, which implements reverse Polish notation
-arithmetic via pluggable keywords. This module is mainly used for test
-purposes, and is not normally installed, but also serves as an example
-of how to use the new mechanism.
-
-=head2 APIs for more internals
-
-The lowest layers of the lexer and parts of the pad system now have C
-APIs available to XS extensions. These are necessary to support proper
-use of pluggable keywords, but have other uses too. The new APIs are
-experimental, and only cover a small proportion of what would be
-necessary to take full advantage of the core's facilities in these
-areas. It is intended that the Perl 5.13 development cycle will see the
-addition of a full range of clean, supported interfaces.
-
-=head2 Overridable function lookup
-
-Where an extension module hooks the creation of rv2cv ops to modify the
-subroutine lookup process, this now works correctly for bareword
-subroutine calls. This means that prototypes on subroutines referenced
-this way will be processed correctly. (Previously bareword subroutine
-names were initially looked up, for parsing purposes, by an unhookable
-mechanism, so extensions could only properly influence subroutine names
-that appeared with an C<&> sigil.)
-
-=head1 Modules and Pragmata
-
-=head2 New Modules and Pragmata
-
-=over 4
-
-=item C<legacy>
-
-Preserves legacy behaviors or enable new non-default behaviors.
-Currently the only behaviour concerns semantics for the 128 characters
-on ASCII systems that have the 8th bit set.
-
-=back
-
-=head2 Pragmata Changes
-
-=over 4
-
-=item C<diagnostics>
-
-Supports %.0f formatting internally.
-
-=item C<overload>
-
-Allow overloading of 'qr'.
-
-=back
-
-=head2 Updated Modules
-
-=over 4
-
-=item C<B::Concise>
-
-Optimize reversing an array in-place, avoid using defined %hash in core
-code and tests.
-
-=item C<B::Deparse>
-
-Teach B::Deparse about in-place reverse.
-
-=item C<Carp>
-
-Refine Carp caller() fix and add tests.
-
-=item C<Compress::Zlib>
-
-Updated to 2.022.
-
-=item C<CPANPLUS>
-
-Updated to 0.89_09.
-
-=item C<Encode>
-
-Updated to 2.38.
-
-=item C<ExtUtils::CBuilder>
-
-Updated to 0.27.
-
-=item C<Env>
-
-Add EXISTS and DELETE methods to Env.pm.
-
-=item C<File::Fetch>
-
-Updated to 0.22.
-
-=item C<I8N::Langinfo>
-
-Correctly document export of I18N::Langinfo.
-
-=item C<I8N::LangTags>
-
-In I18N::LangTags::Detect, avoid using defined @array and defined
-%hash.
-
-=item C<IO::Compress>
-
-Updated to 2.022.
-
-=item C<IPC::Cmd>
-
-Updated to 0.54.
-
-=item C<List::Util>
-
-Updated to 1.22.
-
-=item C<Locale::Maketext>
-
-In Locale::Maketext, avoid using defined @array and defined %hash.
-Convert the odd Locale::Maketext test out from Test to Test::More.
-
-=item C<Module::Build>
-
-Updated to 0.35_08.
-
-=item C<Module::CoreList>
-
-Implemented is_deprecated().
-
-=item C<Pod::Simple>
-
-Updated to 3.10.
-
-=item C<Scalar::Util>
-
-Updated to 1.22.
-
-=item C<Switch>
-
-Updated to 2.16.
-
-=back
-
-=head1 Utility Changes
-
-=over 4
-
-=item F<a2p>
-
-Fixed bugs with the match() operator in list context, remove mention of
-$[.
-
-=back
-
-=head1 Performance Enhancements
-
-=over 4
-
-=item *
-
-Reversing an array to itself (as in C<@a = reverse @a>) in void context
-now happens in-place and is several orders of magnitude faster than it
-used to be. It will also preserve non-existent elements whenever
-possible, i.e. for non magical arrays or tied arrays with C<EXISTS> and
-C<DELETE> methods.
-
-=back
-
-=head1 New or Changed Diagnostics
-
-Several new diagnostics, see L<perldiag> for details.
-
-=over 4
-
-=item C<Bad plugin affecting keyword '%s'>
-
-=item C<gmtime(%.0f) too large>
-
-=item C<Lexing code attempted to stuff non-Latin-1 character into Latin-1 input>
-
-=item C<Lexing code internal error (%s)>
-
-=item C<localtime(%.0f) too large>
-
-=item C<Overloaded dereference did not return a reference>
-
-=item C<Overloaded qr did not return a REGEXP>
-
-=item C<Perl_pmflag() is deprecated, and will be removed from the XS API>
-
-=back
-
-One diagnostic has been removed:
-
-=over 4
-
-=item C<Runaway format>
-
-=back
-
-=head1 Changed Internals
-
-=over 4
-
-=item *
-
-C<Perl_pmflag> has been removed from the public API. Calling it now
-generates a deprecation warning, and it will be removed in a future
-release. Although listed as part of the API, it was never documented,
-and only ever used in F<toke.c>, and prior to 5.10, F<regcomp.c>. In
-core, it has been replaced by a static function.
-
-=back
-
-=head1 New Tests
-
-=over 4
-
-=item F<t/op/while_readdir.t>
-
-Test that a bare readdir in while loop sets $_.
-
-=back
-
-=head1 Known Problems
-
-=over 4
-
-=item Known test failures on VMS
-
-Perl 5.11.2 fails a small set of core and CPAN tests as of this
-release. With luck, that'll be sorted out for 5.11.3.
-
-=back
-
-=head1 Deprecations
-
-The following items are now deprecated.
-
-=head2 Use of C<:=> to mean an empty attribute list is now deprecated.
-
-An accident of Perl's parser meant that these constructions were all
-equivalent:
-
- my $pi := 4;
- my $pi : = 4;
- my $pi : = 4;
-
-with the C<:> being treated as the start of an attribute list, which
-ends before the C<=>. As whitespace is not significant here, all are
-parsed as an empty attribute list, hence all the above are equivalent
-to, and better written as
-
- my $pi = 4;
-
-because no attribute processing is done for an empty list.
-
-As is, this meant that C<:=> cannot be used as a new token, without
-silently changing the meaning of existing code. Hence that particular
-form is now deprecated, and will become a syntax error. If it is
-absolutely necessary to have empty attribute lists (for example,
-because of a code generator) then avoid the warning by adding a space
-before the C<=>.
-
-=head1 Acknowledgements
-
-Perl 5.11.2 represents approximately 3 weeks development since Perl
-5.11.1 and contains 29,992 lines of changes across 458 files from 38
-authors and committers:
-
-Abhijit Menon-Sen, Abigail, Ben Morrow, Bo Borgerson, Brad Gilbert,
-Bram, Chris Williams, Craig A. Berry, Daniel Frederick Crisman, Dave
-Rolsky, David E. Wheeler, David Golden, Eric Brine, Father
-Chrysostomos, Frank Wiegand, Gerard Goossen, Gisle Aas, Graham Barr,
-Harmen, H.Merijn Brand, Jan Dubois, Jerry D. Hedden, Jesse Vincent,
-Karl Williamson, Kevin Ryde, Leon Brocard, Nicholas Clark, Paul
-Marquess, Philippe Bruhat, Rafael Garcia-Suarez, Sisyphus, Steffen
-Mueller, Steve Hay, Steve Peters, Vincent Pit, Yuval Kogman, Yves
-Orton, and Zefram.
-
-Many of the changes included in this version originated in the CPAN
-modules included in Perl's core. We're grateful to the entire CPAN
-community for helping Perl to flourish.
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl bug
-database at http://rt.perl.org/perlbug/ . There may also be information
-at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down to a
-tiny but sufficient test case. Your bug report, along with the output
-of C<perl -V>, will be sent off to perlbug at perl.org to be analysed by
-the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please
-send it to perl5-security-report at perl.org. This points to a closed
-subscription unarchived mailing list, which includes all the core
-committers, who be able to help assess the impact of issues, figure out
-a resolution, and help co-ordinate the release of patches to mitigate
-or fix the problem across all platforms on which Perl is supported.
-Please only use this address for security issues in the Perl core, not
-for modules independently distributed on CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive
-details on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl5113delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl5113delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl5113delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,558 +0,0 @@
-=head1 NAME
-
-perl5113delta - what is new for perl v5.11.3
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.11.2 release and
-the 5.11.3 release.
-
-If you are upgrading from an earlier release such as 5.11.1, first read
-the L<perl5112delta>, which describes differences between 5.11.1 and
-5.11.2
-
-=head1 Incompatible Changes
-
-=head2 Filehandles are blessed directly into C<IO::Handle>, as C<FileHandle> is merely a wrapper around C<IO::Handle>.
-
-The previous behaviour was to bless Filehandles into L<FileHandle>
-(an empty proxy class) if it was loaded into memory and otherwise
-to bless them into C<IO::Handle>.
-
-=head1 Core Enhancements
-
-=head2 Unicode version
-
-Perl is shipped with the latest Unicode version, 5.2, dated October 2009. See
-L<http://www.unicode.org/versions/Unicode5.2.0> for details about this release
-of Unicode. See L<perlunicode> for instructions on installing and using
-older versions of Unicode.
-
-=head2 Unicode properties
-
-Perl can now handle every Unicode character property. A new pod,
-L<perluniprops>, lists all available non-Unihan character properties. By
-default the Unihan properties and certain others (deprecated and Unicode
-internal-only ones) are not exposed. See below for more details on
-these; there is also a section in the pod listing them, and why they are
-not exposed.
-
-Perl now fully supports the Unicode compound-style of using C<=> and C<:>
-in writing regular expressions: C<\p{property=value}> and
-C<\p{property:value}> (both of which mean the same thing).
-
-Perl now fully supports the Unicode loose matching rules for text
-between the braces in C<\p{...}> constructs. In addition, Perl also allows
-underscores between digits of numbers.
-
-All the Unicode-defined synonyms for properties and property values are
-now accepted.
-
-C<qr/\X/>, which matches a Unicode logical character, has been expanded to work
-better with various Asian languages. It now is defined as an C<extended
-grapheme cluster>. (See L<http://www.unicode.org/reports/tr29/>).
-Anything matched previously that made sense will continue to be matched. But
-in addition:
-
-=over
-
-=item *
-
-C<\X> will now not break apart a C<S<CR LF>> sequence.
-
-=item *
-
-C<\X> will now match a sequence including the C<ZWJ> and C<ZWNJ> characters.
-
-=item *
-
-C<\X> will now always match at least one character, including an initial mark.
-Marks generally come after a base character, but it is possible in Unicode to
-have them in isolation, and C<\X> will now handle that case, for example at the
-beginning of a line or after a C<ZWSP>. And this is the part where C<\X>
-doesn't match the things that it used to that don't make sense. Formerly, for
-example, you could have the nonsensical case of an accented LF.
-
-=item *
-
-C<\X> will now match a (Korean) Hangul syllable sequence, and the Thai and Lao
-exception cases.
-
-=back
-
-Otherwise, this change should be transparent for the non-affected languages.
-
-C<\p{...}> matches using the Canonical_Combining_Class property were
-completely broken in previous Perls. This is now fixed.
-
-In previous Perls, the Unicode C<Decomposition_Type=Compat> property and a
-Perl extension had the same name, which led to neither matching all the
-correct values (with more than 100 mistakes in one, and several thousand
-in the other). The Perl extension has now been renamed to be
-C<Decomposition_Type=Noncanonical> (short: C<dt=noncanon>). It has the same
-meaning as was previously intended, namely the union of all the
-non-canonical Decomposition types, with Unicode C<Compat> being just one of
-those.
-
-C<\p{Uppercase}> and C<\p{Lowercase}> have been brought into line with the
-Unicode definitions. This means they each match a few more characters
-than previously.
-
-C<\p{Cntrl}> now matches the same characters as C<\p{Control}>. This means it
-no longer will match Private Use (gc=co), Surrogates (gc=cs), nor Format
-(gc=cf) code points. The Format code points represent the biggest
-possible problem. All but 36 of them are either officially deprecated
-or strongly discouraged from being used. Of those 36, likely the most
-widely used are the soft hyphen (U+00AD), and BOM, ZWSP, ZWNJ, WJ, and
-similar, plus Bi-directional controls.
-
-C<\p{Alpha}> now matches the same characters as C<\p{Alphabetic}>. The Perl
-definition included a number of things that aren't really alpha (all
-marks), while omitting many that were. As a direct consequence, the
-definitions of C<\p{Alnum}> and C<\p{Word}> which depend on Alpha also change.
-
-C<\p{Word}> also now doesn't match certain characters it wasn't supposed
-to, such as fractions.
-
-C<\p{Print}> no longer matches the line control characters: Tab, LF, CR,
-FF, VT, and NEL. This brings it in line with the documentation.
-
-C<\p{Decomposition_Type=Canonical}> now includes the Hangul syllables.
-
-The Numeric type property has been extended to include the Unihan
-characters.
-
-There is a new Perl extension, the 'Present_In', or simply 'In',
-property. This is an extension of the Unicode Age property, but
-C<\p{In=5.0}> matches any code point whose usage has been determined
-I<as of> Unicode version 5.0. The C<\p{Age=5.0}> only matches code points
-added in I<precisely> version 5.0.
-
-A number of properties did not have the correct values for unassigned
-code points. This is now fixed. The affected properties are
-Bidi_Class, East_Asian_Width, Joining_Type, Decomposition_Type,
-Hangul_Syllable_Type, Numeric_Type, and Line_Break.
-
-The Default_Ignorable_Code_Point, ID_Continue, and ID_Start properties
-have been updated to their current Unicode definitions.
-
-Certain properties that are supposed to be Unicode internal-only were
-erroneously exposed by previous Perls. Use of these in regular
-expressions will now generate, if enabled, a deprecated warning message.
-The properties are: Other_Alphabetic, Other_Default_Ignorable_Code_Point,
-Other_Grapheme_Extend, Other_ID_Continue, Other_ID_Start, Other_Lowercase,
-Other_Math, and Other_Uppercase.
-
-An installation can now fairly easily change which Unicode properties
-Perl understands. As mentioned above, certain properties are by default
-turned off. These include all the Unihan properties (which should be
-accessible via the CPAN module Unicode::Unihan) and any deprecated or
-Unicode internal-only property that Perl has never exposed.
-
-The generated files in the C<lib/unicore/To> directory are now more
-clearly marked as being stable, directly usable by applications.
-New hash entries in them give the format of the normal entries,
-which allows for easier machine parsing. Perl can generate files
-in this directory for any property, though most are suppressed. An
-installation can choose to change which get written. Instructions
-are in L<perluniprops>.
-
-=head2 Regular Expressions
-
-U+0FFFF is now a legal character in regular expressions.
-
-=head1 Modules and Pragmata
-
-=head2 Pragmata Changes
-
-=over 4
-
-=item C<constant>
-
-Upgraded from version 1.19 to 1.20.
-
-=item C<diagnostics>
-
-This pragma no longer suppresses C<Use of uninitialized value in range (or flip)> warnings. [perl #71204]
-
-=item C<feature>
-
-Upgraded from 1.13 to 1.14. Added the C<unicode_strings> feature:
-
- use feature "unicode_strings";
-
-This pragma turns on Unicode semantics for the case-changing operations
-(uc/lc/ucfirst/lcfirst) on strings that don't have the internal UTF-8 flag set,
-but that contain single-byte characters between 128 and 255.
-
-=item C<legacy>
-
-The experimental C<legacy> pragma, introduced in 5.11.2, has been removed,
-and its functionality replaced by the new feature pragma, C<use feature
-"unicode_strings">.
-
-=item C<threads>
-
-Upgraded from version 1.74 to 1.75.
-
-=item C<warnings>
-
-Upgraded from 1.07 to 1.08. Added new C<warnings::fatal_enabled()> function.
-
-=back
-
-=head2 Updated Modules
-
-=over 4
-
-=item C<Archive::Extract>
-
-Upgraded from version 0.34 to 0.36.
-
-=item C<CPAN>
-
-Upgraded from version 1.94_51 to 1.94_5301, which is 1.94_53 on CPAN
-plus some local fixes for bleadperl.
-
-Includes better bzip2 support, improved FirstTime experience with
-auto-selection of CPAN mirrors, proper handling of modules removed from the
-Perl core, and an updated 'cpan' utility script
-
-=item C<CPANPLUS>
-
-Upgraded from version 0.89_09 to 0.90.
-
-=item C<Encode>
-
-Upgraded from version 2.38 to 2.39.
-
-=item C<ExtUtils::MakeMaker>
-
-Upgraded from version 6.55_02 to 6.56. Adds new BUILD_REQUIRES key to
-indicate build-only prerequisites. Also adds support for
-mingw64 and the new "package NAME VERSION" syntax.
-
-=item C<File::Path>
-
-Upgraded from version 2.08 to 2.08_01.
-
-=item C<Module::Build>
-
-Upgraded from version 0.35_09 to 0.36. Compared to 0.35, this version has a
-new 'installdeps' action, supports the PERL_MB_OPT environment variable, adds a
-'share_dir' property for L<File::ShareDir> support, support the "package NAME
-VERSION" syntax and has many other enhancements and bug fixes. The
-'passthrough' style of Module::Build::Compat has been deprecated.
-
-=item C<Module::CoreList>
-
-Upgraded from version 2.23 to 2.24.
-
-=item C<POSIX>
-
-Upgraded from version 1.18 to 1.19. Error codes for C<getaddrinfo()> and
-C<getnameinfo()> are now available.
-
-=item C<Pod::Simple>
-
-Upgraded from version 3.10 to 3.13.
-
-=item C<Safe>
-
-Upgraded from version 2.19 to 2.20.
-
-=back
-
-=head1 Utility Changes
-
-=over 4
-
-=item F<perlbug>
-
-No longer reports "Message sent" when it hasn't actually sent the message
-
-=back
-
-=head1 Changes to Existing Documentation
-
-The Pod specification (L<perlpodspec>) has been updated to bring the
-specification in line with modern usage already supported by most Pod systems.
-A parameter string may now follow the format name in a "begin/end" region.
-Links to URIs with a text description are now allowed. The usage of
-C<LE<lt>"section"E<gt>> has been marked as deprecated.
-
-L<if.pm|if> has been documented in L<perlfunc/use> as a means to get
-conditional loading of modules despite the implicit BEGIN block around C<use>.
-
-
-
-=head1 Installation and Configuration Improvements
-
-=head2 Testing improvements
-
-=over 4
-
-=item It's now possible to override C<PERL5OPT> and friends in F<t/TEST>
-
-=back
-
-=head2 Platform Specific Changes
-
-=over 4
-
-=item Win32
-
-=over 4
-
-=item *
-
-Always add a manifest resource to C<perl.exe> to specify the C<trustInfo>
-settings for Windows Vista and later. Without this setting Windows
-will treat C<perl.exe> as a legacy application and apply various
-heuristics like redirecting access to protected file system areas
-(like the "Program Files" folder) to the users "VirtualStore"
-instead of generating a proper "permission denied" error.
-
-For VC8 and VC9 this manifest setting is automatically generated by
-the compiler/linker (together with the binding information for their
-respective runtime libraries); for all other compilers we need to
-embed the manifest resource explicitly in the external resource file.
-
-This change also requests the Microsoft Common-Controls version 6.0
-(themed controls introduced in Windows XP) via the dependency list
-in the assembly manifest. For VC8 and VC9 this is specified using the
-C</manifestdependency> linker commandline option instead.
-
-=back
-
-=item cygwin
-
-=over 4
-
-=item Enable IPv6 support on cygwin 1.7 and newer
-
-=back
-
-=item OpenVMS
-
-=over 4
-
-=item Make -UDEBUGGING the default on VMS for 5.12.0.
-
-Like it has been everywhere else for ages and ages. Also make
-command-line selection of -UDEBUGGING and -DDEBUGGING work in
-configure.com; before the only way to turn it off was by saying
-no in answer to the interactive question.
-
-=back
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item *
-
-Ensure that pp_qr returns a new regexp SV each time. Resolves RT #69852.
-
-Instead of returning a(nother) reference to the (pre-compiled) regexp in the
-optree, use reg_temp_copy() to create a copy of it, and return a reference to
-that. This resolves issues about Regexp::DESTROY not being called in a timely
-fashion (the original bug tracked by RT #69852), as well as bugs related to
-blessing regexps, and of assigning to regexps, as described in correspondence
-added to the ticket.
-
-It transpires that we also need to undo the SvPVX() sharing when ithreads
-cloning a Regexp SV, because mother_re is set to NULL, instead of a cloned
-copy of the mother_re. This change might fix bugs with regexps and threads in
-certain other situations, but as yet neither tests nor bug reports have
-indicated any problems, so it might not actually be an edge case that it's
-possible to reach.
-
-=item *
-
-Several compilation errors and segfaults when perl was built with C<-Dmad> were fixed.
-
-=item *
-
-Fixes for lexer API changes in 5.11.2 which broke NYTProf's savesrc option.
-
-=item *
-
-F<-t> should only return TRUE for file handles connected to a TTY
-
-The Microsoft C version of isatty() returns TRUE for all
-character mode devices, including the /dev/null style "nul"
-device and printers like "lpt1".
-
-=item *
-
-Fixed a regression caused by commit fafafbaf which caused a panic during
-parameter passing [perl #70171]
-
-=item *
-
-On systems which in-place edits without backup files, -i'*' now works as
-the documentation says it does [perl #70802]
-
-=item *
-
-Saving and restoring magic flags no longer loses readonly flag.
-
-=item *
-
-The malformed syntax C<grep EXPR LIST> (note the missing comma) no longer
-causes abrupt and total failure.
-
-=item *
-
-Regular expressions compiled with C<qr{}> literals properly set C<$'> when
-matching again.
-
-=item *
-
-Using named subroutines with C<sort> should no longer lead to bus errors [perl
-#71076]
-
-=item *
-
-Numerous bugfixes catch small issues caused by the recently-added Lexer API.
-
-=item *
-
-Smart match against C<@_> sometimes gave false negatives. [perl #71078]
-
-=item *
-
-C<$@> may now be assigned a read-only value (without error or busting the stack).
-
-=item *
-
-C<sort> called recursively from within an active comparison subroutine no
-longer causes a bus error if run multiple times. [perl #71076]
-
-=back
-
-=head1 New or Changed Diagnostics
-
-=over 4
-
-=item *
-
-C<split> now warns when called in void context
-
-=item *
-
-C<printf>-style functions called with too few arguments will now issue the
-warning C<"Missing argument in %s"> [perl #71000]
-
-=back
-
-=head1 New Tests
-
-Many modules updated from CPAN incorporate new tests.
-
-=over 4
-
-=item t/comp/final_line_num.t
-
-See if line numbers are correct at EOF
-
-=item t/comp/form_scope.t
-
-See if format scoping works
-
-=item t/comp/line_debug.t
-
-See if @{"_<$file"} works
-
-=item t/op/filetest_t.t
-
-See if -t file test works
-
-=item t/op/qr.t
-
-See if qr works
-
-=item t/op/utf8cache.t
-
-Tests malfunctions of utf8 cache
-
-=item t/re/uniprops.t
-
-Test unicode \p{} regex constructs
-
-=back
-
-=head1 Deprecations
-
-The following items are now deprecated.
-
-=over 4
-
-=item Use of "goto" to jump into a construct is deprecated
-
-Using C<goto> to jump from an outer scope into an inner
-scope is now deprecated. This rare use case was causing
-problems in the implementation of scopes.
-
-=back
-
-=head1 Acknowledgements
-
-Perl 5.11.3 represents approximately one month of development since
-Perl 5.11.2 and contains 61407 lines of changes across 396 files
-from 40 authors and committers:
-
-Abigail, Alex Davies, Alexandr Ciornii, Andrew Rodland, Andy
-Dougherty, Bram, brian d foy, Chip Salzenberg, Chris Williams, Craig
-A. Berry, Daniel Frederick Crisman, David Golden, Dennis Kaarsemaker,
-Eric Brine, Father Chrysostomos, Gene Sullivan, Gerard Goossen, H.
-Merijn Brand, Hugo van der Sanden, Jan Dubois, Jerry D. Hedden,
-Jesse Vincent, Jim Cromie, Karl Williamson, Leon Brocard, Max
-Maischein, Michael Breen, Moritz Lenz, Nicholas Clark, Rafael
-Garcia-Suarez, Reini Urban, Ricardo Signes, Stepan Kasal, Steve
-Hay, Steve Peters, Tim Bunce, Tony Cook, Vincent Pit and Zefram.
-
-Many of the changes included in this version originated in the CPAN
-modules included in Perl's core. We're grateful to the entire CPAN
-community for helping Perl to flourish.
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://rt.perl.org/perlbug/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please send
-it to perl5-security-report at perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
-to help assess the impact of issues, figure out a resolution, and help
-co-ordinate the release of patches to mitigate or fix the problem across all
-platforms on which Perl is supported. Please only use this address for
-security issues in the Perl core, not for modules independently
-distributed on CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive details
-on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
-
-
Deleted: trunk/contrib/perl/pod/perl5114delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl5114delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl5114delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,278 +0,0 @@
-=head1 NAME
-
-perl5114delta - what is new for perl v5.11.4
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.11.3 release and
-the 5.11.4 release.
-
-If you are upgrading from an earlier release such as 5.11.2, first read
-L<perl5113delta>, which describes differences between 5.11.2 and
-5.11.3.
-
-=head1 Incompatible Changes
-
-=head2 Version number formats
-
-Acceptable version number formats have been formalized into "strict" and
-"lax" rules. C<package NAME VERSION> takes a strict version number. C<use
-NAME VERSION> takes a lax version number. C<UNIVERSAL::VERSION> and the
-L<version> object constructors take lax version numbers. Providing an
-invalid version will result in a fatal error.
-
-These formats will be documented fully in the L<version> module in a
-subsequent release of Perl 5.11. To a first approximation, a "strict"
-version number is a positive decimal number (integer or decimal-fraction)
-without exponentiation or else a dotted-decimal v-string with a leading 'v'
-character and at least three components. A "lax" version number allows
-v-strings with fewer than three components or without a leading 'v'. Under
-"lax" rules, both decimal and dotted-decimal versions may have a trailing
-"alpha" component separated by an underscore character after a fractional
-or dotted-decimal component.
-
-The L<version> module adds C<version::is_strict> and C<version::is_lax>
-functions to check a scalar against these rules.
-
-=head1 Core Enhancements
-
-=head2 Unicode properties
-
-C<\p{XDigit}> now matches the same characters as C<\p{Hex_Digit}>. This
-means that in addition to the characters it currently matches,
-C<[A-Fa-f0-9]>, it will also match their fullwidth equivalent forms, for
-example U+FF10: FULLWIDTH DIGIT ZERO.
-
-=head1 Modules and Pragmata
-
-=head2 Pragmata Changes
-
-=over 4
-
-=item C<less>
-
-Upgraded from version 0.02 to 0.03.
-
-This version introduces the C<stash_name> method to allow subclasses of less to
-pick where in %^H to store their stash.
-
-=item C<version>
-
-Upgraded from version 0.77 to 0.81.
-
-This version adds support for L</Version number formats> as described earlier
-in this document and in its own documentation.
-
-=item C<warnings>
-
-Upgraded from version 1.08 to 1.09.
-
-This version adds the C<illegalproto> warning category. See also L</New or
-Changed Diagnostics> for this change.
-
-=back
-
-=head2 Updated Modules
-
-=over 4
-
-=item C<Archive::Extract>
-
-Upgraded from version 0.36 to 0.38.
-
-=item C<B::Deparse>
-
-Upgraded from version 0.93 to 0.94.
-
-=item C<Compress::Raw::Bzip2>
-
-Upgraded from version 2.021 to 2.024.
-
-=item C<Compress::Raw::Zlib>
-
-Upgraded from version 2.021 to 2.024.
-
-=item C<CPAN>
-
-Upgraded from version 1.94_5301 to 1.94_54.
-
-=item C<File::Fetch>
-
-Upgraded from version 0.22 to 0.24.
-
-=item C<Module::Build>
-
-Upgraded from version 0.36 to 0.3603.
-
-=item C<Safe>
-
-Upgraded from version 2.20 to 2.21.
-
-Anonymous coderefs created in Safe containers no longer get bogus
-arguments passed to them, fixing RT #72068.
-
-=back
-
-=head2 Removed Modules and Pragmata
-
-=over 4
-
-=item C<Devel::DProf::V>
-
-Removed from the Perl core. Prior version was 'undef'.
-
-=back
-
-=head1 Changes to Existing Documentation
-
-A significant fraction of the core documentation has been updated to clarify
-the behavior of Perl's Unicode handling.
-
-Much of the remaining core documentation has been reviewed and edited
-for clarity, consistent use of language, and to fix the spelling of Tom
-Christiansen's name.
-
-=head2 Configuration improvements
-
-USE_ATTRIBUTES_FOR_PERLIO is now reported in the compile-time options
-listed by the C<-V> switch.
-
-=head2 Platform Specific Changes
-
-=over 4
-
-=item VMS
-
-The default pipe buffer size on VMS has been updated to 8192 on 64-bit
-systems.
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item *
-
-Tie::Hash::NamedCapture::* shouldn't abort if passed bad input (RT #71828)
-
-=item *
-
- at _ and $_ no longer leak under threads (RT #34342 and #41138, also
-#70602, #70974)
-
-=back
-
-=head1 New or Changed Diagnostics
-
-=over 4
-
-=item New warning category C<illegalproto>
-
-The two warnings :
-
- Illegal character in prototype for %s : %s
- Prototype after '%c' for %s : %s
-
-have been moved from the C<syntax> top-level warnings category into a new
-first-level category, C<illegalproto>. These two warnings are currently the
-only ones emitted during parsing of an invalid/illegal prototype, so one
-can now do
-
- no warnings 'illegalproto';
-
-to suppress only those, but not other syntax-related warnings. Warnings where
-prototypes are changed, ignored, or not met are still in the C<prototype>
-category as before. (Matt S. Trout)
-
-=item lvalue attribute ignored after the subroutine has been defined
-
-This new warning is issued when one attempts to mark a subroutine as
-lvalue after it has been defined.
-
-=back
-
-=head1 Changed Internals
-
-=over 4
-
-=item *
-
-Perl_magic_setmglob now knows about globs, fixing RT #71254.
-
-=back
-
-=head1 Known Problems
-
-Perl 5.11.4 is a development release leading up to Perl 5.12.0.
-Some notable known problems found in 5.11.4 are listed as dependencies
-of RT #69710, the Perl 5 version 12 meta-ticket.
-
-=head1 Deprecations
-
-The following items are now deprecated.
-
-=over 4
-
-=item C<< UNIVERSAL-E<gt>import() >>
-
-The method C<< UNIVERSAL-E<gt>import() >> is now deprecated. Attempting to
-pass import arguments to a C<use UNIVERSAL> statement will result in a
-deprecation warning. (This is a less noisy version of the full deprecation
-warning added in 5.11.0.)
-
-=back
-
-=head1 Acknowledgements
-
-Perl 5.11.4 represents approximately one month of development since
-Perl 5.11.3 and contains 17682 lines of changes across 318 files
-from 40 authors and committers:
-
-Abigail, Andy Dougherty, brian d foy, Chris Williams, Craig A. Berry,
-David Golden, David Mitchell, Father Chrysostomos, Gerard Goossen,
-H.Merijn Brand, Jesse Vincent, Jim Cromie, Josh ben Jore, Karl
-Williamson, kmx, Matt S Trout, Nicholas Clark, Niko Tyni, Paul Marquess,
-Philip Hazel, Rafael Garcia-Suarez, Rainer Tammer, Reini Urban, Ricardo
-Signes, Shlomi Fish, Tim Bunce, Todd Rinaldo, Tom Christiansen, Tony
-Cook, Vincent Pit, and Zefram
-
-Many of the changes included in this version originated in the CPAN
-modules included in Perl's core. We're grateful to the entire CPAN
-community for helping Perl to flourish.
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at L<http://rt.perl.org/perlbug/>. There may also be
-information at L<http://www.perl.org/>, the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analyzed by the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please send
-it to perl5-security-report at perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
-to help assess the impact of issues, figure out a resolution, and help
-co-ordinate the release of patches to mitigate or fix the problem across all
-platforms on which Perl is supported. Please only use this address for
-security issues in the Perl core, not for modules independently
-distributed on CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive details
-on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl5115delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl5115delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl5115delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,327 +0,0 @@
-=head1 NAME
-
-perl5115delta - what is new for perl v5.11.5
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.11.4 release and
-the 5.11.5 release.
-
-If you are upgrading from an earlier release such as 5.11.3, first read
-L<perl5114delta>, which describes differences between 5.11.3 and
-5.11.4.
-
-=head1 Core Enhancements
-
-=head2 32-bit limit on substr arguments removed
-
-The 32-bit limit on C<substr> arguments has now been removed. The full range
-of the system's signed and unsigned integers is now available for the C<pos>
-and C<len> arguments.
-
-=head1 Modules and Pragmata
-
-=head2 Pragmata Changes
-
-=over 4
-
-=item C<version>
-
-Upgraded from version 0.81 to 0.82.
-
-The C<is_lax> and C<is_strict> functions can now be optionally exported to the
-caller's namespace and are also now documented.
-
-Undefined version objects are now uninitialized with zero rather than C<undef>.
-
-=back
-
-=head2 Updated Modules
-
-=over 4
-
-=item C<B::Debug>
-
-Upgraded from version 1.11 to 1.12.
-
-=item C<CPAN>
-
-Upgraded from version 1.94_53 to 1.94_56.
-
-This resolves RT #72362, in which CPAN was ignoring C<configure_requires>,
-and RT #72348, in which the command C<o conf init> in the CPAN shell could
-cause an exception to be thrown.
-
-This module is also now built in a less specialized way, which resolves a
-problem that caused C<make> after C<make clean> to fail, fixing RT #72218.
-
-=item C<CPANPLUS::Dist::Build>
-
-Upgraded from version 0.44 to 0.46.
-
-This makes the prereq resolving fall back to F<_build/> querying if the
-C<prereq_data> action fails.
-
-=item C<Pod::Perldoc>
-
-Upgraded from version 3.15_01 to 3.15_02.
-
-=item C<Pod::Plainer>
-
-Upgraded from version 1.01 to 1.02.
-
-=item C<Safe>
-
-Upgraded from version 2.21 to 2.22.
-
-This resolves RT #72700, in which an exception thrown from a closure was
-getting lost.
-
-=item C<Socket>
-
-Upgraded from version 1.85 to 1.86.
-
-This makes the new Socket implementation of C<inet_pton> consistent with the
-existing Socket6 implementation of C<inet_pton>, fixing RT #72884.
-
-=item C<podlators>
-
-Upgraded from version 2.2.2 to 2.3.1.
-
-=back
-
-=head1 Changes to Existing Documentation
-
-The syntax C<unless (EXPR) BLOCK else BLOCK> is now documented as valid, as
-is the syntax C<unless (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK>,
-although actually using the latter may not be the best idea for the
-readability of your source code.
-
-=head1 Installation and Configuration Improvements
-
-=head2 Configuration improvements
-
-Support for SystemTap's C<dtrace> compatibility layer has been added and an
-issue with linking C<miniperl> has been fixed in the process.
-
-C<less -R> is now used instead of C<less> for C<groff>'s new usage of ANSI
-escape codes by setting C<$Config{less}> (and thereby C<$Config{pager}>,
-which fixes RT #72156.
-
-USE_PERL_ATOF is now reported in the compile-time options listed by the C<-V>
-switch.
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item *
-
-Arbitrary whitespace is now allowed between C<NAME> and C<VERSION> in
-C<package NAME VERSION;> statements. (Fixes RT #72432)
-
-=item *
-
-A panic caused by trying to load C<charnames> when the parser is already in
-error (e.g. by a missing C<my> under C<use strict;>) is now averted. This
-was a regression since Perl 5.10.0. (Fixes RT #72590)
-
-=item *
-
-Reading C<$!> no longer causes a SEGV for out of range C<errno> values. (Fixes
-RT #72850)
-
-=item *
-
-A possible SEGV in C</\N{...}/> has been fixed. This was a regression since
-Perl 5.10.
-
-=item *
-
-A possible SEGV when freeing a scalar that was upgraded to an C<SVt_REGEXP>
-type from a simple(r) scalar has been fixed.
-
-=item *
-
-A type conversion bug in C<gmtime64> that caused it to break around C<2**48>
-has been fixed.
-
-=item *
-
-Interpolating a regex that makes use of the C<charnames> pragma will no longer
-cause a run-time error. (Fixes RT #56444)
-
-=item *
-
-Array references assigned to C<*Foo::ISA> now have the necessary magic added
-to them to catch any further updates to the new C<@ISA>. (Fixes RT #72866)
-
-=item *
-
-Filehandles are now always blessed into C<IO::File>, which, together with
-some suitable manipulation of C<@IO::File::ISA>, fixes a breakage introduced
-in Perl 5.11.3 by a change that always blessed filehandles into C<IO::Handle>
-rather than checking for C<FileHandle> first.
-
-=item *
-
-A change in the behaviour of C<warnings::enabled> and C<warnings::warnif> in
-Perl 5.10.0 that wasn't documented at the time is now documented in
-L<perl5100delta>. (Fixes RT #62522)
-
-=item *
-
-RT #71504 is now fixed by simply skipping the tests that failed on OpenBSD
-with ithreads and perlio.
-
-=back
-
-=head1 New or Changed Diagnostics
-
-=over 4
-
-=item *
-
-The fatal error C<Malformed UTF-8 returned by \N> is now produced if the
-C<charnames> handler returns malformed UTF-8.
-
-=item *
-
-If an unresolved named character or sequence was encountered when compiling a
-regex pattern then the fatal error C<\\N{NAME} must be resolved by the lexer>
-is now produced. This can happen, for example, when using a single-quotish
-context like C<$re = '\N{SPACE}'; $re;>. See L<perldiag> for more examples of
-how the lexer can get bypassed.
-
-=item *
-
-The fatal error C<Invalid hexadecimal number in \\N{U+...}> will be produced
-if the character constant represented by C<...> is not a valid hexadecimal
-number.
-
-=item *
-
-The new meaning of C<\N> as C<[^\n]> is not valid in a bracketed character
-class, just like C<.> in a character class loses its special meaning, and will
-cause the fatal error C<\\N in a character class must be a named character:
-\\N{...}>.
-
-=item *
-
-The rules on what is legal for the C<...> in C<\N{...}> have been tightened
-up so that unless the C<...> begins with an alphabetic character and continues
-with a combination of alphanumerics, dashes, spaces, parentheses or colons
-then the warning C<Deprecated character(s) in \\N{...} starting at '%s'> is
-now issued.
-
-=item *
-
-The warning C<Using just the first characters returned by \N{}> will be
-issued if the C<charnames> handler returns a sequence of characters which
-exceeds the limit of the number of characters that can be used. The message
-will indicate which characters were used and which were discarded.
-
-=item *
-
-Currently, all but the first of the several characters that the C<charnames>
-handler may return are discarded when used in a regular expression pattern
-bracketed character class. If this happens then the warning C<Using just the
-first character returned by \N{} in character class> will be issued.
-
-=item *
-
-The warning C<Missing right brace on \\N{} or unescaped left brace after \\N.
-Assuming the latter> will be issued if Perl encounters a C<\N{> but doesn't
-find a matching C<}>. In this case Perl doesn't know if it was mistakenly
-omitted, or if "match non-newline" followed by "match a C<{>" was desired.
-It assumes the latter because that is actually a valid interpretation as
-written, unlike the other case. If you meant the former, you need to add the
-matching right brace. If you did mean the latter, you can silence this
-warning by writing instead C<\N\{>.
-
-=item *
-
-C<gmtime> and C<localtime> called with numbers smaller than they can reliably
-handle will now issue the warnings C<gmtime(%.0f) too small> and
-C<localtime(%.0f) too small>.
-
-=back
-
-=head1 New Tests
-
-=over 4
-
-=item F<t/op/filehandle.t>
-
-Tests some suitably portable filetest operators to check that they work as
-expected, particularly in the light of some internal changes made in how
-filehandles are blessed.
-
-=item F<t/op/time_loop.t>
-
-Tests that times greater than C<2**63>, which can now be handed to C<gmtime>
-and C<localtime>, do not cause an internal overflow or an excessively long
-loop.
-
-=back
-
-=head1 Known Problems
-
-Perl 5.11.5 is a development release leading up to Perl 5.12.0.
-Some notable known problems found in 5.11.5 are listed as dependencies
-of RT #69710, the Perl 5 version 12 meta-ticket.
-
-=head1 Acknowledgements
-
-Perl 5.11.5 represents approximately one month of development since
-Perl 5.11.4 and contains 9618 lines of changes across 151 files
-from 33 authors and committers:
-
-E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason, Abigail, brian d foy, Chris
-Williams, David Golden, David Mitchell, Eric Brine, Frank Wiegand, Gisle
-Aas, H.Merijn Brand, Jan Dubois, Jesse Vincent, Jim Cromie, John Peacock,
-Josh ben Jore, Karl Williamson, Marcus Holland-Moritz, Michael G Schwern,
-Nicholas Clark, Offer Kaye, Philippe Bruhat (BooK), Rafael Garcia-Suarez,
-Reini Urban, Ricardo Signes, Robin Barker, Slaven Rezic, Steffen Mueller,
-Steve Hay, Steve Peters, Tim Bunce, Todd Rinaldo, Tony Cook and
-Vincent Pit.
-
-Many of the changes included in this version originated in the CPAN
-modules included in Perl's core. We're grateful to the entire CPAN
-community for helping Perl to flourish.
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://rt.perl.org/perlbug/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analyzed by the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please send
-it to perl5-security-report at perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
-to help assess the impact of issues, figure out a resolution, and help
-co-ordinate the release of patches to mitigate or fix the problem across all
-platforms on which Perl is supported. Please only use this address for
-security issues in the Perl core, not for modules independently
-distributed on CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive details
-on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl5130delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl5130delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl5130delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,133 +0,0 @@
-=encoding utf8
-
-=head1 NAME
-
-perl5130delta - what is new for perl v5.13.0
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.12.0 release and the
-5.13.0 release.
-
-If you are upgrading from an earlier release such as 5.10.0, first read
-L<perl5120delta>, which describes differences between 5.10.0 and
-5.12.0.
-
-=head1 Core Enhancements
-
-=head2 "safe signals" optimization
-
-Signal dispatch has been moved from the runloop into control ops. This
-should give a few percent speed increase, and eliminates almost all of
-the speed penalty caused by the introduction of "safe signals" in
-5.8.0. Signals should still be dispatched within the same statement as
-they were previously - if this is not the case, or it is possible to
-create uninterruptible loops, this is a bug, and reports are encouraged
-of how to recreate such issues.
-
-=head2 Assignment to C<$0> sets the legacy process name with C<prctl()> on Linux
-
-On Linux the legacy process name will be set with L<prctl(2)>, in
-addition to altering the POSIX name via C<argv[0]> as perl has done
-since version 4.000. Now system utilities that read the legacy process
-name such as ps, top and killall will recognize the name you set when
-assigning to C<$0>. The string you supply will be cut off at 16 bytes,
-this is a limitation imposed by Linux.
-
-=head2 Optimization of shift; and pop; calls without arguments
-
-Additional two OPs are not added anymore into op tree for shift and pop
-calls without argument (when it works on C<@_>). Makes C<shift;> 5%
-faster over C<shift @_;> on not threaded perl and 25% faster on threaded.
-
-=head1 Modules and Pragmata
-
-=head2 Updated Modules
-
-=over 4
-
-=item CGI
-
-Updated to version 3.49.
-
-=item Data::Dumper
-
-Updated to version 2.126.
-
-=item MIME::Base64
-
-Updated to 3.09.
-
-=item threads
-
-Updated to version 1.77
-
-=item threads-shared
-
-Updated to version 1.33
-
-=back
-
-=head1 Installation and Configuration Improvements
-
-=head2 Platform Specific Changes
-
-=over 4
-
-=item AIX
-
-Allow building on AIX 4.2.
-
-=back
-
-=head1 Acknowledgements
-
-Perl 5.13.0 represents eight days of development since Perl 5.12.0 and
-contains 3,766 lines of changes across 151 files from 29 authors and
-committers.
-
-Thank you to the following for contributing to this release:
-
-Ævar Arnfjörð Bjarmason, Alex Vandiver, Chris Williams, chromatic,
-Craig A. Berry, David Golden, David Mitchell, Eric Brine, Father
-Chrysostomos, Florian Ragwitz, Frank Wiegand, Gisle Aas, H.Merijn
-Brand, Hugo van der Sanden, Jesse Vincent, Josh ben Jore, Karl
-Williamson, Leon Brocard, Michael G Schwern, Michael G. Schwern, Nga
-Tang Chan, Nicholas Clark, Niko Tyni, Rafael Garcia-Suarez, Ricardo
-Signes, Robin Barker, Slaven Rezic, Steffen Mueller, Zefram.
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl bug
-database at http://rt.perl.org/perlbug/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down to a
-tiny but sufficient test case. Your bug report, along with the output
-of C<perl -V>, will be sent off to perlbug at perl.org to be analysed by
-the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please
-send it to perl5-security-report at perl.org. This points to a closed
-subscription unarchived mailing list, which includes all the core
-committers, who be able to help assess the impact of issues, figure out
-a resolution, and help co-ordinate the release of patches to mitigate
-or fix the problem across all platforms on which Perl is supported.
-Please only use this address for security issues in the Perl core, not
-for modules independently distributed on CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive
-details on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl51310delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl51310delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl51310delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,814 +0,0 @@
-=encoding utf8
-
-=head1 NAME
-
-perl51310delta - what is new for perl v5.13.10
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.13.9 release and
-the 5.13.10 release.
-
-If you are upgrading from an earlier release such as 5.13.8, first read
-L<perl5139delta>, which describes differences between 5.13.8 and
-5.13.9.
-
-=head1 Core Enhancements
-
-=head2 The new regular expression modifiers available in suffix form
-
-Various releases of the 5.13.x series have added new regular expression
-modifiers, C</a>, C</d>, C</l>, and C</u>. They were only available in
-infix form (e.g., C<(?a:...)>) until this release; now they are usable
-in suffix form. This change was made too late to change all the
-affected documentation, so there are a number of places that erroneously
-say these must be used in infix form.
-
-However, there is an ambiguity with the construct, C<s/foo/bar/le...>. Due
-to backward compatibility constraints, in Perl 5.14 only, it will be
-resolved as C<s/foo/bar/ le...>, that is, as meaning to take the result
-of the substitution, and see if it is stringwise less-than-or-equal-to
-what follows. In Perl 5.16 and later, it will instead be resolved as
-meaning to do the pattern match using the rules of the current locale,
-and evaluate the rhs as an expression when doing the substitution. In
-5.14, if you want the latter interpretation, you can write "el" instead.
-
-=head2 Add C<\p{Titlecase}> as a synonym for C<\p{Title}>
-
-This synonym is added for symmetry with the Unicode property names
-C<\p{Uppercase}> and C<\p{Lowercase}>.
-
-=head2 New regular expression modifier option C</aa>
-
-Doubling the C</a> regular expression modifier increases its effect,
-so that in case-insensitive matching, no ASCII character will match a
-non-ASCII character. For example, normally,
-
- 'k' =~ /\N{KELVIN SIGN}/i
-
-will match; it won't under C</aa>.
-
-=head2 New warnings categories for problematic (non-)Unicode code points.
-
-Three new warnings subcategories of <utf8> have been added. These
-allow you to turn off warnings for their covered events, while allowing
-the other UTF-8 warnings to remain on. The three categories are:
-C<surrogate> when UTF-16 surrogates are encountered;
-C<nonchar> when Unicode non-character code points are encountered;
-and C<non_unicode> when code points that are above the legal Unicode
-maximum of 0x10FFFF are encountered.
-
-=head1 Incompatible Changes
-
-=head2 Most C<\p{}> properties are now immune from case-insensitive matching
-
-For most Unicode properties, it doesn't make sense to have them match
-differently under C</i> case-insensitive matching than not. And doing
-so leads to unexpected results and potential security holes. For
-example
-
- m/\p{ASCII_Hex_Digit}+/i
-
-could previously match non-ASCII characters because of the Unicode
-matching rules. There were a number of bugs in this feature until an
-earlier release in the 5.13 series. Now this release reverts, and
-removes the feature completely except for the few properties where
-people have come to expect it, namely the ones where casing is an
-integral part of their functionality, such as C<m/\p{Uppercase}/i> and
-C<m/\p{Lowercase}/i>, both of which match the exact same code points,
-namely those matched by C<m/\p{Cased}/i>. Details are in
-L<perlrecharclass/Unicode Properties>.
-
-User-defined property handlers that need to match differently under
-C</i> must change to read the new boolean parameter passed it which is
-non-zero if case-insensitive matching is in effect; 0 if not. See
-L<perluniprops/User-Defined Character Properties>.
-
-=head2 regex: \p{} in pattern implies Unicode semantics
-
-Now, a Unicode property match specified in the pattern will indicate
-that the pattern is meant for matching according to Unicode rules
-(e40e74f)
-
-=head2 add GvCV_set() and GvGP_set() macros and change GvGP()
-
-This allows a future commit to eliminate some backref magic between GV
-and CVs, which will require complete control over assignment to the
-gp_cv slot.
-
-If you've been using GvGP() in lvalue context this change will break
-your code, you should use GvGP_set() instead. (c43ae56)
-
-=head2 _swash_inversion_hash is no longer exported as part of the API
-
-This function shouldn't be called from XS code. (4c2e113)
-
-=head2 Unreferenced objects in global destruction
-
-The fix for [perl #36347], which made sure that destructors were called on
-unreferenced objects, broke the tests for three CPAN modules, which
-apparently rely on the bug.
-
-To provide more time for fixing them (as this is such a minor bug), we
-have reverted the fix until after perl 5.14.0.
-
-This resolves [perl #82542] and other related tickets.
-
-=head2 C<close> on shared pipes
-
-The C<close> function no longer waits for the child process to exit if the
-underlying file descriptor is still in use by another thread, to avoid
-deadlocks. It returns true in such cases.
-
-=head1 Deprecations
-
-=over
-
-=item Deprecated Modules
-
-The following modules will be removed from the core distribution in a
-future release, and should be installed from CPAN instead. Distributions
-on CPAN which require these should add them to their prerequisites. The
-core versions of these modules warnings will issue a deprecation warning.
-
-If you ship a packaged version of Perl, either alone or as part of a
-larger system, then you should carefully consider the repercussions of
-core module deprecations. You may want to consider shipping your default
-build of Perl with packages for some or all deprecated modules which
-install into C<vendor> or C<site> perl library directories. This will
-inhibit the deprecation warnings.
-
-Alternatively, you may want to consider patching F<lib/deprecate.pm>
-to provide deprecation warnings specific to your packaging system
-or distribution of Perl, consistent with how your packaging system
-or distribution manages a staged transition from a release where the
-installation of a single package provides the given functionality, to
-a later release where the system administrator needs to know to install
-multiple packages to get that same functionality.
-
-You can silence these deprecation warnings by installing the modules
-in question from CPAN. To install the latest version of all of them,
-just install C<Task::Deprecations::5_14>.
-
-=over
-
-=item L<Devel::DProf>
-
-We strongly recommend that you install and used L<Devel::NYTProf> in
-preference, as it offers significantly improved profiling and reporting.
-
-=back
-
-=back
-
-=head2 User-defined case-mapping
-
-This feature is being deprecated due to its many issues, as documented in
-L<perlunicode/User-Defined Case Mappings (for serious hackers only)>.
-It is planned to remove this feature in Perl 5.16. A CPAN module
-providing improved functionality is being prepared for release by the
-time 5.14 is.
-
-=head1 Modules and Pragmata
-
-=head2 New Modules and Pragmata
-
-=over 4
-
-=item *
-
-C<CPAN::Meta> version 2.110440 has been added as a dual-life module. It
-provides a standard library to read, interpret and write CPAN distribution
-metadata files (e.g. META.json and META.yml) which describes a
-distribution, its contents, and the requirements for building it and
-installing it. The latest CPAN distribution metadata specification is
-included as C<CPAN::Meta::Spec> and notes on changes in the specification
-over time are given in C<CPAN::Meta::History>.
-
-=item *
-
-C<Version::Requirements> version 0.101020 has been added as a dual-life
-module. It provides a standard library to model and manipulates module
-prerequisites and version constraints as defined in the L<CPAN::Meta::Spec>.
-
-=back
-
-=head2 Updated Modules and Pragmata
-
-=over 4
-
-=item *
-
-C<B> has been upgraded from version 1.27 to 1.28.
-
-=item *
-
-C<Carp> has been upgraded from version 1.19 to 1.20.
-
-[perl #82854] It now avoids using regular expressions that cause perl to
-load its Unicode tables, in order to avoid the 'BEGIN not safe after
-errors' error that will ensue if there has been a syntax error.
-
-=item *
-
-C<CGI> has been upgraded from version 3.51 to 3.52
-
-=item *
-
-C<CPAN> has been upgraded from version 1.94_64 to 1.94_65
-
-Includes support for META.json and MYMETA.json.
-
-=item *
-
-C<CPANPLUS> has been upgraded from version 0.9011 to 0.9101
-
-Includes support for META.json and MYMETA.json and a change to
-using Digest::SHA for CPAN checksums.
-
-=item *
-
-C<deprecate> has been upgraded from version 0.01 to 0.02.
-
-=item *
-
-C<diagnostics> has been upgraded from version 1.21 to 1.22.
-
-It now renders pod links slightly better, and has been taught to find
-descriptions for messages that share their descriptions with other
-messages.
-
-=item *
-
-C<Devel::DProf> has been upgraded from version 20080331.00 to 20110217.00.
-
-Merely loading C<Devel::DProf> now no longer triggers profiling to start.
-C<use Devel::DProf> and C<perl -d:DProf ...> still behave as before and start
-the profiler.
-
-NOTE: C<Devel::DProf> is deprecated and will be removed from a future
-version of Perl. We strongly recommend that you install and use
-L<Devel::NYTProf> instead, as it offers significantly improved
-profiling and reporting.
-
-=item *
-
-C<DynaLoader> has been upgraded from version 1.12 to 1.13.
-
-[perl #84358] It no longer inherits from AutoLoader; hence it no longer
-produces weird error messages for unsuccessful method calls on classes that
-inherit from DynaLoader.
-
-=item *
-
-C<IO::Select> has been upgraded from version 1.17 to 1.18.
-
-It now allows IO::Handle objects (and objects in derived classes) to be
-removed from an IO::Select set even if the underlying file descriptor is
-closed or invalid.
-
-=item *
-
-C<IPC::Cmd> has been upgraded from version 0.68 to 0.70
-
-=item *
-
-C<HTTP::Tiny> has been upgraded from version 0.009 to 0.010
-
-=item *
-
-C<Math::BigInt> has been upgraded from version 1.99_04 to 1.992.
-
-=item *
-
-C<Module::Build> has been upgraded from version 0.3607 to 0.37_05.
-
-A notable change is the deprecation of several modules.
-Module::Build::Version has been deprecated and Module::Build now relies
-directly upon L<version>. Module::Build::ModuleInfo has been deprecated in
-favor of a standalone copy of it called L<Module::Metadata>.
-Module::Build::YAML has been deprecated in favor of L<CPAN::Meta::YAML>.
-
-Module::Build now also generates META.json and MYMETA.json files
-in accordance with version 2 of the CPAN distribution metadata specification,
-L<CPAN::Meta::Spec>. The older format META.yml and MYMETA.yml files are
-still generated, as well.
-
-=item *
-
-C<Module::Load::Conditional> has been upgraded from version 0.40 to 0.44
-
-=item *
-
-C<Module::Metadata> has been upgraded from version 1.000003 to 1.000004.
-
-=item *
-
-C<overload> has been upgraded from version 1.12 to 1.13.
-
-The documentation has greatly improved. See L</Documentation> below.
-
-=item *
-
-C<Parse::CPAN::Meta> has been upgraded from version 1.40 to 1.4401.
-
-The latest Parse::CPAN::Meta can now read YAML or JSON files using
-L<CPAN::Meta::YAML> and L<JSON::PP>, which are now part of the Perl core.
-
-=item *
-
-C<re> has been upgraded from version 0.16 to 0.17.
-
-It now supports the double-a flag: C<use re '/aa';>
-
-The C<regmust> function used to crash when called on a regular expression
-belonging to a pluggable engine. Now it has been disabled for those.
-
-C<regmust> no longer leaks memory.
-
-=item *
-
-C<Term::UI> has been upgraded from version 0.24 to 0.26
-
-=item *
-
-C<Unicode::Collate> has been upgraded from version 0.68 to 0.72
-
-This also sees the switch from using the pure-perl version of this
-module to the XS version.`
-
-=item *
-
-C<VMS::DCLsym> has been upgraded from version 1.04 to 1.05.
-
-Two bugs have been fixed [perl #84086]:
-
-The symbol table name was lost when tying a hash, due to a thinko in
-C<TIEHASH>. The result was that all tied hashes interacted with the
-local symbol table.
-
-Unless a symbol table name had been explicitly specified in the call
-to the constructor, querying the special key ':LOCAL' failed to
-identify objects connected to the local symbol table.
-
-=item *
-
-Added new function C<Unicode::UCD::num()>. This function will return the
-numeric value of the string passed it; C<undef> if the string in its
-entirety has no safe numeric value.
-
-To be safe, a string must be a single character which has a numeric
-value, or consist entirely of characters that match \d, coming from the
-same Unicode block of digits. Thus, a mix of Bengali and Western
-digits would be considered unsafe, as well as a mix of half- and
-full-width digits, but strings consisting entirely of Devanagari digits
-or of "Mathematical Bold" digits would would be safe.
-
-=item *
-
-C<CPAN> has been upgraded from version 1.94_63 to 1.94_64.
-
-=back
-
-=head1 Documentation
-
-=head2 Changes to Existing Documentation
-
-=head3 L<overload>
-
-=over 4
-
-=item *
-
-L<overload>'s documentation has practically undergone a rewrite. It
-is now much more straightforward and clear.
-
-=back
-
-=head3 L<perlhack> and perlrepository
-
-=over 4
-
-=item *
-
-The L<perlhack> and perlrepository documents have been heavily edited and
-split up into several new documents.
-
-The L<perlhack> document is now much shorter, and focuses on the Perl 5
-development process and submitting patches to Perl. The technical content has
-been moved to several new documents, L<perlsource>, L<perlinterp>,
-L<perlhacktut>, and L<perlhacktips>. This technical content has only been
-lightly edited.
-
-The perlrepository document has been renamed to L<perlgit>. This new document
-is just a how-to on using git with the Perl source code. Any other content
-that used to be in perlrepository has been moved to perlhack.
-
-=back
-
-=head3 L<perlfunc>
-
-=over 4
-
-=item *
-
-The documentation for the C<map> function now contains more examples,
-see B<perldoc -f map> (f947627)
-
-=back
-
-=head3 L<perlfaq4>
-
-=over 4
-
-=item *
-
-Examples in L<perlfaq4> have been updated to show the use of
-L<Time::Piece>. (9243591)
-
-=back
-
-=head3 Miscellaneous
-
-=over 4
-
-=item *
-
-Many POD related RT bugs and other issues which are too numerous to
-enumerate have been solved by Michael Stevens.
-
-=back
-
-=head1 Diagnostics
-
-The following additions or changes have been made to diagnostic output,
-including warnings and fatal error messages. For the complete list of
-diagnostic messages, see L<perldiag>.
-
-=head2 New Diagnostics
-
-=over 4
-
-=item "\b{" is deprecated; use "\b\{" instead
-
-=item "\B{" is deprecated; use "\B\{" instead
-
-Use of an unescaped "{" immediately following a C<\b> or C<\B> is now
-deprecated so as to reserve its use for Perl itself in a future release.
-
-=item regcomp: Add warning if \p is used under locale. (fb2e24c)
-
-C<\p> implies Unicode matching rules, which are likely going to be
-different than the locale's.
-
-=item panic: gp_free failed to free glob pointer - something is repeatedly re-creating entries
-
-This new error is triggered if a destructor called on an object in a
-typeglob that is being freed creates a new typeglob entry containing an
-object with a destructor that creates a new entry containing an object....
-
-=item refcnt: fd %d%s
-
-This new error only occurs if a internal consistency check fails when a
-pipe is about to be closed.
-
-=back
-
-=head2 Changes to Existing Diagnostics
-
-=over 4
-
-=item *
-
-The warning message about regex unrecognized escapes passed through is
-changed to include any literal '{' following the 2-char escape. e.g.,
-"\q{" will include the { in the message as part of the escape
-(216bfc0).
-
-=item *
-
-C<binmode $fh, ':scalar'> no longer warns (8250589)
-
-Perl will now no longer produce this warning:
-
- $ perl -we 'open my $f, ">", \my $x; binmode $f, "scalar"'
- Use of uninitialized value in binmode at -e line 1.
-
-=back
-
-=head1 Utility Changes
-
-=head3 L<perlbug>
-
-=over 4
-
-=item *
-
-[perl #82996] Use the user's from address as return-path in perlbug
-
-Many systems these days don't have a valid Internet domain name and
-perlbug at perl.org does not accept email with a return-path that does
-not resolve. Therefore pass the user's address to sendmail so it's
-less likely to get stuck in a mail queue somewhere. (019cfd2)
-
-=back
-
-=head1 Configuration and Compilation
-
-=over 4
-
-=item *
-
-make reg_eval_scope.t TODOs consistently fail (daaf7ac)
-
-Some of the TODO tests in reg_eval_scope.t spuriously passed under
-non-threaded builds. Make the tests harder so they always fail.
-
-Since one of the key bugs in (?{..}) is the trashing of the parent pad,
-add some extra lexical vars to the parent scope and check they're still
-there at the end.
-
-=item *
-
-Stop EU::CBuilder's tests from failing in parallel (cbf59d5)
-
-It used to use the same paths for temporary files in all tests. This
-blew up randomly when the tests were run in parallel.
-
-=back
-
-=head1 Testing
-
-=over 4
-
-=item *
-
-F<porting/FindExt.t> now skips all tests on a static (-Uusedl) build
-of perl.
-
-=item *
-
-F<porting/FindExt.t> now passes on non-Win32 platforms when some
-extensions are built statically.
-
-=back
-
-=head1 Platform Support
-
-=head2 Platform-Specific Notes
-
-=over 4
-
-=item Windows
-
-=over 4
-
-=item *
-
-The C<test-prep> build target now depends on F<pod/perltoc.pod> to allow the
-F<t/porting/buildtoc.t> test to run successfully.
-
-=back
-
-=item MirBSD
-
-=over 4
-
-=item *
-
-[perl #82988] Skip hanging taint.t test on MirBSD 10 (1fb83d0)
-
-Skip a hanging test under MirBSD that was already being skipped under
-OpenBSD.
-
-=item *
-
-Previously if you build perl with a shared libperl.so on MirBSD (the
-default config), it will work up to the installation; however, once
-installed, it will be unable to find libperl. Treat path handling
-like in the other BSD dialects.
-
-=back
-
-=back
-
-=head1 Internal Changes
-
-=over 4
-
-=item *
-
-Fix harmless invalid read in Perl_re_compile() (f6d9469)
-
-[perl #2460] described a case where electric fence reported an invalid
-read. This could be reproduced under valgrind with blead and -e'/x/',
-but only on a non-debugging build.
-
-This was because it was checking for certain pairs of nodes (e.g. BOL + END)
-and wasn't allowing for EXACT nodes, which have the string at the next
-node position when using a naive NEXTOPER(first). In the non-debugging
-build, the nodes aren't initialised to zero, and a 1-char EXACT node isn't
-long enough to spill into the type field of the "next node".
-
-Fix this by only using NEXTOPER(first) when we know the first node is
-kosher.
-
-=item *
-
-Break out the generated function Perl_keywords() into F<keywords.c>, a new file. (26ea9e1)
-
-As it and Perl_yylex() both need FEATURE_IS_ENABLED, feature_is_enabled() is
-no longer static, and the two macro definitions move from toke.c to perl.h
-
-Previously, one had to cut and paste the output of perl_keywords.pl into the
-middle of toke.c, and it was not clear that it was generated code.
-
-=item *
-
-A lot of tests have been ported from Test to Test::More, e.g. in
-3842ad6.
-
-=item *
-
-Increase default PerlIO buffer size. (b83080d)
-
-The previous default size of a PerlIO buffer (4096 bytes) has been increased
-to the larger of 8192 bytes and your local BUFSIZ. Benchmarks show that doubling
-this decade-old default increases read and write performance in the neighborhood
-of 25% to 50% when using the default layers of perlio on top of unix. To choose
-a non-default size, such as to get back the old value or to obtain and even
-larger value, configure with:
-
- ./Configure -Accflags=-DPERLIOBUF_DEFAULT_BUFSIZ=N
-
-where N is the desired size in bytes; it should probably be a multiple of
-your page size.
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item *
-
-A Unicode C<\p{}> property match in a regular expression pattern will
-now force Unicode rules for the rest of the regular expression
-
-=item *
-
-[perl #38456] binmode FH, ":crlf" only modifies top crlf layer (7826b36)
-
-When pushed on top of the stack, crlf will no longer enable crlf layers
-lower in the stack. This will prevent unexpected results.
-
-=item *
-
-Fix 'raw' layer for RT #80764 (ecfd064)
-
-Made a ':raw' open do what it advertises to do (first open the file,
-then binmode it), instead of leaving off the top layer.
-
-=item *
-
-Use PerlIOBase_open for pop, utf8 and bytes layers (c0888ac)
-
-Three of Perl's builtin PerlIO layers (C<:pop>, C<:utf8> and
-C<:bytes>) didn't allow stacking when opening a file. For example
-this:
-
- open FH, '>:pop:perlio', 'some.file' or die $!;
-
-Would throw an error: "Invalid argument". This has been fixed in this
-release.
-
-=item *
-
-An issue present since 5.13.1, where s/A/B/ with A utf8 and B
-non-utf8, could cause corruption or segfaults has been
-fixed. (c95ca9b)
-
-=item *
-
-String evals will no longer fail after 2 billion scopes have been
-compiled (d1bfb64, 2df5bdd, 0d311cd and 6012dc8)
-
-=item *
-
-[perl #81750] When strict 'refs' mode is off,
-C<%{...}> in rvalue context returns C<undef> if
-its argument is undefined. An optimisation introduced in perl 5.12.0 to
-make C<keys %{...}> faster when used as a boolean did not take this into
-account, causing C<keys %{+undef}> (and C<keys %$foo> when C<$foo> is
-undefined) to be an error, which it should only be in strict mode.
-
-=item *
-
-[perl #83194] Combining the vector (%v) flag and dynamic precision would
-cause sprintf to confuse the order of its arguments, making it treat the
-string as the precision and vice versa.
-
-=item *
-
-[perl #77692] Sometimes the UTF8 length cache would not be reset on a value
-returned by substr, causing C<length(substr($uni_string,...))> to give
-wrong answers. With C<${^UTF8CACHE}> set to -1, it would produce a 'panic'
-error message, too.
-
-=item *
-
-During the restoration of a localised typeglob on scope exit, any
-destructors called as a result would be able to see the typeglob in an
-inconsistent state, containing freed entries, which could result in a
-crash. This would affect code like this:
-
- local *@;
- eval { die bless [] }; # puts an object in $@
- sub DESTROY {
- local $@; # boom
- }
-
-Now the glob entries are cleared before any destructors are called. This
-also means that destructors can vivify entries in the glob. So perl tries
-again and, if the entries are re-created too many times, dies with a
-'panic: gp_free...' error message.
-
-=item *
-
-[perl #78494] When pipes are shared between threads, the C<close> function
-(and any implicit close, such as on thread exit) no longer blocks.
-
-=item *
-
-Several contexts no longer allow a Unicode character to begin a word
-that should never begin words, for an example an accent that must follow
-another character previously could precede all other characters.
-
-=item *
-
-Case insensitive matching in regular expressions compiled under C<use
-locale> now works much more sanely when the pattern and/or target string
-are encoded in UTF-8. Previously, under these conditions the localeness
-was completely lost. Now, code points above 255 are treated as Unicode,
-but code points between 0 and 255 are treated using the current locale
-rules, regardless of whether the pattern or string are encoded in UTF-8.
-The few case insensitive matches that cross the 255/256 boundary are not
-allowed. For example, 0xFF does not caselessly match the character at
-0x178, LATIN CAPITAL LETTER Y WITH DIAERESIS, because 0xFF may not be
-LATIN SMALL LETTER Y in the current locale, and Perl has no way of
-knowing if that character even exists in the locale, much less what code
-point it is.
-
-=back
-
-=head1 Acknowledgements
-
-Perl 5.13.10 represents approximately one month of development since
-Perl 5.13.9 and contains approximately 63000 lines of changes across
-609 files from 38 authors and committers:
-
-Abigail, Alexander Hartmaier, brian d foy, Charles Bailey, Chip
-Salzenberg, Chris 'BinGOs' Williams, Craig A. Berry, Curtis Jewell,
-Dave Rolsky, David Golden, David Leadbeater, David Mitchell, David
-Wheeler, Father Chrysostomos, Florian Ragwitz, Franz Fasching, George
-Greer, H.Merijn Brand, Hongwen Qiu, Hugo van der Sanden, Jay Hannah,
-Jesse Vincent, Karl Williamson, Larwan Berke, Leon Timmermans, Michael
-Breen, Michael Stevens, Nicholas Clark, Noirin Shirley, Paul Evans,
-Peter John Acklam, Ricardo Signes, Robin Barker, Steven Schubiger, Tom
-Christiansen, Tony Cook, Zsbán Ambrus and Ævar Arnfjörð Bjarmason
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://rt.perl.org/perlbug/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the L<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please send
-it to perl5-security-report at perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
-to help assess the impact of issues, figure out a resolution, and help
-co-ordinate the release of patches to mitigate or fix the problem across all
-platforms on which Perl is supported. Please only use this address for
-security issues in the Perl core, not for modules independently
-distributed on CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive details
-on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl51311delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl51311delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl51311delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,513 +0,0 @@
-=encoding utf8
-
-=head1 NAME
-
-perl51311delta - what is new for perl v5.13.11
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.13.10 release and
-the 5.13.11 release.
-
-If you are upgrading from an earlier release such as 5.13.9, first read
-L<perl5139delta>, which describes differences between 5.13.9 and
-5.13.10.
-
-=head1 Security
-
-=head2 User-defined regular expression properties
-
-Perl no longer allows a tainted regular expression to invoke a user-defined
-property via C<\p{...}> syntax. It simply dies instead [perl #82616].
-
-=head1 Incompatible Changes
-
-=head2 local($_) will strip all magic from $_
-
-local() on scalar variables will give them a new value, but keep all
-their magic intact. This has proven to be problematic for the default
-scalar variable $_, where L<perlsub> recommends that any subroutine
-that assigns to $_ should localize it first. This would throw an
-exception if $_ is aliased to a read-only variable, and could have
-various unintentional side-effects in general.
-
-Therefore, as an exception to the general rule, local($_) will not
-only assign a new value to $_, but also remove all existing magic from
-it as well.
-
-=head2 Passing references to warn()
-
-An earlier Perl 5.13.x release changed C<warn($ref)> to leave the reference
-unchanged, allowing C<$SIG{__WARN__}> handlers to access the original
-reference. But this stopped warnings that were references from having the
-file and line number appended even when there was no C<$SIG{__WARN__}>
-handler in place.
-
-Now C<warn> checks for the presence of such a handler and, if there is
-none, proceeds to stringify the reference and append the file and line
-number. This allows simple uses of C<warn> for debugging to continue to
-work as they did before.
-
-=head2 fork() emulation will not wait for signalled children
-
-On Windows parent processes would not terminate until all forked
-childred had terminated first. However, C<kill('KILL', ...)> is
-inherently unstable on pseudo-processes, and C<kill('TERM', ...)>
-might not get delivered if the child if blocked in a system call.
-
-To avoid the deadlock and still provide a safe mechanism to terminate
-the hosting process, Perl will now no longer wait for children that
-have been sent a SIGTERM signal. It is up to the parent process to
-waitpid() for these children if child clean-up processing must be
-allowed to finish. However, it is also the responsibility of the
-parent then to avoid the deadlock by making sure the child process
-can't be blocked on I/O either.
-
-See L<perlfork> for more information about the fork() emulation on
-Windows.
-
-=head2 Perl source code is read in text mode on Windows
-
-Perl scripts used to be read in binary mode on Windows for the benefit
-of the ByteLoader module (which is no longer part of core Perl). This
-had the side effect of breaking various operations on the DATA filehandle,
-including seek()/tell(), and even simply reading from DATA after file handles
-have been flushed by a call to system(), backticks, fork() etc.
-
-The default build options for Windows have been changed to read Perl source
-code on Windows in text mode now. Hopefully ByteLoader will be updated on
-CPAN to automatically handle this situation.
-
-=head1 Performance Enhancements
-
-=over 4
-
-=item *
-
-An earlier optimisation to speed up C<my @array = ...> and
-C<my %hash = ...> assignments caused a bug and was disabled in Perl 5.12.0.
-
-Now we have found another way to speed up these assignments [perl #82110].
-
-=back
-
-=head1 Modules and Pragmata
-
-=head2 Updated Modules and Pragmata
-
-=over 4
-
-=item *
-
-C<attributes> has been upgraded from version 0.13 to 0.14.
-
-=item *
-
-C<base> has been upgraded from version 2.15 to 2.16.
-
-=item *
-
-C<CPAN> has been upgraded from version 1.94_65 to 1.9600.
-
-=item *
-
-C<CPANPLUS> has been upgraded from version 0.9101 to 0.9103
-
-=item *
-
-C<CPANPLUS::Dist::Build> has been upgraded from version 0.52 to 0.54
-
-=item *
-
-C<Cwd> has been downgraded from version 3.37 to 3.36.
-
-An optimisation that recent core changes have rendered unnecessary has been
-reverted.
-
-=item *
-
-C<Devel::DProf> has been upgraded from version 20110225.01 to 20110228.00.
-
-=item *
-
-C<Digest::SHA> has been upgraded from version 5.50 to 5.61
-
-New SHA-512/224 and SHA-512/256 transforms ref. NIST Draft FIPS 180-4 (February 2011)
-
-=item *
-
-C<ExtUtils::Command> has been upgraded from version 1.16 to 1.17.
-
-=item *
-
-C<File::Copy> has been downgraded from version 2.22 to 2.21.
-
-An optimisation that recent core changes have rendered unnecessary has been
-reverted.
-
-=item *
-
-C<File::Glob> has been upgraded from version 1.11 to 1.12.
-
-=item *
-
-C<GDBM_File> has been upgraded from version 1.13 to 1.14.
-
-=item *
-
-C<Hash::Util> has been upgraded from version 0.10 to 0.11.
-
-=item *
-
-C<Hash::Util::FieldHash> has been upgraded from version 1.08 to 1.09.
-
-=item *
-
-C<HTTP::Tiny> has been upgraded from version 0.010 to 0.011.
-
-=item *
-
-C<I18N::Langinfo> has been upgraded from version 0.07 to 0.08.
-
-=item *
-
-C<IO> has been upgraded from version 1.25_03 to 1.25_04.
-
-=item *
-
-C<JSON::PP> has been upgraded from version 2.27103 to 2.27105
-
-=item *
-
-C<Locale::Codes> has been upgraded from version 3.15 to 3.16
-
-=item *
-
-C<Math::BigInt> has been upgraded from version 1.992 to 1.994
-
-=item *
-
-C<Math::BigInt::FastCalc> has been upgraded from version 0.24_02 to 0.28
-
-=item *
-
-C<Module::Build> has been upgraded from version 0.37_05 to 0.3800
-
-=item *
-
-C<Module::CoreList> has been upgraded from version 2.45 to 2.46.
-
-=item *
-
-C<mro> has been upgraded from version 1.06 to 1.07.
-
-=item *
-
-C<NDBM_File> has been upgraded from version 1.11 to 1.12.
-
-=item *
-
-C<parent> has been upgraded from version 0.224 to 0.225
-
-=item *
-
-C<Pod::Simple> has been upgraded from version 3.15 to 3.16
-
-=item *
-
-C<Storable> has been upgraded from version 2.26 to 2.27.
-
-=item *
-
-C<Sys::Hostname> has been upgraded from version 1.15 to 1.16.
-
-=item *
-
-C<Test::Harness> has been upgraded from version 3.22 to 3.23
-
-=item *
-
-C<Test::Simple> has been upgraded from version 0.97_01 to 0.98
-
-=item *
-
-C<Tie::Hash::NamedCapture> has been upgraded from version 0.07 to 0.08.
-
-Some of the Perl code has been converted to XS for efficency's sake.
-
-=item *
-
-C<Tie::RefHash> has been upgraded from version 1.38 to 1.39.
-
-=item *
-
-C<Unicode::Collate> has been upgraded from version 0.72 to 0.73
-
-DUCET has been updated for Unicode 6.0.0 as Collate/allkeys.txt and
-the default UCA_Version is 22.
-
-=item *
-
-C<Unicode::UCD> has been upgraded from version 0.31 to 0.32.
-This includes a number of bug fixes:
-
-=over 4
-
-=item charinfo()
-
-=over 4
-
-=item *
-
-It is now updated to Unicode Version 6 with Corrigendum #8, except,
-as with Perl 5.14, the code point at U+1F514 has no name.
-
-=item *
-
-The Hangul syllable code points have the correct names, and their
-decompositions are always output without requiring L<Lingua::KO::Hangul::Util>
-to be installed.
-
-=item *
-
-The CJK (Chinese-Japanese-Korean) code points U+2A700 - U+2B734
-and U+2B740 - 2B81D are now properly handled.
-
-=item *
-
-The numeric values are now output for those CJK code points that have them.
-
-=item *
-
-The names that are output for code points with multiple aliases are now the
-corrected ones.
-
-=back
-
-=item charscript()
-
-This now correctly returns "Unknown" instead of C<undef> for the script
-of a code point that hasn't been assigned another one.
-
-=item charblock()
-
-This now correctly returns "No_Block" instead of C<undef> for the block
-of a code point that hasn't been assigned to another one.
-
-=back
-
-=item *
-
-C<XS::Typemap> has been upgraded from version 0.04 to 0.05.
-
-=back
-
-=head1 Documentation
-
-=head2 Changes to Existing Documentation
-
-=head3 L<perlfunc>
-
-=over 4
-
-=item *
-
-Clarified the order in which to check C<$@> and C<$!> after C<do FILE>.
-(RT #80626)
-
-=back
-
-=head1 Diagnostics
-
-The following additions or changes have been made to diagnostic output,
-including warnings and fatal error messages. For the complete list of
-diagnostic messages, see L<perldiag>.
-
-=head2 New Diagnostics
-
-=over 4
-
-=item *
-
-Regexp modifier "/%c" may not appear twice
-
-(F syntax) The regular expression pattern had one of the mutually exclusive
-modifiers repeated. Remove all but one of the occurrences.
-
-=item *
-
-Regexp modifiers "/%c" and "/%c" are mutually exclusive
-
-(F syntax) The regular expression pattern had more than one of the mutually
-exclusive modifiers. Retain only the modifier that is supposed to be there.
-
-=item *
-
-Insecure user-defined property %s
-
-(F) Perl detected tainted data when trying to compile a regular
-expression that contains a call to a user-defined character property
-function, i.e. C<\p{IsFoo}> or C<\p{InFoo}>.
-See L<perlunicode/User-Defined Character Properties> and L<perlsec>.
-
-=back
-
-=head1 Testing
-
-Many of the tests have been refactored to use testing libraries more
-consistently. In some cases test files were created or deleted:
-
-=over 4
-
-=item *
-
-The tests for C<split /\s/> and Unicode have been moved from
-F<t/op/split.t> to the new F<t/op/split_unicode.t>.
-
-=item *
-
-F<t/re/re.t> has been moved to F<ext/re/t/re_funcs_u.t>.
-
-=item *
-
-The tests for [perl #72922] have been moved from F<t/re/qr.t> to the new
-F<t/re/qr-72922.t>.
-
-=item *
-
-F<t/re/reg_unsafe.t> has been deleted and its only test moved to
-F<t/re/pat_advanced.t>.
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item *
-
-A fix for a bug in C<length(undef)> in 5.13.4 introduced a regression that
-meant C<print length undef> did not warn when warnings were enabled. It now
-correctly warns [perl #85508].
-
-=item *
-
-The C<(?|...)> regular expression construct no longer crashes if the final
-branch has more sets of capturing parentheses than any other branch. This
-was fixed in Perl 5.10.1 for the case of a single branch, but that fix did
-not take multiple branches into account [perl #84746].
-
-=item *
-
-Accessing an element of a package array with a hard-coded number (as
-opposed to an arbitrary expression) would crash if the array did not exist.
-Usually the array would be autovivified during compilation, but typeglob
-manipulation could remove it, as in these two cases which used to crash:
-
- *d = *a; print $d[0];
- undef *d; print $d[0];
-
-=item *
-
-C<#line> directives in string evals were not properly updating the arrays
-of lines of code (C<< @{"_<..."} >>) that the debugger (or any debugging or
-profiling module) uses. In threaded builds, they were not being updated at
-all. In non-threaded builds, the line number was ignored, so any change to
-the existing line number would cause the lines to be misnumbered
-[perl #79442].
-
-=item *
-
-C<$AUTOLOAD> used to remain tainted forever if it ever became tainted. Now
-it is correctly untainted if an autoloaded method is called and the method
-name was not tainted.
-
-=item *
-
-A bug has been fixed in the implementation of C<{...}> quantifiers in
-regular expressions that prevented the code block in
-C</((\w+)(?{ print $2 })){2}/> from seeing the C<$2> sometimes
-[perl #84294].
-
-=item *
-
-C<sprintf> now dies when passed a tainted scalar for the format. It did
-already die for arbitrary expressions, but not for simple scalars
-[perl #82250].
-
-=item *
-
-DESTROY methods of objects implementing ties are no longer able to crash by
-accessing the tied variable through a weak reference [perl #86328].
-
-=item *
-
-On Windows, calling kill(9, $child) on a pseudo-process created by the fork()
-emulation is inherently unstable. It can also be responsible for overriding
-the parent process exit code with a value of '9' if the parent terminates
-right after killing the child. This condition will now happen a lot less
-often than before.
-
-See also L</"fork() emulation will not wait for signalled children"> for a
-better way to terminate child processes that avoids deadlocks altogether.
-
-=item *
-
-Ensure that the C<exists &Errno::EFOO> idiom continues to work as documented.
-
-A change post-5.12 caused the documented idiom not to work if Errno was loaded
-after the C<exists> code had been compiled, as the compiler implicitly creates
-typeglobs in the Errno symbol table when it builds the optree for the C<exists
-code>.
-
-=back
-
-=head1 Acknowledgements
-
-Perl 5.13.11 represents approximately one month of development since Perl
-5.13.10 and contains approximately 80,000 lines of changes across 549 files from
-31 authors and committers:
-
-Alastair Douglas, Arvan, Boris Ratner, brian d foy, Chris 'BinGOs' Williams,
-Craig A. Berry, David Golden, David Leadbeater, David Mitchell, Father
-Chrysostomos, Florian Ragwitz, Jan Dubois, Karl Williamson, Kevin Ryde, Leon
-Brocard, Leon Timmermans, Michael Stevens, Michael Witten, Moritz Lenz, Nicholas
-Clark, Paul Johnson, Peter John Acklam, Reini Urban, Robin Barker, Steve Hay,
-Sullivan Beck, Tony Cook, Vadim Konovalov, Yves Orton, Zefram and Ævar Arnfjörð
-Bjarmason
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://rt.perl.org/perlbug/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the L<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please send
-it to perl5-security-report at perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
-to help assess the impact of issues, figure out a resolution, and help
-co-ordinate the release of patches to mitigate or fix the problem across all
-platforms on which Perl is supported. Please only use this address for
-security issues in the Perl core, not for modules independently
-distributed on CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive details
-on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl5131delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl5131delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl5131delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,287 +0,0 @@
-=encoding utf8
-
-=head1 NAME
-
-perl5131delta - what is new for perl v5.13.1
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.13.0 release and
-the 5.13.1 release.
-
-If you are upgrading from an earlier release such as 5.10, first read
-L<perl5120delta>, which describes differences between 5.10 and
-5.12.
-
-=head1 Incompatible Changes
-
-=head2 "C<\cI<X>>"
-
-The backslash-c construct was designed as a way of specifying
-non-printable characters, but there were no restrictions (on ASCII
-platforms) on what the character following the C<c> could be. Now, that
-character must be one of the ASCII characters.
-
-=head2 localised tied hashes, arrays and scalars are no longed tied
-
-In the following:
-
- tie @a, ...;
- {
- local @a;
- # here, @a is a now a new, untied array
- }
- # here, @a refers again to the old, tied array
-
-The new local array used to be made tied too, which was fairly pointless,
-and has now been fixed. This fix could however potentially cause a change
-in behaviour of some code.
-
-=head2 C<given> return values
-
-Starting from this release, C<given> blocks returns the last evaluated
-expression, or an empty list if the block was exited by C<break>. Thus you
-can now write:
-
- my $type = do {
- given ($num) {
- break when undef;
- 'integer' when /^[+-]?[0-9]+$/;
- 'float' when /^[+-]?[0-9]+(?:\.[0-9]+)?$/;
- 'unknown';
- }
- };
-
-See L<perlsyn/Return value> for details.
-
-=head1 Core Enhancements
-
-=head2 Exception Handling Reliability
-
-Several changes have been made to the way C<die>, C<warn>, and C<$@>
-behave, in order to make them more reliable and consistent.
-
-When an exception is thrown inside an C<eval>, the exception is no
-longer at risk of being clobbered by code running during unwinding
-(e.g., destructors). Previously, the exception was written into C<$@>
-early in the throwing process, and would be overwritten if C<eval> was
-used internally in the destructor for an object that had to be freed
-while exiting from the outer C<eval>. Now the exception is written
-into C<$@> last thing before exiting the outer C<eval>, so the code
-running immediately thereafter can rely on the value in C<$@> correctly
-corresponding to that C<eval>.
-
-Likewise, a C<local $@> inside an C<eval> will no longer clobber any
-exception thrown in its scope. Previously, the restoration of C<$@> upon
-unwinding would overwrite any exception being thrown. Now the exception
-gets to the C<eval> anyway. So C<local $@> is safe inside an C<eval>,
-albeit of rather limited use.
-
-Exceptions thrown from object destructors no longer modify the C<$@>
-of the surrounding context. (If the surrounding context was exception
-unwinding, this used to be another way to clobber the exception being
-thrown. Due to the above change it no longer has that significance,
-but there are other situations where C<$@> is significant.) Previously
-such an exception was sometimes emitted as a warning, and then either
-string-appended to the surrounding C<$@> or completely replaced the
-surrounding C<$@>, depending on whether that exception and the surrounding
-C<$@> were strings or objects. Now, an exception in this situation is
-always emitted as a warning, leaving the surrounding C<$@> untouched.
-In addition to object destructors, this also affects any function call
-performed by XS code using the C<G_KEEPERR> flag.
-
-C<$@> is also no longer used as an internal temporary variable when
-preparing to C<die>. Previously it was internally necessary to put
-any exception object (any non-string exception) into C<$@> first,
-before it could be used as an exception. (The C API still offers the
-old option, so an XS module might still clobber C<$@> in the old way.)
-This change together with the foregoing means that, in various places,
-C<$@> may be observed to contain its previously-assigned value, rather
-than having been overwritten by recent exception-related activity.
-
-Warnings for C<warn> can now be objects, in the same way as exceptions
-for C<die>. If an object-based warning gets the default handling,
-of writing to standard error, it will of course still be stringified
-along the way. But a C<$SIG{__WARN__}> handler will now receive an
-object-based warning as an object, where previously it was passed the
-result of stringifying the object.
-
-=head1 Modules and Pragmata
-
-=head2 Updated Modules
-
-=over
-
-=item C<Errno>
-
-The implementation of C<Errno> has been refactored to use about 55% less memory.
-There should be no user-visible changes.
-
-=item Perl 4 C<.pl> libraries
-
-These historical libraries have been minimally modified to avoid using
-C<$[>. This is to prepare them for the deprecation of C<$[>.
-
-=item C<B::Deparse>
-
-A bug has been fixed when deparsing a nextstate op that has both a
-change of package (relative to the previous nextstate), or a change of
-C<%^H> or other state, and a label. Previously the label was emitted
-first, leading to syntactically invalid output because a label is not
-permitted immediately before a package declaration, B<BEGIN> block,
-or some other things. Now the label is emitted last.
-
-=back
-
-=head2 Removed Modules and Pragmata
-
-The following modules have been removed from the core distribution, and if
-needed should be installed from CPAN instead.
-
-=over
-
-=item C<Class::ISA>
-
-=item C<Pod::Plainer>
-
-=item C<Switch>
-
-=back
-
-The removal of C<Shell> has been deferred until after 5.14, as the
-implementation of C<Shell> shipped with 5.12.0 did not correctly issue the
-warning that it was to be removed from core.
-
-=head1 New Documentation
-
-=over 4
-
-=item perlgpl
-
-L<perlgpl> has been updated to contain GPL version 1, as is included in the
-F<README> distributed with perl.
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item *
-
-Naming a deprecated character in \N{...} will not leak memory.
-
-=item *
-
-FETCH is no longer called needlessly on some tied variables.
-
-=item *
-
-The trie runtime code should no longer allocate massive amounts of memory,
-fixing #74484.
-
-=back
-
-=head1 Changed Internals
-
-=over 4
-
-=item *
-
-The protocol for unwinding the C stack at the last stage of a C<die>
-has changed how it identifies the target stack frame. This now uses
-a separate variable C<PL_restartjmpenv>, where previously it relied on
-the C<blk_eval.cur_top_env> pointer in the C<eval> context frame that
-has nominally just been discarded. This change means that code running
-during various stages of Perl-level unwinding no longer needs to take
-care to avoid destroying the ghost frame.
-
-=item *
-
-The format of entries on the scope stack has been changed, resulting in a
-reduction of memory usage of about 10%. In particular, the memory used by
-the scope stack to record each active lexical variable has been halved.
-
-=item *
-
-Memory allocation for pointer tables has been changed. Previously
-C<Perl_ptr_table_store> allocated memory from the same arena system as C<SV>
-bodies and C<HE>s, with freed memory remaining bound to those arenas until
-interpreter exit. Now it allocates memory from arenas private to the specific
-pointer table, and that memory is returned to the system when
-C<Perl_ptr_table_free> is called. Additionally, allocation and release are both
-less CPU intensive.
-
-=item *
-
-A new function, Perl_magic_methcall has been added that wraps the setup needed
-to call a magic method like FETCH (the existing S_magic_methcall function has
-been renamed S_magic_methcall1).
-
-=back
-
-=head1 Deprecations
-
-The following items are now deprecated.
-
-=over 4
-
-=item C<Perl_ptr_table_clear>
-
-C<Perl_ptr_table_clear> is no longer part of Perl's public API. Calling it now
-generates a deprecation warning, and it will be removed in a future
-release.
-
-=back
-
-=head1 Acknowledgements
-
-Perl 5.13.1 represents thirty days of development since Perl 5.13.0 and
-contains 15390 lines of changes across 289 files from 34 authors and
-committers.
-
-Thank you to the following for contributing to this release:
-
-Ævar Arnfjörð Bjarmason, Arkturuz, Chris 'BinGOs' Williams, Craig A. Berry,
-Curtis Jewell, Dan Dascalescu, David Golden, David Mitchell, Father
-Chrysostomos, Gene Sullivan, gfx, Gisle Aas, H.Merijn Brand, James E Keenan,
-James Mastros, Jan Dubois, Jesse Vincent, Karl Williamson, Leon Brocard,
-Lubomir Rintel (GoodData), Nicholas Clark, Philippe Bruhat (BooK), Rafael
-Garcia-Suarez, Rainer Tammer, Ricardo Signes, Richard Soderberg, Robin Barker,
-Ruslan Zakirov, Steffen Mueller, Todd Rinaldo, Tony Cook, Vincent Pit, Zefram
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://rt.perl.org/perlbug/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please send
-it to perl5-security-report at perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
-to help assess the impact of issues, figure out a resolution, and help
-co-ordinate the release of patches to mitigate or fix the problem across all
-platforms on which Perl is supported. Please only use this address for
-security issues in the Perl core, not for modules independently
-distributed on CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive details
-on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl5132delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl5132delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl5132delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,409 +0,0 @@
-=encoding utf8
-
-=head1 NAME
-
-perl5132delta - what is new for perl v5.13.2
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.13.2 release and
-the 5.13.1 release.
-
-If you are upgrading from an earlier release such as 5.10, first read
-L<perl5120delta>, which describes differences between 5.10 and
-5.12.
-
-=head1 Incompatible Changes
-
-=head2 localised tied scalars are tied again.
-
-The change in behaviour in 5.13.1 of localising tied scalar values has
-been reverted to the existing 5.12.0 and earlier behaviour (the change for
-arrays and hashes remains).
-
-=head2 Naming fixes in Policy_sh.SH may invalidate Policy.sh
-
-Several long-standing typos and naming confusions in Policy_sh.SH have
-been fixed, standardizing on the variable names used in config.sh.
-
-This will change the behavior of Policy.sh if you happen to have been
-accidentally relying on the Policy.sh incorrect behavior. We'd appreciate
-feedback from anyone using Policy.sh to be sure nothing is broken by
-this change (c1bd23).
-
-=head2 Stashes are now always defined
-
-C<defined %Foo::> now always returns true, even when no symbols have yet been
-defined in that package.
-
-This is a side effect of removing a special case kludge in the tokeniser,
-added for 5.10.0, to hide side effects of changes to the internal storage of
-hashes that to drastically reduce their memory usage overhead.
-
-Calling defined on a stash has been deprecated since 5.6.0, warned on
-lexicals since 5.6.0, and has warned for stashes (and other package
-variables) since 5.12.0. C<defined %hash> has always exposed an
-implementation detail - emptying a hash by deleting all entries from it does
-not make C<defined %hash> false, hence C<defined %hash> is not valid code to
-determine whether an arbitrary hash is empty. Instead, use the behaviour
-that an empty C<%hash> always returns false in a scalar context.
-
-=head1 Core Enhancements
-
-=head2 Non-destructive substitution
-
-The substitution operator now supports a C</r> option that
-copies the input variable, carries out the substitution on
-the copy and returns the result. The original remains unmodified.
-
- my $old = 'cat';
- my $new = $old =~ s/cat/dog/r;
- # $old is 'cat' and $new is 'dog'
-
-This is particularly useful with C<map>. See L<perlop> for more examples
-(4f4d75, 000c65).
-
-=head2 package block syntax
-
-A package declaration can now contain a code block, in which case the
-declaration is in scope only inside that block. So C<package Foo { ... }>
-is precisely equivalent to C<{ package Foo; ... }>. It also works with
-a version number in the declaration, as in C<package Foo 1.2 { ... }>.
-See L<perlfunc> (434da3..36f77d, 702646).
-
-=head2 CLONE_PARAMS structure added to ease correct thread creation
-
-Modules that create threads should now create C<CLONE_PARAMS> structures
-by calling the new function C<Perl_clone_params_new()>, and free them with
-C<Perl_clone_params_del()>. This will ensure compatibility with any future
-changes to the internals of the C<CLONE_PARAMS> structure layout, and that
-it is correctly allocated and initialised.
-
-=head2 perl -h no longer recommends -w
-
-perl -h used to mark the -w option as recommended; since this option is
-far less useful than it used to be due to lexical 'use warnings' and since
-perl -h is primary a list and brief explanation of the command line switches,
-the recommendation has now been removed (60eaec).
-
-=head1 Modules and Pragmata
-
-=head2 Updated Modules
-
-=head3 Locale-Codes 3.13
-
-Locale::Country, Locale::Language and Locale::Currency were updated from
-3.12 to 3.13 of the Locale-Codes distribution to include locale code changes
-(e1137b).
-
-=head3 Thread-Semaphore 2.11
-
-Added new methods -E<gt>down_nb() and -E<gt>down_force() at the suggestion
-of Rick Garlick.
-
-Refactored methods to skip argument validation when no argument is supplied.
-
-(04febe, f06daa)
-
-=head3 CPAN.pm 1.94_57
-
-=over 4
-
-=item * release 1.94_57
-
-=item * bugfix: treat modules correctly that are deprecated in perl 5.12.
-
-=item * bugfix: RT #57482 and #57788 revealed that configure_requires
-implicitly assumed build_requires instead of normal requires. (Reported
-by Andrew Whatson and Father Chrysostomos respectively)
-
-=item * testfix: solaris should run the tests without expect because (some?)
-solaris have a broken expect
-
-=item * testfix: run tests with cache_metadata off to prevent spill over
-effects from previous test runs
-
-=back
-
-(742adb)
-
-=head3 Hash::Util warning fix
-
-Hash::Util now enables "no warnings 'uninitialized'" to suppress spurious
-warnings from undefined hash values (RT #74280).
-
-=head3 B::Deparse now handles 'no VERSION'
-
-The 'no 5.13.2' or similar form is now correctly handled by B::Deparse.
-
-=head3 IO::Socket doc additions
-
-getsockopt and setsockopt are now documented.
-
-=head3 B::Concise updated for OPpDEREF
-
-B::Concise marks rv2sv, rv2av and rv2hv ops with the new OPpDEREF flag
-as "DREFed".
-
-=head3 File::Copy doc clarification
-
-An extra stanza was added explaining behaviours when the copy destination
-already exists and is a directory.
-
-=head3 Multiple POD spelling fixes.
-
-Fixes were made to VMS::DCLsym, mro, Search::Dist, B::t::OptreeCheck
-and UNIVERSAL.
-
-=head1 Changes to Existing Documentation
-
-=head2 Replace wrong tr/// table in perlebcdic.pod
-
-perlebcdic.pod contains a helpful table to use in tr/// to convert
-between EBCDIC and Latin1/ASCII. Unfortunately, the table was the
-inverse of the one it describes, though the code that used the table
-worked correctly for the specific example given.
-
-The table has been changed to its inverse, and the sample code changed
-to correspond, as this is easier for the person trying to follow the
-instructions since deriving the old table is somewhat more complicated.
-
-The table has also been changed to hex from octal, as that is more the norm
-these days, and the recipes in the pod altered to print out leading
-zeros to make all the values the same length, as the table that they can
-generate has them (5f26d5).
-
-=head2 Document tricks for user-defined casing
-
-perlunicode.pod now contains an explanation of how to override, mangle
-and otherwise tweak the way perl handles upper, lower and other case
-conversions on unicode data, and how to provide scoped changes to alter
-one's own code's behaviour without stomping on anybody else (71648f).
-
-=head2 Document $# and $* as removed and clarify $#array usage
-
-$# and $* were both disabled as of perl5 version 10; this release adds
-documentation to that effect, a description of the results of continuing
-to try and use them, and a note explaining that $# can also function as a
-sigil in the $#array form (7f315d2).
-
-=head2 INSTALL explicitly states the requirement for C89
-
-This was already true but it's now Officially Stated For The Record (51eec7).
-
-=head2 No longer advertise Math::TrulyRandom
-
-This module hasn't been updated since 1996 so we can't recommend it any more
-(83918a).
-
-=head2 perlfaq synchronised to upstream
-
-The FAQ has been updated to commit
-37550b8f812e591bcd0dd869d61677dac5bda92c from the perlfaq repository
-at git at github.com:briandfoy/perlfaq.git
-
-=head1 Performance Enhancements
-
-Only allocate entries for @_ on demand - this not only saves memory per
-subroutine defined but should hopefully improve COW behaviour (77bac2).
-
-=head2 Multiple small improvements to threads
-
-The internal structures of threading now make fewer API calls and fewer
-allocations, resulting in noticeably smaller object code. Additionally,
-many thread context checks have been deferred so that they're only done
-when required (although this is only possible for non-debugging builds).
-
-=head2 Size optimisations to SV and HV structures
-
-xhv_fill has been eliminated from struct xpvhv, saving 1 IV per hash and
-on some systems will cause struct xpvhv to become cache aligned. To avoid
-this memory saving causing a slowdown elsewhere, boolean use of HvFILL
-now calls HvTOTALKEYS instead (which is equivalent) - so while the fill
-data when actually required is now calculated on demand, the cases when
-this needs to be done should be few and far between (f4431c .. fcd245).
-
-The order of structure elements in SV bodies has changed. Effectively,
-the NV slot has swapped location with STASH and MAGIC. As all access to
-SV members is via macros, this should be completely transparent. This
-change allows the space saving for PVHVs documented above, and may reduce
-the memory allocation needed for PVIVs on some architectures.
-
-=head2 Optimisation of regexp engine string comparison work
-
-The foldEQ_utf8 API function for case-insensitive comparison of strings (which
-is used heavily by the regexp engine) was substantially refactored and
-optimised - and its documentation much improved as a free bonus gift
-(8b3587, e6226b).
-
-=head2 Memory consumption improvements to Exporter
-
-The @EXPORT_FAIL AV is no longer created unless required, hence neither is
-the typeglob backing it - this saves about 200 bytes per Exporter using
-package that doesn't use this functionality.
-
-=head1 Installation and Configuration Improvements
-
-=head2 Compilation improvements
-
-Fix CCINCDIR and CCLIBDIR for mingw64 cross compiler to correctly be under
-$(CCHOME)\mingw\include and \lib rather than immediately below $(CCHOME).
-
-This means the 'incpath', 'libpth', 'ldflags', 'lddlflags' and
-'ldflags_nolargefiles' values in Config.pm and Config_heavy.pl are now
-set correctly (23ae7f).
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item * Timely cleanup of SVs that are cloned into a new thread but then
-discovered to be orphaned (i.e. their owners are -not- cloned) (e42956)
-
-=item * Don't accidentally clone lexicals in scope within active stack frames in
-the parent when creating a child thread (RT #73086) (05d04d).
-
-=item * Avoid loading feature.pm when 'no 5.13.2;' or similar is
-encountered (faee19).
-
-=item * Trap invalid use of SvIVX on SVt_REGEXP when assertions are on
-(e77da3)
-
-=item * Don't stamp on $DB::single, $DB::trace and $DB::signal if they
-already have values when $^P is assigned to (RT #72422) (4c0f30).
-
-=item * chop now correctly handles perl's extended UTF-8 (RT #73246) (65ab92)
-
-=item * Defer signal handling when shared SV locks are held to avoid
-deadlocks (RT #74868) (65c742).
-
-=item * glob() no longer crashes when %File::Glob:: is empty and
-CORE::GLOBAL::glob isn't present (4984aa).
-
-=item * perlbug now always permits the sender address to be changed
-before sending - if you were having trouble sending bug reports before
-now, this should fix it, we hope (e6eb90).
-
-=item * Overloading now works properly in conjunction with tied
-variables. What formerly happened was that most ops checked their
-arguments for overloading I<before> checking for magic, so for example
-an overloaded object returned by a tied array access would usually be
-treated as not overloaded (RT #57012) (6f1401, ed3b9b, 6a5f8c .. 24328f).
-
-=item * Independently, a bug was fixed that prevented $tied-E<gt>() from
-always calling FETCH correctly (RT #8438) (7c7501)
-
-=back
-
-=head1 Changed Internals
-
-=over 4
-
-=item * The implementation of sv_dup_inc() has changed from a macro to a function.
-
-=item *
-
-The C<find_rundefsvoffset> function has been deprecated. It appeared that
-its design was insufficient to reliably get the lexical C<$_> at run-time.
-
-Use the new C<find_rundefsv> function or the C<UNDERBAR> macro instead.
-They directly return the right SV representing C<$_>, whether it's lexical
-or dynamic (789bd8 .. 03d5bc).
-
-=item *
-
-The following new functions or macros have been added to the public API:
-C<SvNV_nomg>, C<sv_2nv_flags>, C<find_rundefsv>.
-
-=item *
-
-The C<UNDERBAR> macro now calls C<find_rundefsv>. C<dUNDERBAR> is now a
-noop but should still be used to ensure past and future compatibility.
-
-=item *
-
-The ibcmp_* functions have been renamed and are now called foldEQ,
-foldEQ_locale and foldEQ_utf8 (e6226b).
-
-=back
-
-=head1 Deprecations
-
-The following items are now deprecated.
-
-=over 4
-
-=item *
-
-Omitting a space between a regex pattern or pattern modifiers and the following
-word is deprecated. For example, C<< m/foo/sand $bar >> will still be parsed
-as C<< m/foo/s and $bar >> but will issue a warning.
-
-=back
-
-=head1 Platform Specific Notes
-
-=head2 Recent OpenBSDs now use perl's malloc
-
-OpenBSD E<gt> 3.7 has a new malloc implementation which is mmap based
-and as such can release memory back to the OS; however for perl using
-this malloc causes a substantial slowdown so we now default to using
-perl's malloc instead (RT #75742) (9b58b5).
-
-=head1 Acknowledgements
-
-Perl 5.13.2 represents thirty days of development since Perl 5.13.1 (and
-two days of waiting around while the release manager remembered where he
-left his brain) and contains 3685 lines of changes across 194 files from
-30 authors and committers.
-
-Thank you to the following for contributing to this release:
-
-Abigail, Andreas J. Koenig, Chas. Owens, Chris 'BinGOs' Williams,
-Craig A. Berry, David Caldwell, David Golden, David Mitchell,
-Father Chrysostomos, George Greer, H.Merijn Brand, Jerry D. Hedden,
-Karl Williamson, Maik Hentsche, Matt S Trout, Nicholas Clark, Rafael
-Garcia-Suarez, Ricardo Signes, Salvador Fandino, Salvador Ortiz Garcia,
-Shlomi Fish, Sinan Unur, Sisyphus, Slaven Rezic, Sullivan Beck, Tony Cook,
-Vincent Pit, Zefram, brian d foy, Ævar Arnfjörð Bjarmason
-
-Your humble release manager would like to specifically call out
-Karl Williamson for making the tests a better place to be, and Shlomi
-Fish for a passel of tiny incremental docfixes of the sort that don't get
-made often enough.
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://rt.perl.org/perlbug/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please send
-it to perl5-security-report at perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
-to help assess the impact of issues, figure out a resolution, and help
-co-ordinate the release of patches to mitigate or fix the problem across all
-platforms on which Perl is supported. Please only use this address for
-security issues in the Perl core, not for modules independently
-distributed on CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive details
-on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl5133delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl5133delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl5133delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,667 +0,0 @@
-=encoding utf8
-
-=head1 NAME
-
-perl5133delta - what is new for perl v5.13.3
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.13.3 release and
-the 5.13.2 release.
-
-If you are upgrading from an earlier release such as 5.13.1, first read
-L<perl5132delta>, which describes differences between 5.13.1 and
-5.13.2.
-
-=head1 Core Enhancements
-
-=head2 \o{...} for octals
-
-There is a new escape sequence, C<"\o">, in double-quote-like contexts.
-It must be followed by braces enclosing an octal number of at least one
-digit. It interpolates as the character with an ordinal value equal to
-the octal number. This construct allows large octal ordinals beyond the
-current max of 0777 to be represented. It also allows you to specify a
-character in octal which can safely be concatenated with other regex
-snippets and which won't be confused with being a backreference to
-a regex capture group. See L<perlre/Capture groups>.
-
-=head2 C<\N{I<name>}> and C<charnames> enhancements
-
-C<\N{}> and C<charnames::vianame> now know about the abbreviated
-character names listed by Unicode, such as NBSP, SHY, LRO, ZWJ, etc., as
-well as all the customary abbreviations for the C0 and C1 control
-characters (such as ACK, BEL, CAN, etc.), as well as a few new variants
-in common usage of some C1 full names.
-
-In the past, it was ineffective to override one of Perl's abbreviations
-with your own custom alias. Now it works.
-
-You can also create a custom alias directly to the ordinal of a
-character, known by C<\N{...}>, C<charnames::vianame()>, and
-C<charnames::viacode()>. Previously, an alias had to be to an official
-Unicode character name. This made it impossible to create an alias for
-a code point that had no name, such as the ones reserved for private
-use. So this change allows you to make more effective use of private
-use characters. Only if there is no official name will
-C<charnames::viacode()> return your custom one.
-
-See L<charnames> for details on all these changes.
-
-=head2 Uppercase X/B allowed in hexadecimal/binary literals
-
-Literals may now use either upper case C<0X...> or C<0B...> prefixes,
-in addition to the already supported C<0x...> and C<0b...>
-syntax. (RT#76296) (a674e8d, 333f87f)
-
-C, Ruby, Python and PHP already supported this syntax, and it makes
-Perl more internally consistent. A round-trip with C<eval sprintf
-"%#X", 0x10> now returns C<16> in addition to C<eval sprintf "%#x",
-0x10>, which worked before.
-
-=head1 Incompatible Changes
-
-=head2 \400 - \777
-
-Use of C<\400> - C<\777> in regexes in certain circumstances has given
-different, anomalous behavior than their use in all other
-double-quote-like contexts. Since 5.10.1, a deprecated warning message
-has been raised when this happens. Now, all double-quote-like contexts
-have the same behavior, namely to be equivalent to C<\x{100}> -
-C<\x{1FF}>, with no deprecation warning. Use of these values in the
-command line option C<"-0"> retains the current meaning to slurp input
-files whole; previously, this was documented only for C<"-0777">. It is
-recommended, however, because of various ambiguities, to use the new
-C<\o{...}> construct to represent characters in octal.
-(fa1639c..f6993e9).
-
-=head1 Deprecations
-
-=head2 Omitting a space between a regular expression and subsequent word
-
-Omitting a space between a regex pattern or pattern modifiers and the
-following word is deprecated. Deprecation for regular expression
-I<matches> was added in Perl 5.13.2. In this release, the deprecation
-is extended to regular expression I<substitutions>. For example,
-C<< s/foo/bar/sand $bar >> will still be parsed as
-C<< s/foo/bar/s and $bar >> but will issue a warning. (aa78b66)
-
-=head2 Deprecation warning added for deprecated-in-core .pl libs
-
-This is a mandatory warning, not obeying -X or lexical warning bits.
-The warning is modelled on that supplied by deprecate.pm for
-deprecated-in-core .pm libraries. It points to the specific CPAN
-distribution that contains the .pl libraries. The CPAN version, of
-course, does not generate the warning. (0111154)
-
-=head1 Performance Enhancements
-
-There are several small optimizations to reduce CPU cache misses in various very
-commonly used modules like C<warnings> and C<Carp> as well in accessing
-file-handles for reading.
-
-=head1 Modules and Pragmata
-
-=head2 Updated Modules and Pragmata
-
-=over 4
-
-=item C<autodie>
-
-Upgraded from version 2.06_01 to 2.10.
-
-=item C<charnames>
-
-Upgraded from version 1.08 to 1.10.
-
-C<viacode()> is now significantly faster. (f3227b7)
-
-=item C<lib>
-
-Upgraded from version 0.62 to 0.63.
-
-=item C<threads>
-
-Upgraded from version 1.77_02 to 1.77_03.
-
-=item C<threads::shared>
-
-Upgraded from version 1.33_01 to 1.33_02.
-
-=item C<warnings>
-
-Upgraded from version 1.09 to 1.10.
-
-Calling C<use warnings> without arguments is now significantly more efficient.
-(8452af9)
-
-=item C<Archive::Extract>
-
-Upgraded from version 0.38 to 0.42.
-
-Updates since 0.38 include: a safe print method that guards
-Archive::Extract from changes to $\; a fix to the tests when run in core
-perl; support for TZ files; and a modification for the lzma logic to favour
-IO::Uncompress::Unlzma (d7f8799)
-
-=item C<Archive::Tar>
-
-Upgraded from version 1.54 to 1.64.
-
-Important changes since 1.54 include: compatibility with busybox
-implementations of tar; a fix so that C<write()> and C<create_archive()>
-close only handles they opened; and a bug was fixed regarding the exit code
-of extract_archive. (afabe0e)
-
-=item C<Attribute::Handlers>
-
-Upgraded from version 0.87 to 0.88.
-
-=item C<Compress::Raw::Bzip2>
-
-Upgraded from version 2.024 to 2.027.
-
-=item C<Compress::Raw::Zlib>
-
-Upgraded from version 2.024 to 2.027_01.
-
-=item C<Compress::Zlib>
-
-Upgraded from version 2.024 to 2.027.
-
-=item C<CPANPLUS>
-
-Upgraded from version 0.90 to 0.9007.
-
-Fixed the shell test to skip if test is not being run under a terminal;
-resolved the issue where a prereq on Config would not be recognised as a
-core module. (d4e225a)
-
-=item C<Digest::MD5>
-
-Upgraded from version 2.39 to 2.40.
-
-=item C<Digest::SHA>
-
-Upgraded from version 5.47 to 5.48.
-
-=item C<Exporter>
-
-Upgraded from version 5.64_02 to 5.64_03.
-
-Exporter no longer overrides C<$SIG{__WARN__}> (RT #74472) (9b86bb5)
-
-=item C<ExtUtils::CBuilder>
-
-Upgraded from version 0.27 to 0.2703.
-
-=item C<ExtUtils::Manifest>
-
-Upgraded from version 1.57 to 1.58.
-
-=item C<ExtUtils::ParseXS>
-
-Upgraded from version 2.2205 to 2.2206.
-
-=item C<File::Copy>
-
-Upgraded from version 2.19 to 2.20.
-
-Skips suid tests on a nosuid partition. These tests were being skipped on
-OpenBSD, but nosuid partitions can exist on other systems too. Now it just
-checks if it can create a suid directory, if not the tests are skipped.
-Perl builds without errors in a nosuid /tmp with this patch. (cae9400)
-
-=item C<I18N::LangTags>
-
-Upgraded from version 0.35 to 0.35_01.
-
-=item C<IPC::Cmd>
-
-Upgraded from version 0.58 to 0.60.
-
-=item C<IPC::SysV>
-
-Upgraded from version 2.01 to 2.03.
-
-=item C<Locale::Maketext>
-
-Upgraded from version 1.14 to 1.15.
-
-Locale::Maketext guts have been merged back into the main module (87d86da)
-and adds external cache support (ace47d6)
-
-=item C<Module::Build>
-
-Upgraded from version 0.3603 to 0.3607.
-
-=item C<Module::CoreList>
-
-Upgraded from version 2.34 to 2.36.
-
-=item C<Module::Load>
-
-Upgraded from version 0.16 to 0.18.
-
-=item C<Term::ANSIColor>
-
-Upgraded from version 2.02 to 3.00.
-
-=item C<Test::Harness>
-
-Upgraded from version 3.17 to 3.21.
-
-The core update from Test-Harness 3.17 to 3.21 fixed some things, but
-also L<introduced a known problem|/"Known Problems"> with argument
-passing to non-Perl tests.
-
-=item C<Time::HiRes>
-
-Upgraded from version 1.9719 to 1.9721.
-
-=item C<Time::Piece>
-
-Upgraded from version 1.15_01 to 1.20_01.
-
-=item C<Unicode::Collate>
-
-Upgraded from version 0.52_01 to 0.53.
-
-Includes Unicode Collation Algorithm 18 (74b94a7)
-
-=item C<Unicode::Normalize>
-
-Upgraded from version 1.03 to 1.06.
-
-=back
-
-=head1 Documentation
-
-=head2 New Documentation
-
-=head3 L<perl5121delta>
-
-The Perl 5.12.1 perldelta file was added from the Perl maintenance branch
-
-=head2 Changes to Existing Documentation
-
-=head3 General changes
-
-=over
-
-=item *
-
-Octal character escapes in documentation now prefer a three-digit octal
-escape or the new C<\o{...}> escape as they have more consistent behavior
-in different contexts than other forms. (ce7b6f0) (d8b950d) (e1f120a)
-
-=item *
-
-Documentation now standardizes on the term 'capture group' over 'buffer'
-in regular expression documentation (c27a5cf)
-
-=back
-
-=head3 L<perlfunc>
-
-=over
-
-=item *
-
-Added cautionary note about "no VERSION" (e0de7c2)
-
-=item *
-
-Added additional notes regarding srand when forking (d460397)
-
-=back
-
-=head3 L<perlop>
-
-=over 4
-
-=item *
-
-Improved documentation of unusual character escapes (4068718, 9644846)
-
-=item *
-
-Clarified how hexadecimal escapes are interpreted, with particular
-attention to the treatment of invalid characters (9644846)
-
-=back
-
-=head3 L<perlrun>
-
-=over
-
-=item *
-
-Clarified the behavior of the C<-0NNN> switch for C<-0400> or higher (7ba31cb)
-
-=back
-
-=head3 L<perlpolicy>
-
-=over
-
-=item *
-
-Added the policy on compatibility and deprecation along with definitions of
-terms like "deprecation" (70e4a83)
-
-=back
-
-=head3 L<perlre>
-
-=over
-
-=item *
-
-Added examples of the perils of not using \g{} when there are more
-than nine back-references (9d86067)
-
-=back
-
-=head3 L<perltie>
-
-=over
-
-=item *
-
-Updated some examples for modern Perl style (67d00dd)
-
-=back
-
-=head1 Utility Changes
-
-=head3 L<perldb>
-
-=over
-
-=item *
-
-The remote terminal works after forking and spawns new sessions - one
-for each forked process (11653f7)
-
-=item *
-
-Uses the less pager path from Config instead of searching for it (bf320d6)
-
-=back
-
-=head1 Configuration and Compilation
-
-=over 4
-
-=item *
-
-Adjusted 'make test.valgrind' to account for cpan/dist/ext separation
-(e07ce2e)
-
-=back
-
-=head1 Testing
-
-=over 4
-
-=item *
-
-F<t/harness> clears PERL5LIB, PERLLIB, PERL5OPT as t/TEST does (a2d3de1)
-
-=item *
-
-Many common testing routines were refactored into t/lib/common.pl
-
-=item *
-
-Several test files have been modernized to use Test::More
-
-=back
-
-=head1 Platform Support
-
-=head2 Discontinued Platforms
-
-=over 4
-
-=item MacOS Classic
-
-Support for MacOS Classic within ExtUtils::MakeMaker was removed from Perl in
-December 2004. Vestigial MacOS Classic specific code has now been removed
-from other core modules as well (8f8c2a4..c457df0)
-
-=back
-
-=head2 Platform-Specific Notes
-
-=over 4
-
-=item Win32
-
-t/io/openpid.t now uses the alarm() watchdog strategy for more
-robustness (5732108)
-
-=back
-
-=head1 Internal Changes
-
-=over 4
-
-=item *
-
-Under some circumstances, the C<CvGV()> field of a CV is now reference
-counted. To ensure consistent behaviour, direct assignment to it, for
-example C<CvGV(cv) = gv> is now a compile-time error. A new macro,
-C<CvGV_set(cv,gv)> has been introduced to perform this operation safely.
-Note that modification of this field is not part of of the public API,
-regardless of this new macro. This change caused some
-L<issues|/"Known Problems"> in modules that used the private C<GvGV()>
-field.
-
-=item *
-
-It is now possible for XS code to hook into Perl's lexical scope
-mechanism at compile time, using the new C<Perl_blockhook_register>
-function. See L<perlguts/"Compile-time scope hooks">.
-
-=item *
-
-Added C<Perl_croak_no_modify()> to implement
-C<Perl_croak("%s", PL_no_modify)> (6ad8f25)
-
-=item *
-
-Added prototypes for C<tie()> and C<untie()> to allow overloading (RT#75902)
-(1db4d19)
-
-=item *
-
-Adds C<my_[l]stat_flags()> to replace C<my_[l]stat()>. C<my_stat()> and
-C<my_lstat()> call get magic on the stack arg, so create C<_flags()>
-variants that allow us to control this. (0d7d409)
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item *
-
-Some work has been done on the internal pointers that link between symbol
-tables (stashes), typeglobs and subroutines. This has the effect that
-various edge cases related to deleting stashes or stash entries (e.g.
-<%FOO:: = ()>), and complex typeglob or code reference aliasing, will no
-longer crash the interpreter.
-
-=item *
-
-Fixed readline() when interrupted by signals so it no longer returns
-the "same thing" as before or random memory
-
-=item *
-
-Fixed a regression of kill() when a match variable is used for the
-process ID to kill (RT#75812) (8af710e)
-
-=item *
-
-Fixed several subtle bugs in sort() when @_ is accessed within a subroutine
-used for sorting (RT#72334) (8f443ca)
-
-=item *
-
-Catch yyparse() exceptions in C<< (?{...}) >> (RT#2353) (634d691)
-
-=item *
-
-Avoid UTF-8 cache panics with offsets beyond a string (RT #75898) (3e2d381)
-
-=item *
-
-Fixed POSIX::strftime memory leak (RT#73520) (c4bc4aa)
-
-=item *
-
-Doesn't set strict with C<no VERSION> if C<VERSION> is greater than 5.12
-(da8fb5d)
-
-=item *
-
-Avoids multiple FETCH/stringify on filetest ops (40c852d)
-
-=item *
-
-Fixed issue with string C<eval> not detecting taint of overloaded/tied
-arguments (RT #75716) (895b760)
-
-=item *
-
-Fix potential crashes of string C<eval> when evaluating a object with
-overloaded stringification by creating a stringified copy when necessary
-(3e5c018)
-
-=item *
-
-Fixed bug where overloaded stringification could remove tainting
-(RT #75716) (a02ec77)
-
-=item *
-
-Plugs more memory leaks in vms.c. (9e2bec0)
-
-=item *
-
-Fix pthread include error for Time::Piece (e9f284c)
-
-=back
-
-=head1 Known Problems
-
-=over 4
-
-=item *
-
-Bug fixes involving CvGV reference counting break Sub::Name. A
-patch has been sent upstream to the maintainer
-
-=item *
-
-readline() returns an empty string instead of undef when it is
-interrupted by a signal
-
-=item *
-
-Test-Harness was updated from 3.17 to 3.21 for this release. A rewrite
-in how it handles non-Perl tests (in 3.17_01) broke argument passing to
-non-Perl tests with L<prove> (RT #59186), and required that non-Perl
-tests be run as C<prove ./test.sh> instead of C<prove test.sh> These
-issues are being solved upstream, but didn't make it into this release.
-They're expected to be fixed in time for perl v5.13.4. (RT #59457)
-
-=item *
-
-C<version> now prevents object methods from being called as class methods
-(d808b68)
-
-=back
-
-=head1 Errata
-
-=over 4
-
-=item *
-
-Retroactively added the Acknowledgements list to L<perl5132delta>,
-which was excluded in the original release (d1e2db0)
-
-=back
-
-=head1 Acknowledgements
-
-Perl 5.13.3 represents approximately one month of development since Perl
-5.13.2, and contains 12,184 lines of changes across 575 files from 104
-authors and committers.
-
-Thank you to the following for contributing to this release:
-
-Abhijit Menon-Sen, Abigail, Alex Davies, Alex Vandiver, Alexandr
-Ciornii, Andreas J. Koenig, Andrew Rodland, Andy Dougherty, Aristotle
-Pagaltzis, Arkturuz, Ben Morrow, Bo Borgerson, Bo Lindbergh, Brad
-Gilbert, Bram, Brian Phillips, Chas. Owens, Chip Salzenberg, Chris
-Williams, Craig A. Berry, Curtis Jewell, Dan Dascalescu, Daniel
-Frederick Crisman, Dave Rolsky, David Caldwell, David E. Wheeler, David
-Golden, David Leadbeater, David Mitchell, Dennis Kaarsemaker, Eric
-Brine, Father Chrysostomos, Florian Ragwitz, Frank Wiegand, Gene
-Sullivan, George Greer, Gerard Goossen, Gisle Aas, Goro Fuji, Graham
-Barr, H.Merijn Brand, Harmen, Hugo van der Sanden, James E Keenan, James
-Mastros, Jan Dubois, Jerry D. Hedden, Jesse Vincent, Jim Cromie, John
-Peacock, Jos Boumans, Josh ben Jore, Karl Williamson, Kevin Ryde, Leon
-Brocard, Lubomir Rintel, Maik Hentsche, Marcus Holland-Moritz, Matt
-Johnson, Matt S Trout, Max Maischein, Michael Breen, Michael G Schwern,
-Moritz Lenz, Nga Tang Chan, Nicholas Clark, Nick Cleaton, Nick Johnston,
-Niko Tyni, Offer Kaye, Paul Marquess, Philip Hazel, Philippe Bruhat,
-Rafael Garcia-Suarez, Rainer Tammer, Reini Urban, Ricardo Signes,
-Richard Soderberg, Robin Barker, Ruslan Zakirov, Salvador Fandino,
-Salvador Ortiz Garcia, Shlomi Fish, Sinan Unur, Sisyphus, Slaven Rezic,
-Steffen Mueller, Stepan Kasal, Steve Hay, Steve Peters, Sullivan Beck,
-Tim Bunce, Todd Rinaldo, Tom Christiansen, Tom Hukins, Tony Cook,
-Vincent Pit, Yuval Kogman, Yves Orton, Zefram, brian d foy, chromatic,
-kmx, Ævar Arnfjörð Bjarmason
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://rt.perl.org/perlbug/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please send
-it to perl5-security-report at perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
-to help assess the impact of issues, figure out a resolution, and help
-co-ordinate the release of patches to mitigate or fix the problem across all
-platforms on which Perl is supported. Please only use this address for
-security issues in the Perl core, not for modules independently
-distributed on CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive details
-on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl5134delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl5134delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl5134delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,542 +0,0 @@
-=encoding utf8
-
-=head1 NAME
-
-perl5134delta - what is new for perl v5.13.4
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.13.4 release and
-the 5.13.3 release.
-
-If you are upgrading from an earlier release such as 5.13.2, first read
-L<perl5133delta>, which describes differences between 5.13.2 and
-5.13.3.
-
-=head1 Core Enhancements
-
-=head2 C<srand()> now returns the seed
-
-This allows programs that need to have repeatable results to not have to come
-up with their own seed generating mechanism. Instead, they can use C<srand()>
-and somehow stash the return for future use. Typical is a test program which
-has too many combinations to test comprehensively in the time available to it
-each run. It can test a random subset each time, and should there be a failure,
-log the seed used for that run so that it can later be used to reproduce the
-exact results.
-
-=head2 C<\N{I<name>}> and C<charnames> enhancements
-
-C<\N{}>, C<charnames::vianame>, C<charnames::viacode> now know about every
-character in Unicode. Previously, they didn't know about the Hangul syllables
-nor a number of CJK (Chinese/Japanese/Korean) characters.
-
-=head1 Incompatible Changes
-
-=head2 Declare API incompatibility between blead releases
-
-Only stable releases (5.10.x, 5.12.x, 5.14.x, ...) guarantee binary
-compatibility with each other, while blead releases (5.13.x, 5.15.x, ...) often
-break this compatibility. However, prior to perl 5.13.4, all blead releases had
-the same C<PERL_API_REVISION>, C<PERL_API_VERSION>, and C<PERL_API_SUBVERSION>,
-effectively declaring them as binary compatible, which they weren't. From now
-on, blead releases will have a C<PERL_API_SUBVERSION> equal to their
-C<PERL_SUBVERSION>, explicitly marking them as incompatible with each other.
-
-Maintenance releases of stable perl versions will continue to make no
-intentionally incompatible API changes.
-
-=head2 Check API compatibility when loading XS modules
-
-When perl's API changes in incompatible ways (which usually happens between
-every major release), XS modules compiled for previous versions of perl will not
-work anymore. They will need to be recompiled against the new perl.
-
-In order to ensure that modules are recompiled, and to prevent users from
-accidentally loading modules compiled for old perls into newer ones, the
-C<XS_APIVERSION_BOOTCHECK> macro has been added. That macro, which is called
-when loading every newly compiled extension, compares the API version of the
-running perl with the version a module has been compiled for and raises an
-exception if they don't match.
-
-=head2 Binary Incompatible with all previous Perls
-
-Some bit fields have been reordered; therefore, this release will not be binary
-compatible with any previous Perl release.
-
-=head2 Change in the parsing of certain prototypes
-
-Functions declared with the following prototypes now behave correctly as unary
-functions:
-
-=over 4
-
-=item *
-
-C<*>
-
-=item *
-
-C<\sigil>
-
-=item *
-
-C<\[...]>
-
-=item *
-
-C<;$>
-
-=item *
-
-C<;*>
-
-=item *
-
-C<;\sigil>
-
-=item *
-
-C<;\[...]>
-
-=back
-
-Due to this bug fix, functions using the C<(*)>, C<(;$)> and C<(;*)> prototypes
-are parsed with higher precedence than before. So in the following example:
-
- sub foo($);
- foo $a < $b;
-
-the second line is now parsed correctly as C<< foo($a) < $b >>, rather than
-C<< foo($a < $b) >>. This happens when one of these operators is used in
-an unparenthesised argument:
-
- < > <= >= lt gt le ge
- == != <=> eq ne cmp ~~
- &
- | ^
- &&
- || //
- .. ...
- ?:
- = += -= *= etc.
-
-=head1 Deprecations
-
-=head2 List assignment to C<$[>
-
-After assignment to C<$[> has been deprecated and started to give warnings in
-perl version 5.12.0, this version of perl also starts to emit a warning when
-assigning to C<$[> in list context. This fixes an oversight in 5.12.0.
-
-=head1 Performance Enhancements
-
-=over 4
-
-=item *
-
-Make string appending 100 times faster
-
-When doing a lot of string appending, perl could end up allocating a lot more
-memory than needed in a very inefficient way, if perl was configured to use the
-system's C<malloc> implementation instead of its own.
-
-C<sv_grow>, which is what's being used to allocate more memory if necessary when
-appending to a string, has now been taught how to round up the memory it
-requests to a certain geometric progression, making it much faster on certain
-platforms and configurations. On Win32, it's now about 100 times faster.
-
-=item *
-
-For weak references, the common case of just a single weak reference per
-referent has been optimised to reduce the storage required. In this case it
-saves the equivalent of one small perl array per referent.
-
-=item *
-
-C<XPV>, C<XPVIV>, and C<XPVNV> now only allocate the parts of the C<SV> body
-they actually use, saving some space.
-
-=back
-
-=head1 Modules and Pragmata
-
-=head2 New Modules and Pragmata
-
-This release does not introduce any new modules or pragmata.
-
-=head2 Updated Modules and Pragmata
-
-=over 4
-
-=item C<Archive::Tar>
-
-Upgraded from version 1.64 to 1.68.
-
-Among other things, the new version adds a new option to C<ptar> to allow safe
-creation of tarballs without world-writable files on Windows, allowing those
-archives to be uploaded to CPAN.
-
-=item C<B::Lint>
-
-Upgraded from version 1.11 to 1.12.
-
-=item C<Carp>
-
-Upgraded from version 1.16 to 1.18.
-
-L<Carp> now detects incomplete L<caller()|perlfunc/"caller EXPR"> overrides and
-avoids using bogus C<@DB::args>. To provide backtraces, Carp relies on
-particular behaviour of the caller built-in. Carp now detects if other code has
-overridden this with an incomplete implementation, and modifies its backtrace
-accordingly. Previously incomplete overrides would cause incorrect values in
-backtraces (best case), or obscure fatal errors (worst case)
-
-This fixes certain cases of C<Bizarre copy of ARRAY> caused by modules
-overriding C<caller()> incorrectly.
-
-=item C<Compress::Raw::Bzip2>
-
-Upgraded from version 2.027 to 2.030.
-
-=item C<Compress::Raw::Zlib>
-
-Upgraded from version 2.027 to 2.030.
-
-=item C<File::Spec>
-
-Upgraded from version 3.31 to 3.31_01.
-
-Various issues in L<File::Spec::VMS> have been fixed.
-
-=item C<I18N::Langinfo>
-
-Upgraded from version 0.03 to 0.04.
-
-C<langinfo()> now defaults to using C<$_> if there is no argument given, just
-like the documentation always claimed it did.
-
-=item C<IO::Compress>
-
-Upgraded from version 2.027 to 2.030.
-
-=item C<Module::CoreList>
-
-Upgraded from version 2.36 to 2.37.
-
-Besides listing the updated core modules of this release, it also stops listing
-the C<Filespec> module. That module never existed in core. The scripts
-generating C<Module::CoreList> confused it with C<VMS::Filespec>, which actually
-is a core module, since the time of perl 5.8.7.
-
-=item C<Test::Harness>
-
-Upgraded from version 3.21 to 3.22.
-
-=item C<Test::Simple>
-
-Upgraded from version 0.94 to 0.96.
-
-Among many other things, subtests without a C<plan> or C<no_plan> now have an
-implicit C<done_testing()> added to them.
-
-=item C<Unicode::Collate>
-
-Upgraded from version 0.53 to 0.56.
-
-Among other things, it is now using UCA Revision 20 (based on Unicode 5.2.0) and
-supports a couple of new locales.
-
-=item C<feature>
-
-Upgraded from version 1.17 to 1.18.
-
-=back
-
-=head2 Removed Modules and Pragmata
-
-This release does not remove any modules or pragmata.
-
-=head1 Documentation
-
-=head2 Changes to Existing Documentation
-
-=head3 L<perldiag>
-
-=over 4
-
-=item *
-
-The following existing diagnostics are now documented:
-
-=over 4
-
-=item *
-
-L<Ambiguous use of %c resolved as operator %c|perldiag/"Ambiguous use of %c resolved as operator %c">
-
-=item *
-
-L<Ambiguous use of %c{%s} resolved to %c%s|perldiag/"Ambiguous use of %c{%s} resolved to %c%s">
-
-=item *
-
-L<Ambiguous use of %c{%s%s} resolved to %c%s%s|perldiag/"Ambiguous use of %c{%s%s} resolved to %c%s%s">
-
-=item *
-
-L<Ambiguous use of -%s resolved as -&%s()|perldiag/"Ambiguous use of -%s resolved as -&%s()">
-
-=item *
-
-L<Invalid strict version format (%s)|perldiag/"Invalid strict version format (%s)">
-
-=item *
-
-L<Invalid version format (%s)|perldiag/"Invalid version format (%s)">
-
-=item *
-
-L<Invalid version object|perldiag/"Invalid version object">
-
-=back
-
-=back
-
-=head3 L<perlport>
-
-=over 4
-
-=item *
-
-Documented a L<limitation|perlport/alarm> of L<alarm()|perlfunc/"alarm SECONDS">
-on Win32.
-
-=back
-
-=head3 L<perlre>
-
-=over 4
-
-=item *
-
-Minor fix to a multiple scalar match example.
-
-=back
-
-=head1 Configuration and Compilation
-
-=over 4
-
-=item *
-
-Compatibility with C<C++> compilers has been improved.
-
-=item *
-
-On compilers that support it, C<-Wwrite-strings> is now added to cflags by
-default.
-
-=back
-
-=head1 Testing
-
-=over 4
-
-=item *
-
-F<t/op/print.t> has been added to test implicit printing of C<$_>.
-
-=item *
-
-F<t/io/errnosig.t> has been added to test for restoration of of C<$!> when
-leaving signal handlers.
-
-=item *
-
-F<t/op/tie_fetch_count.t> has been added to see if C<FETCH> is only called once
-on tied variables.
-
-=item *
-
-F<lib/Tie/ExtraHash.t> has been added to make sure the, previously untested,
-L<Tie::ExtraHash> keeps working.
-
-=item *
-
-F<t/re/overload.t> has been added to test against string corruption in pattern
-matches on overloaded objects. This is a TODO test.
-
-=back
-
-=head1 Platform Support
-
-=head2 Platform-Specific Notes
-
-=over 4
-
-=item Win32
-
-=over 4
-
-=item *
-
-Fixed a possible hang in F<t/op/readline.t>.
-
-=item *
-
-Fixed build process for SDK2003SP1 compilers.
-
-=item *
-
-When using old 32-bit compilers, the define C<_USE_32BIT_TIME_T> will now be set
-in C<$Config{ccflags}>. This improves portability when compiling XS extensions
-using new compilers, but for a perl compiled with old 32-bit compilers.
-
-=back
-
-=back
-
-=head1 Internal Changes
-
-=over 4
-
-=item Removed C<PERL_POLLUTE>
-
-The option to define C<PERL_POLLUTE> to expose older 5.005 symbols for backwards
-compatibility has been removed. It's use was always discouraged, and MakeMaker
-contains a more specific escape hatch:
-
- perl Makefile.PL POLLUTE=1
-
-This can be used for modules that have not been upgraded to 5.6 naming
-conventions (and really should be completely obsolete by now).
-
-=item Added C<PERL_STATIC_INLINE>
-
-The C<PERL_STATIC_INLINE> define has been added to provide the best-guess
-incantation to use for static inline functions, if the C compiler supports
-C99-style static inline. If it doesn't, it'll give a plain C<static>.
-
-C<HAS_STATIC_INLINE> can be used to check if the compiler actually supports
-inline functions.
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item *
-
-A possible memory leak when using L<caller()|perlfunc/"caller EXPR"> to set
-C<@DB::args> has been fixed.
-
-=item *
-
-Several memory leaks when loading XS modules were fixed.
-
-=item *
-
-A panic in the regular expression optimizer has been fixed (RT#75762).
-
-=item *
-
-Assignments to lvalue subroutines now honor copy-on-write behavior again, which
-has been broken since version 5.10.0 (RT#75656).
-
-=item *
-
-Assignments to glob copies now behave just like assignments to regular globs
-(RT#1804).
-
-=item *
-
-Within signal handlers, C<$!> is now implicitly localized.
-
-=item *
-
-L<readline|perlfunc/"readline EXPR"> now honors C<< <> >> overloading on tied
-arguments.
-
-=item *
-
-L<substr()|perlfunc/"substr EXPR,OFFSET,LENGTH,REPLACEMENT">,
-L<pos()|perlfunc/"index STR,SUBSTR,POSITION">, L<keys()|perlfunc/"keys HASH">,
-and L<vec()|perlfunc/"vec EXPR,OFFSET,BITS"> could, when used in combination
-with lvalues, result in leaking the scalar value they operate on, and cause its
-destruction to happen too late. This has now been fixed.
-
-=item *
-
-Building with C<PERL_GLOBAL_STRUCT>, which has been broken accidentally in
-5.13.3, now works again.
-
-=back
-
-=head1 Known Problems
-
-=over 4
-
-=item *
-
-The changes in L<substr()|perlfunc/"substr EXPR,OFFSET,LENGTH,REPLACEMENT">
-broke C<HTML::Parser> <= 3.66. A fixed C<HTML::Parser> is available as version
-3.67 on CPAN.
-
-=item *
-
-The changes in prototype handling break C<Switch>. A patch has been sent
-upstream and will hopefully appear on CPAN soon.
-
-=back
-
-=head1 Acknowledgements
-
-Perl 5.13.4 represents approximately one month of development since Perl 5.13.3,
-and contains 91,200 lines of changes across 436 files from 34 authors and
-committers.
-
-Thank you to the following for contributing to this release:
-
-Abigail, Andy Armstrong, Andy Dougherty, Chas. Owens, Chip Salzenberg, Chris
-'BinGOs' Williams, Craig A. Berry, David Cantrell, David Golden, David Mitchell,
-Eric Brine, Father Chrysostomos, Florian Ragwitz, George Greer, Gerard Goossen,
-H.Merijn Brand, James Mastros, Jan Dubois, Jerry D. Hedden, Joshua ben Jore,
-Karl Williamson, Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯, Leon Brocard, Lubomir Rintel, Nicholas
-Clark, Paul Marquess, Rafael Garcia-Suarez, Reini Urban, Robin Barker, Slaven
-Rezic, Steve Peters, Tony Cook, Wolfram Humann, Zefram
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles recently
-posted to the comp.lang.perl.misc newsgroup and the perl bug database at
-http://rt.perl.org/perlbug/ . There may also be information at
-http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug> program
-included with your release. Be sure to trim your bug down to a tiny but
-sufficient test case. Your bug report, along with the output of C<perl -V>,
-will be sent off to perlbug at perl.org to be analysed by the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please send it
-to perl5-security-report at perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able to
-help assess the impact of issues, figure out a resolution, and help co-ordinate
-the release of patches to mitigate or fix the problem across all platforms on
-which Perl is supported. Please only use this address for security issues in the
-Perl core, not for modules independently distributed on CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive details
-on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl5135delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl5135delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl5135delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,592 +0,0 @@
-=encoding utf8
-
-=head1 NAME
-
-perl5135delta - what is new for perl v5.13.5
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.13.4 release and
-the 5.13.5 release.
-
-If you are upgrading from an earlier release such as 5.13.3, first read
-L<perl5134delta>, which describes differences between 5.13.3 and
-5.13.4.
-
-=head1 Core Enhancements
-
-=head2 Adjacent pairs of nextstate opcodes are now optimized away
-
-Previously, in code such as
-
- use constant DEBUG => 0;
-
- sub GAK {
- warn if DEBUG;
- print "stuff\n";
- }
-
-the ops for C<warn if DEBUG;> would be folded to a C<null> op (C<ex-const>), but
-the C<nextstate> op would remain, resulting in a runtime op dispatch of
-C<nextstate>, C<nextstate>, ...
-
-The execution of a sequence of C<nextstate> ops is indistinguishable from just
-the last C<nextstate> op so the peephole optimizer now eliminates the first of
-a pair of C<nextstate> ops, except where the first carries a label, since labels
-must not be eliminated by the optimizer and label usage isn't conclusively known
-at compile time.
-
-=head2 API function to parse statements
-
-The C<parse_fullstmt> function has been added to allow parsing of a single
-complete Perl statement. See L<perlapi> for details.
-
-=head2 API functions for accessing the runtime hinthash
-
-A new C API for introspecting the hinthash C<%^H> at runtime has been added.
-See C<cop_hints_2hv>, C<cop_hints_fetchpvn>, C<cop_hints_fetchpvs>,
-C<cop_hints_fetchsv>, and C<hv_copy_hints_hv> in L<perlapi> for details.
-
-=head2 C interface to C<caller()>
-
-The C<caller_cx> function has been added as an XSUB-writer's equivalent of
-C<caller()>. See L<perlapi> for details.
-
-=head1 Incompatible Changes
-
-=head2 Magic variables outside the main package
-
-In previous versions of Perl, magic variables like C<$!>, C<%SIG>, etc. would
-'leak' into other packages. So C<%foo::SIG> could be used to access signals,
-C<${"foo::!"}> (with strict mode off) to access C's C<errno>, etc.
-
-This was a bug, or an 'unintentional' feature, which caused various ill effects,
-such as signal handlers being wiped when modules were loaded, etc.
-
-This has been fixed (or the feature has been removed, depending on how you see
-it).
-
-=head2 Smart-matching against array slices
-
-Previously, the following code resulted in a successful match:
-
- my @a = qw(a y0 z);
- my @b = qw(a x0 z);
- @a[0 .. $#b] ~~ @b;
-
-This odd behaviour has now been fixed
-L<[perl #77468]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=77468>.
-
-=head2 C API changes
-
-The first argument of the C API function C<Perl_fetch_cop_label> has changed
-from C<struct refcounted he *> to C<COP *>, to better insulate the user from
-implementation details.
-
-This API function was marked as "may change", and likely isn't in use outside
-the core. (Neither an unpacked CPAN, nor Google's codesearch, finds any other
-references to it.)
-
-=head1 Deprecations
-
-=head2 Use of qw(...) as parentheses
-
-Historically the parser fooled itself into thinking that C<qw(...)> literals
-were always enclosed in parentheses, and as a result you could sometimes omit
-parentheses around them:
-
- for $x qw(a b c) { ... }
-
-The parser no longer lies to itself in this way. Wrap the list literal in
-parentheses, like:
-
- for $x (qw(a b c)) { ... }
-
-=head1 Performance Enhancements
-
-=over 4
-
-=item *
-
-Scalars containing regular expressions now only allocate the part of the C<SV>
-body they actually use, saving some space.
-
-=item *
-
-Compiling regular expressions has been made faster for the case where upgrading
-the regex to utf8 is necessary but that isn't known when the compilation begins.
-
-=back
-
-=head1 Modules and Pragmata
-
-=head2 Updated Modules and Pragmata
-
-=over 4
-
-=item C<bignum>
-
-Upgraded from version 0.23 to 0.25.
-
-=item C<blib>
-
-Upgraded from version 1.05 to 1.06.
-
-=item C<open>
-
-Upgraded from version 1.07 to 1.08.
-
-=item C<threads-shared>
-
-Upgraded from version 1.33_02 to 1.33_03.
-
-=item C<warnings> and C<warnings::register>
-
-Upgraded from version 1.10 to 1.11 and from version 1.01 to 1.02 respectively.
-
-It is now possible to register warning categories other than the names of
-packages using C<warnings::register>. See L<perllexwarn> for more information.
-
-=item C<B::Debug>
-
-Upgraded from version 1.12 to 1.16.
-
-=item C<CPANPLUS::Dist::Build>
-
-Upgraded from version 0.46 to 0.48.
-
-=item C<Data::Dumper>
-
-Upgraded from version 2.126 to 2.128.
-
-This fixes a crash when using custom sort functions that might cause the stack
-to change.
-
-=item C<Encode>
-
-Upgraded from version 2.39 to 2.40.
-
-=item C<Errno>
-
-Upgraded from version 1.12 to 1.13.
-
-On some platforms with unusual header files, like Win32/gcc using mingw64
-headers, some constants which weren't actually error numbers have been exposed
-by C<Errno>. This has been fixed
-L<[perl #77416]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=77416>.
-
-=item C<ExtUtils::MakeMaker>
-
-Upgraded from version 6.5601 to 6.57_05.
-
-=item C<Filter::Simple>
-
-Upgraded from version 0.84 to 0.85.
-
-=item C<Hash::Util>
-
-Upgraded from version 0.08 to 0.09.
-
-=item C<Math::BigInt>
-
-Upgraded from version 1.89_01 to 1.95.
-
-This fixes, among other things, incorrect results when computing binomial
-coefficients
-L<[perl #77640]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77640>.
-
-=item C<Math::BigInt::FastCalc>
-
-Upgraded from version 0.19 to 0.22.
-
-=item C<Math::BigRat>
-
-Upgraded from version 0.24 to 0.26.
-
-=item C<Module::CoreList>
-
-Upgraded from version 2.37 to 2.38.
-
-=item C<PerlIO::scalar>
-
-Upgraded from version 0.08 to 0.09.
-
-=item C<POSIX>
-
-Upgraded from version 1.19 to 1.20.
-
-It now includes constants for POSIX signal constants.
-
-=item C<Safe>
-
-Upgraded from version 2.27 to 2.28.
-
-This fixes a possible infinite loop when looking for coderefs.
-
-=item C<Test::Simple>
-
-Upgraded from version 0.96 to 0.97_01.
-
-=item C<Tie::Hash>
-
-Upgraded from version 1.03 to 1.04.
-
-Calling C<< Tie::Hash-E<gt>TIEHASH() >> used to loop forever. Now it C<croak>s.
-
-=item C<Unicode::Collate>
-
-Upgraded from version 0.56 to 0.59.
-
-=item C<XSLoader>
-
-Upgraded from version 0.10 to 0.11.
-
-=back
-
-=head1 Documentation
-
-=head2 Changes to Existing Documentation
-
-=head3 L<perlapi>
-
-=over 4
-
-=item *
-
-Many of the optree construction functions are now documented.
-
-=back
-
-=head3 L<perlbook>
-
-=over 4
-
-=item *
-
-Expanded to cover many more popular books.
-
-=back
-
-=head3 L<perlfaq>
-
-=over 4
-
-=item *
-
-L<perlfaq>, L<perlfaq2>, L<perlfaq4>, L<perlfaq5>, L<perlfaq6>, L<perlfaq8>, and
-L<perlfaq9> have seen various updates and modernizations.
-
-=back
-
-=head1 Diagnostics
-
-The following additions or changes have been made to diagnostic output,
-including warnings and fatal error messages. For the complete list of
-diagnostic messages, see L<perldiag>.
-
-=head2 New Diagnostics
-
-=over 4
-
-=item *
-
-Parsing code internal error (%s)
-
-New fatal error produced when parsing code supplied by an extension violated the
-parser's API in a detectable way.
-
-=item *
-
-Use of qw(...) as parentheses is deprecated
-
-See L</"Use of qw(...) as parentheses"> for details.
-
-=back
-
-=head2 Changes to Existing Diagnostics
-
-=over 4
-
-=item *
-
-C<warn> and C<die> now produce 'Wide character' warnings when fed a
-character outside the byte range if STDERR is a byte-sized handle.
-
-=back
-
-=head1 Utility Changes
-
-=head3 L<h2ph>
-
-=over 4
-
-=item *
-
-The use of a deprecated C<goto> construct has been removed
-L<[perl #74404]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=74404>.
-
-=back
-
-=head1 Testing
-
-=over 4
-
-=item *
-
-The new F<t/lib/universal.t> script tests the Internal::* functions and other
-things in F<universal.c>.
-
-=item *
-
-A rare race condition in F<t/op/while_readdir.t> has been fixed, stopping it
-from failing randomly when running tests in parallel.
-
-=item *
-
-The new F<t/op/leaky-magic.t> script tests that magic applied to variables in
-the main packages does not affect other packages.
-
-=back
-
-=head1 Platform Support
-
-=head2 Platform-Specific Notes
-
-=over 4
-
-=item VMS
-
-=over 4
-
-=item *
-
-Make C<PerlIOUnix_open> honour default permissions on VMS.
-
-When C<perlio> became the default and C<unixio> became the default bottom layer,
-the most common path for creating files from Perl became C<PerlIOUnix_open>,
-which has always explicitly used C<0666> as the permission mask.
-
-To avoid this, C<0777> is now passed as the permissions to C<open()>. In the
-VMS CRTL, C<0777> has a special meaning over and above intersecting with the
-current umask; specifically, it allows Unix syscalls to preserve native default
-permissions.
-
-=back
-
-=back
-
-=head1 Internal Changes
-
-=over 4
-
-=item *
-
-C<CALL_FPTR> and C<CPERLscope> have been deprecated.
-
-Those are left from an old implementation of C<MULTIPLICITY> using C++ objects,
-which was removed in Perl 5.8. Nowadays these macros do exactly nothing, so
-they shouldn't be used anymore.
-
-For compatibility, they are still defined for external C<XS> code. Only
-extensions defining C<PERL_CORE> must be updated now.
-
-=item *
-
-C<lex_stuff_pvs()> has been added as a convenience macro wrapping
-C<lex_stuff_pvn()> for literal strings.
-
-=item *
-
-The recursive part of the peephole optimizer is now hookable.
-
-In addition to C<PL_peepp>, for hooking into the toplevel peephole optimizer, a
-C<PL_rpeepp> is now available to hook into the optimizer recursing into
-side-chains of the optree.
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item *
-
-A regression introduced in Perl 5.12.0, making
-C<< my $x = 3; $x = length(undef) >> result in C<$x> set to C<3> has been
-fixed. C<$x> will now be C<undef>.
-
-=item *
-
-A fatal error in regular expressions when processing UTF-8 data has been fixed
-L<[perl #75680]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=75680>.
-
-=item *
-
-An erroneous regular expression engine optimization that caused regex verbs like
-C<*COMMIT> to sometimes be ignored has been removed.
-
-=item *
-
-The Perl debugger now also works in taint mode
-L<[perl #76872]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=76872>.
-
-=item *
-
-Several memory leaks in cloning and freeing threaded Perl interpreters have been
-fixed L<[perl #77352]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77352>.
-
-=item *
-
-A possible string corruption when doing regular expression matches on overloaded
-objects has been fixed
-L<[perl #77084]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77084>.
-
-=item *
-
-Magic applied to variables in the main package no longer affects other packages.
-See L</Magic variables outside the main package> above
-L<[perl #76138]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=76138>.
-
-=item *
-
-Opening a glob reference via C<< open $fh, "E<gt>", \*glob >> will no longer
-cause the glob to be corrupted when the filehandle is printed to. This would
-cause perl to crash whenever the glob's contents were accessed
-L<[perl #77492]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77492>.
-
-=item *
-
-The postincrement and postdecrement operators, C<++> and C<-->, used to cause
-leaks when being used on references. This has now been fixed.
-
-=item *
-
-A bug when replacing the glob of a loop variable within the loop has been fixed
-L<[perl #21469]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=21469>. This
-means the following code will no longer crash:
-
- for $x (...) {
- *x = *y;
- }
-
-=item *
-
-Perl would segfault if the undocumented C<Internals> functions that used
-reference prototypes were called with the C<&foo()> syntax, e.g.
-C<&Internals::SvREADONLY(undef)>
-L<[perl #77776]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77776>.
-
-These functions now call C<SvROK> on their arguments before dereferencing them
-with C<SvRV>, and we test for this case in F<t/lib/universal.t>.
-
-=item *
-
-When assigning a list with duplicated keys to a hash, the assignment used to
-return garbage and/or freed values:
-
- @a = %h = (list with some duplicate keys);
-
-This has now been fixed
-L<[perl #31865]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=31865>.
-
-=item *
-
-An earlier release of the 5.13 series of Perl changed the semantics of opening a
-reference to a copy of a glob:
-
- my $var = *STDOUT;
- open my $fh, '>', \$var;
-
-This was a mistake, and the previous behaviour from Perl 5.10 and 5.12, which is
-to treat \$var as a scalar reference, has now been restored.
-
-=item *
-
-The regular expression bracketed character class C<[\8\9]> was effectively the
-same as C<[89\000]>, incorrectly matching a NULL character. It also gave
-incorrect warnings that the C<8> and C<9> were ignored. Now C<[\8\9]> is the
-same as C<[89]> and gives legitimate warnings that C<\8> and C<\9> are
-unrecognized escape sequences, passed-through.
-
-=item *
-
-C<warn()> and C<die()> now respect utf8-encoded scalars
-L<[perl #45549]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=45549>.
-
-=back
-
-=head1 Known Problems
-
-=over 4
-
-=item *
-
-The upgrade to Encode-2.40 has caused some tests in the libwww-perl distribution
-on CPAN to fail. (Specifically, F<base/message-charset.t> tests 33-36 in version
-5.836 of that distribution now fail.)
-
-=item *
-
-The upgrade to ExtUtils-MakeMaker-6.57_05 has caused some tests in the
-Module-Install distribution on CPAN to fail. (Specifically, F<02_mymeta.t> tests
-5 and 21, F<18_all_from.t> tests 6 and 15, F<19_authors.t> tests 5, 13, 21 and
-29, and F<20_authors_with_special_characters.t> tests 6, 15 and 23 in version
-1.00 of that distribution now fail.)
-
-=back
-
-=head1 Acknowledgements
-
-Perl 5.13.5 represents approximately one month of development since
-Perl 5.13.4 and contains 74558 lines of changes across 549 files
-from 45 authors and committers:
-
-Abigail, Alexander Alekseev, Aristotle Pagaltzis, Ben Morrow, Bram, brian d foy,
-Chas. Owens, Chris 'BinGOs' Williams, Craig A. Berry, Curtis Jewell, Dagfinn
-Ilmari Mannsåker, David Golden, David Leadbeater, David Mitchell, Eric Brine,
-Father Chrysostomos, Florian Ragwitz, Gisle Aas, Jan Dubois, Jerry D. Hedden,
-Jesse Vincent, Jim Cromie, Jirka Hruška, Karl Williamson, Michael G. Schwern,
-Nicholas Clark, Paul Johnson, Philippe Bruhat (BooK), Piotr Fusik, Rafael
-Garcia-Suarez, Rainer Tammer, Reini Urban, Ricardo Signes, Rob Hoelz, Robin
-Barker, Steffen Mueller, Steve Hay, Steve Peters, Todd Rinaldo, Tony Cook,
-Vincent Pit, Yves Orton, Zefram, Zsbán Ambrus, Ævar Arnfjörð Bjarmason.
-
-Many of the changes included in this version originated in the CPAN
-modules included in Perl's core. We're grateful to the entire CPAN
-community for helping Perl to flourish.
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://rt.perl.org/perlbug/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please send
-it to perl5-security-report at perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
-to help assess the impact of issues, figure out a resolution, and help
-co-ordinate the release of patches to mitigate or fix the problem across all
-platforms on which Perl is supported. Please only use this address for
-security issues in the Perl core, not for modules independently
-distributed on CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive details
-on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl5136delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl5136delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl5136delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,799 +0,0 @@
-=encoding utf8
-
-=head1 NAME
-
-perl5136delta - what is new for perl v5.13.6
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.13.5 release and
-the 5.13.6 release.
-
-If you are upgrading from an earlier release such as 5.13.4, first read
-L<perl5135delta>, which describes differences between 5.13.4 and
-5.13.5.
-
-=head1 Core Enhancements
-
-=head2 C<(?^...)> regex construct added to signify default modifiers
-
-A caret (also called a "circumflex accent") C<"^"> immediately following
-a C<"(?"> in a regular expression now means that the subexpression is to
-not inherit the surrounding modifiers such as C</i>, but to revert to the
-Perl defaults. Any modifiers following the caret override the defaults.
-
-The stringification of regular expressions now uses this
-notation. E.g., before, C<qr/hlagh/i> would be stringified as
-C<(?i-xsm:hlagh)>, but now it's stringified as C<(?^i:hlagh)>.
-
-The main purpose of this is to allow tests that rely on the
-stringification to not have to change when new modifiers are added.
-See L<perlre/Extended Patterns>.
-
-=head2 C<"d">, C<"l">, and C<"u"> regex modifiers added
-
-These modifiers are currently only available within a C<(?...)> construct.
-
-The C<"l"> modifier says to compile the regular expression as if it were
-in the scope of C<use locale>, even if it is not.
-
-The C<"u"> modifier says to compile the regular expression as if it were
-in the scope of a C<use feature "unicode_strings"> pragma.
-
-The C<"d"> modifier is used to override any C<use locale> and
-C<use feature "unicode_strings"> pragmas that are in effect at the time
-of compiling the regular expression.
-
-See just below and L<perlre/(?dlupimsx-imsx)>.
-
-=head2 C<use feature "unicode_strings"> now applies to some regex matching
-
-Another chunk of the L<perlunicode/The "Unicode Bug"> is fixed in this
-release. Now, regular expressions compiled within the scope of the
-"unicode_strings" feature will match the same whether or not the target
-string is encoded in utf8, with regard to C<\s>, C<\w>, C<\b>, and their
-complements. Work is underway to add the C<[[:posix:]]> character
-classes and case sensitive matching to the control of this feature, but
-was not complete in time for this dot release.
-
-=head2 C<\N{...}> now handles Unicode named character sequences
-
-Unicode has a number of named character sequences, in which particular sequences
-of code points are given names. C<\N{...}> now recognizes these.
-See L<charnames>.
-
-=head2 New function C<charnames::string_vianame()>
-
-This function is a run-time version of C<\N{...}>, returning the string
-of characters whose Unicode name is its parameter. It can handle
-Unicode named character sequences, whereas the pre-existing
-C<charnames::vianame()> cannot, as the latter returns a single code
-point.
-See L<charnames>.
-
-=head2 Reentrant regular expression engine
-
-It is now safe to use regular expressions within C<(?{...})> and
-C<(??{...})> code blocks inside regular expressions.
-
-These block are still experimental, however, and still have problems with
-lexical (C<my>) variables, lexical pragmata and abnormal exiting.
-
-=head2 Custom per-subroutine check hooks
-
-XS code in an extension module can now annotate a subroutine (whether
-implemented in XS or in Perl) so that nominated XS code will be called
-at compile time (specifically as part of op checking) to change the op
-tree of that subroutine. The compile-time check function (supplied by
-the extension module) can implement argument processing that can't be
-expressed as a prototype, generate customised compile-time warnings,
-perform constant folding for a pure function, inline a subroutine
-consisting of sufficiently simple ops, replace the whole call with a
-custom op, and so on. This was previously all possible by hooking the
-C<entersub> op checker, but the new mechanism makes it easy to tie the
-hook to a specific subroutine. See L<perlapi/cv_set_call_checker>.
-
-To help in writing custom check hooks, several subtasks within standard
-C<entersub> op checking have been separated out and exposed in the API.
-
-=head2 Return value of C<delete $+{...}>
-
-Custom regular expression engines can now determine the return value of
-C<delete> on an entry of C<%+> or C<%->.
-
-=head2 C<keys>, C<values> work on arrays
-
-You can now use the C<keys>, C<values>, C<each> builtin functions on arrays
-(previously you could only use them on hashes). See L<perlfunc> for details.
-This is actually a change introduced in perl 5.12.0, but it was missed from
-that release's perldelta.
-
-=head1 Incompatible Changes
-
-=head2 Stringification of regexes has changed
-
-Default regular expression modifiers are now notated by using
-C<(?^...)>. Code relying on the old stringification will fail. The
-purpose of this is so that when new modifiers are added, such code will
-not have to change (after this one time), as the stringification will
-automatically incorporate the new modifiers.
-
-Code that needs to work properly with both old- and new-style regexes
-can avoid the whole issue by using (for Perls since 5.9.5):
-
- use re qw(regexp_pattern);
- my ($pat, $mods) = regexp_pattern($re_ref);
-
-where C<$re_ref> is a reference to a compiled regular expression. Upon
-return, C<$mods> will be a string containing all the non-default
-modifiers used when the regular expression was compiled, and C<$pattern>
-the actual pattern.
-
-If the actual stringification is important, or older Perls need to be
-supported, you can use something like the following:
-
- # Accept both old and new-style stringification
- my $modifiers = (qr/foobar/ =~ /\Q(?^/) ? '^' : '-xism';
-
-And then use C<$modifiers> instead of C<-xism>.
-
-=head2 Regular expressions retain their localeness when interpolated
-
-Regular expressions compiled under C<"use locale"> now retain this when
-interpolated into a new regular expression compiled outside a
-C<"use locale">, and vice-versa.
-
-Previously, a regular expression interpolated into another one inherited
-the localeness of the surrounding one, losing whatever state it
-originally had. This is considered a bug fix, but may trip up code that
-has come to rely on the incorrect behavior.
-
-=head2 Directory handles not copied to threads
-
-On systems that do not have a C<fchdir> function, newly-created threads no
-longer inherit directory handles from their parent threads. Such programs
-would probably have crashed anyway
-L<[perl #75154]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=75154>.
-
-=head2 Negation treats strings differently from before
-
-The unary negation operator C<-> now treats strings that look like numbers
-as numbers
-L<[perl #57706]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=57706>.
-
-=head2 Negative zero
-
-Negative zero (-0.0), when converted to a string, now becomes "0" on all
-platforms. It used to become "-0" on some, but "0" on others.
-
-If you still need to determine whether a zero is negative, use
-C<sprintf("%g", $zero) =~ /^-/> or the L<Data::Float> module on CPAN.
-
-=head1 Performance Enhancements
-
-=over 4
-
-=item *
-
-The bulk of the C<Tie::Hash::NamedCapture> module used to be in the perl
-core. It has now been moved to an XS module, to reduce the overhead for
-programs that do not use C<%+> or C<%->.
-
-=item *
-
-Eliminate C<PL_*> accessor functions under ithreads.
-
-When C<MULTIPLICITY> was first developed, and interpreter state moved into an
-interpreter struct, thread and interpreter local C<PL_*> variables were defined
-as macros that called accessor functions, returning the address of the value,
-outside of the perl core. The intent was to allow members within the interpreter
-struct to change size without breaking binary compatibility, so that bug fixes
-could be merged to a maintenance branch that necessitated such a size change.
-
-However, some non-core code defines C<PERL_CORE>, sometimes intentionally to
-bypass this mechanism for speed reasons, sometimes for other reasons but with
-the inadvertent side effect of bypassing this mechanism. As some of this code is
-widespread in production use, the result is that the core B<can't> change the
-size of members of the interpreter struct, as it will break such modules
-compiled against a previous release on that maintenance branch. The upshot is
-that this mechanism is redundant, and well-behaved code is penalised by
-it. Hence it can and should be removed.
-
-=back
-
-=head1 Modules and Pragmata
-
-=head2 Updated Modules and Pragmata
-
-=over 4
-
-=item *
-
-C<Archive::Extract> has been upgraded from version 0.42 to 0.44
-
-=item *
-
-C<Carp> has been upgraded from version 1.18 to 1.19.
-
-It no longer autovivifies the C<*CORE::GLOBAL::caller> glob, something it
-started doing in 1.18, which was released with perl 5.13.4
-L<[perl #78082]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=78082>
-
-=item *
-
-C<Compress::Raw::Bzip2> has been upgraded from version 2.030 to 2.031
-
-Updated to use bzip2 1.0.6
-
-=item *
-
-C<CPAN> has been upgraded from version 1.94_57 to 1.94_61
-
-=item *
-
-C<Data::Dumper> has been upgraded from version 2.128 to 2.129.
-
-C<Dumpxs> no longer crashes with globs returned by C<*$io_ref>
-L<[perl #72332]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=72332>.
-
-=item *
-
-C<Digest::MD5> has been upgraded from version 2.40 to 2.51.
-
-It is now safe to use this module in combination with threads.
-
-=item *
-
-C<File::DosGlob> has been upgraded from version 1.02 to 1.03.
-
-It allows patterns containing literal parentheses (they no longer need to
-be escaped). On Windows, it no longer adds an extra F<./> to the file names
-returned when the pattern is a relative glob with a drive specification,
-like F<c:*.pl>
-L<[perl #71712]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=71712>.
-
-=item *
-
-C<File::Find> has been upgraded from version 1.17 to 1.18.
-
-It improves handling of backslashes on Windows, so that paths such as
-F<c:\dir\/file> are no longer generated
-L<[perl #71710]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=71710>.
-
-=item *
-
-C<if> has been upgraded from version 0.05 to 0.06
-
-=item *
-
-C<IPC::Cmd> has been upgraded from version 0.60 to 0.64
-
-=item *
-
-C<IPC::Open3> has been upgraded from version 1.06 to 1.07.
-
-The internal C<xclose> routine now knows how to handle file descriptors, as
-documented, so duplicating STDIN in a child process using its file
-descriptor now works
-L<[perl #76474]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=71710>.
-
-=item *
-
-C<Locale::Codes> has been upgraded from version 3.13 to 3.14.
-
-=item *
-
-C<Locale::Maketext> has been upgraded from version 1.15 to 1.16.
-
-It fixes an infinite loop in C<Locale::Maketext::Guts::_compile()> when
-working with tainted values
-(L<CPAN RT #40727|https://rt.cpan.org/Public/Bug/Display.html?id=40727>).
-
-C<< ->maketext >> calls will now backup and restore C<$@> so that error
-messages are not suppressed
-(L<CPAN RT #34182|https://rt.cpan.org/Public/Bug/Display.html?id=34182>).
-
-=item *
-
-C<Math::BigInt> has been upgraded from version 1.95 to 1.97.
-
-This prevents C<sqrt($int)> from crashing under C<use bigrat;>
-L<[perl #73534]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=73534>.
-
-=item *
-
-C<NEXT> has been upgraded from version 0.64 to 0.65.
-
-=item *
-
-C<overload> has been upgraded from version 1.10 to 1.11.
-
-C<overload::Method> can now handle subroutines that are themselves blessed
-into overloaded classes
-L<[perl #71998]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=71998>.
-
-=item *
-
-C<PathTools> has been upgraded from version 3.31_01 to 3.34.
-
-=item *
-
-C<podlators> has been upgraded from version 2.3.1 to 2.4.0
-
-=item *
-
-C<sigtrap> has been upgraded from version 1.04 to 1.05.
-
-It no longer tries to modify read-only arguments when generating a
-backtrace
-L<[perl #72340]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=72340>.
-
-=item *
-
-C<threads> has been upgraded from version 1.77_03 to 1.81_01.
-
-=item *
-
-C<threads::shared> has been upgrade from version 1.33_03 to 1.34
-
-=item *
-
-C<Unicode::Collate> has been upgraded from version 0.59 to 0.63
-
-U::C::Locale newly supports locales: ar, be, bg, de__phonebook, hu, hy, kk, mk, nso, om,
-tn, vi, hr, ig, ru, sq, se, sr, to and uk
-
-=item *
-
-C<Unicode::Normalize> has been upgraded from version 1.06 to 1.07
-
-=item *
-
-C<B::Deparse> has been upgraded from version 0.98 to 0.99
-
-B::Deparse now properly handles the code that applies a conditional
-pattern match against implicit C<$_> as it was fixed in
-L<[perl #20444]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=20444>.
-
-=item *
-
-C<GDBM_File> has been upgraded from version 1.10 to 1.11
-
-=back
-
-=head1 Documentation
-
-=head2 Changes to Existing Documentation
-
-=head3 L<perlapi>
-
-=over 4
-
-=item *
-
-The documentation for the C<SvTRUE> macro was simply wrong in stating that
-get-magic is not processed. It has been corrected.
-
-=back
-
-=head1 Diagnostics
-
-The following additions or changes have been made to diagnostic output,
-including warnings and fatal error messages. For the complete list of
-diagnostic messages, see L<perldiag>.
-
-=head2 Changes to Existing Diagnostics
-
-=over 4
-
-=item *
-
-The 'Layer does not match this perl' error message has been replaced with
-these more helpful messages:
-
-=over 4
-
-=item *
-
-PerlIO layer function table size (%d) does not match size expected by this
-perl (%d)
-
-=item *
-
-PerlIO layer instance size (%d) does not match size expected by this perl
-(%d)
-
-=back
-
-L<[perl #73754]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=73754>
-
-=back
-
-=head1 Testing
-
-=over 4
-
-=item *
-
-The script F<t/op/threads-dirh.t> has been added, which tests interaction
-of threads and directory handles.
-
-=back
-
-=head1 Platform Support
-
-=head2 Platform-Specific Notes
-
-=over 4
-
-=item IRIX
-
-Conversion of strings to floating-point numbers is now more accurate on
-IRIX systems
-L<[perl #32380]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=32380>.
-
-=item Mac OS X
-
-Early versions of Mac OS X (Darwin) had buggy implementations of the
-C<setregid>, C<setreuid>, C<setrgid> and C<setruid> functions, so perl
-would pretend they did not exist.
-
-These functions are now recognised on Mac OS 10.5 (Leopard; Darwin 9) and
-higher, as they have been fixed
-L<[perl #72990]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=72990>.
-
-=item OpenVOS
-
-perl now builds again with OpenVOS (formerly known as Stratus VOS)
-L<[perl #78132]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=78132>.
-
-=item VMS
-
-The shortening of symbols longer than 31 characters in the C sources is
-now done by the compiler rather than by xsubpp (which could only do so
-for generated symbols in XS code).
-
-=item Windows
-
-C<$Config{gccversion}> is now set correctly when perl is built using the
-mingw64 compiler from L<http://mingw64.org>
-L<[perl #73754]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=73754>.
-
-The build process proceeds more smoothly with mingw and dmake when
-F<C:\MSYS\bin> is in the PATH, due to a C<Cwd> fix.
-
-=back
-
-=head1 Internal Changes
-
-=over 4
-
-=item *
-
-See L</Regular expressions retain their localeness when interpolated>,
-above.
-
-=item *
-
-The C<sv_cmp_flags>, C<sv_cmp_locale_flags>, C<sv_eq_flags> and
-C<sv_collxfrm_flags> functions have been added. These are like their
-non-_flags counterparts, but allow one to specify whether get-magic is
-processed.
-
-The C<sv_cmp>, C<sv_cmp_locale>, C<sv_eq> and C<sv_collxfrm> functions have
-been replaced with wrappers around the new functions.
-
-=item *
-
-A new C<sv_2bool_flags> function has been added.
-
-This is like C<sv_2bool>, but it lets the calling code decide whether
-get-magic is handled. C<sv_2bool> is now a macro that calls the new
-function.
-
-=item *
-
-A new macro, C<SvTRUE_nomg>, has been added.
-
-This is like C<SvTRUE>, except that it does not process magic. It uses the
-new C<sv_2bool_flags> function.
-
-=item *
-
-C<sv_catsv_flags> no longer calls C<mg_get> on its second argument (the
-source string) if the flags passed to it do not include SV_GMAGIC. So it
-now matches the documentation.
-
-=item *
-
-A new interface has been added for custom check hooks on subroutines. See
-L</Custom per-subroutine check hooks>, above.
-
-=item *
-
-List op building functions have been added to the
-API. See L<op_append_elem|perlapi/op_append_elem>,
-L<op_append_list|perlapi/op_append_list>, and
-L<op_prepend_elem|perlapi/op_prepend_elem>.
-
-=item *
-
-The L<LINKLIST|perlapi/LINKLIST> macro, part of op building that
-constructs the execution-order op chain, has been added to the API.
-
-=item *
-
-Many functions ending with pvn now have equivalent pv/pvs/sv versions.
-
-=item *
-
-The C<save_freeop>, C<save_op>, C<save_pushi32ptr> and C<save_pushptrptr>
-functions have been added to the API.
-
-=item *
-
-The new API function C<parse_stmtseq()> parses a sequence of statements, up
-to closing brace or EOF.
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item *
-
-A regular expression match in the right-hand side of a global substitution
-(C<s///g>) that is in the same scope will no longer cause match variables
-to have the wrong values on subsequent iterations. This can happen when an
-array or hash subscript is interpolated in the right-hand side, as in
-C<s|(.)|@a{ print($1), /./ }|g>
-L<[perl #19078]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=19078>.
-
-=item *
-
-Constant-folding used to cause
-
- $text =~ ( 1 ? /phoo/ : /bear/)
-
-to turn into
-
- $text =~ /phoo/
-
-at compile time. Now it correctly matches against C<$_>
-L<[perl #20444]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=20444>.
-
-=item *
-
-Parsing Perl code (either with string C<eval> or by loading modules) from
-within a C<UNITCHECK> block no longer causes the interpreter to crash
-L<[perl #70614]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=70614>.
-
-=item *
-
-When C<-d> is used on the shebang (C<#!>) line, the debugger now has access
-to the lines of the main program. In the past, this sometimes worked and
-sometimes did not, depending on what order things happened to be arranged
-in memory
-L<[perl #71806]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=71806>.
-
-=item *
-
-The C<y///> or C<tr///> operator now calls get-magic (e.g., the C<FETCH>
-method of a tie) on its left-hand side just once, not twice
-L<[perl #76814]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=76814>.
-
-=item *
-
-String comparison (C<eq>, C<ne>, C<lt>, C<gt>, C<le>, C<ge> and
-C<cmp>) and logical not (C<not> and C<!>) operators no longer call magic
-(e.g., tie methods) twice on their operands
-L<[perl #76814]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=76814>.
-
-This bug was introduced in an earlier 5.13 release, and does not affect
-perl 5.12.
-
-=item *
-
-When a tied (or other magic) variable is used as, or in, a regular
-expression, it no longer has its C<FETCH> method called twice
-L<[perl #76814]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=76814>.
-
-This bug was introduced in an earlier 5.13 release, and does not affect
-perl 5.12.
-
-=item *
-
-The C<-C> command line option can now be followed by other options
-L<[perl #72434]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=72434>.
-
-=item *
-
-Assigning a glob to a PVLV used to convert it to a plain string. Now it
-works correctly, and a PVLV can hold a glob. This would happen when a
-nonexistent hash or array element was passed to a subroutine:
-
- sub { $_[0] = *foo }->($hash{key});
- # $_[0] would have been the string "*main::foo"
-
-It also happened when a glob was assigned to, or returned from, an element
-of a tied array or hash
-L<[perl #36051]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=36051>.
-
-=item *
-
-Creating a new thread when directory handles were open used to cause a
-crash, because the handles were not cloned, but simply passed to the new
-thread, resulting in a double free.
-
-Now directory handles are cloned properly, on systems that have a C<fchdir>
-function. On other systems, new threads simply do not inherit directory
-handles from their parent threads
-L<[perl #75154]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=75154>.
-
-=item *
-
-The regular expression parser no longer hangs when parsing C<\18> and
-C<\88>.
-
-This bug was introduced in version 5.13.5 and did not affect earlier
-versions
-L<[perl #78058]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78058>.
-
-=item *
-
-Subroutine redefinition works once more in the debugger
-L<[perl #48332]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=48332>.
-
-=item *
-
-The C<&> C<|> C<^> bitwise operators no longer coerce read-only arguments
-L<[perl #20661]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=20661>.
-
-=item *
-
-Stringifying a scalar containing -0.0 no longer has the affect of turning
-false into true
-L<[perl #45133]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=45133>.
-
-=item *
-
-Aliasing packages by assigning to globs or deleting packages by deleting
-their containing stash elements used to have erratic effects on method
-resolution, because the internal 'isa' caches were not reset. This has been
-fixed.
-
-=item *
-
-C<sort> with a custom sort routine could crash if too many nested
-subroutine calls occurred from within the sort routine
-L<[perl #77930]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77930>.
-
-This bug was introduced in an earlier 5.13 release, and did not affect
-perl 5.12.
-
-=item *
-
-The C<eval_sv> and C<eval_pv> C functions now set C<$@> correctly when
-there is a syntax error and no C<G_KEEPERR> flag, and never set it if the
-C<G_KEEPERR> flag is present
-L<[perl #3719]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=3719>.
-
-=item *
-
-Nested C<map> and C<grep> blocks no longer leak memory when processing
-large lists
-L<[perl #48004]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=48004>.
-
-=item *
-
-Malformed C<version> objects no longer cause crashes
-L<[perl #78286]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78286>.
-
-=item *
-
-The interpreter no longer crashes when freeing deeply-nested arrays of
-arrays. Hashes have not been fixed yet
-L<[perl #44225]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=44225>.
-
-=item *
-
-The mechanism for freeing objects in globs used to leave dangling
-pointers to freed SVs, meaning Perl users could see corrupted state
-during destruction.
-
-Perl now only frees the affected slots of the GV, rather than freeing
-the GV itself. This makes sure that there are no dangling refs or
-corrupted state during destruction.
-
-=item *
-
-The typeglob C<*,>, which holds the scalar variable C<$,> (output field
-separator), had the wrong reference count in child threads.
-
-=item *
-
-C<splice> now calls set-magic. This means that, for instance, changes made
-by C<splice @ISA> are respected by method calls
-L<[perl #78400]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78400>.
-
-=item *
-
-C<use v5.8> no longer leaks memory
-L<[perl #78436]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78436>.
-
-=item *
-
-The XS multicall API no longer causes subroutines to lose reference counts
-if called via the multicall interface from within those very subroutines.
-This affects modules like List::Util. Calling one of its functions with an
-active subroutine as the first argument could cause a crash
-L<[perl #78070]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78070>.
-
-=back
-
-=head1 Errata
-
-=over 4
-
-=item *
-
-Fixed a typo in L<perl5135delta> regarding array slices and smart matching
-
-=back
-
-=head1 Acknowledgements
-
-Perl 5.13.6 represents approximately one month of development since Perl
-5.13.5 and contains 67920 lines of changes across 566 files from 47 authors
-and committers:
-
-A. Sinan Unur, Aaron Crane, Alex Davies, Ali Polatel, Allen Smith, Andrew Rodland,
-Andy Dougherty, Ben Morrow, brian d foy, Casey West, Chip Salzenberg, Chris
-'BinGOs' Williams, Craig A. Berry, David Golden, David Mitchell, Eric Brine,
-Father Chrysostomos, Florian Ragwitz, George Greer, gregor herrmann, Jan Dubois,
-Jerry D. Hedden, Jesse Vincent, Joshua Pritikin, Karl Williamson, kmx, Michael
-G Schwern, Mike Kelly, Nicholas Clark, Paul Green, Rafael Garcia-Suarez, Renee
-Baecker, Ricardo Signes, Sisyphus, Slaven Rezic, Steffen Müller, Steve Hay,
-Sullivan Beck, Tatsuhiko Miyagawa, Todd Rinaldo, Tony Cook, Tye McQueen, Vernon
-Lyon, Walt Mankowski, Zefram, Zsbán Ambrus, Ævar Arnfjörð Bjarmason.
-
-Many of the changes included in this version originated in the CPAN
-modules included in Perl's core. We're grateful to the entire CPAN
-community for helping Perl to flourish.
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://rt.perl.org/perlbug/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please send
-it to perl5-security-report at perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
-to help assess the impact of issues, figure out a resolution, and help
-co-ordinate the release of patches to mitigate or fix the problem across all
-platforms on which Perl is supported. Please only use this address for
-security issues in the Perl core, not for modules independently
-distributed on CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive details
-on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl5137delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl5137delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl5137delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,945 +0,0 @@
-=encoding utf8
-
-=head1 NAME
-
-perl5137delta - what is new for perl v5.13.7
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.13.6 release and
-the 5.13.7 release.
-
-If you are upgrading from an earlier release such as 5.13.5, first read
-L<perl5136delta>, which describes differences between 5.13.5 and
-5.13.6.
-
-=head1 Core Enhancements
-
-=head2 Single term prototype
-
-The C<+> prototype is a special alternative to C<$> that will act like
-C<\[@%]> when given a literal array or hash variable, but will otherwise
-force scalar context on the argument. This is useful for functions which
-should accept either a literal array or an array reference as the argument:
-
- sub smartpush (+@) {
- my $aref = shift;
- die "Not an array or arrayref" unless ref $aref eq 'ARRAY';
- push @$aref, @_;
- }
-
-When using the C<+> prototype, your function must check that the argument
-is of an acceptable type.
-
-=head2 C<use re '/flags';>
-
-The C<re> pragma now has the ability to turn on regular expression flags
-till the end of the lexical scope:
-
- use re '/x';
- "foo" =~ / (.+) /; # /x implied
-
-See L<re/"'/flags' mode"> for details.
-
-=head2 Statement labels can appear in more places
-
-Statement labels can now occur before any type of statement or declaration,
-such as C<package>.
-
-=head2 C<use feature "unicode_strings"> now applies to more regex matching
-
-Another chunk of the L<perlunicode/The "Unicode Bug"> is fixed in this
-release. Now, regular expressions compiled within the scope of the
-"unicode_strings" feature (or under the "u" regex modifier (specifiable
-currently only with infix notation C<(?u:...)> or via C<use re '/u'>)
-will match the same whether or not the target string is encoded in utf8,
-with regard to C<[[:posix:]]> character classes
-
-Work is underway to add the case sensitive matching to the control of
-this feature, but was not complete in time for this dot release.
-
-=head2 Array and hash container functions accept references
-
-All built-in functions that operate directly on array or hash
-containers now also accept hard references to arrays or hashes:
-
- |----------------------------+---------------------------|
- | Traditional syntax | Terse syntax |
- |----------------------------+---------------------------|
- | push @$arrayref, @stuff | push $arrayref, @stuff |
- | unshift @$arrayref, @stuff | unshift $arrayref, @stuff |
- | pop @$arrayref | pop $arrayref |
- | shift @$arrayref | shift $arrayref |
- | splice @$arrayref, 0, 2 | splice $arrayref, 0, 2 |
- | keys %$hashref | keys $hashref |
- | keys @$arrayref | keys $arrayref |
- | values %$hashref | values $hashref |
- | values @$arrayref | values $arrayref |
- | ($k,$v) = each %$hashref | ($k,$v) = each $hashref |
- | ($k,$v) = each @$arrayref | ($k,$v) = each $arrayref |
- |----------------------------+---------------------------|
-
-This allows these built-in functions to act on long dereferencing chains
-or on the return value of subroutines without needing to wrap them in
-C<@{}> or C<%{}>:
-
- push @{$obj->tags}, $new_tag; # old way
- push $obj->tags, $new_tag; # new way
-
- for ( keys %{$hoh->{genres}{artists}} ) {...} # old way
- for ( keys $hoh->{genres}{artists} ) {...} # new way
-
-For C<push>, C<unshift> and C<splice>, the reference will auto-vivify
-if it is not defined, just as if it were wrapped with C<@{}>.
-
-Calling C<keys> or C<values> directly on a reference gives a substantial
-performance improvement over explicit dereferencing.
-
-For C<keys>, C<values>, C<each>, when overloaded dereferencing is
-present, the overloaded dereference is used instead of dereferencing the
-underlying reftype. Warnings are issued about assumptions made in the
-following three ambiguous cases:
-
- (a) If both %{} and @{} overloading exists, %{} is used
- (b) If %{} overloading exists on a blessed arrayref, %{} is used
- (c) If @{} overloading exists on a blessed hashref, @{} is used
-
-=head2 y///r
-
-The C</r> flag, which was added to C<s///> in 5.13.2, has been extended to
-the C<y///> operator.
-
-It causes it to perform the substitution on a I<copy> of its operand,
-returning that copy instead of a character count.
-
-=head2 New global variable C<${^GLOBAL_PHASE}>
-
-A new global variable, C<${^GLOBAL_PHASE}>, has been added to allow
-introspection of the current phase of the perl interpreter. It's explained in
-detail in L<perlvar/"${^GLOBAL_PHASE}"> and
-L<perlmod/"BEGIN, UNITCHECK, CHECK, INIT and END">.
-
-=head2 Unicode Version 6.0 is now supported (mostly)
-
-Perl comes with the Unicode 6.0 data base updated with
-L<Corrigendum #8|http://www.unicode.org/versions/corrigendum8.html>,
-with one exception noted below.
-See L<http://unicode.org/versions/Unicode6.0.0> for details on the new
-release. Perl does not support any Unicode provisional properties,
-including the new ones for this release, but their database files are
-packaged with Perl.
-
-Unicode 6.0 has chosen to use the name C<BELL> for the character at U+1F514,
-which is a symbol that looks like a bell, and used in Japanese cell
-phones. This conflicts with the long-standing Perl usage of having
-C<BELL> mean the ASCII C<BEL> character, U+0007. In Perl 5.14,
-C<\N{BELL}> will continue to mean U+0007, but its use will generate a
-deprecated warning message, unless such warnings are turned off. The
-new name for U+0007 in Perl will be C<ALERT>, which corresponds nicely
-with the existing shorthand sequence for it, C<"\a">. C<\N{BEL}> will
-mean U+0007, with no warning given. The character at U+1F514 will not
-have a name in 5.14, but can be referred to by C<\N{U+1F514}>. The plan
-is that in Perl 5.16, C<\N{BELL}> will refer to U+1F514, and so all code
-that uses C<\N{BELL}> should convert by then to using C<\N{ALERT}>,
-C<\N{BEL}>, or C<"\a"> instead.
-
-=head2 Improved support for custom OPs
-
-Custom ops can now be registered with the new C<custom_op_register> C
-function and the C<XOP> structure. This will make it easier to add new
-properties of custom ops in the future. Two new properties have been added
-already, C<xop_class> and C<xop_peep>.
-
-C<xop_class> is one of the OA_*OP constants, and allows L<B> and other
-introspection mechanisms to work with custom ops that aren't BASEOPs.
-C<xop_peep> is a pointer to a function that will be called for ops of this
-type from C<Perl_rpeep>.
-
-See L<perlguts/Custom Operators> and L<perlapi/Custom Operators> for more
-detail.
-
-The old C<PL_custom_op_names>/C<PL_custom_op_descs> interface is still
-supported but discouraged.
-
-=head1 Incompatible Changes
-
-=head2 Dereferencing typeglobs
-
-If you assign a typeglob to a scalar variable:
-
- $glob = *foo;
-
-the glob that is copied to C<$glob> is marked with a special flag
-indicating that the glob is just a copy. This allows subsequent assignments
-to C<$glob> to overwrite the glob. The original glob, however, is
-immutable.
-
-Many Perl operators did not distinguish between these two types of globs.
-This would result in strange behaviour in edge cases: C<untie $scalar>
-would do nothing if the last thing assigned to the scalar was a glob
-(because it treated it as C<untie *$scalar>, which unties a handle).
-Assignment to a glob slot (e.g., C<(*$glob) = \@some_array>) would simply
-assign C<\@some_array> to C<$glob>.
-
-To fix this, the C<*{}> operator (including the C<*foo> and C<*$foo> forms)
-has been modified to make a new immutable glob if its operand is a glob
-copy. Various operators that make a distinction between globs and scalars
-have been modified to treat only immutable globs as globs.
-
-This causes an incompatible change in code that assigns a glob to the
-return value of C<*{}> when that operator was passed a glob copy. Take the
-following code, for instance:
-
- $glob = *foo;
- *$glob = *bar;
-
-The C<*$glob> on the second line returns a new immutable glob. That new
-glob is made an alias to C<*bar>. Then it is discarded. So the second
-assignment has no effect.
-
-It also means that C<tie $handle> will now tie C<$handle> as a scalar, even
-if it has had a glob assigned to it.
-
-The upside to this incompatible change is that bugs
-L<[perl #77496]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77496>,
-L<[perl #77502]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77502>,
-L<[perl #77508]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77508>,
-L<[perl #77688]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77688>,
-and
-L<[perl #77812]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77812>,
-and maybe others, too, have been fixed.
-
-See L<http://rt.perl.org/rt3/Public/Bug/Display.html?id=77810> for even
-more detail.
-
-=head2 Clearing stashes
-
-Stash list assignment C<%foo:: = ()> used to make the stash anonymous
-temporarily while it was being emptied. Consequently, any of its
-subroutines referenced elsewhere would become anonymous (showing up as
-"(unknown)" in C<caller>). Now they retain their package names, such that
-C<caller> will return the original sub name if there is still a reference
-to its typeglob, or "foo::__ANON__" otherwise
-L<[perl #79208]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=79208>.
-
-=head1 Deprecations
-
-=head2 C<\N{BELL}> is deprecated
-
-This is because Unicode is using that name for a different character.
-See L</Unicode Version 6.0 is now supported (mostly)> for more
-explanation.
-
-=head1 Performance Enhancements
-
-=over 4
-
-=item *
-
-When an object has many weak references to it, freeing that object
-can under some some circumstances take O(N^2) time to free (where N is the
-number of references). The number of circumstances has been reduced.
-L<[perl #75254]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=75254>.
-
-=back
-
-=head1 Modules and Pragmata
-
-=head2 New Modules and Pragmata
-
-=over 4
-
-=item *
-
-The following modules were added by the C<Unicode::Collate>
-upgrade from 0.63 to 0.67. See below for details.
-
-C<Unicode::Collate::CJK::Big5>
-
-C<Unicode::Collate::CJK::GB2312>
-
-C<Unicode::Collate::CJK::JISX0208>
-
-C<Unicode::Collate::CJK::Korean>
-
-C<Unicode::Collate::CJK::Pinyin>
-
-C<Unicode::Collate::CJK::Stroke>
-
-=back
-
-=head2 Updated Modules and Pragmata
-
-=over 4
-
-=item *
-
-C<Archive::Extract> has been upgraded from 0.44 to 0.46
-
-Resolves an issue with NetBSD-current and its new unzip
-executable.
-
-=item *
-
-C<Archive::Tar> has been upgraded from 1.68 to 1.72
-
-This adds the ptargrep utility for using regular expressions against
-the contents of files in a tar archive.
-
-=item *
-
-C<B> has been upgraded from 1.24 to 1.26.
-
-It no longer crashes when taking apart a C<y///> containing characters
-outside the octet range or compiled in a C<use utf8> scope.
-
-The size of the shared object has been reduced by about 40%, with no
-reduction in functionality.
-
-=item *
-
-C<B::Deparse> has been upgraded from 0.99 to 1.01.
-
-It fixes deparsing of C<our> followed by a variable with funny characters
-(as permitted under the C<utf8> pragma)
-L<[perl #33752]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=33752>.
-
-=item *
-
-C<CGI> has been upgraded from 3.49 to 3.50
-
-This provides the following security fixes: the MIME boundary in
-multipart_init is now random and improvements to the handling of
-newlines embedded in header values.
-
-The documentation for param_fetch() has been corrected and clarified.
-
-=item *
-
-C<CPAN> has been upgraded from 1.94_61 to 1.94_62
-
-=item *
-
-C<CPANPLUS> has been upgraded from 0.9007 to 0.9010
-
-Fixes for the SQLite source engine and resolving of issues with the
-testsuite when run under local::lib and/or cpanminus
-
-=item *
-
-C<CPANPLUS::Dist::Build> has been upgraded from 0.48 to 0.50
-
-=item *
-
-C<Data::Dumper> has been upgraded from 2.129 to 2.130_01.
-
-=item *
-
-C<DynaLoader> has been upgraded from 1.10 to 1.11.
-
-It fixes a buffer overflow when passed a very long file name.
-
-=item *
-
-C<ExtUtils::Constant> has been upgraded from 0.22 to 0.23.
-
-The C<AUTOLOAD> helper code generated by C<ExtUtils::Constant::ProxySubs>
-can now C<croak> for missing constants, or generate a complete C<AUTOLOAD>
-subroutine in XS, allowing simplification of many modules that use it.
-(C<Fcntl>, C<File::Glob>, C<GDBM_File>, C<I18N::Langinfo>, C<POSIX>, C<Socket>)
-
-C<ExtUtils::Constant::ProxySubs> can now optionally push the names of all
-constants onto the package's C{@EXPORT_OK}. This has been used to replace
-less space-efficient code in C<B>, helping considerably shrink the size of its
-shared object.
-
-=item *
-
-C<Fcntl> has been upgraded from 1.09 to 1.10.
-
-=item *
-
-C<File::Fetch> has been upgraded from 0.24 to 0.28
-
-C<HTTP::Lite> is now supported for 'http' scheme.
-
-The C<fetch> utility is supported on FreeBSD, NetBSD and
-Dragonfly BSD for the C<http> and C<ftp> schemes.
-
-=item *
-
-C<File::Glob> has been upgraded from 1.09 to 1.10.
-
-=item *
-
-C<File::stat> has been upgraded from 1.03 to 1.04.
-
-The C<-x> and C<-X> file test operators now work correctly under the root
-user.
-
-=item *
-
-C<GDBM_File> has been upgraded from 1.11 to 1.12.
-
-This fixes a memory leak when DBM filters are used.
-
-=item *
-
-C<Hash::Util> has been upgraded from 0.09 to 0.10.
-
-=item *
-
-C<Hash::Util::FieldHash> has been upgraded from 1.05 to 1.06.
-
-=item *
-
-C<I18N::Langinfo> has been upgraded from 0.06 to 0.07.
-
-=item *
-
-C<Locale::Maketext> has been upgraded from 1.16 to 1.17.
-
-=item *
-
-C<Math::BigInt> has been upgraded from 1.97 to 1.99_01.
-
-=item *
-
-C<Math::BigRat> has been upgraded from 0.26 to 0.26_01
-
-=item *
-
-C<Math::BigInt::FastCalc> has been upgraded from 0.22 to 0.24_01.
-
-=item *
-
-C<MIME::Base64> has been upgraded from 3.09 to 3.10
-
-Includes new functions to calculate the length of encoded and decoded
-base64 strings.
-
-=item *
-
-C<mro> has been upgraded from 1.04 to 1.05.
-
-=item *
-
-C<NDBM_File> has been upgraded from 1.09 to 1.10.
-
-This fixes a memory leak when DBM filters are used.
-
-=item *
-
-C<ODBM_File> has been upgraded from 1.08 to 1.09.
-
-This fixes a memory leak when DBM filters are used.
-
-=item *
-
-C<Opcode> has been upgraded from 1.16 to 1.17.
-
-=item *
-
-C<parent> has been upgraded from 0.223 to 0.224
-
-=item *
-
-C<Pod::Simple> has been upgraded from 3.14 to 3.15
-
-Includes various fixes to C<HTML> and C<XHTML> handling.
-
-=item *
-
-C<POSIX> has been upgraded from 1.21 to 1.22.
-
-=item *
-
-C<re> has been upgraded from 0.13 to 0.14, for the sake of the new
-C<use re "/flags"> pragma.
-
-=item *
-
-C<Safe> has been upgraded from 2.28 to 2.29.
-
-It adds C<&version::vxs::VCMP> to the default share.
-
-=item *
-
-C<SDBM_File> has been upgraded from 1.07 to 1.08.
-
-=item *
-
-C<SelfLoader> has been upgraded from 1.17 to 1.18.
-
-It now works in taint mode
-L<[perl #72062]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=72062>.
-
-=item *
-
-C<Socket> has been upgraded from 1.90 to 1.91.
-
-=item *
-
-C<Storable> has been upgraded from 2.22 to 2.24
-
-Includes performance improvement for overloaded classes.
-
-=item *
-
-C<Sys::Hostname> has been upgraded from 1.13 to 1.14.
-
-=item *
-
-C<Unicode::Collate> has been upgraded from 0.63 to 0.67
-
-This release newly adds locales C<ja> C<ko> and C<zh> and its variants
-( C<zh__big5han>, C<zh__gb2312han>, C<zh__pinyin>, C<zh__stroke> ).
-
-Supported UCA_Version 22 for Unicode 6.0.0.
-
-The following modules have been added:
-
-C<Unicode::Collate::CJK::Big5> for C<zh__big5han> which makes
-tailoring of CJK Unified Ideographs in the order of CLDR's big5han ordering.
-
-C<Unicode::Collate::CJK::GB2312> for C<zh__gb2312han> which makes
-tailoring of CJK Unified Ideographs in the order of CLDR's gb2312han ordering.
-
-C<Unicode::Collate::CJK::JISX0208> which makes tailoring of 6355 kanji
-(CJK Unified Ideographs) in the JIS X 0208 order.
-
-C<Unicode::Collate::CJK::Korean> which makes tailoring of CJK Unified Ideographs
-in the order of CLDR's Korean ordering.
-
-C<Unicode::Collate::CJK::Pinyin> for C<zh__pinyin> which makes
-tailoring of CJK Unified Ideographs in the order of CLDR's pinyin ordering.
-
-C<Unicode::Collate::CJK::Stroke> for C<zh__stroke> which makes
-tailoring of CJK Unified Ideographs in the order of CLDR's stroke ordering.
-
-=back
-
-=head1 Documentation
-
-L<perlvar> reorders the variables and groups them by topic. Each variable
-introduced after Perl 5.000 notes the first version in which it is
-available. L<perlvar> also has a new section for deprecated variables to
-note when they were removed.
-
-=head2 New Documentation
-
-=head3 L<perlpodstyle>
-
-New style guide for POD documentation,
-split mostly from the NOTES section of the pod2man man page.
-
-( This was added to C<v5.13.6> but was not documented with that release ).
-
-=head2 Changes to Existing Documentation
-
-=over
-
-=item *
-
-Array and hash slices in scalar context are now documented in L<perldata>.
-
-=item *
-
-L<perlform> and L<perllocale> have been corrected to state that
-C<use locale> affects formats.
-
-=back
-
-=head1 Diagnostics
-
-=head2 New Diagnostics
-
-=over 4
-
-=item *
-
-"Using !~ with %s doesn't make sense": This message was actually added in
-5.13.2, but was omitted from perldelta. It now applies also to the C<y///>
-operator, and has been documented.
-
-=back
-
-=head1 Utility Changes
-
-=head3 L<ptargrep>
-
-=over 4
-
-=item *
-
-L<ptargrep> is a utility to apply pattern matching to the contents of files
-in a tar archive. It comes with C<Archive::Tar>.
-
-=back
-
-=head1 Testing
-
-=over 4
-
-=item *
-
-The new F<t/mro/isa_aliases.t> has been added, which tests that
-C<*Foo::ISA = *Bar::ISA> works properly.
-
-=item *
-
-F<t/mro/isarev.t> has been added, which tests that C<PL_isarev> (accessible
-at the Perl level via C<mro::get_isarev>) is updated properly.
-
-=item *
-
-F<t/run/switchd-78586.t> has been added, which tests that
-L<[perl #78586]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78586>
-has been fixed (related to line numbers in the debugger).
-
-=back
-
-=head1 Platform Support
-
-=head2 Platform-Specific Notes
-
-=over 4
-
-=item Windows
-
-Directory handles are now properly cloned when threads are created. In perl
-5.13.6, child threads simply stopped inheriting directory handles. In
-previous versions, threads would share handles, resulting in crashes.
-
-Support for building with Visual C++ 2010 is now underway, but is not yet
-complete. See F<README.win32> for more details.
-
-=item VMS
-
-Record-oriented files (record format variable or variable with fixed control)
-opened for write by the perlio layer will now be line buffered to prevent the
-introduction of spurious line breaks whenever the perlio buffer fills up.
-
-=back
-
-=head1 Internal Changes
-
-=over 4
-
-=item *
-
-C<lex_start> has been added to the API, but is considered experimental.
-
-=item *
-
-A new C<parse_block> function has been added to the API
-L<[perl #78222]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78222>.
-
-=item *
-
-A new, experimental API has been added for accessing the internal
-structure that Perl uses for C<%^H>. See the functions beginning with
-C<cophh_> in L<perlapi>.
-
-=item *
-
-A stash can now have a list of effective names in addition to its usual
-name. The first effective name can be accessed via the C<HvENAME> macro,
-which is now the recommended name to use in MRO linearisations (C<HvNAME>
-being a fallback if there is no C<HvENAME>).
-
-These names are added and deleted via C<hv_ename_add> and
-C<hv_ename_delete>. These two functions are I<not> part of the API.
-
-=item *
-
-The way the parser handles labels has been cleaned up and refactored. As a
-result, the C<newFOROP()> constructor function no longer takes a parameter
-stating what label is to go in the state op.
-
-=item *
-
-The C<newWHILEOP()> and C<newFOROP()> functions no longer accept a line
-number as a parameter.
-
-=item *
-
-A new C<parse_barestmt()> function has been added, for parsing a statement
-without a label.
-
-=item *
-
-A new C<parse_label()> function has been added, that parses a statement
-label, separate from statements.
-
-=item *
-
-The C<CvSTASH()> macro can now only be used as an rvalue. C<CvSTASH_set()>
-has been added to replace assignment to C<CvSTASH()>. This is to ensure
-that backreferences are handled properly. These macros are not part of the
-API.
-
-=item *
-
-The C<op_scope()> and C<op_lvalue()> functions have been added to the API,
-but are considered experimental.
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item *
-
-The C<parse_stmt> C function added in earlier in the 5.13.x series has been
-fixed to work with statements ending with C<}>
-L<[perl #78222]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78222>.
-
-=item *
-
-The C<parse_fullstmt> C function added in 5.13.5 has been fixed to work
-when called while an expression is being parsed.
-
-=item *
-
-Characters in the Latin-1 non-ASCII range (0x80 to 0xFF) used not to match
-themselves if the string happened to be UTF8-encoded internally, the
-regular expression was not, and the character in the regular expression was
-inside a repeated group (e.g.,
-C<Encode::decode_utf8("\303\200") =~ /(\xc0)+/>)
-L<[perl #78464]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78464>.
-
-=item *
-
-The C<(?d)> regular expression construct now overrides a previous C<(?u)>
-or C<use feature "unicode_string">
-L<[perl #78508]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78508>.
-
-=item *
-
-A memory leak in C<do "file">, introduced in perl 5.13.6, has been fixed
-L<[perl #78488]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78488>.
-
-=item *
-
-Various bugs related to typeglob dereferencing have been fixed. See
-L</Dereferencing typeglobs>, above.
-
-=item *
-
-The C<SvPVbyte> function available to XS modules now calls magic before
-downgrading the SV, to avoid warnings about wide characters
-L<[perl #72398]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=72398>.
-
-=item *
-
-The C<=> operator used to ignore magic (e.g., tie methods) on its
-right-hand side if the scalar happened to hold a typeglob. This could
-happen if a typeglob was the last thing returned from or assigned to a tied
-scalar
-L<[perl #77498]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77498>.
-
-=item *
-
-C<sprintf> was ignoring locales when called with constant arguments
-L<[perl #78632]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78632>.
-
-=item *
-
-A non-ASCII character in the Latin-1 range could match both a Posix
-class, such as C<[[:alnum:]]>, and its inverse C<[[:^alnum:]]>. This is
-now fixed for regular expressions compiled under the C<"u"> modifier.
-See L</C<use feature "unicode_strings"> now applies to more regex matching>.
-L<[perl #18281]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=18281>.
-
-=item *
-
-Concatenating long strings under C<use encoding> no longer causes perl to
-crash
-L<[perl #78674]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78674>.
-
-=item *
-
-Typeglob assignments would crash if the glob's stash no longer existed, so
-long as the glob assigned to was named 'ISA' or the glob on either side of
-the assignment contained a subroutine.
-
-=item *
-
-Calling C<< ->import >> on a class lacking an import method could corrupt
-the stack, resulting in strange behaviour. For instance,
-
- push @a, "foo", $b = bar->import;
-
-would assign 'foo' to C<$b>
-L<[perl #63790]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=63790>.
-
-=item *
-
-Creating an alias to a package when that package had been detached from the
-symbol table would result in corrupted isa caches
-L<[perl #77358]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77358>.
-
-=item *
-
-C<.=> followed by C<< <> >> or C<readline> would leak memory if C<$/>
-contained characters beyond the octet range and the scalar assigned to
-happened to be encoded as UTF8 internally
-L<[perl #72246]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=72246>.
-
-=item *
-
-The C<recv> function could crash when called with the MSG_TRUNC flag
-L<[perl #75082]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=75082>.
-
-=item *
-
-Evaluating a simple glob (like C<*a>) was calling get-magic on the glob,
-even when its contents were not being used
-L<[perl #78580]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78580>.
-
-This bug was introduced in 5.13.2 and did not affect earlier perl versions.
-
-=item *
-
-Matching a Unicode character against an alternation containing characters
-that happened to match continuation bytes in the former's UTF8
-representation (C<qq{\x{30ab}} =~ /\xab|\xa9/>) would cause erroneous
-warnings
-L<[perl #70998]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=70998>.
-
-=item *
-
-C<s///r> (added in 5.13.2) no longer leaks.
-
-=item *
-
-The trie optimisation was not taking empty groups into account, preventing
-'foo' from matching C</\A(?:(?:)foo|bar|zot)\z/>
-L<[perl #78356]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78356>.
-
-=item *
-
-A pattern containing a C<+> inside a lookahead would sometimes cause an
-incorrect match failure in a global match (e.g., C</(?=(\S+))/g>)
-L<[perl #68564]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=68564>.
-
-=item *
-
-Iterating with C<foreach> over an array returned by an lvalue sub now works
-L<[perl #23790]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=23790>.
-
-=item *
-
-C<$@> is now localised during calls to C<binmode> to prevent action at a
-distance
-L<[perl #78844]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78844>.
-
-=item *
-
-C<PL_isarev>, which is accessible to Perl via C<mro::get_isarev> is now
-updated properly when packages are deleted or removed from the C<@ISA> of
-other classes. This allows many packages to be created and deleted without
-causing a memory leak
-L<[perl #75176]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=75176>.
-
-=item *
-
-C<undef *Foo::> and C<undef *Foo::ISA> and C<delete $package::{ISA}>
-used not to update the internal isa caches if the
-stash or C<@ISA> array had a reference elsewhere. In
-fact, C<undef *Foo::ISA> would stop a new C<@Foo::ISA> array from updating
-caches.
-
-=item *
-
-C<@ISA> arrays can now be shared between classes via
-C<*Foo::ISA = \@Bar::ISA> or C<*Foo::ISA = *Bar::ISA>
-L<[perl #77238]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77238>.
-
-=item *
-
-The parser no longer hangs when encountering certain Unicode characters,
-such as U+387
-L<[perl #74022]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=74022>.
-
-=item *
-
-C<formline> no longer crashes when passed a tainted format picture. It also
-taints C<$^A> now if its arguments are tainted
-L<[perl #79138]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=79138>.
-
-=item *
-
-A signal handler called within a signal handler could cause leaks or
-double-frees. Now fixed.
-L<[perl #76248]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=76248>.
-
-=item *
-
-When trying to report C<Use of uninitialized value $Foo::BAR>, crashes could
-occur if the GLOB of the global variable causing the warning has been detached
-from its original stash by, for example C<delete $::{'Foo::'}>. This has been
-fixed by disabling the reporting of variable names in the warning in those
-cases.
-
-=back
-
-=head1 Obituary
-
-Randy Kobes, creator of the kobesearch alternative to search.cpan.org and
-contributor/maintainer to several core Perl toolchain modules, passed away
-on September 18, 2010 after a battle with lung cancer. His contributions
-to the Perl community will be missed.
-
-=head1 Acknowledgements
-
-Perl 5.13.7 represents approximately one month of development since Perl 5.13.6
-and contains 73100 lines of changes across 518 files from 39 authors and committers:
-
-Abhijit Menon-Sen, Abigail, Ben Morrow, Chas. J. Owens IV, Chris 'BinGOs' Williams, Craig A. Berry,
-David Golden, David Mitchell, Father Chrysostomos, Fingle Nark, Florian Ragwitz, George Greer,
-Grant McLean, H.Merijn Brand, Ian Goodacre, Jan Dubois, Jerry D. Hedden, Jesse Vincent, Karl Williamson,
-Lubomir Rintel, Marty Pauley, Moritz Lenz, Nicholas Clark, Nicolas Kaiser, Niko Tyni, Peter John Acklam,
-Rafael Garcia-Suarez, Shlomi Fish, Steffen Mueller, Steve Hay, Tatsuhiko Miyagawa, Tim Bunce, Todd Rinaldo,
-Tom Christiansen, Tom Hukins, Tony Cook, Yves Orton, Zefram and brian d foy
-
-Many of the changes included in this version originated in the CPAN modules included in
-Perl's core. We're grateful to the entire CPAN community for helping Perl to flourish.
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://rt.perl.org/perlbug/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please send
-it to perl5-security-report at perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
-to help assess the impact of issues, figure out a resolution, and help
-co-ordinate the release of patches to mitigate or fix the problem across all
-platforms on which Perl is supported. Please only use this address for
-security issues in the Perl core, not for modules independently
-distributed on CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive details
-on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl5138delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl5138delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl5138delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,912 +0,0 @@
-=encoding utf8
-
-=head1 NAME
-
-perl5138delta - what is new for perl v5.13.8
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.13.7 release and
-the 5.13.8 release.
-
-If you are upgrading from an earlier release such as 5.13.6, first read
-L<perl5137delta>, which describes differences between 5.13.6 and
-5.13.7.
-
-=head1 Core Enhancements
-
-=head2 C<-d:-foo> calls C<Devel::foo::unimport>
-
-The syntax C<-dI<B<:>foo>> was extended in 5.6.1 to make C<-dI<:fooB<=bar>>>
-equivalent to C<-MDevel::foo=bar>, which expands
-internally to C<use Devel::foo 'bar';>.
-F<perl> now allows prefixing the module name with C<->, with the same
-semantics as C<-M>, I<i.e.>
-
-=over 4
-
-=item C<-d:-foo>
-
-Equivalent to C<-M-Devel::foo>, expands to
-C<no Devel::foo;>, calls C<< Devel::foo->unimport() >>
-if the method exists.
-
-=item C<-d:-foo=bar>
-
-Equivalent to C<-M-Devel::foo=bar>, expands to C<no Devel::foo 'bar';>,
-calls C<< Devel::foo->unimport('bar') >> if the method exists.
-
-=back
-
-This is particularly useful to suppresses the default actions of a
-C<Devel::*> module's C<import> method whilst still loading it for debugging.
-
-=head2 Filehandle method calls load L<IO::File> on demand
-
-When a method call on a filehandle would die because the method cannot
-be resolved, and L<IO::File> has not been loaded, Perl now loads L<IO::File>
-via C<require> and attempts method resolution again:
-
- open my $fh, ">", $file;
- $fh->binmode(":raw"); # loads IO::File and succeeds
-
-This also works for globs like STDOUT, STDERR and STDIN:
-
- STDOUT->autoflush(1);
-
-Because this on-demand load only happens if method resolution fails, the
-legacy approach of manually loading an L<IO::File> parent class for partial
-method support still works as expected:
-
- use IO::Handle;
- open my $fh, ">", $file;
- $fh->autoflush(1); # IO::File not loaded
-
-=head2 Full functionality for C<use feature 'unicode_strings'>
-
-This release provides full functionality for C<use feature
-'unicode_strings'>. Under its scope, all string operations executed and
-regular expressions compiled (even if executed outside its scope) have
-Unicode semantics. See L<feature>.
-
-This feature avoids most forms of the "Unicode Bug" (See
-L<perlunicode/The "Unicode Bug"> for details.) If there is a
-possibility that your code will process Unicode strings, you are
-B<strongly> encouraged to use this subpragma to avoid nasty surprises.
-
-The availability of this should strongly affect the whole tone of
-various documents, such as L<perlunicode> and L<perluniintro>, but this
-work has not been done yet.
-
-=head2 Exception Handling Backcompat Hack
-
-When an exception is thrown in an C<eval BLOCK>, C<$@> is now set before
-unwinding, as well as being set after unwinding as the eval block exits. This
-early setting supports code that has historically treated C<$@> during unwinding
-as an indicator of whether the unwinding was due to an exception. These modules
-had been broken by 5.13.1's change from setting C<$@> early to setting it late.
-This double setting arrangement is a stopgap until the reason for unwinding can
-be made properly introspectable. C<$@> has never been a reliable indicator of
-the reason for unwinding.
-
-=head2 printf-like functions understand post-1980 size modifiers
-
-Perl's printf and sprintf operators, and Perl's internal printf replacement
-function, now understand the C90 size modifiers "hh" (C<char>), "z"
-(C<size_t>), and "t" (C<ptrdiff_t>). Also, when compiled with a C99
-compiler, Perl now understands the size modifier "j" (C<intmax_t>).
-
-So, for example, on any modern machine, C<sprintf('%hhd', 257)> returns '1'.
-
-=head2 DTrace probes now include package name
-
-The DTrace probes now include an additional argument (C<arg3>) which contains
-the package the subroutine being entered or left was compiled in.
-
-For example using the following DTrace script:
-
- perl$target:::sub-entry
- {
- printf("%s::%s\n", copyinstr(arg0), copyinstr(arg3));
- }
-
-and then running:
-
- perl -e'sub test { }; test'
-
-DTrace will print:
-
- main::test
-
-=head2 Stacked labels
-
-Multiple statement labels can now appear before a single statement.
-
-=head1 Incompatible Changes
-
-=head2 C<:=> is now a syntax error
-
-Previously C<my $pi := 4;> was exactly equivalent to C<my $pi : = 4;>,
-with the C<:> being treated as the start of an attribute list, ending before
-the C<=>. The use of C<:=> to mean C<: => was deprecated in 5.12.0, and is now
-a syntax error. This will allow the future use of C<:=> as a new token.
-
-We find no Perl 5 code on CPAN using this construction, outside the core's
-tests for it, so we believe that this change will have very little impact on
-real-world codebases.
-
-If it is absolutely necessary to have empty attribute lists (for example,
-because of a code generator) then avoid the error by adding a space before
-the C<=>.
-
-=head2 Run-time code block in regular expressions
-
-Code blocks in regular expressions (C<(?{...})> and C<(??{...})>) used not
-to inherit any pragmata (strict, warnings, etc.) if the regular expression
-was compiled at run time as happens in cases like these two:
-
- use re 'eval';
- $foo =~ $bar; # when $bar contains (?{...})
- $foo =~ /$bar(?{ $finished = 1 })/;
-
-This was a bug, which has now been fixed. But it has the potential to break
-any code that was relying on this bug.
-
-=head1 Deprecations
-
-=head2 C<?PATTERN?> is deprecated
-
-C<?PATTERN?> (without the initial m) has been deprecated and now produces
-a warning. This is to allow future use of C<?> in new operators.
-The match-once functionality is still available in the form of C<m?PATTERN?>.
-
-=head2 C<sv_compile_2op()> is now deprecated
-
-The C<sv_compile_2op()> API function is now deprecated. Searches suggest
-that nothing on CPAN is using it, so this should have zero impact.
-
-It attempted to provide an API to compile code down to an optree, but failed
-to bind correctly to lexicals in the enclosing scope. It's not possible to
-fix this problem within the constraints of its parameters and return value.
-
-=head2 Tie functions on scalars holding typeglobs
-
-Calling a tie function (C<tie>, C<tied>, C<untie>) with a scalar argument
-acts on a file handle if the scalar happens to hold a typeglob.
-
-This is a long-standing bug that will be removed in Perl 5.16, as
-there is currently no way to tie the scalar itself when it holds
-a typeglob, and no way to untie a scalar that has had a typeglob
-assigned to it.
-
-This bug was fixed in 5.13.7 but, because of the breakage it caused, the
-fix has been reverted. Now there is a deprecation warning whenever a tie
-function is used on a handle without an explicit C<*>.
-
-=head1 Modules and Pragmata
-
-=head2 Updated Modules and Pragmata
-
-=over 4
-
-=item *
-
-C<Archive::Tar> has been upgraded from version 1.72 to 1.74.
-
-Skip extracting pax extended headers.
-
-=item *
-
-C<autodie> has been upgraded from version 2.10 to 2.1001.
-
-Test fix in blead for VMS.
-
-=item *
-
-C<B> has been upgraded from version 1.26 to 1.27.
-
-Avoid compiler warnings.
-
-=item *
-
-C<B::Concise> has been upgraded from version 0.81 to 0.82.
-
-It no longer produces mangled output with the C<-tree> option
-L<[perl #80632]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=80632>.
-
-=item *
-
-C<B::Deparse> has been upgraded from version 1.01 to 1.02.
-
-Test improvements.
-
-=item *
-
-C<Cwd> has been upgraded from version 3.34 to 3.35.
-
-Avoid compiler warnings.
-
-=item *
-
-C<Data::Dumper> has been upgraded from version 2.130_01 to 2.130_02.
-
-Avoid compiler warnings.
-
-=item *
-
-C<Devel::Peek> has been upgraded from version 1.05 to 1.06.
-
-Avoid compiler warnings.
-
-Test improvements.
-
-=item *
-
-C<Devel::SelfStubber> has been upgraded from version 1.03 to 1.05.
-
-Whitespace changes.
-
-=item *
-
-C<Digest::SHA> has been upgraded from 5.48 to 5.50.
-
-C<shasum> now more closely mimics C<sha1sum>/C<md5sum>.
-
-C<Addfile> accepts all POSIX filenames.
-
-=item *
-
-C<Dumpvalue> has been upgraded from version 1.14 to 1.15.
-
-Test improvements.
-
-=item *
-
-C<DynaLoader> has been upgraded from version 1.11 to 1.12.
-
-Remove obsolete RCS keywords.
-
-=item *
-
-C<Env> has been upgraded from version 1.01 to 1.02.
-
-Test improvements.
-
-=item *
-
-C<ExtUtils::CBuilder> has been upgraded from 0.2703 to 0.280201.
-
-Handle C and C++ compilers separately.
-
-Preserves exit status on VMS.
-
-Test improvements.
-
-=item *
-
-C<ExtUtils::Constant::Utils> has been upgraded from 0.02 to 0.03.
-
-Refactoring and fixing of backcompat code, preparing for resynchronisation
-with CPAN.
-
-=item *
-
-C<ExtUtils::Embed> has been upgraded from 1.29 to 1.30.
-
-Remove obsolete RCS keywords.
-
-=item *
-
-C<ExtUtils::ParseXS> has been upgraded from 2.2207 to 2.2208.
-
-Avoid compiler warnings.
-
-=item *
-
-C<Fcntl> has been upgraded from 1.10 to 1.11.
-
-Avoid compiler warnings.
-
-Test improvements.
-
-=item *
-
-C<feature> has been upgraded from 1.18 to 1.19.
-
-Documentation and test updates for the C<unicode_strings> feature.
-See L</Full functionality for C<use feature 'unicode_strings'>>.
-
-=item *
-
-C<File::CheckTree> has been upgraded from 4.4 to 4.41.
-
-Whitespace changes.
-
-=item *
-
-C<File::Glob> has been upgraded from 1.10 to 1.11.
-
-Avoid compiler warnings.
-
-Test improvements.
-
-=item *
-
-C<GDBM_File> has been upgraded from 1.12 to 1.13.
-
-Test improvements.
-
-Remove obsolete RCS keywords.
-
-=item *
-
-C<Hash::Util::FieldHash> has been upgraded from 1.06 to 1.07.
-
-Avoid compiler warnings.
-
-=item *
-
-C<I18N::Collate> has been upgraded from 1.01 to 1.02.
-
-Whitespace changes.
-
-Test improvements.
-
-=item *
-
-C<if> has been upgraded from 0.06 to 0.0601.
-
-Test improvements.
-
-=item *
-
-C<IO> has been upgraded from 1.25_02 to 1.25_03.
-
-Avoid compiler warnings.
-
-=item *
-
-C<IPC::Cmd> has been upgraded from 0.64 to 0.66.
-
-Resolves an issue with splitting Win32 command lines.
-
-Documentation enhancements.
-
-=item *
-
-C<IPC::Open3> has been upgraded from 1.07 to 1.08.
-
-Remove obsolete RCS keywords.
-
-Test improvements.
-
-=item *
-
-C<Locale::Codes> has been upgraded from version 3.14 to 3.15.
-
-Adds some codes.
-
-=item *
-
-C<Math::BigInt> has been upgraded from 1.99_01 to 1.99_02.
-
-Documentation and comment spelling fixes.
-
-=item *
-
-C<Memoize> has been upgraded from version 1.01_03 to 1.02.
-
-Remove obsolete RCS keywords.
-
-Whitespace changes.
-
-=item *
-
-C<MIME::Base64> has been upgraded from 3.10 to 3.13.
-
-Now provides C<encode_base64url> and C<decode_base64url> functions to process
-the base64 scheme for "URL applications".
-
-=item *
-
-C<mro> has been upgraded from version 1.05 to 1.06.
-
-C<next::method> I<et al.> now take into account that every class inherits
-from UNIVERSAL
-L<[perl #68654]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=68654>.
-
-=item *
-
-C<NDBM_File> has been upgraded from 1.10 to 1.11.
-
-Remove obsolete RCS keywords.
-
-Test improvements.
-
-=item *
-
-C<Net::Ping> has been upgraded from 2.36 to 2.37.
-
-Remove obsolete RCS keywords.
-
-=item *
-
-C<ODBM_File> has been upgraded from 1.09 to 1.10.
-
-Remove obsolete RCS keywords.
-
-Test improvements.
-
-=item *
-
-C<Opcode> has been upgraded from 1.17 to 1.18.
-
-Avoid compiler warnings.
-
-Test improvements.
-
-=item *
-
-C<overload> has been upgraded from 1.11 to 1.12.
-
-Avoid a taint problem in use of sprintf.
-
-Test asymmetric fallback cases
-L<[perl #71286]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=71286>.
-
-=item *
-
-C<PerlIO::encoding> has been upgraded from 0.13 to 0.14.
-
-Avoid compiler warnings.
-
-Remove obsolete RCS keywords.
-
-Test improvements.
-
-=item *
-
-C<PerlIO::scalar> has been upgraded from 0.10 to 0.11.
-
-A C<read> after a C<seek> beyond the end of the string no longer thinks it
-has data to read
-L<[perl #78716]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78716>.
-
-Avoid compiler warnings.
-
-=item *
-
-C<PerlIO::via> has been upgraded from 0.10 to 0.11.
-
-Avoid compiler warnings.
-
-=item *
-
-C<POSIX> has been upgraded from 1.22 to 1.23.
-
-Avoid compiler warnings.
-
-=item *
-
-C<re> has been upgraded from 0.14 to 0.15.
-
-Enforce that C</d>, C</u>, and C</l> are mutually exclusive.
-
-=item *
-
-C<SDBM_File> has been upgraded from 1.08 to 1.09.
-
-Avoid compiler warnings.
-
-Remove obsolete RCS keywords.
-
-Test improvements.
-
-=item *
-
-C<Socket> has been upgraded from 1.91 to 1.92.
-
-It has several new functions for handling IPv6 addresses.
-
-=item *
-
-C<Storable> has been upgraded from 2.24 to 2.25.
-
-This adds support for serialising code references that contain UTF-8 strings
-correctly. The Storable minor version number changed as a result, meaning that
-Storable users who set C<$Storable::accept_future_minor> to a C<FALSE> value
-will see errors (see L<Storable/FORWARD COMPATIBILITY> for more details).
-
-Freezing no longer gets confused if the Perl stack gets reallocated
-during freezing
-L<[perl #80074]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=80074>.
-
-Avoid compiler warnings.
-
-=item *
-
-C<threads> has been upgraded from 1.81_02 to 1.81_03.
-
-Avoid compiler warnings.
-
-=item *
-
-C<threads::shared> has been upgraded from 1.34 to 1.35.
-
-Avoid compiler warnings.
-
-=item *
-
-C<Time::HiRes> has been upgraded from 1.9721 to 1.9721_01.
-
-Build fix in blead for VMS.
-
-=item *
-
-C<Unicode::Collate> has been upgraded from 0.67 to 0.6801.
-
-Documentation clarification.
-
-Test improvements.
-
-=item *
-
-C<Unicode::Normalize> has been upgraded from 1.07 to 1.08.
-
-Avoid compiler warnings.
-
-=item *
-
-C<Unicode::UCD> has been upgraded from 0.29 to 0.30.
-
-Add info about named sequence alternatives.
-
-Don't use C<CompositionExclusions.txt>.
-
-=item *
-
-C<version> has been upgraded from 0.82 to 0.86.
-
-Modify export logic for C<is_strict> and C<is_lax>.
-
-Various backcompat fixes.
-
-=item *
-
-C<Win32> has been upgraded from 0.39 to 0.41.
-
-Add several functions.
-
-Corrections to names returned by C<Win32::GetOSName> and
-C<Win32::GetOSDisplayName>.
-
-=item *
-
-C<XS::APItest> has been upgraded from 0.26 to 0.27.
-
-Test new API functions.
-
-Avoid compiler warnings.
-
-=back
-
-=head2 Dual-life Modules and Pragmata
-
-These modules were formerly distributed only in the Perl core
-distribution, and are now dual-lifed (meaning they are now also available
-separately on CPAN):
-
-=over 4
-
-=item *
-
-C<autouse>
-
-=item *
-
-C<Devel::SelfStubber>
-
-=item *
-
-C<Dumpvalue>
-
-=item *
-
-C<Env>
-
-=item *
-
-C<File::CheckTree>
-
-=item *
-
-C<I18N::Collate>
-
-=back
-
-=head1 Diagnostics
-
-The following additions or changes have been made to diagnostic output,
-including warnings and fatal error messages. For the complete list of
-diagnostic messages, see L<perldiag>.
-
-=head2 New Diagnostics
-
-=over 4
-
-=item *
-
-There is a new "Closure prototype called" error
-L<[perl #68560]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=68560>.
-
-=back
-
-=head2 Changes to Existing Diagnostics
-
-=over 4
-
-=item *
-
-The "Found = in conditional" warning that is emitted when a constant is
-assigned to a variable in a condition is now withheld if the constant is
-actually a subroutine or one generated by C<use constant>, since the value
-of the constant may not be known at the time the program is written
-L<[perl #77762]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77762>.
-
-=back
-
-=head1 Configuration and Compilation
-
-=over 4
-
-=item *
-
-The C<Encode> module can now (once again) be included in a static Perl
-build. The special-case handling for this situation got broken in Perl
-5.11.0, and has now been repaired.
-
-=back
-
-=head1 Testing
-
-=over 4
-
-=item *
-
-Tests for C<Fcntl>, C<File::Glob>, C<GDBM_File>, C<IPC::Open3>,
-C<NDBM_File>, C<ODBM_File>, C<Opcode>, C<PerlIO::encoding>, C<SDBM_File>,
-and C<Storable> now use the L<Test::More> framework.
-
-=back
-
-=head1 Platform Support
-
-=head2 Platform-Specific Notes
-
-=over 4
-
-=item NetBSD
-
-The NetBSD hints file has been changed to make the system's malloc the
-default.
-
-=item Windows
-
-The option to use an externally-supplied C<crypt()>, or to build with no
-C<crypt()> at all, has been removed. Perl supplies its own C<crypt()>
-implementation for Windows, and the political situation that required
-this part of the distribution to sometimes be omitted is long gone.
-
-=back
-
-=head1 Internal Changes
-
-=over 4
-
-=item *
-
-The L<C<mg_findext()>|perlapi/mg_findext> and
-L<C<sv_unmagicext()>|perlapi/sv_unmagicext>
-functions have been added to the API.
-They allow extension authors to find and remove magic attached to
-scalars based on both the magic type and the magic virtual table, similar to how
-C<sv_magicext()> attaches magic of a certain type and with a given virtual table
-to a scalar. This eliminates the need for extensions to walk the list of
-C<MAGIC> pointers of an C<SV> to find the magic that belongs to them.
-
-=item *
-
-The
-L<C<parse_fullexpr()>|perlapi/parse_fullexpr>,
-L<C<parse_listexpr()>|perlapi/parse_listexpr>,
-L<C<parse_termexpr()>|perlapi/parse_termexpr>, and
-L<C<parse_arithexpr()>|perlapi/parse_arithexpr>
-functions have been added to the API. They perform
-recursive-descent parsing of expressions at various precedence levels.
-They are expected to be used by syntax plugins.
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item *
-
-C<BEGIN {require 5.12.0}> now behaves as documented, rather than behaving
-identically to C<use 5.12.0;>. Previously, C<require> in a C<BEGIN> block
-was erroneously executing the C<use feature ':5.12.0'> and
-C<use strict; use warnings;> behaviour, which only C<use> was documented to
-provide
-L<[perl #69050]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=69050>.
-
-=item *
-
-C<use 5.42>
-L<[perl #69050]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=69050>,
-C<use 6> and C<no 5> no longer leak memory.
-
-=item *
-
-C<eval "BEGIN{die}"> no longer leaks memory on non-threaded builds.
-
-=item *
-
-PerlIO no longer crashes when called recursively, e.g., from a signal
-handler. Now it just leaks memory
-L<[perl #75556]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=75556>.
-
-=item *
-
-Defining a constant with the same name as one of perl's special blocks
-(e.g., INIT) stopped working in 5.12.0, but has now been fixed
-L<[perl #78634]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78634>.
-
-=item *
-
-A reference to a literal value used as a hash key (C<$hash{\"foo"}>) used
-to be stringified, even if the hash was tied
-L<[perl #79178]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=79178>.
-
-=item *
-
-A closure containing an C<if> statement followed by a constant or variable
-is no longer treated as a constant
-L<[perl #63540]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=63540>.
-
-=item *
-
-Calling a closure prototype (what is passed to an attribute handler for a
-closure) now results in a "Closure prototype called" error message instead
-of a crash
-L<[perl #68560]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=68560>.
-
-=item *
-
-A regular expression optimisation would sometimes cause a match with a
-C<{n,m}> quantifier to fail when it should match
-L<[perl #79152]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=79152>.
-
-=item *
-
-What has become known as the "Unicode Bug" is mostly resolved in this release.
-Under C<use feature 'unicode_strings'>, the internal storage format of a
-string no longer affects the external semantics. There are two known
-exceptions. User-defined case changing functions, which are planned to
-be deprecated in 5.14, require utf8-encoded strings to function; and the
-character C<LATIN SMALL LETTER SHARP S> in regular expression
-case-insensitive matching has a somewhat different set of bugs depending
-on the internal storage format. Case-insensitive matching of all
-characters that have multi-character matches, as this one does, is
-problematical in Perl.
-L<[perl #58182]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=58182>.
-
-=item *
-
-Mentioning a read-only lexical variable from the enclosing scope in a
-string C<eval> no longer causes the variable to become writable
-L<[perl #19135]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=19135>.
-
-=item *
-
-C<state> can now be used with attributes. It used to mean the same thing as
-C<my> if attributes were present
-L<[perl #68658]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=68658>.
-
-=item *
-
-Expressions like C<< @$a > 3 >> no longer cause C<$a> to be mentioned in
-the "Use of uninitialized value in numeric gt" warning when C<$a> is
-undefined (since it is not part of the C<E<gt>> expression, but the operand
-of the C<@>)
-L<[perl #72090]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=72090>.
-
-=item *
-
-C<require> no longer causes C<caller> to return the wrong file name for
-the scope that called C<require> and other scopes higher up that had the
-same file name
-L<[perl #68712]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=68712>.
-
-=item *
-
-The ref types in the typemap for XS bindings now support magical variables
-L<[perl #72684]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=72684>.
-
-=item *
-
-Match variables (e.g., C<$1>) no longer persist between calls to a sort
-subroutine
-L<[perl #76026]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=76026>.
-
-=item *
-
-The C<B> module was returning C<B::OP>s instead of C<B::LOGOP>s for C<entertry>
-L<[perl #80622]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=80622>.
-This was due to a bug in the perl core, not in C<B> itself.
-
-=item *
-
-Some numeric operators were converting integers to floating point,
-resulting in loss of precision on 64-bit platforms
-L<[perl #77456]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77456>.
-
-=item *
-
-The fallback behaviour of overloading on binary operators was asymmetric
-L<[perl #71286]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=71286>.
-
-=back
-
-=head1 Acknowledgements
-
-Perl 5.13.8 represents approximately one month of development since
-Perl 5.13.7 and contains 38715 lines of changes across 546 files from
-38 authors and committers.
-
-Thank you to the following for contributing to this release:
-
-Abhijit Menon-Sen, Abigail, Andreas KE<0xf6>nig, Ben Morrow, Brad Gilbert,
-brian d foy, Chip Salzenberg, Chris 'BinGOs' Williams, Craig A. Berry,
-David Golden, David Leadbeater, David Mitchell, Father Chrysostomos,
-Florian Ragwitz, Goro Fuji, H.Merijn Brand, Jan Dubois, Jerry D. Hedden,
-Jesse Vincent, John Peacock, Karl Williamson, Lukas Mai, Marvin Humphrey,
-Max Maischein, Michael Breen, Michael Fig, Nicholas Clark, Nick Cleaton,
-Paul Evans, Peter J. Holzer, Peter John Acklam, Rafael Garcia-Suarez,
-Reini Urban, Renee Baecker, Ricardo Signes, Tony Cook, Yves Orton, Zefram
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://rt.perl.org/perlbug/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the L<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please send
-it to perl5-security-report at perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
-to help assess the impact of issues, figure out a resolution, and help
-co-ordinate the release of patches to mitigate or fix the problem across all
-platforms on which Perl is supported. Please only use this address for
-security issues in the Perl core, not for modules independently
-distributed on CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive details
-on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl5139delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl5139delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl5139delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,646 +0,0 @@
-=encoding utf8
-
-=head1 NAME
-
-perl5139delta - what is new for perl v5.13.9
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.13.8 release and
-the 5.13.9 release.
-
-If you are upgrading from an earlier release such as 5.13.7, first read
-L<perl5138delta>, which describes differences between 5.13.7 and
-5.13.8.
-
-=head1 Core Enhancements
-
-=head2 New regular expression modifier C</a>
-
-The C</a> regular expression modifier restricts C<\s> to match precisely
-the five characters C<[ \f\n\r\t]>, C<\d> to match precisely the 10
-characters C<[0-9]>, C<\w> to match precisely the 63 characters
-C<[A-Za-z0-9_]>, and the Posix (C<[[:posix:]]>) character classes to
-match only the appropriate ASCII characters. The complements, of
-course, match everything but; and C<\b> and C<\B> are correspondingly
-affected. Otherwise, C</a> behaves like the C</u> modifier, in that
-case-insensitive matching uses Unicode semantics; for example, "k" will
-match the Unicode C<\N{KELVIN SIGN}> under C</i> matching, and code
-points in the Latin1 range, above ASCII will have Unicode semantics when
-it comes to case-insensitive matching. Like its cousins (C</u>, C</l>,
-and C</d>), and in spite of the terminology, C</a> in 5.14 will not
-actually be able to be used as a suffix at the end of a regular
-expression (this restriction is planned to be lifted in 5.16). It must
-occur either as an infix modifier, such as C<(?a:...)> or (C<(?a)...>,
-or it can be turned on within the lexical scope of C<use re '/a'>.
-Turning on C</a> turns off the other "character set" modifiers.
-
-=head2 Any unsigned value can be encoded as a character
-
-With this release, Perl is adopting a model that any unsigned value can
-be treated as a code point and encoded internally (as utf8) without
-warnings -- not just the code points that are legal in Unicode.
-However, unless utf8 warnings have been
-explicitly lexically turned off, outputting or performing a
-Unicode-defined operation (such as upper-casing) on such a code point
-will generate a warning. Attempting to input these using strict rules
-(such as with the C<:encoding('UTF-8')> layer) will continue to fail.
-Prior to this release the handling was very inconsistent, and incorrect
-in places. Also, the Unicode non-characters, some of which previously were
-erroneously considered illegal in places by Perl, contrary to the Unicode
-standard, are now always legal internally. But inputting or outputting
-them will work the same as for the non-legal Unicode code points, as the
-Unicode standard says they are illegal for "open interchange".
-
-=head2 Regular expression debugging output improvement
-
-Regular expression debugging output (turned on by C<use re 'debug';>) now
-uses hexadecimal when escaping non-ASCII characters, instead of octal.
-
-=head1 Security
-
-=head2 Restrict \p{IsUserDefined} to In\w+ and Is\w+
-
-In L<perlunicode/"User-Defined Character Properties">, it says you can
-create custom properties by defining subroutines whose names begin with
-"In" or "Is". However, perl doesn't actually enforce that naming
-restriction, so \p{foo::bar} will call foo::Bar() if it exists.
-
-This commit finally enforces this convention. Note that this broke a
-number of existing tests for properties, since they didn't always use an
-Is/In prefix.
-
-=head1 Incompatible Changes
-
-=head2 All objects are destroyed
-
-It used to be possible to prevent a destructor from being called during
-global destruction by artificially increasing the reference count of an
-object.
-
-Now such objects I<will> will be destroyed, as a result of a bug fix
-L<[perl #81230]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=81230>.
-
-This has the potential to break some XS modules. (In fact, it break some.
-See L</Known Problems>, below.)
-
-=head1 Modules and Pragmata
-
-=head2 New Modules and Pragmata
-
-=over 4
-
-=item *
-
-C<CPAN::Meta::YAML> 0.003 has been added as a dual-life module. It supports a
-subset of YAML sufficient for reading and writing META.yml and MYMETA.yml files
-included with CPAN distributions or generated by the module installation
-toolchain. It should not be used for any other general YAML parsing or
-generation task.
-
-=item *
-
-C<HTTP::Tiny> 0.009 has been added as a dual-life module. It is a very
-small, simple HTTP/1.1 client designed for simple GET requests and file
-mirroring. It has has been added to enable CPAN.pm and CPANPLUS to
-"bootstrap" HTTP access to CPAN using pure Perl without relying on external
-binaries like F<curl> or F<wget>.
-
-=item *
-
-C<JSON::PP> 2.27103 has been added as a dual-life module, for the sake of
-reading F<META.json> files in CPAN distributions.
-
-=item *
-
-C<Module::Metadata> 1.000003 has been added as a dual-life module. It gathers
-package and POD information from Perl module files. It is a standalone module
-based on Module::Build::ModuleInfo for use by other module installation
-toolchain components. Module::Build::ModuleInfo has been deprecated in
-favor of this module instead.
-
-=item *
-
-C<Perl::OSType> 1.002 has been added as a dual-life module. It maps Perl
-operating system names (e.g. 'dragonfly' or 'MSWin32') to more generic types
-with standardized names (e.g. "Unix" or "Windows"). It has been refactored
-out of Module::Build and ExtUtils::CBuilder and consolidates such mappings into
-a single location for easier maintenance.
-
-=back
-
-=head2 Updated Modules and Pragmata
-
-=over 4
-
-=item *
-
-C<Archive::Extract> has been upgraded from version 0.46 to 0.48
-
-=item *
-
-C<Archive::Tar> has been upgraded from version 1.74 to 1.76
-
-=item *
-
-C<CGI> has been upgraded from version 3.50 to 3.51
-
-Further improvements have been made to guard against newline injections
-in headers.
-
-=item *
-
-C<Compress::Raw::Bzip2> has been upgraded from version 2.031 to 2.033
-
-=item *
-
-C<Compress::Raw::Zlib> has been upgraded from version 2.030 to 2.033
-
-=item *
-
-C<CPAN> has been upgraded from version 1.94_62 to 1.94_63
-
-=item *
-
-C<CPANPLUS> has been upgraded from version 0.9010 to 0.9011
-
-=item *
-
-C<CPANPLUS::Dist::Build> has been upgraded from version 0.50 to 0.52
-
-=item *
-
-C<DB_File> has been upgraded from version 1.820 to 1.821
-
-=item *
-
-C<Encode> has been upgraded from version 2.40 to 2.42.
-Now, all 66 Unicode non-characters are treated the same way U+FFFF has
-always been treated; if it was disallowed, all 66 are disallowed; if it
-warned, all 66 warn.
-
-=item *
-
-C<File::Fetch> has been upgraded from version 0.28 to 0.32
-
-=item *
-
-C<IO::Compress> has been upgraded from version 2.030 to 2.033
-
-=item *
-
-C<IPC::Cmd> has been upgraded from version 0.66 to 0.68
-
-=item *
-
-C<Log::Message> has been upgraded from version 0.02 to 0.04
-
-=item *
-
-C<Log::Message::Simple> has been upgraded from version 0.06 to 0.08
-
-=item *
-
-C<Module::Load::Conditional> has been upgraded from version 0.38 to 0.40
-
-=item *
-
-C<Object::Accessor> has been upgraded from version 0.36 to 0.38
-
-=item *
-
-C<Params::Check> has been upgraded from version 0.26 to 0.28
-
-=item *
-
-C<Pod::LaTeX> has been upgraded from version 0.58 to 0.59
-
-=item *
-
-C<Socket> has been updated with new affordances for IPv6,
-including implementations of the C<Socket::getaddrinfo()> and
-C<Socket::getnameinfo()> functions, along with related constants.
-
-=item *
-
-C<Term::UI> has been upgraded from version 0.20 to 0.24
-
-=item *
-
-C<Thread::Queue> has been upgraded from version 2.11 to 2.12.
-
-=item *
-
-C<Thread::Semaphore> has been upgraded from version 2.11 to 2.12.
-
-=item *
-
-C<threads> has been upgraded from version 1.81_03 to 1.82
-
-=item *
-
-C<threads::shared> has been upgraded from version 1.35 to 1.36
-
-=item *
-
-C<Time::Local> has been upgraded from version 1.1901_01 to 1.2000.
-
-=item *
-
-C<Unicode::Normalize> has been upgraded from version 1.07 to 1.10
-
-=item *
-
-C<version> has been upgraded from 0.86 to 0.88.
-
-=item *
-
-C<Win32> has been upgraded from version 0.41 to 0.44.
-
-=back
-
-=head1 Documentation
-
-=head2 Changes to Existing Documentation
-
-=head3 All documentation
-
-=over
-
-=item *
-
-Numerous POD warnings were fixed.
-
-=item *
-
-Many, many spelling errors and typographical mistakes were corrected throughout Perl's core.
-
-=back
-
-=head3 C<perlhack>
-
-=over 4
-
-=item *
-
-C<perlhack> was extensively reorganized.
-
-=back
-
-=head3 C<perlfunc>
-
-=over 4
-
-=item *
-
-It has now been documented that C<ord> returns 0 for an empty string.
-
-=back
-
-=head1 Diagnostics
-
-The following additions or changes have been made to diagnostic output,
-including warnings and fatal error messages. For the complete list of
-diagnostic messages, see L<perldiag>.
-
-=head2 New Diagnostics
-
-=over 4
-
-=item *
-
-Performing an operation requiring Unicode semantics (such as case-folding)
-on a Unicode surrogate or a non-Unicode character now triggers a warning:
-'Operation "%s" returns its argument for ...'.
-
-=back
-
-=head2 Changes to Existing Diagnostics
-
-=over 4
-
-=item *
-
-Previously, if none of the C<gethostbyaddr>, C<gethostbyname> and
-C<gethostent> functions were implemented on a given platform, they would
-all die with the message 'Unsupported socket function "gethostent" called',
-with analogous messages for C<getnet*> and C<getserv*>. This has been
-corrected.
-
-=back
-
-=head1 Utility Changes
-
-=head3 C<perlbug>
-
-=over 4
-
-=item *
-
-C<perlbug> did not previously generate a From: header, potentially
-resulting in dropped mail. Now it does include that header.
-
-=back
-
-=head3 C<buildtoc>
-
-=over 4
-
-=item *
-
-F<pod/buildtoc> has been modernized and can now be used to test the
-well-formedness of F<pod/perltoc.pod> automatically.
-
-=back
-
-=head1 Testing
-
-=over 4
-
-=item *
-
-C<lib/File/DosGlob.t> has been modernized and now uses C<Test::More>.
-
-=item *
-
-A new test script, C<t/porting/filenames.t>, makes sure that filenames and
-paths are reasonably portable.
-
-=item *
-
-C<t/porting/diag.t> is now several orders of magnitude faster.
-
-=item *
-
-C<t/porting/buildtoc.t> now tests that the documentation TOC file is current and well-formed.
-
-=item *
-
-C<t/base/while.t> now tests the basics of a while loop with minimal dependencies.
-
-=item *
-
-C<t/cmd/while.t> now uses F<test.pl> for better maintainability.
-
-=item *
-
-C<t/op/split.t> now tests calls to C<split> without any pattern specified.
-
-=back
-
-
-
-=head1 Platform Support
-
-=head2 Discontinued Platforms
-
-=over 4
-
-=item Apollo DomainOS
-
-The last vestiges of support for this platform have been excised from the
-Perl distribution. It was officially discontinued in version 5.12.0. It had
-not worked for years before that.
-
-=item MacOS Classic
-
-The last vestiges of support for this platform have been excised from the
-Perl distribution. It was officially discontinued in an earlier version.
-
-=back
-
-=head2 Platform-Specific Notes
-
-=over 4
-
-
-=item Cygwin
-
-=over
-
-=item *
-
-Updated MakeMaker to build man pages on cygwin.
-
-=item *
-
-Improved rebase behaviour
-
-If a dll is updated on cygwin reuse the old imagebase address.
-This solves most rebase errors, esp when updating on core dll's.
-See L<http://www.tishler.net/jason/software/rebase/rebase-2.4.2.README> for more information.
-
-=item *
-
-Support the standard cyg dll prefix, which is e.g. needed for FFI's.
-
-=item *
-
-Updated build hints file
-
-=back
-
-
-=item Solaris
-
-DTrace is now supported on Solaris. There used to be build failures, but
-these have been fixed
-L<[perl #73630]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=73630>.
-
-=back
-
-=head1 Internal Changes
-
-=over 4
-
-=item *
-
-The opcode bodies for C<chop> and C<chomp> and for C<schop> and C<schomp> have
-been merged. The implementation functions C<Perl_do_chop()> and
-C<Perl_do_chomp()>, never part of the public API, have been merged and moved to
-a static function in F<pp.c>. This shrinks the perl binary slightly, and should
-not affect any code outside the core (unless it is relying on the order of side
-effects when C<chomp> is passed a I<list> of values).
-
-=item *
-
-Some of the flags parameters to the uvuni_to_utf8_flags() and
-utf8n_to_uvuni() have changed. This is a result of Perl now allowing
-internal storage and manipulation of code points that are problematic
-in some situations. Hence, the default actions for these functions has
-been complemented to allow these code points. The new flags are
-documented in L<perlapi>. Code that requires the problematic code
-points to be rejected needs to change to use these flags. Some flag
-names are retained for backward source compatibility, though they do
-nothing, as they are now the default. However the flags
-C<UNICODE_ALLOW_FDD0>, C<UNICODE_ALLOW_FFFF>, C<UNICODE_ILLEGAL>, and
-C<UNICODE_IS_ILLEGAL> have been removed, as they stem from a
-fundamentally broken model of how the Unicode non-character code points
-should be handled, which is now described in
-L<perlunicode/Non-character code points>. See also L</Selected Bug Fixes>.
-
-=item *
-
-Certain shared flags in the C<pmop.op_pmflags> and C<regexp.extflags>
-structures have been removed. These are: C<Rxf_Pmf_LOCALE>,
-C<Rxf_Pmf_UNICODE>, and C<PMf_LOCALE>. Instead there are encodes and
-three static in-line functions for accessing the information:
-C<get_regex_charset()>, C<set_regex_charset()>, and C<get_regex_charset_name()>,
-which are defined in the places where the original flags were.
-
-=item *
-
-A new option has been added to C<pv_escape> to dump all characters above
-ASCII in hexadecimal. Before, one could get all characters as hexadecimal
-or the Latin1 non-ASCII as octal
-
-
-=item *
-
-Generate pp_* prototypes in pp_proto.h, and remove pp.sym
-
-Eliminate the #define pp_foo Perl_pp_foo(pTHX) macros, and update the 13
-locations that relied on them.
-
-regen/opcode.pl now generates prototypes for the PP functions directly, into
-pp_proto.h. It no longer writes pp.sym, and regen/embed.pl no longer reads
-this, removing the only ordering dependency in the regen scripts. opcode.pl
-is now responsible for prototypes for pp_* functions. (embed.pl remains
-responsible for ck_* functions, reading from regen/opcodes)
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item *
-
-The handling of Unicode non-characters has changed.
-Previously they were mostly considered illegal, except that only one of
-the 66 of them was known about in places. The Unicode standard
-considers them legal, but forbids the "open interchange" of them.
-This is part of the change to allow the internal use of any code point
-(see L</Core Enhancements>). Together, these changes resolve
-L<# 38722|https://rt.perl.org/rt3/Ticket/Display.html?id=38722>,
-L<# 51918|http://rt.perl.org/rt3/Ticket/Display.html?id=51918>,
-L<# 51936|http://rt.perl.org/rt3/Ticket/Display.html?id=51936>,
-L<# 63446|http://rt.perl.org/rt3/Ticket/Display.html?id=63446>
-
-=item *
-
-Sometimes magic (ties, tainted, etc.) attached to variables could cause an
-object to last longer than it should, or cause a crash if a tied variable
-were freed from within a tie method. These have been fixed
-L<[perl #81230]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=81230>.
-
-=item *
-
-Most I/O functions were not warning for unopened handles unless the
-'closed' and 'unopened' warnings categories were both enabled. Now only
-C<use warnings 'unopened'> is necessary to trigger these warnings (as was
-always meant to be the case.
-
-=item *
-
-C<< E<lt>exprE<gt> >> always respects overloading now if the expression is
-overloaded.
-
-Due to the way that 'E<lt>E<gt> as glob' was parsed differently from
-'E<lt>E<gt> as filehandle' from 5.6 onwards, something like C<< E<lt>$foo[0]E<gt> >> did
-not handle overloading, even if C<$foo[0]> was an overloaded object. This
-was contrary to the documentation for overload, and meant that C<< E<lt>E<gt> >>
-could not be used as a general overloaded iterator operator.
-
-=item *
-
-Destructors on objects were not called during global destruction on objects
-that were not referenced by any scalars. This could happen if an array
-element were blessed (e.g., C<bless \$a[0]>) or if a closure referenced a
-blessed variable (C<bless \my @a; sub foo { @a }>).
-
-Now there is an extra pass during global destruction to fire destructors on
-any objects that might be left after the usual passes that check for
-objects referenced by scalars
-L<[perl #36347]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=36347>.
-
-=item *
-
-A long standing bug has now been fully fixed (partial fixes came in
-earlier releases), in which some Latin-1 non-ASCII characters on
-ASCII-platforms would match both a character class and its complement,
-such as U+00E2 being both in C<\w> and C<\W>, depending on the
-UTF-8-ness of the regular expression pattern and target string.
-Fixing this did expose some bugs in various modules and tests that
-relied on the previous behavior of C<[[:alpha:]]> not ever matching
-U+00FF, "LATIN SMALL LETTER Y WITH DIAERESIS", even when it should, in
-Unicode mode; now it does match when appropriate.
-L<[perl #60156]|http://rt.perl.org/rt3/Ticket/Display.html?id=60156>.
-
-=back
-
-=head1 Known Problems
-
-=over 4
-
-=item *
-
-The fix for [perl #81230] causes test failures for C<Tk> version 804.029.
-This is still being investigated.
-
-=back
-
-=head1 Acknowledgements
-
-Perl 5.13.9 represents approximately one month of development since
-Perl 5.13.8 and contains approximately 48000 lines of changes across
-809 files from 35 authors and committers:
-
-Abigail, Ævar Arnfjörð Bjarmason, brian d foy, Chris 'BinGOs' Williams,
-Craig A. Berry, David Golden, David Leadbeater, David Mitchell, Father
-Chrysostomos, Florian Ragwitz, Gerard Goossen, H.Merijn Brand, Jan
-Dubois, Jerry D. Hedden, Jesse Vincent, John Peacock, Karl Williamson,
-Leon Timmermans, Michael Parker, Michael Stevens, Nicholas Clark,
-Nuno Carvalho, Paul "LeoNerd" Evans, Peter J. Acklam, Peter Martini,
-Rainer Tammer, Reini Urban, Renee Baecker, Ricardo Signes, Robin Barker,
-Tony Cook, Vadim Konovalov, Vincent Pit, Zefram, and Zsbán Ambrus.
-
-Many of the changes included in this version originated in the CPAN
-modules included in Perl's core. We're grateful to the entire CPAN
-community for helping Perl to flourish.
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://rt.perl.org/perlbug/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the L<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please send
-it to perl5-security-report at perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
-to help assess the impact of issues, figure out a resolution, and help
-co-ordinate the release of patches to mitigate or fix the problem across all
-platforms on which Perl is supported. Please only use this address for
-security issues in the Perl core, not for modules independently
-distributed on CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive details
-on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl570delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl570delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl570delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,899 +0,0 @@
-=head1 NAME
-
-perl570delta - what's new for perl v5.7.0
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.6.0 release and
-the 5.7.0 release.
-
-=head1 Security Vulnerability Closed
-
-A potential security vulnerability in the optional suidperl component
-of Perl has been identified. suidperl is neither built nor installed
-by default. As of September the 2nd, 2000, the only known vulnerable
-platform is Linux, most likely all Linux distributions. CERT and
-various vendors have been alerted about the vulnerability.
-
-The problem was caused by Perl trying to report a suspected security
-exploit attempt using an external program, /bin/mail. On Linux
-platforms the /bin/mail program had an undocumented feature which
-when combined with suidperl gave access to a root shell, resulting in
-a serious compromise instead of reporting the exploit attempt. If you
-don't have /bin/mail, or if you have 'safe setuid scripts', or if
-suidperl is not installed, you are safe.
-
-The exploit attempt reporting feature has been completely removed from
-the Perl 5.7.0 release, so that particular vulnerability isn't there
-anymore. However, further security vulnerabilities are,
-unfortunately, always possible. The suidperl code is being reviewed
-and if deemed too risky to continue to be supported, it may be
-completely removed from future releases. In any case, suidperl should
-only be used by security experts who know exactly what they are doing
-and why they are using suidperl instead of some other solution such as
-sudo ( see http://www.courtesan.com/sudo/ ).
-
-=head1 Incompatible Changes
-
-=over 4
-
-=item *
-
-Arrays now always interpolate into double-quoted strings:
-constructs like "foo at bar" now always assume C<@bar> is an array,
-whether or not the compiler has seen use of C<@bar>.
-
-=item *
-
-The semantics of bless(REF, REF) were unclear and until someone proves
-it to make some sense, it is forbidden.
-
-=item *
-
-A reference to a reference now stringify as "REF(0x81485ec)" instead
-of "SCALAR(0x81485ec)" in order to be more consistent with the return
-value of ref().
-
-=item *
-
-The very dusty examples in the eg/ directory have been removed.
-Suggestions for new shiny examples welcome but the main issue is that
-the examples need to be documented, tested and (most importantly)
-maintained.
-
-=item *
-
-The obsolete chat2 library that should never have been allowed
-to escape the laboratory has been decommissioned.
-
-=item *
-
-The unimplemented POSIX regex features [[.cc.]] and [[=c=]] are still
-recognised but now cause fatal errors. The previous behaviour of
-ignoring them by default and warning if requested was unacceptable
-since it, in a way, falsely promised that the features could be used.
-
-=item *
-
-The (bogus) escape sequences \8 and \9 now give an optional warning
-("Unrecognized escape passed through"). There is no need to \-escape
-any C<\w> character.
-
-=item *
-
-lstat(FILEHANDLE) now gives a warning because the operation makes no sense.
-In future releases this may become a fatal error.
-
-=item *
-
-The long deprecated uppercase aliases for the string comparison
-operators (EQ, NE, LT, LE, GE, GT) have now been removed.
-
-=item *
-
-The regular expression captured submatches ($1, $2, ...) are now
-more consistently unset if the match fails, instead of leaving false
-data lying around in them.
-
-=item *
-
-The tr///C and tr///U features have been removed and will not return;
-the interface was a mistake. Sorry about that. For similar
-functionality, see pack('U0', ...) and pack('C0', ...).
-
-=back
-
-=head1 Core Enhancements
-
-=over 4
-
-=item *
-
-C<perl -d:Module=arg,arg,arg> now works (previously one couldn't pass
-in multiple arguments.)
-
-=item *
-
-my __PACKAGE__ $obj now works.
-
-=item *
-
-C<no Module;> now works even if there is no "sub unimport" in the Module.
-
-=item *
-
-The numerical comparison operators return C<undef> if either operand
-is a NaN. Previously the behaviour was unspecified.
-
-=item *
-
-C<pack('U0a*', ...)> can now be used to force a string to UTF-8.
-
-=item *
-
-prototype(\&) is now available.
-
-=item *
-
-There is now an UNTIE method.
-
-=back
-
-=head1 Modules and Pragmata
-
-=head2 New Modules
-
-=over 4
-
-=item *
-
-File::Temp allows one to create temporary files and directories in an
-easy, portable, and secure way.
-
-=item *
-
-Storable gives persistence to Perl data structures by allowing the
-storage and retrieval of Perl data to and from files in a fast and
-compact binary format.
-
-=back
-
-=head2 Updated And Improved Modules and Pragmata
-
-=over 4
-
-=item *
-
-The following independently supported modules have been updated to
-newer versions from CPAN: CGI, CPAN, DB_File, File::Spec, Getopt::Long,
-the podlators bundle, Pod::LaTeX, Pod::Parser, Term::ANSIColor, Test.
-
-=item *
-
-Bug fixes and minor enhancements have been applied to B::Deparse,
-Data::Dumper, IO::Poll, IO::Socket::INET, Math::BigFloat,
-Math::Complex, Math::Trig, Net::protoent, the re pragma, SelfLoader,
-Sys::SysLog, Test::Harness, Text::Wrap, UNIVERSAL, and the warnings
-pragma.
-
-=item *
-
-The attributes::reftype() now works on tied arguments.
-
-=item *
-
-AutoLoader can now be disabled with C<no AutoLoader;>,
-
-=item *
-
-The English module can now be used without the infamous performance
-hit by saying
-
- use English '-no_performance_hit';
-
-(Assuming, of course, that one doesn't need the troublesome variables
-C<$`>, C<$&>, or C<$'>.) Also, introduced C<@LAST_MATCH_START> and
-C<@LAST_MATCH_END> English aliases for C<@-> and C<@+>.
-
-=item *
-
-File::Find now has pre- and post-processing callbacks. It also
-correctly changes directories when chasing symbolic links. Callbacks
-(naughtily) exiting with "next;" instead of "return;" now work.
-
-=item *
-
-File::Glob::glob() renamed to File::Glob::bsd_glob() to avoid
-prototype mismatch with CORE::glob().
-
-=item *
-
-IPC::Open3 now allows the use of numeric file descriptors.
-
-=item *
-
-use lib now works identically to @INC. Removing directories
-with 'no lib' now works.
-
-=item *
-
-C<%INC> now localised in a Safe compartment so that use/require work.
-
-=item *
-
-The Shell module now has an OO interface.
-
-=back
-
-=head1 Utility Changes
-
-=over 4
-
-=item *
-
-The Emacs perl mode (emacs/cperl-mode.el) has been updated to version
-4.31.
-
-=item *
-
-Perlbug is now much more robust. It also sends the bug report to
-perl.org, not perl.com.
-
-=item *
-
-The perlcc utility has been rewritten and its user interface (that is,
-command line) is much more like that of the Unix C compiler, cc.
-
-=item *
-
-The xsubpp utility for extension writers now understands POD
-documentation embedded in the *.xs files.
-
-=back
-
-=head1 New Documentation
-
-=over 4
-
-=item *
-
-perl56delta details the changes between the 5.005 release and the
-5.6.0 release.
-
-=item *
-
-perldebtut is a Perl debugging tutorial.
-
-=item *
-
-perlebcdic contains considerations for running Perl on EBCDIC platforms.
-Note that unfortunately EBCDIC platforms that used to supported back in
-Perl 5.005 are still unsupported by Perl 5.7.0; the plan, however, is to
-bring them back to the fold.
-
-=item *
-
-perlnewmod tells about writing and submitting a new module.
-
-=item *
-
-perlposix-bc explains using Perl on the POSIX-BC platform
-(an EBCDIC mainframe platform).
-
-=item *
-
-perlretut is a regular expression tutorial.
-
-=item *
-
-perlrequick is a regular expressions quick-start guide.
-Yes, much quicker than perlretut.
-
-=item *
-
-perlutil explains the command line utilities packaged with the Perl
-distribution.
-
-=back
-
-=head1 Performance Enhancements
-
-=over 4
-
-=item *
-
-map() that changes the size of the list should now work faster.
-
-=item *
-
-sort() has been changed to use mergesort internally as opposed to the
-earlier quicksort. For very small lists this may result in slightly
-slower sorting times, but in general the speedup should be at least
-20%. Additional bonuses are that the worst case behaviour of sort()
-is now better (in computer science terms it now runs in time O(N log N),
-as opposed to quicksort's Theta(N**2) worst-case run time behaviour),
-and that sort() is now stable (meaning that elements with identical
-keys will stay ordered as they were before the sort).
-
-=back
-
-=head1 Installation and Configuration Improvements
-
-=head2 Generic Improvements
-
-=over 4
-
-=item *
-
-INSTALL now explains how you can configure Perl to use 64-bit
-integers even on non-64-bit platforms.
-
-=item *
-
-Policy.sh policy change: if you are reusing a Policy.sh file
-(see INSTALL) and you use Configure -Dprefix=/foo/bar and in the old
-Policy $prefix eq $siteprefix and $prefix eq $vendorprefix, all of
-them will now be changed to the new prefix, /foo/bar. (Previously
-only $prefix changed.) If you do not like this new behaviour,
-specify prefix, siteprefix, and vendorprefix explicitly.
-
-=item *
-
-A new optional location for Perl libraries, otherlibdirs, is available.
-It can be used for example for vendor add-ons without disturbing Perl's
-own library directories.
-
-=item *
-
-In many platforms the vendor-supplied 'cc' is too stripped-down to
-build Perl (basically, 'cc' doesn't do ANSI C). If this seems
-to be the case and 'cc' does not seem to be the GNU C compiler
-'gcc', an automatic attempt is made to find and use 'gcc' instead.
-
-=item *
-
-gcc needs to closely track the operating system release to avoid
-build problems. If Configure finds that gcc was built for a different
-operating system release than is running, it now gives a clearly visible
-warning that there may be trouble ahead.
-
-=item *
-
-If binary compatibility with the 5.005 release is not wanted, Configure
-no longer suggests including the 5.005 modules in @INC.
-
-=item *
-
-Configure C<-S> can now run non-interactively.
-
-=item *
-
-configure.gnu now works with options with whitespace in them.
-
-=item *
-
-installperl now outputs everything to STDERR.
-
-=item *
-
-$Config{byteorder} is now computed dynamically (this is more robust
-with "fat binaries" where an executable image contains binaries for
-more than one binary platform.)
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item *
-
-Several debugger fixes: exit code now reflects the script exit code,
-condition C<"0"> now treated correctly, the C<d> command now checks
-line number, the C<$.> no longer gets corrupted, all debugger output now
-goes correctly to the socket if RemotePort is set.
-
-=item *
-
-C<*foo{FORMAT}> now works.
-
-=item *
-
-Lexical warnings now propagating correctly between scopes.
-
-=item *
-
-Line renumbering with eval and C<#line> now works.
-
-=item *
-
-Fixed numerous memory leaks, especially in eval "".
-
-=item *
-
-Modulus of unsigned numbers now works (4063328477 % 65535 used to
-return 27406, instead of 27047).
-
-=item *
-
-Some "not a number" warnings introduced in 5.6.0 eliminated to be
-more compatible with 5.005. Infinity is now recognised as a number.
-
-=item *
-
-our() variables will not cause "will not stay shared" warnings.
-
-=item *
-
-pack "Z" now correctly terminates the string with "\0".
-
-=item *
-
-Fix password routines which in some shadow password platforms
-(e.g. HP-UX) caused getpwent() to return every other entry.
-
-=item *
-
-printf() no longer resets the numeric locale to "C".
-
-=item *
-
-C<q(a\\b)> now parses correctly as C<'a\\b'>.
-
-=item *
-
-Printing quads (64-bit integers) with printf/sprintf now works
-without the q L ll prefixes (assuming you are on a quad-capable platform).
-
-=item *
-
-Regular expressions on references and overloaded scalars now work.
-
-=item *
-
-scalar() now forces scalar context even when used in void context.
-
-=item *
-
-sort() arguments are now compiled in the right wantarray context
-(they were accidentally using the context of the sort() itself).
-
-=item *
-
-Changed the POSIX character class C<[[:space:]]> to include the (very
-rare) vertical tab character. Added a new POSIX-ish character class
-C<[[:blank:]]> which stands for horizontal whitespace (currently,
-the space and the tab).
-
-=item *
-
-$AUTOLOAD, sort(), lock(), and spawning subprocesses
-in multiple threads simultaneously are now thread-safe.
-
-=item *
-
-Allow read-only string on left hand side of non-modifying tr///.
-
-=item *
-
-Several Unicode fixes (but still not perfect).
-
-=over 8
-
-=item *
-
-BOMs (byte order marks) in the beginning of Perl files
-(scripts, modules) should now be transparently skipped.
-UTF-16 (UCS-2) encoded Perl files should now be read correctly.
-
-=item *
-
-The character tables have been updated to Unicode 3.0.1.
-
-=item *
-
-chr() for values greater than 127 now create utf8 when under use
-utf8.
-
-=item *
-
-Comparing with utf8 data does not magically upgrade non-utf8 data into
-utf8.
-
-=item *
-
-C<IsAlnum>, C<IsAlpha>, and C<IsWord> now match titlecase.
-
-=item *
-
-Concatenation with the C<.> operator or via variable interpolation,
-C<eq>, C<substr>, C<reverse>, C<quotemeta>, the C<x> operator,
-substitution with C<s///>, single-quoted UTF-8, should now work--in
-theory.
-
-=item *
-
-The C<tr///> operator now works I<slightly> better but is still rather
-broken. Note that the C<tr///CU> functionality has been removed (but
-see pack('U0', ...)).
-
-=item *
-
-vec() now refuses to deal with characters >255.
-
-=item *
-
-Zero entries were missing from the Unicode classes like C<IsDigit>.
-
-=back
-
-=item *
-
-UNIVERSAL::isa no longer caches methods incorrectly. (This broke
-the Tk extension with 5.6.0.)
-
-=back
-
-=head2 Platform Specific Changes and Fixes
-
-=over 4
-
-=item *
-
-BSDI 4.*
-
-Perl now works on post-4.0 BSD/OSes.
-
-=item *
-
-All BSDs
-
-Setting C<$0> now works (as much as possible; see perlvar for details).
-
-=item *
-
-Cygwin
-
-Numerous updates; currently synchronised with Cygwin 1.1.4.
-
-=item *
-
-EPOC
-
-EPOC update after Perl 5.6.0. See README.epoc.
-
-=item *
-
-FreeBSD 3.*
-
-Perl now works on post-3.0 FreeBSDs.
-
-=item *
-
-HP-UX
-
-README.hpux updated; C<Configure -Duse64bitall> now almost works.
-
-=item *
-
-IRIX
-
-Numerous compilation flag and hint enhancements; accidental mixing
-of 32-bit and 64-bit libraries (a doomed attempt) made much harder.
-
-=item *
-
-Linux
-
-Long doubles should now work (see INSTALL).
-
-=item *
-
-Mac OS Classic
-
-Compilation of the standard Perl distribution in Mac OS Classic should
-now work if you have the Metrowerks development environment and the
-missing Mac-specific toolkit bits. Contact the macperl mailing list
-for details.
-
-=item *
-
-MPE/iX
-
-MPE/iX update after Perl 5.6.0. See README.mpeix.
-
-=item *
-
-NetBSD/sparc
-
-Perl now works on NetBSD/sparc.
-
-=item *
-
-OS/2
-
-Now works with usethreads (see INSTALL).
-
-=item *
-
-Solaris
-
-64-bitness using the Sun Workshop compiler now works.
-
-=item *
-
-Tru64 (aka Digital UNIX, aka DEC OSF/1)
-
-The operating system version letter now recorded in $Config{osvers}.
-Allow compiling with gcc (previously explicitly forbidden). Compiling
-with gcc still not recommended because buggy code results, even with
-gcc 2.95.2.
-
-=item *
-
-Unicos
-
-Fixed various alignment problems that lead into core dumps either
-during build or later; no longer dies on math errors at runtime;
-now using full quad integers (64 bits), previously was using
-only 46 bit integers for speed.
-
-=item *
-
-VMS
-
-chdir() now works better despite a CRT bug; now works with MULTIPLICITY
-(see INSTALL); now works with Perl's malloc.
-
-=item *
-
-Windows
-
-=over 8
-
-=item *
-
-accept() no longer leaks memory.
-
-=item *
-
-Better chdir() return value for a non-existent directory.
-
-=item *
-
-New %ENV entries now propagate to subprocesses.
-
-=item *
-
-$ENV{LIB} now used to search for libs under Visual C.
-
-=item *
-
-A failed (pseudo)fork now returns undef and sets errno to EAGAIN.
-
-=item *
-
-Allow REG_EXPAND_SZ keys in the registry.
-
-=item *
-
-Can now send() from all threads, not just the first one.
-
-=item *
-
-Fake signal handling reenabled, bugs and all.
-
-=item *
-
-Less stack reserved per thread so that more threads can run
-concurrently. (Still 16M per thread.)
-
-=item *
-
-C<< File::Spec->tmpdir() >> now prefers C:/temp over /tmp
-(works better when perl is running as service).
-
-=item *
-
-Better UNC path handling under ithreads.
-
-=item *
-
-wait() and waitpid() now work much better.
-
-=item *
-
-winsock handle leak fixed.
-
-=back
-
-=back
-
-=head1 New or Changed Diagnostics
-
-All regular expression compilation error messages are now hopefully
-easier to understand both because the error message now comes before
-the failed regex and because the point of failure is now clearly
-marked.
-
-The various "opened only for", "on closed", "never opened" warnings
-drop the C<main::> prefix for filehandles in the C<main> package,
-for example C<STDIN> instead of <main::STDIN>.
-
-The "Unrecognized escape" warning has been extended to include C<\8>,
-C<\9>, and C<\_>. There is no need to escape any of the C<\w> characters.
-
-=head1 Changed Internals
-
-=over 4
-
-=item *
-
-perlapi.pod (a companion to perlguts) now attempts to document the
-internal API.
-
-=item *
-
-You can now build a really minimal perl called microperl.
-Building microperl does not require even running Configure;
-C<make -f Makefile.micro> should be enough. Beware: microperl makes
-many assumptions, some of which may be too bold; the resulting
-executable may crash or otherwise misbehave in wondrous ways.
-For careful hackers only.
-
-=item *
-
-Added rsignal(), whichsig(), do_join() to the publicised API.
-
-=item *
-
-Made possible to propagate customised exceptions via croak()ing.
-
-=item *
-
-Added is_utf8_char(), is_utf8_string(), bytes_to_utf8(), and utf8_to_bytes().
-
-=item *
-
-Now xsubs can have attributes just like subs.
-
-=back
-
-=head1 Known Problems
-
-=head2 Unicode Support Still Far From Perfect
-
-We're working on it. Stay tuned.
-
-=head2 EBCDIC Still A Lost Platform
-
-The plan is to bring them back.
-
-=head2 Building Extensions Can Fail Because Of Largefiles
-
-Certain extensions like mod_perl and BSD::Resource are known to have
-issues with `largefiles', a change brought by Perl 5.6.0 in which file
-offsets default to 64 bits wide, where supported. Modules may fail to
-compile at all or compile and work incorrectly. Currently there is no
-good solution for the problem, but Configure now provides appropriate
-non-largefile ccflags, ldflags, libswanted, and libs in the %Config
-hash (e.g., $Config{ccflags_nolargefiles}) so the extensions that are
-having problems can try configuring themselves without the
-largefileness. This is admittedly not a clean solution, and the
-solution may not even work at all. One potential failure is whether
-one can (or, if one can, whether it's a good idea) link together at
-all binaries with different ideas about file offsets, all this is
-platform-dependent.
-
-=head2 ftmp-security tests warn 'system possibly insecure'
-
-Don't panic. Read INSTALL 'make test' section instead.
-
-=head2 Test lib/posix Subtest 9 Fails In LP64-Configured HP-UX
-
-If perl is configured with -Duse64bitall, the successful result of the
-subtest 10 of lib/posix may arrive before the successful result of the
-subtest 9, which confuses the test harness so much that it thinks the
-subtest 9 failed.
-
-=head2 Long Doubles Still Don't Work In Solaris
-
-The experimental long double support is still very much so in Solaris.
-(Other platforms like Linux and Tru64 are beginning to solidify in
-this area.)
-
-=head2 Linux With Sfio Fails op/misc Test 48
-
-No known fix.
-
-=head2 Storable tests fail in some platforms
-
-If any Storable tests fail the use of Storable is not advisable.
-
-=over 4
-
-=item *
-
-Many Storable tests fail on AIX configured with 64 bit integers.
-
-So far unidentified problems break Storable in AIX if Perl is
-configured to use 64 bit integers. AIX in 32-bit mode works and
-other 64-bit platforms work with Storable.
-
-=item *
-
-DOS DJGPP may hang when testing Storable.
-
-=item *
-
-st-06compat fails in UNICOS and UNICOS/mk.
-
-This means that you cannot read old (pre-Storable-0.7) Storable images
-made in other platforms.
-
-=item *
-
-st-store.t and st-retrieve may fail with Compaq C 6.2 on OpenVMS Alpha 7.2.
-
-=back
-
-=head2 Threads Are Still Experimental
-
-Multithreading is still an experimental feature. Some platforms
-emit the following message for lib/thr5005
-
- #
- # This is a KNOWN FAILURE, and one of the reasons why threading
- # is still an experimental feature. It is here to stop people
- # from deploying threads in production. ;-)
- #
-
-and another known thread-related warning is
-
- pragma/overload......Unbalanced saves: 3 more saves than restores
- panic: magic_mutexfree during global destruction.
- ok
- lib/selfloader.......Unbalanced saves: 3 more saves than restores
- panic: magic_mutexfree during global destruction.
- ok
- lib/st-dclone........Unbalanced saves: 3 more saves than restores
- panic: magic_mutexfree during global destruction.
- ok
-
-=head2 The Compiler Suite Is Still Experimental
-
-The compiler suite is slowly getting better but is nowhere near
-working order yet. The backend part that has seen perhaps the most
-progress is the bytecode compiler.
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://bugs.perl.org/ There may also be
-information at http://www.perl.com/perl/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-=head1 SEE ALSO
-
-The F<Changes> file for exhaustive details on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=head1 HISTORY
-
-Written by Jarkko Hietaniemi <F<jhi at iki.fi>>, with many contributions
-from The Perl Porters and Perl Users submitting feedback and patches.
-
-Send omissions or corrections to <F<perlbug at perl.org>>.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl571delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl571delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl571delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1075 +0,0 @@
-=head1 NAME
-
-perl571delta - what's new for perl v5.7.1
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.7.0 release and the
-5.7.1 release.
-
-(To view the differences between the 5.6.0 release and the 5.7.0
-release, see L<perl570delta>.)
-
-=head1 Security Vulnerability Closed
-
-(This change was already made in 5.7.0 but bears repeating here.)
-
-A potential security vulnerability in the optional suidperl component
-of Perl was identified in August 2000. suidperl is neither built nor
-installed by default. As of April 2001 the only known vulnerable
-platform is Linux, most likely all Linux distributions. CERT and
-various vendors and distributors have been alerted about the vulnerability.
-See http://www.cpan.org/src/5.0/sperl-2000-08-05/sperl-2000-08-05.txt
-for more information.
-
-The problem was caused by Perl trying to report a suspected security
-exploit attempt using an external program, /bin/mail. On Linux
-platforms the /bin/mail program had an undocumented feature which
-when combined with suidperl gave access to a root shell, resulting in
-a serious compromise instead of reporting the exploit attempt. If you
-don't have /bin/mail, or if you have 'safe setuid scripts', or if
-suidperl is not installed, you are safe.
-
-The exploit attempt reporting feature has been completely removed from
-all the Perl 5.7 releases (and will be gone also from the maintenance
-release 5.6.1), so that particular vulnerability isn't there anymore.
-However, further security vulnerabilities are, unfortunately, always
-possible. The suidperl code is being reviewed and if deemed too risky
-to continue to be supported, it may be completely removed from future
-releases. In any case, suidperl should only be used by security
-experts who know exactly what they are doing and why they are using
-suidperl instead of some other solution such as sudo
-( see http://www.courtesan.com/sudo/ ).
-
-=head1 Incompatible Changes
-
-=over 4
-
-=item *
-
-Although "you shouldn't do that", it was possible to write code that
-depends on Perl's hashed key order (Data::Dumper does this). The new
-algorithm "One-at-a-Time" produces a different hashed key order.
-More details are in L</"Performance Enhancements">.
-
-=item *
-
-The list of filenames from glob() (or <...>) is now by default sorted
-alphabetically to be csh-compliant. (bsd_glob() does still sort platform
-natively, ASCII or EBCDIC, unless GLOB_ALPHASORT is specified.)
-
-=back
-
-=head1 Core Enhancements
-
-=head2 AUTOLOAD Is Now Lvaluable
-
-AUTOLOAD is now lvaluable, meaning that you can add the :lvalue attribute
-to AUTOLOAD subroutines and you can assign to the AUTOLOAD return value.
-
-=head2 PerlIO is Now The Default
-
-=over 4
-
-=item *
-
-IO is now by default done via PerlIO rather than system's "stdio".
-PerlIO allows "layers" to be "pushed" onto a file handle to alter the
-handle's behaviour. Layers can be specified at open time via 3-arg
-form of open:
-
- open($fh,'>:crlf :utf8', $path) || ...
-
-or on already opened handles via extended C<binmode>:
-
- binmode($fh,':encoding(iso-8859-7)');
-
-The built-in layers are: unix (low level read/write), stdio (as in
-previous Perls), perlio (re-implementation of stdio buffering in a
-portable manner), crlf (does CRLF <=> "\n" translation as on Win32,
-but available on any platform). A mmap layer may be available if
-platform supports it (mostly Unixes).
-
-Layers to be applied by default may be specified via the 'open' pragma.
-
-See L</"Installation and Configuration Improvements"> for the effects
-of PerlIO on your architecture name.
-
-=item *
-
-File handles can be marked as accepting Perl's internal encoding of Unicode
-(UTF-8 or UTF-EBCDIC depending on platform) by a pseudo layer ":utf8" :
-
- open($fh,">:utf8","Uni.txt");
-
-Note for EBCDIC users: the pseudo layer ":utf8" is erroneously named
-for you since it's not UTF-8 what you will be getting but instead
-UTF-EBCDIC. See L<perlunicode>, L<utf8>, and
-http://www.unicode.org/unicode/reports/tr16/ for more information.
-In future releases this naming may change.
-
-=item *
-
-File handles can translate character encodings from/to Perl's internal
-Unicode form on read/write via the ":encoding()" layer.
-
-=item *
-
-File handles can be opened to "in memory" files held in Perl scalars via:
-
- open($fh,'>', \$variable) || ...
-
-=item *
-
-Anonymous temporary files are available without need to
-'use FileHandle' or other module via
-
- open($fh,"+>", undef) || ...
-
-That is a literal undef, not an undefined value.
-
-=item *
-
-The list form of C<open> is now implemented for pipes (at least on Unix):
-
- open($fh,"-|", 'cat', '/etc/motd')
-
-creates a pipe, and runs the equivalent of exec('cat', '/etc/motd') in
-the child process.
-
-=item *
-
-The following builtin functions are now overridable: chop(), chomp(),
-each(), keys(), pop(), push(), shift(), splice(), unshift().
-
-=item *
-
-Formats now support zero-padded decimal fields.
-
-=item *
-
-Perl now tries internally to use integer values in numeric conversions
-and basic arithmetics (+ - * /) if the arguments are integers, and
-tries also to keep the results stored internally as integers.
-This change leads into often slightly faster and always less lossy
-arithmetics. (Previously Perl always preferred floating point numbers
-in its math.)
-
-=item *
-
-The printf() and sprintf() now support parameter reordering using the
-C<%\d+\$> and C<*\d+\$> syntaxes. For example
-
- print "%2\$s %1\$s\n", "foo", "bar";
-
-will print "bar foo\n"; This feature helps in writing
-internationalised software.
-
-=item *
-
-Unicode in general should be now much more usable. Unicode can be
-used in hash keys, Unicode in regular expressions should work now,
-Unicode in tr/// should work now (though tr/// seems to be a
-particularly tricky to get right, so you have been warned)
-
-=item *
-
-The Unicode Character Database coming with Perl has been upgraded
-to Unicode 3.1. For more information, see http://www.unicode.org/ ,
-and http://www.unicode.org/unicode/reports/tr27/
-
-For developers interested in enhancing Perl's Unicode capabilities:
-almost all the UCD files are included with the Perl distribution in
-the lib/unicode subdirectory. The most notable omission, for space
-considerations, is the Unihan database.
-
-=item *
-
-The Unicode character classes \p{Blank} and \p{SpacePerl} have been
-added. "Blank" is like C isblank(), that is, it contains only
-"horizontal whitespace" (the space character is, the newline isn't),
-and the "SpacePerl" is the Unicode equivalent of C<\s> (\p{Space}
-isn't, since that includes the vertical tabulator character, whereas
-C<\s> doesn't.)
-
-=back
-
-=head2 Signals Are Now Safe
-
-Perl used to be fragile in that signals arriving at inopportune moments
-could corrupt Perl's internal state.
-
-=head1 Modules and Pragmata
-
-=head2 New Modules
-
-=over 4
-
-=item *
-
-B::Concise, by Stephen McCamant, is a new compiler backend for
-walking the Perl syntax tree, printing concise info about ops.
-The output is highly customisable.
-
-See L<B::Concise> for more information.
-
-=item *
-
-Class::ISA, by Sean Burke, for reporting the search path for a
-class's ISA tree, has been added.
-
-See L<Class::ISA> for more information.
-
-=item *
-
-Cwd has now a split personality: if possible, an extension is used,
-(this will hopefully be both faster and more secure and robust) but
-if not possible, the familiar Perl library implementation is used.
-
-=item *
-
-Digest, a frontend module for calculating digests (checksums),
-from Gisle Aas, has been added.
-
-See L<Digest> for more information.
-
-=item *
-
-Digest::MD5 for calculating MD5 digests (checksums), by Gisle Aas,
-has been added.
-
- use Digest::MD5 'md5_hex';
-
- $digest = md5_hex("Thirsty Camel");
-
- print $digest, "\n"; # 01d19d9d2045e005c3f1b80e8b164de1
-
-NOTE: the MD5 backward compatibility module is deliberately not
-included since its use is discouraged.
-
-See L<Digest::MD5> for more information.
-
-=item *
-
-Encode, by Nick Ing-Simmons, provides a mechanism to translate
-between different character encodings. Support for Unicode,
-ISO-8859-*, ASCII, CP*, KOI8-R, and three variants of EBCDIC are
-compiled in to the module. Several other encodings (like Japanese,
-Chinese, and MacIntosh encodings) are included and will be loaded at
-runtime.
-
-Any encoding supported by Encode module is also available to the
-":encoding()" layer if PerlIO is used.
-
-See L<Encode> for more information.
-
-=item *
-
-Filter::Simple is an easy-to-use frontend to Filter::Util::Call,
-from Damian Conway.
-
- # in MyFilter.pm:
-
- package MyFilter;
-
- use Filter::Simple sub {
- while (my ($from, $to) = splice @_, 0, 2) {
- s/$from/$to/g;
- }
- };
-
- 1;
-
- # in user's code:
-
- use MyFilter qr/red/ => 'green';
-
- print "red\n"; # this code is filtered, will print "green\n"
- print "bored\n"; # this code is filtered, will print "bogreen\n"
-
- no MyFilter;
-
- print "red\n"; # this code is not filtered, will print "red\n"
-
-See L<Filter::Simple> for more information.
-
-=item *
-
-Filter::Util::Call, by Paul Marquess, provides you with the
-framework to write I<Source Filters> in Perl. For most uses
-the frontend Filter::Simple is to be preferred.
-See L<Filter::Util::Call> for more information.
-
-=item *
-
-Locale::Constants, Locale::Country, Locale::Currency, and Locale::Language,
-from Neil Bowers, have been added. They provide the codes for various
-locale standards, such as "fr" for France, "usd" for US Dollar, and
-"jp" for Japanese.
-
- use Locale::Country;
-
- $country = code2country('jp'); # $country gets 'Japan'
- $code = country2code('Norway'); # $code gets 'no'
-
-See L<Locale::Constants>, L<Locale::Country>, L<Locale::Currency>,
-and L<Locale::Language> for more information.
-
-=item *
-
-MIME::Base64, by Gisle Aas, allows you to encode data in base64.
-
- use MIME::Base64;
-
- $encoded = encode_base64('Aladdin:open sesame');
- $decoded = decode_base64($encoded);
-
- print $encoded, "\n"; # "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
-
-See L<MIME::Base64> for more information.
-
-=item *
-
-MIME::QuotedPrint, by Gisle Aas, allows you to encode data in
-quoted-printable encoding.
-
- use MIME::QuotedPrint;
-
- $encoded = encode_qp("Smiley in Unicode: \x{263a}");
- $decoded = decode_qp($encoded);
-
- print $encoded, "\n"; # "Smiley in Unicode: =263A"
-
-MIME::QuotedPrint has been enhanced to provide the basic methods
-necessary to use it with PerlIO::Via as in :
-
- use MIME::QuotedPrint;
- open($fh,">Via(MIME::QuotedPrint)",$path)
-
-See L<MIME::QuotedPrint> for more information.
-
-=item *
-
-PerlIO::Scalar, by Nick Ing-Simmons, provides the implementation of
-IO to "in memory" Perl scalars as discussed above. It also serves as
-an example of a loadable layer. Other future possibilities include
-PerlIO::Array and PerlIO::Code. See L<PerlIO::Scalar> for more
-information.
-
-=item *
-
-PerlIO::Via, by Nick Ing-Simmons, acts as a PerlIO layer and wraps
-PerlIO layer functionality provided by a class (typically implemented
-in perl code).
-
- use MIME::QuotedPrint;
- open($fh,">Via(MIME::QuotedPrint)",$path)
-
-This will automatically convert everything output to C<$fh>
-to Quoted-Printable. See L<PerlIO::Via> for more information.
-
-=item *
-
-Pod::Text::Overstrike, by Joe Smith, has been added.
-It converts POD data to formatted overstrike text.
-See L<Pod::Text::Overstrike> for more information.
-
-=item *
-
-Switch from Damian Conway has been added. Just by saying
-
- use Switch;
-
-you have C<switch> and C<case> available in Perl.
-
- use Switch;
-
- switch ($val) {
-
- case 1 { print "number 1" }
- case "a" { print "string a" }
- case [1..10,42] { print "number in list" }
- case (@array) { print "number in list" }
- case /\w+/ { print "pattern" }
- case qr/\w+/ { print "pattern" }
- case (%hash) { print "entry in hash" }
- case (\%hash) { print "entry in hash" }
- case (\&sub) { print "arg to subroutine" }
- else { print "previous case not true" }
- }
-
-See L<Switch> for more information.
-
-=item *
-
-Text::Balanced from Damian Conway has been added, for
-extracting delimited text sequences from strings.
-
- use Text::Balanced 'extract_delimited';
-
- ($a, $b) = extract_delimited("'never say never', he never said", "'", '');
-
-$a will be "'never say never'", $b will be ', he never said'.
-
-In addition to extract_delimited() there are also extract_bracketed(),
-extract_quotelike(), extract_codeblock(), extract_variable(),
-extract_tagged(), extract_multiple(), gen_delimited_pat(), and
-gen_extract_tagged(). With these you can implement rather advanced
-parsing algorithms. See L<Text::Balanced> for more information.
-
-=item *
-
-Tie::RefHash::Nestable, by Edward Avis, allows storing hash references
-(unlike the standard Tie::RefHash) The module is contained within
-Tie::RefHash.
-
-=item *
-
-XS::Typemap, by Tim Jenness, is a test extension that exercises XS
-typemaps. Nothing gets installed but for extension writers the code
-is worth studying.
-
-=back
-
-=head2 Updated And Improved Modules and Pragmata
-
-=over 4
-
-=item *
-
-B::Deparse should be now more robust. It still far from providing a full
-round trip for any random piece of Perl code, though, and is under active
-development: expect more robustness in 5.7.2.
-
-=item *
-
-Class::Struct can now define the classes in compile time.
-
-=item *
-
-Math::BigFloat has undergone much fixing, and in addition the fmod()
-function now supports modulus operations.
-
-( The fixed Math::BigFloat module is also available in CPAN for those
-who can't upgrade their Perl: http://www.cpan.org/authors/id/J/JP/JPEACOCK/ )
-
-=item *
-
-Devel::Peek now has an interface for the Perl memory statistics
-(this works only if you are using perl's malloc, and if you have
-compiled with debugging).
-
-=item *
-
-IO::Socket has now atmark() method, which returns true if the socket
-is positioned at the out-of-band mark. The method is also exportable
-as a sockatmark() function.
-
-=item *
-
-IO::Socket::INET has support for ReusePort option (if your platform
-supports it). The Reuse option now has an alias, ReuseAddr. For clarity
-you may want to prefer ReuseAddr.
-
-=item *
-
-Net::Ping has been enhanced. There is now "external" protocol which
-uses Net::Ping::External module which runs external ping(1) and parses
-the output. An alpha version of Net::Ping::External is available in
-CPAN and in 5.7.2 the Net::Ping::External may be integrated to Perl.
-
-=item *
-
-The C<open> pragma allows layers other than ":raw" and ":crlf" when
-using PerlIO.
-
-=item *
-
-POSIX::sigaction() is now much more flexible and robust.
-You can now install coderef handlers, 'DEFAULT', and 'IGNORE'
-handlers, installing new handlers was not atomic.
-
-=item *
-
-The Test module has been significantly enhanced. Its use is
-greatly recommended for module writers.
-
-=item *
-
-The utf8:: name space (as in the pragma) provides various
-Perl-callable functions to provide low level access to Perl's
-internal Unicode representation. At the moment only length()
-has been implemented.
-
-=back
-
-The following modules have been upgraded from the versions at CPAN:
-CPAN, CGI, DB_File, File::Temp, Getopt::Long, Pod::Man, Pod::Text,
-Storable, Text-Tabs+Wrap.
-
-=head1 Performance Enhancements
-
-=over 4
-
-=item *
-
-Hashes now use Bob Jenkins "One-at-a-Time" hashing key algorithm
-( http://burtleburtle.net/bob/hash/doobs.html ). This algorithm is
-reasonably fast while producing a much better spread of values than
-the old hashing algorithm (originally by Chris Torek, later tweaked by
-Ilya Zakharevich). Hash values output from the algorithm on a hash of
-all 3-char printable ASCII keys comes much closer to passing the
-DIEHARD random number generation tests. According to perlbench, this
-change has not affected the overall speed of Perl.
-
-=item *
-
-unshift() should now be noticeably faster.
-
-=back
-
-=head1 Utility Changes
-
-=over 4
-
-=item *
-
-h2xs now produces template README.
-
-=item *
-
-s2p has been completely rewritten in Perl. (It is in fact a full
-implementation of sed in Perl.)
-
-=item *
-
-xsubpp now supports OUT keyword.
-
-=back
-
-=head1 New Documentation
-
-=head2 perlclib
-
-Internal replacements for standard C library functions.
-(Interesting only for extension writers and Perl core hackers.)
-
-=head2 perliol
-
-Internals of PerlIO with layers.
-
-=head2 README.aix
-
-Documentation on compiling Perl on AIX has been added. AIX has
-several different C compilers and getting the right patch level
-is essential. On install README.aix will be installed as L<perlaix>.
-
-=head2 README.bs2000
-
-Documentation on compiling Perl on the POSIX-BC platform (an EBCDIC
-mainframe environment) has been added.
-
-This was formerly known as README.posix-bc but the name was considered
-to be too confusing (it has nothing to do with the POSIX module or the
-POSIX standard). On install README.bs2000 will be installed as L<perlbs2000>.
-
-=head2 README.macos
-
-In perl 5.7.1 (and in the 5.6.1) the MacPerl sources have been
-synchronised with the standard Perl sources. To compile MacPerl
-some additional steps are required, and this file documents those
-steps. On install README.macos will be installed as L<perlmacos>.
-
-=head2 README.mpeix
-
-The README.mpeix has been podified, which means that this information
-about compiling and using Perl on the MPE/iX miniframe platform will
-be installed as L<perlmpeix>.
-
-=head2 README.solaris
-
-README.solaris has been created and Solaris wisdom from elsewhere
-in the Perl documentation has been collected there. On install
-README.solaris will be installed as L<perlsolaris>.
-
-=head2 README.vos
-
-The README.vos has been podified, which means that this information
-about compiling and using Perl on the Stratus VOS miniframe platform
-will be installed as L<perlvos>.
-
-=head2 Porting/repository.pod
-
-Documentation on how to use the Perl source repository has been added.
-
-=head1 Installation and Configuration Improvements
-
-=over 4
-
-=item *
-
-Because PerlIO is now the default on most platforms, "-perlio" doesn't
-get appended to the $Config{archname} (also known as $^O) anymore.
-Instead, if you explicitly choose not to use perlio (Configure command
-line option -Uuseperlio), you will get "-stdio" appended.
-
-=item *
-
-Another change related to the architecture name is that "-64all"
-(-Duse64bitall, or "maximally 64-bit") is appended only if your
-pointers are 64 bits wide. (To be exact, the use64bitall is ignored.)
-
-=item *
-
-APPLLIB_EXP, a less-know configuration-time definition, has been
-documented. It can be used to prepend site-specific directories
-to Perl's default search path (@INC), see INSTALL for information.
-
-=item *
-
-Building Berkeley DB3 for compatibility modes for DB, NDBM, and ODBM
-has been documented in INSTALL.
-
-=item *
-
-If you are on IRIX or Tru64 platforms, new profiling/debugging options
-have been added, see L<perlhack> for more information about pixie and
-Third Degree.
-
-=back
-
-=head2 New Or Improved Platforms
-
-For the list of platforms known to support Perl,
-see L<perlport/"Supported Platforms">.
-
-=over 4
-
-=item *
-
-AIX dynamic loading should be now better supported.
-
-=item *
-
-After a long pause, AmigaOS has been verified to be happy with Perl.
-
-=item *
-
-EBCDIC platforms (z/OS, also known as OS/390, POSIX-BC, and VM/ESA)
-have been regained. Many test suite tests still fail and the
-co-existence of Unicode and EBCDIC isn't quite settled, but the
-situation is much better than with Perl 5.6. See L<perlos390>,
-L<perlbs2000> (for POSIX-BC), and L<perlvmesa> for more information.
-
-=item *
-
-Building perl with -Duseithreads or -Duse5005threads now works under
-HP-UX 10.20 (previously it only worked under 10.30 or later). You will
-need a thread library package installed. See README.hpux.
-
-=item *
-
-Mac OS Classic (MacPerl has of course been available since
-perl 5.004 but now the source code bases of standard Perl
-and MacPerl have been synchronised)
-
-=item *
-
-NCR MP-RAS is now supported.
-
-=item *
-
-NonStop-UX is now supported.
-
-=item *
-
-Amdahl UTS is now supported.
-
-=item *
-
-z/OS (formerly known as OS/390, formerly known as MVS OE) has now
-support for dynamic loading. This is not selected by default,
-however, you must specify -Dusedl in the arguments of Configure.
-
-=back
-
-=head2 Generic Improvements
-
-=over 4
-
-=item *
-
-Configure no longer includes the DBM libraries (dbm, gdbm, db, ndbm)
-when building the Perl binary. The only exception to this is SunOS 4.x,
-which needs them.
-
-=item *
-
-Some new Configure symbols, useful for extension writers:
-
-=over 8
-
-=item d_cmsghdr
-
-For struct cmsghdr.
-
-=item d_fcntl_can_lock
-
-Whether fcntl() can be used for file locking.
-
-=item d_fsync
-
-=item d_getitimer
-
-=item d_getpagsz
-
-For getpagesize(), though you should prefer POSIX::sysconf(_SC_PAGE_SIZE))
-
-=item d_msghdr_s
-
-For struct msghdr.
-
-=item need_va_copy
-
-Whether one needs to use Perl_va_copy() to copy varargs.
-
-=item d_readv
-
-=item d_recvmsg
-
-=item d_sendmsg
-
-=item sig_size
-
-The number of elements in an array needed to hold all the available signals.
-
-=item d_sockatmark
-
-=item d_strtoq
-
-=item d_u32align
-
-Whether one needs to access character data aligned by U32 sized pointers.
-
-=item d_ualarm
-
-=item d_usleep
-
-=back
-
-=item *
-
-Removed Configure symbols: the PDP-11 memory model settings: huge,
-large, medium, models.
-
-=item *
-
-SOCKS support is now much more robust.
-
-=item *
-
-If your file system supports symbolic links you can build Perl outside
-of the source directory by
-
- mkdir perl/build/directory
- cd perl/build/directory
- sh /path/to/perl/source/Configure -Dmksymlinks ...
-
-This will create in perl/build/directory a tree of symbolic links
-pointing to files in /path/to/perl/source. The original files are left
-unaffected. After Configure has finished you can just say
-
- make all test
-
-and Perl will be built and tested, all in perl/build/directory.
-
-=back
-
-=head1 Selected Bug Fixes
-
-Numerous memory leaks and uninitialized memory accesses have been hunted down.
-Most importantly anonymous subs used to leak quite a bit.
-
-=over 4
-
-=item *
-
-chop(@list) in list context returned the characters chopped in
-reverse order. This has been reversed to be in the right order.
-
-=item *
-
-The order of DESTROYs has been made more predictable.
-
-=item *
-
-mkdir() now ignores trailing slashes in the directory name,
-as mandated by POSIX.
-
-=item *
-
-Attributes (like :shared) didn't work with our().
-
-=item *
-
-The PERL5OPT environment variable (for passing command line arguments
-to Perl) didn't work for more than a single group of options.
-
-=item *
-
-The tainting behaviour of sprintf() has been rationalized. It does
-not taint the result of floating point formats anymore, making the
-behaviour consistent with that of string interpolation.
-
-=item *
-
-All but the first argument of the IO syswrite() method are now optional.
-
-=item *
-
-Tie::ARRAY SPLICE method was broken.
-
-=item *
-
-vec() now tries to work with characters <= 255 when possible, but it leaves
-higher character values in place. In that case, if vec() was used to modify
-the string, it is no longer considered to be utf8-encoded.
-
-=back
-
-=head2 Platform Specific Changes and Fixes
-
-=over 4
-
-=item *
-
-Linux previously had problems related to sockaddrlen when using
-accept(), revcfrom() (in Perl: recv()), getpeername(), and getsockname().
-
-=item *
-
-Previously DYNIX/ptx had problems in its Configure probe for non-blocking I/O.
-
-=item *
-
-Windows
-
-=over 8
-
-=item *
-
-Borland C++ v5.5 is now a supported compiler that can build Perl.
-However, the generated binaries continue to be incompatible with those
-generated by the other supported compilers (GCC and Visual C++).
-
-=item *
-
-Win32::GetCwd() correctly returns C:\ instead of C: when at the drive root.
-Other bugs in chdir() and Cwd::cwd() have also been fixed.
-
-=item *
-
-Duping socket handles with open(F, ">&MYSOCK") now works under Windows 9x.
-
-=item *
-
-HTML files will be installed in c:\perl\html instead of c:\perl\lib\pod\html
-
-=item *
-
-The makefiles now provide a single switch to bulk-enable all the features
-enabled in ActiveState ActivePerl (a popular binary distribution).
-
-=back
-
-=back
-
-=head1 New or Changed Diagnostics
-
-Two new debugging options have been added: if you have compiled your
-Perl with debugging, you can use the -DT and -DR options to trace
-tokenising and to add reference counts to displaying variables,
-respectively.
-
-=over 4
-
-=item *
-
-If an attempt to use a (non-blessed) reference as an array index
-is made, a warning is given.
-
-=item *
-
-C<push @a;> and C<unshift @a;> (with no values to push or unshift)
-now give a warning. This may be a problem for generated and eval'ed
-code.
-
-=back
-
-=head1 Changed Internals
-
-=over 4
-
-=item *
-
-Some new APIs: ptr_table_clear(), ptr_table_free(), sv_setref_uv().
-For the full list of the available APIs see L<perlapi>.
-
-=item *
-
-dTHR and djSP have been obsoleted; the former removed (because it's
-a no-op) and the latter replaced with dSP.
-
-=item *
-
-Perl now uses system malloc instead of Perl malloc on all 64-bit
-platforms, and even in some not-always-64-bit platforms like AIX,
-IRIX, and Solaris. This change breaks backward compatibility but
-Perl's malloc has problems with large address spaces and also the
-speed of vendors' malloc is generally better in large address space
-machines (Perl's malloc is mostly tuned for space).
-
-=back
-
-=head1 New Tests
-
-Many new tests have been added. The most notable is probably the
-lib/1_compile: it is very notable because running it takes quite a
-long time. It test compiles all the Perl modules in the distribution.
-Please be patient.
-
-=head1 Known Problems
-
-Note that unlike other sections in this document (which describe
-changes since 5.7.0) this section is cumulative containing known
-problems for all the 5.7 releases.
-
-=head2 AIX vac 5.0.0.0 May Produce Buggy Code For Perl
-
-The AIX C compiler vac version 5.0.0.0 may produce buggy code,
-resulting in few random tests failing, but when the failing tests
-are run by hand, they succeed. We suggest upgrading to at least
-vac version 5.0.1.0, that has been known to compile Perl correctly.
-"lslpp -L|grep vac.C" will tell you the vac version.
-
-=head2 lib/ftmp-security tests warn 'system possibly insecure'
-
-Don't panic. Read INSTALL 'make test' section instead.
-
-=head2 lib/io_multihomed Fails In LP64-Configured HP-UX
-
-The lib/io_multihomed test may hang in HP-UX if Perl has been
-configured to be 64-bit. Because other 64-bit platforms do not hang in
-this test, HP-UX is suspect. All other tests pass in 64-bit HP-UX. The
-test attempts to create and connect to "multihomed" sockets (sockets
-which have multiple IP addresses).
-
-=head2 Test lib/posix Subtest 9 Fails In LP64-Configured HP-UX
-
-If perl is configured with -Duse64bitall, the successful result of the
-subtest 10 of lib/posix may arrive before the successful result of the
-subtest 9, which confuses the test harness so much that it thinks the
-subtest 9 failed.
-
-=head2 lib/b test 19
-
-The test fails on various platforms (PA64 and IA64 are known), but the
-exact cause is still being investigated.
-
-=head2 Linux With Sfio Fails op/misc Test 48
-
-No known fix.
-
-=head2 sigaction test 13 in VMS
-
-The test is known to fail; whether it's because of VMS of because
-of faulty test is not known.
-
-=head2 sprintf tests 129 and 130
-
-The op/sprintf tests 129 and 130 are known to fail on some platforms.
-Examples include any platform using sfio, and Compaq/Tandem's NonStop-UX.
-The failing platforms do not comply with the ANSI C Standard, line
-19ff on page 134 of ANSI X3.159 1989 to be exact. (They produce
-something else than "1" and "-1" when formatting 0.6 and -0.6 using
-the printf format "%.0f", most often they produce "0" and "-0".)
-
-=head2 Failure of Thread tests
-
-The subtests 19 and 20 of lib/thr5005.t test are known to fail due to
-fundamental problems in the 5.005 threading implementation. These are
-not new failures--Perl 5.005_0x has the same bugs, but didn't have
-these tests. (Note that support for 5.005-style threading remains
-experimental.)
-
-=head2 Localising a Tied Variable Leaks Memory
-
- use Tie::Hash;
- tie my %tie_hash => 'Tie::StdHash';
-
- ...
-
- local($tie_hash{Foo}) = 1; # leaks
-
-Code like the above is known to leak memory every time the local()
-is executed.
-
-=head2 Self-tying of Arrays and Hashes Is Forbidden
-
-Self-tying of arrays and hashes is broken in rather deep and
-hard-to-fix ways. As a stop-gap measure to avoid people from getting
-frustrated at the mysterious results (core dumps, most often) it is
-for now forbidden (you will get a fatal error even from an attempt).
-
-=head2 Building Extensions Can Fail Because Of Largefiles
-
-Some extensions like mod_perl are known to have issues with
-`largefiles', a change brought by Perl 5.6.0 in which file offsets
-default to 64 bits wide, where supported. Modules may fail to compile
-at all or compile and work incorrectly. Currently there is no good
-solution for the problem, but Configure now provides appropriate
-non-largefile ccflags, ldflags, libswanted, and libs in the %Config
-hash (e.g., $Config{ccflags_nolargefiles}) so the extensions that are
-having problems can try configuring themselves without the
-largefileness. This is admittedly not a clean solution, and the
-solution may not even work at all. One potential failure is whether
-one can (or, if one can, whether it's a good idea) link together at
-all binaries with different ideas about file offsets, all this is
-platform-dependent.
-
-=head2 The Compiler Suite Is Still Experimental
-
-The compiler suite is slowly getting better but is nowhere near
-working order yet.
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://bugs.perl.org/ There may also be
-information at http://www.perl.com/perl/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-=head1 SEE ALSO
-
-The F<Changes> file for exhaustive details on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=head1 HISTORY
-
-Written by Jarkko Hietaniemi <F<jhi at iki.fi>>, with many contributions
-from The Perl Porters and Perl Users submitting feedback and patches.
-
-Send omissions or corrections to <F<perlbug at perl.org>>.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl572delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl572delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl572delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,831 +0,0 @@
-=head1 NAME
-
-perl572delta - what's new for perl v5.7.2
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.7.1 release and the
-5.7.2 release.
-
-(To view the differences between the 5.6.0 release and the 5.7.0
-release, see L<perl570delta>. To view the differences between the
-5.7.0 release and the 5.7.1 release, see L<perl571delta>.)
-
-=head1 Security Vulnerability Closed
-
-(This change was already made in 5.7.0 but bears repeating here.)
-
-A security vulnerability affecting all Perl versions prior to 5.6.1
-was found in August 2000. The vulnerability does not affect default
-installations and as far as is known affects only the Linux platform.
-
-You should upgrade your Perl to 5.6.1 as soon as possible. Patches
-for earlier releases exist but using the patches require full
-recompilation from the source code anyway, so 5.6.1 is your best
-choice.
-
-See http://www.cpan.org/src/5.0/sperl-2000-08-05/sperl-2000-08-05.txt
-for more information.
-
-=head1 Incompatible Changes
-
-=head2 64-bit platforms and malloc
-
-If your pointers are 64 bits wide, the Perl malloc is no more being
-used because it simply does not work with 8-byte pointers. Also,
-usually the system malloc on such platforms are much better optimized
-for such large memory models than the Perl malloc.
-
-=head2 AIX Dynaloading
-
-The AIX dynaloading now uses in AIX releases 4.3 and newer the native
-dlopen interface of AIX instead of the old emulated interface. This
-change will probably break backward compatibility with compiled
-modules. The change was made to make Perl more compliant with other
-applications like modperl which are using the AIX native interface.
-
-=head2 Socket Extension Dynamic in VMS
-
-The Socket extension is now dynamically loaded instead of being
-statically built in. This may or may not be a problem with ancient
-TCP/IP stacks of VMS: we do not know since we weren't able to test
-Perl in such configurations.
-
-=head2 Different Definition of the Unicode Character Classes \p{In...}
-
-As suggested by the Unicode consortium, the Unicode character classes
-now prefer I<scripts> as opposed to I<blocks> (as defined by Unicode);
-in Perl, when the C<\p{In....}> and the C<\p{In....}> regular expression
-constructs are used. This has changed the definition of some of those
-character classes.
-
-The difference between scripts and blocks is that scripts are the
-glyphs used by a language or a group of languages, while the blocks
-are more artificial groupings of 256 characters based on the Unicode
-numbering.
-
-In general this change results in more inclusive Unicode character
-classes, but changes to the other direction also do take place:
-for example while the script C<Latin> includes all the Latin
-characters and their various diacritic-adorned versions, it
-does not include the various punctuation or digits (since they
-are not solely C<Latin>).
-
-Changes in the character class semantics may have happened if a script
-and a block happen to have the same name, for example C<Hebrew>.
-In such cases the script wins and C<\p{InHebrew}> now means the script
-definition of Hebrew. The block definition in still available,
-though, by appending C<Block> to the name: C<\p{InHebrewBlock}> means
-what C<\p{InHebrew}> meant in perl 5.6.0. For the full list
-of affected character classes, see L<perlunicode/Blocks>.
-
-=head2 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 C<fields> pragma interface will remain
-available.
-
-The syntaxes C<< @a->[...] >> and C<< @h->{...} >> have now been deprecated.
-
-The suidperl is also considered to be too much a risk to continue
-maintaining and the suidperl code is likely to be removed in a future
-release.
-
-The C<package;> syntax (C<package> without an argument has been
-deprecated. Its semantics were never that clear and its
-implementation even less so. If you have used that feature to
-disallow all but fully qualified variables, C<use strict;> instead.
-
-The chdir(undef) and chdir('') behaviors to match chdir() has been
-deprecated. In future versions, chdir(undef) and chdir('') will
-simply fail.
-
-=head1 Core Enhancements
-
-In general a lot of fixing has happened in the area of Perl's
-understanding of numbers, both integer and floating point. Since in
-many systems the standard number parsing functions like C<strtoul()>
-and C<atof()> seem to have bugs, Perl tries to work around their
-deficiencies. This results hopefully in more accurate numbers.
-
-=over 4
-
-=item *
-
-The rules for allowing underscores (underbars) in numeric constants
-have been relaxed and simplified: now you can have an underscore
-B<between digits>.
-
-=item *
-
-GMAGIC (right-hand side magic) could in many cases such as string
-concatenation be invoked too many times.
-
-=item *
-
-Lexicals I: lexicals outside an eval "" weren't resolved
-correctly inside a subroutine definition inside the eval "" if they
-were not already referenced in the top level of the eval""ed code.
-
-=item *
-
-Lexicals II: lexicals leaked at file scope into subroutines that
-were declared before the lexicals.
-
-=item *
-
-Lvalue subroutines can now return C<undef> in list context.
-
-=item *
-
-The C<op_clear> and C<op_null> are now exported.
-
-=item *
-
-A new special regular expression variable has been introduced:
-C<$^N>, which contains the most-recently closed group (submatch).
-
-=item *
-
-L<utime> now supports C<utime undef, undef, @files> to change the
-file timestamps to the current time.
-
-=item *
-
-The Perl parser has been stress tested using both random input and
-Markov chain input.
-
-=item *
-
-C<eval "v200"> now works.
-
-=item *
-
-VMS now works under PerlIO.
-
-=item *
-
-END blocks are now run even if you exit/die in a BEGIN block.
-The execution of END blocks is now controlled by
-PL_exit_flags & PERL_EXIT_DESTRUCT_END. This enables the new
-behaviour for perl embedders. This will default in 5.10. See
-L<perlembed>.
-
-=back
-
-=head1 Modules and Pragmata
-
-=head2 New Modules and Distributions
-
-=over 4
-
-=item *
-
-L<Attribute::Handlers> - Simpler definition of attribute handlers
-
-=item *
-
-L<ExtUtils::Constant> - generate XS code to import C header constants
-
-=item *
-
-L<I18N::Langinfo> - query locale information
-
-=item *
-
-L<I18N::LangTags> - functions for dealing with RFC3066-style language tags
-
-=item *
-
-L<libnet> - a collection of perl5 modules related to network programming
-
-Perl installation leaves libnet unconfigured, use F<libnetcfg> to configure.
-
-=item *
-
-L<List::Util> - selection of general-utility list subroutines
-
-=item *
-
-L<Locale::Maketext> - framework for localization
-
-=item *
-
-L<Memoize> - Make your functions faster by trading space for time
-
-=item *
-
-L<NEXT> - pseudo-class for method redispatch
-
-=item *
-
-L<Scalar::Util> - selection of general-utility scalar subroutines
-
-=item *
-
-L<Test::More> - yet another framework for writing test scripts
-
-=item *
-
-L<Test::Simple> - Basic utilities for writing tests
-
-=item *
-
-L<Time::HiRes> - high resolution ualarm, usleep, and gettimeofday
-
-=item *
-
-L<Time::Piece> - Object Oriented time objects
-
-(Previously known as L<Time::Object>.)
-
-=item *
-
-L<Time::Seconds> - a simple API to convert seconds to other date values
-
-=item *
-
-L<UnicodeCD> - Unicode Character Database
-
-=back
-
-=head2 Updated And Improved Modules and Pragmata
-
-=over 4
-
-=item *
-
-L<B::Deparse> module has been significantly enhanced. It now
-can deparse almost all of the standard test suite (so that the
-tests still succeed). There is a make target "test.deparse"
-for trying this out.
-
-=item *
-
-L<Class::Struct> now assigns the array/hash element if the accessor
-is called with an array/hash element as the B<sole> argument.
-
-=item *
-
-L<Cwd> extension is now (even) faster.
-
-=item *
-
-L<DB_File> extension has been updated to version 1.77.
-
-=item *
-
-L<Fcntl>, L<Socket>, and L<Sys::Syslog> have been rewritten to use the
-new-style constant dispatch section (see L<ExtUtils::Constant>).
-
-=item *
-
-L<File::Find> is now (again) reentrant. It also has been made
-more portable.
-
-=item *
-
-L<File::Glob> now supports C<GLOB_LIMIT> constant to limit the
-size of the returned list of filenames.
-
-=item *
-
-L<IO::Socket::INET> now supports C<LocalPort> of zero (usually meaning
-that the operating system will make one up.)
-
-=item *
-
-The L<vars> pragma now supports declaring fully qualified variables.
-(Something that C<our()> does not and will not support.)
-
-=back
-
-=head1 Utility Changes
-
-=over 4
-
-=item *
-
-The F<emacs/e2ctags.pl> is now much faster.
-
-=item *
-
-L<h2ph> now supports C trigraphs.
-
-=item *
-
-L<h2xs> uses the new L<ExtUtils::Constant> module which will affect
-newly created extensions that define constants. Since the new code is
-more correct (if you have two constants where the first one is a
-prefix of the second one, the first constant B<never> gets defined),
-less lossy (it uses integers for integer constant, as opposed to the
-old code that used floating point numbers even for integer constants),
-and slightly faster, you might want to consider regenerating your
-extension code (the new scheme makes regenerating easy).
-L<h2xs> now also supports C trigraphs.
-
-=item *
-
-L<libnetcfg> has been added to configure the libnet.
-
-=item *
-
-The F<Pod::Html> (and thusly L<pod2html>) now allows specifying
-a cache directory.
-
-=back
-
-=head1 New Documentation
-
-=over 4
-
-=item *
-
-L<Locale::Maketext::TPJ13> is an article about software localization,
-originally published in The Perl Journal #13, republished here with
-kind permission.
-
-=item *
-
-More README.$PLATFORM files have been converted into pod, which also
-means that they also be installed as perl$PLATFORM documentation
-files. The new files are L<perlapollo>, L<perlbeos>, L<perldgux>,
-L<perlhurd>, L<perlmint>, L<perlnetware>, L<perlplan9>, L<perlqnx>,
-and L<perltru64>.
-
-=item *
-
-The F<Todo> and F<Todo-5.6> files have been merged into L<perltodo>.
-
-=item *
-
-Use of the F<gprof> tool to profile Perl has been documented in
-L<perlhack>. There is a make target "perl.gprof" for generating a
-gprofiled Perl executable.
-
-=back
-
-=head1 Installation and Configuration Improvements
-
-=head2 New Or Improved Platforms
-
-=over 4
-
-=item *
-
-AIX should now work better with gcc, threads, and 64-bitness. Also the
-long doubles support in AIX should be better now. See L<perlaix>.
-
-=item *
-
-AtheOS ( http://www.atheos.cx/ ) is a new platform.
-
-=item *
-
-DG/UX platform now supports the 5.005-style threads. See L<perldgux>.
-
-=item *
-
-DYNIX/ptx platform (a.k.a. dynixptx) is supported at or near osvers 4.5.2.
-
-=item *
-
-Several Mac OS (Classic) portability patches have been applied. We
-hope to get a fully working port by 5.8.0. (The remaining problems
-relate to the changed IO model of Perl.) See L<perlmacos>.
-
-=item *
-
-Mac OS X (or Darwin) should now be able to build Perl even on HFS+
-filesystems. (The case-insensitivity confused the Perl build process.)
-
-=item *
-
-NetWare from Novell is now supported. See L<perlnetware>.
-
-=item *
-
-The Amdahl UTS Unix mainframe platform is now supported.
-
-=back
-
-=head2 Generic Improvements
-
-=over 4
-
-=item *
-
-In AFS installations one can configure the root of the AFS to be
-somewhere else than the default F</afs> by using the Configure
-parameter C<-Dafsroot=/some/where/else>.
-
-=item *
-
-The version of Berkeley DB used when the Perl (and, presumably, the
-DB_File extension) was built is now available as
-C<@Config{qw(db_version_major db_version_minor db_version_patch)}>
-from Perl and as C<DB_VERSION_MAJOR_CFG DB_VERSION_MINOR_CFG
-DB_VERSION_PATCH_CFG> from C.
-
-=item *
-
-The Thread extension is now not built at all under ithreads
-(C<Configure -Duseithreads>) because it wouldn't work anyway (the
-Thread extension requires being Configured with C<-Duse5005threads>).
-
-=item *
-
-The C<B::Deparse> compiler backend has been so significantly improved
-that almost the whole Perl test suite passes after being deparsed. A
-make target has been added to help in further testing: C<make test.deparse>.
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 5
-
-=item *
-
-The autouse pragma didn't work for Multi::Part::Function::Names.
-
-=item *
-
-The behaviour of non-decimal but numeric string constants such as
-"0x23" was platform-dependent: in some platforms that was seen as 35,
-in some as 0, in some as a floating point number (don't ask). This
-was caused by Perl using the operating system libraries in a situation
-where the result of the string to number conversion is undefined: now
-Perl consistently handles such strings as zero in numeric contexts.
-
-=item *
-
-L<dprofpp> -R didn't work.
-
-=item *
-
-PERL5OPT with embedded spaces didn't work.
-
-=item *
-
-L<Sys::Syslog> ignored the C<LOG_AUTH> constant.
-
-=back
-
-=head2 Platform Specific Changes and Fixes
-
-=over 4
-
-=item *
-
-Some versions of glibc have a broken modfl(). This affects builds
-with C<-Duselongdouble>. This version of Perl detects this brokenness
-and has a workaround for it. The glibc release 2.2.2 is known to have
-fixed the modfl() bug.
-
-=back
-
-=head1 New or Changed Diagnostics
-
-=over 4
-
-=item *
-
-In the regular expression diagnostics the C<E<lt>E<lt> HERE> marker
-introduced in 5.7.0 has been changed to be C<E<lt>-- HERE> since too
-many people found the C<E<lt>E<lt>> to be too similar to here-document
-starters.
-
-=item *
-
-If you try to L<perlfunc/pack> a number less than 0 or larger than 255
-using the C<"C"> format you will get an optional warning. Similarly
-for the C<"c"> format and a number less than -128 or more than 127.
-
-=item *
-
-Certain regex modifiers such as C<(?o)> make sense only if applied to
-the entire regex. You will an optional warning if you try to do otherwise.
-
-=item *
-
-Using arrays or hashes as references (e.g. C<< %foo->{bar} >> has been
-deprecated for a while. Now you will get an optional warning.
-
-=back
-
-=head1 Source Code Enhancements
-
-=head2 MAGIC constants
-
-The MAGIC constants (e.g. C<'P'>) have been macrofied
-(e.g. C<PERL_MAGIC_TIED>) for better source code readability
-and maintainability.
-
-=head2 Better commented code
-
-F<perly.c>, F<sv.c>, and F<sv.h> have now been extensively commented.
-
-=head2 Regex pre-/post-compilation items matched up
-
-The regex compiler now maintains a structure that identifies nodes in
-the compiled bytecode with the corresponding syntactic features of the
-original regex expression. The information is attached to the new
-C<offsets> member of the C<struct regexp>. See L<perldebguts> for more
-complete information.
-
-=head2 gcc -Wall
-
-The C code has been made much more C<gcc -Wall> clean. Some warning
-messages still remain, though, so if you are compiling with gcc you
-will see some warnings about dubious practices. The warnings are
-being worked on.
-
-=head1 New Tests
-
-Several new tests have been added, especially for the F<lib> subsection.
-
-The tests are now reported in a different order than in earlier Perls.
-(This happens because the test scripts from under t/lib have been moved
-to be closer to the library/extension they are testing.)
-
-=head1 Known Problems
-
-Note that unlike other sections in this document (which describe
-changes since 5.7.0) this section is cumulative containing known
-problems for all the 5.7 releases.
-
-=head2 AIX
-
-=over 4
-
-=item *
-
-In AIX 4.2 Perl extensions that use C++ functions that use statics
-may have problems in that the statics are not getting initialized.
-In newer AIX releases this has been solved by linking Perl with
-the libC_r library, but unfortunately in AIX 4.2 the said library
-has an obscure bug where the various functions related to time
-(such as time() and gettimeofday()) return broken values, and
-therefore in AIX 4.2 Perl is not linked against the libC_r.
-
-=item *
-
-vac 5.0.0.0 May Produce Buggy Code For Perl
-
-The AIX C compiler vac version 5.0.0.0 may produce buggy code,
-resulting in few random tests failing, but when the failing tests
-are run by hand, they succeed. We suggest upgrading to at least
-vac version 5.0.1.0, that has been known to compile Perl correctly.
-"lslpp -L|grep vac.C" will tell you the vac version.
-
-=back
-
-=head2 Amiga Perl Invoking Mystery
-
-One cannot call Perl using the C<volume:> syntax, that is, C<perl -v>
-works, but for example C<bin:perl -v> doesn't. The exact reason is
-known but the current suspect is the F<ixemul> library.
-
-=head2 lib/ftmp-security tests warn 'system possibly insecure'
-
-Don't panic. Read INSTALL 'make test' section instead.
-
-=head2 Cygwin intermittent failures of lib/Memoize/t/expire_file 11 and 12
-
-The subtests 11 and 12 sometimes fail and sometimes work.
-
-=head2 HP-UX lib/io_multihomed Fails When LP64-Configured
-
-The lib/io_multihomed test may hang in HP-UX if Perl has been
-configured to be 64-bit. Because other 64-bit platforms do not hang in
-this test, HP-UX is suspect. All other tests pass in 64-bit HP-UX. The
-test attempts to create and connect to "multihomed" sockets (sockets
-which have multiple IP addresses).
-
-=head2 HP-UX lib/posix Subtest 9 Fails When LP64-Configured
-
-If perl is configured with -Duse64bitall, the successful result of the
-subtest 10 of lib/posix may arrive before the successful result of the
-subtest 9, which confuses the test harness so much that it thinks the
-subtest 9 failed.
-
-=head2 Linux With Sfio Fails op/misc Test 48
-
-No known fix.
-
-=head2 OS/390
-
-OS/390 has rather many test failures but the situation is actually
-better than it was in 5.6.0, it's just that so many new modules and
-tests have been added.
-
- Failed Test Stat Wstat Total Fail Failed List of Failed
- -----------------------------------------------------------------------------
- ../ext/B/Deparse.t 14 1 7.14% 14
- ../ext/B/Showlex.t 1 1 100.00% 1
- ../ext/Encode/Encode/Tcl.t 610 13 2.13% 592 594 596 598
- 600 602 604-610
- ../ext/IO/lib/IO/t/io_unix.t 113 28928 5 3 60.00% 3-5
- ../ext/POSIX/POSIX.t 29 1 3.45% 14
- ../ext/Storable/t/lock.t 255 65280 5 3 60.00% 3-5
- ../lib/locale.t 129 33024 117 19 16.24% 99-117
- ../lib/warnings.t 434 1 0.23% 75
- ../lib/ExtUtils.t 27 1 3.70% 25
- ../lib/Math/BigInt/t/bigintpm.t 1190 1 0.08% 1145
- ../lib/Unicode/UCD.t 81 48 59.26% 1-16 49-64 66-81
- ../lib/User/pwent.t 9 1 11.11% 4
- op/pat.t 660 6 0.91% 242-243 424-425
- 626-627
- op/split.t 0 9 ?? ?? % ??
- op/taint.t 174 3 1.72% 156 162 168
- op/tr.t 70 3 4.29% 50 58-59
- Failed 16/422 test scripts, 96.21% okay. 105/23251 subtests failed, 99.55% okay.
-
-=head2 op/sprintf tests 129 and 130
-
-The op/sprintf tests 129 and 130 are known to fail on some platforms.
-Examples include any platform using sfio, and Compaq/Tandem's NonStop-UX.
-The failing platforms do not comply with the ANSI C Standard, line
-19ff on page 134 of ANSI X3.159 1989 to be exact. (They produce
-something other than "1" and "-1" when formatting 0.6 and -0.6 using
-the printf format "%.0f", most often they produce "0" and "-0".)
-
-=head2 Failure of Thread tests
-
-B<Note that support for 5.005-style threading remains experimental.>
-
-The following tests are known to fail due to fundamental problems in
-the 5.005 threading implementation. These are not new failures--Perl
-5.005_0x has the same bugs, but didn't have these tests.
-
- lib/autouse.t 4
- t/lib/thr5005.t 19-20
-
-=head2 UNICOS
-
-=over 4
-
-=item *
-
-ext/POSIX/sigaction subtests 6 and 13 may fail.
-
-=item *
-
-lib/ExtUtils may spuriously claim that subtest 28 failed,
-which is interesting since the test only has 27 tests.
-
-=item *
-
-Numerous numerical test failures
-
- op/numconvert 209,210,217,218
- op/override 7
- ext/Time/HiRes/HiRes 9
- lib/Math/BigInt/t/bigintpm 1145
- lib/Math/Trig 25
-
-These tests fail because of yet unresolved floating point inaccuracies.
-
-=back
-
-=head2 UTS
-
-There are a few known test failures, see L<perluts>.
-
-=head2 VMS
-
-Rather many tests are failing in VMS but that actually more tests
-succeed in VMS than they used to, it's just that there are many,
-many more tests than there used to be.
-
-Here are the known failures from some compiler/platform combinations.
-
-DEC C V5.3-006 on OpenVMS VAX V6.2
-
- [-.ext.list.util.t]tainted..............FAILED on test 3
- [-.ext.posix]sigaction..................FAILED on test 7
- [-.ext.time.hires]hires.................FAILED on test 14
- [-.lib.file.find]taint..................FAILED on test 17
- [-.lib.math.bigint.t]bigintpm...........FAILED on test 1183
- [-.lib.test.simple.t]exit...............FAILED on test 1
- [.lib]vmsish............................FAILED on test 13
- [.op]sprintf............................FAILED on test 12
- Failed 8/399 tests, 91.23% okay.
-
-DEC C V6.0-001 on OpenVMS Alpha V7.2-1 and
-Compaq C V6.2-008 on OpenVMS Alpha V7.1
-
- [-.ext.list.util.t]tainted..............FAILED on test 3
- [-.lib.file.find]taint..................FAILED on test 17
- [-.lib.test.simple.t]exit...............FAILED on test 1
- [.lib]vmsish............................FAILED on test 13
- Failed 4/399 tests, 92.48% okay.
-
-Compaq C V6.4-005 on OpenVMS Alpha 7.2.1
-
- [-.ext.b]showlex........................FAILED on test 1
- [-.ext.list.util.t]tainted..............FAILED on test 3
- [-.lib.file.find]taint..................FAILED on test 17
- [-.lib.test.simple.t]exit...............FAILED on test 1
- [.lib]vmsish............................FAILED on test 13
- [.op]misc...............................FAILED on test 49
- Failed 6/401 tests, 92.77% okay.
-
-=head2 Win32
-
-In multi-CPU boxes there are some problems with the I/O buffering:
-some output may appear twice.
-
-=head2 Localising a Tied Variable Leaks Memory
-
- use Tie::Hash;
- tie my %tie_hash => 'Tie::StdHash';
-
- ...
-
- local($tie_hash{Foo}) = 1; # leaks
-
-Code like the above is known to leak memory every time the local()
-is executed.
-
-=head2 Self-tying of Arrays and Hashes Is Forbidden
-
-Self-tying of arrays and hashes is broken in rather deep and
-hard-to-fix ways. As a stop-gap measure to avoid people from getting
-frustrated at the mysterious results (core dumps, most often) it is
-for now forbidden (you will get a fatal error even from an attempt).
-
-=head2 Variable Attributes are not Currently Usable for Tying
-
-This limitation will hopefully be fixed in future. (Subroutine
-attributes work fine for tying, see L<Attribute::Handlers>).
-
-=head2 Building Extensions Can Fail Because Of Largefiles
-
-Some extensions like mod_perl are known to have issues with
-`largefiles', a change brought by Perl 5.6.0 in which file offsets
-default to 64 bits wide, where supported. Modules may fail to compile
-at all or compile and work incorrectly. Currently there is no good
-solution for the problem, but Configure now provides appropriate
-non-largefile ccflags, ldflags, libswanted, and libs in the %Config
-hash (e.g., $Config{ccflags_nolargefiles}) so the extensions that are
-having problems can try configuring themselves without the
-largefileness. This is admittedly not a clean solution, and the
-solution may not even work at all. One potential failure is whether
-one can (or, if one can, whether it's a good idea) link together at
-all binaries with different ideas about file offsets, all this is
-platform-dependent.
-
-=head2 The Compiler Suite Is Still Experimental
-
-The compiler suite is slowly getting better but is nowhere near
-working order yet.
-
-=head2 The Long Double Support is Still Experimental
-
-The ability to configure Perl's numbers to use "long doubles",
-floating point numbers of hopefully better accuracy, is still
-experimental. The implementations of long doubles are not yet
-widespread and the existing implementations are not quite mature
-or standardised, therefore trying to support them is a rare
-and moving target. The gain of more precision may also be offset
-by slowdown in computations (more bits to move around, and the
-operations are more likely to be executed by less optimised
-libraries).
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://bugs.perl.org/ There may also be
-information at http://www.perl.com/perl/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-=head1 SEE ALSO
-
-The F<Changes> file for exhaustive details on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=head1 HISTORY
-
-Written by Jarkko Hietaniemi <F<jhi at iki.fi>>, with many contributions
-from The Perl Porters and Perl Users submitting feedback and patches.
-
-Send omissions or corrections to <F<perlbug at perl.org>>.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl573delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl573delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl573delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,246 +0,0 @@
-=head1 NAME
-
-perl573delta - what's new for perl v5.7.3
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.7.2 release and the
-5.7.3 release.
-
-(To view the differences between the 5.6.0 release and the 5.7.0
-release, see L<perl570delta>. To view the differences between the
-5.7.0 release and the 5.7.1 release, see L<perl571delta>. To view
-the differences between the 5.7.1 release and the 5.7.2 release,
-see L<perl572delta>.)
-
-=head1 Changes
-
-This is just a selected list of some of the more notable changes.
-The numbers refer to the Perl repository change numbers; see
-L<Changes58> (or L<Changes> in Perl 5.8.1). In addition to these
-changes, lots of work took place in integrating threads, PerlIO, and
-Unicode; general code cleanup; and last but not least porting to
-non-Unix lands such as Win32, VMS, Cygwin, DJGPP, VOS, MacOS Classic,
-and EBCDIC.
-
-=over 4
-
-=item 11362
-
-add LC_MESSAGES to POSIX :locale_h export tag
-
-=item 11371
-
-add DEL to [:cntrl:]
-
-=item 11375
-
-make h2ph understand constants like 1234L and 5678LL
-
-=item 11405
-
-Win32: fix bugs in handling of the virtualized environment
-
-=item 11410
-
-fix a bug in the security taint checking of open()
-
-=item 11423
-
-make perl fork() safe even on platforms that don't have pthread_atfork()
-
-=item 11459
-
-make switching optimization and debugging levels during Perl builds
-easier via the OPTIMIZE environment variable
-
-=item 11475
-
-make split()'s unused captures to be undef, not ''
-
-=item 11485
-
-Search::Dict: allow transforming lines before comparing
-
-=item 11490
-
-allow installing extra modules or bundles when building Perl
-
-=item 11516
-
-add -Wall in cflags when compiling with gcc to weed out dubious
-C practices
-
-=item 11541
-
-pluggable optimizer
-
-=item 11549
-
-WinCE: integrate the port
-
-=item 11589
-
-Win32: 4-arg select was broken
-
-=item 11594
-
-introduce the perlivp utility for verifying the Perl installation
-(IVP = Installation Verification Procedure)
-
-=item 11623
-
-rename lib/unicode to lib/unicore to avoid case-insensitivity problems
-with lib/Unicode
-
-=item 111631
-
-remove Time::Piece
-
-=item 11643
-
-document that use utf8 is not the right way most of the time
-
-=item 11656
-
-allow building perl with -DUSE_UTF8_SCRIPTS which makes UTF-8
-the default script encoding (not the default since that would
-break all scripts having legacy eight-bit data in them)
-
-=item 11725
-
-division preserving 64-bit integers
-
-=item 11743
-
-document the coderef-in- at INC feature
-
-=item 11794
-
-modulo (%) preserving 64-bit integers
-
-=item 11825
-
-update to Unicode 3.1.1
-
-=item 11865
-
-add the \[$@%&*] prototype support
-
-=item 11874
-
-oct() and hex() in glorious 64 bit
-
-=item 11877
-
-Class::Struct: allow recursive classes
-
-=item 11993
-
-fix unpack U to be the reverse of pack U
-
-=item 12056
-
-VMS: waitpid enhancements
-
-=item 12180
-
-unpack("Z*Z*", pack("Z*Z*", ..)) was broken
-
-=item 12243
-
-Devel::Peek: display UTF-8 SVs also as \x{...}
-
-=item 12288
-
-Data::Dumper: option to sort hashes
-
-=item 12542
-
-add perlpodspec
-
-=item 12652
-
-threadsafe DynaLoader, re, Opcode, File::Glob, and B
-
-=item 12756
-
-support BeOS better
-
-=item 12874
-
-read-only hashes (user-level interface is Hash::Util)
-
-=item 13162
-
-add Devel::PPPort
-
-=item 13179
-
-add the sort pragma
-
-=item 13326
-
-VMS: fix perl -P
-
-=item 13358
-
-add perlpacktut
-
-=item 13452
-
-SUPER-UX: add hints file
-
-=item 13575
-
-Win32: non-blocking waitpid(-1,WNOHANG)
-
-=item 13684
-
-introduce the -t option for gentler taint checking
-
-=item 14694
-
-add the if pragma
-
-=item 14832
-
-implement IV/UV/NV/long double un/packing with j/J/F/D
-
-=item 14854
-
-document the new taint behaviour of exec LIST and system LIST
-
-=back
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://bugs.perl.org. There may also be
-information at http://www.perl.com/, the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-=head1 SEE ALSO
-
-The F<Changes> file for exhaustive details on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=head1 HISTORY
-
-Written by Jarkko Hietaniemi <F<jhi at iki.fi>>, with many contributions
-from The Perl Porters and Perl Users submitting feedback and patches.
-
-Send omissions or corrections to <F<perlbug at perl.org>>.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl590delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl590delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl590delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1015 +0,0 @@
-=head1 NAME
-
-perl590delta - what is new for perl v5.9.0
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.8.0 release and
-the 5.9.0 release.
-
-=head1 Incompatible Changes
-
-=head2 Hash Randomisation
-
-Mainly due to security reasons, the "random ordering" of hashes
-has been made even more random. Previously while the order of hash
-elements from keys(), values(), and each() was essentially random,
-it was still repeatable. Now, however, the order varies between
-different runs of Perl.
-
-B<Perl has never guaranteed any ordering of the hash keys>, and the
-ordering has already changed several times during the lifetime of
-Perl 5. Also, the ordering of hash keys has always been, and
-continues to be, affected by the insertion order.
-
-The added randomness may affect applications.
-
-One possible scenario is when output of an application has included
-hash data. For example, if you have used the Data::Dumper module to
-dump data into different files, and then compared the files to see
-whether the data has changed, now you will have false positives since
-the order in which hashes are dumped will vary. In general the cure
-is to sort the keys (or the values); in particular for Data::Dumper to
-use the C<Sortkeys> option. If some particular order is really
-important, use tied hashes: for example the Tie::IxHash module
-which by default preserves the order in which the hash elements
-were added.
-
-More subtle problem is reliance on the order of "global destruction".
-That is what happens at the end of execution: Perl destroys all data
-structures, including user data. If your destructors (the DESTROY
-subroutines) have assumed any particular ordering to the global
-destruction, there might be problems ahead. For example, in a
-destructor of one object you cannot assume that objects of any other
-class are still available, unless you hold a reference to them.
-If the environment variable PERL_DESTRUCT_LEVEL is set to a non-zero
-value, or if Perl is exiting a spawned thread, it will also destruct
-the ordinary references and the symbol tables that are no longer in use.
-You can't call a class method or an ordinary function on a class that
-has been collected that way.
-
-The hash randomisation is certain to reveal hidden assumptions about
-some particular ordering of hash elements, and outright bugs: it
-revealed a few bugs in the Perl core and core modules.
-
-To disable the hash randomisation in runtime, set the environment
-variable PERL_HASH_SEED to 0 (zero) before running Perl (for more
-information see L<perlrun/PERL_HASH_SEED>), or to disable the feature
-completely in compile time, compile with C<-DNO_HASH_SEED> (see F<INSTALL>).
-
-See L<perlsec/"Algorithmic Complexity Attacks"> for the original
-rationale behind this change.
-
-=head2 UTF-8 On Filehandles No Longer Activated By Locale
-
-In Perl 5.8.0 all filehandles, including the standard filehandles,
-were implicitly set to be in Unicode UTF-8 if the locale settings
-indicated the use of UTF-8. This feature caused too many problems,
-so the feature was turned off and redesigned: see L</"Core Enhancements">.
-
-=head2 Single-number v-strings are no longer v-strings before "=>"
-
-The version strings or v-strings (see L<perldata/"Version Strings">)
-feature introduced in Perl 5.6.0 has been a source of some confusion--
-especially when the user did not want to use it, but Perl thought it
-knew better. Especially troublesome has been the feature that before
-a "=>" a version string (a "v" followed by digits) has been interpreted
-as a v-string instead of a string literal. In other words:
-
- %h = ( v65 => 42 );
-
-has meant since Perl 5.6.0
-
- %h = ( 'A' => 42 );
-
-(at least in platforms of ASCII progeny) Perl 5.8.1 restored the
-more natural interpretation
-
- %h = ( 'v65' => 42 );
-
-The multi-number v-strings like v65.66 and 65.66.67 still continue to
-be v-strings in Perl 5.8.
-
-=head2 (Win32) The -C Switch Has Been Repurposed
-
-The -C switch has changed in an incompatible way. The old semantics
-of this switch only made sense in Win32 and only in the "use utf8"
-universe in 5.6.x releases, and do not make sense for the Unicode
-implementation in 5.8.0. Since this switch could not have been used
-by anyone, it has been repurposed. The behavior that this switch
-enabled in 5.6.x releases may be supported in a transparent,
-data-dependent fashion in a future release.
-
-For the new life of this switch, see L<"UTF-8 no longer default under
-UTF-8 locales">, and L<perlrun/-C>.
-
-=head2 (Win32) The /d Switch Of cmd.exe
-
-Since version 5.8.1, perl uses the /d switch when running the cmd.exe shell
-internally for system(), backticks, and when opening pipes to external
-programs. The extra switch disables the execution of AutoRun commands
-from the registry, which is generally considered undesirable when
-running external programs. If you wish to retain compatibility with
-the older behavior, set PERL5SHELL in your environment to C<cmd /x/c>.
-
-=head2 The C<$*> variable has been removed
-
-C<$*>, which was deprecated in favor of the C</s> and C</m> regexp
-modifiers, has been removed.
-
-=head1 Core Enhancements
-
-=head2 Assertions
-
-Perl 5.9.0 has experimental support for assertions. Note that the user
-interface is not fully stabilized yet, and it may change until the 5.10.0
-release. A new command-line switch, B<-A>, is used to activate
-assertions, which are declared with the C<assertions> pragma. See
-L<assertions>.
-
-=head2 Defined-or operators
-
-A new operator C<//> (defined-or) has been implemented.
-The following statement:
-
- $a // $b
-
-is merely equivalent to
-
- defined $a ? $a : $b
-
-and
-
- $c //= $d;
-
-can be used instead of
-
- $c = $d unless defined $c;
-
-This operator has the same precedence and associativity as C<||>.
-It has a low-precedence counterpart, C<err>, which has the same precedence
-and associativity as C<or>. Special care has been taken to ensure that
-those operators Do What You Mean while not breaking old code, but some
-edge cases involving the empty regular expression may now parse
-differently. See L<perlop> for details.
-
-=head2 UTF-8 no longer default under UTF-8 locales
-
-In Perl 5.8.0 many Unicode features were introduced. One of them
-was found to be of more nuisance than benefit: the automagic
-(and silent) "UTF-8-ification" of filehandles, including the
-standard filehandles, if the user's locale settings indicated
-use of UTF-8.
-
-For example, if you had C<en_US.UTF-8> as your locale, your STDIN and
-STDOUT were automatically "UTF-8", in other words an implicit
-binmode(..., ":utf8") was made. This meant that trying to print, say,
-chr(0xff), ended up printing the bytes 0xc3 0xbf. Hardly what
-you had in mind unless you were aware of this feature of Perl 5.8.0.
-The problem is that the vast majority of people weren't: for example
-in RedHat releases 8 and 9 the B<default> locale setting is UTF-8, so
-all RedHat users got UTF-8 filehandles, whether they wanted it or not.
-The pain was intensified by the Unicode implementation of Perl 5.8.0
-(still) having nasty bugs, especially related to the use of s/// and
-tr///. (Bugs that have been fixed in 5.8.1)
-
-Therefore a decision was made to backtrack the feature and change it
-from implicit silent default to explicit conscious option. The new
-Perl command line option C<-C> and its counterpart environment
-variable PERL_UNICODE can now be used to control how Perl and Unicode
-interact at interfaces like I/O and for example the command line
-arguments. See L<perlrun/-C> and L<perlrun/PERL_UNICODE> for more
-information.
-
-=head2 Unsafe signals again available
-
-In Perl 5.8.0 the so-called "safe signals" were introduced. This
-means that Perl no longer handles signals immediately but instead
-"between opcodes", when it is safe to do so. The earlier immediate
-handling easily could corrupt the internal state of Perl, resulting
-in mysterious crashes.
-
-However, the new safer model has its problems too. Because now an
-opcode, a basic unit of Perl execution, is never interrupted but
-instead let to run to completion, certain operations that can take a
-long time now really do take a long time. For example, certain
-network operations have their own blocking and timeout mechanisms, and
-being able to interrupt them immediately would be nice.
-
-Therefore perl 5.8.1 introduced a "backdoor" to restore the pre-5.8.0
-(pre-5.7.3, really) signal behaviour. Just set the environment variable
-PERL_SIGNALS to C<unsafe>, and the old immediate (and unsafe)
-signal handling behaviour returns. See L<perlrun/PERL_SIGNALS>
-and L<perlipc/"Deferred Signals (Safe Signals)">.
-
-In completely unrelated news, you can now use safe signals with
-POSIX::SigAction. See L<POSIX/POSIX::SigAction>.
-
-=head2 Tied Arrays with Negative Array Indices
-
-Formerly, the indices passed to C<FETCH>, C<STORE>, C<EXISTS>, and
-C<DELETE> methods in tied array class were always non-negative. If
-the actual argument was negative, Perl would call FETCHSIZE implicitly
-and add the result to the index before passing the result to the tied
-array method. This behaviour is now optional. If the tied array class
-contains a package variable named C<$NEGATIVE_INDICES> which is set to
-a true value, negative values will be passed to C<FETCH>, C<STORE>,
-C<EXISTS>, and C<DELETE> unchanged.
-
-=head2 local ${$x}
-
-The syntaxes
-
- local ${$x}
- local @{$x}
- local %{$x}
-
-now do localise variables, given that the $x is a valid variable name.
-
-=head2 Unicode Character Database 4.0.0
-
-The copy of the Unicode Character Database included in Perl 5.8 has
-been updated to 4.0.0 from 3.2.0. This means for example that the
-Unicode character properties are as in Unicode 4.0.0.
-
-=head2 Miscellaneous Enhancements
-
-C<unpack()> now defaults to unpacking the C<$_>.
-
-C<map> in void context is no longer expensive. C<map> is now context
-aware, and will not construct a list if called in void context.
-
-If a socket gets closed by the server while printing to it, the client
-now gets a SIGPIPE. While this new feature was not planned, it fell
-naturally out of PerlIO changes, and is to be considered an accidental
-feature.
-
-PerlIO::get_layers(FH) returns the names of the PerlIO layers
-active on a filehandle.
-
-PerlIO::via layers can now have an optional UTF8 method to
-indicate whether the layer wants to "auto-:utf8" the stream.
-
-utf8::is_utf8() has been added as a quick way to test whether
-a scalar is encoded internally in UTF-8 (Unicode).
-
-=head1 Modules and Pragmata
-
-=head2 Updated Modules And Pragmata
-
-The following modules and pragmata have been updated since Perl 5.8.0:
-
-=over 4
-
-=item base
-
-=item B::Bytecode
-
-In much better shape than it used to be. Still far from perfect, but
-maybe worth a try.
-
-=item B::Concise
-
-=item B::Deparse
-
-=item Benchmark
-
-An optional feature, C<:hireswallclock>, now allows for high
-resolution wall clock times (uses Time::HiRes).
-
-=item ByteLoader
-
-See B::Bytecode.
-
-=item bytes
-
-Now has bytes::substr.
-
-=item CGI
-
-=item charnames
-
-One can now have custom character name aliases.
-
-=item CPAN
-
-There is now a simple command line frontend to the CPAN.pm
-module called F<cpan>.
-
-=item Data::Dumper
-
-A new option, Pair, allows choosing the separator between hash keys
-and values.
-
-=item DB_File
-
-=item Devel::PPPort
-
-=item Digest::MD5
-
-=item Encode
-
-Significant updates on the encoding pragma functionality
-(tr/// and the DATA filehandle, formats).
-
-If a filehandle has been marked as to have an encoding, unmappable
-characters are detected already during input, not later (when the
-corrupted data is being used).
-
-The ISO 8859-6 conversion table has been corrected (the 0x30..0x39
-erroneously mapped to U+0660..U+0669, instead of U+0030..U+0039). The
-GSM 03.38 conversion did not handle escape sequences correctly. The
-UTF-7 encoding has been added (making Encode feature-complete with
-Unicode::String).
-
-=item fields
-
-=item libnet
-
-=item Math::BigInt
-
-A lot of bugs have been fixed since v1.60, the version included in Perl
-v5.8.0. Especially noteworthy are the bug in Calc that caused div and mod to
-fail for some large values, and the fixes to the handling of bad inputs.
-
-Some new features were added, e.g. the broot() method, you can now pass
-parameters to config() to change some settings at runtime, and it is now
-possible to trap the creation of NaN and infinity.
-
-As usual, some optimizations took place and made the math overall a tad
-faster. In some cases, quite a lot faster, actually. Especially alternative
-libraries like Math::BigInt::GMP benefit from this. In addition, a lot of the
-quite clunky routines like fsqrt() and flog() are now much much faster.
-
-=item MIME::Base64
-
-=item NEXT
-
-Diamond inheritance now works.
-
-=item Net::Ping
-
-=item PerlIO::scalar
-
-Reading from non-string scalars (like the special variables, see
-L<perlvar>) now works.
-
-=item podlators
-
-=item Pod::LaTeX
-
-=item PodParsers
-
-=item Pod::Perldoc
-
-Complete rewrite. As a side-effect, no longer refuses to startup when
-run by root.
-
-=item Scalar::Util
-
-New utilities: refaddr, isvstring, looks_like_number, set_prototype.
-
-=item Storable
-
-Can now store code references (via B::Deparse, so not foolproof).
-
-=item strict
-
-Earlier versions of the strict pragma did not check the parameters
-implicitly passed to its "import" (use) and "unimport" (no) routine.
-This caused the false idiom such as:
-
- use strict qw(@ISA);
- @ISA = qw(Foo);
-
-This however (probably) raised the false expectation that the strict
-refs, vars and subs were being enforced (and that @ISA was somehow
-"declared"). But the strict refs, vars, and subs are B<not> enforced
-when using this false idiom.
-
-Starting from Perl 5.8.1, the above B<will> cause an error to be
-raised. This may cause programs which used to execute seemingly
-correctly without warnings and errors to fail when run under 5.8.1.
-This happens because
-
- use strict qw(@ISA);
-
-will now fail with the error:
-
- Unknown 'strict' tag(s) '@ISA'
-
-The remedy to this problem is to replace this code with the correct idiom:
-
- use strict;
- use vars qw(@ISA);
- @ISA = qw(Foo);
-
-=item Term::ANSIcolor
-
-=item Test::Harness
-
-Now much more picky about extra or missing output from test scripts.
-
-=item Test::More
-
-=item Test::Simple
-
-=item Text::Balanced
-
-=item Time::HiRes
-
-Use of nanosleep(), if available, allows mixing subsecond sleeps with
-alarms.
-
-=item threads
-
-Several fixes, for example for join() problems and memory
-leaks. In some platforms (like Linux) that use glibc the minimum memory
-footprint of one ithread has been reduced by several hundred kilobytes.
-
-=item threads::shared
-
-Many memory leaks have been fixed.
-
-=item Unicode::Collate
-
-=item Unicode::Normalize
-
-=item Win32::GetFolderPath
-
-=item Win32::GetOSVersion
-
-Now returns extra information.
-
-=back
-
-=head1 Utility Changes
-
-The C<h2xs> utility now produces a more modern layout:
-F<Foo-Bar/lib/Foo/Bar.pm> instead of F<Foo/Bar/Bar.pm>.
-Also, the boilerplate test is now called F<t/Foo-Bar.t>
-instead of F<t/1.t>.
-
-The Perl debugger (F<lib/perl5db.pl>) has now been extensively
-documented and bugs found while documenting have been fixed.
-
-C<perldoc> has been rewritten from scratch to be more robust and
-feature rich.
-
-C<perlcc -B> works now at least somewhat better, while C<perlcc -c>
-is rather more broken. (The Perl compiler suite as a whole continues
-to be experimental.)
-
-=head1 New Documentation
-
-perl573delta has been added to list the differences between the
-(now quite obsolete) development releases 5.7.2 and 5.7.3.
-
-perl58delta and perl581delta have been added: these are the perldeltas
-of 5.8.0 and 5.8.1, detailing the differences respectively between
-5.6.0 and 5.8.0, and between 5.8.0 and 5.8.1.
-
-perlartistic has been added: it is the Artistic License in pod format,
-making it easier for modules to refer to it.
-
-perlcheat has been added: it is a Perl cheat sheet.
-
-perlgpl has been added: it is the GNU General Public License in pod
-format, making it easier for modules to refer to it.
-
-perlmacosx has been added to tell about the installation and use
-of Perl in Mac OS X.
-
-perlos400 has been added to tell about the installation and use
-of Perl in OS/400 PASE.
-
-perlreref has been added: it is a regular expressions quick reference.
-
-=head1 Installation and Configuration Improvements
-
-The Unix standard Perl location, F</usr/bin/perl>, is no longer
-overwritten by default if it exists. This change was very prudent
-because so many Unix vendors already provide a F</usr/bin/perl>,
-but simultaneously many system utilities may depend on that
-exact version of Perl, so better not to overwrite it.
-
-One can now specify installation directories for site and vendor man
-and HTML pages, and site and vendor scripts. See F<INSTALL>.
-
-One can now specify a destination directory for Perl installation
-by specifying the DESTDIR variable for C<make install>. (This feature
-is slightly different from the previous C<Configure -Dinstallprefix=...>.)
-See F<INSTALL>.
-
-gcc versions 3.x introduced a new warning that caused a lot of noise
-during Perl compilation: C<gcc -Ialreadyknowndirectory (warning:
-changing search order)>. This warning has now been avoided by
-Configure weeding out such directories before the compilation.
-
-One can now build subsets of Perl core modules by using the
-Configure flags C<-Dnoextensions=...> and C<-Donlyextensions=...>,
-see F<INSTALL>.
-
-=head2 Platform-specific enhancements
-
-In Cygwin Perl can now be built with threads (C<Configure -Duseithreads>).
-This works with both Cygwin 1.3.22 and Cygwin 1.5.3.
-
-In newer FreeBSD releases Perl 5.8.0 compilation failed because of
-trying to use F<malloc.h>, which in FreeBSD is just a dummy file, and
-a fatal error to even try to use. Now F<malloc.h> is not used.
-
-Perl is now known to build also in Hitachi HI-UXMPP.
-
-Perl is now known to build again in LynxOS.
-
-Mac OS X now installs with Perl version number embedded in
-installation directory names for easier upgrading of user-compiled
-Perl, and the installation directories in general are more standard.
-In other words, the default installation no longer breaks the
-Apple-provided Perl. On the other hand, with C<Configure -Dprefix=/usr>
-you can now really replace the Apple-supplied Perl (B<please be careful>).
-
-Mac OS X now builds Perl statically by default. This change was done
-mainly for faster startup times. The Apple-provided Perl is still
-dynamically linked and shared, and you can enable the sharedness for
-your own Perl builds by C<Configure -Duseshrplib>.
-
-Perl has been ported to IBM's OS/400 PASE environment. The best way
-to build a Perl for PASE is to use an AIX host as a cross-compilation
-environment. See README.os400.
-
-Yet another cross-compilation option has been added: now Perl builds
-on OpenZaurus, an Linux distribution based on Mandrake + Embedix for
-the Sharp Zaurus PDA. See the Cross/README file.
-
-Tru64 when using gcc 3 drops the optimisation for F<toke.c> to C<-O2>
-because of gigantic memory use with the default C<-O3>.
-
-Tru64 can now build Perl with the newer Berkeley DBs.
-
-Building Perl on WinCE has been much enhanced, see F<README.ce>
-and F<README.perlce>.
-
-=head1 Selected Bug Fixes
-
-=head2 Closures, eval and lexicals
-
-There have been many fixes in the area of anonymous subs, lexicals and
-closures. Although this means that Perl is now more "correct", it is
-possible that some existing code will break that happens to rely on
-the faulty behaviour. In practice this is unlikely unless your code
-contains a very complex nesting of anonymous subs, evals and lexicals.
-
-=head2 Generic fixes
-
-If an input filehandle is marked C<:utf8> and Perl sees illegal UTF-8
-coming in when doing C<< <FH> >>, if warnings are enabled a warning is
-immediately given - instead of being silent about it and Perl being
-unhappy about the broken data later. (The C<:encoding(utf8)> layer
-also works the same way.)
-
-binmode(SOCKET, ":utf8") only worked on the input side, not on the
-output side of the socket. Now it works both ways.
-
-For threaded Perls certain system database functions like getpwent()
-and getgrent() now grow their result buffer dynamically, instead of
-failing. This means that at sites with lots of users and groups the
-functions no longer fail by returning only partial results.
-
-Perl 5.8.0 had accidentally broken the capability for users
-to define their own uppercase<->lowercase Unicode mappings
-(as advertised by the Camel). This feature has been fixed and
-is also documented better.
-
-In 5.8.0 this
-
- $some_unicode .= <FH>;
-
-didn't work correctly but instead corrupted the data. This has now
-been fixed.
-
-Tied methods like FETCH etc. may now safely access tied values, i.e.
-resulting in a recursive call to FETCH etc. Remember to break the
-recursion, though.
-
-At startup Perl blocks the SIGFPE signal away since there isn't much
-Perl can do about it. Previously this blocking was in effect also for
-programs executed from within Perl. Now Perl restores the original
-SIGFPE handling routine, whatever it was, before running external
-programs.
-
-Linenumbers in Perl scripts may now be greater than 65536, or 2**16.
-(Perl scripts have always been able to be larger than that, it's just
-that the linenumber for reported errors and warnings have "wrapped
-around".) While scripts that large usually indicate a need to rethink
-your code a bit, such Perl scripts do exist, for example as results
-from generated code. Now linenumbers can go all the way to
-4294967296, or 2**32.
-
-=head2 Platform-specific fixes
-
-Linux
-
-=over 4
-
-=item *
-
-Setting $0 works again (with certain limitations that
-Perl cannot do much about: see L<perlvar/$0>)
-
-=back
-
-HP-UX
-
-=over 4
-
-=item *
-
-Setting $0 now works.
-
-=back
-
-VMS
-
-=over 4
-
-=item *
-
-Configuration now tests for the presence of C<poll()>, and IO::Poll
-now uses the vendor-supplied function if detected.
-
-=item *
-
-A rare access violation at Perl start-up could occur if the Perl image was
-installed with privileges or if there was an identifier with the
-subsystem attribute set in the process's rightslist. Either of these
-circumstances triggered tainting code that contained a pointer bug.
-The faulty pointer arithmetic has been fixed.
-
-=item *
-
-The length limit on values (not keys) in the %ENV hash has been raised
-from 255 bytes to 32640 bytes (except when the PERL_ENV_TABLES setting
-overrides the default use of logical names for %ENV). If it is
-necessary to access these long values from outside Perl, be aware that
-they are implemented using search list logical names that store the
-value in pieces, each 255-byte piece (up to 128 of them) being an
-element in the search list. When doing a lookup in %ENV from within
-Perl, the elements are combined into a single value. The existing
-VMS-specific ability to access individual elements of a search list
-logical name via the $ENV{'foo;N'} syntax (where N is the search list
-index) is unimpaired.
-
-=item *
-
-The piping implementation now uses local rather than global DCL
-symbols for inter-process communication.
-
-=item *
-
-File::Find could become confused when navigating to a relative
-directory whose name collided with a logical name. This problem has
-been corrected by adding directory syntax to relative path names, thus
-preventing logical name translation.
-
-=back
-
-Win32
-
-=over 4
-
-=item *
-
-A memory leak in the fork() emulation has been fixed.
-
-=item *
-
-The return value of the ioctl() built-in function was accidentally
-broken in 5.8.0. This has been corrected.
-
-=item *
-
-The internal message loop executed by perl during blocking operations
-sometimes interfered with messages that were external to Perl.
-This often resulted in blocking operations terminating prematurely or
-returning incorrect results, when Perl was executing under environments
-that could generate Windows messages. This has been corrected.
-
-=item *
-
-Pipes and sockets are now automatically in binary mode.
-
-=item *
-
-The four-argument form of select() did not preserve $! (errno) properly
-when there were errors in the underlying call. This is now fixed.
-
-=item *
-
-The "CR CR LF" problem of has been fixed, binmode(FH, ":crlf")
-is now effectively a no-op.
-
-=back
-
-=head1 New or Changed Diagnostics
-
-All the warnings related to pack() and unpack() were made more
-informative and consistent.
-
-=head2 Changed "A thread exited while %d threads were running"
-
-The old version
-
- A thread exited while %d other threads were still running
-
-was misleading because the "other" included also the thread giving
-the warning.
-
-=head2 Removed "Attempt to clear a restricted hash"
-
-It is not illegal to clear a restricted hash, so the warning
-was removed.
-
-=head2 New "Illegal declaration of anonymous subroutine"
-
-You must specify the block of code for C<sub>.
-
-=head2 Changed "Invalid range "%s" in transliteration operator"
-
-The old version
-
- Invalid [] range "%s" in transliteration operator
-
-was simply wrong because there are no "[] ranges" in tr///.
-
-=head2 New "Missing control char name in \c"
-
-Self-explanatory.
-
-=head2 New "Newline in left-justified string for %s"
-
-The padding spaces would appear after the newline, which is
-probably not what you had in mind.
-
-=head2 New "Possible precedence problem on bitwise %c operator"
-
-If you think this
-
- $x & $y == 0
-
-tests whether the bitwise AND of $x and $y is zero,
-you will like this warning.
-
-=head2 New "read() on %s filehandle %s"
-
-You cannot read() (or sysread()) from a closed or unopened filehandle.
-
-=head2 New "Tied variable freed while still in use"
-
-Something pulled the plug on a live tied variable, Perl plays
-safe by bailing out.
-
-=head2 New "To%s: illegal mapping '%s'"
-
-An illegal user-defined Unicode casemapping was specified.
-
-=head2 New "Use of freed value in iteration"
-
-Something modified the values being iterated over. This is not good.
-
-=head1 Changed Internals
-
-These news matter to you only if you either write XS code or like to
-know about or hack Perl internals (using Devel::Peek or any of the
-C<B::> modules counts), or like to run Perl with the C<-D> option.
-
-The embedding examples of L<perlembed> have been reviewed to be
-up to date and consistent: for example, the correct use of
-PERL_SYS_INIT3() and PERL_SYS_TERM().
-
-Extensive reworking of the pad code (the code responsible
-for lexical variables) has been conducted by Dave Mitchell.
-
-Extensive work on the v-strings by John Peacock.
-
-UTF-8 length and position cache: to speed up the handling of Unicode
-(UTF-8) scalars, a cache was introduced. Potential problems exist if
-an extension bypasses the official APIs and directly modifies the PV
-of an SV: the UTF-8 cache does not get cleared as it should.
-
-APIs obsoleted in Perl 5.8.0, like sv_2pv, sv_catpvn, sv_catsv,
-sv_setsv, are again available.
-
-Certain Perl core C APIs like cxinc and regatom are no longer
-available at all to code outside the Perl core of the Perl core
-extensions. This is intentional. They never should have been
-available with the shorter names, and if you application depends on
-them, you should (be ashamed and) contact perl5-porters to discuss
-what are the proper APIs.
-
-Certain Perl core C APIs like C<Perl_list> are no longer available
-without their C<Perl_> prefix. If your XS module stops working
-because some functions cannot be found, in many cases a simple fix is
-to add the C<Perl_> prefix to the function and the thread context
-C<aTHX_> as the first argument of the function call. This is also how
-it should always have been done: letting the Perl_-less forms to leak
-from the core was an accident. For cleaner embedding you can also
-force this for all APIs by defining at compile time the cpp define
-PERL_NO_SHORT_NAMES.
-
-Perl_save_bool() has been added.
-
-Regexp objects (those created with C<qr>) now have S-magic rather than
-R-magic. This fixed regexps of the form /...(??{...;$x})/ to no
-longer ignore changes made to $x. The S-magic avoids dropping
-the caching optimization and making (??{...}) constructs obscenely
-slow (and consequently useless). See also L<perlguts/"Magic Variables">.
-Regexp::Copy was affected by this change.
-
-The Perl internal debugging macros DEBUG() and DEB() have been renamed
-to PERL_DEBUG() and PERL_DEB() to avoid namespace conflicts.
-
-C<-DL> removed (the leaktest had been broken and unsupported for years,
-use alternative debugging mallocs or tools like valgrind and Purify).
-
-Verbose modifier C<v> added for C<-DXv> and C<-Dsv>, see L<perlrun>.
-
-=head1 New Tests
-
-In Perl 5.8.0 there were about 69000 separate tests in about 700 test files,
-in Perl 5.9.0 there are about 77000 separate tests in about 780 test files.
-The exact numbers depend on the Perl configuration and on the operating
-system platform.
-
-=head1 Known Problems
-
-The hash randomisation mentioned in L</Incompatible Changes> is definitely
-problematic: it will wake dormant bugs and shake out bad assumptions.
-
-Many of the rarer platforms that worked 100% or pretty close to it
-with perl 5.8.0 have been left a little bit untended since their
-maintainers have been otherwise busy lately, and therefore there will
-be more failures on those platforms. Such platforms include Mac OS
-Classic, IBM z/OS (and other EBCDIC platforms), and NetWare. The most
-common Perl platforms (Unix and Unix-like, Microsoft platforms, and
-VMS) have large enough testing and expert population that they are
-doing well.
-
-=head2 Tied hashes in scalar context
-
-Tied hashes do not currently return anything useful in scalar context,
-for example when used as boolean tests:
-
- if (%tied_hash) { ... }
-
-The current nonsensical behaviour is always to return false,
-regardless of whether the hash is empty or has elements.
-
-The root cause is that there is no interface for the implementors of
-tied hashes to implement the behaviour of a hash in scalar context.
-
-=head2 Net::Ping 450_service and 510_ping_udp failures
-
-The subtests 9 and 18 of lib/Net/Ping/t/450_service.t, and the
-subtest 2 of lib/Net/Ping/t/510_ping_udp.t might fail if you have
-an unusual networking setup. For example in the latter case the
-test is trying to send a UDP ping to the IP address 127.0.0.1.
-
-=head2 B::C
-
-The C-generating compiler backend B::C (the frontend being
-C<perlcc -c>) is even more broken than it used to be because of
-the extensive lexical variable changes. (The good news is that
-B::Bytecode and ByteLoader are better than they used to be.)
-
-=head1 Platform Specific Problems
-
-=head2 EBCDIC Platforms
-
-IBM z/OS and other EBCDIC platforms continue to be problematic
-regarding Unicode support. Many Unicode tests are skipped when
-they really should be fixed.
-
-=head2 Cygwin 1.5 problems
-
-In Cygwin 1.5 the F<io/tell> and F<op/sysio> tests have failures for
-some yet unknown reason. In 1.5.5 the threads tests stress_cv,
-stress_re, and stress_string are failing unless the environment
-variable PERLIO is set to "perlio" (which makes also the io/tell
-failure go away).
-
-Perl 5.8.1 does build and work well with Cygwin 1.3: with (uname -a)
-C<CYGWIN_NT-5.0 ... 1.3.22(0.78/3/2) 2003-03-18 09:20 i686 ...>
-a 100% "make test" was achieved with C<Configure -des -Duseithreads>.
-
-=head2 HP-UX: HP cc warnings about sendfile and sendpath
-
-With certain HP C compiler releases (e.g. B.11.11.02) you will
-get many warnings like this (lines wrapped for easier reading):
-
- cc: "/usr/include/sys/socket.h", line 504: warning 562:
- Redeclaration of "sendfile" with a different storage class specifier:
- "sendfile" will have internal linkage.
- cc: "/usr/include/sys/socket.h", line 505: warning 562:
- Redeclaration of "sendpath" with a different storage class specifier:
- "sendpath" will have internal linkage.
-
-The warnings show up both during the build of Perl and during certain
-lib/ExtUtils tests that invoke the C compiler. The warning, however,
-is not serious and can be ignored.
-
-=head2 IRIX: t/uni/tr_7jis.t falsely failing
-
-The test t/uni/tr_7jis.t is known to report failure under 'make test'
-or the test harness with certain releases of IRIX (at least IRIX 6.5
-and MIPSpro Compilers Version 7.3.1.1m), but if run manually the test
-fully passes.
-
-=head2 Mac OS X: no usemymalloc
-
-The Perl malloc (C<-Dusemymalloc>) does not work at all in Mac OS X.
-This is not that serious, though, since the native malloc works just
-fine.
-
-=head2 Tru64: No threaded builds with GNU cc (gcc)
-
-In the latest Tru64 releases (e.g. v5.1B or later) gcc cannot be used
-to compile a threaded Perl (-Duseithreads) because the system
-C<< <pthread.h> >> file doesn't know about gcc.
-
-=head2 Win32: sysopen, sysread, syswrite
-
-As of the 5.8.0 release, sysopen()/sysread()/syswrite() do not behave
-like they used to in 5.6.1 and earlier with respect to "text" mode.
-These built-ins now always operate in "binary" mode (even if sysopen()
-was passed the O_TEXT flag, or if binmode() was used on the file
-handle). Note that this issue should only make a difference for disk
-files, as sockets and pipes have always been in "binary" mode in the
-Windows port. As this behavior is currently considered a bug,
-compatible behavior may be re-introduced in a future release. Until
-then, the use of sysopen(), sysread() and syswrite() is not supported
-for "text" mode operations.
-
-=head1 TODO
-
-Here are some things that are planned for perl 5.10.0 :
-
-=over 4
-
-=item *
-
-Various Copy-On-Write techniques will be investigated in hopes
-of speeding up Perl.
-
-=item *
-
-CPANPLUS, Inline, and Module::Build will become core modules.
-
-=item *
-
-The ability to write true lexically scoped pragmas will be introduced,
-perhaps via a C<pragma> pragma.
-
-=item *
-
-Work will continue on the bytecompiler and byteloader.
-
-=item *
-
-v-strings as they currently exist are scheduled to be deprecated. The
-v-less form (1.2.3) will become a "version object" when used with C<use>,
-C<require>, and C<$VERSION>. $^V will also be a "version object" so the
-printf("%vd",...) construct will no longer be needed. The v-ful version
-(v1.2.3) will become obsolete. The equivalence of strings and v-strings (e.g.
-that currently 5.8.0 is equal to "\5\8\0") will go away. B<There may be no
-deprecation warning for v-strings>, though: it is quite hard to detect when
-v-strings are being used safely, and when they are not.
-
-=back
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at F<http://bugs.perl.org/>. There may also be
-information at F<http://www.perl.com/>, the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team. You can browse and search
-the Perl 5 bugs at F<http://bugs.perl.org/>.
-
-=head1 SEE ALSO
-
-The F<Changes> file for exhaustive details on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl591delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl591delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl591delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,323 +0,0 @@
-=head1 NAME
-
-perl591delta - what is new for perl v5.9.1
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.9.0 and the 5.9.1
-development releases. See L<perl590delta> for the differences between
-5.8.0 and 5.9.0.
-
-=head1 Incompatible Changes
-
-=head2 substr() lvalues are no longer fixed-length
-
-The lvalues returned by the three argument form of substr() used to be a
-"fixed length window" on the original string. In some cases this could
-cause surprising action at distance or other undefined behaviour. Now the
-length of the window adjusts itself to the length of the string assigned to
-it.
-
-=head2 The C<:unique> attribute is only meaningful for globals
-
-Now applying C<:unique> to lexical variables and to subroutines will
-result in a compilation error.
-
-=head1 Core Enhancements
-
-=head2 Lexical C<$_>
-
-The default variable C<$_> can now be lexicalized, by declaring it like
-any other lexical variable, with a simple
-
- my $_;
-
-The operations that default on C<$_> will use the lexically-scoped
-version of C<$_> when it exists, instead of the global C<$_>.
-
-In a C<map> or a C<grep> block, if C<$_> was previously my'ed, then the
-C<$_> inside the block is lexical as well (and scoped to the block).
-
-In a scope where C<$_> has been lexicalized, you can still have access to
-the global version of C<$_> by using C<$::_>, or, more simply, by
-overriding the lexical declaration with C<our $_>.
-
-=head2 Tied hashes in scalar context
-
-As of perl 5.8.2/5.9.0, tied hashes did not return anything useful in
-scalar context, for example when used as boolean tests:
-
- if (%tied_hash) { ... }
-
-The old nonsensical behaviour was always to return false,
-regardless of whether the hash is empty or has elements.
-
-There is now an interface for the implementors of tied hashes to implement
-the behaviour of a hash in scalar context, via the SCALAR method (see
-L<perltie>). Without a SCALAR method, perl will try to guess whether
-the hash is empty, by testing if it's inside an iteration (in this case
-it can't be empty) or by calling FIRSTKEY.
-
-=head2 Formats
-
-Formats were improved in several ways. A new field, C<^*>, can be used for
-variable-width, one-line-at-a-time text. Null characters are now handled
-correctly in picture lines. Using C<@#> and C<~~> together will now
-produce a compile-time error, as those format fields are incompatible.
-L<perlform> has been improved, and miscellaneous bugs fixed.
-
-=head2 Stacked filetest operators
-
-As a new form of syntactic sugar, it's now possible to stack up filetest
-operators. You can now write C<-f -w -x $file> in a row to mean
-C<-x $file && -w _ && -f _>. See L<perlfunc/-X>.
-
-=head1 Modules and Pragmata
-
-=over 4
-
-=item Benchmark
-
-In C<Benchmark>, cmpthese() and timestr() now use the time statistics of
-children instead of parent when the selected style is 'nop'.
-
-=item Carp
-
-The error messages produced by C<Carp> now include spaces between the
-arguments in function argument lists: this makes long error messages
-appear more nicely in browsers and other tools.
-
-=item Exporter
-
-C<Exporter> will now recognize grouping tags (such as C<:name>) anywhere
-in the import list, not only at the beginning.
-
-=item FindBin
-
-A function C<again> is provided to resolve problems where modules in different
-directories wish to use FindBin.
-
-=item List::Util
-
-You can now weaken references to read only values.
-
-=item threads::shared
-
-C<cond_wait> has a new two argument form. C<cond_timedwait> has been added.
-
-=back
-
-=head1 Utility Changes
-
-C<find2perl> now assumes C<-print> as a default action. Previously, it
-needed to be specified explicitly.
-
-A new utility, C<prove>, makes it easy to run an individual regression test
-at the command line. C<prove> is part of Test::Harness, which users of earlier
-Perl versions can install from CPAN.
-
-The perl debugger now supports a C<save> command, to save the current
-history to a file, and an C<i> command, which prints the inheritance tree
-of its argument (if the C<Class::ISA> module is installed.)
-
-=head1 Documentation
-
-The documentation has been revised in places to produce more standard manpages.
-
-The long-existing feature of C</(?{...})/> regexps setting C<$_> and pos()
-is now documented.
-
-=head1 Performance Enhancements
-
-Sorting arrays in place (C<@a = sort @a>) is now optimized to avoid
-making a temporary copy of the array.
-
-The operations involving case mapping on UTF-8 strings (uc(), lc(),
-C<//i>, etc.) have been greatly speeded up.
-
-Access to elements of lexical arrays via a numeric constant between 0 and
-255 is now faster. (This used to be only the case for global arrays.)
-
-=head1 Selected Bug Fixes
-
-=head2 UTF-8 bugs
-
-Using substr() on a UTF-8 string could cause subsequent accesses on that
-string to return garbage. This was due to incorrect UTF-8 offsets being
-cached, and is now fixed.
-
-join() could return garbage when the same join() statement was used to
-process 8 bit data having earlier processed UTF-8 data, due to the flags
-on that statement's temporary workspace not being reset correctly. This
-is now fixed.
-
-Using Unicode keys with tied hashes should now work correctly.
-
-chop() and chomp() used to mangle UTF-8 strings. This has been fixed.
-
-sprintf() used to misbehave when the format string was in UTF-8. This is
-now fixed.
-
-=head2 Threading bugs
-
-Hashes with the C<:unique> attribute weren't made read-only in new
-threads. They are now.
-
-=head2 More bugs
-
-C<$a .. $b> will now work as expected when either $a or $b is C<undef>.
-
-Reading $^E now preserves $!. Previously, the C code implementing $^E
-did not preserve C<errno>, so reading $^E could cause C<errno> and therefore
-C<$!> to change unexpectedly.
-
-C<strict> wasn't in effect in regexp-eval blocks (C</(?{...})/>).
-
-=head1 New or Changed Diagnostics
-
-A new deprecation warning, I<Deprecated use of my() in false conditional>,
-has been added, to warn against the use of the dubious and deprecated
-construct
-
- my $x if 0;
-
-See L<perldiag>.
-
-The fatal error I<DESTROY created new reference to dead object> is now
-documented in L<perldiag>.
-
-A new error, I<%ENV is aliased to %s>, is produced when taint checks are
-enabled and when C<*ENV> has been aliased (and thus doesn't reflect the
-program's environment anymore.)
-
-=head1 Changed Internals
-
-These news matter to you only if you either write XS code or like to
-know about or hack Perl internals (using Devel::Peek or any of the
-C<B::> modules counts), or like to run Perl with the C<-D> option.
-
-=head2 Reordering of SVt_* constants
-
-The relative ordering of constants that define the various types of C<SV>
-have changed; in particular, C<SVt_PVGV> has been moved before C<SVt_PVLV>,
-C<SVt_PVAV>, C<SVt_PVHV> and C<SVt_PVCV>. This is unlikely to make any
-difference unless you have code that explicitly makes assumptions about that
-ordering. (The inheritance hierarchy of C<B::*> objects has been changed
-to reflect this.)
-
-=head2 Removal of CPP symbols
-
-The C preprocessor symbols C<PERL_PM_APIVERSION> and
-C<PERL_XS_APIVERSION>, which were supposed to give the version number of
-the oldest perl binary-compatible (resp. source-compatible) with the
-present one, were not used, and sometimes had misleading values. They have
-been removed.
-
-=head2 Less space is used by ops
-
-The C<BASEOP> structure now uses less space. The C<op_seq> field has been
-removed and replaced by two one-bit fields, C<op_opt> and C<op_static>.
-C<opt_type> is now 9 bits long. (Consequently, the C<B::OP> class doesn't
-provide an C<seq> method anymore.)
-
-=head2 New parser
-
-perl's parser is now generated by bison (it used to be generated by
-byacc.) As a result, it seems to be a bit more robust.
-
-=head1 Configuration and Building
-
-C<Configure> now invokes callbacks regardless of the value of the variable
-they are called for. Previously callbacks were only invoked in the
-C<case $variable $define)> branch. This change should only affect platform
-maintainers writing configuration hints files.
-
-The portability and cleanliness of the Win32 makefiles has been improved.
-
-=head1 Known Problems
-
-There are still a couple of problems in the implementation of the lexical
-C<$_>: it doesn't work inside C</(?{...})/> blocks and with regard to the
-reverse() built-in used without arguments. (See the TODO tests in
-F<t/op/mydef.t>.)
-
-=head2 Platform Specific Problems
-
-The test F<ext/IPC/SysV/t/ipcsysv.t> may fail on OpenBSD. This hasn't been
-diagnosed yet.
-
-On some configurations on AIX 5, one test in F<lib/Time/Local.t> fails.
-When configured with long doubles, perl may fail tests 224-236 in
-F<t/op/pow.t> on the same platform.
-
-For threaded builds, F<ext/threads/shared/t/wait.t> has been reported to
-fail some tests on HP-UX 10.20.
-
-=head1 To-do for perl 5.10.0
-
-This is a non-exhaustive, non-ordered, non-contractual and non-definitive
-list of things to do (or nice to have) for perl 5.10.0 :
-
-Clean up and finish support for assertions. See L<assertions>.
-
-Reimplement the mechanism of lexical pragmas to be more extensible. Fix
-current pragmas that don't work well (or at all) with lexical scopes or in
-run-time eval(STRING) (C<sort>, C<re>, C<encoding> for example). MJD has a
-preliminary patch that implements this.
-
-Fix (or rewrite) the implementation of the C</(?{...})/> closures.
-
-Conversions from byte strings to UTF-8 currently map high bit characters
-to Unicode without translation (or, depending on how you look at it, by
-implicitly assuming that the byte strings are in Latin-1). As perl assumes
-the C locale by default, upgrading a string to UTF-8 may change the
-meaning of its contents regarding character classes, case mapping, etc.
-This should probably emit a warning (at least).
-
-Introduce a new special block, UNITCHECK, which is run at the end of a
-compilation unit (module, file, eval(STRING) block). This will correspond to
-the Perl 6 CHECK. Perl 5's CHECK cannot be changed or removed because the
-O.pm/B.pm backend framework depends on it.
-
-Study the possibility of adding a new prototype character, C<_>, meaning
-"this argument defaults to $_".
-
-Make the peephole optimizer optional.
-
-Allow lexical aliases (maybe via the syntax C<my \$alias = \$foo>.
-
-Fix the bugs revealed by running the test suite with the C<-t> switch (via
-C<make test.taintwarn>).
-
-Make threads more robust.
-
-Make C<no 6> and C<no v6> work (opposite of C<use 5.005>, etc.).
-
-A test suite for the B module would be nice.
-
-A ponie.
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://bugs.perl.org/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-=head1 SEE ALSO
-
-The F<Changes> file for exhaustive details on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl592delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl592delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl592delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,342 +0,0 @@
-=head1 NAME
-
-perl592delta - what is new for perl v5.9.2
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.9.1 and the 5.9.2
-development releases. See L<perl590delta> and L<perl591delta> for the
-differences between 5.8.0 and 5.9.1.
-
-=head1 Incompatible Changes
-
-=head2 Packing and UTF-8 strings
-
-The semantics of pack() and unpack() regarding UTF-8-encoded data has been
-changed. Processing is now by default character per character instead of
-byte per byte on the underlying encoding. Notably, code that used things
-like C<pack("a*", $string)> to see through the encoding of string will now
-simply get back the original $string. Packed strings can also get upgraded
-during processing when you store upgraded characters. You can get the old
-behaviour by using C<use bytes>.
-
-To be consistent with pack(), the C<C0> in unpack() templates indicates
-that the data is to be processed in character mode, i.e. character by
-character; on the contrary, C<U0> in unpack() indicates UTF-8 mode, where
-the packed string is processed in its UTF-8-encoded Unicode form on a byte
-by byte basis. This is reversed with regard to perl 5.8.X.
-
-Moreover, C<C0> and C<U0> can also be used in pack() templates to specify
-respectively character and byte modes.
-
-C<C0> and C<U0> in the middle of a pack or unpack format now switch to the
-specified encoding mode, honoring parens grouping. Previously, parens were
-ignored.
-
-Also, there is a new pack() character format, C<W>, which is intended to
-replace the old C<C>. C<C> is kept for unsigned chars coded as bytes in
-the strings internal representation. C<W> represents unsigned (logical)
-character values, which can be greater than 255. It is therefore more
-robust when dealing with potentially UTF-8-encoded data (as C<C> will wrap
-values outside the range 0..255, and not respect the string encoding).
-
-In practice, that means that pack formats are now encoding-neutral, except
-C<C>.
-
-For consistency, C<A> in unpack() format now trims all Unicode whitespace
-from the end of the string. Before perl 5.9.2, it used to strip only the
-classical ASCII space characters.
-
-=head2 Miscellaneous
-
-The internal dump output has been improved, so that non-printable characters
-such as newline and backspace are output in C<\x> notation, rather than
-octal.
-
-The B<-C> option can no longer be used on the C<#!> line. It wasn't
-working there anyway.
-
-=head1 Core Enhancements
-
-=head2 Malloc wrapping
-
-Perl can now be built to detect attempts to assign pathologically large chunks
-of memory. Previously such assignments would suffer from integer wrap-around
-during size calculations causing a misallocation, which would crash perl, and
-could theoretically be used for "stack smashing" attacks. The wrapping
-defaults to enabled on platforms where we know it works (most AIX
-configurations, BSDi, Darwin, DEC OSF/1, FreeBSD, HP-UX, GNU Linux, OpenBSD,
-Solaris, VMS and most Win32 compilers) and defaults to disabled on other
-platforms.
-
-=head2 Unicode Character Database 4.0.1
-
-The copy of the Unicode Character Database included in Perl 5.9 has
-been updated to 4.0.1 from 4.0.0.
-
-=head2 suidperl less insecure
-
-Paul Szabo has analysed and patched C<suidperl> to remove existing known
-insecurities. Currently there are no known holes in C<suidperl>, but previous
-experience shows that we cannot be confident that these were the last. You may
-no longer invoke the set uid perl directly, so to preserve backwards
-compatibility with scripts that invoke #!/usr/bin/suidperl the only set uid
-binary is now C<sperl5.9.>I<n> (C<sperl5.9.2> for this release). C<suidperl>
-is installed as a hard link to C<perl>; both C<suidperl> and C<perl> will
-invoke C<sperl5.9.2> automatically the set uid binary, so this change should
-be completely transparent.
-
-For new projects the core perl team would strongly recommend that you use
-dedicated, single purpose security tools such as C<sudo> in preference to
-C<suidperl>.
-
-=head2 PERLIO_DEBUG
-
-The C<PERLIO_DEBUG> environment variable has no longer any effect for
-setuid scripts and for scripts run with B<-T>.
-
-Moreover, with a thread-enabled perl, using C<PERLIO_DEBUG> could lead to
-an internal buffer overflow. This has been fixed.
-
-=head2 Formats
-
-In addition to bug fixes, C<format>'s features have been enhanced. See
-L<perlform>.
-
-=head2 Unicode Character Classes
-
-Perl's regular expression engine now contains support for matching on the
-intersection of two Unicode character classes. You can also now refer to
-user-defined character classes from within other user defined character
-classes.
-
-=head2 Byte-order modifiers for pack() and unpack()
-
-There are two new byte-order modifiers, C<E<gt>> (big-endian) and C<E<lt>>
-(little-endian), that can be appended to most pack() and unpack() template
-characters and groups to force a certain byte-order for that type or group.
-See L<perlfunc/pack> and L<perlpacktut> for details.
-
-=head2 Byte count feature in pack()
-
-A new pack() template character, C<".">, returns the number of characters
-read so far.
-
-=head2 New variables
-
-A new variable, ${^RE_DEBUG_FLAGS}, controls what debug flags are in
-effect for the regular expression engine when running under C<use re
-"debug">. See L<re> for details.
-
-A new variable ${^UTF8LOCALE} indicates where a UTF-8 locale was detected
-by perl at startup.
-
-=head1 Modules and Pragmata
-
-=head2 New modules
-
-=over 4
-
-=item *
-
-C<encoding::warnings>, by Audrey Tang, is a module to emit warnings
-whenever an ASCII character string containing high-bit bytes is implicitly
-converted into UTF-8.
-
-=item *
-
-C<Module::CoreList>, by Richard Clamp, is a small handy module that tells
-you what versions of core modules ship with any versions of Perl 5. It
-comes with a command-line frontend, C<corelist>.
-
-=back
-
-=head2 Updated And Improved Modules and Pragmata
-
-Dual-lived modules have been updated to be kept up-to-date with respect to
-CPAN.
-
-The dual-lived modules which contain an C<_> in their version number are
-actually I<ahead> of the corresponding CPAN release.
-
-=over 4
-
-=item B::Concise
-
-C<B::Concise> was significantly improved.
-
-=item Socket
-
-There is experimental support for Linux abstract Unix domain sockets.
-
-=item Sys::Syslog
-
-C<syslog()> can now use numeric constants for facility names and priorities,
-in addition to strings.
-
-=item threads
-
-Detached threads are now also supported on Windows.
-
-=back
-
-=head1 Utility Changes
-
-=over 4
-
-=item *
-
-The C<corelist> utility is now installed with perl (see L</"New modules">
-above).
-
-=item *
-
-C<h2ph> and C<h2xs> have been made a bit more robust with regard to
-"modern" C code.
-
-=item *
-
-Several bugs have been fixed in C<find2perl>, regarding C<-exec> and
-C<-eval>. Also the options C<-path>, C<-ipath> and C<-iname> have been
-added.
-
-=item *
-
-The Perl debugger can now save all debugger commands for sourcing later;
-notably, it can now emulate stepping backwards, by restarting and
-rerunning all bar the last command from a saved command history.
-
-It can also display the parent inheritance tree of a given class.
-
-Perl has a new -dt command-line flag, which enables threads support in the
-debugger.
-
-=back
-
-=head1 Performance Enhancements
-
-=over 4
-
-=item *
-
-Unicode case mappings (C</i>, C<lc>, C<uc>, etc) are faster.
-
-=item *
-
-C<@a = sort @a> was optimized to do in-place sort. Likewise, C<reverse
-sort ...> is now optimized to sort in reverse, avoiding the generation of
-a temporary intermediate list.
-
-=item *
-
-Unnecessary assignments are optimised away in
-
- my $s = undef;
- my @a = ();
- my %h = ();
-
-=item *
-
-C<map> in scalar context is now optimized.
-
-=item *
-
-The regexp engine now implements the trie optimization : it's able to
-factor out common prefixes and suffixes in regular expressions. A new
-special variable, ${^RE_TRIE_MAXBUF}, has been added to fine-tune this
-optimization.
-
-=back
-
-=head1 Installation and Configuration Improvements
-
-Run-time customization of @INC can be enabled by passing the
-C<-Dusesitecustomize> flag to configure. When enabled, this will make perl
-run F<$sitelibexp/sitecustomize.pl> before anything else. This script can
-then be set up to add additional entries to @INC.
-
-There is alpha support for relocatable @INC entries.
-
-Perl should build on Interix and on GNU/kFreeBSD.
-
-=head1 Selected Bug Fixes
-
-Most of those bugs were reported in the perl 5.8.x maintenance track.
-Notably, quite a few utf8 bugs were fixed, and several memory leaks were
-suppressed. The perl58Xdelta manpages have more details on them.
-
-Development-only bug fixes include :
-
-C<$Foo::_> was wrongly forced as C<$main::_>.
-
-=head1 New or Changed Diagnostics
-
-A new warning, C<!=~ should be !~>, is emitted to prevent this misspelling
-of the non-matching operator.
-
-The warning I<Newline in left-justified string> has been removed.
-
-The error I<Too late for "-T" option> has been reformulated to be more
-descriptive.
-
-There is a new compilation error, I<Illegal declaration of subroutine>,
-for an obscure case of syntax errors.
-
-The diagnostic output of Carp has been changed slightly, to add a space after
-the comma between arguments. This makes it much easier for tools such as
-web browsers to wrap it, but might confuse any automatic tools which perform
-detailed parsing of Carp output.
-
-C<perl -V> has several improvements, making it more useable from shell
-scripts to get the value of configuration variables. See L<perlrun> for
-details.
-
-=head1 Changed Internals
-
-The perl core has been refactored and reorganised in several places.
-In short, this release will not be binary compatible with any previous
-perl release.
-
-=head1 Known Problems
-
-For threaded builds, F<ext/threads/shared/t/wait.t> has been reported to
-fail some tests on HP-UX 10.20.
-
-Net::Ping might fail some tests on HP-UX 11.00 with the latest OS
-upgrades.
-
-F<t/io/dup.t>, F<t/io/open.t> and F<lib/ExtUtils/t/Constant.t> fail some
-tests on some BSD flavours.
-
-=head1 Plans for the next release
-
-The current plan for perl 5.9.3 is to add CPANPLUS as a core module.
-More regular expression optimizations are also in the works.
-
-It is planned to release a development version of perl more frequently,
-i.e. each time something major changes.
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://bugs.perl.org/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-=head1 SEE ALSO
-
-The F<Changes> file for exhaustive details on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl593delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl593delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl593delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,551 +0,0 @@
-=encoding utf8
-
-=head1 NAME
-
-perl593delta - what is new for perl v5.9.3
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.9.2 and the 5.9.3
-development releases. See L<perl590delta>, L<perl591delta> and
-L<perl592delta> for the differences between 5.8.0 and 5.9.2.
-
-=head1 Incompatible Changes
-
-=head2 Parsing of C<-f _>
-
-The identifier C<_> is now forced to be a bareword after a filetest
-operator. This solves a number of misparsing issues when a global C<_>
-subroutine is defined.
-
-=head2 C<mkdir()>
-
-C<mkdir()> without arguments now defaults to C<$_>.
-
-=head2 Magic goto and eval
-
-The construct C<eval { goto &foo }> is now disallowed. (Note that the
-similar construct, but with C<eval("")> instead, was already forbidden.)
-
-=head2 C<$#> has been removed
-
-The deprecated C<$#> variable (output format for numbers) has been
-removed. A new warning, C<$# is no longer supported>, has been added.
-
-=head2 C<:unique>
-
-The C<:unique> attribute has been made a no-op, since its current
-implementation was fundamentally flawed and not threadsafe.
-
-=head2 Scoping of the C<sort> pragma
-
-The C<sort> pragma is now lexically scoped. Its effect used to be global.
-
-=head1 Core Enhancements
-
-=head2 The C<feature> pragma
-
-The C<feature> pragma is used to enable new syntax that would break Perl's
-backwards-compatibility with older releases of the language. It's a lexical
-pragma, like C<strict> or C<warnings>.
-
-Currently the following new features are available: C<switch> (adds a
-switch statement), C<~~> (adds a Perl 6-like smart match operator), C<say>
-(adds a C<say> built-in function), and C<err> (adds an C<err> keyword).
-Those features are described below.
-
-Note that C<err> low-precedence defined-or operator used to be enabled by
-default (although as a weak keyword, meaning that any function would
-override it). It's now only recognized when explicitly turned on (and is
-then a regular keyword).
-
-Those features, and the C<feature> pragma itself, have been contributed by
-Robin Houston.
-
-=head2 Switch and Smart Match operator
-
-Perl 5 now has a switch statement. It's available when C<use feature
-'switch'> is in effect. This feature introduces three new keywords,
-C<given>, C<when>, and C<default>:
-
- given ($foo) {
- when (/^abc/) { $abc = 1; }
- when (/^def/) { $def = 1; }
- when (/^xyz/) { $xyz = 1; }
- default { $nothing = 1; }
- }
-
-A more complete description of how Perl matches the switch variable
-against the C<when> conditions is given in L<perlsyn/"Switch statements">.
-
-This kind of match is called I<smart match>, and it's also possible to use
-it outside of switch statements, via the new C<~~> operator (enabled via
-the C<use feature '~~'> directive). See L<perlsyn/"Smart matching in
-detail">.
-
-=head2 C<say()>
-
-say() is a new built-in, only available when C<use feature 'say'> is in
-effect, that is similar to print(), but that implicitly appends a newline
-to the printed string. See L<perlfunc/say>.
-
-=head2 C<CLONE_SKIP()>
-
-Perl has now support for the C<CLONE_SKIP> special subroutine. Like
-C<CLONE>, C<CLONE_SKIP> is called once per package; however, it is called
-just before cloning starts, and in the context of the parent thread. If it
-returns a true value, then no objects of that class will be cloned. See
-L<perlmod> for details. (Contributed by Dave Mitchell.)
-
-=head2 C<${^CHILD_ERROR_NATIVE}>
-
-A new internal variable, C<${^CHILD_ERROR_NATIVE}>, gives the native
-status returned by the last pipe close, backtick command, successful call
-to wait() or waitpid(), or from the system() operator. See L<perlrun> for
-details. (Contributed by Gisle Aas.)
-
-=head2 Assertions
-
-The support for assertions, introduced in perl 5.9.0, has been improved.
-The syntax for the C<-A> command-line switch has changed; it now accepts
-an optional module name, defaulting to C<assertions::activate>. See
-L<assertions> and L<perlrun>. (Contributed by Salvador Fandiño García.)
-
-=head2 Unicode Character Database 4.1.0
-
-The copy of the Unicode Character Database included in Perl 5.9 has
-been updated to 4.1.0.
-
-=head2 C<no VERSION>
-
-You can now use C<no> followed by a version number to specify that you
-want to use a version of perl older than the specified one.
-
-=head2 Recursive sort subs
-
-You can now use recursive subroutines with sort(), thanks to Robin Houston.
-
-=head2 Effect of pragmas in eval
-
-The compile-time value of the C<%^H> hint variable can now propagate into
-eval("")uated code. This makes it more useful to implement lexical
-pragmas.
-
-As a side-effect of this, the overloaded-ness of constants now propagates
-into eval("").
-
-=head2 New B<-E> command-line switch
-
-B<-E> is equivalent to B<-e>, but it implicitly enables all
-optional features (like C<use feature ":5.10">).
-
-=head2 C<chdir>, C<chmod> and C<chown> on filehandles
-
-C<chdir>, C<chmod> and C<chown> can now work on filehandles as well as
-filenames, if the system supports respectively C<fchdir>, C<fchmod> and
-C<fchown>, thanks to a patch provided by Gisle Aas.
-
-=head2 OS groups
-
-C<$(> and C<$)> now return groups in the order where the OS returns them,
-thanks to Gisle Aas. This wasn't previously the case.
-
-=head1 Modules and Pragmata
-
-=head2 New Core Modules
-
-=over 4
-
-=item *
-
-A new pragma, C<feature>, has been added; see above in L</"Core
-Enhancements">.
-
-=item *
-
-C<assertions::compat>, also available on CPAN, allows the use of assertions on
-perl versions prior to 5.9.0 (that is the first one to natively support
-them).
-
-=item *
-
-C<Math::BigInt::FastCalc> is an XS-enabled, and thus faster, version of
-C<Math::BigInt::Calc>.
-
-=item *
-
-C<Compress::Zlib> is an interface to the zlib compression library. It
-comes with a bundled version of zlib, so having a working zlib is not a
-prerequisite to install it. It's used by C<Archive::Tar> (see below).
-
-=item *
-
-C<IO::Zlib> is an C<IO::>-style interface to C<Compress::Zlib>.
-
-=item *
-
-C<Archive::Tar> is a module to manipulate C<tar> archives.
-
-=item *
-
-C<Digest::SHA> is a module used to calculate many types of SHA digests,
-has been included for SHA support in the CPAN module.
-
-=item *
-
-C<ExtUtils::CBuilder> and C<ExtUtils::ParseXS> have been added.
-
-=back
-
-=head1 Utility Changes
-
-=head2 C<ptar>
-
-C<ptar> is a pure perl implementation of C<tar>, that comes with
-C<Archive::Tar>.
-
-=head2 C<ptardiff>
-
-C<ptardiff> is a small script used to generate a diff between the contents
-of a tar archive and a directory tree. Like C<ptar>, it comes with
-C<Archive::Tar>.
-
-=head2 C<shasum>
-
-This command-line utility, used to print or to check SHA digests, comes
-with the new C<Digest::SHA> module.
-
-=head2 C<h2xs> enhancements
-
-C<h2xs> implements a new option C<--use-xsloader> to force use of
-C<XSLoader> even in backwards compatible modules.
-
-The handling of authors' names that had apostrophes has been fixed.
-
-Any enums with negative values are now skipped.
-
-=head2 C<perlivp> enhancements
-
-C<perlivp> no longer checks for F<*.ph> files by default. Use the new C<-a>
-option to run I<all> tests.
-
-=head1 Documentation
-
-=head2 Perl Glossary
-
-The L<perlglossary> manpage is a glossary of terms used in the Perl
-documentation, technical and otherwise, kindly provided by O'Reilly Media,
-Inc.
-
-L<perltodo> now lists a rough roadmap to Perl 5.10.
-
-=head1 Performance Enhancements
-
-=head2 XS-assisted SWASHGET
-
-Some pure-perl code that perl was using to retrieve Unicode properties and
-transliteration mappings has been reimplemented in XS.
-
-=head2 Constant subroutines
-
-The interpreter internals now support a far more memory efficient form of
-inlineable constants. Storing a reference to a constant value in a symbol
-table is equivalent to a full typeglob referencing a constant subroutine,
-but using about 400 bytes less memory. This proxy constant subroutine is
-automatically upgraded to a real typeglob with subroutine if necessary.
-The approach taken is analogous to the existing space optimisation for
-subroutine stub declarations, which are stored as plain scalars in place
-of the full typeglob.
-
-Several of the core modules have been converted to use this feature for
-their system dependent constants - as a result C<use POSIX;> now takes about
-200K less memory.
-
-=head2 C<PERL_DONT_CREATE_GVSV>
-
-The new compilation flag C<PERL_DONT_CREATE_GVSV>, introduced as an option
-in perl 5.8.8, is turned on by default in perl 5.9.3. It prevents perl
-from creating an empty scalar with every new typeglob. See L<perl589delta>
-for details.
-
-=head2 Weak references are cheaper
-
-Weak reference creation is now I<O(1)> rather than I<O(n)>, courtesy of
-Nicholas Clark. Weak reference deletion remains I<O(n)>, but if deletion only
-happens at program exit, it may be skipped completely.
-
-=head2 sort() enhancements
-
-Salvador Fandiño provided improvements to reduce the memory usage of C<sort>
-and to speed up some cases.
-
-=head1 Installation and Configuration Improvements
-
-=head2 Compilation improvements
-
-Parallel makes should work properly now, although there may still be problems
-if C<make test> is instructed to run in parallel.
-
-Building with Borland's compilers on Win32 should work more smoothly. In
-particular Steve Hay has worked to side step many warnings emitted by their
-compilers and at least one C compiler internal error.
-
-Perl extensions on Windows now can be statically built into the Perl DLL,
-thanks to a work by Vadim Konovalov.
-
-=head2 New Or Improved Platforms
-
-Perl is being ported to Symbian OS. See L<perlsymbian> for more
-information.
-
-The VMS port has been improved. See L<perlvms>.
-
-DynaLoader::dl_unload_file() now works on Windows.
-
-Portability of Perl on various recent compilers on Windows has been
-improved (Borland C++, Visual C++ 7.0).
-
-=head2 New probes
-
-C<Configure> will now detect C<clearenv> and C<unsetenv>, thanks to a
-patch from Alan Burlison. It will also probe for C<futimes> (and use it
-internally if available), and whether C<sprintf> correctly returns the
-length of the formatted string.
-
-=head2 Module auxiliary files
-
-README files and changelogs for CPAN modules bundled with perl are no
-longer installed.
-
-=head1 Selected Bug Fixes
-
-=head2 C<defined $$x>
-
-C<use strict "refs"> was ignoring taking a hard reference in an argument
-to defined(), as in :
-
- use strict "refs";
- my $x = "foo";
- if (defined $$x) {...}
-
-This now correctly produces the run-time error C<Can't use string as a
-SCALAR ref while "strict refs" in use>. (However, C<defined @$foo> and
-C<defined %$foo> are still allowed. Those constructs are discouraged
-anyway.)
-
-=head2 Calling CORE::require()
-
-CORE::require() and CORE::do() were always parsed as require() and do()
-when they were overridden. This is now fixed.
-
-=head2 Subscripts of slices
-
-You can now use a non-arrowed form for chained subscripts after a list
-slice, like in:
-
- ({foo => "bar"})[0]{foo}
-
-This used to be a syntax error; a C<< -> >> was required.
-
-=head2 Remove over-optimisation
-
-Perl 5.9.2 introduced a change so that assignments of C<undef> to a
-scalar, or of an empty list to an array or a hash, were optimised out. As
-this could cause problems when C<goto> jumps were involved, this change
-was backed out.
-
-=head2 sprintf() fixes
-
-Using the sprintf() function with some formats could lead to a buffer
-overflow in some specific cases. This has been fixed, along with several
-other bugs, notably in bounds checking.
-
-In related fixes, it was possible for badly written code that did not follow
-the documentation of C<Sys::Syslog> to have formatting vulnerabilities.
-C<Sys::Syslog> has been changed to protect people from poor quality third
-party code.
-
-=head2 no warnings 'category' works correctly with -w
-
-Previously when running with warnings enabled globally via C<-w>, selective
-disabling of specific warning categories would actually turn off all warnings.
-This is now fixed; now C<no warnings 'io';> will only turn off warnings in the
-C<io> class. Previously it would erroneously turn off all warnings.
-
-=head2 Smaller fixes
-
-=over 4
-
-=item *
-
-C<FindBin> now works better with directories where access rights are more
-restrictive than usual.
-
-=item *
-
-Several memory leaks in ithreads were closed. Also, ithreads were made
-less memory-intensive.
-
-=item *
-
-Trailing spaces are now trimmed from C<$!> and C<$^E>.
-
-=item *
-
-Operations that require perl to read a process's list of groups, such as reads
-of C<$(> and C<$)>, now dynamically allocate memory rather than using a
-fixed sized array. The fixed size array could cause C stack exhaustion on
-systems configured to use large numbers of groups.
-
-=item *
-
-C<PerlIO::scalar> now works better with non-default C<$/> settings.
-
-=item *
-
-The C<x> repetition operator is now able to operate on C<qw//> lists. This
-used to raise a syntax error.
-
-=item *
-
-The debugger now traces correctly execution in eval("")uated code that
-contains #line directives.
-
-=item *
-
-The value of the C<open> pragma is no longer ignored for three-argument
-opens.
-
-=item *
-
-Perl will now use the C library calls C<unsetenv> and C<clearenv> if present
-to delete keys from C<%ENV> and delete C<%ENV> entirely, thanks to a patch
-from Alan Burlison.
-
-=back
-
-=head2 More Unicode Fixes
-
-=over 4
-
-=item *
-
-chr() on a negative value now gives C<\x{FFFD}>, the Unicode replacement
-character, unless when the C<bytes> pragma is in effect, where the low
-eight bytes of the value are used.
-
-=item *
-
-Some case insensitive matches between UTF-8 encoded data and 8 bit regexps,
-and vice versa, could give malformed character warnings. These have been
-fixed by Dave Mitchell and Yves Orton.
-
-=item *
-
-C<lcfirst> and C<ucfirst> could corrupt the string for certain cases where
-the length UTF-8 encoding of the string in lower case, upper case or title
-case differed. This was fixed by Nicholas Clark.
-
-=back
-
-=head1 New or Changed Diagnostics
-
-=head2 Attempt to set length of freed array
-
-This is a new warning, produced in situations like the following one:
-
- $r = do {my @a; \$#a};
- $$r = 503;
-
-=head2 Non-string passed as bitmask
-
-This is a new warning, produced when number has been passed as a argument to
-select(), instead of a bitmask.
-
- # Wrong, will now warn
- $rin = fileno(STDIN);
- ($nfound,$timeleft) = select($rout=$rin, undef, undef, $timeout);
-
- # Should be
- $rin = '';
- vec($rin,fileno(STDIN),1) = 1;
- ($nfound,$timeleft) = select($rout=$rin, undef, undef, $timeout);
-
-=head2 Search pattern not terminated or ternary operator parsed as search pattern
-
-This syntax error indicates that the lexer couldn't find the final
-delimiter of a C<?PATTERN?> construct. Mentioning the ternary operator in
-this error message makes syntax diagnostic easier.
-
-=head2 "%s" variable %s masks earlier declaration
-
-This warning is now emitted in more consistent cases; in short, when one
-of the declarations involved is a C<my> variable:
-
- my $x; my $x; # warns
- my $x; our $x; # warns
- our $x; my $x; # warns
-
-On the other hand, the following:
-
- our $x; our $x;
-
-now gives a C<"our" variable %s redeclared> warning.
-
-=head2 readdir()/closedir()/etc. attempted on invalid dirhandle
-
-These new warnings are now emitted when a dirhandle is used but is
-either closed or not really a dirhandle.
-
-=head1 Changed Internals
-
-In general, the source code of perl has been refactored, tied up, and
-optimized in many places. Also, memory management and allocation has been
-improved in a couple of points.
-
-Andy Lester supplied many improvements to determine which function
-parameters and local variables could actually be declared C<const> to the C
-compiler. Steve Peters provided new C<*_set> macros and reworked the core to
-use these rather than assigning to macros in LVALUE context.
-
-Dave Mitchell improved the lexer debugging output under C<-DT>.
-
-A new file, F<mathoms.c>, has been added. It contains functions that are
-no longer used in the perl core, but that remain available for binary or
-source compatibility reasons. However, those functions will not be
-compiled in if you add C<-DNO_MATHOMS> in the compiler flags.
-
-The C<AvFLAGS> macro has been removed.
-
-The C<av_*()> functions, used to manipulate arrays, no longer accept null
-C<AV*> parameters.
-
-=head2 B:: modules inheritance changed
-
-The inheritance hierarchy of C<B::> modules has changed; C<B::NV> now
-inherits from C<B::SV> (it used to inherit from C<B::IV>).
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://bugs.perl.org/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-=head1 SEE ALSO
-
-The F<Changes> file for exhaustive details on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl594delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl594delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl594delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,382 +0,0 @@
-=head1 NAME
-
-perl594delta - what is new for perl v5.9.4
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.9.3 and the 5.9.4
-development releases. See L<perl590delta>, L<perl591delta>, L<perl592delta>
-and L<perl593delta> for the differences between 5.8.0 and 5.9.3.
-
-=head1 Incompatible Changes
-
-=head2 chdir FOO
-
-A bareword argument to chdir() is now recognized as a file handle.
-Earlier releases interpreted the bareword as a directory name.
-(Gisle Aas)
-
-=head2 Handling of pmc files
-
-An old feature of perl was that before C<require> or C<use> look for a
-file with a F<.pm> extension, they will first look for a similar filename
-with a F<.pmc> extension. If this file is found, it will be loaded in
-place of any potentially existing file ending in a F<.pm> extension.
-
-Previously, F<.pmc> files were loaded only if more recent than the
-matching F<.pm> file. Starting with 5.9.4, they'll be always loaded if
-they exist. (This trick is used by Pugs.)
-
-=head2 @- and @+ in patterns
-
-The special arrays C<@-> and C<@+> are no longer interpolated in regular
-expressions. (Sadahiro Tomoyuki)
-
-=head2 $AUTOLOAD can now be tainted
-
-If you call a subroutine by a tainted name, and if it defers to an
-AUTOLOAD function, then $AUTOLOAD will be (correctly) tainted.
-(Rick Delaney)
-
-=head1 Core Enhancements
-
-=head2 state() variables
-
-A new class of variables has been introduced. State variables are similar
-to C<my> variables, but are declared with the C<state> keyword in place of
-C<my>. They're visible only in their lexical scope, but their value is
-persistent: unlike C<my> variables, they're not undefined at scope entry,
-but retain their previous value. (Rafael Garcia-Suarez)
-
-To use state variables, one needs to enable them by using
-
- use feature "state";
-
-or by using the C<-E> command-line switch in one-liners.
-
-See L<perlsub/"Persistent variables via state()">.
-
-=head2 UNIVERSAL::DOES()
-
-The C<UNIVERSAL> class has a new method, C<DOES()>. It has been added to
-solve semantic problems with the C<isa()> method. C<isa()> checks for
-inheritance, while C<DOES()> has been designed to be overridden when
-module authors use other types of relations between classes (in addition
-to inheritance). (chromatic)
-
-See L<< UNIVERSAL/"$obj->DOES( ROLE )" >>.
-
-=head2 Exceptions in constant folding
-
-The constant folding routine is now wrapped in an exception handler, and
-if folding throws an exception (such as attempting to evaluate 0/0), perl
-now retains the current optree, rather than aborting the whole program.
-(Nicholas Clark, Dave Mitchell)
-
-=head2 Source filters in @INC
-
-It's possible to enhance the mechanism of subroutine hooks in @INC by
-adding a source filter on top of the filehandle opened and returned by the
-hook. This feature was planned a long time ago, but wasn't quite working
-until now. See L<perlfunc/require> for details. (Nicholas Clark)
-
-=head2 MAD
-
-MAD, which stands for I<Misc Attribute Decoration>, is a
-still-in-development work leading to a Perl 5 to Perl 6 converter. To
-enable it, it's necessary to pass the argument C<-Dmad> to Configure. The
-obtained perl isn't binary compatible with a regular perl 5.9.4, and has
-space and speed penalties; moreover not all regression tests still pass
-with it. (Larry Wall, Nicholas Clark)
-
-=head1 Modules and Pragmas
-
-=over 4
-
-=item *
-
-C<encoding::warnings> is now a lexical pragma. (Although on older perls,
-which don't have support for lexical pragmas, it keeps its global
-behaviour.) (Audrey Tang)
-
-=item *
-
-C<threads> is now a dual-life module, also available on CPAN. It has been
-expanded in many ways. A kill() method is available for thread signalling.
-One can get thread status, or the list of running or joinable threads.
-
-A new C<< threads->exit() >> method is used to exit from the application
-(this is the default for the main thread) or from the current thread only
-(this is the default for all other threads). On the other hand, the exit()
-built-in now always causes the whole application to terminate. (Jerry
-D. Hedden)
-
-=back
-
-=head2 New Core Modules
-
-=over 4
-
-=item *
-
-C<Hash::Util::FieldHash>, by Anno Siegel, has been added. This module
-provides support for I<field hashes>: hashes that maintain an association
-of a reference with a value, in a thread-safe garbage-collected way.
-Such hashes are useful to implement inside-out objects.
-
-=item *
-
-C<Module::Build>, by Ken Williams, has been added. It's an alternative to
-C<ExtUtils::MakeMaker> to build and install perl modules.
-
-=item *
-
-C<Module::Load>, by Jos Boumans, has been added. It provides a single
-interface to load Perl modules and F<.pl> files.
-
-=item *
-
-C<Module::Loaded>, by Jos Boumans, has been added. It's used to mark
-modules as loaded or unloaded.
-
-=item *
-
-C<Package::Constants>, by Jos Boumans, has been added. It's a simple
-helper to list all constants declared in a given package.
-
-=item *
-
-C<Win32API::File>, by Tye McQueen, has been added (for Windows builds).
-This module provides low-level access to Win32 system API calls for
-files/dirs.
-
-=back
-
-=head1 Utility Changes
-
-=head2 config_data
-
-C<config_data> is a new utility that comes with C<Module::Build>. It
-provides a command-line interface to the configuration of Perl modules
-that use Module::Build's framework of configurability (that is,
-C<*::ConfigData> modules that contain local configuration information for
-their parent modules.)
-
-=head1 Documentation
-
-=head2 New manpage, perlpragma
-
-The L<perlpragma> manpage documents how to write one's own lexical
-pragmas in pure Perl (something that is possible starting with 5.9.4).
-
-=head2 New manpage, perlreguts
-
-The L<perlreguts> manpage, courtesy of Yves Orton, describes internals of the
-Perl regular expression engine.
-
-=head2 New manpage, perlunitut
-
-The L<perlunitut> manpage is an tutorial for programming with Unicode and
-string encodings in Perl, courtesy of Juerd Waalboer.
-
-=head1 Performance Enhancements
-
-=head2 Memory optimisations
-
-Several internal data structures (typeglobs, GVs, CVs, formats) have been
-restructured to use less memory. (Nicholas Clark)
-
-=head2 UTF-8 cache optimisation
-
-The UTF-8 caching code is now more efficient, and used more often.
-(Nicholas Clark)
-
-=head2 Regular expressions
-
-=over 4
-
-=item Engine de-recursivised
-
-The regular expression engine is no longer recursive, meaning that
-patterns that used to overflow the stack will either die with useful
-explanations, or run to completion, which, since they were able to blow
-the stack before, will likely take a very long time to happen. If you were
-experiencing the occasional stack overflow (or segfault) and upgrade to
-discover that now perl apparently hangs instead, look for a degenerate
-regex. (Dave Mitchell)
-
-=item Single char char-classes treated as literals
-
-Classes of a single character are now treated the same as if the character
-had been used as a literal, meaning that code that uses char-classes as an
-escaping mechanism will see a speedup. (Yves Orton)
-
-=item Trie optimisation of literal string alternations
-
-Alternations, where possible, are optimised into more efficient matching
-structures. String literal alternations are merged into a trie and are
-matched simultaneously. This means that instead of O(N) time for matching
-N alternations at a given point the new code performs in O(1) time. (Yves
-Orton)
-
-B<Note:> Much code exists that works around perl's historic poor
-performance on alternations. Often the tricks used to do so will disable
-the new optimisations. Hopefully the utility modules used for this purpose
-will be educated about these new optimisations by the time 5.10 is
-released.
-
-=item Aho-Corasick start-point optimisation
-
-When a pattern starts with a trie-able alternation and there aren't
-better optimisations available the regex engine will use Aho-Corasick
-matching to find the start point. (Yves Orton)
-
-=back
-
-=head2 Sloppy stat on Windows
-
-On Windows, perl's stat() function normally opens the file to determine
-the link count and update attributes that may have been changed through
-hard links. Setting ${^WIN32_SLOPPY_STAT} to a true value speeds up
-stat() by not performing this operation. (Jan Dubois)
-
-=head1 Installation and Configuration Improvements
-
-=head2 Relocatable installations
-
-There is now Configure support for creating a relocatable perl tree. If
-you Configure with C<-Duserelocatableinc>, then the paths in @INC (and
-everything else in %Config) can be optionally located via the path of the
-perl executable.
-
-That means that, if the string C<".../"> is found at the start of any
-path, it's substituted with the directory of $^X. So, the relocation can
-be configured on a per-directory basis, although the default with
-C<-Duserelocatableinc> is that everything is relocated. The initial
-install is done to the original configured prefix.
-
-=head2 Ports
-
-Many improvements have been made towards making Perl work correctly on
-z/OS.
-
-Perl has been reported to work on DragonFlyBSD.
-
-=head2 Compilation improvements
-
-All F<ppport.h> files in the XS modules bundled with perl are now
-autogenerated at build time. (Marcus Holland-Moritz)
-
-=head2 New probes
-
-The configuration process now detects whether strlcat() and strlcpy() are
-available. When they are not available, perl's own version is used (from
-Russ Allbery's public domain implementation). Various places in the perl
-interpreter now use them. (Steve Peters)
-
-=head2 Windows build improvements
-
-=over 4
-
-=item Building XS extensions
-
-Support for building XS extension modules with the free MinGW compiler has
-been improved in the case where perl itself was built with the Microsoft
-VC++ compiler. (ActiveState)
-
-=item Support for 64-bit compiler
-
-Support for building perl with Microsoft's 64-bit compiler has been
-improved. (ActiveState)
-
-=back
-
-=head1 Selected Bug Fixes
-
-=head2 PERL5SHELL and tainting
-
-On Windows, the PERL5SHELL environment variable is now checked for
-taintedness. (Rafael Garcia-Suarez)
-
-=head2 Using *FILE{IO}
-
-C<stat()> and C<-X> filetests now treat *FILE{IO} filehandles like *FILE
-filehandles. (Steve Peters)
-
-=head2 Overloading and reblessing
-
-Overloading now works when references are reblessed into another class.
-Internally, this has been implemented by moving the flag for "overloading"
-from the reference to the referent, which logically is where it should
-always have been. (Nicholas Clark)
-
-=head2 Overloading and UTF-8
-
-A few bugs related to UTF-8 handling with objects that have
-stringification overloaded have been fixed. (Nicholas Clark)
-
-=head2 eval memory leaks fixed
-
-Traditionally, C<eval 'syntax error'> has leaked badly. Many (but not all)
-of these leaks have now been eliminated or reduced. (Dave Mitchell)
-
-=head2 Random device on Windows
-
-In previous versions, perl would read the file F</dev/urandom> if it
-existed when seeding its random number generator. That file is unlikely
-to exist on Windows, and if it did would probably not contain appropriate
-data, so perl no longer tries to read it on Windows. (Alex Davies)
-
-=head1 New or Changed Diagnostics
-
-=over 4
-
-=item State variable %s will be reinitialized
-
-One can assign initial values to state variables, but not when they're
-declared as a sub-part of a list assignment. See L<perldiag>.
-
-=back
-
-=head1 Changed Internals
-
-A new file, F<mathoms.c>, contains functions that aren't used anymore in
-the perl core, but remain around because modules out there might
-still use them. They come from a factorization effort: for example, many
-PP functions are now shared for several ops.
-
-The implementation of the special variables $^H and %^H has changed, to
-allow implementing lexical pragmas in pure perl.
-
-=head1 Known Problems
-
-One warning test (number 263 in F<lib/warnings.t>) fails under UTF-8
-locales.
-
-Bytecode tests fail under several platforms. We are considering removing
-support for byteloader and compiler before the 5.10.0 release.
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://rt.perl.org/rt3/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-=head1 SEE ALSO
-
-The F<Changes> file for exhaustive details on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perl595delta.pod
===================================================================
--- trunk/contrib/perl/pod/perl595delta.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perl595delta.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,587 +0,0 @@
-=head1 NAME
-
-perl595delta - what is new for perl v5.9.5
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.9.4 and the 5.9.5
-development releases. See L<perl590delta>, L<perl591delta>,
-L<perl592delta>, L<perl593delta> and L<perl594delta> for the differences
-between 5.8.0 and 5.9.4.
-
-=head1 Incompatible Changes
-
-=head2 Tainting and printf
-
-When perl is run under taint mode, C<printf()> and C<sprintf()> will now
-reject any tainted format argument. (Rafael Garcia-Suarez)
-
-=head2 undef and signal handlers
-
-Undefining or deleting a signal handler via C<undef $SIG{FOO}> is now
-equivalent to setting it to C<'DEFAULT'>. (Rafael)
-
-=head2 strictures and array/hash dereferencing in defined()
-
-C<defined @$foo> and C<defined %$bar> are now subject to C<strict 'refs'>
-(that is, C<$foo> and C<$bar> shall be proper references there.)
-(Nicholas Clark)
-
-(However, C<defined(@foo)> and C<defined(%bar)> are discouraged constructs
-anyway.)
-
-=head2 C<(?p{})> has been removed
-
-The regular expression construct C<(?p{})>, which was deprecated in perl
-5.8, has been removed. Use C<(??{})> instead. (Rafael)
-
-=head2 Pseudo-hashes have been removed
-
-Support for pseudo-hashes has been removed from Perl 5.9. (The C<fields>
-pragma remains here, but uses an alternate implementation.)
-
-=head2 Removal of the bytecode compiler and of perlcc
-
-C<perlcc>, the byteloader and the supporting modules (B::C, B::CC,
-B::Bytecode, etc.) are no longer distributed with the perl sources. Those
-experimental tools have never worked reliably, and, due to the lack of
-volunteers to keep them in line with the perl interpreter developments, it
-was decided to remove them instead of shipping a broken version of those.
-The last version of those modules can be found with perl 5.9.4.
-
-However the B compiler framework stays supported in the perl core, as with
-the more useful modules it has permitted (among others, B::Deparse and
-B::Concise).
-
-=head2 Removal of the JPL
-
-The JPL (Java-Perl Linguo) has been removed from the perl sources tarball.
-
-=head2 Recursive inheritance detected earlier
-
-Perl will now immediately throw an exception if you modify any package's
-C<@ISA> in such a way that it would cause recursive inheritance.
-
-Previously, the exception would not occur until Perl attempted to make
-use of the recursive inheritance while resolving a method or doing a
-C<$foo-E<gt>isa($bar)> lookup.
-
-=head1 Core Enhancements
-
-=head2 Regular expressions
-
-=over 4
-
-=item Recursive Patterns
-
-It is now possible to write recursive patterns without using the C<(??{})>
-construct. This new way is more efficient, and in many cases easier to
-read.
-
-Each capturing parenthesis can now be treated as an independent pattern
-that can be entered by using the C<(?PARNO)> syntax (C<PARNO> standing for
-"parenthesis number"). For example, the following pattern will match
-nested balanced angle brackets:
-
- /
- ^ # start of line
- ( # start capture buffer 1
- < # match an opening angle bracket
- (?: # match one of:
- (?> # don't backtrack over the inside of this group
- [^<>]+ # one or more non angle brackets
- ) # end non backtracking group
- | # ... or ...
- (?1) # recurse to bracket 1 and try it again
- )* # 0 or more times.
- > # match a closing angle bracket
- ) # end capture buffer one
- $ # end of line
- /x
-
-Note, users experienced with PCRE will find that the Perl implementation
-of this feature differs from the PCRE one in that it is possible to
-backtrack into a recursed pattern, whereas in PCRE the recursion is
-atomic or "possessive" in nature. (Yves Orton)
-
-=item Named Capture Buffers
-
-It is now possible to name capturing parenthesis in a pattern and refer to
-the captured contents by name. The naming syntax is C<< (?<NAME>....) >>.
-It's possible to backreference to a named buffer with the C<< \k<NAME> >>
-syntax. In code, the new magical hashes C<%+> and C<%-> can be used to
-access the contents of the capture buffers.
-
-Thus, to replace all doubled chars, one could write
-
- s/(?<letter>.)\k<letter>/$+{letter}/g
-
-Only buffers with defined contents will be "visible" in the C<%+> hash, so
-it's possible to do something like
-
- foreach my $name (keys %+) {
- print "content of buffer '$name' is $+{$name}\n";
- }
-
-The C<%-> hash is a bit more complete, since it will contain array refs
-holding values from all capture buffers similarly named, if there should
-be many of them.
-
-C<%+> and C<%-> are implemented as tied hashes through the new module
-C<Tie::Hash::NamedCapture>.
-
-Users exposed to the .NET regex engine will find that the perl
-implementation differs in that the numerical ordering of the buffers
-is sequential, and not "unnamed first, then named". Thus in the pattern
-
- /(A)(?<B>B)(C)(?<D>D)/
-
-$1 will be 'A', $2 will be 'B', $3 will be 'C' and $4 will be 'D' and not
-$1 is 'A', $2 is 'C' and $3 is 'B' and $4 is 'D' that a .NET programmer
-would expect. This is considered a feature. :-) (Yves Orton)
-
-=item Possessive Quantifiers
-
-Perl now supports the "possessive quantifier" syntax of the "atomic match"
-pattern. Basically a possessive quantifier matches as much as it can and never
-gives any back. Thus it can be used to control backtracking. The syntax is
-similar to non-greedy matching, except instead of using a '?' as the modifier
-the '+' is used. Thus C<?+>, C<*+>, C<++>, C<{min,max}+> are now legal
-quantifiers. (Yves Orton)
-
-=item Backtracking control verbs
-
-The regex engine now supports a number of special-purpose backtrack
-control verbs: (*THEN), (*PRUNE), (*MARK), (*SKIP), (*COMMIT), (*FAIL)
-and (*ACCEPT). See L<perlre> for their descriptions. (Yves Orton)
-
-=item Relative backreferences
-
-A new syntax C<\g{N}> or C<\gN> where "N" is a decimal integer allows a
-safer form of back-reference notation as well as allowing relative
-backreferences. This should make it easier to generate and embed patterns
-that contain backreferences. See L<perlre/"Capture buffers">. (Yves Orton)
-
-=item C<\K> escape
-
-The functionality of Jeff Pinyan's module Regexp::Keep has been added to
-the core. You can now use in regular expressions the special escape C<\K>
-as a way to do something like floating length positive lookbehind. It is
-also useful in substitutions like:
-
- s/(foo)bar/$1/g
-
-that can now be converted to
-
- s/foo\Kbar//g
-
-which is much more efficient. (Yves Orton)
-
-=item Vertical and horizontal whitespace, and linebreak
-
-Regular expressions now recognize the C<\v> and C<\h> escapes, that match
-vertical and horizontal whitespace, respectively. C<\V> and C<\H>
-logically match their complements.
-
-C<\R> matches a generic linebreak, that is, vertical whitespace, plus
-the multi-character sequence C<"\x0D\x0A">.
-
-=back
-
-=head2 The C<_> prototype
-
-A new prototype character has been added. C<_> is equivalent to C<$> (it
-denotes a scalar), but defaults to C<$_> if the corresponding argument
-isn't supplied. Due to the optional nature of the argument, you can only
-use it at the end of a prototype, or before a semicolon.
-
-This has a small incompatible consequence: the prototype() function has
-been adjusted to return C<_> for some built-ins in appropriate cases (for
-example, C<prototype('CORE::rmdir')>). (Rafael)
-
-=head2 UNITCHECK blocks
-
-C<UNITCHECK>, a new special code block has been introduced, in addition to
-C<BEGIN>, C<CHECK>, C<INIT> and C<END>.
-
-C<CHECK> and C<INIT> blocks, while useful for some specialized purposes,
-are always executed at the transition between the compilation and the
-execution of the main program, and thus are useless whenever code is
-loaded at runtime. On the other hand, C<UNITCHECK> blocks are executed
-just after the unit which defined them has been compiled. See L<perlmod>
-for more information. (Alex Gough)
-
-=head2 readpipe() is now overridable
-
-The built-in function readpipe() is now overridable. Overriding it permits
-also to override its operator counterpart, C<qx//> (a.k.a. C<``>).
-Moreover, it now defaults to C<$_> if no argument is provided. (Rafael)
-
-=head2 default argument for readline()
-
-readline() now defaults to C<*ARGV> if no argument is provided. (Rafael)
-
-=head2 UCD 5.0.0
-
-The copy of the Unicode Character Database included in Perl 5.9 has
-been updated to version 5.0.0.
-
-=head2 Smart match
-
-The smart match operator (C<~~>) is now available by default (you don't
-need to enable it with C<use feature> any longer). (Michael G Schwern)
-
-=head2 Implicit loading of C<feature>
-
-The C<feature> pragma is now implicitly loaded when you require a minimal
-perl version (with the C<use VERSION> construct) greater than, or equal
-to, 5.9.5.
-
-=head1 Modules and Pragmas
-
-=head2 New Pragma, C<mro>
-
-A new pragma, C<mro> (for Method Resolution Order) has been added. It
-permits to switch, on a per-class basis, the algorithm that perl uses to
-find inherited methods in case of a multiple inheritance hierarchy. The
-default MRO hasn't changed (DFS, for Depth First Search). Another MRO is
-available: the C3 algorithm. See L<mro> for more information.
-(Brandon Black)
-
-Note that, due to changes in the implementation of class hierarchy search,
-code that used to undef the C<*ISA> glob will most probably break. Anyway,
-undef'ing C<*ISA> had the side-effect of removing the magic on the @ISA
-array and should not have been done in the first place.
-
-=head2 bignum, bigint, bigrat
-
-The three numeric pragmas C<bignum>, C<bigint> and C<bigrat> are now
-lexically scoped. (Tels)
-
-=head2 Math::BigInt/Math::BigFloat
-
-Many bugs have been fixed; noteworthy are comparisons with NaN, which
-no longer warn about undef values.
-
-The following things are new:
-
-=over 4
-
-=item config()
-
-The config() method now also supports the calling-style
-C<< config('lib') >> in addition to C<< config()->{'lib'} >>.
-
-=item import()
-
-Upon import, using C<< lib => 'Foo' >> now warns if the low-level library
-cannot be found. To suppress the warning, you can use C<< try => 'Foo' >>
-instead. To convert the warning into a die, use C<< only => 'Foo' >>
-instead.
-
-=item roundmode common
-
-A rounding mode of C<common> is now supported.
-
-=back
-
-Also, support for the following methods has been added:
-
-=over 4
-
-=item bpi(), bcos(), bsin(), batan(), batan2()
-
-=item bmuladd()
-
-=item bexp(), bnok()
-
-=item from_hex(), from_oct(), and from_bin()
-
-=item as_oct()
-
-=back
-
-In addition, the default math-backend (Calc (Perl) and FastCalc (XS)) now
-support storing numbers in parts with 9 digits instead of 7 on Perls with
-either 64bit integer or long double support. This means math operations
-scale better and are thus faster for really big numbers.
-
-=head2 New Core Modules
-
-=over 4
-
-=item *
-
-C<Locale::Maketext::Simple>, needed by CPANPLUS, is a simple wrapper around
-C<Locale::Maketext::Lexicon>. Note that C<Locale::Maketext::Lexicon> isn't
-included in the perl core; the behaviour of C<Locale::Maketext::Simple>
-gracefully degrades when the later isn't present.
-
-=item *
-
-C<Params::Check> implements a generic input parsing/checking mechanism. It
-is used by CPANPLUS.
-
-=item *
-
-C<Term::UI> simplifies the task to ask questions at a terminal prompt.
-
-=item *
-
-C<Object::Accessor> provides an interface to create per-object accessors.
-
-=item *
-
-C<Module::Pluggable> is a simple framework to create modules that accept
-pluggable sub-modules.
-
-=item *
-
-C<Module::Load::Conditional> provides simple ways to query and possibly
-load installed modules.
-
-=item *
-
-C<Time::Piece> provides an object oriented interface to time functions,
-overriding the built-ins localtime() and gmtime().
-
-=item *
-
-C<IPC::Cmd> helps to find and run external commands, possibly
-interactively.
-
-=item *
-
-C<File::Fetch> provide a simple generic file fetching mechanism.
-
-=item *
-
-C<Log::Message> and C<Log::Message::Simple> are used by the log facility
-of C<CPANPLUS>.
-
-=item *
-
-C<Archive::Extract> is a generic archive extraction mechanism
-for F<.tar> (plain, gziped or bzipped) or F<.zip> files.
-
-=item *
-
-C<CPANPLUS> provides an API and a command-line tool to access the CPAN
-mirrors.
-
-=back
-
-=head2 Module changes
-
-=over 4
-
-=item C<assertions>
-
-The C<assertions> pragma, its submodules C<assertions::activate> and
-C<assertions::compat> and the B<-A> command-line switch have been removed.
-The interface was not judged mature enough for inclusion in a stable
-release.
-
-=item C<base>
-
-The C<base> pragma now warns if a class tries to inherit from itself.
-(Curtis "Ovid" Poe)
-
-=item C<strict> and C<warnings>
-
-C<strict> and C<warnings> will now complain loudly if they are loaded via
-incorrect casing (as in C<use Strict;>). (Johan Vromans)
-
-=item C<warnings>
-
-The C<warnings> pragma doesn't load C<Carp> anymore. That means that code
-that used C<Carp> routines without having loaded it at compile time might
-need to be adjusted; typically, the following (faulty) code won't work
-anymore, and will require parentheses to be added after the function name:
-
- use warnings;
- require Carp;
- Carp::confess "argh";
-
-=item C<less>
-
-C<less> now does something useful (or at least it tries to). In fact, it
-has been turned into a lexical pragma. So, in your modules, you can now
-test whether your users have requested to use less CPU, or less memory,
-less magic, or maybe even less fat. See L<less> for more. (Joshua ben
-Jore)
-
-=item C<Attribute::Handlers>
-
-C<Attribute::Handlers> can now report the caller's file and line number.
-(David Feldman)
-
-=item C<B::Lint>
-
-C<B::Lint> is now based on C<Module::Pluggable>, and so can be extended
-with plugins. (Joshua ben Jore)
-
-=item C<B>
-
-It's now possible to access the lexical pragma hints (C<%^H>) by using the
-method B::COP::hints_hash(). It returns a C<B::RHE> object, which in turn
-can be used to get a hash reference via the method B::RHE::HASH(). (Joshua
-ben Jore)
-
-=for p5p XXX document this in B.pm too
-
-=item C<Thread>
-
-As the old 5005thread threading model has been removed, in favor of the
-ithreads scheme, the C<Thread> module is now a compatibility wrapper, to
-be used in old code only. It has been removed from the default list of
-dynamic extensions.
-
-=back
-
-=head1 Utility Changes
-
-=head2 C<cpanp>
-
-C<cpanp>, the CPANPLUS shell, has been added. (C<cpanp-run-perl>, an
-helper for CPANPLUS operation, has been added too, but isn't intended for
-direct use).
-
-=head2 C<cpan2dist>
-
-C<cpan2dist> is a new utility, that comes with CPANPLUS. It's a tool to
-create distributions (or packages) from CPAN modules.
-
-=head2 C<pod2html>
-
-The output of C<pod2html> has been enhanced to be more customizable via
-CSS. Some formatting problems were also corrected. (Jari Aalto)
-
-=head1 Documentation
-
-=head2 New manpage, perlunifaq
-
-A new manual page, L<perlunifaq> (the Perl Unicode FAQ), has been added
-(Juerd Waalboer).
-
-=head1 Installation and Configuration Improvements
-
-=head2 C++ compatibility
-
-Efforts have been made to make perl and the core XS modules compilable
-with various C++ compilers (although the situation is not perfect with
-some of the compilers on some of the platforms tested.)
-
-=head2 Visual C++
-
-Perl now can be compiled with Microsoft Visual C++ 2005.
-
-=head2 Static build on Win32
-
-It's now possible to build a C<perl-static.exe> that doesn't depend
-on C<perl59.dll> on Win32. See the Win32 makefiles for details.
-(Vadim Konovalov)
-
-=head2 win32 builds
-
-All win32 builds (MS-Win, WinCE) have been merged and cleaned up.
-
-=head2 C<d_pseudofork> and C<d_printf_format_null>
-
-A new configuration variable, available as C<$Config{d_pseudofork}> in
-the L<Config> module, has been added, to distinguish real fork() support
-from fake pseudofork used on Windows platforms.
-
-A new configuration variable, C<d_printf_format_null>, has been added,
-to see if printf-like formats are allowed to be NULL.
-
-=head2 Help
-
-C<Configure -h> has been extended with the most used option.
-
-Much less 'Whoa there' messages.
-
-=head2 64bit systems
-
-Better detection of 64bit(only) systems, and setting all the (library)
-paths accordingly.
-
-=head2 Ports
-
-Perl has been reported to work on MidnightBSD.
-
-Support for Cray XT4 Catamount/Qk has been added.
-
-Vendor patches have been merged for RedHat and GenToo.
-
-=head1 Selected Bug Fixes
-
-PerlIO::scalar will now prevent writing to read-only scalars. Moreover,
-seek() is now supported with PerlIO::scalar-based filehandles, the
-underlying string being zero-filled as needed. (Rafael, Jarkko Hietaniemi)
-
-study() never worked for UTF-8 strings, but could lead to false results.
-It's now a no-op on UTF-8 data. (Yves Orton)
-
-The signals SIGILL, SIGBUS and SIGSEGV are now always delivered in an
-"unsafe" manner (contrary to other signals, that are deferred until the
-perl interpreter reaches a reasonably stable state; see
-L<perlipc/"Deferred Signals (Safe Signals)">). (Rafael)
-
-When a module or a file is loaded through an @INC-hook, and when this hook
-has set a filename entry in %INC, __FILE__ is now set for this module
-accordingly to the contents of that %INC entry. (Rafael)
-
-The C<-w> and C<-t> switches can now be used together without messing
-up what categories of warnings are activated or not. (Rafael)
-
-Duping a filehandle which has the C<:utf8> PerlIO layer set will now
-properly carry that layer on the duped filehandle. (Rafael)
-
-Localizing an hash element whose key was given as a variable didn't work
-correctly if the variable was changed while the local() was in effect (as
-in C<local $h{$x}; ++$x>). (Bo Lindbergh)
-
-=head1 New or Changed Diagnostics
-
-=head2 Deprecations
-
-Two deprecation warnings have been added: (Rafael)
-
- Opening dirhandle %s also as a file
- Opening filehandle %s also as a directory
-
-=head1 Changed Internals
-
-The anonymous hash and array constructors now take 1 op in the optree
-instead of 3, now that pp_anonhash and pp_anonlist return a reference to
-an hash/array when the op is flagged with OPf_SPECIAL (Nicholas Clark).
-
-=for p5p XXX have we some docs on how to create regexp engine plugins, since that's now possible ? (perlreguts)
-
-=for p5p XXX new BIND SV type, #29544, #29642
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles
-recently posted to the comp.lang.perl.misc newsgroup and the perl
-bug database at http://rt.perl.org/rt3/ . There may also be
-information at http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug at perl.org to be
-analysed by the Perl porting team.
-
-=head1 SEE ALSO
-
-The F<Changes> file for exhaustive details on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
Deleted: trunk/contrib/perl/pod/perlapi.pod
===================================================================
--- trunk/contrib/perl/pod/perlapi.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlapi.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,7193 +0,0 @@
--*- buffer-read-only: t -*-
-
-!!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-This file is built by autodoc.pl extracting documentation from the C source
-files.
-
-=head1 NAME
-
-perlapi - autogenerated documentation for the perl public API
-
-=head1 DESCRIPTION
-X<Perl API> X<API> X<api>
-
-This file contains the documentation of the perl public API generated by
-embed.pl, specifically a listing of functions, macros, flags, and variables
-that may be used by extension writers. The interfaces of any functions that
-are not listed here are subject to change without notice. For this reason,
-blindly using functions listed in proto.h is to be avoided when writing
-extensions.
-
-Note that all Perl API global variables must be referenced with the C<PL_>
-prefix. Some macros are provided for compatibility with the older,
-unadorned names, but this support may be disabled in a future release.
-
-The listing is alphabetical, case insensitive.
-
-
-=head1 "Gimme" Values
-
-=over 8
-
-=item GIMME
-X<GIMME>
-
-A backward-compatible version of C<GIMME_V> which can only return
-C<G_SCALAR> or C<G_ARRAY>; in a void context, it returns C<G_SCALAR>.
-Deprecated. Use C<GIMME_V> instead.
-
- U32 GIMME
-
-=for hackers
-Found in file op.h
-
-=item GIMME_V
-X<GIMME_V>
-
-The XSUB-writer's equivalent to Perl's C<wantarray>. Returns C<G_VOID>,
-C<G_SCALAR> or C<G_ARRAY> for void, scalar or list context,
-respectively.
-
- U32 GIMME_V
-
-=for hackers
-Found in file op.h
-
-=item G_ARRAY
-X<G_ARRAY>
-
-Used to indicate list context. See C<GIMME_V>, C<GIMME> and
-L<perlcall>.
-
-=for hackers
-Found in file cop.h
-
-=item G_DISCARD
-X<G_DISCARD>
-
-Indicates that arguments returned from a callback should be discarded. See
-L<perlcall>.
-
-=for hackers
-Found in file cop.h
-
-=item G_EVAL
-X<G_EVAL>
-
-Used to force a Perl C<eval> wrapper around a callback. See
-L<perlcall>.
-
-=for hackers
-Found in file cop.h
-
-=item G_NOARGS
-X<G_NOARGS>
-
-Indicates that no arguments are being sent to a callback. See
-L<perlcall>.
-
-=for hackers
-Found in file cop.h
-
-=item G_SCALAR
-X<G_SCALAR>
-
-Used to indicate scalar context. See C<GIMME_V>, C<GIMME>, and
-L<perlcall>.
-
-=for hackers
-Found in file cop.h
-
-=item G_VOID
-X<G_VOID>
-
-Used to indicate void context. See C<GIMME_V> and L<perlcall>.
-
-=for hackers
-Found in file cop.h
-
-
-=back
-
-=head1 Array Manipulation Functions
-
-=over 8
-
-=item AvFILL
-X<AvFILL>
-
-Same as C<av_len()>. Deprecated, use C<av_len()> instead.
-
- int AvFILL(AV* av)
-
-=for hackers
-Found in file av.h
-
-=item av_clear
-X<av_clear>
-
-Clears an array, making it empty. Does not free the memory used by the
-array itself.
-
- void av_clear(AV* ar)
-
-=for hackers
-Found in file av.c
-
-=item av_create_and_push
-X<av_create_and_push>
-
-Push an SV onto the end of the array, creating the array if necessary.
-A small internal helper function to remove a commonly duplicated idiom.
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- void av_create_and_push(AV **const avp, SV *const val)
-
-=for hackers
-Found in file av.c
-
-=item av_create_and_unshift_one
-X<av_create_and_unshift_one>
-
-Unshifts an SV onto the beginning of the array, creating the array if
-necessary.
-A small internal helper function to remove a commonly duplicated idiom.
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- SV** av_create_and_unshift_one(AV **const avp, SV *const val)
-
-=for hackers
-Found in file av.c
-
-=item av_delete
-X<av_delete>
-
-Deletes the element indexed by C<key> from the array. Returns the
-deleted element. If C<flags> equals C<G_DISCARD>, the element is freed
-and null is returned.
-
- SV* av_delete(AV* ar, I32 key, I32 flags)
-
-=for hackers
-Found in file av.c
-
-=item av_exists
-X<av_exists>
-
-Returns true if the element indexed by C<key> has been initialized.
-
-This relies on the fact that uninitialized array elements are set to
-C<&PL_sv_undef>.
-
- bool av_exists(AV* ar, I32 key)
-
-=for hackers
-Found in file av.c
-
-=item av_extend
-X<av_extend>
-
-Pre-extend an array. The C<key> is the index to which the array should be
-extended.
-
- void av_extend(AV* ar, I32 key)
-
-=for hackers
-Found in file av.c
-
-=item av_fetch
-X<av_fetch>
-
-Returns the SV at the specified index in the array. The C<key> is the
-index. If C<lval> is set then the fetch will be part of a store. Check
-that the return value is non-null before dereferencing it to a C<SV*>.
-
-See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for
-more information on how to use this function on tied arrays.
-
- SV** av_fetch(AV* ar, I32 key, I32 lval)
-
-=for hackers
-Found in file av.c
-
-=item av_fill
-X<av_fill>
-
-Set the highest index in the array to the given number, equivalent to
-Perl's C<$#array = $fill;>.
-
-The number of elements in the an array will be C<fill + 1> after
-av_fill() returns. If the array was previously shorter then the
-additional elements appended are set to C<PL_sv_undef>. If the array
-was longer, then the excess elements are freed. C<av_fill(av, -1)> is
-the same as C<av_clear(av)>.
-
- void av_fill(AV* ar, I32 fill)
-
-=for hackers
-Found in file av.c
-
-=item av_len
-X<av_len>
-
-Returns the highest index in the array. The number of elements in the
-array is C<av_len(av) + 1>. Returns -1 if the array is empty.
-
- I32 av_len(const AV* ar)
-
-=for hackers
-Found in file av.c
-
-=item av_make
-X<av_make>
-
-Creates a new AV and populates it with a list of SVs. The SVs are copied
-into the array, so they may be freed after the call to av_make. The new AV
-will have a reference count of 1.
-
- AV* av_make(I32 size, SV** svp)
-
-=for hackers
-Found in file av.c
-
-=item av_pop
-X<av_pop>
-
-Pops an SV off the end of the array. Returns C<&PL_sv_undef> if the array
-is empty.
-
- SV* av_pop(AV* ar)
-
-=for hackers
-Found in file av.c
-
-=item av_push
-X<av_push>
-
-Pushes an SV onto the end of the array. The array will grow automatically
-to accommodate the addition.
-
- void av_push(AV* ar, SV* val)
-
-=for hackers
-Found in file av.c
-
-=item av_shift
-X<av_shift>
-
-Shifts an SV off the beginning of the array.
-
- SV* av_shift(AV* ar)
-
-=for hackers
-Found in file av.c
-
-=item av_store
-X<av_store>
-
-Stores an SV in an array. The array index is specified as C<key>. The
-return value will be NULL if the operation failed or if the value did not
-need to be actually stored within the array (as in the case of tied
-arrays). Otherwise it can be dereferenced to get the original C<SV*>. Note
-that the caller is responsible for suitably incrementing the reference
-count of C<val> before the call, and decrementing it if the function
-returned NULL.
-
-See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for
-more information on how to use this function on tied arrays.
-
- SV** av_store(AV* ar, I32 key, SV* val)
-
-=for hackers
-Found in file av.c
-
-=item av_undef
-X<av_undef>
-
-Undefines the array. Frees the memory used by the array itself.
-
- void av_undef(AV* ar)
-
-=for hackers
-Found in file av.c
-
-=item av_unshift
-X<av_unshift>
-
-Unshift the given number of C<undef> values onto the beginning of the
-array. The array will grow automatically to accommodate the addition. You
-must then use C<av_store> to assign values to these new elements.
-
- void av_unshift(AV* ar, I32 num)
-
-=for hackers
-Found in file av.c
-
-=item get_av
-X<get_av>
-
-Returns the AV of the specified Perl array. If C<create> is set and the
-Perl variable does not exist then it will be created. If C<create> is not
-set and the variable does not exist then NULL is returned.
-
-NOTE: the perl_ form of this function is deprecated.
-
- AV* get_av(const char* name, I32 create)
-
-=for hackers
-Found in file perl.c
-
-=item newAV
-X<newAV>
-
-Creates a new AV. The reference count is set to 1.
-
- AV* newAV()
-
-=for hackers
-Found in file av.c
-
-=item sortsv
-X<sortsv>
-
-Sort an array. Here is an example:
-
- sortsv(AvARRAY(av), av_len(av)+1, Perl_sv_cmp_locale);
-
-Currently this always uses mergesort. See sortsv_flags for a more
-flexible routine.
-
- void sortsv(SV** array, size_t num_elts, SVCOMPARE_t cmp)
-
-=for hackers
-Found in file pp_sort.c
-
-=item sortsv_flags
-X<sortsv_flags>
-
-Sort an array, with various options.
-
- void sortsv_flags(SV** array, size_t num_elts, SVCOMPARE_t cmp, U32 flags)
-
-=for hackers
-Found in file pp_sort.c
-
-
-=back
-
-=head1 Callback Functions
-
-=over 8
-
-=item call_argv
-X<call_argv>
-
-Performs a callback to the specified Perl sub. See L<perlcall>.
-
-NOTE: the perl_ form of this function is deprecated.
-
- I32 call_argv(const char* sub_name, I32 flags, char** argv)
-
-=for hackers
-Found in file perl.c
-
-=item call_method
-X<call_method>
-
-Performs a callback to the specified Perl method. The blessed object must
-be on the stack. See L<perlcall>.
-
-NOTE: the perl_ form of this function is deprecated.
-
- I32 call_method(const char* methname, I32 flags)
-
-=for hackers
-Found in file perl.c
-
-=item call_pv
-X<call_pv>
-
-Performs a callback to the specified Perl sub. See L<perlcall>.
-
-NOTE: the perl_ form of this function is deprecated.
-
- I32 call_pv(const char* sub_name, I32 flags)
-
-=for hackers
-Found in file perl.c
-
-=item call_sv
-X<call_sv>
-
-Performs a callback to the Perl sub whose name is in the SV. See
-L<perlcall>.
-
-NOTE: the perl_ form of this function is deprecated.
-
- I32 call_sv(SV* sv, I32 flags)
-
-=for hackers
-Found in file perl.c
-
-=item ENTER
-X<ENTER>
-
-Opening bracket on a callback. See C<LEAVE> and L<perlcall>.
-
- ENTER;
-
-=for hackers
-Found in file scope.h
-
-=item eval_pv
-X<eval_pv>
-
-Tells Perl to C<eval> the given string and return an SV* result.
-
-NOTE: the perl_ form of this function is deprecated.
-
- SV* eval_pv(const char* p, I32 croak_on_error)
-
-=for hackers
-Found in file perl.c
-
-=item eval_sv
-X<eval_sv>
-
-Tells Perl to C<eval> the string in the SV.
-
-NOTE: the perl_ form of this function is deprecated.
-
- I32 eval_sv(SV* sv, I32 flags)
-
-=for hackers
-Found in file perl.c
-
-=item FREETMPS
-X<FREETMPS>
-
-Closing bracket for temporaries on a callback. See C<SAVETMPS> and
-L<perlcall>.
-
- FREETMPS;
-
-=for hackers
-Found in file scope.h
-
-=item LEAVE
-X<LEAVE>
-
-Closing bracket on a callback. See C<ENTER> and L<perlcall>.
-
- LEAVE;
-
-=for hackers
-Found in file scope.h
-
-=item SAVETMPS
-X<SAVETMPS>
-
-Opening bracket for temporaries on a callback. See C<FREETMPS> and
-L<perlcall>.
-
- SAVETMPS;
-
-=for hackers
-Found in file scope.h
-
-
-=back
-
-=head1 Character classes
-
-=over 8
-
-=item isALNUM
-X<isALNUM>
-
-Returns a boolean indicating whether the C C<char> is an ASCII alphanumeric
-character (including underscore) or digit.
-
- bool isALNUM(char ch)
-
-=for hackers
-Found in file handy.h
-
-=item isALPHA
-X<isALPHA>
-
-Returns a boolean indicating whether the C C<char> is an ASCII alphabetic
-character.
-
- bool isALPHA(char ch)
-
-=for hackers
-Found in file handy.h
-
-=item isDIGIT
-X<isDIGIT>
-
-Returns a boolean indicating whether the C C<char> is an ASCII
-digit.
-
- bool isDIGIT(char ch)
-
-=for hackers
-Found in file handy.h
-
-=item isLOWER
-X<isLOWER>
-
-Returns a boolean indicating whether the C C<char> is a lowercase
-character.
-
- bool isLOWER(char ch)
-
-=for hackers
-Found in file handy.h
-
-=item isSPACE
-X<isSPACE>
-
-Returns a boolean indicating whether the C C<char> is whitespace.
-
- bool isSPACE(char ch)
-
-=for hackers
-Found in file handy.h
-
-=item isUPPER
-X<isUPPER>
-
-Returns a boolean indicating whether the C C<char> is an uppercase
-character.
-
- bool isUPPER(char ch)
-
-=for hackers
-Found in file handy.h
-
-=item toLOWER
-X<toLOWER>
-
-Converts the specified character to lowercase.
-
- char toLOWER(char ch)
-
-=for hackers
-Found in file handy.h
-
-=item toUPPER
-X<toUPPER>
-
-Converts the specified character to uppercase.
-
- char toUPPER(char ch)
-
-=for hackers
-Found in file handy.h
-
-
-=back
-
-=head1 Cloning an interpreter
-
-=over 8
-
-=item perl_clone
-X<perl_clone>
-
-Create and return a new interpreter by cloning the current one.
-
-perl_clone takes these flags as parameters:
-
-CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
-without it we only clone the data and zero the stacks,
-with it we copy the stacks and the new perl interpreter is
-ready to run at the exact same point as the previous one.
-The pseudo-fork code uses COPY_STACKS while the
-threads->create doesn't.
-
-CLONEf_KEEP_PTR_TABLE
-perl_clone keeps a ptr_table with the pointer of the old
-variable as a key and the new variable as a value,
-this allows it to check if something has been cloned and not
-clone it again but rather just use the value and increase the
-refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
-the ptr_table using the function
-C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
-reason to keep it around is if you want to dup some of your own
-variable who are outside the graph perl scans, example of this
-code is in threads.xs create
-
-CLONEf_CLONE_HOST
-This is a win32 thing, it is ignored on unix, it tells perls
-win32host code (which is c++) to clone itself, this is needed on
-win32 if you want to run two threads at the same time,
-if you just want to do some stuff in a separate perl interpreter
-and then throw it away and return to the original one,
-you don't need to do anything.
-
- PerlInterpreter* perl_clone(PerlInterpreter* interp, UV flags)
-
-=for hackers
-Found in file sv.c
-
-
-=back
-
-=head1 CV Manipulation Functions
-
-=over 8
-
-=item CvSTASH
-X<CvSTASH>
-
-Returns the stash of the CV.
-
- HV* CvSTASH(CV* cv)
-
-=for hackers
-Found in file cv.h
-
-=item get_cv
-X<get_cv>
-
-Uses C<strlen> to get the length of C<name>, then calls C<get_cvn_flags>.
-
-NOTE: the perl_ form of this function is deprecated.
-
- CV* get_cv(const char* name, I32 flags)
-
-=for hackers
-Found in file perl.c
-
-=item get_cvn_flags
-X<get_cvn_flags>
-
-Returns the CV of the specified Perl subroutine. C<flags> are passed to
-C<gv_fetchpvn_flags>. If C<GV_ADD> is set and the Perl subroutine does not
-exist then it will be declared (which has the same effect as saying
-C<sub name;>). If C<GV_ADD> is not set and the subroutine does not exist
-then NULL is returned.
-
-NOTE: the perl_ form of this function is deprecated.
-
- CV* get_cvn_flags(const char* name, STRLEN len, I32 flags)
-
-=for hackers
-Found in file perl.c
-
-
-=back
-
-=head1 Embedding Functions
-
-=over 8
-
-=item cv_undef
-X<cv_undef>
-
-Clear out all the active components of a CV. This can happen either
-by an explicit C<undef &foo>, or by the reference count going to zero.
-In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
-children can still follow the full lexical scope chain.
-
- void cv_undef(CV* cv)
-
-=for hackers
-Found in file op.c
-
-=item load_module
-X<load_module>
-
-Loads the module whose name is pointed to by the string part of name.
-Note that the actual module name, not its filename, should be given.
-Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
-PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
-(or 0 for no flags). ver, if specified, provides version semantics
-similar to C<use Foo::Bar VERSION>. The optional trailing SV*
-arguments can be used to specify arguments to the module's import()
-method, similar to C<use Foo::Bar VERSION LIST>.
-
- void load_module(U32 flags, SV* name, SV* ver, ...)
-
-=for hackers
-Found in file op.c
-
-=item nothreadhook
-X<nothreadhook>
-
-Stub that provides thread hook for perl_destruct when there are
-no threads.
-
- int nothreadhook()
-
-=for hackers
-Found in file perl.c
-
-=item perl_alloc
-X<perl_alloc>
-
-Allocates a new Perl interpreter. See L<perlembed>.
-
- PerlInterpreter* perl_alloc()
-
-=for hackers
-Found in file perl.c
-
-=item perl_construct
-X<perl_construct>
-
-Initializes a new Perl interpreter. See L<perlembed>.
-
- void perl_construct(PerlInterpreter* interp)
-
-=for hackers
-Found in file perl.c
-
-=item perl_destruct
-X<perl_destruct>
-
-Shuts down a Perl interpreter. See L<perlembed>.
-
- int perl_destruct(PerlInterpreter* interp)
-
-=for hackers
-Found in file perl.c
-
-=item perl_free
-X<perl_free>
-
-Releases a Perl interpreter. See L<perlembed>.
-
- void perl_free(PerlInterpreter* interp)
-
-=for hackers
-Found in file perl.c
-
-=item perl_parse
-X<perl_parse>
-
-Tells a Perl interpreter to parse a Perl script. See L<perlembed>.
-
- int perl_parse(PerlInterpreter* interp, XSINIT_t xsinit, int argc, char** argv, char** env)
-
-=for hackers
-Found in file perl.c
-
-=item perl_run
-X<perl_run>
-
-Tells a Perl interpreter to run. See L<perlembed>.
-
- int perl_run(PerlInterpreter* interp)
-
-=for hackers
-Found in file perl.c
-
-=item require_pv
-X<require_pv>
-
-Tells Perl to C<require> the file named by the string argument. It is
-analogous to the Perl code C<eval "require '$file'">. It's even
-implemented that way; consider using load_module instead.
-
-NOTE: the perl_ form of this function is deprecated.
-
- void require_pv(const char* pv)
-
-=for hackers
-Found in file perl.c
-
-
-=back
-
-=head1 Functions in file dump.c
-
-
-=over 8
-
-=item pv_display
-X<pv_display>
-
- char *pv_display(SV *dsv, const char *pv, STRLEN cur, STRLEN len,
- STRLEN pvlim, U32 flags)
-
-Similar to
-
- pv_escape(dsv,pv,cur,pvlim,PERL_PV_ESCAPE_QUOTE);
-
-except that an additional "\0" will be appended to the string when
-len > cur and pv[cur] is "\0".
-
-Note that the final string may be up to 7 chars longer than pvlim.
-
- char* pv_display(SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim)
-
-=for hackers
-Found in file dump.c
-
-=item pv_escape
-X<pv_escape>
-
- |const STRLEN count|const STRLEN max
- |STRLEN const *escaped, const U32 flags
-
-Escapes at most the first "count" chars of pv and puts the results into
-dsv such that the size of the escaped string will not exceed "max" chars
-and will not contain any incomplete escape sequences.
-
-If flags contains PERL_PV_ESCAPE_QUOTE then any double quotes in the string
-will also be escaped.
-
-Normally the SV will be cleared before the escaped string is prepared,
-but when PERL_PV_ESCAPE_NOCLEAR is set this will not occur.
-
-If PERL_PV_ESCAPE_UNI is set then the input string is treated as Unicode,
-if PERL_PV_ESCAPE_UNI_DETECT is set then the input string is scanned
-using C<is_utf8_string()> to determine if it is Unicode.
-
-If PERL_PV_ESCAPE_ALL is set then all input chars will be output
-using C<\x01F1> style escapes, otherwise only chars above 255 will be
-escaped using this style, other non printable chars will use octal or
-common escaped patterns like C<\n>. If PERL_PV_ESCAPE_NOBACKSLASH
-then all chars below 255 will be treated as printable and
-will be output as literals.
-
-If PERL_PV_ESCAPE_FIRSTCHAR is set then only the first char of the
-string will be escaped, regardles of max. If the string is utf8 and
-the chars value is >255 then it will be returned as a plain hex
-sequence. Thus the output will either be a single char,
-an octal escape sequence, a special escape like C<\n> or a 3 or
-more digit hex value.
-
-If PERL_PV_ESCAPE_RE is set then the escape char used will be a '%' and
-not a '\\'. This is because regexes very often contain backslashed
-sequences, whereas '%' is not a particularly common character in patterns.
-
-Returns a pointer to the escaped text as held by dsv.
-
-NOTE: the perl_ form of this function is deprecated.
-
- char* pv_escape(SV *dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags)
-
-=for hackers
-Found in file dump.c
-
-=item pv_pretty
-X<pv_pretty>
-
- |const STRLEN count|const STRLEN max\
- |const char const *start_color| const char const *end_color\
- |const U32 flags
-
-Converts a string into something presentable, handling escaping via
-pv_escape() and supporting quoting and ellipses.
-
-If the PERL_PV_PRETTY_QUOTE flag is set then the result will be
-double quoted with any double quotes in the string escaped. Otherwise
-if the PERL_PV_PRETTY_LTGT flag is set then the result be wrapped in
-angle brackets.
-
-If the PERL_PV_PRETTY_ELLIPSES flag is set and not all characters in
-string were output then an ellipsis C<...> will be appended to the
-string. Note that this happens AFTER it has been quoted.
-
-If start_color is non-null then it will be inserted after the opening
-quote (if there is one) but before the escaped text. If end_color
-is non-null then it will be inserted after the escaped text but before
-any quotes or ellipses.
-
-Returns a pointer to the prettified text as held by dsv.
-
-NOTE: the perl_ form of this function is deprecated.
-
- char* pv_pretty(SV *dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags)
-
-=for hackers
-Found in file dump.c
-
-
-=back
-
-=head1 Functions in file mathoms.c
-
-
-=over 8
-
-=item gv_fetchmethod
-X<gv_fetchmethod>
-
-See L<gv_fetchmethod_autoload>.
-
- GV* gv_fetchmethod(HV* stash, const char* name)
-
-=for hackers
-Found in file mathoms.c
-
-=item pack_cat
-X<pack_cat>
-
-The engine implementing pack() Perl function. Note: parameters next_in_list and
-flags are not used. This call should not be used; use packlist instead.
-
- void pack_cat(SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist, SV ***next_in_list, U32 flags)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_2pvbyte_nolen
-X<sv_2pvbyte_nolen>
-
-Return a pointer to the byte-encoded representation of the SV.
-May cause the SV to be downgraded from UTF-8 as a side-effect.
-
-Usually accessed via the C<SvPVbyte_nolen> macro.
-
- char* sv_2pvbyte_nolen(SV* sv)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_2pvutf8_nolen
-X<sv_2pvutf8_nolen>
-
-Return a pointer to the UTF-8-encoded representation of the SV.
-May cause the SV to be upgraded to UTF-8 as a side-effect.
-
-Usually accessed via the C<SvPVutf8_nolen> macro.
-
- char* sv_2pvutf8_nolen(SV* sv)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_2pv_nolen
-X<sv_2pv_nolen>
-
-Like C<sv_2pv()>, but doesn't return the length too. You should usually
-use the macro wrapper C<SvPV_nolen(sv)> instead.
- char* sv_2pv_nolen(SV* sv)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_catpvn_mg
-X<sv_catpvn_mg>
-
-Like C<sv_catpvn>, but also handles 'set' magic.
-
- void sv_catpvn_mg(SV *sv, const char *ptr, STRLEN len)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_catsv_mg
-X<sv_catsv_mg>
-
-Like C<sv_catsv>, but also handles 'set' magic.
-
- void sv_catsv_mg(SV *dstr, SV *sstr)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_force_normal
-X<sv_force_normal>
-
-Undo various types of fakery on an SV: if the PV is a shared string, make
-a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
-an xpvmg. See also C<sv_force_normal_flags>.
-
- void sv_force_normal(SV *sv)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_iv
-X<sv_iv>
-
-A private implementation of the C<SvIVx> macro for compilers which can't
-cope with complex macro expressions. Always use the macro instead.
-
- IV sv_iv(SV* sv)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_nolocking
-X<sv_nolocking>
-
-Dummy routine which "locks" an SV when there is no locking module present.
-Exists to avoid test for a NULL function pointer and because it could
-potentially warn under some level of strict-ness.
-
-"Superseded" by sv_nosharing().
-
- void sv_nolocking(SV *sv)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_nounlocking
-X<sv_nounlocking>
-
-Dummy routine which "unlocks" an SV when there is no locking module present.
-Exists to avoid test for a NULL function pointer and because it could
-potentially warn under some level of strict-ness.
-
-"Superseded" by sv_nosharing().
-
- void sv_nounlocking(SV *sv)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_nv
-X<sv_nv>
-
-A private implementation of the C<SvNVx> macro for compilers which can't
-cope with complex macro expressions. Always use the macro instead.
-
- NV sv_nv(SV* sv)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_pv
-X<sv_pv>
-
-Use the C<SvPV_nolen> macro instead
-
- char* sv_pv(SV *sv)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_pvbyte
-X<sv_pvbyte>
-
-Use C<SvPVbyte_nolen> instead.
-
- char* sv_pvbyte(SV *sv)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_pvbyten
-X<sv_pvbyten>
-
-A private implementation of the C<SvPVbyte> macro for compilers
-which can't cope with complex macro expressions. Always use the macro
-instead.
-
- char* sv_pvbyten(SV *sv, STRLEN *len)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_pvn
-X<sv_pvn>
-
-A private implementation of the C<SvPV> macro for compilers which can't
-cope with complex macro expressions. Always use the macro instead.
-
- char* sv_pvn(SV *sv, STRLEN *len)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_pvutf8
-X<sv_pvutf8>
-
-Use the C<SvPVutf8_nolen> macro instead
-
- char* sv_pvutf8(SV *sv)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_pvutf8n
-X<sv_pvutf8n>
-
-A private implementation of the C<SvPVutf8> macro for compilers
-which can't cope with complex macro expressions. Always use the macro
-instead.
-
- char* sv_pvutf8n(SV *sv, STRLEN *len)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_taint
-X<sv_taint>
-
-Taint an SV. Use C<SvTAINTED_on> instead.
- void sv_taint(SV* sv)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_unref
-X<sv_unref>
-
-Unsets the RV status of the SV, and decrements the reference count of
-whatever was being referenced by the RV. This can almost be thought of
-as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
-being zero. See C<SvROK_off>.
-
- void sv_unref(SV* sv)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_usepvn
-X<sv_usepvn>
-
-Tells an SV to use C<ptr> to find its string value. Implemented by
-calling C<sv_usepvn_flags> with C<flags> of 0, hence does not handle 'set'
-magic. See C<sv_usepvn_flags>.
-
- void sv_usepvn(SV* sv, char* ptr, STRLEN len)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_usepvn_mg
-X<sv_usepvn_mg>
-
-Like C<sv_usepvn>, but also handles 'set' magic.
-
- void sv_usepvn_mg(SV *sv, char *ptr, STRLEN len)
-
-=for hackers
-Found in file mathoms.c
-
-=item sv_uv
-X<sv_uv>
-
-A private implementation of the C<SvUVx> macro for compilers which can't
-cope with complex macro expressions. Always use the macro instead.
-
- UV sv_uv(SV* sv)
-
-=for hackers
-Found in file mathoms.c
-
-=item unpack_str
-X<unpack_str>
-
-The engine implementing unpack() Perl function. Note: parameters strbeg, new_s
-and ocnt are not used. This call should not be used, use unpackstring instead.
-
- I32 unpack_str(const char *pat, const char *patend, const char *s, const char *strbeg, const char *strend, char **new_s, I32 ocnt, U32 flags)
-
-=for hackers
-Found in file mathoms.c
-
-
-=back
-
-=head1 Functions in file pp_ctl.c
-
-
-=over 8
-
-=item find_runcv
-X<find_runcv>
-
-Locate the CV corresponding to the currently executing sub or eval.
-If db_seqp is non_null, skip CVs that are in the DB package and populate
-*db_seqp with the cop sequence number at the point that the DB:: code was
-entered. (allows debuggers to eval in the scope of the breakpoint rather
-than in the scope of the debugger itself).
-
- CV* find_runcv(U32 *db_seqp)
-
-=for hackers
-Found in file pp_ctl.c
-
-
-=back
-
-=head1 Functions in file pp_pack.c
-
-
-=over 8
-
-=item packlist
-X<packlist>
-
-The engine implementing pack() Perl function.
-
- void packlist(SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist)
-
-=for hackers
-Found in file pp_pack.c
-
-=item unpackstring
-X<unpackstring>
-
-The engine implementing unpack() Perl function. C<unpackstring> puts the
-extracted list items on the stack and returns the number of elements.
-Issue C<PUTBACK> before and C<SPAGAIN> after the call to this function.
-
- I32 unpackstring(const char *pat, const char *patend, const char *s, const char *strend, U32 flags)
-
-=for hackers
-Found in file pp_pack.c
-
-
-=back
-
-=head1 GV Functions
-
-=over 8
-
-=item GvSV
-X<GvSV>
-
-Return the SV from the GV.
-
- SV* GvSV(GV* gv)
-
-=for hackers
-Found in file gv.h
-
-=item gv_const_sv
-X<gv_const_sv>
-
-If C<gv> is a typeglob whose subroutine entry is a constant sub eligible for
-inlining, or C<gv> is a placeholder reference that would be promoted to such
-a typeglob, then returns the value returned by the sub. Otherwise, returns
-NULL.
-
- SV* gv_const_sv(GV* gv)
-
-=for hackers
-Found in file gv.c
-
-=item gv_fetchmeth
-X<gv_fetchmeth>
-
-Returns the glob with the given C<name> and a defined subroutine or
-C<NULL>. The glob lives in the given C<stash>, or in the stashes
-accessible via @ISA and UNIVERSAL::.
-
-The argument C<level> should be either 0 or -1. If C<level==0>, as a
-side-effect creates a glob with the given C<name> in the given C<stash>
-which in the case of success contains an alias for the subroutine, and sets
-up caching info for this glob.
-
-This function grants C<"SUPER"> token as a postfix of the stash name. The
-GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
-visible to Perl code. So when calling C<call_sv>, you should not use
-the GV directly; instead, you should use the method's CV, which can be
-obtained from the GV with the C<GvCV> macro.
-
- GV* gv_fetchmeth(HV* stash, const char* name, STRLEN len, I32 level)
-
-=for hackers
-Found in file gv.c
-
-=item gv_fetchmethod_autoload
-X<gv_fetchmethod_autoload>
-
-Returns the glob which contains the subroutine to call to invoke the method
-on the C<stash>. In fact in the presence of autoloading this may be the
-glob for "AUTOLOAD". In this case the corresponding variable $AUTOLOAD is
-already setup.
-
-The third parameter of C<gv_fetchmethod_autoload> determines whether
-AUTOLOAD lookup is performed if the given method is not present: non-zero
-means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
-Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
-with a non-zero C<autoload> parameter.
-
-These functions grant C<"SUPER"> token as a prefix of the method name. Note
-that if you want to keep the returned glob for a long time, you need to
-check for it being "AUTOLOAD", since at the later time the call may load a
-different subroutine due to $AUTOLOAD changing its value. Use the glob
-created via a side effect to do this.
-
-These functions have the same side-effects and as C<gv_fetchmeth> with
-C<level==0>. C<name> should be writable if contains C<':'> or C<'
-''>. The warning against passing the GV returned by C<gv_fetchmeth> to
-C<call_sv> apply equally to these functions.
-
- GV* gv_fetchmethod_autoload(HV* stash, const char* name, I32 autoload)
-
-=for hackers
-Found in file gv.c
-
-=item gv_fetchmeth_autoload
-X<gv_fetchmeth_autoload>
-
-Same as gv_fetchmeth(), but looks for autoloaded subroutines too.
-Returns a glob for the subroutine.
-
-For an autoloaded subroutine without a GV, will create a GV even
-if C<level < 0>. For an autoloaded subroutine without a stub, GvCV()
-of the result may be zero.
-
- GV* gv_fetchmeth_autoload(HV* stash, const char* name, STRLEN len, I32 level)
-
-=for hackers
-Found in file gv.c
-
-=item gv_stashpv
-X<gv_stashpv>
-
-Returns a pointer to the stash for a specified package. Uses C<strlen> to
-determine the length of C<name>, then calls C<gv_stashpvn()>.
-
- HV* gv_stashpv(const char* name, I32 flags)
-
-=for hackers
-Found in file gv.c
-
-=item gv_stashpvn
-X<gv_stashpvn>
-
-Returns a pointer to the stash for a specified package. The C<namelen>
-parameter indicates the length of the C<name>, in bytes. C<flags> is passed
-to C<gv_fetchpvn_flags()>, so if set to C<GV_ADD> then the package will be
-created if it does not already exist. If the package does not exist and
-C<flags> is 0 (or any other setting that does not create packages) then NULL
-is returned.
-
-
- HV* gv_stashpvn(const char* name, U32 namelen, I32 flags)
-
-=for hackers
-Found in file gv.c
-
-=item gv_stashpvs
-X<gv_stashpvs>
-
-Like C<gv_stashpvn>, but takes a literal string instead of a string/length pair.
-
- HV* gv_stashpvs(const char* name, I32 create)
-
-=for hackers
-Found in file handy.h
-
-=item gv_stashsv
-X<gv_stashsv>
-
-Returns a pointer to the stash for a specified package. See C<gv_stashpvn>.
-
- HV* gv_stashsv(SV* sv, I32 flags)
-
-=for hackers
-Found in file gv.c
-
-
-=back
-
-=head1 Handy Values
-
-=over 8
-
-=item Nullav
-X<Nullav>
-
-Null AV pointer.
-
-=for hackers
-Found in file av.h
-
-=item Nullch
-X<Nullch>
-
-Null character pointer.
-
-=for hackers
-Found in file handy.h
-
-=item Nullcv
-X<Nullcv>
-
-Null CV pointer.
-
-=for hackers
-Found in file cv.h
-
-=item Nullhv
-X<Nullhv>
-
-Null HV pointer.
-
-=for hackers
-Found in file hv.h
-
-=item Nullsv
-X<Nullsv>
-
-Null SV pointer.
-
-=for hackers
-Found in file handy.h
-
-
-=back
-
-=head1 Hash Manipulation Functions
-
-=over 8
-
-=item get_hv
-X<get_hv>
-
-Returns the HV of the specified Perl hash. If C<create> is set and the
-Perl variable does not exist then it will be created. If C<create> is not
-set and the variable does not exist then NULL is returned.
-
-NOTE: the perl_ form of this function is deprecated.
-
- HV* get_hv(const char* name, I32 create)
-
-=for hackers
-Found in file perl.c
-
-=item HEf_SVKEY
-X<HEf_SVKEY>
-
-This flag, used in the length slot of hash entries and magic structures,
-specifies the structure contains an C<SV*> pointer where a C<char*> pointer
-is to be expected. (For information only--not to be used).
-
-=for hackers
-Found in file hv.h
-
-=item HeHASH
-X<HeHASH>
-
-Returns the computed hash stored in the hash entry.
-
- U32 HeHASH(HE* he)
-
-=for hackers
-Found in file hv.h
-
-=item HeKEY
-X<HeKEY>
-
-Returns the actual pointer stored in the key slot of the hash entry. The
-pointer may be either C<char*> or C<SV*>, depending on the value of
-C<HeKLEN()>. Can be assigned to. The C<HePV()> or C<HeSVKEY()> macros are
-usually preferable for finding the value of a key.
-
- void* HeKEY(HE* he)
-
-=for hackers
-Found in file hv.h
-
-=item HeKLEN
-X<HeKLEN>
-
-If this is negative, and amounts to C<HEf_SVKEY>, it indicates the entry
-holds an C<SV*> key. Otherwise, holds the actual length of the key. Can
-be assigned to. The C<HePV()> macro is usually preferable for finding key
-lengths.
-
- STRLEN HeKLEN(HE* he)
-
-=for hackers
-Found in file hv.h
-
-=item HePV
-X<HePV>
-
-Returns the key slot of the hash entry as a C<char*> value, doing any
-necessary dereferencing of possibly C<SV*> keys. The length of the string
-is placed in C<len> (this is a macro, so do I<not> use C<&len>). If you do
-not care about what the length of the key is, you may use the global
-variable C<PL_na>, though this is rather less efficient than using a local
-variable. Remember though, that hash keys in perl are free to contain
-embedded nulls, so using C<strlen()> or similar is not a good way to find
-the length of hash keys. This is very similar to the C<SvPV()> macro
-described elsewhere in this document.
-
- char* HePV(HE* he, STRLEN len)
-
-=for hackers
-Found in file hv.h
-
-=item HeSVKEY
-X<HeSVKEY>
-
-Returns the key as an C<SV*>, or C<NULL> if the hash entry does not
-contain an C<SV*> key.
-
- SV* HeSVKEY(HE* he)
-
-=for hackers
-Found in file hv.h
-
-=item HeSVKEY_force
-X<HeSVKEY_force>
-
-Returns the key as an C<SV*>. Will create and return a temporary mortal
-C<SV*> if the hash entry contains only a C<char*> key.
-
- SV* HeSVKEY_force(HE* he)
-
-=for hackers
-Found in file hv.h
-
-=item HeSVKEY_set
-X<HeSVKEY_set>
-
-Sets the key to a given C<SV*>, taking care to set the appropriate flags to
-indicate the presence of an C<SV*> key, and returns the same
-C<SV*>.
-
- SV* HeSVKEY_set(HE* he, SV* sv)
-
-=for hackers
-Found in file hv.h
-
-=item HeVAL
-X<HeVAL>
-
-Returns the value slot (type C<SV*>) stored in the hash entry.
-
- SV* HeVAL(HE* he)
-
-=for hackers
-Found in file hv.h
-
-=item HvNAME
-X<HvNAME>
-
-Returns the package name of a stash, or NULL if C<stash> isn't a stash.
-See C<SvSTASH>, C<CvSTASH>.
-
- char* HvNAME(HV* stash)
-
-=for hackers
-Found in file hv.h
-
-=item hv_assert
-X<hv_assert>
-
-Check that a hash is in an internally consistent state.
-
- void hv_assert(HV* tb)
-
-=for hackers
-Found in file hv.c
-
-=item hv_clear
-X<hv_clear>
-
-Clears a hash, making it empty.
-
- void hv_clear(HV* tb)
-
-=for hackers
-Found in file hv.c
-
-=item hv_clear_placeholders
-X<hv_clear_placeholders>
-
-Clears any placeholders from a hash. If a restricted hash has any of its keys
-marked as readonly and the key is subsequently deleted, the key is not actually
-deleted but is marked by assigning it a value of &PL_sv_placeholder. This tags
-it so it will be ignored by future operations such as iterating over the hash,
-but will still allow the hash to have a value reassigned to the key at some
-future point. This function clears any such placeholder keys from the hash.
-See Hash::Util::lock_keys() for an example of its use.
-
- void hv_clear_placeholders(HV* hb)
-
-=for hackers
-Found in file hv.c
-
-=item hv_delete
-X<hv_delete>
-
-Deletes a key/value pair in the hash. The value SV is removed from the
-hash and returned to the caller. The C<klen> is the length of the key.
-The C<flags> value will normally be zero; if set to G_DISCARD then NULL
-will be returned.
-
- SV* hv_delete(HV* tb, const char* key, I32 klen, I32 flags)
-
-=for hackers
-Found in file hv.c
-
-=item hv_delete_ent
-X<hv_delete_ent>
-
-Deletes a key/value pair in the hash. The value SV is removed from the
-hash and returned to the caller. The C<flags> value will normally be zero;
-if set to G_DISCARD then NULL will be returned. C<hash> can be a valid
-precomputed hash value, or 0 to ask for it to be computed.
-
- SV* hv_delete_ent(HV* tb, SV* key, I32 flags, U32 hash)
-
-=for hackers
-Found in file hv.c
-
-=item hv_exists
-X<hv_exists>
-
-Returns a boolean indicating whether the specified hash key exists. The
-C<klen> is the length of the key.
-
- bool hv_exists(HV* tb, const char* key, I32 klen)
-
-=for hackers
-Found in file hv.c
-
-=item hv_exists_ent
-X<hv_exists_ent>
-
-Returns a boolean indicating whether the specified hash key exists. C<hash>
-can be a valid precomputed hash value, or 0 to ask for it to be
-computed.
-
- bool hv_exists_ent(HV* tb, SV* key, U32 hash)
-
-=for hackers
-Found in file hv.c
-
-=item hv_fetch
-X<hv_fetch>
-
-Returns the SV which corresponds to the specified key in the hash. The
-C<klen> is the length of the key. If C<lval> is set then the fetch will be
-part of a store. Check that the return value is non-null before
-dereferencing it to an C<SV*>.
-
-See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
-information on how to use this function on tied hashes.
-
- SV** hv_fetch(HV* tb, const char* key, I32 klen, I32 lval)
-
-=for hackers
-Found in file hv.c
-
-=item hv_fetchs
-X<hv_fetchs>
-
-Like C<hv_fetch>, but takes a literal string instead of a string/length pair.
-
- SV** hv_fetchs(HV* tb, const char* key, I32 lval)
-
-=for hackers
-Found in file handy.h
-
-=item hv_fetch_ent
-X<hv_fetch_ent>
-
-Returns the hash entry which corresponds to the specified key in the hash.
-C<hash> must be a valid precomputed hash number for the given C<key>, or 0
-if you want the function to compute it. IF C<lval> is set then the fetch
-will be part of a store. Make sure the return value is non-null before
-accessing it. The return value when C<tb> is a tied hash is a pointer to a
-static location, so be sure to make a copy of the structure if you need to
-store it somewhere.
-
-See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
-information on how to use this function on tied hashes.
-
- HE* hv_fetch_ent(HV* tb, SV* key, I32 lval, U32 hash)
-
-=for hackers
-Found in file hv.c
-
-=item hv_iterinit
-X<hv_iterinit>
-
-Prepares a starting point to traverse a hash table. Returns the number of
-keys in the hash (i.e. the same as C<HvKEYS(tb)>). The return value is
-currently only meaningful for hashes without tie magic.
-
-NOTE: Before version 5.004_65, C<hv_iterinit> used to return the number of
-hash buckets that happen to be in use. If you still need that esoteric
-value, you can get it through the macro C<HvFILL(tb)>.
-
-
- I32 hv_iterinit(HV* tb)
-
-=for hackers
-Found in file hv.c
-
-=item hv_iterkey
-X<hv_iterkey>
-
-Returns the key from the current position of the hash iterator. See
-C<hv_iterinit>.
-
- char* hv_iterkey(HE* entry, I32* retlen)
-
-=for hackers
-Found in file hv.c
-
-=item hv_iterkeysv
-X<hv_iterkeysv>
-
-Returns the key as an C<SV*> from the current position of the hash
-iterator. The return value will always be a mortal copy of the key. Also
-see C<hv_iterinit>.
-
- SV* hv_iterkeysv(HE* entry)
-
-=for hackers
-Found in file hv.c
-
-=item hv_iternext
-X<hv_iternext>
-
-Returns entries from a hash iterator. See C<hv_iterinit>.
-
-You may call C<hv_delete> or C<hv_delete_ent> on the hash entry that the
-iterator currently points to, without losing your place or invalidating your
-iterator. Note that in this case the current entry is deleted from the hash
-with your iterator holding the last reference to it. Your iterator is flagged
-to free the entry on the next call to C<hv_iternext>, so you must not discard
-your iterator immediately else the entry will leak - call C<hv_iternext> to
-trigger the resource deallocation.
-
- HE* hv_iternext(HV* tb)
-
-=for hackers
-Found in file hv.c
-
-=item hv_iternextsv
-X<hv_iternextsv>
-
-Performs an C<hv_iternext>, C<hv_iterkey>, and C<hv_iterval> in one
-operation.
-
- SV* hv_iternextsv(HV* hv, char** key, I32* retlen)
-
-=for hackers
-Found in file hv.c
-
-=item hv_iternext_flags
-X<hv_iternext_flags>
-
-Returns entries from a hash iterator. See C<hv_iterinit> and C<hv_iternext>.
-The C<flags> value will normally be zero; if HV_ITERNEXT_WANTPLACEHOLDERS is
-set the placeholders keys (for restricted hashes) will be returned in addition
-to normal keys. By default placeholders are automatically skipped over.
-Currently a placeholder is implemented with a value that is
-C<&Perl_sv_placeholder>. Note that the implementation of placeholders and
-restricted hashes may change, and the implementation currently is
-insufficiently abstracted for any change to be tidy.
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- HE* hv_iternext_flags(HV* tb, I32 flags)
-
-=for hackers
-Found in file hv.c
-
-=item hv_iterval
-X<hv_iterval>
-
-Returns the value from the current position of the hash iterator. See
-C<hv_iterkey>.
-
- SV* hv_iterval(HV* tb, HE* entry)
-
-=for hackers
-Found in file hv.c
-
-=item hv_magic
-X<hv_magic>
-
-Adds magic to a hash. See C<sv_magic>.
-
- void hv_magic(HV* hv, GV* gv, int how)
-
-=for hackers
-Found in file hv.c
-
-=item hv_scalar
-X<hv_scalar>
-
-Evaluates the hash in scalar context and returns the result. Handles magic when the hash is tied.
-
- SV* hv_scalar(HV* hv)
-
-=for hackers
-Found in file hv.c
-
-=item hv_store
-X<hv_store>
-
-Stores an SV in a hash. The hash key is specified as C<key> and C<klen> is
-the length of the key. The C<hash> parameter is the precomputed hash
-value; if it is zero then Perl will compute it. The return value will be
-NULL if the operation failed or if the value did not need to be actually
-stored within the hash (as in the case of tied hashes). Otherwise it can
-be dereferenced to get the original C<SV*>. Note that the caller is
-responsible for suitably incrementing the reference count of C<val> before
-the call, and decrementing it if the function returned NULL. Effectively
-a successful hv_store takes ownership of one reference to C<val>. This is
-usually what you want; a newly created SV has a reference count of one, so
-if all your code does is create SVs then store them in a hash, hv_store
-will own the only reference to the new SV, and your code doesn't need to do
-anything further to tidy up. hv_store is not implemented as a call to
-hv_store_ent, and does not create a temporary SV for the key, so if your
-key data is not already in SV form then use hv_store in preference to
-hv_store_ent.
-
-See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
-information on how to use this function on tied hashes.
-
- SV** hv_store(HV* tb, const char* key, I32 klen, SV* val, U32 hash)
-
-=for hackers
-Found in file hv.c
-
-=item hv_stores
-X<hv_stores>
-
-Like C<hv_store>, but takes a literal string instead of a string/length pair
-and omits the hash parameter.
-
- SV** hv_stores(HV* tb, const char* key, NULLOK SV* val)
-
-=for hackers
-Found in file handy.h
-
-=item hv_store_ent
-X<hv_store_ent>
-
-Stores C<val> in a hash. The hash key is specified as C<key>. The C<hash>
-parameter is the precomputed hash value; if it is zero then Perl will
-compute it. The return value is the new hash entry so created. It will be
-NULL if the operation failed or if the value did not need to be actually
-stored within the hash (as in the case of tied hashes). Otherwise the
-contents of the return value can be accessed using the C<He?> macros
-described here. Note that the caller is responsible for suitably
-incrementing the reference count of C<val> before the call, and
-decrementing it if the function returned NULL. Effectively a successful
-hv_store_ent takes ownership of one reference to C<val>. This is
-usually what you want; a newly created SV has a reference count of one, so
-if all your code does is create SVs then store them in a hash, hv_store
-will own the only reference to the new SV, and your code doesn't need to do
-anything further to tidy up. Note that hv_store_ent only reads the C<key>;
-unlike C<val> it does not take ownership of it, so maintaining the correct
-reference count on C<key> is entirely the caller's responsibility. hv_store
-is not implemented as a call to hv_store_ent, and does not create a temporary
-SV for the key, so if your key data is not already in SV form then use
-hv_store in preference to hv_store_ent.
-
-See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
-information on how to use this function on tied hashes.
-
- HE* hv_store_ent(HV* tb, SV* key, SV* val, U32 hash)
-
-=for hackers
-Found in file hv.c
-
-=item hv_undef
-X<hv_undef>
-
-Undefines the hash.
-
- void hv_undef(HV* tb)
-
-=for hackers
-Found in file hv.c
-
-=item newHV
-X<newHV>
-
-Creates a new HV. The reference count is set to 1.
-
- HV* newHV()
-
-=for hackers
-Found in file hv.c
-
-
-=back
-
-=head1 Magical Functions
-
-=over 8
-
-=item mg_clear
-X<mg_clear>
-
-Clear something magical that the SV represents. See C<sv_magic>.
-
- int mg_clear(SV* sv)
-
-=for hackers
-Found in file mg.c
-
-=item mg_copy
-X<mg_copy>
-
-Copies the magic from one SV to another. See C<sv_magic>.
-
- int mg_copy(SV* sv, SV* nsv, const char* key, I32 klen)
-
-=for hackers
-Found in file mg.c
-
-=item mg_find
-X<mg_find>
-
-Finds the magic pointer for type matching the SV. See C<sv_magic>.
-
- MAGIC* mg_find(const SV* sv, int type)
-
-=for hackers
-Found in file mg.c
-
-=item mg_free
-X<mg_free>
-
-Free any magic storage used by the SV. See C<sv_magic>.
-
- int mg_free(SV* sv)
-
-=for hackers
-Found in file mg.c
-
-=item mg_get
-X<mg_get>
-
-Do magic after a value is retrieved from the SV. See C<sv_magic>.
-
- int mg_get(SV* sv)
-
-=for hackers
-Found in file mg.c
-
-=item mg_length
-X<mg_length>
-
-Report on the SV's length. See C<sv_magic>.
-
- U32 mg_length(SV* sv)
-
-=for hackers
-Found in file mg.c
-
-=item mg_magical
-X<mg_magical>
-
-Turns on the magical status of an SV. See C<sv_magic>.
-
- void mg_magical(SV* sv)
-
-=for hackers
-Found in file mg.c
-
-=item mg_set
-X<mg_set>
-
-Do magic after a value is assigned to the SV. See C<sv_magic>.
-
- int mg_set(SV* sv)
-
-=for hackers
-Found in file mg.c
-
-=item SvGETMAGIC
-X<SvGETMAGIC>
-
-Invokes C<mg_get> on an SV if it has 'get' magic. This macro evaluates its
-argument more than once.
-
- void SvGETMAGIC(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvLOCK
-X<SvLOCK>
-
-Arranges for a mutual exclusion lock to be obtained on sv if a suitable module
-has been loaded.
-
- void SvLOCK(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvSETMAGIC
-X<SvSETMAGIC>
-
-Invokes C<mg_set> on an SV if it has 'set' magic. This macro evaluates its
-argument more than once.
-
- void SvSETMAGIC(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvSetMagicSV
-X<SvSetMagicSV>
-
-Like C<SvSetSV>, but does any set magic required afterwards.
-
- void SvSetMagicSV(SV* dsb, SV* ssv)
-
-=for hackers
-Found in file sv.h
-
-=item SvSetMagicSV_nosteal
-X<SvSetMagicSV_nosteal>
-
-Like C<SvSetSV_nosteal>, but does any set magic required afterwards.
-
- void SvSetMagicSV_nosteal(SV* dsv, SV* ssv)
-
-=for hackers
-Found in file sv.h
-
-=item SvSetSV
-X<SvSetSV>
-
-Calls C<sv_setsv> if dsv is not the same as ssv. May evaluate arguments
-more than once.
-
- void SvSetSV(SV* dsb, SV* ssv)
-
-=for hackers
-Found in file sv.h
-
-=item SvSetSV_nosteal
-X<SvSetSV_nosteal>
-
-Calls a non-destructive version of C<sv_setsv> if dsv is not the same as
-ssv. May evaluate arguments more than once.
-
- void SvSetSV_nosteal(SV* dsv, SV* ssv)
-
-=for hackers
-Found in file sv.h
-
-=item SvSHARE
-X<SvSHARE>
-
-Arranges for sv to be shared between threads if a suitable module
-has been loaded.
-
- void SvSHARE(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvUNLOCK
-X<SvUNLOCK>
-
-Releases a mutual exclusion lock on sv if a suitable module
-has been loaded.
-
- void SvUNLOCK(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-
-=back
-
-=head1 Memory Management
-
-=over 8
-
-=item Copy
-X<Copy>
-
-The XSUB-writer's interface to the C C<memcpy> function. The C<src> is the
-source, C<dest> is the destination, C<nitems> is the number of items, and C<type> is
-the type. May fail on overlapping copies. See also C<Move>.
-
- void Copy(void* src, void* dest, int nitems, type)
-
-=for hackers
-Found in file handy.h
-
-=item CopyD
-X<CopyD>
-
-Like C<Copy> but returns dest. Useful for encouraging compilers to tail-call
-optimise.
-
- void * CopyD(void* src, void* dest, int nitems, type)
-
-=for hackers
-Found in file handy.h
-
-=item Move
-X<Move>
-
-The XSUB-writer's interface to the C C<memmove> function. The C<src> is the
-source, C<dest> is the destination, C<nitems> is the number of items, and C<type> is
-the type. Can do overlapping moves. See also C<Copy>.
-
- void Move(void* src, void* dest, int nitems, type)
-
-=for hackers
-Found in file handy.h
-
-=item MoveD
-X<MoveD>
-
-Like C<Move> but returns dest. Useful for encouraging compilers to tail-call
-optimise.
-
- void * MoveD(void* src, void* dest, int nitems, type)
-
-=for hackers
-Found in file handy.h
-
-=item Newx
-X<Newx>
-
-The XSUB-writer's interface to the C C<malloc> function.
-
-In 5.9.3, Newx() and friends replace the older New() API, and drops
-the first parameter, I<x>, a debug aid which allowed callers to identify
-themselves. This aid has been superseded by a new build option,
-PERL_MEM_LOG (see L<perlhack/PERL_MEM_LOG>). The older API is still
-there for use in XS modules supporting older perls.
-
- void Newx(void* ptr, int nitems, type)
-
-=for hackers
-Found in file handy.h
-
-=item Newxc
-X<Newxc>
-
-The XSUB-writer's interface to the C C<malloc> function, with
-cast. See also C<Newx>.
-
- void Newxc(void* ptr, int nitems, type, cast)
-
-=for hackers
-Found in file handy.h
-
-=item Newxz
-X<Newxz>
-
-The XSUB-writer's interface to the C C<malloc> function. The allocated
-memory is zeroed with C<memzero>. See also C<Newx>.
-
- void Newxz(void* ptr, int nitems, type)
-
-=for hackers
-Found in file handy.h
-
-=item Poison
-X<Poison>
-
-PoisonWith(0xEF) for catching access to freed memory.
-
- void Poison(void* dest, int nitems, type)
-
-=for hackers
-Found in file handy.h
-
-=item PoisonFree
-X<PoisonFree>
-
-PoisonWith(0xEF) for catching access to freed memory.
-
- void PoisonFree(void* dest, int nitems, type)
-
-=for hackers
-Found in file handy.h
-
-=item PoisonNew
-X<PoisonNew>
-
-PoisonWith(0xAB) for catching access to allocated but uninitialized memory.
-
- void PoisonNew(void* dest, int nitems, type)
-
-=for hackers
-Found in file handy.h
-
-=item PoisonWith
-X<PoisonWith>
-
-Fill up memory with a byte pattern (a byte repeated over and over
-again) that hopefully catches attempts to access uninitialized memory.
-
- void PoisonWith(void* dest, int nitems, type, U8 byte)
-
-=for hackers
-Found in file handy.h
-
-=item Renew
-X<Renew>
-
-The XSUB-writer's interface to the C C<realloc> function.
-
- void Renew(void* ptr, int nitems, type)
-
-=for hackers
-Found in file handy.h
-
-=item Renewc
-X<Renewc>
-
-The XSUB-writer's interface to the C C<realloc> function, with
-cast.
-
- void Renewc(void* ptr, int nitems, type, cast)
-
-=for hackers
-Found in file handy.h
-
-=item Safefree
-X<Safefree>
-
-The XSUB-writer's interface to the C C<free> function.
-
- void Safefree(void* ptr)
-
-=for hackers
-Found in file handy.h
-
-=item savepv
-X<savepv>
-
-Perl's version of C<strdup()>. Returns a pointer to a newly allocated
-string which is a duplicate of C<pv>. The size of the string is
-determined by C<strlen()>. The memory allocated for the new string can
-be freed with the C<Safefree()> function.
-
- char* savepv(const char* pv)
-
-=for hackers
-Found in file util.c
-
-=item savepvn
-X<savepvn>
-
-Perl's version of what C<strndup()> would be if it existed. Returns a
-pointer to a newly allocated string which is a duplicate of the first
-C<len> bytes from C<pv>, plus a trailing NUL byte. The memory allocated for
-the new string can be freed with the C<Safefree()> function.
-
- char* savepvn(const char* pv, I32 len)
-
-=for hackers
-Found in file util.c
-
-=item savepvs
-X<savepvs>
-
-Like C<savepvn>, but takes a literal string instead of a string/length pair.
-
- char* savepvs(const char* s)
-
-=for hackers
-Found in file handy.h
-
-=item savesharedpv
-X<savesharedpv>
-
-A version of C<savepv()> which allocates the duplicate string in memory
-which is shared between threads.
-
- char* savesharedpv(const char* pv)
-
-=for hackers
-Found in file util.c
-
-=item savesharedpvn
-X<savesharedpvn>
-
-A version of C<savepvn()> which allocates the duplicate string in memory
-which is shared between threads. (With the specific difference that a NULL
-pointer is not acceptable)
-
- char* savesharedpvn(const char *const pv, const STRLEN len)
-
-=for hackers
-Found in file util.c
-
-=item savesvpv
-X<savesvpv>
-
-A version of C<savepv()>/C<savepvn()> which gets the string to duplicate from
-the passed in SV using C<SvPV()>
-
- char* savesvpv(SV* sv)
-
-=for hackers
-Found in file util.c
-
-=item StructCopy
-X<StructCopy>
-
-This is an architecture-independent macro to copy one structure to another.
-
- void StructCopy(type src, type dest, type)
-
-=for hackers
-Found in file handy.h
-
-=item Zero
-X<Zero>
-
-The XSUB-writer's interface to the C C<memzero> function. The C<dest> is the
-destination, C<nitems> is the number of items, and C<type> is the type.
-
- void Zero(void* dest, int nitems, type)
-
-=for hackers
-Found in file handy.h
-
-=item ZeroD
-X<ZeroD>
-
-Like C<Zero> but returns dest. Useful for encouraging compilers to tail-call
-optimise.
-
- void * ZeroD(void* dest, int nitems, type)
-
-=for hackers
-Found in file handy.h
-
-
-=back
-
-=head1 Miscellaneous Functions
-
-=over 8
-
-=item fbm_compile
-X<fbm_compile>
-
-Analyses the string in order to make fast searches on it using fbm_instr()
--- the Boyer-Moore algorithm.
-
- void fbm_compile(SV* sv, U32 flags)
-
-=for hackers
-Found in file util.c
-
-=item fbm_instr
-X<fbm_instr>
-
-Returns the location of the SV in the string delimited by C<str> and
-C<strend>. It returns C<NULL> if the string can't be found. The C<sv>
-does not have to be fbm_compiled, but the search will not be as fast
-then.
-
- char* fbm_instr(unsigned char* big, unsigned char* bigend, SV* littlesv, U32 flags)
-
-=for hackers
-Found in file util.c
-
-=item form
-X<form>
-
-Takes a sprintf-style format pattern and conventional
-(non-SV) arguments and returns the formatted string.
-
- (char *) Perl_form(pTHX_ const char* pat, ...)
-
-can be used any place a string (char *) is required:
-
- char * s = Perl_form("%d.%d",major,minor);
-
-Uses a single private buffer so if you want to format several strings you
-must explicitly copy the earlier strings away (and free the copies when you
-are done).
-
- char* form(const char* pat, ...)
-
-=for hackers
-Found in file util.c
-
-=item getcwd_sv
-X<getcwd_sv>
-
-Fill the sv with current working directory
-
- int getcwd_sv(SV* sv)
-
-=for hackers
-Found in file util.c
-
-=item my_snprintf
-X<my_snprintf>
-
-The C library C<snprintf> functionality, if available and
-standards-compliant (uses C<vsnprintf>, actually). However, if the
-C<vsnprintf> is not available, will unfortunately use the unsafe
-C<vsprintf> which can overrun the buffer (there is an overrun check,
-but that may be too late). Consider using C<sv_vcatpvf> instead, or
-getting C<vsnprintf>.
-
- int my_snprintf(char *buffer, const Size_t len, const char *format, ...)
-
-=for hackers
-Found in file util.c
-
-=item my_sprintf
-X<my_sprintf>
-
-The C library C<sprintf>, wrapped if necessary, to ensure that it will return
-the length of the string written to the buffer. Only rare pre-ANSI systems
-need the wrapper function - usually this is a direct call to C<sprintf>.
-
- int my_sprintf(char *buffer, const char *pat, ...)
-
-=for hackers
-Found in file util.c
-
-=item my_vsnprintf
-X<my_vsnprintf>
-
-The C library C<vsnprintf> if available and standards-compliant.
-However, if if the C<vsnprintf> is not available, will unfortunately
-use the unsafe C<vsprintf> which can overrun the buffer (there is an
-overrun check, but that may be too late). Consider using
-C<sv_vcatpvf> instead, or getting C<vsnprintf>.
-
- int my_vsnprintf(char *buffer, const Size_t len, const char *format, va_list ap)
-
-=for hackers
-Found in file util.c
-
-=item new_version
-X<new_version>
-
-Returns a new version object based on the passed in SV:
-
- SV *sv = new_version(SV *ver);
-
-Does not alter the passed in ver SV. See "upg_version" if you
-want to upgrade the SV.
-
- SV* new_version(SV *ver)
-
-=for hackers
-Found in file util.c
-
-=item scan_version
-X<scan_version>
-
-Returns a pointer to the next character after the parsed
-version string, as well as upgrading the passed in SV to
-an RV.
-
-Function must be called with an already existing SV like
-
- sv = newSV(0);
- s = scan_version(s, SV *sv, bool qv);
-
-Performs some preprocessing to the string to ensure that
-it has the correct characteristics of a version. Flags the
-object if it contains an underscore (which denotes this
-is an alpha version). The boolean qv denotes that the version
-should be interpreted as if it had multiple decimals, even if
-it doesn't.
-
- const char* scan_version(const char *vstr, SV *sv, bool qv)
-
-=for hackers
-Found in file util.c
-
-=item strEQ
-X<strEQ>
-
-Test two strings to see if they are equal. Returns true or false.
-
- bool strEQ(char* s1, char* s2)
-
-=for hackers
-Found in file handy.h
-
-=item strGE
-X<strGE>
-
-Test two strings to see if the first, C<s1>, is greater than or equal to
-the second, C<s2>. Returns true or false.
-
- bool strGE(char* s1, char* s2)
-
-=for hackers
-Found in file handy.h
-
-=item strGT
-X<strGT>
-
-Test two strings to see if the first, C<s1>, is greater than the second,
-C<s2>. Returns true or false.
-
- bool strGT(char* s1, char* s2)
-
-=for hackers
-Found in file handy.h
-
-=item strLE
-X<strLE>
-
-Test two strings to see if the first, C<s1>, is less than or equal to the
-second, C<s2>. Returns true or false.
-
- bool strLE(char* s1, char* s2)
-
-=for hackers
-Found in file handy.h
-
-=item strLT
-X<strLT>
-
-Test two strings to see if the first, C<s1>, is less than the second,
-C<s2>. Returns true or false.
-
- bool strLT(char* s1, char* s2)
-
-=for hackers
-Found in file handy.h
-
-=item strNE
-X<strNE>
-
-Test two strings to see if they are different. Returns true or
-false.
-
- bool strNE(char* s1, char* s2)
-
-=for hackers
-Found in file handy.h
-
-=item strnEQ
-X<strnEQ>
-
-Test two strings to see if they are equal. The C<len> parameter indicates
-the number of bytes to compare. Returns true or false. (A wrapper for
-C<strncmp>).
-
- bool strnEQ(char* s1, char* s2, STRLEN len)
-
-=for hackers
-Found in file handy.h
-
-=item strnNE
-X<strnNE>
-
-Test two strings to see if they are different. The C<len> parameter
-indicates the number of bytes to compare. Returns true or false. (A
-wrapper for C<strncmp>).
-
- bool strnNE(char* s1, char* s2, STRLEN len)
-
-=for hackers
-Found in file handy.h
-
-=item sv_destroyable
-X<sv_destroyable>
-
-Dummy routine which reports that object can be destroyed when there is no
-sharing module present. It ignores its single SV argument, and returns
-'true'. Exists to avoid test for a NULL function pointer and because it
-could potentially warn under some level of strict-ness.
-
- bool sv_destroyable(SV *sv)
-
-=for hackers
-Found in file util.c
-
-=item sv_nosharing
-X<sv_nosharing>
-
-Dummy routine which "shares" an SV when there is no sharing module present.
-Or "locks" it. Or "unlocks" it. In other words, ignores its single SV argument.
-Exists to avoid test for a NULL function pointer and because it could
-potentially warn under some level of strict-ness.
-
- void sv_nosharing(SV *sv)
-
-=for hackers
-Found in file util.c
-
-=item upg_version
-X<upg_version>
-
-In-place upgrade of the supplied SV to a version object.
-
- SV *sv = upg_version(SV *sv, bool qv);
-
-Returns a pointer to the upgraded SV. Set the boolean qv if you want
-to force this SV to be interpreted as an "extended" version.
-
- SV* upg_version(SV *ver, bool qv)
-
-=for hackers
-Found in file util.c
-
-=item vcmp
-X<vcmp>
-
-Version object aware cmp. Both operands must already have been
-converted into version objects.
-
- int vcmp(SV *lvs, SV *rvs)
-
-=for hackers
-Found in file util.c
-
-=item vnormal
-X<vnormal>
-
-Accepts a version object and returns the normalized string
-representation. Call like:
-
- sv = vnormal(rv);
-
-NOTE: you can pass either the object directly or the SV
-contained within the RV.
-
- SV* vnormal(SV *vs)
-
-=for hackers
-Found in file util.c
-
-=item vnumify
-X<vnumify>
-
-Accepts a version object and returns the normalized floating
-point representation. Call like:
-
- sv = vnumify(rv);
-
-NOTE: you can pass either the object directly or the SV
-contained within the RV.
-
- SV* vnumify(SV *vs)
-
-=for hackers
-Found in file util.c
-
-=item vstringify
-X<vstringify>
-
-In order to maintain maximum compatibility with earlier versions
-of Perl, this function will return either the floating point
-notation or the multiple dotted notation, depending on whether
-the original version contained 1 or more dots, respectively
-
- SV* vstringify(SV *vs)
-
-=for hackers
-Found in file util.c
-
-=item vverify
-X<vverify>
-
-Validates that the SV contains a valid version object.
-
- bool vverify(SV *vobj);
-
-Note that it only confirms the bare minimum structure (so as not to get
-confused by derived classes which may contain additional hash entries):
-
- bool vverify(SV *vs)
-
-=for hackers
-Found in file util.c
-
-
-=back
-
-=head1 MRO Functions
-
-=over 8
-
-=item mro_get_linear_isa
-X<mro_get_linear_isa>
-
-Returns either C<mro_get_linear_isa_c3> or
-C<mro_get_linear_isa_dfs> for the given stash,
-dependant upon which MRO is in effect
-for that stash. The return value is a
-read-only AV*.
-
-You are responsible for C<SvREFCNT_inc()> on the
-return value if you plan to store it anywhere
-semi-permanently (otherwise it might be deleted
-out from under you the next time the cache is
-invalidated).
-
- AV* mro_get_linear_isa(HV* stash)
-
-=for hackers
-Found in file mro.c
-
-=item mro_method_changed_in
-X<mro_method_changed_in>
-
-Invalidates method caching on any child classes
-of the given stash, so that they might notice
-the changes in this one.
-
-Ideally, all instances of C<PL_sub_generation++> in
-perl source outside of C<mro.c> should be
-replaced by calls to this.
-
-Perl automatically handles most of the common
-ways a method might be redefined. However, there
-are a few ways you could change a method in a stash
-without the cache code noticing, in which case you
-need to call this method afterwards:
-
-1) Directly manipulating the stash HV entries from
-XS code.
-
-2) Assigning a reference to a readonly scalar
-constant into a stash entry in order to create
-a constant subroutine (like constant.pm
-does).
-
-This same method is available from pure perl
-via, C<mro::method_changed_in(classname)>.
-
- void mro_method_changed_in(HV* stash)
-
-=for hackers
-Found in file mro.c
-
-
-=back
-
-=head1 Multicall Functions
-
-=over 8
-
-=item dMULTICALL
-X<dMULTICALL>
-
-Declare local variables for a multicall. See L<perlcall/Lightweight Callbacks>.
-
- dMULTICALL;
-
-=for hackers
-Found in file cop.h
-
-=item MULTICALL
-X<MULTICALL>
-
-Make a lightweight callback. See L<perlcall/Lightweight Callbacks>.
-
- MULTICALL;
-
-=for hackers
-Found in file cop.h
-
-=item POP_MULTICALL
-X<POP_MULTICALL>
-
-Closing bracket for a lightweight callback.
-See L<perlcall/Lightweight Callbacks>.
-
- POP_MULTICALL;
-
-=for hackers
-Found in file cop.h
-
-=item PUSH_MULTICALL
-X<PUSH_MULTICALL>
-
-Opening bracket for a lightweight callback.
-See L<perlcall/Lightweight Callbacks>.
-
- PUSH_MULTICALL;
-
-=for hackers
-Found in file cop.h
-
-
-=back
-
-=head1 Numeric functions
-
-=over 8
-
-=item grok_bin
-X<grok_bin>
-
-converts a string representing a binary number to numeric form.
-
-On entry I<start> and I<*len> give the string to scan, I<*flags> gives
-conversion flags, and I<result> should be NULL or a pointer to an NV.
-The scan stops at the end of the string, or the first invalid character.
-Unless C<PERL_SCAN_SILENT_ILLDIGIT> is set in I<*flags>, encountering an
-invalid character will also trigger a warning.
-On return I<*len> is set to the length of the scanned string,
-and I<*flags> gives output flags.
-
-If the value is <= C<UV_MAX> it is returned as a UV, the output flags are clear,
-and nothing is written to I<*result>. If the value is > UV_MAX C<grok_bin>
-returns UV_MAX, sets C<PERL_SCAN_GREATER_THAN_UV_MAX> in the output flags,
-and writes the value to I<*result> (or the value is discarded if I<result>
-is NULL).
-
-The binary number may optionally be prefixed with "0b" or "b" unless
-C<PERL_SCAN_DISALLOW_PREFIX> is set in I<*flags> on entry. If
-C<PERL_SCAN_ALLOW_UNDERSCORES> is set in I<*flags> then the binary
-number may use '_' characters to separate digits.
-
- UV grok_bin(const char* start, STRLEN* len_p, I32* flags, NV *result)
-
-=for hackers
-Found in file numeric.c
-
-=item grok_hex
-X<grok_hex>
-
-converts a string representing a hex number to numeric form.
-
-On entry I<start> and I<*len> give the string to scan, I<*flags> gives
-conversion flags, and I<result> should be NULL or a pointer to an NV.
-The scan stops at the end of the string, or the first invalid character.
-Unless C<PERL_SCAN_SILENT_ILLDIGIT> is set in I<*flags>, encountering an
-invalid character will also trigger a warning.
-On return I<*len> is set to the length of the scanned string,
-and I<*flags> gives output flags.
-
-If the value is <= UV_MAX it is returned as a UV, the output flags are clear,
-and nothing is written to I<*result>. If the value is > UV_MAX C<grok_hex>
-returns UV_MAX, sets C<PERL_SCAN_GREATER_THAN_UV_MAX> in the output flags,
-and writes the value to I<*result> (or the value is discarded if I<result>
-is NULL).
-
-The hex number may optionally be prefixed with "0x" or "x" unless
-C<PERL_SCAN_DISALLOW_PREFIX> is set in I<*flags> on entry. If
-C<PERL_SCAN_ALLOW_UNDERSCORES> is set in I<*flags> then the hex
-number may use '_' characters to separate digits.
-
- UV grok_hex(const char* start, STRLEN* len_p, I32* flags, NV *result)
-
-=for hackers
-Found in file numeric.c
-
-=item grok_number
-X<grok_number>
-
-Recognise (or not) a number. The type of the number is returned
-(0 if unrecognised), otherwise it is a bit-ORed combination of
-IS_NUMBER_IN_UV, IS_NUMBER_GREATER_THAN_UV_MAX, IS_NUMBER_NOT_INT,
-IS_NUMBER_NEG, IS_NUMBER_INFINITY, IS_NUMBER_NAN (defined in perl.h).
-
-If the value of the number can fit an in UV, it is returned in the *valuep
-IS_NUMBER_IN_UV will be set to indicate that *valuep is valid, IS_NUMBER_IN_UV
-will never be set unless *valuep is valid, but *valuep may have been assigned
-to during processing even though IS_NUMBER_IN_UV is not set on return.
-If valuep is NULL, IS_NUMBER_IN_UV will be set for the same cases as when
-valuep is non-NULL, but no actual assignment (or SEGV) will occur.
-
-IS_NUMBER_NOT_INT will be set with IS_NUMBER_IN_UV if trailing decimals were
-seen (in which case *valuep gives the true value truncated to an integer), and
-IS_NUMBER_NEG if the number is negative (in which case *valuep holds the
-absolute value). IS_NUMBER_IN_UV is not set if e notation was used or the
-number is larger than a UV.
-
- int grok_number(const char *pv, STRLEN len, UV *valuep)
-
-=for hackers
-Found in file numeric.c
-
-=item grok_numeric_radix
-X<grok_numeric_radix>
-
-Scan and skip for a numeric decimal separator (radix).
-
- bool grok_numeric_radix(const char **sp, const char *send)
-
-=for hackers
-Found in file numeric.c
-
-=item grok_oct
-X<grok_oct>
-
-converts a string representing an octal number to numeric form.
-
-On entry I<start> and I<*len> give the string to scan, I<*flags> gives
-conversion flags, and I<result> should be NULL or a pointer to an NV.
-The scan stops at the end of the string, or the first invalid character.
-Unless C<PERL_SCAN_SILENT_ILLDIGIT> is set in I<*flags>, encountering an
-invalid character will also trigger a warning.
-On return I<*len> is set to the length of the scanned string,
-and I<*flags> gives output flags.
-
-If the value is <= UV_MAX it is returned as a UV, the output flags are clear,
-and nothing is written to I<*result>. If the value is > UV_MAX C<grok_oct>
-returns UV_MAX, sets C<PERL_SCAN_GREATER_THAN_UV_MAX> in the output flags,
-and writes the value to I<*result> (or the value is discarded if I<result>
-is NULL).
-
-If C<PERL_SCAN_ALLOW_UNDERSCORES> is set in I<*flags> then the octal
-number may use '_' characters to separate digits.
-
- UV grok_oct(const char* start, STRLEN* len_p, I32* flags, NV *result)
-
-=for hackers
-Found in file numeric.c
-
-=item Perl_signbit
-X<Perl_signbit>
-
-Return a non-zero integer if the sign bit on an NV is set, and 0 if
-it is not.
-
-If Configure detects this system has a signbit() that will work with
-our NVs, then we just use it via the #define in perl.h. Otherwise,
-fall back on this implementation. As a first pass, this gets everything
-right except -0.0. Alas, catching -0.0 is the main use for this function,
-so this is not too helpful yet. Still, at least we have the scaffolding
-in place to support other systems, should that prove useful.
-
-
-Configure notes: This function is called 'Perl_signbit' instead of a
-plain 'signbit' because it is easy to imagine a system having a signbit()
-function or macro that doesn't happen to work with our particular choice
-of NVs. We shouldn't just re-#define signbit as Perl_signbit and expect
-the standard system headers to be happy. Also, this is a no-context
-function (no pTHX_) because Perl_signbit() is usually re-#defined in
-perl.h as a simple macro call to the system's signbit().
-Users should just always call Perl_signbit().
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- int Perl_signbit(NV f)
-
-=for hackers
-Found in file numeric.c
-
-=item scan_bin
-X<scan_bin>
-
-For backwards compatibility. Use C<grok_bin> instead.
-
- NV scan_bin(const char* start, STRLEN len, STRLEN* retlen)
-
-=for hackers
-Found in file numeric.c
-
-=item scan_hex
-X<scan_hex>
-
-For backwards compatibility. Use C<grok_hex> instead.
-
- NV scan_hex(const char* start, STRLEN len, STRLEN* retlen)
-
-=for hackers
-Found in file numeric.c
-
-=item scan_oct
-X<scan_oct>
-
-For backwards compatibility. Use C<grok_oct> instead.
-
- NV scan_oct(const char* start, STRLEN len, STRLEN* retlen)
-
-=for hackers
-Found in file numeric.c
-
-
-=back
-
-=head1 Optree Manipulation Functions
-
-=over 8
-
-=item cv_const_sv
-X<cv_const_sv>
-
-If C<cv> is a constant sub eligible for inlining. returns the constant
-value returned by the sub. Otherwise, returns NULL.
-
-Constant subs can be created with C<newCONSTSUB> or as described in
-L<perlsub/"Constant Functions">.
-
- SV* cv_const_sv(CV* cv)
-
-=for hackers
-Found in file op.c
-
-=item newCONSTSUB
-X<newCONSTSUB>
-
-Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
-eligible for inlining at compile-time.
-
- CV* newCONSTSUB(HV* stash, const char* name, SV* sv)
-
-=for hackers
-Found in file op.c
-
-=item newXS
-X<newXS>
-
-Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
-static storage, as it is used directly as CvFILE(), without a copy being made.
-
-=for hackers
-Found in file op.c
-
-
-=back
-
-=head1 Pad Data Structures
-
-=over 8
-
-=item pad_sv
-X<pad_sv>
-
-Get the value at offset po in the current pad.
-Use macro PAD_SV instead of calling this function directly.
-
- SV* pad_sv(PADOFFSET po)
-
-=for hackers
-Found in file pad.c
-
-
-=back
-
-=head1 Per-Interpreter Variables
-
-=over 8
-
-=item PL_modglobal
-X<PL_modglobal>
-
-C<PL_modglobal> is a general purpose, interpreter global HV for use by
-extensions that need to keep information on a per-interpreter basis.
-In a pinch, it can also be used as a symbol table for extensions
-to share data among each other. It is a good idea to use keys
-prefixed by the package name of the extension that owns the data.
-
- HV* PL_modglobal
-
-=for hackers
-Found in file intrpvar.h
-
-=item PL_na
-X<PL_na>
-
-A convenience variable which is typically used with C<SvPV> when one
-doesn't care about the length of the string. It is usually more efficient
-to either declare a local variable and use that instead or to use the
-C<SvPV_nolen> macro.
-
- STRLEN PL_na
-
-=for hackers
-Found in file intrpvar.h
-
-=item PL_sv_no
-X<PL_sv_no>
-
-This is the C<false> SV. See C<PL_sv_yes>. Always refer to this as
-C<&PL_sv_no>.
-
- SV PL_sv_no
-
-=for hackers
-Found in file intrpvar.h
-
-=item PL_sv_undef
-X<PL_sv_undef>
-
-This is the C<undef> SV. Always refer to this as C<&PL_sv_undef>.
-
- SV PL_sv_undef
-
-=for hackers
-Found in file intrpvar.h
-
-=item PL_sv_yes
-X<PL_sv_yes>
-
-This is the C<true> SV. See C<PL_sv_no>. Always refer to this as
-C<&PL_sv_yes>.
-
- SV PL_sv_yes
-
-=for hackers
-Found in file intrpvar.h
-
-
-=back
-
-=head1 REGEXP Functions
-
-=over 8
-
-=item SvRX
-X<SvRX>
-
-Convenience macro to get the REGEXP from a SV. This is approximately
-equivalent to the following snippet:
-
- if (SvMAGICAL(sv))
- mg_get(sv);
- if (SvROK(sv) &&
- (tmpsv = (SV*)SvRV(sv)) &&
- SvTYPE(tmpsv) == SVt_PVMG &&
- (tmpmg = mg_find(tmpsv, PERL_MAGIC_qr)))
- {
- return (REGEXP *)tmpmg->mg_obj;
- }
-
-NULL will be returned if a REGEXP* is not found.
-
- REGEXP * SvRX(SV *sv)
-
-=for hackers
-Found in file regexp.h
-
-=item SvRXOK
-X<SvRXOK>
-
-Returns a boolean indicating whether the SV contains qr magic
-(PERL_MAGIC_qr).
-
-If you want to do something with the REGEXP* later use SvRX instead
-and check for NULL.
-
- bool SvRXOK(SV* sv)
-
-=for hackers
-Found in file regexp.h
-
-
-=back
-
-=head1 Simple Exception Handling Macros
-
-=over 8
-
-=item dXCPT
-X<dXCPT>
-
-Set up necessary local variables for exception handling.
-See L<perlguts/"Exception Handling">.
-
- dXCPT;
-
-=for hackers
-Found in file XSUB.h
-
-=item XCPT_CATCH
-X<XCPT_CATCH>
-
-Introduces a catch block. See L<perlguts/"Exception Handling">.
-
-=for hackers
-Found in file XSUB.h
-
-=item XCPT_RETHROW
-X<XCPT_RETHROW>
-
-Rethrows a previously caught exception. See L<perlguts/"Exception Handling">.
-
- XCPT_RETHROW;
-
-=for hackers
-Found in file XSUB.h
-
-=item XCPT_TRY_END
-X<XCPT_TRY_END>
-
-Ends a try block. See L<perlguts/"Exception Handling">.
-
-=for hackers
-Found in file XSUB.h
-
-=item XCPT_TRY_START
-X<XCPT_TRY_START>
-
-Starts a try block. See L<perlguts/"Exception Handling">.
-
-=for hackers
-Found in file XSUB.h
-
-
-=back
-
-=head1 Stack Manipulation Macros
-
-=over 8
-
-=item dMARK
-X<dMARK>
-
-Declare a stack marker variable, C<mark>, for the XSUB. See C<MARK> and
-C<dORIGMARK>.
-
- dMARK;
-
-=for hackers
-Found in file pp.h
-
-=item dORIGMARK
-X<dORIGMARK>
-
-Saves the original stack mark for the XSUB. See C<ORIGMARK>.
-
- dORIGMARK;
-
-=for hackers
-Found in file pp.h
-
-=item dSP
-X<dSP>
-
-Declares a local copy of perl's stack pointer for the XSUB, available via
-the C<SP> macro. See C<SP>.
-
- dSP;
-
-=for hackers
-Found in file pp.h
-
-=item EXTEND
-X<EXTEND>
-
-Used to extend the argument stack for an XSUB's return values. Once
-used, guarantees that there is room for at least C<nitems> to be pushed
-onto the stack.
-
- void EXTEND(SP, int nitems)
-
-=for hackers
-Found in file pp.h
-
-=item MARK
-X<MARK>
-
-Stack marker variable for the XSUB. See C<dMARK>.
-
-=for hackers
-Found in file pp.h
-
-=item mPUSHi
-X<mPUSHi>
-
-Push an integer onto the stack. The stack must have room for this element.
-Handles 'set' magic. Does not use C<TARG>. See also C<PUSHi>, C<mXPUSHi>
-and C<XPUSHi>.
-
- void mPUSHi(IV iv)
-
-=for hackers
-Found in file pp.h
-
-=item mPUSHn
-X<mPUSHn>
-
-Push a double onto the stack. The stack must have room for this element.
-Handles 'set' magic. Does not use C<TARG>. See also C<PUSHn>, C<mXPUSHn>
-and C<XPUSHn>.
-
- void mPUSHn(NV nv)
-
-=for hackers
-Found in file pp.h
-
-=item mPUSHp
-X<mPUSHp>
-
-Push a string onto the stack. The stack must have room for this element.
-The C<len> indicates the length of the string. Handles 'set' magic. Does
-not use C<TARG>. See also C<PUSHp>, C<mXPUSHp> and C<XPUSHp>.
-
- void mPUSHp(char* str, STRLEN len)
-
-=for hackers
-Found in file pp.h
-
-=item mPUSHu
-X<mPUSHu>
-
-Push an unsigned integer onto the stack. The stack must have room for this
-element. Handles 'set' magic. Does not use C<TARG>. See also C<PUSHu>,
-C<mXPUSHu> and C<XPUSHu>.
-
- void mPUSHu(UV uv)
-
-=for hackers
-Found in file pp.h
-
-=item mXPUSHi
-X<mXPUSHi>
-
-Push an integer onto the stack, extending the stack if necessary. Handles
-'set' magic. Does not use C<TARG>. See also C<XPUSHi>, C<mPUSHi> and
-C<PUSHi>.
-
- void mXPUSHi(IV iv)
-
-=for hackers
-Found in file pp.h
-
-=item mXPUSHn
-X<mXPUSHn>
-
-Push a double onto the stack, extending the stack if necessary. Handles
-'set' magic. Does not use C<TARG>. See also C<XPUSHn>, C<mPUSHn> and
-C<PUSHn>.
-
- void mXPUSHn(NV nv)
-
-=for hackers
-Found in file pp.h
-
-=item mXPUSHp
-X<mXPUSHp>
-
-Push a string onto the stack, extending the stack if necessary. The C<len>
-indicates the length of the string. Handles 'set' magic. Does not use
-C<TARG>. See also C<XPUSHp>, C<mPUSHp> and C<PUSHp>.
-
- void mXPUSHp(char* str, STRLEN len)
-
-=for hackers
-Found in file pp.h
-
-=item mXPUSHu
-X<mXPUSHu>
-
-Push an unsigned integer onto the stack, extending the stack if necessary.
-Handles 'set' magic. Does not use C<TARG>. See also C<XPUSHu>, C<mPUSHu>
-and C<PUSHu>.
-
- void mXPUSHu(UV uv)
-
-=for hackers
-Found in file pp.h
-
-=item ORIGMARK
-X<ORIGMARK>
-
-The original stack mark for the XSUB. See C<dORIGMARK>.
-
-=for hackers
-Found in file pp.h
-
-=item POPi
-X<POPi>
-
-Pops an integer off the stack.
-
- IV POPi
-
-=for hackers
-Found in file pp.h
-
-=item POPl
-X<POPl>
-
-Pops a long off the stack.
-
- long POPl
-
-=for hackers
-Found in file pp.h
-
-=item POPn
-X<POPn>
-
-Pops a double off the stack.
-
- NV POPn
-
-=for hackers
-Found in file pp.h
-
-=item POPp
-X<POPp>
-
-Pops a string off the stack. Deprecated. New code should use POPpx.
-
- char* POPp
-
-=for hackers
-Found in file pp.h
-
-=item POPpbytex
-X<POPpbytex>
-
-Pops a string off the stack which must consist of bytes i.e. characters < 256.
-
- char* POPpbytex
-
-=for hackers
-Found in file pp.h
-
-=item POPpx
-X<POPpx>
-
-Pops a string off the stack.
-
- char* POPpx
-
-=for hackers
-Found in file pp.h
-
-=item POPs
-X<POPs>
-
-Pops an SV off the stack.
-
- SV* POPs
-
-=for hackers
-Found in file pp.h
-
-=item PUSHi
-X<PUSHi>
-
-Push an integer onto the stack. The stack must have room for this element.
-Handles 'set' magic. Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be
-called to declare it. Do not call multiple C<TARG>-oriented macros to
-return lists from XSUB's - see C<mPUSHi> instead. See also C<XPUSHi> and
-C<mXPUSHi>.
-
- void PUSHi(IV iv)
-
-=for hackers
-Found in file pp.h
-
-=item PUSHMARK
-X<PUSHMARK>
-
-Opening bracket for arguments on a callback. See C<PUTBACK> and
-L<perlcall>.
-
- void PUSHMARK(SP)
-
-=for hackers
-Found in file pp.h
-
-=item PUSHmortal
-X<PUSHmortal>
-
-Push a new mortal SV onto the stack. The stack must have room for this
-element. Does not handle 'set' magic. Does not use C<TARG>. See also
-C<PUSHs>, C<XPUSHmortal> and C<XPUSHs>.
-
- void PUSHmortal()
-
-=for hackers
-Found in file pp.h
-
-=item PUSHn
-X<PUSHn>
-
-Push a double onto the stack. The stack must have room for this element.
-Handles 'set' magic. Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be
-called to declare it. Do not call multiple C<TARG>-oriented macros to
-return lists from XSUB's - see C<mPUSHn> instead. See also C<XPUSHn> and
-C<mXPUSHn>.
-
- void PUSHn(NV nv)
-
-=for hackers
-Found in file pp.h
-
-=item PUSHp
-X<PUSHp>
-
-Push a string onto the stack. The stack must have room for this element.
-The C<len> indicates the length of the string. Handles 'set' magic. Uses
-C<TARG>, so C<dTARGET> or C<dXSTARG> should be called to declare it. Do not
-call multiple C<TARG>-oriented macros to return lists from XSUB's - see
-C<mPUSHp> instead. See also C<XPUSHp> and C<mXPUSHp>.
-
- void PUSHp(char* str, STRLEN len)
-
-=for hackers
-Found in file pp.h
-
-=item PUSHs
-X<PUSHs>
-
-Push an SV onto the stack. The stack must have room for this element.
-Does not handle 'set' magic. Does not use C<TARG>. See also C<PUSHmortal>,
-C<XPUSHs> and C<XPUSHmortal>.
-
- void PUSHs(SV* sv)
-
-=for hackers
-Found in file pp.h
-
-=item PUSHu
-X<PUSHu>
-
-Push an unsigned integer onto the stack. The stack must have room for this
-element. Handles 'set' magic. Uses C<TARG>, so C<dTARGET> or C<dXSTARG>
-should be called to declare it. Do not call multiple C<TARG>-oriented
-macros to return lists from XSUB's - see C<mPUSHu> instead. See also
-C<XPUSHu> and C<mXPUSHu>.
-
- void PUSHu(UV uv)
-
-=for hackers
-Found in file pp.h
-
-=item PUTBACK
-X<PUTBACK>
-
-Closing bracket for XSUB arguments. This is usually handled by C<xsubpp>.
-See C<PUSHMARK> and L<perlcall> for other uses.
-
- PUTBACK;
-
-=for hackers
-Found in file pp.h
-
-=item SP
-X<SP>
-
-Stack pointer. This is usually handled by C<xsubpp>. See C<dSP> and
-C<SPAGAIN>.
-
-=for hackers
-Found in file pp.h
-
-=item SPAGAIN
-X<SPAGAIN>
-
-Refetch the stack pointer. Used after a callback. See L<perlcall>.
-
- SPAGAIN;
-
-=for hackers
-Found in file pp.h
-
-=item XPUSHi
-X<XPUSHi>
-
-Push an integer onto the stack, extending the stack if necessary. Handles
-'set' magic. Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be called to
-declare it. Do not call multiple C<TARG>-oriented macros to return lists
-from XSUB's - see C<mXPUSHi> instead. See also C<PUSHi> and C<mPUSHi>.
-
- void XPUSHi(IV iv)
-
-=for hackers
-Found in file pp.h
-
-=item XPUSHmortal
-X<XPUSHmortal>
-
-Push a new mortal SV onto the stack, extending the stack if necessary. Does
-not handle 'set' magic. Does not use C<TARG>. See also C<XPUSHs>,
-C<PUSHmortal> and C<PUSHs>.
-
- void XPUSHmortal()
-
-=for hackers
-Found in file pp.h
-
-=item XPUSHn
-X<XPUSHn>
-
-Push a double onto the stack, extending the stack if necessary. Handles
-'set' magic. Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be called to
-declare it. Do not call multiple C<TARG>-oriented macros to return lists
-from XSUB's - see C<mXPUSHn> instead. See also C<PUSHn> and C<mPUSHn>.
-
- void XPUSHn(NV nv)
-
-=for hackers
-Found in file pp.h
-
-=item XPUSHp
-X<XPUSHp>
-
-Push a string onto the stack, extending the stack if necessary. The C<len>
-indicates the length of the string. Handles 'set' magic. Uses C<TARG>, so
-C<dTARGET> or C<dXSTARG> should be called to declare it. Do not call
-multiple C<TARG>-oriented macros to return lists from XSUB's - see
-C<mXPUSHp> instead. See also C<PUSHp> and C<mPUSHp>.
-
- void XPUSHp(char* str, STRLEN len)
-
-=for hackers
-Found in file pp.h
-
-=item XPUSHs
-X<XPUSHs>
-
-Push an SV onto the stack, extending the stack if necessary. Does not
-handle 'set' magic. Does not use C<TARG>. See also C<XPUSHmortal>,
-C<PUSHs> and C<PUSHmortal>.
-
- void XPUSHs(SV* sv)
-
-=for hackers
-Found in file pp.h
-
-=item XPUSHu
-X<XPUSHu>
-
-Push an unsigned integer onto the stack, extending the stack if necessary.
-Handles 'set' magic. Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be
-called to declare it. Do not call multiple C<TARG>-oriented macros to
-return lists from XSUB's - see C<mXPUSHu> instead. See also C<PUSHu> and
-C<mPUSHu>.
-
- void XPUSHu(UV uv)
-
-=for hackers
-Found in file pp.h
-
-=item XSRETURN
-X<XSRETURN>
-
-Return from XSUB, indicating number of items on the stack. This is usually
-handled by C<xsubpp>.
-
- void XSRETURN(int nitems)
-
-=for hackers
-Found in file XSUB.h
-
-=item XSRETURN_EMPTY
-X<XSRETURN_EMPTY>
-
-Return an empty list from an XSUB immediately.
-
- XSRETURN_EMPTY;
-
-=for hackers
-Found in file XSUB.h
-
-=item XSRETURN_IV
-X<XSRETURN_IV>
-
-Return an integer from an XSUB immediately. Uses C<XST_mIV>.
-
- void XSRETURN_IV(IV iv)
-
-=for hackers
-Found in file XSUB.h
-
-=item XSRETURN_NO
-X<XSRETURN_NO>
-
-Return C<&PL_sv_no> from an XSUB immediately. Uses C<XST_mNO>.
-
- XSRETURN_NO;
-
-=for hackers
-Found in file XSUB.h
-
-=item XSRETURN_NV
-X<XSRETURN_NV>
-
-Return a double from an XSUB immediately. Uses C<XST_mNV>.
-
- void XSRETURN_NV(NV nv)
-
-=for hackers
-Found in file XSUB.h
-
-=item XSRETURN_PV
-X<XSRETURN_PV>
-
-Return a copy of a string from an XSUB immediately. Uses C<XST_mPV>.
-
- void XSRETURN_PV(char* str)
-
-=for hackers
-Found in file XSUB.h
-
-=item XSRETURN_UNDEF
-X<XSRETURN_UNDEF>
-
-Return C<&PL_sv_undef> from an XSUB immediately. Uses C<XST_mUNDEF>.
-
- XSRETURN_UNDEF;
-
-=for hackers
-Found in file XSUB.h
-
-=item XSRETURN_UV
-X<XSRETURN_UV>
-
-Return an integer from an XSUB immediately. Uses C<XST_mUV>.
-
- void XSRETURN_UV(IV uv)
-
-=for hackers
-Found in file XSUB.h
-
-=item XSRETURN_YES
-X<XSRETURN_YES>
-
-Return C<&PL_sv_yes> from an XSUB immediately. Uses C<XST_mYES>.
-
- XSRETURN_YES;
-
-=for hackers
-Found in file XSUB.h
-
-=item XST_mIV
-X<XST_mIV>
-
-Place an integer into the specified position C<pos> on the stack. The
-value is stored in a new mortal SV.
-
- void XST_mIV(int pos, IV iv)
-
-=for hackers
-Found in file XSUB.h
-
-=item XST_mNO
-X<XST_mNO>
-
-Place C<&PL_sv_no> into the specified position C<pos> on the
-stack.
-
- void XST_mNO(int pos)
-
-=for hackers
-Found in file XSUB.h
-
-=item XST_mNV
-X<XST_mNV>
-
-Place a double into the specified position C<pos> on the stack. The value
-is stored in a new mortal SV.
-
- void XST_mNV(int pos, NV nv)
-
-=for hackers
-Found in file XSUB.h
-
-=item XST_mPV
-X<XST_mPV>
-
-Place a copy of a string into the specified position C<pos> on the stack.
-The value is stored in a new mortal SV.
-
- void XST_mPV(int pos, char* str)
-
-=for hackers
-Found in file XSUB.h
-
-=item XST_mUNDEF
-X<XST_mUNDEF>
-
-Place C<&PL_sv_undef> into the specified position C<pos> on the
-stack.
-
- void XST_mUNDEF(int pos)
-
-=for hackers
-Found in file XSUB.h
-
-=item XST_mYES
-X<XST_mYES>
-
-Place C<&PL_sv_yes> into the specified position C<pos> on the
-stack.
-
- void XST_mYES(int pos)
-
-=for hackers
-Found in file XSUB.h
-
-
-=back
-
-=head1 SV Flags
-
-=over 8
-
-=item svtype
-X<svtype>
-
-An enum of flags for Perl types. These are found in the file B<sv.h>
-in the C<svtype> enum. Test these flags with the C<SvTYPE> macro.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_IV
-X<SVt_IV>
-
-Integer type flag for scalars. See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_NV
-X<SVt_NV>
-
-Double type flag for scalars. See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_PV
-X<SVt_PV>
-
-Pointer type flag for scalars. See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_PVAV
-X<SVt_PVAV>
-
-Type flag for arrays. See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_PVCV
-X<SVt_PVCV>
-
-Type flag for code refs. See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_PVHV
-X<SVt_PVHV>
-
-Type flag for hashes. See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_PVMG
-X<SVt_PVMG>
-
-Type flag for blessed scalars. See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-
-=back
-
-=head1 SV Manipulation Functions
-
-=over 8
-
-=item get_sv
-X<get_sv>
-
-Returns the SV of the specified Perl scalar. If C<create> is set and the
-Perl variable does not exist then it will be created. If C<create> is not
-set and the variable does not exist then NULL is returned.
-
-NOTE: the perl_ form of this function is deprecated.
-
- SV* get_sv(const char* name, I32 create)
-
-=for hackers
-Found in file perl.c
-
-=item newRV_inc
-X<newRV_inc>
-
-Creates an RV wrapper for an SV. The reference count for the original SV is
-incremented.
-
- SV* newRV_inc(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvCUR
-X<SvCUR>
-
-Returns the length of the string which is in the SV. See C<SvLEN>.
-
- STRLEN SvCUR(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvCUR_set
-X<SvCUR_set>
-
-Set the current length of the string which is in the SV. See C<SvCUR>
-and C<SvIV_set>.
-
- void SvCUR_set(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvEND
-X<SvEND>
-
-Returns a pointer to the last character in the string which is in the SV.
-See C<SvCUR>. Access the character as *(SvEND(sv)).
-
- char* SvEND(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvGAMAGIC
-X<SvGAMAGIC>
-
-Returns true if the SV has get magic or overloading. If either is true then
-the scalar is active data, and has the potential to return a new value every
-time it is accessed. Hence you must be careful to only read it once per user
-logical operation and work with that returned value. If neither is true then
-the scalar's value cannot change unless written to.
-
- char* SvGAMAGIC(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvGROW
-X<SvGROW>
-
-Expands the character buffer in the SV so that it has room for the
-indicated number of bytes (remember to reserve space for an extra trailing
-NUL character). Calls C<sv_grow> to perform the expansion if necessary.
-Returns a pointer to the character buffer.
-
- char * SvGROW(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvIOK
-X<SvIOK>
-
-Returns a U32 value indicating whether the SV contains an integer.
-
- U32 SvIOK(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIOKp
-X<SvIOKp>
-
-Returns a U32 value indicating whether the SV contains an integer. Checks
-the B<private> setting. Use C<SvIOK>.
-
- U32 SvIOKp(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIOK_notUV
-X<SvIOK_notUV>
-
-Returns a boolean indicating whether the SV contains a signed integer.
-
- bool SvIOK_notUV(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIOK_off
-X<SvIOK_off>
-
-Unsets the IV status of an SV.
-
- void SvIOK_off(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIOK_on
-X<SvIOK_on>
-
-Tells an SV that it is an integer.
-
- void SvIOK_on(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIOK_only
-X<SvIOK_only>
-
-Tells an SV that it is an integer and disables all other OK bits.
-
- void SvIOK_only(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIOK_only_UV
-X<SvIOK_only_UV>
-
-Tells and SV that it is an unsigned integer and disables all other OK bits.
-
- void SvIOK_only_UV(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIOK_UV
-X<SvIOK_UV>
-
-Returns a boolean indicating whether the SV contains an unsigned integer.
-
- bool SvIOK_UV(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIsCOW
-X<SvIsCOW>
-
-Returns a boolean indicating whether the SV is Copy-On-Write. (either shared
-hash key scalars, or full Copy On Write scalars if 5.9.0 is configured for
-COW)
-
- bool SvIsCOW(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIsCOW_shared_hash
-X<SvIsCOW_shared_hash>
-
-Returns a boolean indicating whether the SV is Copy-On-Write shared hash key
-scalar.
-
- bool SvIsCOW_shared_hash(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIV
-X<SvIV>
-
-Coerces the given SV to an integer and returns it. See C<SvIVx> for a
-version which guarantees to evaluate sv only once.
-
- IV SvIV(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIVX
-X<SvIVX>
-
-Returns the raw value in the SV's IV slot, without checks or conversions.
-Only use when you are sure SvIOK is true. See also C<SvIV()>.
-
- IV SvIVX(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIVx
-X<SvIVx>
-
-Coerces the given SV to an integer and returns it. Guarantees to evaluate
-C<sv> only once. Only use this if C<sv> is an expression with side effects,
-otherwise use the more efficient C<SvIV>.
-
- IV SvIVx(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIV_nomg
-X<SvIV_nomg>
-
-Like C<SvIV> but doesn't process magic.
-
- IV SvIV_nomg(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIV_set
-X<SvIV_set>
-
-Set the value of the IV pointer in sv to val. It is possible to perform
-the same function of this macro with an lvalue assignment to C<SvIVX>.
-With future Perls, however, it will be more efficient to use
-C<SvIV_set> instead of the lvalue assignment to C<SvIVX>.
-
- void SvIV_set(SV* sv, IV val)
-
-=for hackers
-Found in file sv.h
-
-=item SvLEN
-X<SvLEN>
-
-Returns the size of the string buffer in the SV, not including any part
-attributable to C<SvOOK>. See C<SvCUR>.
-
- STRLEN SvLEN(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvLEN_set
-X<SvLEN_set>
-
-Set the actual length of the string which is in the SV. See C<SvIV_set>.
-
- void SvLEN_set(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvMAGIC_set
-X<SvMAGIC_set>
-
-Set the value of the MAGIC pointer in sv to val. See C<SvIV_set>.
-
- void SvMAGIC_set(SV* sv, MAGIC* val)
-
-=for hackers
-Found in file sv.h
-
-=item SvNIOK
-X<SvNIOK>
-
-Returns a U32 value indicating whether the SV contains a number, integer or
-double.
-
- U32 SvNIOK(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNIOKp
-X<SvNIOKp>
-
-Returns a U32 value indicating whether the SV contains a number, integer or
-double. Checks the B<private> setting. Use C<SvNIOK>.
-
- U32 SvNIOKp(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNIOK_off
-X<SvNIOK_off>
-
-Unsets the NV/IV status of an SV.
-
- void SvNIOK_off(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNOK
-X<SvNOK>
-
-Returns a U32 value indicating whether the SV contains a double.
-
- U32 SvNOK(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNOKp
-X<SvNOKp>
-
-Returns a U32 value indicating whether the SV contains a double. Checks the
-B<private> setting. Use C<SvNOK>.
-
- U32 SvNOKp(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNOK_off
-X<SvNOK_off>
-
-Unsets the NV status of an SV.
-
- void SvNOK_off(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNOK_on
-X<SvNOK_on>
-
-Tells an SV that it is a double.
-
- void SvNOK_on(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNOK_only
-X<SvNOK_only>
-
-Tells an SV that it is a double and disables all other OK bits.
-
- void SvNOK_only(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNV
-X<SvNV>
-
-Coerce the given SV to a double and return it. See C<SvNVx> for a version
-which guarantees to evaluate sv only once.
-
- NV SvNV(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNVX
-X<SvNVX>
-
-Returns the raw value in the SV's NV slot, without checks or conversions.
-Only use when you are sure SvNOK is true. See also C<SvNV()>.
-
- NV SvNVX(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNVx
-X<SvNVx>
-
-Coerces the given SV to a double and returns it. Guarantees to evaluate
-C<sv> only once. Only use this if C<sv> is an expression with side effects,
-otherwise use the more efficient C<SvNV>.
-
- NV SvNVx(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNV_set
-X<SvNV_set>
-
-Set the value of the NV pointer in sv to val. See C<SvIV_set>.
-
- void SvNV_set(SV* sv, NV val)
-
-=for hackers
-Found in file sv.h
-
-=item SvOK
-X<SvOK>
-
-Returns a U32 value indicating whether the value is an SV. It also tells
-whether the value is defined or not.
-
- U32 SvOK(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvOOK
-X<SvOOK>
-
-Returns a U32 indicating whether the SvIVX is a valid offset value for
-the SvPVX. This hack is used internally to speed up removal of characters
-from the beginning of a SvPV. When SvOOK is true, then the start of the
-allocated string buffer is really (SvPVX - SvIVX).
-
- U32 SvOOK(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPOK
-X<SvPOK>
-
-Returns a U32 value indicating whether the SV contains a character
-string.
-
- U32 SvPOK(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPOKp
-X<SvPOKp>
-
-Returns a U32 value indicating whether the SV contains a character string.
-Checks the B<private> setting. Use C<SvPOK>.
-
- U32 SvPOKp(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPOK_off
-X<SvPOK_off>
-
-Unsets the PV status of an SV.
-
- void SvPOK_off(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPOK_on
-X<SvPOK_on>
-
-Tells an SV that it is a string.
-
- void SvPOK_on(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPOK_only
-X<SvPOK_only>
-
-Tells an SV that it is a string and disables all other OK bits.
-Will also turn off the UTF-8 status.
-
- void SvPOK_only(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPOK_only_UTF8
-X<SvPOK_only_UTF8>
-
-Tells an SV that it is a string and disables all other OK bits,
-and leaves the UTF-8 status as it was.
-
- void SvPOK_only_UTF8(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPV
-X<SvPV>
-
-Returns a pointer to the string in the SV, or a stringified form of
-the SV if the SV does not contain a string. The SV may cache the
-stringified version becoming C<SvPOK>. Handles 'get' magic. See also
-C<SvPVx> for a version which guarantees to evaluate sv only once.
-
- char* SvPV(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvPVbyte
-X<SvPVbyte>
-
-Like C<SvPV>, but converts sv to byte representation first if necessary.
-
- char* SvPVbyte(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvPVbytex
-X<SvPVbytex>
-
-Like C<SvPV>, but converts sv to byte representation first if necessary.
-Guarantees to evaluate sv only once; use the more efficient C<SvPVbyte>
-otherwise.
-
- char* SvPVbytex(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvPVbytex_force
-X<SvPVbytex_force>
-
-Like C<SvPV_force>, but converts sv to byte representation first if necessary.
-Guarantees to evaluate sv only once; use the more efficient C<SvPVbyte_force>
-otherwise.
-
- char* SvPVbytex_force(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvPVbyte_force
-X<SvPVbyte_force>
-
-Like C<SvPV_force>, but converts sv to byte representation first if necessary.
-
- char* SvPVbyte_force(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvPVbyte_nolen
-X<SvPVbyte_nolen>
-
-Like C<SvPV_nolen>, but converts sv to byte representation first if necessary.
-
- char* SvPVbyte_nolen(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPVutf8
-X<SvPVutf8>
-
-Like C<SvPV>, but converts sv to utf8 first if necessary.
-
- char* SvPVutf8(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvPVutf8x
-X<SvPVutf8x>
-
-Like C<SvPV>, but converts sv to utf8 first if necessary.
-Guarantees to evaluate sv only once; use the more efficient C<SvPVutf8>
-otherwise.
-
- char* SvPVutf8x(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvPVutf8x_force
-X<SvPVutf8x_force>
-
-Like C<SvPV_force>, but converts sv to utf8 first if necessary.
-Guarantees to evaluate sv only once; use the more efficient C<SvPVutf8_force>
-otherwise.
-
- char* SvPVutf8x_force(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvPVutf8_force
-X<SvPVutf8_force>
-
-Like C<SvPV_force>, but converts sv to utf8 first if necessary.
-
- char* SvPVutf8_force(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvPVutf8_nolen
-X<SvPVutf8_nolen>
-
-Like C<SvPV_nolen>, but converts sv to utf8 first if necessary.
-
- char* SvPVutf8_nolen(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPVX
-X<SvPVX>
-
-Returns a pointer to the physical string in the SV. The SV must contain a
-string.
-
- char* SvPVX(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPVx
-X<SvPVx>
-
-A version of C<SvPV> which guarantees to evaluate C<sv> only once.
-Only use this if C<sv> is an expression with side effects, otherwise use the
-more efficient C<SvPVX>.
-
- char* SvPVx(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvPV_force
-X<SvPV_force>
-
-Like C<SvPV> but will force the SV into containing just a string
-(C<SvPOK_only>). You want force if you are going to update the C<SvPVX>
-directly.
-
- char* SvPV_force(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvPV_force_nomg
-X<SvPV_force_nomg>
-
-Like C<SvPV> but will force the SV into containing just a string
-(C<SvPOK_only>). You want force if you are going to update the C<SvPVX>
-directly. Doesn't process magic.
-
- char* SvPV_force_nomg(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvPV_nolen
-X<SvPV_nolen>
-
-Returns a pointer to the string in the SV, or a stringified form of
-the SV if the SV does not contain a string. The SV may cache the
-stringified form becoming C<SvPOK>. Handles 'get' magic.
-
- char* SvPV_nolen(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPV_nomg
-X<SvPV_nomg>
-
-Like C<SvPV> but doesn't process magic.
-
- char* SvPV_nomg(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvPV_set
-X<SvPV_set>
-
-Set the value of the PV pointer in sv to val. See C<SvIV_set>.
-
- void SvPV_set(SV* sv, char* val)
-
-=for hackers
-Found in file sv.h
-
-=item SvREFCNT
-X<SvREFCNT>
-
-Returns the value of the object's reference count.
-
- U32 SvREFCNT(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvREFCNT_dec
-X<SvREFCNT_dec>
-
-Decrements the reference count of the given SV.
-
- void SvREFCNT_dec(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvREFCNT_inc
-X<SvREFCNT_inc>
-
-Increments the reference count of the given SV.
-
-All of the following SvREFCNT_inc* macros are optimized versions of
-SvREFCNT_inc, and can be replaced with SvREFCNT_inc.
-
- SV* SvREFCNT_inc(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvREFCNT_inc_NN
-X<SvREFCNT_inc_NN>
-
-Same as SvREFCNT_inc, but can only be used if you know I<sv>
-is not NULL. Since we don't have to check the NULLness, it's faster
-and smaller.
-
- SV* SvREFCNT_inc_NN(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvREFCNT_inc_simple
-X<SvREFCNT_inc_simple>
-
-Same as SvREFCNT_inc, but can only be used with expressions without side
-effects. Since we don't have to store a temporary value, it's faster.
-
- SV* SvREFCNT_inc_simple(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvREFCNT_inc_simple_NN
-X<SvREFCNT_inc_simple_NN>
-
-Same as SvREFCNT_inc_simple, but can only be used if you know I<sv>
-is not NULL. Since we don't have to check the NULLness, it's faster
-and smaller.
-
- SV* SvREFCNT_inc_simple_NN(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvREFCNT_inc_simple_void
-X<SvREFCNT_inc_simple_void>
-
-Same as SvREFCNT_inc_simple, but can only be used if you don't need the
-return value. The macro doesn't need to return a meaningful value.
-
- void SvREFCNT_inc_simple_void(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvREFCNT_inc_simple_void_NN
-X<SvREFCNT_inc_simple_void_NN>
-
-Same as SvREFCNT_inc, but can only be used if you don't need the return
-value, and you know that I<sv> is not NULL. The macro doesn't need
-to return a meaningful value, or check for NULLness, so it's smaller
-and faster.
-
- void SvREFCNT_inc_simple_void_NN(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvREFCNT_inc_void
-X<SvREFCNT_inc_void>
-
-Same as SvREFCNT_inc, but can only be used if you don't need the
-return value. The macro doesn't need to return a meaningful value.
-
- void SvREFCNT_inc_void(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvREFCNT_inc_void_NN
-X<SvREFCNT_inc_void_NN>
-
-Same as SvREFCNT_inc, but can only be used if you don't need the return
-value, and you know that I<sv> is not NULL. The macro doesn't need
-to return a meaningful value, or check for NULLness, so it's smaller
-and faster.
-
- void SvREFCNT_inc_void_NN(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvROK
-X<SvROK>
-
-Tests if the SV is an RV.
-
- U32 SvROK(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvROK_off
-X<SvROK_off>
-
-Unsets the RV status of an SV.
-
- void SvROK_off(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvROK_on
-X<SvROK_on>
-
-Tells an SV that it is an RV.
-
- void SvROK_on(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvRV
-X<SvRV>
-
-Dereferences an RV to return the SV.
-
- SV* SvRV(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvRV_set
-X<SvRV_set>
-
-Set the value of the RV pointer in sv to val. See C<SvIV_set>.
-
- void SvRV_set(SV* sv, SV* val)
-
-=for hackers
-Found in file sv.h
-
-=item SvSTASH
-X<SvSTASH>
-
-Returns the stash of the SV.
-
- HV* SvSTASH(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvSTASH_set
-X<SvSTASH_set>
-
-Set the value of the STASH pointer in sv to val. See C<SvIV_set>.
-
- void SvSTASH_set(SV* sv, HV* val)
-
-=for hackers
-Found in file sv.h
-
-=item SvTAINT
-X<SvTAINT>
-
-Taints an SV if tainting is enabled.
-
- void SvTAINT(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvTAINTED
-X<SvTAINTED>
-
-Checks to see if an SV is tainted. Returns TRUE if it is, FALSE if
-not.
-
- bool SvTAINTED(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvTAINTED_off
-X<SvTAINTED_off>
-
-Untaints an SV. Be I<very> careful with this routine, as it short-circuits
-some of Perl's fundamental security features. XS module authors should not
-use this function unless they fully understand all the implications of
-unconditionally untainting the value. Untainting should be done in the
-standard perl fashion, via a carefully crafted regexp, rather than directly
-untainting variables.
-
- void SvTAINTED_off(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvTAINTED_on
-X<SvTAINTED_on>
-
-Marks an SV as tainted if tainting is enabled.
-
- void SvTAINTED_on(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvTRUE
-X<SvTRUE>
-
-Returns a boolean indicating whether Perl would evaluate the SV as true or
-false, defined or undefined. Does not handle 'get' magic.
-
- bool SvTRUE(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvTYPE
-X<SvTYPE>
-
-Returns the type of the SV. See C<svtype>.
-
- svtype SvTYPE(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvUOK
-X<SvUOK>
-
-Returns a boolean indicating whether the SV contains an unsigned integer.
-
- bool SvUOK(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvUPGRADE
-X<SvUPGRADE>
-
-Used to upgrade an SV to a more complex form. Uses C<sv_upgrade> to
-perform the upgrade if necessary. See C<svtype>.
-
- void SvUPGRADE(SV* sv, svtype type)
-
-=for hackers
-Found in file sv.h
-
-=item SvUTF8
-X<SvUTF8>
-
-Returns a U32 value indicating whether the SV contains UTF-8 encoded data.
-Call this after SvPV() in case any call to string overloading updates the
-internal flag.
-
- U32 SvUTF8(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvUTF8_off
-X<SvUTF8_off>
-
-Unsets the UTF-8 status of an SV.
-
- void SvUTF8_off(SV *sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvUTF8_on
-X<SvUTF8_on>
-
-Turn on the UTF-8 status of an SV (the data is not changed, just the flag).
-Do not use frivolously.
-
- void SvUTF8_on(SV *sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvUV
-X<SvUV>
-
-Coerces the given SV to an unsigned integer and returns it. See C<SvUVx>
-for a version which guarantees to evaluate sv only once.
-
- UV SvUV(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvUVX
-X<SvUVX>
-
-Returns the raw value in the SV's UV slot, without checks or conversions.
-Only use when you are sure SvIOK is true. See also C<SvUV()>.
-
- UV SvUVX(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvUVx
-X<SvUVx>
-
-Coerces the given SV to an unsigned integer and returns it. Guarantees to
-C<sv> only once. Only use this if C<sv> is an expression with side effects,
-otherwise use the more efficient C<SvUV>.
-
- UV SvUVx(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvUV_nomg
-X<SvUV_nomg>
-
-Like C<SvUV> but doesn't process magic.
-
- UV SvUV_nomg(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvUV_set
-X<SvUV_set>
-
-Set the value of the UV pointer in sv to val. See C<SvIV_set>.
-
- void SvUV_set(SV* sv, UV val)
-
-=for hackers
-Found in file sv.h
-
-=item SvVOK
-X<SvVOK>
-
-Returns a boolean indicating whether the SV contains a v-string.
-
- bool SvVOK(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item sv_catpvn_nomg
-X<sv_catpvn_nomg>
-
-Like C<sv_catpvn> but doesn't process magic.
-
- void sv_catpvn_nomg(SV* sv, const char* ptr, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item sv_catsv_nomg
-X<sv_catsv_nomg>
-
-Like C<sv_catsv> but doesn't process magic.
-
- void sv_catsv_nomg(SV* dsv, SV* ssv)
-
-=for hackers
-Found in file sv.h
-
-=item sv_derived_from
-X<sv_derived_from>
-
-Returns a boolean indicating whether the SV is derived from the specified class
-I<at the C level>. To check derivation at the Perl level, call C<isa()> as a
-normal Perl method.
-
- bool sv_derived_from(SV* sv, const char* name)
-
-=for hackers
-Found in file universal.c
-
-=item sv_does
-X<sv_does>
-
-Returns a boolean indicating whether the SV performs a specific, named role.
-The SV can be a Perl object or the name of a Perl class.
-
- bool sv_does(SV* sv, const char* name)
-
-=for hackers
-Found in file universal.c
-
-=item sv_report_used
-X<sv_report_used>
-
-Dump the contents of all SVs not yet freed. (Debugging aid).
-
- void sv_report_used()
-
-=for hackers
-Found in file sv.c
-
-=item sv_setsv_nomg
-X<sv_setsv_nomg>
-
-Like C<sv_setsv> but doesn't process magic.
-
- void sv_setsv_nomg(SV* dsv, SV* ssv)
-
-=for hackers
-Found in file sv.h
-
-
-=back
-
-=head1 SV-Body Allocation
-
-=over 8
-
-=item looks_like_number
-X<looks_like_number>
-
-Test if the content of an SV looks like a number (or is a number).
-C<Inf> and C<Infinity> are treated as numbers (so will not issue a
-non-numeric warning), even if your atof() doesn't grok them.
-
- I32 looks_like_number(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item newRV_noinc
-X<newRV_noinc>
-
-Creates an RV wrapper for an SV. The reference count for the original
-SV is B<not> incremented.
-
- SV* newRV_noinc(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item newSV
-X<newSV>
-
-Creates a new SV. A non-zero C<len> parameter indicates the number of
-bytes of preallocated string space the SV should have. An extra byte for a
-trailing NUL is also reserved. (SvPOK is not set for the SV even if string
-space is allocated.) The reference count for the new SV is set to 1.
-
-In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
-parameter, I<x>, a debug aid which allowed callers to identify themselves.
-This aid has been superseded by a new build option, PERL_MEM_LOG (see
-L<perlhack/PERL_MEM_LOG>). The older API is still there for use in XS
-modules supporting older perls.
-
- SV* newSV(STRLEN len)
-
-=for hackers
-Found in file sv.c
-
-=item newSVhek
-X<newSVhek>
-
-Creates a new SV from the hash key structure. It will generate scalars that
-point to the shared string table where possible. Returns a new (undefined)
-SV if the hek is NULL.
-
- SV* newSVhek(const HEK *hek)
-
-=for hackers
-Found in file sv.c
-
-=item newSViv
-X<newSViv>
-
-Creates a new SV and copies an integer into it. The reference count for the
-SV is set to 1.
-
- SV* newSViv(IV i)
-
-=for hackers
-Found in file sv.c
-
-=item newSVnv
-X<newSVnv>
-
-Creates a new SV and copies a floating point value into it.
-The reference count for the SV is set to 1.
-
- SV* newSVnv(NV n)
-
-=for hackers
-Found in file sv.c
-
-=item newSVpv
-X<newSVpv>
-
-Creates a new SV and copies a string into it. The reference count for the
-SV is set to 1. If C<len> is zero, Perl will compute the length using
-strlen(). For efficiency, consider using C<newSVpvn> instead.
-
- SV* newSVpv(const char* s, STRLEN len)
-
-=for hackers
-Found in file sv.c
-
-=item newSVpvf
-X<newSVpvf>
-
-Creates a new SV and initializes it with the string formatted like
-C<sprintf>.
-
- SV* newSVpvf(const char* pat, ...)
-
-=for hackers
-Found in file sv.c
-
-=item newSVpvn
-X<newSVpvn>
-
-Creates a new SV and copies a string into it. The reference count for the
-SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
-string. You are responsible for ensuring that the source string is at least
-C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
-
- SV* newSVpvn(const char* s, STRLEN len)
-
-=for hackers
-Found in file sv.c
-
-=item newSVpvn_share
-X<newSVpvn_share>
-
-Creates a new SV with its SvPVX_const pointing to a shared string in the string
-table. If the string does not already exist in the table, it is created
-first. Turns on READONLY and FAKE. If the C<hash> parameter is non-zero, that
-value is used; otherwise the hash is computed. The string's hash can be later
-be retrieved from the SV with the C<SvSHARED_HASH()> macro. The idea here is
-that as the string table is used for shared hash keys these strings will have
-SvPVX_const == HeKEY and hash lookup will avoid string compare.
-
- SV* newSVpvn_share(const char* s, I32 len, U32 hash)
-
-=for hackers
-Found in file sv.c
-
-=item newSVpvs
-X<newSVpvs>
-
-Like C<newSVpvn>, but takes a literal string instead of a string/length pair.
-
- SV* newSVpvs(const char* s)
-
-=for hackers
-Found in file handy.h
-
-=item newSVpvs_share
-X<newSVpvs_share>
-
-Like C<newSVpvn_share>, but takes a literal string instead of a string/length
-pair and omits the hash parameter.
-
- SV* newSVpvs_share(const char* s)
-
-=for hackers
-Found in file handy.h
-
-=item newSVrv
-X<newSVrv>
-
-Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
-it will be upgraded to one. If C<classname> is non-null then the new SV will
-be blessed in the specified package. The new SV is returned and its
-reference count is 1.
-
- SV* newSVrv(SV* rv, const char* classname)
-
-=for hackers
-Found in file sv.c
-
-=item newSVsv
-X<newSVsv>
-
-Creates a new SV which is an exact duplicate of the original SV.
-(Uses C<sv_setsv>).
-
- SV* newSVsv(SV* old)
-
-=for hackers
-Found in file sv.c
-
-=item newSVuv
-X<newSVuv>
-
-Creates a new SV and copies an unsigned integer into it.
-The reference count for the SV is set to 1.
-
- SV* newSVuv(UV u)
-
-=for hackers
-Found in file sv.c
-
-=item newSV_type
-X<newSV_type>
-
-Creates a new SV, of the type specified. The reference count for the new SV
-is set to 1.
-
- SV* newSV_type(svtype type)
-
-=for hackers
-Found in file sv.c
-
-=item sv_2bool
-X<sv_2bool>
-
-This function is only called on magical items, and is only used by
-sv_true() or its macro equivalent.
-
- bool sv_2bool(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_2cv
-X<sv_2cv>
-
-Using various gambits, try to get a CV from an SV; in addition, try if
-possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
-The flags in C<lref> are passed to sv_fetchsv.
-
- CV* sv_2cv(SV* sv, HV** st, GV** gvp, I32 lref)
-
-=for hackers
-Found in file sv.c
-
-=item sv_2io
-X<sv_2io>
-
-Using various gambits, try to get an IO from an SV: the IO slot if its a
-GV; or the recursive result if we're an RV; or the IO slot of the symbol
-named after the PV if we're a string.
-
- IO* sv_2io(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_2iv_flags
-X<sv_2iv_flags>
-
-Return the integer value of an SV, doing any necessary string
-conversion. If flags includes SV_GMAGIC, does an mg_get() first.
-Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
-
- IV sv_2iv_flags(SV* sv, I32 flags)
-
-=for hackers
-Found in file sv.c
-
-=item sv_2mortal
-X<sv_2mortal>
-
-Marks an existing SV as mortal. The SV will be destroyed "soon", either
-by an explicit call to FREETMPS, or by an implicit call at places such as
-statement boundaries. SvTEMP() is turned on which means that the SV's
-string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
-and C<sv_mortalcopy>.
-
- SV* sv_2mortal(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_2nv
-X<sv_2nv>
-
-Return the num value of an SV, doing any necessary string or integer
-conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
-macros.
-
- NV sv_2nv(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_2pvbyte
-X<sv_2pvbyte>
-
-Return a pointer to the byte-encoded representation of the SV, and set *lp
-to its length. May cause the SV to be downgraded from UTF-8 as a
-side-effect.
-
-Usually accessed via the C<SvPVbyte> macro.
-
- char* sv_2pvbyte(SV* sv, STRLEN* lp)
-
-=for hackers
-Found in file sv.c
-
-=item sv_2pvutf8
-X<sv_2pvutf8>
-
-Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
-to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
-
-Usually accessed via the C<SvPVutf8> macro.
-
- char* sv_2pvutf8(SV* sv, STRLEN* lp)
-
-=for hackers
-Found in file sv.c
-
-=item sv_2pv_flags
-X<sv_2pv_flags>
-
-Returns a pointer to the string value of an SV, and sets *lp to its length.
-If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
-if necessary.
-Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
-usually end up here too.
-
- char* sv_2pv_flags(SV* sv, STRLEN* lp, I32 flags)
-
-=for hackers
-Found in file sv.c
-
-=item sv_2uv_flags
-X<sv_2uv_flags>
-
-Return the unsigned integer value of an SV, doing any necessary string
-conversion. If flags includes SV_GMAGIC, does an mg_get() first.
-Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
-
- UV sv_2uv_flags(SV* sv, I32 flags)
-
-=for hackers
-Found in file sv.c
-
-=item sv_backoff
-X<sv_backoff>
-
-Remove any string offset. You should normally use the C<SvOOK_off> macro
-wrapper instead.
-
- int sv_backoff(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_bless
-X<sv_bless>
-
-Blesses an SV into a specified package. The SV must be an RV. The package
-must be designated by its stash (see C<gv_stashpv()>). The reference count
-of the SV is unaffected.
-
- SV* sv_bless(SV* sv, HV* stash)
-
-=for hackers
-Found in file sv.c
-
-=item sv_catpv
-X<sv_catpv>
-
-Concatenates the string onto the end of the string which is in the SV.
-If the SV has the UTF-8 status set, then the bytes appended should be
-valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
-
- void sv_catpv(SV* sv, const char* ptr)
-
-=for hackers
-Found in file sv.c
-
-=item sv_catpvf
-X<sv_catpvf>
-
-Processes its arguments like C<sprintf> and appends the formatted
-output to an SV. If the appended data contains "wide" characters
-(including, but not limited to, SVs with a UTF-8 PV formatted with %s,
-and characters >255 formatted with %c), the original SV might get
-upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
-C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
-valid UTF-8; if the original SV was bytes, the pattern should be too.
-
- void sv_catpvf(SV* sv, const char* pat, ...)
-
-=for hackers
-Found in file sv.c
-
-=item sv_catpvf_mg
-X<sv_catpvf_mg>
-
-Like C<sv_catpvf>, but also handles 'set' magic.
-
- void sv_catpvf_mg(SV *sv, const char* pat, ...)
-
-=for hackers
-Found in file sv.c
-
-=item sv_catpvn
-X<sv_catpvn>
-
-Concatenates the string onto the end of the string which is in the SV. The
-C<len> indicates number of bytes to copy. If the SV has the UTF-8
-status set, then the bytes appended should be valid UTF-8.
-Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
-
- void sv_catpvn(SV* sv, const char* ptr, STRLEN len)
-
-=for hackers
-Found in file sv.c
-
-=item sv_catpvn_flags
-X<sv_catpvn_flags>
-
-Concatenates the string onto the end of the string which is in the SV. The
-C<len> indicates number of bytes to copy. If the SV has the UTF-8
-status set, then the bytes appended should be valid UTF-8.
-If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
-appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
-in terms of this function.
-
- void sv_catpvn_flags(SV* sv, const char* ptr, STRLEN len, I32 flags)
-
-=for hackers
-Found in file sv.c
-
-=item sv_catpvs
-X<sv_catpvs>
-
-Like C<sv_catpvn>, but takes a literal string instead of a string/length pair.
-
- void sv_catpvs(SV* sv, const char* s)
-
-=for hackers
-Found in file handy.h
-
-=item sv_catpv_mg
-X<sv_catpv_mg>
-
-Like C<sv_catpv>, but also handles 'set' magic.
-
- void sv_catpv_mg(SV *sv, const char *ptr)
-
-=for hackers
-Found in file sv.c
-
-=item sv_catsv
-X<sv_catsv>
-
-Concatenates the string from SV C<ssv> onto the end of the string in
-SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
-not 'set' magic. See C<sv_catsv_mg>.
-
- void sv_catsv(SV* dsv, SV* ssv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_catsv_flags
-X<sv_catsv_flags>
-
-Concatenates the string from SV C<ssv> onto the end of the string in
-SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
-bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
-and C<sv_catsv_nomg> are implemented in terms of this function.
-
- void sv_catsv_flags(SV* dsv, SV* ssv, I32 flags)
-
-=for hackers
-Found in file sv.c
-
-=item sv_chop
-X<sv_chop>
-
-Efficient removal of characters from the beginning of the string buffer.
-SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
-the string buffer. The C<ptr> becomes the first character of the adjusted
-string. Uses the "OOK hack".
-Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
-refer to the same chunk of data.
-
- void sv_chop(SV* sv, const char* ptr)
-
-=for hackers
-Found in file sv.c
-
-=item sv_clear
-X<sv_clear>
-
-Clear an SV: call any destructors, free up any memory used by the body,
-and free the body itself. The SV's head is I<not> freed, although
-its type is set to all 1's so that it won't inadvertently be assumed
-to be live during global destruction etc.
-This function should only be called when REFCNT is zero. Most of the time
-you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
-instead.
-
- void sv_clear(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_cmp
-X<sv_cmp>
-
-Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
-string in C<sv1> is less than, equal to, or greater than the string in
-C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
-coerce its args to strings if necessary. See also C<sv_cmp_locale>.
-
- I32 sv_cmp(SV* sv1, SV* sv2)
-
-=for hackers
-Found in file sv.c
-
-=item sv_cmp_locale
-X<sv_cmp_locale>
-
-Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
-'use bytes' aware, handles get magic, and will coerce its args to strings
-if necessary. See also C<sv_cmp_locale>. See also C<sv_cmp>.
-
- I32 sv_cmp_locale(SV* sv1, SV* sv2)
-
-=for hackers
-Found in file sv.c
-
-=item sv_collxfrm
-X<sv_collxfrm>
-
-Add Collate Transform magic to an SV if it doesn't already have it.
-
-Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
-scalar data of the variable, but transformed to such a format that a normal
-memory comparison can be used to compare the data according to the locale
-settings.
-
- char* sv_collxfrm(SV* sv, STRLEN* nxp)
-
-=for hackers
-Found in file sv.c
-
-=item sv_copypv
-X<sv_copypv>
-
-Copies a stringified representation of the source SV into the
-destination SV. Automatically performs any necessary mg_get and
-coercion of numeric values into strings. Guaranteed to preserve
-UTF8 flag even from overloaded objects. Similar in nature to
-sv_2pv[_flags] but operates directly on an SV instead of just the
-string. Mostly uses sv_2pv_flags to do its work, except when that
-would lose the UTF-8'ness of the PV.
-
- void sv_copypv(SV* dsv, SV* ssv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_dec
-X<sv_dec>
-
-Auto-decrement of the value in the SV, doing string to numeric conversion
-if necessary. Handles 'get' magic.
-
- void sv_dec(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_eq
-X<sv_eq>
-
-Returns a boolean indicating whether the strings in the two SVs are
-identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
-coerce its args to strings if necessary.
-
- I32 sv_eq(SV* sv1, SV* sv2)
-
-=for hackers
-Found in file sv.c
-
-=item sv_force_normal_flags
-X<sv_force_normal_flags>
-
-Undo various types of fakery on an SV: if the PV is a shared string, make
-a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
-an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
-we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
-then a copy-on-write scalar drops its PV buffer (if any) and becomes
-SvPOK_off rather than making a copy. (Used where this scalar is about to be
-set to some other value.) In addition, the C<flags> parameter gets passed to
-C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
-with flags set to 0.
-
- void sv_force_normal_flags(SV *sv, U32 flags)
-
-=for hackers
-Found in file sv.c
-
-=item sv_free
-X<sv_free>
-
-Decrement an SV's reference count, and if it drops to zero, call
-C<sv_clear> to invoke destructors and free up any memory used by
-the body; finally, deallocate the SV's head itself.
-Normally called via a wrapper macro C<SvREFCNT_dec>.
-
- void sv_free(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_gets
-X<sv_gets>
-
-Get a line from the filehandle and store it into the SV, optionally
-appending to the currently-stored string.
-
- char* sv_gets(SV* sv, PerlIO* fp, I32 append)
-
-=for hackers
-Found in file sv.c
-
-=item sv_grow
-X<sv_grow>
-
-Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
-upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
-Use the C<SvGROW> wrapper instead.
-
- char* sv_grow(SV* sv, STRLEN newlen)
-
-=for hackers
-Found in file sv.c
-
-=item sv_inc
-X<sv_inc>
-
-Auto-increment of the value in the SV, doing string to numeric conversion
-if necessary. Handles 'get' magic.
-
- void sv_inc(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_insert
-X<sv_insert>
-
-Inserts a string at the specified offset/length within the SV. Similar to
-the Perl substr() function.
-
- void sv_insert(SV* bigsv, STRLEN offset, STRLEN len, const char* little, STRLEN littlelen)
-
-=for hackers
-Found in file sv.c
-
-=item sv_isa
-X<sv_isa>
-
-Returns a boolean indicating whether the SV is blessed into the specified
-class. This does not check for subtypes; use C<sv_derived_from> to verify
-an inheritance relationship.
-
- int sv_isa(SV* sv, const char* name)
-
-=for hackers
-Found in file sv.c
-
-=item sv_isobject
-X<sv_isobject>
-
-Returns a boolean indicating whether the SV is an RV pointing to a blessed
-object. If the SV is not an RV, or if the object is not blessed, then this
-will return false.
-
- int sv_isobject(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_len
-X<sv_len>
-
-Returns the length of the string in the SV. Handles magic and type
-coercion. See also C<SvCUR>, which gives raw access to the xpv_cur slot.
-
- STRLEN sv_len(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_len_utf8
-X<sv_len_utf8>
-
-Returns the number of characters in the string in an SV, counting wide
-UTF-8 bytes as a single character. Handles magic and type coercion.
-
- STRLEN sv_len_utf8(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_magic
-X<sv_magic>
-
-Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
-then adds a new magic item of type C<how> to the head of the magic list.
-
-See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
-handling of the C<name> and C<namlen> arguments.
-
-You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
-to add more than one instance of the same 'how'.
-
- void sv_magic(SV* sv, SV* obj, int how, const char* name, I32 namlen)
-
-=for hackers
-Found in file sv.c
-
-=item sv_magicext
-X<sv_magicext>
-
-Adds magic to an SV, upgrading it if necessary. Applies the
-supplied vtable and returns a pointer to the magic added.
-
-Note that C<sv_magicext> will allow things that C<sv_magic> will not.
-In particular, you can add magic to SvREADONLY SVs, and add more than
-one instance of the same 'how'.
-
-If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
-stored, if C<namlen> is zero then C<name> is stored as-is and - as another
-special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
-to contain an C<SV*> and is stored as-is with its REFCNT incremented.
-
-(This is now used as a subroutine by C<sv_magic>.)
-
- MAGIC * sv_magicext(SV* sv, SV* obj, int how, const MGVTBL *vtbl, const char* name, I32 namlen)
-
-=for hackers
-Found in file sv.c
-
-=item sv_mortalcopy
-X<sv_mortalcopy>
-
-Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
-The new SV is marked as mortal. It will be destroyed "soon", either by an
-explicit call to FREETMPS, or by an implicit call at places such as
-statement boundaries. See also C<sv_newmortal> and C<sv_2mortal>.
-
- SV* sv_mortalcopy(SV* oldsv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_newmortal
-X<sv_newmortal>
-
-Creates a new null SV which is mortal. The reference count of the SV is
-set to 1. It will be destroyed "soon", either by an explicit call to
-FREETMPS, or by an implicit call at places such as statement boundaries.
-See also C<sv_mortalcopy> and C<sv_2mortal>.
-
- SV* sv_newmortal()
-
-=for hackers
-Found in file sv.c
-
-=item sv_newref
-X<sv_newref>
-
-Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
-instead.
-
- SV* sv_newref(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_pos_b2u
-X<sv_pos_b2u>
-
-Converts the value pointed to by offsetp from a count of bytes from the
-start of the string, to a count of the equivalent number of UTF-8 chars.
-Handles magic and type coercion.
-
- void sv_pos_b2u(SV* sv, I32* offsetp)
-
-=for hackers
-Found in file sv.c
-
-=item sv_pos_u2b
-X<sv_pos_u2b>
-
-Converts the value pointed to by offsetp from a count of UTF-8 chars from
-the start of the string, to a count of the equivalent number of bytes; if
-lenp is non-zero, it does the same to lenp, but this time starting from
-the offset, rather than from the start of the string. Handles magic and
-type coercion.
-
- void sv_pos_u2b(SV* sv, I32* offsetp, I32* lenp)
-
-=for hackers
-Found in file sv.c
-
-=item sv_pvbyten_force
-X<sv_pvbyten_force>
-
-The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
-
- char* sv_pvbyten_force(SV* sv, STRLEN* lp)
-
-=for hackers
-Found in file sv.c
-
-=item sv_pvn_force
-X<sv_pvn_force>
-
-Get a sensible string out of the SV somehow.
-A private implementation of the C<SvPV_force> macro for compilers which
-can't cope with complex macro expressions. Always use the macro instead.
-
- char* sv_pvn_force(SV* sv, STRLEN* lp)
-
-=for hackers
-Found in file sv.c
-
-=item sv_pvn_force_flags
-X<sv_pvn_force_flags>
-
-Get a sensible string out of the SV somehow.
-If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
-appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
-implemented in terms of this function.
-You normally want to use the various wrapper macros instead: see
-C<SvPV_force> and C<SvPV_force_nomg>
-
- char* sv_pvn_force_flags(SV* sv, STRLEN* lp, I32 flags)
-
-=for hackers
-Found in file sv.c
-
-=item sv_pvutf8n_force
-X<sv_pvutf8n_force>
-
-The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
-
- char* sv_pvutf8n_force(SV* sv, STRLEN* lp)
-
-=for hackers
-Found in file sv.c
-
-=item sv_reftype
-X<sv_reftype>
-
-Returns a string describing what the SV is a reference to.
-
- const char* sv_reftype(const SV* sv, int ob)
-
-=for hackers
-Found in file sv.c
-
-=item sv_replace
-X<sv_replace>
-
-Make the first argument a copy of the second, then delete the original.
-The target SV physically takes over ownership of the body of the source SV
-and inherits its flags; however, the target keeps any magic it owns,
-and any magic in the source is discarded.
-Note that this is a rather specialist SV copying operation; most of the
-time you'll want to use C<sv_setsv> or one of its many macro front-ends.
-
- void sv_replace(SV* sv, SV* nsv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_reset
-X<sv_reset>
-
-Underlying implementation for the C<reset> Perl function.
-Note that the perl-level function is vaguely deprecated.
-
- void sv_reset(const char* s, HV* stash)
-
-=for hackers
-Found in file sv.c
-
-=item sv_rvweaken
-X<sv_rvweaken>
-
-Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
-referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
-push a back-reference to this RV onto the array of backreferences
-associated with that magic. If the RV is magical, set magic will be
-called after the RV is cleared.
-
- SV* sv_rvweaken(SV *sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setiv
-X<sv_setiv>
-
-Copies an integer into the given SV, upgrading first if necessary.
-Does not handle 'set' magic. See also C<sv_setiv_mg>.
-
- void sv_setiv(SV* sv, IV num)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setiv_mg
-X<sv_setiv_mg>
-
-Like C<sv_setiv>, but also handles 'set' magic.
-
- void sv_setiv_mg(SV *sv, IV i)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setnv
-X<sv_setnv>
-
-Copies a double into the given SV, upgrading first if necessary.
-Does not handle 'set' magic. See also C<sv_setnv_mg>.
-
- void sv_setnv(SV* sv, NV num)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setnv_mg
-X<sv_setnv_mg>
-
-Like C<sv_setnv>, but also handles 'set' magic.
-
- void sv_setnv_mg(SV *sv, NV num)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setpv
-X<sv_setpv>
-
-Copies a string into an SV. The string must be null-terminated. Does not
-handle 'set' magic. See C<sv_setpv_mg>.
-
- void sv_setpv(SV* sv, const char* ptr)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setpvf
-X<sv_setpvf>
-
-Works like C<sv_catpvf> but copies the text into the SV instead of
-appending it. Does not handle 'set' magic. See C<sv_setpvf_mg>.
-
- void sv_setpvf(SV* sv, const char* pat, ...)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setpvf_mg
-X<sv_setpvf_mg>
-
-Like C<sv_setpvf>, but also handles 'set' magic.
-
- void sv_setpvf_mg(SV *sv, const char* pat, ...)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setpviv
-X<sv_setpviv>
-
-Copies an integer into the given SV, also updating its string value.
-Does not handle 'set' magic. See C<sv_setpviv_mg>.
-
- void sv_setpviv(SV* sv, IV num)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setpviv_mg
-X<sv_setpviv_mg>
-
-Like C<sv_setpviv>, but also handles 'set' magic.
-
- void sv_setpviv_mg(SV *sv, IV iv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setpvn
-X<sv_setpvn>
-
-Copies a string into an SV. The C<len> parameter indicates the number of
-bytes to be copied. If the C<ptr> argument is NULL the SV will become
-undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
-
- void sv_setpvn(SV* sv, const char* ptr, STRLEN len)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setpvn_mg
-X<sv_setpvn_mg>
-
-Like C<sv_setpvn>, but also handles 'set' magic.
-
- void sv_setpvn_mg(SV *sv, const char *ptr, STRLEN len)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setpvs
-X<sv_setpvs>
-
-Like C<sv_setpvn>, but takes a literal string instead of a string/length pair.
-
- void sv_setpvs(SV* sv, const char* s)
-
-=for hackers
-Found in file handy.h
-
-=item sv_setpv_mg
-X<sv_setpv_mg>
-
-Like C<sv_setpv>, but also handles 'set' magic.
-
- void sv_setpv_mg(SV *sv, const char *ptr)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setref_iv
-X<sv_setref_iv>
-
-Copies an integer into a new SV, optionally blessing the SV. The C<rv>
-argument will be upgraded to an RV. That RV will be modified to point to
-the new SV. The C<classname> argument indicates the package for the
-blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
-will have a reference count of 1, and the RV will be returned.
-
- SV* sv_setref_iv(SV* rv, const char* classname, IV iv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setref_nv
-X<sv_setref_nv>
-
-Copies a double into a new SV, optionally blessing the SV. The C<rv>
-argument will be upgraded to an RV. That RV will be modified to point to
-the new SV. The C<classname> argument indicates the package for the
-blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
-will have a reference count of 1, and the RV will be returned.
-
- SV* sv_setref_nv(SV* rv, const char* classname, NV nv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setref_pv
-X<sv_setref_pv>
-
-Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
-argument will be upgraded to an RV. That RV will be modified to point to
-the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
-into the SV. The C<classname> argument indicates the package for the
-blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
-will have a reference count of 1, and the RV will be returned.
-
-Do not use with other Perl types such as HV, AV, SV, CV, because those
-objects will become corrupted by the pointer copy process.
-
-Note that C<sv_setref_pvn> copies the string while this copies the pointer.
-
- SV* sv_setref_pv(SV* rv, const char* classname, void* pv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setref_pvn
-X<sv_setref_pvn>
-
-Copies a string into a new SV, optionally blessing the SV. The length of the
-string must be specified with C<n>. The C<rv> argument will be upgraded to
-an RV. That RV will be modified to point to the new SV. The C<classname>
-argument indicates the package for the blessing. Set C<classname> to
-C<NULL> to avoid the blessing. The new SV will have a reference count
-of 1, and the RV will be returned.
-
-Note that C<sv_setref_pv> copies the pointer while this copies the string.
-
- SV* sv_setref_pvn(SV* rv, const char* classname, const char* pv, STRLEN n)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setref_uv
-X<sv_setref_uv>
-
-Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
-argument will be upgraded to an RV. That RV will be modified to point to
-the new SV. The C<classname> argument indicates the package for the
-blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
-will have a reference count of 1, and the RV will be returned.
-
- SV* sv_setref_uv(SV* rv, const char* classname, UV uv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setsv
-X<sv_setsv>
-
-Copies the contents of the source SV C<ssv> into the destination SV
-C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
-function if the source SV needs to be reused. Does not handle 'set' magic.
-Loosely speaking, it performs a copy-by-value, obliterating any previous
-content of the destination.
-
-You probably want to use one of the assortment of wrappers, such as
-C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
-C<SvSetMagicSV_nosteal>.
-
- void sv_setsv(SV* dsv, SV* ssv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setsv_flags
-X<sv_setsv_flags>
-
-Copies the contents of the source SV C<ssv> into the destination SV
-C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
-function if the source SV needs to be reused. Does not handle 'set' magic.
-Loosely speaking, it performs a copy-by-value, obliterating any previous
-content of the destination.
-If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
-C<ssv> if appropriate, else not. If the C<flags> parameter has the
-C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
-and C<sv_setsv_nomg> are implemented in terms of this function.
-
-You probably want to use one of the assortment of wrappers, such as
-C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
-C<SvSetMagicSV_nosteal>.
-
-This is the primary function for copying scalars, and most other
-copy-ish functions and macros use this underneath.
-
- void sv_setsv_flags(SV* dsv, SV* ssv, I32 flags)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setsv_mg
-X<sv_setsv_mg>
-
-Like C<sv_setsv>, but also handles 'set' magic.
-
- void sv_setsv_mg(SV *dstr, SV *sstr)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setuv
-X<sv_setuv>
-
-Copies an unsigned integer into the given SV, upgrading first if necessary.
-Does not handle 'set' magic. See also C<sv_setuv_mg>.
-
- void sv_setuv(SV* sv, UV num)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setuv_mg
-X<sv_setuv_mg>
-
-Like C<sv_setuv>, but also handles 'set' magic.
-
- void sv_setuv_mg(SV *sv, UV u)
-
-=for hackers
-Found in file sv.c
-
-=item sv_tainted
-X<sv_tainted>
-
-Test an SV for taintedness. Use C<SvTAINTED> instead.
- bool sv_tainted(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_true
-X<sv_true>
-
-Returns true if the SV has a true value by Perl's rules.
-Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
-instead use an in-line version.
-
- I32 sv_true(SV *sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_unmagic
-X<sv_unmagic>
-
-Removes all magic of type C<type> from an SV.
-
- int sv_unmagic(SV* sv, int type)
-
-=for hackers
-Found in file sv.c
-
-=item sv_unref_flags
-X<sv_unref_flags>
-
-Unsets the RV status of the SV, and decrements the reference count of
-whatever was being referenced by the RV. This can almost be thought of
-as a reversal of C<newSVrv>. The C<cflags> argument can contain
-C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
-(otherwise the decrementing is conditional on the reference count being
-different from one or the reference being a readonly SV).
-See C<SvROK_off>.
-
- void sv_unref_flags(SV* sv, U32 flags)
-
-=for hackers
-Found in file sv.c
-
-=item sv_untaint
-X<sv_untaint>
-
-Untaint an SV. Use C<SvTAINTED_off> instead.
- void sv_untaint(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_upgrade
-X<sv_upgrade>
-
-Upgrade an SV to a more complex form. Generally adds a new body type to the
-SV, then copies across as much information as possible from the old body.
-You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
-
- void sv_upgrade(SV* sv, svtype new_type)
-
-=for hackers
-Found in file sv.c
-
-=item sv_usepvn_flags
-X<sv_usepvn_flags>
-
-Tells an SV to use C<ptr> to find its string value. Normally the
-string is stored inside the SV but sv_usepvn allows the SV to use an
-outside string. The C<ptr> should point to memory that was allocated
-by C<malloc>. The string length, C<len>, must be supplied. By default
-this function will realloc (i.e. move) the memory pointed to by C<ptr>,
-so that pointer should not be freed or used by the programmer after
-giving it to sv_usepvn, and neither should any pointers from "behind"
-that pointer (e.g. ptr + 1) be used.
-
-If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
-SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
-will be skipped. (i.e. the buffer is actually at least 1 byte longer than
-C<len>, and already meets the requirements for storing in C<SvPVX>)
-
- void sv_usepvn_flags(SV* sv, char* ptr, STRLEN len, U32 flags)
-
-=for hackers
-Found in file sv.c
-
-=item sv_utf8_decode
-X<sv_utf8_decode>
-
-If the PV of the SV is an octet sequence in UTF-8
-and contains a multiple-byte character, the C<SvUTF8> flag is turned on
-so that it looks like a character. If the PV contains only single-byte
-characters, the C<SvUTF8> flag stays being off.
-Scans PV for validity and returns false if the PV is invalid UTF-8.
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- bool sv_utf8_decode(SV *sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_utf8_downgrade
-X<sv_utf8_downgrade>
-
-Attempts to convert the PV of an SV from characters to bytes.
-If the PV contains a character beyond byte, this conversion will fail;
-in this case, either returns false or, if C<fail_ok> is not
-true, croaks.
-
-This is not as a general purpose Unicode to byte encoding interface:
-use the Encode extension for that.
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- bool sv_utf8_downgrade(SV *sv, bool fail_ok)
-
-=for hackers
-Found in file sv.c
-
-=item sv_utf8_encode
-X<sv_utf8_encode>
-
-Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
-flag off so that it looks like octets again.
-
- void sv_utf8_encode(SV *sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_utf8_upgrade
-X<sv_utf8_upgrade>
-
-Converts the PV of an SV to its UTF-8-encoded form.
-Forces the SV to string form if it is not already.
-Always sets the SvUTF8 flag to avoid future validity checks even
-if all the bytes have hibit clear.
-
-This is not as a general purpose byte encoding to Unicode interface:
-use the Encode extension for that.
-
- STRLEN sv_utf8_upgrade(SV *sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_utf8_upgrade_flags
-X<sv_utf8_upgrade_flags>
-
-Converts the PV of an SV to its UTF-8-encoded form.
-Forces the SV to string form if it is not already.
-Always sets the SvUTF8 flag to avoid future validity checks even
-if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
-will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
-C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
-
-This is not as a general purpose byte encoding to Unicode interface:
-use the Encode extension for that.
-
- STRLEN sv_utf8_upgrade_flags(SV *sv, I32 flags)
-
-=for hackers
-Found in file sv.c
-
-=item sv_vcatpvf
-X<sv_vcatpvf>
-
-Processes its arguments like C<vsprintf> and appends the formatted output
-to an SV. Does not handle 'set' magic. See C<sv_vcatpvf_mg>.
-
-Usually used via its frontend C<sv_catpvf>.
-
- void sv_vcatpvf(SV* sv, const char* pat, va_list* args)
-
-=for hackers
-Found in file sv.c
-
-=item sv_vcatpvfn
-X<sv_vcatpvfn>
-
-Processes its arguments like C<vsprintf> and appends the formatted output
-to an SV. Uses an array of SVs if the C style variable argument list is
-missing (NULL). When running with taint checks enabled, indicates via
-C<maybe_tainted> if results are untrustworthy (often due to the use of
-locales).
-
-Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
-
- void sv_vcatpvfn(SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *maybe_tainted)
-
-=for hackers
-Found in file sv.c
-
-=item sv_vcatpvf_mg
-X<sv_vcatpvf_mg>
-
-Like C<sv_vcatpvf>, but also handles 'set' magic.
-
-Usually used via its frontend C<sv_catpvf_mg>.
-
- void sv_vcatpvf_mg(SV* sv, const char* pat, va_list* args)
-
-=for hackers
-Found in file sv.c
-
-=item sv_vsetpvf
-X<sv_vsetpvf>
-
-Works like C<sv_vcatpvf> but copies the text into the SV instead of
-appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>.
-
-Usually used via its frontend C<sv_setpvf>.
-
- void sv_vsetpvf(SV* sv, const char* pat, va_list* args)
-
-=for hackers
-Found in file sv.c
-
-=item sv_vsetpvfn
-X<sv_vsetpvfn>
-
-Works like C<sv_vcatpvfn> but copies the text into the SV instead of
-appending it.
-
-Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
-
- void sv_vsetpvfn(SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *maybe_tainted)
-
-=for hackers
-Found in file sv.c
-
-=item sv_vsetpvf_mg
-X<sv_vsetpvf_mg>
-
-Like C<sv_vsetpvf>, but also handles 'set' magic.
-
-Usually used via its frontend C<sv_setpvf_mg>.
-
- void sv_vsetpvf_mg(SV* sv, const char* pat, va_list* args)
-
-=for hackers
-Found in file sv.c
-
-
-=back
-
-=head1 Unicode Support
-
-=over 8
-
-=item bytes_from_utf8
-X<bytes_from_utf8>
-
-Converts a string C<s> of length C<len> from UTF-8 into byte encoding.
-Unlike C<utf8_to_bytes> but like C<bytes_to_utf8>, returns a pointer to
-the newly-created string, and updates C<len> to contain the new
-length. Returns the original string if no conversion occurs, C<len>
-is unchanged. Do nothing if C<is_utf8> points to 0. Sets C<is_utf8> to
-0 if C<s> is converted or contains all 7bit characters.
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- U8* bytes_from_utf8(const U8 *s, STRLEN *len, bool *is_utf8)
-
-=for hackers
-Found in file utf8.c
-
-=item bytes_to_utf8
-X<bytes_to_utf8>
-
-Converts a string C<s> of length C<len> from ASCII into UTF-8 encoding.
-Returns a pointer to the newly-created string, and sets C<len> to
-reflect the new length.
-
-If you want to convert to UTF-8 from other encodings than ASCII,
-see sv_recode_to_utf8().
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- U8* bytes_to_utf8(const U8 *s, STRLEN *len)
-
-=for hackers
-Found in file utf8.c
-
-=item ibcmp_utf8
-X<ibcmp_utf8>
-
-Return true if the strings s1 and s2 differ case-insensitively, false
-if not (if they are equal case-insensitively). If u1 is true, the
-string s1 is assumed to be in UTF-8-encoded Unicode. If u2 is true,
-the string s2 is assumed to be in UTF-8-encoded Unicode. If u1 or u2
-are false, the respective string is assumed to be in native 8-bit
-encoding.
-
-If the pe1 and pe2 are non-NULL, the scanning pointers will be copied
-in there (they will point at the beginning of the I<next> character).
-If the pointers behind pe1 or pe2 are non-NULL, they are the end
-pointers beyond which scanning will not continue under any
-circumstances. If the byte lengths l1 and l2 are non-zero, s1+l1 and
-s2+l2 will be used as goal end pointers that will also stop the scan,
-and which qualify towards defining a successful match: all the scans
-that define an explicit length must reach their goal pointers for
-a match to succeed).
-
-For case-insensitiveness, the "casefolding" of Unicode is used
-instead of upper/lowercasing both the characters, see
-http://www.unicode.org/unicode/reports/tr21/ (Case Mappings).
-
- I32 ibcmp_utf8(const char* a, char **pe1, UV l1, bool u1, const char* b, char **pe2, UV l2, bool u2)
-
-=for hackers
-Found in file utf8.c
-
-=item is_utf8_char
-X<is_utf8_char>
-
-Tests if some arbitrary number of bytes begins in a valid UTF-8
-character. Note that an INVARIANT (i.e. ASCII) character is a valid
-UTF-8 character. The actual number of bytes in the UTF-8 character
-will be returned if it is valid, otherwise 0.
-
- STRLEN is_utf8_char(const U8 *p)
-
-=for hackers
-Found in file utf8.c
-
-=item is_utf8_string
-X<is_utf8_string>
-
-Returns true if first C<len> bytes of the given string form a valid
-UTF-8 string, false otherwise. Note that 'a valid UTF-8 string' does
-not mean 'a string that contains code points above 0x7F encoded in UTF-8'
-because a valid ASCII string is a valid UTF-8 string.
-
-See also is_utf8_string_loclen() and is_utf8_string_loc().
-
- bool is_utf8_string(const U8 *s, STRLEN len)
-
-=for hackers
-Found in file utf8.c
-
-=item is_utf8_string_loc
-X<is_utf8_string_loc>
-
-Like is_utf8_string() but stores the location of the failure (in the
-case of "utf8ness failure") or the location s+len (in the case of
-"utf8ness success") in the C<ep>.
-
-See also is_utf8_string_loclen() and is_utf8_string().
-
- bool is_utf8_string_loc(const U8 *s, STRLEN len, const U8 **p)
-
-=for hackers
-Found in file utf8.c
-
-=item is_utf8_string_loclen
-X<is_utf8_string_loclen>
-
-Like is_utf8_string() but stores the location of the failure (in the
-case of "utf8ness failure") or the location s+len (in the case of
-"utf8ness success") in the C<ep>, and the number of UTF-8
-encoded characters in the C<el>.
-
-See also is_utf8_string_loc() and is_utf8_string().
-
- bool is_utf8_string_loclen(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el)
-
-=for hackers
-Found in file utf8.c
-
-=item pv_uni_display
-X<pv_uni_display>
-
-Build to the scalar dsv a displayable version of the string spv,
-length len, the displayable version being at most pvlim bytes long
-(if longer, the rest is truncated and "..." will be appended).
-
-The flags argument can have UNI_DISPLAY_ISPRINT set to display
-isPRINT()able characters as themselves, UNI_DISPLAY_BACKSLASH
-to display the \\[nrfta\\] as the backslashed versions (like '\n')
-(UNI_DISPLAY_BACKSLASH is preferred over UNI_DISPLAY_ISPRINT for \\).
-UNI_DISPLAY_QQ (and its alias UNI_DISPLAY_REGEX) have both
-UNI_DISPLAY_BACKSLASH and UNI_DISPLAY_ISPRINT turned on.
-
-The pointer to the PV of the dsv is returned.
-
- char* pv_uni_display(SV *dsv, const U8 *spv, STRLEN len, STRLEN pvlim, UV flags)
-
-=for hackers
-Found in file utf8.c
-
-=item sv_cat_decode
-X<sv_cat_decode>
-
-The encoding is assumed to be an Encode object, the PV of the ssv is
-assumed to be octets in that encoding and decoding the input starts
-from the position which (PV + *offset) pointed to. The dsv will be
-concatenated the decoded UTF-8 string from ssv. Decoding will terminate
-when the string tstr appears in decoding output or the input ends on
-the PV of the ssv. The value which the offset points will be modified
-to the last input position on the ssv.
-
-Returns TRUE if the terminator was found, else returns FALSE.
-
- bool sv_cat_decode(SV* dsv, SV *encoding, SV *ssv, int *offset, char* tstr, int tlen)
-
-=for hackers
-Found in file sv.c
-
-=item sv_recode_to_utf8
-X<sv_recode_to_utf8>
-
-The encoding is assumed to be an Encode object, on entry the PV
-of the sv is assumed to be octets in that encoding, and the sv
-will be converted into Unicode (and UTF-8).
-
-If the sv already is UTF-8 (or if it is not POK), or if the encoding
-is not a reference, nothing is done to the sv. If the encoding is not
-an C<Encode::XS> Encoding object, bad things will happen.
-(See F<lib/encoding.pm> and L<Encode>).
-
-The PV of the sv is returned.
-
- char* sv_recode_to_utf8(SV* sv, SV *encoding)
-
-=for hackers
-Found in file sv.c
-
-=item sv_uni_display
-X<sv_uni_display>
-
-Build to the scalar dsv a displayable version of the scalar sv,
-the displayable version being at most pvlim bytes long
-(if longer, the rest is truncated and "..." will be appended).
-
-The flags argument is as in pv_uni_display().
-
-The pointer to the PV of the dsv is returned.
-
- char* sv_uni_display(SV *dsv, SV *ssv, STRLEN pvlim, UV flags)
-
-=for hackers
-Found in file utf8.c
-
-=item to_utf8_case
-X<to_utf8_case>
-
-The "p" contains the pointer to the UTF-8 string encoding
-the character that is being converted.
-
-The "ustrp" is a pointer to the character buffer to put the
-conversion result to. The "lenp" is a pointer to the length
-of the result.
-
-The "swashp" is a pointer to the swash to use.
-
-Both the special and normal mappings are stored lib/unicore/To/Foo.pl,
-and loaded by SWASHNEW, using lib/utf8_heavy.pl. The special (usually,
-but not always, a multicharacter mapping), is tried first.
-
-The "special" is a string like "utf8::ToSpecLower", which means the
-hash %utf8::ToSpecLower. The access to the hash is through
-Perl_to_utf8_case().
-
-The "normal" is a string like "ToLower" which means the swash
-%utf8::ToLower.
-
- UV to_utf8_case(const U8 *p, U8* ustrp, STRLEN *lenp, SV **swashp, const char *normal, const char *special)
-
-=for hackers
-Found in file utf8.c
-
-=item to_utf8_fold
-X<to_utf8_fold>
-
-Convert the UTF-8 encoded character at p to its foldcase version and
-store that in UTF-8 in ustrp and its length in bytes in lenp. Note
-that the ustrp needs to be at least UTF8_MAXBYTES_CASE+1 bytes since the
-foldcase version may be longer than the original character (up to
-three characters).
-
-The first character of the foldcased version is returned
-(but note, as explained above, that there may be more.)
-
- UV to_utf8_fold(const U8 *p, U8* ustrp, STRLEN *lenp)
-
-=for hackers
-Found in file utf8.c
-
-=item to_utf8_lower
-X<to_utf8_lower>
-
-Convert the UTF-8 encoded character at p to its lowercase version and
-store that in UTF-8 in ustrp and its length in bytes in lenp. Note
-that the ustrp needs to be at least UTF8_MAXBYTES_CASE+1 bytes since the
-lowercase version may be longer than the original character.
-
-The first character of the lowercased version is returned
-(but note, as explained above, that there may be more.)
-
- UV to_utf8_lower(const U8 *p, U8* ustrp, STRLEN *lenp)
-
-=for hackers
-Found in file utf8.c
-
-=item to_utf8_title
-X<to_utf8_title>
-
-Convert the UTF-8 encoded character at p to its titlecase version and
-store that in UTF-8 in ustrp and its length in bytes in lenp. Note
-that the ustrp needs to be at least UTF8_MAXBYTES_CASE+1 bytes since the
-titlecase version may be longer than the original character.
-
-The first character of the titlecased version is returned
-(but note, as explained above, that there may be more.)
-
- UV to_utf8_title(const U8 *p, U8* ustrp, STRLEN *lenp)
-
-=for hackers
-Found in file utf8.c
-
-=item to_utf8_upper
-X<to_utf8_upper>
-
-Convert the UTF-8 encoded character at p to its uppercase version and
-store that in UTF-8 in ustrp and its length in bytes in lenp. Note
-that the ustrp needs to be at least UTF8_MAXBYTES_CASE+1 bytes since
-the uppercase version may be longer than the original character.
-
-The first character of the uppercased version is returned
-(but note, as explained above, that there may be more.)
-
- UV to_utf8_upper(const U8 *p, U8* ustrp, STRLEN *lenp)
-
-=for hackers
-Found in file utf8.c
-
-=item utf8n_to_uvchr
-X<utf8n_to_uvchr>
-
-flags
-
-Returns the native character value of the first character in the string
-C<s>
-which is assumed to be in UTF-8 encoding; C<retlen> will be set to the
-length, in bytes, of that character.
-
-Allows length and flags to be passed to low level routine.
-
- UV utf8n_to_uvchr(const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
-
-=for hackers
-Found in file utf8.c
-
-=item utf8n_to_uvuni
-X<utf8n_to_uvuni>
-
-Bottom level UTF-8 decode routine.
-Returns the Unicode code point value of the first character in the string C<s>
-which is assumed to be in UTF-8 encoding and no longer than C<curlen>;
-C<retlen> will be set to the length, in bytes, of that character.
-
-If C<s> does not point to a well-formed UTF-8 character, the behaviour
-is dependent on the value of C<flags>: if it contains UTF8_CHECK_ONLY,
-it is assumed that the caller will raise a warning, and this function
-will silently just set C<retlen> to C<-1> and return zero. If the
-C<flags> does not contain UTF8_CHECK_ONLY, warnings about
-malformations will be given, C<retlen> will be set to the expected
-length of the UTF-8 character in bytes, and zero will be returned.
-
-The C<flags> can also contain various flags to allow deviations from
-the strict UTF-8 encoding (see F<utf8.h>).
-
-Most code should use utf8_to_uvchr() rather than call this directly.
-
- UV utf8n_to_uvuni(const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
-
-=for hackers
-Found in file utf8.c
-
-=item utf8_distance
-X<utf8_distance>
-
-Returns the number of UTF-8 characters between the UTF-8 pointers C<a>
-and C<b>.
-
-WARNING: use only if you *know* that the pointers point inside the
-same UTF-8 buffer.
-
- IV utf8_distance(const U8 *a, const U8 *b)
-
-=for hackers
-Found in file utf8.c
-
-=item utf8_hop
-X<utf8_hop>
-
-Return the UTF-8 pointer C<s> displaced by C<off> characters, either
-forward or backward.
-
-WARNING: do not use the following unless you *know* C<off> is within
-the UTF-8 data pointed to by C<s> *and* that on entry C<s> is aligned
-on the first byte of character or just after the last byte of a character.
-
- U8* utf8_hop(const U8 *s, I32 off)
-
-=for hackers
-Found in file utf8.c
-
-=item utf8_length
-X<utf8_length>
-
-Return the length of the UTF-8 char encoded string C<s> in characters.
-Stops at C<e> (inclusive). If C<e E<lt> s> or if the scan would end
-up past C<e>, croaks.
-
- STRLEN utf8_length(const U8* s, const U8 *e)
-
-=for hackers
-Found in file utf8.c
-
-=item utf8_to_bytes
-X<utf8_to_bytes>
-
-Converts a string C<s> of length C<len> from UTF-8 into byte encoding.
-Unlike C<bytes_to_utf8>, this over-writes the original string, and
-updates len to contain the new length.
-Returns zero on failure, setting C<len> to -1.
-
-If you need a copy of the string, see C<bytes_from_utf8>.
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- U8* utf8_to_bytes(U8 *s, STRLEN *len)
-
-=for hackers
-Found in file utf8.c
-
-=item utf8_to_uvchr
-X<utf8_to_uvchr>
-
-Returns the native character value of the first character in the string C<s>
-which is assumed to be in UTF-8 encoding; C<retlen> will be set to the
-length, in bytes, of that character.
-
-If C<s> does not point to a well-formed UTF-8 character, zero is
-returned and retlen is set, if possible, to -1.
-
- UV utf8_to_uvchr(const U8 *s, STRLEN *retlen)
-
-=for hackers
-Found in file utf8.c
-
-=item utf8_to_uvuni
-X<utf8_to_uvuni>
-
-Returns the Unicode code point of the first character in the string C<s>
-which is assumed to be in UTF-8 encoding; C<retlen> will be set to the
-length, in bytes, of that character.
-
-This function should only be used when returned UV is considered
-an index into the Unicode semantic tables (e.g. swashes).
-
-If C<s> does not point to a well-formed UTF-8 character, zero is
-returned and retlen is set, if possible, to -1.
-
- UV utf8_to_uvuni(const U8 *s, STRLEN *retlen)
-
-=for hackers
-Found in file utf8.c
-
-=item uvchr_to_utf8
-X<uvchr_to_utf8>
-
-Adds the UTF-8 representation of the Native codepoint C<uv> to the end
-of the string C<d>; C<d> should be have at least C<UTF8_MAXBYTES+1> free
-bytes available. The return value is the pointer to the byte after the
-end of the new character. In other words,
-
- d = uvchr_to_utf8(d, uv);
-
-is the recommended wide native character-aware way of saying
-
- *(d++) = uv;
-
- U8* uvchr_to_utf8(U8 *d, UV uv)
-
-=for hackers
-Found in file utf8.c
-
-=item uvuni_to_utf8_flags
-X<uvuni_to_utf8_flags>
-
-Adds the UTF-8 representation of the Unicode codepoint C<uv> to the end
-of the string C<d>; C<d> should be have at least C<UTF8_MAXBYTES+1> free
-bytes available. The return value is the pointer to the byte after the
-end of the new character. In other words,
-
- d = uvuni_to_utf8_flags(d, uv, flags);
-
-or, in most cases,
-
- d = uvuni_to_utf8(d, uv);
-
-(which is equivalent to)
-
- d = uvuni_to_utf8_flags(d, uv, 0);
-
-is the recommended Unicode-aware way of saying
-
- *(d++) = uv;
-
- U8* uvuni_to_utf8_flags(U8 *d, UV uv, UV flags)
-
-=for hackers
-Found in file utf8.c
-
-
-=back
-
-=head1 Variables created by C<xsubpp> and C<xsubpp> internal functions
-
-=over 8
-
-=item ax
-X<ax>
-
-Variable which is setup by C<xsubpp> to indicate the stack base offset,
-used by the C<ST>, C<XSprePUSH> and C<XSRETURN> macros. The C<dMARK> macro
-must be called prior to setup the C<MARK> variable.
-
- I32 ax
-
-=for hackers
-Found in file XSUB.h
-
-=item CLASS
-X<CLASS>
-
-Variable which is setup by C<xsubpp> to indicate the
-class name for a C++ XS constructor. This is always a C<char*>. See C<THIS>.
-
- char* CLASS
-
-=for hackers
-Found in file XSUB.h
-
-=item dAX
-X<dAX>
-
-Sets up the C<ax> variable.
-This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
-
- dAX;
-
-=for hackers
-Found in file XSUB.h
-
-=item dAXMARK
-X<dAXMARK>
-
-Sets up the C<ax> variable and stack marker variable C<mark>.
-This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
-
- dAXMARK;
-
-=for hackers
-Found in file XSUB.h
-
-=item dITEMS
-X<dITEMS>
-
-Sets up the C<items> variable.
-This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
-
- dITEMS;
-
-=for hackers
-Found in file XSUB.h
-
-=item dUNDERBAR
-X<dUNDERBAR>
-
-Sets up the C<padoff_du> variable for an XSUB that wishes to use
-C<UNDERBAR>.
-
- dUNDERBAR;
-
-=for hackers
-Found in file XSUB.h
-
-=item dXSARGS
-X<dXSARGS>
-
-Sets up stack and mark pointers for an XSUB, calling dSP and dMARK.
-Sets up the C<ax> and C<items> variables by calling C<dAX> and C<dITEMS>.
-This is usually handled automatically by C<xsubpp>.
-
- dXSARGS;
-
-=for hackers
-Found in file XSUB.h
-
-=item dXSI32
-X<dXSI32>
-
-Sets up the C<ix> variable for an XSUB which has aliases. This is usually
-handled automatically by C<xsubpp>.
-
- dXSI32;
-
-=for hackers
-Found in file XSUB.h
-
-=item items
-X<items>
-
-Variable which is setup by C<xsubpp> to indicate the number of
-items on the stack. See L<perlxs/"Variable-length Parameter Lists">.
-
- I32 items
-
-=for hackers
-Found in file XSUB.h
-
-=item ix
-X<ix>
-
-Variable which is setup by C<xsubpp> to indicate which of an
-XSUB's aliases was used to invoke it. See L<perlxs/"The ALIAS: Keyword">.
-
- I32 ix
-
-=for hackers
-Found in file XSUB.h
-
-=item newXSproto
-X<newXSproto>
-
-Used by C<xsubpp> to hook up XSUBs as Perl subs. Adds Perl prototypes to
-the subs.
-
-=for hackers
-Found in file XSUB.h
-
-=item RETVAL
-X<RETVAL>
-
-Variable which is setup by C<xsubpp> to hold the return value for an
-XSUB. This is always the proper type for the XSUB. See
-L<perlxs/"The RETVAL Variable">.
-
- (whatever) RETVAL
-
-=for hackers
-Found in file XSUB.h
-
-=item ST
-X<ST>
-
-Used to access elements on the XSUB's stack.
-
- SV* ST(int ix)
-
-=for hackers
-Found in file XSUB.h
-
-=item THIS
-X<THIS>
-
-Variable which is setup by C<xsubpp> to designate the object in a C++
-XSUB. This is always the proper type for the C++ object. See C<CLASS> and
-L<perlxs/"Using XS With C++">.
-
- (whatever) THIS
-
-=for hackers
-Found in file XSUB.h
-
-=item UNDERBAR
-X<UNDERBAR>
-
-The SV* corresponding to the $_ variable. Works even if there
-is a lexical $_ in scope.
-
-=for hackers
-Found in file XSUB.h
-
-=item XS
-X<XS>
-
-Macro to declare an XSUB and its C parameter list. This is handled by
-C<xsubpp>.
-
-=for hackers
-Found in file XSUB.h
-
-=item XS_VERSION
-X<XS_VERSION>
-
-The version identifier for an XS module. This is usually
-handled automatically by C<ExtUtils::MakeMaker>. See C<XS_VERSION_BOOTCHECK>.
-
-=for hackers
-Found in file XSUB.h
-
-=item XS_VERSION_BOOTCHECK
-X<XS_VERSION_BOOTCHECK>
-
-Macro to verify that a PM module's $VERSION variable matches the XS
-module's C<XS_VERSION> variable. This is usually handled automatically by
-C<xsubpp>. See L<perlxs/"The VERSIONCHECK: Keyword">.
-
- XS_VERSION_BOOTCHECK;
-
-=for hackers
-Found in file XSUB.h
-
-
-=back
-
-=head1 Warning and Dieing
-
-=over 8
-
-=item croak
-X<croak>
-
-This is the XSUB-writer's interface to Perl's C<die> function.
-Normally call this function the same way you call the C C<printf>
-function. Calling C<croak> returns control directly to Perl,
-sidestepping the normal C order of execution. See C<warn>.
-
-If you want to throw an exception object, assign the object to
-C<$@> and then pass C<NULL> to croak():
-
- errsv = get_sv("@", TRUE);
- sv_setsv(errsv, exception_object);
- croak(NULL);
-
- void croak(const char* pat, ...)
-
-=for hackers
-Found in file util.c
-
-=item warn
-X<warn>
-
-This is the XSUB-writer's interface to Perl's C<warn> function. Call this
-function the same way you call the C C<printf> function. See C<croak>.
-
- void warn(const char* pat, ...)
-
-=for hackers
-Found in file util.c
-
-
-=back
-
-=head1 AUTHORS
-
-Until May 1997, this document was maintained by Jeff Okamoto
-<okamoto at corp.hp.com>. It is now maintained as part of Perl itself.
-
-With lots of help and suggestions from Dean Roehrich, Malcolm Beattie,
-Andreas Koenig, Paul Hudson, Ilya Zakharevich, Paul Marquess, Neil
-Bowers, Matthew Green, Tim Bunce, Spider Boardman, Ulrich Pfeifer,
-Stephen McCamant, and Gurusamy Sarathy.
-
-API Listing originally by Dean Roehrich <roehrich at cray.com>.
-
-Updated to be autogenerated from comments in the source by Benjamin Stuhl.
-
-=head1 SEE ALSO
-
-perlguts(1), perlxs(1), perlxstut(1), perlintern(1)
-
-=cut
-
- ex: set ro:
Deleted: trunk/contrib/perl/pod/perlcompile.pod
===================================================================
--- trunk/contrib/perl/pod/perlcompile.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlcompile.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,293 +0,0 @@
-=head1 NAME
-
-perlcompile - Introduction to the Perl Compiler-Translator
-
-=head1 DESCRIPTION
-
-Perl has always had a compiler: your source is compiled into an
-internal form (a parse tree) which is then optimized before being
-run. Since version 5.005, Perl has shipped with a module
-capable of inspecting the optimized parse tree (C<B>), and this has
-been used to write many useful utilities, including a module that lets
-you turn your Perl into C source code that can be compiled into a
-native executable.
-
-The C<B> module provides access to the parse tree, and other modules
-("back ends") do things with the tree. Some write it out as
-semi-human-readable text. Another traverses the parse tree to build a
-cross-reference of which subroutines, formats, and variables are used
-where. Another checks your code for dubious constructs. Yet another back
-end dumps the parse tree back out as Perl source, acting as a source code
-beautifier or deobfuscator.
-
-Because its original purpose was to be a way to produce C code
-corresponding to a Perl program, and in turn a native executable, the
-C<B> module and its associated back ends are known as "the
-compiler", even though they don't really compile anything.
-Different parts of the compiler are more accurately a "translator",
-or an "inspector", but people want Perl to have a "compiler
-option" not an "inspector gadget". What can you do?
-
-This document covers the use of the Perl compiler: which modules
-it comprises, how to use the most important of the back end modules,
-what problems there are, and how to work around them.
-
-=head2 Layout
-
-The compiler back ends are in the C<B::> hierarchy, and the front-end
-(the module that you, the user of the compiler, will sometimes
-interact with) is the O module.
-
-Here are the important back ends to know about, with their status
-expressed as a number from 0 (outline for later implementation) to
-10 (if there's a bug in it, we're very surprised):
-
-=over 4
-
-=item B::Lint
-
-Complains if it finds dubious constructs in your source code. Status:
-6 (it works adequately, but only has a very limited number of areas
-that it checks).
-
-=item B::Deparse
-
-Recreates the Perl source, making an attempt to format it coherently.
-Status: 8 (it works nicely, but a few obscure things are missing).
-
-=item B::Xref
-
-Reports on the declaration and use of subroutines and variables.
-Status: 8 (it works nicely, but still has a few lingering bugs).
-
-=back
-
-=head1 Using The Back Ends
-
-The following sections describe how to use the various compiler back
-ends. They're presented roughly in order of maturity, so that the
-most stable and proven back ends are described first, and the most
-experimental and incomplete back ends are described last.
-
-The O module automatically enabled the B<-c> flag to Perl, which
-prevents Perl from executing your code once it has been compiled.
-This is why all the back ends print:
-
- myperlprogram syntax OK
-
-before producing any other output.
-
-=head2 The Cross-Referencing Back End
-
-The cross-referencing back end (B::Xref) produces a report on your program,
-breaking down declarations and uses of subroutines and variables (and
-formats) by file and subroutine. For instance, here's part of the
-report from the I<pod2man> program that comes with Perl:
-
- Subroutine clear_noremap
- Package (lexical)
- $ready_to_print i1069, 1079
- Package main
- $& 1086
- $. 1086
- $0 1086
- $1 1087
- $2 1085, 1085
- $3 1085, 1085
- $ARGV 1086
- %HTML_Escapes 1085, 1085
-
-This shows the variables used in the subroutine C<clear_noremap>. The
-variable C<$ready_to_print> is a my() (lexical) variable,
-B<i>ntroduced (first declared with my()) on line 1069, and used on
-line 1079. The variable C<$&> from the main package is used on 1086,
-and so on.
-
-A line number may be prefixed by a single letter:
-
-=over 4
-
-=item i
-
-Lexical variable introduced (declared with my()) for the first time.
-
-=item &
-
-Subroutine or method call.
-
-=item s
-
-Subroutine defined.
-
-=item r
-
-Format defined.
-
-=back
-
-The most useful option the cross referencer has is to save the report
-to a separate file. For instance, to save the report on
-I<myperlprogram> to the file I<report>:
-
- $ perl -MO=Xref,-oreport myperlprogram
-
-=head2 The Decompiling Back End
-
-The Deparse back end turns your Perl source back into Perl source. It
-can reformat along the way, making it useful as a deobfuscator. The
-most basic way to use it is:
-
- $ perl -MO=Deparse myperlprogram
-
-You'll notice immediately that Perl has no idea of how to paragraph
-your code. You'll have to separate chunks of code from each other
-with newlines by hand. However, watch what it will do with
-one-liners:
-
- $ perl -MO=Deparse -e '$op=shift||die "usage: $0
- code [...]";chomp(@ARGV=<>)unless at ARGV; for(@ARGV){$was=$_;eval$op;
- die$@ if$@; rename$was,$_ unless$was eq $_}'
- -e syntax OK
- $op = shift @ARGV || die("usage: $0 code [...]");
- chomp(@ARGV = <ARGV>) unless @ARGV;
- foreach $_ (@ARGV) {
- $was = $_;
- eval $op;
- die $@ if $@;
- rename $was, $_ unless $was eq $_;
- }
-
-The decompiler has several options for the code it generates. For
-instance, you can set the size of each indent from 4 (as above) to
-2 with:
-
- $ perl -MO=Deparse,-si2 myperlprogram
-
-The B<-p> option adds parentheses where normally they are omitted:
-
- $ perl -MO=Deparse -e 'print "Hello, world\n"'
- -e syntax OK
- print "Hello, world\n";
- $ perl -MO=Deparse,-p -e 'print "Hello, world\n"'
- -e syntax OK
- print("Hello, world\n");
-
-See L<B::Deparse> for more information on the formatting options.
-
-=head2 The Lint Back End
-
-The lint back end (B::Lint) inspects programs for poor style. One
-programmer's bad style is another programmer's useful tool, so options
-let you select what is complained about.
-
-To run the style checker across your source code:
-
- $ perl -MO=Lint myperlprogram
-
-To disable context checks and undefined subroutines:
-
- $ perl -MO=Lint,-context,-undefined-subs myperlprogram
-
-See L<B::Lint> for information on the options.
-
-=head1 Module List for the Compiler Suite
-
-=over 4
-
-=item B
-
-This module is the introspective ("reflective" in Java terms)
-module, which allows a Perl program to inspect its innards. The
-back end modules all use this module to gain access to the compiled
-parse tree. You, the user of a back end module, will not need to
-interact with B.
-
-=item O
-
-This module is the front-end to the compiler's back ends. Normally
-called something like this:
-
- $ perl -MO=Deparse myperlprogram
-
-This is like saying C<use O 'Deparse'> in your Perl program.
-
-=item B::Concise
-
-This module prints a concise (but complete) version of the Perl parse
-tree. Its output is more customizable than the one of B::Terse or
-B::Debug (and it can emulate them). This module is useful for people who
-are writing their own back end, or who are learning about the Perl
-internals. It's not useful to the average programmer.
-
-=item B::Debug
-
-This module dumps the Perl parse tree in verbose detail to STDOUT.
-It's useful for people who are writing their own back end, or who
-are learning about the Perl internals. It's not useful to the
-average programmer.
-
-=item B::Deparse
-
-This module produces Perl source code from the compiled parse tree.
-It is useful in debugging and deconstructing other people's code,
-also as a pretty-printer for your own source. See
-L</"The Decompiling Back End"> for details about usage.
-
-=item B::Lint
-
-This module inspects the compiled form of your source code for things
-which, while some people frown on them, aren't necessarily bad enough
-to justify a warning. For instance, use of an array in scalar context
-without explicitly saying C<scalar(@array)> is something that Lint
-can identify. See L</"The Lint Back End"> for details about usage.
-
-=item B::Showlex
-
-This module prints out the my() variables used in a function or a
-file. To get a list of the my() variables used in the subroutine
-mysub() defined in the file myperlprogram:
-
- $ perl -MO=Showlex,mysub myperlprogram
-
-To get a list of the my() variables used in the file myperlprogram:
-
- $ perl -MO=Showlex myperlprogram
-
-[BROKEN]
-
-=item B::Terse
-
-This module prints the contents of the parse tree, but without as much
-information as B::Debug. For comparison, C<print "Hello, world.">
-produced 96 lines of output from B::Debug, but only 6 from B::Terse.
-
-This module is useful for people who are writing their own back end,
-or who are learning about the Perl internals. It's not useful to the
-average programmer.
-
-=item B::Xref
-
-This module prints a report on where the variables, subroutines, and
-formats are defined and used within a program and the modules it
-loads. See L</"The Cross-Referencing Back End"> for details about
-usage.
-
-=back
-
-=head1 KNOWN PROBLEMS
-
-BEGIN{} blocks are executed while compiling your code. Any external
-state that is initialized in BEGIN{}, such as opening files, initiating
-database connections etc., do not behave properly. To work around
-this, Perl has an INIT{} block that corresponds to code being executed
-before your program begins running but after your program has finished
-being compiled. Execution order: BEGIN{}, (possible save of state
-through compiler back-end), INIT{}, program runs, END{}.
-
-=head1 AUTHOR
-
-This document was originally written by Nathan Torkington, and is now
-maintained by the perl5-porters mailing list
-I<perl5-porters at perl.org>.
-
-=cut
Deleted: trunk/contrib/perl/pod/perldoc.pod
===================================================================
--- trunk/contrib/perl/pod/perldoc.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perldoc.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,270 +0,0 @@
-
-=head1 NAME
-
-perldoc - Look up Perl documentation in Pod format.
-
-=head1 SYNOPSIS
-
-B<perldoc> [B<-h>] [B<-D>] [B<-t>] [B<-u>] [B<-m>] [B<-l>] [B<-F>]
-[B<-i>] [B<-V>] [B<-T>] [B<-r>]
-[B<-dI<destination_file>>]
-[B<-oI<formatname>>]
-[B<-MI<FormatterClassName>>]
-[B<-wI<formatteroption:value>>]
-[B<-n>I<nroff-replacement>]
-[B<-X>]
-[B<-L> I<language_code>]
-PageName|ModuleName|ProgramName
-
-B<perldoc> B<-f> BuiltinFunction
-
-B<perldoc> B<-L> it B<-f> BuiltinFunction
-
-B<perldoc> B<-q> FAQ Keyword
-
-B<perldoc> B<-L> fr B<-q> FAQ Keyword
-
-B<perldoc> B<-v> PerlVariable
-
-See below for more description of the switches.
-
-=head1 DESCRIPTION
-
-I<perldoc> looks up a piece of documentation in .pod format that is embedded
-in the perl installation tree or in a perl script, and displays it via
-C<pod2man | nroff -man | $PAGER>. (In addition, if running under HP-UX,
-C<col -x> will be used.) This is primarily used for the documentation for
-the perl library modules.
-
-Your system may also have man pages installed for those modules, in
-which case you can probably just use the man(1) command.
-
-If you are looking for a table of contents to the Perl library modules
-documentation, see the L<perltoc> page.
-
-=head1 OPTIONS
-
-=over 5
-
-=item B<-h>
-
-Prints out a brief B<h>elp message.
-
-=item B<-D>
-
-B<D>escribes search for the item in B<d>etail.
-
-=item B<-t>
-
-Display docs using plain B<t>ext converter, instead of nroff. This may be faster,
-but it probably won't look as nice.
-
-=item B<-u>
-
-Skip the real Pod formatting, and just show the raw Pod source (B<U>nformatted)
-
-=item B<-m> I<module>
-
-Display the entire module: both code and unformatted pod documentation.
-This may be useful if the docs don't explain a function in the detail
-you need, and you'd like to inspect the code directly; perldoc will find
-the file for you and simply hand it off for display.
-
-=item B<-l>
-
-Display onB<l>y the file name of the module found.
-
-=item B<-F>
-
-Consider arguments as file names; no search in directories will be performed.
-
-=item B<-f> I<perlfunc>
-
-The B<-f> option followed by the name of a perl built-in function will
-extract the documentation of this function from L<perlfunc>.
-
-Example:
-
- perldoc -f sprintf
-
-
-=item B<-q> I<perlfaq-search-regexp>
-
-The B<-q> option takes a regular expression as an argument. It will search
-the B<q>uestion headings in perlfaq[1-9] and print the entries matching
-the regular expression.
-
-Example:
-
- perldoc -q shuffle
-
-
-=item B<-v> I<perlvar>
-
-The B<-v> option followed by the name of a Perl predefined variable will
-extract the documentation of this variable from L<perlvar>.
-
-Examples:
-
- perldoc -v '$"'
- perldoc -v @+
- perldoc -v DATA
-
-
-=item B<-T>
-
-This specifies that the output is not to be sent to a pager, but is to
-be sent right to STDOUT.
-
-=item B<-d> I<destination-filename>
-
-This specifies that the output is to be sent neither to a pager nor
-to STDOUT, but is to be saved to the specified filename. Example:
-C<perldoc -oLaTeX -dtextwrapdocs.tex Text::Wrap>
-
-=item B<-o> I<output-formatname>
-
-This specifies that you want Perldoc to try using a Pod-formatting
-class for the output format that you specify. For example:
-C<-oman>. This is actually just a wrapper around the C<-M> switch;
-using C<-oI<formatname>> just looks for a loadable class by adding
-that format name (with different capitalizations) to the end of
-different classname prefixes.
-
-For example, C<-oLaTeX> currently tries all of the following classes:
-Pod::Perldoc::ToLaTeX Pod::Perldoc::Tolatex Pod::Perldoc::ToLatex
-Pod::Perldoc::ToLATEX Pod::Simple::LaTeX Pod::Simple::latex
-Pod::Simple::Latex Pod::Simple::LATEX Pod::LaTeX Pod::latex Pod::Latex
-Pod::LATEX.
-
-=item B<-M> I<module-name>
-
-This specifies the module that you want to try using for formatting the
-pod. The class must at least provide a C<parse_from_file> method.
-For example: C<perldoc -MPod::Perldoc::ToChecker>.
-
-You can specify several classes to try by joining them with commas
-or semicolons, as in C<-MTk::SuperPod;Tk::Pod>.
-
-=item B<-w> I<option:value> or B<-w> I<option>
-
-This specifies an option to call the formatter B<w>ith. For example,
-C<-w textsize:15> will call
-C<< $formatter->textsize(15) >> on the formatter object before it is
-used to format the object. For this to be valid, the formatter class
-must provide such a method, and the value you pass should be valid.
-(So if C<textsize> expects an integer, and you do C<-w textsize:big>,
-expect trouble.)
-
-You can use C<-w optionname> (without a value) as shorthand for
-C<-w optionname:I<TRUE>>. This is presumably useful in cases of on/off
-features like: C<-w page_numbering>.
-
-You can use an "=" instead of the ":", as in: C<-w textsize=15>. This
-might be more (or less) convenient, depending on what shell you use.
-
-=item B<-X>
-
-Use an index if it is present. The B<-X> option looks for an entry
-whose basename matches the name given on the command line in the file
-C<$Config{archlib}/pod.idx>. The F<pod.idx> file should contain fully
-qualified filenames, one per line.
-
-=item B<-L> I<language_code>
-
-This allows one to specify the I<language code> for the desired language
-translation. If the C<POD2::E<lt>language_codeE<gt>> package isn't
-installed in your system, the switch is ignored.
-All available translation packages are to be found under the C<POD2::>
-namespace. See L<POD2::IT> (or L<POD2::FR>) to see how to create new
-localized C<POD2::*> documentation packages and integrate them into
-L<Pod::Perldoc>.
-
-=item B<PageName|ModuleName|ProgramName>
-
-The item you want to look up. Nested modules (such as C<File::Basename>)
-are specified either as C<File::Basename> or C<File/Basename>. You may also
-give a descriptive name of a page, such as C<perlfunc>.
-
-For simple names like 'foo', when the normal search fails to find
-a matching page, a search with the "perl" prefix is tried as well.
-So "perldoc intro" is enough to find/render "perlintro.pod".
-
-=item B<-n> I<some-formatter>
-
-Specify replacement for nroff
-
-=item B<-r>
-
-Recursive search.
-
-=item B<-i>
-
-Ignore case.
-
-=item B<-V>
-
-Displays the version of perldoc you're running.
-
-=back
-
-
-
-=head1 SECURITY
-
-Because B<perldoc> does not run properly tainted, and is known to
-have security issues, when run as the superuser it will attempt to
-drop privileges by setting the effective and real IDs to nobody's
-or nouser's account, or -2 if unavailable. If it cannot relinquish
-its privileges, it will not run.
-
-
-=head1 ENVIRONMENT
-
-Any switches in the C<PERLDOC> environment variable will be used before the
-command line arguments.
-
-Useful values for C<PERLDOC> include C<-oman>, C<-otext>, C<-otk>, C<-ortf>,
-C<-oxml>, and so on, depending on what modules you have on hand; or
-the formatter class may be specified exactly with C<-MPod::Perldoc::ToMan>
-or the like.
-
-C<perldoc> also searches directories
-specified by the C<PERL5LIB> (or C<PERLLIB> if C<PERL5LIB> is not
-defined) and C<PATH> environment variables.
-(The latter is so that embedded pods for executables, such as
-C<perldoc> itself, are available.)
-
-C<perldoc> will use, in order of preference, the pager defined in
-C<PERLDOC_PAGER>, C<MANPAGER>, or C<PAGER> before trying to find a pager
-on its own. (C<MANPAGER> is not used if C<perldoc> was told to display
-plain text or unformatted pod.)
-
-One useful value for C<PERLDOC_PAGER> is C<less -+C -E>.
-
-Having PERLDOCDEBUG set to a positive integer will make perldoc emit
-even more descriptive output than the C<-v> switch does; the higher the
-number, the more it emits.
-
-
-=head1 CHANGES
-
-Up to 3.14_05, the switch B<-v> was used to produce verbose
-messages of B<perldoc> operation, which is now enabled by B<-D>.
-
-=head1 SEE ALSO
-
-L<perlpod>, L<Pod::Perldoc>
-
-=head1 AUTHOR
-
-Current maintainer: Adriano R. Ferreira <ferreira at cpan.org>
-
-Past contributors are:
-Sean M. Burke <sburke at cpan.org>,
-Kenneth Albanowski <kjahds at kjahds.com>,
-Andy Dougherty <doughera at lafcol.lafayette.edu>,
-and many others.
-
-=cut
-
Deleted: trunk/contrib/perl/pod/perlfaq.pod
===================================================================
--- trunk/contrib/perl/pod/perlfaq.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlfaq.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1444 +0,0 @@
-=head1 NAME
-
-perlfaq - frequently asked questions about Perl
-
-=head1 DESCRIPTION
-
-The perlfaq comprises several documents that answer the most commonly
-asked questions about Perl and Perl programming. It's divided by topic
-into nine major sections outlined in this document.
-
-=head2 Where to get the perlfaq
-
-The perlfaq comes with the standard Perl distribution, so if you have Perl
-you should have the perlfaq. You should also have the C<perldoc> tool
-that lets you read the L<perlfaq>:
-
- $ perldoc perlfaq
-
-Besides your local system, you can find the perlfaq on the web, including
-at http://perldoc.perl.org/ .
-
-The perlfaq is an evolving document and you can read the latest version
-at http://faq.perl.org/ . The perlfaq-workers periodically post extracts
-of the latest perlfaq to comp.lang.perl.misc.
-
-The perlfaq documents are in the perl source tree (see
-L<perlgit>). The git repository notes all changes to the FAQ and
-holds the latest version of the working documents and may vary
-significantly from the version distributed with the latest version of
-Perl. Check the repository before sending your corrections.
-
-=head2 How to contribute to the perlfaq
-
-You can mail corrections, additions, and suggestions to
-C<< <perlfaq-workers AT perl DOT org> >>. The perlfaq volunteers use this
-address to coordinate their efforts and track the perlfaq development.
-They appreciate your contributions to the FAQ but do not have time to
-provide individual help, so don't use this address to ask FAQs.
-
-The perlfaq server posts extracts of the perlfaq to that newsgroup
-every 6 hours (or so), and the community of volunteers reviews and
-updates the answers. If you'd like to help review and update the
-answers, check out comp.lang.perl.misc.
-
-You can also fork the perl repository, make your changes, and send them
-to Perl 5 Porters. See L<perlgit>.
-
-=head2 What will happen if you mail your Perl programming problems to the authors?
-
-The perlfaq-workers like to keep all traffic on the perlfaq-workers list
-so that everyone can see the work being done (and the work that needs to
-be done). The mailing list serves as an official record. If you email the
-authors or maintainers directly, you'll probably get a reply asking you
-to post to the mailing list. If you don't get a reply, it probably means
-that the person never saw the message or didn't have time to deal with
-it. Posting to the list allows the volunteers with time to deal with it
-when others are busy.
-
-If you have a question that isn't in the FAQ and you would like help with
-it, try the resources in L<perlfaq2>.
-
-=head1 CREDITS
-
-Tom Christiansen wrote the original perlfaq then expanded it with the
-help of Nat Torkington. The perlfaq-workers maintain current document
-and the denizens of comp.lang.perl.misc regularly review and update the
-FAQ. Several people have contributed answers, corrections, and comments,
-and the perlfaq notes those contributions wherever appropriate.
-
-=head1 AUTHOR AND COPYRIGHT
-
-Tom Christiansen wrote the original version of this document.
-brian d foy C<< <bdfoy at cpan.org> >> wrote this version. See the
-individual perlfaq documents for additional copyright information.
-
-This document is available under the same terms as Perl itself. Code
-examples in all the perlfaq documents are in the public domain. Use
-them as you see fit (and at your own risk with no warranty from anyone).
-
-=head1 Table of Contents
-
-=over 4
-
-=item perlfaq - this document
-
-=item perlfaq1 - General Questions About Perl
-
-=item perlfaq2 - Obtaining and Learning about Perl
-
-=item perlfaq3 - Programming Tools
-
-=item perlfaq4 - Data Manipulation
-
-=item perlfaq5 - Files and Formats
-
-=item perlfaq6 - Regular Expressions
-
-=item perlfaq7 - General Perl Language Issues
-
-=item perlfaq8 - System Interaction
-
-=item perlfaq9 - Networking
-
-=back
-
-=head1 The Questions
-
-=head2 L<perlfaq1>: General Questions About Perl
-
-Very general, high-level questions about Perl.
-
-=over 4
-
-=item *
-
-What is Perl?
-
-=item *
-
-Who supports Perl? Who develops it? Why is it free?
-
-=item *
-
-Which version of Perl should I use?
-
-=item *
-
-What are Perl 4, Perl 5, or Perl 6?
-
-=item *
-
-What was Ponie?
-
-=item *
-
-What is Perl 6?
-
-=item *
-
-How stable is Perl?
-
-=item *
-
-Is Perl difficult to learn?
-
-=item *
-
-How does Perl compare with other languages like Java, Python, REXX, Scheme, or Tcl?
-
-=item *
-
-Can I do [task] in Perl?
-
-=item *
-
-When shouldn't I program in Perl?
-
-=item *
-
-What's the difference between "perl" and "Perl"?
-
-=item *
-
-Is it a Perl program or a Perl script?
-
-=item *
-
-What is a JAPH?
-
-=item *
-
-Where can I get a list of Larry Wall witticisms?
-
-=item *
-
-How can I convince others to use Perl?
-
-=back
-
-
-=head2 L<perlfaq2>: Obtaining and Learning about Perl
-
-Where to find source and documentation for Perl, support, and related matters.
-
-=over 4
-
-=item *
-
-What machines support perl? Where do I get it?
-
-=item *
-
-How can I get a binary version of perl?
-
-=item *
-
-I don't have a C compiler. How can I build my own Perl interpreter?
-
-=item *
-
-I copied the perl binary from one machine to another, but scripts don't work.
-
-=item *
-
-I grabbed the sources and tried to compile but gdbm/dynamic loading/malloc/linking/... failed. How do I make it work?
-
-=item *
-
-What modules and extensions are available for Perl? What is CPAN? What does CPAN/src/... mean?
-
-=item *
-
-Is there an ISO or ANSI certified version of Perl?
-
-=item *
-
-Where can I get information on Perl?
-
-=item *
-
-What are the Perl newsgroups on Usenet? Where do I post questions?
-
-=item *
-
-Where should I post source code?
-
-=item *
-
-Perl Books
-
-=item *
-
-Which magazines have Perl content?
-
-=item *
-
-What mailing lists are there for Perl?
-
-=item *
-
-Where are the archives for comp.lang.perl.misc?
-
-=item *
-
-Where can I buy a commercial version of perl?
-
-=item *
-
-Where do I send bug reports?
-
-=item *
-
-What is perl.com? Perl Mongers? pm.org? perl.org? cpan.org?
-
-=back
-
-
-=head2 L<perlfaq3>: Programming Tools
-
-Programmer tools and programming support.
-
-=over 4
-
-=item *
-
-How do I do (anything)?
-
-=item *
-
-How can I use Perl interactively?
-
-=item *
-
-Is there a Perl shell?
-
-=item *
-
-How do I find which modules are installed on my system?
-
-=item *
-
-How do I debug my Perl programs?
-
-=item *
-
-How do I profile my Perl programs?
-
-=item *
-
-How do I cross-reference my Perl programs?
-
-=item *
-
-Is there a pretty-printer (formatter) for Perl?
-
-=item *
-
-Is there a ctags for Perl?
-
-=item *
-
-Is there an IDE or Windows Perl Editor?
-
-=item *
-
-Where can I get Perl macros for vi?
-
-=item *
-
-Where can I get perl-mode or cperl-mode for emacs?
-
-=item *
-
-How can I use curses with Perl?
-
-=item *
-
-How can I write a GUI (X, Tk, Gtk, etc.) in Perl?
-
-=item *
-
-How can I make my Perl program run faster?
-
-=item *
-
-How can I make my Perl program take less memory?
-
-=item *
-
-Is it safe to return a reference to local or lexical data?
-
-=item *
-
-How can I free an array or hash so my program shrinks?
-
-=item *
-
-How can I make my CGI script more efficient?
-
-=item *
-
-How can I hide the source for my Perl program?
-
-=item *
-
-How can I compile my Perl program into byte code or C?
-
-=item *
-
-How can I get C<#!perl> to work on [MS-DOS,NT,...]?
-
-=item *
-
-Can I write useful Perl programs on the command line?
-
-=item *
-
-Why don't Perl one-liners work on my DOS/Mac/VMS system?
-
-=item *
-
-Where can I learn about CGI or Web programming in Perl?
-
-=item *
-
-Where can I learn about object-oriented Perl programming?
-
-=item *
-
-Where can I learn about linking C with Perl?
-
-=item *
-
-I've read perlembed, perlguts, etc., but I can't embed perl in my C program; what am I doing wrong?
-
-=item *
-
-When I tried to run my script, I got this message. What does it mean?
-
-=item *
-
-What's MakeMaker?
-
-=back
-
-
-=head2 L<perlfaq4>: Data Manipulation
-
-Manipulating numbers, dates, strings, arrays, hashes, and miscellaneous data issues.
-
-=over 4
-
-=item *
-
-Why am I getting long decimals (eg, 19.9499999999999) instead of the numbers I should be getting (eg, 19.95)?
-
-=item *
-
-Why is int() broken?
-
-=item *
-
-Why isn't my octal data interpreted correctly?
-
-=item *
-
-Does Perl have a round() function? What about ceil() and floor()? Trig functions?
-
-=item *
-
-How do I convert between numeric representations/bases/radixes?
-
-=item *
-
-Why doesn't & work the way I want it to?
-
-=item *
-
-How do I multiply matrices?
-
-=item *
-
-How do I perform an operation on a series of integers?
-
-=item *
-
-How can I output Roman numerals?
-
-=item *
-
-Why aren't my random numbers random?
-
-=item *
-
-How do I get a random number between X and Y?
-
-=item *
-
-How do I find the day or week of the year?
-
-=item *
-
-How do I find the current century or millennium?
-
-=item *
-
-How can I compare two dates and find the difference?
-
-=item *
-
-How can I take a string and turn it into epoch seconds?
-
-=item *
-
-How can I find the Julian Day?
-
-=item *
-
-How do I find yesterday's date?
-
-=item *
-
-Does Perl have a Year 2000 or 2038 problem? Is Perl Y2K compliant?
-
-=item *
-
-How do I validate input?
-
-=item *
-
-How do I unescape a string?
-
-=item *
-
-How do I remove consecutive pairs of characters?
-
-=item *
-
-How do I expand function calls in a string?
-
-=item *
-
-How do I find matching/nesting anything?
-
-=item *
-
-How do I reverse a string?
-
-=item *
-
-How do I expand tabs in a string?
-
-=item *
-
-How do I reformat a paragraph?
-
-=item *
-
-How can I access or change N characters of a string?
-
-=item *
-
-How do I change the Nth occurrence of something?
-
-=item *
-
-How can I count the number of occurrences of a substring within a string?
-
-=item *
-
-How do I capitalize all the words on one line?
-
-=item *
-
-How can I split a [character]-delimited string except when inside [character]?
-
-=item *
-
-How do I strip blank space from the beginning/end of a string?
-
-=item *
-
-How do I pad a string with blanks or pad a number with zeroes?
-
-=item *
-
-How do I extract selected columns from a string?
-
-=item *
-
-How do I find the soundex value of a string?
-
-=item *
-
-How can I expand variables in text strings?
-
-=item *
-
-What's wrong with always quoting "$vars"?
-
-=item *
-
-Why don't my E<lt>E<lt>HERE documents work?
-
-=item *
-
-What is the difference between a list and an array?
-
-=item *
-
-What is the difference between $array[1] and @array[1]?
-
-=item *
-
-How can I remove duplicate elements from a list or array?
-
-=item *
-
-How can I tell whether a certain element is contained in a list or array?
-
-=item *
-
-How do I compute the difference of two arrays? How do I compute the intersection of two arrays?
-
-=item *
-
-How do I test whether two arrays or hashes are equal?
-
-=item *
-
-How do I find the first array element for which a condition is true?
-
-=item *
-
-How do I handle linked lists?
-
-=item *
-
-How do I handle circular lists?
-
-=item *
-
-How do I shuffle an array randomly?
-
-=item *
-
-How do I process/modify each element of an array?
-
-=item *
-
-How do I select a random element from an array?
-
-=item *
-
-How do I permute N elements of a list?
-
-=item *
-
-How do I sort an array by (anything)?
-
-=item *
-
-How do I manipulate arrays of bits?
-
-=item *
-
-Why does defined() return true on empty arrays and hashes?
-
-=item *
-
-How do I process an entire hash?
-
-=item *
-
-How do I merge two hashes?
-
-=item *
-
-What happens if I add or remove keys from a hash while iterating over it?
-
-=item *
-
-How do I look up a hash element by value?
-
-=item *
-
-How can I know how many entries are in a hash?
-
-=item *
-
-How do I sort a hash (optionally by value instead of key)?
-
-=item *
-
-How can I always keep my hash sorted?
-
-=item *
-
-What's the difference between "delete" and "undef" with hashes?
-
-=item *
-
-Why don't my tied hashes make the defined/exists distinction?
-
-=item *
-
-How do I reset an each() operation part-way through?
-
-=item *
-
-How can I get the unique keys from two hashes?
-
-=item *
-
-How can I store a multidimensional array in a DBM file?
-
-=item *
-
-How can I make my hash remember the order I put elements into it?
-
-=item *
-
-Why does passing a subroutine an undefined element in a hash create it?
-
-=item *
-
-How can I make the Perl equivalent of a C structure/C++ class/hash or array of hashes or arrays?
-
-=item *
-
-How can I use a reference as a hash key?
-
-=item *
-
-How can I check if a key exists in a multilevel hash?
-
-=item *
-
-How do I handle binary data correctly?
-
-=item *
-
-How do I determine whether a scalar is a number/whole/integer/float?
-
-=item *
-
-How do I keep persistent data across program calls?
-
-=item *
-
-How do I print out or copy a recursive data structure?
-
-=item *
-
-How do I define methods for every class/object?
-
-=item *
-
-How do I verify a credit card checksum?
-
-=item *
-
-How do I pack arrays of doubles or floats for XS code?
-
-=back
-
-
-=head2 L<perlfaq5>: Files and Formats
-
-I/O and the "f" issues: filehandles, flushing, formats, and footers.
-
-=over 4
-
-=item *
-
-How do I flush/unbuffer an output filehandle? Why must I do this?
-
-=item *
-
-How do I change, delete, or insert a line in a file, or append to the beginning of a file?
-
-=item *
-
-How do I count the number of lines in a file?
-
-=item *
-
-How do I delete the last N lines from a file?
-
-=item *
-
-How can I use Perl's C<-i> option from within a program?
-
-=item *
-
-How can I copy a file?
-
-=item *
-
-How do I make a temporary file name?
-
-=item *
-
-How can I manipulate fixed-record-length files?
-
-=item *
-
-How can I make a filehandle local to a subroutine? How do I pass filehandles between subroutines? How do I make an array of filehandles?
-
-=item *
-
-How can I use a filehandle indirectly?
-
-=item *
-
-How can I set up a footer format to be used with write()?
-
-=item *
-
-How can I write() into a string?
-
-=item *
-
-How can I open a filehandle to a string?
-
-=item *
-
-How can I output my numbers with commas added?
-
-=item *
-
-How can I translate tildes (~) in a filename?
-
-=item *
-
-How come when I open a file read-write it wipes it out?
-
-=item *
-
-Why do I sometimes get an "Argument list too long" when I use E<lt>*E<gt>?
-
-=item *
-
-Is there a leak/bug in glob()?
-
-=item *
-
-How can I open a file with a leading ">" or trailing blanks?
-
-=item *
-
-How can I reliably rename a file?
-
-=item *
-
-How can I lock a file?
-
-=item *
-
-Why can't I just open(FH, "E<gt>file.lock")?
-
-=item *
-
-I still don't get locking. I just want to increment the number in the file. How can I do this?
-
-=item *
-
-All I want to do is append a small amount of text to the end of a file. Do I still have to use locking?
-
-=item *
-
-How do I randomly update a binary file?
-
-=item *
-
-How do I get a file's timestamp in perl?
-
-=item *
-
-How do I set a file's timestamp in perl?
-
-=item *
-
-How do I print to more than one file at once?
-
-=item *
-
-How can I read in an entire file all at once?
-
-=item *
-
-How can I read in a file by paragraphs?
-
-=item *
-
-How can I read a single character from a file? From the keyboard?
-
-=item *
-
-How can I tell whether there's a character waiting on a filehandle?
-
-=item *
-
-How do I do a C<tail -f> in perl?
-
-=item *
-
-How do I dup() a filehandle in Perl?
-
-=item *
-
-How do I close a file descriptor by number?
-
-=item *
-
-Why can't I use "C:\temp\foo" in DOS paths? Why doesn't `C:\temp\foo.exe` work?
-
-=item *
-
-Why doesn't glob("*.*") get all the files?
-
-=item *
-
-Why does Perl let me delete read-only files? Why does C<-i> clobber protected files? Isn't this a bug in Perl?
-
-=item *
-
-How do I select a random line from a file?
-
-=item *
-
-Why do I get weird spaces when I print an array of lines?
-
-=item *
-
-How do I traverse a directory tree?
-
-=item *
-
-How do I delete a directory tree?
-
-=item *
-
-How do I copy an entire directory?
-
-=back
-
-
-=head2 L<perlfaq6>: Regular Expressions
-
-This section is surprisingly small because the rest of the FAQ is littered with answers involving regular expressions. For example, decoding a URL and checking whether something is a number are handled with regular expressions, but those answers are found elsewhere in this document (in L<perlfaq9>: "How do I decode or create those %-encodings on the web" and L<perlfaq4>: "How do I determine whether a scalar is a number/whole/integer/float", to be precise).
-
-=over 4
-
-=item *
-
-How can I hope to use regular expressions without creating illegible and unmaintainable code?
-
-=item *
-
-I'm having trouble matching over more than one line. What's wrong?
-
-=item *
-
-How can I pull out lines between two patterns that are themselves on different lines?
-
-=item *
-
-How do I match XML, HTML, or other nasty, ugly things with a regex?
-
-=item *
-
-I put a regular expression into $/ but it didn't work. What's wrong?
-
-=item *
-
-How do I substitute case-insensitively on the LHS while preserving case on the RHS?
-
-=item *
-
-How can I make C<\w> match national character sets?
-
-=item *
-
-How can I match a locale-smart version of C</[a-zA-Z]/>?
-
-=item *
-
-How can I quote a variable to use in a regex?
-
-=item *
-
-What is C</o> really for?
-
-=item *
-
-How do I use a regular expression to strip C-style comments from a file?
-
-=item *
-
-Can I use Perl regular expressions to match balanced text?
-
-=item *
-
-What does it mean that regexes are greedy? How can I get around it?
-
-=item *
-
-How do I process each word on each line?
-
-=item *
-
-How can I print out a word-frequency or line-frequency summary?
-
-=item *
-
-How can I do approximate matching?
-
-=item *
-
-How do I efficiently match many regular expressions at once?
-
-=item *
-
-Why don't word-boundary searches with C<\b> work for me?
-
-=item *
-
-Why does using $&, $`, or $' slow my program down?
-
-=item *
-
-What good is C<\G> in a regular expression?
-
-=item *
-
-Are Perl regexes DFAs or NFAs? Are they POSIX compliant?
-
-=item *
-
-What's wrong with using grep in a void context?
-
-=item *
-
-How can I match strings with multibyte characters?
-
-=item *
-
-How do I match a regular expression that's in a variable?
-
-=back
-
-
-=head2 L<perlfaq7>: General Perl Language Issues
-
-General Perl language issues that don't clearly fit into any of the other sections.
-
-=over 4
-
-=item *
-
-Can I get a BNF/yacc/RE for the Perl language?
-
-=item *
-
-What are all these $@%&* punctuation signs, and how do I know when to use them?
-
-=item *
-
-Do I always/never have to quote my strings or use semicolons and commas?
-
-=item *
-
-How do I skip some return values?
-
-=item *
-
-How do I temporarily block warnings?
-
-=item *
-
-What's an extension?
-
-=item *
-
-Why do Perl operators have different precedence than C operators?
-
-=item *
-
-How do I declare/create a structure?
-
-=item *
-
-How do I create a module?
-
-=item *
-
-How do I adopt or take over a module already on CPAN?
-
-=item *
-
-How do I create a class?
-
-=item *
-
-How can I tell if a variable is tainted?
-
-=item *
-
-What's a closure?
-
-=item *
-
-What is variable suicide and how can I prevent it?
-
-=item *
-
-How can I pass/return a {Function, FileHandle, Array, Hash, Method, Regex}?
-
-=item *
-
-How do I create a static variable?
-
-=item *
-
-What's the difference between dynamic and lexical (static) scoping? Between local() and my()?
-
-=item *
-
-How can I access a dynamic variable while a similarly named lexical is in scope?
-
-=item *
-
-What's the difference between deep and shallow binding?
-
-=item *
-
-Why doesn't "my($foo) = E<lt>FILEE<gt>;" work right?
-
-=item *
-
-How do I redefine a builtin function, operator, or method?
-
-=item *
-
-What's the difference between calling a function as &foo and foo()?
-
-=item *
-
-How do I create a switch or case statement?
-
-=item *
-
-How can I catch accesses to undefined variables, functions, or methods?
-
-=item *
-
-Why can't a method included in this same file be found?
-
-=item *
-
-How can I find out my current or calling package?
-
-=item *
-
-How can I comment out a large block of Perl code?
-
-=item *
-
-How do I clear a package?
-
-=item *
-
-How can I use a variable as a variable name?
-
-=item *
-
-What does "bad interpreter" mean?
-
-=back
-
-
-=head2 L<perlfaq8>: System Interaction
-
-This section of the Perl FAQ covers questions involving operating system interaction. Topics include interprocess communication (IPC), control over the user-interface (keyboard, screen and pointing devices), and most anything else not related to data manipulation. Read the FAQs and documentation specific to the port of perl to your operating system (eg, L<perlvms>, L<perlplan9>, ...). These should contain more detailed information on the vagaries of your perl.
-
-=over 4
-
-=item *
-
-How do I find out which operating system I'm running under?
-
-=item *
-
-How come exec() doesn't return?
-
-=item *
-
-How do I do fancy stuff with the keyboard/screen/mouse?
-
-=item *
-
-How do I print something out in color?
-
-=item *
-
-How do I read just one key without waiting for a return key?
-
-=item *
-
-How do I check whether input is ready on the keyboard?
-
-=item *
-
-How do I clear the screen?
-
-=item *
-
-How do I get the screen size?
-
-=item *
-
-How do I ask the user for a password?
-
-=item *
-
-How do I read and write the serial port?
-
-=item *
-
-How do I decode encrypted password files?
-
-=item *
-
-How do I start a process in the background?
-
-=item *
-
-How do I trap control characters/signals?
-
-=item *
-
-How do I modify the shadow password file on a Unix system?
-
-=item *
-
-How do I set the time and date?
-
-=item *
-
-How can I sleep() or alarm() for under a second?
-
-=item *
-
-How can I measure time under a second?
-
-=item *
-
-How can I do an atexit() or setjmp()/longjmp()? (Exception handling)
-
-=item *
-
-Why doesn't my sockets program work under System V (Solaris)? What does the error message "Protocol not supported" mean?
-
-=item *
-
-How can I call my system's unique C functions from Perl?
-
-=item *
-
-Where do I get the include files to do ioctl() or syscall()?
-
-=item *
-
-Why do setuid perl scripts complain about kernel problems?
-
-=item *
-
-How can I open a pipe both to and from a command?
-
-=item *
-
-Why can't I get the output of a command with system()?
-
-=item *
-
-How can I capture STDERR from an external command?
-
-=item *
-
-Why doesn't open() return an error when a pipe open fails?
-
-=item *
-
-What's wrong with using backticks in a void context?
-
-=item *
-
-How can I call backticks without shell processing?
-
-=item *
-
-Why can't my script read from STDIN after I gave it EOF (^D on Unix, ^Z on MS-DOS)?
-
-=item *
-
-How can I convert my shell script to perl?
-
-=item *
-
-Can I use perl to run a telnet or ftp session?
-
-=item *
-
-How can I write expect in Perl?
-
-=item *
-
-Is there a way to hide perl's command line from programs such as "ps"?
-
-=item *
-
-I {changed directory, modified my environment} in a perl script. How come the change disappeared when I exited the script? How do I get my changes to be visible?
-
-=item *
-
-How do I close a process's filehandle without waiting for it to complete?
-
-=item *
-
-How do I fork a daemon process?
-
-=item *
-
-How do I find out if I'm running interactively or not?
-
-=item *
-
-How do I timeout a slow event?
-
-=item *
-
-How do I set CPU limits?
-
-=item *
-
-How do I avoid zombies on a Unix system?
-
-=item *
-
-How do I use an SQL database?
-
-=item *
-
-How do I make a system() exit on control-C?
-
-=item *
-
-How do I open a file without blocking?
-
-=item *
-
-How do I tell the difference between errors from the shell and perl?
-
-=item *
-
-How do I install a module from CPAN?
-
-=item *
-
-What's the difference between require and use?
-
-=item *
-
-How do I keep my own module/library directory?
-
-=item *
-
-How do I add the directory my program lives in to the module/library search path?
-
-=item *
-
-How do I add a directory to my include path (@INC) at runtime?
-
-=item *
-
-What is socket.ph and where do I get it?
-
-=back
-
-
-=head2 L<perlfaq9>: Networking
-
-Networking, the internet, and a few on the web.
-
-=over 4
-
-=item *
-
-What is the correct form of response from a CGI script?
-
-=item *
-
-My CGI script runs from the command line but not the browser. (500 Server Error)
-
-=item *
-
-How can I get better error messages from a CGI program?
-
-=item *
-
-How do I remove HTML from a string?
-
-=item *
-
-How do I extract URLs?
-
-=item *
-
-How do I download a file from the user's machine? How do I open a file on another machine?
-
-=item *
-
-How do I make an HTML pop-up menu with Perl?
-
-=item *
-
-How do I fetch an HTML file?
-
-=item *
-
-How do I automate an HTML form submission?
-
-=item *
-
-How do I decode or create those %-encodings on the web?
-
-=item *
-
-How do I redirect to another page?
-
-=item *
-
-How do I put a password on my web pages?
-
-=item *
-
-How do I edit my .htpasswd and .htgroup files with Perl?
-
-=item *
-
-How do I make sure users can't enter values into a form that cause my CGI script to do bad things?
-
-=item *
-
-How do I parse a mail header?
-
-=item *
-
-How do I decode a CGI form?
-
-=item *
-
-How do I check a valid mail address?
-
-=item *
-
-How do I decode a MIME/BASE64 string?
-
-=item *
-
-How do I return the user's mail address?
-
-=item *
-
-How do I send mail?
-
-=item *
-
-How do I use MIME to make an attachment to a mail message?
-
-=item *
-
-How do I read mail?
-
-=item *
-
-How do I find out my hostname, domainname, or IP address?
-
-=item *
-
-How do I fetch a news article or the active newsgroups?
-
-=item *
-
-How do I fetch/put an FTP file?
-
-=item *
-
-How can I do RPC in Perl?
-
-=back
-
-
Deleted: trunk/contrib/perl/pod/perlfaq1.pod
===================================================================
--- trunk/contrib/perl/pod/perlfaq1.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlfaq1.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,413 +0,0 @@
-=head1 NAME
-
-perlfaq1 - General Questions About Perl
-
-=head1 DESCRIPTION
-
-This section of the FAQ answers very general, high-level questions
-about Perl.
-
-=head2 What is Perl?
-
-Perl is a high-level programming language with an eclectic heritage
-written by Larry Wall and a cast of thousands. It derives from the
-ubiquitous C programming language and to a lesser extent from sed,
-awk, the Unix shell, and at least a dozen other tools and languages.
-Perl's process, file, and text manipulation facilities make it
-particularly well-suited for tasks involving quick prototyping, system
-utilities, software tools, system management tasks, database access,
-graphical programming, networking, and world wide web programming.
-These strengths make it especially popular with system administrators
-and CGI script authors, but mathematicians, geneticists, journalists,
-and even managers also use Perl. Maybe you should, too.
-
-=head2 Who supports Perl? Who develops it? Why is it free?
-
-The original culture of the pre-populist Internet and the deeply-held
-beliefs of Perl's author, Larry Wall, gave rise to the free and open
-distribution policy of perl. Perl is supported by its users. The
-core, the standard Perl library, the optional modules, and the
-documentation you're reading now were all written by volunteers. See
-the personal note at the end of the README file in the perl source
-distribution for more details. See L<perlhist> (new as of 5.005)
-for Perl's milestone releases.
-
-In particular, the core development team (known as the Perl Porters)
-are a rag-tag band of highly altruistic individuals committed to
-producing better software for free than you could hope to purchase for
-money. You may snoop on pending developments via the archives at
-http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/
-and http://archive.develooper.com/perl5-porters@perl.org/
-or the news gateway nntp://nntp.perl.org/perl.perl5.porters or
-its web interface at http://nntp.perl.org/group/perl.perl5.porters ,
-or read the faq at http://dev.perl.org/perl5/docs/p5p-faq.html ,
-or you can subscribe to the mailing list by sending
-perl5-porters-subscribe at perl.org a subscription request
-(an empty message with no subject is fine).
-
-While the GNU project includes Perl in its distributions, there's no
-such thing as "GNU Perl". Perl is not produced nor maintained by the
-Free Software Foundation. Perl's licensing terms are also more open
-than GNU software's tend to be.
-
-You can get commercial support of Perl if you wish, although for most
-users the informal support will more than suffice. See the answer to
-"Where can I buy a commercial version of perl?" for more information.
-
-=head2 Which version of Perl should I use?
-
-(contributed by brian d foy)
-
-There is often a matter of opinion and taste, and there isn't any one
-answer that fits everyone. In general, you want to use either the current
-stable release, or the stable release immediately prior to that one.
-Currently, those are perl5.14.x and perl5.12.x, respectively.
-
-Beyond that, you have to consider several things and decide which is best
-for you.
-
-=over 4
-
-=item *
-
-If things aren't broken, upgrading perl may break them (or at least issue
-new warnings).
-
-=item *
-
-The latest versions of perl have more bug fixes.
-
-=item *
-
-The Perl community is geared toward supporting the most recent releases,
-so you'll have an easier time finding help for those.
-
-=item *
-
-Versions prior to perl5.004 had serious security problems with buffer
-overflows, and in some cases have CERT advisories (for instance,
-http://www.cert.org/advisories/CA-1997-17.html ).
-
-=item *
-
-The latest versions are probably the least deployed and widely tested, so
-you may want to wait a few months after their release and see what
-problems others have if you are risk averse.
-
-=item *
-
-The immediate, previous releases (i.e. perl5.8.x ) are usually maintained
-for a while, although not at the same level as the current releases.
-
-=item *
-
-No one is actively supporting Perl 4. Ten years ago it was a dead
-camel carcass (according to this document). Now it's barely a skeleton
-as its whitewashed bones have fractured or eroded.
-
-=item *
-
-There is no Perl 6 release scheduled, but it will be available when
-it's ready. The joke is that it's scheduled for Christmas, but that we
-just don't know which one. Stay tuned, but don't worry that you'll
-have to change major versions of Perl; no one is going to take Perl 5
-away from you.
-
-=item *
-
-There are really two tracks of perl development: a maintenance version
-and an experimental version. The maintenance versions are stable, and
-have an even number as the minor release (i.e. perl5.10.x, where 10 is the
-minor release). The experimental versions may include features that
-don't make it into the stable versions, and have an odd number as the
-minor release (i.e. perl5.9.x, where 9 is the minor release).
-
-=back
-
-
-=head2 What are Perl 4, Perl 5, or Perl 6?
-
-(contributed by brian d foy)
-
-In short, Perl 4 is the past, Perl 5 is the present, and Perl 6 is the
-future.
-
-The number after Perl (i.e. the 5 after Perl 5) is the major release
-of the perl interpreter as well as the version of the language. Each
-major version has significant differences that earlier versions cannot
-support.
-
-The current major release of Perl is Perl 5, and was first released in
-1994. It can run scripts from the previous major release, Perl 4
-(March 1991), but has significant differences. It introduced the
-concept of references, complex data structures, and modules. The Perl
-5 interpreter was a complete re-write of the previous perl sources.
-
-Perl 6 is the next major version of Perl, although it's not intended to
-replace Perl 5. It's still in development in both its syntax and
-design. The work started in 2002 and is still ongoing. Some of the
-most interesting features have shown up in the latest versions of Perl
-5, and some Perl 5 modules allow you to use some Perl 6 syntax in your
-programs. The current leading implementation of Perl 6 is Rakudo (
-http://rakudo.org ).
-
-See L<perlhist> for a history of Perl revisions.
-
-=head2 What was Ponie?
-
-(contributed by brian d foy)
-
-Ponie stands for "Perl On the New Internal Engine", started by Arthur
-Bergman from Fotango in 2003, and subsequently run as a project of The
-Perl Foundation. It was abandoned in 2006
-( http://www.nntp.perl.org/group/perl.ponie.dev/487 ).
-
-Instead of using the current Perl internals, Ponie aimed to create a
-new one that would provide a translation path from Perl 5 to Perl 6
-(or anything else that targets Parrot, actually). You would have been
-able to just keep using Perl 5 with Parrot, the virtual machine which
-will compile and run Perl 6 bytecode.
-
-=head2 What is Perl 6?
-
-At The Second O'Reilly Open Source Software Convention, Larry Wall
-announced Perl 6 development would begin in earnest. Perl 6 was an oft
-used term for Chip Salzenberg's project to rewrite Perl in C++ named
-Topaz. However, Topaz provided valuable insights to the next version
-of Perl and its implementation, but was ultimately abandoned.
-
-If you want to learn more about Perl 6, or have a desire to help in
-the crusade to make Perl a better place then read the Perl 6 developers
-page at http://dev.perl.org/perl6/ and get involved.
-
-Perl 6 is not scheduled for release yet, and Perl 5 will still be supported
-for quite awhile after its release. Do not wait for Perl 6 to do whatever
-you need to do.
-
-"We're really serious about reinventing everything that needs reinventing."
---Larry Wall
-
-=head2 How stable is Perl?
-
-Production releases, which incorporate bug fixes and new functionality,
-are widely tested before release. Since the 5.000 release, we have
-averaged only about one production release per year.
-
-Larry and the Perl development team occasionally make changes to the
-internal core of the language, but all possible efforts are made toward
-backward compatibility. While not quite all Perl 4 scripts run flawlessly
-under Perl 5, an update to perl should nearly never invalidate a program
-written for an earlier version of perl (barring accidental bug fixes
-and the rare new keyword).
-
-=head2 Is Perl difficult to learn?
-
-No, Perl is easy to start learning--and easy to keep learning. It looks
-like most programming languages you're likely to have experience
-with, so if you've ever written a C program, an awk script, a shell
-script, or even a BASIC program, you're already partway there.
-
-Most tasks only require a small subset of the Perl language. One of
-the guiding mottos for Perl development is "there's more than one way
-to do it" (TMTOWTDI, sometimes pronounced "tim toady"). Perl's
-learning curve is therefore shallow (easy to learn) and long (there's
-a whole lot you can do if you really want).
-
-Finally, because Perl is frequently (but not always, and certainly not by
-definition) an interpreted language, you can write your programs and test
-them without an intermediate compilation step, allowing you to experiment
-and test/debug quickly and easily. This ease of experimentation flattens
-the learning curve even more.
-
-Things that make Perl easier to learn: Unix experience, almost any kind
-of programming experience, an understanding of regular expressions, and
-the ability to understand other people's code. If there's something you
-need to do, then it's probably already been done, and a working example is
-usually available for free. Don't forget Perl modules, either.
-They're discussed in Part 3 of this FAQ, along with CPAN, which is
-discussed in Part 2.
-
-=head2 How does Perl compare with other languages like Java, Python, REXX, Scheme, or Tcl?
-
-Favorably in some areas, unfavorably in others. Precisely which areas
-are good and bad is often a personal choice, so asking this question
-on Usenet runs a strong risk of starting an unproductive Holy War.
-
-Probably the best thing to do is try to write equivalent code to do a
-set of tasks. These languages have their own newsgroups in which you
-can learn about (but hopefully not argue about) them.
-
-Some comparison documents can be found at http://www.perl.com/doc/FMTEYEWTK/versus/
-if you really can't stop yourself.
-
-=head2 Can I do [task] in Perl?
-
-Perl is flexible and extensible enough for you to use on virtually any
-task, from one-line file-processing tasks to large, elaborate systems.
-For many people, Perl serves as a great replacement for shell scripting.
-For others, it serves as a convenient, high-level replacement for most of
-what they'd program in low-level languages like C or C++. It's ultimately
-up to you (and possibly your management) which tasks you'll use Perl
-for and which you won't.
-
-If you have a library that provides an API, you can make any component
-of it available as just another Perl function or variable using a Perl
-extension written in C or C++ and dynamically linked into your main
-perl interpreter. You can also go the other direction, and write your
-main program in C or C++, and then link in some Perl code on the fly,
-to create a powerful application. See L<perlembed>.
-
-That said, there will always be small, focused, special-purpose
-languages dedicated to a specific problem domain that are simply more
-convenient for certain kinds of problems. Perl tries to be all things
-to all people, but nothing special to anyone. Examples of specialized
-languages that come to mind include prolog and matlab.
-
-=head2 When shouldn't I program in Perl?
-
-When your manager forbids it--but do consider replacing them :-).
-
-Actually, one good reason is when you already have an existing
-application written in another language that's all done (and done
-well), or you have an application language specifically designed for a
-certain task (e.g. prolog, make).
-
-For various reasons, Perl is probably not well-suited for real-time
-embedded systems, low-level operating systems development work like
-device drivers or context-switching code, complex multi-threaded
-shared-memory applications, or extremely large applications. You'll
-notice that perl is not itself written in Perl.
-
-Perl remains fundamentally a dynamically typed language, not
-a statically typed one. You certainly won't be chastised if you don't
-trust nuclear-plant or brain-surgery monitoring code to it. And Larry
-will sleep easier, too--Wall Street programs not withstanding. :-)
-
-=head2 What's the difference between "perl" and "Perl"?
-
-One bit. Oh, you weren't talking ASCII? :-) Larry now uses "Perl" to
-signify the language proper and "perl" the implementation of it, i.e.
-the current interpreter. Hence Tom's quip that "Nothing but perl can
-parse Perl."
-
-Before the first edition of I<Programming perl>, people commonly
-referred to the language as "perl", and its name appeared that way in
-the title because it referred to the interpreter. In the book, Randal
-Schwartz capitalised the language's name to make it stand out better
-when typeset. This convention was adopted by the community, and the
-second edition became I<Programming Perl>, using the capitalized
-version of the name to refer to the language.
-
-You may or may not choose to follow this usage. For example,
-parallelism means "awk and perl" and "Python and Perl" look good, while
-"awk and Perl" and "Python and perl" do not. But never write "PERL",
-because perl is not an acronym, apocryphal folklore and post-facto
-expansions notwithstanding.
-
-=head2 Is it a Perl program or a Perl script?
-
-Larry doesn't really care. He says (half in jest) that "a script is
-what you give the actors. A program is what you give the audience."
-
-Originally, a script was a canned sequence of normally interactive
-commands--that is, a chat script. Something like a UUCP or PPP chat
-script or an expect script fits the bill nicely, as do configuration
-scripts run by a program at its start up, such F<.cshrc> or F<.ircrc>,
-for example. Chat scripts were just drivers for existing programs,
-not stand-alone programs in their own right.
-
-A computer scientist will correctly explain that all programs are
-interpreted and that the only question is at what level. But if you
-ask this question of someone who isn't a computer scientist, they might
-tell you that a I<program> has been compiled to physical machine code
-once and can then be run multiple times, whereas a I<script> must be
-translated by a program each time it's used.
-
-Now that "script" and "scripting" are terms that have been seized by
-unscrupulous or unknowing marketeers for their own nefarious purposes,
-they have begun to take on strange and often pejorative meanings,
-like "non serious" or "not real programming". Consequently, some Perl
-programmers prefer to avoid them altogether.
-
-=head2 What is a JAPH?
-
-(contributed by brian d foy)
-
-JAPH stands for "Just another Perl hacker,", which Randal Schwartz used
-to sign email and usenet messages starting in the late 1980s. He
-previously used the phrase with many subjects ("Just another x hacker,"),
-so to distinguish his JAPH, he started to write them as Perl programs:
-
- print "Just another Perl hacker,";
-
-Other people picked up on this and started to write clever or obfuscated
-programs to produce the same output, spinning things quickly out of
-control while still providing hours of amusement for their creators and
-readers.
-
-CPAN has several JAPH programs at http://www.cpan.org/misc/japh .
-
-=head2 Where can I get a list of Larry Wall witticisms?
-
-(contributed by brian d foy)
-
-Google "larry wall quotes"! You might even try the "I feel lucky" button.
-:)
-
-Wikiquote has the witticisms from Larry along with their source,
-including his usenet postings and source code comments.
-
-If you want a plain text file, try
-http://www.cpan.org/misc/lwall-quotes.txt.gz .
-
-=head2 How can I convince others to use Perl?
-
-(contributed by brian d foy)
-
-Appeal to their self interest! If Perl is new (and thus scary) to them,
-find something that Perl can do to solve one of their problems. That
-might mean that Perl either saves them something (time, headaches, money)
-or gives them something (flexibility, power, testability).
-
-In general, the benefit of a language is closely related to the skill of
-the people using that language. If you or your team can be faster,
-better, and stronger through Perl, you'll deliver more value. Remember,
-people often respond better to what they get out of it. If you run
-into resistance, figure out what those people get out of the other
-choice and how Perl might satisfy that requirement.
-
-You don't have to worry about finding or paying for Perl; it's freely
-available and several popular operating systems come with Perl. Community
-support in places such as Perlmonks ( http://www.perlmonks.com )
-and the various Perl mailing lists ( http://lists.perl.org ) means that
-you can usually get quick answers to your problems.
-
-Finally, keep in mind that Perl might not be the right tool for every
-job. You're a much better advocate if your claims are reasonable and
-grounded in reality. Dogmatically advocating anything tends to make
-people discount your message. Be honest about possible disadvantages
-to your choice of Perl since any choice has trade-offs.
-
-You might find these links useful:
-
-=over 4
-
-=item * http://perltraining.com.au/whyperl.html
-
-=item * http://www.perl.org/advocacy/whyperl.html
-
-=back
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
-other authors as noted. All rights reserved.
-
-This documentation is free; you can redistribute it and/or modify it
-under the same terms as Perl itself.
-
-Irrespective of its distribution, all code examples here are in the public
-domain. You are permitted and encouraged to use this code and any
-derivatives thereof in your own programs for fun or for profit as you
-see fit. A simple comment in the code giving credit to the FAQ would
-be courteous but is not required.
Deleted: trunk/contrib/perl/pod/perlfaq2.pod
===================================================================
--- trunk/contrib/perl/pod/perlfaq2.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlfaq2.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,377 +0,0 @@
-=head1 NAME
-
-perlfaq2 - Obtaining and Learning about Perl
-
-=head1 DESCRIPTION
-
-This section of the FAQ answers questions about where to find
-source and documentation for Perl, support, and
-related matters.
-
-=head2 What machines support perl? Where do I get it?
-
-The standard release of perl (the one maintained by the perl
-development team) is distributed only in source code form. You
-can find the latest releases at http://www.cpan.org/src/README.html .
-
-Perl builds and runs on a bewildering number of platforms. Virtually
-all known and current Unix derivatives are supported (perl's native
-platform), as are other systems like VMS, DOS, OS/2, Windows,
-QNX, BeOS, OS X, MPE/iX and the Amiga.
-
-Binary distributions for some proprietary platforms can be found
-http://www.cpan.org/ports/ directory. Because these are not part of
-the standard distribution, they may and in fact do differ from the
-base perl port in a variety of ways. You'll have to check their
-respective release notes to see just what the differences are. These
-differences can be either positive (e.g. extensions for the features
-of the particular platform that are not supported in the source
-release of perl) or negative (e.g. might be based upon a less current
-source release of perl).
-
-=head2 How can I get a binary version of perl?
-
-(contributed by brian d foy)
-
-ActiveState: Windows, Linux, Mac OS X, Solaris, AIX and HP-UX
-
- http://www.activestate.com/
-
-Sunfreeware.com: Solaris 2.5 to Solaris 10 (SPARC and x86)
-
- http://www.sunfreeware.com/
-
-Strawberry Perl: Windows, Perl 5.8.8 and 5.10.0
-
- http://www.strawberryperl.com
-
-IndigoPerl: Windows
-
- http://indigostar.com/
-
-=head2 I don't have a C compiler. How can I build my own Perl interpreter?
-
-Since you don't have a C compiler, you're doomed and your vendor
-should be sacrificed to the Sun gods. But that doesn't help you.
-
-What you need to do is get a binary version of C<gcc> for your system
-first. Consult the Usenet FAQs for your operating system for
-information on where to get such a binary version.
-
-You might look around the net for a pre-built binary of Perl (or a
-C compiler!) that meets your needs, though:
-
-For Windows, Vanilla Perl ( http://vanillaperl.com/ ) and Strawberry Perl
-( http://strawberryperl.com/ ) come with a
-bundled C compiler. ActivePerl is a pre-compiled version of Perl
-ready-to-use.
-
-For Sun systems, SunFreeware.com provides binaries of most popular
-applications, including compilers and Perl.
-
-=head2 I copied the perl binary from one machine to another, but scripts don't work.
-
-That's probably because you forgot libraries, or library paths differ.
-You really should build the whole distribution on the machine it will
-eventually live on, and then type C<make install>. Most other
-approaches are doomed to failure.
-
-One simple way to check that things are in the right place is to print out
-the hard-coded C<@INC> that perl looks through for libraries:
-
- % perl -le 'print for @INC'
-
-If this command lists any paths that don't exist on your system, then you
-may need to move the appropriate libraries to these locations, or create
-symbolic links, aliases, or shortcuts appropriately. C<@INC> is also printed as
-part of the output of
-
- % perl -V
-
-You might also want to check out
-L<perlfaq8/"How do I keep my own module/library directory?">.
-
-=head2 I grabbed the sources and tried to compile but gdbm/dynamic loading/malloc/linking/... failed. How do I make it work?
-
-Read the F<INSTALL> file, which is part of the source distribution.
-It describes in detail how to cope with most idiosyncrasies that the
-C<Configure> script can't work around for any given system or
-architecture.
-
-=head2 What modules and extensions are available for Perl? What is CPAN? What does CPAN/src/... mean?
-
-CPAN stands for Comprehensive Perl Archive Network, a multi-gigabyte
-archive replicated on hundreds of machines all over the world. CPAN
-contains source code, non-native ports, documentation, scripts, and
-many third-party modules and extensions, designed for everything from
-commercial database interfaces to keyboard/screen control to web
-walking and CGI scripts. The master web site for CPAN is
-http://www.cpan.org/ and there is the CPAN Multiplexer at
-http://www.cpan.org/CPAN.html which will choose a mirror near you via
-DNS. See http://www.perl.com/CPAN (without a slash at the end) for
-how this process works. Also, http://mirror.cpan.org/ has a nice
-interface to the http://www.cpan.org/MIRRORED.BY mirror directory.
-
-See the CPAN FAQ at http://www.cpan.org/misc/cpan-faq.html for answers
-to the most frequently asked questions about CPAN including how to
-become a mirror.
-
-C<CPAN/path/...> is a naming convention for files available on CPAN
-sites. CPAN indicates the base directory of a CPAN mirror, and the
-rest of the path is the path from that directory to the file. For
-instance, if you're using ftp://ftp.funet.fi/pub/languages/perl/CPAN
-as your CPAN site, the file C<CPAN/misc/japh> is downloadable as
-ftp://ftp.funet.fi/pub/languages/perl/CPAN/misc/japh .
-
-Considering that, as of 2006, there are over ten thousand existing
-modules in the archive, one probably exists to do nearly anything you
-can think of. Current categories under C<CPAN/modules/by-category/>
-include Perl core modules; development support; operating system
-interfaces; networking, devices, and interprocess communication; data
-type utilities; database interfaces; user interfaces; interfaces to
-other languages; filenames, file systems, and file locking;
-internationalization and locale; world wide web support; server and
-daemon utilities; archiving and compression; image manipulation; mail
-and news; control flow utilities; filehandle and I/O; Microsoft
-Windows modules; and miscellaneous modules.
-
-See http://www.cpan.org/modules/00modlist.long.html or
-http://search.cpan.org/ for a more complete list of modules by
-category.
-
-CPAN is a free service and is not affiliated with O'Reilly Media.
-
-=head2 Is there an ISO or ANSI certified version of Perl?
-
-Certainly not. Larry expects that he'll be certified before Perl is.
-
-=head2 Where can I get information on Perl?
-
-The complete Perl documentation is available with the Perl distribution.
-If you have Perl installed locally, you probably have the documentation
-installed as well: type C<man perl> if you're on a system resembling Unix.
-This will lead you to other important man pages, including how to set your
-C<$MANPATH>. If you're not on a Unix system, access to the documentation
-will be different; for example, documentation might only be in HTML format. All
-proper perl installations have fully-accessible documentation.
-
-You might also try C<perldoc perl> in case your system doesn't
-have a proper C<man> command, or it's been misinstalled. If that doesn't
-work, try looking in C</usr/local/lib/perl5/pod> for documentation.
-
-If all else fails, consult http://perldoc.perl.org/ which has the
-complete documentation in HTML and PDF format.
-
-Many good books have been written about Perl--see the section later in
-L<perlfaq2> for more details.
-
-Tutorial documents included in current or upcoming Perl releases
-include L<perltoot> for objects or L<perlboot> for a beginner's
-approach to objects, L<perlopentut> for file opening semantics,
-L<perlreftut> for managing references, L<perlretut> for regular
-expressions, L<perlthrtut> for threads, L<perldebtut> for debugging,
-and L<perlxstut> for linking C and Perl together. There may be more
-by the time you read this. These URLs might also be useful:
-
- http://perldoc.perl.org/
- http://bookmarks.cpan.org/search.cgi?cat=Training%2FTutorials
-
-=head2 What are the Perl newsgroups on Usenet? Where do I post questions?
-
-Several groups devoted to the Perl language are on Usenet:
-
- comp.lang.perl.announce Moderated announcement group
- comp.lang.perl.misc High traffic general Perl discussion
- comp.lang.perl.moderated Moderated discussion group
- comp.lang.perl.modules Use and development of Perl modules
- comp.lang.perl.tk Using Tk (and X) from Perl
-
-Some years ago, comp.lang.perl was divided into those groups, and
-comp.lang.perl itself officially removed. While that group may still
-be found on some news servers, it is unwise to use it, because
-postings there will not appear on news servers which honour the
-official list of group names. Use comp.lang.perl.misc for topics
-which do not have a more-appropriate specific group.
-
-There is also a Usenet gateway to Perl mailing lists sponsored by
-perl.org at nntp://nntp.perl.org , a web interface to the same lists
-at http://nntp.perl.org/group/ and these lists are also available
-under the C<perl.*> hierarchy at http://groups.google.com . Other
-groups are listed at http://lists.perl.org/ ( also known as
-http://lists.cpan.org/ ).
-
-A nice place to ask questions is the PerlMonks site,
-http://www.perlmonks.org/ , or the Perl Beginners mailing list
-http://lists.perl.org/showlist.cgi?name=beginners .
-
-Note that none of the above are supposed to write your code for you:
-asking questions about particular problems or general advice is fine,
-but asking someone to write your code for free is not very cool.
-
-=head2 Where should I post source code?
-
-You should post source code to whichever group is most appropriate, but
-feel free to cross-post to comp.lang.perl.misc. If you want to cross-post
-to alt.sources, please make sure it follows their posting standards,
-including setting the Followup-To header line to NOT include alt.sources;
-see their FAQ ( http://www.faqs.org/faqs/alt-sources-intro/ ) for details.
-
-If you're just looking for software, first use Google
-( http://www.google.com ), Google's Usenet search interface
-( http://groups.google.com ), and CPAN Search ( http://search.cpan.org ).
-This is faster and more productive than just posting a request.
-
-=head2 Perl Books
-
-There are many good books on Perl. See the L<perlbook> documentation or
-( http://books.perl.org ).
-
-=head2 Which magazines have Perl content?
-
-I<The Perl Review> ( http://www.theperlreview.com ) focuses on Perl
-almost completely (although it sometimes sneaks in an article about
-another language). There's also I<$foo Magazin>, a German magazine
-dedicated to Perl, at ( http://www.foo-magazin.de ).
-
-The I<Perl-Zeitung> is a German-speaking magazine for Perl beginners
-(see http://perl-zeitung.at.tf ).
-
-Magazines that frequently carry quality articles on Perl include I<The
-Perl Review> ( http://www.theperlreview.com ), I<Unix Review> (
-http://www.unixreview.com/ ), I<Linux Magazine> (
-http://www.linuxmagazine.com/ ), and Usenix's newsletter/magazine to
-its members, I<login:> ( http://www.usenix.org/ ).
-
-The Perl columns of Randal L. Schwartz are available on the web at
-http://www.stonehenge.com/merlyn/WebTechniques/ ,
-http://www.stonehenge.com/merlyn/UnixReview/ , and
-http://www.stonehenge.com/merlyn/LinuxMag/ .
-
-The first (and for a long time, only) periodical devoted to All Things
-Perl, I<The Perl Journal> contains tutorials, demonstrations, case
-studies, announcements, contests, and much more. I<TPJ> has columns
-on web development, databases, Win32 Perl, graphical programming,
-regular expressions, and networking, and sponsors the Obfuscated Perl
-Contest and the Perl Poetry Contests. Beginning in November 2002, I<TPJ>
-moved to a reader-supported monthly e-zine format in which subscribers
-can download issues as PDF documents. In 2006, I<TPJ> merged with Dr.
-Dobbs Journal (online edition). To read old I<TPJ> articles, see
-http://www.ddj.com/ or brian d foy's index of online TPJ content
-( http://www.perlmonks.org/index.pl?node_id=711609 ).
-
-=head2 What mailing lists are there for Perl?
-
-Most of the major modules (C<Tk>, C<CGI>, C<libwww-perl>) have their own
-mailing lists. Consult the documentation that came with the module for
-subscription information.
-
-A comprehensive list of Perl-related mailing lists can be found at:
-
- http://lists.perl.org/
-
-=head2 Where are the archives for comp.lang.perl.misc?
-
-The Google search engine now carries archived and searchable newsgroup
-content.
-
-http://groups.google.com/group/comp.lang.perl.misc/topics
-
-If you have a question, you can be sure someone has already asked the
-same question at some point on c.l.p.m. It requires some time and patience
-to sift through all the content but often you will find the answer you
-seek.
-
-=head2 Where can I buy a commercial version of perl?
-
-In a real sense, perl already I<is> commercial software: it has a license
-that you can grab and carefully read to your manager. It is distributed
-in releases and comes in well-defined packages. There is a very large
-user community and an extensive literature. The comp.lang.perl.*
-newsgroups and several of the mailing lists provide free answers to your
-questions in near real-time. Perl has traditionally been supported by
-Larry, scores of software designers and developers, and myriad
-programmers, all working for free to create a useful thing to make life
-better for everyone.
-
-However, these answers may not suffice for managers who require a
-purchase order from a company whom they can sue should anything go awry.
-Or maybe they need very serious hand-holding and contractual obligations.
-Shrink-wrapped CDs with perl on them are available from several sources if
-that will help. For example, many Perl books include a distribution of perl,
-as do the O'Reilly Perl Resource Kits (in both the Unix flavor
-and in the proprietary Microsoft flavor); the free Unix distributions
-also all come with perl.
-
-=head2 Where do I send bug reports?
-
-(contributed by brian d foy)
-
-First, ensure that you've found an actual bug. Second, ensure you've
-found an actual bug.
-
-If you've found a bug with the perl interpreter or one of the modules
-in the standard library (those that come with Perl), you can use the
-L<perlbug> utility that comes with Perl (>= 5.004). It collects
-information about your installation to include with your message, then
-sends the message to the right place.
-
-To determine if a module came with your version of Perl, you can
-use the C<Module::CoreList> module. It has the information about
-the modules (with their versions) included with each release of Perl.
-
-If C<Module::CoreList> is not installed on your system, check out
-http://perlpunks.de/corelist .
-
-Every CPAN module has a bug tracker set up in RT, http://rt.cpan.org .
-You can submit bugs to RT either through its web interface or by
-email. To email a bug report, send it to
-bug-E<lt>distribution-nameE<gt>@rt.cpan.org . For example, if you
-wanted to report a bug in C<Business::ISBN>, you could send a message to
-bug-Business-ISBN at rt.cpan.org .
-
-Some modules might have special reporting requirements, such as a
-Sourceforge or Google Code tracking system, so you should check the
-module documentation too.
-
-=head2 What is perl.com? Perl Mongers? pm.org? perl.org? cpan.org?
-
-Perl.com ( http://www.perl.com/ ) used to be part of the O'Reilly
-Network, a subsidiary of O'Reilly Media. Although it retains most of
-the original content from its O'Reilly Network, it is now hosted by
-The Perl Foundation.
-
-The Perl Foundation is an advocacy organization for the Perl language
-which maintains the web site ( http://www.perl.org/ ) as a general
-advocacy site for the Perl language. It uses the domain to provide
-general support services to the Perl community, including the hosting
-of mailing lists, web sites, and other services. There are also many
-other sub-domains for special topics like learning Perl, Perl news,
-jobs in Perl, such as:
-
- http://www.perl.org/
- http://learn.perl.org/
- http://jobs.perl.org/
- http://lists.perl.org/
-
-Perl Mongers uses the pm.org domain for services related to Perl user
-groups, including the hosting of mailing lists and web sites. See the
-Perl Mongers website ( http://www.pm.org/ ) for more information about
-joining, starting, or requesting services for a Perl user group.
-
-CPAN, or the Comprehensive Perl Archive Network (
-http://www.cpan.org/ ), is a replicated, worldwide repository of Perl
-software. See I<What is CPAN?> in L<perlfaq2>.
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
-other authors as noted. All rights reserved.
-
-This documentation is free; you can redistribute it and/or modify it
-under the same terms as Perl itself.
-
-Irrespective of its distribution, all code examples here are in the public
-domain. You are permitted and encouraged to use this code and any
-derivatives thereof in your own programs for fun or for profit as you
-see fit. A simple comment in the code giving credit to the FAQ would
-be courteous but is not required.
Deleted: trunk/contrib/perl/pod/perlfaq3.pod
===================================================================
--- trunk/contrib/perl/pod/perlfaq3.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlfaq3.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1098 +0,0 @@
-=head1 NAME
-
-perlfaq3 - Programming Tools
-
-=head1 DESCRIPTION
-
-This section of the FAQ answers questions related to programmer tools
-and programming support.
-
-=head2 How do I do (anything)?
-
-Have you looked at CPAN (see L<perlfaq2>)? The chances are that
-someone has already written a module that can solve your problem.
-Have you read the appropriate manpages? Here's a brief index:
-
- Basics perldata, perlvar, perlsyn, perlop, perlsub
- Execution perlrun, perldebug
- Functions perlfunc
- Objects perlref, perlmod, perlobj, perltie
- Data Structures perlref, perllol, perldsc
- Modules perlmod, perlmodlib, perlsub
- Regexes perlre, perlfunc, perlop, perllocale
- Moving to perl5 perltrap, perl
- Linking w/C perlxstut, perlxs, perlcall, perlguts, perlembed
- Various http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz
- (not a man-page but still useful, a collection
- of various essays on Perl techniques)
-
-A crude table of contents for the Perl manpage set is found in L<perltoc>.
-
-=head2 How can I use Perl interactively?
-
-The typical approach uses the Perl debugger, described in the
-C<perldebug(1)> manpage, on an "empty" program, like this:
-
- perl -de 42
-
-Now just type in any legal Perl code, and it will be immediately
-evaluated. You can also examine the symbol table, get stack
-backtraces, check variable values, set breakpoints, and other
-operations typically found in symbolic debuggers.
-
-=head2 Is there a Perl shell?
-
-The C<psh> (Perl sh) is currently at version 1.8. The Perl Shell is a shell
-that combines the interactive nature of a Unix shell with the power of
-Perl. The goal is a full-featured shell that behaves as expected for
-normal shell activity and uses Perl syntax and functionality for
-control-flow statements and other things. You can get C<psh> at
-http://sourceforge.net/projects/psh/ .
-
-C<Zoidberg> is a similar project and provides a shell written in perl,
-configured in perl and operated in perl. It is intended as a login shell
-and development environment. It can be found at
-http://pardus-larus.student.utwente.nl/~pardus/projects/zoidberg/
-or your local CPAN mirror.
-
-The C<Shell.pm> module (distributed with Perl) makes Perl try commands
-which aren't part of the Perl language as shell commands. C<perlsh> from
-the source distribution is simplistic and uninteresting, but may still
-be what you want.
-
-=head2 How do I find which modules are installed on my system?
-
-From the command line, you can use the C<cpan> command's C<-l> switch:
-
- $ cpan -l
-
-You can also use C<cpan>'s C<-a> switch to create an autobundle file
-that C<CPAN.pm> understands and can use to re-install every module:
-
- $ cpan -a
-
-Inside a Perl program, you can use the C<ExtUtils::Installed> module to
-show all installed distributions, although it can take awhile to do
-its magic. The standard library which comes with Perl just shows up
-as "Perl" (although you can get those with C<Module::CoreList>).
-
- use ExtUtils::Installed;
-
- my $inst = ExtUtils::Installed->new();
- my @modules = $inst->modules();
-
-If you want a list of all of the Perl module filenames, you
-can use C<File::Find::Rule>:
-
- use File::Find::Rule;
-
- my @files = File::Find::Rule->
- extras({follow => 1})->
- file()->
- name( '*.pm' )->
- in( @INC )
- ;
-
-If you do not have that module, you can do the same thing
-with C<File::Find> which is part of the standard library:
-
- use File::Find;
- my @files;
-
- find(
- {
- wanted => sub {
- push @files, $File::Find::fullname
- if -f $File::Find::fullname && /\.pm$/
- },
- follow => 1,
- follow_skip => 2,
- },
- @INC
- );
-
- print join "\n", @files;
-
-If you simply need to check quickly to see if a module is
-available, you can check for its documentation. If you can
-read the documentation the module is most likely installed.
-If you cannot read the documentation, the module might not
-have any (in rare cases):
-
- $ perldoc Module::Name
-
-You can also try to include the module in a one-liner to see if
-perl finds it:
-
- $ perl -MModule::Name -e1
-
-=head2 How do I debug my Perl programs?
-
-(contributed by brian d foy)
-
-Before you do anything else, you can help yourself by ensuring that
-you let Perl tell you about problem areas in your code. By turning
-on warnings and strictures, you can head off many problems before
-they get too big. You can find out more about these in L<strict>
-and L<warnings>.
-
- #!/usr/bin/perl
- use strict;
- use warnings;
-
-Beyond that, the simplest debugger is the C<print> function. Use it
-to look at values as you run your program:
-
- print STDERR "The value is [$value]\n";
-
-The C<Data::Dumper> module can pretty-print Perl data structures:
-
- use Data::Dumper qw( Dumper );
- print STDERR "The hash is " . Dumper( \%hash ) . "\n";
-
-Perl comes with an interactive debugger, which you can start with the
-C<-d> switch. It's fully explained in L<perldebug>.
-
-If you'd like a graphical user interface and you have C<Tk>, you can use
-C<ptkdb>. It's on CPAN and available for free.
-
-If you need something much more sophisticated and controllable, Leon
-Brocard's C<Devel::ebug> (which you can call with the C<-D> switch as C<-Debug>)
-gives you the programmatic hooks into everything you need to write your
-own (without too much pain and suffering).
-
-You can also use a commercial debugger such as Affrus (Mac OS X), Komodo
-from Activestate (Windows and Mac OS X), or EPIC (most platforms).
-
-=head2 How do I profile my Perl programs?
-
-(contributed by brian d foy, updated Fri Jul 25 12:22:26 PDT 2008)
-
-The C<Devel> namespace has several modules which you can use to
-profile your Perl programs. The C<Devel::DProf> module comes with Perl
-and you can invoke it with the C<-d> switch:
-
- perl -d:DProf program.pl
-
-After running your program under C<DProf>, you'll get a F<tmon.out> file
-with the profile data. To look at the data, you can turn it into a
-human-readable report with the C<dprofpp> program that comes with
-C<Devel::DProf>.
-
- dprofpp
-
-You can also do the profiling and reporting in one step with the C<-p>
-switch to C<dprofpp>:
-
- dprofpp -p program.pl
-
-The C<Devel::NYTProf> (New York Times Profiler) does both statement
-and subroutine profiling. It's available from CPAN and you also invoke
-it with the C<-d> switch:
-
- perl -d:NYTProf some_perl.pl
-
-Like C<DProf>, it creates a database of the profile information that you
-can turn into reports. The C<nytprofhtml> command turns the data into
-an HTML report similar to the C<Devel::Cover> report:
-
- nytprofhtml
-
-CPAN has several other profilers that you can invoke in the same
-fashion. You might also be interested in using the C<Benchmark> to
-measure and compare code snippets.
-
-You can read more about profiling in I<Programming Perl>, chapter 20,
-or I<Mastering Perl>, chapter 5.
-
-L<perldebguts> documents creating a custom debugger if you need to
-create a special sort of profiler. brian d foy describes the process
-in I<The Perl Journal>, "Creating a Perl Debugger",
-http://www.ddj.com/184404522 , and "Profiling in Perl"
-http://www.ddj.com/184404580 .
-
-Perl.com has two interesting articles on profiling: "Profiling Perl",
-by Simon Cozens, http://www.perl.com/lpt/a/850 and "Debugging and
-Profiling mod_perl Applications", by Frank Wiles,
-http://www.perl.com/pub/a/2006/02/09/debug_mod_perl.html .
-
-Randal L. Schwartz writes about profiling in "Speeding up Your Perl
-Programs" for I<Unix Review>,
-http://www.stonehenge.com/merlyn/UnixReview/col49.html , and "Profiling
-in Template Toolkit via Overriding" for I<Linux Magazine>,
-http://www.stonehenge.com/merlyn/LinuxMag/col75.html .
-
-=head2 How do I cross-reference my Perl programs?
-
-The C<B::Xref> module can be used to generate cross-reference reports
-for Perl programs.
-
- perl -MO=Xref[,OPTIONS] scriptname.plx
-
-=head2 Is there a pretty-printer (formatter) for Perl?
-
-C<Perltidy> is a Perl script which indents and reformats Perl scripts
-to make them easier to read by trying to follow the rules of the
-L<perlstyle>. If you write Perl scripts, or spend much time reading
-them, you will probably find it useful. It is available at
-http://perltidy.sourceforge.net .
-
-Of course, if you simply follow the guidelines in L<perlstyle>,
-you shouldn't need to reformat. The habit of formatting your code
-as you write it will help prevent bugs. Your editor can and should
-help you with this. The perl-mode or newer cperl-mode for emacs
-can provide remarkable amounts of help with most (but not all)
-code, and even less programmable editors can provide significant
-assistance. Tom Christiansen and many other VI users swear by
-the following settings in vi and its clones:
-
- set ai sw=4
- map! ^O {^M}^[O^T
-
-Put that in your F<.exrc> file (replacing the caret characters
-with control characters) and away you go. In insert mode, ^T is
-for indenting, ^D is for undenting, and ^O is for blockdenting--as
-it were. A more complete example, with comments, can be found at
-http://www.cpan.org/authors/id/TOMC/scripts/toms.exrc.gz
-
-The a2ps http://www-inf.enst.fr/%7Edemaille/a2ps/black+white.ps.gz does
-lots of things related to generating nicely printed output of
-documents.
-
-=head2 Is there a ctags for Perl?
-
-(contributed by brian d foy)
-
-Ctags uses an index to quickly find things in source code, and many
-popular editors support ctags for several different languages,
-including Perl.
-
-Exuberant ctags supports Perl: http://ctags.sourceforge.net/
-
-You might also try pltags: http://www.mscha.com/pltags.zip
-
-=head2 Is there an IDE or Windows Perl Editor?
-
-Perl programs are just plain text, so any editor will do.
-
-If you're on Unix, you already have an IDE--Unix itself. The Unix
-philosophy is the philosophy of several small tools that each do one
-thing and do it well. It's like a carpenter's toolbox.
-
-If you want an IDE, check the following (in alphabetical order, not
-order of preference):
-
-=over 4
-
-=item Eclipse
-
-http://e-p-i-c.sf.net/
-
-The Eclipse Perl Integration Project integrates Perl
-editing/debugging with Eclipse.
-
-=item Enginsite
-
-http://www.enginsite.com/
-
-Perl Editor by EngInSite is a complete integrated development
-environment (IDE) for creating, testing, and debugging Perl scripts;
-the tool runs on Windows 9x/NT/2000/XP or later.
-
-=item Komodo
-
-http://www.ActiveState.com/Products/Komodo/
-
-ActiveState's cross-platform (as of October 2004, that's Windows, Linux,
-and Solaris), multi-language IDE has Perl support, including a regular expression
-debugger and remote debugging.
-
-=item Notepad++
-
-http://notepad-plus.sourceforge.net/
-
-=item Open Perl IDE
-
-http://open-perl-ide.sourceforge.net/
-
-Open Perl IDE is an integrated development environment for writing
-and debugging Perl scripts with ActiveState's ActivePerl distribution
-under Windows 95/98/NT/2000.
-
-=item OptiPerl
-
-http://www.optiperl.com/
-
-OptiPerl is a Windows IDE with simulated CGI environment, including
-debugger and syntax-highlighting editor.
-
-=item Padre
-
-http://padre.perlide.org/
-
-Padre is cross-platform IDE for Perl written in Perl using wxWidgets to provide
-a native look and feel. It's open source under the Artistic License.
-
-=item PerlBuilder
-
-http://www.solutionsoft.com/perl.htm
-
-PerlBuilder is an integrated development environment for Windows that
-supports Perl development.
-
-=item visiPerl+
-
-http://helpconsulting.net/visiperl/
-
-From Help Consulting, for Windows.
-
-=item Visual Perl
-
-http://www.activestate.com/Products/Visual_Perl/
-
-Visual Perl is a Visual Studio.NET plug-in from ActiveState.
-
-=item Zeus
-
-http://www.zeusedit.com/lookmain.html
-
-Zeus for Window is another Win32 multi-language editor/IDE
-that comes with support for Perl.
-
-=back
-
-For editors: if you're on Unix you probably have vi or a vi clone
-already, and possibly an emacs too, so you may not need to download
-anything. In any emacs the cperl-mode (M-x cperl-mode) gives you
-perhaps the best available Perl editing mode in any editor.
-
-If you are using Windows, you can use any editor that lets you work
-with plain text, such as NotePad or WordPad. Word processors, such as
-Microsoft Word or WordPerfect, typically do not work since they insert
-all sorts of behind-the-scenes information, although some allow you to
-save files as "Text Only". You can also download text editors designed
-specifically for programming, such as Textpad (
-http://www.textpad.com/ ) and UltraEdit ( http://www.ultraedit.com/ ),
-among others.
-
-If you are using MacOS, the same concerns apply. MacPerl (for Classic
-environments) comes with a simple editor. Popular external editors are
-BBEdit ( http://www.bbedit.com/ ) or Alpha (
-http://www.his.com/~jguyer/Alpha/Alpha8.html ). MacOS X users can use
-Unix editors as well.
-
-=over 4
-
-=item GNU Emacs
-
-http://www.gnu.org/software/emacs/windows/ntemacs.html
-
-=item MicroEMACS
-
-http://www.microemacs.de/
-
-=item XEmacs
-
-http://www.xemacs.org/Download/index.html
-
-=item Jed
-
-http://space.mit.edu/~davis/jed/
-
-=back
-
-or a vi clone such as
-
-=over 4
-
-=item Elvis
-
-ftp://ftp.cs.pdx.edu/pub/elvis/ http://www.fh-wedel.de/elvis/
-
-=item Vile
-
-http://dickey.his.com/vile/vile.html
-
-=item Vim
-
-http://www.vim.org/
-
-=back
-
-For vi lovers in general, Windows or elsewhere:
-
- http://www.thomer.com/thomer/vi/vi.html
-
-nvi ( http://www.bostic.com/vi/ , available from CPAN in src/misc/) is
-yet another vi clone, unfortunately not available for Windows, but in
-Unix platforms you might be interested in trying it out, firstly because
-strictly speaking it is not a vi clone, it is the real vi, or the new
-incarnation of it, and secondly because you can embed Perl inside it
-to use Perl as the scripting language. nvi is not alone in this,
-though: at least also vim and vile offer an embedded Perl.
-
-The following are Win32 multilanguage editor/IDEs that support Perl:
-
-=over 4
-
-=item Codewright
-
-http://www.borland.com/codewright/
-
-=item MultiEdit
-
-http://www.MultiEdit.com/
-
-=item SlickEdit
-
-http://www.slickedit.com/
-
-=item ConTEXT
-
-http://www.contexteditor.org/
-
-=back
-
-There is also a toyedit Text widget based editor written in Perl
-that is distributed with the Tk module on CPAN. The ptkdb
-( http://ptkdb.sourceforge.net/ ) is a Perl/Tk-based debugger that
-acts as a development environment of sorts. Perl Composer
-( http://perlcomposer.sourceforge.net/ ) is an IDE for Perl/Tk
-GUI creation.
-
-In addition to an editor/IDE you might be interested in a more
-powerful shell environment for Win32. Your options include
-
-=over 4
-
-=item Bash
-
-from the Cygwin package ( http://sources.redhat.com/cygwin/ )
-
-=item Ksh
-
-from the MKS Toolkit ( http://www.mkssoftware.com/ ), or the Bourne shell of
-the U/WIN environment ( http://www.research.att.com/sw/tools/uwin/ )
-
-=item Tcsh
-
-ftp://ftp.astron.com/pub/tcsh/ , see also
-http://www.primate.wisc.edu/software/csh-tcsh-book/
-
-=item Zsh
-
-http://www.zsh.org/
-
-=back
-
-MKS and U/WIN are commercial (U/WIN is free for educational and
-research purposes), Cygwin is covered by the GNU General Public
-License (but that shouldn't matter for Perl use). The Cygwin, MKS,
-and U/WIN all contain (in addition to the shells) a comprehensive set
-of standard Unix toolkit utilities.
-
-If you're transferring text files between Unix and Windows using FTP
-be sure to transfer them in ASCII mode so the ends of lines are
-appropriately converted.
-
-On Mac OS the MacPerl Application comes with a simple 32k text editor
-that behaves like a rudimentary IDE. In contrast to the MacPerl Application
-the MPW Perl tool can make use of the MPW Shell itself as an editor (with
-no 32k limit).
-
-=over 4
-
-=item Affrus
-
-is a full Perl development environment with full debugger support
-( http://www.latenightsw.com ).
-
-=item Alpha
-
-is an editor, written and extensible in Tcl, that nonetheless has
-built-in support for several popular markup and programming languages,
-including Perl and HTML ( http://www.his.com/~jguyer/Alpha/Alpha8.html ).
-
-=item BBEdit and BBEdit Lite
-
-are text editors for Mac OS that have a Perl sensitivity mode
-( http://web.barebones.com/ ).
-
-=back
-
-=head2 Where can I get Perl macros for vi?
-
-For a complete version of Tom Christiansen's vi configuration file,
-see http://www.cpan.org/authors/Tom_Christiansen/scripts/toms.exrc.gz ,
-the standard benchmark file for vi emulators. The file runs best with nvi,
-the current version of vi out of Berkeley, which incidentally can be built
-with an embedded Perl interpreter--see http://www.cpan.org/src/misc/ .
-
-=head2 Where can I get perl-mode or cperl-mode for emacs?
-X<emacs>
-
-Since Emacs version 19 patchlevel 22 or so, there have been both a
-perl-mode.el and support for the Perl debugger built in. These should
-come with the standard Emacs 19 distribution.
-
-Note that the perl-mode of emacs will have fits with C<"main'foo">
-(single quote), and mess up the indentation and highlighting. You
-are probably using C<"main::foo"> in new Perl code anyway, so this
-shouldn't be an issue.
-
-For CPerlMode, see http://www.emacswiki.org/cgi-bin/wiki/CPerlMode
-
-=head2 How can I use curses with Perl?
-
-The Curses module from CPAN provides a dynamically loadable object
-module interface to a curses library. A small demo can be found at the
-directory http://www.cpan.org/authors/Tom_Christiansen/scripts/rep.gz ;
-this program repeats a command and updates the screen as needed, rendering
-B<rep ps axu> similar to B<top>.
-
-=head2 How can I write a GUI (X, Tk, Gtk, etc.) in Perl?
-X<GUI> X<Tk> X<Wx> X<WxWidgets> X<Gtk> X<Gtk2> X<CamelBones> X<Qt>
-
-(contributed by Ben Morrow)
-
-There are a number of modules which let you write GUIs in Perl. Most
-GUI toolkits have a perl interface: an incomplete list follows.
-
-=over 4
-
-=item Tk
-
-This works under Unix and Windows, and the current version doesn't
-look half as bad under Windows as it used to. Some of the gui elements
-still don't 'feel' quite right, though. The interface is very natural
-and 'perlish', making it easy to use in small scripts that just need a
-simple gui. It hasn't been updated in a while.
-
-=item Wx
-
-This is a Perl binding for the cross-platform wxWidgets toolkit
-( http://www.wxwidgets.org ). It works under Unix, Win32 and Mac OS X,
-using native widgets (Gtk under Unix). The interface follows the C++
-interface closely, but the documentation is a little sparse for someone
-who doesn't know the library, mostly just referring you to the C++
-documentation.
-
-=item Gtk and Gtk2
-
-These are Perl bindings for the Gtk toolkit ( http://www.gtk.org ). The
-interface changed significantly between versions 1 and 2 so they have
-separate Perl modules. It runs under Unix, Win32 and Mac OS X (currently
-it requires an X server on Mac OS, but a 'native' port is underway), and
-the widgets look the same on every platform: i.e., they don't match the
-native widgets. As with Wx, the Perl bindings follow the C API closely,
-and the documentation requires you to read the C documentation to
-understand it.
-
-=item Win32::GUI
-
-This provides access to most of the Win32 GUI widgets from Perl.
-Obviously, it only runs under Win32, and uses native widgets. The Perl
-interface doesn't really follow the C interface: it's been made more
-Perlish, and the documentation is pretty good. More advanced stuff may
-require familiarity with the C Win32 APIs, or reference to MSDN.
-
-=item CamelBones
-
-CamelBones ( http://camelbones.sourceforge.net ) is a Perl interface to
-Mac OS X's Cocoa GUI toolkit, and as such can be used to produce native
-GUIs on Mac OS X. It's not on CPAN, as it requires frameworks that
-CPAN.pm doesn't know how to install, but installation is via the
-standard OSX package installer. The Perl API is, again, very close to
-the ObjC API it's wrapping, and the documentation just tells you how to
-translate from one to the other.
-
-=item Qt
-
-There is a Perl interface to TrollTech's Qt toolkit, but it does not
-appear to be maintained.
-
-=item Athena
-
-Sx is an interface to the Athena widget set which comes with X, but
-again it appears not to be much used nowadays.
-
-=back
-
-=head2 How can I make my Perl program run faster?
-
-The best way to do this is to come up with a better algorithm. This
-can often make a dramatic difference. Jon Bentley's book
-I<Programming Pearls> (that's not a misspelling!) has some good tips
-on optimization, too. Advice on benchmarking boils down to: benchmark
-and profile to make sure you're optimizing the right part, look for
-better algorithms instead of microtuning your code, and when all else
-fails consider just buying faster hardware. You will probably want to
-read the answer to the earlier question "How do I profile my Perl
-programs?" if you haven't done so already.
-
-A different approach is to autoload seldom-used Perl code. See the
-AutoSplit and AutoLoader modules in the standard distribution for
-that. Or you could locate the bottleneck and think about writing just
-that part in C, the way we used to take bottlenecks in C code and
-write them in assembler. Similar to rewriting in C, modules that have
-critical sections can be written in C (for instance, the PDL module
-from CPAN).
-
-If you're currently linking your perl executable to a shared
-I<libc.so>, you can often gain a 10-25% performance benefit by
-rebuilding it to link with a static libc.a instead. This will make a
-bigger perl executable, but your Perl programs (and programmers) may
-thank you for it. See the F<INSTALL> file in the source distribution
-for more information.
-
-The undump program was an ancient attempt to speed up Perl program by
-storing the already-compiled form to disk. This is no longer a viable
-option, as it only worked on a few architectures, and wasn't a good
-solution anyway.
-
-=head2 How can I make my Perl program take less memory?
-
-When it comes to time-space tradeoffs, Perl nearly always prefers to
-throw memory at a problem. Scalars in Perl use more memory than
-strings in C, arrays take more than that, and hashes use even more. While
-there's still a lot to be done, recent releases have been addressing
-these issues. For example, as of 5.004, duplicate hash keys are
-shared amongst all hashes using them, so require no reallocation.
-
-In some cases, using substr() or vec() to simulate arrays can be
-highly beneficial. For example, an array of a thousand booleans will
-take at least 20,000 bytes of space, but it can be turned into one
-125-byte bit vector--a considerable memory savings. The standard
-Tie::SubstrHash module can also help for certain types of data
-structure. If you're working with specialist data structures
-(matrices, for instance) modules that implement these in C may use
-less memory than equivalent Perl modules.
-
-Another thing to try is learning whether your Perl was compiled with
-the system malloc or with Perl's builtin malloc. Whichever one it
-is, try using the other one and see whether this makes a difference.
-Information about malloc is in the F<INSTALL> file in the source
-distribution. You can find out whether you are using perl's malloc by
-typing C<perl -V:usemymalloc>.
-
-Of course, the best way to save memory is to not do anything to waste
-it in the first place. Good programming practices can go a long way
-toward this:
-
-=over 4
-
-=item * Don't slurp!
-
-Don't read an entire file into memory if you can process it line
-by line. Or more concretely, use a loop like this:
-
- #
- # Good Idea
- #
- while (<FILE>) {
- # ...
- }
-
-instead of this:
-
- #
- # Bad Idea
- #
- @data = <FILE>;
- foreach (@data) {
- # ...
- }
-
-When the files you're processing are small, it doesn't much matter which
-way you do it, but it makes a huge difference when they start getting
-larger.
-
-=item * Use map and grep selectively
-
-Remember that both map and grep expect a LIST argument, so doing this:
-
- @wanted = grep {/pattern/} <FILE>;
-
-will cause the entire file to be slurped. For large files, it's better
-to loop:
-
- while (<FILE>) {
- push(@wanted, $_) if /pattern/;
- }
-
-=item * Avoid unnecessary quotes and stringification
-
-Don't quote large strings unless absolutely necessary:
-
- my $copy = "$large_string";
-
-makes 2 copies of $large_string (one for $copy and another for the
-quotes), whereas
-
- my $copy = $large_string;
-
-only makes one copy.
-
-Ditto for stringifying large arrays:
-
- {
- local $, = "\n";
- print @big_array;
- }
-
-is much more memory-efficient than either
-
- print join "\n", @big_array;
-
-or
-
- {
- local $" = "\n";
- print "@big_array";
- }
-
-
-=item * Pass by reference
-
-Pass arrays and hashes by reference, not by value. For one thing, it's
-the only way to pass multiple lists or hashes (or both) in a single
-call/return. It also avoids creating a copy of all the contents. This
-requires some judgement, however, because any changes will be propagated
-back to the original data. If you really want to mangle (er, modify) a
-copy, you'll have to sacrifice the memory needed to make one.
-
-=item * Tie large variables to disk
-
-For "big" data stores (i.e. ones that exceed available memory) consider
-using one of the DB modules to store it on disk instead of in RAM. This
-will incur a penalty in access time, but that's probably better than
-causing your hard disk to thrash due to massive swapping.
-
-=back
-
-=head2 Is it safe to return a reference to local or lexical data?
-
-Yes. Perl's garbage collection system takes care of this so
-everything works out right.
-
- sub makeone {
- my @a = ( 1 .. 10 );
- return \@a;
- }
-
- for ( 1 .. 10 ) {
- push @many, makeone();
- }
-
- print $many[4][5], "\n";
-
- print "@many\n";
-
-=head2 How can I free an array or hash so my program shrinks?
-
-(contributed by Michael Carman)
-
-You usually can't. Memory allocated to lexicals (i.e. my() variables)
-cannot be reclaimed or reused even if they go out of scope. It is
-reserved in case the variables come back into scope. Memory allocated
-to global variables can be reused (within your program) by using
-undef() and/or delete().
-
-On most operating systems, memory allocated to a program can never be
-returned to the system. That's why long-running programs sometimes re-
-exec themselves. Some operating systems (notably, systems that use
-mmap(2) for allocating large chunks of memory) can reclaim memory that
-is no longer used, but on such systems, perl must be configured and
-compiled to use the OS's malloc, not perl's.
-
-In general, memory allocation and de-allocation isn't something you can
-or should be worrying about much in Perl.
-
-See also "How can I make my Perl program take less memory?"
-
-=head2 How can I make my CGI script more efficient?
-
-Beyond the normal measures described to make general Perl programs
-faster or smaller, a CGI program has additional issues. It may be run
-several times per second. Given that each time it runs it will need
-to be re-compiled and will often allocate a megabyte or more of system
-memory, this can be a killer. Compiling into C B<isn't going to help
-you> because the process start-up overhead is where the bottleneck is.
-
-There are two popular ways to avoid this overhead. One solution
-involves running the Apache HTTP server (available from
-http://www.apache.org/ ) with either of the mod_perl or mod_fastcgi
-plugin modules.
-
-With mod_perl and the Apache::Registry module (distributed with
-mod_perl), httpd will run with an embedded Perl interpreter which
-pre-compiles your script and then executes it within the same address
-space without forking. The Apache extension also gives Perl access to
-the internal server API, so modules written in Perl can do just about
-anything a module written in C can. For more on mod_perl, see
-http://perl.apache.org/
-
-With the FCGI module (from CPAN) and the mod_fastcgi
-module (available from http://www.fastcgi.com/ ) each of your Perl
-programs becomes a permanent CGI daemon process.
-
-Both of these solutions can have far-reaching effects on your system
-and on the way you write your CGI programs, so investigate them with
-care.
-
-See also
-http://www.cpan.org/modules/by-category/15_World_Wide_Web_HTML_HTTP_CGI/ .
-
-=head2 How can I hide the source for my Perl program?
-
-Delete it. :-) Seriously, there are a number of (mostly
-unsatisfactory) solutions with varying levels of "security".
-
-First of all, however, you I<can't> take away read permission, because
-the source code has to be readable in order to be compiled and
-interpreted. (That doesn't mean that a CGI script's source is
-readable by people on the web, though--only by people with access to
-the filesystem.) So you have to leave the permissions at the socially
-friendly 0755 level.
-
-Some people regard this as a security problem. If your program does
-insecure things and relies on people not knowing how to exploit those
-insecurities, it is not secure. It is often possible for someone to
-determine the insecure things and exploit them without viewing the
-source. Security through obscurity, the name for hiding your bugs
-instead of fixing them, is little security indeed.
-
-You can try using encryption via source filters (Starting from Perl
-5.8 the Filter::Simple and Filter::Util::Call modules are included in
-the standard distribution), but any decent programmer will be able to
-decrypt it. You can try using the byte code compiler and interpreter
-described later in L<perlfaq3>, but the curious might still be able to
-de-compile it. You can try using the native-code compiler described
-later, but crackers might be able to disassemble it. These pose
-varying degrees of difficulty to people wanting to get at your code,
-but none can definitively conceal it (true of every language, not just
-Perl).
-
-It is very easy to recover the source of Perl programs. You simply
-feed the program to the perl interpreter and use the modules in
-the B:: hierarchy. The B::Deparse module should be able to
-defeat most attempts to hide source. Again, this is not
-unique to Perl.
-
-If you're concerned about people profiting from your code, then the
-bottom line is that nothing but a restrictive license will give you
-legal security. License your software and pepper it with threatening
-statements like "This is unpublished proprietary software of XYZ Corp.
-Your access to it does not give you permission to use it blah blah
-blah." We are not lawyers, of course, so you should see a lawyer if
-you want to be sure your license's wording will stand up in court.
-
-=head2 How can I compile my Perl program into byte code or C?
-
-(contributed by brian d foy)
-
-In general, you can't do this. There are some things that may work
-for your situation though. People usually ask this question
-because they want to distribute their works without giving away
-the source code, and most solutions trade disk space for convenience.
-You probably won't see much of a speed increase either, since most
-solutions simply bundle a Perl interpreter in the final product
-(but see L<How can I make my Perl program run faster?>).
-
-The Perl Archive Toolkit ( http://par.perl.org/ ) is Perl's
-analog to Java's JAR. It's freely available and on CPAN (
-http://search.cpan.org/dist/PAR/ ).
-
-There are also some commercial products that may work for you, although
-you have to buy a license for them.
-
-The Perl Dev Kit ( http://www.activestate.com/Products/Perl_Dev_Kit/ )
-from ActiveState can "Turn your Perl programs into ready-to-run
-executables for HP-UX, Linux, Solaris and Windows."
-
-Perl2Exe ( http://www.indigostar.com/perl2exe.htm ) is a command line
-program for converting perl scripts to executable files. It targets both
-Windows and Unix platforms.
-
-=head2 How can I get C<#!perl> to work on [MS-DOS,NT,...]?
-
-For OS/2 just use
-
- extproc perl -S -your_switches
-
-as the first line in C<*.cmd> file (C<-S> due to a bug in cmd.exe's
-"extproc" handling). For DOS one should first invent a corresponding
-batch file and codify it in C<ALTERNATE_SHEBANG> (see the
-F<dosish.h> file in the source distribution for more information).
-
-The Win95/NT installation, when using the ActiveState port of Perl,
-will modify the Registry to associate the C<.pl> extension with the
-perl interpreter. If you install another port, perhaps even building
-your own Win95/NT Perl from the standard sources by using a Windows port
-of gcc (e.g., with cygwin or mingw32), then you'll have to modify
-the Registry yourself. In addition to associating C<.pl> with the
-interpreter, NT people can use: C<SET PATHEXT=%PATHEXT%;.PL> to let them
-run the program C<install-linux.pl> merely by typing C<install-linux>.
-
-Under "Classic" MacOS, a perl program will have the appropriate Creator and
-Type, so that double-clicking them will invoke the MacPerl application.
-Under Mac OS X, clickable apps can be made from any C<#!> script using Wil
-Sanchez' DropScript utility: http://www.wsanchez.net/software/ .
-
-I<IMPORTANT!>: Whatever you do, PLEASE don't get frustrated, and just
-throw the perl interpreter into your cgi-bin directory, in order to
-get your programs working for a web server. This is an EXTREMELY big
-security risk. Take the time to figure out how to do it correctly.
-
-=head2 Can I write useful Perl programs on the command line?
-
-Yes. Read L<perlrun> for more information. Some examples follow.
-(These assume standard Unix shell quoting rules.)
-
- # sum first and last fields
- perl -lane 'print $F[0] + $F[-1]' *
-
- # identify text files
- perl -le 'for(@ARGV) {print if -f && -T _}' *
-
- # remove (most) comments from C program
- perl -0777 -pe 's{/\*.*?\*/}{}gs' foo.c
-
- # make file a month younger than today, defeating reaper daemons
- perl -e '$X=24*60*60; utime(time(),time() + 30 * $X, at ARGV)' *
-
- # find first unused uid
- perl -le '$i++ while getpwuid($i); print $i'
-
- # display reasonable manpath
- echo $PATH | perl -nl -072 -e '
- s![^/+]*$!man!&&-d&&!$s{$_}++&&push at m,$_;END{print"@m"}'
-
-OK, the last one was actually an Obfuscated Perl Contest entry. :-)
-
-=head2 Why don't Perl one-liners work on my DOS/Mac/VMS system?
-
-The problem is usually that the command interpreters on those systems
-have rather different ideas about quoting than the Unix shells under
-which the one-liners were created. On some systems, you may have to
-change single-quotes to double ones, which you must I<NOT> do on Unix
-or Plan9 systems. You might also have to change a single % to a %%.
-
-For example:
-
- # Unix (including Mac OS X)
- perl -e 'print "Hello world\n"'
-
- # DOS, etc.
- perl -e "print \"Hello world\n\""
-
- # Mac Classic
- print "Hello world\n"
- (then Run "Myscript" or Shift-Command-R)
-
- # MPW
- perl -e 'print "Hello world\n"'
-
- # VMS
- perl -e "print ""Hello world\n"""
-
-The problem is that none of these examples are reliable: they depend on the
-command interpreter. Under Unix, the first two often work. Under DOS,
-it's entirely possible that neither works. If 4DOS was the command shell,
-you'd probably have better luck like this:
-
- perl -e "print <Ctrl-x>"Hello world\n<Ctrl-x>""
-
-Under the Mac, it depends which environment you are using. The MacPerl
-shell, or MPW, is much like Unix shells in its support for several
-quoting variants, except that it makes free use of the Mac's non-ASCII
-characters as control characters.
-
-Using qq(), q(), and qx(), instead of "double quotes", 'single
-quotes', and `backticks`, may make one-liners easier to write.
-
-There is no general solution to all of this. It is a mess.
-
-[Some of this answer was contributed by Kenneth Albanowski.]
-
-=head2 Where can I learn about CGI or Web programming in Perl?
-
-For modules, get the CGI or LWP modules from CPAN. For textbooks,
-see the two especially dedicated to web stuff in the question on
-books. For problems and questions related to the web, like "Why
-do I get 500 Errors" or "Why doesn't it run from the browser right
-when it runs fine on the command line", see the troubleshooting
-guides and references in L<perlfaq9> or in the CGI MetaFAQ:
-
- http://www.perl.org/CGI_MetaFAQ.html
-
-=head2 Where can I learn about object-oriented Perl programming?
-
-A good place to start is L<perltoot>, and you can use L<perlobj>,
-L<perlboot>, L<perltoot>, L<perltooc>, and L<perlbot> for reference.
-
-A good book on OO on Perl is the "Object-Oriented Perl"
-by Damian Conway from Manning Publications, or "Intermediate Perl"
-by Randal Schwartz, brian d foy, and Tom Phoenix from O'Reilly Media.
-
-=head2 Where can I learn about linking C with Perl?
-
-If you want to call C from Perl, start with L<perlxstut>,
-moving on to L<perlxs>, L<xsubpp>, and L<perlguts>. If you want to
-call Perl from C, then read L<perlembed>, L<perlcall>, and
-L<perlguts>. Don't forget that you can learn a lot from looking at
-how the authors of existing extension modules wrote their code and
-solved their problems.
-
-You might not need all the power of XS. The Inline::C module lets
-you put C code directly in your Perl source. It handles all the
-magic to make it work. You still have to learn at least some of
-the perl API but you won't have to deal with the complexity of the
-XS support files.
-
-=head2 I've read perlembed, perlguts, etc., but I can't embed perl in my C program; what am I doing wrong?
-
-Download the ExtUtils::Embed kit from CPAN and run `make test'. If
-the tests pass, read the pods again and again and again. If they
-fail, see L<perlbug> and send a bug report with the output of
-C<make test TEST_VERBOSE=1> along with C<perl -V>.
-
-=head2 When I tried to run my script, I got this message. What does it mean?
-
-A complete list of Perl's error messages and warnings with explanatory
-text can be found in L<perldiag>. You can also use the splain program
-(distributed with Perl) to explain the error messages:
-
- perl program 2>diag.out
- splain [-v] [-p] diag.out
-
-or change your program to explain the messages for you:
-
- use diagnostics;
-
-or
-
- use diagnostics -verbose;
-
-=head2 What's MakeMaker?
-
-(contributed by brian d foy)
-
-The C<ExtUtils::MakeMaker> module, better known simply as "MakeMaker",
-turns a Perl script, typically called C<Makefile.PL>, into a Makefile.
-The Unix tool C<make> uses this file to manage dependencies and actions
-to process and install a Perl distribution.
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
-other authors as noted. All rights reserved.
-
-This documentation is free; you can redistribute it and/or modify it
-under the same terms as Perl itself.
-
-Irrespective of its distribution, all code examples here are in the public
-domain. You are permitted and encouraged to use this code and any
-derivatives thereof in your own programs for fun or for profit as you
-see fit. A simple comment in the code giving credit to the FAQ would
-be courteous but is not required.
Deleted: trunk/contrib/perl/pod/perlfaq4.pod
===================================================================
--- trunk/contrib/perl/pod/perlfaq4.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlfaq4.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,2689 +0,0 @@
-=head1 NAME
-
-perlfaq4 - Data Manipulation
-
-=head1 DESCRIPTION
-
-This section of the FAQ answers questions related to manipulating
-numbers, dates, strings, arrays, hashes, and miscellaneous data issues.
-
-=head1 Data: Numbers
-
-=head2 Why am I getting long decimals (eg, 19.9499999999999) instead of the numbers I should be getting (eg, 19.95)?
-
-For the long explanation, see David Goldberg's "What Every Computer
-Scientist Should Know About Floating-Point Arithmetic"
-(L<http://web.cse.msu.edu/~cse320/Documents/FloatingPoint.pdf>).
-
-Internally, your computer represents floating-point numbers in binary.
-Digital (as in powers of two) computers cannot store all numbers
-exactly. Some real numbers lose precision in the process. This is a
-problem with how computers store numbers and affects all computer
-languages, not just Perl.
-
-L<perlnumber> shows the gory details of number representations and
-conversions.
-
-To limit the number of decimal places in your numbers, you can use the
-C<printf> or C<sprintf> function. See
-L<perlop/"Floating Point Arithmetic"> for more details.
-
- printf "%.2f", 10/3;
-
- my $number = sprintf "%.2f", 10/3;
-
-=head2 Why is int() broken?
-
-Your C<int()> is most probably working just fine. It's the numbers that
-aren't quite what you think.
-
-First, see the answer to "Why am I getting long decimals
-(eg, 19.9499999999999) instead of the numbers I should be getting
-(eg, 19.95)?".
-
-For example, this
-
- print int(0.6/0.2-2), "\n";
-
-will in most computers print 0, not 1, because even such simple
-numbers as 0.6 and 0.2 cannot be presented exactly by floating-point
-numbers. What you think in the above as 'three' is really more like
-2.9999999999999995559.
-
-=head2 Why isn't my octal data interpreted correctly?
-
-(contributed by brian d foy)
-
-You're probably trying to convert a string to a number, which Perl only
-converts as a decimal number. When Perl converts a string to a number, it
-ignores leading spaces and zeroes, then assumes the rest of the digits
-are in base 10:
-
- my $string = '0644';
-
- print $string + 0; # prints 644
-
- print $string + 44; # prints 688, certainly not octal!
-
-This problem usually involves one of the Perl built-ins that has the
-same name a Unix command that uses octal numbers as arguments on the
-command line. In this example, C<chmod> on the command line knows that
-its first argument is octal because that's what it does:
-
- %prompt> chmod 644 file
-
-If you want to use the same literal digits (644) in Perl, you have to tell
-Perl to treat them as octal numbers either by prefixing the digits with
-a C<0> or using C<oct>:
-
- chmod( 0644, $file); # right, has leading zero
- chmod( oct(644), $file ); # also correct
-
-The problem comes in when you take your numbers from something that Perl
-thinks is a string, such as a command line argument in C<@ARGV>:
-
- chmod( $ARGV[0], $file); # wrong, even if "0644"
-
- chmod( oct($ARGV[0]), $file ); # correct, treat string as octal
-
-You can always check the value you're using by printing it in octal
-notation to ensure it matches what you think it should be. Print it
-in octal and decimal format:
-
- printf "0%o %d", $number, $number;
-
-=head2 Does Perl have a round() function? What about ceil() and floor()? Trig functions?
-
-Remember that C<int()> merely truncates toward 0. For rounding to a
-certain number of digits, C<sprintf()> or C<printf()> is usually the
-easiest route.
-
- printf("%.3f", 3.1415926535); # prints 3.142
-
-The C<POSIX> module (part of the standard Perl distribution)
-implements C<ceil()>, C<floor()>, and a number of other mathematical
-and trigonometric functions.
-
- use POSIX;
- $ceil = ceil(3.5); # 4
- $floor = floor(3.5); # 3
-
-In 5.000 to 5.003 perls, trigonometry was done in the C<Math::Complex>
-module. With 5.004, the C<Math::Trig> module (part of the standard Perl
-distribution) implements the trigonometric functions. Internally it
-uses the C<Math::Complex> module and some functions can break out from
-the real axis into the complex plane, for example the inverse sine of
-2.
-
-Rounding in financial applications can have serious implications, and
-the rounding method used should be specified precisely. In these
-cases, it probably pays not to trust whichever system of rounding is
-being used by Perl, but instead to implement the rounding function you
-need yourself.
-
-To see why, notice how you'll still have an issue on half-way-point
-alternation:
-
- for ($i = 0; $i < 1.01; $i += 0.05) { printf "%.1f ",$i}
-
- 0.0 0.1 0.1 0.2 0.2 0.2 0.3 0.3 0.4 0.4 0.5 0.5 0.6 0.7 0.7
- 0.8 0.8 0.9 0.9 1.0 1.0
-
-Don't blame Perl. It's the same as in C. IEEE says we have to do
-this. Perl numbers whose absolute values are integers under 2**31 (on
-32-bit machines) will work pretty much like mathematical integers.
-Other numbers are not guaranteed.
-
-=head2 How do I convert between numeric representations/bases/radixes?
-
-As always with Perl there is more than one way to do it. Below are a
-few examples of approaches to making common conversions between number
-representations. This is intended to be representational rather than
-exhaustive.
-
-Some of the examples later in L<perlfaq4> use the C<Bit::Vector>
-module from CPAN. The reason you might choose C<Bit::Vector> over the
-perl built-in functions is that it works with numbers of ANY size,
-that it is optimized for speed on some operations, and for at least
-some programmers the notation might be familiar.
-
-=over 4
-
-=item How do I convert hexadecimal into decimal
-
-Using perl's built in conversion of C<0x> notation:
-
- $dec = 0xDEADBEEF;
-
-Using the C<hex> function:
-
- $dec = hex("DEADBEEF");
-
-Using C<pack>:
-
- $dec = unpack("N", pack("H8", substr("0" x 8 . "DEADBEEF", -8)));
-
-Using the CPAN module C<Bit::Vector>:
-
- use Bit::Vector;
- $vec = Bit::Vector->new_Hex(32, "DEADBEEF");
- $dec = $vec->to_Dec();
-
-=item How do I convert from decimal to hexadecimal
-
-Using C<sprintf>:
-
- $hex = sprintf("%X", 3735928559); # upper case A-F
- $hex = sprintf("%x", 3735928559); # lower case a-f
-
-Using C<unpack>:
-
- $hex = unpack("H*", pack("N", 3735928559));
-
-Using C<Bit::Vector>:
-
- use Bit::Vector;
- $vec = Bit::Vector->new_Dec(32, -559038737);
- $hex = $vec->to_Hex();
-
-And C<Bit::Vector> supports odd bit counts:
-
- use Bit::Vector;
- $vec = Bit::Vector->new_Dec(33, 3735928559);
- $vec->Resize(32); # suppress leading 0 if unwanted
- $hex = $vec->to_Hex();
-
-=item How do I convert from octal to decimal
-
-Using Perl's built in conversion of numbers with leading zeros:
-
- $dec = 033653337357; # note the leading 0!
-
-Using the C<oct> function:
-
- $dec = oct("33653337357");
-
-Using C<Bit::Vector>:
-
- use Bit::Vector;
- $vec = Bit::Vector->new(32);
- $vec->Chunk_List_Store(3, split(//, reverse "33653337357"));
- $dec = $vec->to_Dec();
-
-=item How do I convert from decimal to octal
-
-Using C<sprintf>:
-
- $oct = sprintf("%o", 3735928559);
-
-Using C<Bit::Vector>:
-
- use Bit::Vector;
- $vec = Bit::Vector->new_Dec(32, -559038737);
- $oct = reverse join('', $vec->Chunk_List_Read(3));
-
-=item How do I convert from binary to decimal
-
-Perl 5.6 lets you write binary numbers directly with
-the C<0b> notation:
-
- $number = 0b10110110;
-
-Using C<oct>:
-
- my $input = "10110110";
- $decimal = oct( "0b$input" );
-
-Using C<pack> and C<ord>:
-
- $decimal = ord(pack('B8', '10110110'));
-
-Using C<pack> and C<unpack> for larger strings:
-
- $int = unpack("N", pack("B32",
- substr("0" x 32 . "11110101011011011111011101111", -32)));
- $dec = sprintf("%d", $int);
-
- # substr() is used to left-pad a 32-character string with zeros.
-
-Using C<Bit::Vector>:
-
- $vec = Bit::Vector->new_Bin(32, "11011110101011011011111011101111");
- $dec = $vec->to_Dec();
-
-=item How do I convert from decimal to binary
-
-Using C<sprintf> (perl 5.6+):
-
- $bin = sprintf("%b", 3735928559);
-
-Using C<unpack>:
-
- $bin = unpack("B*", pack("N", 3735928559));
-
-Using C<Bit::Vector>:
-
- use Bit::Vector;
- $vec = Bit::Vector->new_Dec(32, -559038737);
- $bin = $vec->to_Bin();
-
-The remaining transformations (e.g. hex -> oct, bin -> hex, etc.)
-are left as an exercise to the inclined reader.
-
-=back
-
-=head2 Why doesn't & work the way I want it to?
-
-The behavior of binary arithmetic operators depends on whether they're
-used on numbers or strings. The operators treat a string as a series
-of bits and work with that (the string C<"3"> is the bit pattern
-C<00110011>). The operators work with the binary form of a number
-(the number C<3> is treated as the bit pattern C<00000011>).
-
-So, saying C<11 & 3> performs the "and" operation on numbers (yielding
-C<3>). Saying C<"11" & "3"> performs the "and" operation on strings
-(yielding C<"1">).
-
-Most problems with C<&> and C<|> arise because the programmer thinks
-they have a number but really it's a string or vice versa. To avoid this,
-stringify the arguments explicitly (using C<""> or C<qq()>) or convert them
-to numbers explicitly (using C<0+$arg>). The rest arise because
-the programmer says:
-
- if ("\020\020" & "\101\101") {
- # ...
- }
-
-but a string consisting of two null bytes (the result of C<"\020\020"
-& "\101\101">) is not a false value in Perl. You need:
-
- if ( ("\020\020" & "\101\101") !~ /[^\000]/) {
- # ...
- }
-
-=head2 How do I multiply matrices?
-
-Use the C<Math::Matrix> or C<Math::MatrixReal> modules (available from CPAN)
-or the C<PDL> extension (also available from CPAN).
-
-=head2 How do I perform an operation on a series of integers?
-
-To call a function on each element in an array, and collect the
-results, use:
-
- @results = map { my_func($_) } @array;
-
-For example:
-
- @triple = map { 3 * $_ } @single;
-
-To call a function on each element of an array, but ignore the
-results:
-
- foreach $iterator (@array) {
- some_func($iterator);
- }
-
-To call a function on each integer in a (small) range, you B<can> use:
-
- @results = map { some_func($_) } (5 .. 25);
-
-but you should be aware that the C<..> operator creates a list of
-all integers in the range. This can take a lot of memory for large
-ranges. Instead use:
-
- @results = ();
- for ($i=5; $i <= 500_005; $i++) {
- push(@results, some_func($i));
- }
-
-This situation has been fixed in Perl5.005. Use of C<..> in a C<for>
-loop will iterate over the range, without creating the entire range.
-
- for my $i (5 .. 500_005) {
- push(@results, some_func($i));
- }
-
-will not create a list of 500,000 integers.
-
-=head2 How can I output Roman numerals?
-
-Get the L<http://www.cpan.org/modules/by-module/Roman> module.
-
-=head2 Why aren't my random numbers random?
-
-If you're using a version of Perl before 5.004, you must call C<srand>
-once at the start of your program to seed the random number generator.
-
- BEGIN { srand() if $] < 5.004 }
-
-5.004 and later automatically call C<srand> at the beginning. Don't
-call C<srand> more than once--you make your numbers less random,
-rather than more.
-
-Computers are good at being predictable and bad at being random
-(despite appearances caused by bugs in your programs :-). The
-F<random> article in the "Far More Than You Ever Wanted To Know"
-collection in L<http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz>, courtesy
-of Tom Phoenix, talks more about this. John von Neumann said, "Anyone
-who attempts to generate random numbers by deterministic means is, of
-course, living in a state of sin."
-
-If you want numbers that are more random than C<rand> with C<srand>
-provides, you should also check out the C<Math::TrulyRandom> module from
-CPAN. It uses the imperfections in your system's timer to generate
-random numbers, but this takes quite a while. If you want a better
-pseudorandom generator than comes with your operating system, look at
-"Numerical Recipes in C" at L<http://www.nr.com/>.
-
-=head2 How do I get a random number between X and Y?
-
-To get a random number between two values, you can use the C<rand()>
-built-in to get a random number between 0 and 1. From there, you shift
-that into the range that you want.
-
-C<rand($x)> returns a number such that C<< 0 <= rand($x) < $x >>. Thus
-what you want to have perl figure out is a random number in the range
-from 0 to the difference between your I<X> and I<Y>.
-
-That is, to get a number between 10 and 15, inclusive, you want a
-random number between 0 and 5 that you can then add to 10.
-
- my $number = 10 + int rand( 15-10+1 ); # ( 10,11,12,13,14, or 15 )
-
-Hence you derive the following simple function to abstract
-that. It selects a random integer between the two given
-integers (inclusive), For example: C<random_int_between(50,120)>.
-
- sub random_int_between {
- my($min, $max) = @_;
- # Assumes that the two arguments are integers themselves!
- return $min if $min == $max;
- ($min, $max) = ($max, $min) if $min > $max;
- return $min + int rand(1 + $max - $min);
- }
-
-=head1 Data: Dates
-
-=head2 How do I find the day or week of the year?
-
-The day of the year is in the list returned
-by the C<localtime> function. Without an
-argument C<localtime> uses the current time.
-
- my $day_of_year = (localtime)[7];
-
-The C<POSIX> module can also format a date as the day of the year or
-week of the year.
-
- use POSIX qw/strftime/;
- my $day_of_year = strftime "%j", localtime;
- my $week_of_year = strftime "%W", localtime;
-
-To get the day of year for any date, use C<POSIX>'s C<mktime> to get
-a time in epoch seconds for the argument to C<localtime>.
-
- use POSIX qw/mktime strftime/;
- my $week_of_year = strftime "%W",
- localtime( mktime( 0, 0, 0, 18, 11, 87 ) );
-
-You can also use C<Time::Piece>, which comes with Perl and provides a
-C<localtime> that returns an object:
-
- use Time::Piece;
- my $day_of_year = localtime->yday;
- my $week_of_year = localtime->week;
-
-The C<Date::Calc> module provides two functions to calculate these, too:
-
- use Date::Calc;
- my $day_of_year = Day_of_Year( 1987, 12, 18 );
- my $week_of_year = Week_of_Year( 1987, 12, 18 );
-
-=head2 How do I find the current century or millennium?
-
-Use the following simple functions:
-
- sub get_century {
- return int((((localtime(shift || time))[5] + 1999))/100);
- }
-
- sub get_millennium {
- return 1+int((((localtime(shift || time))[5] + 1899))/1000);
- }
-
-On some systems, the C<POSIX> module's C<strftime()> function has been
-extended in a non-standard way to use a C<%C> format, which they
-sometimes claim is the "century". It isn't, because on most such
-systems, this is only the first two digits of the four-digit year, and
-thus cannot be used to determine reliably the current century or
-millennium.
-
-=head2 How can I compare two dates and find the difference?
-
-(contributed by brian d foy)
-
-You could just store all your dates as a number and then subtract.
-Life isn't always that simple though.
-
-The C<Time::Piece> module, which comes with Perl, replaces C<localtime>
-with a version that returns an object. It also overloads the comparison
-operators so you can compare them directly:
-
- use Time::Piece;
- my $date1 = localtime( $some_time );
- my $date2 = localtime( $some_other_time );
-
- if( $date1 < $date2 ) {
- print "The date was in the past\n";
- }
-
-You can also get differences with a subtraction, which returns a
-C<Time::Seconds> object:
-
- my $diff = $date1 - $date2;
- print "The difference is ", $date_diff->days, " days\n";
-
-If you want to work with formatted dates, the C<Date::Manip>,
-C<Date::Calc>, or C<DateTime> modules can help you.
-
-=head2 How can I take a string and turn it into epoch seconds?
-
-If it's a regular enough string that it always has the same format,
-you can split it up and pass the parts to C<timelocal> in the standard
-C<Time::Local> module. Otherwise, you should look into the C<Date::Calc>,
-C<Date::Parse>, and C<Date::Manip> modules from CPAN.
-
-=head2 How can I find the Julian Day?
-
-(contributed by brian d foy and Dave Cross)
-
-You can use the C<Time::Piece> module, part of the Standard Library,
-which can convert a date/time to a Julian Day:
-
- $ perl -MTime::Piece -le 'print localtime->julian_day'
- 2455607.7959375
-
-Or the modified Julian Day:
-
- $ perl -MTime::Piece -le 'print localtime->mjd'
- 55607.2961226851
-
-Or even the day of the year (which is what some people think of as a
-Julian day):
-
- $ perl -MTime::Piece -le 'print localtime->yday'
- 45
-
-You can also do the same things with the C<DateTime> module:
-
- $ perl -MDateTime -le'print DateTime->today->jd'
- 2453401.5
- $ perl -MDateTime -le'print DateTime->today->mjd'
- 53401
- $ perl -MDateTime -le'print DateTime->today->doy'
- 31
-
-You can use the C<Time::JulianDay> module available on CPAN. Ensure
-that you really want to find a Julian day, though, as many people have
-different ideas about Julian days (see http://www.hermetic.ch/cal_stud/jdn.htm
-for instance):
-
- $ perl -MTime::JulianDay -le 'print local_julian_day( time )'
- 55608
-
-=head2 How do I find yesterday's date?
-X<date> X<yesterday> X<DateTime> X<Date::Calc> X<Time::Local>
-X<daylight saving time> X<day> X<Today_and_Now> X<localtime>
-X<timelocal>
-
-(contributed by brian d foy)
-
-To do it correctly, you can use one of the C<Date> modules since they
-work with calendars instead of times. The C<DateTime> module makes it
-simple, and give you the same time of day, only the day before,
-despite daylight saving time changes:
-
- use DateTime;
-
- my $yesterday = DateTime->now->subtract( days => 1 );
-
- print "Yesterday was $yesterday\n";
-
-You can also use the C<Date::Calc> module using its C<Today_and_Now>
-function.
-
- use Date::Calc qw( Today_and_Now Add_Delta_DHMS );
-
- my @date_time = Add_Delta_DHMS( Today_and_Now(), -1, 0, 0, 0 );
-
- print "@date_time\n";
-
-Most people try to use the time rather than the calendar to figure out
-dates, but that assumes that days are twenty-four hours each. For
-most people, there are two days a year when they aren't: the switch to
-and from summer time throws this off. For example, the rest of the
-suggestions will be wrong sometimes:
-
-Starting with Perl 5.10, C<Time::Piece> and C<Time::Seconds> are part
-of the standard distribution, so you might think that you could do
-something like this:
-
- use Time::Piece;
- use Time::Seconds;
-
- my $yesterday = localtime() - ONE_DAY; # WRONG
- print "Yesterday was $yesterday\n";
-
-The C<Time::Piece> module exports a new C<localtime> that returns an
-object, and C<Time::Seconds> exports the C<ONE_DAY> constant that is a
-set number of seconds. This means that it always gives the time 24
-hours ago, which is not always yesterday. This can cause problems
-around the end of daylight saving time when there's one day that is 25
-hours long.
-
-You have the same problem with C<Time::Local>, which will give the wrong
-answer for those same special cases:
-
- # contributed by Gunnar Hjalmarsson
- use Time::Local;
- my $today = timelocal 0, 0, 12, ( localtime )[3..5];
- my ($d, $m, $y) = ( localtime $today-86400 )[3..5]; # WRONG
- printf "Yesterday: %d-%02d-%02d\n", $y+1900, $m+1, $d;
-
-=head2 Does Perl have a Year 2000 or 2038 problem? Is Perl Y2K compliant?
-
-(contributed by brian d foy)
-
-Perl itself never had a Y2K problem, although that never stopped people
-from creating Y2K problems on their own. See the documentation for
-C<localtime> for its proper use.
-
-Starting with Perl 5.12, C<localtime> and C<gmtime> can handle dates past
-03:14:08 January 19, 2038, when a 32-bit based time would overflow. You
-still might get a warning on a 32-bit C<perl>:
-
- % perl5.12 -E 'say scalar localtime( 0x9FFF_FFFFFFFF )'
- Integer overflow in hexadecimal number at -e line 1.
- Wed Nov 1 19:42:39 5576711
-
-On a 64-bit C<perl>, you can get even larger dates for those really long
-running projects:
-
- % perl5.12 -E 'say scalar gmtime( 0x9FFF_FFFFFFFF )'
- Thu Nov 2 00:42:39 5576711
-
-You're still out of luck if you need to keep track of decaying protons
-though.
-
-=head1 Data: Strings
-
-=head2 How do I validate input?
-
-(contributed by brian d foy)
-
-There are many ways to ensure that values are what you expect or
-want to accept. Besides the specific examples that we cover in the
-perlfaq, you can also look at the modules with "Assert" and "Validate"
-in their names, along with other modules such as C<Regexp::Common>.
-
-Some modules have validation for particular types of input, such
-as C<Business::ISBN>, C<Business::CreditCard>, C<Email::Valid>,
-and C<Data::Validate::IP>.
-
-=head2 How do I unescape a string?
-
-It depends just what you mean by "escape". URL escapes are dealt
-with in L<perlfaq9>. Shell escapes with the backslash (C<\>)
-character are removed with
-
- s/\\(.)/$1/g;
-
-This won't expand C<"\n"> or C<"\t"> or any other special escapes.
-
-=head2 How do I remove consecutive pairs of characters?
-
-(contributed by brian d foy)
-
-You can use the substitution operator to find pairs of characters (or
-runs of characters) and replace them with a single instance. In this
-substitution, we find a character in C<(.)>. The memory parentheses
-store the matched character in the back-reference C<\g1> and we use
-that to require that the same thing immediately follow it. We replace
-that part of the string with the character in C<$1>.
-
- s/(.)\g1/$1/g;
-
-We can also use the transliteration operator, C<tr///>. In this
-example, the search list side of our C<tr///> contains nothing, but
-the C<c> option complements that so it contains everything. The
-replacement list also contains nothing, so the transliteration is
-almost a no-op since it won't do any replacements (or more exactly,
-replace the character with itself). However, the C<s> option squashes
-duplicated and consecutive characters in the string so a character
-does not show up next to itself
-
- my $str = 'Haarlem'; # in the Netherlands
- $str =~ tr///cs; # Now Harlem, like in New York
-
-=head2 How do I expand function calls in a string?
-
-(contributed by brian d foy)
-
-This is documented in L<perlref>, and although it's not the easiest
-thing to read, it does work. In each of these examples, we call the
-function inside the braces used to dereference a reference. If we
-have more than one return value, we can construct and dereference an
-anonymous array. In this case, we call the function in list context.
-
- print "The time values are @{ [localtime] }.\n";
-
-If we want to call the function in scalar context, we have to do a bit
-more work. We can really have any code we like inside the braces, so
-we simply have to end with the scalar reference, although how you do
-that is up to you, and you can use code inside the braces. Note that
-the use of parens creates a list context, so we need C<scalar> to
-force the scalar context on the function:
-
- print "The time is ${\(scalar localtime)}.\n"
-
- print "The time is ${ my $x = localtime; \$x }.\n";
-
-If your function already returns a reference, you don't need to create
-the reference yourself.
-
- sub timestamp { my $t = localtime; \$t }
-
- print "The time is ${ timestamp() }.\n";
-
-The C<Interpolation> module can also do a lot of magic for you. You can
-specify a variable name, in this case C<E>, to set up a tied hash that
-does the interpolation for you. It has several other methods to do this
-as well.
-
- use Interpolation E => 'eval';
- print "The time values are $E{localtime()}.\n";
-
-In most cases, it is probably easier to simply use string concatenation,
-which also forces scalar context.
-
- print "The time is " . localtime() . ".\n";
-
-=head2 How do I find matching/nesting anything?
-
-This isn't something that can be done in one regular expression, no
-matter how complicated. To find something between two single
-characters, a pattern like C</x([^x]*)x/> will get the intervening
-bits in $1. For multiple ones, then something more like
-C</alpha(.*?)omega/> would be needed. But none of these deals with
-nested patterns. For balanced expressions using C<(>, C<{>, C<[> or
-C<< < >> as delimiters, use the CPAN module Regexp::Common, or see
-L<perlre/(??{ code })>. For other cases, you'll have to write a
-parser.
-
-If you are serious about writing a parser, there are a number of
-modules or oddities that will make your life a lot easier. There are
-the CPAN modules C<Parse::RecDescent>, C<Parse::Yapp>, and
-C<Text::Balanced>; and the C<byacc> program. Starting from perl 5.8
-the C<Text::Balanced> is part of the standard distribution.
-
-One simple destructive, inside-out approach that you might try is to
-pull out the smallest nesting parts one at a time:
-
- while (s/BEGIN((?:(?!BEGIN)(?!END).)*)END//gs) {
- # do something with $1
- }
-
-A more complicated and sneaky approach is to make Perl's regular
-expression engine do it for you. This is courtesy Dean Inada, and
-rather has the nature of an Obfuscated Perl Contest entry, but it
-really does work:
-
- # $_ contains the string to parse
- # BEGIN and END are the opening and closing markers for the
- # nested text.
-
- @( = ('(','');
- @) = (')','');
- ($re=$_)=~s/((BEGIN)|(END)|.)/$)[!$3]\Q$1\E$([!$2]/gs;
- @$ = (eval{/$re/},$@!~/unmatched/i);
- print join("\n",@$[0..$#$]) if( $$[-1] );
-
-=head2 How do I reverse a string?
-
-Use C<reverse()> in scalar context, as documented in
-L<perlfunc/reverse>.
-
- $reversed = reverse $string;
-
-=head2 How do I expand tabs in a string?
-
-You can do it yourself:
-
- 1 while $string =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e;
-
-Or you can just use the C<Text::Tabs> module (part of the standard Perl
-distribution).
-
- use Text::Tabs;
- @expanded_lines = expand(@lines_with_tabs);
-
-=head2 How do I reformat a paragraph?
-
-Use C<Text::Wrap> (part of the standard Perl distribution):
-
- use Text::Wrap;
- print wrap("\t", ' ', @paragraphs);
-
-The paragraphs you give to C<Text::Wrap> should not contain embedded
-newlines. C<Text::Wrap> doesn't justify the lines (flush-right).
-
-Or use the CPAN module C<Text::Autoformat>. Formatting files can be
-easily done by making a shell alias, like so:
-
- alias fmt="perl -i -MText::Autoformat -n0777 \
- -e 'print autoformat $_, {all=>1}' $*"
-
-See the documentation for C<Text::Autoformat> to appreciate its many
-capabilities.
-
-=head2 How can I access or change N characters of a string?
-
-You can access the first characters of a string with substr().
-To get the first character, for example, start at position 0
-and grab the string of length 1.
-
-
- $string = "Just another Perl Hacker";
- $first_char = substr( $string, 0, 1 ); # 'J'
-
-To change part of a string, you can use the optional fourth
-argument which is the replacement string.
-
- substr( $string, 13, 4, "Perl 5.8.0" );
-
-You can also use substr() as an lvalue.
-
- substr( $string, 13, 4 ) = "Perl 5.8.0";
-
-=head2 How do I change the Nth occurrence of something?
-
-You have to keep track of N yourself. For example, let's say you want
-to change the fifth occurrence of C<"whoever"> or C<"whomever"> into
-C<"whosoever"> or C<"whomsoever">, case insensitively. These
-all assume that $_ contains the string to be altered.
-
- $count = 0;
- s{((whom?)ever)}{
- ++$count == 5 # is it the 5th?
- ? "${2}soever" # yes, swap
- : $1 # renege and leave it there
- }ige;
-
-In the more general case, you can use the C</g> modifier in a C<while>
-loop, keeping count of matches.
-
- $WANT = 3;
- $count = 0;
- $_ = "One fish two fish red fish blue fish";
- while (/(\w+)\s+fish\b/gi) {
- if (++$count == $WANT) {
- print "The third fish is a $1 one.\n";
- }
- }
-
-That prints out: C<"The third fish is a red one."> You can also use a
-repetition count and repeated pattern like this:
-
- /(?:\w+\s+fish\s+){2}(\w+)\s+fish/i;
-
-=head2 How can I count the number of occurrences of a substring within a string?
-
-There are a number of ways, with varying efficiency. If you want a
-count of a certain single character (X) within a string, you can use the
-C<tr///> function like so:
-
- $string = "ThisXlineXhasXsomeXx'sXinXit";
- $count = ($string =~ tr/X//);
- print "There are $count X characters in the string";
-
-This is fine if you are just looking for a single character. However,
-if you are trying to count multiple character substrings within a
-larger string, C<tr///> won't work. What you can do is wrap a while()
-loop around a global pattern match. For example, let's count negative
-integers:
-
- $string = "-9 55 48 -2 23 -76 4 14 -44";
- while ($string =~ /-\d+/g) { $count++ }
- print "There are $count negative numbers in the string";
-
-Another version uses a global match in list context, then assigns the
-result to a scalar, producing a count of the number of matches.
-
- $count = () = $string =~ /-\d+/g;
-
-=head2 How do I capitalize all the words on one line?
-X<Text::Autoformat> X<capitalize> X<case, title> X<case, sentence>
-
-(contributed by brian d foy)
-
-Damian Conway's L<Text::Autoformat> handles all of the thinking
-for you.
-
- use Text::Autoformat;
- my $x = "Dr. Strangelove or: How I Learned to Stop ".
- "Worrying and Love the Bomb";
-
- print $x, "\n";
- for my $style (qw( sentence title highlight )) {
- print autoformat($x, { case => $style }), "\n";
- }
-
-How do you want to capitalize those words?
-
- FRED AND BARNEY'S LODGE # all uppercase
- Fred And Barney's Lodge # title case
- Fred and Barney's Lodge # highlight case
-
-It's not as easy a problem as it looks. How many words do you think
-are in there? Wait for it... wait for it.... If you answered 5
-you're right. Perl words are groups of C<\w+>, but that's not what
-you want to capitalize. How is Perl supposed to know not to capitalize
-that C<s> after the apostrophe? You could try a regular expression:
-
- $string =~ s/ (
- (^\w) #at the beginning of the line
- | # or
- (\s\w) #preceded by whitespace
- )
- /\U$1/xg;
-
- $string =~ s/([\w']+)/\u\L$1/g;
-
-Now, what if you don't want to capitalize that "and"? Just use
-L<Text::Autoformat> and get on with the next problem. :)
-
-=head2 How can I split a [character]-delimited string except when inside [character]?
-
-Several modules can handle this sort of parsing--C<Text::Balanced>,
-C<Text::CSV>, C<Text::CSV_XS>, and C<Text::ParseWords>, among others.
-
-Take the example case of trying to split a string that is
-comma-separated into its different fields. You can't use C<split(/,/)>
-because you shouldn't split if the comma is inside quotes. For
-example, take a data line like this:
-
- SAR001,"","Cimetrix, Inc","Bob Smith","CAM",N,8,1,0,7,"Error, Core Dumped"
-
-Due to the restriction of the quotes, this is a fairly complex
-problem. Thankfully, we have Jeffrey Friedl, author of
-I<Mastering Regular Expressions>, to handle these for us. He
-suggests (assuming your string is contained in C<$text>):
-
- @new = ();
- push(@new, $+) while $text =~ m{
- "([^\"\\]*(?:\\.[^\"\\]*)*)",? # groups the phrase inside the quotes
- | ([^,]+),?
- | ,
- }gx;
- push(@new, undef) if substr($text,-1,1) eq ',';
-
-If you want to represent quotation marks inside a
-quotation-mark-delimited field, escape them with backslashes (eg,
-C<"like \"this\"">.
-
-Alternatively, the C<Text::ParseWords> module (part of the standard
-Perl distribution) lets you say:
-
- use Text::ParseWords;
- @new = quotewords(",", 0, $text);
-
-=head2 How do I strip blank space from the beginning/end of a string?
-
-(contributed by brian d foy)
-
-A substitution can do this for you. For a single line, you want to
-replace all the leading or trailing whitespace with nothing. You
-can do that with a pair of substitutions:
-
- s/^\s+//;
- s/\s+$//;
-
-You can also write that as a single substitution, although it turns
-out the combined statement is slower than the separate ones. That
-might not matter to you, though:
-
- s/^\s+|\s+$//g;
-
-In this regular expression, the alternation matches either at the
-beginning or the end of the string since the anchors have a lower
-precedence than the alternation. With the C</g> flag, the substitution
-makes all possible matches, so it gets both. Remember, the trailing
-newline matches the C<\s+>, and the C<$> anchor can match to the
-absolute end of the string, so the newline disappears too. Just add
-the newline to the output, which has the added benefit of preserving
-"blank" (consisting entirely of whitespace) lines which the C<^\s+>
-would remove all by itself:
-
- while( <> ) {
- s/^\s+|\s+$//g;
- print "$_\n";
- }
-
-For a multi-line string, you can apply the regular expression to each
-logical line in the string by adding the C</m> flag (for
-"multi-line"). With the C</m> flag, the C<$> matches I<before> an
-embedded newline, so it doesn't remove it. This pattern still removes
-the newline at the end of the string:
-
- $string =~ s/^\s+|\s+$//gm;
-
-Remember that lines consisting entirely of whitespace will disappear,
-since the first part of the alternation can match the entire string
-and replace it with nothing. If you need to keep embedded blank lines,
-you have to do a little more work. Instead of matching any whitespace
-(since that includes a newline), just match the other whitespace:
-
- $string =~ s/^[\t\f ]+|[\t\f ]+$//mg;
-
-=head2 How do I pad a string with blanks or pad a number with zeroes?
-
-In the following examples, C<$pad_len> is the length to which you wish
-to pad the string, C<$text> or C<$num> contains the string to be padded,
-and C<$pad_char> contains the padding character. You can use a single
-character string constant instead of the C<$pad_char> variable if you
-know what it is in advance. And in the same way you can use an integer in
-place of C<$pad_len> if you know the pad length in advance.
-
-The simplest method uses the C<sprintf> function. It can pad on the left
-or right with blanks and on the left with zeroes and it will not
-truncate the result. The C<pack> function can only pad strings on the
-right with blanks and it will truncate the result to a maximum length of
-C<$pad_len>.
-
- # Left padding a string with blanks (no truncation):
- $padded = sprintf("%${pad_len}s", $text);
- $padded = sprintf("%*s", $pad_len, $text); # same thing
-
- # Right padding a string with blanks (no truncation):
- $padded = sprintf("%-${pad_len}s", $text);
- $padded = sprintf("%-*s", $pad_len, $text); # same thing
-
- # Left padding a number with 0 (no truncation):
- $padded = sprintf("%0${pad_len}d", $num);
- $padded = sprintf("%0*d", $pad_len, $num); # same thing
-
- # Right padding a string with blanks using pack (will truncate):
- $padded = pack("A$pad_len",$text);
-
-If you need to pad with a character other than blank or zero you can use
-one of the following methods. They all generate a pad string with the
-C<x> operator and combine that with C<$text>. These methods do
-not truncate C<$text>.
-
-Left and right padding with any character, creating a new string:
-
- $padded = $pad_char x ( $pad_len - length( $text ) ) . $text;
- $padded = $text . $pad_char x ( $pad_len - length( $text ) );
-
-Left and right padding with any character, modifying C<$text> directly:
-
- substr( $text, 0, 0 ) = $pad_char x ( $pad_len - length( $text ) );
- $text .= $pad_char x ( $pad_len - length( $text ) );
-
-=head2 How do I extract selected columns from a string?
-
-(contributed by brian d foy)
-
-If you know the columns that contain the data, you can
-use C<substr> to extract a single column.
-
- my $column = substr( $line, $start_column, $length );
-
-You can use C<split> if the columns are separated by whitespace or
-some other delimiter, as long as whitespace or the delimiter cannot
-appear as part of the data.
-
- my $line = ' fred barney betty ';
- my @columns = split /\s+/, $line;
- # ( '', 'fred', 'barney', 'betty' );
-
- my $line = 'fred||barney||betty';
- my @columns = split /\|/, $line;
- # ( 'fred', '', 'barney', '', 'betty' );
-
-If you want to work with comma-separated values, don't do this since
-that format is a bit more complicated. Use one of the modules that
-handle that format, such as C<Text::CSV>, C<Text::CSV_XS>, or
-C<Text::CSV_PP>.
-
-If you want to break apart an entire line of fixed columns, you can use
-C<unpack> with the A (ASCII) format. By using a number after the format
-specifier, you can denote the column width. See the C<pack> and C<unpack>
-entries in L<perlfunc> for more details.
-
- my @fields = unpack( $line, "A8 A8 A8 A16 A4" );
-
-Note that spaces in the format argument to C<unpack> do not denote literal
-spaces. If you have space separated data, you may want C<split> instead.
-
-=head2 How do I find the soundex value of a string?
-
-(contributed by brian d foy)
-
-You can use the Text::Soundex module. If you want to do fuzzy or close
-matching, you might also try the C<String::Approx>, and
-C<Text::Metaphone>, and C<Text::DoubleMetaphone> modules.
-
-=head2 How can I expand variables in text strings?
-
-(contributed by brian d foy)
-
-If you can avoid it, don't, or if you can use a templating system,
-such as C<Text::Template> or C<Template> Toolkit, do that instead. You
-might even be able to get the job done with C<sprintf> or C<printf>:
-
- my $string = sprintf 'Say hello to %s and %s', $foo, $bar;
-
-However, for the one-off simple case where I don't want to pull out a
-full templating system, I'll use a string that has two Perl scalar
-variables in it. In this example, I want to expand C<$foo> and C<$bar>
-to their variable's values:
-
- my $foo = 'Fred';
- my $bar = 'Barney';
- $string = 'Say hello to $foo and $bar';
-
-One way I can do this involves the substitution operator and a double
-C</e> flag. The first C</e> evaluates C<$1> on the replacement side and
-turns it into C<$foo>. The second /e starts with C<$foo> and replaces
-it with its value. C<$foo>, then, turns into 'Fred', and that's finally
-what's left in the string:
-
- $string =~ s/(\$\w+)/$1/eeg; # 'Say hello to Fred and Barney'
-
-The C</e> will also silently ignore violations of strict, replacing
-undefined variable names with the empty string. Since I'm using the
-C</e> flag (twice even!), I have all of the same security problems I
-have with C<eval> in its string form. If there's something odd in
-C<$foo>, perhaps something like C<@{[ system "rm -rf /" ]}>, then
-I could get myself in trouble.
-
-To get around the security problem, I could also pull the values from
-a hash instead of evaluating variable names. Using a single C</e>, I
-can check the hash to ensure the value exists, and if it doesn't, I
-can replace the missing value with a marker, in this case C<???> to
-signal that I missed something:
-
- my $string = 'This has $foo and $bar';
-
- my %Replacements = (
- foo => 'Fred',
- );
-
- # $string =~ s/\$(\w+)/$Replacements{$1}/g;
- $string =~ s/\$(\w+)/
- exists $Replacements{$1} ? $Replacements{$1} : '???'
- /eg;
-
- print $string;
-
-=head2 What's wrong with always quoting "$vars"?
-
-The problem is that those double-quotes force
-stringification--coercing numbers and references into strings--even
-when you don't want them to be strings. Think of it this way:
-double-quote expansion is used to produce new strings. If you already
-have a string, why do you need more?
-
-If you get used to writing odd things like these:
-
- print "$var"; # BAD
- $new = "$old"; # BAD
- somefunc("$var"); # BAD
-
-You'll be in trouble. Those should (in 99.8% of the cases) be
-the simpler and more direct:
-
- print $var;
- $new = $old;
- somefunc($var);
-
-Otherwise, besides slowing you down, you're going to break code when
-the thing in the scalar is actually neither a string nor a number, but
-a reference:
-
- func(\@array);
- sub func {
- my $aref = shift;
- my $oref = "$aref"; # WRONG
- }
-
-You can also get into subtle problems on those few operations in Perl
-that actually do care about the difference between a string and a
-number, such as the magical C<++> autoincrement operator or the
-syscall() function.
-
-Stringification also destroys arrays.
-
- @lines = `command`;
- print "@lines"; # WRONG - extra blanks
- print @lines; # right
-
-=head2 Why don't my E<lt>E<lt>HERE documents work?
-
-Here documents are found in L<perlop>. Check for these three things:
-
-=over 4
-
-=item There must be no space after the E<lt>E<lt> part.
-
-=item There (probably) should be a semicolon at the end of the opening token
-
-=item You can't (easily) have any space in front of the tag.
-
-=item There needs to be at least a line separator after the end token.
-
-=back
-
-If you want to indent the text in the here document, you
-can do this:
-
- # all in one
- ($VAR = <<HERE_TARGET) =~ s/^\s+//gm;
- your text
- goes here
- HERE_TARGET
-
-But the HERE_TARGET must still be flush against the margin.
-If you want that indented also, you'll have to quote
-in the indentation.
-
- ($quote = <<' FINIS') =~ s/^\s+//gm;
- ...we will have peace, when you and all your works have
- perished--and the works of your dark master to whom you
- would deliver us. You are a liar, Saruman, and a corrupter
- of men's hearts. --Theoden in /usr/src/perl/taint.c
- FINIS
- $quote =~ s/\s+--/\n--/;
-
-A nice general-purpose fixer-upper function for indented here documents
-follows. It expects to be called with a here document as its argument.
-It looks to see whether each line begins with a common substring, and
-if so, strips that substring off. Otherwise, it takes the amount of leading
-whitespace found on the first line and removes that much off each
-subsequent line.
-
- sub fix {
- local $_ = shift;
- my ($white, $leader); # common whitespace and common leading string
- if (/^\s*(?:([^\w\s]+)(\s*).*\n)(?:\s*\g1\g2?.*\n)+$/) {
- ($white, $leader) = ($2, quotemeta($1));
- } else {
- ($white, $leader) = (/^(\s+)/, '');
- }
- s/^\s*?$leader(?:$white)?//gm;
- return $_;
- }
-
-This works with leading special strings, dynamically determined:
-
- $remember_the_main = fix<<' MAIN_INTERPRETER_LOOP';
- @@@ int
- @@@ runops() {
- @@@ SAVEI32(runlevel);
- @@@ runlevel++;
- @@@ while ( op = (*op->op_ppaddr)() );
- @@@ TAINT_NOT;
- @@@ return 0;
- @@@ }
- MAIN_INTERPRETER_LOOP
-
-Or with a fixed amount of leading whitespace, with remaining
-indentation correctly preserved:
-
- $poem = fix<<EVER_ON_AND_ON;
- Now far ahead the Road has gone,
- And I must follow, if I can,
- Pursuing it with eager feet,
- Until it joins some larger way
- Where many paths and errands meet.
- And whither then? I cannot say.
- --Bilbo in /usr/src/perl/pp_ctl.c
- EVER_ON_AND_ON
-
-=head1 Data: Arrays
-
-=head2 What is the difference between a list and an array?
-
-(contributed by brian d foy)
-
-A list is a fixed collection of scalars. An array is a variable that
-holds a variable collection of scalars. An array can supply its collection
-for list operations, so list operations also work on arrays:
-
- # slices
- ( 'dog', 'cat', 'bird' )[2,3];
- @animals[2,3];
-
- # iteration
- foreach ( qw( dog cat bird ) ) { ... }
- foreach ( @animals ) { ... }
-
- my @three = grep { length == 3 } qw( dog cat bird );
- my @three = grep { length == 3 } @animals;
-
- # supply an argument list
- wash_animals( qw( dog cat bird ) );
- wash_animals( @animals );
-
-Array operations, which change the scalars, rearranges them, or adds
-or subtracts some scalars, only work on arrays. These can't work on a
-list, which is fixed. Array operations include C<shift>, C<unshift>,
-C<push>, C<pop>, and C<splice>.
-
-An array can also change its length:
-
- $#animals = 1; # truncate to two elements
- $#animals = 10000; # pre-extend to 10,001 elements
-
-You can change an array element, but you can't change a list element:
-
- $animals[0] = 'Rottweiler';
- qw( dog cat bird )[0] = 'Rottweiler'; # syntax error!
-
- foreach ( @animals ) {
- s/^d/fr/; # works fine
- }
-
- foreach ( qw( dog cat bird ) ) {
- s/^d/fr/; # Error! Modification of read only value!
- }
-
-However, if the list element is itself a variable, it appears that you
-can change a list element. However, the list element is the variable, not
-the data. You're not changing the list element, but something the list
-element refers to. The list element itself doesn't change: it's still
-the same variable.
-
-You also have to be careful about context. You can assign an array to
-a scalar to get the number of elements in the array. This only works
-for arrays, though:
-
- my $count = @animals; # only works with arrays
-
-If you try to do the same thing with what you think is a list, you
-get a quite different result. Although it looks like you have a list
-on the righthand side, Perl actually sees a bunch of scalars separated
-by a comma:
-
- my $scalar = ( 'dog', 'cat', 'bird' ); # $scalar gets bird
-
-Since you're assigning to a scalar, the righthand side is in scalar
-context. The comma operator (yes, it's an operator!) in scalar
-context evaluates its lefthand side, throws away the result, and
-evaluates it's righthand side and returns the result. In effect,
-that list-lookalike assigns to C<$scalar> it's rightmost value. Many
-people mess this up because they choose a list-lookalike whose
-last element is also the count they expect:
-
- my $scalar = ( 1, 2, 3 ); # $scalar gets 3, accidentally
-
-=head2 What is the difference between $array[1] and @array[1]?
-
-(contributed by brian d foy)
-
-The difference is the sigil, that special character in front of the
-array name. The C<$> sigil means "exactly one item", while the C<@>
-sigil means "zero or more items". The C<$> gets you a single scalar,
-while the C<@> gets you a list.
-
-The confusion arises because people incorrectly assume that the sigil
-denotes the variable type.
-
-The C<$array[1]> is a single-element access to the array. It's going
-to return the item in index 1 (or undef if there is no item there).
-If you intend to get exactly one element from the array, this is the
-form you should use.
-
-The C<@array[1]> is an array slice, although it has only one index.
-You can pull out multiple elements simultaneously by specifying
-additional indices as a list, like C<@array[1,4,3,0]>.
-
-Using a slice on the lefthand side of the assignment supplies list
-context to the righthand side. This can lead to unexpected results.
-For instance, if you want to read a single line from a filehandle,
-assigning to a scalar value is fine:
-
- $array[1] = <STDIN>;
-
-However, in list context, the line input operator returns all of the
-lines as a list. The first line goes into C<@array[1]> and the rest
-of the lines mysteriously disappear:
-
- @array[1] = <STDIN>; # most likely not what you want
-
-Either the C<use warnings> pragma or the B<-w> flag will warn you when
-you use an array slice with a single index.
-
-=head2 How can I remove duplicate elements from a list or array?
-
-(contributed by brian d foy)
-
-Use a hash. When you think the words "unique" or "duplicated", think
-"hash keys".
-
-If you don't care about the order of the elements, you could just
-create the hash then extract the keys. It's not important how you
-create that hash: just that you use C<keys> to get the unique
-elements.
-
- my %hash = map { $_, 1 } @array;
- # or a hash slice: @hash{ @array } = ();
- # or a foreach: $hash{$_} = 1 foreach ( @array );
-
- my @unique = keys %hash;
-
-If you want to use a module, try the C<uniq> function from
-C<List::MoreUtils>. In list context it returns the unique elements,
-preserving their order in the list. In scalar context, it returns the
-number of unique elements.
-
- use List::MoreUtils qw(uniq);
-
- my @unique = uniq( 1, 2, 3, 4, 4, 5, 6, 5, 7 ); # 1,2,3,4,5,6,7
- my $unique = uniq( 1, 2, 3, 4, 4, 5, 6, 5, 7 ); # 7
-
-You can also go through each element and skip the ones you've seen
-before. Use a hash to keep track. The first time the loop sees an
-element, that element has no key in C<%Seen>. The C<next> statement
-creates the key and immediately uses its value, which is C<undef>, so
-the loop continues to the C<push> and increments the value for that
-key. The next time the loop sees that same element, its key exists in
-the hash I<and> the value for that key is true (since it's not 0 or
-C<undef>), so the next skips that iteration and the loop goes to the
-next element.
-
- my @unique = ();
- my %seen = ();
-
- foreach my $elem ( @array )
- {
- next if $seen{ $elem }++;
- push @unique, $elem;
- }
-
-You can write this more briefly using a grep, which does the
-same thing.
-
- my %seen = ();
- my @unique = grep { ! $seen{ $_ }++ } @array;
-
-=head2 How can I tell whether a certain element is contained in a list or array?
-
-(portions of this answer contributed by Anno Siegel and brian d foy)
-
-Hearing the word "in" is an I<in>dication that you probably should have
-used a hash, not a list or array, to store your data. Hashes are
-designed to answer this question quickly and efficiently. Arrays aren't.
-
-That being said, there are several ways to approach this. In Perl 5.10
-and later, you can use the smart match operator to check that an item is
-contained in an array or a hash:
-
- use 5.010;
-
- if( $item ~~ @array )
- {
- say "The array contains $item"
- }
-
- if( $item ~~ %hash )
- {
- say "The hash contains $item"
- }
-
-With earlier versions of Perl, you have to do a bit more work. If you
-are going to make this query many times over arbitrary string values,
-the fastest way is probably to invert the original array and maintain a
-hash whose keys are the first array's values:
-
- @blues = qw/azure cerulean teal turquoise lapis-lazuli/;
- %is_blue = ();
- for (@blues) { $is_blue{$_} = 1 }
-
-Now you can check whether C<$is_blue{$some_color}>. It might have
-been a good idea to keep the blues all in a hash in the first place.
-
-If the values are all small integers, you could use a simple indexed
-array. This kind of an array will take up less space:
-
- @primes = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31);
- @is_tiny_prime = ();
- for (@primes) { $is_tiny_prime[$_] = 1 }
- # or simply @istiny_prime[@primes] = (1) x @primes;
-
-Now you check whether $is_tiny_prime[$some_number].
-
-If the values in question are integers instead of strings, you can save
-quite a lot of space by using bit strings instead:
-
- @articles = ( 1..10, 150..2000, 2017 );
- undef $read;
- for (@articles) { vec($read,$_,1) = 1 }
-
-Now check whether C<vec($read,$n,1)> is true for some C<$n>.
-
-These methods guarantee fast individual tests but require a re-organization
-of the original list or array. They only pay off if you have to test
-multiple values against the same array.
-
-If you are testing only once, the standard module C<List::Util> exports
-the function C<first> for this purpose. It works by stopping once it
-finds the element. It's written in C for speed, and its Perl equivalent
-looks like this subroutine:
-
- sub first (&@) {
- my $code = shift;
- foreach (@_) {
- return $_ if &{$code}();
- }
- undef;
- }
-
-If speed is of little concern, the common idiom uses grep in scalar context
-(which returns the number of items that passed its condition) to traverse the
-entire list. This does have the benefit of telling you how many matches it
-found, though.
-
- my $is_there = grep $_ eq $whatever, @array;
-
-If you want to actually extract the matching elements, simply use grep in
-list context.
-
- my @matches = grep $_ eq $whatever, @array;
-
-=head2 How do I compute the difference of two arrays? How do I compute the intersection of two arrays?
-
-Use a hash. Here's code to do both and more. It assumes that each
-element is unique in a given array:
-
- @union = @intersection = @difference = ();
- %count = ();
- foreach $element (@array1, @array2) { $count{$element}++ }
- foreach $element (keys %count) {
- push @union, $element;
- push @{ $count{$element} > 1 ? \@intersection : \@difference }, $element;
- }
-
-Note that this is the I<symmetric difference>, that is, all elements
-in either A or in B but not in both. Think of it as an xor operation.
-
-=head2 How do I test whether two arrays or hashes are equal?
-
-With Perl 5.10 and later, the smart match operator can give you the answer
-with the least amount of work:
-
- use 5.010;
-
- if( @array1 ~~ @array2 )
- {
- say "The arrays are the same";
- }
-
- if( %hash1 ~~ %hash2 ) # doesn't check values!
- {
- say "The hash keys are the same";
- }
-
-The following code works for single-level arrays. It uses a
-stringwise comparison, and does not distinguish defined versus
-undefined empty strings. Modify if you have other needs.
-
- $are_equal = compare_arrays(\@frogs, \@toads);
-
- sub compare_arrays {
- my ($first, $second) = @_;
- no warnings; # silence spurious -w undef complaints
- return 0 unless @$first == @$second;
- for (my $i = 0; $i < @$first; $i++) {
- return 0 if $first->[$i] ne $second->[$i];
- }
- return 1;
- }
-
-For multilevel structures, you may wish to use an approach more
-like this one. It uses the CPAN module C<FreezeThaw>:
-
- use FreezeThaw qw(cmpStr);
- @a = @b = ( "this", "that", [ "more", "stuff" ] );
-
- printf "a and b contain %s arrays\n",
- cmpStr(\@a, \@b) == 0
- ? "the same"
- : "different";
-
-This approach also works for comparing hashes. Here we'll demonstrate
-two different answers:
-
- use FreezeThaw qw(cmpStr cmpStrHard);
-
- %a = %b = ( "this" => "that", "extra" => [ "more", "stuff" ] );
- $a{EXTRA} = \%b;
- $b{EXTRA} = \%a;
-
- printf "a and b contain %s hashes\n",
- cmpStr(\%a, \%b) == 0 ? "the same" : "different";
-
- printf "a and b contain %s hashes\n",
- cmpStrHard(\%a, \%b) == 0 ? "the same" : "different";
-
-
-The first reports that both those the hashes contain the same data,
-while the second reports that they do not. Which you prefer is left as
-an exercise to the reader.
-
-=head2 How do I find the first array element for which a condition is true?
-
-To find the first array element which satisfies a condition, you can
-use the C<first()> function in the C<List::Util> module, which comes
-with Perl 5.8. This example finds the first element that contains
-"Perl".
-
- use List::Util qw(first);
-
- my $element = first { /Perl/ } @array;
-
-If you cannot use C<List::Util>, you can make your own loop to do the
-same thing. Once you find the element, you stop the loop with last.
-
- my $found;
- foreach ( @array ) {
- if( /Perl/ ) { $found = $_; last }
- }
-
-If you want the array index, you can iterate through the indices
-and check the array element at each index until you find one
-that satisfies the condition.
-
- my( $found, $index ) = ( undef, -1 );
- for( $i = 0; $i < @array; $i++ ) {
- if( $array[$i] =~ /Perl/ ) {
- $found = $array[$i];
- $index = $i;
- last;
- }
- }
-
-=head2 How do I handle linked lists?
-
-(contributed by brian d foy)
-
-Perl's arrays do not have a fixed size, so you don't need linked lists
-if you just want to add or remove items. You can use array operations
-such as C<push>, C<pop>, C<shift>, C<unshift>, or C<splice> to do
-that.
-
-Sometimes, however, linked lists can be useful in situations where you
-want to "shard" an array so you have have many small arrays instead of
-a single big array. You can keep arrays longer than Perl's largest
-array index, lock smaller arrays separately in threaded programs,
-reallocate less memory, or quickly insert elements in the middle of
-the chain.
-
-Steve Lembark goes through the details in his YAPC::NA 2009 talk "Perly
-Linked Lists" ( http://www.slideshare.net/lembark/perly-linked-lists ),
-although you can just use his C<LinkedList::Single> module.
-
-=head2 How do I handle circular lists?
-X<circular> X<array> X<Tie::Cycle> X<Array::Iterator::Circular>
-X<cycle> X<modulus>
-
-(contributed by brian d foy)
-
-If you want to cycle through an array endlessly, you can increment the
-index modulo the number of elements in the array:
-
- my @array = qw( a b c );
- my $i = 0;
-
- while( 1 ) {
- print $array[ $i++ % @array ], "\n";
- last if $i > 20;
- }
-
-You can also use C<Tie::Cycle> to use a scalar that always has the
-next element of the circular array:
-
- use Tie::Cycle;
-
- tie my $cycle, 'Tie::Cycle', [ qw( FFFFFF 000000 FFFF00 ) ];
-
- print $cycle; # FFFFFF
- print $cycle; # 000000
- print $cycle; # FFFF00
-
-The C<Array::Iterator::Circular> creates an iterator object for
-circular arrays:
-
- use Array::Iterator::Circular;
-
- my $color_iterator = Array::Iterator::Circular->new(
- qw(red green blue orange)
- );
-
- foreach ( 1 .. 20 ) {
- print $color_iterator->next, "\n";
- }
-
-=head2 How do I shuffle an array randomly?
-
-If you either have Perl 5.8.0 or later installed, or if you have
-Scalar-List-Utils 1.03 or later installed, you can say:
-
- use List::Util 'shuffle';
-
- @shuffled = shuffle(@list);
-
-If not, you can use a Fisher-Yates shuffle.
-
- sub fisher_yates_shuffle {
- my $deck = shift; # $deck is a reference to an array
- return unless @$deck; # must not be empty!
-
- my $i = @$deck;
- while (--$i) {
- my $j = int rand ($i+1);
- @$deck[$i,$j] = @$deck[$j,$i];
- }
- }
-
- # shuffle my mpeg collection
- #
- my @mpeg = <audio/*/*.mp3>;
- fisher_yates_shuffle( \@mpeg ); # randomize @mpeg in place
- print @mpeg;
-
-Note that the above implementation shuffles an array in place,
-unlike the C<List::Util::shuffle()> which takes a list and returns
-a new shuffled list.
-
-You've probably seen shuffling algorithms that work using splice,
-randomly picking another element to swap the current element with
-
- srand;
- @new = ();
- @old = 1 .. 10; # just a demo
- while (@old) {
- push(@new, splice(@old, rand @old, 1));
- }
-
-This is bad because splice is already O(N), and since you do it N
-times, you just invented a quadratic algorithm; that is, O(N**2).
-This does not scale, although Perl is so efficient that you probably
-won't notice this until you have rather largish arrays.
-
-=head2 How do I process/modify each element of an array?
-
-Use C<for>/C<foreach>:
-
- for (@lines) {
- s/foo/bar/; # change that word
- tr/XZ/ZX/; # swap those letters
- }
-
-Here's another; let's compute spherical volumes:
-
- for (@volumes = @radii) { # @volumes has changed parts
- $_ **= 3;
- $_ *= (4/3) * 3.14159; # this will be constant folded
- }
-
-which can also be done with C<map()> which is made to transform
-one list into another:
-
- @volumes = map {$_ ** 3 * (4/3) * 3.14159} @radii;
-
-If you want to do the same thing to modify the values of the
-hash, you can use the C<values> function. As of Perl 5.6
-the values are not copied, so if you modify $orbit (in this
-case), you modify the value.
-
- for $orbit ( values %orbits ) {
- ($orbit **= 3) *= (4/3) * 3.14159;
- }
-
-Prior to perl 5.6 C<values> returned copies of the values,
-so older perl code often contains constructions such as
-C<@orbits{keys %orbits}> instead of C<values %orbits> where
-the hash is to be modified.
-
-=head2 How do I select a random element from an array?
-
-Use the C<rand()> function (see L<perlfunc/rand>):
-
- $index = rand @array;
- $element = $array[$index];
-
-Or, simply:
-
- my $element = $array[ rand @array ];
-
-=head2 How do I permute N elements of a list?
-X<List::Permutor> X<permute> X<Algorithm::Loops> X<Knuth>
-X<The Art of Computer Programming> X<Fischer-Krause>
-
-Use the C<List::Permutor> module on CPAN. If the list is actually an
-array, try the C<Algorithm::Permute> module (also on CPAN). It's
-written in XS code and is very efficient:
-
- use Algorithm::Permute;
-
- my @array = 'a'..'d';
- my $p_iterator = Algorithm::Permute->new ( \@array );
-
- while (my @perm = $p_iterator->next) {
- print "next permutation: (@perm)\n";
- }
-
-For even faster execution, you could do:
-
- use Algorithm::Permute;
-
- my @array = 'a'..'d';
-
- Algorithm::Permute::permute {
- print "next permutation: (@array)\n";
- } @array;
-
-Here's a little program that generates all permutations of all the
-words on each line of input. The algorithm embodied in the
-C<permute()> function is discussed in Volume 4 (still unpublished) of
-Knuth's I<The Art of Computer Programming> and will work on any list:
-
- #!/usr/bin/perl -n
- # Fischer-Krause ordered permutation generator
-
- sub permute (&@) {
- my $code = shift;
- my @idx = 0..$#_;
- while ( $code->(@_[@idx]) ) {
- my $p = $#idx;
- --$p while $idx[$p-1] > $idx[$p];
- my $q = $p or return;
- push @idx, reverse splice @idx, $p;
- ++$q while $idx[$p-1] > $idx[$q];
- @idx[$p-1,$q]=@idx[$q,$p-1];
- }
- }
-
- permute { print "@_\n" } split;
-
-The C<Algorithm::Loops> module also provides the C<NextPermute> and
-C<NextPermuteNum> functions which efficiently find all unique permutations
-of an array, even if it contains duplicate values, modifying it in-place:
-if its elements are in reverse-sorted order then the array is reversed,
-making it sorted, and it returns false; otherwise the next
-permutation is returned.
-
-C<NextPermute> uses string order and C<NextPermuteNum> numeric order, so
-you can enumerate all the permutations of C<0..9> like this:
-
- use Algorithm::Loops qw(NextPermuteNum);
-
- my @list= 0..9;
- do { print "@list\n" } while NextPermuteNum @list;
-
-=head2 How do I sort an array by (anything)?
-
-Supply a comparison function to sort() (described in L<perlfunc/sort>):
-
- @list = sort { $a <=> $b } @list;
-
-The default sort function is cmp, string comparison, which would
-sort C<(1, 2, 10)> into C<(1, 10, 2)>. C<< <=> >>, used above, is
-the numerical comparison operator.
-
-If you have a complicated function needed to pull out the part you
-want to sort on, then don't do it inside the sort function. Pull it
-out first, because the sort BLOCK can be called many times for the
-same element. Here's an example of how to pull out the first word
-after the first number on each item, and then sort those words
-case-insensitively.
-
- @idx = ();
- for (@data) {
- ($item) = /\d+\s*(\S+)/;
- push @idx, uc($item);
- }
- @sorted = @data[ sort { $idx[$a] cmp $idx[$b] } 0 .. $#idx ];
-
-which could also be written this way, using a trick
-that's come to be known as the Schwartzian Transform:
-
- @sorted = map { $_->[0] }
- sort { $a->[1] cmp $b->[1] }
- map { [ $_, uc( (/\d+\s*(\S+)/)[0]) ] } @data;
-
-If you need to sort on several fields, the following paradigm is useful.
-
- @sorted = sort {
- field1($a) <=> field1($b) ||
- field2($a) cmp field2($b) ||
- field3($a) cmp field3($b)
- } @data;
-
-This can be conveniently combined with precalculation of keys as given
-above.
-
-See the F<sort> article in the "Far More Than You Ever Wanted
-To Know" collection in http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz for
-more about this approach.
-
-See also the question later in L<perlfaq4> on sorting hashes.
-
-=head2 How do I manipulate arrays of bits?
-
-Use C<pack()> and C<unpack()>, or else C<vec()> and the bitwise
-operations.
-
-For example, you don't have to store individual bits in an array
-(which would mean that you're wasting a lot of space). To convert an
-array of bits to a string, use C<vec()> to set the right bits. This
-sets C<$vec> to have bit N set only if C<$ints[N]> was set:
-
- @ints = (...); # array of bits, e.g. ( 1, 0, 0, 1, 1, 0 ... )
- $vec = '';
- foreach( 0 .. $#ints ) {
- vec($vec,$_,1) = 1 if $ints[$_];
- }
-
-The string C<$vec> only takes up as many bits as it needs. For
-instance, if you had 16 entries in C<@ints>, C<$vec> only needs two
-bytes to store them (not counting the scalar variable overhead).
-
-Here's how, given a vector in C<$vec>, you can get those bits into
-your C<@ints> array:
-
- sub bitvec_to_list {
- my $vec = shift;
- my @ints;
- # Find null-byte density then select best algorithm
- if ($vec =~ tr/\0// / length $vec > 0.95) {
- use integer;
- my $i;
-
- # This method is faster with mostly null-bytes
- while($vec =~ /[^\0]/g ) {
- $i = -9 + 8 * pos $vec;
- push @ints, $i if vec($vec, ++$i, 1);
- push @ints, $i if vec($vec, ++$i, 1);
- push @ints, $i if vec($vec, ++$i, 1);
- push @ints, $i if vec($vec, ++$i, 1);
- push @ints, $i if vec($vec, ++$i, 1);
- push @ints, $i if vec($vec, ++$i, 1);
- push @ints, $i if vec($vec, ++$i, 1);
- push @ints, $i if vec($vec, ++$i, 1);
- }
- }
- else {
- # This method is a fast general algorithm
- use integer;
- my $bits = unpack "b*", $vec;
- push @ints, 0 if $bits =~ s/^(\d)// && $1;
- push @ints, pos $bits while($bits =~ /1/g);
- }
-
- return \@ints;
- }
-
-This method gets faster the more sparse the bit vector is.
-(Courtesy of Tim Bunce and Winfried Koenig.)
-
-You can make the while loop a lot shorter with this suggestion
-from Benjamin Goldberg:
-
- while($vec =~ /[^\0]+/g ) {
- push @ints, grep vec($vec, $_, 1), $-[0] * 8 .. $+[0] * 8;
- }
-
-Or use the CPAN module C<Bit::Vector>:
-
- $vector = Bit::Vector->new($num_of_bits);
- $vector->Index_List_Store(@ints);
- @ints = $vector->Index_List_Read();
-
-C<Bit::Vector> provides efficient methods for bit vector, sets of
-small integers and "big int" math.
-
-Here's a more extensive illustration using vec():
-
- # vec demo
- $vector = "\xff\x0f\xef\xfe";
- print "Ilya's string \\xff\\x0f\\xef\\xfe represents the number ",
- unpack("N", $vector), "\n";
- $is_set = vec($vector, 23, 1);
- print "Its 23rd bit is ", $is_set ? "set" : "clear", ".\n";
- pvec($vector);
-
- set_vec(1,1,1);
- set_vec(3,1,1);
- set_vec(23,1,1);
-
- set_vec(3,1,3);
- set_vec(3,2,3);
- set_vec(3,4,3);
- set_vec(3,4,7);
- set_vec(3,8,3);
- set_vec(3,8,7);
-
- set_vec(0,32,17);
- set_vec(1,32,17);
-
- sub set_vec {
- my ($offset, $width, $value) = @_;
- my $vector = '';
- vec($vector, $offset, $width) = $value;
- print "offset=$offset width=$width value=$value\n";
- pvec($vector);
- }
-
- sub pvec {
- my $vector = shift;
- my $bits = unpack("b*", $vector);
- my $i = 0;
- my $BASE = 8;
-
- print "vector length in bytes: ", length($vector), "\n";
- @bytes = unpack("A8" x length($vector), $bits);
- print "bits are: @bytes\n\n";
- }
-
-=head2 Why does defined() return true on empty arrays and hashes?
-
-The short story is that you should probably only use defined on scalars or
-functions, not on aggregates (arrays and hashes). See L<perlfunc/defined>
-in the 5.004 release or later of Perl for more detail.
-
-=head1 Data: Hashes (Associative Arrays)
-
-=head2 How do I process an entire hash?
-
-(contributed by brian d foy)
-
-There are a couple of ways that you can process an entire hash. You
-can get a list of keys, then go through each key, or grab a one
-key-value pair at a time.
-
-To go through all of the keys, use the C<keys> function. This extracts
-all of the keys of the hash and gives them back to you as a list. You
-can then get the value through the particular key you're processing:
-
- foreach my $key ( keys %hash ) {
- my $value = $hash{$key}
- ...
- }
-
-Once you have the list of keys, you can process that list before you
-process the hash elements. For instance, you can sort the keys so you
-can process them in lexical order:
-
- foreach my $key ( sort keys %hash ) {
- my $value = $hash{$key}
- ...
- }
-
-Or, you might want to only process some of the items. If you only want
-to deal with the keys that start with C<text:>, you can select just
-those using C<grep>:
-
- foreach my $key ( grep /^text:/, keys %hash ) {
- my $value = $hash{$key}
- ...
- }
-
-If the hash is very large, you might not want to create a long list of
-keys. To save some memory, you can grab one key-value pair at a time using
-C<each()>, which returns a pair you haven't seen yet:
-
- while( my( $key, $value ) = each( %hash ) ) {
- ...
- }
-
-The C<each> operator returns the pairs in apparently random order, so if
-ordering matters to you, you'll have to stick with the C<keys> method.
-
-The C<each()> operator can be a bit tricky though. You can't add or
-delete keys of the hash while you're using it without possibly
-skipping or re-processing some pairs after Perl internally rehashes
-all of the elements. Additionally, a hash has only one iterator, so if
-you use C<keys>, C<values>, or C<each> on the same hash, you can reset
-the iterator and mess up your processing. See the C<each> entry in
-L<perlfunc> for more details.
-
-=head2 How do I merge two hashes?
-X<hash> X<merge> X<slice, hash>
-
-(contributed by brian d foy)
-
-Before you decide to merge two hashes, you have to decide what to do
-if both hashes contain keys that are the same and if you want to leave
-the original hashes as they were.
-
-If you want to preserve the original hashes, copy one hash (C<%hash1>)
-to a new hash (C<%new_hash>), then add the keys from the other hash
-(C<%hash2> to the new hash. Checking that the key already exists in
-C<%new_hash> gives you a chance to decide what to do with the
-duplicates:
-
- my %new_hash = %hash1; # make a copy; leave %hash1 alone
-
- foreach my $key2 ( keys %hash2 )
- {
- if( exists $new_hash{$key2} )
- {
- warn "Key [$key2] is in both hashes!";
- # handle the duplicate (perhaps only warning)
- ...
- next;
- }
- else
- {
- $new_hash{$key2} = $hash2{$key2};
- }
- }
-
-If you don't want to create a new hash, you can still use this looping
-technique; just change the C<%new_hash> to C<%hash1>.
-
- foreach my $key2 ( keys %hash2 )
- {
- if( exists $hash1{$key2} )
- {
- warn "Key [$key2] is in both hashes!";
- # handle the duplicate (perhaps only warning)
- ...
- next;
- }
- else
- {
- $hash1{$key2} = $hash2{$key2};
- }
- }
-
-If you don't care that one hash overwrites keys and values from the other, you
-could just use a hash slice to add one hash to another. In this case, values
-from C<%hash2> replace values from C<%hash1> when they have keys in common:
-
- @hash1{ keys %hash2 } = values %hash2;
-
-=head2 What happens if I add or remove keys from a hash while iterating over it?
-
-(contributed by brian d foy)
-
-The easy answer is "Don't do that!"
-
-If you iterate through the hash with each(), you can delete the key
-most recently returned without worrying about it. If you delete or add
-other keys, the iterator may skip or double up on them since perl
-may rearrange the hash table. See the
-entry for C<each()> in L<perlfunc>.
-
-=head2 How do I look up a hash element by value?
-
-Create a reverse hash:
-
- %by_value = reverse %by_key;
- $key = $by_value{$value};
-
-That's not particularly efficient. It would be more space-efficient
-to use:
-
- while (($key, $value) = each %by_key) {
- $by_value{$value} = $key;
- }
-
-If your hash could have repeated values, the methods above will only find
-one of the associated keys. This may or may not worry you. If it does
-worry you, you can always reverse the hash into a hash of arrays instead:
-
- while (($key, $value) = each %by_key) {
- push @{$key_list_by_value{$value}}, $key;
- }
-
-=head2 How can I know how many entries are in a hash?
-
-(contributed by brian d foy)
-
-This is very similar to "How do I process an entire hash?", also in
-L<perlfaq4>, but a bit simpler in the common cases.
-
-You can use the C<keys()> built-in function in scalar context to find out
-have many entries you have in a hash:
-
- my $key_count = keys %hash; # must be scalar context!
-
-If you want to find out how many entries have a defined value, that's
-a bit different. You have to check each value. A C<grep> is handy:
-
- my $defined_value_count = grep { defined } values %hash;
-
-You can use that same structure to count the entries any way that
-you like. If you want the count of the keys with vowels in them,
-you just test for that instead:
-
- my $vowel_count = grep { /[aeiou]/ } keys %hash;
-
-The C<grep> in scalar context returns the count. If you want the list
-of matching items, just use it in list context instead:
-
- my @defined_values = grep { defined } values %hash;
-
-The C<keys()> function also resets the iterator, which means that you may
-see strange results if you use this between uses of other hash operators
-such as C<each()>.
-
-=head2 How do I sort a hash (optionally by value instead of key)?
-
-(contributed by brian d foy)
-
-To sort a hash, start with the keys. In this example, we give the list of
-keys to the sort function which then compares them ASCIIbetically (which
-might be affected by your locale settings). The output list has the keys
-in ASCIIbetical order. Once we have the keys, we can go through them to
-create a report which lists the keys in ASCIIbetical order.
-
- my @keys = sort { $a cmp $b } keys %hash;
-
- foreach my $key ( @keys )
- {
- printf "%-20s %6d\n", $key, $hash{$key};
- }
-
-We could get more fancy in the C<sort()> block though. Instead of
-comparing the keys, we can compute a value with them and use that
-value as the comparison.
-
-For instance, to make our report order case-insensitive, we use
-the C<\L> sequence in a double-quoted string to make everything
-lowercase. The C<sort()> block then compares the lowercased
-values to determine in which order to put the keys.
-
- my @keys = sort { "\L$a" cmp "\L$b" } keys %hash;
-
-Note: if the computation is expensive or the hash has many elements,
-you may want to look at the Schwartzian Transform to cache the
-computation results.
-
-If we want to sort by the hash value instead, we use the hash key
-to look it up. We still get out a list of keys, but this time they
-are ordered by their value.
-
- my @keys = sort { $hash{$a} <=> $hash{$b} } keys %hash;
-
-From there we can get more complex. If the hash values are the same,
-we can provide a secondary sort on the hash key.
-
- my @keys = sort {
- $hash{$a} <=> $hash{$b}
- or
- "\L$a" cmp "\L$b"
- } keys %hash;
-
-=head2 How can I always keep my hash sorted?
-X<hash tie sort DB_File Tie::IxHash>
-
-You can look into using the C<DB_File> module and C<tie()> using the
-C<$DB_BTREE> hash bindings as documented in L<DB_File/"In Memory
-Databases">. The C<Tie::IxHash> module from CPAN might also be
-instructive. Although this does keep your hash sorted, you might not
-like the slowdown you suffer from the tie interface. Are you sure you
-need to do this? :)
-
-=head2 What's the difference between "delete" and "undef" with hashes?
-
-Hashes contain pairs of scalars: the first is the key, the
-second is the value. The key will be coerced to a string,
-although the value can be any kind of scalar: string,
-number, or reference. If a key C<$key> is present in
-%hash, C<exists($hash{$key})> will return true. The value
-for a given key can be C<undef>, in which case
-C<$hash{$key}> will be C<undef> while C<exists $hash{$key}>
-will return true. This corresponds to (C<$key>, C<undef>)
-being in the hash.
-
-Pictures help... Here's the C<%hash> table:
-
- keys values
- +------+------+
- | a | 3 |
- | x | 7 |
- | d | 0 |
- | e | 2 |
- +------+------+
-
-And these conditions hold
-
- $hash{'a'} is true
- $hash{'d'} is false
- defined $hash{'d'} is true
- defined $hash{'a'} is true
- exists $hash{'a'} is true (Perl 5 only)
- grep ($_ eq 'a', keys %hash) is true
-
-If you now say
-
- undef $hash{'a'}
-
-your table now reads:
-
-
- keys values
- +------+------+
- | a | undef|
- | x | 7 |
- | d | 0 |
- | e | 2 |
- +------+------+
-
-and these conditions now hold; changes in caps:
-
- $hash{'a'} is FALSE
- $hash{'d'} is false
- defined $hash{'d'} is true
- defined $hash{'a'} is FALSE
- exists $hash{'a'} is true (Perl 5 only)
- grep ($_ eq 'a', keys %hash) is true
-
-Notice the last two: you have an undef value, but a defined key!
-
-Now, consider this:
-
- delete $hash{'a'}
-
-your table now reads:
-
- keys values
- +------+------+
- | x | 7 |
- | d | 0 |
- | e | 2 |
- +------+------+
-
-and these conditions now hold; changes in caps:
-
- $hash{'a'} is false
- $hash{'d'} is false
- defined $hash{'d'} is true
- defined $hash{'a'} is false
- exists $hash{'a'} is FALSE (Perl 5 only)
- grep ($_ eq 'a', keys %hash) is FALSE
-
-See, the whole entry is gone!
-
-=head2 Why don't my tied hashes make the defined/exists distinction?
-
-This depends on the tied hash's implementation of EXISTS().
-For example, there isn't the concept of undef with hashes
-that are tied to DBM* files. It also means that exists() and
-defined() do the same thing with a DBM* file, and what they
-end up doing is not what they do with ordinary hashes.
-
-=head2 How do I reset an each() operation part-way through?
-
-(contributed by brian d foy)
-
-You can use the C<keys> or C<values> functions to reset C<each>. To
-simply reset the iterator used by C<each> without doing anything else,
-use one of them in void context:
-
- keys %hash; # resets iterator, nothing else.
- values %hash; # resets iterator, nothing else.
-
-See the documentation for C<each> in L<perlfunc>.
-
-=head2 How can I get the unique keys from two hashes?
-
-First you extract the keys from the hashes into lists, then solve
-the "removing duplicates" problem described above. For example:
-
- %seen = ();
- for $element (keys(%foo), keys(%bar)) {
- $seen{$element}++;
- }
- @uniq = keys %seen;
-
-Or more succinctly:
-
- @uniq = keys %{{%foo,%bar}};
-
-Or if you really want to save space:
-
- %seen = ();
- while (defined ($key = each %foo)) {
- $seen{$key}++;
- }
- while (defined ($key = each %bar)) {
- $seen{$key}++;
- }
- @uniq = keys %seen;
-
-=head2 How can I store a multidimensional array in a DBM file?
-
-Either stringify the structure yourself (no fun), or else
-get the MLDBM (which uses Data::Dumper) module from CPAN and layer
-it on top of either DB_File or GDBM_File. You might also try DBM::Deep, but
-it can be a bit slow.
-
-=head2 How can I make my hash remember the order I put elements into it?
-
-Use the C<Tie::IxHash> from CPAN.
-
- use Tie::IxHash;
-
- tie my %myhash, 'Tie::IxHash';
-
- for (my $i=0; $i<20; $i++) {
- $myhash{$i} = 2*$i;
- }
-
- my @keys = keys %myhash;
- # @keys = (0,1,2,3,...)
-
-=head2 Why does passing a subroutine an undefined element in a hash create it?
-
-(contributed by brian d foy)
-
-Are you using a really old version of Perl?
-
-Normally, accessing a hash key's value for a nonexistent key will
-I<not> create the key.
-
- my %hash = ();
- my $value = $hash{ 'foo' };
- print "This won't print\n" if exists $hash{ 'foo' };
-
-Passing C<$hash{ 'foo' }> to a subroutine used to be a special case, though.
-Since you could assign directly to C<$_[0]>, Perl had to be ready to
-make that assignment so it created the hash key ahead of time:
-
- my_sub( $hash{ 'foo' } );
- print "This will print before 5.004\n" if exists $hash{ 'foo' };
-
- sub my_sub {
- # $_[0] = 'bar'; # create hash key in case you do this
- 1;
- }
-
-Since Perl 5.004, however, this situation is a special case and Perl
-creates the hash key only when you make the assignment:
-
- my_sub( $hash{ 'foo' } );
- print "This will print, even after 5.004\n" if exists $hash{ 'foo' };
-
- sub my_sub {
- $_[0] = 'bar';
- }
-
-However, if you want the old behavior (and think carefully about that
-because it's a weird side effect), you can pass a hash slice instead.
-Perl 5.004 didn't make this a special case:
-
- my_sub( @hash{ qw/foo/ } );
-
-=head2 How can I make the Perl equivalent of a C structure/C++ class/hash or array of hashes or arrays?
-
-Usually a hash ref, perhaps like this:
-
- $record = {
- NAME => "Jason",
- EMPNO => 132,
- TITLE => "deputy peon",
- AGE => 23,
- SALARY => 37_000,
- PALS => [ "Norbert", "Rhys", "Phineas"],
- };
-
-References are documented in L<perlref> and L<perlreftut>.
-Examples of complex data structures are given in L<perldsc> and
-L<perllol>. Examples of structures and object-oriented classes are
-in L<perltoot>.
-
-=head2 How can I use a reference as a hash key?
-
-(contributed by brian d foy and Ben Morrow)
-
-Hash keys are strings, so you can't really use a reference as the key.
-When you try to do that, perl turns the reference into its stringified
-form (for instance, C<HASH(0xDEADBEEF)>). From there you can't get
-back the reference from the stringified form, at least without doing
-some extra work on your own.
-
-Remember that the entry in the hash will still be there even if
-the referenced variable goes out of scope, and that it is entirely
-possible for Perl to subsequently allocate a different variable at
-the same address. This will mean a new variable might accidentally
-be associated with the value for an old.
-
-If you have Perl 5.10 or later, and you just want to store a value
-against the reference for lookup later, you can use the core
-Hash::Util::Fieldhash module. This will also handle renaming the
-keys if you use multiple threads (which causes all variables to be
-reallocated at new addresses, changing their stringification), and
-garbage-collecting the entries when the referenced variable goes out
-of scope.
-
-If you actually need to be able to get a real reference back from
-each hash entry, you can use the Tie::RefHash module, which does the
-required work for you.
-
-=head2 How can I check if a key exists in a multilevel hash?
-
-(contributed by brian d foy)
-
-The trick to this problem is avoiding accidental autovivification. If
-you want to check three keys deep, you might naïvely try this:
-
- my %hash;
- if( exists $hash{key1}{key2}{key3} ) {
- ...;
- }
-
-Even though you started with a completely empty hash, after that call to
-C<exists> you've created the structure you needed to check for C<key3>:
-
- %hash = (
- 'key1' => {
- 'key2' => {}
- }
- );
-
-That's autovivification. You can get around this in a few ways. The
-easiest way is to just turn it off. The lexical C<autovivification>
-pragma is available on CPAN. Now you don't add to the hash:
-
- {
- no autovivification;
- my %hash;
- if( exists $hash{key1}{key2}{key3} ) {
- ...;
- }
- }
-
-The C<Data::Diver> module on CPAN can do it for you too. Its C<Dive>
-subroutine can tell you not only if the keys exist but also get the
-value:
-
- use Data::Diver qw(Dive);
-
- my @exists = Dive( \%hash, qw(key1 key2 key3) );
- if( ! @exists ) {
- ...; # keys do not exist
- }
- elsif( ! defined $exists[0] ) {
- ...; # keys exist but value is undef
- }
-
-You can easily do this yourself too by checking each level of the hash
-before you move onto the next level. This is essentially what
-C<Data::Diver> does for you:
-
- if( check_hash( \%hash, qw(key1 key2 key3) ) ) {
- ...;
- }
-
- sub check_hash {
- my( $hash, @keys ) = @_;
-
- return unless @keys;
-
- foreach my $key ( @keys ) {
- return unless eval { exists $hash->{$key} };
- $hash = $hash->{$key};
- }
-
- return 1;
- }
-
-=head1 Data: Misc
-
-=head2 How do I handle binary data correctly?
-
-Perl is binary-clean, so it can handle binary data just fine.
-On Windows or DOS, however, you have to use C<binmode> for binary
-files to avoid conversions for line endings. In general, you should
-use C<binmode> any time you want to work with binary data.
-
-Also see L<perlfunc/"binmode"> or L<perlopentut>.
-
-If you're concerned about 8-bit textual data then see L<perllocale>.
-If you want to deal with multibyte characters, however, there are
-some gotchas. See the section on Regular Expressions.
-
-=head2 How do I determine whether a scalar is a number/whole/integer/float?
-
-Assuming that you don't care about IEEE notations like "NaN" or
-"Infinity", you probably just want to use a regular expression:
-
- use 5.010;
-
- given( $number ) {
- when( /\D/ )
- { say "\thas nondigits"; continue }
- when( /^\d+\z/ )
- { say "\tis a whole number"; continue }
- when( /^-?\d+\z/ )
- { say "\tis an integer"; continue }
- when( /^[+-]?\d+\z/ )
- { say "\tis a +/- integer"; continue }
- when( /^-?(?:\d+\.?|\.\d)\d*\z/ )
- { say "\tis a real number"; continue }
- when( /^[+-]?(?=\.?\d)\d*\.?\d*(?:e[+-]?\d+)?\z/i)
- { say "\tis a C float" }
- }
-
-There are also some commonly used modules for the task.
-L<Scalar::Util> (distributed with 5.8) provides access to perl's
-internal function C<looks_like_number> for determining whether a
-variable looks like a number. L<Data::Types> exports functions that
-validate data types using both the above and other regular
-expressions. Thirdly, there is C<Regexp::Common> which has regular
-expressions to match various types of numbers. Those three modules are
-available from the CPAN.
-
-If you're on a POSIX system, Perl supports the C<POSIX::strtod>
-function for converting strings to doubles (and also C<POSIX::strtol>
-for longs). Its semantics are somewhat cumbersome, so here's a
-C<getnum> wrapper function for more convenient access. This function
-takes a string and returns the number it found, or C<undef> for input
-that isn't a C float. The C<is_numeric> function is a front end to
-C<getnum> if you just want to say, "Is this a float?"
-
- sub getnum {
- use POSIX qw(strtod);
- my $str = shift;
- $str =~ s/^\s+//;
- $str =~ s/\s+$//;
- $! = 0;
- my($num, $unparsed) = strtod($str);
- if (($str eq '') || ($unparsed != 0) || $!) {
- return undef;
- }
- else {
- return $num;
- }
- }
-
- sub is_numeric { defined getnum($_[0]) }
-
-Or you could check out the L<String::Scanf> module on the CPAN
-instead.
-
-=head2 How do I keep persistent data across program calls?
-
-For some specific applications, you can use one of the DBM modules.
-See L<AnyDBM_File>. More generically, you should consult the C<FreezeThaw>
-or C<Storable> modules from CPAN. Starting from Perl 5.8 C<Storable> is part
-of the standard distribution. Here's one example using C<Storable>'s C<store>
-and C<retrieve> functions:
-
- use Storable;
- store(\%hash, "filename");
-
- # later on...
- $href = retrieve("filename"); # by ref
- %hash = %{ retrieve("filename") }; # direct to hash
-
-=head2 How do I print out or copy a recursive data structure?
-
-The C<Data::Dumper> module on CPAN (or the 5.005 release of Perl) is great
-for printing out data structures. The C<Storable> module on CPAN (or the
-5.8 release of Perl), provides a function called C<dclone> that recursively
-copies its argument.
-
- use Storable qw(dclone);
- $r2 = dclone($r1);
-
-Where C<$r1> can be a reference to any kind of data structure you'd like.
-It will be deeply copied. Because C<dclone> takes and returns references,
-you'd have to add extra punctuation if you had a hash of arrays that
-you wanted to copy.
-
- %newhash = %{ dclone(\%oldhash) };
-
-=head2 How do I define methods for every class/object?
-
-(contributed by Ben Morrow)
-
-You can use the C<UNIVERSAL> class (see L<UNIVERSAL>). However, please
-be very careful to consider the consequences of doing this: adding
-methods to every object is very likely to have unintended
-consequences. If possible, it would be better to have all your object
-inherit from some common base class, or to use an object system like
-Moose that supports roles.
-
-=head2 How do I verify a credit card checksum?
-
-Get the C<Business::CreditCard> module from CPAN.
-
-=head2 How do I pack arrays of doubles or floats for XS code?
-
-The arrays.h/arrays.c code in the C<PGPLOT> module on CPAN does just this.
-If you're doing a lot of float or double processing, consider using
-the C<PDL> module from CPAN instead--it makes number-crunching easy.
-
-See L<http://search.cpan.org/dist/PGPLOT> for the code.
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
-other authors as noted. All rights reserved.
-
-This documentation is free; you can redistribute it and/or modify it
-under the same terms as Perl itself.
-
-Irrespective of its distribution, all code examples in this file
-are hereby placed into the public domain. You are permitted and
-encouraged to use this code in your own programs for fun
-or for profit as you see fit. A simple comment in the code giving
-credit would be courteous but is not required.
Deleted: trunk/contrib/perl/pod/perlfaq5.pod
===================================================================
--- trunk/contrib/perl/pod/perlfaq5.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlfaq5.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1598 +0,0 @@
-=head1 NAME
-
-perlfaq5 - Files and Formats
-
-=head1 DESCRIPTION
-
-This section deals with I/O and the "f" issues: filehandles, flushing,
-formats, and footers.
-
-=head2 How do I flush/unbuffer an output filehandle? Why must I do this?
-X<flush> X<buffer> X<unbuffer> X<autoflush>
-
-(contributed by brian d foy)
-
-You might like to read Mark Jason Dominus's "Suffering From Buffering"
-at http://perl.plover.com/FAQs/Buffering.html .
-
-Perl normally buffers output so it doesn't make a system call for every
-bit of output. By saving up output, it makes fewer expensive system calls.
-For instance, in this little bit of code, you want to print a dot to the
-screen for every line you process to watch the progress of your program.
-Instead of seeing a dot for every line, Perl buffers the output and you
-have a long wait before you see a row of 50 dots all at once:
-
- # long wait, then row of dots all at once
- while( <> ) {
- print ".";
- print "\n" unless ++$count % 50;
-
- #... expensive line processing operations
- }
-
-To get around this, you have to unbuffer the output filehandle, in this
-case, C<STDOUT>. You can set the special variable C<$|> to a true value
-(mnemonic: making your filehandles "piping hot"):
-
- $|++;
-
- # dot shown immediately
- while( <> ) {
- print ".";
- print "\n" unless ++$count % 50;
-
- #... expensive line processing operations
- }
-
-The C<$|> is one of the per-filehandle special variables, so each
-filehandle has its own copy of its value. If you want to merge
-standard output and standard error for instance, you have to unbuffer
-each (although STDERR might be unbuffered by default):
-
- {
- my $previous_default = select(STDOUT); # save previous default
- $|++; # autoflush STDOUT
- select(STDERR);
- $|++; # autoflush STDERR, to be sure
- select($previous_default); # restore previous default
- }
-
- # now should alternate . and +
- while( 1 )
- {
- sleep 1;
- print STDOUT ".";
- print STDERR "+";
- print STDOUT "\n" unless ++$count % 25;
- }
-
-Besides the C<$|> special variable, you can use C<binmode> to give
-your filehandle a C<:unix> layer, which is unbuffered:
-
- binmode( STDOUT, ":unix" );
-
- while( 1 ) {
- sleep 1;
- print ".";
- print "\n" unless ++$count % 50;
- }
-
-For more information on output layers, see the entries for C<binmode>
-and C<open> in L<perlfunc>, and the C<PerlIO> module documentation.
-
-If you are using C<IO::Handle> or one of its subclasses, you can
-call the C<autoflush> method to change the settings of the
-filehandle:
-
- use IO::Handle;
- open my( $io_fh ), ">", "output.txt";
- $io_fh->autoflush(1);
-
-The C<IO::Handle> objects also have a C<flush> method. You can flush
-the buffer any time you want without auto-buffering
-
- $io_fh->flush;
-
-=head2 How do I change, delete, or insert a line in a file, or append to the beginning of a file?
-X<file, editing>
-
-(contributed by brian d foy)
-
-The basic idea of inserting, changing, or deleting a line from a text
-file involves reading and printing the file to the point you want to
-make the change, making the change, then reading and printing the rest
-of the file. Perl doesn't provide random access to lines (especially
-since the record input separator, C<$/>, is mutable), although modules
-such as C<Tie::File> can fake it.
-
-A Perl program to do these tasks takes the basic form of opening a
-file, printing its lines, then closing the file:
-
- open my $in, '<', $file or die "Can't read old file: $!";
- open my $out, '>', "$file.new" or die "Can't write new file: $!";
-
- while( <$in> )
- {
- print $out $_;
- }
-
- close $out;
-
-Within that basic form, add the parts that you need to insert, change,
-or delete lines.
-
-To prepend lines to the beginning, print those lines before you enter
-the loop that prints the existing lines.
-
- open my $in, '<', $file or die "Can't read old file: $!";
- open my $out, '>', "$file.new" or die "Can't write new file: $!";
-
- print $out "# Add this line to the top\n"; # <--- HERE'S THE MAGIC
-
- while( <$in> )
- {
- print $out $_;
- }
-
- close $out;
-
-To change existing lines, insert the code to modify the lines inside
-the C<while> loop. In this case, the code finds all lowercased
-versions of "perl" and uppercases them. The happens for every line, so
-be sure that you're supposed to do that on every line!
-
- open my $in, '<', $file or die "Can't read old file: $!";
- open my $out, '>', "$file.new" or die "Can't write new file: $!";
-
- print $out "# Add this line to the top\n";
-
- while( <$in> )
- {
- s/\b(perl)\b/Perl/g;
- print $out $_;
- }
-
- close $out;
-
-To change only a particular line, the input line number, C<$.>, is
-useful. First read and print the lines up to the one you want to
-change. Next, read the single line you want to change, change it, and
-print it. After that, read the rest of the lines and print those:
-
- while( <$in> ) # print the lines before the change
- {
- print $out $_;
- last if $. == 4; # line number before change
- }
-
- my $line = <$in>;
- $line =~ s/\b(perl)\b/Perl/g;
- print $out $line;
-
- while( <$in> ) # print the rest of the lines
- {
- print $out $_;
- }
-
-To skip lines, use the looping controls. The C<next> in this example
-skips comment lines, and the C<last> stops all processing once it
-encounters either C<__END__> or C<__DATA__>.
-
- while( <$in> )
- {
- next if /^\s+#/; # skip comment lines
- last if /^__(END|DATA)__$/; # stop at end of code marker
- print $out $_;
- }
-
-Do the same sort of thing to delete a particular line by using C<next>
-to skip the lines you don't want to show up in the output. This
-example skips every fifth line:
-
- while( <$in> )
- {
- next unless $. % 5;
- print $out $_;
- }
-
-If, for some odd reason, you really want to see the whole file at once
-rather than processing line-by-line, you can slurp it in (as long as
-you can fit the whole thing in memory!):
-
- open my $in, '<', $file or die "Can't read old file: $!"
- open my $out, '>', "$file.new" or die "Can't write new file: $!";
-
- my @lines = do { local $/; <$in> }; # slurp!
-
- # do your magic here
-
- print $out @lines;
-
-Modules such as C<File::Slurp> and C<Tie::File> can help with that
-too. If you can, however, avoid reading the entire file at once. Perl
-won't give that memory back to the operating system until the process
-finishes.
-
-You can also use Perl one-liners to modify a file in-place. The
-following changes all 'Fred' to 'Barney' in F<inFile.txt>, overwriting
-the file with the new contents. With the C<-p> switch, Perl wraps a
-C<while> loop around the code you specify with C<-e>, and C<-i> turns
-on in-place editing. The current line is in C<$_>. With C<-p>, Perl
-automatically prints the value of C<$_> at the end of the loop. See
-L<perlrun> for more details.
-
- perl -pi -e 's/Fred/Barney/' inFile.txt
-
-To make a backup of C<inFile.txt>, give C<-i> a file extension to add:
-
- perl -pi.bak -e 's/Fred/Barney/' inFile.txt
-
-To change only the fifth line, you can add a test checking C<$.>, the
-input line number, then only perform the operation when the test
-passes:
-
- perl -pi -e 's/Fred/Barney/ if $. == 5' inFile.txt
-
-To add lines before a certain line, you can add a line (or lines!)
-before Perl prints C<$_>:
-
- perl -pi -e 'print "Put before third line\n" if $. == 3' inFile.txt
-
-You can even add a line to the beginning of a file, since the current
-line prints at the end of the loop:
-
- perl -pi -e 'print "Put before first line\n" if $. == 1' inFile.txt
-
-To insert a line after one already in the file, use the C<-n> switch.
-It's just like C<-p> except that it doesn't print C<$_> at the end of
-the loop, so you have to do that yourself. In this case, print C<$_>
-first, then print the line that you want to add.
-
- perl -ni -e 'print; print "Put after fifth line\n" if $. == 5' inFile.txt
-
-To delete lines, only print the ones that you want.
-
- perl -ni -e 'print unless /d/' inFile.txt
-
- ... or ...
-
- perl -pi -e 'next unless /d/' inFile.txt
-
-=head2 How do I count the number of lines in a file?
-X<file, counting lines> X<lines> X<line>
-
-(contributed by brian d foy)
-
-Conceptually, the easiest way to count the lines in a file is to
-simply read them and count them:
-
- my $count = 0;
- while( <$fh> ) { $count++; }
-
-You don't really have to count them yourself, though, since Perl
-already does that with the C<$.> variable, which is the current line
-number from the last filehandle read:
-
- 1 while( <$fh> );
- my $count = $.;
-
-If you want to use C<$.>, you can reduce it to a simple one-liner,
-like one of these:
-
- % perl -lne '} print $.; {' file
-
- % perl -lne 'END { print $. }' file
-
-Those can be rather inefficient though. If they aren't fast enough for
-you, you might just read chunks of data and count the number of
-newlines:
-
- my $lines = 0;
- open my($fh), '<:raw', $filename or die "Can't open $filename: $!";
- while( sysread $fh, $buffer, 4096 ) {
- $lines += ( $buffer =~ tr/\n// );
- }
- close FILE;
-
-However, that doesn't work if the line ending isn't a newline. You
-might change that C<tr///> to a C<s///> so you can count the number of
-times the input record separator, C<$/>, shows up:
-
- my $lines = 0;
- open my($fh), '<:raw', $filename or die "Can't open $filename: $!";
- while( sysread $fh, $buffer, 4096 ) {
- $lines += ( $buffer =~ s|$/||g; );
- }
- close FILE;
-
-If you don't mind shelling out, the C<wc> command is usually the
-fastest, even with the extra interprocess overhead. Ensure that you
-have an untainted filename though:
-
- #!perl -T
-
- $ENV{PATH} = undef;
-
- my $lines;
- if( $filename =~ /^([0-9a-z_.]+)\z/ ) {
- $lines = `/usr/bin/wc -l $1`
- chomp $lines;
- }
-
-=head2 How do I delete the last N lines from a file?
-X<lines> X<file>
-
-(contributed by brian d foy)
-
-The easiest conceptual solution is to count the lines in the
-file then start at the beginning and print the number of lines
-(minus the last N) to a new file.
-
-Most often, the real question is how you can delete the last N lines
-without making more than one pass over the file, or how to do it
-without a lot of copying. The easy concept is the hard reality when
-you might have millions of lines in your file.
-
-One trick is to use C<File::ReadBackwards>, which starts at the end of
-the file. That module provides an object that wraps the real filehandle
-to make it easy for you to move around the file. Once you get to the
-spot you need, you can get the actual filehandle and work with it as
-normal. In this case, you get the file position at the end of the last
-line you want to keep and truncate the file to that point:
-
- use File::ReadBackwards;
-
- my $filename = 'test.txt';
- my $Lines_to_truncate = 2;
-
- my $bw = File::ReadBackwards->new( $filename )
- or die "Could not read backwards in [$filename]: $!";
-
- my $lines_from_end = 0;
- until( $bw->eof or $lines_from_end == $Lines_to_truncate )
- {
- print "Got: ", $bw->readline;
- $lines_from_end++;
- }
-
- truncate( $filename, $bw->tell );
-
-The C<File::ReadBackwards> module also has the advantage of setting
-the input record separator to a regular expression.
-
-You can also use the C<Tie::File> module which lets you access
-the lines through a tied array. You can use normal array operations
-to modify your file, including setting the last index and using
-C<splice>.
-
-=head2 How can I use Perl's C<-i> option from within a program?
-X<-i> X<in-place>
-
-C<-i> sets the value of Perl's C<$^I> variable, which in turn affects
-the behavior of C<< <> >>; see L<perlrun> for more details. By
-modifying the appropriate variables directly, you can get the same
-behavior within a larger program. For example:
-
- # ...
- {
- local($^I, @ARGV) = ('.orig', glob("*.c"));
- while (<>) {
- if ($. == 1) {
- print "This line should appear at the top of each file\n";
- }
- s/\b(p)earl\b/${1}erl/i; # Correct typos, preserving case
- print;
- close ARGV if eof; # Reset $.
- }
- }
- # $^I and @ARGV return to their old values here
-
-This block modifies all the C<.c> files in the current directory,
-leaving a backup of the original data from each file in a new
-C<.c.orig> file.
-
-=head2 How can I copy a file?
-X<copy> X<file, copy> X<File::Copy>
-
-(contributed by brian d foy)
-
-Use the C<File::Copy> module. It comes with Perl and can do a
-true copy across file systems, and it does its magic in
-a portable fashion.
-
- use File::Copy;
-
- copy( $original, $new_copy ) or die "Copy failed: $!";
-
-If you can't use C<File::Copy>, you'll have to do the work yourself:
-open the original file, open the destination file, then print
-to the destination file as you read the original. You also have to
-remember to copy the permissions, owner, and group to the new file.
-
-=head2 How do I make a temporary file name?
-X<file, temporary>
-
-If you don't need to know the name of the file, you can use C<open()>
-with C<undef> in place of the file name. In Perl 5.8 or later, the
-C<open()> function creates an anonymous temporary file:
-
- open my $tmp, '+>', undef or die $!;
-
-Otherwise, you can use the File::Temp module.
-
- use File::Temp qw/ tempfile tempdir /;
-
- my $dir = tempdir( CLEANUP => 1 );
- ($fh, $filename) = tempfile( DIR => $dir );
-
- # or if you don't need to know the filename
-
- my $fh = tempfile( DIR => $dir );
-
-The File::Temp has been a standard module since Perl 5.6.1. If you
-don't have a modern enough Perl installed, use the C<new_tmpfile>
-class method from the IO::File module to get a filehandle opened for
-reading and writing. Use it if you don't need to know the file's name:
-
- use IO::File;
- my $fh = IO::File->new_tmpfile()
- or die "Unable to make new temporary file: $!";
-
-If you're committed to creating a temporary file by hand, use the
-process ID and/or the current time-value. If you need to have many
-temporary files in one process, use a counter:
-
- BEGIN {
- use Fcntl;
- my $temp_dir = -d '/tmp' ? '/tmp' : $ENV{TMPDIR} || $ENV{TEMP};
- my $base_name = sprintf "%s/%d-%d-0000", $temp_dir, $$, time;
-
- sub temp_file {
- my $fh;
- my $count = 0;
- until( defined(fileno($fh)) || $count++ > 100 ) {
- $base_name =~ s/-(\d+)$/"-" . (1 + $1)/e;
- # O_EXCL is required for security reasons.
- sysopen $fh, $base_name, O_WRONLY|O_EXCL|O_CREAT;
- }
-
- if( defined fileno($fh) ) {
- return ($fh, $base_name);
- }
- else {
- return ();
- }
- }
-
- }
-
-=head2 How can I manipulate fixed-record-length files?
-X<fixed-length> X<file, fixed-length records>
-
-The most efficient way is using L<pack()|perlfunc/"pack"> and
-L<unpack()|perlfunc/"unpack">. This is faster than using
-L<substr()|perlfunc/"substr"> when taking many, many strings. It is
-slower for just a few.
-
-Here is a sample chunk of code to break up and put back together again
-some fixed-format input lines, in this case from the output of a normal,
-Berkeley-style ps:
-
- # sample input line:
- # 15158 p5 T 0:00 perl /home/tchrist/scripts/now-what
- my $PS_T = 'A6 A4 A7 A5 A*';
- open my $ps, '-|', 'ps';
- print scalar <$ps>;
- my @fields = qw( pid tt stat time command );
- while (<$ps>) {
- my %process;
- @process{@fields} = unpack($PS_T, $_);
- for my $field ( @fields ) {
- print "$field: <$process{$field}>\n";
- }
- print 'line=', pack($PS_T, @process{@fields} ), "\n";
- }
-
-We've used a hash slice in order to easily handle the fields of each row.
-Storing the keys in an array makes it easy to operate on them as a
-group or loop over them with C<for>. It also avoids polluting the program
-with global variables and using symbolic references.
-
-=head2 How can I make a filehandle local to a subroutine? How do I pass filehandles between subroutines? How do I make an array of filehandles?
-X<filehandle, local> X<filehandle, passing> X<filehandle, reference>
-
-As of perl5.6, open() autovivifies file and directory handles
-as references if you pass it an uninitialized scalar variable.
-You can then pass these references just like any other scalar,
-and use them in the place of named handles.
-
- open my $fh, $file_name;
-
- open local $fh, $file_name;
-
- print $fh "Hello World!\n";
-
- process_file( $fh );
-
-If you like, you can store these filehandles in an array or a hash.
-If you access them directly, they aren't simple scalars and you
-need to give C<print> a little help by placing the filehandle
-reference in braces. Perl can only figure it out on its own when
-the filehandle reference is a simple scalar.
-
- my @fhs = ( $fh1, $fh2, $fh3 );
-
- for( $i = 0; $i <= $#fhs; $i++ ) {
- print {$fhs[$i]} "just another Perl answer, \n";
- }
-
-Before perl5.6, you had to deal with various typeglob idioms
-which you may see in older code.
-
- open FILE, "> $filename";
- process_typeglob( *FILE );
- process_reference( \*FILE );
-
- sub process_typeglob { local *FH = shift; print FH "Typeglob!" }
- sub process_reference { local $fh = shift; print $fh "Reference!" }
-
-If you want to create many anonymous handles, you should
-check out the Symbol or IO::Handle modules.
-
-=head2 How can I use a filehandle indirectly?
-X<filehandle, indirect>
-
-An indirect filehandle is the use of something other than a symbol
-in a place that a filehandle is expected. Here are ways
-to get indirect filehandles:
-
- $fh = SOME_FH; # bareword is strict-subs hostile
- $fh = "SOME_FH"; # strict-refs hostile; same package only
- $fh = *SOME_FH; # typeglob
- $fh = \*SOME_FH; # ref to typeglob (bless-able)
- $fh = *SOME_FH{IO}; # blessed IO::Handle from *SOME_FH typeglob
-
-Or, you can use the C<new> method from one of the IO::* modules to
-create an anonymous filehandle and store that in a scalar variable.
-
- use IO::Handle; # 5.004 or higher
- my $fh = IO::Handle->new();
-
-Then use any of those as you would a normal filehandle. Anywhere that
-Perl is expecting a filehandle, an indirect filehandle may be used
-instead. An indirect filehandle is just a scalar variable that contains
-a filehandle. Functions like C<print>, C<open>, C<seek>, or
-the C<< <FH> >> diamond operator will accept either a named filehandle
-or a scalar variable containing one:
-
- ($ifh, $ofh, $efh) = (*STDIN, *STDOUT, *STDERR);
- print $ofh "Type it: ";
- my $got = <$ifh>
- print $efh "What was that: $got";
-
-If you're passing a filehandle to a function, you can write
-the function in two ways:
-
- sub accept_fh {
- my $fh = shift;
- print $fh "Sending to indirect filehandle\n";
- }
-
-Or it can localize a typeglob and use the filehandle directly:
-
- sub accept_fh {
- local *FH = shift;
- print FH "Sending to localized filehandle\n";
- }
-
-Both styles work with either objects or typeglobs of real filehandles.
-(They might also work with strings under some circumstances, but this
-is risky.)
-
- accept_fh(*STDOUT);
- accept_fh($handle);
-
-In the examples above, we assigned the filehandle to a scalar variable
-before using it. That is because only simple scalar variables, not
-expressions or subscripts of hashes or arrays, can be used with
-built-ins like C<print>, C<printf>, or the diamond operator. Using
-something other than a simple scalar variable as a filehandle is
-illegal and won't even compile:
-
- my @fd = (*STDIN, *STDOUT, *STDERR);
- print $fd[1] "Type it: "; # WRONG
- my $got = <$fd[0]> # WRONG
- print $fd[2] "What was that: $got"; # WRONG
-
-With C<print> and C<printf>, you get around this by using a block and
-an expression where you would place the filehandle:
-
- print { $fd[1] } "funny stuff\n";
- printf { $fd[1] } "Pity the poor %x.\n", 3_735_928_559;
- # Pity the poor deadbeef.
-
-That block is a proper block like any other, so you can put more
-complicated code there. This sends the message out to one of two places:
-
- my $ok = -x "/bin/cat";
- print { $ok ? $fd[1] : $fd[2] } "cat stat $ok\n";
- print { $fd[ 1+ ($ok || 0) ] } "cat stat $ok\n";
-
-This approach of treating C<print> and C<printf> like object methods
-calls doesn't work for the diamond operator. That's because it's a
-real operator, not just a function with a comma-less argument. Assuming
-you've been storing typeglobs in your structure as we did above, you
-can use the built-in function named C<readline> to read a record just
-as C<< <> >> does. Given the initialization shown above for @fd, this
-would work, but only because readline() requires a typeglob. It doesn't
-work with objects or strings, which might be a bug we haven't fixed yet.
-
- $got = readline($fd[0]);
-
-Let it be noted that the flakiness of indirect filehandles is not
-related to whether they're strings, typeglobs, objects, or anything else.
-It's the syntax of the fundamental operators. Playing the object
-game doesn't help you at all here.
-
-=head2 How can I set up a footer format to be used with write()?
-X<footer>
-
-There's no builtin way to do this, but L<perlform> has a couple of
-techniques to make it possible for the intrepid hacker.
-
-=head2 How can I write() into a string?
-X<write, into a string>
-
-(contributed by brian d foy)
-
-If you want to C<write> into a string, you just have to <open> a
-filehandle to a string, which Perl has been able to do since Perl 5.6:
-
- open FH, '>', \my $string;
- write( FH );
-
-Since you want to be a good programmer, you probably want to use a lexical
-filehandle, even though formats are designed to work with bareword filehandles
-since the default format names take the filehandle name. However, you can
-control this with some Perl special per-filehandle variables: C<$^>, which
-names the top-of-page format, and C<$~> which shows the line format. You have
-to change the default filehandle to set these variables:
-
- open my($fh), '>', \my $string;
-
- { # set per-filehandle variables
- my $old_fh = select( $fh );
- $~ = 'ANIMAL';
- $^ = 'ANIMAL_TOP';
- select( $old_fh );
- }
-
- format ANIMAL_TOP =
- ID Type Name
- .
-
- format ANIMAL =
- @## @<<< @<<<<<<<<<<<<<<
- $id, $type, $name
- .
-
-Although write can work with lexical or package variables, whatever variables
-you use have to scope in the format. That most likely means you'll want to
-localize some package variables:
-
- {
- local( $id, $type, $name ) = qw( 12 cat Buster );
- write( $fh );
- }
-
- print $string;
-
-There are also some tricks that you can play with C<formline> and the
-accumulator variable C<$^A>, but you lose a lot of the value of formats
-since C<formline> won't handle paging and so on. You end up reimplementing
-formats when you use them.
-
-=head2 How can I open a filehandle to a string?
-X<string> X<open> X<IO::String> X<filehandle>
-
-(contributed by Peter J. Holzer, hjp-usenet2 at hjp.at)
-
-Since Perl 5.8.0 a file handle referring to a string can be created by
-calling open with a reference to that string instead of the filename.
-This file handle can then be used to read from or write to the string:
-
- open(my $fh, '>', \$string) or die "Could not open string for writing";
- print $fh "foo\n";
- print $fh "bar\n"; # $string now contains "foo\nbar\n"
-
- open(my $fh, '<', \$string) or die "Could not open string for reading";
- my $x = <$fh>; # $x now contains "foo\n"
-
-With older versions of Perl, the C<IO::String> module provides similar
-functionality.
-
-=head2 How can I output my numbers with commas added?
-X<number, commify>
-
-(contributed by brian d foy and Benjamin Goldberg)
-
-You can use L<Number::Format> to separate places in a number.
-It handles locale information for those of you who want to insert
-full stops instead (or anything else that they want to use,
-really).
-
-This subroutine will add commas to your number:
-
- sub commify {
- local $_ = shift;
- 1 while s/^([-+]?\d+)(\d{3})/$1,$2/;
- return $_;
- }
-
-This regex from Benjamin Goldberg will add commas to numbers:
-
- s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))/$1,/g;
-
-It is easier to see with comments:
-
- s/(
- ^[-+]? # beginning of number.
- \d+? # first digits before first comma
- (?= # followed by, (but not included in the match) :
- (?>(?:\d{3})+) # some positive multiple of three digits.
- (?!\d) # an *exact* multiple, not x * 3 + 1 or whatever.
- )
- | # or:
- \G\d{3} # after the last group, get three digits
- (?=\d) # but they have to have more digits after them.
- )/$1,/xg;
-
-=head2 How can I translate tildes (~) in a filename?
-X<tilde> X<tilde expansion>
-
-Use the E<lt>E<gt> (C<glob()>) operator, documented in L<perlfunc>.
-Versions of Perl older than 5.6 require that you have a shell
-installed that groks tildes. Later versions of Perl have this feature
-built in. The C<File::KGlob> module (available from CPAN) gives more
-portable glob functionality.
-
-Within Perl, you may use this directly:
-
- $filename =~ s{
- ^ ~ # find a leading tilde
- ( # save this in $1
- [^/] # a non-slash character
- * # repeated 0 or more times (0 means me)
- )
- }{
- $1
- ? (getpwnam($1))[7]
- : ( $ENV{HOME} || $ENV{LOGDIR} )
- }ex;
-
-=head2 How come when I open a file read-write it wipes it out?
-X<clobber> X<read-write> X<clobbering> X<truncate> X<truncating>
-
-Because you're using something like this, which truncates the file
-I<then> gives you read-write access:
-
- open my $fh, '+>', '/path/name'; # WRONG (almost always)
-
-Whoops. You should instead use this, which will fail if the file
-doesn't exist:
-
- open my $fh, '+<', '/path/name'; # open for update
-
-Using ">" always clobbers or creates. Using "<" never does
-either. The "+" doesn't change this.
-
-Here are examples of many kinds of file opens. Those using C<sysopen>
-all assume that you've pulled in the constants from C<Fcntl>:
-
- use Fcntl;
-
-To open file for reading:
-
- open my $fh, '<', $path or die $!;
- sysopen my $fh, $path, O_RDONLY or die $!;
-
-To open file for writing, create new file if needed or else truncate old file:
-
- open my $fh, '>', $path or die $!;
- sysopen my $fh, $path, O_WRONLY|O_TRUNC|O_CREAT or die $!;
- sysopen my $fh, $path, O_WRONLY|O_TRUNC|O_CREAT, 0666 or die $!;
-
-To open file for writing, create new file, file must not exist:
-
- sysopen my $fh, $path, O_WRONLY|O_EXCL|O_CREAT or die $!;
- sysopen my $fh, $path, O_WRONLY|O_EXCL|O_CREAT, 0666 or die $!;
-
-To open file for appending, create if necessary:
-
- open my $fh, '>>' $path or die $!;
- sysopen my $fh, $path, O_WRONLY|O_APPEND|O_CREAT or die $!;
- sysopen my $fh, $path, O_WRONLY|O_APPEND|O_CREAT, 0666 or die $!;
-
-To open file for appending, file must exist:
-
- sysopen my $fh, $path, O_WRONLY|O_APPEND or die $!;
-
-To open file for update, file must exist:
-
- open my $fh, '+<', $path or die $!;
- sysopen my $fh, $path, O_RDWR or die $!;
-
-To open file for update, create file if necessary:
-
- sysopen my $fh, $path, O_RDWR|O_CREAT or die $!;
- sysopen my $fh, $path, O_RDWR|O_CREAT, 0666 or die $!;
-
-To open file for update, file must not exist:
-
- sysopen my $fh, $path, O_RDWR|O_EXCL|O_CREAT or die $!;
- sysopen my $fh, $path, O_RDWR|O_EXCL|O_CREAT, 0666 or die $!;
-
-To open a file without blocking, creating if necessary:
-
- sysopen my $fh, '/foo/somefile', O_WRONLY|O_NDELAY|O_CREAT
- or die "can't open /foo/somefile: $!":
-
-Be warned that neither creation nor deletion of files is guaranteed to
-be an atomic operation over NFS. That is, two processes might both
-successfully create or unlink the same file! Therefore O_EXCL
-isn't as exclusive as you might wish.
-
-See also L<perlopentut>.
-
-=head2 Why do I sometimes get an "Argument list too long" when I use E<lt>*E<gt>?
-X<argument list too long>
-
-The C<< <> >> operator performs a globbing operation (see above).
-In Perl versions earlier than v5.6.0, the internal glob() operator forks
-csh(1) to do the actual glob expansion, but
-csh can't handle more than 127 items and so gives the error message
-C<Argument list too long>. People who installed tcsh as csh won't
-have this problem, but their users may be surprised by it.
-
-To get around this, either upgrade to Perl v5.6.0 or later, do the glob
-yourself with readdir() and patterns, or use a module like File::KGlob,
-one that doesn't use the shell to do globbing.
-
-=head2 Is there a leak/bug in glob()?
-X<glob>
-
-(contributed by brian d foy)
-
-Starting with Perl 5.6.0, C<glob> is implemented internally rather
-than relying on an external resource. As such, memory issues with
-C<glob> aren't a problem in modern perls.
-
-=head2 How can I open a file with a leading ">" or trailing blanks?
-X<filename, special characters>
-
-(contributed by Brian McCauley)
-
-The special two-argument form of Perl's open() function ignores
-trailing blanks in filenames and infers the mode from certain leading
-characters (or a trailing "|"). In older versions of Perl this was the
-only version of open() and so it is prevalent in old code and books.
-
-Unless you have a particular reason to use the two-argument form you
-should use the three-argument form of open() which does not treat any
-characters in the filename as special.
-
- open my $fh, "<", " file "; # filename is " file "
- open my $fh, ">", ">file"; # filename is ">file"
-
-=head2 How can I reliably rename a file?
-X<rename> X<mv> X<move> X<file, rename>
-
-If your operating system supports a proper mv(1) utility or its
-functional equivalent, this works:
-
- rename($old, $new) or system("mv", $old, $new);
-
-It may be more portable to use the C<File::Copy> module instead.
-You just copy to the new file to the new name (checking return
-values), then delete the old one. This isn't really the same
-semantically as a C<rename()>, which preserves meta-information like
-permissions, timestamps, inode info, etc.
-
-=head2 How can I lock a file?
-X<lock> X<file, lock> X<flock>
-
-Perl's builtin flock() function (see L<perlfunc> for details) will call
-flock(2) if that exists, fcntl(2) if it doesn't (on perl version 5.004 and
-later), and lockf(3) if neither of the two previous system calls exists.
-On some systems, it may even use a different form of native locking.
-Here are some gotchas with Perl's flock():
-
-=over 4
-
-=item 1
-
-Produces a fatal error if none of the three system calls (or their
-close equivalent) exists.
-
-=item 2
-
-lockf(3) does not provide shared locking, and requires that the
-filehandle be open for writing (or appending, or read/writing).
-
-=item 3
-
-Some versions of flock() can't lock files over a network (e.g. on NFS file
-systems), so you'd need to force the use of fcntl(2) when you build Perl.
-But even this is dubious at best. See the flock entry of L<perlfunc>
-and the F<INSTALL> file in the source distribution for information on
-building Perl to do this.
-
-Two potentially non-obvious but traditional flock semantics are that
-it waits indefinitely until the lock is granted, and that its locks are
-I<merely advisory>. Such discretionary locks are more flexible, but
-offer fewer guarantees. This means that files locked with flock() may
-be modified by programs that do not also use flock(). Cars that stop
-for red lights get on well with each other, but not with cars that don't
-stop for red lights. See the perlport manpage, your port's specific
-documentation, or your system-specific local manpages for details. It's
-best to assume traditional behavior if you're writing portable programs.
-(If you're not, you should as always feel perfectly free to write
-for your own system's idiosyncrasies (sometimes called "features").
-Slavish adherence to portability concerns shouldn't get in the way of
-your getting your job done.)
-
-For more information on file locking, see also
-L<perlopentut/"File Locking"> if you have it (new for 5.6).
-
-=back
-
-=head2 Why can't I just open(FH, "E<gt>file.lock")?
-X<lock, lockfile race condition>
-
-A common bit of code B<NOT TO USE> is this:
-
- sleep(3) while -e 'file.lock'; # PLEASE DO NOT USE
- open my $lock, '>', 'file.lock'; # THIS BROKEN CODE
-
-This is a classic race condition: you take two steps to do something
-which must be done in one. That's why computer hardware provides an
-atomic test-and-set instruction. In theory, this "ought" to work:
-
- sysopen my $fh, "file.lock", O_WRONLY|O_EXCL|O_CREAT
- or die "can't open file.lock: $!";
-
-except that lamentably, file creation (and deletion) is not atomic
-over NFS, so this won't work (at least, not every time) over the net.
-Various schemes involving link() have been suggested, but
-these tend to involve busy-wait, which is also less than desirable.
-
-=head2 I still don't get locking. I just want to increment the number in the file. How can I do this?
-X<counter> X<file, counter>
-
-Didn't anyone ever tell you web-page hit counters were useless?
-They don't count number of hits, they're a waste of time, and they serve
-only to stroke the writer's vanity. It's better to pick a random number;
-they're more realistic.
-
-Anyway, this is what you can do if you can't help yourself.
-
- use Fcntl qw(:DEFAULT :flock);
- sysopen my $fh, "numfile", O_RDWR|O_CREAT or die "can't open numfile: $!";
- flock $fh, LOCK_EX or die "can't flock numfile: $!";
- my $num = <$fh> || 0;
- seek $fh, 0, 0 or die "can't rewind numfile: $!";
- truncate $fh, 0 or die "can't truncate numfile: $!";
- (print $fh $num+1, "\n") or die "can't write numfile: $!";
- close $fh or die "can't close numfile: $!";
-
-Here's a much better web-page hit counter:
-
- $hits = int( (time() - 850_000_000) / rand(1_000) );
-
-If the count doesn't impress your friends, then the code might. :-)
-
-=head2 All I want to do is append a small amount of text to the end of a file. Do I still have to use locking?
-X<append> X<file, append>
-
-If you are on a system that correctly implements C<flock> and you use
-the example appending code from "perldoc -f flock" everything will be
-OK even if the OS you are on doesn't implement append mode correctly
-(if such a system exists). So if you are happy to restrict yourself to
-OSs that implement C<flock> (and that's not really much of a
-restriction) then that is what you should do.
-
-If you know you are only going to use a system that does correctly
-implement appending (i.e. not Win32) then you can omit the C<seek>
-from the code in the previous answer.
-
-If you know you are only writing code to run on an OS and filesystem
-that does implement append mode correctly (a local filesystem on a
-modern Unix for example), and you keep the file in block-buffered mode
-and you write less than one buffer-full of output between each manual
-flushing of the buffer then each bufferload is almost guaranteed to be
-written to the end of the file in one chunk without getting
-intermingled with anyone else's output. You can also use the
-C<syswrite> function which is simply a wrapper around your system's
-C<write(2)> system call.
-
-There is still a small theoretical chance that a signal will interrupt
-the system-level C<write()> operation before completion. There is also
-a possibility that some STDIO implementations may call multiple system
-level C<write()>s even if the buffer was empty to start. There may be
-some systems where this probability is reduced to zero, and this is
-not a concern when using C<:perlio> instead of your system's STDIO.
-
-=head2 How do I randomly update a binary file?
-X<file, binary patch>
-
-If you're just trying to patch a binary, in many cases something as
-simple as this works:
-
- perl -i -pe 's{window manager}{window mangler}g' /usr/bin/emacs
-
-However, if you have fixed sized records, then you might do something more
-like this:
-
- $RECSIZE = 220; # size of record, in bytes
- $recno = 37; # which record to update
- open my $fh, '+<', 'somewhere' or die "can't update somewhere: $!";
- seek $fh, $recno * $RECSIZE, 0;
- read $fh, $record, $RECSIZE == $RECSIZE or die "can't read record $recno: $!";
- # munge the record
- seek $fh, -$RECSIZE, 1;
- print $fh $record;
- close $fh;
-
-Locking and error checking are left as an exercise for the reader.
-Don't forget them or you'll be quite sorry.
-
-=head2 How do I get a file's timestamp in perl?
-X<timestamp> X<file, timestamp>
-
-If you want to retrieve the time at which the file was last read,
-written, or had its meta-data (owner, etc) changed, you use the B<-A>,
-B<-M>, or B<-C> file test operations as documented in L<perlfunc>.
-These retrieve the age of the file (measured against the start-time of
-your program) in days as a floating point number. Some platforms may
-not have all of these times. See L<perlport> for details. To retrieve
-the "raw" time in seconds since the epoch, you would call the stat
-function, then use C<localtime()>, C<gmtime()>, or
-C<POSIX::strftime()> to convert this into human-readable form.
-
-Here's an example:
-
- my $write_secs = (stat($file))[9];
- printf "file %s updated at %s\n", $file,
- scalar localtime($write_secs);
-
-If you prefer something more legible, use the File::stat module
-(part of the standard distribution in version 5.004 and later):
-
- # error checking left as an exercise for reader.
- use File::stat;
- use Time::localtime;
- my $date_string = ctime(stat($file)->mtime);
- print "file $file updated at $date_string\n";
-
-The POSIX::strftime() approach has the benefit of being,
-in theory, independent of the current locale. See L<perllocale>
-for details.
-
-=head2 How do I set a file's timestamp in perl?
-X<timestamp> X<file, timestamp>
-
-You use the utime() function documented in L<perlfunc/utime>.
-By way of example, here's a little program that copies the
-read and write times from its first argument to all the rest
-of them.
-
- if (@ARGV < 2) {
- die "usage: cptimes timestamp_file other_files ...\n";
- }
- my $timestamp = shift;
- my($atime, $mtime) = (stat($timestamp))[8,9];
- utime $atime, $mtime, @ARGV;
-
-Error checking is, as usual, left as an exercise for the reader.
-
-The perldoc for utime also has an example that has the same
-effect as touch(1) on files that I<already exist>.
-
-Certain file systems have a limited ability to store the times
-on a file at the expected level of precision. For example, the
-FAT and HPFS filesystem are unable to create dates on files with
-a finer granularity than two seconds. This is a limitation of
-the filesystems, not of utime().
-
-=head2 How do I print to more than one file at once?
-X<print, to multiple files>
-
-To connect one filehandle to several output filehandles,
-you can use the IO::Tee or Tie::FileHandle::Multiplex modules.
-
-If you only have to do this once, you can print individually
-to each filehandle.
-
- for my $fh (FH1, FH2, FH3) { print $fh "whatever\n" }
-
-=head2 How can I read in an entire file all at once?
-X<slurp> X<file, slurping>
-
-The customary Perl approach for processing all the lines in a file is to
-do so one line at a time:
-
- open my $input, '<', $file or die "can't open $file: $!";
- while (<$input>) {
- chomp;
- # do something with $_
- }
- close $input or die "can't close $file: $!";
-
-This is tremendously more efficient than reading the entire file into
-memory as an array of lines and then processing it one element at a time,
-which is often--if not almost always--the wrong approach. Whenever
-you see someone do this:
-
- my @lines = <INPUT>;
-
-You should think long and hard about why you need everything loaded at
-once. It's just not a scalable solution.
-
-If you "mmap" the file with the File::Map module from
-CPAN, you can virtually load the entire file into a
-string without actually storing it in memory:
-
- use File::Map qw(map_file);
-
- map_file my $string, $filename;
-
-Once mapped, you can treat C<$string> as you would any other string.
-Since you don't necessarily have to load the data, mmap-ing can be
-very fast and may not increase your memory footprint.
-
-You might also find it more
-fun to use the standard C<Tie::File> module, or the C<DB_File> module's
-C<$DB_RECNO> bindings, which allow you to tie an array to a file so that
-accessing an element of the array actually accesses the corresponding
-line in the file.
-
-If you want to load the entire file, you can use the C<File::Slurp>
-module to do it in one one simple and efficient step:
-
- use File::Slurp;
-
- my $all_of_it = read_file($filename); # entire file in scalar
- my @all_lines = read_file($filename); # one line per element
-
-Or you can read the entire file contents into a scalar like this:
-
- my $var;
- {
- local $/;
- open my $fh, '<', $file or die "can't open $file: $!";
- $var = <$fh>;
- }
-
-That temporarily undefs your record separator, and will automatically
-close the file at block exit. If the file is already open, just use this:
-
- my $var = do { local $/; <$fh> };
-
-You can also use a localized C<@ARGV> to eliminate the C<open>:
-
- my $var = do { local( @ARGV, $/ ) = $file; <> };
-
-For ordinary files you can also use the C<read> function.
-
- read( $fh, $var, -s $fh );
-
-That third argument tests the byte size of the data on the C<$fh> filehandle
-and reads that many bytes into the buffer C<$var>.
-
-=head2 How can I read in a file by paragraphs?
-X<file, reading by paragraphs>
-
-Use the C<$/> variable (see L<perlvar> for details). You can either
-set it to C<""> to eliminate empty paragraphs (C<"abc\n\n\n\ndef">,
-for instance, gets treated as two paragraphs and not three), or
-C<"\n\n"> to accept empty paragraphs.
-
-Note that a blank line must have no blanks in it. Thus
-S<C<"fred\n \nstuff\n\n">> is one paragraph, but C<"fred\n\nstuff\n\n"> is two.
-
-=head2 How can I read a single character from a file? From the keyboard?
-X<getc> X<file, reading one character at a time>
-
-You can use the builtin C<getc()> function for most filehandles, but
-it won't (easily) work on a terminal device. For STDIN, either use
-the Term::ReadKey module from CPAN or use the sample code in
-L<perlfunc/getc>.
-
-If your system supports the portable operating system programming
-interface (POSIX), you can use the following code, which you'll note
-turns off echo processing as well.
-
- #!/usr/bin/perl -w
- use strict;
- $| = 1;
- for (1..4) {
- print "gimme: ";
- my $got = getone();
- print "--> $got\n";
- }
- exit;
-
- BEGIN {
- use POSIX qw(:termios_h);
-
- my ($term, $oterm, $echo, $noecho, $fd_stdin);
-
- my $fd_stdin = fileno(STDIN);
-
- $term = POSIX::Termios->new();
- $term->getattr($fd_stdin);
- $oterm = $term->getlflag();
-
- $echo = ECHO | ECHOK | ICANON;
- $noecho = $oterm & ~$echo;
-
- sub cbreak {
- $term->setlflag($noecho);
- $term->setcc(VTIME, 1);
- $term->setattr($fd_stdin, TCSANOW);
- }
-
- sub cooked {
- $term->setlflag($oterm);
- $term->setcc(VTIME, 0);
- $term->setattr($fd_stdin, TCSANOW);
- }
-
- sub getone {
- my $key = '';
- cbreak();
- sysread(STDIN, $key, 1);
- cooked();
- return $key;
- }
-
- }
-
- END { cooked() }
-
-The Term::ReadKey module from CPAN may be easier to use. Recent versions
-include also support for non-portable systems as well.
-
- use Term::ReadKey;
- open my $tty, '<', '/dev/tty';
- print "Gimme a char: ";
- ReadMode "raw";
- my $key = ReadKey 0, $tty;
- ReadMode "normal";
- printf "\nYou said %s, char number %03d\n",
- $key, ord $key;
-
-=head2 How can I tell whether there's a character waiting on a filehandle?
-
-The very first thing you should do is look into getting the Term::ReadKey
-extension from CPAN. As we mentioned earlier, it now even has limited
-support for non-portable (read: not open systems, closed, proprietary,
-not POSIX, not Unix, etc.) systems.
-
-You should also check out the Frequently Asked Questions list in
-comp.unix.* for things like this: the answer is essentially the same.
-It's very system-dependent. Here's one solution that works on BSD
-systems:
-
- sub key_ready {
- my($rin, $nfd);
- vec($rin, fileno(STDIN), 1) = 1;
- return $nfd = select($rin,undef,undef,0);
- }
-
-If you want to find out how many characters are waiting, there's
-also the FIONREAD ioctl call to be looked at. The I<h2ph> tool that
-comes with Perl tries to convert C include files to Perl code, which
-can be C<require>d. FIONREAD ends up defined as a function in the
-I<sys/ioctl.ph> file:
-
- require 'sys/ioctl.ph';
-
- $size = pack("L", 0);
- ioctl(FH, FIONREAD(), $size) or die "Couldn't call ioctl: $!\n";
- $size = unpack("L", $size);
-
-If I<h2ph> wasn't installed or doesn't work for you, you can
-I<grep> the include files by hand:
-
- % grep FIONREAD /usr/include/*/*
- /usr/include/asm/ioctls.h:#define FIONREAD 0x541B
-
-Or write a small C program using the editor of champions:
-
- % cat > fionread.c
- #include <sys/ioctl.h>
- main() {
- printf("%#08x\n", FIONREAD);
- }
- ^D
- % cc -o fionread fionread.c
- % ./fionread
- 0x4004667f
-
-And then hard-code it, leaving porting as an exercise to your successor.
-
- $FIONREAD = 0x4004667f; # XXX: opsys dependent
-
- $size = pack("L", 0);
- ioctl(FH, $FIONREAD, $size) or die "Couldn't call ioctl: $!\n";
- $size = unpack("L", $size);
-
-FIONREAD requires a filehandle connected to a stream, meaning that sockets,
-pipes, and tty devices work, but I<not> files.
-
-=head2 How do I do a C<tail -f> in perl?
-X<tail> X<IO::Handle> X<File::Tail> X<clearerr>
-
-First try
-
- seek(GWFILE, 0, 1);
-
-The statement C<seek(GWFILE, 0, 1)> doesn't change the current position,
-but it does clear the end-of-file condition on the handle, so that the
-next C<< <GWFILE> >> makes Perl try again to read something.
-
-If that doesn't work (it relies on features of your stdio implementation),
-then you need something more like this:
-
- for (;;) {
- for ($curpos = tell(GWFILE); <GWFILE>; $curpos = tell(GWFILE)) {
- # search for some stuff and put it into files
- }
- # sleep for a while
- seek(GWFILE, $curpos, 0); # seek to where we had been
- }
-
-If this still doesn't work, look into the C<clearerr> method
-from C<IO::Handle>, which resets the error and end-of-file states
-on the handle.
-
-There's also a C<File::Tail> module from CPAN.
-
-=head2 How do I dup() a filehandle in Perl?
-X<dup>
-
-If you check L<perlfunc/open>, you'll see that several of the ways
-to call open() should do the trick. For example:
-
- open my $log, '>>', '/foo/logfile';
- open STDERR, '>&LOG';
-
-Or even with a literal numeric descriptor:
-
- my $fd = $ENV{MHCONTEXTFD};
- open $mhcontext, "<&=$fd"; # like fdopen(3S)
-
-Note that "<&STDIN" makes a copy, but "<&=STDIN" makes
-an alias. That means if you close an aliased handle, all
-aliases become inaccessible. This is not true with
-a copied one.
-
-Error checking, as always, has been left as an exercise for the reader.
-
-=head2 How do I close a file descriptor by number?
-X<file, closing file descriptors> X<POSIX> X<close>
-
-If, for some reason, you have a file descriptor instead of a
-filehandle (perhaps you used C<POSIX::open>), you can use the
-C<close()> function from the C<POSIX> module:
-
- use POSIX ();
-
- POSIX::close( $fd );
-
-This should rarely be necessary, as the Perl C<close()> function is to be
-used for things that Perl opened itself, even if it was a dup of a
-numeric descriptor as with C<MHCONTEXT> above. But if you really have
-to, you may be able to do this:
-
- require 'sys/syscall.ph';
- my $rc = syscall(&SYS_close, $fd + 0); # must force numeric
- die "can't sysclose $fd: $!" unless $rc == -1;
-
-Or, just use the fdopen(3S) feature of C<open()>:
-
- {
- open my( $fh ), "<&=$fd" or die "Cannot reopen fd=$fd: $!";
- close $fh;
- }
-
-=head2 Why can't I use "C:\temp\foo" in DOS paths? Why doesn't `C:\temp\foo.exe` work?
-X<filename, DOS issues>
-
-Whoops! You just put a tab and a formfeed into that filename!
-Remember that within double quoted strings ("like\this"), the
-backslash is an escape character. The full list of these is in
-L<perlop/Quote and Quote-like Operators>. Unsurprisingly, you don't
-have a file called "c:(tab)emp(formfeed)oo" or
-"c:(tab)emp(formfeed)oo.exe" on your legacy DOS filesystem.
-
-Either single-quote your strings, or (preferably) use forward slashes.
-Since all DOS and Windows versions since something like MS-DOS 2.0 or so
-have treated C</> and C<\> the same in a path, you might as well use the
-one that doesn't clash with Perl--or the POSIX shell, ANSI C and C++,
-awk, Tcl, Java, or Python, just to mention a few. POSIX paths
-are more portable, too.
-
-=head2 Why doesn't glob("*.*") get all the files?
-X<glob>
-
-Because even on non-Unix ports, Perl's glob function follows standard
-Unix globbing semantics. You'll need C<glob("*")> to get all (non-hidden)
-files. This makes glob() portable even to legacy systems. Your
-port may include proprietary globbing functions as well. Check its
-documentation for details.
-
-=head2 Why does Perl let me delete read-only files? Why does C<-i> clobber protected files? Isn't this a bug in Perl?
-
-This is elaborately and painstakingly described in the
-F<file-dir-perms> article in the "Far More Than You Ever Wanted To
-Know" collection in http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz .
-
-The executive summary: learn how your filesystem works. The
-permissions on a file say what can happen to the data in that file.
-The permissions on a directory say what can happen to the list of
-files in that directory. If you delete a file, you're removing its
-name from the directory (so the operation depends on the permissions
-of the directory, not of the file). If you try to write to the file,
-the permissions of the file govern whether you're allowed to.
-
-=head2 How do I select a random line from a file?
-X<file, selecting a random line>
-
-Short of loading the file into a database or pre-indexing the lines in
-the file, there are a couple of things that you can do.
-
-Here's a reservoir-sampling algorithm from the Camel Book:
-
- srand;
- rand($.) < 1 && ($line = $_) while <>;
-
-This has a significant advantage in space over reading the whole file
-in. You can find a proof of this method in I<The Art of Computer
-Programming>, Volume 2, Section 3.4.2, by Donald E. Knuth.
-
-You can use the C<File::Random> module which provides a function
-for that algorithm:
-
- use File::Random qw/random_line/;
- my $line = random_line($filename);
-
-Another way is to use the C<Tie::File> module, which treats the entire
-file as an array. Simply access a random array element.
-
-=head2 Why do I get weird spaces when I print an array of lines?
-
-(contributed by brian d foy)
-
-If you are seeing spaces between the elements of your array when
-you print the array, you are probably interpolating the array in
-double quotes:
-
- my @animals = qw(camel llama alpaca vicuna);
- print "animals are: @animals\n";
-
-It's the double quotes, not the C<print>, doing this. Whenever you
-interpolate an array in a double quote context, Perl joins the
-elements with spaces (or whatever is in C<$">, which is a space by
-default):
-
- animals are: camel llama alpaca vicuna
-
-This is different than printing the array without the interpolation:
-
- my @animals = qw(camel llama alpaca vicuna);
- print "animals are: ", @animals, "\n";
-
-Now the output doesn't have the spaces between the elements because
-the elements of C<@animals> simply become part of the list to
-C<print>:
-
- animals are: camelllamaalpacavicuna
-
-You might notice this when each of the elements of C<@array> end with
-a newline. You expect to print one element per line, but notice that
-every line after the first is indented:
-
- this is a line
- this is another line
- this is the third line
-
-That extra space comes from the interpolation of the array. If you
-don't want to put anything between your array elements, don't use the
-array in double quotes. You can send it to print without them:
-
- print @lines;
-
-=head2 How do I traverse a directory tree?
-
-(contributed by brian d foy)
-
-The C<File::Find> module, which comes with Perl, does all of the hard
-work to traverse a directory structure. It comes with Perl. You simply
-call the C<find> subroutine with a callback subroutine and the
-directories you want to traverse:
-
- use File::Find;
-
- find( \&wanted, @directories );
-
- sub wanted {
- # full path in $File::Find::name
- # just filename in $_
- ... do whatever you want to do ...
- }
-
-The C<File::Find::Closures>, which you can download from CPAN, provides
-many ready-to-use subroutines that you can use with C<File::Find>.
-
-The C<File::Finder>, which you can download from CPAN, can help you
-create the callback subroutine using something closer to the syntax of
-the C<find> command-line utility:
-
- use File::Find;
- use File::Finder;
-
- my $deep_dirs = File::Finder->depth->type('d')->ls->exec('rmdir','{}');
-
- find( $deep_dirs->as_options, @places );
-
-The C<File::Find::Rule> module, which you can download from CPAN, has
-a similar interface, but does the traversal for you too:
-
- use File::Find::Rule;
-
- my @files = File::Find::Rule->file()
- ->name( '*.pm' )
- ->in( @INC );
-
-=head2 How do I delete a directory tree?
-
-(contributed by brian d foy)
-
-If you have an empty directory, you can use Perl's built-in C<rmdir>.
-If the directory is not empty (so, no files or subdirectories), you
-either have to empty it yourself (a lot of work) or use a module to
-help you.
-
-The C<File::Path> module, which comes with Perl, has a C<remove_tree>
-which can take care of all of the hard work for you:
-
- use File::Path qw(remove_tree);
-
- remove_tree( @directories );
-
-The C<File::Path> module also has a legacy interface to the older
-C<rmtree> subroutine.
-
-=head2 How do I copy an entire directory?
-
-(contributed by Shlomi Fish)
-
-To do the equivalent of C<cp -R> (i.e. copy an entire directory tree
-recursively) in portable Perl, you'll either need to write something yourself
-or find a good CPAN module such as L<File::Copy::Recursive>.
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
-other authors as noted. All rights reserved.
-
-This documentation is free; you can redistribute it and/or modify it
-under the same terms as Perl itself.
-
-Irrespective of its distribution, all code examples here are in the public
-domain. You are permitted and encouraged to use this code and any
-derivatives thereof in your own programs for fun or for profit as you
-see fit. A simple comment in the code giving credit to the FAQ would
-be courteous but is not required.
Deleted: trunk/contrib/perl/pod/perlfaq6.pod
===================================================================
--- trunk/contrib/perl/pod/perlfaq6.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlfaq6.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1149 +0,0 @@
-=head1 NAME
-
-perlfaq6 - Regular Expressions
-
-=head1 DESCRIPTION
-
-This section is surprisingly small because the rest of the FAQ is
-littered with answers involving regular expressions. For example,
-decoding a URL and checking whether something is a number are handled
-with regular expressions, but those answers are found elsewhere in
-this document (in L<perlfaq9>: "How do I decode or create those %-encodings
-on the web" and L<perlfaq4>: "How do I determine whether a scalar is
-a number/whole/integer/float", to be precise).
-
-=head2 How can I hope to use regular expressions without creating illegible and unmaintainable code?
-X<regex, legibility> X<regexp, legibility>
-X<regular expression, legibility> X</x>
-
-Three techniques can make regular expressions maintainable and
-understandable.
-
-=over 4
-
-=item Comments Outside the Regex
-
-Describe what you're doing and how you're doing it, using normal Perl
-comments.
-
- # turn the line into the first word, a colon, and the
- # number of characters on the rest of the line
- s/^(\w+)(.*)/ lc($1) . ":" . length($2) /meg;
-
-=item Comments Inside the Regex
-
-The C</x> modifier causes whitespace to be ignored in a regex pattern
-(except in a character class and a few other places), and also allows you to
-use normal comments there, too. As you can imagine, whitespace and comments
-help a lot.
-
-C</x> lets you turn this:
-
- s{<(?:[^>'"]*|".*?"|'.*?')+>}{}gs;
-
-into this:
-
- s{ < # opening angle bracket
- (?: # Non-backreffing grouping paren
- [^>'"] * # 0 or more things that are neither > nor ' nor "
- | # or else
- ".*?" # a section between double quotes (stingy match)
- | # or else
- '.*?' # a section between single quotes (stingy match)
- ) + # all occurring one or more times
- > # closing angle bracket
- }{}gsx; # replace with nothing, i.e. delete
-
-It's still not quite so clear as prose, but it is very useful for
-describing the meaning of each part of the pattern.
-
-=item Different Delimiters
-
-While we normally think of patterns as being delimited with C</>
-characters, they can be delimited by almost any character. L<perlre>
-describes this. For example, the C<s///> above uses braces as
-delimiters. Selecting another delimiter can avoid quoting the
-delimiter within the pattern:
-
- s/\/usr\/local/\/usr\/share/g; # bad delimiter choice
- s#/usr/local#/usr/share#g; # better
-
-=back
-
-=head2 I'm having trouble matching over more than one line. What's wrong?
-X<regex, multiline> X<regexp, multiline> X<regular expression, multiline>
-
-Either you don't have more than one line in the string you're looking
-at (probably), or else you aren't using the correct modifier(s) on
-your pattern (possibly).
-
-There are many ways to get multiline data into a string. If you want
-it to happen automatically while reading input, you'll want to set $/
-(probably to '' for paragraphs or C<undef> for the whole file) to
-allow you to read more than one line at a time.
-
-Read L<perlre> to help you decide which of C</s> and C</m> (or both)
-you might want to use: C</s> allows dot to include newline, and C</m>
-allows caret and dollar to match next to a newline, not just at the
-end of the string. You do need to make sure that you've actually
-got a multiline string in there.
-
-For example, this program detects duplicate words, even when they span
-line breaks (but not paragraph ones). For this example, we don't need
-C</s> because we aren't using dot in a regular expression that we want
-to cross line boundaries. Neither do we need C</m> because we aren't
-wanting caret or dollar to match at any point inside the record next
-to newlines. But it's imperative that $/ be set to something other
-than the default, or else we won't actually ever have a multiline
-record read in.
-
- $/ = ''; # read in whole paragraph, not just one line
- while ( <> ) {
- while ( /\b([\w'-]+)(\s+\g1)+\b/gi ) { # word starts alpha
- print "Duplicate $1 at paragraph $.\n";
- }
- }
-
-Here's code that finds sentences that begin with "From " (which would
-be mangled by many mailers):
-
- $/ = ''; # read in whole paragraph, not just one line
- while ( <> ) {
- while ( /^From /gm ) { # /m makes ^ match next to \n
- print "leading from in paragraph $.\n";
- }
- }
-
-Here's code that finds everything between START and END in a paragraph:
-
- undef $/; # read in whole file, not just one line or paragraph
- while ( <> ) {
- while ( /START(.*?)END/sgm ) { # /s makes . cross line boundaries
- print "$1\n";
- }
- }
-
-=head2 How can I pull out lines between two patterns that are themselves on different lines?
-X<..>
-
-You can use Perl's somewhat exotic C<..> operator (documented in
-L<perlop>):
-
- perl -ne 'print if /START/ .. /END/' file1 file2 ...
-
-If you wanted text and not lines, you would use
-
- perl -0777 -ne 'print "$1\n" while /START(.*?)END/gs' file1 file2 ...
-
-But if you want nested occurrences of C<START> through C<END>, you'll
-run up against the problem described in the question in this section
-on matching balanced text.
-
-Here's another example of using C<..>:
-
- while (<>) {
- $in_header = 1 .. /^$/;
- $in_body = /^$/ .. eof;
- # now choose between them
- } continue {
- $. = 0 if eof; # fix $.
- }
-
-=head2 How do I match XML, HTML, or other nasty, ugly things with a regex?
-X<regex, XML> X<regex, HTML> X<XML> X<HTML> X<pain> X<frustration>
-X<sucking out, will to live>
-
-(contributed by brian d foy)
-
-If you just want to get work done, use a module and forget about the
-regular expressions. The C<XML::Parser> and C<HTML::Parser> modules
-are good starts, although each namespace has other parsing modules
-specialized for certain tasks and different ways of doing it. Start at
-CPAN Search ( http://search.cpan.org ) and wonder at all the work people
-have done for you already! :)
-
-The problem with things such as XML is that they have balanced text
-containing multiple levels of balanced text, but sometimes it isn't
-balanced text, as in an empty tag (C<< <br/> >>, for instance). Even then,
-things can occur out-of-order. Just when you think you've got a
-pattern that matches your input, someone throws you a curveball.
-
-If you'd like to do it the hard way, scratching and clawing your way
-toward a right answer but constantly being disappointed, besieged by
-bug reports, and weary from the inordinate amount of time you have to
-spend reinventing a triangular wheel, then there are several things
-you can try before you give up in frustration:
-
-=over 4
-
-=item * Solve the balanced text problem from another question in L<perlfaq6>
-
-=item * Try the recursive regex features in Perl 5.10 and later. See L<perlre>
-
-=item * Try defining a grammar using Perl 5.10's C<(?DEFINE)> feature.
-
-=item * Break the problem down into sub-problems instead of trying to use a single regex
-
-=item * Convince everyone not to use XML or HTML in the first place
-
-=back
-
-Good luck!
-
-=head2 I put a regular expression into $/ but it didn't work. What's wrong?
-X<$/, regexes in> X<$INPUT_RECORD_SEPARATOR, regexes in>
-X<$RS, regexes in>
-
-$/ has to be a string. You can use these examples if you really need to
-do this.
-
-If you have File::Stream, this is easy.
-
- use File::Stream;
-
- my $stream = File::Stream->new(
- $filehandle,
- separator => qr/\s*,\s*/,
- );
-
- print "$_\n" while <$stream>;
-
-If you don't have File::Stream, you have to do a little more work.
-
-You can use the four-argument form of sysread to continually add to
-a buffer. After you add to the buffer, you check if you have a
-complete line (using your regular expression).
-
- local $_ = "";
- while( sysread FH, $_, 8192, length ) {
- while( s/^((?s).*?)your_pattern// ) {
- my $record = $1;
- # do stuff here.
- }
- }
-
-You can do the same thing with foreach and a match using the
-c flag and the \G anchor, if you do not mind your entire file
-being in memory at the end.
-
- local $_ = "";
- while( sysread FH, $_, 8192, length ) {
- foreach my $record ( m/\G((?s).*?)your_pattern/gc ) {
- # do stuff here.
- }
- substr( $_, 0, pos ) = "" if pos;
- }
-
-
-=head2 How do I substitute case-insensitively on the LHS while preserving case on the RHS?
-X<replace, case preserving> X<substitute, case preserving>
-X<substitution, case preserving> X<s, case preserving>
-
-Here's a lovely Perlish solution by Larry Rosler. It exploits
-properties of bitwise xor on ASCII strings.
-
- $_= "this is a TEsT case";
-
- $old = 'test';
- $new = 'success';
-
- s{(\Q$old\E)}
- { uc $new | (uc $1 ^ $1) .
- (uc(substr $1, -1) ^ substr $1, -1) x
- (length($new) - length $1)
- }egi;
-
- print;
-
-And here it is as a subroutine, modeled after the above:
-
- sub preserve_case($$) {
- my ($old, $new) = @_;
- my $mask = uc $old ^ $old;
-
- uc $new | $mask .
- substr($mask, -1) x (length($new) - length($old))
- }
-
- $string = "this is a TEsT case";
- $string =~ s/(test)/preserve_case($1, "success")/egi;
- print "$string\n";
-
-This prints:
-
- this is a SUcCESS case
-
-As an alternative, to keep the case of the replacement word if it is
-longer than the original, you can use this code, by Jeff Pinyan:
-
- sub preserve_case {
- my ($from, $to) = @_;
- my ($lf, $lt) = map length, @_;
-
- if ($lt < $lf) { $from = substr $from, 0, $lt }
- else { $from .= substr $to, $lf }
-
- return uc $to | ($from ^ uc $from);
- }
-
-This changes the sentence to "this is a SUcCess case."
-
-Just to show that C programmers can write C in any programming language,
-if you prefer a more C-like solution, the following script makes the
-substitution have the same case, letter by letter, as the original.
-(It also happens to run about 240% slower than the Perlish solution runs.)
-If the substitution has more characters than the string being substituted,
-the case of the last character is used for the rest of the substitution.
-
- # Original by Nathan Torkington, massaged by Jeffrey Friedl
- #
- sub preserve_case($$)
- {
- my ($old, $new) = @_;
- my ($state) = 0; # 0 = no change; 1 = lc; 2 = uc
- my ($i, $oldlen, $newlen, $c) = (0, length($old), length($new));
- my ($len) = $oldlen < $newlen ? $oldlen : $newlen;
-
- for ($i = 0; $i < $len; $i++) {
- if ($c = substr($old, $i, 1), $c =~ /[\W\d_]/) {
- $state = 0;
- } elsif (lc $c eq $c) {
- substr($new, $i, 1) = lc(substr($new, $i, 1));
- $state = 1;
- } else {
- substr($new, $i, 1) = uc(substr($new, $i, 1));
- $state = 2;
- }
- }
- # finish up with any remaining new (for when new is longer than old)
- if ($newlen > $oldlen) {
- if ($state == 1) {
- substr($new, $oldlen) = lc(substr($new, $oldlen));
- } elsif ($state == 2) {
- substr($new, $oldlen) = uc(substr($new, $oldlen));
- }
- }
- return $new;
- }
-
-=head2 How can I make C<\w> match national character sets?
-X<\w>
-
-Put C<use locale;> in your script. The \w character class is taken
-from the current locale.
-
-See L<perllocale> for details.
-
-=head2 How can I match a locale-smart version of C</[a-zA-Z]/>?
-X<alpha>
-
-You can use the POSIX character class syntax C</[[:alpha:]]/>
-documented in L<perlre>.
-
-No matter which locale you are in, the alphabetic characters are
-the characters in \w without the digits and the underscore.
-As a regex, that looks like C</[^\W\d_]/>. Its complement,
-the non-alphabetics, is then everything in \W along with
-the digits and the underscore, or C</[\W\d_]/>.
-
-=head2 How can I quote a variable to use in a regex?
-X<regex, escaping> X<regexp, escaping> X<regular expression, escaping>
-
-The Perl parser will expand $variable and @variable references in
-regular expressions unless the delimiter is a single quote. Remember,
-too, that the right-hand side of a C<s///> substitution is considered
-a double-quoted string (see L<perlop> for more details). Remember
-also that any regex special characters will be acted on unless you
-precede the substitution with \Q. Here's an example:
-
- $string = "Placido P. Octopus";
- $regex = "P.";
-
- $string =~ s/$regex/Polyp/;
- # $string is now "Polypacido P. Octopus"
-
-Because C<.> is special in regular expressions, and can match any
-single character, the regex C<P.> here has matched the <Pl> in the
-original string.
-
-To escape the special meaning of C<.>, we use C<\Q>:
-
- $string = "Placido P. Octopus";
- $regex = "P.";
-
- $string =~ s/\Q$regex/Polyp/;
- # $string is now "Placido Polyp Octopus"
-
-The use of C<\Q> causes the <.> in the regex to be treated as a
-regular character, so that C<P.> matches a C<P> followed by a dot.
-
-=head2 What is C</o> really for?
-X</o, regular expressions> X<compile, regular expressions>
-
-(contributed by brian d foy)
-
-The C</o> option for regular expressions (documented in L<perlop> and
-L<perlreref>) tells Perl to compile the regular expression only once.
-This is only useful when the pattern contains a variable. Perls 5.6
-and later handle this automatically if the pattern does not change.
-
-Since the match operator C<m//>, the substitution operator C<s///>,
-and the regular expression quoting operator C<qr//> are double-quotish
-constructs, you can interpolate variables into the pattern. See the
-answer to "How can I quote a variable to use in a regex?" for more
-details.
-
-This example takes a regular expression from the argument list and
-prints the lines of input that match it:
-
- my $pattern = shift @ARGV;
-
- while( <> ) {
- print if m/$pattern/;
- }
-
-Versions of Perl prior to 5.6 would recompile the regular expression
-for each iteration, even if C<$pattern> had not changed. The C</o>
-would prevent this by telling Perl to compile the pattern the first
-time, then reuse that for subsequent iterations:
-
- my $pattern = shift @ARGV;
-
- while( <> ) {
- print if m/$pattern/o; # useful for Perl < 5.6
- }
-
-In versions 5.6 and later, Perl won't recompile the regular expression
-if the variable hasn't changed, so you probably don't need the C</o>
-option. It doesn't hurt, but it doesn't help either. If you want any
-version of Perl to compile the regular expression only once even if
-the variable changes (thus, only using its initial value), you still
-need the C</o>.
-
-You can watch Perl's regular expression engine at work to verify for
-yourself if Perl is recompiling a regular expression. The C<use re
-'debug'> pragma (comes with Perl 5.005 and later) shows the details.
-With Perls before 5.6, you should see C<re> reporting that its
-compiling the regular expression on each iteration. With Perl 5.6 or
-later, you should only see C<re> report that for the first iteration.
-
- use re 'debug';
-
- $regex = 'Perl';
- foreach ( qw(Perl Java Ruby Python) ) {
- print STDERR "-" x 73, "\n";
- print STDERR "Trying $_...\n";
- print STDERR "\t$_ is good!\n" if m/$regex/;
- }
-
-=head2 How do I use a regular expression to strip C-style comments from a file?
-
-While this actually can be done, it's much harder than you'd think.
-For example, this one-liner
-
- perl -0777 -pe 's{/\*.*?\*/}{}gs' foo.c
-
-will work in many but not all cases. You see, it's too simple-minded for
-certain kinds of C programs, in particular, those with what appear to be
-comments in quoted strings. For that, you'd need something like this,
-created by Jeffrey Friedl and later modified by Fred Curtis.
-
- $/ = undef;
- $_ = <>;
- s#/\*[^*]*\*+([^/*][^*]*\*+)*/|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*)#defined $2 ? $2 : ""#gse;
- print;
-
-This could, of course, be more legibly written with the C</x> modifier, adding
-whitespace and comments. Here it is expanded, courtesy of Fred Curtis.
-
- s{
- /\* ## Start of /* ... */ comment
- [^*]*\*+ ## Non-* followed by 1-or-more *'s
- (
- [^/*][^*]*\*+
- )* ## 0-or-more things which don't start with /
- ## but do end with '*'
- / ## End of /* ... */ comment
-
- | ## OR various things which aren't comments:
-
- (
- " ## Start of " ... " string
- (
- \\. ## Escaped char
- | ## OR
- [^"\\] ## Non "\
- )*
- " ## End of " ... " string
-
- | ## OR
-
- ' ## Start of ' ... ' string
- (
- \\. ## Escaped char
- | ## OR
- [^'\\] ## Non '\
- )*
- ' ## End of ' ... ' string
-
- | ## OR
-
- . ## Anything other char
- [^/"'\\]* ## Chars which doesn't start a comment, string or escape
- )
- }{defined $2 ? $2 : ""}gxse;
-
-A slight modification also removes C++ comments, possibly spanning multiple lines
-using a continuation character:
-
- s#/\*[^*]*\*+([^/*][^*]*\*+)*/|//([^\\]|[^\n][\n]?)*?\n|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*)#defined $3 ? $3 : ""#gse;
-
-=head2 Can I use Perl regular expressions to match balanced text?
-X<regex, matching balanced test> X<regexp, matching balanced test>
-X<regular expression, matching balanced test> X<possessive> X<PARNO>
-X<Text::Balanced> X<Regexp::Common> X<backtracking> X<recursion>
-
-(contributed by brian d foy)
-
-Your first try should probably be the C<Text::Balanced> module, which
-is in the Perl standard library since Perl 5.8. It has a variety of
-functions to deal with tricky text. The C<Regexp::Common> module can
-also help by providing canned patterns you can use.
-
-As of Perl 5.10, you can match balanced text with regular expressions
-using recursive patterns. Before Perl 5.10, you had to resort to
-various tricks such as using Perl code in C<(??{})> sequences.
-
-Here's an example using a recursive regular expression. The goal is to
-capture all of the text within angle brackets, including the text in
-nested angle brackets. This sample text has two "major" groups: a
-group with one level of nesting and a group with two levels of
-nesting. There are five total groups in angle brackets:
-
- I have some <brackets in <nested brackets> > and
- <another group <nested once <nested twice> > >
- and that's it.
-
-The regular expression to match the balanced text uses two new (to
-Perl 5.10) regular expression features. These are covered in L<perlre>
-and this example is a modified version of one in that documentation.
-
-First, adding the new possessive C<+> to any quantifier finds the
-longest match and does not backtrack. That's important since you want
-to handle any angle brackets through the recursion, not backtracking.
-The group C<< [^<>]++ >> finds one or more non-angle brackets without
-backtracking.
-
-Second, the new C<(?PARNO)> refers to the sub-pattern in the
-particular capture group given by C<PARNO>. In the following regex,
-the first capture group finds (and remembers) the balanced text, and
-you need that same pattern within the first buffer to get past the
-nested text. That's the recursive part. The C<(?1)> uses the pattern
-in the outer capture group as an independent part of the regex.
-
-Putting it all together, you have:
-
- #!/usr/local/bin/perl5.10.0
-
- my $string =<<"HERE";
- I have some <brackets in <nested brackets> > and
- <another group <nested once <nested twice> > >
- and that's it.
- HERE
-
- my @groups = $string =~ m/
- ( # start of capture group 1
- < # match an opening angle bracket
- (?:
- [^<>]++ # one or more non angle brackets, non backtracking
- |
- (?1) # found < or >, so recurse to capture group 1
- )*
- > # match a closing angle bracket
- ) # end of capture group 1
- /xg;
-
- $" = "\n\t";
- print "Found:\n\t at groups\n";
-
-The output shows that Perl found the two major groups:
-
- Found:
- <brackets in <nested brackets> >
- <another group <nested once <nested twice> > >
-
-With a little extra work, you can get the all of the groups in angle
-brackets even if they are in other angle brackets too. Each time you
-get a balanced match, remove its outer delimiter (that's the one you
-just matched so don't match it again) and add it to a queue of strings
-to process. Keep doing that until you get no matches:
-
- #!/usr/local/bin/perl5.10.0
-
- my @queue =<<"HERE";
- I have some <brackets in <nested brackets> > and
- <another group <nested once <nested twice> > >
- and that's it.
- HERE
-
- my $regex = qr/
- ( # start of bracket 1
- < # match an opening angle bracket
- (?:
- [^<>]++ # one or more non angle brackets, non backtracking
- |
- (?1) # recurse to bracket 1
- )*
- > # match a closing angle bracket
- ) # end of bracket 1
- /x;
-
- $" = "\n\t";
-
- while( @queue )
- {
- my $string = shift @queue;
-
- my @groups = $string =~ m/$regex/g;
- print "Found:\n\t at groups\n\n" if @groups;
-
- unshift @queue, map { s/^<//; s/>$//; $_ } @groups;
- }
-
-The output shows all of the groups. The outermost matches show up
-first and the nested matches so up later:
-
- Found:
- <brackets in <nested brackets> >
- <another group <nested once <nested twice> > >
-
- Found:
- <nested brackets>
-
- Found:
- <nested once <nested twice> >
-
- Found:
- <nested twice>
-
-=head2 What does it mean that regexes are greedy? How can I get around it?
-X<greedy> X<greediness>
-
-Most people mean that greedy regexes match as much as they can.
-Technically speaking, it's actually the quantifiers (C<?>, C<*>, C<+>,
-C<{}>) that are greedy rather than the whole pattern; Perl prefers local
-greed and immediate gratification to overall greed. To get non-greedy
-versions of the same quantifiers, use (C<??>, C<*?>, C<+?>, C<{}?>).
-
-An example:
-
- $s1 = $s2 = "I am very very cold";
- $s1 =~ s/ve.*y //; # I am cold
- $s2 =~ s/ve.*?y //; # I am very cold
-
-Notice how the second substitution stopped matching as soon as it
-encountered "y ". The C<*?> quantifier effectively tells the regular
-expression engine to find a match as quickly as possible and pass
-control on to whatever is next in line, as you would if you were
-playing hot potato.
-
-=head2 How do I process each word on each line?
-X<word>
-
-Use the split function:
-
- while (<>) {
- foreach $word ( split ) {
- # do something with $word here
- }
- }
-
-Note that this isn't really a word in the English sense; it's just
-chunks of consecutive non-whitespace characters.
-
-To work with only alphanumeric sequences (including underscores), you
-might consider
-
- while (<>) {
- foreach $word (m/(\w+)/g) {
- # do something with $word here
- }
- }
-
-=head2 How can I print out a word-frequency or line-frequency summary?
-
-To do this, you have to parse out each word in the input stream. We'll
-pretend that by word you mean chunk of alphabetics, hyphens, or
-apostrophes, rather than the non-whitespace chunk idea of a word given
-in the previous question:
-
- while (<>) {
- while ( /(\b[^\W_\d][\w'-]+\b)/g ) { # misses "`sheep'"
- $seen{$1}++;
- }
- }
-
- while ( ($word, $count) = each %seen ) {
- print "$count $word\n";
- }
-
-If you wanted to do the same thing for lines, you wouldn't need a
-regular expression:
-
- while (<>) {
- $seen{$_}++;
- }
-
- while ( ($line, $count) = each %seen ) {
- print "$count $line";
- }
-
-If you want these output in a sorted order, see L<perlfaq4>: "How do I
-sort a hash (optionally by value instead of key)?".
-
-=head2 How can I do approximate matching?
-X<match, approximate> X<matching, approximate>
-
-See the module String::Approx available from CPAN.
-
-=head2 How do I efficiently match many regular expressions at once?
-X<regex, efficiency> X<regexp, efficiency>
-X<regular expression, efficiency>
-
-(contributed by brian d foy)
-
-If you have Perl 5.10 or later, this is almost trivial. You just smart
-match against an array of regular expression objects:
-
- my @patterns = ( qr/Fr.d/, qr/B.rn.y/, qr/W.lm./ );
-
- if( $string ~~ @patterns ) {
- ...
- };
-
-The smart match stops when it finds a match, so it doesn't have to try
-every expression.
-
-Earlier than Perl 5.10, you have a bit of work to do. You want to
-avoid compiling a regular expression every time you want to match it.
-In this example, perl must recompile the regular expression for every
-iteration of the C<foreach> loop since it has no way to know what
-C<$pattern> will be:
-
- my @patterns = qw( foo bar baz );
-
- LINE: while( <DATA> ) {
- foreach $pattern ( @patterns ) {
- if( /\b$pattern\b/i ) {
- print;
- next LINE;
- }
- }
- }
-
-The C<qr//> operator showed up in perl 5.005. It compiles a regular
-expression, but doesn't apply it. When you use the pre-compiled
-version of the regex, perl does less work. In this example, I inserted
-a C<map> to turn each pattern into its pre-compiled form. The rest of
-the script is the same, but faster:
-
- my @patterns = map { qr/\b$_\b/i } qw( foo bar baz );
-
- LINE: while( <> ) {
- foreach $pattern ( @patterns ) {
- if( /$pattern/ )
- {
- print;
- next LINE;
- }
- }
- }
-
-In some cases, you may be able to make several patterns into a single
-regular expression. Beware of situations that require backtracking
-though.
-
- my $regex = join '|', qw( foo bar baz );
-
- LINE: while( <> ) {
- print if /\b(?:$regex)\b/i;
- }
-
-For more details on regular expression efficiency, see I<Mastering
-Regular Expressions> by Jeffrey Friedl. He explains how regular
-expressions engine work and why some patterns are surprisingly
-inefficient. Once you understand how perl applies regular expressions,
-you can tune them for individual situations.
-
-=head2 Why don't word-boundary searches with C<\b> work for me?
-X<\b>
-
-(contributed by brian d foy)
-
-Ensure that you know what \b really does: it's the boundary between a
-word character, \w, and something that isn't a word character. That
-thing that isn't a word character might be \W, but it can also be the
-start or end of the string.
-
-It's not (not!) the boundary between whitespace and non-whitespace,
-and it's not the stuff between words we use to create sentences.
-
-In regex speak, a word boundary (\b) is a "zero width assertion",
-meaning that it doesn't represent a character in the string, but a
-condition at a certain position.
-
-For the regular expression, /\bPerl\b/, there has to be a word
-boundary before the "P" and after the "l". As long as something other
-than a word character precedes the "P" and succeeds the "l", the
-pattern will match. These strings match /\bPerl\b/.
-
- "Perl" # no word char before P or after l
- "Perl " # same as previous (space is not a word char)
- "'Perl'" # the ' char is not a word char
- "Perl's" # no word char before P, non-word char after "l"
-
-These strings do not match /\bPerl\b/.
-
- "Perl_" # _ is a word char!
- "Perler" # no word char before P, but one after l
-
-You don't have to use \b to match words though. You can look for
-non-word characters surrounded by word characters. These strings
-match the pattern /\b'\b/.
-
- "don't" # the ' char is surrounded by "n" and "t"
- "qep'a'" # the ' char is surrounded by "p" and "a"
-
-These strings do not match /\b'\b/.
-
- "foo'" # there is no word char after non-word '
-
-You can also use the complement of \b, \B, to specify that there
-should not be a word boundary.
-
-In the pattern /\Bam\B/, there must be a word character before the "a"
-and after the "m". These patterns match /\Bam\B/:
-
- "llama" # "am" surrounded by word chars
- "Samuel" # same
-
-These strings do not match /\Bam\B/
-
- "Sam" # no word boundary before "a", but one after "m"
- "I am Sam" # "am" surrounded by non-word chars
-
-
-=head2 Why does using $&, $`, or $' slow my program down?
-X<$MATCH> X<$&> X<$POSTMATCH> X<$'> X<$PREMATCH> X<$`>
-
-(contributed by Anno Siegel)
-
-Once Perl sees that you need one of these variables anywhere in the
-program, it provides them on each and every pattern match. That means
-that on every pattern match the entire string will be copied, part of it
-to $`, part to $&, and part to $'. Thus the penalty is most severe with
-long strings and patterns that match often. Avoid $&, $', and $` if you
-can, but if you can't, once you've used them at all, use them at will
-because you've already paid the price. Remember that some algorithms
-really appreciate them. As of the 5.005 release, the $& variable is no
-longer "expensive" the way the other two are.
-
-Since Perl 5.6.1 the special variables @- and @+ can functionally replace
-$`, $& and $'. These arrays contain pointers to the beginning and end
-of each match (see perlvar for the full story), so they give you
-essentially the same information, but without the risk of excessive
-string copying.
-
-Perl 5.10 added three specials, C<${^MATCH}>, C<${^PREMATCH}>, and
-C<${^POSTMATCH}> to do the same job but without the global performance
-penalty. Perl 5.10 only sets these variables if you compile or execute the
-regular expression with the C</p> modifier.
-
-=head2 What good is C<\G> in a regular expression?
-X<\G>
-
-You use the C<\G> anchor to start the next match on the same
-string where the last match left off. The regular
-expression engine cannot skip over any characters to find
-the next match with this anchor, so C<\G> is similar to the
-beginning of string anchor, C<^>. The C<\G> anchor is typically
-used with the C<g> flag. It uses the value of C<pos()>
-as the position to start the next match. As the match
-operator makes successive matches, it updates C<pos()> with the
-position of the next character past the last match (or the
-first character of the next match, depending on how you like
-to look at it). Each string has its own C<pos()> value.
-
-Suppose you want to match all of consecutive pairs of digits
-in a string like "1122a44" and stop matching when you
-encounter non-digits. You want to match C<11> and C<22> but
-the letter <a> shows up between C<22> and C<44> and you want
-to stop at C<a>. Simply matching pairs of digits skips over
-the C<a> and still matches C<44>.
-
- $_ = "1122a44";
- my @pairs = m/(\d\d)/g; # qw( 11 22 44 )
-
-If you use the C<\G> anchor, you force the match after C<22> to
-start with the C<a>. The regular expression cannot match
-there since it does not find a digit, so the next match
-fails and the match operator returns the pairs it already
-found.
-
- $_ = "1122a44";
- my @pairs = m/\G(\d\d)/g; # qw( 11 22 )
-
-You can also use the C<\G> anchor in scalar context. You
-still need the C<g> flag.
-
- $_ = "1122a44";
- while( m/\G(\d\d)/g )
- {
- print "Found $1\n";
- }
-
-After the match fails at the letter C<a>, perl resets C<pos()>
-and the next match on the same string starts at the beginning.
-
- $_ = "1122a44";
- while( m/\G(\d\d)/g )
- {
- print "Found $1\n";
- }
-
- print "Found $1 after while" if m/(\d\d)/g; # finds "11"
-
-You can disable C<pos()> resets on fail with the C<c> flag, documented
-in L<perlop> and L<perlreref>. Subsequent matches start where the last
-successful match ended (the value of C<pos()>) even if a match on the
-same string has failed in the meantime. In this case, the match after
-the C<while()> loop starts at the C<a> (where the last match stopped),
-and since it does not use any anchor it can skip over the C<a> to find
-C<44>.
-
- $_ = "1122a44";
- while( m/\G(\d\d)/gc )
- {
- print "Found $1\n";
- }
-
- print "Found $1 after while" if m/(\d\d)/g; # finds "44"
-
-Typically you use the C<\G> anchor with the C<c> flag
-when you want to try a different match if one fails,
-such as in a tokenizer. Jeffrey Friedl offers this example
-which works in 5.004 or later.
-
- while (<>) {
- chomp;
- PARSER: {
- m/ \G( \d+\b )/gcx && do { print "number: $1\n"; redo; };
- m/ \G( \w+ )/gcx && do { print "word: $1\n"; redo; };
- m/ \G( \s+ )/gcx && do { print "space: $1\n"; redo; };
- m/ \G( [^\w\d]+ )/gcx && do { print "other: $1\n"; redo; };
- }
- }
-
-For each line, the C<PARSER> loop first tries to match a series
-of digits followed by a word boundary. This match has to
-start at the place the last match left off (or the beginning
-of the string on the first match). Since C<m/ \G( \d+\b
-)/gcx> uses the C<c> flag, if the string does not match that
-regular expression, perl does not reset pos() and the next
-match starts at the same position to try a different
-pattern.
-
-=head2 Are Perl regexes DFAs or NFAs? Are they POSIX compliant?
-X<DFA> X<NFA> X<POSIX>
-
-While it's true that Perl's regular expressions resemble the DFAs
-(deterministic finite automata) of the egrep(1) program, they are in
-fact implemented as NFAs (non-deterministic finite automata) to allow
-backtracking and backreferencing. And they aren't POSIX-style either,
-because those guarantee worst-case behavior for all cases. (It seems
-that some people prefer guarantees of consistency, even when what's
-guaranteed is slowness.) See the book "Mastering Regular Expressions"
-(from O'Reilly) by Jeffrey Friedl for all the details you could ever
-hope to know on these matters (a full citation appears in
-L<perlfaq2>).
-
-=head2 What's wrong with using grep in a void context?
-X<grep>
-
-The problem is that grep builds a return list, regardless of the context.
-This means you're making Perl go to the trouble of building a list that
-you then just throw away. If the list is large, you waste both time and space.
-If your intent is to iterate over the list, then use a for loop for this
-purpose.
-
-In perls older than 5.8.1, map suffers from this problem as well.
-But since 5.8.1, this has been fixed, and map is context aware - in void
-context, no lists are constructed.
-
-=head2 How can I match strings with multibyte characters?
-X<regex, and multibyte characters> X<regexp, and multibyte characters>
-X<regular expression, and multibyte characters> X<martian> X<encoding, Martian>
-
-Starting from Perl 5.6 Perl has had some level of multibyte character
-support. Perl 5.8 or later is recommended. Supported multibyte
-character repertoires include Unicode, and legacy encodings
-through the Encode module. See L<perluniintro>, L<perlunicode>,
-and L<Encode>.
-
-If you are stuck with older Perls, you can do Unicode with the
-C<Unicode::String> module, and character conversions using the
-C<Unicode::Map8> and C<Unicode::Map> modules. If you are using
-Japanese encodings, you might try using the jperl 5.005_03.
-
-Finally, the following set of approaches was offered by Jeffrey
-Friedl, whose article in issue #5 of The Perl Journal talks about
-this very matter.
-
-Let's suppose you have some weird Martian encoding where pairs of
-ASCII uppercase letters encode single Martian letters (i.e. the two
-bytes "CV" make a single Martian letter, as do the two bytes "SG",
-"VS", "XX", etc.). Other bytes represent single characters, just like
-ASCII.
-
-So, the string of Martian "I am CVSGXX!" uses 12 bytes to encode the
-nine characters 'I', ' ', 'a', 'm', ' ', 'CV', 'SG', 'XX', '!'.
-
-Now, say you want to search for the single character C</GX/>. Perl
-doesn't know about Martian, so it'll find the two bytes "GX" in the "I
-am CVSGXX!" string, even though that character isn't there: it just
-looks like it is because "SG" is next to "XX", but there's no real
-"GX". This is a big problem.
-
-Here are a few ways, all painful, to deal with it:
-
- # Make sure adjacent "martian" bytes are no longer adjacent.
- $martian =~ s/([A-Z][A-Z])/ $1 /g;
-
- print "found GX!\n" if $martian =~ /GX/;
-
-Or like this:
-
- @chars = $martian =~ m/([A-Z][A-Z]|[^A-Z])/g;
- # above is conceptually similar to: @chars = $text =~ m/(.)/g;
- #
- foreach $char (@chars) {
- print "found GX!\n", last if $char eq 'GX';
- }
-
-Or like this:
-
- while ($martian =~ m/\G([A-Z][A-Z]|.)/gs) { # \G probably unneeded
- print "found GX!\n", last if $1 eq 'GX';
- }
-
-Here's another, slightly less painful, way to do it from Benjamin
-Goldberg, who uses a zero-width negative look-behind assertion.
-
- print "found GX!\n" if $martian =~ m/
- (?<![A-Z])
- (?:[A-Z][A-Z])*?
- GX
- /x;
-
-This succeeds if the "martian" character GX is in the string, and fails
-otherwise. If you don't like using (?<!), a zero-width negative
-look-behind assertion, you can replace (?<![A-Z]) with (?:^|[^A-Z]).
-
-It does have the drawback of putting the wrong thing in $-[0] and $+[0],
-but this usually can be worked around.
-
-=head2 How do I match a regular expression that's in a variable?
-X<regex, in variable> X<eval> X<regex> X<quotemeta> X<\Q, regex>
-X<\E, regex>, X<qr//>
-
-(contributed by brian d foy)
-
-We don't have to hard-code patterns into the match operator (or
-anything else that works with regular expressions). We can put the
-pattern in a variable for later use.
-
-The match operator is a double quote context, so you can interpolate
-your variable just like a double quoted string. In this case, you
-read the regular expression as user input and store it in C<$regex>.
-Once you have the pattern in C<$regex>, you use that variable in the
-match operator.
-
- chomp( my $regex = <STDIN> );
-
- if( $string =~ m/$regex/ ) { ... }
-
-Any regular expression special characters in C<$regex> are still
-special, and the pattern still has to be valid or Perl will complain.
-For instance, in this pattern there is an unpaired parenthesis.
-
- my $regex = "Unmatched ( paren";
-
- "Two parens to bind them all" =~ m/$regex/;
-
-When Perl compiles the regular expression, it treats the parenthesis
-as the start of a memory match. When it doesn't find the closing
-parenthesis, it complains:
-
- Unmatched ( in regex; marked by <-- HERE in m/Unmatched ( <-- HERE paren/ at script line 3.
-
-You can get around this in several ways depending on our situation.
-First, if you don't want any of the characters in the string to be
-special, you can escape them with C<quotemeta> before you use the string.
-
- chomp( my $regex = <STDIN> );
- $regex = quotemeta( $regex );
-
- if( $string =~ m/$regex/ ) { ... }
-
-You can also do this directly in the match operator using the C<\Q>
-and C<\E> sequences. The C<\Q> tells Perl where to start escaping
-special characters, and the C<\E> tells it where to stop (see L<perlop>
-for more details).
-
- chomp( my $regex = <STDIN> );
-
- if( $string =~ m/\Q$regex\E/ ) { ... }
-
-Alternately, you can use C<qr//>, the regular expression quote operator (see
-L<perlop> for more details). It quotes and perhaps compiles the pattern,
-and you can apply regular expression flags to the pattern.
-
- chomp( my $input = <STDIN> );
-
- my $regex = qr/$input/is;
-
- $string =~ m/$regex/ # same as m/$input/is;
-
-You might also want to trap any errors by wrapping an C<eval> block
-around the whole thing.
-
- chomp( my $input = <STDIN> );
-
- eval {
- if( $string =~ m/\Q$input\E/ ) { ... }
- };
- warn $@ if $@;
-
-Or...
-
- my $regex = eval { qr/$input/is };
- if( defined $regex ) {
- $string =~ m/$regex/;
- }
- else {
- warn $@;
- }
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
-other authors as noted. All rights reserved.
-
-This documentation is free; you can redistribute it and/or modify it
-under the same terms as Perl itself.
-
-Irrespective of its distribution, all code examples in this file
-are hereby placed into the public domain. You are permitted and
-encouraged to use this code in your own programs for fun
-or for profit as you see fit. A simple comment in the code giving
-credit would be courteous but is not required.
Deleted: trunk/contrib/perl/pod/perlfaq7.pod
===================================================================
--- trunk/contrib/perl/pod/perlfaq7.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlfaq7.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1070 +0,0 @@
-=head1 NAME
-
-perlfaq7 - General Perl Language Issues
-
-=head1 DESCRIPTION
-
-This section deals with general Perl language issues that don't
-clearly fit into any of the other sections.
-
-=head2 Can I get a BNF/yacc/RE for the Perl language?
-
-There is no BNF, but you can paw your way through the yacc grammar in
-perly.y in the source distribution if you're particularly brave. The
-grammar relies on very smart tokenizing code, so be prepared to
-venture into toke.c as well.
-
-In the words of Chaim Frenkel: "Perl's grammar can not be reduced to BNF.
-The work of parsing perl is distributed between yacc, the lexer, smoke
-and mirrors."
-
-=head2 What are all these $@%&* punctuation signs, and how do I know when to use them?
-
-They are type specifiers, as detailed in L<perldata>:
-
- $ for scalar values (number, string or reference)
- @ for arrays
- % for hashes (associative arrays)
- & for subroutines (aka functions, procedures, methods)
- * for all types of that symbol name. In version 4 you used them like
- pointers, but in modern perls you can just use references.
-
-There are a couple of other symbols that
-you're likely to encounter that aren't
-really type specifiers:
-
- <> are used for inputting a record from a filehandle.
- \ takes a reference to something.
-
-Note that <FILE> is I<neither> the type specifier for files
-nor the name of the handle. It is the C<< <> >> operator applied
-to the handle FILE. It reads one line (well, record--see
-L<perlvar/$E<sol>>) from the handle FILE in scalar context, or I<all> lines
-in list context. When performing open, close, or any other operation
-besides C<< <> >> on files, or even when talking about the handle, do
-I<not> use the brackets. These are correct: C<eof(FH)>, C<seek(FH, 0,
-2)> and "copying from STDIN to FILE".
-
-=head2 Do I always/never have to quote my strings or use semicolons and commas?
-
-Normally, a bareword doesn't need to be quoted, but in most cases
-probably should be (and must be under C<use strict>). But a hash key
-consisting of a simple word and the left-hand
-operand to the C<< => >> operator both
-count as though they were quoted:
-
- This is like this
- ------------ ---------------
- $foo{line} $foo{'line'}
- bar => stuff 'bar' => stuff
-
-The final semicolon in a block is optional, as is the final comma in a
-list. Good style (see L<perlstyle>) says to put them in except for
-one-liners:
-
- if ($whoops) { exit 1 }
- @nums = (1, 2, 3);
-
- if ($whoops) {
- exit 1;
- }
-
- @lines = (
- "There Beren came from mountains cold",
- "And lost he wandered under leaves",
- );
-
-=head2 How do I skip some return values?
-
-One way is to treat the return values as a list and index into it:
-
- $dir = (getpwnam($user))[7];
-
-Another way is to use undef as an element on the left-hand-side:
-
- ($dev, $ino, undef, undef, $uid, $gid) = stat($file);
-
-You can also use a list slice to select only the elements that
-you need:
-
- ($dev, $ino, $uid, $gid) = ( stat($file) )[0,1,4,5];
-
-=head2 How do I temporarily block warnings?
-
-If you are running Perl 5.6.0 or better, the C<use warnings> pragma
-allows fine control of what warning are produced.
-See L<perllexwarn> for more details.
-
- {
- no warnings; # temporarily turn off warnings
- $a = $b + $c; # I know these might be undef
- }
-
-Additionally, you can enable and disable categories of warnings.
-You turn off the categories you want to ignore and you can still
-get other categories of warnings. See L<perllexwarn> for the
-complete details, including the category names and hierarchy.
-
- {
- no warnings 'uninitialized';
- $a = $b + $c;
- }
-
-If you have an older version of Perl, the C<$^W> variable (documented
-in L<perlvar>) controls runtime warnings for a block:
-
- {
- local $^W = 0; # temporarily turn off warnings
- $a = $b + $c; # I know these might be undef
- }
-
-Note that like all the punctuation variables, you cannot currently
-use my() on C<$^W>, only local().
-
-=head2 What's an extension?
-
-An extension is a way of calling compiled C code from Perl. Reading
-L<perlxstut> is a good place to learn more about extensions.
-
-=head2 Why do Perl operators have different precedence than C operators?
-
-Actually, they don't. All C operators that Perl copies have the same
-precedence in Perl as they do in C. The problem is with operators that C
-doesn't have, especially functions that give a list context to everything
-on their right, eg. print, chmod, exec, and so on. Such functions are
-called "list operators" and appear as such in the precedence table in
-L<perlop>.
-
-A common mistake is to write:
-
- unlink $file || die "snafu";
-
-This gets interpreted as:
-
- unlink ($file || die "snafu");
-
-To avoid this problem, either put in extra parentheses or use the
-super low precedence C<or> operator:
-
- (unlink $file) || die "snafu";
- unlink $file or die "snafu";
-
-The "English" operators (C<and>, C<or>, C<xor>, and C<not>)
-deliberately have precedence lower than that of list operators for
-just such situations as the one above.
-
-Another operator with surprising precedence is exponentiation. It
-binds more tightly even than unary minus, making C<-2**2> produce a
-negative not a positive four. It is also right-associating, meaning
-that C<2**3**2> is two raised to the ninth power, not eight squared.
-
-Although it has the same precedence as in C, Perl's C<?:> operator
-produces an lvalue. This assigns $x to either $a or $b, depending
-on the trueness of $maybe:
-
- ($maybe ? $a : $b) = $x;
-
-=head2 How do I declare/create a structure?
-
-In general, you don't "declare" a structure. Just use a (probably
-anonymous) hash reference. See L<perlref> and L<perldsc> for details.
-Here's an example:
-
- $person = {}; # new anonymous hash
- $person->{AGE} = 24; # set field AGE to 24
- $person->{NAME} = "Nat"; # set field NAME to "Nat"
-
-If you're looking for something a bit more rigorous, try L<perltoot>.
-
-=head2 How do I create a module?
-
-(contributed by brian d foy)
-
-L<perlmod>, L<perlmodlib>, L<perlmodstyle> explain modules
-in all the gory details. L<perlnewmod> gives a brief
-overview of the process along with a couple of suggestions
-about style.
-
-If you need to include C code or C library interfaces in
-your module, you'll need h2xs. h2xs will create the module
-distribution structure and the initial interface files
-you'll need. L<perlxs> and L<perlxstut> explain the details.
-
-If you don't need to use C code, other tools such as
-ExtUtils::ModuleMaker and Module::Starter, can help you
-create a skeleton module distribution.
-
-You may also want to see Sam Tregar's "Writing Perl Modules
-for CPAN" ( http://apress.com/book/bookDisplay.html?bID=14 )
-which is the best hands-on guide to creating module
-distributions.
-
-=head2 How do I adopt or take over a module already on CPAN?
-
-(contributed by brian d foy)
-
-The easiest way to take over a module is to have the current
-module maintainer either make you a co-maintainer or transfer
-the module to you.
-
-If you can't reach the author for some reason (e.g. email bounces),
-the PAUSE admins at modules at perl.org can help. The PAUSE admins
-treat each case individually.
-
-=over 4
-
-=item *
-
-Get a login for the Perl Authors Upload Server (PAUSE) if you don't
-already have one: http://pause.perl.org
-
-=item *
-
-Write to modules at perl.org explaining what you did to contact the
-current maintainer. The PAUSE admins will also try to reach the
-maintainer.
-
-=item *
-
-Post a public message in a heavily trafficked site announcing your
-intention to take over the module.
-
-=item *
-
-Wait a bit. The PAUSE admins don't want to act too quickly in case
-the current maintainer is on holiday. If there's no response to
-private communication or the public post, a PAUSE admin can transfer
-it to you.
-
-=back
-
-=head2 How do I create a class?
-X<class, creation> X<package>
-
-(contributed by brian d foy)
-
-In Perl, a class is just a package, and methods are just subroutines.
-Perl doesn't get more formal than that and lets you set up the package
-just the way that you like it (that is, it doesn't set up anything for
-you).
-
-The Perl documentation has several tutorials that cover class
-creation, including L<perlboot> (Barnyard Object Oriented Tutorial),
-L<perltoot> (Tom's Object Oriented Tutorial), L<perlbot> (Bag o'
-Object Tricks), and L<perlobj>.
-
-=head2 How can I tell if a variable is tainted?
-
-You can use the tainted() function of the Scalar::Util module, available
-from CPAN (or included with Perl since release 5.8.0).
-See also L<perlsec/"Laundering and Detecting Tainted Data">.
-
-=head2 What's a closure?
-
-Closures are documented in L<perlref>.
-
-I<Closure> is a computer science term with a precise but
-hard-to-explain meaning. Usually, closures are implemented in Perl as
-anonymous subroutines with lasting references to lexical variables
-outside their own scopes. These lexicals magically refer to the
-variables that were around when the subroutine was defined (deep
-binding).
-
-Closures are most often used in programming languages where you can
-have the return value of a function be itself a function, as you can
-in Perl. Note that some languages provide anonymous functions but are
-not capable of providing proper closures: the Python language, for
-example. For more information on closures, check out any textbook on
-functional programming. Scheme is a language that not only supports
-but encourages closures.
-
-Here's a classic non-closure function-generating function:
-
- sub add_function_generator {
- return sub { shift() + shift() };
- }
-
- $add_sub = add_function_generator();
- $sum = $add_sub->(4,5); # $sum is 9 now.
-
-The anonymous subroutine returned by add_function_generator() isn't
-technically a closure because it refers to no lexicals outside its own
-scope. Using a closure gives you a I<function template> with some
-customization slots left out to be filled later.
-
-Contrast this with the following make_adder() function, in which the
-returned anonymous function contains a reference to a lexical variable
-outside the scope of that function itself. Such a reference requires
-that Perl return a proper closure, thus locking in for all time the
-value that the lexical had when the function was created.
-
- sub make_adder {
- my $addpiece = shift;
- return sub { shift() + $addpiece };
- }
-
- $f1 = make_adder(20);
- $f2 = make_adder(555);
-
-Now C<&$f1($n)> is always 20 plus whatever $n you pass in, whereas
-C<&$f2($n)> is always 555 plus whatever $n you pass in. The $addpiece
-in the closure sticks around.
-
-Closures are often used for less esoteric purposes. For example, when
-you want to pass in a bit of code into a function:
-
- my $line;
- timeout( 30, sub { $line = <STDIN> } );
-
-If the code to execute had been passed in as a string,
-C<< '$line = <STDIN>' >>, there would have been no way for the
-hypothetical timeout() function to access the lexical variable
-$line back in its caller's scope.
-
-Another use for a closure is to make a variable I<private> to a
-named subroutine, e.g. a counter that gets initialized at creation
-time of the sub and can only be modified from within the sub.
-This is sometimes used with a BEGIN block in package files to make
-sure a variable doesn't get meddled with during the lifetime of the
-package:
-
- BEGIN {
- my $id = 0;
- sub next_id { ++$id }
- }
-
-This is discussed in more detail in L<perlsub>; see the entry on
-I<Persistent Private Variables>.
-
-=head2 What is variable suicide and how can I prevent it?
-
-This problem was fixed in perl 5.004_05, so preventing it means upgrading
-your version of perl. ;)
-
-Variable suicide is when you (temporarily or permanently) lose the value
-of a variable. It is caused by scoping through my() and local()
-interacting with either closures or aliased foreach() iterator variables
-and subroutine arguments. It used to be easy to inadvertently lose a
-variable's value this way, but now it's much harder. Take this code:
-
- my $f = 'foo';
- sub T {
- while ($i++ < 3) { my $f = $f; $f .= "bar"; print $f, "\n" }
- }
-
- T;
- print "Finally $f\n";
-
-If you are experiencing variable suicide, that C<my $f> in the subroutine
-doesn't pick up a fresh copy of the C<$f> whose value is <foo>. The output
-shows that inside the subroutine the value of C<$f> leaks through when it
-shouldn't, as in this output:
-
- foobar
- foobarbar
- foobarbarbar
- Finally foo
-
-The $f that has "bar" added to it three times should be a new C<$f>
-C<my $f> should create a new lexical variable each time through the loop.
-The expected output is:
-
- foobar
- foobar
- foobar
- Finally foo
-
-=head2 How can I pass/return a {Function, FileHandle, Array, Hash, Method, Regex}?
-
-You need to pass references to these objects. See L<perlsub/"Pass by
-Reference"> for this particular question, and L<perlref> for
-information on references.
-
-=over 4
-
-=item Passing Variables and Functions
-
-Regular variables and functions are quite easy to pass: just pass in a
-reference to an existing or anonymous variable or function:
-
- func( \$some_scalar );
-
- func( \@some_array );
- func( [ 1 .. 10 ] );
-
- func( \%some_hash );
- func( { this => 10, that => 20 } );
-
- func( \&some_func );
- func( sub { $_[0] ** $_[1] } );
-
-=item Passing Filehandles
-
-As of Perl 5.6, you can represent filehandles with scalar variables
-which you treat as any other scalar.
-
- open my $fh, $filename or die "Cannot open $filename! $!";
- func( $fh );
-
- sub func {
- my $passed_fh = shift;
-
- my $line = <$passed_fh>;
- }
-
-Before Perl 5.6, you had to use the C<*FH> or C<\*FH> notations.
-These are "typeglobs"--see L<perldata/"Typeglobs and Filehandles">
-and especially L<perlsub/"Pass by Reference"> for more information.
-
-=item Passing Regexes
-
-Here's an example of how to pass in a string and a regular expression
-for it to match against. You construct the pattern with the C<qr//>
-operator:
-
- sub compare($$) {
- my ($val1, $regex) = @_;
- my $retval = $val1 =~ /$regex/;
- return $retval;
- }
- $match = compare("old McDonald", qr/d.*D/i);
-
-=item Passing Methods
-
-To pass an object method into a subroutine, you can do this:
-
- call_a_lot(10, $some_obj, "methname")
- sub call_a_lot {
- my ($count, $widget, $trick) = @_;
- for (my $i = 0; $i < $count; $i++) {
- $widget->$trick();
- }
- }
-
-Or, you can use a closure to bundle up the object, its
-method call, and arguments:
-
- my $whatnot = sub { $some_obj->obfuscate(@args) };
- func($whatnot);
- sub func {
- my $code = shift;
- &$code();
- }
-
-You could also investigate the can() method in the UNIVERSAL class
-(part of the standard perl distribution).
-
-=back
-
-=head2 How do I create a static variable?
-
-(contributed by brian d foy)
-
-In Perl 5.10, declare the variable with C<state>. The C<state>
-declaration creates the lexical variable that persists between calls
-to the subroutine:
-
- sub counter { state $count = 1; $counter++ }
-
-You can fake a static variable by using a lexical variable which goes
-out of scope. In this example, you define the subroutine C<counter>, and
-it uses the lexical variable C<$count>. Since you wrap this in a BEGIN
-block, C<$count> is defined at compile-time, but also goes out of
-scope at the end of the BEGIN block. The BEGIN block also ensures that
-the subroutine and the value it uses is defined at compile-time so the
-subroutine is ready to use just like any other subroutine, and you can
-put this code in the same place as other subroutines in the program
-text (i.e. at the end of the code, typically). The subroutine
-C<counter> still has a reference to the data, and is the only way you
-can access the value (and each time you do, you increment the value).
-The data in chunk of memory defined by C<$count> is private to
-C<counter>.
-
- BEGIN {
- my $count = 1;
- sub counter { $count++ }
- }
-
- my $start = counter();
-
- .... # code that calls counter();
-
- my $end = counter();
-
-In the previous example, you created a function-private variable
-because only one function remembered its reference. You could define
-multiple functions while the variable is in scope, and each function
-can share the "private" variable. It's not really "static" because you
-can access it outside the function while the lexical variable is in
-scope, and even create references to it. In this example,
-C<increment_count> and C<return_count> share the variable. One
-function adds to the value and the other simply returns the value.
-They can both access C<$count>, and since it has gone out of scope,
-there is no other way to access it.
-
- BEGIN {
- my $count = 1;
- sub increment_count { $count++ }
- sub return_count { $count }
- }
-
-To declare a file-private variable, you still use a lexical variable.
-A file is also a scope, so a lexical variable defined in the file
-cannot be seen from any other file.
-
-See L<perlsub/"Persistent Private Variables"> for more information.
-The discussion of closures in L<perlref> may help you even though we
-did not use anonymous subroutines in this answer. See
-L<perlsub/"Persistent Private Variables"> for details.
-
-=head2 What's the difference between dynamic and lexical (static) scoping? Between local() and my()?
-
-C<local($x)> saves away the old value of the global variable C<$x>
-and assigns a new value for the duration of the subroutine I<which is
-visible in other functions called from that subroutine>. This is done
-at run-time, so is called dynamic scoping. local() always affects global
-variables, also called package variables or dynamic variables.
-
-C<my($x)> creates a new variable that is only visible in the current
-subroutine. This is done at compile-time, so it is called lexical or
-static scoping. my() always affects private variables, also called
-lexical variables or (improperly) static(ly scoped) variables.
-
-For instance:
-
- sub visible {
- print "var has value $var\n";
- }
-
- sub dynamic {
- local $var = 'local'; # new temporary value for the still-global
- visible(); # variable called $var
- }
-
- sub lexical {
- my $var = 'private'; # new private variable, $var
- visible(); # (invisible outside of sub scope)
- }
-
- $var = 'global';
-
- visible(); # prints global
- dynamic(); # prints local
- lexical(); # prints global
-
-Notice how at no point does the value "private" get printed. That's
-because $var only has that value within the block of the lexical()
-function, and it is hidden from the called subroutine.
-
-In summary, local() doesn't make what you think of as private, local
-variables. It gives a global variable a temporary value. my() is
-what you're looking for if you want private variables.
-
-See L<perlsub/"Private Variables via my()"> and
-L<perlsub/"Temporary Values via local()"> for excruciating details.
-
-=head2 How can I access a dynamic variable while a similarly named lexical is in scope?
-
-If you know your package, you can just mention it explicitly, as in
-$Some_Pack::var. Note that the notation $::var is B<not> the dynamic $var
-in the current package, but rather the one in the "main" package, as
-though you had written $main::var.
-
- use vars '$var';
- local $var = "global";
- my $var = "lexical";
-
- print "lexical is $var\n";
- print "global is $main::var\n";
-
-Alternatively you can use the compiler directive our() to bring a
-dynamic variable into the current lexical scope.
-
- require 5.006; # our() did not exist before 5.6
- use vars '$var';
-
- local $var = "global";
- my $var = "lexical";
-
- print "lexical is $var\n";
-
- {
- our $var;
- print "global is $var\n";
- }
-
-=head2 What's the difference between deep and shallow binding?
-
-In deep binding, lexical variables mentioned in anonymous subroutines
-are the same ones that were in scope when the subroutine was created.
-In shallow binding, they are whichever variables with the same names
-happen to be in scope when the subroutine is called. Perl always uses
-deep binding of lexical variables (i.e., those created with my()).
-However, dynamic variables (aka global, local, or package variables)
-are effectively shallowly bound. Consider this just one more reason
-not to use them. See the answer to L<"What's a closure?">.
-
-=head2 Why doesn't "my($foo) = E<lt>FILEE<gt>;" work right?
-
-C<my()> and C<local()> give list context to the right hand side
-of C<=>. The <FH> read operation, like so many of Perl's
-functions and operators, can tell which context it was called in and
-behaves appropriately. In general, the scalar() function can help.
-This function does nothing to the data itself (contrary to popular myth)
-but rather tells its argument to behave in whatever its scalar fashion is.
-If that function doesn't have a defined scalar behavior, this of course
-doesn't help you (such as with sort()).
-
-To enforce scalar context in this particular case, however, you need
-merely omit the parentheses:
-
- local($foo) = <FILE>; # WRONG
- local($foo) = scalar(<FILE>); # ok
- local $foo = <FILE>; # right
-
-You should probably be using lexical variables anyway, although the
-issue is the same here:
-
- my($foo) = <FILE>; # WRONG
- my $foo = <FILE>; # right
-
-=head2 How do I redefine a builtin function, operator, or method?
-
-Why do you want to do that? :-)
-
-If you want to override a predefined function, such as open(),
-then you'll have to import the new definition from a different
-module. See L<perlsub/"Overriding Built-in Functions">.
-
-If you want to overload a Perl operator, such as C<+> or C<**>,
-then you'll want to use the C<use overload> pragma, documented
-in L<overload>.
-
-If you're talking about obscuring method calls in parent classes,
-see L<perltoot/"Overridden Methods">.
-
-=head2 What's the difference between calling a function as &foo and foo()?
-
-(contributed by brian d foy)
-
-Calling a subroutine as C<&foo> with no trailing parentheses ignores
-the prototype of C<foo> and passes it the current value of the argument
-list, C<@_>. Here's an example; the C<bar> subroutine calls C<&foo>,
-which prints its arguments list:
-
- sub bar { &foo }
-
- sub foo { print "Args in foo are: @_\n" }
-
- bar( qw( a b c ) );
-
-When you call C<bar> with arguments, you see that C<foo> got the same C<@_>:
-
- Args in foo are: a b c
-
-Calling the subroutine with trailing parentheses, with or without arguments,
-does not use the current C<@_> and respects the subroutine prototype. Changing
-the example to put parentheses after the call to C<foo> changes the program:
-
- sub bar { &foo() }
-
- sub foo { print "Args in foo are: @_\n" }
-
- bar( qw( a b c ) );
-
-Now the output shows that C<foo> doesn't get the C<@_> from its caller.
-
- Args in foo are:
-
-The main use of the C<@_> pass-through feature is to write subroutines
-whose main job it is to call other subroutines for you. For further
-details, see L<perlsub>.
-
-=head2 How do I create a switch or case statement?
-
-In Perl 5.10, use the C<given-when> construct described in L<perlsyn>:
-
- use 5.010;
-
- given ( $string ) {
- when( 'Fred' ) { say "I found Fred!" }
- when( 'Barney' ) { say "I found Barney!" }
- when( /Bamm-?Bamm/ ) { say "I found Bamm-Bamm!" }
- default { say "I don't recognize the name!" }
- };
-
-If one wants to use pure Perl and to be compatible with Perl versions
-prior to 5.10, the general answer is to use C<if-elsif-else>:
-
- for ($variable_to_test) {
- if (/pat1/) { } # do something
- elsif (/pat2/) { } # do something else
- elsif (/pat3/) { } # do something else
- else { } # default
- }
-
-Here's a simple example of a switch based on pattern matching,
-lined up in a way to make it look more like a switch statement.
-We'll do a multiway conditional based on the type of reference stored
-in $whatchamacallit:
-
- SWITCH: for (ref $whatchamacallit) {
-
- /^$/ && die "not a reference";
-
- /SCALAR/ && do {
- print_scalar($$ref);
- last SWITCH;
- };
-
- /ARRAY/ && do {
- print_array(@$ref);
- last SWITCH;
- };
-
- /HASH/ && do {
- print_hash(%$ref);
- last SWITCH;
- };
-
- /CODE/ && do {
- warn "can't print function ref";
- last SWITCH;
- };
-
- # DEFAULT
-
- warn "User defined type skipped";
-
- }
-
-See L<perlsyn> for other examples in this style.
-
-Sometimes you should change the positions of the constant and the variable.
-For example, let's say you wanted to test which of many answers you were
-given, but in a case-insensitive way that also allows abbreviations.
-You can use the following technique if the strings all start with
-different characters or if you want to arrange the matches so that
-one takes precedence over another, as C<"SEND"> has precedence over
-C<"STOP"> here:
-
- chomp($answer = <>);
- if ("SEND" =~ /^\Q$answer/i) { print "Action is send\n" }
- elsif ("STOP" =~ /^\Q$answer/i) { print "Action is stop\n" }
- elsif ("ABORT" =~ /^\Q$answer/i) { print "Action is abort\n" }
- elsif ("LIST" =~ /^\Q$answer/i) { print "Action is list\n" }
- elsif ("EDIT" =~ /^\Q$answer/i) { print "Action is edit\n" }
-
-A totally different approach is to create a hash of function references.
-
- my %commands = (
- "happy" => \&joy,
- "sad", => \&sullen,
- "done" => sub { die "See ya!" },
- "mad" => \&angry,
- );
-
- print "How are you? ";
- chomp($string = <STDIN>);
- if ($commands{$string}) {
- $commands{$string}->();
- } else {
- print "No such command: $string\n";
- }
-
-Starting from Perl 5.8, a source filter module, C<Switch>, can also be
-used to get switch and case. Its use is now discouraged, because it's
-not fully compatible with the native switch of Perl 5.10, and because,
-as it's implemented as a source filter, it doesn't always work as intended
-when complex syntax is involved.
-
-=head2 How can I catch accesses to undefined variables, functions, or methods?
-
-The AUTOLOAD method, discussed in L<perlsub/"Autoloading"> and
-L<perltoot/"AUTOLOAD: Proxy Methods">, lets you capture calls to
-undefined functions and methods.
-
-When it comes to undefined variables that would trigger a warning
-under C<use warnings>, you can promote the warning to an error.
-
- use warnings FATAL => qw(uninitialized);
-
-=head2 Why can't a method included in this same file be found?
-
-Some possible reasons: your inheritance is getting confused, you've
-misspelled the method name, or the object is of the wrong type. Check
-out L<perltoot> for details about any of the above cases. You may
-also use C<print ref($object)> to find out the class C<$object> was
-blessed into.
-
-Another possible reason for problems is that you've used the
-indirect object syntax (eg, C<find Guru "Samy">) on a class name
-before Perl has seen that such a package exists. It's wisest to make
-sure your packages are all defined before you start using them, which
-will be taken care of if you use the C<use> statement instead of
-C<require>. If not, make sure to use arrow notation (eg.,
-C<< Guru->find("Samy") >>) instead. Object notation is explained in
-L<perlobj>.
-
-Make sure to read about creating modules in L<perlmod> and
-the perils of indirect objects in L<perlobj/"Method Invocation">.
-
-=head2 How can I find out my current or calling package?
-
-(contributed by brian d foy)
-
-To find the package you are currently in, use the special literal
-C<__PACKAGE__>, as documented in L<perldata>. You can only use the
-special literals as separate tokens, so you can't interpolate them
-into strings like you can with variables:
-
- my $current_package = __PACKAGE__;
- print "I am in package $current_package\n";
-
-If you want to find the package calling your code, perhaps to give better
-diagnostics as C<Carp> does, use the C<caller> built-in:
-
- sub foo {
- my @args = ...;
- my( $package, $filename, $line ) = caller;
-
- print "I was called from package $package\n";
- );
-
-By default, your program starts in package C<main>, so you will
-always be in some package.
-
-This is different from finding out the package an object is blessed
-into, which might not be the current package. For that, use C<blessed>
-from C<Scalar::Util>, part of the Standard Library since Perl 5.8:
-
- use Scalar::Util qw(blessed);
- my $object_package = blessed( $object );
-
-Most of the time, you shouldn't care what package an object is blessed
-into, however, as long as it claims to inherit from that class:
-
- my $is_right_class = eval { $object->isa( $package ) }; # true or false
-
-And, with Perl 5.10 and later, you don't have to check for an
-inheritance to see if the object can handle a role. For that, you can
-use C<DOES>, which comes from C<UNIVERSAL>:
-
- my $class_does_it = eval { $object->DOES( $role ) }; # true or false
-
-You can safely replace C<isa> with C<DOES> (although the converse is not true).
-
-=head2 How can I comment out a large block of Perl code?
-
-(contributed by brian d foy)
-
-The quick-and-dirty way to comment out more than one line of Perl is
-to surround those lines with Pod directives. You have to put these
-directives at the beginning of the line and somewhere where Perl
-expects a new statement (so not in the middle of statements like the #
-comments). You end the comment with C<=cut>, ending the Pod section:
-
- =pod
-
- my $object = NotGonnaHappen->new();
-
- ignored_sub();
-
- $wont_be_assigned = 37;
-
- =cut
-
-The quick-and-dirty method only works well when you don't plan to
-leave the commented code in the source. If a Pod parser comes along,
-you're multiline comment is going to show up in the Pod translation.
-A better way hides it from Pod parsers as well.
-
-The C<=begin> directive can mark a section for a particular purpose.
-If the Pod parser doesn't want to handle it, it just ignores it. Label
-the comments with C<comment>. End the comment using C<=end> with the
-same label. You still need the C<=cut> to go back to Perl code from
-the Pod comment:
-
- =begin comment
-
- my $object = NotGonnaHappen->new();
-
- ignored_sub();
-
- $wont_be_assigned = 37;
-
- =end comment
-
- =cut
-
-For more information on Pod, check out L<perlpod> and L<perlpodspec>.
-
-=head2 How do I clear a package?
-
-Use this code, provided by Mark-Jason Dominus:
-
- sub scrub_package {
- no strict 'refs';
- my $pack = shift;
- die "Shouldn't delete main package"
- if $pack eq "" || $pack eq "main";
- my $stash = *{$pack . '::'}{HASH};
- my $name;
- foreach $name (keys %$stash) {
- my $fullname = $pack . '::' . $name;
- # Get rid of everything with that name.
- undef $$fullname;
- undef @$fullname;
- undef %$fullname;
- undef &$fullname;
- undef *$fullname;
- }
- }
-
-Or, if you're using a recent release of Perl, you can
-just use the Symbol::delete_package() function instead.
-
-=head2 How can I use a variable as a variable name?
-
-Beginners often think they want to have a variable contain the name
-of a variable.
-
- $fred = 23;
- $varname = "fred";
- ++$$varname; # $fred now 24
-
-This works I<sometimes>, but it is a very bad idea for two reasons.
-
-The first reason is that this technique I<only works on global
-variables>. That means that if $fred is a lexical variable created
-with my() in the above example, the code wouldn't work at all: you'd
-accidentally access the global and skip right over the private lexical
-altogether. Global variables are bad because they can easily collide
-accidentally and in general make for non-scalable and confusing code.
-
-Symbolic references are forbidden under the C<use strict> pragma.
-They are not true references and consequently are not reference-counted
-or garbage-collected.
-
-The other reason why using a variable to hold the name of another
-variable is a bad idea is that the question often stems from a lack of
-understanding of Perl data structures, particularly hashes. By using
-symbolic references, you are just using the package's symbol-table hash
-(like C<%main::>) instead of a user-defined hash. The solution is to
-use your own hash or a real reference instead.
-
- $USER_VARS{"fred"} = 23;
- $varname = "fred";
- $USER_VARS{$varname}++; # not $$varname++
-
-There we're using the %USER_VARS hash instead of symbolic references.
-Sometimes this comes up in reading strings from the user with variable
-references and wanting to expand them to the values of your perl
-program's variables. This is also a bad idea because it conflates the
-program-addressable namespace and the user-addressable one. Instead of
-reading a string and expanding it to the actual contents of your program's
-own variables:
-
- $str = 'this has a $fred and $barney in it';
- $str =~ s/(\$\w+)/$1/eeg; # need double eval
-
-it would be better to keep a hash around like %USER_VARS and have
-variable references actually refer to entries in that hash:
-
- $str =~ s/\$(\w+)/$USER_VARS{$1}/g; # no /e here at all
-
-That's faster, cleaner, and safer than the previous approach. Of course,
-you don't need to use a dollar sign. You could use your own scheme to
-make it less confusing, like bracketed percent symbols, etc.
-
- $str = 'this has a %fred% and %barney% in it';
- $str =~ s/%(\w+)%/$USER_VARS{$1}/g; # no /e here at all
-
-Another reason that folks sometimes think they want a variable to
-contain the name of a variable is that they don't know how to build
-proper data structures using hashes. For example, let's say they
-wanted two hashes in their program: %fred and %barney, and that they
-wanted to use another scalar variable to refer to those by name.
-
- $name = "fred";
- $$name{WIFE} = "wilma"; # set %fred
-
- $name = "barney";
- $$name{WIFE} = "betty"; # set %barney
-
-This is still a symbolic reference, and is still saddled with the
-problems enumerated above. It would be far better to write:
-
- $folks{"fred"}{WIFE} = "wilma";
- $folks{"barney"}{WIFE} = "betty";
-
-And just use a multilevel hash to start with.
-
-The only times that you absolutely I<must> use symbolic references are
-when you really must refer to the symbol table. This may be because it's
-something that one can't take a real reference to, such as a format name.
-Doing so may also be important for method calls, since these always go
-through the symbol table for resolution.
-
-In those cases, you would turn off C<strict 'refs'> temporarily so you
-can play around with the symbol table. For example:
-
- @colors = qw(red blue green yellow orange purple violet);
- for my $name (@colors) {
- no strict 'refs'; # renege for the block
- *$name = sub { "<FONT COLOR='$name'>@_</FONT>" };
- }
-
-All those functions (red(), blue(), green(), etc.) appear to be separate,
-but the real code in the closure actually was compiled only once.
-
-So, sometimes you might want to use symbolic references to manipulate
-the symbol table directly. This doesn't matter for formats, handles, and
-subroutines, because they are always global--you can't use my() on them.
-For scalars, arrays, and hashes, though--and usually for subroutines--
-you probably only want to use hard references.
-
-=head2 What does "bad interpreter" mean?
-
-(contributed by brian d foy)
-
-The "bad interpreter" message comes from the shell, not perl. The
-actual message may vary depending on your platform, shell, and locale
-settings.
-
-If you see "bad interpreter - no such file or directory", the first
-line in your perl script (the "shebang" line) does not contain the
-right path to perl (or any other program capable of running scripts).
-Sometimes this happens when you move the script from one machine to
-another and each machine has a different path to perl--/usr/bin/perl
-versus /usr/local/bin/perl for instance. It may also indicate
-that the source machine has CRLF line terminators and the
-destination machine has LF only: the shell tries to find
-/usr/bin/perl<CR>, but can't.
-
-If you see "bad interpreter: Permission denied", you need to make your
-script executable.
-
-In either case, you should still be able to run the scripts with perl
-explicitly:
-
- % perl script.pl
-
-If you get a message like "perl: command not found", perl is not in
-your PATH, which might also mean that the location of perl is not
-where you expect it so you need to adjust your shebang line.
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
-other authors as noted. All rights reserved.
-
-This documentation is free; you can redistribute it and/or modify it
-under the same terms as Perl itself.
-
-Irrespective of its distribution, all code examples in this file
-are hereby placed into the public domain. You are permitted and
-encouraged to use this code in your own programs for fun
-or for profit as you see fit. A simple comment in the code giving
-credit would be courteous but is not required.
-
Deleted: trunk/contrib/perl/pod/perlfaq8.pod
===================================================================
--- trunk/contrib/perl/pod/perlfaq8.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlfaq8.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1416 +0,0 @@
-=head1 NAME
-
-perlfaq8 - System Interaction
-
-=head1 DESCRIPTION
-
-This section of the Perl FAQ covers questions involving operating
-system interaction. Topics include interprocess communication (IPC),
-control over the user-interface (keyboard, screen and pointing
-devices), and most anything else not related to data manipulation.
-
-Read the FAQs and documentation specific to the port of perl to your
-operating system (eg, L<perlvms>, L<perlplan9>, ...). These should
-contain more detailed information on the vagaries of your perl.
-
-=head2 How do I find out which operating system I'm running under?
-
-The C<$^O> variable (C<$OSNAME> if you use C<English>) contains an
-indication of the name of the operating system (not its release
-number) that your perl binary was built for.
-
-=head2 How come exec() doesn't return?
-X<exec> X<system> X<fork> X<open> X<pipe>
-
-(contributed by brian d foy)
-
-The C<exec> function's job is to turn your process into another
-command and never to return. If that's not what you want to do, don't
-use C<exec>. :)
-
-If you want to run an external command and still keep your Perl process
-going, look at a piped C<open>, C<fork>, or C<system>.
-
-=head2 How do I do fancy stuff with the keyboard/screen/mouse?
-
-How you access/control keyboards, screens, and pointing devices
-("mice") is system-dependent. Try the following modules:
-
-=over 4
-
-=item Keyboard
-
- Term::Cap Standard perl distribution
- Term::ReadKey CPAN
- Term::ReadLine::Gnu CPAN
- Term::ReadLine::Perl CPAN
- Term::Screen CPAN
-
-=item Screen
-
- Term::Cap Standard perl distribution
- Curses CPAN
- Term::ANSIColor CPAN
-
-=item Mouse
-
- Tk CPAN
-
-=back
-
-Some of these specific cases are shown as examples in other answers
-in this section of the perlfaq.
-
-=head2 How do I print something out in color?
-
-In general, you don't, because you don't know whether
-the recipient has a color-aware display device. If you
-know that they have an ANSI terminal that understands
-color, you can use the C<Term::ANSIColor> module from CPAN:
-
- use Term::ANSIColor;
- print color("red"), "Stop!\n", color("reset");
- print color("green"), "Go!\n", color("reset");
-
-Or like this:
-
- use Term::ANSIColor qw(:constants);
- print RED, "Stop!\n", RESET;
- print GREEN, "Go!\n", RESET;
-
-=head2 How do I read just one key without waiting for a return key?
-
-Controlling input buffering is a remarkably system-dependent matter.
-On many systems, you can just use the B<stty> command as shown in
-L<perlfunc/getc>, but as you see, that's already getting you into
-portability snags.
-
- open(TTY, "+</dev/tty") or die "no tty: $!";
- system "stty cbreak </dev/tty >/dev/tty 2>&1";
- $key = getc(TTY); # perhaps this works
- # OR ELSE
- sysread(TTY, $key, 1); # probably this does
- system "stty -cbreak </dev/tty >/dev/tty 2>&1";
-
-The C<Term::ReadKey> module from CPAN offers an easy-to-use interface that
-should be more efficient than shelling out to B<stty> for each key.
-It even includes limited support for Windows.
-
- use Term::ReadKey;
- ReadMode('cbreak');
- $key = ReadKey(0);
- ReadMode('normal');
-
-However, using the code requires that you have a working C compiler
-and can use it to build and install a CPAN module. Here's a solution
-using the standard C<POSIX> module, which is already on your system
-(assuming your system supports POSIX).
-
- use HotKey;
- $key = readkey();
-
-And here's the C<HotKey> module, which hides the somewhat mystifying calls
-to manipulate the POSIX termios structures.
-
- # HotKey.pm
- package HotKey;
-
- @ISA = qw(Exporter);
- @EXPORT = qw(cbreak cooked readkey);
-
- use strict;
- use POSIX qw(:termios_h);
- my ($term, $oterm, $echo, $noecho, $fd_stdin);
-
- $fd_stdin = fileno(STDIN);
- $term = POSIX::Termios->new();
- $term->getattr($fd_stdin);
- $oterm = $term->getlflag();
-
- $echo = ECHO | ECHOK | ICANON;
- $noecho = $oterm & ~$echo;
-
- sub cbreak {
- $term->setlflag($noecho); # ok, so i don't want echo either
- $term->setcc(VTIME, 1);
- $term->setattr($fd_stdin, TCSANOW);
- }
-
- sub cooked {
- $term->setlflag($oterm);
- $term->setcc(VTIME, 0);
- $term->setattr($fd_stdin, TCSANOW);
- }
-
- sub readkey {
- my $key = '';
- cbreak();
- sysread(STDIN, $key, 1);
- cooked();
- return $key;
- }
-
- END { cooked() }
-
- 1;
-
-=head2 How do I check whether input is ready on the keyboard?
-
-The easiest way to do this is to read a key in nonblocking mode with the
-C<Term::ReadKey> module from CPAN, passing it an argument of -1 to indicate
-not to block:
-
- use Term::ReadKey;
-
- ReadMode('cbreak');
-
- if (defined ($char = ReadKey(-1)) ) {
- # input was waiting and it was $char
- } else {
- # no input was waiting
- }
-
- ReadMode('normal'); # restore normal tty settings
-
-=head2 How do I clear the screen?
-
-(contributed by brian d foy)
-
-To clear the screen, you just have to print the special sequence
-that tells the terminal to clear the screen. Once you have that
-sequence, output it when you want to clear the screen.
-
-You can use the C<Term::ANSIScreen> module to get the special
-sequence. Import the C<cls> function (or the C<:screen> tag):
-
- use Term::ANSIScreen qw(cls);
- my $clear_screen = cls();
-
- print $clear_screen;
-
-The C<Term::Cap> module can also get the special sequence if you want
-to deal with the low-level details of terminal control. The C<Tputs>
-method returns the string for the given capability:
-
- use Term::Cap;
-
- $terminal = Term::Cap->Tgetent( { OSPEED => 9600 } );
- $clear_string = $terminal->Tputs('cl');
-
- print $clear_screen;
-
-On Windows, you can use the C<Win32::Console> module. After creating
-an object for the output filehandle you want to affect, call the
-C<Cls> method:
-
- Win32::Console;
-
- $OUT = Win32::Console->new(STD_OUTPUT_HANDLE);
- my $clear_string = $OUT->Cls;
-
- print $clear_screen;
-
-If you have a command-line program that does the job, you can call
-it in backticks to capture whatever it outputs so you can use it
-later:
-
- $clear_string = `clear`;
-
- print $clear_string;
-
-=head2 How do I get the screen size?
-
-If you have C<Term::ReadKey> module installed from CPAN,
-you can use it to fetch the width and height in characters
-and in pixels:
-
- use Term::ReadKey;
- ($wchar, $hchar, $wpixels, $hpixels) = GetTerminalSize();
-
-This is more portable than the raw C<ioctl>, but not as
-illustrative:
-
- require 'sys/ioctl.ph';
- die "no TIOCGWINSZ " unless defined &TIOCGWINSZ;
- open(TTY, "+</dev/tty") or die "No tty: $!";
- unless (ioctl(TTY, &TIOCGWINSZ, $winsize='')) {
- die sprintf "$0: ioctl TIOCGWINSZ (%08x: $!)\n", &TIOCGWINSZ;
- }
- ($row, $col, $xpixel, $ypixel) = unpack('S4', $winsize);
- print "(row,col) = ($row,$col)";
- print " (xpixel,ypixel) = ($xpixel,$ypixel)" if $xpixel || $ypixel;
- print "\n";
-
-=head2 How do I ask the user for a password?
-
-(This question has nothing to do with the web. See a different
-FAQ for that.)
-
-There's an example of this in L<perlfunc/crypt>). First, you put the
-terminal into "no echo" mode, then just read the password normally.
-You may do this with an old-style C<ioctl()> function, POSIX terminal
-control (see L<POSIX> or its documentation the Camel Book), or a call
-to the B<stty> program, with varying degrees of portability.
-
-You can also do this for most systems using the C<Term::ReadKey> module
-from CPAN, which is easier to use and in theory more portable.
-
- use Term::ReadKey;
-
- ReadMode('noecho');
- $password = ReadLine(0);
-
-=head2 How do I read and write the serial port?
-
-This depends on which operating system your program is running on. In
-the case of Unix, the serial ports will be accessible through files in
-/dev; on other systems, device names will doubtless differ.
-Several problem areas common to all device interaction are the
-following:
-
-=over 4
-
-=item lockfiles
-
-Your system may use lockfiles to control multiple access. Make sure
-you follow the correct protocol. Unpredictable behavior can result
-from multiple processes reading from one device.
-
-=item open mode
-
-If you expect to use both read and write operations on the device,
-you'll have to open it for update (see L<perlfunc/"open"> for
-details). You may wish to open it without running the risk of
-blocking by using C<sysopen()> and C<O_RDWR|O_NDELAY|O_NOCTTY> from the
-C<Fcntl> module (part of the standard perl distribution). See
-L<perlfunc/"sysopen"> for more on this approach.
-
-=item end of line
-
-Some devices will be expecting a "\r" at the end of each line rather
-than a "\n". In some ports of perl, "\r" and "\n" are different from
-their usual (Unix) ASCII values of "\015" and "\012". You may have to
-give the numeric values you want directly, using octal ("\015"), hex
-("0x0D"), or as a control-character specification ("\cM").
-
- print DEV "atv1\012"; # wrong, for some devices
- print DEV "atv1\015"; # right, for some devices
-
-Even though with normal text files a "\n" will do the trick, there is
-still no unified scheme for terminating a line that is portable
-between Unix, DOS/Win, and Macintosh, except to terminate I<ALL> line
-ends with "\015\012", and strip what you don't need from the output.
-This applies especially to socket I/O and autoflushing, discussed
-next.
-
-=item flushing output
-
-If you expect characters to get to your device when you C<print()> them,
-you'll want to autoflush that filehandle. You can use C<select()>
-and the C<$|> variable to control autoflushing (see L<perlvar/$E<verbar>>
-and L<perlfunc/select>, or L<perlfaq5>, "How do I flush/unbuffer an
-output filehandle? Why must I do this?"):
-
- $oldh = select(DEV);
- $| = 1;
- select($oldh);
-
-You'll also see code that does this without a temporary variable, as in
-
- select((select(DEV), $| = 1)[0]);
-
-Or if you don't mind pulling in a few thousand lines
-of code just because you're afraid of a little C<$|> variable:
-
- use IO::Handle;
- DEV->autoflush(1);
-
-As mentioned in the previous item, this still doesn't work when using
-socket I/O between Unix and Macintosh. You'll need to hard code your
-line terminators, in that case.
-
-=item non-blocking input
-
-If you are doing a blocking C<read()> or C<sysread()>, you'll have to
-arrange for an alarm handler to provide a timeout (see
-L<perlfunc/alarm>). If you have a non-blocking open, you'll likely
-have a non-blocking read, which means you may have to use a 4-arg
-C<select()> to determine whether I/O is ready on that device (see
-L<perlfunc/"select">.
-
-=back
-
-While trying to read from his caller-id box, the notorious Jamie
-Zawinski C<< <jwz at netscape.com> >>, after much gnashing of teeth and
-fighting with C<sysread>, C<sysopen>, POSIX's C<tcgetattr> business,
-and various other functions that go bump in the night, finally came up
-with this:
-
- sub open_modem {
- use IPC::Open2;
- my $stty = `/bin/stty -g`;
- open2( \*MODEM_IN, \*MODEM_OUT, "cu -l$modem_device -s2400 2>&1");
- # starting cu hoses /dev/tty's stty settings, even when it has
- # been opened on a pipe...
- system("/bin/stty $stty");
- $_ = <MODEM_IN>;
- chomp;
- if ( !m/^Connected/ ) {
- print STDERR "$0: cu printed `$_' instead of `Connected'\n";
- }
- }
-
-=head2 How do I decode encrypted password files?
-
-You spend lots and lots of money on dedicated hardware, but this is
-bound to get you talked about.
-
-Seriously, you can't if they are Unix password files--the Unix
-password system employs one-way encryption. It's more like hashing
-than encryption. The best you can do is check whether something else
-hashes to the same string. You can't turn a hash back into the
-original string. Programs like Crack can forcibly (and intelligently)
-try to guess passwords, but don't (can't) guarantee quick success.
-
-If you're worried about users selecting bad passwords, you should
-proactively check when they try to change their password (by modifying
-passwd(1), for example).
-
-=head2 How do I start a process in the background?
-
-(contributed by brian d foy)
-
-There's not a single way to run code in the background so you don't
-have to wait for it to finish before your program moves on to other
-tasks. Process management depends on your particular operating system,
-and many of the techniques are in L<perlipc>.
-
-Several CPAN modules may be able to help, including C<IPC::Open2> or
-C<IPC::Open3>, C<IPC::Run>, C<Parallel::Jobs>,
-C<Parallel::ForkManager>, C<POE>, C<Proc::Background>, and
-C<Win32::Process>. There are many other modules you might use, so
-check those namespaces for other options too.
-
-If you are on a Unix-like system, you might be able to get away with a
-system call where you put an C<&> on the end of the command:
-
- system("cmd &")
-
-You can also try using C<fork>, as described in L<perlfunc> (although
-this is the same thing that many of the modules will do for you).
-
-=over 4
-
-=item STDIN, STDOUT, and STDERR are shared
-
-Both the main process and the backgrounded one (the "child" process)
-share the same STDIN, STDOUT and STDERR filehandles. If both try to
-access them at once, strange things can happen. You may want to close
-or reopen these for the child. You can get around this with
-C<open>ing a pipe (see L<perlfunc/"open">) but on some systems this
-means that the child process cannot outlive the parent.
-
-=item Signals
-
-You'll have to catch the SIGCHLD signal, and possibly SIGPIPE too.
-SIGCHLD is sent when the backgrounded process finishes. SIGPIPE is
-sent when you write to a filehandle whose child process has closed (an
-untrapped SIGPIPE can cause your program to silently die). This is
-not an issue with C<system("cmd&")>.
-
-=item Zombies
-
-You have to be prepared to "reap" the child process when it finishes.
-
- $SIG{CHLD} = sub { wait };
-
- $SIG{CHLD} = 'IGNORE';
-
-You can also use a double fork. You immediately C<wait()> for your
-first child, and the init daemon will C<wait()> for your grandchild once
-it exits.
-
- unless ($pid = fork) {
- unless (fork) {
- exec "what you really wanna do";
- die "exec failed!";
- }
- exit 0;
- }
- waitpid($pid, 0);
-
-See L<perlipc/"Signals"> for other examples of code to do this.
-Zombies are not an issue with C<system("prog &")>.
-
-=back
-
-=head2 How do I trap control characters/signals?
-
-You don't actually "trap" a control character. Instead, that character
-generates a signal which is sent to your terminal's currently
-foregrounded process group, which you then trap in your process.
-Signals are documented in L<perlipc/"Signals"> and the
-section on "Signals" in the Camel.
-
-You can set the values of the C<%SIG> hash to be the functions you want
-to handle the signal. After perl catches the signal, it looks in C<%SIG>
-for a key with the same name as the signal, then calls the subroutine
-value for that key.
-
- # as an anonymous subroutine
-
- $SIG{INT} = sub { syswrite(STDERR, "ouch\n", 5 ) };
-
- # or a reference to a function
-
- $SIG{INT} = \&ouch;
-
- # or the name of the function as a string
-
- $SIG{INT} = "ouch";
-
-Perl versions before 5.8 had in its C source code signal handlers which
-would catch the signal and possibly run a Perl function that you had set
-in C<%SIG>. This violated the rules of signal handling at that level
-causing perl to dump core. Since version 5.8.0, perl looks at C<%SIG>
-B<after> the signal has been caught, rather than while it is being caught.
-Previous versions of this answer were incorrect.
-
-=head2 How do I modify the shadow password file on a Unix system?
-
-If perl was installed correctly and your shadow library was written
-properly, the C<getpw*()> functions described in L<perlfunc> should in
-theory provide (read-only) access to entries in the shadow password
-file. To change the file, make a new shadow password file (the format
-varies from system to system--see L<passwd> for specifics) and use
-C<pwd_mkdb(8)> to install it (see L<pwd_mkdb> for more details).
-
-=head2 How do I set the time and date?
-
-Assuming you're running under sufficient permissions, you should be
-able to set the system-wide date and time by running the C<date(1)>
-program. (There is no way to set the time and date on a per-process
-basis.) This mechanism will work for Unix, MS-DOS, Windows, and NT;
-the VMS equivalent is C<set time>.
-
-However, if all you want to do is change your time zone, you can
-probably get away with setting an environment variable:
-
- $ENV{TZ} = "MST7MDT"; # Unixish
- $ENV{'SYS$TIMEZONE_DIFFERENTIAL'}="-5" # vms
- system "trn comp.lang.perl.misc";
-
-=head2 How can I sleep() or alarm() for under a second?
-X<Time::HiRes> X<BSD::Itimer> X<sleep> X<select>
-
-If you want finer granularity than the 1 second that the C<sleep()>
-function provides, the easiest way is to use the C<select()> function as
-documented in L<perlfunc/"select">. Try the C<Time::HiRes> and
-the C<BSD::Itimer> modules (available from CPAN, and starting from
-Perl 5.8 C<Time::HiRes> is part of the standard distribution).
-
-=head2 How can I measure time under a second?
-X<Time::HiRes> X<BSD::Itimer> X<sleep> X<select>
-
-(contributed by brian d foy)
-
-The C<Time::HiRes> module (part of the standard distribution as of
-Perl 5.8) measures time with the C<gettimeofday()> system call, which
-returns the time in microseconds since the epoch. If you can't install
-C<Time::HiRes> for older Perls and you are on a Unixish system, you
-may be able to call C<gettimeofday(2)> directly. See
-L<perlfunc/syscall>.
-
-=head2 How can I do an atexit() or setjmp()/longjmp()? (Exception handling)
-
-You can use the C<END> block to simulate C<atexit()>. Each package's
-C<END> block is called when the program or thread ends. See the L<perlmod>
-manpage for more details about C<END> blocks.
-
-For example, you can use this to make sure your filter program managed
-to finish its output without filling up the disk:
-
- END {
- close(STDOUT) || die "stdout close failed: $!";
- }
-
-The C<END> block isn't called when untrapped signals kill the program,
-though, so if you use C<END> blocks you should also use
-
- use sigtrap qw(die normal-signals);
-
-Perl's exception-handling mechanism is its C<eval()> operator. You
-can use C<eval()> as C<setjmp> and C<die()> as C<longjmp>. For
-details of this, see the section on signals, especially the time-out
-handler for a blocking C<flock()> in L<perlipc/"Signals"> or the
-section on "Signals" in I<Programming Perl>.
-
-If exception handling is all you're interested in, use one of the
-many CPAN modules that handle exceptions, such as C<Try::Tiny>.
-
-If you want the C<atexit()> syntax (and an C<rmexit()> as well), try the
-C<AtExit> module available from CPAN.
-
-=head2 Why doesn't my sockets program work under System V (Solaris)? What does the error message "Protocol not supported" mean?
-
-Some Sys-V based systems, notably Solaris 2.X, redefined some of the
-standard socket constants. Since these were constant across all
-architectures, they were often hardwired into perl code. The proper
-way to deal with this is to "use Socket" to get the correct values.
-
-Note that even though SunOS and Solaris are binary compatible, these
-values are different. Go figure.
-
-=head2 How can I call my system's unique C functions from Perl?
-
-In most cases, you write an external module to do it--see the answer
-to "Where can I learn about linking C with Perl? [h2xs, xsubpp]".
-However, if the function is a system call, and your system supports
-C<syscall()>, you can use the C<syscall> function (documented in
-L<perlfunc>).
-
-Remember to check the modules that came with your distribution, and
-CPAN as well--someone may already have written a module to do it. On
-Windows, try C<Win32::API>. On Macs, try C<Mac::Carbon>. If no module
-has an interface to the C function, you can inline a bit of C in your
-Perl source with C<Inline::C>.
-
-=head2 Where do I get the include files to do ioctl() or syscall()?
-
-Historically, these would be generated by the C<h2ph> tool, part of the
-standard perl distribution. This program converts C<cpp(1)> directives
-in C header files to files containing subroutine definitions, like
-C<&SYS_getitimer>, which you can use as arguments to your functions.
-It doesn't work perfectly, but it usually gets most of the job done.
-Simple files like F<errno.h>, F<syscall.h>, and F<socket.h> were fine,
-but the hard ones like F<ioctl.h> nearly always need to be hand-edited.
-Here's how to install the *.ph files:
-
- 1. become super-user
- 2. cd /usr/include
- 3. h2ph *.h */*.h
-
-If your system supports dynamic loading, for reasons of portability and
-sanity you probably ought to use C<h2xs> (also part of the standard perl
-distribution). This tool converts C header files to Perl extensions.
-See L<perlxstut> for how to get started with C<h2xs>.
-
-If your system doesn't support dynamic loading, you still probably
-ought to use C<h2xs>. See L<perlxstut> and L<ExtUtils::MakeMaker> for
-more information (in brief, just use B<make perl> instead of a plain
-B<make> to rebuild perl with a new static extension).
-
-=head2 Why do setuid perl scripts complain about kernel problems?
-
-Some operating systems have bugs in the kernel that make setuid
-scripts inherently insecure. Perl gives you a number of options
-(described in L<perlsec>) to work around such systems.
-
-=head2 How can I open a pipe both to and from a command?
-
-The C<IPC::Open2> module (part of the standard perl distribution) is
-an easy-to-use approach that internally uses C<pipe()>, C<fork()>, and
-C<exec()> to do the job. Make sure you read the deadlock warnings in
-its documentation, though (see L<IPC::Open2>). See
-L<perlipc/"Bidirectional Communication with Another Process"> and
-L<perlipc/"Bidirectional Communication with Yourself">
-
-You may also use the C<IPC::Open3> module (part of the standard perl
-distribution), but be warned that it has a different order of
-arguments from C<IPC::Open2> (see L<IPC::Open3>).
-
-=head2 Why can't I get the output of a command with system()?
-
-You're confusing the purpose of C<system()> and backticks (``). C<system()>
-runs a command and returns exit status information (as a 16 bit value:
-the low 7 bits are the signal the process died from, if any, and
-the high 8 bits are the actual exit value). Backticks (``) run a
-command and return what it sent to STDOUT.
-
- $exit_status = system("mail-users");
- $output_string = `ls`;
-
-=head2 How can I capture STDERR from an external command?
-
-There are three basic ways of running external commands:
-
- system $cmd; # using system()
- $output = `$cmd`; # using backticks (``)
- open (PIPE, "cmd |"); # using open()
-
-With C<system()>, both STDOUT and STDERR will go the same place as the
-script's STDOUT and STDERR, unless the C<system()> command redirects them.
-Backticks and C<open()> read B<only> the STDOUT of your command.
-
-You can also use the C<open3()> function from C<IPC::Open3>. Benjamin
-Goldberg provides some sample code:
-
-To capture a program's STDOUT, but discard its STDERR:
-
- use IPC::Open3;
- use File::Spec;
- use Symbol qw(gensym);
- open(NULL, ">", File::Spec->devnull);
- my $pid = open3(gensym, \*PH, ">&NULL", "cmd");
- while( <PH> ) { }
- waitpid($pid, 0);
-
-To capture a program's STDERR, but discard its STDOUT:
-
- use IPC::Open3;
- use File::Spec;
- use Symbol qw(gensym);
- open(NULL, ">", File::Spec->devnull);
- my $pid = open3(gensym, ">&NULL", \*PH, "cmd");
- while( <PH> ) { }
- waitpid($pid, 0);
-
-To capture a program's STDERR, and let its STDOUT go to our own STDERR:
-
- use IPC::Open3;
- use Symbol qw(gensym);
- my $pid = open3(gensym, ">&STDERR", \*PH, "cmd");
- while( <PH> ) { }
- waitpid($pid, 0);
-
-To read both a command's STDOUT and its STDERR separately, you can
-redirect them to temp files, let the command run, then read the temp
-files:
-
- use IPC::Open3;
- use Symbol qw(gensym);
- use IO::File;
- local *CATCHOUT = IO::File->new_tmpfile;
- local *CATCHERR = IO::File->new_tmpfile;
- my $pid = open3(gensym, ">&CATCHOUT", ">&CATCHERR", "cmd");
- waitpid($pid, 0);
- seek $_, 0, 0 for \*CATCHOUT, \*CATCHERR;
- while( <CATCHOUT> ) {}
- while( <CATCHERR> ) {}
-
-But there's no real need for B<both> to be tempfiles... the following
-should work just as well, without deadlocking:
-
- use IPC::Open3;
- use Symbol qw(gensym);
- use IO::File;
- local *CATCHERR = IO::File->new_tmpfile;
- my $pid = open3(gensym, \*CATCHOUT, ">&CATCHERR", "cmd");
- while( <CATCHOUT> ) {}
- waitpid($pid, 0);
- seek CATCHERR, 0, 0;
- while( <CATCHERR> ) {}
-
-And it'll be faster, too, since we can begin processing the program's
-stdout immediately, rather than waiting for the program to finish.
-
-With any of these, you can change file descriptors before the call:
-
- open(STDOUT, ">logfile");
- system("ls");
-
-or you can use Bourne shell file-descriptor redirection:
-
- $output = `$cmd 2>some_file`;
- open (PIPE, "cmd 2>some_file |");
-
-You can also use file-descriptor redirection to make STDERR a
-duplicate of STDOUT:
-
- $output = `$cmd 2>&1`;
- open (PIPE, "cmd 2>&1 |");
-
-Note that you I<cannot> simply open STDERR to be a dup of STDOUT
-in your Perl program and avoid calling the shell to do the redirection.
-This doesn't work:
-
- open(STDERR, ">&STDOUT");
- $alloutput = `cmd args`; # stderr still escapes
-
-This fails because the C<open()> makes STDERR go to where STDOUT was
-going at the time of the C<open()>. The backticks then make STDOUT go to
-a string, but don't change STDERR (which still goes to the old
-STDOUT).
-
-Note that you I<must> use Bourne shell (C<sh(1)>) redirection syntax in
-backticks, not C<csh(1)>! Details on why Perl's C<system()> and backtick
-and pipe opens all use the Bourne shell are in the
-F<versus/csh.whynot> article in the "Far More Than You Ever Wanted To
-Know" collection in http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz . To
-capture a command's STDERR and STDOUT together:
-
- $output = `cmd 2>&1`; # either with backticks
- $pid = open(PH, "cmd 2>&1 |"); # or with an open pipe
- while (<PH>) { } # plus a read
-
-To capture a command's STDOUT but discard its STDERR:
-
- $output = `cmd 2>/dev/null`; # either with backticks
- $pid = open(PH, "cmd 2>/dev/null |"); # or with an open pipe
- while (<PH>) { } # plus a read
-
-To capture a command's STDERR but discard its STDOUT:
-
- $output = `cmd 2>&1 1>/dev/null`; # either with backticks
- $pid = open(PH, "cmd 2>&1 1>/dev/null |"); # or with an open pipe
- while (<PH>) { } # plus a read
-
-To exchange a command's STDOUT and STDERR in order to capture the STDERR
-but leave its STDOUT to come out our old STDERR:
-
- $output = `cmd 3>&1 1>&2 2>&3 3>&-`; # either with backticks
- $pid = open(PH, "cmd 3>&1 1>&2 2>&3 3>&-|");# or with an open pipe
- while (<PH>) { } # plus a read
-
-To read both a command's STDOUT and its STDERR separately, it's easiest
-to redirect them separately to files, and then read from those files
-when the program is done:
-
- system("program args 1>program.stdout 2>program.stderr");
-
-Ordering is important in all these examples. That's because the shell
-processes file descriptor redirections in strictly left to right order.
-
- system("prog args 1>tmpfile 2>&1");
- system("prog args 2>&1 1>tmpfile");
-
-The first command sends both standard out and standard error to the
-temporary file. The second command sends only the old standard output
-there, and the old standard error shows up on the old standard out.
-
-=head2 Why doesn't open() return an error when a pipe open fails?
-
-If the second argument to a piped C<open()> contains shell
-metacharacters, perl C<fork()>s, then C<exec()>s a shell to decode the
-metacharacters and eventually run the desired program. If the program
-couldn't be run, it's the shell that gets the message, not Perl. All
-your Perl program can find out is whether the shell itself could be
-successfully started. You can still capture the shell's STDERR and
-check it for error messages. See L<"How can I capture STDERR from an
-external command?"> elsewhere in this document, or use the
-C<IPC::Open3> module.
-
-If there are no shell metacharacters in the argument of C<open()>, Perl
-runs the command directly, without using the shell, and can correctly
-report whether the command started.
-
-=head2 What's wrong with using backticks in a void context?
-
-Strictly speaking, nothing. Stylistically speaking, it's not a good
-way to write maintainable code. Perl has several operators for
-running external commands. Backticks are one; they collect the output
-from the command for use in your program. The C<system> function is
-another; it doesn't do this.
-
-Writing backticks in your program sends a clear message to the readers
-of your code that you wanted to collect the output of the command.
-Why send a clear message that isn't true?
-
-Consider this line:
-
- `cat /etc/termcap`;
-
-You forgot to check C<$?> to see whether the program even ran
-correctly. Even if you wrote
-
- print `cat /etc/termcap`;
-
-this code could and probably should be written as
-
- system("cat /etc/termcap") == 0
- or die "cat program failed!";
-
-which will echo the cat command's output as it is generated, instead
-of waiting until the program has completed to print it out. It also
-checks the return value.
-
-C<system> also provides direct control over whether shell wildcard
-processing may take place, whereas backticks do not.
-
-=head2 How can I call backticks without shell processing?
-
-This is a bit tricky. You can't simply write the command
-like this:
-
- @ok = `grep @opts '$search_string' @filenames`;
-
-As of Perl 5.8.0, you can use C<open()> with multiple arguments.
-Just like the list forms of C<system()> and C<exec()>, no shell
-escapes happen.
-
- open( GREP, "-|", 'grep', @opts, $search_string, @filenames );
- chomp(@ok = <GREP>);
- close GREP;
-
-You can also:
-
- my @ok = ();
- if (open(GREP, "-|")) {
- while (<GREP>) {
- chomp;
- push(@ok, $_);
- }
- close GREP;
- } else {
- exec 'grep', @opts, $search_string, @filenames;
- }
-
-Just as with C<system()>, no shell escapes happen when you C<exec()> a
-list. Further examples of this can be found in L<perlipc/"Safe Pipe
-Opens">.
-
-Note that if you're using Windows, no solution to this vexing issue is
-even possible. Even though Perl emulates C<fork()>, you'll still be
-stuck, because Windows does not have an argc/argv-style API.
-
-=head2 Why can't my script read from STDIN after I gave it EOF (^D on Unix, ^Z on MS-DOS)?
-
-This happens only if your perl is compiled to use stdio instead of
-perlio, which is the default. Some (maybe all?) stdios set error and
-eof flags that you may need to clear. The C<POSIX> module defines
-C<clearerr()> that you can use. That is the technically correct way to
-do it. Here are some less reliable workarounds:
-
-=over 4
-
-=item 1
-
-Try keeping around the seekpointer and go there, like this:
-
- $where = tell(LOG);
- seek(LOG, $where, 0);
-
-=item 2
-
-If that doesn't work, try seeking to a different part of the file and
-then back.
-
-=item 3
-
-If that doesn't work, try seeking to a different part of
-the file, reading something, and then seeking back.
-
-=item 4
-
-If that doesn't work, give up on your stdio package and use sysread.
-
-=back
-
-=head2 How can I convert my shell script to perl?
-
-Learn Perl and rewrite it. Seriously, there's no simple converter.
-Things that are awkward to do in the shell are easy to do in Perl, and
-this very awkwardness is what would make a shell->perl converter
-nigh-on impossible to write. By rewriting it, you'll think about what
-you're really trying to do, and hopefully will escape the shell's
-pipeline datastream paradigm, which while convenient for some matters,
-causes many inefficiencies.
-
-=head2 Can I use perl to run a telnet or ftp session?
-
-Try the C<Net::FTP>, C<TCP::Client>, and C<Net::Telnet> modules
-(available from CPAN).
-http://www.cpan.org/scripts/netstuff/telnet.emul.shar will also help
-for emulating the telnet protocol, but C<Net::Telnet> is quite
-probably easier to use.
-
-If all you want to do is pretend to be telnet but don't need
-the initial telnet handshaking, then the standard dual-process
-approach will suffice:
-
- use IO::Socket; # new in 5.004
- $handle = IO::Socket::INET->new('www.perl.com:80')
- or die "can't connect to port 80 on www.perl.com: $!";
- $handle->autoflush(1);
- if (fork()) { # XXX: undef means failure
- select($handle);
- print while <STDIN>; # everything from stdin to socket
- } else {
- print while <$handle>; # everything from socket to stdout
- }
- close $handle;
- exit;
-
-=head2 How can I write expect in Perl?
-
-Once upon a time, there was a library called F<chat2.pl> (part of the
-standard perl distribution), which never really got finished. If you
-find it somewhere, I<don't use it>. These days, your best bet is to
-look at the Expect module available from CPAN, which also requires two
-other modules from CPAN, C<IO::Pty> and C<IO::Stty>.
-
-=head2 Is there a way to hide perl's command line from programs such as "ps"?
-
-First of all note that if you're doing this for security reasons (to
-avoid people seeing passwords, for example) then you should rewrite
-your program so that critical information is never given as an
-argument. Hiding the arguments won't make your program completely
-secure.
-
-To actually alter the visible command line, you can assign to the
-variable $0 as documented in L<perlvar>. This won't work on all
-operating systems, though. Daemon programs like sendmail place their
-state there, as in:
-
- $0 = "orcus [accepting connections]";
-
-=head2 I {changed directory, modified my environment} in a perl script. How come the change disappeared when I exited the script? How do I get my changes to be visible?
-
-=over 4
-
-=item Unix
-
-In the strictest sense, it can't be done--the script executes as a
-different process from the shell it was started from. Changes to a
-process are not reflected in its parent--only in any children
-created after the change. There is shell magic that may allow you to
-fake it by C<eval()>ing the script's output in your shell; check out the
-comp.unix.questions FAQ for details.
-
-=back
-
-=head2 How do I close a process's filehandle without waiting for it to complete?
-
-Assuming your system supports such things, just send an appropriate signal
-to the process (see L<perlfunc/"kill">). It's common to first send a TERM
-signal, wait a little bit, and then send a KILL signal to finish it off.
-
-=head2 How do I fork a daemon process?
-
-If by daemon process you mean one that's detached (disassociated from
-its tty), then the following process is reported to work on most
-Unixish systems. Non-Unix users should check their Your_OS::Process
-module for other solutions.
-
-=over 4
-
-=item *
-
-Open /dev/tty and use the TIOCNOTTY ioctl on it. See L<tty>
-for details. Or better yet, you can just use the C<POSIX::setsid()>
-function, so you don't have to worry about process groups.
-
-=item *
-
-Change directory to /
-
-=item *
-
-Reopen STDIN, STDOUT, and STDERR so they're not connected to the old
-tty.
-
-=item *
-
-Background yourself like this:
-
- fork && exit;
-
-=back
-
-The C<Proc::Daemon> module, available from CPAN, provides a function to
-perform these actions for you.
-
-=head2 How do I find out if I'm running interactively or not?
-
-(contributed by brian d foy)
-
-This is a difficult question to answer, and the best answer is
-only a guess.
-
-What do you really want to know? If you merely want to know if one of
-your filehandles is connected to a terminal, you can try the C<-t>
-file test:
-
- if( -t STDOUT ) {
- print "I'm connected to a terminal!\n";
- }
-
-However, you might be out of luck if you expect that means there is a
-real person on the other side. With the C<Expect> module, another
-program can pretend to be a person. The program might even come close
-to passing the Turing test.
-
-The C<IO::Interactive> module does the best it can to give you an
-answer. Its C<is_interactive> function returns an output filehandle;
-that filehandle points to standard output if the module thinks the
-session is interactive. Otherwise, the filehandle is a null handle
-that simply discards the output:
-
- use IO::Interactive;
-
- print { is_interactive } "I might go to standard output!\n";
-
-This still doesn't guarantee that a real person is answering your
-prompts or reading your output.
-
-If you want to know how to handle automated testing for your
-distribution, you can check the environment. The CPAN
-Testers, for instance, set the value of C<AUTOMATED_TESTING>:
-
- unless( $ENV{AUTOMATED_TESTING} ) {
- print "Hello interactive tester!\n";
- }
-
-=head2 How do I timeout a slow event?
-
-Use the C<alarm()> function, probably in conjunction with a signal
-handler, as documented in L<perlipc/"Signals"> and the section on
-"Signals" in the Camel. You may instead use the more flexible
-C<Sys::AlarmCall> module available from CPAN.
-
-The C<alarm()> function is not implemented on all versions of Windows.
-Check the documentation for your specific version of Perl.
-
-=head2 How do I set CPU limits?
-X<BSD::Resource> X<limit> X<CPU>
-
-(contributed by Xho)
-
-Use the C<BSD::Resource> module from CPAN. As an example:
-
- use BSD::Resource;
- setrlimit(RLIMIT_CPU,10,20) or die $!;
-
-This sets the soft and hard limits to 10 and 20 seconds, respectively.
-After 10 seconds of time spent running on the CPU (not "wall" time),
-the process will be sent a signal (XCPU on some systems) which, if not
-trapped, will cause the process to terminate. If that signal is
-trapped, then after 10 more seconds (20 seconds in total) the process
-will be killed with a non-trappable signal.
-
-See the C<BSD::Resource> and your systems documentation for the gory
-details.
-
-=head2 How do I avoid zombies on a Unix system?
-
-Use the reaper code from L<perlipc/"Signals"> to call C<wait()> when a
-SIGCHLD is received, or else use the double-fork technique described
-in L<perlfaq8/"How do I start a process in the background?">.
-
-=head2 How do I use an SQL database?
-
-The C<DBI> module provides an abstract interface to most database
-servers and types, including Oracle, DB2, Sybase, mysql, Postgresql,
-ODBC, and flat files. The DBI module accesses each database type
-through a database driver, or DBD. You can see a complete list of
-available drivers on CPAN: http://www.cpan.org/modules/by-module/DBD/ .
-You can read more about DBI on http://dbi.perl.org .
-
-Other modules provide more specific access: C<Win32::ODBC>, C<Alzabo>,
-C<iodbc>, and others found on CPAN Search: http://search.cpan.org .
-
-=head2 How do I make a system() exit on control-C?
-
-You can't. You need to imitate the C<system()> call (see L<perlipc> for
-sample code) and then have a signal handler for the INT signal that
-passes the signal on to the subprocess. Or you can check for it:
-
- $rc = system($cmd);
- if ($rc & 127) { die "signal death" }
-
-=head2 How do I open a file without blocking?
-
-If you're lucky enough to be using a system that supports
-non-blocking reads (most Unixish systems do), you need only to use the
-C<O_NDELAY> or C<O_NONBLOCK> flag from the C<Fcntl> module in conjunction with
-C<sysopen()>:
-
- use Fcntl;
- sysopen(FH, "/foo/somefile", O_WRONLY|O_NDELAY|O_CREAT, 0644)
- or die "can't open /foo/somefile: $!":
-
-=head2 How do I tell the difference between errors from the shell and perl?
-
-(answer contributed by brian d foy)
-
-When you run a Perl script, something else is running the script for you,
-and that something else may output error messages. The script might
-emit its own warnings and error messages. Most of the time you cannot
-tell who said what.
-
-You probably cannot fix the thing that runs perl, but you can change how
-perl outputs its warnings by defining a custom warning and die functions.
-
-Consider this script, which has an error you may not notice immediately.
-
- #!/usr/locl/bin/perl
-
- print "Hello World\n";
-
-I get an error when I run this from my shell (which happens to be
-bash). That may look like perl forgot it has a C<print()> function,
-but my shebang line is not the path to perl, so the shell runs the
-script, and I get the error.
-
- $ ./test
- ./test: line 3: print: command not found
-
-A quick and dirty fix involves a little bit of code, but this may be all
-you need to figure out the problem.
-
- #!/usr/bin/perl -w
-
- BEGIN {
- $SIG{__WARN__} = sub{ print STDERR "Perl: ", @_; };
- $SIG{__DIE__} = sub{ print STDERR "Perl: ", @_; exit 1};
- }
-
- $a = 1 + undef;
- $x / 0;
- __END__
-
-The perl message comes out with "Perl" in front. The C<BEGIN> block
-works at compile time so all of the compilation errors and warnings
-get the "Perl:" prefix too.
-
- Perl: Useless use of division (/) in void context at ./test line 9.
- Perl: Name "main::a" used only once: possible typo at ./test line 8.
- Perl: Name "main::x" used only once: possible typo at ./test line 9.
- Perl: Use of uninitialized value in addition (+) at ./test line 8.
- Perl: Use of uninitialized value in division (/) at ./test line 9.
- Perl: Illegal division by zero at ./test line 9.
- Perl: Illegal division by zero at -e line 3.
-
-If I don't see that "Perl:", it's not from perl.
-
-You could also just know all the perl errors, and although there are
-some people who may know all of them, you probably don't. However, they
-all should be in the L<perldiag> manpage. If you don't find the error in
-there, it probably isn't a perl error.
-
-Looking up every message is not the easiest way, so let perl to do it
-for you. Use the diagnostics pragma with turns perl's normal messages
-into longer discussions on the topic.
-
- use diagnostics;
-
-If you don't get a paragraph or two of expanded discussion, it
-might not be perl's message.
-
-=head2 How do I install a module from CPAN?
-
-(contributed by brian d foy)
-
-The easiest way is to have a module also named CPAN do it for you by using
-the C<cpan> command that comes with Perl. You can give it a list of modules
-to install:
-
- $ cpan IO::Interactive Getopt::Whatever
-
-If you prefer C<CPANPLUS>, it's just as easy:
-
- $ cpanp i IO::Interactive Getopt::Whatever
-
-If you want to install a distribution from the current directory, you can
-tell C<CPAN.pm> to install C<.> (the full stop):
-
- $ cpan .
-
-See the documentation for either of those commands to see what else
-you can do.
-
-If you want to try to install a distribution by yourself, resolving
-all dependencies on your own, you follow one of two possible build
-paths.
-
-For distributions that use I<Makefile.PL>:
-
- $ perl Makefile.PL
- $ make test install
-
-For distributions that use I<Build.PL>:
-
- $ perl Build.PL
- $ ./Build test
- $ ./Build install
-
-Some distributions may need to link to libraries or other third-party
-code and their build and installation sequences may be more complicated.
-Check any I<README> or I<INSTALL> files that you may find.
-
-=head2 What's the difference between require and use?
-
-(contributed by brian d foy)
-
-Perl runs C<require> statement at run-time. Once Perl loads, compiles,
-and runs the file, it doesn't do anything else. The C<use> statement
-is the same as a C<require> run at compile-time, but Perl also calls the
-C<import> method for the loaded package. These two are the same:
-
- use MODULE qw(import list);
-
- BEGIN {
- require MODULE;
- MODULE->import(import list);
- }
-
-However, you can suppress the C<import> by using an explicit, empty
-import list. Both of these still happen at compile-time:
-
- use MODULE ();
-
- BEGIN {
- require MODULE;
- }
-
-Since C<use> will also call the C<import> method, the actual value
-for C<MODULE> must be a bareword. That is, C<use> cannot load files
-by name, although C<require> can:
-
- require "$ENV{HOME}/lib/Foo.pm"; # no @INC searching!
-
-See the entry for C<use> in L<perlfunc> for more details.
-
-=head2 How do I keep my own module/library directory?
-
-When you build modules, tell Perl where to install the modules.
-
-If you want to install modules for your own use, the easiest way might
-be C<local::lib>, which you can download from CPAN. It sets various
-installation settings for you, and uses those same settings within
-your programs.
-
-If you want more flexibility, you need to configure your CPAN client
-for your particular situation.
-
-For C<Makefile.PL>-based distributions, use the INSTALL_BASE option
-when generating Makefiles:
-
- perl Makefile.PL INSTALL_BASE=/mydir/perl
-
-You can set this in your C<CPAN.pm> configuration so modules
-automatically install in your private library directory when you use
-the CPAN.pm shell:
-
- % cpan
- cpan> o conf makepl_arg INSTALL_BASE=/mydir/perl
- cpan> o conf commit
-
-For C<Build.PL>-based distributions, use the --install_base option:
-
- perl Build.PL --install_base /mydir/perl
-
-You can configure C<CPAN.pm> to automatically use this option too:
-
- % cpan
- cpan> o conf mbuild_arg "--install_base /mydir/perl"
- cpan> o conf commit
-
-INSTALL_BASE tells these tools to put your modules into
-F</mydir/perl/lib/perl5>. See L<How do I add a directory to my
-include path (@INC) at runtime?> for details on how to run your newly
-installed modules.
-
-There is one caveat with INSTALL_BASE, though, since it acts
-differently from the PREFIX and LIB settings that older versions of
-C<ExtUtils::MakeMaker> advocated. INSTALL_BASE does not support
-installing modules for multiple versions of Perl or different
-architectures under the same directory. You should consider whether you
-really want that and, if you do, use the older PREFIX and LIB
-settings. See the C<ExtUtils::Makemaker> documentation for more details.
-
-=head2 How do I add the directory my program lives in to the module/library search path?
-
-(contributed by brian d foy)
-
-If you know the directory already, you can add it to C<@INC> as you would
-for any other directory. You might <use lib> if you know the directory
-at compile time:
-
- use lib $directory;
-
-The trick in this task is to find the directory. Before your script does
-anything else (such as a C<chdir>), you can get the current working
-directory with the C<Cwd> module, which comes with Perl:
-
- BEGIN {
- use Cwd;
- our $directory = cwd;
- }
-
- use lib $directory;
-
-You can do a similar thing with the value of C<$0>, which holds the
-script name. That might hold a relative path, but C<rel2abs> can turn
-it into an absolute path. Once you have the
-
- BEGIN {
- use File::Spec::Functions qw(rel2abs);
- use File::Basename qw(dirname);
-
- my $path = rel2abs( $0 );
- our $directory = dirname( $path );
- }
-
- use lib $directory;
-
-The C<FindBin> module, which comes with Perl, might work. It finds the
-directory of the currently running script and puts it in C<$Bin>, which
-you can then use to construct the right library path:
-
- use FindBin qw($Bin);
-
-You can also use C<local::lib> to do much of the same thing. Install
-modules using C<local::lib>'s settings then use the module in your
-program:
-
- use local::lib; # sets up a local lib at ~/perl5
-
-See the C<local::lib> documentation for more details.
-
-=head2 How do I add a directory to my include path (@INC) at runtime?
-
-Here are the suggested ways of modifying your include path, including
-environment variables, run-time switches, and in-code statements:
-
-=over 4
-
-=item the C<PERLLIB> environment variable
-
- $ export PERLLIB=/path/to/my/dir
- $ perl program.pl
-
-=item the C<PERL5LIB> environment variable
-
- $ export PERL5LIB=/path/to/my/dir
- $ perl program.pl
-
-=item the C<perl -Idir> command line flag
-
- $ perl -I/path/to/my/dir program.pl
-
-=item the C<lib> pragma:
-
- use lib "$ENV{HOME}/myown_perllib";
-
-=item the C<local::lib> module:
-
- use local::lib;
-
- use local::lib "~/myown_perllib";
-
-=back
-
-The last is particularly useful because it knows about machine-dependent
-architectures. The C<lib.pm> pragmatic module was first
-included with the 5.002 release of Perl.
-
-=head2 What is socket.ph and where do I get it?
-
-It's a Perl 4 style file defining values for system networking
-constants. Sometimes it is built using C<h2ph> when Perl is installed,
-but other times it is not. Modern programs C<use Socket;> instead.
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
-other authors as noted. All rights reserved.
-
-This documentation is free; you can redistribute it and/or modify it
-under the same terms as Perl itself.
-
-Irrespective of its distribution, all code examples in this file
-are hereby placed into the public domain. You are permitted and
-encouraged to use this code in your own programs for fun
-or for profit as you see fit. A simple comment in the code giving
-credit would be courteous but is not required.
Deleted: trunk/contrib/perl/pod/perlfaq9.pod
===================================================================
--- trunk/contrib/perl/pod/perlfaq9.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlfaq9.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,693 +0,0 @@
-=head1 NAME
-
-perlfaq9 - Networking
-
-=head1 DESCRIPTION
-
-This section deals with questions related to networking, the internet,
-and a few on the web.
-
-=head2 What is the correct form of response from a CGI script?
-
-(Alan Flavell <flavell+www at a5.ph.gla.ac.uk> answers...)
-
-The Common Gateway Interface (CGI) specifies a software interface between
-a program ("CGI script") and a web server (HTTPD). It is not specific
-to Perl, and has its own FAQs and tutorials, and usenet group,
-comp.infosystems.www.authoring.cgi
-
-The CGI specification is outlined in an informational RFC:
-http://www.ietf.org/rfc/rfc3875
-
-These Perl FAQs very selectively cover some CGI issues. However, Perl
-programmers are strongly advised to use the C<CGI.pm> module, to take care
-of the details for them.
-
-The similarity between CGI response headers (defined in the CGI
-specification) and HTTP response headers (defined in the HTTP
-specification, RFC2616) is intentional, but can sometimes be confusing.
-
-The CGI specification defines two kinds of script: the "Parsed Header"
-script, and the "Non Parsed Header" (NPH) script. Check your server
-documentation to see what it supports. "Parsed Header" scripts are
-simpler in various respects. The CGI specification allows any of the
-usual newline representations in the CGI response (it's the server's
-job to create an accurate HTTP response based on it). So "\n" written in
-text mode is technically correct, and recommended. NPH scripts are more
-tricky: they must put out a complete and accurate set of HTTP
-transaction response headers; the HTTP specification calls for records
-to be terminated with carriage-return and line-feed; i.e., ASCII \015\012
-written in binary mode.
-
-Using C<CGI.pm> gives excellent platform independence, including EBCDIC
-systems. C<CGI.pm> selects an appropriate newline representation
-(C<$CGI::CRLF>) and sets binmode as appropriate.
-
-=head2 My CGI script runs from the command line but not the browser. (500 Server Error)
-
-(contributed by brian d foy)
-
-There are many things that might be wrong with your CGI program, and only
-some of them might be related to Perl. Try going through the troubleshooting
-guide on Perlmonks:
-
- http://www.perlmonks.org/?node_id=380424
-
-=head2 How can I get better error messages from a CGI program?
-
-Use the C<CGI::Carp> module. It replaces C<warn> and C<die>, plus the
-normal C<Carp> module's C<carp>, C<croak>, and C<confess> functions with
-more verbose and safer versions. It still sends them to the normal
-server error log.
-
- use CGI::Carp;
- warn "This is a complaint";
- die "But this one is serious";
-
-The following use of C<CGI::Carp> also redirects errors to a file of your choice,
-placed in a C<BEGIN> block to catch compile-time warnings as well:
-
- BEGIN {
- use CGI::Carp qw(carpout);
- open(LOG, ">>/var/local/cgi-logs/mycgi-log")
- or die "Unable to append to mycgi-log: $!\n";
- carpout(*LOG);
- }
-
-You can even arrange for fatal errors to go back to the client browser,
-which is nice for your own debugging, but might confuse the end user.
-
- use CGI::Carp qw(fatalsToBrowser);
- die "Bad error here";
-
-Even if the error happens before you get the HTTP header out, the module
-will try to take care of this to avoid the dreaded server 500 errors.
-Normal warnings still go out to the server error log (or wherever
-you've sent them with C<carpout>) with the application name and date
-stamp prepended.
-
-=head2 How do I remove HTML from a string?
-
-The most correct way (albeit not the fastest) is to use C<HTML::Parser>
-from CPAN. Another mostly correct
-way is to use C<HTML::FormatText> which not only removes HTML but also
-attempts to do a little simple formatting of the resulting plain text.
-
-Many folks attempt a simple-minded regular expression approach, like
-C<< s/<.*?>//g >>, but that fails in many cases because the tags
-may continue over line breaks, they may contain quoted angle-brackets,
-or HTML comments may be present. Plus, folks forget to convert
-entities--like C<<> for example.
-
-Here's one "simple-minded" approach, that works for most files:
-
- #!/usr/bin/perl -p0777
- s/<(?:[^>'"]*|(['"]).*?\g1)*>//gs
-
-If you want a more complete solution, see the 3-stage striphtml
-program in
-http://www.cpan.org/authors/Tom_Christiansen/scripts/striphtml.gz
-.
-
-Here are some tricky cases that you should think about when picking
-a solution:
-
- <IMG SRC = "foo.gif" ALT = "A > B">
-
- <IMG SRC = "foo.gif"
- ALT = "A > B">
-
- <!-- <A comment> -->
-
- <script>if (a<b && a>c)</script>
-
- <# Just data #>
-
- <![INCLUDE CDATA [ >>>>>>>>>>>> ]]>
-
-If HTML comments include other tags, those solutions would also break
-on text like this:
-
- <!-- This section commented out.
- <B>You can't see me!</B>
- -->
-
-=head2 How do I extract URLs?
-
-You can easily extract all sorts of URLs from HTML with
-C<HTML::SimpleLinkExtor> which handles anchors, images, objects,
-frames, and many other tags that can contain a URL. If you need
-anything more complex, you can create your own subclass of
-C<HTML::LinkExtor> or C<HTML::Parser>. You might even use
-C<HTML::SimpleLinkExtor> as an example for something specifically
-suited to your needs.
-
-You can use C<URI::Find> to extract URLs from an arbitrary text document.
-
-Less complete solutions involving regular expressions can save
-you a lot of processing time if you know that the input is simple. One
-solution from Tom Christiansen runs 100 times faster than most
-module-based approaches but only extracts URLs from anchors where the first
-attribute is HREF and there are no other attributes.
-
- #!/usr/bin/perl -n00
- # qxurl - tchrist at perl.com
- print "$2\n" while m{
- < \s*
- A \s+ HREF \s* = \s* (["']) (.*?) \g1
- \s* >
- }gsix;
-
-=head2 How do I download a file from the user's machine? How do I open a file on another machine?
-
-In this case, download means to use the file upload feature of HTML
-forms. You allow the web surfer to specify a file to send to your web
-server. To you it looks like a download, and to the user it looks
-like an upload. No matter what you call it, you do it with what's
-known as B<multipart/form-data> encoding. The C<CGI.pm> module (which
-comes with Perl as part of the Standard Library) supports this in the
-C<start_multipart_form()> method, which isn't the same as the C<startform()>
-method.
-
-See the section in the C<CGI.pm> documentation on file uploads for code
-examples and details.
-
-=head2 How do I make an HTML pop-up menu with Perl?
-
-(contributed by brian d foy)
-
-The C<CGI.pm> module (which comes with Perl) has functions to create
-the HTML form widgets. See the C<CGI.pm> documentation for more
-examples.
-
- use CGI qw/:standard/;
- print header,
- start_html('Favorite Animals'),
-
- start_form,
- "What's your favorite animal? ",
- popup_menu(
- -name => 'animal',
- -values => [ qw( Llama Alpaca Camel Ram ) ]
- ),
- submit,
-
- end_form,
- end_html;
-
-=head2 How do I fetch an HTML file?
-
-(contributed by brian d foy)
-
-Use the libwww-perl distribution. The C<LWP::Simple> module can fetch web
-resources and give their content back to you as a string:
-
- use LWP::Simple qw(get);
-
- my $html = get( "http://www.example.com/index.html" );
-
-It can also store the resource directly in a file:
-
- use LWP::Simple qw(getstore);
-
- getstore( "http://www.example.com/index.html", "foo.html" );
-
-If you need to do something more complicated, you can use
-C<LWP::UserAgent> module to create your own user-agent (e.g. browser)
-to get the job done. If you want to simulate an interactive web
-browser, you can use the C<WWW::Mechanize> module.
-
-=head2 How do I automate an HTML form submission?
-
-If you are doing something complex, such as moving through many pages
-and forms or a web site, you can use C<WWW::Mechanize>. See its
-documentation for all the details.
-
-If you're submitting values using the GET method, create a URL and encode
-the form using the C<query_form> method:
-
- use LWP::Simple;
- use URI::URL;
-
- my $url = url('http://www.perl.com/cgi-bin/cpan_mod');
- $url->query_form(module => 'DB_File', readme => 1);
- $content = get($url);
-
-If you're using the POST method, create your own user agent and encode
-the content appropriately.
-
- use HTTP::Request::Common qw(POST);
- use LWP::UserAgent;
-
- $ua = LWP::UserAgent->new();
- my $req = POST 'http://www.perl.com/cgi-bin/cpan_mod',
- [ module => 'DB_File', readme => 1 ];
- $content = $ua->request($req)->as_string;
-
-=head2 How do I decode or create those %-encodings on the web?
-X<URI> X<CGI.pm> X<CGI> X<URI::Escape> X<RFC 2396>
-
-(contributed by brian d foy)
-
-Those C<%> encodings handle reserved characters in URIs, as described
-in RFC 2396, Section 2. This encoding replaces the reserved character
-with the hexadecimal representation of the character's number from
-the US-ASCII table. For instance, a colon, C<:>, becomes C<%3A>.
-
-In CGI scripts, you don't have to worry about decoding URIs if you are
-using C<CGI.pm>. You shouldn't have to process the URI yourself,
-either on the way in or the way out.
-
-If you have to encode a string yourself, remember that you should
-never try to encode an already-composed URI. You need to escape the
-components separately then put them together. To encode a string, you
-can use the C<URI::Escape> module. The C<uri_escape> function
-returns the escaped string:
-
- my $original = "Colon : Hash # Percent %";
-
- my $escaped = uri_escape( $original );
-
- print "$escaped\n"; # 'Colon%20%3A%20Hash%20%23%20Percent%20%25'
-
-To decode the string, use the C<uri_unescape> function:
-
- my $unescaped = uri_unescape( $escaped );
-
- print $unescaped; # back to original
-
-If you wanted to do it yourself, you simply need to replace the
-reserved characters with their encodings. A global substitution
-is one way to do it:
-
- # encode
- $string =~ s/([^^A-Za-z0-9\-_.!~*'()])/ sprintf "%%%0x", ord $1 /eg;
-
- #decode
- $string =~ s/%([A-Fa-f\d]{2})/chr hex $1/eg;
-
-=head2 How do I redirect to another page?
-
-Specify the complete URL of the destination (even if it is on the same
-server). This is one of the two different kinds of CGI "Location:"
-responses which are defined in the CGI specification for a Parsed Headers
-script. The other kind (an absolute URLpath) is resolved internally to
-the server without any HTTP redirection. The CGI specifications do not
-allow relative URLs in either case.
-
-Use of C<CGI.pm> is strongly recommended. This example shows redirection
-with a complete URL. This redirection is handled by the web browser.
-
- use CGI qw/:standard/;
-
- my $url = 'http://www.cpan.org/';
- print redirect($url);
-
-This example shows a redirection with an absolute URLpath. This
-redirection is handled by the local web server.
-
- my $url = '/CPAN/index.html';
- print redirect($url);
-
-But if coded directly, it could be as follows (the final "\n" is
-shown separately, for clarity), using either a complete URL or
-an absolute URLpath.
-
- print "Location: $url\n"; # CGI response header
- print "\n"; # end of headers
-
-=head2 How do I put a password on my web pages?
-
-To enable authentication for your web server, you need to configure
-your web server. The configuration is different for different sorts
-of web servers--apache does it differently from iPlanet which does
-it differently from IIS. Check your web server documentation for
-the details for your particular server.
-
-=head2 How do I edit my .htpasswd and .htgroup files with Perl?
-
-The C<HTTPD::UserAdmin> and C<HTTPD::GroupAdmin> modules provide a
-consistent OO interface to these files, regardless of how they're
-stored. Databases may be text, dbm, Berkeley DB or any database with
-a DBI compatible driver. C<HTTPD::UserAdmin> supports files used by the
-"Basic" and "Digest" authentication schemes. Here's an example:
-
- use HTTPD::UserAdmin ();
- HTTPD::UserAdmin
- ->new(DB => "/foo/.htpasswd")
- ->add($username => $password);
-
-=head2 How do I make sure users can't enter values into a form that cause my CGI script to do bad things?
-
-(contributed by brian d foy)
-
-You can't prevent people from sending your script bad data. Even if
-you add some client-side checks, people may disable them or bypass
-them completely. For instance, someone might use a module such as
-C<LWP> to access your CGI program. If you want to prevent data that
-try to use SQL injection or other sorts of attacks (and you should
-want to), you have to not trust any data that enter your program.
-
-The L<perlsec> documentation has general advice about data security.
-If you are using the C<DBI> module, use placeholder to fill in data.
-If you are running external programs with C<system> or C<exec>, use
-the list forms. There are many other precautions that you should take,
-too many to list here, and most of them fall under the category of not
-using any data that you don't intend to use. Trust no one.
-
-=head2 How do I parse a mail header?
-
-For a quick-and-dirty solution, try this solution derived
-from L<perlfunc/split>:
-
- $/ = '';
- $header = <MSG>;
- $header =~ s/\n\s+/ /g; # merge continuation lines
- %head = ( UNIX_FROM_LINE, split /^([-\w]+):\s*/m, $header );
-
-That solution doesn't do well if, for example, you're trying to
-maintain all the Received lines. A more complete approach is to use
-the C<Mail::Header> module from CPAN (part of the C<MailTools> package).
-
-=head2 How do I decode a CGI form?
-
-(contributed by brian d foy)
-
-Use the C<CGI.pm> module that comes with Perl. It's quick,
-it's easy, and it actually does quite a bit of work to
-ensure things happen correctly. It handles GET, POST, and
-HEAD requests, multipart forms, multivalued fields, query
-string and message body combinations, and many other things
-you probably don't want to think about.
-
-It doesn't get much easier: the C<CGI.pm> module automatically
-parses the input and makes each value available through the
-C<param()> function.
-
- use CGI qw(:standard);
-
- my $total = param( 'price' ) + param( 'shipping' );
-
- my @items = param( 'item' ); # multiple values, same field name
-
-If you want an object-oriented approach, C<CGI.pm> can do that too.
-
- use CGI;
-
- my $cgi = CGI->new();
-
- my $total = $cgi->param( 'price' ) + $cgi->param( 'shipping' );
-
- my @items = $cgi->param( 'item' );
-
-You might also try C<CGI::Minimal> which is a lightweight version
-of the same thing. Other CGI::* modules on CPAN might work better
-for you, too.
-
-Many people try to write their own decoder (or copy one from
-another program) and then run into one of the many "gotchas"
-of the task. It's much easier and less hassle to use C<CGI.pm>.
-
-=head2 How do I check a valid mail address?
-
-(partly contributed by Aaron Sherman)
-
-This isn't as simple a question as it sounds. There are two parts:
-
-a) How do I verify that an email address is correctly formatted?
-
-b) How do I verify that an email address targets a valid recipient?
-
-Without sending mail to the address and seeing whether there's a human
-on the other end to answer you, you cannot fully answer part I<b>, but
-either the C<Email::Valid> or the C<RFC::RFC822::Address> module will do
-both part I<a> and part I<b> as far as you can in real-time.
-
-If you want to just check part I<a> to see that the address is valid
-according to the mail header standard with a simple regular expression,
-you can have problems, because there are deliverable addresses that
-aren't RFC-2822 (the latest mail header standard) compliant, and
-addresses that aren't deliverable which, are compliant. However, the
-following will match valid RFC-2822 addresses that do not have comments,
-folding whitespace, or any other obsolete or non-essential elements.
-This I<just> matches the address itself:
-
- my $atom = qr{[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+};
- my $dot_atom = qr{$atom(?:\.$atom)*};
- my $quoted = qr{"(?:\\[^\r\n]|[^\\"])*"};
- my $local = qr{(?:$dot_atom|$quoted)};
- my $quotedpair = qr{\\[\x00-\x09\x0B-\x0c\x0e-\x7e]};
- my $domain_lit = qr{\[(?:$quotedpair|[\x21-\x5a\x5e-\x7e])*\]};
- my $domain = qr{(?:$dot_atom|$domain_lit)};
- my $addr_spec = qr{$local\@$domain};
-
-Just match an address against C</^${addr_spec}$/> to see if it follows
-the RFC2822 specification. However, because it is impossible to be
-sure that such a correctly formed address is actually the correct way
-to reach a particular person or even has a mailbox associated with it,
-you must be very careful about how you use this.
-
-Our best advice for verifying a person's mail address is to have them
-enter their address twice, just as you normally do to change a
-password. This usually weeds out typos. If both versions match, send
-mail to that address with a personal message. If you get the message
-back and they've followed your directions, you can be reasonably
-assured that it's real.
-
-A related strategy that's less open to forgery is to give them a PIN
-(personal ID number). Record the address and PIN (best that it be a
-random one) for later processing. In the mail you send, ask them to
-include the PIN in their reply. But if it bounces, or the message is
-included via a "vacation" script, it'll be there anyway. So it's
-best to ask them to mail back a slight alteration of the PIN, such as
-with the characters reversed, one added or subtracted to each digit, etc.
-
-=head2 How do I decode a MIME/BASE64 string?
-
-The C<MIME-Base64> package (available from CPAN) handles this as well as
-the MIME/QP encoding. Decoding BASE64 becomes as simple as:
-
- use MIME::Base64;
- $decoded = decode_base64($encoded);
-
-The C<MIME-Tools> package (available from CPAN) supports extraction with
-decoding of BASE64 encoded attachments and content directly from email
-messages.
-
-If the string to decode is short (less than 84 bytes long)
-a more direct approach is to use the C<unpack()> function's "u"
-format after minor transliterations:
-
- tr#A-Za-z0-9+/##cd; # remove non-base64 chars
- tr#A-Za-z0-9+/# -_#; # convert to uuencoded format
- $len = pack("c", 32 + 0.75*length); # compute length byte
- print unpack("u", $len . $_); # uudecode and print
-
-=head2 How do I return the user's mail address?
-
-On systems that support getpwuid, the C<< $< >> variable, and the
-C<Sys::Hostname> module (which is part of the standard perl distribution),
-you can probably try using something like this:
-
- use Sys::Hostname;
- $address = sprintf('%s@%s', scalar getpwuid($<), hostname);
-
-Company policies on mail address can mean that this generates addresses
-that the company's mail system will not accept, so you should ask for
-users' mail addresses when this matters. Furthermore, not all systems
-on which Perl runs are so forthcoming with this information as is Unix.
-
-The C<Mail::Util> module from CPAN (part of the C<MailTools> package) provides a
-C<mailaddress()> function that tries to guess the mail address of the user.
-It makes a more intelligent guess than the code above, using information
-given when the module was installed, but it could still be incorrect.
-Again, the best way is often just to ask the user.
-
-=head2 How do I send mail?
-
-Use the C<sendmail> program directly:
-
- open(SENDMAIL, "|/usr/lib/sendmail -oi -t -odq")
- or die "Can't fork for sendmail: $!\n";
- print SENDMAIL <<"EOF";
- From: User Originating Mail <me\@host>
- To: Final Destination <you\@otherhost>
- Subject: A relevant subject line
-
- Body of the message goes here after the blank line
- in as many lines as you like.
- EOF
- close(SENDMAIL) or warn "sendmail didn't close nicely";
-
-The B<-oi> option prevents C<sendmail> from interpreting a line consisting
-of a single dot as "end of message". The B<-t> option says to use the
-headers to decide who to send the message to, and B<-odq> says to put
-the message into the queue. This last option means your message won't
-be immediately delivered, so leave it out if you want immediate
-delivery.
-
-Alternate, less convenient approaches include calling C<mail> (sometimes
-called C<mailx>) directly or simply opening up port 25 have having an
-intimate conversation between just you and the remote SMTP daemon,
-probably C<sendmail>.
-
-Or you might be able use the CPAN module C<Mail::Mailer>:
-
- use Mail::Mailer;
-
- $mailer = Mail::Mailer->new();
- $mailer->open({ From => $from_address,
- To => $to_address,
- Subject => $subject,
- })
- or die "Can't open: $!\n";
- print $mailer $body;
- $mailer->close();
-
-The C<Mail::Internet> module uses C<Net::SMTP> which is less Unix-centric than
-C<Mail::Mailer>, but less reliable. Avoid raw SMTP commands. There
-are many reasons to use a mail transport agent like C<sendmail>. These
-include queuing, MX records, and security.
-
-=head2 How do I use MIME to make an attachment to a mail message?
-
-This answer is extracted directly from the C<MIME::Lite> documentation.
-Create a multipart message (i.e., one with attachments).
-
- use MIME::Lite;
-
- ### Create a new multipart message:
- $msg = MIME::Lite->new(
- From =>'me at myhost.com',
- To =>'you at yourhost.com',
- Cc =>'some at other.com, some at more.com',
- Subject =>'A message with 2 parts...',
- Type =>'multipart/mixed'
- );
-
- ### Add parts (each "attach" has same arguments as "new"):
- $msg->attach(Type =>'TEXT',
- Data =>"Here's the GIF file you wanted"
- );
- $msg->attach(Type =>'image/gif',
- Path =>'aaa000123.gif',
- Filename =>'logo.gif'
- );
-
- $text = $msg->as_string;
-
-C<MIME::Lite> also includes a method for sending these things.
-
- $msg->send;
-
-This defaults to using L<sendmail> but can be customized to use
-SMTP via L<Net::SMTP>.
-
-=head2 How do I read mail?
-
-While you could use the C<Mail::Folder> module from CPAN (part of the
-C<MailFolder> package) or the C<Mail::Internet> module from CPAN (part
-of the C<MailTools> package), often a module is overkill. Here's a
-mail sorter.
-
- #!/usr/bin/perl
-
- my(@msgs, @sub);
- my $msgno = -1;
- $/ = ''; # paragraph reads
- while (<>) {
- if (/^From /m) {
- /^Subject:\s*(?:Re:\s*)*(.*)/mi;
- $sub[++$msgno] = lc($1) || '';
- }
- $msgs[$msgno] .= $_;
- }
- for my $i (sort { $sub[$a] cmp $sub[$b] || $a <=> $b } (0 .. $#msgs)) {
- print $msgs[$i];
- }
-
-Or more succinctly,
-
- #!/usr/bin/perl -n00
- # bysub2 - awkish sort-by-subject
- BEGIN { $msgno = -1 }
- $sub[++$msgno] = (/^Subject:\s*(?:Re:\s*)*(.*)/mi)[0] if /^From/m;
- $msg[$msgno] .= $_;
- END { print @msg[ sort { $sub[$a] cmp $sub[$b] || $a <=> $b } (0 .. $#msg) ] }
-
-=head2 How do I find out my hostname, domainname, or IP address?
-X<hostname, domainname, IP address, host, domain, hostfqdn, inet_ntoa,
-gethostbyname, Socket, Net::Domain, Sys::Hostname>
-
-(contributed by brian d foy)
-
-The C<Net::Domain> module, which is part of the standard distribution starting
-in perl5.7.3, can get you the fully qualified domain name (FQDN), the host
-name, or the domain name.
-
- use Net::Domain qw(hostname hostfqdn hostdomain);
-
- my $host = hostfqdn();
-
-The C<Sys::Hostname> module, included in the standard distribution since
-perl5.6, can also get the hostname.
-
- use Sys::Hostname;
-
- $host = hostname();
-
-To get the IP address, you can use the C<gethostbyname> built-in function
-to turn the name into a number. To turn that number into the dotted octet
-form (a.b.c.d) that most people expect, use the C<inet_ntoa> function
-from the C<Socket> module, which also comes with perl.
-
- use Socket;
-
- my $address = inet_ntoa(
- scalar gethostbyname( $host || 'localhost' )
- );
-
-=head2 How do I fetch a news article or the active newsgroups?
-
-Use the C<Net::NNTP> or C<News::NNTPClient> modules, both available from CPAN.
-This can make tasks like fetching the newsgroup list as simple as
-
- perl -MNews::NNTPClient
- -e 'print News::NNTPClient->new->list("newsgroups")'
-
-=head2 How do I fetch/put an FTP file?
-
-(contributed by brian d foy)
-
-The C<LWP> family of modules (available on CPAN as the libwww-perl distribution)
-can work with FTP just like it can with many other protocols. C<LWP::Simple>
-makes it quite easy to fetch a file:
-
- use LWP::Simple;
-
- my $data = get( 'ftp://some.ftp.site/some/file.txt' );
-
-If you want more direct or low-level control of the FTP process, you can use
-the C<Net::FTP> module (in the Standard Library since Perl 5.8). It's
-documentation has examples showing you just how to do that.
-
-=head2 How can I do RPC in Perl?
-
-(contributed by brian d foy)
-
-Use one of the RPC modules you can find on CPAN (
-http://search.cpan.org/search?query=RPC&mode=all ).
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
-other authors as noted. All rights reserved.
-
-This documentation is free; you can redistribute it and/or modify it
-under the same terms as Perl itself.
-
-Irrespective of its distribution, all code examples in this file
-are hereby placed into the public domain. You are permitted and
-encouraged to use this code in your own programs for fun
-or for profit as you see fit. A simple comment in the code giving
-credit would be courteous but is not required.
Deleted: trunk/contrib/perl/pod/perlglossary.pod
===================================================================
--- trunk/contrib/perl/pod/perlglossary.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlglossary.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,3430 +0,0 @@
-=head1 NAME
-
-perlglossary - Perl Glossary
-
-=head1 DESCRIPTION
-
-A glossary of terms (technical and otherwise) used in the Perl documentation.
-Other useful sources include the Free On-Line Dictionary of Computing
-L<http://foldoc.doc.ic.ac.uk/foldoc/index.html>, the Jargon File
-L<http://catb.org/~esr/jargon/>, and Wikipedia L<http://www.wikipedia.org/>.
-
-=head2 A
-
-=over 4
-
-=item accessor methods
-
-A L</method> used to indirectly inspect or update an L</object>'s
-state (its L<instance variables|/instance variable>).
-
-=item actual arguments
-
-The L<scalar values|/scalar value> that you supply to a L</function>
-or L</subroutine> when you call it. For instance, when you call
-C<power("puff")>, the string C<"puff"> is the actual argument. See
-also L</argument> and L</formal arguments>.
-
-=item address operator
-
-Some languages work directly with the memory addresses of values, but
-this can be like playing with fire. Perl provides a set of asbestos
-gloves for handling all memory management. The closest to an address
-operator in Perl is the backslash operator, but it gives you a L</hard
-reference>, which is much safer than a memory address.
-
-=item algorithm
-
-A well-defined sequence of steps, clearly enough explained that even a
-computer could do them.
-
-=item alias
-
-A nickname for something, which behaves in all ways as though you'd
-used the original name instead of the nickname. Temporary aliases are
-implicitly created in the loop variable for C<foreach> loops, in the
-C<$_> variable for L<map|perlfunc/map> or L<grep|perlfunc/grep>
-operators, in C<$a> and C<$b> during L<sort|perlfunc/sort>'s
-comparison function, and in each element of C<@_> for the L</actual
-arguments> of a subroutine call. Permanent aliases are explicitly
-created in L<packages|/package> by L<importing|/import> symbols or by
-assignment to L<typeglobs|/typeglob>. Lexically scoped aliases for
-package variables are explicitly created by the L<our|perlfunc/our>
-declaration.
-
-=item alternatives
-
-A list of possible choices from which you may select only one, as in
-"Would you like door A, B, or C?" Alternatives in regular expressions
-are separated with a single vertical bar: C<|>. Alternatives in
-normal Perl expressions are separated with a double vertical bar:
-C<||>. Logical alternatives in L</Boolean> expressions are separated
-with either C<||> or C<or>.
-
-=item anonymous
-
-Used to describe a L</referent> that is not directly accessible
-through a named L</variable>. Such a referent must be indirectly
-accessible through at least one L</hard reference>. When the last
-hard reference goes away, the anonymous referent is destroyed without
-pity.
-
-=item architecture
-
-The kind of computer you're working on, where one "kind" of computer
-means all those computers sharing a compatible machine language.
-Since Perl programs are (typically) simple text files, not executable
-images, a Perl program is much less sensitive to the architecture it's
-running on than programs in other languages, such as C, that are
-compiled into machine code. See also L</platform> and L</operating
-system>.
-
-=item argument
-
-A piece of data supplied to a L<program|/executable file>,
-L</subroutine>, L</function>, or L</method> to tell it what it's
-supposed to do. Also called a "parameter".
-
-=item ARGV
-
-The name of the array containing the L</argument> L</vector> from the
-command line. If you use the empty C<< E<lt>E<gt> >> operator, L</ARGV> is
-the name of both the L</filehandle> used to traverse the arguments and
-the L</scalar> containing the name of the current input file.
-
-=item arithmetical operator
-
-A L</symbol> such as C<+> or C</> that tells Perl to do the arithmetic
-you were supposed to learn in grade school.
-
-=item array
-
-An ordered sequence of L<values|/value>, stored such that you can
-easily access any of the values using an integer L</subscript>
-that specifies the value's L</offset> in the sequence.
-
-=item array context
-
-An archaic expression for what is more correctly referred to as
-L</list context>.
-
-=item ASCII
-
-The American Standard Code for Information Interchange (a 7-bit
-character set adequate only for poorly representing English text).
-Often used loosely to describe the lowest 128 values of the various
-ISO-8859-X character sets, a bunch of mutually incompatible 8-bit
-codes sometimes described as half ASCII. See also L</Unicode>.
-
-=item assertion
-
-A component of a L</regular expression> that must be true for the
-pattern to match but does not necessarily match any characters itself.
-Often used specifically to mean a L</zero width> assertion.
-
-=item assignment
-
-An L</operator> whose assigned mission in life is to change the value
-of a L</variable>.
-
-=item assignment operator
-
-Either a regular L</assignment>, or a compound L</operator> composed
-of an ordinary assignment and some other operator, that changes the
-value of a variable in place, that is, relative to its old value. For
-example, C<$a += 2> adds C<2> to C<$a>.
-
-=item associative array
-
-See L</hash>. Please.
-
-=item associativity
-
-Determines whether you do the left L</operator> first or the right
-L</operator> first when you have "A L</operator> B L</operator> C" and
-the two operators are of the same precedence. Operators like C<+> are
-left associative, while operators like C<**> are right associative.
-See L<perlop> for a list of operators and their associativity.
-
-=item asynchronous
-
-Said of events or activities whose relative temporal ordering is
-indeterminate because too many things are going on at once. Hence, an
-asynchronous event is one you didn't know when to expect.
-
-=item atom
-
-A L</regular expression> component potentially matching a
-L</substring> containing one or more characters and treated as an
-indivisible syntactic unit by any following L</quantifier>. (Contrast
-with an L</assertion> that matches something of L</zero width> and may
-not be quantified.)
-
-=item atomic operation
-
-When Democritus gave the word "atom" to the indivisible bits of
-matter, he meant literally something that could not be cut: I<a->
-(not) + I<tomos> (cuttable). An atomic operation is an action that
-can't be interrupted, not one forbidden in a nuclear-free zone.
-
-=item attribute
-
-A new feature that allows the declaration of L<variables|/variable>
-and L<subroutines|/subroutine> with modifiers as in C<sub foo : locked
-method>. Also, another name for an L</instance variable> of an
-L</object>.
-
-=item autogeneration
-
-A feature of L</operator overloading> of L<objects|/object>, whereby
-the behavior of certain L<operators|/operator> can be reasonably
-deduced using more fundamental operators. This assumes that the
-overloaded operators will often have the same relationships as the
-regular operators. See L<perlop>.
-
-=item autoincrement
-
-To add one to something automatically, hence the name of the C<++>
-operator. To instead subtract one from something automatically is
-known as an "autodecrement".
-
-=item autoload
-
-To load on demand. (Also called "lazy" loading.) Specifically, to
-call an L<AUTOLOAD|perlsub/Autoloading> subroutine on behalf of an
-undefined subroutine.
-
-=item autosplit
-
-To split a string automatically, as the B<-a> L</switch> does when
-running under B<-p> or B<-n> in order to emulate L</awk>. (See also
-the L<AutoSplit> module, which has nothing to do with the B<-a>
-switch, but a lot to do with autoloading.)
-
-=item autovivification
-
-A Greco-Roman word meaning "to bring oneself to life". In Perl,
-storage locations (L<lvalues|/lvalue>) spontaneously generate
-themselves as needed, including the creation of any L</hard reference>
-values to point to the next level of storage. The assignment
-C<$a[5][5][5][5][5] = "quintet"> potentially creates five scalar
-storage locations, plus four references (in the first four scalar
-locations) pointing to four new anonymous arrays (to hold the last
-four scalar locations). But the point of autovivification is that you
-don't have to worry about it.
-
-=item AV
-
-Short for "array value", which refers to one of Perl's internal data
-types that holds an L</array>. The L</AV> type is a subclass of
-L</SV>.
-
-=item awk
-
-Descriptive editing term--short for "awkward". Also coincidentally
-refers to a venerable text-processing language from which Perl derived
-some of its high-level ideas.
-
-=back
-
-=head2 B
-
-=over 4
-
-=item backreference
-
-A substring L<captured|/capturing> by a subpattern within
-unadorned parentheses in a L</regex>, also referred to as a capture group. The
-sequences (C<\g1>, C<\g2>, etc.) later in the same pattern refer back to
-the corresponding subpattern in the current match. Outside the pattern,
-the numbered variables (C<$1>, C<$2>, etc.) continue to refer to these
-same values, as long as the pattern was the last successful match of
-the current dynamic scope. C<\g{-1}> can be used to refer to a group by
-relative rather than absolute position; and groups can be also be named, and
-referred to later by name rather than number. See L<perlre/"Capture groups">.
-
-=item backtracking
-
-The practice of saying, "If I had to do it all over, I'd do it
-differently," and then actually going back and doing it all over
-differently. Mathematically speaking, it's returning from an
-unsuccessful recursion on a tree of possibilities. Perl backtracks
-when it attempts to match patterns with a L</regular expression>, and
-its earlier attempts don't pan out. See L<perlre/Backtracking>.
-
-=item backward compatibility
-
-Means you can still run your old program because we didn't break any
-of the features or bugs it was relying on.
-
-=item bareword
-
-A word sufficiently ambiguous to be deemed illegal under L<use strict
-'subs'|strict/strict subs>. In the absence of that stricture, a
-bareword is treated as if quotes were around it.
-
-=item base class
-
-A generic L</object> type; that is, a L</class> from which other, more
-specific classes are derived genetically by L</inheritance>. Also
-called a "superclass" by people who respect their ancestors.
-
-=item big-endian
-
-From Swift: someone who eats eggs big end first. Also used of
-computers that store the most significant L</byte> of a word at a
-lower byte address than the least significant byte. Often considered
-superior to little-endian machines. See also L</little-endian>.
-
-=item binary
-
-Having to do with numbers represented in base 2. That means there's
-basically two numbers, 0 and 1. Also used to describe a "non-text
-file", presumably because such a file makes full use of all the binary
-bits in its bytes. With the advent of L</Unicode>, this distinction,
-already suspect, loses even more of its meaning.
-
-=item binary operator
-
-An L</operator> that takes two L<operands|/operand>.
-
-=item bind
-
-To assign a specific L</network address> to a L</socket>.
-
-=item bit
-
-An integer in the range from 0 to 1, inclusive. The smallest possible
-unit of information storage. An eighth of a L</byte> or of a dollar.
-(The term "Pieces of Eight" comes from being able to split the old
-Spanish dollar into 8 bits, each of which still counted for money.
-That's why a 25-cent piece today is still "two bits".)
-
-=item bit shift
-
-The movement of bits left or right in a computer word, which has the
-effect of multiplying or dividing by a power of 2.
-
-=item bit string
-
-A sequence of L<bits|/bit> that is actually being thought of as a
-sequence of bits, for once.
-
-=item bless
-
-In corporate life, to grant official approval to a thing, as in, "The
-VP of Engineering has blessed our WebCruncher project." Similarly in
-Perl, to grant official approval to a L</referent> so that it can
-function as an L</object>, such as a WebCruncher object. See
-L<perlfunc/"bless">.
-
-=item block
-
-What a L</process> does when it has to wait for something: "My process
-blocked waiting for the disk." As an unrelated noun, it refers to a
-large chunk of data, of a size that the L</operating system> likes to
-deal with (normally a power of two such as 512 or 8192). Typically
-refers to a chunk of data that's coming from or going to a disk file.
-
-=item BLOCK
-
-A syntactic construct consisting of a sequence of Perl
-L<statements|/statement> that is delimited by braces. The C<if> and
-C<while> statements are defined in terms of L<BLOCKs|/BLOCK>, for instance.
-Sometimes we also say "block" to mean a lexical scope; that is, a
-sequence of statements that act like a L</BLOCK>, such as within an
-L<eval|perlfunc/eval> or a file, even though the statements aren't
-delimited by braces.
-
-=item block buffering
-
-A method of making input and output efficient by passing one L</block>
-at a time. By default, Perl does block buffering to disk files. See
-L</buffer> and L</command buffering>.
-
-=item Boolean
-
-A value that is either L</true> or L</false>.
-
-=item Boolean context
-
-A special kind of L</scalar context> used in conditionals to decide
-whether the L</scalar value> returned by an expression is L</true> or
-L</false>. Does not evaluate as either a string or a number. See
-L</context>.
-
-=item breakpoint
-
-A spot in your program where you've told the debugger to stop
-L<execution|/execute> so you can poke around and see whether anything
-is wrong yet.
-
-=item broadcast
-
-To send a L</datagram> to multiple destinations simultaneously.
-
-=item BSD
-
-A psychoactive drug, popular in the 80s, probably developed at
-U. C. Berkeley or thereabouts. Similar in many ways to the
-prescription-only medication called "System V", but infinitely more
-useful. (Or, at least, more fun.) The full chemical name is
-"Berkeley Standard Distribution".
-
-=item bucket
-
-A location in a L</hash table> containing (potentially) multiple
-entries whose keys "hash" to the same hash value according to its hash
-function. (As internal policy, you don't have to worry about it,
-unless you're into internals, or policy.)
-
-=item buffer
-
-A temporary holding location for data. L<Block buffering|/block
-buffering> means that the data is passed on to its destination
-whenever the buffer is full. L<Line buffering|/line buffering> means
-that it's passed on whenever a complete line is received. L<Command
-buffering|/command buffering> means that it's passed every time you do
-a L<print|perlfunc/print> command (or equivalent). If your output is
-unbuffered, the system processes it one byte at a time without the use
-of a holding area. This can be rather inefficient.
-
-=item built-in
-
-A L</function> that is predefined in the language. Even when hidden
-by L</overriding>, you can always get at a built-in function by
-L<qualifying|/qualified> its name with the C<CORE::> pseudo-package.
-
-=item bundle
-
-A group of related modules on L</CPAN>. (Also, sometimes refers to a
-group of command-line switches grouped into one L</switch cluster>.)
-
-=item byte
-
-A piece of data worth eight L<bits|/bit> in most places.
-
-=item bytecode
-
-A pidgin-like language spoken among 'droids when they don't wish to
-reveal their orientation (see L</endian>). Named after some similar
-languages spoken (for similar reasons) between compilers and
-interpreters in the late 20th century. These languages are
-characterized by representing everything as a
-non-architecture-dependent sequence of bytes.
-
-=back
-
-=head2 C
-
-=over 4
-
-=item C
-
-A language beloved by many for its inside-out L</type> definitions,
-inscrutable L</precedence> rules, and heavy L</overloading> of the
-function-call mechanism. (Well, actually, people first switched to C
-because they found lowercase identifiers easier to read than upper.)
-Perl is written in C, so it's not surprising that Perl borrowed a few
-ideas from it.
-
-=item C preprocessor
-
-The typical C compiler's first pass, which processes lines beginning
-with C<#> for conditional compilation and macro definition and does
-various manipulations of the program text based on the current
-definitions. Also known as I<cpp>(1).
-
-=item call by reference
-
-An L</argument>-passing mechanism in which the L</formal arguments>
-refer directly to the L</actual arguments>, and the L</subroutine> can
-change the actual arguments by changing the formal arguments. That
-is, the formal argument is an L</alias> for the actual argument. See
-also L</call by value>.
-
-=item call by value
-
-An L</argument>-passing mechanism in which the L</formal arguments>
-refer to a copy of the L</actual arguments>, and the L</subroutine>
-cannot change the actual arguments by changing the formal arguments.
-See also L</call by reference>.
-
-=item callback
-
-A L</handler> that you register with some other part of your program
-in the hope that the other part of your program will L</trigger> your
-handler when some event of interest transpires.
-
-=item canonical
-
-Reduced to a standard form to facilitate comparison.
-
-=item capture buffer, capture group
-
-These two terms are synonymous:
-a L<captured substring|/capturing> by a regex subpattern.
-
-=item capturing
-
-The use of parentheses around a L</subpattern> in a L</regular
-expression> to store the matched L</substring> as a L</backreference>
-or L<capture group|/capture buffer, capture group>.
-(Captured strings are also returned as a list in L</list context>.)
-
-=item character
-
-A small integer representative of a unit of orthography.
-Historically, characters were usually stored as fixed-width integers
-(typically in a byte, or maybe two, depending on the character set),
-but with the advent of UTF-8, characters are often stored in a
-variable number of bytes depending on the size of the integer that
-represents the character. Perl manages this transparently for you,
-for the most part.
-
-=item character class
-
-A square-bracketed list of characters used in a L</regular expression>
-to indicate that any character of the set may occur at a given point.
-Loosely, any predefined set of characters so used.
-
-=item character property
-
-A predefined L</character class> matchable by the C<\p>
-L</metasymbol>. Many standard properties are defined for L</Unicode>.
-
-=item circumfix operator
-
-An L</operator> that surrounds its L</operand>, like the angle
-operator, or parentheses, or a hug.
-
-=item class
-
-A user-defined L</type>, implemented in Perl via a L</package> that
-provides (either directly or by inheritance) L<methods|/method> (that
-is, L<subroutines|/subroutine>) to handle L<instances|/instance> of
-the class (its L<objects|/object>). See also L</inheritance>.
-
-=item class method
-
-A L</method> whose L</invocand> is a L</package> name, not an
-L</object> reference. A method associated with the class as a whole.
-
-=item client
-
-In networking, a L</process> that initiates contact with a L</server>
-process in order to exchange data and perhaps receive a service.
-
-=item cloister
-
-A L</cluster> used to restrict the scope of a L</regular expression
-modifier>.
-
-=item closure
-
-An L</anonymous> subroutine that, when a reference to it is generated
-at run time, keeps track of the identities of externally visible
-L<lexical variables|/lexical variable> even after those lexical
-variables have supposedly gone out of L</scope>. They're called
-"closures" because this sort of behavior gives mathematicians a sense
-of closure.
-
-=item cluster
-
-A parenthesized L</subpattern> used to group parts of a L</regular
-expression> into a single L</atom>.
-
-=item CODE
-
-The word returned by the L<ref|perlfunc/ref> function when you apply
-it to a reference to a subroutine. See also L</CV>.
-
-=item code generator
-
-A system that writes code for you in a low-level language, such as
-code to implement the backend of a compiler. See L</program
-generator>.
-
-=item code point
-
-The position of a character in a character set encoding. The character
-C<NULL> is almost certainly at the zeroth position in all character
-sets, so its code point is 0. The code point for the C<SPACE>
-character in the ASCII character set is 0x20, or 32 decimal; in EBCDIC
-it is 0x40, or 64 decimal. The L<ord|perlfunc/ord> function returns
-the code point of a character.
-
-"code position" and "ordinal" mean the same thing as "code point".
-
-=item code subpattern
-
-A L</regular expression> subpattern whose real purpose is to execute
-some Perl code, for example, the C<(?{...})> and C<(??{...})>
-subpatterns.
-
-=item collating sequence
-
-The order into which L<characters|/character> sort. This is used by
-L</string> comparison routines to decide, for example, where in this
-glossary to put "collating sequence".
-
-=item command
-
-In L</shell> programming, the syntactic combination of a program name
-and its arguments. More loosely, anything you type to a shell (a
-command interpreter) that starts it doing something. Even more
-loosely, a Perl L</statement>, which might start with a L</label> and
-typically ends with a semicolon.
-
-=item command buffering
-
-A mechanism in Perl that lets you store up the output of each Perl
-L</command> and then flush it out as a single request to the
-L</operating system>. It's enabled by setting the C<$|>
-(C<$AUTOFLUSH>) variable to a true value. It's used when you don't
-want data sitting around not going where it's supposed to, which may
-happen because the default on a L</file> or L</pipe> is to use
-L</block buffering>.
-
-=item command name
-
-The name of the program currently executing, as typed on the command
-line. In C, the L</command> name is passed to the program as the
-first command-line argument. In Perl, it comes in separately as
-C<$0>.
-
-=item command-line arguments
-
-The L<values|/value> you supply along with a program name when you
-tell a L</shell> to execute a L</command>. These values are passed to
-a Perl program through C<@ARGV>.
-
-=item comment
-
-A remark that doesn't affect the meaning of the program. In Perl, a
-comment is introduced by a C<#> character and continues to the end of
-the line.
-
-=item compilation unit
-
-The L</file> (or L</string>, in the case of L<eval|perlfunc/eval>)
-that is currently being compiled.
-
-=item compile phase
-
-Any time before Perl starts running your main program. See also
-L</run phase>. Compile phase is mostly spent in L</compile time>, but
-may also be spent in L</run time> when C<BEGIN> blocks,
-L<use|perlfunc/use> declarations, or constant subexpressions are being
-evaluated. The startup and import code of any L<use|perlfunc/use>
-declaration is also run during compile phase.
-
-=item compile time
-
-The time when Perl is trying to make sense of your code, as opposed to
-when it thinks it knows what your code means and is merely trying to
-do what it thinks your code says to do, which is L</run time>.
-
-=item compiler
-
-Strictly speaking, a program that munches up another program and spits
-out yet another file containing the program in a "more executable"
-form, typically containing native machine instructions. The I<perl>
-program is not a compiler by this definition, but it does contain a
-kind of compiler that takes a program and turns it into a more
-executable form (L<syntax trees|/syntax tree>) within the I<perl>
-process itself, which the L</interpreter> then interprets. There are,
-however, extension L<modules|/module> to get Perl to act more like a
-"real" compiler. See L<O>.
-
-=item composer
-
-A "constructor" for a L</referent> that isn't really an L</object>,
-like an anonymous array or a hash (or a sonata, for that matter). For
-example, a pair of braces acts as a composer for a hash, and a pair of
-brackets acts as a composer for an array. See L<perlref/Making
-References>.
-
-=item concatenation
-
-The process of gluing one cat's nose to another cat's tail. Also, a
-similar operation on two L<strings|/string>.
-
-=item conditional
-
-Something "iffy". See L</Boolean context>.
-
-=item connection
-
-In telephony, the temporary electrical circuit between the caller's
-and the callee's phone. In networking, the same kind of temporary
-circuit between a L</client> and a L</server>.
-
-=item construct
-
-As a noun, a piece of syntax made up of smaller pieces. As a
-transitive verb, to create an L</object> using a L</constructor>.
-
-=item constructor
-
-Any L</class method>, instance L</method>, or L</subroutine>
-that composes, initializes, blesses, and returns an L</object>.
-Sometimes we use the term loosely to mean a L</composer>.
-
-=item context
-
-The surroundings, or environment. The context given by the
-surrounding code determines what kind of data a particular
-L</expression> is expected to return. The three primary contexts are
-L</list context>, L</scalar context>, and L</void context>. Scalar
-context is sometimes subdivided into L</Boolean context>, L</numeric
-context>, L</string context>, and L</void context>. There's also a
-"don't care" scalar context (which is dealt with in Programming Perl,
-Third Edition, Chapter 2, "Bits and Pieces" if you care).
-
-=item continuation
-
-The treatment of more than one physical L</line> as a single logical
-line. L</Makefile> lines are continued by putting a backslash before
-the L</newline>. Mail headers as defined by RFC 822 are continued by
-putting a space or tab I<after> the newline. In general, lines in
-Perl do not need any form of continuation mark, because L</whitespace>
-(including newlines) is gleefully ignored. Usually.
-
-=item core dump
-
-The corpse of a L</process>, in the form of a file left in the
-L</working directory> of the process, usually as a result of certain
-kinds of fatal error.
-
-=item CPAN
-
-The Comprehensive Perl Archive Network. (See L<perlfaq2/What modules and extensions are available for Perl? What is CPAN? What does CPANE<sol>srcE<sol>... mean?>).
-
-=item cracker
-
-Someone who breaks security on computer systems. A cracker may be a
-true L</hacker> or only a L</script kiddie>.
-
-=item current package
-
-The L</package> in which the current statement is compiled. Scan
-backwards in the text of your program through the current L<lexical
-scope|/lexical scoping> or any enclosing lexical scopes till you find
-a package declaration. That's your current package name.
-
-=item current working directory
-
-See L</working directory>.
-
-=item currently selected output channel
-
-The last L</filehandle> that was designated with
-L<select|perlfunc/select>(C<FILEHANDLE>); L</STDOUT>, if no filehandle
-has been selected.
-
-=item CV
-
-An internal "code value" typedef, holding a L</subroutine>. The L</CV>
-type is a subclass of L</SV>.
-
-=back
-
-=head2 D
-
-=over 4
-
-=item dangling statement
-
-A bare, single L</statement>, without any braces, hanging off an C<if>
-or C<while> conditional. C allows them. Perl doesn't.
-
-=item data structure
-
-How your various pieces of data relate to each other and what shape
-they make when you put them all together, as in a rectangular table or
-a triangular-shaped tree.
-
-=item data type
-
-A set of possible values, together with all the operations that know
-how to deal with those values. For example, a numeric data type has a
-certain set of numbers that you can work with and various mathematical
-operations that you can do on the numbers but would make little sense
-on, say, a string such as C<"Kilroy">. Strings have their own
-operations, such as L</concatenation>. Compound types made of a
-number of smaller pieces generally have operations to compose and
-decompose them, and perhaps to rearrange them. L<Objects|/object>
-that model things in the real world often have operations that
-correspond to real activities. For instance, if you model an
-elevator, your elevator object might have an C<open_door()>
-L</method>.
-
-=item datagram
-
-A packet of data, such as a L</UDP> message, that (from the viewpoint
-of the programs involved) can be sent independently over the network.
-(In fact, all packets are sent independently at the L</IP> level, but
-L</stream> protocols such as L</TCP> hide this from your program.)
-
-=item DBM
-
-Stands for "Data Base Management" routines, a set of routines that
-emulate an L</associative array> using disk files. The routines use a
-dynamic hashing scheme to locate any entry with only two disk
-accesses. DBM files allow a Perl program to keep a persistent
-L</hash> across multiple invocations. You can L<tie|perlfunc/tie>
-your hash variables to various DBM implementations--see L<AnyDBM_File>
-and L<DB_File>.
-
-=item declaration
-
-An L</assertion> that states something exists and perhaps describes
-what it's like, without giving any commitment as to how or where
-you'll use it. A declaration is like the part of your recipe that
-says, "two cups flour, one large egg, four or five tadpoles..." See
-L</statement> for its opposite. Note that some declarations also
-function as statements. Subroutine declarations also act as
-definitions if a body is supplied.
-
-=item decrement
-
-To subtract a value from a variable, as in "decrement C<$x>" (meaning
-to remove 1 from its value) or "decrement C<$x> by 3".
-
-=item default
-
-A L</value> chosen for you if you don't supply a value of your own.
-
-=item defined
-
-Having a meaning. Perl thinks that some of the things people try to
-do are devoid of meaning, in particular, making use of variables that
-have never been given a L</value> and performing certain operations on
-data that isn't there. For example, if you try to read data past the
-end of a file, Perl will hand you back an undefined value. See also
-L</false> and L<perlfunc/defined>.
-
-=item delimiter
-
-A L</character> or L</string> that sets bounds to an arbitrarily-sized
-textual object, not to be confused with a L</separator> or
-L</terminator>. "To delimit" really just means "to surround" or "to
-enclose" (like these parentheses are doing).
-
-=item deprecated modules and features
-
-Deprecated modules and features are those which were part of a stable
-release, but later found to be subtly flawed, and which should be avoided.
-They are subject to removal and/or bug-incompatible reimplementation in
-the next major release (but they will be preserved through maintenance
-releases). Deprecation warnings are issued under B<-w> or C<use
-diagnostics>, and notices are found in L<perldelta>s, as well as various
-other PODs. Coding practices that misuse features, such as C<my $foo if
-0>, can also be deprecated.
-
-=item dereference
-
-A fancy computer science term meaning "to follow a L</reference> to
-what it points to". The "de" part of it refers to the fact that
-you're taking away one level of L</indirection>.
-
-=item derived class
-
-A L</class> that defines some of its L<methods|/method> in terms of a
-more generic class, called a L</base class>. Note that classes aren't
-classified exclusively into base classes or derived classes: a class
-can function as both a derived class and a base class simultaneously,
-which is kind of classy.
-
-=item descriptor
-
-See L</file descriptor>.
-
-=item destroy
-
-To deallocate the memory of a L</referent> (first triggering its
-C<DESTROY> method, if it has one).
-
-=item destructor
-
-A special L</method> that is called when an L</object> is thinking
-about L<destroying|/destroy> itself. A Perl program's C<DESTROY>
-method doesn't do the actual destruction; Perl just
-L<triggers|/trigger> the method in case the L</class> wants to do any
-associated cleanup.
-
-=item device
-
-A whiz-bang hardware gizmo (like a disk or tape drive or a modem or a
-joystick or a mouse) attached to your computer, that the L</operating
-system> tries to make look like a L</file> (or a bunch of files).
-Under Unix, these fake files tend to live in the I</dev> directory.
-
-=item directive
-
-A L</pod> directive. See L<perlpod>.
-
-=item directory
-
-A special file that contains other files. Some L<operating
-systems|/operating system> call these "folders", "drawers", or
-"catalogs".
-
-=item directory handle
-
-A name that represents a particular instance of opening a directory to
-read it, until you close it. See the L<opendir|perlfunc/opendir>
-function.
-
-=item dispatch
-
-To send something to its correct destination. Often used
-metaphorically to indicate a transfer of programmatic control to a
-destination selected algorithmically, often by lookup in a table of
-function L<references|/reference> or, in the case of object
-L<methods|/method>, by traversing the inheritance tree looking for the
-most specific definition for the method.
-
-=item distribution
-
-A standard, bundled release of a system of software. The default
-usage implies source code is included. If that is not the case, it
-will be called a "binary-only" distribution.
-
-=item (to be) dropped modules
-
-When Perl 5 was first released (see L<perlhist>), several modules were
-included, which have now fallen out of common use. It has been suggested
-that these modules should be removed, since the distribution became rather
-large, and the common criterion for new module additions is now limited to
-modules that help to build, test, and extend perl itself. Furthermore,
-the CPAN (which didn't exist at the time of Perl 5.0) can become the new
-home of dropped modules. Dropping modules is currently not an option, but
-further developments may clear the last barriers.
-
-=item dweomer
-
-An enchantment, illusion, phantasm, or jugglery. Said when Perl's
-magical L</dwimmer> effects don't do what you expect, but rather seem
-to be the product of arcane dweomercraft, sorcery, or wonder working.
-[From Old English]
-
-=item dwimmer
-
-DWIM is an acronym for "Do What I Mean", the principle that something
-should just do what you want it to do without an undue amount of fuss.
-A bit of code that does "dwimming" is a "dwimmer". Dwimming can
-require a great deal of behind-the-scenes magic, which (if it doesn't
-stay properly behind the scenes) is called a L</dweomer> instead.
-
-=item dynamic scoping
-
-Dynamic scoping works over a dynamic scope, making variables visible
-throughout the rest of the L</block> in which they are first used and
-in any L<subroutines|/subroutine> that are called by the rest of the
-block. Dynamically scoped variables can have their values temporarily
-changed (and implicitly restored later) by a L<local|perlfunc/local>
-operator. (Compare L</lexical scoping>.) Used more loosely to mean
-how a subroutine that is in the middle of calling another subroutine
-"contains" that subroutine at L</run time>.
-
-=back
-
-=head2 E
-
-=over 4
-
-=item eclectic
-
-Derived from many sources. Some would say I<too> many.
-
-=item element
-
-A basic building block. When you're talking about an L</array>, it's
-one of the items that make up the array.
-
-=item embedding
-
-When something is contained in something else, particularly when that
-might be considered surprising: "I've embedded a complete Perl
-interpreter in my editor!"
-
-=item empty subclass test
-
-The notion that an empty L</derived class> should behave exactly like
-its L</base class>.
-
-=item en passant
-
-When you change a L</value> as it is being copied. [From French, "in
-passing", as in the exotic pawn-capturing maneuver in chess.]
-
-=item encapsulation
-
-The veil of abstraction separating the L</interface> from the
-L</implementation> (whether enforced or not), which mandates that all
-access to an L</object>'s state be through L<methods|/method> alone.
-
-=item endian
-
-See L</little-endian> and L</big-endian>.
-
-=item environment
-
-The collective set of L<environment variables|/environment variable>
-your L</process> inherits from its parent. Accessed via C<%ENV>.
-
-=item environment variable
-
-A mechanism by which some high-level agent such as a user can pass its
-preferences down to its future offspring (child L<processes|/process>,
-grandchild processes, great-grandchild processes, and so on). Each
-environment variable is a L</key>/L</value> pair, like one entry in a
-L</hash>.
-
-=item EOF
-
-End of File. Sometimes used metaphorically as the terminating string
-of a L</here document>.
-
-=item errno
-
-The error number returned by a L</syscall> when it fails. Perl refers
-to the error by the name C<$!> (or C<$OS_ERROR> if you use the English
-module).
-
-=item error
-
-See L</exception> or L</fatal error>.
-
-=item escape sequence
-
-See L</metasymbol>.
-
-=item exception
-
-A fancy term for an error. See L</fatal error>.
-
-=item exception handling
-
-The way a program responds to an error. The exception handling
-mechanism in Perl is the L<eval|perlfunc/eval> operator.
-
-=item exec
-
-To throw away the current L</process>'s program and replace it with
-another without exiting the process or relinquishing any resources
-held (apart from the old memory image).
-
-=item executable file
-
-A L</file> that is specially marked to tell the L</operating system>
-that it's okay to run this file as a program. Usually shortened to
-"executable".
-
-=item execute
-
-To run a L<program|/executable file> or L</subroutine>. (Has nothing
-to do with the L<kill|perlfunc/kill> built-in, unless you're trying to
-run a L</signal handler>.)
-
-=item execute bit
-
-The special mark that tells the operating system it can run this
-program. There are actually three execute bits under Unix, and which
-bit gets used depends on whether you own the file singularly,
-collectively, or not at all.
-
-=item exit status
-
-See L</status>.
-
-=item export
-
-To make symbols from a L</module> available for L</import> by other modules.
-
-=item expression
-
-Anything you can legally say in a spot where a L</value> is required.
-Typically composed of L<literals|/literal>, L<variables|/variable>,
-L<operators|/operator>, L<functions|/function>, and L</subroutine>
-calls, not necessarily in that order.
-
-=item extension
-
-A Perl module that also pulls in compiled C or C++ code. More
-generally, any experimental option that can be compiled into Perl,
-such as multithreading.
-
-=back
-
-=head2 F
-
-=over 4
-
-=item false
-
-In Perl, any value that would look like C<""> or C<"0"> if evaluated
-in a string context. Since undefined values evaluate to C<"">, all
-undefined values are false, but not all false values are undefined.
-
-=item FAQ
-
-Frequently Asked Question (although not necessarily frequently
-answered, especially if the answer appears in the Perl FAQ shipped
-standard with Perl).
-
-=item fatal error
-
-An uncaught L</exception>, which causes termination of the L</process>
-after printing a message on your L</standard error> stream. Errors
-that happen inside an L<eval|perlfunc/eval> are not fatal. Instead,
-the L<eval|perlfunc/eval> terminates after placing the exception
-message in the C<$@> (C<$EVAL_ERROR>) variable. You can try to
-provoke a fatal error with the L<die|perlfunc/die> operator (known as
-throwing or raising an exception), but this may be caught by a
-dynamically enclosing L<eval|perlfunc/eval>. If not caught, the
-L<die|perlfunc/die> becomes a fatal error.
-
-=item field
-
-A single piece of numeric or string data that is part of a longer
-L</string>, L</record>, or L</line>. Variable-width fields are usually
-split up by L<separators|/separator> (so use L<split|perlfunc/split> to
-extract the fields), while fixed-width fields are usually at fixed
-positions (so use L<unpack|perlfunc/unpack>). L<Instance
-variables|/instance variable> are also known as fields.
-
-=item FIFO
-
-First In, First Out. See also L</LIFO>. Also, a nickname for a
-L</named pipe>.
-
-=item file
-
-A named collection of data, usually stored on disk in a L</directory>
-in a L</filesystem>. Roughly like a document, if you're into office
-metaphors. In modern filesystems, you can actually give a file more
-than one name. Some files have special properties, like directories
-and devices.
-
-=item file descriptor
-
-The little number the L</operating system> uses to keep track of which
-opened L</file> you're talking about. Perl hides the file descriptor
-inside a L</standard IE<sol>O> stream and then attaches the stream to
-a L</filehandle>.
-
-=item file test operator
-
-A built-in unary operator that you use to determine whether something
-is L</true> about a file, such as C<-o $filename> to test whether
-you're the owner of the file.
-
-=item fileglob
-
-A "wildcard" match on L<filenames|/filename>. See the
-L<glob|perlfunc/glob> function.
-
-=item filehandle
-
-An identifier (not necessarily related to the real name of a file)
-that represents a particular instance of opening a file until you
-close it. If you're going to open and close several different files
-in succession, it's fine to open each of them with the same
-filehandle, so you don't have to write out separate code to process
-each file.
-
-=item filename
-
-One name for a file. This name is listed in a L</directory>, and you
-can use it in an L<open|perlfunc/open> to tell the L</operating
-system> exactly which file you want to open, and associate the file
-with a L</filehandle> which will carry the subsequent identity of that
-file in your program, until you close it.
-
-=item filesystem
-
-A set of L<directories|/directory> and L<files|/file> residing on a
-partition of the disk. Sometimes known as a "partition". You can
-change the file's name or even move a file around from directory to
-directory within a filesystem without actually moving the file itself,
-at least under Unix.
-
-=item filter
-
-A program designed to take a L</stream> of input and transform it into
-a stream of output.
-
-=item flag
-
-We tend to avoid this term because it means so many things. It may
-mean a command-line L</switch> that takes no argument
-itself (such as Perl's B<-n> and B<-p>
-flags) or, less frequently, a single-bit indicator (such as the
-C<O_CREAT> and C<O_EXCL> flags used in
-L<sysopen|perlfunc/sysopen>).
-
-=item floating point
-
-A method of storing numbers in "scientific notation", such that the
-precision of the number is independent of its magnitude (the decimal
-point "floats"). Perl does its numeric work with floating-point
-numbers (sometimes called "floats"), when it can't get away with
-using L<integers|/integer>. Floating-point numbers are mere
-approximations of real numbers.
-
-=item flush
-
-The act of emptying a L</buffer>, often before it's full.
-
-=item FMTEYEWTK
-
-Far More Than Everything You Ever Wanted To Know. An exhaustive
-treatise on one narrow topic, something of a super-L</FAQ>. See Tom
-for far more.
-
-=item fork
-
-To create a child L</process> identical to the parent process at its
-moment of conception, at least until it gets ideas of its own. A
-thread with protected memory.
-
-=item formal arguments
-
-The generic names by which a L</subroutine> knows its
-L<arguments|/argument>. In many languages, formal arguments are
-always given individual names, but in Perl, the formal arguments are
-just the elements of an array. The formal arguments to a Perl program
-are C<$ARGV[0]>, C<$ARGV[1]>, and so on. Similarly, the formal
-arguments to a Perl subroutine are C<$_[0]>, C<$_[1]>, and so on. You
-may give the arguments individual names by assigning the values to a
-L<my|perlfunc/my> list. See also L</actual arguments>.
-
-=item format
-
-A specification of how many spaces and digits and things to put
-somewhere so that whatever you're printing comes out nice and pretty.
-
-=item freely available
-
-Means you don't have to pay money to get it, but the copyright on it
-may still belong to someone else (like Larry).
-
-=item freely redistributable
-
-Means you're not in legal trouble if you give a bootleg copy of it to
-your friends and we find out about it. In fact, we'd rather you gave
-a copy to all your friends.
-
-=item freeware
-
-Historically, any software that you give away, particularly if you
-make the source code available as well. Now often called C<open
-source software>. Recently there has been a trend to use the term in
-contradistinction to L</open source software>, to refer only to free
-software released under the Free Software Foundation's GPL (General
-Public License), but this is difficult to justify etymologically.
-
-=item function
-
-Mathematically, a mapping of each of a set of input values to a
-particular output value. In computers, refers to a L</subroutine> or
-L</operator> that returns a L</value>. It may or may not have input
-values (called L<arguments|/argument>).
-
-=item funny character
-
-Someone like Larry, or one of his peculiar friends. Also refers to
-the strange prefixes that Perl requires as noun markers on its
-variables.
-
-=back
-
-=head2 G
-
-=over 4
-
-=item garbage collection
-
-A misnamed feature--it should be called, "expecting your mother to
-pick up after you". Strictly speaking, Perl doesn't do this, but it
-relies on a reference-counting mechanism to keep things tidy.
-However, we rarely speak strictly and will often refer to the
-reference-counting scheme as a form of garbage collection. (If it's
-any comfort, when your interpreter exits, a "real" garbage collector
-runs to make sure everything is cleaned up if you've been messy with
-circular references and such.)
-
-=item GID
-
-Group ID--in Unix, the numeric group ID that the L</operating system>
-uses to identify you and members of your L</group>.
-
-=item glob
-
-Strictly, the shell's C<*> character, which will match a "glob" of
-characters when you're trying to generate a list of filenames.
-Loosely, the act of using globs and similar symbols to do pattern
-matching. See also L</fileglob> and L</typeglob>.
-
-=item global
-
-Something you can see from anywhere, usually used of
-L<variables|/variable> and L<subroutines|/subroutine> that are visible
-everywhere in your program. In Perl, only certain special variables
-are truly global--most variables (and all subroutines) exist only in
-the current L</package>. Global variables can be declared with
-L<our|perlfunc/our>. See L<perlfunc/our>.
-
-=item global destruction
-
-The L</garbage collection> of globals (and the running of any
-associated object destructors) that takes place when a Perl
-L</interpreter> is being shut down. Global destruction should not be
-confused with the Apocalypse, except perhaps when it should.
-
-=item glue language
-
-A language such as Perl that is good at hooking things together that
-weren't intended to be hooked together.
-
-=item granularity
-
-The size of the pieces you're dealing with, mentally speaking.
-
-=item greedy
-
-A L</subpattern> whose L</quantifier> wants to match as many things as
-possible.
-
-=item grep
-
-Originally from the old Unix editor command for "Globally search for a
-Regular Expression and Print it", now used in the general sense of any
-kind of search, especially text searches. Perl has a built-in
-L<grep|perlfunc/grep> function that searches a list for elements
-matching any given criterion, whereas the I<grep>(1) program searches
-for lines matching a L</regular expression> in one or more files.
-
-=item group
-
-A set of users of which you are a member. In some operating systems
-(like Unix), you can give certain file access permissions to other
-members of your group.
-
-=item GV
-
-An internal "glob value" typedef, holding a L</typeglob>. The L</GV>
-type is a subclass of L</SV>.
-
-=back
-
-=head2 H
-
-=over 4
-
-=item hacker
-
-Someone who is brilliantly persistent in solving technical problems,
-whether these involve golfing, fighting orcs, or programming. Hacker
-is a neutral term, morally speaking. Good hackers are not to be
-confused with evil L<crackers|/cracker> or clueless L<script
-kiddies|/script kiddie>. If you confuse them, we will presume that
-you are either evil or clueless.
-
-=item handler
-
-A L</subroutine> or L</method> that is called by Perl when your
-program needs to respond to some internal event, such as a L</signal>,
-or an encounter with an operator subject to L</operator overloading>.
-See also L</callback>.
-
-=item hard reference
-
-A L</scalar> L</value> containing the actual address of a
-L</referent>, such that the referent's L</reference> count accounts
-for it. (Some hard references are held internally, such as the
-implicit reference from one of a L</typeglob>'s variable slots to its
-corresponding referent.) A hard reference is different from a
-L</symbolic reference>.
-
-=item hash
-
-An unordered association of L</key>/L</value> pairs, stored such that
-you can easily use a string L</key> to look up its associated data
-L</value>. This glossary is like a hash, where the word to be defined
-is the key, and the definition is the value. A hash is also sometimes
-septisyllabically called an "associative array", which is a pretty
-good reason for simply calling it a "hash" instead.
-
-=item hash table
-
-A data structure used internally by Perl for implementing associative
-arrays (hashes) efficiently. See also L</bucket>.
-
-=item header file
-
-A file containing certain required definitions that you must include
-"ahead" of the rest of your program to do certain obscure operations.
-A C header file has a I<.h> extension. Perl doesn't really have
-header files, though historically Perl has sometimes used translated
-I<.h> files with a I<.ph> extension. See L<perlfunc/require>.
-(Header files have been superseded by the L</module> mechanism.)
-
-=item here document
-
-So called because of a similar construct in L<shells|/shell> that
-pretends that the L<lines|/line> following the L</command> are a
-separate L</file> to be fed to the command, up to some terminating
-string. In Perl, however, it's just a fancy form of quoting.
-
-=item hexadecimal
-
-A number in base 16, "hex" for short. The digits for 10 through 16
-are customarily represented by the letters C<a> through C<f>.
-Hexadecimal constants in Perl start with C<0x>. See also
-L<perlfunc/hex>.
-
-=item home directory
-
-The directory you are put into when you log in. On a Unix system, the
-name is often placed into C<$ENV{HOME}> or C<$ENV{LOGDIR}> by
-I<login>, but you can also find it with C<(getpwuid($E<lt>))[7]>.
-(Some platforms do not have a concept of a home directory.)
-
-=item host
-
-The computer on which a program or other data resides.
-
-=item hubris
-
-Excessive pride, the sort of thing Zeus zaps you for. Also the
-quality that makes you write (and maintain) programs that other people
-won't want to say bad things about. Hence, the third great virtue of
-a programmer. See also L</laziness> and L</impatience>.
-
-=item HV
-
-Short for a "hash value" typedef, which holds Perl's internal
-representation of a hash. The L</HV> type is a subclass of L</SV>.
-
-=back
-
-=head2 I
-
-=over 4
-
-=item identifier
-
-A legally formed name for most anything in which a computer program
-might be interested. Many languages (including Perl) allow
-identifiers that start with a letter and contain letters and digits.
-Perl also counts the underscore character as a valid letter. (Perl
-also has more complicated names, such as L</qualified> names.)
-
-=item impatience
-
-The anger you feel when the computer is being lazy. This makes you
-write programs that don't just react to your needs, but actually
-anticipate them. Or at least that pretend to. Hence, the second
-great virtue of a programmer. See also L</laziness> and L</hubris>.
-
-=item implementation
-
-How a piece of code actually goes about doing its job. Users of the
-code should not count on implementation details staying the same
-unless they are part of the published L</interface>.
-
-=item import
-
-To gain access to symbols that are exported from another module. See
-L<perlfunc/use>.
-
-=item increment
-
-To increase the value of something by 1 (or by some other number, if
-so specified).
-
-=item indexing
-
-In olden days, the act of looking up a L</key> in an actual index
-(such as a phone book), but now merely the act of using any kind of
-key or position to find the corresponding L</value>, even if no index
-is involved. Things have degenerated to the point that Perl's
-L<index|perlfunc/index> function merely locates the position (index)
-of one string in another.
-
-=item indirect filehandle
-
-An L</expression> that evaluates to something that can be used as a
-L</filehandle>: a L</string> (filehandle name), a L</typeglob>, a
-typeglob L</reference>, or a low-level L</IO> object.
-
-=item indirect object
-
-In English grammar, a short noun phrase between a verb and its direct
-object indicating the beneficiary or recipient of the action. In
-Perl, C<print STDOUT "$foo\n";> can be understood as "verb
-indirect-object object" where L</STDOUT> is the recipient of the
-L<print|perlfunc/print> action, and C<"$foo"> is the object being
-printed. Similarly, when invoking a L</method>, you might place the
-invocand between the method and its arguments:
-
- $gollum = new Pathetic::Creature "Smeagol";
- give $gollum "Fisssssh!";
- give $gollum "Precious!";
-
-In modern Perl, calling methods this way is often considered bad practice and
-to be avoided.
-
-=item indirect object slot
-
-The syntactic position falling between a method call and its arguments
-when using the indirect object invocation syntax. (The slot is
-distinguished by the absence of a comma between it and the next
-argument.) L</STDERR> is in the indirect object slot here:
-
- print STDERR "Awake! Awake! Fear, Fire,
- Foes! Awake!\n";
-
-=item indirection
-
-If something in a program isn't the value you're looking for but
-indicates where the value is, that's indirection. This can be done
-with either L<symbolic references|/symbolic reference> or L<hard
-references|/hard reference>.
-
-=item infix
-
-An L</operator> that comes in between its L<operands|/operand>, such
-as multiplication in C<24 * 7>.
-
-=item inheritance
-
-What you get from your ancestors, genetically or otherwise. If you
-happen to be a L</class>, your ancestors are called L<base
-classes|/base class> and your descendants are called L<derived
-classes|/derived class>. See L</single inheritance> and L</multiple
-inheritance>.
-
-=item instance
-
-Short for "an instance of a class", meaning an L</object> of that L</class>.
-
-=item instance variable
-
-An L</attribute> of an L</object>; data stored with the particular
-object rather than with the class as a whole.
-
-=item integer
-
-A number with no fractional (decimal) part. A counting number, like
-1, 2, 3, and so on, but including 0 and the negatives.
-
-=item interface
-
-The services a piece of code promises to provide forever, in contrast to
-its L</implementation>, which it should feel free to change whenever it
-likes.
-
-=item interpolation
-
-The insertion of a scalar or list value somewhere in the middle of
-another value, such that it appears to have been there all along. In
-Perl, variable interpolation happens in double-quoted strings and
-patterns, and list interpolation occurs when constructing the list of
-values to pass to a list operator or other such construct that takes a
-L</LIST>.
-
-=item interpreter
-
-Strictly speaking, a program that reads a second program and does what
-the second program says directly without turning the program into a
-different form first, which is what L<compilers|/compiler> do. Perl
-is not an interpreter by this definition, because it contains a kind
-of compiler that takes a program and turns it into a more executable
-form (L<syntax trees|/syntax tree>) within the I<perl> process itself,
-which the Perl L</run time> system then interprets.
-
-=item invocand
-
-The agent on whose behalf a L</method> is invoked. In a L</class>
-method, the invocand is a package name. In an L</instance> method,
-the invocand is an object reference.
-
-=item invocation
-
-The act of calling up a deity, daemon, program, method, subroutine, or
-function to get it do what you think it's supposed to do. We usually
-"call" subroutines but "invoke" methods, since it sounds cooler.
-
-=item I/O
-
-Input from, or output to, a L</file> or L</device>.
-
-=item IO
-
-An internal I/O object. Can also mean L</indirect object>.
-
-=item IP
-
-Internet Protocol, or Intellectual Property.
-
-=item IPC
-
-Interprocess Communication.
-
-=item is-a
-
-A relationship between two L<objects|/object> in which one object is
-considered to be a more specific version of the other, generic object:
-"A camel is a mammal." Since the generic object really only exists in
-a Platonic sense, we usually add a little abstraction to the notion of
-objects and think of the relationship as being between a generic
-L</base class> and a specific L</derived class>. Oddly enough,
-Platonic classes don't always have Platonic relationships--see
-L</inheritance>.
-
-=item iteration
-
-Doing something repeatedly.
-
-=item iterator
-
-A special programming gizmo that keeps track of where you are in
-something that you're trying to iterate over. The C<foreach> loop in
-Perl contains an iterator; so does a hash, allowing you to
-L<each|perlfunc/each> through it.
-
-=item IV
-
-The integer four, not to be confused with six, Tom's favorite editor.
-IV also means an internal Integer Value of the type a L</scalar> can
-hold, not to be confused with an L</NV>.
-
-=back
-
-=head2 J
-
-=over 4
-
-=item JAPH
-
-"Just Another Perl Hacker," a clever but cryptic bit of Perl code that
-when executed, evaluates to that string. Often used to illustrate a
-particular Perl feature, and something of an ongoing Obfuscated Perl
-Contest seen in Usenix signatures.
-
-=back
-
-=head2 K
-
-=over 4
-
-=item key
-
-The string index to a L</hash>, used to look up the L</value>
-associated with that key.
-
-=item keyword
-
-See L</reserved words>.
-
-=back
-
-=head2 L
-
-=over 4
-
-=item label
-
-A name you give to a L</statement> so that you can talk about that
-statement elsewhere in the program.
-
-=item laziness
-
-The quality that makes you go to great effort to reduce overall energy
-expenditure. It makes you write labor-saving programs that other
-people will find useful, and document what you wrote so you don't have
-to answer so many questions about it. Hence, the first great virtue
-of a programmer. Also hence, this book. See also L</impatience> and
-L</hubris>.
-
-=item left shift
-
-A L</bit shift> that multiplies the number by some power of 2.
-
-=item leftmost longest
-
-The preference of the L</regular expression> engine to match the
-leftmost occurrence of a L</pattern>, then given a position at which a
-match will occur, the preference for the longest match (presuming the
-use of a L</greedy> quantifier). See L<perlre> for I<much> more on
-this subject.
-
-=item lexeme
-
-Fancy term for a L</token>.
-
-=item lexer
-
-Fancy term for a L</tokener>.
-
-=item lexical analysis
-
-Fancy term for L</tokenizing>.
-
-=item lexical scoping
-
-Looking at your I<Oxford English Dictionary> through a microscope.
-(Also known as L</static scoping>, because dictionaries don't change
-very fast.) Similarly, looking at variables stored in a private
-dictionary (namespace) for each scope, which are visible only from
-their point of declaration down to the end of the lexical scope in
-which they are declared. --Syn. L</static scoping>.
---Ant. L</dynamic scoping>.
-
-=item lexical variable
-
-A L</variable> subject to L</lexical scoping>, declared by
-L<my|perlfunc/my>. Often just called a "lexical". (The
-L<our|perlfunc/our> declaration declares a lexically scoped name for a
-global variable, which is not itself a lexical variable.)
-
-=item library
-
-Generally, a collection of procedures. In ancient days, referred to a
-collection of subroutines in a I<.pl> file. In modern times, refers
-more often to the entire collection of Perl L<modules|/module> on your
-system.
-
-=item LIFO
-
-Last In, First Out. See also L</FIFO>. A LIFO is usually called a
-L</stack>.
-
-=item line
-
-In Unix, a sequence of zero or more non-newline characters terminated
-with a L</newline> character. On non-Unix machines, this is emulated
-by the C library even if the underlying L</operating system> has
-different ideas.
-
-=item line buffering
-
-Used by a L</standard IE<sol>O> output stream that flushes its
-L</buffer> after every L</newline>. Many standard I/O libraries
-automatically set up line buffering on output that is going to the
-terminal.
-
-=item line number
-
-The number of lines read previous to this one, plus 1. Perl keeps a
-separate line number for each source or input file it opens. The
-current source file's line number is represented by C<__LINE__>. The
-current input line number (for the file that was most recently read
-via C<< E<lt>FHE<gt> >>) is represented by the C<$.>
-(C<$INPUT_LINE_NUMBER>) variable. Many error messages report both
-values, if available.
-
-=item link
-
-Used as a noun, a name in a L</directory>, representing a L</file>. A
-given file can have multiple links to it. It's like having the same
-phone number listed in the phone directory under different names. As
-a verb, to resolve a partially compiled file's unresolved symbols into
-a (nearly) executable image. Linking can generally be static or
-dynamic, which has nothing to do with static or dynamic scoping.
-
-=item LIST
-
-A syntactic construct representing a comma-separated list of
-expressions, evaluated to produce a L</list value>. Each
-L</expression> in a L</LIST> is evaluated in L</list context> and
-interpolated into the list value.
-
-=item list
-
-An ordered set of scalar values.
-
-=item list context
-
-The situation in which an L</expression> is expected by its
-surroundings (the code calling it) to return a list of values rather
-than a single value. Functions that want a L</LIST> of arguments tell
-those arguments that they should produce a list value. See also
-L</context>.
-
-=item list operator
-
-An L</operator> that does something with a list of values, such as
-L<join|perlfunc/join> or L<grep|perlfunc/grep>. Usually used for
-named built-in operators (such as L<print|perlfunc/print>,
-L<unlink|perlfunc/unlink>, and L<system|perlfunc/system>) that do not
-require parentheses around their L</argument> list.
-
-=item list value
-
-An unnamed list of temporary scalar values that may be passed around
-within a program from any list-generating function to any function or
-construct that provides a L</list context>.
-
-=item literal
-
-A token in a programming language such as a number or L</string> that
-gives you an actual L</value> instead of merely representing possible
-values as a L</variable> does.
-
-=item little-endian
-
-From Swift: someone who eats eggs little end first. Also used of
-computers that store the least significant L</byte> of a word at a
-lower byte address than the most significant byte. Often considered
-superior to big-endian machines. See also L</big-endian>.
-
-=item local
-
-Not meaning the same thing everywhere. A global variable in Perl can
-be localized inside a L<dynamic scope|/dynamic scoping> via the
-L<local|perlfunc/local> operator.
-
-=item logical operator
-
-Symbols representing the concepts "and", "or", "xor", and "not".
-
-=item lookahead
-
-An L</assertion> that peeks at the string to the right of the current
-match location.
-
-=item lookbehind
-
-An L</assertion> that peeks at the string to the left of the current
-match location.
-
-=item loop
-
-A construct that performs something repeatedly, like a roller coaster.
-
-=item loop control statement
-
-Any statement within the body of a loop that can make a loop
-prematurely stop looping or skip an L</iteration>. Generally you
-shouldn't try this on roller coasters.
-
-=item loop label
-
-A kind of key or name attached to a loop (or roller coaster) so that
-loop control statements can talk about which loop they want to
-control.
-
-=item lvaluable
-
-Able to serve as an L</lvalue>.
-
-=item lvalue
-
-Term used by language lawyers for a storage location you can assign a
-new L</value> to, such as a L</variable> or an element of an
-L</array>. The "l" is short for "left", as in the left side of an
-assignment, a typical place for lvalues. An L</lvaluable> function or
-expression is one to which a value may be assigned, as in C<pos($x) =
-10>.
-
-=item lvalue modifier
-
-An adjectival pseudofunction that warps the meaning of an L</lvalue>
-in some declarative fashion. Currently there are three lvalue
-modifiers: L<my|perlfunc/my>, L<our|perlfunc/our>, and
-L<local|perlfunc/local>.
-
-=back
-
-=head2 M
-
-=over 4
-
-=item magic
-
-Technically speaking, any extra semantics attached to a variable such
-as C<$!>, C<$0>, C<%ENV>, or C<%SIG>, or to any tied variable.
-Magical things happen when you diddle those variables.
-
-=item magical increment
-
-An L</increment> operator that knows how to bump up alphabetics as
-well as numbers.
-
-=item magical variables
-
-Special variables that have side effects when you access them or
-assign to them. For example, in Perl, changing elements of the
-C<%ENV> array also changes the corresponding environment variables
-that subprocesses will use. Reading the C<$!> variable gives you the
-current system error number or message.
-
-=item Makefile
-
-A file that controls the compilation of a program. Perl programs
-don't usually need a L</Makefile> because the Perl compiler has plenty
-of self-control.
-
-=item man
-
-The Unix program that displays online documentation (manual pages) for
-you.
-
-=item manpage
-
-A "page" from the manuals, typically accessed via the I<man>(1)
-command. A manpage contains a SYNOPSIS, a DESCRIPTION, a list of
-BUGS, and so on, and is typically longer than a page. There are
-manpages documenting L<commands|/command>, L<syscalls|/syscall>,
-L</library> L<functions|/function>, L<devices|/device>,
-L<protocols|/protocol>, L<files|/file>, and such. In this book, we
-call any piece of standard Perl documentation (like I<perlop> or
-I<perldelta>) a manpage, no matter what format it's installed in on
-your system.
-
-=item matching
-
-See L</pattern matching>.
-
-=item member data
-
-See L</instance variable>.
-
-=item memory
-
-This always means your main memory, not your disk. Clouding the issue
-is the fact that your machine may implement L</virtual> memory; that
-is, it will pretend that it has more memory than it really does, and
-it'll use disk space to hold inactive bits. This can make it seem
-like you have a little more memory than you really do, but it's not a
-substitute for real memory. The best thing that can be said about
-virtual memory is that it lets your performance degrade gradually
-rather than suddenly when you run out of real memory. But your
-program can die when you run out of virtual memory too, if you haven't
-thrashed your disk to death first.
-
-=item metacharacter
-
-A L</character> that is I<not> supposed to be treated normally. Which
-characters are to be treated specially as metacharacters varies
-greatly from context to context. Your L</shell> will have certain
-metacharacters, double-quoted Perl L<strings|/string> have other
-metacharacters, and L</regular expression> patterns have all the
-double-quote metacharacters plus some extra ones of their own.
-
-=item metasymbol
-
-Something we'd call a L</metacharacter> except that it's a sequence of
-more than one character. Generally, the first character in the
-sequence must be a true metacharacter to get the other characters in
-the metasymbol to misbehave along with it.
-
-=item method
-
-A kind of action that an L</object> can take if you tell it to. See
-L<perlobj>.
-
-=item minimalism
-
-The belief that "small is beautiful." Paradoxically, if you say
-something in a small language, it turns out big, and if you say it in
-a big language, it turns out small. Go figure.
-
-=item mode
-
-In the context of the L<stat> syscall, refers to the field holding
-the L</permission bits> and the type of the L</file>.
-
-=item modifier
-
-See L</statement modifier>, L</regular expression modifier>, and
-L</lvalue modifier>, not necessarily in that order.
-
-=item module
-
-A L</file> that defines a L</package> of (almost) the same name, which
-can either L</export> symbols or function as an L</object> class. (A
-module's main I<.pm> file may also load in other files in support of
-the module.) See the L<use|perlfunc/use> built-in.
-
-=item modulus
-
-An integer divisor when you're interested in the remainder instead of
-the quotient.
-
-=item monger
-
-Short for Perl Monger, a purveyor of Perl.
-
-=item mortal
-
-A temporary value scheduled to die when the current statement
-finishes.
-
-=item multidimensional array
-
-An array with multiple subscripts for finding a single element. Perl
-implements these using L<references|/reference>--see L<perllol> and
-L<perldsc>.
-
-=item multiple inheritance
-
-The features you got from your mother and father, mixed together
-unpredictably. (See also L</inheritance>, and L</single
-inheritance>.) In computer languages (including Perl), the notion
-that a given class may have multiple direct ancestors or L<base
-classes|/base class>.
-
-=back
-
-=head2 N
-
-=over 4
-
-=item named pipe
-
-A L</pipe> with a name embedded in the L</filesystem> so that it can
-be accessed by two unrelated L<processes|/process>.
-
-=item namespace
-
-A domain of names. You needn't worry about whether the names in one
-such domain have been used in another. See L</package>.
-
-=item network address
-
-The most important attribute of a socket, like your telephone's
-telephone number. Typically an IP address. See also L</port>.
-
-=item newline
-
-A single character that represents the end of a line, with the ASCII
-value of 012 octal under Unix (but 015 on a Mac), and represented by
-C<\n> in Perl strings. For Windows machines writing text files, and
-for certain physical devices like terminals, the single newline gets
-automatically translated by your C library into a line feed and a
-carriage return, but normally, no translation is done.
-
-=item NFS
-
-Network File System, which allows you to mount a remote filesystem as
-if it were local.
-
-=item null character
-
-A character with the ASCII value of zero. It's used by C to terminate
-strings, but Perl allows strings to contain a null.
-
-=item null list
-
-A L</list value> with zero elements, represented in Perl by C<()>.
-
-=item null string
-
-A L</string> containing no characters, not to be confused with a
-string containing a L</null character>, which has a positive length
-and is L</true>.
-
-=item numeric context
-
-The situation in which an expression is expected by its surroundings
-(the code calling it) to return a number. See also L</context> and
-L</string context>.
-
-=item NV
-
-Short for Nevada, no part of which will ever be confused with
-civilization. NV also means an internal floating-point Numeric Value
-of the type a L</scalar> can hold, not to be confused with an L</IV>.
-
-=item nybble
-
-Half a L</byte>, equivalent to one L</hexadecimal> digit, and worth
-four L<bits|/bit>.
-
-=back
-
-=head2 O
-
-=over 4
-
-=item object
-
-An L</instance> of a L</class>. Something that "knows" what
-user-defined type (class) it is, and what it can do because of what
-class it is. Your program can request an object to do things, but the
-object gets to decide whether it wants to do them or not. Some
-objects are more accommodating than others.
-
-=item octal
-
-A number in base 8. Only the digits 0 through 7 are allowed. Octal
-constants in Perl start with 0, as in 013. See also the
-L<oct|perlfunc/oct> function.
-
-=item offset
-
-How many things you have to skip over when moving from the beginning
-of a string or array to a specific position within it. Thus, the
-minimum offset is zero, not one, because you don't skip anything to
-get to the first item.
-
-=item one-liner
-
-An entire computer program crammed into one line of text.
-
-=item open source software
-
-Programs for which the source code is freely available and freely
-redistributable, with no commercial strings attached. For a more
-detailed definition, see L<http://www.opensource.org/osd.html>.
-
-=item operand
-
-An L</expression> that yields a L</value> that an L</operator>
-operates on. See also L</precedence>.
-
-=item operating system
-
-A special program that runs on the bare machine and hides the gory
-details of managing L<processes|/process> and L<devices|/device>.
-Usually used in a looser sense to indicate a particular culture of
-programming. The loose sense can be used at varying levels of
-specificity. At one extreme, you might say that all versions of Unix
-and Unix-lookalikes are the same operating system (upsetting many
-people, especially lawyers and other advocates). At the other
-extreme, you could say this particular version of this particular
-vendor's operating system is different from any other version of this
-or any other vendor's operating system. Perl is much more portable
-across operating systems than many other languages. See also
-L</architecture> and L</platform>.
-
-=item operator
-
-A gizmo that transforms some number of input values to some number of
-output values, often built into a language with a special syntax or
-symbol. A given operator may have specific expectations about what
-L<types|/type> of data you give as its arguments
-(L<operands|/operand>) and what type of data you want back from it.
-
-=item operator overloading
-
-A kind of L</overloading> that you can do on built-in
-L<operators|/operator> to make them work on L<objects|/object> as if
-the objects were ordinary scalar values, but with the actual semantics
-supplied by the object class. This is set up with the L<overload>
-L</pragma>.
-
-=item options
-
-See either L<switches|/switch> or L</regular expression modifier>.
-
-=item ordinal
-
-Another name for L</code point>
-
-=item overloading
-
-Giving additional meanings to a symbol or construct. Actually, all
-languages do overloading to one extent or another, since people are
-good at figuring out things from L</context>.
-
-=item overriding
-
-Hiding or invalidating some other definition of the same name. (Not
-to be confused with L</overloading>, which adds definitions that must
-be disambiguated some other way.) To confuse the issue further, we use
-the word with two overloaded definitions: to describe how you can
-define your own L</subroutine> to hide a built-in L</function> of the
-same name (see L<perlsub/Overriding Built-in Functions>) and to
-describe how you can define a replacement L</method> in a L</derived
-class> to hide a L</base class>'s method of the same name (see
-L<perlobj>).
-
-=item owner
-
-The one user (apart from the superuser) who has absolute control over
-a L</file>. A file may also have a L</group> of users who may
-exercise joint ownership if the real owner permits it. See
-L</permission bits>.
-
-=back
-
-=head2 P
-
-=over 4
-
-=item package
-
-A L</namespace> for global L<variables|/variable>,
-L<subroutines|/subroutine>, and the like, such that they can be kept
-separate from like-named L<symbols|/symbol> in other namespaces. In a
-sense, only the package is global, since the symbols in the package's
-symbol table are only accessible from code compiled outside the
-package by naming the package. But in another sense, all package
-symbols are also globals--they're just well-organized globals.
-
-=item pad
-
-Short for L</scratchpad>.
-
-=item parameter
-
-See L</argument>.
-
-=item parent class
-
-See L</base class>.
-
-=item parse tree
-
-See L</syntax tree>.
-
-=item parsing
-
-The subtle but sometimes brutal art of attempting to turn your
-possibly malformed program into a valid L</syntax tree>.
-
-=item patch
-
-To fix by applying one, as it were. In the realm of hackerdom, a
-listing of the differences between two versions of a program as might
-be applied by the I<patch>(1) program when you want to fix a bug or
-upgrade your old version.
-
-=item PATH
-
-The list of L<directories|/directory> the system searches to find a
-program you want to L</execute>. The list is stored as one of your
-L<environment variables|/environment variable>, accessible in Perl as
-C<$ENV{PATH}>.
-
-=item pathname
-
-A fully qualified filename such as I</usr/bin/perl>. Sometimes
-confused with L</PATH>.
-
-=item pattern
-
-A template used in L</pattern matching>.
-
-=item pattern matching
-
-Taking a pattern, usually a L</regular expression>, and trying the
-pattern various ways on a string to see whether there's any way to
-make it fit. Often used to pick interesting tidbits out of a file.
-
-=item permission bits
-
-Bits that the L</owner> of a file sets or unsets to allow or disallow
-access to other people. These flag bits are part of the L</mode> word
-returned by the L<stat|perlfunc/stat> built-in when you ask about a
-file. On Unix systems, you can check the I<ls>(1) manpage for more
-information.
-
-=item Pern
-
-What you get when you do C<Perl++> twice. Doing it only once will
-curl your hair. You have to increment it eight times to shampoo your
-hair. Lather, rinse, iterate.
-
-=item pipe
-
-A direct L</connection> that carries the output of one L</process> to
-the input of another without an intermediate temporary file. Once the
-pipe is set up, the two processes in question can read and write as if
-they were talking to a normal file, with some caveats.
-
-=item pipeline
-
-A series of L<processes|/process> all in a row, linked by
-L<pipes|/pipe>, where each passes its output stream to the next.
-
-=item platform
-
-The entire hardware and software context in which a program runs. A
- program written in a platform-dependent language might break if you
-change any of: machine, operating system, libraries, compiler, or
-system configuration. The I<perl> interpreter has to be compiled
-differently for each platform because it is implemented in C, but
-programs written in the Perl language are largely
-platform-independent.
-
-=item pod
-
-The markup used to embed documentation into your Perl code. See
-L<perlpod>.
-
-=item pointer
-
-A L</variable> in a language like C that contains the exact memory
-location of some other item. Perl handles pointers internally so you
-don't have to worry about them. Instead, you just use symbolic
-pointers in the form of L<keys|/key> and L</variable> names, or L<hard
-references|/hard reference>, which aren't pointers (but act like
-pointers and do in fact contain pointers).
-
-=item polymorphism
-
-The notion that you can tell an L</object> to do something generic,
-and the object will interpret the command in different ways depending
-on its type. [E<lt>Gk many shapes]
-
-=item port
-
-The part of the address of a TCP or UDP socket that directs packets to
-the correct process after finding the right machine, something like
-the phone extension you give when you reach the company operator.
-Also, the result of converting code to run on a different platform
-than originally intended, or the verb denoting this conversion.
-
-=item portable
-
-Once upon a time, C code compilable under both BSD and SysV. In
-general, code that can be easily converted to run on another
-L</platform>, where "easily" can be defined however you like, and
-usually is. Anything may be considered portable if you try hard
-enough. See I<mobile home> or I<London Bridge>.
-
-=item porter
-
-Someone who "carries" software from one L</platform> to another.
-Porting programs written in platform-dependent languages such as C can
-be difficult work, but porting programs like Perl is very much worth
-the agony.
-
-=item POSIX
-
-The Portable Operating System Interface specification.
-
-=item postfix
-
-An L</operator> that follows its L</operand>, as in C<$x++>.
-
-=item pp
-
-An internal shorthand for a "push-pop" code, that is, C code
-implementing Perl's stack machine.
-
-=item pragma
-
-A standard module whose practical hints and suggestions are received
-(and possibly ignored) at compile time. Pragmas are named in all
-lowercase.
-
-=item precedence
-
-The rules of conduct that, in the absence of other guidance, determine
-what should happen first. For example, in the absence of parentheses,
-you always do multiplication before addition.
-
-=item prefix
-
-An L</operator> that precedes its L</operand>, as in C<++$x>.
-
-=item preprocessing
-
-What some helper L</process> did to transform the incoming data into a
-form more suitable for the current process. Often done with an
-incoming L</pipe>. See also L</C preprocessor>.
-
-=item procedure
-
-A L</subroutine>.
-
-=item process
-
-An instance of a running program. Under multitasking systems like
-Unix, two or more separate processes could be running the same program
-independently at the same time--in fact, the L<fork|perlfunc/fork>
-function is designed to bring about this happy state of affairs.
-Under other operating systems, processes are sometimes called
-"threads", "tasks", or "jobs", often with slight nuances in meaning.
-
-=item program generator
-
-A system that algorithmically writes code for you in a high-level
-language. See also L</code generator>.
-
-=item progressive matching
-
-L<Pattern matching|/pattern matching> that picks up where it left off before.
-
-=item property
-
-See either L</instance variable> or L</character property>.
-
-=item protocol
-
-In networking, an agreed-upon way of sending messages back and forth
-so that neither correspondent will get too confused.
-
-=item prototype
-
-An optional part of a L</subroutine> declaration telling the Perl
-compiler how many and what flavor of arguments may be passed as
-L</actual arguments>, so that you can write subroutine calls that
-parse much like built-in functions. (Or don't parse, as the case may
-be.)
-
-=item pseudofunction
-
-A construct that sometimes looks like a function but really isn't.
-Usually reserved for L</lvalue> modifiers like L<my|perlfunc/my>, for
-L</context> modifiers like L<scalar|perlfunc/scalar>, and for the
-pick-your-own-quotes constructs, C<q//>, C<qq//>, C<qx//>, C<qw//>,
-C<qr//>, C<m//>, C<s///>, C<y///>, and C<tr///>.
-
-=item pseudohash
-
-A reference to an array whose initial element happens to hold a
-reference to a hash. You can treat a pseudohash reference as either
-an array reference or a hash reference.
-
-=item pseudoliteral
-
-An L</operator> that looks something like a L</literal>, such as the
-output-grabbing operator, C<`>I<C<command>>C<`>.
-
-=item public domain
-
-Something not owned by anybody. Perl is copyrighted and is thus
-I<not> in the public domain--it's just L</freely available> and
-L</freely redistributable>.
-
-=item pumpkin
-
-A notional "baton" handed around the Perl community indicating who is
-the lead integrator in some arena of development.
-
-=item pumpking
-
-A L</pumpkin> holder, the person in charge of pumping the pump, or at
-least priming it. Must be willing to play the part of the Great
-Pumpkin now and then.
-
-=item PV
-
-A "pointer value", which is Perl Internals Talk for a C<char*>.
-
-=back
-
-=head2 Q
-
-=over 4
-
-=item qualified
-
-Possessing a complete name. The symbol C<$Ent::moot> is qualified;
-C<$moot> is unqualified. A fully qualified filename is specified from
-the top-level directory.
-
-=item quantifier
-
-A component of a L</regular expression> specifying how many times the
-foregoing L</atom> may occur.
-
-=back
-
-=head2 R
-
-=over 4
-
-=item readable
-
-With respect to files, one that has the proper permission bit set to
-let you access the file. With respect to computer programs, one
-that's written well enough that someone has a chance of figuring out
-what it's trying to do.
-
-=item reaping
-
-The last rites performed by a parent L</process> on behalf of a
-deceased child process so that it doesn't remain a L</zombie>. See
-the L<wait|perlfunc/wait> and L<waitpid|perlfunc/waitpid> function
-calls.
-
-=item record
-
-A set of related data values in a L</file> or L</stream>, often
-associated with a unique L</key> field. In Unix, often commensurate
-with a L</line>, or a blank-line-terminated set of lines (a
-"paragraph"). Each line of the I</etc/passwd> file is a record, keyed
-on login name, containing information about that user.
-
-=item recursion
-
-The art of defining something (at least partly) in terms of itself,
-which is a naughty no-no in dictionaries but often works out okay in
-computer programs if you're careful not to recurse forever, which is
-like an infinite loop with more spectacular failure modes.
-
-=item reference
-
-Where you look to find a pointer to information somewhere else. (See
-L</indirection>.) References come in two flavors, L<symbolic
-references|/symbolic reference> and L<hard references|/hard
-reference>.
-
-=item referent
-
-Whatever a reference refers to, which may or may not have a name.
-Common types of referents include scalars, arrays, hashes, and
-subroutines.
-
-=item regex
-
-See L</regular expression>.
-
-=item regular expression
-
-A single entity with various interpretations, like an elephant. To a
-computer scientist, it's a grammar for a little language in which some
-strings are legal and others aren't. To normal people, it's a pattern
-you can use to find what you're looking for when it varies from case
-to case. Perl's regular expressions are far from regular in the
-theoretical sense, but in regular use they work quite well. Here's a
-regular expression: C</Oh s.*t./>. This will match strings like "C<Oh
-say can you see by the dawn's early light>" and "C<Oh sit!>". See
-L<perlre>.
-
-=item regular expression modifier
-
-An option on a pattern or substitution, such as C</i> to render the
-pattern case insensitive. See also L</cloister>.
-
-=item regular file
-
-A L</file> that's not a L</directory>, a L</device>, a named L</pipe>
-or L</socket>, or a L</symbolic link>. Perl uses the C<-f> file test
-operator to identify regular files. Sometimes called a "plain" file.
-
-=item relational operator
-
-An L</operator> that says whether a particular ordering relationship
-is L</true> about a pair of L<operands|/operand>. Perl has both
-numeric and string relational operators. See L</collating sequence>.
-
-=item reserved words
-
-A word with a specific, built-in meaning to a L</compiler>, such as
-C<if> or L<delete|perlfunc/delete>. In many languages (not Perl),
-it's illegal to use reserved words to name anything else. (Which is
-why they're reserved, after all.) In Perl, you just can't use them to
-name L<labels|/label> or L<filehandles|/filehandle>. Also called
-"keywords".
-
-=item return value
-
-The L</value> produced by a L</subroutine> or L</expression> when
-evaluated. In Perl, a return value may be either a L</list> or a
-L</scalar>.
-
-=item RFC
-
-Request For Comment, which despite the timid connotations is the name
-of a series of important standards documents.
-
-=item right shift
-
-A L</bit shift> that divides a number by some power of 2.
-
-=item root
-
-The superuser (UID == 0). Also, the top-level directory of the
-filesystem.
-
-=item RTFM
-
-What you are told when someone thinks you should Read The Fine Manual.
-
-=item run phase
-
-Any time after Perl starts running your main program. See also
-L</compile phase>. Run phase is mostly spent in L</run time> but may
-also be spent in L</compile time> when L<require|perlfunc/require>,
-L<do|perlfunc/do> C<FILE>, or L<eval|perlfunc/eval> C<STRING>
-operators are executed or when a substitution uses the C</ee>
-modifier.
-
-=item run time
-
-The time when Perl is actually doing what your code says to do, as
-opposed to the earlier period of time when it was trying to figure out
-whether what you said made any sense whatsoever, which is L</compile
-time>.
-
-=item run-time pattern
-
-A pattern that contains one or more variables to be interpolated
-before parsing the pattern as a L</regular expression>, and that
-therefore cannot be analyzed at compile time, but must be re-analyzed
-each time the pattern match operator is evaluated. Run-time patterns
-are useful but expensive.
-
-=item RV
-
-A recreational vehicle, not to be confused with vehicular recreation.
-RV also means an internal Reference Value of the type a L</scalar> can
-hold. See also L</IV> and L</NV> if you're not confused yet.
-
-=item rvalue
-
-A L</value> that you might find on the right side of an
-L</assignment>. See also L</lvalue>.
-
-=back
-
-=head2 S
-
-=over 4
-
-=item scalar
-
-A simple, singular value; a number, L</string>, or L</reference>.
-
-=item scalar context
-
-The situation in which an L</expression> is expected by its
-surroundings (the code calling it) to return a single L</value> rather
-than a L</list> of values. See also L</context> and L</list context>.
-A scalar context sometimes imposes additional constraints on the
-return value--see L</string context> and L</numeric context>.
-Sometimes we talk about a L</Boolean context> inside conditionals, but
-this imposes no additional constraints, since any scalar value,
-whether numeric or L</string>, is already true or false.
-
-=item scalar literal
-
-A number or quoted L</string>--an actual L</value> in the text of your
-program, as opposed to a L</variable>.
-
-=item scalar value
-
-A value that happens to be a L</scalar> as opposed to a L</list>.
-
-=item scalar variable
-
-A L</variable> prefixed with C<$> that holds a single value.
-
-=item scope
-
-How far away you can see a variable from, looking through one. Perl
-has two visibility mechanisms: it does L</dynamic scoping> of
-L<local|perlfunc/local> L<variables|/variable>, meaning that the rest
-of the L</block>, and any L<subroutines|/subroutine> that are called
-by the rest of the block, can see the variables that are local to the
-block. Perl does L</lexical scoping> of L<my|perlfunc/my> variables,
-meaning that the rest of the block can see the variable, but other
-subroutines called by the block I<cannot> see the variable.
-
-=item scratchpad
-
-The area in which a particular invocation of a particular file or
-subroutine keeps some of its temporary values, including any lexically
-scoped variables.
-
-=item script
-
-A text L</file> that is a program intended to be L<executed|/execute>
-directly rather than L<compiled|/compiler> to another form of file
-before execution. Also, in the context of L</Unicode>, a writing
-system for a particular language or group of languages, such as Greek,
-Bengali, or Klingon.
-
-=item script kiddie
-
-A L</cracker> who is not a L</hacker>, but knows just enough to run
-canned scripts. A cargo-cult programmer.
-
-=item sed
-
-A venerable Stream EDitor from which Perl derives some of its ideas.
-
-=item semaphore
-
-A fancy kind of interlock that prevents multiple L<threads|/thread> or
-L<processes|/process> from using up the same resources simultaneously.
-
-=item separator
-
-A L</character> or L</string> that keeps two surrounding strings from
-being confused with each other. The L<split|perlfunc/split> function
-works on separators. Not to be confused with L<delimiters|/delimiter>
-or L<terminators|/terminator>. The "or" in the previous sentence
-separated the two alternatives.
-
-=item serialization
-
-Putting a fancy L</data structure> into linear order so that it can be
-stored as a L</string> in a disk file or database or sent through a
-L</pipe>. Also called marshalling.
-
-=item server
-
-In networking, a L</process> that either advertises a L</service> or
-just hangs around at a known location and waits for L<clients|/client>
-who need service to get in touch with it.
-
-=item service
-
-Something you do for someone else to make them happy, like giving them
-the time of day (or of their life). On some machines, well-known
-services are listed by the L<getservent|perlfunc/getservent> function.
-
-=item setgid
-
-Same as L</setuid>, only having to do with giving away L</group>
-privileges.
-
-=item setuid
-
-Said of a program that runs with the privileges of its L</owner>
-rather than (as is usually the case) the privileges of whoever is
-running it. Also describes the bit in the mode word (L</permission
-bits>) that controls the feature. This bit must be explicitly set by
-the owner to enable this feature, and the program must be carefully
-written not to give away more privileges than it ought to.
-
-=item shared memory
-
-A piece of L</memory> accessible by two different
-L<processes|/process> who otherwise would not see each other's memory.
-
-=item shebang
-
-Irish for the whole McGillicuddy. In Perl culture, a portmanteau of
-"sharp" and "bang", meaning the C<#!> sequence that tells the system
-where to find the interpreter.
-
-=item shell
-
-A L</command>-line L</interpreter>. The program that interactively
-gives you a prompt, accepts one or more L<lines|/line> of input, and
-executes the programs you mentioned, feeding each of them their proper
-L<arguments|/argument> and input data. Shells can also execute
-scripts containing such commands. Under Unix, typical shells include
-the Bourne shell (I</bin/sh>), the C shell (I</bin/csh>), and the Korn
-shell (I</bin/ksh>). Perl is not strictly a shell because it's not
-interactive (although Perl programs can be interactive).
-
-=item side effects
-
-Something extra that happens when you evaluate an L</expression>.
-Nowadays it can refer to almost anything. For example, evaluating a
-simple assignment statement typically has the "side effect" of
-assigning a value to a variable. (And you thought assigning the value
-was your primary intent in the first place!) Likewise, assigning a
-value to the special variable C<$|> (C<$AUTOFLUSH>) has the side
-effect of forcing a flush after every L<write|perlfunc/write> or
-L<print|perlfunc/print> on the currently selected filehandle.
-
-=item signal
-
-A bolt out of the blue; that is, an event triggered by the
-L</operating system>, probably when you're least expecting it.
-
-=item signal handler
-
-A L</subroutine> that, instead of being content to be called in the
-normal fashion, sits around waiting for a bolt out of the blue before
-it will deign to L</execute>. Under Perl, bolts out of the blue are
-called signals, and you send them with the L<kill|perlfunc/kill>
-built-in. See L<perlvar/%SIG> and L<perlipc/Signals>.
-
-=item single inheritance
-
-The features you got from your mother, if she told you that you don't
-have a father. (See also L</inheritance> and L</multiple
-inheritance>.) In computer languages, the notion that
-L<classes|/class> reproduce asexually so that a given class can only
-have one direct ancestor or L</base class>. Perl supplies no such
-restriction, though you may certainly program Perl that way if you
-like.
-
-=item slice
-
-A selection of any number of L<elements|/element> from a L</list>,
-L</array>, or L</hash>.
-
-=item slurp
-
-To read an entire L</file> into a L</string> in one operation.
-
-=item socket
-
-An endpoint for network communication among multiple
-L<processes|/process> that works much like a telephone or a post
-office box. The most important thing about a socket is its L</network
-address> (like a phone number). Different kinds of sockets have
-different kinds of addresses--some look like filenames, and some
-don't.
-
-=item soft reference
-
-See L</symbolic reference>.
-
-=item source filter
-
-A special kind of L</module> that does L</preprocessing> on your
-script just before it gets to the L</tokener>.
-
-=item stack
-
-A device you can put things on the top of, and later take them back
-off in the opposite order in which you put them on. See L</LIFO>.
-
-=item standard
-
-Included in the official Perl distribution, as in a standard module, a
-standard tool, or a standard Perl L</manpage>.
-
-=item standard error
-
-The default output L</stream> for nasty remarks that don't belong in
-L</standard output>. Represented within a Perl program by the
-L</filehandle> L</STDERR>. You can use this stream explicitly, but the
-L<die|perlfunc/die> and L<warn|perlfunc/warn> built-ins write to your
-standard error stream automatically.
-
-=item standard I/O
-
-A standard C library for doing L<buffered|/buffer> input and output to
-the L</operating system>. (The "standard" of standard I/O is only
-marginally related to the "standard" of standard input and output.)
-In general, Perl relies on whatever implementation of standard I/O a
-given operating system supplies, so the buffering characteristics of a
-Perl program on one machine may not exactly match those on another
-machine. Normally this only influences efficiency, not semantics. If
-your standard I/O package is doing block buffering and you want it to
-L</flush> the buffer more often, just set the C<$|> variable to a true
-value.
-
-=item standard input
-
-The default input L</stream> for your program, which if possible
-shouldn't care where its data is coming from. Represented within a
-Perl program by the L</filehandle> L</STDIN>.
-
-=item standard output
-
-The default output L</stream> for your program, which if possible
-shouldn't care where its data is going. Represented within a Perl
-program by the L</filehandle> L</STDOUT>.
-
-=item stat structure
-
-A special internal spot in which Perl keeps the information about the
-last L</file> on which you requested information.
-
-=item statement
-
-A L</command> to the computer about what to do next, like a step in a
-recipe: "Add marmalade to batter and mix until mixed." A statement is
-distinguished from a L</declaration>, which doesn't tell the computer
-to do anything, but just to learn something.
-
-=item statement modifier
-
-A L</conditional> or L</loop> that you put after the L</statement>
-instead of before, if you know what we mean.
-
-=item static
-
-Varying slowly compared to something else. (Unfortunately, everything
-is relatively stable compared to something else, except for certain
-elementary particles, and we're not so sure about them.) In
-computers, where things are supposed to vary rapidly, "static" has a
-derogatory connotation, indicating a slightly dysfunctional
-L</variable>, L</subroutine>, or L</method>. In Perl culture, the
-word is politely avoided.
-
-=item static method
-
-No such thing. See L</class method>.
-
-=item static scoping
-
-No such thing. See L</lexical scoping>.
-
-=item static variable
-
-No such thing. Just use a L</lexical variable> in a scope larger than
-your L</subroutine>.
-
-=item status
-
-The L</value> returned to the parent L</process> when one of its child
-processes dies. This value is placed in the special variable C<$?>.
-Its upper eight L<bits|/bit> are the exit status of the defunct
-process, and its lower eight bits identify the signal (if any) that
-the process died from. On Unix systems, this status value is the same
-as the status word returned by I<wait>(2). See L<perlfunc/system>.
-
-=item STDERR
-
-See L</standard error>.
-
-=item STDIN
-
-See L</standard input>.
-
-=item STDIO
-
-See L</standard IE<sol>O>.
-
-=item STDOUT
-
-See L</standard output>.
-
-=item stream
-
-A flow of data into or out of a process as a steady sequence of bytes
-or characters, without the appearance of being broken up into packets.
-This is a kind of L</interface>--the underlying L</implementation> may
-well break your data up into separate packets for delivery, but this
-is hidden from you.
-
-=item string
-
-A sequence of characters such as "He said !@#*&%@#*?!". A string does
-not have to be entirely printable.
-
-=item string context
-
-The situation in which an expression is expected by its surroundings
-(the code calling it) to return a L</string>. See also L</context>
-and L</numeric context>.
-
-=item stringification
-
-The process of producing a L</string> representation of an abstract
-object.
-
-=item struct
-
-C keyword introducing a structure definition or name.
-
-=item structure
-
-See L</data structure>.
-
-=item subclass
-
-See L</derived class>.
-
-=item subpattern
-
-A component of a L</regular expression> pattern.
-
-=item subroutine
-
-A named or otherwise accessible piece of program that can be invoked
-from elsewhere in the program in order to accomplish some sub-goal of
-the program. A subroutine is often parameterized to accomplish
-different but related things depending on its input
-L<arguments|/argument>. If the subroutine returns a meaningful
-L</value>, it is also called a L</function>.
-
-=item subscript
-
-A L</value> that indicates the position of a particular L</array>
-L</element> in an array.
-
-=item substitution
-
-Changing parts of a string via the C<s///> operator. (We avoid use of
-this term to mean L</variable interpolation>.)
-
-=item substring
-
-A portion of a L</string>, starting at a certain L</character>
-position (L</offset>) and proceeding for a certain number of
-characters.
-
-=item superclass
-
-See L</base class>.
-
-=item superuser
-
-The person whom the L</operating system> will let do almost anything.
-Typically your system administrator or someone pretending to be your
-system administrator. On Unix systems, the L</root> user. On Windows
-systems, usually the Administrator user.
-
-=item SV
-
-Short for "scalar value". But within the Perl interpreter every
-L</referent> is treated as a member of a class derived from SV, in an
-object-oriented sort of way. Every L</value> inside Perl is passed
-around as a C language C<SV*> pointer. The SV L</struct> knows its
-own "referent type", and the code is smart enough (we hope) not to try
-to call a L</hash> function on a L</subroutine>.
-
-=item switch
-
-An option you give on a command line to influence the way your program
-works, usually introduced with a minus sign. The word is also used as
-a nickname for a L</switch statement>.
-
-=item switch cluster
-
-The combination of multiple command-line switches (e.g., B<-a -b -c>)
-into one switch (e.g., B<-abc>). Any switch with an additional
-L</argument> must be the last switch in a cluster.
-
-=item switch statement
-
-A program technique that lets you evaluate an L</expression> and then,
-based on the value of the expression, do a multiway branch to the
-appropriate piece of code for that value. Also called a "case
-structure", named after the similar Pascal construct. See
-L<perlsyn/"Switch statements">.
-
-=item symbol
-
-Generally, any L</token> or L</metasymbol>. Often used more
-specifically to mean the sort of name you might find in a L</symbol
-table>.
-
-=item symbol table
-
-Where a L</compiler> remembers symbols. A program like Perl must
-somehow remember all the names of all the L<variables|/variable>,
-L<filehandles|/filehandle>, and L<subroutines|/subroutine> you've
-used. It does this by placing the names in a symbol table, which is
-implemented in Perl using a L</hash table>. There is a separate
-symbol table for each L</package> to give each package its own
-L</namespace>.
-
-=item symbolic debugger
-
-A program that lets you step through the L<execution|/execute> of your
-program, stopping or printing things out here and there to see whether
-anything has gone wrong, and if so, what. The "symbolic" part just
-means that you can talk to the debugger using the same symbols with
-which your program is written.
-
-=item symbolic link
-
-An alternate filename that points to the real L</filename>, which in
-turn points to the real L</file>. Whenever the L</operating system>
-is trying to parse a L</pathname> containing a symbolic link, it
-merely substitutes the new name and continues parsing.
-
-=item symbolic reference
-
-A variable whose value is the name of another variable or subroutine.
-By L<dereferencing|/dereference> the first variable, you can get at
-the second one. Symbolic references are illegal under L<use strict
-'refs'|strict/strict refs>.
-
-=item synchronous
-
-Programming in which the orderly sequence of events can be determined;
-that is, when things happen one after the other, not at the same time.
-
-=item syntactic sugar
-
-An alternative way of writing something more easily; a shortcut.
-
-=item syntax
-
-From Greek, "with-arrangement". How things (particularly symbols) are
-put together with each other.
-
-=item syntax tree
-
-An internal representation of your program wherein lower-level
-L<constructs|/construct> dangle off the higher-level constructs
-enclosing them.
-
-=item syscall
-
-A L</function> call directly to the L</operating system>. Many of the
-important subroutines and functions you use aren't direct system
-calls, but are built up in one or more layers above the system call
-level. In general, Perl programmers don't need to worry about the
-distinction. However, if you do happen to know which Perl functions
-are really syscalls, you can predict which of these will set the C<$!>
-(C<$ERRNO>) variable on failure. Unfortunately, beginning programmers
-often confusingly employ the term "system call" to mean what happens
-when you call the Perl L<system|perlfunc/system> function, which
-actually involves many syscalls. To avoid any confusion, we nearly
-always use say "syscall" for something you could call indirectly via
-Perl's L<syscall|perlfunc/syscall> function, and never for something
-you would call with Perl's L<system|perlfunc/system> function.
-
-=back
-
-=head2 T
-
-=over 4
-
-=item tainted
-
-Said of data derived from the grubby hands of a user and thus unsafe
-for a secure program to rely on. Perl does taint checks if you run a
-L</setuid> (or L</setgid>) program, or if you use the B<-T> switch.
-
-=item TCP
-
-Short for Transmission Control Protocol. A protocol wrapped around
-the Internet Protocol to make an unreliable packet transmission
-mechanism appear to the application program to be a reliable
-L</stream> of bytes. (Usually.)
-
-=item term
-
-Short for a "terminal", that is, a leaf node of a L</syntax tree>. A
-thing that functions grammatically as an L</operand> for the operators
-in an expression.
-
-=item terminator
-
-A L</character> or L</string> that marks the end of another string.
-The C<$/> variable contains the string that terminates a
-L<readline|perlfunc/readline> operation, which L<chomp|perlfunc/chomp>
-deletes from the end. Not to be confused with
-L<delimiters|/delimiter> or L<separators|/separator>. The period at
-the end of this sentence is a terminator.
-
-=item ternary
-
-An L</operator> taking three L<operands|/operand>. Sometimes
-pronounced L</trinary>.
-
-=item text
-
-A L</string> or L</file> containing primarily printable characters.
-
-=item thread
-
-Like a forked process, but without L</fork>'s inherent memory
-protection. A thread is lighter weight than a full process, in that a
-process could have multiple threads running around in it, all fighting
-over the same process's memory space unless steps are taken to protect
-threads from each other. See L<threads>.
-
-=item tie
-
-The bond between a magical variable and its implementation class. See
-L<perlfunc/tie> and L<perltie>.
-
-=item TMTOWTDI
-
-There's More Than One Way To Do It, the Perl Motto. The notion that
-there can be more than one valid path to solving a programming problem
-in context. (This doesn't mean that more ways are always better or
-that all possible paths are equally desirable--just that there need
-not be One True Way.) Pronounced TimToady.
-
-=item token
-
-A morpheme in a programming language, the smallest unit of text with
-semantic significance.
-
-=item tokener
-
-A module that breaks a program text into a sequence of
-L<tokens|/token> for later analysis by a parser.
-
-=item tokenizing
-
-Splitting up a program text into L<tokens|/token>. Also known as
-"lexing", in which case you get "lexemes" instead of tokens.
-
-=item toolbox approach
-
-The notion that, with a complete set of simple tools that work well
-together, you can build almost anything you want. Which is fine if
-you're assembling a tricycle, but if you're building a defranishizing
-comboflux regurgalator, you really want your own machine shop in which
-to build special tools. Perl is sort of a machine shop.
-
-=item transliterate
-
-To turn one string representation into another by mapping each
-character of the source string to its corresponding character in the
-result string. See
-L<perlop/trE<sol>SEARCHLISTE<sol>REPLACEMENTLISTE<sol>cdsr>.
-
-=item trigger
-
-An event that causes a L</handler> to be run.
-
-=item trinary
-
-Not a stellar system with three stars, but an L</operator> taking
-three L<operands|/operand>. Sometimes pronounced L</ternary>.
-
-=item troff
-
-A venerable typesetting language from which Perl derives the name of
-its C<$%> variable and which is secretly used in the production of
-Camel books.
-
-=item true
-
-Any scalar value that doesn't evaluate to 0 or C<"">.
-
-=item truncating
-
-Emptying a file of existing contents, either automatically when
-opening a file for writing or explicitly via the
-L<truncate|perlfunc/truncate> function.
-
-=item type
-
-See L</data type> and L</class>.
-
-=item type casting
-
-Converting data from one type to another. C permits this. Perl does
-not need it. Nor want it.
-
-=item typed lexical
-
-A L</lexical variable> that is declared with a L</class> type: C<my
-Pony $bill>.
-
-=item typedef
-
-A type definition in the C language.
-
-=item typeglob
-
-Use of a single identifier, prefixed with C<*>. For example, C<*name>
-stands for any or all of C<$name>, C<@name>, C<%name>, C<&name>, or
-just C<name>. How you use it determines whether it is interpreted as
-all or only one of them. See L<perldata/Typeglobs and Filehandles>.
-
-=item typemap
-
-A description of how C types may be transformed to and from Perl types
-within an L</extension> module written in L</XS>.
-
-=back
-
-=head2 U
-
-=over 4
-
-=item UDP
-
-User Datagram Protocol, the typical way to send L<datagrams|/datagram>
-over the Internet.
-
-=item UID
-
-A user ID. Often used in the context of L</file> or L</process>
-ownership.
-
-=item umask
-
-A mask of those L</permission bits> that should be forced off when
-creating files or directories, in order to establish a policy of whom
-you'll ordinarily deny access to. See the L<umask|perlfunc/umask>
-function.
-
-=item unary operator
-
-An operator with only one L</operand>, like C<!> or
-L<chdir|perlfunc/chdir>. Unary operators are usually prefix
-operators; that is, they precede their operand. The C<++> and C<-->
-operators can be either prefix or postfix. (Their position I<does>
-change their meanings.)
-
-=item Unicode
-
-A character set comprising all the major character sets of the world,
-more or less. See L<perlunicode> and L<http://www.unicode.org>.
-
-=item Unix
-
-A very large and constantly evolving language with several alternative
-and largely incompatible syntaxes, in which anyone can define anything
-any way they choose, and usually do. Speakers of this language think
-it's easy to learn because it's so easily twisted to one's own ends,
-but dialectical differences make tribal intercommunication nearly
-impossible, and travelers are often reduced to a pidgin-like subset of
-the language. To be universally understood, a Unix shell programmer
-must spend years of study in the art. Many have abandoned this
-discipline and now communicate via an Esperanto-like language called
-Perl.
-
-In ancient times, Unix was also used to refer to some code that a
-couple of people at Bell Labs wrote to make use of a PDP-7 computer
-that wasn't doing much of anything else at the time.
-
-=back
-
-=head2 V
-
-=over 4
-
-=item value
-
-An actual piece of data, in contrast to all the variables, references,
-keys, indexes, operators, and whatnot that you need to access the
-value.
-
-=item variable
-
-A named storage location that can hold any of various kinds of
-L</value>, as your program sees fit.
-
-=item variable interpolation
-
-The L</interpolation> of a scalar or array variable into a string.
-
-=item variadic
-
-Said of a L</function> that happily receives an indeterminate number
-of L</actual arguments>.
-
-=item vector
-
-Mathematical jargon for a list of L<scalar values|/scalar value>.
-
-=item virtual
-
-Providing the appearance of something without the reality, as in:
-virtual memory is not real memory. (See also L</memory>.) The
-opposite of "virtual" is "transparent", which means providing the
-reality of something without the appearance, as in: Perl handles the
-variable-length UTF-8 character encoding transparently.
-
-=item void context
-
-A form of L</scalar context> in which an L</expression> is not
-expected to return any L</value> at all and is evaluated for its
-L</side effects> alone.
-
-=item v-string
-
-A "version" or "vector" L</string> specified with a C<v> followed by a
-series of decimal integers in dot notation, for instance,
-C<v1.20.300.4000>. Each number turns into a L</character> with the
-specified ordinal value. (The C<v> is optional when there are at
-least three integers.)
-
-=back
-
-=head2 W
-
-=over 4
-
-=item warning
-
-A message printed to the L</STDERR> stream to the effect that something
-might be wrong but isn't worth blowing up over. See L<perlfunc/warn>
-and the L<warnings> pragma.
-
-=item watch expression
-
-An expression which, when its value changes, causes a breakpoint in
-the Perl debugger.
-
-=item whitespace
-
-A L</character> that moves your cursor but doesn't otherwise put
-anything on your screen. Typically refers to any of: space, tab, line
-feed, carriage return, or form feed.
-
-=item word
-
-In normal "computerese", the piece of data of the size most
-efficiently handled by your computer, typically 32 bits or so, give or
-take a few powers of 2. In Perl culture, it more often refers to an
-alphanumeric L</identifier> (including underscores), or to a string of
-nonwhitespace L<characters|/character> bounded by whitespace or string
-boundaries.
-
-=item working directory
-
-Your current L</directory>, from which relative pathnames are
-interpreted by the L</operating system>. The operating system knows
-your current directory because you told it with a
-L<chdir|perlfunc/chdir> or because you started out in the place where
-your parent L</process> was when you were born.
-
-=item wrapper
-
-A program or subroutine that runs some other program or subroutine for
-you, modifying some of its input or output to better suit your
-purposes.
-
-=item WYSIWYG
-
-What You See Is What You Get. Usually used when something that
-appears on the screen matches how it will eventually look, like Perl's
-L<format|perlfunc/format> declarations. Also used to mean the
-opposite of magic because everything works exactly as it appears, as
-in the three-argument form of L<open|perlfunc/open>.
-
-=back
-
-=head2 X
-
-=over 4
-
-=item XS
-
-An extraordinarily exported, expeditiously excellent, expressly
-eXternal Subroutine, executed in existing C or C++ or in an exciting
-new extension language called (exasperatingly) XS. Examine L<perlxs>
-for the exact explanation or L<perlxstut> for an exemplary unexacting
-one.
-
-=item XSUB
-
-An external L</subroutine> defined in L</XS>.
-
-=back
-
-=head2 Y
-
-=over 4
-
-=item yacc
-
-Yet Another Compiler Compiler. A parser generator without which Perl
-probably would not have existed. See the file I<perly.y> in the Perl
-source distribution.
-
-=back
-
-=head2 Z
-
-=over 4
-
-=item zero width
-
-A subpattern L</assertion> matching the L</null string> between
-L<characters|/character>.
-
-=item zombie
-
-A process that has died (exited) but whose parent has not yet received
-proper notification of its demise by virtue of having called
-L<wait|perlfunc/wait> or L<waitpid|perlfunc/waitpid>. If you
-L<fork|perlfunc/fork>, you must clean up after your child processes
-when they exit, or else the process table will fill up and your system
-administrator will Not Be Happy with you.
-
-=back
-
-=head1 AUTHOR AND COPYRIGHT
-
-Based on the Glossary of Programming Perl, Third Edition,
-by Larry Wall, Tom Christiansen & Jon Orwant.
-Copyright (c) 2000, 1996, 1991 O'Reilly Media, Inc.
-This document may be distributed under the same terms as Perl itself.
Deleted: trunk/contrib/perl/pod/perlintern.pod
===================================================================
--- trunk/contrib/perl/pod/perlintern.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlintern.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1111 +0,0 @@
--*- buffer-read-only: t -*-
-
-!!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-This file is built by autodoc.pl extracting documentation from the C source
-files.
-
-=head1 NAME
-
-perlintern - autogenerated documentation of purely B<internal>
- Perl functions
-
-=head1 DESCRIPTION
-X<internal Perl functions> X<interpreter functions>
-
-This file is the autogenerated documentation of functions in the
-Perl interpreter that are documented using Perl's internal documentation
-format but are not marked as part of the Perl API. In other words,
-B<they are not for use in extensions>!
-
-
-=head1 CV reference counts and CvOUTSIDE
-
-=over 8
-
-=item CvWEAKOUTSIDE
-X<CvWEAKOUTSIDE>
-
-Each CV has a pointer, C<CvOUTSIDE()>, to its lexically enclosing
-CV (if any). Because pointers to anonymous sub prototypes are
-stored in C<&> pad slots, it is a possible to get a circular reference,
-with the parent pointing to the child and vice-versa. To avoid the
-ensuing memory leak, we do not increment the reference count of the CV
-pointed to by C<CvOUTSIDE> in the I<one specific instance> that the parent
-has a C<&> pad slot pointing back to us. In this case, we set the
-C<CvWEAKOUTSIDE> flag in the child. This allows us to determine under what
-circumstances we should decrement the refcount of the parent when freeing
-the child.
-
-There is a further complication with non-closure anonymous subs (i.e. those
-that do not refer to any lexicals outside that sub). In this case, the
-anonymous prototype is shared rather than being cloned. This has the
-consequence that the parent may be freed while there are still active
-children, eg
-
- BEGIN { $a = sub { eval '$x' } }
-
-In this case, the BEGIN is freed immediately after execution since there
-are no active references to it: the anon sub prototype has
-C<CvWEAKOUTSIDE> set since it's not a closure, and $a points to the same
-CV, so it doesn't contribute to BEGIN's refcount either. When $a is
-executed, the C<eval '$x'> causes the chain of C<CvOUTSIDE>s to be followed,
-and the freed BEGIN is accessed.
-
-To avoid this, whenever a CV and its associated pad is freed, any
-C<&> entries in the pad are explicitly removed from the pad, and if the
-refcount of the pointed-to anon sub is still positive, then that
-child's C<CvOUTSIDE> is set to point to its grandparent. This will only
-occur in the single specific case of a non-closure anon prototype
-having one or more active references (such as C<$a> above).
-
-One other thing to consider is that a CV may be merely undefined
-rather than freed, eg C<undef &foo>. In this case, its refcount may
-not have reached zero, but we still delete its pad and its C<CvROOT> etc.
-Since various children may still have their C<CvOUTSIDE> pointing at this
-undefined CV, we keep its own C<CvOUTSIDE> for the time being, so that
-the chain of lexical scopes is unbroken. For example, the following
-should print 123:
-
- my $x = 123;
- sub tmp { sub { eval '$x' } }
- my $a = tmp();
- undef &tmp;
- print $a->();
-
- bool CvWEAKOUTSIDE(CV *cv)
-
-=for hackers
-Found in file cv.h
-
-
-=back
-
-=head1 Functions in file pad.h
-
-
-=over 8
-
-=item CX_CURPAD_SAVE
-X<CX_CURPAD_SAVE>
-
-Save the current pad in the given context block structure.
-
- void CX_CURPAD_SAVE(struct context)
-
-=for hackers
-Found in file pad.h
-
-=item CX_CURPAD_SV
-X<CX_CURPAD_SV>
-
-Access the SV at offset po in the saved current pad in the given
-context block structure (can be used as an lvalue).
-
- SV * CX_CURPAD_SV(struct context, PADOFFSET po)
-
-=for hackers
-Found in file pad.h
-
-=item PAD_BASE_SV
-X<PAD_BASE_SV>
-
-Get the value from slot C<po> in the base (DEPTH=1) pad of a padlist
-
- SV * PAD_BASE_SV(PADLIST padlist, PADOFFSET po)
-
-=for hackers
-Found in file pad.h
-
-=item PAD_CLONE_VARS
-X<PAD_CLONE_VARS>
-
-|CLONE_PARAMS* param
-Clone the state variables associated with running and compiling pads.
-
- void PAD_CLONE_VARS(PerlInterpreter *proto_perl \)
-
-=for hackers
-Found in file pad.h
-
-=item PAD_COMPNAME_FLAGS
-X<PAD_COMPNAME_FLAGS>
-
-Return the flags for the current compiling pad name
-at offset C<po>. Assumes a valid slot entry.
-
- U32 PAD_COMPNAME_FLAGS(PADOFFSET po)
-
-=for hackers
-Found in file pad.h
-
-=item PAD_COMPNAME_GEN
-X<PAD_COMPNAME_GEN>
-
-The generation number of the name at offset C<po> in the current
-compiling pad (lvalue). Note that C<SvUVX> is hijacked for this purpose.
-
- STRLEN PAD_COMPNAME_GEN(PADOFFSET po)
-
-=for hackers
-Found in file pad.h
-
-=item PAD_COMPNAME_GEN_set
-X<PAD_COMPNAME_GEN_set>
-
-Sets the generation number of the name at offset C<po> in the current
-ling pad (lvalue) to C<gen>. Note that C<SvUV_set> is hijacked for this purpose.
-
- STRLEN PAD_COMPNAME_GEN_set(PADOFFSET po, int gen)
-
-=for hackers
-Found in file pad.h
-
-=item PAD_COMPNAME_OURSTASH
-X<PAD_COMPNAME_OURSTASH>
-
-Return the stash associated with an C<our> variable.
-Assumes the slot entry is a valid C<our> lexical.
-
- HV * PAD_COMPNAME_OURSTASH(PADOFFSET po)
-
-=for hackers
-Found in file pad.h
-
-=item PAD_COMPNAME_PV
-X<PAD_COMPNAME_PV>
-
-Return the name of the current compiling pad name
-at offset C<po>. Assumes a valid slot entry.
-
- char * PAD_COMPNAME_PV(PADOFFSET po)
-
-=for hackers
-Found in file pad.h
-
-=item PAD_COMPNAME_TYPE
-X<PAD_COMPNAME_TYPE>
-
-Return the type (stash) of the current compiling pad name at offset
-C<po>. Must be a valid name. Returns null if not typed.
-
- HV * PAD_COMPNAME_TYPE(PADOFFSET po)
-
-=for hackers
-Found in file pad.h
-
-=item PAD_DUP
-X<PAD_DUP>
-
-Clone a padlist.
-
- void PAD_DUP(PADLIST dstpad, PADLIST srcpad, CLONE_PARAMS* param)
-
-=for hackers
-Found in file pad.h
-
-=item PAD_RESTORE_LOCAL
-X<PAD_RESTORE_LOCAL>
-
-Restore the old pad saved into the local variable opad by PAD_SAVE_LOCAL()
-
- void PAD_RESTORE_LOCAL(PAD *opad)
-
-=for hackers
-Found in file pad.h
-
-=item PAD_SAVE_LOCAL
-X<PAD_SAVE_LOCAL>
-
-Save the current pad to the local variable opad, then make the
-current pad equal to npad
-
- void PAD_SAVE_LOCAL(PAD *opad, PAD *npad)
-
-=for hackers
-Found in file pad.h
-
-=item PAD_SAVE_SETNULLPAD
-X<PAD_SAVE_SETNULLPAD>
-
-Save the current pad then set it to null.
-
- void PAD_SAVE_SETNULLPAD()
-
-=for hackers
-Found in file pad.h
-
-=item PAD_SETSV
-X<PAD_SETSV>
-
-Set the slot at offset C<po> in the current pad to C<sv>
-
- SV * PAD_SETSV(PADOFFSET po, SV* sv)
-
-=for hackers
-Found in file pad.h
-
-=item PAD_SET_CUR
-X<PAD_SET_CUR>
-
-Set the current pad to be pad C<n> in the padlist, saving
-the previous current pad. NB currently this macro expands to a string too
-long for some compilers, so it's best to replace it with
-
- SAVECOMPPAD();
- PAD_SET_CUR_NOSAVE(padlist,n);
-
-
- void PAD_SET_CUR(PADLIST padlist, I32 n)
-
-=for hackers
-Found in file pad.h
-
-=item PAD_SET_CUR_NOSAVE
-X<PAD_SET_CUR_NOSAVE>
-
-like PAD_SET_CUR, but without the save
-
- void PAD_SET_CUR_NOSAVE(PADLIST padlist, I32 n)
-
-=for hackers
-Found in file pad.h
-
-=item PAD_SV
-X<PAD_SV>
-
-Get the value at offset C<po> in the current pad
-
- void PAD_SV(PADOFFSET po)
-
-=for hackers
-Found in file pad.h
-
-=item PAD_SVl
-X<PAD_SVl>
-
-Lightweight and lvalue version of C<PAD_SV>.
-Get or set the value at offset C<po> in the current pad.
-Unlike C<PAD_SV>, does not print diagnostics with -DX.
-For internal use only.
-
- SV * PAD_SVl(PADOFFSET po)
-
-=for hackers
-Found in file pad.h
-
-=item SAVECLEARSV
-X<SAVECLEARSV>
-
-Clear the pointed to pad value on scope exit. (i.e. the runtime action of 'my')
-
- void SAVECLEARSV(SV **svp)
-
-=for hackers
-Found in file pad.h
-
-=item SAVECOMPPAD
-X<SAVECOMPPAD>
-
-save PL_comppad and PL_curpad
-
-
-
-
-
- void SAVECOMPPAD()
-
-=for hackers
-Found in file pad.h
-
-=item SAVEPADSV
-X<SAVEPADSV>
-
-Save a pad slot (used to restore after an iteration)
-
-XXX DAPM it would make more sense to make the arg a PADOFFSET
- void SAVEPADSV(PADOFFSET po)
-
-=for hackers
-Found in file pad.h
-
-
-=back
-
-=head1 GV Functions
-
-=over 8
-
-=item is_gv_magical
-X<is_gv_magical>
-
-Returns C<TRUE> if given the name of a magical GV.
-
-Currently only useful internally when determining if a GV should be
-created even in rvalue contexts.
-
-C<flags> is not used at present but available for future extension to
-allow selecting particular classes of magical variable.
-
-Currently assumes that C<name> is NUL terminated (as well as len being valid).
-This assumption is met by all callers within the perl core, which all pass
-pointers returned by SvPV.
-
- bool is_gv_magical(const char *name, STRLEN len, U32 flags)
-
-=for hackers
-Found in file gv.c
-
-=item is_gv_magical_sv
-X<is_gv_magical_sv>
-
-Returns C<TRUE> if given the name of a magical GV. Calls is_gv_magical.
-
- bool is_gv_magical_sv(SV *name, U32 flags)
-
-=for hackers
-Found in file gv.c
-
-
-=back
-
-=head1 Hash Manipulation Functions
-
-=over 8
-
-=item refcounted_he_chain_2hv
-X<refcounted_he_chain_2hv>
-
-Generates and returns a C<HV *> by walking up the tree starting at the passed
-in C<struct refcounted_he *>.
-
- HV * refcounted_he_chain_2hv(const struct refcounted_he *c)
-
-=for hackers
-Found in file hv.c
-
-=item refcounted_he_free
-X<refcounted_he_free>
-
-Decrements the reference count of the passed in C<struct refcounted_he *>
-by one. If the reference count reaches zero the structure's memory is freed,
-and C<refcounted_he_free> iterates onto the parent node.
-
- void refcounted_he_free(struct refcounted_he *he)
-
-=for hackers
-Found in file hv.c
-
-=item refcounted_he_new
-X<refcounted_he_new>
-
-Creates a new C<struct refcounted_he>. As S<key> is copied, and value is
-stored in a compact form, all references remain the property of the caller.
-The C<struct refcounted_he> is returned with a reference count of 1.
-
- struct refcounted_he * refcounted_he_new(struct refcounted_he *const parent, SV *const key, SV *const value)
-
-=for hackers
-Found in file hv.c
-
-
-=back
-
-=head1 IO Functions
-
-=over 8
-
-=item start_glob
-X<start_glob>
-
-Function called by C<do_readline> to spawn a glob (or do the glob inside
-perl on VMS). This code used to be inline, but now perl uses C<File::Glob>
-this glob starter is only used by miniperl during the build process.
-Moving it away shrinks pp_hot.c; shrinking pp_hot.c helps speed perl up.
-
- PerlIO* start_glob(SV* pattern, IO *io)
-
-=for hackers
-Found in file doio.c
-
-
-=back
-
-=head1 Magical Functions
-
-=over 8
-
-=item magic_sethint
-X<magic_sethint>
-
-Triggered by a delete from %^H, records the key to
-C<PL_compiling.cop_hints_hash>.
-
- int magic_sethint(SV* sv, MAGIC* mg)
-
-=for hackers
-Found in file mg.c
-
-=item mg_localize
-X<mg_localize>
-
-Copy some of the magic from an existing SV to new localized version of
-that SV. Container magic (eg %ENV, $1, tie) gets copied, value magic
-doesn't (eg taint, pos).
-
- void mg_localize(SV* sv, SV* nsv)
-
-=for hackers
-Found in file mg.c
-
-
-=back
-
-=head1 MRO Functions
-
-=over 8
-
-=item mro_get_linear_isa_c3
-X<mro_get_linear_isa_c3>
-
-Returns the C3 linearization of @ISA
-the given stash. The return value is a read-only AV*.
-C<level> should be 0 (it is used internally in this
-function's recursion).
-
-You are responsible for C<SvREFCNT_inc()> on the
-return value if you plan to store it anywhere
-semi-permanently (otherwise it might be deleted
-out from under you the next time the cache is
-invalidated).
-
- AV* mro_get_linear_isa_c3(HV* stash, I32 level)
-
-=for hackers
-Found in file mro.c
-
-=item mro_get_linear_isa_dfs
-X<mro_get_linear_isa_dfs>
-
-Returns the Depth-First Search linearization of @ISA
-the given stash. The return value is a read-only AV*.
-C<level> should be 0 (it is used internally in this
-function's recursion).
-
-You are responsible for C<SvREFCNT_inc()> on the
-return value if you plan to store it anywhere
-semi-permanently (otherwise it might be deleted
-out from under you the next time the cache is
-invalidated).
-
- AV* mro_get_linear_isa_dfs(HV* stash, I32 level)
-
-=for hackers
-Found in file mro.c
-
-=item mro_isa_changed_in
-X<mro_isa_changed_in>
-
-Takes the necessary steps (cache invalidations, mostly)
-when the @ISA of the given package has changed. Invoked
-by the C<setisa> magic, should not need to invoke directly.
-
- void mro_isa_changed_in(HV* stash)
-
-=for hackers
-Found in file mro.c
-
-
-=back
-
-=head1 Pad Data Structures
-
-=over 8
-
-=item CvPADLIST
-X<CvPADLIST>
-
-CV's can have CvPADLIST(cv) set to point to an AV.
-
-For these purposes "forms" are a kind-of CV, eval""s are too (except they're
-not callable at will and are always thrown away after the eval"" is done
-executing). Require'd files are simply evals without any outer lexical
-scope.
-
-XSUBs don't have CvPADLIST set - dXSTARG fetches values from PL_curpad,
-but that is really the callers pad (a slot of which is allocated by
-every entersub).
-
-The CvPADLIST AV has does not have AvREAL set, so REFCNT of component items
-is managed "manual" (mostly in pad.c) rather than normal av.c rules.
-The items in the AV are not SVs as for a normal AV, but other AVs:
-
-0'th Entry of the CvPADLIST is an AV which represents the "names" or rather
-the "static type information" for lexicals.
-
-The CvDEPTH'th entry of CvPADLIST AV is an AV which is the stack frame at that
-depth of recursion into the CV.
-The 0'th slot of a frame AV is an AV which is @_.
-other entries are storage for variables and op targets.
-
-During compilation:
-C<PL_comppad_name> is set to the names AV.
-C<PL_comppad> is set to the frame AV for the frame CvDEPTH == 1.
-C<PL_curpad> is set to the body of the frame AV (i.e. AvARRAY(PL_comppad)).
-
-During execution, C<PL_comppad> and C<PL_curpad> refer to the live
-frame of the currently executing sub.
-
-Iterating over the names AV iterates over all possible pad
-items. Pad slots that are SVs_PADTMP (targets/GVs/constants) end up having
-&PL_sv_undef "names" (see pad_alloc()).
-
-Only my/our variable (SVs_PADMY/SVs_PADOUR) slots get valid names.
-The rest are op targets/GVs/constants which are statically allocated
-or resolved at compile time. These don't have names by which they
-can be looked up from Perl code at run time through eval"" like
-my/our variables can be. Since they can't be looked up by "name"
-but only by their index allocated at compile time (which is usually
-in PL_op->op_targ), wasting a name SV for them doesn't make sense.
-
-The SVs in the names AV have their PV being the name of the variable.
-xlow+1..xhigh inclusive in the NV union is a range of cop_seq numbers for
-which the name is valid. For typed lexicals name SV is SVt_PVMG and SvSTASH
-points at the type. For C<our> lexicals, the type is also SVt_PVMG, with the
-SvOURSTASH slot pointing at the stash of the associated global (so that
-duplicate C<our> declarations in the same package can be detected). SvUVX is
-sometimes hijacked to store the generation number during compilation.
-
-If SvFAKE is set on the name SV, then that slot in the frame AV is
-a REFCNT'ed reference to a lexical from "outside". In this case,
-the name SV does not use xlow and xhigh to store a cop_seq range, since it is
-in scope throughout. Instead xhigh stores some flags containing info about
-the real lexical (is it declared in an anon, and is it capable of being
-instantiated multiple times?), and for fake ANONs, xlow contains the index
-within the parent's pad where the lexical's value is stored, to make
-cloning quicker.
-
-If the 'name' is '&' the corresponding entry in frame AV
-is a CV representing a possible closure.
-(SvFAKE and name of '&' is not a meaningful combination currently but could
-become so if C<my sub foo {}> is implemented.)
-
-Note that formats are treated as anon subs, and are cloned each time
-write is called (if necessary).
-
-The flag SVf_PADSTALE is cleared on lexicals each time the my() is executed,
-and set on scope exit. This allows the 'Variable $x is not available' warning
-to be generated in evals, such as
-
- { my $x = 1; sub f { eval '$x'} } f();
-
- AV * CvPADLIST(CV *cv)
-
-=for hackers
-Found in file pad.c
-
-=item cv_clone
-X<cv_clone>
-
-Clone a CV: make a new CV which points to the same code etc, but which
-has a newly-created pad built by copying the prototype pad and capturing
-any outer lexicals.
-
- CV* cv_clone(CV* proto)
-
-=for hackers
-Found in file pad.c
-
-=item cv_dump
-X<cv_dump>
-
-dump the contents of a CV
-
- void cv_dump(const CV *cv, const char *title)
-
-=for hackers
-Found in file pad.c
-
-=item do_dump_pad
-X<do_dump_pad>
-
-Dump the contents of a padlist
-
- void do_dump_pad(I32 level, PerlIO *file, PADLIST *padlist, int full)
-
-=for hackers
-Found in file pad.c
-
-=item intro_my
-X<intro_my>
-
-"Introduce" my variables to visible status.
-
- U32 intro_my()
-
-=for hackers
-Found in file pad.c
-
-=item pad_add_anon
-X<pad_add_anon>
-
-Add an anon code entry to the current compiling pad
-
- PADOFFSET pad_add_anon(SV* sv, OPCODE op_type)
-
-=for hackers
-Found in file pad.c
-
-=item pad_add_name
-X<pad_add_name>
-
-Create a new name and associated PADMY SV in the current pad; return the
-offset.
-If C<typestash> is valid, the name is for a typed lexical; set the
-name's stash to that value.
-If C<ourstash> is valid, it's an our lexical, set the name's
-SvOURSTASH to that value
-
-If fake, it means we're cloning an existing entry
-
- PADOFFSET pad_add_name(const char *name, HV* typestash, HV* ourstash, bool clone, bool state)
-
-=for hackers
-Found in file pad.c
-
-=item pad_alloc
-X<pad_alloc>
-
-Allocate a new my or tmp pad entry. For a my, simply push a null SV onto
-the end of PL_comppad, but for a tmp, scan the pad from PL_padix upwards
-for a slot which has no name and no active value.
-
- PADOFFSET pad_alloc(I32 optype, U32 tmptype)
-
-=for hackers
-Found in file pad.c
-
-=item pad_block_start
-X<pad_block_start>
-
-Update the pad compilation state variables on entry to a new block
-
- void pad_block_start(int full)
-
-=for hackers
-Found in file pad.c
-
-=item pad_check_dup
-X<pad_check_dup>
-
-Check for duplicate declarations: report any of:
- * a my in the current scope with the same name;
- * an our (anywhere in the pad) with the same name and the same stash
- as C<ourstash>
-C<is_our> indicates that the name to check is an 'our' declaration
-
- void pad_check_dup(const char* name, bool is_our, const HV* ourstash)
-
-=for hackers
-Found in file pad.c
-
-=item pad_findlex
-X<pad_findlex>
-
-Find a named lexical anywhere in a chain of nested pads. Add fake entries
-in the inner pads if it's found in an outer one.
-
-Returns the offset in the bottom pad of the lex or the fake lex.
-cv is the CV in which to start the search, and seq is the current cop_seq
-to match against. If warn is true, print appropriate warnings. The out_*
-vars return values, and so are pointers to where the returned values
-should be stored. out_capture, if non-null, requests that the innermost
-instance of the lexical is captured; out_name_sv is set to the innermost
-matched namesv or fake namesv; out_flags returns the flags normally
-associated with the IVX field of a fake namesv.
-
-Note that pad_findlex() is recursive; it recurses up the chain of CVs,
-then comes back down, adding fake entries as it goes. It has to be this way
-because fake namesvs in anon protoypes have to store in xlow the index into
-the parent pad.
-
- PADOFFSET pad_findlex(const char *name, const CV* cv, U32 seq, int warn, SV** out_capture, SV** out_name_sv, int *out_flags)
-
-=for hackers
-Found in file pad.c
-
-=item pad_findmy
-X<pad_findmy>
-
-Given a lexical name, try to find its offset, first in the current pad,
-or failing that, in the pads of any lexically enclosing subs (including
-the complications introduced by eval). If the name is found in an outer pad,
-then a fake entry is added to the current pad.
-Returns the offset in the current pad, or NOT_IN_PAD on failure.
-
- PADOFFSET pad_findmy(const char* name)
-
-=for hackers
-Found in file pad.c
-
-=item pad_fixup_inner_anons
-X<pad_fixup_inner_anons>
-
-For any anon CVs in the pad, change CvOUTSIDE of that CV from
-old_cv to new_cv if necessary. Needed when a newly-compiled CV has to be
-moved to a pre-existing CV struct.
-
- void pad_fixup_inner_anons(PADLIST *padlist, CV *old_cv, CV *new_cv)
-
-=for hackers
-Found in file pad.c
-
-=item pad_free
-X<pad_free>
-
-Free the SV at offset po in the current pad.
-
- void pad_free(PADOFFSET po)
-
-=for hackers
-Found in file pad.c
-
-=item pad_leavemy
-X<pad_leavemy>
-
-Cleanup at end of scope during compilation: set the max seq number for
-lexicals in this scope and warn of any lexicals that never got introduced.
-
- void pad_leavemy()
-
-=for hackers
-Found in file pad.c
-
-=item pad_new
-X<pad_new>
-
-Create a new compiling padlist, saving and updating the various global
-vars at the same time as creating the pad itself. The following flags
-can be OR'ed together:
-
- padnew_CLONE this pad is for a cloned CV
- padnew_SAVE save old globals
- padnew_SAVESUB also save extra stuff for start of sub
-
- PADLIST* pad_new(int flags)
-
-=for hackers
-Found in file pad.c
-
-=item pad_push
-X<pad_push>
-
-Push a new pad frame onto the padlist, unless there's already a pad at
-this depth, in which case don't bother creating a new one. Then give
-the new pad an @_ in slot zero.
-
- void pad_push(PADLIST *padlist, int depth)
-
-=for hackers
-Found in file pad.c
-
-=item pad_reset
-X<pad_reset>
-
-Mark all the current temporaries for reuse
-
- void pad_reset()
-
-=for hackers
-Found in file pad.c
-
-=item pad_setsv
-X<pad_setsv>
-
-Set the entry at offset po in the current pad to sv.
-Use the macro PAD_SETSV() rather than calling this function directly.
-
- void pad_setsv(PADOFFSET po, SV* sv)
-
-=for hackers
-Found in file pad.c
-
-=item pad_swipe
-X<pad_swipe>
-
-Abandon the tmp in the current pad at offset po and replace with a
-new one.
-
- void pad_swipe(PADOFFSET po, bool refadjust)
-
-=for hackers
-Found in file pad.c
-
-=item pad_tidy
-X<pad_tidy>
-
-Tidy up a pad after we've finished compiling it:
- * remove most stuff from the pads of anonsub prototypes;
- * give it a @_;
- * mark tmps as such.
-
- void pad_tidy(padtidy_type type)
-
-=for hackers
-Found in file pad.c
-
-=item pad_undef
-X<pad_undef>
-
-Free the padlist associated with a CV.
-If parts of it happen to be current, we null the relevant
-PL_*pad* global vars so that we don't have any dangling references left.
-We also repoint the CvOUTSIDE of any about-to-be-orphaned
-inner subs to the outer of this cv.
-
-(This function should really be called pad_free, but the name was already
-taken)
-
- void pad_undef(CV* cv)
-
-=for hackers
-Found in file pad.c
-
-
-=back
-
-=head1 Per-Interpreter Variables
-
-=over 8
-
-=item PL_DBsingle
-X<PL_DBsingle>
-
-When Perl is run in debugging mode, with the B<-d> switch, this SV is a
-boolean which indicates whether subs are being single-stepped.
-Single-stepping is automatically turned on after every step. This is the C
-variable which corresponds to Perl's $DB::single variable. See
-C<PL_DBsub>.
-
- SV * PL_DBsingle
-
-=for hackers
-Found in file intrpvar.h
-
-=item PL_DBsub
-X<PL_DBsub>
-
-When Perl is run in debugging mode, with the B<-d> switch, this GV contains
-the SV which holds the name of the sub being debugged. This is the C
-variable which corresponds to Perl's $DB::sub variable. See
-C<PL_DBsingle>.
-
- GV * PL_DBsub
-
-=for hackers
-Found in file intrpvar.h
-
-=item PL_DBtrace
-X<PL_DBtrace>
-
-Trace variable used when Perl is run in debugging mode, with the B<-d>
-switch. This is the C variable which corresponds to Perl's $DB::trace
-variable. See C<PL_DBsingle>.
-
- SV * PL_DBtrace
-
-=for hackers
-Found in file intrpvar.h
-
-=item PL_dowarn
-X<PL_dowarn>
-
-The C variable which corresponds to Perl's $^W warning variable.
-
- bool PL_dowarn
-
-=for hackers
-Found in file intrpvar.h
-
-=item PL_last_in_gv
-X<PL_last_in_gv>
-
-The GV which was last used for a filehandle input operation. (C<< <FH> >>)
-
- GV* PL_last_in_gv
-
-=for hackers
-Found in file intrpvar.h
-
-=item PL_ofs_sv
-X<PL_ofs_sv>
-
-The output field separator - C<$,> in Perl space.
-
- SV* PL_ofs_sv
-
-=for hackers
-Found in file intrpvar.h
-
-=item PL_rs
-X<PL_rs>
-
-The input record separator - C<$/> in Perl space.
-
- SV* PL_rs
-
-=for hackers
-Found in file intrpvar.h
-
-
-=back
-
-=head1 Stack Manipulation Macros
-
-=over 8
-
-=item djSP
-X<djSP>
-
-Declare Just C<SP>. This is actually identical to C<dSP>, and declares
-a local copy of perl's stack pointer, available via the C<SP> macro.
-See C<SP>. (Available for backward source code compatibility with the
-old (Perl 5.005) thread model.)
-
- djSP;
-
-=for hackers
-Found in file pp.h
-
-=item LVRET
-X<LVRET>
-
-True if this op will be the return value of an lvalue subroutine
-
-=for hackers
-Found in file pp.h
-
-
-=back
-
-=head1 SV Manipulation Functions
-
-=over 8
-
-=item sv_add_arena
-X<sv_add_arena>
-
-Given a chunk of memory, link it to the head of the list of arenas,
-and split it into a list of free SVs.
-
- void sv_add_arena(char* ptr, U32 size, U32 flags)
-
-=for hackers
-Found in file sv.c
-
-=item sv_clean_all
-X<sv_clean_all>
-
-Decrement the refcnt of each remaining SV, possibly triggering a
-cleanup. This function may have to be called multiple times to free
-SVs which are in complex self-referential hierarchies.
-
- I32 sv_clean_all()
-
-=for hackers
-Found in file sv.c
-
-=item sv_clean_objs
-X<sv_clean_objs>
-
-Attempt to destroy all objects not yet freed
-
- void sv_clean_objs()
-
-=for hackers
-Found in file sv.c
-
-=item sv_free_arenas
-X<sv_free_arenas>
-
-Deallocate the memory used by all arenas. Note that all the individual SV
-heads and bodies within the arenas must already have been freed.
-
- void sv_free_arenas()
-
-=for hackers
-Found in file sv.c
-
-
-=back
-
-=head1 SV-Body Allocation
-
-=over 8
-
-=item sv_2num
-X<sv_2num>
-
-Return an SV with the numeric value of the source SV, doing any necessary
-reference or overload conversion. You must use the C<SvNUM(sv)> macro to
-access this function.
-
- SV* sv_2num(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-
-=back
-
-=head1 Unicode Support
-
-=over 8
-
-=item find_uninit_var
-X<find_uninit_var>
-
-Find the name of the undefined variable (if any) that caused the operator o
-to issue a "Use of uninitialized value" warning.
-If match is true, only return a name if it's value matches uninit_sv.
-So roughly speaking, if a unary operator (such as OP_COS) generates a
-warning, then following the direct child of the op may yield an
-OP_PADSV or OP_GV that gives the name of the undefined variable. On the
-other hand, with OP_ADD there are two branches to follow, so we only print
-the variable name if we get an exact match.
-
-The name is returned as a mortal SV.
-
-Assumes that PL_op is the op that originally triggered the error, and that
-PL_comppad/PL_curpad points to the currently executing pad.
-
- SV* find_uninit_var(OP* obase, SV* uninit_sv, bool top)
-
-=for hackers
-Found in file sv.c
-
-=item report_uninit
-X<report_uninit>
-
-Print appropriate "Use of uninitialized variable" warning
-
- void report_uninit(SV* uninit_sv)
-
-=for hackers
-Found in file sv.c
-
-
-=back
-
-=head1 AUTHORS
-
-The autodocumentation system was originally added to the Perl core by
-Benjamin Stuhl. Documentation is by whoever was kind enough to
-document their functions.
-
-=head1 SEE ALSO
-
-perlguts(1), perlapi(1)
-
-=cut
-
- ex: set ro:
Deleted: trunk/contrib/perl/pod/perlmodlib.pod
===================================================================
--- trunk/contrib/perl/pod/perlmodlib.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlmodlib.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,3194 +0,0 @@
-=for maintainers
-Generated by perlmodlib.PL -- DO NOT EDIT!
-
-=head1 NAME
-
-perlmodlib - constructing new Perl modules and finding existing ones
-
-=head1 THE PERL MODULE LIBRARY
-
-Many modules are included in the Perl distribution. These are described
-below, and all end in F<.pm>. You may discover compiled library
-files (usually ending in F<.so>) or small pieces of modules to be
-autoloaded (ending in F<.al>); these were automatically generated
-by the installation process. You may also discover files in the
-library directory that end in either F<.pl> or F<.ph>. These are
-old libraries supplied so that old programs that use them still
-run. The F<.pl> files will all eventually be converted into standard
-modules, and the F<.ph> files made by B<h2ph> will probably end up
-as extension modules made by B<h2xs>. (Some F<.ph> values may
-already be available through the POSIX, Errno, or Fcntl modules.)
-The B<pl2pm> file in the distribution may help in your conversion,
-but it's just a mechanical process and therefore far from bulletproof.
-
-=head2 Pragmatic Modules
-
-They work somewhat like compiler directives (pragmata) in that they
-tend to affect the compilation of your program, and thus will usually
-work well only when used within a C<use>, or C<no>. Most of these
-are lexically scoped, so an inner BLOCK may countermand them
-by saying:
-
- no integer;
- no strict 'refs';
- no warnings;
-
-which lasts until the end of that BLOCK.
-
-Some pragmas are lexically scoped--typically those that affect the
-C<$^H> hints variable. Others affect the current package instead,
-like C<use vars> and C<use subs>, which allow you to predeclare a
-variables or subroutines within a particular I<file> rather than
-just a block. Such declarations are effective for the entire file
-for which they were declared. You cannot rescind them with C<no
-vars> or C<no subs>.
-
-The following pragmas are defined (and have their own documentation).
-
-=over 12
-
-=item attributes
-
-Get/set subroutine or variable attributes
-
-=item attrs
-
-Set/get attributes of a subroutine (deprecated)
-
-=item autouse
-
-Postpone load of modules until a function is used
-
-=item base
-
-Establish an ISA relationship with base classes at compile time
-
-=item bigint
-
-Transparent BigInteger support for Perl
-
-=item bignum
-
-Transparent BigNumber support for Perl
-
-=item bigrat
-
-Transparent BigNumber/BigRational support for Perl
-
-=item blib
-
-Use MakeMaker's uninstalled version of a package
-
-=item bytes
-
-Force byte semantics rather than character semantics
-
-=item charnames
-
-Define character names for C<\N{named}> string literal escapes
-
-=item constant
-
-Declare constants
-
-=item diagnostics
-
-Produce verbose warning diagnostics
-
-=item encoding
-
-Allows you to write your script in non-ascii or non-utf8
-
-=item encoding::warnings
-
-Warn on implicit encoding conversions
-
-=item feature
-
-Enable new syntactic features
-
-=item fields
-
-Compile-time class fields
-
-=item filetest
-
-Control the filetest permission operators
-
-=item if
-
-C<use> a Perl module if a condition holds
-
-=item integer
-
-Use integer arithmetic instead of floating point
-
-=item less
-
-Request less of something
-
-=item lib
-
-Manipulate @INC at compile time
-
-=item locale
-
-Use and avoid POSIX locales for built-in operations
-
-=item mro
-
-Method Resolution Order
-
-=item open
-
-Set default PerlIO layers for input and output
-
-=item ops
-
-Restrict unsafe operations when compiling
-
-=item overload
-
-Package for overloading Perl operations
-
-=item re
-
-Alter regular expression behaviour
-
-=item sigtrap
-
-Enable simple signal handling
-
-=item sort
-
-Control sort() behaviour
-
-=item strict
-
-Restrict unsafe constructs
-
-=item subs
-
-Predeclare sub names
-
-=item threads
-
-Perl interpreter-based threads
-
-=item threads::shared
-
-Perl extension for sharing data structures between threads
-
-=item utf8
-
-Enable/disable UTF-8 (or UTF-EBCDIC) in source code
-
-=item vars
-
-Predeclare global variable names (obsolete)
-
-=item version
-
-Perl extension for Version Objects
-
-=item vmsish
-
-Control VMS-specific language features
-
-=item warnings
-
-Control optional warnings
-
-=item warnings::register
-
-Warnings import function
-
-=back
-
-=head2 Standard Modules
-
-Standard, bundled modules are all expected to behave in a well-defined
-manner with respect to namespace pollution because they use the
-Exporter module. See their own documentation for details.
-
-It's possible that not all modules listed below are installed on your
-system. For example, the GDBM_File module will not be installed if you
-don't have the gdbm library.
-
-=over 12
-
-=item AnyDBM_File
-
-Provide framework for multiple DBMs
-
-=item Archive::Extract
-
-A generic archive extracting mechanism
-
-=item Archive::Tar
-
-Module for manipulations of tar archives
-
-=item Archive::Tar::File
-
-A subclass for in-memory extracted file from Archive::Tar
-
-=item Attribute::Handlers
-
-Simpler definition of attribute handlers
-
-=item AutoLoader
-
-Load subroutines only on demand
-
-=item AutoSplit
-
-Split a package for autoloading
-
-=item B
-
-The Perl Compiler
-
-=item B::Concise
-
-Walk Perl syntax tree, printing concise info about ops
-
-=item B::Debug
-
-Walk Perl syntax tree, printing debug info about ops
-
-=item B::Deparse
-
-Perl compiler backend to produce perl code
-
-=item B::Lint
-
-Perl lint
-
-=item B::Showlex
-
-Show lexical variables used in functions or files
-
-=item B::Terse
-
-Walk Perl syntax tree, printing terse info about ops
-
-=item B::Xref
-
-Generates cross reference reports for Perl programs
-
-=item Benchmark
-
-Benchmark running times of Perl code
-
-=item CGI
-
-Simple Common Gateway Interface Class
-
-=item CGI::Apache
-
-Backward compatibility module for CGI.pm
-
-=item CGI::Carp
-
-CGI routines for writing to the HTTPD (or other) error log
-
-=item CGI::Cookie
-
-Interface to Netscape Cookies
-
-=item CGI::Fast
-
-CGI Interface for Fast CGI
-
-=item CGI::Pretty
-
-Module to produce nicely formatted HTML code
-
-=item CGI::Push
-
-Simple Interface to Server Push
-
-=item CGI::Switch
-
-Backward compatibility module for defunct CGI::Switch
-
-=item CGI::Util
-
-Internal utilities used by CGI module
-
-=item CORE
-
-Pseudo-namespace for Perl's core routines
-
-=item CPAN
-
-Query, download and build perl modules from CPAN sites
-
-=item CPAN::API::HOWTO
-
-A recipe book for programming with CPAN.pm
-
-=item CPAN::FirstTime
-
-Utility for CPAN::Config file Initialization
-
-=item CPAN::Kwalify
-
-Interface between CPAN.pm and Kwalify.pm
-
-=item CPAN::Nox
-
-Wrapper around CPAN.pm without using any XS module
-
-=item CPAN::Version
-
-Utility functions to compare CPAN versions
-
-=item CPANPLUS
-
-API & CLI access to the CPAN mirrors
-
-=item CPANPLUS::Dist::Base
-
-Base class for custom distribution classes
-
-=item CPANPLUS::Dist::Sample
-
-Sample code to create your own Dist::* plugin
-
-=item CPANPLUS::Shell::Classic
-
-CPAN.pm emulation for CPANPLUS
-
-=item CPANPLUS::Shell::Default::Plugins::HOWTO
-
-Documentation on how to write your own plugins
-
-=item Carp
-
-Warn of errors (from perspective of caller)
-
-=item Carp::Heavy
-
-Heavy machinery, no user serviceable parts inside
-
-=item Class::ISA
-
-Report the search path for a class's ISA tree
-
-=item Class::Struct
-
-Declare struct-like datatypes as Perl classes
-
-=item Compress::Raw::Zlib
-
-Low-Level Interface to zlib compression library
-
-=item Compress::Zlib
-
-Interface to zlib compression library
-
-=item Config
-
-Access Perl configuration information
-
-=item Cwd
-
-Get pathname of current working directory
-
-=item DB
-
-Programmatic interface to the Perl debugging API
-
-=item DBM_Filter
-
-Filter DBM keys/values
-
-=item DBM_Filter::compress
-
-Filter for DBM_Filter
-
-=item DBM_Filter::encode
-
-Filter for DBM_Filter
-
-=item DBM_Filter::int32
-
-Filter for DBM_Filter
-
-=item DBM_Filter::null
-
-Filter for DBM_Filter
-
-=item DBM_Filter::utf8
-
-Filter for DBM_Filter
-
-=item DB_File
-
-Perl5 access to Berkeley DB version 1.x
-
-=item Data::Dumper
-
-Stringified perl data structures, suitable for both printing and C<eval>
-
-=item Devel::DProf
-
-A Perl code profiler
-
-=item Devel::InnerPackage
-
-Find all the inner packages of a package
-
-=item Devel::Peek
-
-A data debugging tool for the XS programmer
-
-=item Devel::SelfStubber
-
-Generate stubs for a SelfLoading module
-
-=item Digest
-
-Modules that calculate message digests
-
-=item Digest::MD5
-
-Perl interface to the MD5 Algorithm
-
-=item Digest::SHA
-
-Perl extension for SHA-1/224/256/384/512
-
-=item Digest::base
-
-Digest base class
-
-=item Digest::file
-
-Calculate digests of files
-
-=item DirHandle
-
-Supply object methods for directory handles
-
-=item Dumpvalue
-
-Provides screen dump of Perl data.
-
-=item DynaLoader
-
-Dynamically load C libraries into Perl code
-
-=item Encode
-
-Character encodings
-
-=item Encode::Alias
-
-Alias definitions to encodings
-
-=item Encode::Byte
-
-Single Byte Encodings
-
-=item Encode::CJKConstants
-
-Internally used by Encode::??::ISO_2022_*
-
-=item Encode::CN
-
-China-based Chinese Encodings
-
-=item Encode::CN::HZ
-
-Internally used by Encode::CN
-
-=item Encode::Config
-
-Internally used by Encode
-
-=item Encode::EBCDIC
-
-EBCDIC Encodings
-
-=item Encode::Encoder
-
-Object Oriented Encoder
-
-=item Encode::Encoding
-
-Encode Implementation Base Class
-
-=item Encode::GSM0338
-
-ESTI GSM 03.38 Encoding
-
-=item Encode::Guess
-
-Guesses encoding from data
-
-=item Encode::JP
-
-Japanese Encodings
-
-=item Encode::JP::H2Z
-
-Internally used by Encode::JP::2022_JP*
-
-=item Encode::JP::JIS7
-
-Internally used by Encode::JP
-
-=item Encode::KR
-
-Korean Encodings
-
-=item Encode::KR::2022_KR
-
-Internally used by Encode::KR
-
-=item Encode::MIME::Header
-
-MIME 'B' and 'Q' header encoding
-
-=item Encode::MIME::Name
-
-Internally used by Encode
-
-=item Encode::PerlIO
-
-A detailed document on Encode and PerlIO
-
-=item Encode::Supported
-
-Encodings supported by Encode
-
-=item Encode::Symbol
-
-Symbol Encodings
-
-=item Encode::TW
-
-Taiwan-based Chinese Encodings
-
-=item Encode::Unicode
-
-Various Unicode Transformation Formats
-
-=item Encode::Unicode::UTF7
-
-UTF-7 encoding
-
-=item English
-
-Use nice English (or awk) names for ugly punctuation variables
-
-=item Env
-
-Perl module that imports environment variables as scalars or arrays
-
-=item Errno
-
-System errno constants
-
-=item Exporter
-
-Implements default import method for modules
-
-=item Exporter::Heavy
-
-Exporter guts
-
-=item ExtUtils::CBuilder
-
-Compile and link C code for Perl modules
-
-=item ExtUtils::CBuilder::Platform::Windows
-
-Builder class for Windows platforms
-
-=item ExtUtils::Command
-
-Utilities to replace common UNIX commands in Makefiles etc.
-
-=item ExtUtils::Command::MM
-
-Commands for the MM's to use in Makefiles
-
-=item ExtUtils::Constant
-
-Generate XS code to import C header constants
-
-=item ExtUtils::Constant::Base
-
-Base class for ExtUtils::Constant objects
-
-=item ExtUtils::Constant::Utils
-
-Helper functions for ExtUtils::Constant
-
-=item ExtUtils::Constant::XS
-
-Base class for ExtUtils::Constant objects
-
-=item ExtUtils::Embed
-
-Utilities for embedding Perl in C/C++ applications
-
-=item ExtUtils::Install
-
-Install files from here to there
-
-=item ExtUtils::Installed
-
-Inventory management of installed modules
-
-=item ExtUtils::Liblist
-
-Determine libraries to use and how to use them
-
-=item ExtUtils::MM
-
-OS adjusted ExtUtils::MakeMaker subclass
-
-=item ExtUtils::MM_AIX
-
-AIX specific subclass of ExtUtils::MM_Unix
-
-=item ExtUtils::MM_Any
-
-Platform-agnostic MM methods
-
-=item ExtUtils::MM_BeOS
-
-Methods to override UN*X behaviour in ExtUtils::MakeMaker
-
-=item ExtUtils::MM_Cygwin
-
-Methods to override UN*X behaviour in ExtUtils::MakeMaker
-
-=item ExtUtils::MM_DOS
-
-DOS specific subclass of ExtUtils::MM_Unix
-
-=item ExtUtils::MM_MacOS
-
-Once produced Makefiles for MacOS Classic
-
-=item ExtUtils::MM_NW5
-
-Methods to override UN*X behaviour in ExtUtils::MakeMaker
-
-=item ExtUtils::MM_OS2
-
-Methods to override UN*X behaviour in ExtUtils::MakeMaker
-
-=item ExtUtils::MM_QNX
-
-QNX specific subclass of ExtUtils::MM_Unix
-
-=item ExtUtils::MM_UWIN
-
-U/WIN specific subclass of ExtUtils::MM_Unix
-
-=item ExtUtils::MM_Unix
-
-Methods used by ExtUtils::MakeMaker
-
-=item ExtUtils::MM_VMS
-
-Methods to override UN*X behaviour in ExtUtils::MakeMaker
-
-=item ExtUtils::MM_VOS
-
-VOS specific subclass of ExtUtils::MM_Unix
-
-=item ExtUtils::MM_Win32
-
-Methods to override UN*X behaviour in ExtUtils::MakeMaker
-
-=item ExtUtils::MM_Win95
-
-Method to customize MakeMaker for Win9X
-
-=item ExtUtils::MY
-
-ExtUtils::MakeMaker subclass for customization
-
-=item ExtUtils::MakeMaker
-
-Create a module Makefile
-
-=item ExtUtils::MakeMaker::Config
-
-Wrapper around Config.pm
-
-=item ExtUtils::MakeMaker::FAQ
-
-Frequently Asked Questions About MakeMaker
-
-=item ExtUtils::MakeMaker::Tutorial
-
-Writing a module with MakeMaker
-
-=item ExtUtils::MakeMaker::bytes
-
-Version-agnostic bytes.pm
-
-=item ExtUtils::MakeMaker::vmsish
-
-Platform-agnostic vmsish.pm
-
-=item ExtUtils::Manifest
-
-Utilities to write and check a MANIFEST file
-
-=item ExtUtils::Mkbootstrap
-
-Make a bootstrap file for use by DynaLoader
-
-=item ExtUtils::Mksymlists
-
-Write linker options files for dynamic extension
-
-=item ExtUtils::Packlist
-
-Manage .packlist files
-
-=item ExtUtils::ParseXS
-
-Converts Perl XS code into C code
-
-=item ExtUtils::testlib
-
-Add blib/* directories to @INC
-
-=item Fatal
-
-Replace functions with equivalents which succeed or die
-
-=item Fcntl
-
-Load the C Fcntl.h defines
-
-=item File::Basename
-
-Parse file paths into directory, filename and suffix.
-
-=item File::CheckTree
-
-Run many filetest checks on a tree
-
-=item File::Compare
-
-Compare files or filehandles
-
-=item File::Copy
-
-Copy files or filehandles
-
-=item File::DosGlob
-
-DOS like globbing and then some
-
-=item File::Fetch
-
-A generic file fetching mechanism
-
-=item File::Find
-
-Traverse a directory tree.
-
-=item File::Glob
-
-Perl extension for BSD glob routine
-
-=item File::GlobMapper
-
-Extend File Glob to Allow Input and Output Files
-
-=item File::Path
-
-Create or remove directory trees
-
-=item File::Spec
-
-Portably perform operations on file names
-
-=item File::Spec::Cygwin
-
-Methods for Cygwin file specs
-
-=item File::Spec::Epoc
-
-Methods for Epoc file specs
-
-=item File::Spec::Functions
-
-Portably perform operations on file names
-
-=item File::Spec::Mac
-
-File::Spec for Mac OS (Classic)
-
-=item File::Spec::OS2
-
-Methods for OS/2 file specs
-
-=item File::Spec::Unix
-
-File::Spec for Unix, base for other File::Spec modules
-
-=item File::Spec::VMS
-
-Methods for VMS file specs
-
-=item File::Spec::Win32
-
-Methods for Win32 file specs
-
-=item File::Temp
-
-Return name and handle of a temporary file safely
-
-=item File::stat
-
-By-name interface to Perl's built-in stat() functions
-
-=item FileCache
-
-Keep more files open than the system permits
-
-=item FileHandle
-
-Supply object methods for filehandles
-
-=item Filter::Simple
-
-Simplified source filtering
-
-=item Filter::Util::Call
-
-Perl Source Filter Utility Module
-
-=item FindBin
-
-Locate directory of original perl script
-
-=item GDBM_File
-
-Perl5 access to the gdbm library.
-
-=item Getopt::Long
-
-Extended processing of command line options
-
-=item Getopt::Std
-
-Process single-character switches with switch clustering
-
-=item Hash::Util
-
-A selection of general-utility hash subroutines
-
-=item Hash::Util::FieldHash
-
-Support for Inside-Out Classes
-
-=item I18N::Collate
-
-Compare 8-bit scalar data according to the current locale
-
-=item I18N::LangTags
-
-Functions for dealing with RFC3066-style language tags
-
-=item I18N::LangTags::Detect
-
-Detect the user's language preferences
-
-=item I18N::LangTags::List
-
-Tags and names for human languages
-
-=item I18N::Langinfo
-
-Query locale information
-
-=item IO
-
-Load various IO modules
-
-=item IO::Compress::Base
-
-Base Class for IO::Compress modules
-
-=item IO::Compress::Deflate
-
-Write RFC 1950 files/buffers
-
-=item IO::Compress::Gzip
-
-Write RFC 1952 files/buffers
-
-=item IO::Compress::RawDeflate
-
-Write RFC 1951 files/buffers
-
-=item IO::Compress::Zip
-
-Write zip files/buffers
-
-=item IO::Dir
-
-Supply object methods for directory handles
-
-=item IO::File
-
-Supply object methods for filehandles
-
-=item IO::Handle
-
-Supply object methods for I/O handles
-
-=item IO::Pipe
-
-Supply object methods for pipes
-
-=item IO::Poll
-
-Object interface to system poll call
-
-=item IO::Seekable
-
-Supply seek based methods for I/O objects
-
-=item IO::Select
-
-OO interface to the select system call
-
-=item IO::Socket
-
-Object interface to socket communications
-
-=item IO::Socket::INET
-
-Object interface for AF_INET domain sockets
-
-=item IO::Socket::UNIX
-
-Object interface for AF_UNIX domain sockets
-
-=item IO::Uncompress::AnyInflate
-
-Uncompress zlib-based (zip, gzip) file/buffer
-
-=item IO::Uncompress::AnyUncompress
-
-Uncompress gzip, zip, bzip2 or lzop file/buffer
-
-=item IO::Uncompress::Base
-
-Base Class for IO::Uncompress modules
-
-=item IO::Uncompress::Gunzip
-
-Read RFC 1952 files/buffers
-
-=item IO::Uncompress::Inflate
-
-Read RFC 1950 files/buffers
-
-=item IO::Uncompress::RawInflate
-
-Read RFC 1951 files/buffers
-
-=item IO::Uncompress::Unzip
-
-Read zip files/buffers
-
-=item IO::Zlib
-
-IO:: style interface to L<Compress::Zlib>
-
-=item IPC::Cmd
-
-Finding and running system commands made easy
-
-=item IPC::Open2
-
-Open a process for both reading and writing
-
-=item IPC::Open3
-
-Open a process for reading, writing, and error handling
-
-=item IPC::SysV
-
-SysV IPC constants
-
-=item IPC::SysV::Msg
-
-SysV Msg IPC object class
-
-=item IPC::SysV::Semaphore
-
-SysV Semaphore IPC object class
-
-=item List::Util
-
-A selection of general-utility list subroutines
-
-=item Locale::Constants
-
-Constants for Locale codes
-
-=item Locale::Country
-
-ISO codes for country identification (ISO 3166)
-
-=item Locale::Currency
-
-ISO three letter codes for currency identification (ISO 4217)
-
-=item Locale::Language
-
-ISO two letter codes for language identification (ISO 639)
-
-=item Locale::Maketext
-
-Framework for localization
-
-=item Locale::Maketext::Simple
-
-Simple interface to Locale::Maketext::Lexicon
-
-=item Locale::Maketext::TPJ13
-
-Article about software localization
-
-=item Locale::Script
-
-ISO codes for script identification (ISO 15924)
-
-=item Log::Message
-
-A generic message storing mechanism;
-
-=item Log::Message::Config
-
-Configuration options for Log::Message
-
-=item Log::Message::Handlers
-
-Message handlers for Log::Message
-
-=item Log::Message::Item
-
-Message objects for Log::Message
-
-=item MIME::Base64
-
-Encoding and decoding of base64 strings
-
-=item MIME::QuotedPrint
-
-Encoding and decoding of quoted-printable strings
-
-=item Math::BigFloat
-
-Arbitrary size floating point math package
-
-=item Math::BigInt
-
-Arbitrary size integer/float math package
-
-=item Math::BigInt::Calc
-
-Pure Perl module to support Math::BigInt
-
-=item Math::BigInt::CalcEmu
-
-Emulate low-level math with BigInt code
-
-=item Math::BigInt::FastCalc
-
-Math::BigInt::Calc with some XS for more speed
-
-=item Math::BigRat
-
-Arbitrary big rational numbers
-
-=item Math::Complex
-
-Complex numbers and associated mathematical functions
-
-=item Math::Trig
-
-Trigonometric functions
-
-=item Memoize
-
-Make functions faster by trading space for time
-
-=item Memoize::AnyDBM_File
-
-Glue to provide EXISTS for AnyDBM_File for Storable use
-
-=item Memoize::Expire
-
-Plug-in module for automatic expiration of memoized values
-
-=item Memoize::ExpireFile
-
-Test for Memoize expiration semantics
-
-=item Memoize::ExpireTest
-
-Test for Memoize expiration semantics
-
-=item Memoize::NDBM_File
-
-Glue to provide EXISTS for NDBM_File for Storable use
-
-=item Memoize::SDBM_File
-
-Glue to provide EXISTS for SDBM_File for Storable use
-
-=item Memoize::Storable
-
-Store Memoized data in Storable database
-
-=item Module::Build
-
-Build and install Perl modules
-
-=item Module::Build::API
-
-API Reference for Module Authors
-
-=item Module::Build::Authoring
-
-Authoring Module::Build modules
-
-=item Module::Build::Base
-
-Default methods for Module::Build
-
-=item Module::Build::Compat
-
-Compatibility with ExtUtils::MakeMaker
-
-=item Module::Build::ConfigData
-
-Configuration for Module::Build
-
-=item Module::Build::Cookbook
-
-Examples of Module::Build Usage
-
-=item Module::Build::ModuleInfo
-
-Gather package and POD information from a perl module files
-
-=item Module::Build::Notes
-
-Configuration for $module_name
-
-=item Module::Build::PPMMaker
-
-Perl Package Manager file creation
-
-=item Module::Build::Platform::Amiga
-
-Builder class for Amiga platforms
-
-=item Module::Build::Platform::Default
-
-Stub class for unknown platforms
-
-=item Module::Build::Platform::EBCDIC
-
-Builder class for EBCDIC platforms
-
-=item Module::Build::Platform::MPEiX
-
-Builder class for MPEiX platforms
-
-=item Module::Build::Platform::MacOS
-
-Builder class for MacOS platforms
-
-=item Module::Build::Platform::RiscOS
-
-Builder class for RiscOS platforms
-
-=item Module::Build::Platform::Unix
-
-Builder class for Unix platforms
-
-=item Module::Build::Platform::VMS
-
-Builder class for VMS platforms
-
-=item Module::Build::Platform::VOS
-
-Builder class for VOS platforms
-
-=item Module::Build::Platform::Windows
-
-Builder class for Windows platforms
-
-=item Module::Build::Platform::aix
-
-Builder class for AIX platform
-
-=item Module::Build::Platform::cygwin
-
-Builder class for Cygwin platform
-
-=item Module::Build::Platform::darwin
-
-Builder class for Mac OS X platform
-
-=item Module::Build::Platform::os2
-
-Builder class for OS/2 platform
-
-=item Module::Build::YAML
-
-Provides just enough YAML support so that Module::Build works even if YAML.pm is not installed
-
-=item Module::CoreList
-
-What modules shipped with versions of perl
-
-=item Module::Load
-
-Runtime require of both modules and files
-
-=item Module::Load::Conditional
-
-Looking up module information / loading at runtime
-
-=item Module::Loaded
-
-Mark modules as loaded or unloaded
-
-=item Module::Pluggable
-
-Automatically give your module the ability to have plugins
-
-=item Module::Pluggable::Object
-
-Automatically give your module the ability to have plugins
-
-=item NDBM_File
-
-Tied access to ndbm files
-
-=item NEXT
-
-Provide a pseudo-class NEXT (et al) that allows method redispatch
-
-=item Net::Cmd
-
-Network Command class (as used by FTP, SMTP etc)
-
-=item Net::Config
-
-Local configuration data for libnet
-
-=item Net::Domain
-
-Attempt to evaluate the current host's internet name and domain
-
-=item Net::FTP
-
-FTP Client class
-
-=item Net::NNTP
-
-NNTP Client class
-
-=item Net::Netrc
-
-OO interface to users netrc file
-
-=item Net::POP3
-
-Post Office Protocol 3 Client class (RFC1939)
-
-=item Net::Ping
-
-Check a remote host for reachability
-
-=item Net::SMTP
-
-Simple Mail Transfer Protocol Client
-
-=item Net::Time
-
-Time and daytime network client interface
-
-=item Net::hostent
-
-By-name interface to Perl's built-in gethost*() functions
-
-=item Net::libnetFAQ
-
-Libnet Frequently Asked Questions
-
-=item Net::netent
-
-By-name interface to Perl's built-in getnet*() functions
-
-=item Net::protoent
-
-By-name interface to Perl's built-in getproto*() functions
-
-=item Net::servent
-
-By-name interface to Perl's built-in getserv*() functions
-
-=item O
-
-Generic interface to Perl Compiler backends
-
-=item ODBM_File
-
-Tied access to odbm files
-
-=item Opcode
-
-Disable named opcodes when compiling perl code
-
-=item POSIX
-
-Perl interface to IEEE Std 1003.1
-
-=item Package::Constants
-
-List all constants declared in a package
-
-=item Params::Check
-
-A generic input parsing/checking mechanism.
-
-=item PerlIO
-
-On demand loader for PerlIO layers and root of PerlIO::* name space
-
-=item PerlIO::encoding
-
-Encoding layer
-
-=item PerlIO::scalar
-
-In-memory IO, scalar IO
-
-=item PerlIO::via
-
-Helper class for PerlIO layers implemented in perl
-
-=item PerlIO::via::QuotedPrint
-
-PerlIO layer for quoted-printable strings
-
-=item Pod::Checker
-
-Check pod documents for syntax errors
-
-=item Pod::Escapes
-
-For resolving Pod EE<lt>...E<gt> sequences
-
-=item Pod::Find
-
-Find POD documents in directory trees
-
-=item Pod::Functions
-
-Group Perl's functions a la perlfunc.pod
-
-=item Pod::Html
-
-Module to convert pod files to HTML
-
-=item Pod::InputObjects
-
-Objects representing POD input paragraphs, commands, etc.
-
-=item Pod::LaTeX
-
-Convert Pod data to formatted Latex
-
-=item Pod::Man
-
-Convert POD data to formatted *roff input
-
-=item Pod::ParseLink
-
-Parse an LE<lt>E<gt> formatting code in POD text
-
-=item Pod::ParseUtils
-
-Helpers for POD parsing and conversion
-
-=item Pod::Parser
-
-Base class for creating POD filters and translators
-
-=item Pod::Perldoc::ToChecker
-
-Let Perldoc check Pod for errors
-
-=item Pod::Perldoc::ToMan
-
-Let Perldoc render Pod as man pages
-
-=item Pod::Perldoc::ToNroff
-
-Let Perldoc convert Pod to nroff
-
-=item Pod::Perldoc::ToPod
-
-Let Perldoc render Pod as ... Pod!
-
-=item Pod::Perldoc::ToRtf
-
-Let Perldoc render Pod as RTF
-
-=item Pod::Perldoc::ToText
-
-Let Perldoc render Pod as plaintext
-
-=item Pod::Perldoc::ToTk
-
-Let Perldoc use Tk::Pod to render Pod
-
-=item Pod::Perldoc::ToXml
-
-Let Perldoc render Pod as XML
-
-=item Pod::PlainText
-
-Convert POD data to formatted ASCII text
-
-=item Pod::Plainer
-
-Perl extension for converting Pod to old style Pod.
-
-=item Pod::Select
-
-Extract selected sections of POD from input
-
-=item Pod::Simple
-
-Framework for parsing Pod
-
-=item Pod::Simple::Checker
-
-Check the Pod syntax of a document
-
-=item Pod::Simple::Debug
-
-Put Pod::Simple into trace/debug mode
-
-=item Pod::Simple::DumpAsText
-
-Dump Pod-parsing events as text
-
-=item Pod::Simple::DumpAsXML
-
-Turn Pod into XML
-
-=item Pod::Simple::HTML
-
-Convert Pod to HTML
-
-=item Pod::Simple::HTMLBatch
-
-Convert several Pod files to several HTML files
-
-=item Pod::Simple::LinkSection
-
-Represent "section" attributes of L codes
-
-=item Pod::Simple::Methody
-
-Turn Pod::Simple events into method calls
-
-=item Pod::Simple::PullParser
-
-A pull-parser interface to parsing Pod
-
-=item Pod::Simple::PullParserEndToken
-
-End-tokens from Pod::Simple::PullParser
-
-=item Pod::Simple::PullParserStartToken
-
-Start-tokens from Pod::Simple::PullParser
-
-=item Pod::Simple::PullParserTextToken
-
-Text-tokens from Pod::Simple::PullParser
-
-=item Pod::Simple::PullParserToken
-
-Tokens from Pod::Simple::PullParser
-
-=item Pod::Simple::RTF
-
-Format Pod as RTF
-
-=item Pod::Simple::Search
-
-Find POD documents in directory trees
-
-=item Pod::Simple::SimpleTree
-
-Parse Pod into a simple parse tree
-
-=item Pod::Simple::Subclassing
-
-Write a formatter as a Pod::Simple subclass
-
-=item Pod::Simple::Text
-
-Format Pod as plaintext
-
-=item Pod::Simple::TextContent
-
-Get the text content of Pod
-
-=item Pod::Simple::XMLOutStream
-
-Turn Pod into XML
-
-=item Pod::Text
-
-Convert POD data to formatted ASCII text
-
-=item Pod::Text::Color
-
-Convert POD data to formatted color ASCII text
-
-=item Pod::Text::Overstrike
-
-Convert POD data to formatted overstrike text
-
-=item Pod::Text::Termcap
-
-Convert POD data to ASCII text with format escapes
-
-=item Pod::Usage
-
-Print a usage message from embedded pod documentation
-
-=item SDBM_File
-
-Tied access to sdbm files
-
-=item Safe
-
-Compile and execute code in restricted compartments
-
-=item Scalar::Util
-
-A selection of general-utility scalar subroutines
-
-=item Search::Dict
-
-Search for key in dictionary file
-
-=item SelectSaver
-
-Save and restore selected file handle
-
-=item SelfLoader
-
-Load functions only on demand
-
-=item Shell
-
-Run shell commands transparently within perl
-
-=item Socket
-
-Load the C socket.h defines and structure manipulators
-
-=item Storable
-
-Persistence for Perl data structures
-
-=item Switch
-
-A switch statement for Perl
-
-=item Symbol
-
-Manipulate Perl symbols and their names
-
-=item Sys::Hostname
-
-Try every conceivable way to get hostname
-
-=item Sys::Syslog
-
-Perl interface to the UNIX syslog(3) calls
-
-=item Sys::Syslog::win32::Win32
-
-Win32 support for Sys::Syslog
-
-=item Term::ANSIColor
-
-Color screen output using ANSI escape sequences
-
-=item Term::Cap
-
-Perl termcap interface
-
-=item Term::Complete
-
-Perl word completion module
-
-=item Term::ReadLine
-
-Perl interface to various C<readline> packages.
-
-=item Term::UI
-
-Term::ReadLine UI made easy
-
-=item Test
-
-Provides a simple framework for writing test scripts
-
-=item Test::Builder
-
-Backend for building test libraries
-
-=item Test::Builder::Module
-
-Base class for test modules
-
-=item Test::Builder::Tester
-
-Test testsuites that have been built with
-
-=item Test::Builder::Tester::Color
-
-Turn on colour in Test::Builder::Tester
-
-=item Test::Harness
-
-Run Perl standard test scripts with statistics
-
-=item Test::Harness::Assert
-
-Simple assert
-
-=item Test::Harness::Iterator
-
-Internal Test::Harness Iterator
-
-=item Test::Harness::Point
-
-Object for tracking a single test point
-
-=item Test::Harness::Results
-
-Object for tracking results from a single test file
-
-=item Test::Harness::Straps
-
-Detailed analysis of test results
-
-=item Test::Harness::TAP
-
-Documentation for the TAP format
-
-=item Test::Harness::Util
-
-Utility functions for Test::Harness::*
-
-=item Test::More
-
-Yet another framework for writing test scripts
-
-=item Test::Simple
-
-Basic utilities for writing tests.
-
-=item Test::Tutorial
-
-A tutorial about writing really basic tests
-
-=item Text::Abbrev
-
-Create an abbreviation table from a list
-
-=item Text::Balanced
-
-Extract delimited text sequences from strings.
-
-=item Text::ParseWords
-
-Parse text into an array of tokens or array of arrays
-
-=item Text::Soundex
-
-Implementation of the soundex algorithm.
-
-=item Text::Tabs
-
-Expand and unexpand tabs per the unix expand(1) and unexpand(1)
-
-=item Text::Wrap
-
-Line wrapping to form simple paragraphs
-
-=item Thread
-
-Manipulate threads in Perl (for old code only)
-
-=item Thread::Queue
-
-Thread-safe queues
-
-=item Thread::Semaphore
-
-Thread-safe semaphores
-
-=item Tie::Array
-
-Base class for tied arrays
-
-=item Tie::File
-
-Access the lines of a disk file via a Perl array
-
-=item Tie::Handle
-
-Base class definitions for tied handles
-
-=item Tie::Hash
-
-Base class definitions for tied hashes
-
-=item Tie::Hash::NamedCapture
-
-Named regexp capture buffers
-
-=item Tie::Memoize
-
-Add data to hash when needed
-
-=item Tie::RefHash
-
-Use references as hash keys
-
-=item Tie::Scalar
-
-Base class definitions for tied scalars
-
-=item Tie::SubstrHash
-
-Fixed-table-size, fixed-key-length hashing
-
-=item Time::HiRes
-
-High resolution alarm, sleep, gettimeofday, interval timers
-
-=item Time::Local
-
-Efficiently compute time from local and GMT time
-
-=item Time::Piece
-
-Object Oriented time objects
-
-=item Time::Piece::Seconds
-
-A simple API to convert seconds to other date values
-
-=item Time::gmtime
-
-By-name interface to Perl's built-in gmtime() function
-
-=item Time::localtime
-
-By-name interface to Perl's built-in localtime() function
-
-=item Time::tm
-
-Internal object used by Time::gmtime and Time::localtime
-
-=item UNIVERSAL
-
-Base class for ALL classes (blessed references)
-
-=item Unicode::Collate
-
-Unicode Collation Algorithm
-
-=item Unicode::Normalize
-
-Unicode Normalization Forms
-
-=item Unicode::UCD
-
-Unicode character database
-
-=item User::grent
-
-By-name interface to Perl's built-in getgr*() functions
-
-=item User::pwent
-
-By-name interface to Perl's built-in getpw*() functions
-
-=item Win32
-
-Interfaces to some Win32 API Functions
-
-=item Win32API::File
-
-Low-level access to Win32 system API calls for files/dirs.
-
-=item Win32CORE
-
-Win32 CORE function stubs
-
-=item XS::APItest
-
-Test the perl C API
-
-=item XS::Typemap
-
-Module to test the XS typemaps distributed with perl
-
-=item XSLoader
-
-Dynamically load C libraries into Perl code
-
-=back
-
-To find out I<all> modules installed on your system, including
-those without documentation or outside the standard release,
-just use the following command (under the default win32 shell,
-double quotes should be used instead of single quotes).
-
- % perl -MFile::Find=find -MFile::Spec::Functions -Tlwe \
- 'find { wanted => sub { print canonpath $_ if /\.pm\z/ },
- no_chdir => 1 }, @INC'
-
-(The -T is here to prevent '.' from being listed in @INC.)
-They should all have their own documentation installed and accessible
-via your system man(1) command. If you do not have a B<find>
-program, you can use the Perl B<find2perl> program instead, which
-generates Perl code as output you can run through perl. If you
-have a B<man> program but it doesn't find your modules, you'll have
-to fix your manpath. See L<perl> for details. If you have no
-system B<man> command, you might try the B<perldoc> program.
-
-Note also that the command C<perldoc perllocal> gives you a (possibly
-incomplete) list of the modules that have been further installed on
-your system. (The perllocal.pod file is updated by the standard MakeMaker
-install process.)
-
-=head2 Extension Modules
-
-Extension modules are written in C (or a mix of Perl and C). They
-are usually dynamically loaded into Perl if and when you need them,
-but may also be linked in statically. Supported extension modules
-include Socket, Fcntl, and POSIX.
-
-Many popular C extension modules do not come bundled (at least, not
-completely) due to their sizes, volatility, or simply lack of time
-for adequate testing and configuration across the multitude of
-platforms on which Perl was beta-tested. You are encouraged to
-look for them on CPAN (described below), or using web search engines
-like Alta Vista or Google.
-
-=head1 CPAN
-
-CPAN stands for Comprehensive Perl Archive Network; it's a globally
-replicated trove of Perl materials, including documentation, style
-guides, tricks and traps, alternate ports to non-Unix systems and
-occasional binary distributions for these. Search engines for
-CPAN can be found at http://www.cpan.org/
-
-Most importantly, CPAN includes around a thousand unbundled modules,
-some of which require a C compiler to build. Major categories of
-modules are:
-
-=over
-
-=item *
-
-Language Extensions and Documentation Tools
-
-=item *
-
-Development Support
-
-=item *
-
-Operating System Interfaces
-
-=item *
-
-Networking, Device Control (modems) and InterProcess Communication
-
-=item *
-
-Data Types and Data Type Utilities
-
-=item *
-
-Database Interfaces
-
-=item *
-
-User Interfaces
-
-=item *
-
-Interfaces to / Emulations of Other Programming Languages
-
-=item *
-
-File Names, File Systems and File Locking (see also File Handles)
-
-=item *
-
-String Processing, Language Text Processing, Parsing, and Searching
-
-=item *
-
-Option, Argument, Parameter, and Configuration File Processing
-
-=item *
-
-Internationalization and Locale
-
-=item *
-
-Authentication, Security, and Encryption
-
-=item *
-
-World Wide Web, HTML, HTTP, CGI, MIME
-
-=item *
-
-Server and Daemon Utilities
-
-=item *
-
-Archiving and Compression
-
-=item *
-
-Images, Pixmap and Bitmap Manipulation, Drawing, and Graphing
-
-=item *
-
-Mail and Usenet News
-
-=item *
-
-Control Flow Utilities (callbacks and exceptions etc)
-
-=item *
-
-File Handle and Input/Output Stream Utilities
-
-=item *
-
-Miscellaneous Modules
-
-=back
-
-The list of the registered CPAN sites as of this writing follows.
-Please note that the sorting order is alphabetical on fields:
-
-Continent
- |
- |-->Country
- |
- |-->[state/province]
- |
- |-->ftp
- |
- |-->[http]
-
-and thus the North American servers happen to be listed between the
-European and the South American sites.
-
-You should try to choose one close to you.
-
-=head2 Africa
-
-=over 4
-
-=item South Africa
-
- http://ftp.rucus.ru.ac.za/pub/perl/CPAN/
- ftp://ftp.rucus.ru.ac.za/pub/perl/CPAN/
- ftp://ftp.is.co.za/programming/perl/CPAN/
- ftp://ftp.saix.net/pub/CPAN/
- ftp://ftp.sun.ac.za/CPAN/CPAN/
-
-=back
-
-=head2 Asia
-
-=over 4
-
-=item China
-
- http://cpan.linuxforum.net/
- http://cpan.shellhung.org/
- ftp://ftp.shellhung.org/pub/CPAN
- ftp://mirrors.hknet.com/CPAN
-
-=item Indonesia
-
- http://mirrors.tf.itb.ac.id/cpan/
- http://cpan.cbn.net.id/
- ftp://ftp.cbn.net.id/mirror/CPAN
-
-=item Israel
-
- ftp://ftp.iglu.org.il/pub/CPAN/
- http://cpan.lerner.co.il/
- http://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/
- ftp://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/
-
-=item Japan
-
- ftp://ftp.u-aizu.ac.jp/pub/CPAN
- ftp://ftp.kddlabs.co.jp/CPAN/
- ftp://ftp.ayamura.org/pub/CPAN/
- ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/
- http://ftp.cpan.jp/
- ftp://ftp.cpan.jp/CPAN/
- ftp://ftp.dti.ad.jp/pub/lang/CPAN/
- ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
-
-=item Malaysia
-
- http://cpan.MyBSD.org.my
- http://mirror.leafbug.org/pub/CPAN
- http://ossig.mncc.com.my/mirror/pub/CPAN
-
-=item Russian Federation
-
- http://cpan.tomsk.ru
- ftp://cpan.tomsk.ru/
-
-=item Saudi Arabia
-
- ftp://ftp.isu.net.sa/pub/CPAN/
-
-=item Singapore
-
- http://CPAN.en.com.sg/
- ftp://cpan.en.com.sg/
- http://mirror.averse.net/pub/CPAN
- ftp://mirror.averse.net/pub/CPAN
- http://cpan.oss.eznetsols.org
- ftp://ftp.oss.eznetsols.org/cpan
-
-=item South Korea
-
- http://CPAN.bora.net/
- ftp://ftp.bora.net/pub/CPAN/
- http://mirror.kr.FreeBSD.org/CPAN
- ftp://ftp.kr.FreeBSD.org/pub/CPAN
-
-=item Taiwan
-
- ftp://ftp.nctu.edu.tw/UNIX/perl/CPAN
- http://cpan.cdpa.nsysu.edu.tw/
- ftp://cpan.cdpa.nsysu.edu.tw/pub/CPAN
- http://ftp.isu.edu.tw/pub/CPAN
- ftp://ftp.isu.edu.tw/pub/CPAN
- ftp://ftp1.sinica.edu.tw/pub1/perl/CPAN/
- http://ftp.tku.edu.tw/pub/CPAN/
- ftp://ftp.tku.edu.tw/pub/CPAN/
-
-=item Thailand
-
- ftp://ftp.loxinfo.co.th/pub/cpan/
- ftp://ftp.cs.riubon.ac.th/pub/mirrors/CPAN/
-
-=back
-
-=head2 Central America
-
-=over 4
-
-=item Costa Rica
-
- http://ftp.ucr.ac.cr/Unix/CPAN/
- ftp://ftp.ucr.ac.cr/pub/Unix/CPAN/
-
-=back
-
-=head2 Europe
-
-=over 4
-
-=item Austria
-
- http://cpan.inode.at/
- ftp://cpan.inode.at
- ftp://ftp.tuwien.ac.at/pub/CPAN/
-
-=item Belgium
-
- http://ftp.easynet.be/pub/CPAN/
- ftp://ftp.easynet.be/pub/CPAN/
- http://cpan.skynet.be
- ftp://ftp.cpan.skynet.be/pub/CPAN
- ftp://ftp.kulnet.kuleuven.ac.be/pub/mirror/CPAN/
-
-=item Bosnia and Herzegovina
-
- http://cpan.blic.net/
-
-=item Bulgaria
-
- http://cpan.online.bg
- ftp://cpan.online.bg/cpan
- http://cpan.zadnik.org
- ftp://ftp.zadnik.org/mirrors/CPAN/
- http://cpan.lirex.net/
- ftp://ftp.lirex.net/pub/mirrors/CPAN
-
-=item Croatia
-
- http://ftp.linux.hr/pub/CPAN/
- ftp://ftp.linux.hr/pub/CPAN/
-
-=item Czech Republic
-
- ftp://ftp.fi.muni.cz/pub/CPAN/
- ftp://sunsite.mff.cuni.cz/MIRRORS/ftp.funet.fi/pub/languages/perl/CPAN/
-
-=item Denmark
-
- http://mirrors.sunsite.dk/cpan/
- ftp://sunsite.dk/mirrors/cpan/
- http://cpan.cybercity.dk
- http://www.cpan.dk/CPAN/
- ftp://www.cpan.dk/ftp.cpan.org/CPAN/
-
-=item Estonia
-
- ftp://ftp.ut.ee/pub/languages/perl/CPAN/
-
-=item Finland
-
- ftp://ftp.funet.fi/pub/languages/perl/CPAN/
- http://mirror.eunet.fi/CPAN
-
-=item France
-
- http://www.enstimac.fr/Perl/CPAN
- http://ftp.u-paris10.fr/perl/CPAN
- ftp://ftp.u-paris10.fr/perl/CPAN
- http://cpan.mirrors.easynet.fr/
- ftp://cpan.mirrors.easynet.fr/pub/ftp.cpan.org/
- ftp://ftp.club-internet.fr/pub/perl/CPAN/
- http://fr.cpan.org/
- ftp://ftp.lip6.fr/pub/perl/CPAN/
- ftp://ftp.oleane.net/pub/mirrors/CPAN/
- ftp://ftp.pasteur.fr/pub/computing/CPAN/
- http://mir2.ovh.net/ftp.cpan.org
- ftp://mir1.ovh.net/ftp.cpan.org
- http://ftp.crihan.fr/mirrors/ftp.cpan.org/
- ftp://ftp.crihan.fr/mirrors/ftp.cpan.org/
- http://ftp.u-strasbg.fr/CPAN
- ftp://ftp.u-strasbg.fr/CPAN
- ftp://cpan.cict.fr/pub/CPAN/
- ftp://ftp.uvsq.fr/pub/perl/CPAN/
-
-=item Germany
-
- ftp://ftp.rub.de/pub/CPAN/
- ftp://ftp.freenet.de/pub/ftp.cpan.org/pub/CPAN/
- ftp://ftp.uni-erlangen.de/pub/source/CPAN/
- ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/CPAN
- http://pandemonium.tiscali.de/pub/CPAN/
- ftp://pandemonium.tiscali.de/pub/CPAN/
- http://ftp.gwdg.de/pub/languages/perl/CPAN/
- ftp://ftp.gwdg.de/pub/languages/perl/CPAN/
- ftp://ftp.uni-hamburg.de/pub/soft/lang/perl/CPAN/
- ftp://ftp.leo.org/pub/CPAN/
- http://cpan.noris.de/
- ftp://cpan.noris.de/pub/CPAN/
- ftp://ftp.mpi-sb.mpg.de/pub/perl/CPAN/
- ftp://ftp.gmd.de/mirrors/CPAN/
-
-=item Greece
-
- ftp://ftp.acn.gr/pub/lang/perl
- ftp://ftp.forthnet.gr/pub/languages/perl/CPAN
- ftp://ftp.ntua.gr/pub/lang/perl/
-
-=item Hungary
-
- http://ftp.kfki.hu/packages/perl/CPAN/
- ftp://ftp.kfki.hu/pub/packages/perl/CPAN/
-
-=item Iceland
-
- http://ftp.rhnet.is/pub/CPAN/
- ftp://ftp.rhnet.is/pub/CPAN/
-
-=item Ireland
-
- http://cpan.indigo.ie/
- ftp://cpan.indigo.ie/pub/CPAN/
- http://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN
- ftp://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN
- http://sunsite.compapp.dcu.ie/pub/perl/
- ftp://sunsite.compapp.dcu.ie/pub/perl/
-
-=item Italy
-
- http://cpan.nettuno.it/
- http://gusp.dyndns.org/CPAN/
- ftp://gusp.dyndns.org/pub/CPAN
- http://softcity.iol.it/cpan
- ftp://softcity.iol.it/pub/cpan
- ftp://ftp.unina.it/pub/Other/CPAN/CPAN/
- ftp://ftp.unipi.it/pub/mirror/perl/CPAN/
- ftp://cis.uniRoma2.it/CPAN/
- ftp://ftp.edisontel.it/pub/CPAN_Mirror/
- http://cpan.flashnet.it/
- ftp://ftp.flashnet.it/pub/CPAN/
-
-=item Latvia
-
- http://kvin.lv/pub/CPAN/
-
-=item Lithuania
-
- ftp://ftp.unix.lt/pub/CPAN/
-
-=item Netherlands
-
- ftp://download.xs4all.nl/pub/mirror/CPAN/
- ftp://ftp.nl.uu.net/pub/CPAN/
- ftp://ftp.nluug.nl/pub/languages/perl/CPAN/
- http://cpan.cybercomm.nl/
- ftp://mirror.cybercomm.nl/pub/CPAN
- ftp://mirror.vuurwerk.nl/pub/CPAN/
- ftp://ftp.cpan.nl/pub/CPAN/
- http://ftp.easynet.nl/mirror/CPAN
- ftp://ftp.easynet.nl/mirror/CPAN
- http://archive.cs.uu.nl/mirror/CPAN/
- ftp://ftp.cs.uu.nl/mirror/CPAN/
-
-=item Norway
-
- ftp://ftp.uninett.no/pub/languages/perl/CPAN
- ftp://ftp.uit.no/pub/languages/perl/cpan/
-
-=item Poland
-
- ftp://ftp.mega.net.pl/CPAN
- ftp://ftp.man.torun.pl/pub/doc/CPAN/
- ftp://sunsite.icm.edu.pl/pub/CPAN/
-
-=item Portugal
-
- ftp://ftp.ua.pt/pub/CPAN/
- ftp://perl.di.uminho.pt/pub/CPAN/
- http://cpan.dei.uc.pt/
- ftp://ftp.dei.uc.pt/pub/CPAN
- ftp://ftp.nfsi.pt/pub/CPAN
- http://ftp.linux.pt/pub/mirrors/CPAN
- ftp://ftp.linux.pt/pub/mirrors/CPAN
- http://cpan.ip.pt/
- ftp://cpan.ip.pt/pub/cpan/
- http://cpan.telepac.pt/
- ftp://ftp.telepac.pt/pub/cpan/
-
-=item Romania
-
- ftp://ftp.bio-net.ro/pub/CPAN
- ftp://ftp.kappa.ro/pub/mirrors/ftp.perl.org/pub/CPAN/
- ftp://ftp.lug.ro/CPAN
- ftp://ftp.roedu.net/pub/CPAN/
- ftp://ftp.dntis.ro/pub/cpan/
- ftp://ftp.iasi.roedu.net/pub/mirrors/ftp.cpan.org/
- http://cpan.ambra.ro/
- ftp://ftp.ambra.ro/pub/CPAN
- ftp://ftp.dnttm.ro/pub/CPAN/
- ftp://ftp.lasting.ro/pub/CPAN
- ftp://ftp.timisoara.roedu.net/mirrors/CPAN/
-
-=item Russia
-
- ftp://ftp.chg.ru/pub/lang/perl/CPAN/
- http://cpan.rinet.ru/
- ftp://cpan.rinet.ru/pub/mirror/CPAN/
- ftp://ftp.aha.ru/pub/CPAN/
- ftp://ftp.corbina.ru/pub/CPAN/
- http://cpan.sai.msu.ru/
- ftp://ftp.sai.msu.su/pub/lang/perl/CPAN/
-
-=item Slovakia
-
- ftp://ftp.cvt.stuba.sk/pub/CPAN/
-
-=item Slovenia
-
- ftp://ftp.arnes.si/software/perl/CPAN/
-
-=item Spain
-
- http://cpan.imasd.elmundo.es/
- ftp://ftp.rediris.es/mirror/CPAN/
- ftp://ftp.ri.telefonica-data.net/CPAN
- ftp://ftp.etse.urv.es/pub/perl/
-
-=item Sweden
-
- http://ftp.du.se/CPAN/
- ftp://ftp.du.se/pub/CPAN/
- http://mirror.dataphone.se/CPAN
- ftp://mirror.dataphone.se/pub/CPAN
- ftp://ftp.sunet.se/pub/lang/perl/CPAN/
-
-=item Switzerland
-
- http://cpan.mirror.solnet.ch/
- ftp://ftp.solnet.ch/mirror/CPAN/
- ftp://ftp.danyk.ch/CPAN/
- ftp://sunsite.cnlab-switch.ch/mirror/CPAN/
-
-=item Turkey
-
- http://ftp.ulak.net.tr/perl/CPAN/
- ftp://ftp.ulak.net.tr/perl/CPAN
- ftp://sunsite.bilkent.edu.tr/pub/languages/CPAN/
-
-=item Ukraine
-
- http://cpan.org.ua/
- ftp://cpan.org.ua/
- ftp://ftp.perl.org.ua/pub/CPAN/
- http://no-more.kiev.ua/CPAN/
- ftp://no-more.kiev.ua/pub/CPAN/
-
-=item United Kingdom
-
- http://www.mirror.ac.uk/sites/ftp.funet.fi/pub/languages/perl/CPAN
- ftp://ftp.mirror.ac.uk/sites/ftp.funet.fi/pub/languages/perl/CPAN/
- http://cpan.teleglobe.net/
- ftp://cpan.teleglobe.net/pub/CPAN
- http://cpan.mirror.anlx.net/
- ftp://ftp.mirror.anlx.net/CPAN/
- http://cpan.etla.org/
- ftp://cpan.etla.org/pub/CPAN
- ftp://ftp.demon.co.uk/pub/CPAN/
- http://cpan.m.flirble.org/
- ftp://ftp.flirble.org/pub/languages/perl/CPAN/
- ftp://ftp.plig.org/pub/CPAN/
- http://cpan.hambule.co.uk/
- http://cpan.mirrors.clockerz.net/
- ftp://ftp.clockerz.net/pub/CPAN/
- ftp://usit.shef.ac.uk/pub/packages/CPAN/
-
-=back
-
-=head2 North America
-
-=over 4
-
-=item Canada
-
-=over 8
-
-=item Alberta
-
- http://cpan.sunsite.ualberta.ca/
- ftp://cpan.sunsite.ualberta.ca/pub/CPAN/
-
-=item Manitoba
-
- http://theoryx5.uwinnipeg.ca/pub/CPAN/
- ftp://theoryx5.uwinnipeg.ca/pub/CPAN/
-
-=item Nova Scotia
-
- ftp://cpan.chebucto.ns.ca/pub/CPAN/
-
-=item Ontario
-
- ftp://ftp.nrc.ca/pub/CPAN/
-
-=back
-
-=item Mexico
-
- http://cpan.azc.uam.mx
- ftp://cpan.azc.uam.mx/mirrors/CPAN
- http://www.cpan.unam.mx/
- ftp://ftp.unam.mx/pub/CPAN
- http://www.msg.com.mx/CPAN/
- ftp://ftp.msg.com.mx/pub/CPAN/
-
-=item United States
-
-=over 8
-
-=item Alabama
-
- http://mirror.hiwaay.net/CPAN/
- ftp://mirror.hiwaay.net/CPAN/
-
-=item California
-
- http://cpan.develooper.com/
- http://www.cpan.org/
- ftp://cpan.valueclick.com/pub/CPAN/
- http://www.mednor.net/ftp/pub/mirrors/CPAN/
- ftp://ftp.mednor.net/pub/mirrors/CPAN/
- http://mirrors.gossamer-threads.com/CPAN
- ftp://cpan.nas.nasa.gov/pub/perl/CPAN/
- http://mirrors.kernel.org/cpan/
- ftp://mirrors.kernel.org/pub/CPAN
- http://cpan-sj.viaverio.com/
- ftp://cpan-sj.viaverio.com/pub/CPAN/
- http://cpan.digisle.net/
- ftp://cpan.digisle.net/pub/CPAN
- http://www.perl.com/CPAN/
- http://www.uberlan.net/CPAN
-
-=item Colorado
-
- ftp://ftp.cs.colorado.edu/pub/perl/CPAN/
- http://cpan.four10.com
-
-=item Delaware
-
- http://ftp.lug.udel.edu/pub/CPAN
- ftp://ftp.lug.udel.edu/pub/CPAN
-
-=item District of Columbia
-
- ftp://ftp.dc.aleron.net/pub/CPAN/
-
-=item Florida
-
- ftp://ftp.cise.ufl.edu/pub/mirrors/CPAN/
- http://mirror.csit.fsu.edu/pub/CPAN/
- ftp://mirror.csit.fsu.edu/pub/CPAN/
- http://cpan.mirrors.nks.net/
-
-=item Indiana
-
- ftp://ftp.uwsg.iu.edu/pub/perl/CPAN/
- http://cpan.netnitco.net/
- ftp://cpan.netnitco.net/pub/mirrors/CPAN/
- http://archive.progeny.com/CPAN/
- ftp://archive.progeny.com/CPAN/
- http://fx.saintjoe.edu/pub/CPAN
- ftp://ftp.saintjoe.edu/pub/CPAN
- http://csociety-ftp.ecn.purdue.edu/pub/CPAN
- ftp://csociety-ftp.ecn.purdue.edu/pub/CPAN
-
-=item Kentucky
-
- http://cpan.uky.edu/
- ftp://cpan.uky.edu/pub/CPAN/
- http://slugsite.louisville.edu/cpan
- ftp://slugsite.louisville.edu/CPAN
-
-=item Massachusetts
-
- http://mirrors.towardex.com/CPAN
- ftp://mirrors.towardex.com/pub/CPAN
- ftp://ftp.ccs.neu.edu/net/mirrors/ftp.funet.fi/pub/languages/perl/CPAN/
-
-=item Michigan
-
- ftp://cpan.cse.msu.edu/
- http://cpan.calvin.edu/pub/CPAN
- ftp://cpan.calvin.edu/pub/CPAN
-
-=item Nevada
-
- http://www.oss.redundant.com/pub/CPAN
- ftp://www.oss.redundant.com/pub/CPAN
-
-=item New Jersey
-
- http://ftp.cpanel.net/pub/CPAN/
- ftp://ftp.cpanel.net/pub/CPAN/
- http://cpan.teleglobe.net/
- ftp://cpan.teleglobe.net/pub/CPAN
-
-=item New York
-
- http://cpan.belfry.net/
- http://cpan.erlbaum.net/
- ftp://cpan.erlbaum.net/
- http://cpan.thepirtgroup.com/
- ftp://cpan.thepirtgroup.com/
- ftp://ftp.stealth.net/pub/CPAN/
- http://www.rge.com/pub/languages/perl/
- ftp://ftp.rge.com/pub/languages/perl/
-
-=item North Carolina
-
- http://www.ibiblio.org/pub/languages/perl/CPAN
- ftp://ftp.ibiblio.org/pub/languages/perl/CPAN
- ftp://ftp.duke.edu/pub/perl/
- ftp://ftp.ncsu.edu/pub/mirror/CPAN/
-
-=item Oklahoma
-
- ftp://ftp.ou.edu/mirrors/CPAN/
-
-=item Oregon
-
- ftp://ftp.orst.edu/pub/CPAN
-
-=item Pennsylvania
-
- http://ftp.epix.net/CPAN/
- ftp://ftp.epix.net/pub/languages/perl/
- http://mirrors.phenominet.com/pub/CPAN/
- ftp://mirrors.phenominet.com/pub/CPAN/
- http://cpan.pair.com/
- ftp://cpan.pair.com/pub/CPAN/
- ftp://carroll.cac.psu.edu/pub/CPAN/
-
-=item Tennessee
-
- ftp://ftp.sunsite.utk.edu/pub/CPAN/
-
-=item Texas
-
- http://ftp.sedl.org/pub/mirrors/CPAN/
- http://www.binarycode.org/cpan
- ftp://mirror.telentente.com/pub/CPAN
- http://mirrors.theonlinerecordstore.com/CPAN
-
-=item Utah
-
- ftp://mirror.xmission.com/CPAN/
-
-=item Virginia
-
- http://cpan-du.viaverio.com/
- ftp://cpan-du.viaverio.com/pub/CPAN/
- http://mirrors.rcn.net/pub/lang/CPAN/
- ftp://mirrors.rcn.net/pub/lang/CPAN/
- http://perl.secsup.org/
- ftp://perl.secsup.org/pub/perl/
- http://noc.cvaix.com/mirrors/CPAN/
-
-=item Washington
-
- http://cpan.llarian.net/
- ftp://cpan.llarian.net/pub/CPAN/
- http://cpan.mirrorcentral.com/
- ftp://ftp.mirrorcentral.com/pub/CPAN/
- ftp://ftp-mirror.internap.com/pub/CPAN/
-
-=item Wisconsin
-
- http://mirror.sit.wisc.edu/pub/CPAN/
- ftp://mirror.sit.wisc.edu/pub/CPAN/
- http://mirror.aphix.com/CPAN
- ftp://mirror.aphix.com/pub/CPAN
-
-=back
-
-=back
-
-=head2 Oceania
-
-=over 4
-
-=item Australia
-
- http://ftp.planetmirror.com/pub/CPAN/
- ftp://ftp.planetmirror.com/pub/CPAN/
- ftp://mirror.aarnet.edu.au/pub/perl/CPAN/
- ftp://cpan.topend.com.au/pub/CPAN/
- http://cpan.mirrors.ilisys.com.au
-
-=item New Zealand
-
- ftp://ftp.auckland.ac.nz/pub/perl/CPAN/
-
-=item United States
-
- http://aniani.ifa.hawaii.edu/CPAN/
- ftp://aniani.ifa.hawaii.edu/CPAN/
-
-=back
-
-=head2 South America
-
-=over 4
-
-=item Argentina
-
- ftp://mirrors.bannerlandia.com.ar/mirrors/CPAN/
- http://www.linux.org.ar/mirrors/cpan
- ftp://ftp.linux.org.ar/mirrors/cpan
-
-=item Brazil
-
- ftp://cpan.pop-mg.com.br/pub/CPAN/
- ftp://ftp.matrix.com.br/pub/perl/CPAN/
- http://cpan.hostsul.com.br/
- ftp://cpan.hostsul.com.br/
-
-=item Chile
-
- http://cpan.netglobalis.net/
- ftp://cpan.netglobalis.net/pub/CPAN/
-
-=back
-
-=head2 RSYNC Mirrors
-
- www.linux.org.ar::cpan
- theoryx5.uwinnipeg.ca::CPAN
- ftp.shellhung.org::CPAN
- rsync.nic.funet.fi::CPAN
- ftp.u-paris10.fr::CPAN
- mir1.ovh.net::CPAN
- rsync://ftp.crihan.fr::CPAN
- ftp.gwdg.de::FTP/languages/perl/CPAN/
- ftp.leo.org::CPAN
- ftp.cbn.net.id::CPAN
- rsync://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN
- ftp.iglu.org.il::CPAN
- gusp.dyndns.org::cpan
- ftp.kddlabs.co.jp::cpan
- ftp.ayamura.org::pub/CPAN/
- mirror.leafbug.org::CPAN
- rsync.en.com.sg::CPAN
- mirror.averse.net::cpan
- rsync.oss.eznetsols.org
- ftp.kr.FreeBSD.org::CPAN
- ftp.solnet.ch::CPAN
- cpan.cdpa.nsysu.edu.tw::CPAN
- cpan.teleglobe.net::CPAN
- rsync://rsync.mirror.anlx.net::CPAN
- ftp.sedl.org::cpan
- ibiblio.org::CPAN
- cpan-du.viaverio.com::CPAN
- aniani.ifa.hawaii.edu::CPAN
- archive.progeny.com::CPAN
- rsync://slugsite.louisville.edu::CPAN
- mirror.aphix.com::CPAN
- cpan.teleglobe.net::CPAN
- ftp.lug.udel.edu::cpan
- mirrors.kernel.org::mirrors/CPAN
- mirrors.phenominet.com::CPAN
- cpan.pair.com::CPAN
- cpan-sj.viaverio.com::CPAN
- mirror.csit.fsu.edu::CPAN
- csociety-ftp.ecn.purdue.edu::CPAN
-
-For an up-to-date listing of CPAN sites,
-see http://www.cpan.org/SITES or ftp://www.cpan.org/SITES .
-
-=head1 Modules: Creation, Use, and Abuse
-
-(The following section is borrowed directly from Tim Bunce's modules
-file, available at your nearest CPAN site.)
-
-Perl implements a class using a package, but the presence of a
-package doesn't imply the presence of a class. A package is just a
-namespace. A class is a package that provides subroutines that can be
-used as methods. A method is just a subroutine that expects, as its
-first argument, either the name of a package (for "static" methods),
-or a reference to something (for "virtual" methods).
-
-A module is a file that (by convention) provides a class of the same
-name (sans the .pm), plus an import method in that class that can be
-called to fetch exported symbols. This module may implement some of
-its methods by loading dynamic C or C++ objects, but that should be
-totally transparent to the user of the module. Likewise, the module
-might set up an AUTOLOAD function to slurp in subroutine definitions on
-demand, but this is also transparent. Only the F<.pm> file is required to
-exist. See L<perlsub>, L<perltoot>, and L<AutoLoader> for details about
-the AUTOLOAD mechanism.
-
-=head2 Guidelines for Module Creation
-
-=over 4
-
-=item *
-
-Do similar modules already exist in some form?
-
-If so, please try to reuse the existing modules either in whole or
-by inheriting useful features into a new class. If this is not
-practical try to get together with the module authors to work on
-extending or enhancing the functionality of the existing modules.
-A perfect example is the plethora of packages in perl4 for dealing
-with command line options.
-
-If you are writing a module to expand an already existing set of
-modules, please coordinate with the author of the package. It
-helps if you follow the same naming scheme and module interaction
-scheme as the original author.
-
-=item *
-
-Try to design the new module to be easy to extend and reuse.
-
-Try to C<use warnings;> (or C<use warnings qw(...);>).
-Remember that you can add C<no warnings qw(...);> to individual blocks
-of code that need less warnings.
-
-Use blessed references. Use the two argument form of bless to bless
-into the class name given as the first parameter of the constructor,
-e.g.,:
-
- sub new {
- my $class = shift;
- return bless {}, $class;
- }
-
-or even this if you'd like it to be used as either a static
-or a virtual method.
-
- sub new {
- my $self = shift;
- my $class = ref($self) || $self;
- return bless {}, $class;
- }
-
-Pass arrays as references so more parameters can be added later
-(it's also faster). Convert functions into methods where
-appropriate. Split large methods into smaller more flexible ones.
-Inherit methods from other modules if appropriate.
-
-Avoid class name tests like: C<die "Invalid" unless ref $ref eq 'FOO'>.
-Generally you can delete the C<eq 'FOO'> part with no harm at all.
-Let the objects look after themselves! Generally, avoid hard-wired
-class names as far as possible.
-
-Avoid C<< $r->Class::func() >> where using C<@ISA=qw(... Class ...)> and
-C<< $r->func() >> would work (see L<perlbot> for more details).
-
-Use autosplit so little used or newly added functions won't be a
-burden to programs that don't use them. Add test functions to
-the module after __END__ either using AutoSplit or by saying:
-
- eval join('',<main::DATA>) || die $@ unless caller();
-
-Does your module pass the 'empty subclass' test? If you say
-C<@SUBCLASS::ISA = qw(YOURCLASS);> your applications should be able
-to use SUBCLASS in exactly the same way as YOURCLASS. For example,
-does your application still work if you change: C<< $obj = YOURCLASS->new(); >>
-into: C<< $obj = SUBCLASS->new(); >> ?
-
-Avoid keeping any state information in your packages. It makes it
-difficult for multiple other packages to use yours. Keep state
-information in objects.
-
-Always use B<-w>.
-
-Try to C<use strict;> (or C<use strict qw(...);>).
-Remember that you can add C<no strict qw(...);> to individual blocks
-of code that need less strictness.
-
-Always use B<-w>.
-
-Follow the guidelines in the perlstyle(1) manual.
-
-Always use B<-w>.
-
-=item *
-
-Some simple style guidelines
-
-The perlstyle manual supplied with Perl has many helpful points.
-
-Coding style is a matter of personal taste. Many people evolve their
-style over several years as they learn what helps them write and
-maintain good code. Here's one set of assorted suggestions that
-seem to be widely used by experienced developers:
-
-Use underscores to separate words. It is generally easier to read
-$var_names_like_this than $VarNamesLikeThis, especially for
-non-native speakers of English. It's also a simple rule that works
-consistently with VAR_NAMES_LIKE_THIS.
-
-Package/Module names are an exception to this rule. Perl informally
-reserves lowercase module names for 'pragma' modules like integer
-and strict. Other modules normally begin with a capital letter and
-use mixed case with no underscores (need to be short and portable).
-
-You may find it helpful to use letter case to indicate the scope
-or nature of a variable. For example:
-
- $ALL_CAPS_HERE constants only (beware clashes with Perl vars)
- $Some_Caps_Here package-wide global/static
- $no_caps_here function scope my() or local() variables
-
-Function and method names seem to work best as all lowercase.
-e.g., C<< $obj->as_string() >>.
-
-You can use a leading underscore to indicate that a variable or
-function should not be used outside the package that defined it.
-
-=item *
-
-Select what to export.
-
-Do NOT export method names!
-
-Do NOT export anything else by default without a good reason!
-
-Exports pollute the namespace of the module user. If you must
-export try to use @EXPORT_OK in preference to @EXPORT and avoid
-short or common names to reduce the risk of name clashes.
-
-Generally anything not exported is still accessible from outside the
-module using the ModuleName::item_name (or C<< $blessed_ref->method >>)
-syntax. By convention you can use a leading underscore on names to
-indicate informally that they are 'internal' and not for public use.
-
-(It is actually possible to get private functions by saying:
-C<my $subref = sub { ... }; &$subref;>. But there's no way to call that
-directly as a method, because a method must have a name in the symbol
-table.)
-
-As a general rule, if the module is trying to be object oriented
-then export nothing. If it's just a collection of functions then
- at EXPORT_OK anything but use @EXPORT with caution.
-
-=item *
-
-Select a name for the module.
-
-This name should be as descriptive, accurate, and complete as
-possible. Avoid any risk of ambiguity. Always try to use two or
-more whole words. Generally the name should reflect what is special
-about what the module does rather than how it does it. Please use
-nested module names to group informally or categorize a module.
-There should be a very good reason for a module not to have a nested name.
-Module names should begin with a capital letter.
-
-Having 57 modules all called Sort will not make life easy for anyone
-(though having 23 called Sort::Quick is only marginally better :-).
-Imagine someone trying to install your module alongside many others.
-If in any doubt ask for suggestions in comp.lang.perl.misc.
-
-If you are developing a suite of related modules/classes it's good
-practice to use nested classes with a common prefix as this will
-avoid namespace clashes. For example: Xyz::Control, Xyz::View,
-Xyz::Model etc. Use the modules in this list as a naming guide.
-
-If adding a new module to a set, follow the original author's
-standards for naming modules and the interface to methods in
-those modules.
-
-If developing modules for private internal or project specific use,
-that will never be released to the public, then you should ensure
-that their names will not clash with any future public module. You
-can do this either by using the reserved Local::* category or by
-using a category name that includes an underscore like Foo_Corp::*.
-
-To be portable each component of a module name should be limited to
-11 characters. If it might be used on MS-DOS then try to ensure each is
-unique in the first 8 characters. Nested modules make this easier.
-
-=item *
-
-Have you got it right?
-
-How do you know that you've made the right decisions? Have you
-picked an interface design that will cause problems later? Have
-you picked the most appropriate name? Do you have any questions?
-
-The best way to know for sure, and pick up many helpful suggestions,
-is to ask someone who knows. Comp.lang.perl.misc is read by just about
-all the people who develop modules and it's the best place to ask.
-
-All you need to do is post a short summary of the module, its
-purpose and interfaces. A few lines on each of the main methods is
-probably enough. (If you post the whole module it might be ignored
-by busy people - generally the very people you want to read it!)
-
-Don't worry about posting if you can't say when the module will be
-ready - just say so in the message. It might be worth inviting
-others to help you, they may be able to complete it for you!
-
-=item *
-
-README and other Additional Files.
-
-It's well known that software developers usually fully document the
-software they write. If, however, the world is in urgent need of
-your software and there is not enough time to write the full
-documentation please at least provide a README file containing:
-
-=over 10
-
-=item *
-
-A description of the module/package/extension etc.
-
-=item *
-
-A copyright notice - see below.
-
-=item *
-
-Prerequisites - what else you may need to have.
-
-=item *
-
-How to build it - possible changes to Makefile.PL etc.
-
-=item *
-
-How to install it.
-
-=item *
-
-Recent changes in this release, especially incompatibilities
-
-=item *
-
-Changes / enhancements you plan to make in the future.
-
-=back
-
-If the README file seems to be getting too large you may wish to
-split out some of the sections into separate files: INSTALL,
-Copying, ToDo etc.
-
-=over 4
-
-=item *
-
-Adding a Copyright Notice.
-
-How you choose to license your work is a personal decision.
-The general mechanism is to assert your Copyright and then make
-a declaration of how others may copy/use/modify your work.
-
-Perl, for example, is supplied with two types of licence: The GNU GPL
-and The Artistic Licence (see the files README, Copying, and Artistic,
-or L<perlgpl> and L<perlartistic>). Larry has good reasons for NOT
-just using the GNU GPL.
-
-My personal recommendation, out of respect for Larry, Perl, and the
-Perl community at large is to state something simply like:
-
- Copyright (c) 1995 Your Name. All rights reserved.
- This program is free software; you can redistribute it and/or
- modify it under the same terms as Perl itself.
-
-This statement should at least appear in the README file. You may
-also wish to include it in a Copying file and your source files.
-Remember to include the other words in addition to the Copyright.
-
-=item *
-
-Give the module a version/issue/release number.
-
-To be fully compatible with the Exporter and MakeMaker modules you
-should store your module's version number in a non-my package
-variable called $VERSION. This should be a floating point
-number with at least two digits after the decimal (i.e., hundredths,
-e.g, C<$VERSION = "0.01">). Don't use a "1.3.2" style version.
-See L<Exporter> for details.
-
-It may be handy to add a function or method to retrieve the number.
-Use the number in announcements and archive file names when
-releasing the module (ModuleName-1.02.tar.Z).
-See perldoc ExtUtils::MakeMaker.pm for details.
-
-=item *
-
-How to release and distribute a module.
-
-It's good idea to post an announcement of the availability of your
-module (or the module itself if small) to the comp.lang.perl.announce
-Usenet newsgroup. This will at least ensure very wide once-off
-distribution.
-
-If possible, register the module with CPAN. You should
-include details of its location in your announcement.
-
-Some notes about ftp archives: Please use a long descriptive file
-name that includes the version number. Most incoming directories
-will not be readable/listable, i.e., you won't be able to see your
-file after uploading it. Remember to send your email notification
-message as soon as possible after uploading else your file may get
-deleted automatically. Allow time for the file to be processed
-and/or check the file has been processed before announcing its
-location.
-
-FTP Archives for Perl Modules:
-
-Follow the instructions and links on:
-
- http://www.cpan.org/modules/00modlist.long.html
- http://www.cpan.org/modules/04pause.html
-
-or upload to one of these sites:
-
- https://pause.kbx.de/pause/
- http://pause.perl.org/pause/
-
-and notify <modules at perl.org>.
-
-By using the WWW interface you can ask the Upload Server to mirror
-your modules from your ftp or WWW site into your own directory on
-CPAN!
-
-Please remember to send me an updated entry for the Module list!
-
-=item *
-
-Take care when changing a released module.
-
-Always strive to remain compatible with previous released versions.
-Otherwise try to add a mechanism to revert to the
-old behavior if people rely on it. Document incompatible changes.
-
-=back
-
-=back
-
-=head2 Guidelines for Converting Perl 4 Library Scripts into Modules
-
-=over 4
-
-=item *
-
-There is no requirement to convert anything.
-
-If it ain't broke, don't fix it! Perl 4 library scripts should
-continue to work with no problems. You may need to make some minor
-changes (like escaping non-array @'s in double quoted strings) but
-there is no need to convert a .pl file into a Module for just that.
-
-=item *
-
-Consider the implications.
-
-All Perl applications that make use of the script will need to
-be changed (slightly) if the script is converted into a module. Is
-it worth it unless you plan to make other changes at the same time?
-
-=item *
-
-Make the most of the opportunity.
-
-If you are going to convert the script to a module you can use the
-opportunity to redesign the interface. The guidelines for module
-creation above include many of the issues you should consider.
-
-=item *
-
-The pl2pm utility will get you started.
-
-This utility will read *.pl files (given as parameters) and write
-corresponding *.pm files. The pl2pm utilities does the following:
-
-=over 10
-
-=item *
-
-Adds the standard Module prologue lines
-
-=item *
-
-Converts package specifiers from ' to ::
-
-=item *
-
-Converts die(...) to croak(...)
-
-=item *
-
-Several other minor changes
-
-=back
-
-Being a mechanical process pl2pm is not bullet proof. The converted
-code will need careful checking, especially any package statements.
-Don't delete the original .pl file till the new .pm one works!
-
-=back
-
-=head2 Guidelines for Reusing Application Code
-
-=over 4
-
-=item *
-
-Complete applications rarely belong in the Perl Module Library.
-
-=item *
-
-Many applications contain some Perl code that could be reused.
-
-Help save the world! Share your code in a form that makes it easy
-to reuse.
-
-=item *
-
-Break-out the reusable code into one or more separate module files.
-
-=item *
-
-Take the opportunity to reconsider and redesign the interfaces.
-
-=item *
-
-In some cases the 'application' can then be reduced to a small
-
-fragment of code built on top of the reusable modules. In these cases
-the application could invoked as:
-
- % perl -e 'use Module::Name; method(@ARGV)' ...
-or
- % perl -mModule::Name ... (in perl5.002 or higher)
-
-=back
-
-=head1 NOTE
-
-Perl does not enforce private and public parts of its modules as you may
-have been used to in other languages like C++, Ada, or Modula-17. Perl
-doesn't have an infatuation with enforced privacy. It would prefer
-that you stayed out of its living room because you weren't invited, not
-because it has a shotgun.
-
-The module and its user have a contract, part of which is common law,
-and part of which is "written". Part of the common law contract is
-that a module doesn't pollute any namespace it wasn't asked to. The
-written contract for the module (A.K.A. documentation) may make other
-provisions. But then you know when you C<use RedefineTheWorld> that
-you're redefining the world and willing to take the consequences.
Deleted: trunk/contrib/perl/pod/perlothrtut.pod
===================================================================
--- trunk/contrib/perl/pod/perlothrtut.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlothrtut.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1067 +0,0 @@
-=head1 NAME
-
-perlothrtut - old tutorial on threads in Perl
-
-=head1 DESCRIPTION
-
-B<WARNING>:
-This tutorial describes the old-style thread model that was introduced in
-release 5.005. This model is deprecated, and has been removed
-for version 5.10. The interfaces described here were considered
-experimental, and are likely to be buggy.
-
-For information about the new interpreter threads ("ithreads") model, see
-the F<perlthrtut> tutorial, and the L<threads> and L<threads::shared>
-modules.
-
-You are strongly encouraged to migrate any existing threads code to the
-new model as soon as possible.
-
-=head1 What Is A Thread Anyway?
-
-A thread is a flow of control through a program with a single
-execution point.
-
-Sounds an awful lot like a process, doesn't it? Well, it should.
-Threads are one of the pieces of a process. Every process has at least
-one thread and, up until now, every process running Perl had only one
-thread. With 5.005, though, you can create extra threads. We're going
-to show you how, when, and why.
-
-=head1 Threaded Program Models
-
-There are three basic ways that you can structure a threaded
-program. Which model you choose depends on what you need your program
-to do. For many non-trivial threaded programs you'll need to choose
-different models for different pieces of your program.
-
-=head2 Boss/Worker
-
-The boss/worker model usually has one `boss' thread and one or more
-`worker' threads. The boss thread gathers or generates tasks that need
-to be done, then parcels those tasks out to the appropriate worker
-thread.
-
-This model is common in GUI and server programs, where a main thread
-waits for some event and then passes that event to the appropriate
-worker threads for processing. Once the event has been passed on, the
-boss thread goes back to waiting for another event.
-
-The boss thread does relatively little work. While tasks aren't
-necessarily performed faster than with any other method, it tends to
-have the best user-response times.
-
-=head2 Work Crew
-
-In the work crew model, several threads are created that do
-essentially the same thing to different pieces of data. It closely
-mirrors classical parallel processing and vector processors, where a
-large array of processors do the exact same thing to many pieces of
-data.
-
-This model is particularly useful if the system running the program
-will distribute multiple threads across different processors. It can
-also be useful in ray tracing or rendering engines, where the
-individual threads can pass on interim results to give the user visual
-feedback.
-
-=head2 Pipeline
-
-The pipeline model divides up a task into a series of steps, and
-passes the results of one step on to the thread processing the
-next. Each thread does one thing to each piece of data and passes the
-results to the next thread in line.
-
-This model makes the most sense if you have multiple processors so two
-or more threads will be executing in parallel, though it can often
-make sense in other contexts as well. It tends to keep the individual
-tasks small and simple, as well as allowing some parts of the pipeline
-to block (on I/O or system calls, for example) while other parts keep
-going. If you're running different parts of the pipeline on different
-processors you may also take advantage of the caches on each
-processor.
-
-This model is also handy for a form of recursive programming where,
-rather than having a subroutine call itself, it instead creates
-another thread. Prime and Fibonacci generators both map well to this
-form of the pipeline model. (A version of a prime number generator is
-presented later on.)
-
-=head1 Native threads
-
-There are several different ways to implement threads on a system. How
-threads are implemented depends both on the vendor and, in some cases,
-the version of the operating system. Often the first implementation
-will be relatively simple, but later versions of the OS will be more
-sophisticated.
-
-While the information in this section is useful, it's not necessary,
-so you can skip it if you don't feel up to it.
-
-There are three basic categories of threads-user-mode threads, kernel
-threads, and multiprocessor kernel threads.
-
-User-mode threads are threads that live entirely within a program and
-its libraries. In this model, the OS knows nothing about threads. As
-far as it's concerned, your process is just a process.
-
-This is the easiest way to implement threads, and the way most OSes
-start. The big disadvantage is that, since the OS knows nothing about
-threads, if one thread blocks they all do. Typical blocking activities
-include most system calls, most I/O, and things like sleep().
-
-Kernel threads are the next step in thread evolution. The OS knows
-about kernel threads, and makes allowances for them. The main
-difference between a kernel thread and a user-mode thread is
-blocking. With kernel threads, things that block a single thread don't
-block other threads. This is not the case with user-mode threads,
-where the kernel blocks at the process level and not the thread level.
-
-This is a big step forward, and can give a threaded program quite a
-performance boost over non-threaded programs. Threads that block
-performing I/O, for example, won't block threads that are doing other
-things. Each process still has only one thread running at once,
-though, regardless of how many CPUs a system might have.
-
-Since kernel threading can interrupt a thread at any time, they will
-uncover some of the implicit locking assumptions you may make in your
-program. For example, something as simple as C<$a = $a + 2> can behave
-unpredictably with kernel threads if $a is visible to other
-threads, as another thread may have changed $a between the time it
-was fetched on the right hand side and the time the new value is
-stored.
-
-Multiprocessor Kernel Threads are the final step in thread
-support. With multiprocessor kernel threads on a machine with multiple
-CPUs, the OS may schedule two or more threads to run simultaneously on
-different CPUs.
-
-This can give a serious performance boost to your threaded program,
-since more than one thread will be executing at the same time. As a
-tradeoff, though, any of those nagging synchronization issues that
-might not have shown with basic kernel threads will appear with a
-vengeance.
-
-In addition to the different levels of OS involvement in threads,
-different OSes (and different thread implementations for a particular
-OS) allocate CPU cycles to threads in different ways.
-
-Cooperative multitasking systems have running threads give up control
-if one of two things happen. If a thread calls a yield function, it
-gives up control. It also gives up control if the thread does
-something that would cause it to block, such as perform I/O. In a
-cooperative multitasking implementation, one thread can starve all the
-others for CPU time if it so chooses.
-
-Preemptive multitasking systems interrupt threads at regular intervals
-while the system decides which thread should run next. In a preemptive
-multitasking system, one thread usually won't monopolize the CPU.
-
-On some systems, there can be cooperative and preemptive threads
-running simultaneously. (Threads running with realtime priorities
-often behave cooperatively, for example, while threads running at
-normal priorities behave preemptively.)
-
-=head1 What kind of threads are perl threads?
-
-If you have experience with other thread implementations, you might
-find that things aren't quite what you expect. It's very important to
-remember when dealing with Perl threads that Perl Threads Are Not X
-Threads, for all values of X. They aren't POSIX threads, or
-DecThreads, or Java's Green threads, or Win32 threads. There are
-similarities, and the broad concepts are the same, but if you start
-looking for implementation details you're going to be either
-disappointed or confused. Possibly both.
-
-This is not to say that Perl threads are completely different from
-everything that's ever come before--they're not. Perl's threading
-model owes a lot to other thread models, especially POSIX. Just as
-Perl is not C, though, Perl threads are not POSIX threads. So if you
-find yourself looking for mutexes, or thread priorities, it's time to
-step back a bit and think about what you want to do and how Perl can
-do it.
-
-=head1 Threadsafe Modules
-
-The addition of threads has changed Perl's internals
-substantially. There are implications for people who write
-modules--especially modules with XS code or external libraries. While
-most modules won't encounter any problems, modules that aren't
-explicitly tagged as thread-safe should be tested before being used in
-production code.
-
-Not all modules that you might use are thread-safe, and you should
-always assume a module is unsafe unless the documentation says
-otherwise. This includes modules that are distributed as part of the
-core. Threads are a beta feature, and even some of the standard
-modules aren't thread-safe.
-
-If you're using a module that's not thread-safe for some reason, you
-can protect yourself by using semaphores and lots of programming
-discipline to control access to the module. Semaphores are covered
-later in the article. Perl Threads Are Different
-
-=head1 Thread Basics
-
-The core Thread module provides the basic functions you need to write
-threaded programs. In the following sections we'll cover the basics,
-showing you what you need to do to create a threaded program. After
-that, we'll go over some of the features of the Thread module that
-make threaded programming easier.
-
-=head2 Basic Thread Support
-
-Thread support is a Perl compile-time option-it's something that's
-turned on or off when Perl is built at your site, rather than when
-your programs are compiled. If your Perl wasn't compiled with thread
-support enabled, then any attempt to use threads will fail.
-
-Remember that the threading support in 5.005 is in beta release, and
-should be treated as such. You should expect that it may not function
-entirely properly, and the thread interface may well change some
-before it is a fully supported, production release. The beta version
-shouldn't be used for mission-critical projects. Having said that,
-threaded Perl is pretty nifty, and worth a look.
-
-Your programs can use the Config module to check whether threads are
-enabled. If your program can't run without them, you can say something
-like:
-
- $Config{usethreads} or die "Recompile Perl with threads to run this program.";
-
-A possibly-threaded program using a possibly-threaded module might
-have code like this:
-
- use Config;
- use MyMod;
-
- if ($Config{usethreads}) {
- # We have threads
- require MyMod_threaded;
- import MyMod_threaded;
- } else {
- require MyMod_unthreaded;
- import MyMod_unthreaded;
- }
-
-Since code that runs both with and without threads is usually pretty
-messy, it's best to isolate the thread-specific code in its own
-module. In our example above, that's what MyMod_threaded is, and it's
-only imported if we're running on a threaded Perl.
-
-=head2 Creating Threads
-
-The Thread package provides the tools you need to create new
-threads. Like any other module, you need to tell Perl you want to use
-it; use Thread imports all the pieces you need to create basic
-threads.
-
-The simplest, straightforward way to create a thread is with new():
-
- use Thread;
-
- $thr = Thread->new( \&sub1 );
-
- sub sub1 {
- print "In the thread\n";
- }
-
-The new() method takes a reference to a subroutine and creates a new
-thread, which starts executing in the referenced subroutine. Control
-then passes both to the subroutine and the caller.
-
-If you need to, your program can pass parameters to the subroutine as
-part of the thread startup. Just include the list of parameters as
-part of the C<Thread::new> call, like this:
-
- use Thread;
- $Param3 = "foo";
- $thr = Thread->new( \&sub1, "Param 1", "Param 2", $Param3 );
- $thr = Thread->new( \&sub1, @ParamList );
- $thr = Thread->new( \&sub1, qw(Param1 Param2 $Param3) );
-
- sub sub1 {
- my @InboundParameters = @_;
- print "In the thread\n";
- print "got parameters >", join("<>", @InboundParameters), "<\n";
- }
-
-
-The subroutine runs like a normal Perl subroutine, and the call to new
-Thread returns whatever the subroutine returns.
-
-The last example illustrates another feature of threads. You can spawn
-off several threads using the same subroutine. Each thread executes
-the same subroutine, but in a separate thread with a separate
-environment and potentially separate arguments.
-
-The other way to spawn a new thread is with async(), which is a way to
-spin off a chunk of code like eval(), but into its own thread:
-
- use Thread qw(async);
-
- $LineCount = 0;
-
- $thr = async {
- while(<>) {$LineCount++}
- print "Got $LineCount lines\n";
- };
-
- print "Waiting for the linecount to end\n";
- $thr->join;
- print "All done\n";
-
-You'll notice we did a use Thread qw(async) in that example. async is
-not exported by default, so if you want it, you'll either need to
-import it before you use it or fully qualify it as
-Thread::async. You'll also note that there's a semicolon after the
-closing brace. That's because async() treats the following block as an
-anonymous subroutine, so the semicolon is necessary.
-
-Like eval(), the code executes in the same context as it would if it
-weren't spun off. Since both the code inside and after the async start
-executing, you need to be careful with any shared resources. Locking
-and other synchronization techniques are covered later.
-
-=head2 Giving up control
-
-There are times when you may find it useful to have a thread
-explicitly give up the CPU to another thread. Your threading package
-might not support preemptive multitasking for threads, for example, or
-you may be doing something compute-intensive and want to make sure
-that the user-interface thread gets called frequently. Regardless,
-there are times that you might want a thread to give up the processor.
-
-Perl's threading package provides the yield() function that does
-this. yield() is pretty straightforward, and works like this:
-
- use Thread qw(yield async);
- async {
- my $foo = 50;
- while ($foo--) { print "first async\n" }
- yield;
- $foo = 50;
- while ($foo--) { print "first async\n" }
- };
- async {
- my $foo = 50;
- while ($foo--) { print "second async\n" }
- yield;
- $foo = 50;
- while ($foo--) { print "second async\n" }
- };
-
-=head2 Waiting For A Thread To Exit
-
-Since threads are also subroutines, they can return values. To wait
-for a thread to exit and extract any scalars it might return, you can
-use the join() method.
-
- use Thread;
- $thr = Thread->new( \&sub1 );
-
- @ReturnData = $thr->join;
- print "Thread returned @ReturnData";
-
- sub sub1 { return "Fifty-six", "foo", 2; }
-
-In the example above, the join() method returns as soon as the thread
-ends. In addition to waiting for a thread to finish and gathering up
-any values that the thread might have returned, join() also performs
-any OS cleanup necessary for the thread. That cleanup might be
-important, especially for long-running programs that spawn lots of
-threads. If you don't want the return values and don't want to wait
-for the thread to finish, you should call the detach() method
-instead. detach() is covered later in the article.
-
-=head2 Errors In Threads
-
-So what happens when an error occurs in a thread? Any errors that
-could be caught with eval() are postponed until the thread is
-joined. If your program never joins, the errors appear when your
-program exits.
-
-Errors deferred until a join() can be caught with eval():
-
- use Thread qw(async);
- $thr = async {$b = 3/0}; # Divide by zero error
- $foo = eval {$thr->join};
- if ($@) {
- print "died with error $@\n";
- } else {
- print "Hey, why aren't you dead?\n";
- }
-
-eval() passes any results from the joined thread back unmodified, so
-if you want the return value of the thread, this is your only chance
-to get them.
-
-=head2 Ignoring A Thread
-
-join() does three things: it waits for a thread to exit, cleans up
-after it, and returns any data the thread may have produced. But what
-if you're not interested in the thread's return values, and you don't
-really care when the thread finishes? All you want is for the thread
-to get cleaned up after when it's done.
-
-In this case, you use the detach() method. Once a thread is detached,
-it'll run until it's finished, then Perl will clean up after it
-automatically.
-
- use Thread;
- $thr = Thread->new( \&sub1 ); # Spawn the thread
-
- $thr->detach; # Now we officially don't care any more
-
- sub sub1 {
- $a = 0;
- while (1) {
- $a++;
- print "\$a is $a\n";
- sleep 1;
- }
- }
-
-
-Once a thread is detached, it may not be joined, and any output that
-it might have produced (if it was done and waiting for a join) is
-lost.
-
-=head1 Threads And Data
-
-Now that we've covered the basics of threads, it's time for our next
-topic: data. Threading introduces a couple of complications to data
-access that non-threaded programs never need to worry about.
-
-=head2 Shared And Unshared Data
-
-The single most important thing to remember when using threads is that
-all threads potentially have access to all the data anywhere in your
-program. While this is true with a nonthreaded Perl program as well,
-it's especially important to remember with a threaded program, since
-more than one thread can be accessing this data at once.
-
-Perl's scoping rules don't change because you're using threads. If a
-subroutine (or block, in the case of async()) could see a variable if
-you weren't running with threads, it can see it if you are. This is
-especially important for the subroutines that create, and makes C<my>
-variables even more important. Remember--if your variables aren't
-lexically scoped (declared with C<my>) you're probably sharing them
-between threads.
-
-=head2 Thread Pitfall: Races
-
-While threads bring a new set of useful tools, they also bring a
-number of pitfalls. One pitfall is the race condition:
-
- use Thread;
- $a = 1;
- $thr1 = Thread->new(\&sub1);
- $thr2 = Thread->new(\&sub2);
-
- sleep 10;
- print "$a\n";
-
- sub sub1 { $foo = $a; $a = $foo + 1; }
- sub sub2 { $bar = $a; $a = $bar + 1; }
-
-What do you think $a will be? The answer, unfortunately, is "it
-depends." Both sub1() and sub2() access the global variable $a, once
-to read and once to write. Depending on factors ranging from your
-thread implementation's scheduling algorithm to the phase of the moon,
-$a can be 2 or 3.
-
-Race conditions are caused by unsynchronized access to shared
-data. Without explicit synchronization, there's no way to be sure that
-nothing has happened to the shared data between the time you access it
-and the time you update it. Even this simple code fragment has the
-possibility of error:
-
- use Thread qw(async);
- $a = 2;
- async{ $b = $a; $a = $b + 1; };
- async{ $c = $a; $a = $c + 1; };
-
-Two threads both access $a. Each thread can potentially be interrupted
-at any point, or be executed in any order. At the end, $a could be 3
-or 4, and both $b and $c could be 2 or 3.
-
-Whenever your program accesses data or resources that can be accessed
-by other threads, you must take steps to coordinate access or risk
-data corruption and race conditions.
-
-=head2 Controlling access: lock()
-
-The lock() function takes a variable (or subroutine, but we'll get to
-that later) and puts a lock on it. No other thread may lock the
-variable until the locking thread exits the innermost block containing
-the lock. Using lock() is straightforward:
-
- use Thread qw(async);
- $a = 4;
- $thr1 = async {
- $foo = 12;
- {
- lock ($a); # Block until we get access to $a
- $b = $a;
- $a = $b * $foo;
- }
- print "\$foo was $foo\n";
- };
- $thr2 = async {
- $bar = 7;
- {
- lock ($a); # Block until we can get access to $a
- $c = $a;
- $a = $c * $bar;
- }
- print "\$bar was $bar\n";
- };
- $thr1->join;
- $thr2->join;
- print "\$a is $a\n";
-
-lock() blocks the thread until the variable being locked is
-available. When lock() returns, your thread can be sure that no other
-thread can lock that variable until the innermost block containing the
-lock exits.
-
-It's important to note that locks don't prevent access to the variable
-in question, only lock attempts. This is in keeping with Perl's
-longstanding tradition of courteous programming, and the advisory file
-locking that flock() gives you. Locked subroutines behave differently,
-however. We'll cover that later in the article.
-
-You may lock arrays and hashes as well as scalars. Locking an array,
-though, will not block subsequent locks on array elements, just lock
-attempts on the array itself.
-
-Finally, locks are recursive, which means it's okay for a thread to
-lock a variable more than once. The lock will last until the outermost
-lock() on the variable goes out of scope.
-
-=head2 Thread Pitfall: Deadlocks
-
-Locks are a handy tool to synchronize access to data. Using them
-properly is the key to safe shared data. Unfortunately, locks aren't
-without their dangers. Consider the following code:
-
- use Thread qw(async yield);
- $a = 4;
- $b = "foo";
- async {
- lock($a);
- yield;
- sleep 20;
- lock ($b);
- };
- async {
- lock($b);
- yield;
- sleep 20;
- lock ($a);
- };
-
-This program will probably hang until you kill it. The only way it
-won't hang is if one of the two async() routines acquires both locks
-first. A guaranteed-to-hang version is more complicated, but the
-principle is the same.
-
-The first thread spawned by async() will grab a lock on $a then, a
-second or two later, try to grab a lock on $b. Meanwhile, the second
-thread grabs a lock on $b, then later tries to grab a lock on $a. The
-second lock attempt for both threads will block, each waiting for the
-other to release its lock.
-
-This condition is called a deadlock, and it occurs whenever two or
-more threads are trying to get locks on resources that the others
-own. Each thread will block, waiting for the other to release a lock
-on a resource. That never happens, though, since the thread with the
-resource is itself waiting for a lock to be released.
-
-There are a number of ways to handle this sort of problem. The best
-way is to always have all threads acquire locks in the exact same
-order. If, for example, you lock variables $a, $b, and $c, always lock
-$a before $b, and $b before $c. It's also best to hold on to locks for
-as short a period of time to minimize the risks of deadlock.
-
-=head2 Queues: Passing Data Around
-
-A queue is a special thread-safe object that lets you put data in one
-end and take it out the other without having to worry about
-synchronization issues. They're pretty straightforward, and look like
-this:
-
- use Thread qw(async);
- use Thread::Queue;
-
- my $DataQueue = Thread::Queue->new();
- $thr = async {
- while ($DataElement = $DataQueue->dequeue) {
- print "Popped $DataElement off the queue\n";
- }
- };
-
- $DataQueue->enqueue(12);
- $DataQueue->enqueue("A", "B", "C");
- sleep 10;
- $DataQueue->enqueue(undef);
-
-You create the queue with C<< Thread::Queue->new >>. Then you can add
-lists of scalars onto the end with enqueue(), and pop scalars off the
-front of it with dequeue(). A queue has no fixed size, and can grow as
-needed to hold everything pushed on to it.
-
-If a queue is empty, dequeue() blocks until another thread enqueues
-something. This makes queues ideal for event loops and other
-communications between threads.
-
-=head1 Threads And Code
-
-In addition to providing thread-safe access to data via locks and
-queues, threaded Perl also provides general-purpose semaphores for
-coarser synchronization than locks provide and thread-safe access to
-entire subroutines.
-
-=head2 Semaphores: Synchronizing Data Access
-
-Semaphores are a kind of generic locking mechanism. Unlike lock, which
-gets a lock on a particular scalar, Perl doesn't associate any
-particular thing with a semaphore so you can use them to control
-access to anything you like. In addition, semaphores can allow more
-than one thread to access a resource at once, though by default
-semaphores only allow one thread access at a time.
-
-=over 4
-
-=item Basic semaphores
-
-Semaphores have two methods, down and up. down decrements the resource
-count, while up increments it. down calls will block if the
-semaphore's current count would decrement below zero. This program
-gives a quick demonstration:
-
- use Thread qw(yield);
- use Thread::Semaphore;
- my $semaphore = Thread::Semaphore->new();
- $GlobalVariable = 0;
-
- $thr1 = Thread->new( \&sample_sub, 1 );
- $thr2 = Thread->new( \&sample_sub, 2 );
- $thr3 = Thread->new( \&sample_sub, 3 );
-
- sub sample_sub {
- my $SubNumber = shift @_;
- my $TryCount = 10;
- my $LocalCopy;
- sleep 1;
- while ($TryCount--) {
- $semaphore->down;
- $LocalCopy = $GlobalVariable;
- print "$TryCount tries left for sub $SubNumber (\$GlobalVariable is $GlobalVariable)\n";
- yield;
- sleep 2;
- $LocalCopy++;
- $GlobalVariable = $LocalCopy;
- $semaphore->up;
- }
- }
-
-The three invocations of the subroutine all operate in sync. The
-semaphore, though, makes sure that only one thread is accessing the
-global variable at once.
-
-=item Advanced Semaphores
-
-By default, semaphores behave like locks, letting only one thread
-down() them at a time. However, there are other uses for semaphores.
-
-Each semaphore has a counter attached to it. down() decrements the
-counter and up() increments the counter. By default, semaphores are
-created with the counter set to one, down() decrements by one, and
-up() increments by one. If down() attempts to decrement the counter
-below zero, it blocks until the counter is large enough. Note that
-while a semaphore can be created with a starting count of zero, any
-up() or down() always changes the counter by at least
-one. $semaphore->down(0) is the same as $semaphore->down(1).
-
-The question, of course, is why would you do something like this? Why
-create a semaphore with a starting count that's not one, or why
-decrement/increment it by more than one? The answer is resource
-availability. Many resources that you want to manage access for can be
-safely used by more than one thread at once.
-
-For example, let's take a GUI driven program. It has a semaphore that
-it uses to synchronize access to the display, so only one thread is
-ever drawing at once. Handy, but of course you don't want any thread
-to start drawing until things are properly set up. In this case, you
-can create a semaphore with a counter set to zero, and up it when
-things are ready for drawing.
-
-Semaphores with counters greater than one are also useful for
-establishing quotas. Say, for example, that you have a number of
-threads that can do I/O at once. You don't want all the threads
-reading or writing at once though, since that can potentially swamp
-your I/O channels, or deplete your process' quota of filehandles. You
-can use a semaphore initialized to the number of concurrent I/O
-requests (or open files) that you want at any one time, and have your
-threads quietly block and unblock themselves.
-
-Larger increments or decrements are handy in those cases where a
-thread needs to check out or return a number of resources at once.
-
-=back
-
-=head2 Attributes: Restricting Access To Subroutines
-
-In addition to synchronizing access to data or resources, you might
-find it useful to synchronize access to subroutines. You may be
-accessing a singular machine resource (perhaps a vector processor), or
-find it easier to serialize calls to a particular subroutine than to
-have a set of locks and semaphores.
-
-One of the additions to Perl 5.005 is subroutine attributes. The
-Thread package uses these to provide several flavors of
-serialization. It's important to remember that these attributes are
-used in the compilation phase of your program so you can't change a
-subroutine's behavior while your program is actually running.
-
-=head2 Subroutine Locks
-
-The basic subroutine lock looks like this:
-
- sub test_sub :locked {
- }
-
-This ensures that only one thread will be executing this subroutine at
-any one time. Once a thread calls this subroutine, any other thread
-that calls it will block until the thread in the subroutine exits
-it. A more elaborate example looks like this:
-
- use Thread qw(yield);
-
- Thread->new(\&thread_sub, 1);
- Thread->new(\&thread_sub, 2);
- Thread->new(\&thread_sub, 3);
- Thread->new(\&thread_sub, 4);
-
- sub sync_sub :locked {
- my $CallingThread = shift @_;
- print "In sync_sub for thread $CallingThread\n";
- yield;
- sleep 3;
- print "Leaving sync_sub for thread $CallingThread\n";
- }
-
- sub thread_sub {
- my $ThreadID = shift @_;
- print "Thread $ThreadID calling sync_sub\n";
- sync_sub($ThreadID);
- print "$ThreadID is done with sync_sub\n";
- }
-
-The C<locked> attribute tells perl to lock sync_sub(), and if you run
-this, you can see that only one thread is in it at any one time.
-
-=head2 Methods
-
-Locking an entire subroutine can sometimes be overkill, especially
-when dealing with Perl objects. When calling a method for an object,
-for example, you want to serialize calls to a method, so that only one
-thread will be in the subroutine for a particular object, but threads
-calling that subroutine for a different object aren't blocked. The
-method attribute indicates whether the subroutine is really a method.
-
- use Thread;
-
- sub tester {
- my $thrnum = shift @_;
- my $bar = Foo->new();
- foreach (1..10) {
- print "$thrnum calling per_object\n";
- $bar->per_object($thrnum);
- print "$thrnum out of per_object\n";
- yield;
- print "$thrnum calling one_at_a_time\n";
- $bar->one_at_a_time($thrnum);
- print "$thrnum out of one_at_a_time\n";
- yield;
- }
- }
-
- foreach my $thrnum (1..10) {
- Thread->new(\&tester, $thrnum);
- }
-
- package Foo;
- sub new {
- my $class = shift @_;
- return bless [@_], $class;
- }
-
- sub per_object :locked :method {
- my ($class, $thrnum) = @_;
- print "In per_object for thread $thrnum\n";
- yield;
- sleep 2;
- print "Exiting per_object for thread $thrnum\n";
- }
-
- sub one_at_a_time :locked {
- my ($class, $thrnum) = @_;
- print "In one_at_a_time for thread $thrnum\n";
- yield;
- sleep 2;
- print "Exiting one_at_a_time for thread $thrnum\n";
- }
-
-As you can see from the output (omitted for brevity; it's 800 lines)
-all the threads can be in per_object() simultaneously, but only one
-thread is ever in one_at_a_time() at once.
-
-=head2 Locking A Subroutine
-
-You can lock a subroutine as you would lock a variable. Subroutine locks
-work the same as specifying a C<locked> attribute for the subroutine,
-and block all access to the subroutine for other threads until the
-lock goes out of scope. When the subroutine isn't locked, any number
-of threads can be in it at once, and getting a lock on a subroutine
-doesn't affect threads already in the subroutine. Getting a lock on a
-subroutine looks like this:
-
- lock(\&sub_to_lock);
-
-Simple enough. Unlike the C<locked> attribute, which is a compile time
-option, locking and unlocking a subroutine can be done at runtime at your
-discretion. There is some runtime penalty to using lock(\&sub) instead
-of the C<locked> attribute, so make sure you're choosing the proper
-method to do the locking.
-
-You'd choose lock(\&sub) when writing modules and code to run on both
-threaded and unthreaded Perl, especially for code that will run on
-5.004 or earlier Perls. In that case, it's useful to have subroutines
-that should be serialized lock themselves if they're running threaded,
-like so:
-
- package Foo;
- use Config;
- $Running_Threaded = 0;
-
- BEGIN { $Running_Threaded = $Config{'usethreads'} }
-
- sub sub1 { lock(\&sub1) if $Running_Threaded }
-
-
-This way you can ensure single-threadedness regardless of which
-version of Perl you're running.
-
-=head1 General Thread Utility Routines
-
-We've covered the workhorse parts of Perl's threading package, and
-with these tools you should be well on your way to writing threaded
-code and packages. There are a few useful little pieces that didn't
-really fit in anyplace else.
-
-=head2 What Thread Am I In?
-
-The Thread->self method provides your program with a way to get an
-object representing the thread it's currently in. You can use this
-object in the same way as the ones returned from the thread creation.
-
-=head2 Thread IDs
-
-tid() is a thread object method that returns the thread ID of the
-thread the object represents. Thread IDs are integers, with the main
-thread in a program being 0. Currently Perl assigns a unique tid to
-every thread ever created in your program, assigning the first thread
-to be created a tid of 1, and increasing the tid by 1 for each new
-thread that's created.
-
-=head2 Are These Threads The Same?
-
-The equal() method takes two thread objects and returns true
-if the objects represent the same thread, and false if they don't.
-
-=head2 What Threads Are Running?
-
-Thread->list returns a list of thread objects, one for each thread
-that's currently running. Handy for a number of things, including
-cleaning up at the end of your program:
-
- # Loop through all the threads
- foreach $thr (Thread->list) {
- # Don't join the main thread or ourselves
- if ($thr->tid && !Thread::equal($thr, Thread->self)) {
- $thr->join;
- }
- }
-
-The example above is just for illustration. It isn't strictly
-necessary to join all the threads you create, since Perl detaches all
-the threads before it exits.
-
-=head1 A Complete Example
-
-Confused yet? It's time for an example program to show some of the
-things we've covered. This program finds prime numbers using threads.
-
- 1 #!/usr/bin/perl -w
- 2 # prime-pthread, courtesy of Tom Christiansen
- 3
- 4 use strict;
- 5
- 6 use Thread;
- 7 use Thread::Queue;
- 8
- 9 my $stream = Thread::Queue->new();
- 10 my $kid = Thread->new(\&check_num, $stream, 2);
- 11
- 12 for my $i ( 3 .. 1000 ) {
- 13 $stream->enqueue($i);
- 14 }
- 15
- 16 $stream->enqueue(undef);
- 17 $kid->join();
- 18
- 19 sub check_num {
- 20 my ($upstream, $cur_prime) = @_;
- 21 my $kid;
- 22 my $downstream = Thread::Queue->new();
- 23 while (my $num = $upstream->dequeue) {
- 24 next unless $num % $cur_prime;
- 25 if ($kid) {
- 26 $downstream->enqueue($num);
- 27 } else {
- 28 print "Found prime $num\n";
- 29 $kid = Thread->new(\&check_num, $downstream, $num);
- 30 }
- 31 }
- 32 $downstream->enqueue(undef) if $kid;
- 33 $kid->join() if $kid;
- 34 }
-
-This program uses the pipeline model to generate prime numbers. Each
-thread in the pipeline has an input queue that feeds numbers to be
-checked, a prime number that it's responsible for, and an output queue
-that it funnels numbers that have failed the check into. If the thread
-has a number that's failed its check and there's no child thread, then
-the thread must have found a new prime number. In that case, a new
-child thread is created for that prime and stuck on the end of the
-pipeline.
-
-This probably sounds a bit more confusing than it really is, so lets
-go through this program piece by piece and see what it does. (For
-those of you who might be trying to remember exactly what a prime
-number is, it's a number that's only evenly divisible by itself and 1)
-
-The bulk of the work is done by the check_num() subroutine, which
-takes a reference to its input queue and a prime number that it's
-responsible for. After pulling in the input queue and the prime that
-the subroutine's checking (line 20), we create a new queue (line 22)
-and reserve a scalar for the thread that we're likely to create later
-(line 21).
-
-The while loop from lines 23 to line 31 grabs a scalar off the input
-queue and checks against the prime this thread is responsible
-for. Line 24 checks to see if there's a remainder when we modulo the
-number to be checked against our prime. If there is one, the number
-must not be evenly divisible by our prime, so we need to either pass
-it on to the next thread if we've created one (line 26) or create a
-new thread if we haven't.
-
-The new thread creation is line 29. We pass on to it a reference to
-the queue we've created, and the prime number we've found.
-
-Finally, once the loop terminates (because we got a 0 or undef in the
-queue, which serves as a note to die), we pass on the notice to our
-child and wait for it to exit if we've created a child (Lines 32 and
-37).
-
-Meanwhile, back in the main thread, we create a queue (line 9) and the
-initial child thread (line 10), and pre-seed it with the first prime:
-2. Then we queue all the numbers from 3 to 1000 for checking (lines
-12-14), then queue a die notice (line 16) and wait for the first child
-thread to terminate (line 17). Because a child won't die until its
-child has died, we know that we're done once we return from the join.
-
-That's how it works. It's pretty simple; as with many Perl programs,
-the explanation is much longer than the program.
-
-=head1 Conclusion
-
-A complete thread tutorial could fill a book (and has, many times),
-but this should get you well on your way. The final authority on how
-Perl's threads behave is the documentation bundled with the Perl
-distribution, but with what we've covered in this article, you should
-be well on your way to becoming a threaded Perl expert.
-
-=head1 Bibliography
-
-Here's a short bibliography courtesy of J\xFCrgen Christoffel:
-
-=head2 Introductory Texts
-
-Birrell, Andrew D. An Introduction to Programming with
-Threads. Digital Equipment Corporation, 1989, DEC-SRC Research Report
-#35 online as
-http://www.research.digital.com/SRC/staff/birrell/bib.html (highly
-recommended)
-
-Robbins, Kay. A., and Steven Robbins. Practical Unix Programming: A
-Guide to Concurrency, Communication, and
-Multithreading. Prentice-Hall, 1996.
-
-Lewis, Bill, and Daniel J. Berg. Multithreaded Programming with
-Pthreads. Prentice Hall, 1997, ISBN 0-13-443698-9 (a well-written
-introduction to threads).
-
-Nelson, Greg (editor). Systems Programming with Modula-3. Prentice
-Hall, 1991, ISBN 0-13-590464-1.
-
-Nichols, Bradford, Dick Buttlar, and Jacqueline Proulx Farrell.
-Pthreads Programming. O'Reilly & Associates, 1996, ISBN 156592-115-1
-(covers POSIX threads).
-
-=head2 OS-Related References
-
-Boykin, Joseph, David Kirschen, Alan Langerman, and Susan
-LoVerso. Programming under Mach. Addison-Wesley, 1994, ISBN
-0-201-52739-1.
-
-Tanenbaum, Andrew S. Distributed Operating Systems. Prentice Hall,
-1995, ISBN 0-13-219908-4 (great textbook).
-
-Silberschatz, Abraham, and Peter B. Galvin. Operating System Concepts,
-4th ed. Addison-Wesley, 1995, ISBN 0-201-59292-4
-
-=head2 Other References
-
-Arnold, Ken and James Gosling. The Java Programming Language, 2nd
-ed. Addison-Wesley, 1998, ISBN 0-201-31006-6.
-
-Le Sergent, T. and B. Berthomieu. "Incremental MultiThreaded Garbage
-Collection on Virtually Shared Memory Architectures" in Memory
-Management: Proc. of the International Workshop IWMM 92, St. Malo,
-France, September 1992, Yves Bekkers and Jacques Cohen, eds. Springer,
-1992, ISBN 3540-55940-X (real-life thread applications).
-
-=head1 Acknowledgements
-
-Thanks (in no particular order) to Chaim Frenkel, Steve Fink, Gurusamy
-Sarathy, Ilya Zakharevich, Benjamin Sugars, J\xFCrgen Christoffel, Joshua
-Pritikin, and Alan Burlison, for their help in reality-checking and
-polishing this article. Big thanks to Tom Christiansen for his rewrite
-of the prime number generator.
-
-=head1 AUTHOR
-
-Dan Sugalski E<lt>sugalskd at ous.eduE<gt>
-
-=head1 Copyrights
-
-This article originally appeared in The Perl Journal #10, and is
-copyright 1998 The Perl Journal. It appears courtesy of Jon Orwant and
-The Perl Journal. This document may be distributed under the same terms
-as Perl itself.
-
-
Deleted: trunk/contrib/perl/pod/perlrepository.pod
===================================================================
--- trunk/contrib/perl/pod/perlrepository.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlrepository.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,689 +0,0 @@
-=for comment
-Consistent formatting of this file is achieved with:
- perl ./Porting/podtidy pod/perlrepository.pod
-
-=head1 NAME
-
-perlrepository - Using the Perl source repository
-
-=head1 SYNOPSIS
-
-All of Perl's source code is kept centrally in a Git repository at
-I<perl5.git.perl.org>. The repository contains many Perl revisions from
-Perl 1 onwards and all the revisions from Perforce, the version control
-system we were using previously. This repository is accessible in
-different ways.
-
-The full repository takes up about 80MB of disk space. A check out of
-the blead branch (that is, the main development branch, which contains
-bleadperl, the development version of perl 5) takes up about 160MB of
-disk space (including the repository). A build of bleadperl takes up
-about 200MB (including the repository and the check out).
-
-=head1 GETTING ACCESS TO THE REPOSITORY
-
-=head2 READ ACCESS VIA THE WEB
-
-You may access the repository over the web. This allows you to browse
-the tree, see recent commits, subscribe to RSS feeds for the changes,
-search for particular commits and more. You may access it at:
-
- http://perl5.git.perl.org/perl.git
-
-A mirror of the repository is found at:
-
- http://github.com/github/perl
-
-=head2 READ ACCESS VIA GIT
-
-You will need a copy of Git for your computer. You can fetch a copy of
-the repository using the Git protocol (which uses port 9418):
-
- git clone git://perl5.git.perl.org/perl.git perl-git
-
-This clones the repository and makes a local copy in the F<perl-git>
-directory.
-
-If your local network does not allow you to use port 9418, then you can
-fetch a copy of the repository over HTTP (this is slower):
-
- git clone http://perl5.git.perl.org/perl.git perl-http
-
-This clones the repository and makes a local copy in the F<perl-http>
-directory.
-
-=head2 WRITE ACCESS TO THE REPOSITORY
-
-If you are a committer, then you can fetch a copy of the repository
-that you can push back on with:
-
- git clone ssh://perl5.git.perl.org/gitroot/perl.git perl-ssh
-
-This clones the repository and makes a local copy in the F<perl-ssh>
-directory.
-
-If you cloned using the git protocol, which is faster than ssh, then
-you will need to modify your config in order to enable pushing. Edit
-F<.git/config> where you will see something like:
-
- [remote "origin"]
- url = git://perl5.git.perl.org/perl.git
-
-change that to something like this:
-
- [remote "origin"]
- url = ssh://perl5.git.perl.org/gitroot/perl.git
-
-NOTE: there are symlinks set up so that the /gitroot is optional and
-since SSH is the default protocol you can actually shorten the "url" to
-C<perl5.git.perl.org:/perl.git>.
-
-You can also set up your user name and e-mail address. For example
-
- % git config user.name "Leon Brocard"
- % git config user.email acme at astray.com
-
-It is also possible to keep C<origin> as a git remote, and add a new
-remote for ssh access:
-
- % git remote add camel perl5.git.perl.org:/perl.git
-
-This allows you to update your local repository by pulling from
-C<origin>, which is faster and doesn't require you to authenticate, and
-to push your changes back with the C<camel> remote:
-
- % git fetch camel
- % git push camel
-
-The C<fetch> command just updates the C<camel> refs, as the objects
-themselves should have been fetched when pulling from C<origin>.
-
-The committers have access to 2 servers that serve perl5.git.perl.org.
-One is camel.booking.com, which is the 'master' repository. The
-perl5.git.perl.org IP address also lives on this machine. The second
-one is dromedary.booking.com, which can be used for general testing and
-development. Dromedary syncs the git tree from camel every few minutes,
-you should not push there. Both machines also have a full CPAN mirror.
-To share files with the general public, dromedary serves your
-~/public_html/ as http://users.perl5.git.perl.org/~yourlogin/
-
-=head1 OVERVIEW OF THE REPOSITORY
-
-Once you have changed into the repository directory, you can inspect
-it.
-
-After a clone the repository will contain a single local branch, which
-will be the current branch as well, as indicated by the asterisk.
-
- % git branch
- * blead
-
-Using the -a switch to C<branch> will also show the remote tracking
-branches in the repository:
-
- % git branch -a
- * blead
- origin/HEAD
- origin/blead
- ...
-
-The branches that begin with "origin" correspond to the "git remote"
-that you cloned from (which is named "origin"). Each branch on the
-remote will be exactly tracked by theses branches. You should NEVER do
-work on these remote tracking branches. You only ever do work in a
-local branch. Local branches can be configured to automerge (on pull)
-from a designated remote tracking branch. This is the case with the
-default branch C<blead> which will be configured to merge from the
-remote tracking branch C<origin/blead>.
-
-You can see recent commits:
-
- % git log
-
-And pull new changes from the repository, and update your local
-repository (must be clean first)
-
- % git pull
-
-Assuming we are on the branch C<blead> immediately after a pull, this
-command would be more or less equivalent to:
-
- % git fetch
- % git merge origin/blead
-
-In fact if you want to update your local repository without touching
-your working directory you do:
-
- % git fetch
-
-And if you want to update your remote-tracking branches for all defined
-remotes simultaneously you can do
-
- % git remote update
-
-Neither of these last two commands will update your working directory,
-however both will update the remote-tracking branches in your
-repository.
-
-To switch to another branch:
-
- % git checkout origin/maint-5.8-dor
-
-To make a local branch of a remote branch:
-
- % git checkout -b maint-5.10 origin/maint-5.10
-
-To switch back to blead:
-
- % git checkout blead
-
-=head2 FINDING OUT YOUR STATUS
-
-The most common git command you will use will probably be
-
- % git status
-
-This command will produce as output a description of the current state
-of the repository, including modified files and unignored untracked
-files, and in addition it will show things like what files have been
-staged for the next commit, and usually some useful information about
-how to change things. For instance the following:
-
- $ git status
- # On branch blead
- # Your branch is ahead of 'origin/blead' by 1 commit.
- #
- # Changes to be committed:
- # (use "git reset HEAD <file>..." to unstage)
- #
- # modified: pod/perlrepository.pod
- #
- # Changed but not updated:
- # (use "git add <file>..." to update what will be committed)
- #
- # modified: pod/perlrepository.pod
- #
- # Untracked files:
- # (use "git add <file>..." to include in what will be committed)
- #
- # deliberate.untracked
-
-This shows that there were changes to this document staged for commit,
-and that there were further changes in the working directory not yet
-staged. It also shows that there was an untracked file in the working
-directory, and as you can see shows how to change all of this. It also
-shows that there is one commit on the working branch C<blead> which has
-not been pushed to the C<origin> remote yet. B<NOTE>: that this output
-is also what you see as a template if you do not provide a message to
-C<git commit>.
-
-Assuming we commit all the mentioned changes above:
-
- % git commit -a -m'explain git status and stuff about remotes'
- Created commit daf8e63: explain git status and stuff about remotes
- 1 files changed, 83 insertions(+), 3 deletions(-)
-
-We can re-run git status and see something like this:
-
- % git status
- # On branch blead
- # Your branch is ahead of 'origin/blead' by 2 commits.
- #
- # Untracked files:
- # (use "git add <file>..." to include in what will be committed)
- #
- # deliberate.untracked
- nothing added to commit but untracked files present (use "git add" to track)
-
-
-When in doubt, before you do anything else, check your status and read
-it carefully, many questions are answered directly by the git status
-output.
-
-=head1 SUBMITTING A PATCH
-
-If you have a patch in mind for Perl, you should first get a copy of
-the repository:
-
- % git clone git://perl5.git.perl.org/perl.git perl-git
-
-Then change into the directory:
-
- % cd perl-git
-
-Alternatively, if you already have a Perl repository, you should ensure
-that you're on the I<blead> branch, and your repository is up to date:
-
- % git checkout blead
- % git pull
-
-It's preferable to patch against the latest blead version, since this
-is where new development occurs for all changes other than critical bug
-fixes. Critical bug fix patches should be made against the relevant
-maint branches, or should be submitted with a note indicating all the
-branches where the fix should be applied.
-
-Now that we have everything up to date, we need to create a temporary
-new branch for these changes and switch into it:
-
- % git checkout -b orange
-
-which is the short form of
-
- % git branch orange
- % git checkout orange
-
-Then make your changes. For example, if Leon Brocard changes his name
-to Orange Brocard, we should change his name in the AUTHORS file:
-
- % perl -pi -e 's{Leon Brocard}{Orange Brocard}' AUTHORS
-
-You can see what files are changed:
-
- % git status
- # On branch orange
- # Changes to be committed:
- # (use "git reset HEAD <file>..." to unstage)
- #
- # modified: AUTHORS
- #
-
-And you can see the changes:
-
- % git diff
- diff --git a/AUTHORS b/AUTHORS
- index 293dd70..722c93e 100644
- --- a/AUTHORS
- +++ b/AUTHORS
- @@ -541,7 +541,7 @@ Lars Hecking <lhecking at nmrc.ucc.ie>
- Laszlo Molnar <laszlo.molnar at eth.ericsson.se>
- Leif Huhn <leif at hale.dkstat.com>
- Len Johnson <lenjay at ibm.net>
- -Leon Brocard <acme at astray.com>
- +Orange Brocard <acme at astray.com>
- Les Peters <lpeters at aol.net>
- Lesley Binks <lesley.binks at gmail.com>
- Lincoln D. Stein <lstein at cshl.org>
-
-Now commit your change locally:
-
- % git commit -a -m 'Rename Leon Brocard to Orange Brocard'
- Created commit 6196c1d: Rename Leon Brocard to Orange Brocard
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-You can examine your last commit with:
-
- % git show HEAD
-
-and if you are not happy with either the description or the patch
-itself you can fix it up by editing the files once more and then issue:
-
- % git commit -a --amend
-
-Now you should create a patch file for all your local changes:
-
- % git format-patch origin
- 0001-Rename-Leon-Brocard-to-Orange-Brocard.patch
-
-You should now send an email to perl5-porters at perl.org with a
-description of your changes, and include this patch file as an
-attachment.
-
-If you want to delete your temporary branch, you may do so with:
-
- % git checkout blead
- % git branch -d orange
- error: The branch 'orange' is not an ancestor of your current HEAD.
- If you are sure you want to delete it, run 'git branch -D orange'.
- % git branch -D orange
- Deleted branch orange.
-
-=head2 A note on derived files
-
-Be aware that many files in the distribution are derivative--avoid
-patching them, because git won't see the changes to them, and the build
-process will overwrite them. Patch the originals instead. Most
-utilities (like perldoc) are in this category, i.e. patch
-utils/perldoc.PL rather than utils/perldoc. Similarly, don't create
-patches for files under $src_root/ext from their copies found in
-$install_root/lib. If you are unsure about the proper location of a
-file that may have gotten copied while building the source
-distribution, consult the C<MANIFEST>.
-
-=head2 A note on binary files
-
-Since the patch(1) utility cannot deal with binary files, it's
-important that you either avoid the use of binary files in your patch,
-generate the files dynamically, or that you encode any binary files
-using the F<uupacktool.pl> utility.
-
-Assuming you needed to include a gzip-encoded file for a module's test
-suite, you might do this as follows using the F<uupacktool.pl> utility:
-
- $ perl uupacktool.pl -v -p -D lib/Some/Module/t/src/t.gz
- Writing lib/Some/Module/t/src/t.gz into lib/Some/Module/t/src/t.gz.packed
-
-This will replace the C<t.gz> file with an encoded counterpart. During
-C<make test>, before any tests are run, perl's Makefile will restore
-all the C<.packed> files mentioned in the MANIFEST to their original
-name. This means that the test suite does not need to be aware of this
-packing scheme and will not need to be altered.
-
-=head2 Getting your patch accepted
-
-The first thing you should include with your patch is a description of
-the problem that the patch corrects. If it is a code patch (rather
-than a documentation patch) you should also include a small test case
-that illustrates the bug (a patch to an existing test file is
-preferred).
-
-If you are submitting a code patch there are several other things that
-you need to do.
-
-=over 4
-
-=item Comments, Comments, Comments
-
-Be sure to adequately comment your code. While commenting every line
-is unnecessary, anything that takes advantage of side effects of
-operators, that creates changes that will be felt outside of the
-function being patched, or that others may find confusing should be
-documented. If you are going to err, it is better to err on the side
-of adding too many comments than too few.
-
-=item Style
-
-In general, please follow the particular style of the code you are
-patching.
-
-In particular, follow these general guidelines for patching Perl
-sources:
-
- 8-wide tabs (no exceptions!)
- 4-wide indents for code, 2-wide indents for nested CPP #defines
- try hard not to exceed 79-columns
- ANSI C prototypes
- uncuddled elses and "K&R" style for indenting control constructs
- no C++ style (//) comments
- mark places that need to be revisited with XXX (and revisit often!)
- opening brace lines up with "if" when conditional spans multiple
- lines; should be at end-of-line otherwise
- in function definitions, name starts in column 0 (return value is on
- previous line)
- single space after keywords that are followed by parens, no space
- between function name and following paren
- avoid assignments in conditionals, but if they're unavoidable, use
- extra paren, e.g. "if (a && (b = c)) ..."
- "return foo;" rather than "return(foo);"
- "if (!foo) ..." rather than "if (foo == FALSE) ..." etc.
-
-=item Testsuite
-
-When submitting a patch you should make every effort to also include an
-addition to perl's regression tests to properly exercise your patch.
-Your testsuite additions should generally follow these guidelines
-(courtesy of Gurusamy Sarathy <gsar at activestate.com>):
-
- Know what you're testing. Read the docs, and the source.
- Tend to fail, not succeed.
- Interpret results strictly.
- Use unrelated features (this will flush out bizarre interactions).
- Use non-standard idioms (otherwise you are not testing TIMTOWTDI).
- Avoid using hardcoded test numbers whenever possible (the
- EXPECTED/GOT found in t/op/tie.t is much more maintainable,
- and gives better failure reports).
- Give meaningful error messages when a test fails.
- Avoid using qx// and system() unless you are testing for them. If you
- do use them, make sure that you cover _all_ perl platforms.
- Unlink any temporary files you create.
- Promote unforeseen warnings to errors with $SIG{__WARN__}.
- Be sure to use the libraries and modules shipped with the version
- being tested, not those that were already installed.
- Add comments to the code explaining what you are testing for.
- Make updating the '1..42' string unnecessary. Or make sure that
- you update it.
- Test _all_ behaviors of a given operator, library, or function:
- - All optional arguments
- - Return values in various contexts (boolean, scalar, list, lvalue)
- - Use both global and lexical variables
- - Don't forget the exceptional, pathological cases.
-
-=back
-
-=head1 ACCEPTING A PATCH
-
-If you have received a patch file generated using the above section,
-you should try out the patch.
-
-First we need to create a temporary new branch for these changes and
-switch into it:
-
- % git checkout -b experimental
-
-Patches that were formatted by C<git format-patch> are applied with
-C<git am>:
-
- % git am 0001-Rename-Leon-Brocard-to-Orange-Brocard.patch
- Applying Rename Leon Brocard to Orange Brocard
-
-If just a raw diff is provided, it is also possible use this two-step
-process:
-
- % git apply bugfix.diff
- % git commit -a -m "Some fixing" --author="That Guy <that.guy at internets.com>"
-
-Now we can inspect the change:
-
- % git show HEAD
- commit b1b3dab48344cff6de4087efca3dbd63548ab5e2
- Author: Leon Brocard <acme at astray.com>
- Date: Fri Dec 19 17:02:59 2008 +0000
-
- Rename Leon Brocard to Orange Brocard
-
- diff --git a/AUTHORS b/AUTHORS
- index 293dd70..722c93e 100644
- --- a/AUTHORS
- +++ b/AUTHORS
- @@ -541,7 +541,7 @@ Lars Hecking <lhecking at nmrc.ucc.ie>
- Laszlo Molnar <laszlo.molnar at eth.ericsson.se>
- Leif Huhn <leif at hale.dkstat.com>
- Len Johnson <lenjay at ibm.net>
- -Leon Brocard <acme at astray.com>
- +Orange Brocard <acme at astray.com>
- Les Peters <lpeters at aol.net>
- Lesley Binks <lesley.binks at gmail.com>
- Lincoln D. Stein <lstein at cshl.org>
-
-If you are a committer to Perl and you think the patch is good, you can
-then merge it into blead then push it out to the main repository:
-
- % git checkout blead
- % git merge experimental
- % git push
-
-If you want to delete your temporary branch, you may do so with:
-
- % git checkout blead
- % git branch -d experimental
- error: The branch 'experimental' is not an ancestor of your current HEAD.
- If you are sure you want to delete it, run 'git branch -D experimental'.
- % git branch -D experimental
- Deleted branch experimental.
-
-=head1 CLEANING A WORKING DIRECTORY
-
-The command C<git clean> can with varying arguments be used as a
-replacement for C<make clean>.
-
-To reset your working directory to a pristine condition you can do:
-
- git clean -dxf
-
-However, be aware this will delete ALL untracked content. You can use
-
- git clean -Xf
-
-to remove all ignored untracked files, such as build and test
-byproduct, but leave any manually created files alone.
-
-If you only want to cancel some uncommitted edits, you can use C<git
-checkout> and give it a list of files to be reverted, or C<git checkout
--f> to revert them all.
-
-If you want to cancel one or several commits, you can use C<git reset>.
-
-=head1 BISECTING
-
-C<git> provides a built-in way to determine, with a binary search in
-the history, which commit should be blamed for introducing a given bug.
-
-Suppose that we have a script F<~/testcase.pl> that exits with C<0>
-when some behaviour is correct, and with C<1> when it's faulty. We need
-an helper script that automates building C<perl> and running the
-testcase:
-
- % cat ~/run
- #!/bin/sh
- git clean -dxf
- # If you can use ccache, add -Dcc=ccache\ gcc -Dld=gcc to the Configure line
- sh Configure -des -Dusedevel -Doptimize="-g"
- test -f config.sh || exit 125
- # Correct makefile for newer GNU gcc
- perl -ni -we 'print unless /<(?:built-in|command)/' makefile x2p/makefile
- # if you just need miniperl, replace test_prep with miniperl
- make -j4 test_prep
- -x ./perl || exit 125
- ./perl -Ilib ~/testcase.pl
- ret=$?
- git clean -dxf
- exit $ret
-
-This script may return C<125> to indicate that the corresponding commit
-should be skipped. Otherwise, it returns the status of
-F<~/testcase.pl>.
-
-We first enter in bisect mode with:
-
- % git bisect start
-
-For example, if the bug is present on C<HEAD> but wasn't in 5.10.0,
-C<git> will learn about this when you enter:
-
- % git bisect bad
- % git bisect good perl-5.10.0
- Bisecting: 853 revisions left to test after this
-
-This results in checking out the median commit between C<HEAD> and
-C<perl-5.10.0>. We can then run the bisecting process with:
-
- % git bisect run ~/run
-
-When the first bad commit is isolated, C<git bisect> will tell you so:
-
- ca4cfd28534303b82a216cfe83a1c80cbc3b9dc5 is first bad commit
- commit ca4cfd28534303b82a216cfe83a1c80cbc3b9dc5
- Author: Dave Mitchell <davem at fdisolutions.com>
- Date: Sat Feb 9 14:56:23 2008 +0000
-
- [perl #49472] Attributes + Unknown Error
- ...
-
- bisect run success
-
-You can peek into the bisecting process with C<git bisect log> and
-C<git bisect visualize>. C<git bisect reset> will get you out of bisect
-mode.
-
-Please note that the first C<good> state must be an ancestor of the
-first C<bad> state. If you want to search for the commit that I<solved>
-some bug, you have to negate your test case (i.e. exit with C<1> if OK
-and C<0> if not) and still mark the lower bound as C<good> and the
-upper as C<bad>. The "first bad commit" has then to be understood as
-the "first commit where the bug is solved".
-
-C<git help bisect> has much more information on how you can tweak your
-binary searches.
-
-=head1 SUBMITTING A PATCH VIA GITHUB
-
-GitHub is a website that makes it easy to fork and publish projects
-with Git. First you should set up a GitHub account and log in.
-
-Perl's git repository is mirrored on GitHub at this page:
-
- http://github.com/github/perl/tree/blead
-
-Visit the page and click the "fork" button. This clones the Perl git
-repository for you and provides you with "Your Clone URL" from which
-you should clone:
-
- % git clone git at github.com:USERNAME/perl.git perl-github
-
-We shall make the same patch as above, creating a new branch:
-
- % cd perl-github
- % git remote add upstream git://github.com/github/perl.git
- % git pull upstream blead
- % git checkout -b orange
- % perl -pi -e 's{Leon Brocard}{Orange Brocard}' AUTHORS
- % git commit -a -m 'Rename Leon Brocard to Orange Brocard'
- % git push origin orange
-
-The orange branch has been pushed to GitHub, so you should now send an
-email to perl5-porters at perl.org with a description of your changes and
-the following information:
-
- http://github.com/USERNAME/perl/tree/orange
- git at github.com:USERNAME/perl.git branch orange
-
-=head1 MERGING FROM A BRANCH VIA GITHUB
-
-If someone has provided a branch via GitHub and you are a committer,
-you should use the following in your perl-ssh directory:
-
- % git remote add dandv git://github.com/dandv/perl.git
- % git fetch
-
-Now you can see the differences between the branch and blead:
-
- % git diff dandv/blead
-
-And you can see the commits:
-
- % git log dandv/blead
-
-If you approve of a specific commit, you can cherry pick it:
-
- % git cherry-pick 3adac458cb1c1d41af47fc66e67b49c8dec2323f
-
-Or you could just merge the whole branch if you like it all:
-
- % git merge dandv/blead
-
-And then push back to the repository:
-
- % git push
-
-=head1 COMMITTING TO MAINTENANCE VERSIONS
-
-Maintenance versions should only be altered to add critical bug fixes.
-
-To commit to a maintenance version of perl, you need to create a local
-tracking branch:
-
- % git checkout --track -b maint-5.005 origin/maint-5.005
-
-This creates a local branch named C<maint-5.005>, which tracks the
-remote branch C<origin/maint-5.005>. Then you can pull, commit, merge
-and push as before.
-
-You can also cherry-pick commits from blead and another branch, by
-using the C<git cherry-pick> command. It is recommended to use the
-B<-x> option to C<git cherry-pick> in order to record the SHA1 of the
-original commit in the new commit message.
-
-=head1 SEE ALSO
-
-The git documentation, accessible via C<git help command>.
-
Deleted: trunk/contrib/perl/pod/perltoc.pod
===================================================================
--- trunk/contrib/perl/pod/perltoc.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perltoc.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,33219 +0,0 @@
-
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is autogenerated by buildtoc from all the other pods.
-# Edit those files and run buildtoc --build-toc to effect changes.
-
-=head1 NAME
-
-perltoc - perl documentation table of contents
-
-=head1 DESCRIPTION
-
-This page provides a brief table of contents for the rest of the Perl
-documentation set. It is meant to be scanned quickly or grepped
-through to locate the proper section you're looking for.
-
-=head1 BASIC DOCUMENTATION
-
-=head2 perl - Practical Extraction and Report Language
-
-=over 4
-
-=item SYNOPSIS
-
-=over 4
-
-=item Overview
-
-=item Tutorials
-
-=item Reference Manual
-
-=item Internals and C Language Interface
-
-=item Miscellaneous
-
-=item Language-Specific
-
-=item Platform-Specific
-
-=back
-
-=item DESCRIPTION
-
-=item AVAILABILITY
-
-=item ENVIRONMENT
-
-=item AUTHOR
-
-=item FILES
-
-=item SEE ALSO
-
-=item DIAGNOSTICS
-
-=item BUGS
-
-=item NOTES
-
-=back
-
-=head2 perlintro -- a brief introduction and overview of Perl
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item What is Perl?
-
-=item Running Perl programs
-
-=item Safety net
-
-=item Basic syntax overview
-
-=item Perl variable types
-
-Scalars, Arrays, Hashes
-
-=item Variable scoping
-
-=item Conditional and looping constructs
-
-if, while, for, foreach
-
-=item Builtin operators and functions
-
-Arithmetic, Numeric comparison, String comparison, Boolean logic,
-Miscellaneous
-
-=item Files and I/O
-
-=item Regular expressions
-
-Simple matching, Simple substitution, More complex regular expressions,
-Parentheses for capturing, Other regexp features
-
-=item Writing subroutines
-
-=item OO Perl
-
-=item Using Perl modules
-
-=back
-
-=item AUTHOR
-
-=back
-
-=head2 perlreftut - Mark's very short tutorial about references
-
-=over 4
-
-=item DESCRIPTION
-
-=item Who Needs Complicated Data Structures?
-
-=item The Solution
-
-=item Syntax
-
-=over 4
-
-=item Making References
-
-=item Using References
-
-=item An Example
-
-=item Arrow Rule
-
-=back
-
-=item Solution
-
-=item The Rest
-
-=item Summary
-
-=item Credits
-
-=over 4
-
-=item Distribution Conditions
-
-=back
-
-=back
-
-=head2 perldsc - Perl Data Structures Cookbook
-
-=over 4
-
-=item DESCRIPTION
-
-arrays of arrays, hashes of arrays, arrays of hashes, hashes of hashes,
-more elaborate constructs
-
-=item REFERENCES
-X<reference> X<dereference> X<dereferencing> X<pointer>
-
-=item COMMON MISTAKES
-
-=item CAVEAT ON PRECEDENCE
-X<dereference, precedence> X<dereferencing, precedence>
-
-=item WHY YOU SHOULD ALWAYS C<use strict>
-
-=item DEBUGGING
-X<data structure, debugging> X<complex data structure, debugging>
-X<AoA, debugging> X<HoA, debugging> X<AoH, debugging> X<HoH, debugging>
-X<array of arrays, debugging> X<hash of arrays, debugging>
-X<array of hashes, debugging> X<hash of hashes, debugging>
-
-=item CODE EXAMPLES
-
-=item ARRAYS OF ARRAYS
-X<array of arrays> X<AoA>
-
-=over 4
-
-=item Declaration of an ARRAY OF ARRAYS
-
-=item Generation of an ARRAY OF ARRAYS
-
-=item Access and Printing of an ARRAY OF ARRAYS
-
-=back
-
-=item HASHES OF ARRAYS
-X<hash of arrays> X<HoA>
-
-=over 4
-
-=item Declaration of a HASH OF ARRAYS
-
-=item Generation of a HASH OF ARRAYS
-
-=item Access and Printing of a HASH OF ARRAYS
-
-=back
-
-=item ARRAYS OF HASHES
-X<array of hashes> X<AoH>
-
-=over 4
-
-=item Declaration of an ARRAY OF HASHES
-
-=item Generation of an ARRAY OF HASHES
-
-=item Access and Printing of an ARRAY OF HASHES
-
-=back
-
-=item HASHES OF HASHES
-X<hass of hashes> X<HoH>
-
-=over 4
-
-=item Declaration of a HASH OF HASHES
-
-=item Generation of a HASH OF HASHES
-
-=item Access and Printing of a HASH OF HASHES
-
-=back
-
-=item MORE ELABORATE RECORDS
-X<record> X<structure> X<struct>
-
-=over 4
-
-=item Declaration of MORE ELABORATE RECORDS
-
-=item Declaration of a HASH OF COMPLEX RECORDS
-
-=item Generation of a HASH OF COMPLEX RECORDS
-
-=back
-
-=item Database Ties
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 perllol - Manipulating Arrays of Arrays in Perl
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Declaration and Access of Arrays of Arrays
-
-=item Growing Your Own
-
-=item Access and Printing
-
-=item Slices
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 perlrequick - Perl regular expressions quick start
-
-=over 4
-
-=item DESCRIPTION
-
-=item The Guide
-
-=over 4
-
-=item Simple word matching
-
-=item Using character classes
-
-=item Matching this or that
-
-=item Grouping things and hierarchical matching
-
-=item Extracting matches
-
-=item Matching repetitions
-
-=item More matching
-
-=item Search and replace
-
-=item The split operator
-
-=back
-
-=item BUGS
-
-=item SEE ALSO
-
-=item AUTHOR AND COPYRIGHT
-
-=over 4
-
-=item Acknowledgments
-
-=back
-
-=back
-
-=head2 perlretut - Perl regular expressions tutorial
-
-=over 4
-
-=item DESCRIPTION
-
-=item Part 1: The basics
-
-=over 4
-
-=item Simple word matching
-
-=item Using character classes
-
-=item Matching this or that
-
-=item Grouping things and hierarchical matching
-
-=item Extracting matches
-
-=item Backreferences
-
-=item Relative backreferences
-
-=item Named backreferences
-
-=item Alternative capture group numbering
-
-=item Position information
-
-=item Non-capturing groupings
-
-=item Matching repetitions
-
-=item Possessive quantifiers
-
-=item Building a regexp
-
-=item Using regular expressions in Perl
-
-=back
-
-=item Part 2: Power tools
-
-=over 4
-
-=item More on characters, strings, and character classes
-
-=item Compiling and saving regular expressions
-
-=item Composing regular expressions at runtime
-
-=item Embedding comments and modifiers in a regular expression
-
-=item Looking ahead and looking behind
-
-=item Using independent subexpressions to prevent backtracking
-
-=item Conditional expressions
-
-=item Defining named patterns
-
-=item Recursive patterns
-
-=item A bit of magic: executing Perl code in a regular expression
-
-=item Backtracking control verbs
-
-=item Pragmas and debugging
-
-=back
-
-=item BUGS
-
-=item SEE ALSO
-
-=item AUTHOR AND COPYRIGHT
-
-=over 4
-
-=item Acknowledgments
-
-=back
-
-=back
-
-=head2 perlboot - Beginner's Object-Oriented Tutorial
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item If we could talk to the animals...
-
-=item Introducing the method invocation arrow
-
-=item Invoking a barnyard
-
-=item The extra parameter of method invocation
-
-=item Calling a second method to simplify things
-
-=item Inheriting the windpipes
-
-=item A few notes about @ISA
-
-=item Overriding the methods
-
-=item Starting the search from a different place
-
-=item The SUPER way of doing things
-
-=item Where we're at so far...
-
-=item A horse is a horse, of course of course -- or is it?
-
-=item Invoking an instance method
-
-=item Accessing the instance data
-
-=item How to build a horse
-
-=item Inheriting the constructor
-
-=item Making a method work with either classes or instances
-
-=item Adding parameters to a method
-
-=item More interesting instances
-
-=item A horse of a different color
-
-=item Summary
-
-=back
-
-=item SEE ALSO
-
-=item COPYRIGHT
-
-=back
-
-=head2 perltoot - Tom's object-oriented tutorial for perl
-
-=over 4
-
-=item DESCRIPTION
-
-=item Creating a Class
-
-=over 4
-
-=item Object Representation
-
-=item Class Interface
-
-=item Constructors and Instance Methods
-
-=item Planning for the Future: Better Constructors
-
-=item Destructors
-
-=item Other Object Methods
-
-=back
-
-=item Class Data
-
-=over 4
-
-=item Accessing Class Data
-
-=item Debugging Methods
-
-=item Class Destructors
-
-=item Documenting the Interface
-
-=back
-
-=item Aggregation
-
-=item Inheritance
-
-=over 4
-
-=item Overridden Methods
-
-=item Multiple Inheritance
-
-=item UNIVERSAL: The Root of All Objects
-
-=item Deeper UNIVERSAL details
-
-=back
-
-=item Alternate Object Representations
-
-=over 4
-
-=item Arrays as Objects
-
-=item Closures as Objects
-
-=back
-
-=item AUTOLOAD: Proxy Methods
-
-=over 4
-
-=item Autoloaded Data Methods
-
-=item Inherited Autoloaded Data Methods
-
-=back
-
-=item Metaclassical Tools
-
-=over 4
-
-=item Class::Struct
-
-=item Data Members as Variables
-
-=back
-
-=item NOTES
-
-=over 4
-
-=item Object Terminology
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR AND COPYRIGHT
-
-=item COPYRIGHT
-
-=over 4
-
-=item Acknowledgments
-
-=back
-
-=back
-
-=head2 perltooc - Tom's OO Tutorial for Class Data in Perl
-
-=over 4
-
-=item DESCRIPTION
-
-=item Class Data in a Can
-
-=item Class Data as Package Variables
-
-=over 4
-
-=item Putting All Your Eggs in One Basket
-
-=item Inheritance Concerns
-
-=item The Eponymous Meta-Object
-
-=item Indirect References to Class Data
-
-=item Monadic Classes
-
-=item Translucent Attributes
-
-=back
-
-=item Class Data as Lexical Variables
-
-=over 4
-
-=item Privacy and Responsibility
-
-=item File-Scoped Lexicals
-
-=item More Inheritance Concerns
-
-=item Locking the Door and Throwing Away the Key
-
-=item Translucency Revisited
-
-=back
-
-=item NOTES
-
-=item SEE ALSO
-
-=item AUTHOR AND COPYRIGHT
-
-=item ACKNOWLEDGEMENTS
-
-=item HISTORY
-
-=back
-
-=head2 perlbot - Bag'o Object Tricks (the BOT)
-
-=over 4
-
-=item DESCRIPTION
-
-=item OO SCALING TIPS
-
-=item INSTANCE VARIABLES
-
-=item SCALAR INSTANCE VARIABLES
-
-=item INSTANCE VARIABLE INHERITANCE
-
-=item OBJECT RELATIONSHIPS
-
-=item OVERRIDING SUPERCLASS METHODS
-
-=item USING RELATIONSHIP WITH SDBM
-
-=item THINKING OF CODE REUSE
-
-=item CLASS CONTEXT AND THE OBJECT
-
-=item INHERITING A CONSTRUCTOR
-
-=item DELEGATION
-
-=item SEE ALSO
-
-=back
-
-=head2 perlstyle - Perl style guide
-
-=over 4
-
-=item DESCRIPTION
-
-=back
-
-=head2 perlcheat - Perl 5 Cheat Sheet
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item The sheet
-
-=back
-
-=item ACKNOWLEDGEMENTS
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 perltrap - Perl traps for the unwary
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Awk Traps
-
-=item C/C++ Traps
-
-=item Sed Traps
-
-=item Shell Traps
-
-=item Perl Traps
-
-=item Perl4 to Perl5 Traps
-
-Discontinuance, Deprecation, and BugFix traps, Parsing Traps, Numerical
-Traps, General data type traps, Context Traps - scalar, list contexts,
-Precedence Traps, General Regular Expression Traps using s///, etc,
-Subroutine, Signal, Sorting Traps, OS Traps, DBM Traps, Unclassified Traps
-
-=item Discontinuance, Deprecation, and BugFix traps
-
-Symbols starting with "_" no longer forced into main, Double-colon valid
-package separator in variable name, 2nd and 3rd args to C<splice()> are now
-in scalar context, Can't do C<goto> into a block that is optimized away,
-Can't use whitespace as variable name or quote delimiter, C<while/if BLOCK
-BLOCK> gone, C<**> binds tighter than unary minus, C<foreach> changed when
-iterating over a list, C<split> with no args behavior changed, B<-e>
-behavior fixed, C<push> returns number of elements in resulting list, Some
-error messages differ, C<split()> honors subroutine args, Bugs removed
-
-=item Parsing Traps
-
-Space between . and = triggers syntax error, Better parsing in perl 5,
-Function parsing, String interpolation of C<$#array> differs, Perl guesses
-on C<map>, C<grep> followed by C<{> if it starts BLOCK or hash ref
-
-=item Numerical Traps
-
-Formatted output and significant digits, Auto-increment operator over
-signed int limit deleted, Assignment of return values from numeric equality
-tests doesn't work, Bitwise string ops
-
-=item General data type traps
-
-Negative array subscripts now count from the end of array, Setting
-C<$#array> lower now discards array elements, Hashes get defined before
-use, Glob assignment from localized variable to variable, Assigning
-C<undef> to glob, Changes in unary negation (of strings), Modifying of
-constants prohibited, C<defined $var> behavior changed, Variable Suicide
-
-=item Context Traps - scalar, list contexts
-
-Elements of argument lists for formats evaluated in list context,
-C<caller()> returns false value in scalar context if no caller present,
-Comma operator in scalar context gives scalar context to args, C<sprintf()>
-prototyped as C<($;@)>
-
-=item Precedence Traps
-
-LHS vs. RHS of any assignment operator, Semantic errors introduced due to
-precedence, Precedence of assignment operators same as the precedence of
-assignment, C<open> requires parentheses around filehandle, C<$:>
-precedence over C<$::> gone, Precedence of file test operators documented,
-C<keys>, C<each>, C<values> are regular named unary operators
-
-=item General Regular Expression Traps using s///, etc.
-
-C<s'$lhs'$rhs'> interpolates on either side, C<m//g> attaches its state to
-the searched string, C<m//o> used within an anonymous sub, C<$+> isn't set
-to whole match, Substitution now returns null string if it fails,
-C<s`lhs`rhs`> is now a normal substitution, Stricter parsing of variables
-in regular expressions, C<m?x?> matches only once, Failed matches don't
-reset the match variables
-
-=item Subroutine, Signal, Sorting Traps
-
-Barewords that used to look like strings look like subroutine calls,
-Reverse is no longer allowed as the name of a sort subroutine, C<warn()>
-won't let you specify a filehandle
-
-=item OS Traps
-
-SysV resets signal handler correctly, SysV C<seek()> appends correctly
-
-=item Interpolation Traps
-
-C<@> always interpolates an array in double-quotish strings, Double-quoted
-strings may no longer end with an unescaped $, Arbitrary expressions are
-evaluated inside braces within double quotes, C<$$x> now tries to
-dereference $x, Creation of hashes on the fly with C<eval "EXPR"> requires
-protection, Bugs in earlier perl versions, Array and hash brackets during
-interpolation, Interpolation of C<\$$foo{bar}>, C<qq()> string passed to
-C<eval> will not find string terminator
-
-=item DBM Traps
-
-Perl5 must have been linked with same dbm/ndbm as the default for
-C<dbmopen()>, DBM exceeding limit on the key/value size will cause perl5 to
-exit immediately
-
-=item Unclassified Traps
-
-C<require>/C<do> trap using returned value, C<split> on empty string with
-LIMIT specified
-
-=back
-
-=back
-
-=head2 perldebtut - Perl debugging tutorial
-
-=over 4
-
-=item DESCRIPTION
-
-=item use strict
-
-=item Looking at data and -w and v
-
-=item help
-
-=item Stepping through code
-
-=item Placeholder for a, w, t, T
-
-=item REGULAR EXPRESSIONS
-
-=item OUTPUT TIPS
-
-=item CGI
-
-=item GUIs
-
-=item SUMMARY
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item CONTRIBUTORS
-
-=back
-
-=head2 perlfaq - frequently asked questions about Perl
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Where to get the perlfaq
-
-=item How to contribute to the perlfaq
-
-=item What will happen if you mail your Perl programming problems to the
-authors?
-
-=back
-
-=item CREDITS
-
-=item AUTHOR AND COPYRIGHT
-
-=item Table of Contents
-
-perlfaq - this document, perlfaq1 - General Questions About Perl, perlfaq2
-- Obtaining and Learning about Perl, perlfaq3 - Programming Tools, perlfaq4
-- Data Manipulation, perlfaq5 - Files and Formats, perlfaq6 - Regular
-Expressions, perlfaq7 - General Perl Language Issues, perlfaq8 - System
-Interaction, perlfaq9 - Networking
-
-=item The Questions
-
-=over 4
-
-=item L<perlfaq1>: General Questions About Perl
-
-=item L<perlfaq2>: Obtaining and Learning about Perl
-
-=item L<perlfaq3>: Programming Tools
-
-=item L<perlfaq4>: Data Manipulation
-
-=item L<perlfaq5>: Files and Formats
-
-=item L<perlfaq6>: Regular Expressions
-
-=item L<perlfaq7>: General Perl Language Issues
-
-=item L<perlfaq8>: System Interaction
-
-=item L<perlfaq9>: Networking
-
-=back
-
-=back
-
-=head2 perlfaq1 - General Questions About Perl
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item What is Perl?
-
-=item Who supports Perl? Who develops it? Why is it free?
-
-=item Which version of Perl should I use?
-
-=item What are Perl 4, Perl 5, or Perl 6?
-
-=item What was Ponie?
-
-=item What is Perl 6?
-
-=item How stable is Perl?
-
-=item Is Perl difficult to learn?
-
-=item How does Perl compare with other languages like Java, Python, REXX,
-Scheme, or Tcl?
-
-=item Can I do [task] in Perl?
-
-=item When shouldn't I program in Perl?
-
-=item What's the difference between "perl" and "Perl"?
-
-=item Is it a Perl program or a Perl script?
-
-=item What is a JAPH?
-
-=item Where can I get a list of Larry Wall witticisms?
-
-=item How can I convince others to use Perl?
-
-http://perltraining.com.au/whyperl.html,
-http://www.perl.org/advocacy/whyperl.html
-
-=back
-
-=item REVISION
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlfaq2 - Obtaining and Learning about Perl
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item What machines support perl? Where do I get it?
-
-=item How can I get a binary version of perl?
-
-=item I don't have a C compiler. How can I build my own Perl interpreter?
-
-=item I copied the perl binary from one machine to another, but scripts
-don't work.
-
-=item I grabbed the sources and tried to compile but gdbm/dynamic
-loading/malloc/linking/... failed. How do I make it work?
-
-=item What modules and extensions are available for Perl? What is CPAN?
-What does CPAN/src/... mean?
-
-=item Is there an ISO or ANSI certified version of Perl?
-
-=item Where can I get information on Perl?
-
-=item What are the Perl newsgroups on Usenet? Where do I post questions?
-
-=item Where should I post source code?
-
-=item Perl Books
-
-References, Tutorials, Task-Oriented, Special Topics
-
-=item Which magazines have Perl content?
-
-=item What mailing lists are there for Perl?
-
-=item Where are the archives for comp.lang.perl.misc?
-
-=item Where can I buy a commercial version of perl?
-
-=item Where do I send bug reports?
-
-=item What is perl.com? Perl Mongers? pm.org? perl.org? cpan.org?
-
-=back
-
-=item REVISION
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlfaq3 - Programming Tools
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item How do I do (anything)?
-
-=item How can I use Perl interactively?
-
-=item Is there a Perl shell?
-
-=item How do I find which modules are installed on my system?
-
-=item How do I debug my Perl programs?
-
-=item How do I profile my Perl programs?
-
-=item How do I cross-reference my Perl programs?
-
-=item Is there a pretty-printer (formatter) for Perl?
-
-=item Is there a ctags for Perl?
-
-=item Is there an IDE or Windows Perl Editor?
-
-Eclipse, Enginsite, Komodo, Open Perl IDE, OptiPerl, PerlBuilder,
-visiPerl+, Visual Perl, Zeus, GNU Emacs, MicroEMACS, XEmacs, Jed, Elvis,
-Vile, Vim, Codewright, MultiEdit, SlickEdit, Bash, Ksh, Tcsh, Zsh, Affrus,
-Alpha, BBEdit and BBEdit Lite
-
-=item Where can I get Perl macros for vi?
-
-=item Where can I get perl-mode for emacs?
-
-=item How can I use curses with Perl?
-
-=item How can I write a GUI (X, Tk, Gtk, etc.) in Perl?
-X<GUI> X<Tk> X<Wx> X<WxWidgets> X<Gtk> X<Gtk2> X<CamelBones> X<Qt>
-
-Tk, Wx, Gtk and Gtk2, Win32::GUI, CamelBones, Qt, Athena
-
-=item How can I make my Perl program run faster?
-
-=item How can I make my Perl program take less memory?
-
-Don't slurp!, Use map and grep selectively, Avoid unnecessary quotes and
-stringification, Pass by reference, Tie large variables to disk
-
-=item Is it safe to return a reference to local or lexical data?
-
-=item How can I free an array or hash so my program shrinks?
-
-=item How can I make my CGI script more efficient?
-
-=item How can I hide the source for my Perl program?
-
-=item How can I compile my Perl program into byte code or C?
-
-=item How can I get C<#!perl> to work on [MS-DOS,NT,...]?
-
-=item Can I write useful Perl programs on the command line?
-
-=item Why don't Perl one-liners work on my DOS/Mac/VMS system?
-
-=item Where can I learn about CGI or Web programming in Perl?
-
-=item Where can I learn about object-oriented Perl programming?
-
-=item Where can I learn about linking C with Perl?
-
-=item I've read perlembed, perlguts, etc., but I can't embed perl in my C
-program; what am I doing wrong?
-
-=item When I tried to run my script, I got this message. What does it mean?
-
-=item What's MakeMaker?
-
-=back
-
-=item REVISION
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlfaq4 - Data Manipulation
-
-=over 4
-
-=item DESCRIPTION
-
-=item Data: Numbers
-
-=over 4
-
-=item Why am I getting long decimals (eg, 19.9499999999999) instead of the
-numbers I should be getting (eg, 19.95)?
-
-=item Why is int() broken?
-
-=item Why isn't my octal data interpreted correctly?
-
-=item Does Perl have a round() function? What about ceil() and floor()?
-Trig functions?
-
-=item How do I convert between numeric representations/bases/radixes?
-
-How do I convert hexadecimal into decimal, How do I convert from decimal to
-hexadecimal, How do I convert from octal to decimal, How do I convert from
-decimal to octal, How do I convert from binary to decimal, How do I convert
-from decimal to binary
-
-=item Why doesn't & work the way I want it to?
-
-=item How do I multiply matrices?
-
-=item How do I perform an operation on a series of integers?
-
-=item How can I output Roman numerals?
-
-=item Why aren't my random numbers random?
-
-=item How do I get a random number between X and Y?
-
-=back
-
-=item Data: Dates
-
-=over 4
-
-=item How do I find the day or week of the year?
-
-=item How do I find the current century or millennium?
-
-=item How can I compare two dates and find the difference?
-
-=item How can I take a string and turn it into epoch seconds?
-
-=item How can I find the Julian Day?
-
-=item How do I find yesterday's date?
-
-=item Does Perl have a Year 2000 problem? Is Perl Y2K compliant?
-
-=back
-
-=item Data: Strings
-
-=over 4
-
-=item How do I validate input?
-
-=item How do I unescape a string?
-
-=item How do I remove consecutive pairs of characters?
-
-=item How do I expand function calls in a string?
-
-=item How do I find matching/nesting anything?
-
-=item How do I reverse a string?
-
-=item How do I expand tabs in a string?
-
-=item How do I reformat a paragraph?
-
-=item How can I access or change N characters of a string?
-
-=item How do I change the Nth occurrence of something?
-
-=item How can I count the number of occurrences of a substring within a
-string?
-
-=item How do I capitalize all the words on one line?
-
-=item How can I split a [character] delimited string except when inside
-[character]?
-
-=item How do I strip blank space from the beginning/end of a string?
-
-=item How do I pad a string with blanks or pad a number with zeroes?
-
-=item How do I extract selected columns from a string?
-
-=item How do I find the soundex value of a string?
-
-=item How can I expand variables in text strings?
-
-=item What's wrong with always quoting "$vars"?
-
-=item Why don't my E<lt>E<lt>HERE documents work?
-
-There must be no space after the E<lt>E<lt> part, There (probably) should
-be a semicolon at the end, You can't (easily) have any space in front of
-the tag
-
-=back
-
-=item Data: Arrays
-
-=over 4
-
-=item What is the difference between a list and an array?
-
-=item What is the difference between $array[1] and @array[1]?
-
-=item How can I remove duplicate elements from a list or array?
-
-=item How can I tell whether a certain element is contained in a list or
-array?
-
-=item How do I compute the difference of two arrays? How do I compute the
-intersection of two arrays?
-
-=item How do I test whether two arrays or hashes are equal?
-
-=item How do I find the first array element for which a condition is true?
-
-=item How do I handle linked lists?
-
-=item How do I handle circular lists?
-
-=item How do I shuffle an array randomly?
-
-=item How do I process/modify each element of an array?
-
-=item How do I select a random element from an array?
-
-=item How do I permute N elements of a list?
-X<List::Permuter> X<permute> X<Algorithm::Loops> X<Knuth>
-X<The Art of Computer Programming> X<Fischer-Krause>
-
-=item How do I sort an array by (anything)?
-
-=item How do I manipulate arrays of bits?
-
-=item Why does defined() return true on empty arrays and hashes?
-
-=back
-
-=item Data: Hashes (Associative Arrays)
-
-=over 4
-
-=item How do I process an entire hash?
-
-=item What happens if I add or remove keys from a hash while iterating over
-it?
-
-=item How do I look up a hash element by value?
-
-=item How can I know how many entries are in a hash?
-
-=item How do I sort a hash (optionally by value instead of key)?
-
-=item How can I always keep my hash sorted?
-X<hash tie sort DB_File Tie::IxHash>
-
-=item What's the difference between "delete" and "undef" with hashes?
-
-=item Why don't my tied hashes make the defined/exists distinction?
-
-=item How do I reset an each() operation part-way through?
-
-=item How can I get the unique keys from two hashes?
-
-=item How can I store a multidimensional array in a DBM file?
-
-=item How can I make my hash remember the order I put elements into it?
-
-=item Why does passing a subroutine an undefined element in a hash create
-it?
-
-=item How can I make the Perl equivalent of a C structure/C++ class/hash or
-array of hashes or arrays?
-
-=item How can I use a reference as a hash key?
-
-=back
-
-=item Data: Misc
-
-=over 4
-
-=item How do I handle binary data correctly?
-
-=item How do I determine whether a scalar is a number/whole/integer/float?
-
-=item How do I keep persistent data across program calls?
-
-=item How do I print out or copy a recursive data structure?
-
-=item How do I define methods for every class/object?
-
-=item How do I verify a credit card checksum?
-
-=item How do I pack arrays of doubles or floats for XS code?
-
-=back
-
-=item REVISION
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlfaq5 - Files and Formats
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item How do I flush/unbuffer an output filehandle? Why must I do this?
-X<flush> X<buffer> X<unbuffer> X<autoflush>
-
-=item How do I count the number of lines in a file?
-X<file, counting lines> X<lines> X<line>
-
-=item How can I use Perl's C<-i> option from within a program?
-X<-i> X<in-place>
-
-=item How can I copy a file?
-X<copy> X<file, copy>
-
-=item How do I make a temporary file name?
-X<file, temporary>
-
-=item How can I manipulate fixed-record-length files?
-X<fixed-length> X<file, fixed-length records>
-
-=item How can I make a filehandle local to a subroutine? How do I pass
-filehandles between subroutines? How do I make an array of filehandles?
-X<filehandle, local> X<filehandle, passing> X<filehandle, reference>
-
-=item How can I use a filehandle indirectly?
-X<filehandle, indirect>
-
-=item How can I set up a footer format to be used with write()?
-X<footer>
-
-=item How can I write() into a string?
-X<write, into a string>
-
-=item How can I open a filehandle to a string?
-X<string>, X<open>, X<IO::Scalar>, X<filehandle>
-
-=item How can I translate tildes (~) in a filename?
-X<tilde> X<tilde expansion>
-
-=item How come when I open a file read-write it wipes it out?
-X<clobber> X<read-write> X<clobbering> X<truncate> X<truncating>
-
-=item Why do I sometimes get an "Argument list too long" when I use
-E<lt>*E<gt>?
-X<argument list too long>
-
-=item Is there a leak/bug in glob()?
-X<glob>
-
-=item How can I open a file with a leading ">" or trailing blanks?
-X<filename, special characters>
-
-=item How can I reliably rename a file?
-X<rename> X<mv> X<move> X<file, rename> X<ren>
-
-=item How can I lock a file?
-X<lock> X<file, lock> X<flock>
-
-=item Why can't I just open(FH, "E<gt>file.lock")?
-X<lock, lockfile race condition>
-
-=item I still don't get locking. I just want to increment the number in
-the file. How can I do this?
-X<counter> X<file, counter>
-
-=item All I want to do is append a small amount of text to the end of a
-file. Do I still have to use locking?
-X<append> X<file, append>
-
-=item How do I randomly update a binary file?
-X<file, binary patch>
-
-=item How do I get a file's timestamp in perl?
-X<timestamp> X<file, timestamp>
-
-=item How do I set a file's timestamp in perl?
-X<timestamp> X<file, timestamp>
-
-=item How do I print to more than one file at once?
-X<print, to multiple files>
-
-=item How can I read in an entire file all at once?
-X<slurp> X<file, slurping>
-
-=item How can I read in a file by paragraphs?
-X<file, reading by paragraphs>
-
-=item How can I read a single character from a file? From the keyboard?
-X<getc> X<file, reading one character at a time>
-
-=item How can I tell whether there's a character waiting on a filehandle?
-
-=item How do I do a C<tail -f> in perl?
-X<tail> X<IO::Handle> X<File::Tail> X<clearerr>
-
-=item How do I dup() a filehandle in Perl?
-X<dup>
-
-=item How do I close a file descriptor by number?
-X<file, closing file descriptors> X<POSIX> X<close>
-
-=item Why can't I use "C:\temp\foo" in DOS paths? Why doesn't
-`C:\temp\foo.exe` work?
-X<filename, DOS issues>
-
-=item Why doesn't glob("*.*") get all the files?
-X<glob>
-
-=item Why does Perl let me delete read-only files? Why does C<-i> clobber
-protected files? Isn't this a bug in Perl?
-
-=item How do I select a random line from a file?
-X<file, selecting a random line>
-
-=item Why do I get weird spaces when I print an array of lines?
-
-=back
-
-=item REVISION
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlfaq6 - Regular Expressions
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item How can I hope to use regular expressions without creating illegible
-and unmaintainable code?
-X<regex, legibility> X<regexp, legibility>
-X<regular expression, legibility> X</x>
-
-Comments Outside the Regex, Comments Inside the Regex, Different Delimiters
-
-=item I'm having trouble matching over more than one line. What's wrong?
-X<regex, multiline> X<regexp, multiline> X<regular expression, multiline>
-
-=item How can I pull out lines between two patterns that are themselves on
-different lines?
-X<..>
-
-=item I put a regular expression into $/ but it didn't work. What's wrong?
-X<$/, regexes in> X<$INPUT_RECORD_SEPARATOR, regexes in>
-X<$RS, regexes in>
-
-=item How do I substitute case insensitively on the LHS while preserving
-case on the RHS?
-X<replace, case preserving> X<substitute, case preserving>
-X<substitution, case preserving> X<s, case preserving>
-
-=item How can I make C<\w> match national character sets?
-X<\w>
-
-=item How can I match a locale-smart version of C</[a-zA-Z]/>?
-X<alpha>
-
-=item How can I quote a variable to use in a regex?
-X<regex, escaping> X<regexp, escaping> X<regular expression, escaping>
-
-=item What is C</o> really for?
-X</o, regular expressions> X<compile, regular expressions>
-
-=item How do I use a regular expression to strip C style comments from a
-file?
-
-=item Can I use Perl regular expressions to match balanced text?
-X<regex, matching balanced test> X<regexp, matching balanced test>
-X<regular expression, matching balanced test>
-
-=item What does it mean that regexes are greedy? How can I get around it?
-X<greedy> X<greediness>
-
-=item How do I process each word on each line?
-X<word>
-
-=item How can I print out a word-frequency or line-frequency summary?
-
-=item How can I do approximate matching?
-X<match, approximate> X<matching, approximate>
-
-=item How do I efficiently match many regular expressions at once?
-X<regex, efficiency> X<regexp, efficiency>
-X<regular expression, efficiency>
-
-=item Why don't word-boundary searches with C<\b> work for me?
-X<\b>
-
-=item Why does using $&, $`, or $' slow my program down?
-X<$MATCH> X<$&> X<$POSTMATCH> X<$'> X<$PREMATCH> X<$`>
-
-=item What good is C<\G> in a regular expression?
-X<\G>
-
-=item Are Perl regexes DFAs or NFAs? Are they POSIX compliant?
-X<DFA> X<NFA> X<POSIX>
-
-=item What's wrong with using grep in a void context?
-X<grep>
-
-=item How can I match strings with multibyte characters?
-X<regex, and multibyte characters> X<regexp, and multibyte characters>
-X<regular expression, and multibyte characters> X<martian> X<encoding,
-Martian>
-
-=item How do I match a regular expression that's in a variable?
-X<regex, in variable> X<eval> X<regex> X<quotemeta> X<\Q, regex>
-X<\E, regex>, X<qr//>
-
-=back
-
-=item REVISION
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlfaq7 - General Perl Language Issues
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Can I get a BNF/yacc/RE for the Perl language?
-
-=item What are all these $@%&* punctuation signs, and how do I know when to
-use them?
-
-=item Do I always/never have to quote my strings or use semicolons and
-commas?
-
-=item How do I skip some return values?
-
-=item How do I temporarily block warnings?
-
-=item What's an extension?
-
-=item Why do Perl operators have different precedence than C operators?
-
-=item How do I declare/create a structure?
-
-=item How do I create a module?
-
-=item How do I adopt or take over a module already on CPAN?
-
-=item How do I create a class?
-
-=item How can I tell if a variable is tainted?
-
-=item What's a closure?
-
-=item What is variable suicide and how can I prevent it?
-
-=item How can I pass/return a {Function, FileHandle, Array, Hash, Method,
-Regex}?
-
-Passing Variables and Functions, Passing Filehandles, Passing Regexes,
-Passing Methods
-
-=item How do I create a static variable?
-
-=item What's the difference between dynamic and lexical (static) scoping?
-Between local() and my()?
-
-=item How can I access a dynamic variable while a similarly named lexical
-is in scope?
-
-=item What's the difference between deep and shallow binding?
-
-=item Why doesn't "my($foo) = E<lt>FILEE<gt>;" work right?
-
-=item How do I redefine a builtin function, operator, or method?
-
-=item What's the difference between calling a function as &foo and foo()?
-
-=item How do I create a switch or case statement?
-
-=item How can I catch accesses to undefined variables, functions, or
-methods?
-
-=item Why can't a method included in this same file be found?
-
-=item How can I find out my current package?
-
-=item How can I comment out a large block of perl code?
-
-=item How do I clear a package?
-
-=item How can I use a variable as a variable name?
-
-=item What does "bad interpreter" mean?
-
-=back
-
-=item REVISION
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlfaq8 - System Interaction
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item How do I find out which operating system I'm running under?
-
-=item How come exec() doesn't return?
-
-=item How do I do fancy stuff with the keyboard/screen/mouse?
-
-Keyboard, Screen, Mouse
-
-=item How do I print something out in color?
-
-=item How do I read just one key without waiting for a return key?
-
-=item How do I check whether input is ready on the keyboard?
-
-=item How do I clear the screen?
-
-=item How do I get the screen size?
-
-=item How do I ask the user for a password?
-
-=item How do I read and write the serial port?
-
-lockfiles, open mode, end of line, flushing output, non-blocking input
-
-=item How do I decode encrypted password files?
-
-=item How do I start a process in the background?
-
-STDIN, STDOUT, and STDERR are shared, Signals, Zombies
-
-=item How do I trap control characters/signals?
-
-=item How do I modify the shadow password file on a Unix system?
-
-=item How do I set the time and date?
-
-=item How can I sleep() or alarm() for under a second?
-X<Time::HiRes> X<BSD::Itimer> X<sleep> X<select>
-
-=item How can I measure time under a second?
-X<Time::HiRes> X<BSD::Itimer> X<sleep> X<select>
-
-=item How can I do an atexit() or setjmp()/longjmp()? (Exception handling)
-
-=item Why doesn't my sockets program work under System V (Solaris)? What
-does the error message "Protocol not supported" mean?
-
-=item How can I call my system's unique C functions from Perl?
-
-=item Where do I get the include files to do ioctl() or syscall()?
-
-=item Why do setuid perl scripts complain about kernel problems?
-
-=item How can I open a pipe both to and from a command?
-
-=item Why can't I get the output of a command with system()?
-
-=item How can I capture STDERR from an external command?
-
-=item Why doesn't open() return an error when a pipe open fails?
-
-=item What's wrong with using backticks in a void context?
-
-=item How can I call backticks without shell processing?
-
-=item Why can't my script read from STDIN after I gave it EOF (^D on Unix,
-^Z on MS-DOS)?
-
-=item How can I convert my shell script to perl?
-
-=item Can I use perl to run a telnet or ftp session?
-
-=item How can I write expect in Perl?
-
-=item Is there a way to hide perl's command line from programs such as
-"ps"?
-
-=item I {changed directory, modified my environment} in a perl script. How
-come the change disappeared when I exited the script? How do I get my
-changes to be visible?
-
-Unix
-
-=item How do I close a process's filehandle without waiting for it to
-complete?
-
-=item How do I fork a daemon process?
-
-=item How do I find out if I'm running interactively or not?
-
-=item How do I timeout a slow event?
-
-=item How do I set CPU limits?
-X<BSD::Resource> X<limit> X<CPU>
-
-=item How do I avoid zombies on a Unix system?
-
-=item How do I use an SQL database?
-
-=item How do I make a system() exit on control-C?
-
-=item How do I open a file without blocking?
-
-=item How do I tell the difference between errors from the shell and perl?
-
-=item How do I install a module from CPAN?
-
-=item What's the difference between require and use?
-
-=item How do I keep my own module/library directory?
-
-=item How do I add the directory my program lives in to the module/library
-search path?
-
-=item How do I add a directory to my include path (@INC) at runtime?
-
-the PERLLIB environment variable, the PERL5LIB environment variable, the
-perl -Idir command line flag, the use lib pragma:
-
-=item What is socket.ph and where do I get it?
-
-=back
-
-=item REVISION
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlfaq9 - Networking
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item What is the correct form of response from a CGI script?
-
-=item My CGI script runs from the command line but not the browser. (500
-Server Error)
-
-=item How can I get better error messages from a CGI program?
-
-=item How do I remove HTML from a string?
-
-=item How do I extract URLs?
-
-=item How do I download a file from the user's machine? How do I open a
-file on another machine?
-
-=item How do I make an HTML pop-up menu with Perl?
-
-=item How do I fetch an HTML file?
-
-=item How do I automate an HTML form submission?
-
-=item How do I decode or create those %-encodings on the web?
-
-=item How do I redirect to another page?
-
-=item How do I put a password on my web pages?
-
-=item How do I edit my .htpasswd and .htgroup files with Perl?
-
-=item How do I make sure users can't enter values into a form that cause my
-CGI script to do bad things?
-
-=item How do I parse a mail header?
-
-=item How do I decode a CGI form?
-
-=item How do I check a valid mail address?
-
-=item How do I decode a MIME/BASE64 string?
-
-=item How do I return the user's mail address?
-
-=item How do I send mail?
-
-=item How do I use MIME to make an attachment to a mail message?
-
-=item How do I read mail?
-
-=item How do I find out my hostname, domainname, or IP address?
-X<hostname, domainname, IP address, host, domain, hostfqdn, inet_ntoa,
-gethostbyname, Socket, Net::Domain, Sys::Hostname>
-
-=item How do I fetch a news article or the active newsgroups?
-
-=item How do I fetch/put an FTP file?
-
-=item How can I do RPC in Perl?
-
-=back
-
-=item REVISION
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlsyn - Perl syntax
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Declarations
-X<declaration> X<undef> X<undefined> X<uninitialized>
-
-=item Comments
-X<comment> X<#>
-
-=item Simple Statements
-X<statement> X<semicolon> X<expression> X<;>
-
-=item Truth and Falsehood
-X<truth> X<falsehood> X<true> X<false> X<!> X<not> X<negation> X<0>
-
-=item Statement Modifiers
-X<statement modifier> X<modifier> X<if> X<unless> X<while>
-X<until> X<foreach> X<for>
-
-=item Compound Statements
-X<statement, compound> X<block> X<bracket, curly> X<curly bracket> X<brace>
-X<{> X<}> X<if> X<unless> X<while> X<until> X<foreach> X<for> X<continue>
-
-=item Loop Control
-X<loop control> X<loop, control> X<next> X<last> X<redo> X<continue>
-
-=item For Loops
-X<for> X<foreach>
-
-=item Foreach Loops
-X<for> X<foreach>
-
-=item Basic BLOCKs
-X<block>
-
-=item Switch statements
-X<switch> X<case> X<given> X<when> X<default>
-
-o, o, o, o, o, o, o
-
-=item Goto
-X<goto>
-
-=item PODs: Embedded Documentation
-X<POD> X<documentation>
-
-=item Plain Old Comments (Not!)
-X<comment> X<line> X<#> X<preprocessor> X<eval>
-
-=back
-
-=back
-
-=head2 perldata - Perl data types
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Variable names
-X<variable, name> X<variable name> X<data type> X<type>
-
-=item Context
-X<context> X<scalar context> X<list context>
-
-=item Scalar values
-X<scalar> X<number> X<string> X<reference>
-
-=item Scalar value constructors
-X<scalar, literal> X<scalar, constant>
-
-=item List value constructors
-X<list>
-
-=item Subscripts
-
-=item Slices
-X<slice> X<array, slice> X<hash, slice>
-
-=item Typeglobs and Filehandles
-X<typeglob> X<filehandle> X<*>
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 perlop - Perl operators and precedence
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Operator Precedence and Associativity
-X<operator, precedence> X<precedence> X<associativity>
-
-=item Terms and List Operators (Leftward)
-X<list operator> X<operator, list> X<term>
-
-=item The Arrow Operator
-X<arrow> X<dereference> X<< -> >>
-
-=item Auto-increment and Auto-decrement
-X<increment> X<auto-increment> X<++> X<decrement> X<auto-decrement> X<-->
-
-=item Exponentiation
-X<**> X<exponentiation> X<power>
-
-=item Symbolic Unary Operators
-X<unary operator> X<operator, unary>
-
-=item Binding Operators
-X<binding> X<operator, binding> X<=~> X<!~>
-
-=item Multiplicative Operators
-X<operator, multiplicative>
-
-=item Additive Operators
-X<operator, additive>
-
-=item Shift Operators
-X<shift operator> X<operator, shift> X<<< << >>>
-X<<< >> >>> X<right shift> X<left shift> X<bitwise shift>
-X<shl> X<shr> X<shift, right> X<shift, left>
-
-=item Named Unary Operators
-X<operator, named unary>
-
-=item Relational Operators
-X<relational operator> X<operator, relational>
-
-=item Equality Operators
-X<equality> X<equal> X<equals> X<operator, equality>
-
-=item Bitwise And
-X<operator, bitwise, and> X<bitwise and> X<&>
-
-=item Bitwise Or and Exclusive Or
-X<operator, bitwise, or> X<bitwise or> X<|> X<operator, bitwise, xor>
-X<bitwise xor> X<^>
-
-=item C-style Logical And
-X<&&> X<logical and> X<operator, logical, and>
-
-=item C-style Logical Or
-X<||> X<operator, logical, or>
-
-=item C-style Logical Defined-Or
-X<//> X<operator, logical, defined-or>
-
-=item Range Operators
-X<operator, range> X<range> X<..> X<...>
-
-=item Conditional Operator
-X<operator, conditional> X<operator, ternary> X<ternary> X<?:>
-
-=item Assignment Operators
-X<assignment> X<operator, assignment> X<=> X<**=> X<+=> X<*=> X<&=>
-X<<< <<= >>> X<&&=> X<-=> X</=> X<|=> X<<< >>= >>> X<||=> X<//=> X<.=>
-X<%=> X<^=> X<x=>
-
-=item Comma Operator
-X<comma> X<operator, comma> X<,>
-
-=item List Operators (Rightward)
-X<operator, list, rightward> X<list operator>
-
-=item Logical Not
-X<operator, logical, not> X<not>
-
-=item Logical And
-X<operator, logical, and> X<and>
-
-=item Logical or, Defined or, and Exclusive Or
-X<operator, logical, or> X<operator, logical, xor>
-X<operator, logical, defined or> X<operator, logical, exclusive or>
-X<or> X<xor>
-
-=item C Operators Missing From Perl
-X<operator, missing from perl> X<&> X<*>
-X<typecasting> X<(TYPE)>
-
-unary &, unary *, (TYPE)
-
-=item Quote and Quote-like Operators
-X<operator, quote> X<operator, quote-like> X<q> X<qq> X<qx> X<qw> X<m>
-X<qr> X<s> X<tr> X<'> X<''> X<"> X<""> X<//> X<`> X<``> X<<< << >>>
-X<escape sequence> X<escape>
-
-=item Regexp Quote-Like Operators
-X<operator, regexp>
-
-qr/STRING/msixpo X<qr> X</i> X</m> X</o> X</s> X</x> X</p>,
-m/PATTERN/msixpogc X<m> X<operator, match> X<regexp, options> X<regexp>
-X<regex, options> X<regex> X</m> X</s> X</i> X</x> X</p> X</o> X</g> X</c>,
-/PATTERN/msixpogc, ?PATTERN? X<?>, s/PATTERN/REPLACEMENT/msixpogce
-X<substitute> X<substitution> X<replace> X<regexp, replace> X<regexp,
-substitute> X</m> X</s> X</i> X</x> X</p> X</o> X</g> X</c> X</e>
-
-=item Quote-Like Operators
-X<operator, quote-like>
-
-q/STRING/ X<q> X<quote, single> X<'> X<''>, 'STRING', qq/STRING/ X<qq>
-X<quote, double> X<"> X<"">, "STRING", qx/STRING/ X<qx> X<`> X<``>
-X<backtick>, `STRING`, qw/STRING/ X<qw> X<quote, list> X<quote, words>,
-tr/SEARCHLIST/REPLACEMENTLIST/cds X<tr> X<y> X<transliterate> X</c> X</d>
-X</s>, y/SEARCHLIST/REPLACEMENTLIST/cds, <<EOF X<here-doc> X<heredoc>
-X<here-document> X<<< << >>>, Double Quotes, Single Quotes, Backticks
-
-=item Gory details of parsing quoted constructs
-X<quote, gory details>
-
-Finding the end, Interpolation X<interpolation>, C<<<'EOF'>, C<m''>, the
-pattern of C<s'''>, C<''>, C<q//>, C<tr'''>, C<y'''>, the replacement of
-C<s'''>, C<tr///>, C<y///>, C<"">, C<``>, C<qq//>, C<qx//>, C<< <file*glob>
->>, C<<<"EOF">, the replacement of C<s///>, C<RE> in C<?RE?>, C</RE/>,
-C<m/RE/>, C<s/RE/foo/>,, parsing regular expressions X<regexp, parse>,
-Optimization of regular expressions X<regexp, optimization>
-
-=item I/O Operators
-X<operator, i/o> X<operator, io> X<io> X<while> X<filehandle>
-X<< <> >> X<@ARGV>
-
-=item Constant Folding
-X<constant folding> X<folding>
-
-=item No-ops
-X<no-op> X<nop>
-
-=item Bitwise String Operators
-X<operator, bitwise, string>
-
-=item Integer Arithmetic
-X<integer>
-
-=item Floating-point Arithmetic
-X<floating-point> X<floating point> X<float> X<real>
-
-=item Bigger Numbers
-X<number, arbitrary precision>
-
-=back
-
-=back
-
-=head2 perlsub - Perl subroutines
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Private Variables via my()
-X<my> X<variable, lexical> X<lexical> X<lexical variable> X<scope, lexical>
-X<lexical scope> X<attributes, my>
-
-=item Persistent Private Variables
-X<state> X<state variable> X<static> X<variable, persistent> X<variable,
-static> X<closure>
-
-=item Temporary Values via local()
-X<local> X<scope, dynamic> X<dynamic scope> X<variable, local>
-X<variable, temporary>
-
-=item Lvalue subroutines
-X<lvalue> X<subroutine, lvalue>
-
-Lvalue subroutines are EXPERIMENTAL
-
-=item Passing Symbol Table Entries (typeglobs)
-X<typeglob> X<*>
-
-=item When to Still Use local()
-X<local> X<variable, local>
-
-=item Pass by Reference
-X<pass by reference> X<pass-by-reference> X<reference>
-
-=item Prototypes
-X<prototype> X<subroutine, prototype>
-
-=item Constant Functions
-X<constant>
-
-=item Overriding Built-in Functions
-X<built-in> X<override> X<CORE> X<CORE::GLOBAL>
-
-=item Autoloading
-X<autoloading> X<AUTOLOAD>
-
-=item Subroutine Attributes
-X<attribute> X<subroutine, attribute> X<attrs>
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 perlfunc - Perl builtin functions
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Perl Functions by Category
-X<function>
-
-Functions for SCALARs or strings X<scalar> X<string> X<character>, Regular
-expressions and pattern matching X<regular expression> X<regex> X<regexp>,
-Numeric functions X<numeric> X<number> X<trigonometric> X<trigonometry>,
-Functions for real @ARRAYs X<array>, Functions for list data X<list>,
-Functions for real %HASHes X<hash>, Input and output functions X<I/O>
-X<input> X<output> X<dbm>, Functions for fixed length data or records,
-Functions for filehandles, files, or directories X<file> X<filehandle>
-X<directory> X<pipe> X<link> X<symlink>, Keywords related to the control
-flow of your Perl program X<control flow>, Keywords related to switch,
-Keywords related to scoping, Miscellaneous functions, Functions for
-processes and process groups X<process> X<pid> X<process id>, Keywords
-related to perl modules X<module>, Keywords related to classes and
-object-orientation X<object> X<class> X<package>, Low-level socket
-functions X<socket> X<sock>, System V interprocess communication functions
-X<IPC> X<System V> X<semaphore> X<shared memory> X<memory> X<message>,
-Fetching user and group info X<user> X<group> X<password> X<uid> X<gid>
-X<passwd> X</etc/passwd>, Fetching network info X<network> X<protocol>
-X<host> X<hostname> X<IP> X<address> X<service>, Time-related functions
-X<time> X<date>, Functions new in perl5 X<perl5>, Functions obsoleted in
-perl5
-
-=item Portability
-X<portability> X<Unix> X<portable>
-
-=item Alphabetical Listing of Perl Functions
-
--I<X> FILEHANDLE
-X<-r>X<-w>X<-x>X<-o>X<-R>X<-W>X<-X>X<-O>X<-e>X<-z>X<-s>X<-f>X<-d>X<-l>X<-p>
-X<-S>X<-b>X<-c>X<-t>X<-u>X<-g>X<-k>X<-T>X<-B>X<-M>X<-A>X<-C>, -I<X> EXPR,
--I<X> DIRHANDLE, -I<X>, abs VALUE X<abs> X<absolute>, abs, accept
-NEWSOCKET,GENERICSOCKET X<accept>, alarm SECONDS X<alarm> X<SIGALRM>
-X<timer>, alarm, atan2 Y,X X<atan2> X<arctangent> X<tan> X<tangent>, bind
-SOCKET,NAME X<bind>, binmode FILEHANDLE, LAYER X<binmode> X<binary> X<text>
-X<DOS> X<Windows>, binmode FILEHANDLE, bless REF,CLASSNAME X<bless>, bless
-REF, break, caller EXPR X<caller> X<call stack> X<stack> X<stack trace>,
-caller, chdir EXPR X<chdir> X<cd> X<directory, change>, chdir FILEHANDLE,
-chdir DIRHANDLE, chdir, chmod LIST X<chmod> X<permission> X<mode>, chomp
-VARIABLE X<chomp> X<INPUT_RECORD_SEPARATOR> X<$/> X<newline> X<eol>, chomp(
-LIST ), chomp, chop VARIABLE X<chop>, chop( LIST ), chop, chown LIST
-X<chown> X<owner> X<user> X<group>, chr NUMBER X<chr> X<character> X<ASCII>
-X<Unicode>, chr, chroot FILENAME X<chroot> X<root>, chroot, close
-FILEHANDLE X<close>, close, closedir DIRHANDLE X<closedir>, connect
-SOCKET,NAME X<connect>, continue BLOCK X<continue>, continue, cos EXPR
-X<cos> X<cosine> X<acos> X<arccosine>, cos, crypt PLAINTEXT,SALT X<crypt>
-X<digest> X<hash> X<salt> X<plaintext> X<password> X<decrypt>
-X<cryptography> X<passwd> X<encrypt>, dbmclose HASH X<dbmclose>, dbmopen
-HASH,DBNAME,MASK X<dbmopen> X<dbm> X<ndbm> X<sdbm> X<gdbm>, defined EXPR
-X<defined> X<undef> X<undefined>, defined, delete EXPR X<delete>, die LIST
-X<die> X<throw> X<exception> X<raise> X<$@> X<abort>, do BLOCK X<do>
-X<block>, do SUBROUTINE(LIST) X<do>, do EXPR X<do>, dump LABEL X<dump>
-X<core> X<undump>, dump, each HASH X<each> X<hash, iterator>, eof
-FILEHANDLE X<eof> X<end of file> X<end-of-file>, eof (), eof, eval EXPR
-X<eval> X<try> X<catch> X<evaluate> X<parse> X<execute> X<error, handling>
-X<exception, handling>, eval BLOCK, eval, exec LIST X<exec> X<execute>,
-exec PROGRAM LIST, exists EXPR X<exists> X<autovivification>, exit EXPR
-X<exit> X<terminate> X<abort>, exit, exp EXPR X<exp> X<exponential>
-X<antilog> X<antilogarithm> X<e>, exp, fcntl FILEHANDLE,FUNCTION,SCALAR
-X<fcntl>, fileno FILEHANDLE X<fileno>, flock FILEHANDLE,OPERATION X<flock>
-X<lock> X<locking>, fork X<fork> X<child> X<parent>, format X<format>,
-formline PICTURE,LIST X<formline>, getc FILEHANDLE X<getc> X<getchar>
-X<character> X<file, read>, getc, getlogin X<getlogin> X<login>,
-getpeername SOCKET X<getpeername> X<peer>, getpgrp PID X<getpgrp> X<group>,
-getppid X<getppid> X<parent> X<pid>, getpriority WHICH,WHO X<getpriority>
-X<priority> X<nice>, getpwnam NAME X<getpwnam> X<getgrnam> X<gethostbyname>
-X<getnetbyname> X<getprotobyname> X<getpwuid> X<getgrgid> X<getservbyname>
-X<gethostbyaddr> X<getnetbyaddr> X<getprotobynumber> X<getservbyport>
-X<getpwent> X<getgrent> X<gethostent> X<getnetent> X<getprotoent>
-X<getservent> X<setpwent> X<setgrent> X<sethostent> X<setnetent>
-X<setprotoent> X<setservent> X<endpwent> X<endgrent> X<endhostent>
-X<endnetent> X<endprotoent> X<endservent>, getgrnam NAME, gethostbyname
-NAME, getnetbyname NAME, getprotobyname NAME, getpwuid UID, getgrgid GID,
-getservbyname NAME,PROTO, gethostbyaddr ADDR,ADDRTYPE, getnetbyaddr
-ADDR,ADDRTYPE, getprotobynumber NUMBER, getservbyport PORT,PROTO, getpwent,
-getgrent, gethostent, getnetent, getprotoent, getservent, setpwent,
-setgrent, sethostent STAYOPEN, setnetent STAYOPEN, setprotoent STAYOPEN,
-setservent STAYOPEN, endpwent, endgrent, endhostent, endnetent,
-endprotoent, endservent, getsockname SOCKET X<getsockname>, getsockopt
-SOCKET,LEVEL,OPTNAME X<getsockopt>, glob EXPR X<glob> X<wildcard>
-X<filename, expansion> X<expand>, glob, gmtime EXPR X<gmtime> X<UTC>
-X<Greenwich>, gmtime, goto LABEL X<goto> X<jump> X<jmp>, goto EXPR, goto
-&NAME, grep BLOCK LIST X<grep>, grep EXPR,LIST, hex EXPR X<hex>
-X<hexadecimal>, hex, import LIST X<import>, index STR,SUBSTR,POSITION
-X<index> X<indexOf> X<InStr>, index STR,SUBSTR, int EXPR X<int> X<integer>
-X<truncate> X<trunc> X<floor>, int, ioctl FILEHANDLE,FUNCTION,SCALAR
-X<ioctl>, join EXPR,LIST X<join>, keys HASH X<keys> X<key>, kill SIGNAL,
-LIST X<kill> X<signal>, last LABEL X<last> X<break>, last, lc EXPR X<lc>
-X<lowercase>, lc, lcfirst EXPR X<lcfirst> X<lowercase>, lcfirst, length
-EXPR X<length> X<size>, length, link OLDFILE,NEWFILE X<link>, listen
-SOCKET,QUEUESIZE X<listen>, local EXPR X<local>, localtime EXPR
-X<localtime> X<ctime>, localtime, lock THING X<lock>, log EXPR X<log>
-X<logarithm> X<e> X<ln> X<base>, log, lstat EXPR X<lstat>, lstat, m//, map
-BLOCK LIST X<map>, map EXPR,LIST, mkdir FILENAME,MASK X<mkdir> X<md>
-X<directory, create>, mkdir FILENAME, mkdir, msgctl ID,CMD,ARG X<msgctl>,
-msgget KEY,FLAGS X<msgget>, msgrcv ID,VAR,SIZE,TYPE,FLAGS X<msgrcv>, msgsnd
-ID,MSG,FLAGS X<msgsnd>, my EXPR X<my>, my TYPE EXPR, my EXPR : ATTRS, my
-TYPE EXPR : ATTRS, next LABEL X<next> X<continue>, next, no Module VERSION
-LIST X<no>, no Module VERSION, no Module LIST, no Module, no VERSION, oct
-EXPR X<oct> X<octal> X<hex> X<hexadecimal> X<binary> X<bin>, oct, open
-FILEHANDLE,EXPR X<open> X<pipe> X<file, open> X<fopen>, open
-FILEHANDLE,MODE,EXPR, open FILEHANDLE,MODE,EXPR,LIST, open
-FILEHANDLE,MODE,REFERENCE, open FILEHANDLE, opendir DIRHANDLE,EXPR
-X<opendir>, ord EXPR X<ord> X<encoding>, ord, our EXPR X<our> X<global>,
-our TYPE EXPR, our EXPR : ATTRS, our TYPE EXPR : ATTRS, pack TEMPLATE,LIST
-X<pack>, package NAMESPACE X<package> X<module> X<namespace>, package, pipe
-READHANDLE,WRITEHANDLE X<pipe>, pop ARRAY X<pop> X<stack>, pop, pos SCALAR
-X<pos> X<match, position>, pos, print FILEHANDLE LIST X<print>, print LIST,
-print, printf FILEHANDLE FORMAT, LIST X<printf>, printf FORMAT, LIST,
-prototype FUNCTION X<prototype>, push ARRAY,LIST X<push> X<stack>,
-q/STRING/, qq/STRING/, qr/STRING/, qx/STRING/, qw/STRING/, quotemeta EXPR
-X<quotemeta> X<metacharacter>, quotemeta, rand EXPR X<rand> X<random>,
-rand, read FILEHANDLE,SCALAR,LENGTH,OFFSET X<read> X<file, read>, read
-FILEHANDLE,SCALAR,LENGTH, readdir DIRHANDLE X<readdir>, readline EXPR,
-readline X<readline> X<gets> X<fgets>, readlink EXPR X<readlink>, readlink,
-readpipe EXPR, readpipe X<readpipe>, recv SOCKET,SCALAR,LENGTH,FLAGS
-X<recv>, redo LABEL X<redo>, redo, ref EXPR X<ref> X<reference>, ref,
-rename OLDNAME,NEWNAME X<rename> X<move> X<mv> X<ren>, require VERSION
-X<require>, require EXPR, require, reset EXPR X<reset>, reset, return EXPR
-X<return>, return, reverse LIST X<reverse> X<rev> X<invert>, rewinddir
-DIRHANDLE X<rewinddir>, rindex STR,SUBSTR,POSITION X<rindex>, rindex
-STR,SUBSTR, rmdir FILENAME X<rmdir> X<rd> X<directory, remove>, rmdir,
-s///, say FILEHANDLE LIST X<say>, say LIST, say, scalar EXPR X<scalar>
-X<context>, seek FILEHANDLE,POSITION,WHENCE X<seek> X<fseek> X<filehandle,
-position>, seekdir DIRHANDLE,POS X<seekdir>, select FILEHANDLE X<select>
-X<filehandle, default>, select, select RBITS,WBITS,EBITS,TIMEOUT X<select>,
-semctl ID,SEMNUM,CMD,ARG X<semctl>, semget KEY,NSEMS,FLAGS X<semget>, semop
-KEY,OPSTRING X<semop>, send SOCKET,MSG,FLAGS,TO X<send>, send
-SOCKET,MSG,FLAGS, setpgrp PID,PGRP X<setpgrp> X<group>, setpriority
-WHICH,WHO,PRIORITY X<setpriority> X<priority> X<nice> X<renice>, setsockopt
-SOCKET,LEVEL,OPTNAME,OPTVAL X<setsockopt>, shift ARRAY X<shift>, shift,
-shmctl ID,CMD,ARG X<shmctl>, shmget KEY,SIZE,FLAGS X<shmget>, shmread
-ID,VAR,POS,SIZE X<shmread> X<shmwrite>, shmwrite ID,STRING,POS,SIZE,
-shutdown SOCKET,HOW X<shutdown>, sin EXPR X<sin> X<sine> X<asin>
-X<arcsine>, sin, sleep EXPR X<sleep> X<pause>, sleep, socket
-SOCKET,DOMAIN,TYPE,PROTOCOL X<socket>, socketpair
-SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL X<socketpair>, sort SUBNAME LIST
-X<sort> X<qsort> X<quicksort> X<mergesort>, sort BLOCK LIST, sort LIST,
-splice ARRAY,OFFSET,LENGTH,LIST X<splice>, splice ARRAY,OFFSET,LENGTH,
-splice ARRAY,OFFSET, splice ARRAY, split /PATTERN/,EXPR,LIMIT X<split>,
-split /PATTERN/,EXPR, split /PATTERN/, split, sprintf FORMAT, LIST
-X<sprintf>, format parameter index, flags, vector flag, (minimum) width,
-precision, or maximum width X<precision>, size, order of arguments, sqrt
-EXPR X<sqrt> X<root> X<square root>, sqrt, srand EXPR X<srand> X<seed>
-X<randseed>, srand, stat FILEHANDLE X<stat> X<file, status> X<ctime>, stat
-EXPR, stat DIRHANDLE, stat, state EXPR X<state>, state TYPE EXPR, state
-EXPR : ATTRS, state TYPE EXPR : ATTRS, study SCALAR X<study>, study, sub
-NAME BLOCK X<sub>, sub NAME (PROTO) BLOCK, sub NAME : ATTRS BLOCK, sub NAME
-(PROTO) : ATTRS BLOCK, substr EXPR,OFFSET,LENGTH,REPLACEMENT X<substr>
-X<substring> X<mid> X<left> X<right>, substr EXPR,OFFSET,LENGTH, substr
-EXPR,OFFSET, symlink OLDFILE,NEWFILE X<symlink> X<link> X<symbolic link>
-X<link, symbolic>, syscall NUMBER, LIST X<syscall> X<system call>, sysopen
-FILEHANDLE,FILENAME,MODE X<sysopen>, sysopen
-FILEHANDLE,FILENAME,MODE,PERMS, sysread FILEHANDLE,SCALAR,LENGTH,OFFSET
-X<sysread>, sysread FILEHANDLE,SCALAR,LENGTH, sysseek
-FILEHANDLE,POSITION,WHENCE X<sysseek> X<lseek>, system LIST X<system>
-X<shell>, system PROGRAM LIST, syswrite FILEHANDLE,SCALAR,LENGTH,OFFSET
-X<syswrite>, syswrite FILEHANDLE,SCALAR,LENGTH, syswrite FILEHANDLE,SCALAR,
-tell FILEHANDLE X<tell>, tell, telldir DIRHANDLE X<telldir>, tie
-VARIABLE,CLASSNAME,LIST X<tie>, tied VARIABLE X<tied>, time X<time>
-X<epoch>, times X<times>, tr///, truncate FILEHANDLE,LENGTH X<truncate>,
-truncate EXPR,LENGTH, uc EXPR X<uc> X<uppercase> X<toupper>, uc, ucfirst
-EXPR X<ucfirst> X<uppercase>, ucfirst, umask EXPR X<umask>, umask, undef
-EXPR X<undef> X<undefine>, undef, unlink LIST X<unlink> X<delete> X<remove>
-X<rm> X<del>, unlink, unpack TEMPLATE,EXPR X<unpack>, unpack TEMPLATE,
-untie VARIABLE X<untie>, unshift ARRAY,LIST X<unshift>, use Module VERSION
-LIST X<use> X<module> X<import>, use Module VERSION, use Module LIST, use
-Module, use VERSION, utime LIST X<utime>, values HASH X<values>, vec
-EXPR,OFFSET,BITS X<vec> X<bit> X<bit vector>, wait X<wait>, waitpid
-PID,FLAGS X<waitpid>, wantarray X<wantarray> X<context>, warn LIST X<warn>
-X<warning> X<STDERR>, write FILEHANDLE X<write>, write EXPR, write, y///
-
-=back
-
-=back
-
-=head2 perlopentut - tutorial on opening things in Perl
-
-=over 4
-
-=item DESCRIPTION
-
-=item Open E<agrave> la shell
-
-=over 4
-
-=item Simple Opens
-
-=item Indirect Filehandles
-
-=item Pipe Opens
-
-=item The Minus File
-
-=item Mixing Reads and Writes
-
-=item Filters
-
-=back
-
-=item Open E<agrave> la C
-
-=over 4
-
-=item Permissions E<agrave> la mode
-
-=back
-
-=item Obscure Open Tricks
-
-=over 4
-
-=item Re-Opening Files (dups)
-
-=item Dispelling the Dweomer
-
-=item Paths as Opens
-
-=item Single Argument Open
-
-=item Playing with STDIN and STDOUT
-
-=back
-
-=item Other I/O Issues
-
-=over 4
-
-=item Opening Non-File Files
-
-=item Opening Named Pipes
-
-=item Opening Sockets
-
-=item Binary Files
-
-=item File Locking
-
-=item IO Layers
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR and COPYRIGHT
-
-=item HISTORY
-
-=back
-
-=head2 perlpacktut - tutorial on C<pack> and C<unpack>
-
-=over 4
-
-=item DESCRIPTION
-
-=item The Basic Principle
-
-=item Packing Text
-
-=item Packing Numbers
-
-=over 4
-
-=item Integers
-
-=item Unpacking a Stack Frame
-
-=item How to Eat an Egg on a Net
-
-=item Byte-order modifiers
-
-=item Floating point Numbers
-
-=back
-
-=item Exotic Templates
-
-=over 4
-
-=item Bit Strings
-
-=item Uuencoding
-
-=item Doing Sums
-
-=item Unicode
-
-=item Another Portable Binary Encoding
-
-=back
-
-=item Template Grouping
-
-=item Lengths and Widths
-
-=over 4
-
-=item String Lengths
-
-=item Dynamic Templates
-
-=item Counting Repetitions
-
-=back
-
-=item Packing and Unpacking C Structures
-
-=over 4
-
-=item The Alignment Pit
-
-=item Dealing with Endian-ness
-
-=item Alignment, Take 2
-
-=item Alignment, Take 3
-
-=item Pointers for How to Use Them
-
-=back
-
-=item Pack Recipes
-
-=item Funnies Section
-
-=item Authors
-
-=back
-
-=head2 perlpod - the Plain Old Documentation format
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Ordinary Paragraph
-X<POD, ordinary paragraph>
-
-=item Verbatim Paragraph
-X<POD, verbatim paragraph> X<verbatim>
-
-=item Command Paragraph
-X<POD, command>
-
-C<=head1 I<Heading Text>> X<=head1> X<=head2> X<=head3> X<=head4> X<head1>
-X<head2> X<head3> X<head4>, C<=head2 I<Heading Text>>, C<=head3 I<Heading
-Text>>, C<=head4 I<Heading Text>>, C<=over I<indentlevel>> X<=over>
-X<=item> X<=back> X<over> X<item> X<back>, C<=item I<stuff...>>, C<=back>,
-C<=cut> X<=cut> X<cut>, C<=pod> X<=pod> X<pod>, C<=begin I<formatname>>
-X<=begin> X<=end> X<=for> X<begin> X<end> X<for>, C<=end I<formatname>>,
-C<=for I<formatname> I<text...>>, C<=encoding I<encodingname>> X<=encoding>
-X<encoding>
-
-=item Formatting Codes
-X<POD, formatting code> X<formatting code>
-X<POD, interior sequence> X<interior sequence>
-
-C<IE<lt>textE<gt>> -- italic text X<I> X<< IZ<><> >> X<POD, formatting
-code, italic> X<italic>, C<BE<lt>textE<gt>> -- bold text X<B> X<< BZ<><> >>
-X<POD, formatting code, bold> X<bold>, C<CE<lt>codeE<gt>> -- code text X<C>
-X<< CZ<><> >> X<POD, formatting code, code> X<code>, C<LE<lt>nameE<gt>> --
-a hyperlink X<L> X<< LZ<><> >> X<POD, formatting code, hyperlink>
-X<hyperlink>, C<EE<lt>escapeE<gt>> -- a character escape X<E> X<< EZ<><> >>
-X<POD, formatting code, escape> X<escape>, C<FE<lt>filenameE<gt>> -- used
-for filenames X<F> X<< FZ<><> >> X<POD, formatting code, filename>
-X<filename>, C<SE<lt>textE<gt>> -- text contains non-breaking spaces X<S>
-X<< SZ<><> >> X<POD, formatting code, non-breaking space> X<non-breaking
-space>, C<XE<lt>topic nameE<gt>> -- an index entry X<X> X<< XZ<><> >>
-X<POD, formatting code, index entry> X<index entry>, C<ZE<lt>E<gt>> -- a
-null (zero-effect) formatting code X<Z> X<< ZZ<><> >> X<POD, formatting
-code, null> X<null>
-
-=item The Intent
-X<POD, intent of>
-
-=item Embedding Pods in Perl Modules
-X<POD, embedding>
-
-=item Hints for Writing Pod
-
-X<podchecker> X<POD, validating>
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 perlpodspec - Plain Old Documentation: format specification and
-notes
-
-=over 4
-
-=item DESCRIPTION
-
-=item Pod Definitions
-
-=item Pod Commands
-
-"=head1", "=head2", "=head3", "=head4", "=pod", "=cut", "=over", "=item",
-"=back", "=begin formatname", "=end formatname", "=for formatname text...",
-"=encoding encodingname"
-
-=item Pod Formatting Codes
-
-C<IE<lt>textE<gt>> -- italic text, C<BE<lt>textE<gt>> -- bold text,
-C<CE<lt>codeE<gt>> -- code text, C<FE<lt>filenameE<gt>> -- style for
-filenames, C<XE<lt>topic nameE<gt>> -- an index entry, C<ZE<lt>E<gt>> -- a
-null (zero-effect) formatting code, C<LE<lt>nameE<gt>> -- a hyperlink,
-C<EE<lt>escapeE<gt>> -- a character escape, C<SE<lt>textE<gt>> -- text
-contains non-breaking spaces
-
-=item Notes on Implementing Pod Processors
-
-=item About LE<lt>...E<gt> Codes
-
-First:, Second:, Third:, Fourth:, Fifth:, Sixth:
-
-=item About =over...=back Regions
-
-=item About Data Paragraphs and "=begin/=end" Regions
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 perlrun - how to execute the Perl interpreter
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item #! and quoting on non-Unix systems
-X<hashbang> X<#!>
-
-OS/2, MS-DOS, Win95/NT, Macintosh, VMS
-
-=item Location of Perl
-X<perl, location of interpreter>
-
-=item Command Switches
-X<perl, command switches> X<command switches>
-
-B<-0>[I<octal/hexadecimal>] X<-0> X<$/>, B<-a> X<-a> X<autosplit>, B<-C
-[I<number/list>]> X<-C>, B<-c> X<-c>, B<-d> X<-d> X<-dt>, B<-dt>,
-B<-d:>I<foo[=bar,baz]> X<-d> X<-dt>, B<-dt:>I<foo[=bar,baz]>,
-B<-D>I<letters> X<-D> X<DEBUGGING> X<-DDEBUGGING>, B<-D>I<number>, B<-e>
-I<commandline> X<-e>, B<-E> I<commandline> X<-E>, B<-f> X<-f>,
-B<-F>I<pattern> X<-F>, B<-h> X<-h>, B<-i>[I<extension>] X<-i> X<in-place>,
-B<-I>I<directory> X<-I> X<@INC>, B<-l>[I<octnum>] X<-l> X<$/> X<$\>,
-B<-m>[B<->]I<module> X<-m> X<-M>, B<-M>[B<->]I<module>,
-B<-M>[B<->]I<'module ...'>, B<-[mM]>[B<->]I<module=arg[,arg]...>, B<-n>
-X<-n>, B<-p> X<-p>, B<-P> X<-P>, B<-s> X<-s>, B<-S> X<-S>, B<-t> X<-t>,
-B<-T> X<-T>, B<-u> X<-u>, B<-U> X<-U>, B<-v> X<-v>, B<-V> X<-V>,
-B<-V:>I<configvar>, B<-w> X<-w>, B<-W> X<-W>, B<-X> X<-X>, B<-x> X<-x>,
-B<-x>I<directory>
-
-=back
-
-=item ENVIRONMENT
-X<perl, environment variables>
-
-HOME X<HOME>, LOGDIR X<LOGDIR>, PATH X<PATH>, PERL5LIB X<PERL5LIB>,
-PERL5OPT X<PERL5OPT>, PERLIO X<PERLIO>, :bytes X<:bytes>, :crlf X<:crlf>,
-:mmap X<:mmap>, :perlio X<:perlio>, :pop X<:pop>, :raw X<:raw>, :stdio
-X<:stdio>, :unix X<:unix>, :utf8 X<:utf8>, :win32 X<:win32>, PERLIO_DEBUG
-X<PERLIO_DEBUG>, PERLLIB X<PERLLIB>, PERL5DB X<PERL5DB>, PERL5DB_THREADED
-X<PERL5DB_THREADED>, PERL5SHELL (specific to the Win32 port) X<PERL5SHELL>,
-PERL_ALLOW_NON_IFS_LSP (specific to the Win32 port)
-X<PERL_ALLOW_NON_IFS_LSP>, PERL_DEBUG_MSTATS X<PERL_DEBUG_MSTATS>,
-PERL_DESTRUCT_LEVEL X<PERL_DESTRUCT_LEVEL>, PERL_DL_NONLAZY
-X<PERL_DL_NONLAZY>, PERL_ENCODING X<PERL_ENCODING>, PERL_HASH_SEED
-X<PERL_HASH_SEED>, PERL_HASH_SEED_DEBUG X<PERL_HASH_SEED_DEBUG>, PERL_ROOT
-(specific to the VMS port) X<PERL_ROOT>, PERL_SIGNALS X<PERL_SIGNALS>,
-PERL_UNICODE X<PERL_UNICODE>, SYS$LOGIN (specific to the VMS port)
-X<SYS$LOGIN>
-
-=back
-
-=head2 perldiag - various Perl diagnostics
-
-=over 4
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=back
-
-=head2 perllexwarn - Perl Lexical Warnings
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Default Warnings and Optional Warnings
-
-=item What's wrong with B<-w> and C<$^W>
-
-=item Controlling Warnings from the Command Line
-
-B<-w> X<-w>, B<-W> X<-W>, B<-X> X<-X>
-
-=item Backward Compatibility
-
-=item Category Hierarchy
-X<warning, categories>
-
-=item Fatal Warnings
-X<warning, fatal>
-
-=item Reporting Warnings from a Module
-X<warning, reporting> X<warning, registering>
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 perldebug - Perl debugging
-
-=over 4
-
-=item DESCRIPTION
-
-=item The Perl Debugger
-
-=over 4
-
-=item Calling the debugger
-
-perl -d program_name, perl -d -e 0, perl -d:Ptkdb program_name, perl -dt
-threaded_program_name
-
-=item Debugger Commands
-
-h X<debugger command, h>, h [command], h h, p expr X<debugger command, p>,
-x [maxdepth] expr X<debugger command, x>, V [pkg [vars]] X<debugger
-command, V>, X [vars] X<debugger command, X>, y [level [vars]] X<debugger
-command, y>, T X<debugger command, T> X<backtrace> X<stack, backtrace>, s
-[expr] X<debugger command, s> X<step>, n [expr] X<debugger command, n>, r
-X<debugger command, r>, <CR>, c [line|sub] X<debugger command, c>, l
-X<debugger command, l>, l min+incr, l min-max, l line, l subname, -
-X<debugger command, ->, v [line] X<debugger command, v>, . X<debugger
-command, .>, f filename X<debugger command, f>, /pattern/, ?pattern?, L
-[abw] X<debugger command, L>, S [[!]regex] X<debugger command, S>, t
-X<debugger command, t>, t expr X<debugger command, t>, b X<breakpoint>
-X<debugger command, b>, b [line] [condition] X<breakpoint> X<debugger
-command, b>, b subname [condition] X<breakpoint> X<debugger command, b>, b
-postpone subname [condition] X<breakpoint> X<debugger command, b>, b load
-filename X<breakpoint> X<debugger command, b>, b compile subname
-X<breakpoint> X<debugger command, b>, B line X<breakpoint> X<debugger
-command, B>, B * X<breakpoint> X<debugger command, B>, a [line] command
-X<debugger command, a>, A line X<debugger command, A>, A * X<debugger
-command, A>, w expr X<debugger command, w>, W expr X<debugger command, W>,
-W * X<debugger command, W>, o X<debugger command, o>, o booloption ...
-X<debugger command, o>, o anyoption? ... X<debugger command, o>, o
-option=value ... X<debugger command, o>, < ? X<< debugger command, < >>, <
-[ command ] X<< debugger command, < >>, < * X<< debugger command, < >>, <<
-command X<< debugger command, << >>, > ? X<< debugger command, > >>, >
-command X<< debugger command, > >>, > * X<< debugger command, > >>, >>
-command X<<< debugger command, >> >>>, { ? X<debugger command, {>, { [
-command ], { * X<debugger command, {>, {{ command X<debugger command, {{>,
-! number X<debugger command, !>, ! -number X<debugger command, !>, !
-pattern X<debugger command, !>, !! cmd X<debugger command, !!>, source file
-X<debugger command, source>, H -number X<debugger command, H>, q or ^D
-X<debugger command, q> X<debugger command, ^D>, R X<debugger command, R>,
-|dbcmd X<debugger command, |>, ||dbcmd X<debugger command, ||>, command, m
-expr X<debugger command, m>, M X<debugger command, M>, man [manpage]
-X<debugger command, man>
-
-=item Configurable Options
-
-C<recallCommand>, C<ShellBang> X<debugger option, recallCommand> X<debugger
-option, ShellBang>, C<pager> X<debugger option, pager>, C<tkRunning>
-X<debugger option, tkRunning>, C<signalLevel>, C<warnLevel>, C<dieLevel>
-X<debugger option, signalLevel> X<debugger option, warnLevel> X<debugger
-option, dieLevel>, C<AutoTrace> X<debugger option, AutoTrace>, C<LineInfo>
-X<debugger option, LineInfo>, C<inhibit_exit> X<debugger option,
-inhibit_exit>, C<PrintRet> X<debugger option, PrintRet>, C<ornaments>
-X<debugger option, ornaments>, C<frame> X<debugger option, frame>,
-C<maxTraceLen> X<debugger option, maxTraceLen>, C<windowSize> X<debugger
-option, windowSize>, C<arrayDepth>, C<hashDepth> X<debugger option,
-arrayDepth> X<debugger option, hashDepth>, C<dumpDepth> X<debugger option,
-dumpDepth>, C<compactDump>, C<veryCompact> X<debugger option, compactDump>
-X<debugger option, veryCompact>, C<globPrint> X<debugger option,
-globPrint>, C<DumpDBFiles> X<debugger option, DumpDBFiles>, C<DumpPackages>
-X<debugger option, DumpPackages>, C<DumpReused> X<debugger option,
-DumpReused>, C<quote>, C<HighBit>, C<undefPrint> X<debugger option, quote>
-X<debugger option, HighBit> X<debugger option, undefPrint>, C<UsageOnly>
-X<debugger option, UsageOnly>, C<TTY> X<debugger option, TTY>, C<noTTY>
-X<debugger option, noTTY>, C<ReadLine> X<debugger option, ReadLine>,
-C<NonStop> X<debugger option, NonStop>
-
-=item Debugger input/output
-
-Prompt, Multiline commands, Stack backtrace X<backtrace> X<stack,
-backtrace>, Line Listing Format, Frame listing
-
-=item Debugging compile-time statements
-
-=item Debugger Customization
-
-=item Readline Support
-
-=item Editor Support for Debugging
-
-=item The Perl Profiler
-X<profile> X<profiling> X<profiler>
-
-=back
-
-=item Debugging regular expressions
-X<regular expression, debugging>
-X<regex, debugging> X<regexp, debugging>
-
-=item Debugging memory usage
-X<memory usage>
-
-=item SEE ALSO
-
-=item BUGS
-
-=back
-
-=head2 perlvar - Perl predefined variables
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Predefined Names
-
-$ARG, $_ X<$_> X<$ARG>, $a, $b X<$a> X<$b>, $<I<digits>> X<$1> X<$2> X<$3>,
-$MATCH, $& X<$&> X<$MATCH>, ${^MATCH} X<${^MATCH}>, $PREMATCH, $` X<$`>
-X<$PREMATCH>, ${^PREMATCH} X<${^PREMATCH}>, $POSTMATCH, $' X<$'>
-X<$POSTMATCH>, ${^POSTMATCH} X<${^POSTMATCH}>, $LAST_PAREN_MATCH, $+ X<$+>
-X<$LAST_PAREN_MATCH>, $LAST_SUBMATCH_RESULT, $^N X<$^N>, @LAST_MATCH_END,
- at + X<@+> X<@LAST_MATCH_END>, %+ X<%+>, HANDLE->input_line_number(EXPR),
-$INPUT_LINE_NUMBER, $NR, $. X<$.> X<$NR> X<$INPUT_LINE_NUMBER> X<line
-number>, IO::Handle->input_record_separator(EXPR), $INPUT_RECORD_SEPARATOR,
-$RS, $/ X<$/> X<$RS> X<$INPUT_RECORD_SEPARATOR>, HANDLE->autoflush(EXPR),
-$OUTPUT_AUTOFLUSH, $| X<$|> X<autoflush> X<flush> X<$OUTPUT_AUTOFLUSH>,
-IO::Handle->output_field_separator EXPR, $OUTPUT_FIELD_SEPARATOR, $OFS, $,
-X<$,> X<$OFS> X<$OUTPUT_FIELD_SEPARATOR>,
-IO::Handle->output_record_separator EXPR, $OUTPUT_RECORD_SEPARATOR, $ORS,
-$\ X<$\> X<$ORS> X<$OUTPUT_RECORD_SEPARATOR>, $LIST_SEPARATOR, $" X<$">
-X<$LIST_SEPARATOR>, $SUBSCRIPT_SEPARATOR, $SUBSEP, $; X<$;> X<$SUBSEP>
-X<SUBSCRIPT_SEPARATOR>, HANDLE->format_page_number(EXPR),
-$FORMAT_PAGE_NUMBER, $% X<$%> X<$FORMAT_PAGE_NUMBER>,
-HANDLE->format_lines_per_page(EXPR), $FORMAT_LINES_PER_PAGE, $= X<$=>
-X<$FORMAT_LINES_PER_PAGE>, HANDLE->format_lines_left(EXPR),
-$FORMAT_LINES_LEFT, $- X<$-> X<$FORMAT_LINES_LEFT>, @LAST_MATCH_START, @-
-X<@-> X<@LAST_MATCH_START>, C<$`> is the same as C<substr($var, 0, $-[0])>,
-C<$&> is the same as C<substr($var, $-[0], $+[0] - $-[0])>, C<$'> is the
-same as C<substr($var, $+[0])>, C<$1> is the same as C<substr($var, $-[1],
-$+[1] - $-[1])>, C<$2> is the same as C<substr($var, $-[2], $+[2] -
-$-[2])>, C<$3> is the same as C<substr($var, $-[3], $+[3] - $-[3])>, %-
-X<%->, HANDLE->format_name(EXPR), $FORMAT_NAME, $~ X<$~> X<$FORMAT_NAME>,
-HANDLE->format_top_name(EXPR), $FORMAT_TOP_NAME, $^ X<$^>
-X<$FORMAT_TOP_NAME>, IO::Handle->format_line_break_characters EXPR,
-$FORMAT_LINE_BREAK_CHARACTERS, $: X<$:> X<FORMAT_LINE_BREAK_CHARACTERS>,
-IO::Handle->format_formfeed EXPR, $FORMAT_FORMFEED, $^L X<$^L>
-X<$FORMAT_FORMFEED>, $ACCUMULATOR, $^A X<$^A> X<$ACCUMULATOR>,
-$CHILD_ERROR, $? X<$?> X<$CHILD_ERROR>, ${^CHILD_ERROR_NATIVE}
-X<$^CHILD_ERROR_NATIVE>, ${^ENCODING} X<$^ENCODING>, $OS_ERROR, $ERRNO, $!
-X<$!> X<$ERRNO> X<$OS_ERROR>, %OS_ERROR, %ERRNO, %! X<%!>,
-$EXTENDED_OS_ERROR, $^E X<$^E> X<$EXTENDED_OS_ERROR>, $EVAL_ERROR, $@ X<$@>
-X<$EVAL_ERROR>, $PROCESS_ID, $PID, $$ X<$$> X<$PID> X<$PROCESS_ID>,
-$REAL_USER_ID, $UID, $< X<< $< >> X<$UID> X<$REAL_USER_ID>,
-$EFFECTIVE_USER_ID, $EUID, $> X<< $> >> X<$EUID> X<$EFFECTIVE_USER_ID>,
-$REAL_GROUP_ID, $GID, $( X<$(> X<$GID> X<$REAL_GROUP_ID>,
-$EFFECTIVE_GROUP_ID, $EGID, $) X<$)> X<$EGID> X<$EFFECTIVE_GROUP_ID>,
-$PROGRAM_NAME, $0 X<$0> X<$PROGRAM_NAME>, $[ X<$[>, $] X<$]>, $COMPILING,
-$^C X<$^C> X<$COMPILING>, $DEBUGGING, $^D X<$^D> X<$DEBUGGING>,
-${^RE_DEBUG_FLAGS}, ${^RE_TRIE_MAXBUF}, $SYSTEM_FD_MAX, $^F X<$^F>
-X<$SYSTEM_FD_MAX>, $^H, %^H, $INPLACE_EDIT, $^I X<$^I> X<$INPLACE_EDIT>,
-$^M X<$^M>, $OSNAME, $^O X<$^O> X<$OSNAME>, ${^OPEN}, $PERLDB, $^P X<$^P>
-X<$PERLDB>, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x100, 0x200,
-0x400, $LAST_REGEXP_CODE_RESULT, $^R X<$^R> X<$LAST_REGEXP_CODE_RESULT>,
-$EXCEPTIONS_BEING_CAUGHT, $^S X<$^S> X<$EXCEPTIONS_BEING_CAUGHT>,
-$BASETIME, $^T X<$^T> X<$BASETIME>, ${^TAINT}, ${^UNICODE}, ${^UTF8CACHE},
-${^UTF8LOCALE}, $PERL_VERSION, $^V X<$^V> X<$PERL_VERSION>, $WARNING, $^W
-X<$^W> X<$WARNING>, ${^WARNING_BITS}, ${^WIN32_SLOPPY_STAT},
-$EXECUTABLE_NAME, $^X X<$^X> X<$EXECUTABLE_NAME>, ARGV X<ARGV>, $ARGV
-X<$ARGV>, @ARGV X<@ARGV>, ARGVOUT X<ARGVOUT>, @F X<@F>, @INC X<@INC>, @ARG,
- at _ X<@_> X<@ARG>, %INC X<%INC>, %ENV, $ENV{expr} X<%ENV>, %SIG, $SIG{expr}
-X<%SIG>
-
-=item Error Indicators
-X<error> X<exception>
-
-=item Technical Note on the Syntax of Variable Names
-
-=back
-
-=item BUGS
-
-=back
-
-=head2 perlre - Perl regular expressions
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Modifiers
-
-m X</m> X<regex, multiline> X<regexp, multiline> X<regular expression,
-multiline>, s X</s> X<regex, single-line> X<regexp, single-line> X<regular
-expression, single-line>, i X</i> X<regex, case-insensitive> X<regexp,
-case-insensitive> X<regular expression, case-insensitive>, x X</x>, p X</p>
-X<regex, preserve> X<regexp, preserve>, g and c X</g> X</c>
-
-=item Regular Expressions
-
-[1], [2], [3], cntrl X<cntrl>, graph X<graph>, print X<print>, punct
-X<punct>, xdigit X<xdigit>
-
-=item Extended Patterns
-
-C<(?#text)> X<(?#)>, C<(?pimsx-imsx)> X<(?)>, C<(?:pattern)> X<(?:)>,
-C<(?imsx-imsx:pattern)>, C<(?|pattern)> X<(?|)> X<Branch reset>,
-Look-Around Assertions X<look-around assertion> X<lookaround assertion>
-X<look-around> X<lookaround>, C<(?=pattern)> X<(?=)> X<look-ahead,
-positive> X<lookahead, positive>, C<(?!pattern)> X<(?!)> X<look-ahead,
-negative> X<lookahead, negative>, C<(?<=pattern)> C<\K> X<(?<=)>
-X<look-behind, positive> X<lookbehind, positive> X<\K>, C<(?<!pattern)>
-X<(?<!)> X<look-behind, negative> X<lookbehind, negative>,
-C<(?'NAME'pattern)>, C<< (?<NAME>pattern) >> X<< (?<NAME>) >> X<(?'NAME')>
-X<named capture> X<capture>, C<< \k<NAME> >>, C<< \k'NAME' >>, C<(?{ code
-})> X<(?{})> X<regex, code in> X<regexp, code in> X<regular expression,
-code in>, C<(??{ code })> X<(??{})> X<regex, postponed> X<regexp,
-postponed> X<regular expression, postponed>, C<(?PARNO)> C<(?-PARNO)>
-C<(?+PARNO)> C<(?R)> C<(?0)> X<(?PARNO)> X<(?1)> X<(?R)> X<(?0)> X<(?-1)>
-X<(?+1)> X<(?-PARNO)> X<(?+PARNO)> X<regex, recursive> X<regexp, recursive>
-X<regular expression, recursive> X<regex, relative recursion>, C<(?&NAME)>
-X<(?&NAME)>, C<(?(condition)yes-pattern|no-pattern)> X<(?()>,
-C<(?(condition)yes-pattern)>, (1) (2) .., (<NAME>) ('NAME'), (?{ CODE }),
-(R), (R1) (R2) .., (R&NAME), (DEFINE), C<< (?>pattern) >> X<backtrack>
-X<backtracking> X<atomic> X<possessive>
-
-=item Special Backtracking Control Verbs
-
-Verbs that take an argument, C<(*PRUNE)> C<(*PRUNE:NAME)> X<(*PRUNE)>
-X<(*PRUNE:NAME)>, C<(*SKIP)> C<(*SKIP:NAME)> X<(*SKIP)>, C<(*MARK:NAME)>
-C<(*:NAME)> X<(*MARK)> C<(*MARK:NAME)> C<(*:NAME)>, C<(*THEN)>
-C<(*THEN:NAME)>, C<(*COMMIT)> X<(*COMMIT)>, Verbs without an argument,
-C<(*FAIL)> C<(*F)> X<(*FAIL)> X<(*F)>, C<(*ACCEPT)> X<(*ACCEPT)>
-
-=item Backtracking
-X<backtrack> X<backtracking>
-
-=item Version 8 Regular Expressions
-X<regular expression, version 8> X<regex, version 8> X<regexp, version 8>
-
-=item Warning on \1 Instead of $1
-
-=item Repeated Patterns Matching a Zero-length Substring
-
-=item Combining RE Pieces
-
-C<ST>, C<S|T>, C<S{REPEAT_COUNT}>, C<S{min,max}>, C<S{min,max}?>, C<S?>,
-C<S*>, C<S+>, C<S??>, C<S*?>, C<S+?>, C<< (?>S) >>, C<(?=S)>, C<(?<=S)>,
-C<(?!S)>, C<(?<!S)>, C<(??{ EXPR })>, C<(?PARNO)>,
-C<(?(condition)yes-pattern|no-pattern)>
-
-=item Creating Custom RE Engines
-
-=back
-
-=item PCRE/Python Support
-
-C<< (?PE<lt>NAMEE<gt>pattern) >>, C<< (?P=NAME) >>, C<< (?P>NAME) >>
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 perlrebackslash - Perl Regular Expression Backslash Sequences and
-Escapes
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item The backslash
-
-[1]
-
-=item All the sequences and escapes
-
-=item Character Escapes
-
-[1], [2]
-
-=item Modifiers
-
-=item Character classes
-
-=item Referencing
-
-=item Assertions
-
-\A, \z, \Z, \G, \b, \B
-
-=item Misc
-
-\C, \K, \R, \X
-
-=back
-
-=back
-
-=head2 perlrecharclass - Perl Regular Expression Character Classes
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item The dot
-
-=item Backslashed sequences
-
-[1]
-
-=item Bracketed Character Classes
-
-cntrl, graph, print, punct
-
-=item Locale, Unicode and UTF-8
-
-=back
-
-=back
-
-=head2 perlreref - Perl Regular Expressions Reference
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item OPERATORS
-
-=item SYNTAX
-
-=item ESCAPE SEQUENCES
-
-=item CHARACTER CLASSES
-
-=item ANCHORS
-
-=item QUANTIFIERS
-
-=item EXTENDED CONSTRUCTS
-
-=item VARIABLES
-
-=item FUNCTIONS
-
-=item TERMINOLOGY
-
-=back
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=item THANKS
-
-=back
-
-=head2 perlref - Perl references and nested data structures
-
-=over 4
-
-=item NOTE
-
-=item DESCRIPTION
-
-=over 4
-
-=item Making References
-X<reference, creation> X<referencing>
-
-1. X<\> X<backslash>, 2. X<array, anonymous> X<[> X<[]> X<square bracket>
-X<bracket, square> X<arrayref> X<array reference> X<reference, array>, 3.
-X<hash, anonymous> X<{> X<{}> X<curly bracket> X<bracket, curly> X<brace>
-X<hashref> X<hash reference> X<reference, hash>, 4. X<subroutine,
-anonymous> X<subroutine, reference> X<reference, subroutine> X<scope,
-lexical> X<closure> X<lexical> X<lexical scope>, 5. X<constructor> X<new>,
-6. X<autovivification>, 7. X<*foo{THING}> X<*>
-
-=item Using References
-X<reference, use> X<dereferencing> X<dereference>
-
-=item Symbolic references
-X<reference, symbolic> X<reference, soft>
-X<symbolic reference> X<soft reference>
-
-=item Not-so-symbolic references
-
-=item Pseudo-hashes: Using an array as a hash
-X<pseudo-hash> X<pseudo hash> X<pseudohash>
-
-=item Function Templates
-X<scope, lexical> X<closure> X<lexical> X<lexical scope>
-X<subroutine, nested> X<sub, nested> X<subroutine, local> X<sub, local>
-
-=back
-
-=item WARNING
-X<reference, string context> X<reference, use as hash key>
-
-=item SEE ALSO
-
-=back
-
-=head2 perlform - Perl formats
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Text Fields
-X<format, text field>
-
-=item Numeric Fields
-X<#> X<format, numeric field>
-
-=item The Field @* for Variable Width Multi-Line Text
-X<@*>
-
-=item The Field ^* for Variable Width One-line-at-a-time Text
-X<^*>
-
-=item Specifying Values
-X<format, specifying values>
-
-=item Using Fill Mode
-X<format, fill mode>
-
-=item Suppressing Lines Where All Fields Are Void
-X<format, suppressing lines>
-
-=item Repeating Format Lines
-X<format, repeating lines>
-
-=item Top of Form Processing
-X<format, top of form> X<top> X<header>
-
-=item Format Variables
-X<format variables>
-X<format, variables>
-
-=back
-
-=item NOTES
-
-=over 4
-
-=item Footers
-X<format, footer> X<footer>
-
-=item Accessing Formatting Internals
-X<format, internals>
-
-=back
-
-=item WARNINGS
-
-=back
-
-=head2 perlobj - Perl objects
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item An Object is Simply a Reference
-X<object> X<bless> X<constructor> X<new>
-
-=item A Class is Simply a Package
-X<class> X<package> X<@ISA> X<inheritance>
-
-=item A Method is Simply a Subroutine
-X<method>
-
-=item Method Invocation
-X<invocation> X<method> X<arrow> X<< -> >>
-
-=item Indirect Object Syntax
-X<indirect object syntax> X<invocation, indirect> X<indirect>
-
-=item Default UNIVERSAL methods
-X<UNIVERSAL>
-
-isa(CLASS) X<isa>, can(METHOD) X<can>, VERSION( [NEED] ) X<VERSION>
-
-=item Destructors
-X<destructor> X<DESTROY>
-
-=item Summary
-
-=item Two-Phased Garbage Collection
-X<garbage collection> X<GC> X<circular reference>
-X<reference, circular> X<DESTROY> X<destructor>
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 perltie - how to hide an object class in a simple variable
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Tying Scalars
-X<scalar, tying>
-
-TIESCALAR classname, LIST X<TIESCALAR>, FETCH this X<FETCH>, STORE this,
-value X<STORE>, UNTIE this X<UNTIE>, DESTROY this X<DESTROY>
-
-=item Tying Arrays
-X<array, tying>
-
-TIEARRAY classname, LIST X<TIEARRAY>, FETCH this, index X<FETCH>, STORE
-this, index, value X<STORE>, FETCHSIZE this X<FETCHSIZE>, STORESIZE this,
-count X<STORESIZE>, EXTEND this, count X<EXTEND>, EXISTS this, key
-X<EXISTS>, DELETE this, key X<DELETE>, CLEAR this X<CLEAR>, PUSH this, LIST
- X<PUSH>, POP this X<POP>, SHIFT this X<SHIFT>, UNSHIFT this, LIST
-X<UNSHIFT>, SPLICE this, offset, length, LIST X<SPLICE>, UNTIE this
-X<UNTIE>, DESTROY this X<DESTROY>
-
-=item Tying Hashes
-X<hash, tying>
-
-USER, HOME, CLOBBER, LIST, TIEHASH classname, LIST X<TIEHASH>, FETCH this,
-key X<FETCH>, STORE this, key, value X<STORE>, DELETE this, key X<DELETE>,
-CLEAR this X<CLEAR>, EXISTS this, key X<EXISTS>, FIRSTKEY this X<FIRSTKEY>,
-NEXTKEY this, lastkey X<NEXTKEY>, SCALAR this X<SCALAR>, UNTIE this
-X<UNTIE>, DESTROY this X<DESTROY>
-
-=item Tying FileHandles
-X<filehandle, tying>
-
-TIEHANDLE classname, LIST X<TIEHANDLE>, WRITE this, LIST X<WRITE>, PRINT
-this, LIST X<PRINT>, PRINTF this, LIST X<PRINTF>, READ this, LIST X<READ>,
-READLINE this X<READLINE>, GETC this X<GETC>, CLOSE this X<CLOSE>, UNTIE
-this X<UNTIE>, DESTROY this X<DESTROY>
-
-=item UNTIE this
-X<UNTIE>
-
-=item The C<untie> Gotcha
-X<untie>
-
-=back
-
-=item SEE ALSO
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 perldbmfilter - Perl DBM Filters
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-B<filter_store_key>, B<filter_store_value>, B<filter_fetch_key>,
-B<filter_fetch_value>
-
-=over 4
-
-=item The Filter
-
-=item An Example -- the NULL termination problem.
-
-=item Another Example -- Key is a C int.
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 perlipc - Perl interprocess communication (signals, fifos, pipes,
-safe subprocesses, sockets, and semaphores)
-
-=over 4
-
-=item DESCRIPTION
-
-=item Signals
-
-=over 4
-
-=item Handling the SIGHUP Signal in Daemons
-
-=back
-
-=item Named Pipes
-
-=over 4
-
-=item Deferred Signals (Safe Signals)
-
-Long-running opcodes, Interrupting IO, Restartable system calls, Signals as
-"faults", Signals triggered by operating system state
-
-=back
-
-=item Using open() for IPC
-
-=over 4
-
-=item Filehandles
-
-=item Background Processes
-
-=item Complete Dissociation of Child from Parent
-
-=item Safe Pipe Opens
-
-=item Bidirectional Communication with Another Process
-
-=item Bidirectional Communication with Yourself
-
-=back
-
-=item Sockets: Client/Server Communication
-
-=over 4
-
-=item Internet Line Terminators
-
-=item Internet TCP Clients and Servers
-
-=item Unix-Domain TCP Clients and Servers
-
-=back
-
-=item TCP Clients with IO::Socket
-
-=over 4
-
-=item A Simple Client
-
-C<Proto>, C<PeerAddr>, C<PeerPort>
-
-=item A Webget Client
-
-=item Interactive Client with IO::Socket
-
-=back
-
-=item TCP Servers with IO::Socket
-
-Proto, LocalPort, Listen, Reuse
-
-=item UDP: Message Passing
-
-=item SysV IPC
-
-=item NOTES
-
-=item BUGS
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 perlfork - Perl's fork() emulation
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Behavior of other Perl features in forked pseudo-processes
-
-$$ or $PROCESS_ID, %ENV, chdir() and all other builtins that accept
-filenames, wait() and waitpid(), kill(), exec(), exit(), Open handles to
-files, directories and network sockets
-
-=item Resource limits
-
-=item Killing the parent process
-
-=item Lifetime of the parent process and pseudo-processes
-
-=item CAVEATS AND LIMITATIONS
-
-BEGIN blocks, Open filehandles, Forking pipe open() not yet implemented,
-Global state maintained by XSUBs, Interpreter embedded in larger
-application, Thread-safety of extensions
-
-=back
-
-=item BUGS
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 perlnumber - semantics of numbers and numeric operations in Perl
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Storing numbers
-
-=item Numeric operators and numeric conversions
-
-=item Flavors of Perl numeric operations
-
-Arithmetic operators, ++, Arithmetic operators during C<use integer>, Other
-mathematical operators, Bitwise operators, Bitwise operators during C<use
-integer>, Operators which expect an integer, Operators which expect a
-string
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 perlthrtut - Tutorial on threads in Perl
-
-=over 4
-
-=item DESCRIPTION
-
-=item What Is A Thread Anyway?
-
-=item Threaded Program Models
-
-=over 4
-
-=item Boss/Worker
-
-=item Work Crew
-
-=item Pipeline
-
-=back
-
-=item What kind of threads are Perl threads?
-
-=item Thread-Safe Modules
-
-=item Thread Basics
-
-=over 4
-
-=item Basic Thread Support
-
-=item A Note about the Examples
-
-=item Creating Threads
-
-=item Waiting For A Thread To Exit
-
-=item Ignoring A Thread
-
-=item Process and Thread Termination
-
-=back
-
-=item Threads And Data
-
-=over 4
-
-=item Shared And Unshared Data
-
-=item Thread Pitfalls: Races
-
-=back
-
-=item Synchronization and control
-
-=over 4
-
-=item Controlling access: lock()
-
-=item A Thread Pitfall: Deadlocks
-
-=item Queues: Passing Data Around
-
-=item Semaphores: Synchronizing Data Access
-
-=item Basic semaphores
-
-=item Advanced Semaphores
-
-=item Waiting for a Condition
-
-=item Giving up control
-
-=back
-
-=item General Thread Utility Routines
-
-=over 4
-
-=item What Thread Am I In?
-
-=item Thread IDs
-
-=item Are These Threads The Same?
-
-=item What Threads Are Running?
-
-=back
-
-=item A Complete Example
-
-=item Different implementations of threads
-
-=item Performance considerations
-
-=item Process-scope Changes
-
-=item Thread-Safety of System Libraries
-
-=item Conclusion
-
-=item SEE ALSO
-
-=item Bibliography
-
-=over 4
-
-=item Introductory Texts
-
-=item OS-Related References
-
-=item Other References
-
-=back
-
-=item Acknowledgements
-
-=item AUTHOR
-
-=item Copyrights
-
-=back
-
-=head2 perlothrtut - old tutorial on threads in Perl
-
-=over 4
-
-=item DESCRIPTION
-
-=item What Is A Thread Anyway?
-
-=item Threaded Program Models
-
-=over 4
-
-=item Boss/Worker
-
-=item Work Crew
-
-=item Pipeline
-
-=back
-
-=item Native threads
-
-=item What kind of threads are perl threads?
-
-=item Threadsafe Modules
-
-=item Thread Basics
-
-=over 4
-
-=item Basic Thread Support
-
-=item Creating Threads
-
-=item Giving up control
-
-=item Waiting For A Thread To Exit
-
-=item Errors In Threads
-
-=item Ignoring A Thread
-
-=back
-
-=item Threads And Data
-
-=over 4
-
-=item Shared And Unshared Data
-
-=item Thread Pitfall: Races
-
-=item Controlling access: lock()
-
-=item Thread Pitfall: Deadlocks
-
-=item Queues: Passing Data Around
-
-=back
-
-=item Threads And Code
-
-=over 4
-
-=item Semaphores: Synchronizing Data Access
-
-Basic semaphores, Advanced Semaphores
-
-=item Attributes: Restricting Access To Subroutines
-
-=item Subroutine Locks
-
-=item Methods
-
-=item Locking A Subroutine
-
-=back
-
-=item General Thread Utility Routines
-
-=over 4
-
-=item What Thread Am I In?
-
-=item Thread IDs
-
-=item Are These Threads The Same?
-
-=item What Threads Are Running?
-
-=back
-
-=item A Complete Example
-
-=item Conclusion
-
-=item Bibliography
-
-=over 4
-
-=item Introductory Texts
-
-=item OS-Related References
-
-=item Other References
-
-=back
-
-=item Acknowledgements
-
-=item AUTHOR
-
-=item Copyrights
-
-=back
-
-=head2 perlport - Writing portable Perl
-
-=over 4
-
-=item DESCRIPTION
-
-Not all Perl programs have to be portable, Nearly all of Perl already I<is>
-portable
-
-=item ISSUES
-
-=over 4
-
-=item Newlines
-
-=item Numbers endianness and Width
-
-=item Files and Filesystems
-
-=item System Interaction
-
-=item Command names versus file pathnames
-
-=item Networking
-
-=item Interprocess Communication (IPC)
-
-=item External Subroutines (XS)
-
-=item Standard Modules
-
-=item Time and Date
-
-=item Character sets and character encoding
-
-=item Internationalisation
-
-=item System Resources
-
-=item Security
-
-=item Style
-
-=back
-
-=item CPAN Testers
-
-=item PLATFORMS
-
-=over 4
-
-=item Unix
-
-=item DOS and Derivatives
-
-=item S<Mac OS>
-
-=item VMS
-
-=item VOS
-
-=item EBCDIC Platforms
-
-=item Acorn RISC OS
-
-=item Other perls
-
-=back
-
-=item FUNCTION IMPLEMENTATIONS
-
-=over 4
-
-=item Alphabetical Listing of Perl Functions
-
--I<X>, atan2, binmode, chmod, chown, chroot, crypt, dbmclose, dbmopen,
-dump, exec, exit, fcntl, flock, fork, getlogin, getpgrp, getppid,
-getpriority, getpwnam, getgrnam, getnetbyname, getpwuid, getgrgid,
-getnetbyaddr, getprotobynumber, getservbyport, getpwent, getgrent,
-gethostbyname, gethostent, getnetent, getprotoent, getservent, sethostent,
-setnetent, setprotoent, setservent, endpwent, endgrent, endhostent,
-endnetent, endprotoent, endservent, getsockopt SOCKET,LEVEL,OPTNAME, glob,
-gmtime, ioctl FILEHANDLE,FUNCTION,SCALAR, kill, link, localtime, lstat,
-msgctl, msgget, msgsnd, msgrcv, open, pipe, readlink, rename, select,
-semctl, semget, semop, setgrent, setpgrp, setpriority, setpwent,
-setsockopt, shmctl, shmget, shmread, shmwrite, sockatmark, socketpair,
-stat, symlink, syscall, sysopen, system, times, truncate, umask, utime,
-wait, waitpid
-
-=back
-
-=item Supported Platforms
-
-=item SEE ALSO
-
-=item AUTHORS / CONTRIBUTORS
-
-=back
-
-=head2 perllocale - Perl locale handling (internationalization and
-localization)
-
-=over 4
-
-=item DESCRIPTION
-
-=item PREPARING TO USE LOCALES
-
-=item USING LOCALES
-
-=over 4
-
-=item The use locale pragma
-
-=item The setlocale function
-
-=item Finding locales
-
-=item LOCALE PROBLEMS
-
-=item Temporarily fixing locale problems
-
-=item Permanently fixing locale problems
-
-=item Permanently fixing your system's locale configuration
-
-=item Fixing system locale configuration
-
-=item The localeconv function
-
-=item I18N::Langinfo
-
-=back
-
-=item LOCALE CATEGORIES
-
-=over 4
-
-=item Category LC_COLLATE: Collation
-
-=item Category LC_CTYPE: Character Types
-
-=item Category LC_NUMERIC: Numeric Formatting
-
-=item Category LC_MONETARY: Formatting of monetary amounts
-
-=item LC_TIME
-
-=item Other categories
-
-=back
-
-=item SECURITY
-
-=item ENVIRONMENT
-
-PERL_BADLANG, LC_ALL, LANGUAGE, LC_CTYPE, LC_COLLATE, LC_MONETARY,
-LC_NUMERIC, LC_TIME, LANG
-
-=over 4
-
-=item Examples
-
-=back
-
-=item NOTES
-
-=over 4
-
-=item Backward compatibility
-
-=item I18N:Collate obsolete
-
-=item Sort speed and memory use impacts
-
-=item write() and LC_NUMERIC
-
-=item Freely available locale definitions
-
-=item I18n and l10n
-
-=item An imperfect standard
-
-=back
-
-=item Unicode and UTF-8
-
-=item BUGS
-
-=over 4
-
-=item Broken systems
-
-=back
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 perluniintro - Perl Unicode introduction
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Unicode
-
-=item Perl's Unicode Support
-
-=item Perl's Unicode Model
-
-=item Unicode and EBCDIC
-
-=item Creating Unicode
-
-=item Handling Unicode
-
-=item Legacy Encodings
-
-=item Unicode I/O
-
-=item Displaying Unicode As Text
-
-=item Special Cases
-
-=item Advanced Topics
-
-=item Miscellaneous
-
-=item Questions With Answers
-
-=item Hexadecimal Notation
-
-=item Further Resources
-
-=back
-
-=item UNICODE IN OLDER PERLS
-
-=item SEE ALSO
-
-=item ACKNOWLEDGMENTS
-
-=item AUTHOR, COPYRIGHT, AND LICENSE
-
-=back
-
-=head2 perlunicode - Unicode support in Perl
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Important Caveats
-
-Input and Output Layers, Regular Expressions, C<use utf8> still needed to
-enable UTF-8/UTF-EBCDIC in scripts, BOM-marked scripts and UTF-16 scripts
-autodetected, C<use encoding> needed to upgrade non-Latin-1 byte strings
-
-=item Byte and Character Semantics
-
-=item Effects of Character Semantics
-
-=item Unicode Character Properties
-
-General Category, Bidirectional Character Types, Scripts, Extended property
-classes, Use of "Is" Prefix, Blocks
-
-=item User-Defined Character Properties
-
-=item User-Defined Case Mappings
-
-=item Character Encodings for Input and Output
-
-=item Unicode Regular Expression Support Level
-
-=item Unicode Encodings
-
-=item Security Implications of Unicode
-
-=item Unicode in Perl on EBCDIC
-
-=item Locales
-
-=item When Unicode Does Not Happen
-
-=item Forcing Unicode in Perl (Or Unforcing Unicode in Perl)
-
-=item Using Unicode in XS
-
-=back
-
-=item BUGS
-
-=over 4
-
-=item Interaction with Locales
-
-=item Interaction with Extensions
-
-=item Speed
-
-=item Porting code from perl-5.6.X
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 perlunifaq - Perl Unicode FAQ
-
-=over 4
-
-=item Q and A
-
-=over 4
-
-=item perlunitut isn't really a Unicode tutorial, is it?
-
-=item What character encodings does Perl support?
-
-=item Which version of perl should I use?
-
-=item What about binary data, like images?
-
-=item When should I decode or encode?
-
-=item What if I don't decode?
-
-=item What if I don't encode?
-
-=item Is there a way to automatically decode or encode?
-
-=item What if I don't know which encoding was used?
-
-=item Can I use Unicode in my Perl sources?
-
-=item Data::Dumper doesn't restore the UTF8 flag; is it broken?
-
-=item Why do regex character classes sometimes match only in the ASCII
-range?
-
-=item Why do some characters not uppercase or lowercase correctly?
-
-=item How can I determine if a string is a text string or a binary string?
-
-=item How do I convert from encoding FOO to encoding BAR?
-
-=item What are C<decode_utf8> and C<encode_utf8>?
-
-=item What is a "wide character"?
-
-=back
-
-=item INTERNALS
-
-=over 4
-
-=item What is "the UTF8 flag"?
-
-=item What about the C<use bytes> pragma?
-
-=item What about the C<use encoding> pragma?
-
-=item What is the difference between C<:encoding> and C<:utf8>?
-
-=item What's the difference between C<UTF-8> and C<utf8>?
-
-=item I lost track; what encoding is the internal format really?
-
-=back
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 perlunitut - Perl Unicode Tutorial
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Definitions
-
-=item Your new toolkit
-
-=item I/O flow (the actual 5 minute tutorial)
-
-=back
-
-=item SUMMARY
-
-=item Q and A (or FAQ)
-
-=item ACKNOWLEDGEMENTS
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 perlebcdic - Considerations for running Perl on EBCDIC platforms
-
-=over 4
-
-=item DESCRIPTION
-
-=item COMMON CHARACTER CODE SETS
-
-=over 4
-
-=item ASCII
-
-=item ISO 8859
-
-=item Latin 1 (ISO 8859-1)
-
-=item EBCDIC
-
-=item 13 variant characters
-
-=item 0037
-
-=item 1047
-
-=item POSIX-BC
-
-=item Unicode code points versus EBCDIC code points
-
-=item Remaining Perl Unicode problems in EBCDIC
-
-=item Unicode and UTF
-
-=item Using Encode
-
-=back
-
-=item SINGLE OCTET TABLES
-
-recipe 0, recipe 1, recipe 2, recipe 3, recipe 4, recipe 5, recipe 6
-
-=item IDENTIFYING CHARACTER CODE SETS
-
-=item CONVERSIONS
-
-=over 4
-
-=item tr///
-
-=item iconv
-
-=item C RTL
-
-=back
-
-=item OPERATOR DIFFERENCES
-
-=item FUNCTION DIFFERENCES
-
-chr(), ord(), pack(), print(), printf(), sort(), sprintf(), unpack()
-
-=item REGULAR EXPRESSION DIFFERENCES
-
-=item SOCKETS
-
-=item SORTING
-
-=over 4
-
-=item Ignore ASCII vs. EBCDIC sort differences.
-
-=item MONO CASE then sort data.
-
-=item Convert, sort data, then re convert.
-
-=item Perform sorting on one type of machine only.
-
-=back
-
-=item TRANSFORMATION FORMATS
-
-=over 4
-
-=item URL decoding and encoding
-
-=item uu encoding and decoding
-
-=item Quoted-Printable encoding and decoding
-
-=item Caesarian ciphers
-
-=back
-
-=item Hashing order and checksums
-
-=item I18N AND L10N
-
-=item MULTI OCTET CHARACTER SETS
-
-=item OS ISSUES
-
-=over 4
-
-=item OS/400
-
-PASE, IFS access
-
-=item OS/390, z/OS
-
-chcp, dataset access, OS/390, z/OS iconv, locales
-
-=item VM/ESA?
-
-=item POSIX-BC?
-
-=back
-
-=item BUGS
-
-=item SEE ALSO
-
-=item REFERENCES
-
-=item HISTORY
-
-=item AUTHOR
-
-=back
-
-=head2 perlsec - Perl security
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Laundering and Detecting Tainted Data
-
-=item Switches On the "#!" Line
-
-=item Taint mode and @INC
-
-=item Cleaning Up Your Path
-
-=item Security Bugs
-
-=item Protecting Your Programs
-
-=item Unicode
-
-=item Algorithmic Complexity Attacks
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 perlmod - Perl modules (packages and symbol tables)
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Packages
-X<package> X<namespace> X<variable, global> X<global variable> X<global>
-
-=item Symbol Tables
-X<symbol table> X<stash> X<%::> X<%main::> X<typeglob> X<glob> X<alias>
-
-=item BEGIN, UNITCHECK, CHECK, INIT and END
-X<BEGIN> X<UNITCHECK> X<CHECK> X<INIT> X<END>
-
-=item Perl Classes
-X<class> X<@ISA>
-
-=item Perl Modules
-X<module>
-
-=item Making your module threadsafe
-X<threadsafe> X<thread safe>
-X<module, threadsafe> X<module, thread safe>
-X<CLONE> X<CLONE_SKIP> X<thread> X<threads> X<ithread>
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 perlmodlib - constructing new Perl modules and finding existing ones
-
-=over 4
-
-=item THE PERL MODULE LIBRARY
-
-=over 4
-
-=item Pragmatic Modules
-
-attributes, attrs, autouse, base, bigint, bignum, bigrat, blib, bytes,
-charnames, constant, diagnostics, encoding, encoding::warnings, feature,
-fields, filetest, if, integer, less, lib, locale, mro, open, ops, overload,
-re, sigtrap, sort, strict, subs, threads, threads::shared, utf8, vars,
-version, vmsish, warnings, warnings::register
-
-=item Standard Modules
-
-AnyDBM_File, Archive::Extract, Archive::Tar, Archive::Tar::File,
-Attribute::Handlers, AutoLoader, AutoSplit, B, B::Concise, B::Debug,
-B::Deparse, B::Lint, B::Showlex, B::Terse, B::Xref, Benchmark, CGI,
-CGI::Apache, CGI::Carp, CGI::Cookie, CGI::Fast, CGI::Pretty, CGI::Push,
-CGI::Switch, CGI::Util, CORE, CPAN, CPAN::API::HOWTO, CPAN::FirstTime,
-CPAN::Kwalify, CPAN::Nox, CPAN::Version, CPANPLUS, CPANPLUS::Dist::Base,
-CPANPLUS::Dist::Sample, CPANPLUS::Shell::Classic,
-CPANPLUS::Shell::Default::Plugins::HOWTO, Carp, Carp::Heavy, Class::ISA,
-Class::Struct, Compress::Raw::Zlib, Compress::Zlib, Config, Cwd, DB,
-DBM_Filter, DBM_Filter::compress, DBM_Filter::encode, DBM_Filter::int32,
-DBM_Filter::null, DBM_Filter::utf8, DB_File, Data::Dumper, Devel::DProf,
-Devel::InnerPackage, Devel::Peek, Devel::SelfStubber, Digest, Digest::MD5,
-Digest::SHA, Digest::base, Digest::file, DirHandle, Dumpvalue, DynaLoader,
-Encode, Encode::Alias, Encode::Byte, Encode::CJKConstants, Encode::CN,
-Encode::CN::HZ, Encode::Config, Encode::EBCDIC, Encode::Encoder,
-Encode::Encoding, Encode::GSM0338, Encode::Guess, Encode::JP,
-Encode::JP::H2Z, Encode::JP::JIS7, Encode::KR, Encode::KR::2022_KR,
-Encode::MIME::Header, Encode::MIME::Name, Encode::PerlIO,
-Encode::Supported, Encode::Symbol, Encode::TW, Encode::Unicode,
-Encode::Unicode::UTF7, English, Env, Errno, Exporter, Exporter::Heavy,
-ExtUtils::CBuilder, ExtUtils::CBuilder::Platform::Windows,
-ExtUtils::Command, ExtUtils::Command::MM, ExtUtils::Constant,
-ExtUtils::Constant::Base, ExtUtils::Constant::Utils,
-ExtUtils::Constant::XS, ExtUtils::Embed, ExtUtils::Install,
-ExtUtils::Installed, ExtUtils::Liblist, ExtUtils::MM, ExtUtils::MM_AIX,
-ExtUtils::MM_Any, ExtUtils::MM_BeOS, ExtUtils::MM_Cygwin, ExtUtils::MM_DOS,
-ExtUtils::MM_MacOS, ExtUtils::MM_NW5, ExtUtils::MM_OS2, ExtUtils::MM_QNX,
-ExtUtils::MM_UWIN, ExtUtils::MM_Unix, ExtUtils::MM_VMS, ExtUtils::MM_VOS,
-ExtUtils::MM_Win32, ExtUtils::MM_Win95, ExtUtils::MY, ExtUtils::MakeMaker,
-ExtUtils::MakeMaker::Config, ExtUtils::MakeMaker::FAQ,
-ExtUtils::MakeMaker::Tutorial, ExtUtils::MakeMaker::bytes,
-ExtUtils::MakeMaker::vmsish, ExtUtils::Manifest, ExtUtils::Mkbootstrap,
-ExtUtils::Mksymlists, ExtUtils::Packlist, ExtUtils::ParseXS,
-ExtUtils::testlib, Fatal, Fcntl, File::Basename, File::CheckTree,
-File::Compare, File::Copy, File::DosGlob, File::Fetch, File::Find,
-File::Glob, File::GlobMapper, File::Path, File::Spec, File::Spec::Cygwin,
-File::Spec::Epoc, File::Spec::Functions, File::Spec::Mac, File::Spec::OS2,
-File::Spec::Unix, File::Spec::VMS, File::Spec::Win32, File::Temp,
-File::stat, FileCache, FileHandle, Filter::Simple, Filter::Util::Call,
-FindBin, GDBM_File, Getopt::Long, Getopt::Std, Hash::Util,
-Hash::Util::FieldHash, I18N::Collate, I18N::LangTags,
-I18N::LangTags::Detect, I18N::LangTags::List, I18N::Langinfo, IO,
-IO::Compress::Base, IO::Compress::Deflate, IO::Compress::Gzip,
-IO::Compress::RawDeflate, IO::Compress::Zip, IO::Dir, IO::File, IO::Handle,
-IO::Pipe, IO::Poll, IO::Seekable, IO::Select, IO::Socket, IO::Socket::INET,
-IO::Socket::UNIX, IO::Uncompress::AnyInflate,
-IO::Uncompress::AnyUncompress, IO::Uncompress::Base,
-IO::Uncompress::Gunzip, IO::Uncompress::Inflate,
-IO::Uncompress::RawInflate, IO::Uncompress::Unzip, IO::Zlib, IPC::Cmd,
-IPC::Open2, IPC::Open3, IPC::SysV, IPC::SysV::Msg, IPC::SysV::Semaphore,
-List::Util, Locale::Constants, Locale::Country, Locale::Currency,
-Locale::Language, Locale::Maketext, Locale::Maketext::Simple,
-Locale::Maketext::TPJ13, Locale::Script, Log::Message,
-Log::Message::Config, Log::Message::Handlers, Log::Message::Item,
-MIME::Base64, MIME::QuotedPrint, Math::BigFloat, Math::BigInt,
-Math::BigInt::Calc, Math::BigInt::CalcEmu, Math::BigInt::FastCalc,
-Math::BigRat, Math::Complex, Math::Trig, Memoize, Memoize::AnyDBM_File,
-Memoize::Expire, Memoize::ExpireFile, Memoize::ExpireTest,
-Memoize::NDBM_File, Memoize::SDBM_File, Memoize::Storable, Module::Build,
-Module::Build::API, Module::Build::Authoring, Module::Build::Base,
-Module::Build::Compat, Module::Build::ConfigData, Module::Build::Cookbook,
-Module::Build::ModuleInfo, Module::Build::Notes, Module::Build::PPMMaker,
-Module::Build::Platform::Amiga, Module::Build::Platform::Default,
-Module::Build::Platform::EBCDIC, Module::Build::Platform::MPEiX,
-Module::Build::Platform::MacOS, Module::Build::Platform::RiscOS,
-Module::Build::Platform::Unix, Module::Build::Platform::VMS,
-Module::Build::Platform::VOS, Module::Build::Platform::Windows,
-Module::Build::Platform::aix, Module::Build::Platform::cygwin,
-Module::Build::Platform::darwin, Module::Build::Platform::os2,
-Module::Build::YAML, Module::CoreList, Module::Load,
-Module::Load::Conditional, Module::Loaded, Module::Pluggable,
-Module::Pluggable::Object, NDBM_File, NEXT, Net::Cmd, Net::Config,
-Net::Domain, Net::FTP, Net::NNTP, Net::Netrc, Net::POP3, Net::Ping,
-Net::SMTP, Net::Time, Net::hostent, Net::libnetFAQ, Net::netent,
-Net::protoent, Net::servent, O, ODBM_File, Opcode, POSIX,
-Package::Constants, Params::Check, PerlIO, PerlIO::encoding,
-PerlIO::scalar, PerlIO::via, PerlIO::via::QuotedPrint, Pod::Checker,
-Pod::Escapes, Pod::Find, Pod::Functions, Pod::Html, Pod::InputObjects,
-Pod::LaTeX, Pod::Man, Pod::ParseLink, Pod::ParseUtils, Pod::Parser,
-Pod::Perldoc::ToChecker, Pod::Perldoc::ToMan, Pod::Perldoc::ToNroff,
-Pod::Perldoc::ToPod, Pod::Perldoc::ToRtf, Pod::Perldoc::ToText,
-Pod::Perldoc::ToTk, Pod::Perldoc::ToXml, Pod::PlainText, Pod::Plainer,
-Pod::Select, Pod::Simple, Pod::Simple::Checker, Pod::Simple::Debug,
-Pod::Simple::DumpAsText, Pod::Simple::DumpAsXML, Pod::Simple::HTML,
-Pod::Simple::HTMLBatch, Pod::Simple::LinkSection, Pod::Simple::Methody,
-Pod::Simple::PullParser, Pod::Simple::PullParserEndToken,
-Pod::Simple::PullParserStartToken, Pod::Simple::PullParserTextToken,
-Pod::Simple::PullParserToken, Pod::Simple::RTF, Pod::Simple::Search,
-Pod::Simple::SimpleTree, Pod::Simple::Subclassing, Pod::Simple::Text,
-Pod::Simple::TextContent, Pod::Simple::XMLOutStream, Pod::Text,
-Pod::Text::Color, Pod::Text::Overstrike, Pod::Text::Termcap, Pod::Usage,
-SDBM_File, Safe, Scalar::Util, Search::Dict, SelectSaver, SelfLoader,
-Shell, Socket, Storable, Switch, Symbol, Sys::Hostname, Sys::Syslog,
-Sys::Syslog::win32::Win32, Term::ANSIColor, Term::Cap, Term::Complete,
-Term::ReadLine, Term::UI, Test, Test::Builder, Test::Builder::Module,
-Test::Builder::Tester, Test::Builder::Tester::Color, Test::Harness,
-Test::Harness::Assert, Test::Harness::Iterator, Test::Harness::Point,
-Test::Harness::Results, Test::Harness::Straps, Test::Harness::TAP,
-Test::Harness::Util, Test::More, Test::Simple, Test::Tutorial,
-Text::Abbrev, Text::Balanced, Text::ParseWords, Text::Soundex, Text::Tabs,
-Text::Wrap, Thread, Thread::Queue, Thread::Semaphore, Tie::Array,
-Tie::File, Tie::Handle, Tie::Hash, Tie::Hash::NamedCapture, Tie::Memoize,
-Tie::RefHash, Tie::Scalar, Tie::SubstrHash, Time::HiRes, Time::Local,
-Time::Piece, Time::Piece::Seconds, Time::gmtime, Time::localtime, Time::tm,
-UNIVERSAL, Unicode::Collate, Unicode::Normalize, Unicode::UCD, User::grent,
-User::pwent, Win32, Win32API::File, Win32CORE, XS::APItest, XS::Typemap,
-XSLoader
-
-=item Extension Modules
-
-=back
-
-=item CPAN
-
-=over 4
-
-=item Africa
-
-South Africa
-
-=item Asia
-
-China, Indonesia, Israel, Japan, Malaysia, Russian Federation, Saudi
-Arabia, Singapore, South Korea, Taiwan, Thailand
-
-=item Central America
-
-Costa Rica
-
-=item Europe
-
-Austria, Belgium, Bosnia and Herzegovina, Bulgaria, Croatia, Czech
-Republic, Denmark, Estonia, Finland, France, Germany, Greece, Hungary,
-Iceland, Ireland, Italy, Latvia, Lithuania, Netherlands, Norway, Poland,
-Portugal, Romania, Russia, Slovakia, Slovenia, Spain, Sweden, Switzerland,
-Turkey, Ukraine, United Kingdom
-
-=item North America
-
-Canada, Alberta, Manitoba, Nova Scotia, Ontario, Mexico, United States,
-Alabama, California, Colorado, Delaware, District of Columbia, Florida,
-Indiana, Kentucky, Massachusetts, Michigan, Nevada, New Jersey, New York,
-North Carolina, Oklahoma, Oregon, Pennsylvania, Tennessee, Texas, Utah,
-Virginia, Washington, Wisconsin
-
-=item Oceania
-
-Australia, New Zealand, United States
-
-=item South America
-
-Argentina, Brazil, Chile
-
-=item RSYNC Mirrors
-
-=back
-
-=item Modules: Creation, Use, and Abuse
-
-=over 4
-
-=item Guidelines for Module Creation
-
-=item Guidelines for Converting Perl 4 Library Scripts into Modules
-
-=item Guidelines for Reusing Application Code
-
-=back
-
-=item NOTE
-
-=back
-
-=head2 perlmodstyle - Perl module style guide
-
-=over 4
-
-=item INTRODUCTION
-
-=item QUICK CHECKLIST
-
-=over 4
-
-=item Before you start
-
-=item The API
-
-=item Stability
-
-=item Documentation
-
-=item Release considerations
-
-=back
-
-=item BEFORE YOU START WRITING A MODULE
-
-=over 4
-
-=item Has it been done before?
-
-=item Do one thing and do it well
-
-=item What's in a name?
-
-=back
-
-=item DESIGNING AND WRITING YOUR MODULE
-
-=over 4
-
-=item To OO or not to OO?
-
-=item Designing your API
-
-Write simple routines to do simple things, Separate functionality from
-output, Provide sensible shortcuts and defaults, Naming conventions,
-Parameter passing
-
-=item Strictness and warnings
-
-=item Backwards compatibility
-
-=item Error handling and messages
-
-=back
-
-=item DOCUMENTING YOUR MODULE
-
-=over 4
-
-=item POD
-
-=item README, INSTALL, release notes, changelogs
-
-perl Makefile.PL, make, make test, make install, perl Build.PL, perl Build,
-perl Build test, perl Build install
-
-=back
-
-=item RELEASE CONSIDERATIONS
-
-=over 4
-
-=item Version numbering
-
-=item Pre-requisites
-
-=item Testing
-
-=item Packaging
-
-=item Licensing
-
-=back
-
-=item COMMON PITFALLS
-
-=over 4
-
-=item Reinventing the wheel
-
-=item Trying to do too much
-
-=item Inappropriate documentation
-
-=back
-
-=item SEE ALSO
-
-L<perlstyle>, L<perlnewmod>, L<perlpod>, L<podchecker>, Packaging Tools,
-Testing tools, http://pause.perl.org/, Any good book on software
-engineering
-
-=item AUTHOR
-
-=back
-
-=head2 perlmodinstall - Installing CPAN Modules
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item PREAMBLE
-
-B<DECOMPRESS> the file, B<UNPACK> the file into a directory, B<BUILD> the
-module (sometimes unnecessary), B<INSTALL> the module
-
-=back
-
-=item PORTABILITY
-
-=item HEY
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 perlnewmod - preparing a new module for distribution
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Warning
-
-=item What should I make into a module?
-
-=item Step-by-step: Preparing the ground
-
-Look around, Check it's new, Discuss the need, Choose a name, Check again
-
-=item Step-by-step: Making the module
-
-Start with F<module-starter> or F<h2xs>, Use L<strict|strict> and
-L<warnings|warnings>, Use L<Carp|Carp>, Use L<Exporter|Exporter> - wisely!,
-Use L<plain old documentation|perlpod>, Write tests, Write the README
-
-=item Step-by-step: Distributing your module
-
-Get a CPAN user ID, C<perl Makefile.PL; make test; make dist>, Upload the
-tarball, Announce to the modules list, Announce to clpa, Fix bugs!
-
-=back
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 perlpragma - how to write a user pragma
-
-=over 4
-
-=item DESCRIPTION
-
-=item A basic example
-
-=item Implementation details
-
-=back
-
-=head2 perlutil - utilities packaged with the Perl distribution
-
-=over 4
-
-=item DESCRIPTION
-
-=item LIST OF UTILITIES
-
-=over 4
-
-=item Documentation
-
-L<perldoc|perldoc>, L<pod2man|pod2man> and L<pod2text|pod2text>,
-L<pod2html|pod2html> and L<pod2latex|pod2latex>, L<pod2usage|pod2usage>,
-L<podselect|podselect>, L<podchecker|podchecker>, L<splain|splain>,
-L<roffitall|roffitall>
-
-=item Convertors
-
-L<a2p|a2p>, L<s2p|s2p> and L<psed>, L<find2perl|find2perl>
-
-=item Administration
-
-L<config_data|config_data>, L<libnetcfg|libnetcfg>, L<perlivp>
-
-=item Development
-
-L<perlbug|perlbug>, L<h2ph|h2ph>, L<c2ph|c2ph> and L<pstruct|pstruct>,
-L<h2xs|h2xs>, L<enc2xs>, L<xsubpp>, L<dprofpp|dprofpp>, L<prove>,
-L<corelist>
-
-=item General tools
-
-L<piconv>, L<ptar>, L<ptardiff>, L<shasum>
-
-=item Installation
-
-L<cpan>, L<cpanp>, L<cpan2dist>, L<instmodsh>
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 perlcompile - Introduction to the Perl Compiler-Translator
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Layout
-
-B::Lint, B::Deparse, B::Xref
-
-=back
-
-=item Using The Back Ends
-
-=over 4
-
-=item The Cross Referencing Back End
-
-i, &, s, r
-
-=item The Decompiling Back End
-
-=item The Lint Back End
-
-=back
-
-=item Module List for the Compiler Suite
-
-B, O, B::Concise, B::Debug, B::Deparse, B::Lint, B::Showlex, B::Terse,
-B::Xref
-
-=item KNOWN PROBLEMS
-
-=item AUTHOR
-
-=back
-
-=head2 perlfilter - Source Filters
-
-=over 4
-
-=item DESCRIPTION
-
-=item CONCEPTS
-
-=item USING FILTERS
-
-=item WRITING A SOURCE FILTER
-
-=item WRITING A SOURCE FILTER IN C
-
-B<Decryption Filters>
-
-=item CREATING A SOURCE FILTER AS A SEPARATE EXECUTABLE
-
-=item WRITING A SOURCE FILTER IN PERL
-
-=item USING CONTEXT: THE DEBUG FILTER
-
-=item CONCLUSION
-
-=item THINGS TO LOOK OUT FOR
-
-Some Filters Clobber the C<DATA> Handle
-
-=item REQUIREMENTS
-
-=item AUTHOR
-
-=item Copyrights
-
-=back
-
-=head2 perlglossary - Perl Glossary
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item A
-
-accessor methods, actual arguments, address operator, algorithm, alias,
-alternatives, anonymous, architecture, argument, ARGV, arithmetical
-operator, array, array context, ASCII, assertion, assignment, assignment
-operator, associative array, associativity, asynchronous, atom, atomic
-operation, attribute, autogeneration, autoincrement, autoload, autosplit,
-autovivification, AV, awk
-
-=item B
-
-backreference, backtracking, backward compatibility, bareword, base class,
-big-endian, binary, binary operator, bind, bit, bit shift, bit string,
-bless, block, BLOCK, block buffering, Boolean, Boolean context, breakpoint,
-broadcast, BSD, bucket, buffer, built-in, bundle, byte, bytecode
-
-=item C
-
-C, C preprocessor, call by reference, call by value, callback, canonical,
-capturing, character, character class, character property, circumfix
-operator, class, class method, client, cloister, closure, cluster, CODE,
-code generator, code subpattern, collating sequence, command, command
-buffering, command name, command-line arguments, comment, compilation unit,
-compile phase, compile time, compiler, composer, concatenation,
-conditional, connection, construct, constructor, context, continuation,
-core dump, CPAN, cracker, current package, current working directory,
-currently selected output channel, CV
-
-=item D
-
-dangling statement, data structure, data type, datagram, DBM, declaration,
-decrement, default, defined, delimiter, deprecated modules and features,
-dereference, derived class, descriptor, destroy, destructor, device,
-directive, directory, directory handle, dispatch, distribution, (to be)
-dropped modules, dweomer, dwimmer, dynamic scoping
-
-=item E
-
-eclectic, element, embedding, empty subclass test, en passant,
-encapsulation, endian, environment, environment variable, EOF, errno,
-error, escape sequence, exception, exception handling, exec, executable
-file, execute, execute bit, exit status, export, expression, extension
-
-=item F
-
-false, FAQ, fatal error, field, FIFO, file, file descriptor, file test
-operator, fileglob, filehandle, filename, filesystem, filter, flag,
-floating point, flush, FMTEYEWTK, fork, formal arguments, format, freely
-available, freely redistributable, freeware, function, funny character,
-garbage collection
-
-=item G
-
-GID, glob, global, global destruction, glue language, granularity, greedy,
-grep, group, GV
-
-=item H
-
-hacker, handler, hard reference, hash, hash table, header file, here
-document, hexadecimal, home directory, host, hubris, HV
-
-=item I
-
-identifier, impatience, implementation, import, increment, indexing,
-indirect filehandle, indirect object, indirect object slot, indirection,
-infix, inheritance, instance, instance variable, integer, interface,
-interpolation, interpreter, invocant, invocation, I/O, IO, IP, IPC, is-a,
-iteration, iterator, IV
-
-=item J
-
-JAPH
-
-=item K
-
-key, keyword
-
-=item L
-
-label, laziness, left shift, leftmost longest, lexeme, lexer, lexical
-analysis, lexical scoping, lexical variable, library, LIFO, line, line
-buffering, line number, link, LIST, list, list context, list operator, list
-value, literal, little-endian, local, logical operator, lookahead,
-lookbehind, loop, loop control statement, loop label, lvaluable, lvalue,
-lvalue modifier
-
-=item M
-
-magic, magical increment, magical variables, Makefile, man, manpage,
-matching, member data, memory, metacharacter, metasymbol, method,
-minimalism, mode, modifier, module, modulus, monger, mortal,
-multidimensional array, multiple inheritance
-
-=item N
-
-named pipe, namespace, network address, newline, NFS, null character, null
-list, null string, numeric context, NV, nybble
-
-=item O
-
-object, octal, offset, one-liner, open source software, operand, operating
-system, operator, operator overloading, options, overloading, overriding,
-owner
-
-=item P
-
-package, pad, parameter, parent class, parse tree, parsing, patch, PATH,
-pathname, pattern, pattern matching, permission bits, Pern, pipe, pipeline,
-platform, pod, pointer, polymorphism, port, portable, porter, POSIX,
-postfix, pp, pragma, precedence, prefix, preprocessing, procedure, process,
-program generator, progressive matching, property, protocol, prototype,
-pseudofunction, pseudohash, pseudoliteral, public domain, pumpkin,
-pumpking, PV
-
-=item Q
-
-qualified, quantifier
-
-=item R
-
-readable, reaping, record, recursion, reference, referent, regex, regular
-expression, regular expression modifier, regular file, relational operator,
-reserved words, return value, RFC, right shift, root, RTFM, run phase, run
-time, run-time pattern, RV, rvalue
-
-=item S
-
-scalar, scalar context, scalar literal, scalar value, scalar variable,
-scope, scratchpad, script, script kiddie, sed, semaphore, separator,
-serialization, server, service, setgid, setuid, shared memory, shebang,
-shell, side effects, signal, signal handler, single inheritance, slice,
-slurp, socket, soft reference, source filter, stack, standard, standard
-error, standard I/O, standard input, standard output, stat structure,
-statement, statement modifier, static, static method, static scoping,
-static variable, status, STDERR, STDIN, STDIO, STDOUT, stream, string,
-string context, stringification, struct, structure, subclass, subpattern,
-subroutine, subscript, substitution, substring, superclass, superuser, SV,
-switch, switch cluster, switch statement, symbol, symbol table, symbolic
-debugger, symbolic link, symbolic reference, synchronous, syntactic sugar,
-syntax, syntax tree, syscall
-
-=item T
-
-tainted, TCP, term, terminator, ternary, text, thread, tie, TMTOWTDI,
-token, tokener, tokenizing, toolbox approach, transliterate, trigger,
-trinary, troff, true, truncating, type, type casting, typed lexical,
-typedef, typeglob, typemap
-
-=item U
-
-UDP, UID, umask, unary operator, Unicode, Unix
-
-=item V
-
-value, variable, variable interpolation, variadic, vector, virtual, void
-context, v-string
-
-=item W
-
-warning, watch expression, whitespace, word, working directory, wrapper,
-WYSIWYG
-
-=item X
-
-XS, XSUB
-
-=item Y
-
-yacc
-
-=item Z
-
-zero width, zombie
-
-=back
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlembed - how to embed perl in your C program
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item PREAMBLE
-
-B<Use C from Perl?>, B<Use a Unix program from Perl?>, B<Use Perl from
-Perl?>, B<Use C from C?>, B<Use Perl from C?>
-
-=item ROADMAP
-
-=item Compiling your C program
-
-=item Adding a Perl interpreter to your C program
-
-=item Calling a Perl subroutine from your C program
-
-=item Evaluating a Perl statement from your C program
-
-=item Performing Perl pattern matches and substitutions from your C program
-
-=item Fiddling with the Perl stack from your C program
-
-=item Maintaining a persistent interpreter
-
-=item Execution of END blocks
-
-=item $0 assignments
-
-=item Maintaining multiple interpreter instances
-
-=item Using Perl modules, which themselves use C libraries, from your C
-program
-
-=back
-
-=item Embedding Perl under Win32
-
-=item Hiding Perl_
-
-=item MORAL
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 perldebguts - Guts of Perl debugging
-
-=over 4
-
-=item DESCRIPTION
-
-=item Debugger Internals
-
-=over 4
-
-=item Writing Your Own Debugger
-
-=back
-
-=item Frame Listing Output Examples
-
-=item Debugging regular expressions
-
-=over 4
-
-=item Compile-time output
-
-C<anchored> I<STRING> C<at> I<POS>, C<floating> I<STRING> C<at>
-I<POS1..POS2>, C<matching floating/anchored>, C<minlen>, C<stclass>
-I<TYPE>, C<noscan>, C<isall>, C<GPOS>, C<plus>, C<implicit>, C<with eval>,
-C<anchored(TYPE)>
-
-=item Types of nodes
-
-=item Run-time output
-
-=back
-
-=item Debugging Perl memory usage
-
-=over 4
-
-=item Using C<$ENV{PERL_DEBUG_MSTATS}>
-
-C<buckets SMALLEST(APPROX)..GREATEST(APPROX)>, Free/Used, C<Total sbrk():
-SBRKed/SBRKs:CONTINUOUS>, C<pad: 0>, C<heads: 2192>, C<chain: 0>, C<tail:
-6144>
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 perlxstut, perlXStut - Tutorial for writing XSUBs
-
-=over 4
-
-=item DESCRIPTION
-
-=item SPECIAL NOTES
-
-=over 4
-
-=item make
-
-=item Version caveat
-
-=item Dynamic Loading versus Static Loading
-
-=back
-
-=item TUTORIAL
-
-=over 4
-
-=item EXAMPLE 1
-
-=item EXAMPLE 2
-
-=item What has gone on?
-
-=item Writing good test scripts
-
-=item EXAMPLE 3
-
-=item What's new here?
-
-=item Input and Output Parameters
-
-=item The XSUBPP Program
-
-=item The TYPEMAP file
-
-=item Warning about Output Arguments
-
-=item EXAMPLE 4
-
-=item What has happened here?
-
-=item Anatomy of .xs file
-
-=item Getting the fat out of XSUBs
-
-=item More about XSUB arguments
-
-=item The Argument Stack
-
-=item Extending your Extension
-
-=item Documenting your Extension
-
-=item Installing your Extension
-
-=item EXAMPLE 5
-
-=item New Things in this Example
-
-=item EXAMPLE 6
-
-=item New Things in this Example
-
-=item EXAMPLE 7 (Coming Soon)
-
-=item EXAMPLE 8 (Coming Soon)
-
-=item EXAMPLE 9 Passing open files to XSes
-
-=item Troubleshooting these Examples
-
-=back
-
-=item See also
-
-=item Author
-
-=over 4
-
-=item Last Changed
-
-=back
-
-=back
-
-=head2 perlxs - XS language reference manual
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Introduction
-
-=item On The Road
-
-=item The Anatomy of an XSUB
-
-=item The Argument Stack
-
-=item The RETVAL Variable
-
-=item Returning SVs, AVs and HVs through RETVAL
-
-=item The MODULE Keyword
-
-=item The PACKAGE Keyword
-
-=item The PREFIX Keyword
-
-=item The OUTPUT: Keyword
-
-=item The NO_OUTPUT Keyword
-
-=item The CODE: Keyword
-
-=item The INIT: Keyword
-
-=item The NO_INIT Keyword
-
-=item Initializing Function Parameters
-
-=item Default Parameter Values
-
-=item The PREINIT: Keyword
-
-=item The SCOPE: Keyword
-
-=item The INPUT: Keyword
-
-=item The IN/OUTLIST/IN_OUTLIST/OUT/IN_OUT Keywords
-
-=item The C<length(NAME)> Keyword
-
-=item Variable-length Parameter Lists
-
-=item The C_ARGS: Keyword
-
-=item The PPCODE: Keyword
-
-=item Returning Undef And Empty Lists
-
-=item The REQUIRE: Keyword
-
-=item The CLEANUP: Keyword
-
-=item The POSTCALL: Keyword
-
-=item The BOOT: Keyword
-
-=item The VERSIONCHECK: Keyword
-
-=item The PROTOTYPES: Keyword
-
-=item The PROTOTYPE: Keyword
-
-=item The ALIAS: Keyword
-
-=item The OVERLOAD: Keyword
-
-=item The FALLBACK: Keyword
-
-=item The INTERFACE: Keyword
-
-=item The INTERFACE_MACRO: Keyword
-
-=item The INCLUDE: Keyword
-
-=item The CASE: Keyword
-
-=item The & Unary Operator
-
-=item Inserting POD, Comments and C Preprocessor Directives
-
-=item Using XS With C++
-
-=item Interface Strategy
-
-=item Perl Objects And C Structures
-
-=item The Typemap
-
-=item Safely Storing Static Data in XS
-
-MY_CXT_KEY, typedef my_cxt_t, START_MY_CXT, MY_CXT_INIT, dMY_CXT, MY_CXT,
-aMY_CXT/pMY_CXT, MY_CXT_CLONE, MY_CXT_INIT_INTERP(my_perl),
-dMY_CXT_INTERP(my_perl)
-
-=item Thread-aware system interfaces
-
-=back
-
-=item EXAMPLES
-
-=item XS VERSION
-
-=item AUTHOR
-
-=back
-
-=head2 perlclib - Internal replacements for standard C library functions
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Conventions
-
-C<t>, C<p>, C<n>, C<s>
-
-=item File Operations
-
-=item File Input and Output
-
-=item File Positioning
-
-=item Memory Management and String Handling
-
-=item Character Class Tests
-
-=item F<stdlib.h> functions
-
-=item Miscellaneous functions
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 perlguts - Introduction to the Perl API
-
-=over 4
-
-=item DESCRIPTION
-
-=item Variables
-
-=over 4
-
-=item Datatypes
-
-=item What is an "IV"?
-
-=item Working with SVs
-
-=item Offsets
-
-=item What's Really Stored in an SV?
-
-=item Working with AVs
-
-=item Working with HVs
-
-=item Hash API Extensions
-
-=item AVs, HVs and undefined values
-
-=item References
-
-=item Blessed References and Class Objects
-
-=item Creating New Variables
-
-GV_ADDMULTI, GV_ADDWARN
-
-=item Reference Counts and Mortality
-
-=item Stashes and Globs
-
-=item Double-Typed SVs
-
-=item Magic Variables
-
-=item Assigning Magic
-
-=item Magic Virtual Tables
-
-=item Finding Magic
-
-=item Understanding the Magic of Tied Hashes and Arrays
-
-=item Localizing changes
-
-C<SAVEINT(int i)>, C<SAVEIV(IV i)>, C<SAVEI32(I32 i)>, C<SAVELONG(long i)>,
-C<SAVESPTR(s)>, C<SAVEPPTR(p)>, C<SAVEFREESV(SV *sv)>, C<SAVEMORTALIZESV(SV
-*sv)>, C<SAVEFREEOP(OP *op)>, C<SAVEFREEPV(p)>, C<SAVECLEARSV(SV *sv)>,
-C<SAVEDELETE(HV *hv, char *key, I32 length)>,
-C<SAVEDESTRUCTOR(DESTRUCTORFUNC_NOCONTEXT_t f, void *p)>,
-C<SAVEDESTRUCTOR_X(DESTRUCTORFUNC_t f, void *p)>, C<SAVESTACK_POS()>, C<SV*
-save_scalar(GV *gv)>, C<AV* save_ary(GV *gv)>, C<HV* save_hash(GV *gv)>,
-C<void save_item(SV *item)>, C<void save_list(SV **sarg, I32 maxsarg)>,
-C<SV* save_svref(SV **sptr)>, C<void save_aptr(AV **aptr)>, C<void
-save_hptr(HV **hptr)>
-
-=back
-
-=item Subroutines
-
-=over 4
-
-=item XSUBs and the Argument Stack
-
-=item Calling Perl Routines from within C Programs
-
-=item Memory Allocation
-
-=item PerlIO
-
-=item Putting a C value on Perl stack
-
-=item Scratchpads
-
-=item Scratchpads and recursion
-
-=back
-
-=item Compiled code
-
-=over 4
-
-=item Code tree
-
-=item Examining the tree
-
-=item Compile pass 1: check routines
-
-=item Compile pass 1a: constant folding
-
-=item Compile pass 2: context propagation
-
-=item Compile pass 3: peephole optimization
-
-=item Pluggable runops
-
-=back
-
-=item Examining internal data structures with the C<dump> functions
-
-=item How multiple interpreters and concurrency are supported
-
-=over 4
-
-=item Background and PERL_IMPLICIT_CONTEXT
-
-=item So what happened to dTHR?
-
-=item How do I use all this in extensions?
-
-=item Should I do anything special if I call perl from multiple threads?
-
-=item Future Plans and PERL_IMPLICIT_SYS
-
-=back
-
-=item Internal Functions
-
-A, p, d, s, n, r, f, M, o, x, m, X, E, b, others
-
-=over 4
-
-=item Formatted Printing of IVs, UVs, and NVs
-
-=item Pointer-To-Integer and Integer-To-Pointer
-
-=item Exception Handling
-
-=item Source Documentation
-
-=item Backwards compatibility
-
-=back
-
-=item Unicode Support
-
-=over 4
-
-=item What B<is> Unicode, anyway?
-
-=item How can I recognise a UTF-8 string?
-
-=item How does UTF-8 represent Unicode characters?
-
-=item How does Perl store UTF-8 strings?
-
-=item How do I convert a string to UTF-8?
-
-=item Is there anything else I need to know?
-
-=back
-
-=item Custom Operators
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=back
-
-=head2 perlcall - Perl calling conventions from C
-
-=over 4
-
-=item DESCRIPTION
-
-An Error Handler, An Event Driven Program
-
-=item THE CALL_ FUNCTIONS
-
-call_sv, call_pv, call_method, call_argv
-
-=item FLAG VALUES
-
-=over 4
-
-=item G_VOID
-
-=item G_SCALAR
-
-=item G_ARRAY
-
-=item G_DISCARD
-
-=item G_NOARGS
-
-=item G_EVAL
-
-=item G_KEEPERR
-
-=item Determining the Context
-
-=back
-
-=item EXAMPLES
-
-=over 4
-
-=item No Parameters, Nothing returned
-
-=item Passing Parameters
-
-=item Returning a Scalar
-
-=item Returning a list of values
-
-=item Returning a list in a scalar context
-
-=item Returning Data from Perl via the parameter list
-
-=item Using G_EVAL
-
-=item Using G_KEEPERR
-
-=item Using call_sv
-
-=item Using call_argv
-
-=item Using call_method
-
-=item Using GIMME_V
-
-=item Using Perl to dispose of temporaries
-
-=item Strategies for storing Callback Context Information
-
-1. Ignore the problem - Allow only 1 callback, 2. Create a sequence of
-callbacks - hard wired limit, 3. Use a parameter to map to the Perl
-callback
-
-=item Alternate Stack Manipulation
-
-=item Creating and calling an anonymous subroutine in C
-
-=back
-
-=item LIGHTWEIGHT CALLBACKS
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item DATE
-
-=back
-
-=head2 perlreapi - perl regular expression plugin interface
-
-=over 4
-
-=item DESCRIPTION
-
-=item Callbacks
-
-=over 4
-
-=item comp
-
-C</m> - RXf_PMf_MULTILINE, C</s> - RXf_PMf_SINGLELINE, C</i> -
-RXf_PMf_FOLD, C</x> - RXf_PMf_EXTENDED, C</p> - RXf_PMf_KEEPCOPY,
-RXf_PMf_LOCALE, RXf_UTF8, RXf_SPLIT, RXf_SKIPWHITE, RXf_START_ONLY,
-RXf_WHITE, RXf_NULL
-
-=item exec
-
-=item intuit
-
-=item checkstr
-
-=item free
-
-=item Numbered capture callbacks
-
-=item Named capture callbacks
-
-=item qr_package
-
-=item dupe
-
-=back
-
-=item The REGEXP structure
-
-=over 4
-
-=item C<engine>
-
-=item C<mother_re>
-
-=item C<extflags>
-
-=item C<minlen> C<minlenret>
-
-=item C<gofs>
-
-=item C<substrs>
-
-=item C<nparens>, C<lasparen>, and C<lastcloseparen>
-
-=item C<intflags>
-
-=item C<pprivate>
-
-=item C<swap>
-
-=item C<offs>
-
-=item C<precomp> C<prelen>
-
-=item C<paren_names>
-
-=item C<substrs>
-
-=item C<subbeg> C<sublen> C<saved_copy>
-
-=item C<wrapped> C<wraplen>
-
-=item C<seen_evals>
-
-=item C<refcnt>
-
-=back
-
-=item HISTORY
-
-=item AUTHORS
-
-=item LICENSE
-
-=back
-
-=head2 perlreguts - Description of the Perl regular expression engine.
-
-=over 4
-
-=item DESCRIPTION
-
-=item OVERVIEW
-
-=over 4
-
-=item A quick note on terms
-
-=item What is a regular expression engine?
-
-=item Structure of a Regexp Program
-
-C<regnode_1>, C<regnode_2>, C<regnode_string>, C<regnode_charclass>,
-C<regnode_charclass_class>
-
-=back
-
-=item Process Overview
-
-A. Compilation, 1. Parsing for size, 2. Parsing for construction, 3.
-Peep-hole optimisation and analysis, B. Execution, 4. Start position and
-no-match optimisations, 5. Program execution
-
-=over 4
-
-=item Compilation
-
-anchored fixed strings, floating fixed strings, minimum and maximum length
-requirements, start class, Beginning/End of line positions
-
-=item Execution
-
-=back
-
-=item MISCELLANEOUS
-
-=over 4
-
-=item Unicode and Localisation Support
-
-=item Base Structures
-
-C<swap>, C<offsets>, C<regstclass>, C<data>, C<program>
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item LICENCE
-
-=item REFERENCES
-
-=back
-
-=head2 perlapi - autogenerated documentation for the perl public API
-
-=over 4
-
-=item DESCRIPTION
-X<Perl API> X<API> X<api>
-
-=item "Gimme" Values
-
-GIMME X<GIMME>, GIMME_V X<GIMME_V>, G_ARRAY X<G_ARRAY>, G_DISCARD
-X<G_DISCARD>, G_EVAL X<G_EVAL>, G_NOARGS X<G_NOARGS>, G_SCALAR X<G_SCALAR>,
-G_VOID X<G_VOID>
-
-=item Array Manipulation Functions
-
-AvFILL X<AvFILL>, av_clear X<av_clear>, av_create_and_push
-X<av_create_and_push>, av_create_and_unshift_one
-X<av_create_and_unshift_one>, av_delete X<av_delete>, av_exists
-X<av_exists>, av_extend X<av_extend>, av_fetch X<av_fetch>, av_fill
-X<av_fill>, av_len X<av_len>, av_make X<av_make>, av_pop X<av_pop>, av_push
-X<av_push>, av_shift X<av_shift>, av_store X<av_store>, av_undef
-X<av_undef>, av_unshift X<av_unshift>, get_av X<get_av>, newAV X<newAV>,
-sortsv X<sortsv>, sortsv_flags X<sortsv_flags>
-
-=item Callback Functions
-
-call_argv X<call_argv>, call_method X<call_method>, call_pv X<call_pv>,
-call_sv X<call_sv>, ENTER X<ENTER>, eval_pv X<eval_pv>, eval_sv X<eval_sv>,
-FREETMPS X<FREETMPS>, LEAVE X<LEAVE>, SAVETMPS X<SAVETMPS>
-
-=item Character classes
-
-isALNUM X<isALNUM>, isALPHA X<isALPHA>, isDIGIT X<isDIGIT>, isLOWER
-X<isLOWER>, isSPACE X<isSPACE>, isUPPER X<isUPPER>, toLOWER X<toLOWER>,
-toUPPER X<toUPPER>
-
-=item Cloning an interpreter
-
-perl_clone X<perl_clone>
-
-=item CV Manipulation Functions
-
-CvSTASH X<CvSTASH>, get_cv X<get_cv>, get_cvn_flags X<get_cvn_flags>
-
-=item Embedding Functions
-
-cv_undef X<cv_undef>, load_module X<load_module>, nothreadhook
-X<nothreadhook>, perl_alloc X<perl_alloc>, perl_construct
-X<perl_construct>, perl_destruct X<perl_destruct>, perl_free X<perl_free>,
-perl_parse X<perl_parse>, perl_run X<perl_run>, require_pv X<require_pv>
-
-=item Functions in file dump.c
-
-pv_display X<pv_display>, pv_escape X<pv_escape>, pv_pretty X<pv_pretty>
-
-=item Functions in file mathoms.c
-
-gv_fetchmethod X<gv_fetchmethod>, pack_cat X<pack_cat>, sv_2pvbyte_nolen
-X<sv_2pvbyte_nolen>, sv_2pvutf8_nolen X<sv_2pvutf8_nolen>, sv_2pv_nolen
-X<sv_2pv_nolen>, sv_catpvn_mg X<sv_catpvn_mg>, sv_catsv_mg X<sv_catsv_mg>,
-sv_force_normal X<sv_force_normal>, sv_iv X<sv_iv>, sv_nolocking
-X<sv_nolocking>, sv_nounlocking X<sv_nounlocking>, sv_nv X<sv_nv>, sv_pv
-X<sv_pv>, sv_pvbyte X<sv_pvbyte>, sv_pvbyten X<sv_pvbyten>, sv_pvn
-X<sv_pvn>, sv_pvutf8 X<sv_pvutf8>, sv_pvutf8n X<sv_pvutf8n>, sv_taint
-X<sv_taint>, sv_unref X<sv_unref>, sv_usepvn X<sv_usepvn>, sv_usepvn_mg
-X<sv_usepvn_mg>, sv_uv X<sv_uv>, unpack_str X<unpack_str>
-
-=item Functions in file pp_ctl.c
-
-find_runcv X<find_runcv>
-
-=item Functions in file pp_pack.c
-
-packlist X<packlist>, unpackstring X<unpackstring>
-
-=item GV Functions
-
-GvSV X<GvSV>, gv_const_sv X<gv_const_sv>, gv_fetchmeth X<gv_fetchmeth>,
-gv_fetchmethod_autoload X<gv_fetchmethod_autoload>, gv_fetchmeth_autoload
-X<gv_fetchmeth_autoload>, gv_stashpv X<gv_stashpv>, gv_stashpvn
-X<gv_stashpvn>, gv_stashpvs X<gv_stashpvs>, gv_stashsv X<gv_stashsv>
-
-=item Handy Values
-
-Nullav X<Nullav>, Nullch X<Nullch>, Nullcv X<Nullcv>, Nullhv X<Nullhv>,
-Nullsv X<Nullsv>
-
-=item Hash Manipulation Functions
-
-get_hv X<get_hv>, HEf_SVKEY X<HEf_SVKEY>, HeHASH X<HeHASH>, HeKEY X<HeKEY>,
-HeKLEN X<HeKLEN>, HePV X<HePV>, HeSVKEY X<HeSVKEY>, HeSVKEY_force
-X<HeSVKEY_force>, HeSVKEY_set X<HeSVKEY_set>, HeVAL X<HeVAL>, HvNAME
-X<HvNAME>, hv_assert X<hv_assert>, hv_clear X<hv_clear>,
-hv_clear_placeholders X<hv_clear_placeholders>, hv_delete X<hv_delete>,
-hv_delete_ent X<hv_delete_ent>, hv_exists X<hv_exists>, hv_exists_ent
-X<hv_exists_ent>, hv_fetch X<hv_fetch>, hv_fetchs X<hv_fetchs>,
-hv_fetch_ent X<hv_fetch_ent>, hv_iterinit X<hv_iterinit>, hv_iterkey
-X<hv_iterkey>, hv_iterkeysv X<hv_iterkeysv>, hv_iternext X<hv_iternext>,
-hv_iternextsv X<hv_iternextsv>, hv_iternext_flags X<hv_iternext_flags>,
-hv_iterval X<hv_iterval>, hv_magic X<hv_magic>, hv_scalar X<hv_scalar>,
-hv_store X<hv_store>, hv_stores X<hv_stores>, hv_store_ent X<hv_store_ent>,
-hv_undef X<hv_undef>, newHV X<newHV>
-
-=item Magical Functions
-
-mg_clear X<mg_clear>, mg_copy X<mg_copy>, mg_find X<mg_find>, mg_free
-X<mg_free>, mg_get X<mg_get>, mg_length X<mg_length>, mg_magical
-X<mg_magical>, mg_set X<mg_set>, SvGETMAGIC X<SvGETMAGIC>, SvLOCK
-X<SvLOCK>, SvSETMAGIC X<SvSETMAGIC>, SvSetMagicSV X<SvSetMagicSV>,
-SvSetMagicSV_nosteal X<SvSetMagicSV_nosteal>, SvSetSV X<SvSetSV>,
-SvSetSV_nosteal X<SvSetSV_nosteal>, SvSHARE X<SvSHARE>, SvUNLOCK
-X<SvUNLOCK>
-
-=item Memory Management
-
-Copy X<Copy>, CopyD X<CopyD>, Move X<Move>, MoveD X<MoveD>, Newx X<Newx>,
-Newxc X<Newxc>, Newxz X<Newxz>, Poison X<Poison>, PoisonFree X<PoisonFree>,
-PoisonNew X<PoisonNew>, PoisonWith X<PoisonWith>, Renew X<Renew>, Renewc
-X<Renewc>, Safefree X<Safefree>, savepv X<savepv>, savepvn X<savepvn>,
-savepvs X<savepvs>, savesharedpv X<savesharedpv>, savesharedpvn
-X<savesharedpvn>, savesvpv X<savesvpv>, StructCopy X<StructCopy>, Zero
-X<Zero>, ZeroD X<ZeroD>
-
-=item Miscellaneous Functions
-
-fbm_compile X<fbm_compile>, fbm_instr X<fbm_instr>, form X<form>, getcwd_sv
-X<getcwd_sv>, my_snprintf X<my_snprintf>, my_sprintf X<my_sprintf>,
-my_vsnprintf X<my_vsnprintf>, new_version X<new_version>, scan_version
-X<scan_version>, strEQ X<strEQ>, strGE X<strGE>, strGT X<strGT>, strLE
-X<strLE>, strLT X<strLT>, strNE X<strNE>, strnEQ X<strnEQ>, strnNE
-X<strnNE>, sv_destroyable X<sv_destroyable>, sv_nosharing X<sv_nosharing>,
-upg_version X<upg_version>, vcmp X<vcmp>, vnormal X<vnormal>, vnumify
-X<vnumify>, vstringify X<vstringify>, vverify X<vverify>
-
-=item MRO Functions
-
-mro_get_linear_isa X<mro_get_linear_isa>, mro_method_changed_in
-X<mro_method_changed_in>
-
-=item Multicall Functions
-
-dMULTICALL X<dMULTICALL>, MULTICALL X<MULTICALL>, POP_MULTICALL
-X<POP_MULTICALL>, PUSH_MULTICALL X<PUSH_MULTICALL>
-
-=item Numeric functions
-
-grok_bin X<grok_bin>, grok_hex X<grok_hex>, grok_number X<grok_number>,
-grok_numeric_radix X<grok_numeric_radix>, grok_oct X<grok_oct>,
-Perl_signbit X<Perl_signbit>, scan_bin X<scan_bin>, scan_hex X<scan_hex>,
-scan_oct X<scan_oct>
-
-=item Optree Manipulation Functions
-
-cv_const_sv X<cv_const_sv>, newCONSTSUB X<newCONSTSUB>, newXS X<newXS>
-
-=item Pad Data Structures
-
-pad_sv X<pad_sv>
-
-=item Per-Interpreter Variables
-
-PL_modglobal X<PL_modglobal>, PL_na X<PL_na>, PL_sv_no X<PL_sv_no>,
-PL_sv_undef X<PL_sv_undef>, PL_sv_yes X<PL_sv_yes>
-
-=item REGEXP Functions
-
-SvRX X<SvRX>, SvRXOK X<SvRXOK>
-
-=item Simple Exception Handling Macros
-
-dXCPT X<dXCPT>, XCPT_CATCH X<XCPT_CATCH>, XCPT_RETHROW X<XCPT_RETHROW>,
-XCPT_TRY_END X<XCPT_TRY_END>, XCPT_TRY_START X<XCPT_TRY_START>
-
-=item Stack Manipulation Macros
-
-dMARK X<dMARK>, dORIGMARK X<dORIGMARK>, dSP X<dSP>, EXTEND X<EXTEND>, MARK
-X<MARK>, mPUSHi X<mPUSHi>, mPUSHn X<mPUSHn>, mPUSHp X<mPUSHp>, mPUSHu
-X<mPUSHu>, mXPUSHi X<mXPUSHi>, mXPUSHn X<mXPUSHn>, mXPUSHp X<mXPUSHp>,
-mXPUSHu X<mXPUSHu>, ORIGMARK X<ORIGMARK>, POPi X<POPi>, POPl X<POPl>, POPn
-X<POPn>, POPp X<POPp>, POPpbytex X<POPpbytex>, POPpx X<POPpx>, POPs
-X<POPs>, PUSHi X<PUSHi>, PUSHMARK X<PUSHMARK>, PUSHmortal X<PUSHmortal>,
-PUSHn X<PUSHn>, PUSHp X<PUSHp>, PUSHs X<PUSHs>, PUSHu X<PUSHu>, PUTBACK
-X<PUTBACK>, SP X<SP>, SPAGAIN X<SPAGAIN>, XPUSHi X<XPUSHi>, XPUSHmortal
-X<XPUSHmortal>, XPUSHn X<XPUSHn>, XPUSHp X<XPUSHp>, XPUSHs X<XPUSHs>,
-XPUSHu X<XPUSHu>, XSRETURN X<XSRETURN>, XSRETURN_EMPTY X<XSRETURN_EMPTY>,
-XSRETURN_IV X<XSRETURN_IV>, XSRETURN_NO X<XSRETURN_NO>, XSRETURN_NV
-X<XSRETURN_NV>, XSRETURN_PV X<XSRETURN_PV>, XSRETURN_UNDEF
-X<XSRETURN_UNDEF>, XSRETURN_UV X<XSRETURN_UV>, XSRETURN_YES
-X<XSRETURN_YES>, XST_mIV X<XST_mIV>, XST_mNO X<XST_mNO>, XST_mNV
-X<XST_mNV>, XST_mPV X<XST_mPV>, XST_mUNDEF X<XST_mUNDEF>, XST_mYES
-X<XST_mYES>
-
-=item SV Flags
-
-svtype X<svtype>, SVt_IV X<SVt_IV>, SVt_NV X<SVt_NV>, SVt_PV X<SVt_PV>,
-SVt_PVAV X<SVt_PVAV>, SVt_PVCV X<SVt_PVCV>, SVt_PVHV X<SVt_PVHV>, SVt_PVMG
-X<SVt_PVMG>
-
-=item SV Manipulation Functions
-
-get_sv X<get_sv>, newRV_inc X<newRV_inc>, SvCUR X<SvCUR>, SvCUR_set
-X<SvCUR_set>, SvEND X<SvEND>, SvGAMAGIC X<SvGAMAGIC>, SvGROW X<SvGROW>,
-SvIOK X<SvIOK>, SvIOKp X<SvIOKp>, SvIOK_notUV X<SvIOK_notUV>, SvIOK_off
-X<SvIOK_off>, SvIOK_on X<SvIOK_on>, SvIOK_only X<SvIOK_only>, SvIOK_only_UV
-X<SvIOK_only_UV>, SvIOK_UV X<SvIOK_UV>, SvIsCOW X<SvIsCOW>,
-SvIsCOW_shared_hash X<SvIsCOW_shared_hash>, SvIV X<SvIV>, SvIVX X<SvIVX>,
-SvIVx X<SvIVx>, SvIV_nomg X<SvIV_nomg>, SvIV_set X<SvIV_set>, SvLEN
-X<SvLEN>, SvLEN_set X<SvLEN_set>, SvMAGIC_set X<SvMAGIC_set>, SvNIOK
-X<SvNIOK>, SvNIOKp X<SvNIOKp>, SvNIOK_off X<SvNIOK_off>, SvNOK X<SvNOK>,
-SvNOKp X<SvNOKp>, SvNOK_off X<SvNOK_off>, SvNOK_on X<SvNOK_on>, SvNOK_only
-X<SvNOK_only>, SvNV X<SvNV>, SvNVX X<SvNVX>, SvNVx X<SvNVx>, SvNV_set
-X<SvNV_set>, SvOK X<SvOK>, SvOOK X<SvOOK>, SvPOK X<SvPOK>, SvPOKp
-X<SvPOKp>, SvPOK_off X<SvPOK_off>, SvPOK_on X<SvPOK_on>, SvPOK_only
-X<SvPOK_only>, SvPOK_only_UTF8 X<SvPOK_only_UTF8>, SvPV X<SvPV>, SvPVbyte
-X<SvPVbyte>, SvPVbytex X<SvPVbytex>, SvPVbytex_force X<SvPVbytex_force>,
-SvPVbyte_force X<SvPVbyte_force>, SvPVbyte_nolen X<SvPVbyte_nolen>,
-SvPVutf8 X<SvPVutf8>, SvPVutf8x X<SvPVutf8x>, SvPVutf8x_force
-X<SvPVutf8x_force>, SvPVutf8_force X<SvPVutf8_force>, SvPVutf8_nolen
-X<SvPVutf8_nolen>, SvPVX X<SvPVX>, SvPVx X<SvPVx>, SvPV_force
-X<SvPV_force>, SvPV_force_nomg X<SvPV_force_nomg>, SvPV_nolen
-X<SvPV_nolen>, SvPV_nomg X<SvPV_nomg>, SvPV_set X<SvPV_set>, SvREFCNT
-X<SvREFCNT>, SvREFCNT_dec X<SvREFCNT_dec>, SvREFCNT_inc X<SvREFCNT_inc>,
-SvREFCNT_inc_NN X<SvREFCNT_inc_NN>, SvREFCNT_inc_simple
-X<SvREFCNT_inc_simple>, SvREFCNT_inc_simple_NN X<SvREFCNT_inc_simple_NN>,
-SvREFCNT_inc_simple_void X<SvREFCNT_inc_simple_void>,
-SvREFCNT_inc_simple_void_NN X<SvREFCNT_inc_simple_void_NN>,
-SvREFCNT_inc_void X<SvREFCNT_inc_void>, SvREFCNT_inc_void_NN
-X<SvREFCNT_inc_void_NN>, SvROK X<SvROK>, SvROK_off X<SvROK_off>, SvROK_on
-X<SvROK_on>, SvRV X<SvRV>, SvRV_set X<SvRV_set>, SvSTASH X<SvSTASH>,
-SvSTASH_set X<SvSTASH_set>, SvTAINT X<SvTAINT>, SvTAINTED X<SvTAINTED>,
-SvTAINTED_off X<SvTAINTED_off>, SvTAINTED_on X<SvTAINTED_on>, SvTRUE
-X<SvTRUE>, SvTYPE X<SvTYPE>, SvUOK X<SvUOK>, SvUPGRADE X<SvUPGRADE>, SvUTF8
-X<SvUTF8>, SvUTF8_off X<SvUTF8_off>, SvUTF8_on X<SvUTF8_on>, SvUV X<SvUV>,
-SvUVX X<SvUVX>, SvUVx X<SvUVx>, SvUV_nomg X<SvUV_nomg>, SvUV_set
-X<SvUV_set>, SvVOK X<SvVOK>, sv_catpvn_nomg X<sv_catpvn_nomg>,
-sv_catsv_nomg X<sv_catsv_nomg>, sv_derived_from X<sv_derived_from>, sv_does
-X<sv_does>, sv_report_used X<sv_report_used>, sv_setsv_nomg
-X<sv_setsv_nomg>
-
-=item SV-Body Allocation
-
-looks_like_number X<looks_like_number>, newRV_noinc X<newRV_noinc>, newSV
-X<newSV>, newSVhek X<newSVhek>, newSViv X<newSViv>, newSVnv X<newSVnv>,
-newSVpv X<newSVpv>, newSVpvf X<newSVpvf>, newSVpvn X<newSVpvn>,
-newSVpvn_share X<newSVpvn_share>, newSVpvs X<newSVpvs>, newSVpvs_share
-X<newSVpvs_share>, newSVrv X<newSVrv>, newSVsv X<newSVsv>, newSVuv
-X<newSVuv>, newSV_type X<newSV_type>, sv_2bool X<sv_2bool>, sv_2cv
-X<sv_2cv>, sv_2io X<sv_2io>, sv_2iv_flags X<sv_2iv_flags>, sv_2mortal
-X<sv_2mortal>, sv_2nv X<sv_2nv>, sv_2pvbyte X<sv_2pvbyte>, sv_2pvutf8
-X<sv_2pvutf8>, sv_2pv_flags X<sv_2pv_flags>, sv_2uv_flags X<sv_2uv_flags>,
-sv_backoff X<sv_backoff>, sv_bless X<sv_bless>, sv_catpv X<sv_catpv>,
-sv_catpvf X<sv_catpvf>, sv_catpvf_mg X<sv_catpvf_mg>, sv_catpvn
-X<sv_catpvn>, sv_catpvn_flags X<sv_catpvn_flags>, sv_catpvs X<sv_catpvs>,
-sv_catpv_mg X<sv_catpv_mg>, sv_catsv X<sv_catsv>, sv_catsv_flags
-X<sv_catsv_flags>, sv_chop X<sv_chop>, sv_clear X<sv_clear>, sv_cmp
-X<sv_cmp>, sv_cmp_locale X<sv_cmp_locale>, sv_collxfrm X<sv_collxfrm>,
-sv_copypv X<sv_copypv>, sv_dec X<sv_dec>, sv_eq X<sv_eq>,
-sv_force_normal_flags X<sv_force_normal_flags>, sv_free X<sv_free>, sv_gets
-X<sv_gets>, sv_grow X<sv_grow>, sv_inc X<sv_inc>, sv_insert X<sv_insert>,
-sv_isa X<sv_isa>, sv_isobject X<sv_isobject>, sv_len X<sv_len>, sv_len_utf8
-X<sv_len_utf8>, sv_magic X<sv_magic>, sv_magicext X<sv_magicext>,
-sv_mortalcopy X<sv_mortalcopy>, sv_newmortal X<sv_newmortal>, sv_newref
-X<sv_newref>, sv_pos_b2u X<sv_pos_b2u>, sv_pos_u2b X<sv_pos_u2b>,
-sv_pvbyten_force X<sv_pvbyten_force>, sv_pvn_force X<sv_pvn_force>,
-sv_pvn_force_flags X<sv_pvn_force_flags>, sv_pvutf8n_force
-X<sv_pvutf8n_force>, sv_reftype X<sv_reftype>, sv_replace X<sv_replace>,
-sv_reset X<sv_reset>, sv_rvweaken X<sv_rvweaken>, sv_setiv X<sv_setiv>,
-sv_setiv_mg X<sv_setiv_mg>, sv_setnv X<sv_setnv>, sv_setnv_mg
-X<sv_setnv_mg>, sv_setpv X<sv_setpv>, sv_setpvf X<sv_setpvf>, sv_setpvf_mg
-X<sv_setpvf_mg>, sv_setpviv X<sv_setpviv>, sv_setpviv_mg X<sv_setpviv_mg>,
-sv_setpvn X<sv_setpvn>, sv_setpvn_mg X<sv_setpvn_mg>, sv_setpvs
-X<sv_setpvs>, sv_setpv_mg X<sv_setpv_mg>, sv_setref_iv X<sv_setref_iv>,
-sv_setref_nv X<sv_setref_nv>, sv_setref_pv X<sv_setref_pv>, sv_setref_pvn
-X<sv_setref_pvn>, sv_setref_uv X<sv_setref_uv>, sv_setsv X<sv_setsv>,
-sv_setsv_flags X<sv_setsv_flags>, sv_setsv_mg X<sv_setsv_mg>, sv_setuv
-X<sv_setuv>, sv_setuv_mg X<sv_setuv_mg>, sv_tainted X<sv_tainted>, sv_true
-X<sv_true>, sv_unmagic X<sv_unmagic>, sv_unref_flags X<sv_unref_flags>,
-sv_untaint X<sv_untaint>, sv_upgrade X<sv_upgrade>, sv_usepvn_flags
-X<sv_usepvn_flags>, sv_utf8_decode X<sv_utf8_decode>, sv_utf8_downgrade
-X<sv_utf8_downgrade>, sv_utf8_encode X<sv_utf8_encode>, sv_utf8_upgrade
-X<sv_utf8_upgrade>, sv_utf8_upgrade_flags X<sv_utf8_upgrade_flags>,
-sv_vcatpvf X<sv_vcatpvf>, sv_vcatpvfn X<sv_vcatpvfn>, sv_vcatpvf_mg
-X<sv_vcatpvf_mg>, sv_vsetpvf X<sv_vsetpvf>, sv_vsetpvfn X<sv_vsetpvfn>,
-sv_vsetpvf_mg X<sv_vsetpvf_mg>
-
-=item Unicode Support
-
-bytes_from_utf8 X<bytes_from_utf8>, bytes_to_utf8 X<bytes_to_utf8>,
-ibcmp_utf8 X<ibcmp_utf8>, is_utf8_char X<is_utf8_char>, is_utf8_string
-X<is_utf8_string>, is_utf8_string_loc X<is_utf8_string_loc>,
-is_utf8_string_loclen X<is_utf8_string_loclen>, pv_uni_display
-X<pv_uni_display>, sv_cat_decode X<sv_cat_decode>, sv_recode_to_utf8
-X<sv_recode_to_utf8>, sv_uni_display X<sv_uni_display>, to_utf8_case
-X<to_utf8_case>, to_utf8_fold X<to_utf8_fold>, to_utf8_lower
-X<to_utf8_lower>, to_utf8_title X<to_utf8_title>, to_utf8_upper
-X<to_utf8_upper>, utf8n_to_uvchr X<utf8n_to_uvchr>, utf8n_to_uvuni
-X<utf8n_to_uvuni>, utf8_distance X<utf8_distance>, utf8_hop X<utf8_hop>,
-utf8_length X<utf8_length>, utf8_to_bytes X<utf8_to_bytes>, utf8_to_uvchr
-X<utf8_to_uvchr>, utf8_to_uvuni X<utf8_to_uvuni>, uvchr_to_utf8
-X<uvchr_to_utf8>, uvuni_to_utf8_flags X<uvuni_to_utf8_flags>
-
-=item Variables created by C<xsubpp> and C<xsubpp> internal functions
-
-ax X<ax>, CLASS X<CLASS>, dAX X<dAX>, dAXMARK X<dAXMARK>, dITEMS X<dITEMS>,
-dUNDERBAR X<dUNDERBAR>, dXSARGS X<dXSARGS>, dXSI32 X<dXSI32>, items
-X<items>, ix X<ix>, newXSproto X<newXSproto>, RETVAL X<RETVAL>, ST X<ST>,
-THIS X<THIS>, UNDERBAR X<UNDERBAR>, XS X<XS>, XS_VERSION X<XS_VERSION>,
-XS_VERSION_BOOTCHECK X<XS_VERSION_BOOTCHECK>
-
-=item Warning and Dieing
-
-croak X<croak>, warn X<warn>
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=back
-
-=head2 perlintern - autogenerated documentation of purely B<internal>
- Perl functions
-
-=over 4
-
-=item DESCRIPTION
-X<internal Perl functions> X<interpreter functions>
-
-=item CV reference counts and CvOUTSIDE
-
-CvWEAKOUTSIDE X<CvWEAKOUTSIDE>
-
-=item Functions in file pad.h
-
-CX_CURPAD_SAVE X<CX_CURPAD_SAVE>, CX_CURPAD_SV X<CX_CURPAD_SV>, PAD_BASE_SV
-X<PAD_BASE_SV>, PAD_CLONE_VARS X<PAD_CLONE_VARS>, PAD_COMPNAME_FLAGS
-X<PAD_COMPNAME_FLAGS>, PAD_COMPNAME_GEN X<PAD_COMPNAME_GEN>,
-PAD_COMPNAME_GEN_set X<PAD_COMPNAME_GEN_set>, PAD_COMPNAME_OURSTASH
-X<PAD_COMPNAME_OURSTASH>, PAD_COMPNAME_PV X<PAD_COMPNAME_PV>,
-PAD_COMPNAME_TYPE X<PAD_COMPNAME_TYPE>, PAD_DUP X<PAD_DUP>,
-PAD_RESTORE_LOCAL X<PAD_RESTORE_LOCAL>, PAD_SAVE_LOCAL X<PAD_SAVE_LOCAL>,
-PAD_SAVE_SETNULLPAD X<PAD_SAVE_SETNULLPAD>, PAD_SETSV X<PAD_SETSV>,
-PAD_SET_CUR X<PAD_SET_CUR>, PAD_SET_CUR_NOSAVE X<PAD_SET_CUR_NOSAVE>,
-PAD_SV X<PAD_SV>, PAD_SVl X<PAD_SVl>, SAVECLEARSV X<SAVECLEARSV>,
-SAVECOMPPAD X<SAVECOMPPAD>, SAVEPADSV X<SAVEPADSV>
-
-=item GV Functions
-
-is_gv_magical X<is_gv_magical>, is_gv_magical_sv X<is_gv_magical_sv>
-
-=item Hash Manipulation Functions
-
-refcounted_he_chain_2hv X<refcounted_he_chain_2hv>, refcounted_he_free
-X<refcounted_he_free>, refcounted_he_new X<refcounted_he_new>
-
-=item IO Functions
-
-start_glob X<start_glob>
-
-=item Magical Functions
-
-magic_sethint X<magic_sethint>, mg_localize X<mg_localize>
-
-=item MRO Functions
-
-mro_get_linear_isa_c3 X<mro_get_linear_isa_c3>, mro_get_linear_isa_dfs
-X<mro_get_linear_isa_dfs>, mro_isa_changed_in X<mro_isa_changed_in>
-
-=item Pad Data Structures
-
-CvPADLIST X<CvPADLIST>, cv_clone X<cv_clone>, cv_dump X<cv_dump>,
-do_dump_pad X<do_dump_pad>, intro_my X<intro_my>, pad_add_anon
-X<pad_add_anon>, pad_add_name X<pad_add_name>, pad_alloc X<pad_alloc>,
-pad_block_start X<pad_block_start>, pad_check_dup X<pad_check_dup>,
-pad_findlex X<pad_findlex>, pad_findmy X<pad_findmy>, pad_fixup_inner_anons
-X<pad_fixup_inner_anons>, pad_free X<pad_free>, pad_leavemy X<pad_leavemy>,
-pad_new X<pad_new>, pad_push X<pad_push>, pad_reset X<pad_reset>, pad_setsv
-X<pad_setsv>, pad_swipe X<pad_swipe>, pad_tidy X<pad_tidy>, pad_undef
-X<pad_undef>
-
-=item Per-Interpreter Variables
-
-PL_DBsingle X<PL_DBsingle>, PL_DBsub X<PL_DBsub>, PL_DBtrace X<PL_DBtrace>,
-PL_dowarn X<PL_dowarn>, PL_last_in_gv X<PL_last_in_gv>, PL_ofs_sv
-X<PL_ofs_sv>, PL_rs X<PL_rs>
-
-=item Stack Manipulation Macros
-
-djSP X<djSP>, LVRET X<LVRET>
-
-=item SV Manipulation Functions
-
-sv_add_arena X<sv_add_arena>, sv_clean_all X<sv_clean_all>, sv_clean_objs
-X<sv_clean_objs>, sv_free_arenas X<sv_free_arenas>
-
-=item SV-Body Allocation
-
-sv_2num X<sv_2num>
-
-=item Unicode Support
-
-find_uninit_var X<find_uninit_var>, report_uninit X<report_uninit>
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=back
-
-=head2 perliol - C API for Perl's implementation of IO in Layers.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item History and Background
-
-=item Basic Structure
-
-=item Layers vs Disciplines
-
-=item Data Structures
-
-=item Functions and Attributes
-
-=item Per-instance Data
-
-=item Layers in action.
-
-=item Per-instance flag bits
-
-PERLIO_F_EOF, PERLIO_F_CANWRITE, PERLIO_F_CANREAD, PERLIO_F_ERROR,
-PERLIO_F_TRUNCATE, PERLIO_F_APPEND, PERLIO_F_CRLF, PERLIO_F_UTF8,
-PERLIO_F_UNBUF, PERLIO_F_WRBUF, PERLIO_F_RDBUF, PERLIO_F_LINEBUF,
-PERLIO_F_TEMP, PERLIO_F_OPEN, PERLIO_F_FASTGETS
-
-=item Methods in Detail
-
-fsize, name, size, kind, PERLIO_K_BUFFERED, PERLIO_K_RAW, PERLIO_K_CANCRLF,
-PERLIO_K_FASTGETS, PERLIO_K_MULTIARG, Pushed, Popped, Open, Binmode,
-Getarg, Fileno, Dup, Read, Write, Seek, Tell, Close, Flush, Fill, Eof,
-Error, Clearerr, Setlinebuf, Get_base, Get_bufsiz, Get_ptr, Get_cnt,
-Set_ptrcnt
-
-=item Utilities
-
-=item Implementing PerlIO Layers
-
-C implementations, Perl implementations
-
-=item Core Layers
-
-"unix", "perlio", "stdio", "crlf", "mmap", "pending", "raw", "utf8"
-
-=item Extension Layers
-
-":encoding", ":scalar", ":via"
-
-=back
-
-=item TODO
-
-=back
-
-=head2 perlapio - perl's IO abstraction interface.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-1. USE_STDIO, 2. USE_SFIO, 3. USE_PERLIO, B<PerlIO_stdin()>,
-B<PerlIO_stdout()>, B<PerlIO_stderr()>, B<PerlIO_open(path, mode)>,
-B<PerlIO_fdopen(fd,mode)>, B<PerlIO_reopen(path,mode,f)>,
-B<PerlIO_printf(f,fmt,...)>, B<PerlIO_vprintf(f,fmt,a)>,
-B<PerlIO_stdoutf(fmt,...)>, B<PerlIO_read(f,buf,count)>,
-B<PerlIO_write(f,buf,count)>, B<PerlIO_close(f)>, B<PerlIO_puts(f,s)>,
-B<PerlIO_putc(f,c)>, B<PerlIO_ungetc(f,c)>, B<PerlIO_getc(f)>,
-B<PerlIO_eof(f)>, B<PerlIO_error(f)>, B<PerlIO_fileno(f)>,
-B<PerlIO_clearerr(f)>, B<PerlIO_flush(f)>, B<PerlIO_seek(f,offset,whence)>,
-B<PerlIO_tell(f)>, B<PerlIO_getpos(f,p)>, B<PerlIO_setpos(f,p)>,
-B<PerlIO_rewind(f)>, B<PerlIO_tmpfile()>, B<PerlIO_setlinebuf(f)>
-
-=over 4
-
-=item Co-existence with stdio
-
-B<PerlIO_importFILE(f,mode)>, B<PerlIO_exportFILE(f,mode)>,
-B<PerlIO_releaseFILE(p,f)>, B<PerlIO_findFILE(f)>
-
-=item "Fast gets" Functions
-
-B<PerlIO_fast_gets(f)>, B<PerlIO_has_cntptr(f)>, B<PerlIO_get_cnt(f)>,
-B<PerlIO_get_ptr(f)>, B<PerlIO_set_ptrcnt(f,p,c)>, B<PerlIO_canset_cnt(f)>,
-B<PerlIO_set_cnt(f,c)>, B<PerlIO_has_base(f)>, B<PerlIO_get_base(f)>,
-B<PerlIO_get_bufsiz(f)>
-
-=item Other Functions
-
-PerlIO_apply_layers(f,mode,layers), PerlIO_binmode(f,ptype,imode,layers),
-'E<lt>' read, 'E<gt>' write, '+' read/write, PerlIO_debug(fmt,...)
-
-=back
-
-=back
-
-=head2 perlhack - How to hack at the Perl internals
-
-=over 4
-
-=item DESCRIPTION
-
-Does concept match the general goals of Perl?, Where is the
-implementation?, Backwards compatibility, Could it be a module instead?, Is
-the feature generic enough?, Does it potentially introduce new bugs?, Does
-it preclude other desirable features?, Is the implementation robust?, Is
-the implementation generic enough to be portable?, Is the implementation
-tested?, Is there enough documentation?, Is there another way to do it?,
-Does it create too much work?, Patches speak louder than words
-
-=over 4
-
-=item Keeping in sync
-
-rsync'ing the source tree, Using rsync over the LAN, Using pushing over the
-NFS, rsync'ing the patches
-
-=item Why rsync the source tree
-
-It's easier to rsync the source tree, It's more reliable
-
-=item Why rsync the patches
-
-It's easier to rsync the patches, It's a good reference, Finding a start
-point, Finding how to fix a bug, Finding the source of misbehaviour
-
-=item Working with the source
-
-=item Perlbug administration
-
-=item Submitting patches
-
-L<perlguts>, L<perlxstut> and L<perlxs>, L<perlapi>,
-F<Porting/pumpkin.pod>, The perl5-porters FAQ
-
-=item Finding Your Way Around
-
-Core modules, Tests, Documentation, Configure, Interpreter
-
-=item Elements of the interpreter
-
-Startup, Parsing, Optimization, Running, Exception handing
-
-=item Internal Variable Types
-
-=item Op Trees
-
-=item Stacks
-
-Argument stack, Mark stack, Save stack
-
-=item Millions of Macros
-
-=item The .i Targets
-
-=back
-
-=item SOURCE CODE STATIC ANALYSIS
-
-=over 4
-
-=item lint, splint
-
-=item Coverity
-
-=item cpd (cut-and-paste detector)
-
-=item gcc warnings
-
-=item Warnings of other C compilers
-
-=item DEBUGGING
-
-=item Poking at Perl
-
-=item Using a source-level debugger
-
-run [args], break function_name, break source.c:xxx, step, next, continue,
-finish, 'enter', print
-
-=item gdb macro support
-
-=item Dumping Perl Data Structures
-
-=item Patching
-
-=item Patching a core module
-
-=item Adding a new function to the core
-
-=item Writing a test
-
-F<t/base/>, F<t/cmd/>, F<t/comp/>, F<t/io/>, F<t/lib/>, F<t/mro/>,
-F<t/op/>, F<t/pod/>, F<t/run/>, F<t/uni/>, F<t/win32/>, F<t/x2p>, t/base
-t/comp, t/cmd t/run t/io t/op, t/lib ext lib
-
-=item Special Make Test Targets
-
-coretest, test.deparse, test.taintwarn, minitest, test.valgrind
-check.valgrind utest.valgrind ucheck.valgrind, test.third check.third
-utest.third ucheck.third, test.torture torturetest, utest ucheck test.utf8
-check.utf8, minitest.utf16 test.utf16, test_harness, test-notty test_notty
-
-=item Running tests by hand
-
--v, -torture, -re=PATTERN, -re LIST OF PATTERNS, PERL_CORE=1,
-PERL_DESTRUCT_LEVEL=2, PERL, PERL_SKIP_TTY_TEST, PERL_TEST_Net_Ping,
-PERL_TEST_NOVREXX, PERL_TEST_NUMCONVERTS
-
-=item Common problems when patching Perl source code
-
-=item Perl environment problems
-
-=item Portability problems
-
-=item Problematic System Interfaces
-
-=item Security problems
-
-=back
-
-=item EXTERNAL TOOLS FOR DEBUGGING PERL
-
-=over 4
-
-=item Rational Software's Purify
-
-=item Purify on Unix
-
--Accflags=-DPURIFY, -Doptimize='-g', -Uusemymalloc, -Dusemultiplicity
-
-=item Purify on NT
-
-DEFINES, USE_MULTI = define, #PERL_MALLOC = define, CFG = Debug
-
-=item valgrind
-
-=item Compaq's/Digital's/HP's Third Degree
-
-=item PERL_DESTRUCT_LEVEL
-
-=item PERL_MEM_LOG
-
-=item Profiling
-
-=item Gprof Profiling
-
--a, -b, -e routine, -f routine, -s, -z
-
-=item GCC gcov Profiling
-
-=item Pixie Profiling
-
--h, -l, -p[rocedures], -h[eavy], -i[nvocations], -l[ines], -testcoverage,
--z[ero]
-
-=item Miscellaneous tricks
-
-=back
-
-=item CONCLUSION
-
-I<The Road goes ever on and on, down from the door where it began.>
-
-=item AUTHOR
-
-=back
-
-=head2 perlbook - Perl book information
-
-=over 4
-
-=item DESCRIPTION
-
-=back
-
-=head2 perlcommunity - a brief overview of the Perl community
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Where to find the community
-
-=item Mailing lists and Newsgroups
-
-=item IRC
-
-=item Websites
-
-L<http://perl.com/>, L<http://use.perl.org/>, L<http://www.perlmonks.org/>
-
-=item User Groups
-
-=item Workshops
-
-=item Hackathons
-
-=item Conventions
-
-=item Calendar of Perl Events
-
-=back
-
-=item AUTHOR
-
-=back
-
-=head2 perltodo - Perl TO-DO List
-
-=over 4
-
-=item DESCRIPTION
-
-=item Tasks that only need Perl knowledge
-
-=over 4
-
-=item Remove duplication of test setup.
-
-=item merge common code in installperl and installman
-
-=item common test code for timed bail out
-
-=item POD -E<gt> HTML conversion in the core still sucks
-
-=item merge checkpods and podchecker
-
-=item perlmodlib.PL rewrite
-
-=item Parallel testing
-
-=item Make Schwern poorer
-
-=item Improve the coverage of the core tests
-
-=item test B
-
-=item Deparse inlined constants
-
-=item A decent benchmark
-
-=item fix tainting bugs
-
-=item Dual life everything
-
-=item Improving C<threads::shared>
-
-=item POSIX memory footprint
-
-=item embed.pl/makedef.pl
-
-=item use strict; and AutoLoad
-
-=back
-
-=item Tasks that need a little sysadmin-type knowledge
-
-=over 4
-
-=item make HTML install work
-
-=item compressed man pages
-
-=item Add a code coverage target to the Makefile
-
-=item Make Config.pm cope with differences between built and installed perl
-
-=item linker specification files
-
-=item Cross-compile support
-
-=item roffitall
-
-=back
-
-=item Tasks that need a little C knowledge
-
-=over 4
-
-=item Exterminate PL_na!
-
-=item Modernize the order of directories in @INC
-
-=item -Duse32bit*
-
-=item Make it clear from -v if this is the exact official release
-
-=item Profile Perl - am I hot or not?
-
-=item Allocate OPs from arenas
-
-=item Improve win32/wince.c
-
-=item Use secure CRT functions when building with VC8 on Win32
-
-=item strcat(), strcpy(), strncat(), strncpy(), sprintf(), vsprintf()
-
-=item -D_FORTIFY_SOURCE=2, -fstack-protector
-
-=back
-
-=item Tasks that need a knowledge of XS
-
-=over 4
-
-=item autovivification
-
-=item Unicode in Filenames
-
-=item Unicode in %ENV
-
-=item Unicode and glob()
-
-=item Unicode and lc/uc operators
-
-=item use less 'memory'
-
-=item Re-implement C<:unique> in a way that is actually thread-safe
-
-=item Make tainting consistent
-
-=item readpipe(LIST)
-
-=item Audit the code for destruction ordering assumptions
-
-=item Extend PerlIO and PerlIO::Scalar
-
-=item -C on the #! line
-
-=item Propagate const outwards from Perl_moreswitches()
-
-=item Duplicate logic in S_method_common() and
-Perl_gv_fetchmethod_autoload()
-
-=item Organize error messages
-
-=back
-
-=item Tasks that need a knowledge of the interpreter
-
-=over 4
-
-=item state variable initialization in list context
-
-=item Implement $value ~~ 0 .. $range
-
-=item A does() built-in
-
-=item Tied filehandles and write() don't mix
-
-=item Attach/detach debugger from running program
-
-=item Optimize away empty destructors
-
-=item LVALUE functions for lists
-
-=item LVALUE functions in the debugger
-
-=item regexp optimiser optional
-
-=item delete &function
-
-=item C</w> regex modifier
-
-=item optional optimizer
-
-=item You WANT *how* many
-
-=item lexical aliases
-
-=item entersub XS vs Perl
-
-=item Self-ties
-
-=item Optimize away @_
-
-=item Properly Unicode safe tokeniser and pads.
-
-=item The yada yada yada operators
-
-=item Virtualize operating system access
-
-=item Investigate PADTMP hash pessimisation
-
-=back
-
-=item Big projects
-
-=over 4
-
-=item make ithreads more robust
-
-=item iCOW
-
-=item (?{...}) closures in regexps
-
-=item A re-entrant regexp engine
-
-=item Add class set operations to regexp engine
-
-=back
-
-=back
-
-=head2 perldoc - Look up Perl documentation in Pod format.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OPTIONS
-
-B<-h>, B<-v>, B<-t>, B<-u>, B<-m> I<module>, B<-l>, B<-F>, B<-f>
-I<perlfunc>, B<-q> I<perlfaq-search-regexp>, B<-T>, B<-d>
-I<destination-filename>, B<-o> I<output-formatname>, B<-M> I<module-name>,
-B<-w> I<option:value> or B<-w> I<option>, B<-X>, B<-L> I<language_code>,
-B<PageName|ModuleName|ProgramName>, B<-n> I<some-formatter>, B<-r>, B<-i>,
-B<-V>
-
-=item SECURITY
-
-=item ENVIRONMENT
-
-=item AUTHOR
-
-=back
-
-=head2 perlhist - the Perl history records
-
-=over 4
-
-=item DESCRIPTION
-
-=item INTRODUCTION
-
-=item THE KEEPERS OF THE PUMPKIN
-
-=over 4
-
-=item PUMPKIN?
-
-=back
-
-=item THE RECORDS
-
-=over 4
-
-=item SELECTED RELEASE SIZES
-
-=item SELECTED PATCH SIZES
-
-=back
-
-=item THE KEEPERS OF THE RECORDS
-
-=back
-
-=head2 perldelta - what is new for perl 5.10.0
-
-=over 4
-
-=item DESCRIPTION
-
-=item Core Enhancements
-
-=over 4
-
-=item The C<feature> pragma
-
-=item New B<-E> command-line switch
-
-=item Defined-or operator
-
-=item Switch and Smart Match operator
-
-=item Regular expressions
-
-Recursive Patterns, Named Capture Buffers, Possessive Quantifiers,
-Backtracking control verbs, Relative backreferences, C<\K> escape, Vertical
-and horizontal whitespace, and linebreak
-
-=item C<say()>
-
-=item Lexical C<$_>
-
-=item The C<_> prototype
-
-=item UNITCHECK blocks
-
-=item New Pragma, C<mro>
-
-=item readdir() may return a "short filename" on Windows
-
-=item readpipe() is now overridable
-
-=item Default argument for readline()
-
-=item state() variables
-
-=item Stacked filetest operators
-
-=item UNIVERSAL::DOES()
-
-=item Formats
-
-=item Byte-order modifiers for pack() and unpack()
-
-=item C<no VERSION>
-
-=item C<chdir>, C<chmod> and C<chown> on filehandles
-
-=item OS groups
-
-=item Recursive sort subs
-
-=item Exceptions in constant folding
-
-=item Source filters in @INC
-
-=item New internal variables
-
-C<${^RE_DEBUG_FLAGS}>, C<${^CHILD_ERROR_NATIVE}>, C<${^RE_TRIE_MAXBUF}>,
-C<${^WIN32_SLOPPY_STAT}>
-
-=item Miscellaneous
-
-=item UCD 5.0.0
-
-=item MAD
-
-=item kill() on Windows
-
-=back
-
-=item Incompatible Changes
-
-=over 4
-
-=item Packing and UTF-8 strings
-
-=item Byte/character count feature in unpack()
-
-=item The C<$*> and C<$#> variables have been removed
-
-=item substr() lvalues are no longer fixed-length
-
-=item Parsing of C<-f _>
-
-=item C<:unique>
-
-=item Effect of pragmas in eval
-
-=item chdir FOO
-
-=item Handling of .pmc files
-
-=item $^V is now a C<version> object instead of a v-string
-
-=item @- and @+ in patterns
-
-=item $AUTOLOAD can now be tainted
-
-=item Tainting and printf
-
-=item undef and signal handlers
-
-=item strictures and dereferencing in defined()
-
-=item C<(?p{})> has been removed
-
-=item Pseudo-hashes have been removed
-
-=item Removal of the bytecode compiler and of perlcc
-
-=item Removal of the JPL
-
-=item Recursive inheritance detected earlier
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item Upgrading individual core modules
-
-=item Pragmata Changes
-
-C<feature>, C<mro>, Scoping of the C<sort> pragma, Scoping of C<bignum>,
-C<bigint>, C<bigrat>, C<base>, C<strict> and C<warnings>, C<version>,
-C<warnings>, C<less>
-
-=item New modules
-
-=item Selected Changes to Core Modules
-
-C<Attribute::Handlers>, C<B::Lint>, C<B>, C<Thread>
-
-=back
-
-=item Utility Changes
-
-perl -d, ptar, ptardiff, shasum, corelist, h2ph and h2xs, perlivp,
-find2perl, config_data, cpanp, cpan2dist, pod2html
-
-=item New Documentation
-
-=item Performance Enhancements
-
-=over 4
-
-=item In-place sorting
-
-=item Lexical array access
-
-=item XS-assisted SWASHGET
-
-=item Constant subroutines
-
-=item C<PERL_DONT_CREATE_GVSV>
-
-=item Weak references are cheaper
-
-=item sort() enhancements
-
-=item Memory optimisations
-
-=item UTF-8 cache optimisation
-
-=item Sloppy stat on Windows
-
-=item Regular expressions optimisations
-
-Engine de-recursivised, Single char char-classes treated as literals, Trie
-optimisation of literal string alternations, Aho-Corasick start-point
-optimisation
-
-=back
-
-=item Installation and Configuration Improvements
-
-=over 4
-
-=item Configuration improvements
-
-C<-Dusesitecustomize>, Relocatable installations, strlcat() and strlcpy(),
-C<d_pseudofork> and C<d_printf_format_null>, Configure help
-
-=item Compilation improvements
-
-Parallel build, Borland's compilers support, Static build on Windows,
-ppport.h files, C++ compatibility, Support for Microsoft 64-bit compiler,
-Visual C++, Win32 builds
-
-=item Installation improvements
-
-Module auxiliary files
-
-=item New Or Improved Platforms
-
-=back
-
-=item Selected Bug Fixes
-
-strictures in regexp-eval blocks, Calling CORE::require(), Subscripts of
-slices, C<no warnings 'category'> works correctly with -w, threads
-improvements, chr() and negative values, PERL5SHELL and tainting, Using
-*FILE{IO}, Overloading and reblessing, Overloading and UTF-8, eval memory
-leaks fixed, Random device on Windows, PERLIO_DEBUG, PerlIO::scalar and
-read-only scalars, study() and UTF-8, Critical signals, @INC-hook fix,
-C<-t> switch fix, Duping UTF-8 filehandles, Localisation of hash elements
-
-=item New or Changed Diagnostics
-
-Use of uninitialized value, Deprecated use of my() in false conditional,
-!=~ should be !~, Newline in left-justified string, Too late for "-T"
-option, "%s" variable %s masks earlier declaration,
-readdir()/closedir()/etc. attempted on invalid dirhandle, Opening
-dirhandle/filehandle %s also as a file/directory, Use of -P is deprecated,
-v-string in use/require is non-portable, perl -V
-
-=item Changed Internals
-
-=over 4
-
-=item Reordering of SVt_* constants
-
-=item Elimination of SVt_PVBM
-
-=item New type SVt_BIND
-
-=item Removal of CPP symbols
-
-=item Less space is used by ops
-
-=item New parser
-
-=item Use of C<const>
-
-=item Mathoms
-
-=item C<AvFLAGS> has been removed
-
-=item C<av_*> changes
-
-=item $^H and %^H
-
-=item B:: modules inheritance changed
-
-=item Anonymous hash and array constructors
-
-=back
-
-=item Known Problems
-
-=item Platform Specific Problems
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl5100delta, perldelta - what is new for perl 5.10.0
-
-=over 4
-
-=item DESCRIPTION
-
-=item Core Enhancements
-
-=over 4
-
-=item The C<feature> pragma
-
-=item New B<-E> command-line switch
-
-=item Defined-or operator
-
-=item Switch and Smart Match operator
-
-=item Regular expressions
-
-Recursive Patterns, Named Capture Buffers, Possessive Quantifiers,
-Backtracking control verbs, Relative backreferences, C<\K> escape, Vertical
-and horizontal whitespace, and linebreak
-
-=item C<say()>
-
-=item Lexical C<$_>
-
-=item The C<_> prototype
-
-=item UNITCHECK blocks
-
-=item New Pragma, C<mro>
-
-=item readdir() may return a "short filename" on Windows
-
-=item readpipe() is now overridable
-
-=item Default argument for readline()
-
-=item state() variables
-
-=item Stacked filetest operators
-
-=item UNIVERSAL::DOES()
-
-=item Formats
-
-=item Byte-order modifiers for pack() and unpack()
-
-=item C<no VERSION>
-
-=item C<chdir>, C<chmod> and C<chown> on filehandles
-
-=item OS groups
-
-=item Recursive sort subs
-
-=item Exceptions in constant folding
-
-=item Source filters in @INC
-
-=item New internal variables
-
-C<${^RE_DEBUG_FLAGS}>, C<${^CHILD_ERROR_NATIVE}>, C<${^RE_TRIE_MAXBUF}>,
-C<${^WIN32_SLOPPY_STAT}>
-
-=item Miscellaneous
-
-=item UCD 5.0.0
-
-=item MAD
-
-=item kill() on Windows
-
-=back
-
-=item Incompatible Changes
-
-=over 4
-
-=item Packing and UTF-8 strings
-
-=item Byte/character count feature in unpack()
-
-=item The C<$*> and C<$#> variables have been removed
-
-=item substr() lvalues are no longer fixed-length
-
-=item Parsing of C<-f _>
-
-=item C<:unique>
-
-=item Effect of pragmas in eval
-
-=item chdir FOO
-
-=item Handling of .pmc files
-
-=item $^V is now a C<version> object instead of a v-string
-
-=item @- and @+ in patterns
-
-=item $AUTOLOAD can now be tainted
-
-=item Tainting and printf
-
-=item undef and signal handlers
-
-=item strictures and dereferencing in defined()
-
-=item C<(?p{})> has been removed
-
-=item Pseudo-hashes have been removed
-
-=item Removal of the bytecode compiler and of perlcc
-
-=item Removal of the JPL
-
-=item Recursive inheritance detected earlier
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item Upgrading individual core modules
-
-=item Pragmata Changes
-
-C<feature>, C<mro>, Scoping of the C<sort> pragma, Scoping of C<bignum>,
-C<bigint>, C<bigrat>, C<base>, C<strict> and C<warnings>, C<version>,
-C<warnings>, C<less>
-
-=item New modules
-
-=item Selected Changes to Core Modules
-
-C<Attribute::Handlers>, C<B::Lint>, C<B>, C<Thread>
-
-=back
-
-=item Utility Changes
-
-perl -d, ptar, ptardiff, shasum, corelist, h2ph and h2xs, perlivp,
-find2perl, config_data, cpanp, cpan2dist, pod2html
-
-=item New Documentation
-
-=item Performance Enhancements
-
-=over 4
-
-=item In-place sorting
-
-=item Lexical array access
-
-=item XS-assisted SWASHGET
-
-=item Constant subroutines
-
-=item C<PERL_DONT_CREATE_GVSV>
-
-=item Weak references are cheaper
-
-=item sort() enhancements
-
-=item Memory optimisations
-
-=item UTF-8 cache optimisation
-
-=item Sloppy stat on Windows
-
-=item Regular expressions optimisations
-
-Engine de-recursivised, Single char char-classes treated as literals, Trie
-optimisation of literal string alternations, Aho-Corasick start-point
-optimisation
-
-=back
-
-=item Installation and Configuration Improvements
-
-=over 4
-
-=item Configuration improvements
-
-C<-Dusesitecustomize>, Relocatable installations, strlcat() and strlcpy(),
-C<d_pseudofork> and C<d_printf_format_null>, Configure help
-
-=item Compilation improvements
-
-Parallel build, Borland's compilers support, Static build on Windows,
-ppport.h files, C++ compatibility, Support for Microsoft 64-bit compiler,
-Visual C++, Win32 builds
-
-=item Installation improvements
-
-Module auxiliary files
-
-=item New Or Improved Platforms
-
-=back
-
-=item Selected Bug Fixes
-
-strictures in regexp-eval blocks, Calling CORE::require(), Subscripts of
-slices, C<no warnings 'category'> works correctly with -w, threads
-improvements, chr() and negative values, PERL5SHELL and tainting, Using
-*FILE{IO}, Overloading and reblessing, Overloading and UTF-8, eval memory
-leaks fixed, Random device on Windows, PERLIO_DEBUG, PerlIO::scalar and
-read-only scalars, study() and UTF-8, Critical signals, @INC-hook fix,
-C<-t> switch fix, Duping UTF-8 filehandles, Localisation of hash elements
-
-=item New or Changed Diagnostics
-
-Use of uninitialized value, Deprecated use of my() in false conditional,
-!=~ should be !~, Newline in left-justified string, Too late for "-T"
-option, "%s" variable %s masks earlier declaration,
-readdir()/closedir()/etc. attempted on invalid dirhandle, Opening
-dirhandle/filehandle %s also as a file/directory, Use of -P is deprecated,
-v-string in use/require is non-portable, perl -V
-
-=item Changed Internals
-
-=over 4
-
-=item Reordering of SVt_* constants
-
-=item Elimination of SVt_PVBM
-
-=item New type SVt_BIND
-
-=item Removal of CPP symbols
-
-=item Less space is used by ops
-
-=item New parser
-
-=item Use of C<const>
-
-=item Mathoms
-
-=item C<AvFLAGS> has been removed
-
-=item C<av_*> changes
-
-=item $^H and %^H
-
-=item B:: modules inheritance changed
-
-=item Anonymous hash and array constructors
-
-=back
-
-=item Known Problems
-
-=item Platform Specific Problems
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl595delta - what is new for perl v5.9.5
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=over 4
-
-=item Tainting and printf
-
-=item undef and signal handlers
-
-=item strictures and array/hash dereferencing in defined()
-
-=item C<(?p{})> has been removed
-
-=item Pseudo-hashes have been removed
-
-=item Removal of the bytecode compiler and of perlcc
-
-=item Removal of the JPL
-
-=item Recursive inheritance detected earlier
-
-=back
-
-=item Core Enhancements
-
-=over 4
-
-=item Regular expressions
-
-Recursive Patterns, Named Capture Buffers, Possessive Quantifiers,
-Backtracking control verbs, Relative backreferences, C<\K> escape, Vertical
-and horizontal whitespace, and linebreak
-
-=item The C<_> prototype
-
-=item UNITCHECK blocks
-
-=item readpipe() is now overridable
-
-=item default argument for readline()
-
-=item UCD 5.0.0
-
-=item Smart match
-
-=item Implicit loading of C<feature>
-
-=back
-
-=item Modules and Pragmas
-
-=over 4
-
-=item New Pragma, C<mro>
-
-=item bignum, bigint, bigrat
-
-=item Math::BigInt/Math::BigFloat
-
-config(), import(), roundmode common, bpi(), bcos(), bsin(), batan(),
-batan2(), bmuladd(), bexp(), bnok(), from_hex(), from_oct(), and
-from_bin(), as_oct()
-
-=item New Core Modules
-
-=item Module changes
-
-C<assertions>, C<base>, C<strict> and C<warnings>, C<warnings>, C<less>,
-C<Attribute::Handlers>, C<B::Lint>, C<B>, C<Thread>
-
-=back
-
-=item Utility Changes
-
-=over 4
-
-=item C<cpanp>
-
-=item C<cpan2dist>
-
-=item C<pod2html>
-
-=back
-
-=item Documentation
-
-=over 4
-
-=item New manpage, perlunifaq
-
-=back
-
-=item Performance Enhancements
-
-=item Installation and Configuration Improvements
-
-=over 4
-
-=item C++ compatibility
-
-=item Visual C++
-
-=item Static build on Win32
-
-=item win32 builds
-
-=item C<d_pseudofork> and C<d_printf_format_null>
-
-=item Help
-
-=item 64bit systems
-
-=item Ports
-
-=back
-
-=item Selected Bug Fixes
-
-=item New or Changed Diagnostics
-
-=over 4
-
-=item Deprecations
-
-=back
-
-=item Changed Internals
-
-=item Known Problems
-
-=over 4
-
-=item Platform Specific Problems
-
-=back
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl594delta - what is new for perl v5.9.4
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=over 4
-
-=item chdir FOO
-
-=item Handling of pmc files
-
-=item @- and @+ in patterns
-
-=item $AUTOLOAD can now be tainted
-
-=back
-
-=item Core Enhancements
-
-=over 4
-
-=item state() variables
-
-=item UNIVERSAL::DOES()
-
-=item Exceptions in constant folding
-
-=item Source filters in @INC
-
-=item MAD
-
-=back
-
-=item Modules and Pragmas
-
-=over 4
-
-=item New Core Modules
-
-=back
-
-=item Utility Changes
-
-=over 4
-
-=item config_data
-
-=back
-
-=item Documentation
-
-=over 4
-
-=item New manpage, perlpragma
-
-=item New manpage, perlreguts
-
-=item New manpage, perlunitut
-
-=back
-
-=item Performance Enhancements
-
-=over 4
-
-=item Memory optimisations
-
-=item UTF-8 cache optimisation
-
-=item Regular expressions
-
-Engine de-recursivised, Single char char-classes treated as literals, Trie
-optimisation of literal string alternations, Aho-Corasick start-point
-optimisation
-
-=item Sloppy stat on Windows
-
-=back
-
-=item Installation and Configuration Improvements
-
-=over 4
-
-=item Relocatable installations
-
-=item Ports
-
-=item Compilation improvements
-
-=item New probes
-
-=item Windows build improvements
-
-Building XS extensions, Support for 64-bit compiler
-
-=back
-
-=item Selected Bug Fixes
-
-=over 4
-
-=item PERL5SHELL and tainting
-
-=item Using *FILE{IO}
-
-=item Overloading and reblessing
-
-=item Overloading and UTF-8
-
-=item eval memory leaks fixed
-
-=item Random device on Windows
-
-=back
-
-=item New or Changed Diagnostics
-
-State variable %s will be reinitialized
-
-=item Changed Internals
-
-=item Known Problems
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl593delta - what is new for perl v5.9.3
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=over 4
-
-=item Parsing of C<-f _>
-
-=item C<mkdir()>
-
-=item Magic goto and eval
-
-=item C<$#> has been removed
-
-=item C<:unique>
-
-=item Scoping of the C<sort> pragma
-
-=back
-
-=item Core Enhancements
-
-=over 4
-
-=item The C<feature> pragma
-
-=item Switch and Smart Match operator
-
-=item C<say()>
-
-=item C<CLONE_SKIP()>
-
-=item C<${^CHILD_ERROR_NATIVE}>
-
-=item Assertions
-
-=item Unicode Character Database 4.1.0
-
-=item C<no VERSION>
-
-=item Recursive sort subs
-
-=item Effect of pragmas in eval
-
-=item New B<-E> command-line switch
-
-=item C<chdir>, C<chmod> and C<chown> on filehandles
-
-=item OS groups
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item New Core Modules
-
-=back
-
-=item Utility Changes
-
-=over 4
-
-=item C<ptar>
-
-=item C<ptardiff>
-
-=item C<shasum>
-
-=item C<h2xs> enhancements
-
-=item C<perlivp> enhancements
-
-=back
-
-=item Documentation
-
-=over 4
-
-=item Perl Glossary
-
-=back
-
-=item Performance Enhancements
-
-=over 4
-
-=item XS-assisted SWASHGET
-
-=item Constant subroutines
-
-=item C<PERL_DONT_CREATE_GVSV>
-
-=item Weak references are cheaper
-
-=item sort() enhancements
-
-=back
-
-=item Installation and Configuration Improvements
-
-=over 4
-
-=item Compilation improvements
-
-=item New Or Improved Platforms
-
-=item New probes
-
-=item Module auxiliary files
-
-=back
-
-=item Selected Bug Fixes
-
-=over 4
-
-=item C<defined $$x>
-
-=item Calling CORE::require()
-
-=item Subscripts of slices
-
-=item Remove over-optimisation
-
-=item sprintf() fixes
-
-=item no warnings 'category' works correctly with -w
-
-=item Smaller fixes
-
-=item More Unicode Fixes
-
-=back
-
-=item New or Changed Diagnostics
-
-=over 4
-
-=item Attempt to set length of freed array
-
-=item Non-string passed as bitmask
-
-=item Search pattern not terminated or ternary operator parsed as search
-pattern
-
-=item "%s" variable %s masks earlier declaration
-
-=item readdir()/closedir()/etc. attempted on invalid dirhandle
-
-=back
-
-=item Changed Internals
-
-=over 4
-
-=item B:: modules inheritance changed
-
-=back
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl592delta - what is new for perl v5.9.2
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=over 4
-
-=item Packing and UTF-8 strings
-
-=item Miscellaneous
-
-=back
-
-=item Core Enhancements
-
-=over 4
-
-=item Malloc wrapping
-
-=item Unicode Character Database 4.0.1
-
-=item suidperl less insecure
-
-=item PERLIO_DEBUG
-
-=item Formats
-
-=item Unicode Character Classes
-
-=item Byte-order modifiers for pack() and unpack()
-
-=item Byte count feature in pack()
-
-=item New variables
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item New modules
-
-=item Updated And Improved Modules and Pragmata
-
-B::Concise, Socket, Sys::Syslog, threads
-
-=back
-
-=item Utility Changes
-
-=item Performance Enhancements
-
-=item Installation and Configuration Improvements
-
-=item Selected Bug Fixes
-
-=item New or Changed Diagnostics
-
-=item Changed Internals
-
-=item Known Problems
-
-=item Plans for the next release
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl591delta - what is new for perl v5.9.1
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=over 4
-
-=item substr() lvalues are no longer fixed-length
-
-=item The C<:unique> attribute is only meaningful for globals
-
-=back
-
-=item Core Enhancements
-
-=over 4
-
-=item Lexical C<$_>
-
-=item Tied hashes in scalar context
-
-=item Formats
-
-=item Stacked filetest operators
-
-=back
-
-=item Modules and Pragmata
-
-Benchmark, Carp, Exporter, FindBin, List::Util, threads::shared
-
-=item Utility Changes
-
-=item Documentation
-
-=item Performance Enhancements
-
-=item Selected Bug Fixes
-
-=over 4
-
-=item UTF-8 bugs
-
-=item Threading bugs
-
-=item More bugs
-
-=back
-
-=item New or Changed Diagnostics
-
-=item Changed Internals
-
-=over 4
-
-=item Reordering of SVt_* constants
-
-=item Removal of CPP symbols
-
-=item Less space is used by ops
-
-=item New parser
-
-=back
-
-=item Configuration and Building
-
-=item Known Problems
-
-=over 4
-
-=item Platform Specific Problems
-
-=back
-
-=item To-do for perl 5.10.0
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl590delta - what is new for perl v5.9.0
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=over 4
-
-=item Hash Randomisation
-
-=item UTF-8 On Filehandles No Longer Activated By Locale
-
-=item Single-number v-strings are no longer v-strings before "=>"
-
-=item (Win32) The -C Switch Has Been Repurposed
-
-=item (Win32) The /d Switch Of cmd.exe
-
-=item The C<$*> variable has been removed
-
-=back
-
-=item Core Enhancements
-
-=over 4
-
-=item Assertions
-
-=item Defined-or operators
-
-=item UTF-8 no longer default under UTF-8 locales
-
-=item Unsafe signals again available
-
-=item Tied Arrays with Negative Array Indices
-
-=item local ${$x}
-
-=item Unicode Character Database 4.0.0
-
-=item Miscellaneous Enhancements
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item Updated Modules And Pragmata
-
-base, B::Bytecode, B::Concise, B::Deparse, Benchmark, ByteLoader, bytes,
-CGI, charnames, CPAN, Data::Dumper, DB_File, Devel::PPPort, Digest::MD5,
-Encode, fields, libnet, Math::BigInt, MIME::Base64, NEXT, Net::Ping,
-PerlIO::scalar, podlators, Pod::LaTeX, PodParsers, Pod::Perldoc,
-Scalar::Util, Storable, strict, Term::ANSIcolor, Test::Harness, Test::More,
-Test::Simple, Text::Balanced, Time::HiRes, threads, threads::shared,
-Unicode::Collate, Unicode::Normalize, Win32::GetFolderPath,
-Win32::GetOSVersion
-
-=back
-
-=item Utility Changes
-
-=item New Documentation
-
-=item Performance Enhancements
-
-=item Installation and Configuration Improvements
-
-=over 4
-
-=item Platform-specific enhancements
-
-=back
-
-=item Selected Bug Fixes
-
-=over 4
-
-=item Closures, eval and lexicals
-
-=item Generic fixes
-
-=item Platform-specific fixes
-
-=back
-
-=item New or Changed Diagnostics
-
-=over 4
-
-=item Changed "A thread exited while %d threads were running"
-
-=item Removed "Attempt to clear a restricted hash"
-
-=item New "Illegal declaration of anonymous subroutine"
-
-=item Changed "Invalid range "%s" in transliteration operator"
-
-=item New "Missing control char name in \c"
-
-=item New "Newline in left-justified string for %s"
-
-=item New "Possible precedence problem on bitwise %c operator"
-
-=item New "read() on %s filehandle %s"
-
-=item New "Tied variable freed while still in use"
-
-=item New "To%s: illegal mapping '%s'"
-
-=item New "Use of freed value in iteration"
-
-=back
-
-=item Changed Internals
-
-=item New Tests
-
-=item Known Problems
-
-=over 4
-
-=item Tied hashes in scalar context
-
-=item Net::Ping 450_service and 510_ping_udp failures
-
-=item B::C
-
-=back
-
-=item Platform Specific Problems
-
-=over 4
-
-=item EBCDIC Platforms
-
-=item Cygwin 1.5 problems
-
-=item HP-UX: HP cc warnings about sendfile and sendpath
-
-=item IRIX: t/uni/tr_7jis.t falsely failing
-
-=item Mac OS X: no usemymalloc
-
-=item Tru64: No threaded builds with GNU cc (gcc)
-
-=item Win32: sysopen, sysread, syswrite
-
-=back
-
-=item TODO
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl588delta - what is new for perl v5.8.8
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=item Core Enhancements
-
-=item Modules and Pragmata
-
-=item Utility Changes
-
-=over 4
-
-=item C<h2xs> enhancements
-
-=item C<perlivp> enhancements
-
-=back
-
-=item New Documentation
-
-=item Performance Enhancements
-
-=item Installation and Configuration Improvements
-
-=item Selected Bug Fixes
-
-=over 4
-
-=item no warnings 'category' works correctly with -w
-
-=item Remove over-optimisation
-
-=item sprintf() fixes
-
-=item Debugger and Unicode slowdown
-
-=item Smaller fixes
-
-=back
-
-=item New or Changed Diagnostics
-
-=over 4
-
-=item Attempt to set length of freed array
-
-=item Non-string passed as bitmask
-
-=item Search pattern not terminated or ternary operator parsed as search
-pattern
-
-=back
-
-=item Changed Internals
-
-=item Platform Specific Problems
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl587delta - what is new for perl v5.8.7
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=item Core Enhancements
-
-=over 4
-
-=item Unicode Character Database 4.1.0
-
-=item suidperl less insecure
-
-=item Optional site customization script
-
-=item C<Config.pm> is now much smaller.
-
-=back
-
-=item Modules and Pragmata
-
-=item Utility Changes
-
-=over 4
-
-=item find2perl enhancements
-
-=back
-
-=item Performance Enhancements
-
-=item Installation and Configuration Improvements
-
-=item Selected Bug Fixes
-
-=item New or Changed Diagnostics
-
-=item Changed Internals
-
-=item Known Problems
-
-=item Platform Specific Problems
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl586delta - what is new for perl v5.8.6
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=item Core Enhancements
-
-=item Modules and Pragmata
-
-=item Utility Changes
-
-=item Performance Enhancements
-
-=item Selected Bug Fixes
-
-=item New or Changed Diagnostics
-
-=item Changed Internals
-
-=item New Tests
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl585delta - what is new for perl v5.8.5
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=item Core Enhancements
-
-=item Modules and Pragmata
-
-=item Utility Changes
-
-=over 4
-
-=item Perl's debugger
-
-=item h2ph
-
-=back
-
-=item Installation and Configuration Improvements
-
-=item Selected Bug Fixes
-
-=item New or Changed Diagnostics
-
-=item Changed Internals
-
-=item Known Problems
-
-=item Platform Specific Problems
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl584delta - what is new for perl v5.8.4
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=item Core Enhancements
-
-=over 4
-
-=item Malloc wrapping
-
-=item Unicode Character Database 4.0.1
-
-=item suidperl less insecure
-
-=item format
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item Updated modules
-
-Attribute::Handlers, B, Benchmark, CGI, Carp, Cwd, Exporter, File::Find,
-IO, IPC::Open3, Local::Maketext, Math::BigFloat, Math::BigInt,
-Math::BigRat, MIME::Base64, ODBM_File, POSIX, Shell, Socket, Storable,
-Switch, Sys::Syslog, Term::ANSIColor, Time::HiRes, Unicode::UCD, Win32,
-base, open, threads, utf8
-
-=back
-
-=item Performance Enhancements
-
-=item Utility Changes
-
-=item Installation and Configuration Improvements
-
-=item Selected Bug Fixes
-
-=item New or Changed Diagnostics
-
-=item Changed Internals
-
-=item Future Directions
-
-=item Platform Specific Problems
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl583delta - what is new for perl v5.8.3
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=item Core Enhancements
-
-=item Modules and Pragmata
-
-CGI, Cwd, Digest, Digest::MD5, Encode, File::Spec, FindBin, List::Util,
-Math::BigInt, PodParser, Pod::Perldoc, POSIX, Unicode::Collate,
-Unicode::Normalize, Test::Harness, threads::shared
-
-=item Utility Changes
-
-=item New Documentation
-
-=item Installation and Configuration Improvements
-
-=item Selected Bug Fixes
-
-=item New or Changed Diagnostics
-
-=item Changed Internals
-
-=item Configuration and Building
-
-=item Platform Specific Problems
-
-=item Known Problems
-
-=item Future Directions
-
-=item Obituary
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl582delta - what is new for perl v5.8.2
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=item Core Enhancements
-
-=over 4
-
-=item Hash Randomisation
-
-=item Threading
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item Updated Modules And Pragmata
-
-Devel::PPPort, Digest::MD5, I18N::LangTags, libnet, MIME::Base64,
-Pod::Perldoc, strict, Tie::Hash, Time::HiRes, Unicode::Collate,
-Unicode::Normalize, UNIVERSAL
-
-=back
-
-=item Selected Bug Fixes
-
-=item Changed Internals
-
-=item Platform Specific Problems
-
-=item Future Directions
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl581delta - what is new for perl v5.8.1
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=over 4
-
-=item Hash Randomisation
-
-=item UTF-8 On Filehandles No Longer Activated By Locale
-
-=item Single-number v-strings are no longer v-strings before "=>"
-
-=item (Win32) The -C Switch Has Been Repurposed
-
-=item (Win32) The /d Switch Of cmd.exe
-
-=back
-
-=item Core Enhancements
-
-=over 4
-
-=item UTF-8 no longer default under UTF-8 locales
-
-=item Unsafe signals again available
-
-=item Tied Arrays with Negative Array Indices
-
-=item local ${$x}
-
-=item Unicode Character Database 4.0.0
-
-=item Deprecation Warnings
-
-=item Miscellaneous Enhancements
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item Updated Modules And Pragmata
-
-base, B::Bytecode, B::Concise, B::Deparse, Benchmark, ByteLoader, bytes,
-CGI, charnames, CPAN, Data::Dumper, DB_File, Devel::PPPort, Digest::MD5,
-Encode, fields, libnet, Math::BigInt, MIME::Base64, NEXT, Net::Ping,
-PerlIO::scalar, podlators, Pod::LaTeX, PodParsers, Pod::Perldoc,
-Scalar::Util, Storable, strict, Term::ANSIcolor, Test::Harness, Test::More,
-Test::Simple, Text::Balanced, Time::HiRes, threads, threads::shared,
-Unicode::Collate, Unicode::Normalize, Win32::GetFolderPath,
-Win32::GetOSVersion
-
-=back
-
-=item Utility Changes
-
-=item New Documentation
-
-=item Installation and Configuration Improvements
-
-=over 4
-
-=item Platform-specific enhancements
-
-=back
-
-=item Selected Bug Fixes
-
-=over 4
-
-=item Closures, eval and lexicals
-
-=item Generic fixes
-
-=item Platform-specific fixes
-
-=back
-
-=item New or Changed Diagnostics
-
-=over 4
-
-=item Changed "A thread exited while %d threads were running"
-
-=item Removed "Attempt to clear a restricted hash"
-
-=item New "Illegal declaration of anonymous subroutine"
-
-=item Changed "Invalid range "%s" in transliteration operator"
-
-=item New "Missing control char name in \c"
-
-=item New "Newline in left-justified string for %s"
-
-=item New "Possible precedence problem on bitwise %c operator"
-
-=item New "Pseudo-hashes are deprecated"
-
-=item New "read() on %s filehandle %s"
-
-=item New "5.005 threads are deprecated"
-
-=item New "Tied variable freed while still in use"
-
-=item New "To%s: illegal mapping '%s'"
-
-=item New "Use of freed value in iteration"
-
-=back
-
-=item Changed Internals
-
-=item New Tests
-
-=item Known Problems
-
-=over 4
-
-=item Tied hashes in scalar context
-
-=item Net::Ping 450_service and 510_ping_udp failures
-
-=item B::C
-
-=back
-
-=item Platform Specific Problems
-
-=over 4
-
-=item EBCDIC Platforms
-
-=item Cygwin 1.5 problems
-
-=item HP-UX: HP cc warnings about sendfile and sendpath
-
-=item IRIX: t/uni/tr_7jis.t falsely failing
-
-=item Mac OS X: no usemymalloc
-
-=item Tru64: No threaded builds with GNU cc (gcc)
-
-=item Win32: sysopen, sysread, syswrite
-
-=back
-
-=item Future Directions
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl58delta - what is new for perl v5.8.0
-
-=over 4
-
-=item DESCRIPTION
-
-=item Highlights In 5.8.0
-
-=item Incompatible Changes
-
-=over 4
-
-=item Binary Incompatibility
-
-=item 64-bit platforms and malloc
-
-=item AIX Dynaloading
-
-=item Attributes for C<my> variables now handled at run-time
-
-=item Socket Extension Dynamic in VMS
-
-=item IEEE-format Floating Point Default on OpenVMS Alpha
-
-=item New Unicode Semantics (no more C<use utf8>, almost)
-
-=item New Unicode Properties
-
-=item REF(...) Instead Of SCALAR(...)
-
-=item pack/unpack D/F recycled
-
-=item glob() now returns filenames in alphabetical order
-
-=item Deprecations
-
-=back
-
-=item Core Enhancements
-
-=over 4
-
-=item Unicode Overhaul
-
-=item PerlIO is Now The Default
-
-=item ithreads
-
-=item Restricted Hashes
-
-=item Safe Signals
-
-=item Understanding of Numbers
-
-=item Arrays now always interpolate into double-quoted strings [561]
-
-=item Miscellaneous Changes
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item New Modules and Pragmata
-
-=item Updated And Improved Modules and Pragmata
-
-=back
-
-=item Utility Changes
-
-=item New Documentation
-
-=item Performance Enhancements
-
-=item Installation and Configuration Improvements
-
-=over 4
-
-=item Generic Improvements
-
-=item New Or Improved Platforms
-
-=back
-
-=item Selected Bug Fixes
-
-=over 4
-
-=item Platform Specific Changes and Fixes
-
-=back
-
-=item New or Changed Diagnostics
-
-=item Changed Internals
-
-=item Security Vulnerability Closed [561]
-
-=item New Tests
-
-=item Known Problems
-
-=over 4
-
-=item The Compiler Suite Is Still Very Experimental
-
-=item Localising Tied Arrays and Hashes Is Broken
-
-=item Building Extensions Can Fail Because Of Largefiles
-
-=item Modifying $_ Inside for(..)
-
-=item mod_perl 1.26 Doesn't Build With Threaded Perl
-
-=item lib/ftmp-security tests warn 'system possibly insecure'
-
-=item libwww-perl (LWP) fails base/date #51
-
-=item PDL failing some tests
-
-=item Perl_get_sv
-
-=item Self-tying Problems
-
-=item ext/threads/t/libc
-
-=item Failure of Thread (5.005-style) tests
-
-=item Timing problems
-
-=item Tied/Magical Array/Hash Elements Do Not Autovivify
-
-=item Unicode in package/class and subroutine names does not work
-
-=back
-
-=item Platform Specific Problems
-
-=over 4
-
-=item AIX
-
-=item Alpha systems with old gccs fail several tests
-
-=item AmigaOS
-
-=item BeOS
-
-=item Cygwin "unable to remap"
-
-=item Cygwin ndbm tests fail on FAT
-
-=item DJGPP Failures
-
-=item FreeBSD built with ithreads coredumps reading large directories
-
-=item FreeBSD Failing locale Test 117 For ISO 8859-15 Locales
-
-=item IRIX fails ext/List/Util/t/shuffle.t or Digest::MD5
-
-=item HP-UX lib/posix Subtest 9 Fails When LP64-Configured
-
-=item Linux with glibc 2.2.5 fails t/op/int subtest #6 with -Duse64bitint
-
-=item Linux With Sfio Fails op/misc Test 48
-
-=item Mac OS X
-
-=item Mac OS X dyld undefined symbols
-
-=item OS/2 Test Failures
-
-=item op/sprintf tests 91, 129, and 130
-
-=item SCO
-
-=item Solaris 2.5
-
-=item Solaris x86 Fails Tests With -Duse64bitint
-
-=item SUPER-UX (NEC SX)
-
-=item Term::ReadKey not working on Win32
-
-=item UNICOS/mk
-
-=item UTS
-
-=item VOS (Stratus)
-
-=item VMS
-
-=item Win32
-
-=item XML::Parser not working
-
-=item z/OS (OS/390)
-
-=item Unicode Support on EBCDIC Still Spotty
-
-=item Seen In Perl 5.7 But Gone Now
-
-=back
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 perl573delta - what's new for perl v5.7.3
-
-=over 4
-
-=item DESCRIPTION
-
-=item Changes
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 perl572delta - what's new for perl v5.7.2
-
-=over 4
-
-=item DESCRIPTION
-
-=item Security Vulnerability Closed
-
-=item Incompatible Changes
-
-=over 4
-
-=item 64-bit platforms and malloc
-
-=item AIX Dynaloading
-
-=item Socket Extension Dynamic in VMS
-
-=item Different Definition of the Unicode Character Classes \p{In...}
-
-=item Deprecations
-
-=back
-
-=item Core Enhancements
-
-=item Modules and Pragmata
-
-=over 4
-
-=item New Modules and Distributions
-
-=item Updated And Improved Modules and Pragmata
-
-=back
-
-=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 Source Code Enhancements
-
-=over 4
-
-=item MAGIC constants
-
-=item Better commented code
-
-=item Regex pre-/post-compilation items matched up
-
-=item gcc -Wall
-
-=back
-
-=item New Tests
-
-=item Known Problems
-
-=over 4
-
-=item AIX
-
-=item Amiga Perl Invoking Mystery
-
-=item lib/ftmp-security tests warn 'system possibly insecure'
-
-=item Cygwin intermittent failures of lib/Memoize/t/expire_file 11 and 12
-
-=item HP-UX lib/io_multihomed Fails When LP64-Configured
-
-=item HP-UX lib/posix Subtest 9 Fails When LP64-Configured
-
-=item Linux With Sfio Fails op/misc Test 48
-
-=item OS/390
-
-=item op/sprintf tests 129 and 130
-
-=item Failure of Thread tests
-
-=item UNICOS
-
-=item UTS
-
-=item VMS
-
-=item Win32
-
-=item Localising a Tied Variable Leaks Memory
-
-=item Self-tying of Arrays and Hashes Is Forbidden
-
-=item Variable Attributes are not Currently Usable for Tieing
-
-=item Building Extensions Can Fail Because Of Largefiles
-
-=item The Compiler Suite Is Still Experimental
-
-=item The Long Double Support 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
-
-=item DESCRIPTION
-
-=item Security Vulnerability Closed
-
-=item Incompatible Changes
-
-=item Core Enhancements
-
-=over 4
-
-=item AUTOLOAD Is Now Lvaluable
-
-=item PerlIO is Now The Default
-
-=item Signals Are Now Safe
-
-=back
-
-=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
-
-=over 4
-
-=item perlclib
-
-=item perliol
-
-=item README.aix
-
-=item README.bs2000
-
-=item README.macos
-
-=item README.mpeix
-
-=item README.solaris
-
-=item README.vos
-
-=item Porting/repository.pod
-
-=back
-
-=item Installation and Configuration Improvements
-
-=over 4
-
-=item New Or Improved Platforms
-
-=item Generic Improvements
-
-d_cmsghdr, d_fcntl_can_lock, d_fsync, d_getitimer, d_getpagsz, d_msghdr_s,
-need_va_copy, d_readv, d_recvmsg, d_sendmsg, sig_size, d_sockatmark,
-d_strtoq, d_u32align, d_ualarm, d_usleep
-
-=back
-
-=item Selected Bug Fixes
-
-=over 4
-
-=item Platform Specific Changes and Fixes
-
-=back
-
-=item New or Changed Diagnostics
-
-=item Changed Internals
-
-=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 perl570delta - what's new for perl v5.7.0
-
-=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 Utility Changes
-
-=item New Documentation
-
-=item Performance Enhancements
-
-=item Installation and Configuration Improvements
-
-=over 4
-
-=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
-
-=item Known Problems
-
-=over 4
-
-=item Unicode Support Still Far From Perfect
-
-=item EBCDIC Still A Lost Platform
-
-=item Building Extensions Can Fail Because Of Largefiles
-
-=item ftmp-security tests warn 'system possibly insecure'
-
-=item Test lib/posix Subtest 9 Fails In LP64-Configured HP-UX
-
-=item Long Doubles Still Don't Work In Solaris
-
-=item Linux With Sfio Fails op/misc Test 48
-
-=item Storable tests fail in some platforms
-
-=item Threads Are Still Experimental
-
-=item The Compiler Suite Is Still Experimental
-
-=back
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 perl561delta - what's new for perl v5.6.x
-
-=over 4
-
-=item DESCRIPTION
-
-=item Summary of changes between 5.6.0 and 5.6.1
-
-=over 4
-
-=item Security Issues
-
-=item Core bug fixes
-
-C<UNIVERSAL::isa()>, Memory leaks, Numeric conversions, qw(a\\b), caller(),
-Bugs in regular expressions, "slurp" mode, Autovivification of symbolic
-references to special variables, Lexical warnings, Spurious warnings and
-errors, glob(), Tainting, sort(), #line directives, Subroutine prototypes,
-map(), Debugger, PERL5OPT, chop(), Unicode support, 64-bit support,
-Compiler, Lvalue subroutines, IO::Socket, File::Find, xsubpp, C<no
-Module;>, Tests
-
-=item Core features
-
-=item Configuration issues
-
-=item Documentation
-
-=item Bundled modules
-
-B::Concise, File::Temp, Pod::LaTeX, Pod::Text::Overstrike, CGI, CPAN,
-Class::Struct, DB_File, Devel::Peek, File::Find, Getopt::Long, IO::Poll,
-IPC::Open3, Math::BigFloat, Math::Complex, Net::Ping, Opcode, Pod::Parser,
-Pod::Text, SDBM_File, Sys::Syslog, Tie::RefHash, Tie::SubstrHash
-
-=item Platform-specific improvements
-
-NCR MP-RAS, NonStop-UX
-
-=back
-
-=item Core Enhancements
-
-=over 4
-
-=item Interpreter cloning, threads, and concurrency
-
-=item Lexically scoped warning categories
-
-=item Unicode and UTF-8 support
-
-=item Support for interpolating named characters
-
-=item "our" declarations
-
-=item Support for strings represented as a vector of ordinals
-
-=item Improved Perl version numbering system
-
-=item New syntax for declaring subroutine attributes
-
-=item File and directory handles can be autovivified
-
-=item open() with more than two arguments
-
-=item 64-bit support
-
-=item Large file support
-
-=item Long doubles
-
-=item "more bits"
-
-=item Enhanced support for sort() subroutines
-
-=item C<sort $coderef @foo> allowed
-
-=item File globbing implemented internally
-
-=item Support for CHECK blocks
-
-=item POSIX character class syntax [: :] supported
-
-=item Better pseudo-random number generator
-
-=item Improved C<qw//> operator
-
-=item Better worst-case behavior of hashes
-
-=item pack() format 'Z' supported
-
-=item pack() format modifier '!' supported
-
-=item pack() and unpack() support counted strings
-
-=item Comments in pack() templates
-
-=item Weak references
-
-=item Binary numbers supported
-
-=item Lvalue subroutines
-
-=item Some arrows may be omitted in calls through references
-
-=item Boolean assignment operators are legal lvalues
-
-=item exists() is supported on subroutine names
-
-=item exists() and delete() are supported on array elements
-
-=item Pseudo-hashes work better
-
-=item Automatic flushing of output buffers
-
-=item Better diagnostics on meaningless filehandle operations
-
-=item Where possible, buffered data discarded from duped input filehandle
-
-=item eof() has the same old magic as <>
-
-=item binmode() can be used to set :crlf and :raw modes
-
-=item C<-T> filetest recognizes UTF-8 encoded files as "text"
-
-=item system(), backticks and pipe open now reflect exec() failure
-
-=item Improved diagnostics
-
-=item Diagnostics follow STDERR
-
-=item More consistent close-on-exec behavior
-
-=item syswrite() ease-of-use
-
-=item Better syntax checks on parenthesized unary operators
-
-=item Bit operators support full native integer width
-
-=item Improved security features
-
-=item More functional bareword prototype (*)
-
-=item C<require> and C<do> may be overridden
-
-=item $^X variables may now have names longer than one character
-
-=item New variable $^C reflects C<-c> switch
-
-=item New variable $^V contains Perl version as a string
-
-=item Optional Y2K warnings
-
-=item Arrays now always interpolate into double-quoted strings
-
-=item @- and @+ provide starting/ending offsets of regex submatches
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item Modules
-
-attributes, B, Benchmark, ByteLoader, constant, charnames, Data::Dumper,
-DB, DB_File, Devel::DProf, Devel::Peek, Dumpvalue, DynaLoader, English,
-Env, Fcntl, File::Compare, File::Find, File::Glob, File::Spec,
-File::Spec::Functions, Getopt::Long, IO, JPL, lib, Math::BigInt,
-Math::Complex, Math::Trig, Pod::Parser, Pod::InputObjects, Pod::Checker,
-podchecker, Pod::ParseUtils, Pod::Find, Pod::Select, podselect, Pod::Usage,
-pod2usage, Pod::Text and Pod::Man, SDBM_File, Sys::Syslog, Sys::Hostname,
-Term::ANSIColor, Time::Local, Win32, XSLoader, DBM Filters
-
-=item Pragmata
-
-=back
-
-=item Utility Changes
-
-=over 4
-
-=item dprofpp
-
-=item find2perl
-
-=item h2xs
-
-=item perlcc
-
-=item perldoc
-
-=item The Perl Debugger
-
-=back
-
-=item Improved Documentation
-
-perlapi.pod, perlboot.pod, perlcompile.pod, perldbmfilter.pod,
-perldebug.pod, perldebguts.pod, perlfork.pod, perlfilter.pod, perlhack.pod,
-perlintern.pod, perllexwarn.pod, perlnumber.pod, perlopentut.pod,
-perlreftut.pod, perltootc.pod, perltodo.pod, perlunicode.pod
-
-=item Performance enhancements
-
-=over 4
-
-=item Simple sort() using { $a <=> $b } and the like are optimized
-
-=item Optimized assignments to lexical variables
-
-=item Faster subroutine calls
-
-=item delete(), each(), values() and hash iteration are faster
-
-=back
-
-=item Installation and Configuration Improvements
-
-=over 4
-
-=item -Dusethreads means something different
-
-=item New Configure flags
-
-=item Threadedness and 64-bitness now more daring
-
-=item Long Doubles
-
-=item -Dusemorebits
-
-=item -Duselargefiles
-
-=item installusrbinperl
-
-=item SOCKS support
-
-=item C<-A> flag
-
-=item Enhanced Installation Directories
-
-=item gcc automatically tried if 'cc' does not seem to be working
-
-=back
-
-=item Platform specific changes
-
-=over 4
-
-=item Supported platforms
-
-=item DOS
-
-=item OS390 (OpenEdition MVS)
-
-=item VMS
-
-=item Win32
-
-=back
-
-=item Significant bug fixes
-
-=over 4
-
-=item <HANDLE> on empty files
-
-=item C<eval '...'> improvements
-
-=item All compilation errors are true errors
-
-=item Implicitly closed filehandles are safer
-
-=item Behavior of list slices is more consistent
-
-=item C<(\$)> prototype and C<$foo{a}>
-
-=item C<goto &sub> and AUTOLOAD
-
-=item C<-bareword> allowed under C<use integer>
-
-=item Failures in DESTROY()
-
-=item Locale bugs fixed
-
-=item Memory leaks
-
-=item Spurious subroutine stubs after failed subroutine calls
-
-=item Taint failures under C<-U>
-
-=item END blocks and the C<-c> switch
-
-=item Potential to leak DATA filehandles
-
-=back
-
-=item New or Changed Diagnostics
-
-"%s" variable %s masks earlier declaration in same %s, "my sub" not yet
-implemented, "our" variable %s redeclared, '!' allowed only after types %s,
-/ cannot take a count, / must be followed by a, A or Z, / must be followed
-by a*, A* or Z*, / must follow a numeric type, /%s/: Unrecognized escape
-\\%c passed through, /%s/: Unrecognized escape \\%c in character class
-passed through, /%s/ should probably be written as "%s", %s() called too
-early to check prototype, %s argument is not a HASH or ARRAY element, %s
-argument is not a HASH or ARRAY element or slice, %s argument is not a
-subroutine name, %s package attribute may clash with future reserved word:
-%s, (in cleanup) %s, <> should be quotes, Attempt to join self, Bad evalled
-substitution pattern, Bad realloc() ignored, Bareword found in conditional,
-Binary number > 0b11111111111111111111111111111111 non-portable, Bit vector
-size > 32 non-portable, Buffer overflow in prime_env_iter: %s, Can't check
-filesystem of script "%s", Can't declare class for non-scalar %s in "%s",
-Can't declare %s in "%s", Can't ignore signal CHLD, forcing to default,
-Can't modify non-lvalue subroutine call, Can't read CRTL environ, Can't
-remove %s: %s, skipping file, Can't return %s from lvalue subroutine, Can't
-weaken a nonreference, Character class [:%s:] unknown, Character class
-syntax [%s] belongs inside character classes, Constant is not %s reference,
-constant(%s): %s, CORE::%s is not a keyword, defined(@array) is deprecated,
-defined(%hash) is deprecated, Did not produce a valid header, (Did you mean
-"local" instead of "our"?), Document contains no data, entering effective
-%s failed, false [] range "%s" in regexp, Filehandle %s opened only for
-output, flock() on closed filehandle %s, Global symbol "%s" requires
-explicit package name, Hexadecimal number > 0xffffffff non-portable,
-Ill-formed CRTL environ value "%s", Ill-formed message in prime_env_iter:
-|%s|, Illegal binary digit %s, Illegal binary digit %s ignored, Illegal
-number of bits in vec, Integer overflow in %s number, Invalid %s attribute:
-%s, Invalid %s attributes: %s, invalid [] range "%s" in regexp, Invalid
-separator character %s in attribute list, Invalid separator character %s in
-subroutine attribute list, leaving effective %s failed, Lvalue subs
-returning %s not implemented yet, Method %s not permitted, Missing
-%sbrace%s on \N{}, Missing command in piped open, Missing name in "my sub",
-No %s specified for -%c, No package name allowed for variable %s in "our",
-No space allowed after -%c, no UTC offset information; assuming local time
-is UTC, Octal number > 037777777777 non-portable, panic: del_backref,
-panic: kid popen errno read, panic: magic_killbackrefs, Parentheses missing
-around "%s" list, Possible unintended interpolation of %s in string,
-Possible Y2K bug: %s, pragma "attrs" is deprecated, use "sub NAME : ATTRS"
-instead, Premature end of script headers, Repeat count in pack overflows,
-Repeat count in unpack overflows, realloc() of freed memory ignored,
-Reference is already weak, setpgrp can't take arguments, Strange *+?{} on
-zero-length expression, switching effective %s is not implemented, This
-Perl can't reset CRTL environ elements (%s), This Perl can't set CRTL
-environ elements (%s=%s), Too late to run %s block, Unknown open() mode
-'%s', Unknown process %x sent message to prime_env_iter: %s, Unrecognized
-escape \\%c passed through, Unterminated attribute parameter in attribute
-list, Unterminated attribute list, Unterminated attribute parameter in
-subroutine attribute list, Unterminated subroutine attribute list, Value of
-CLI symbol "%s" too long, Version number must be a constant number
-
-=item New tests
-
-=item Incompatible Changes
-
-=over 4
-
-=item Perl Source Incompatibilities
-
-CHECK is a new keyword, Treatment of list slices of undef has changed,
-Format of $English::PERL_VERSION is different, Literals of the form
-C<1.2.3> parse differently, Possibly changed pseudo-random number
-generator, Hashing function for hash keys has changed, C<undef> fails on
-read only values, Close-on-exec bit may be set on pipe and socket handles,
-Writing C<"$$1"> to mean C<"${$}1"> is unsupported, delete(), each(),
-values() and C<\(%h)>, vec(EXPR,OFFSET,BITS) enforces powers-of-two BITS,
-Text of some diagnostic output has changed, C<%@> has been removed,
-Parenthesized not() behaves like a list operator, Semantics of bareword
-prototype C<(*)> have changed, Semantics of bit operators may have changed
-on 64-bit platforms, More builtins taint their results
-
-=item C Source Incompatibilities
-
-C<PERL_POLLUTE>, C<PERL_IMPLICIT_CONTEXT>, C<PERL_POLLUTE_MALLOC>
-
-=item Compatible C Source API Changes
-
-C<PATCHLEVEL> is now C<PERL_VERSION>
-
-=item Binary Incompatibilities
-
-=back
-
-=item Known Problems
-
-=over 4
-
-=item Localizing a tied hash element may leak memory
-
-=item Known test failures
-
-=item EBCDIC platforms not fully supported
-
-=item UNICOS/mk CC failures during Configure run
-
-=item Arrow operator and arrays
-
-=item Experimental features
-
-Threads, Unicode, 64-bit support, Lvalue subroutines, Weak references, The
-pseudo-hash data type, The Compiler suite, Internal implementation of file
-globbing, The DB module, The regular expression code constructs:
-
-=back
-
-=item Obsolete Diagnostics
-
-Character class syntax [: :] is reserved for future extensions, Ill-formed
-logical name |%s| in prime_env_iter, In string, @%s now must be written as
-\@%s, Probable precedence problem on %s, regexp too big, Use of "$$<digit>"
-to mean "${$}<digit>" is deprecated
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 perl56delta - what's new for perl v5.6.0
-
-=over 4
-
-=item DESCRIPTION
-
-=item Core Enhancements
-
-=over 4
-
-=item Interpreter cloning, threads, and concurrency
-
-=item Lexically scoped warning categories
-
-=item Unicode and UTF-8 support
-
-=item Support for interpolating named characters
-
-=item "our" declarations
-
-=item Support for strings represented as a vector of ordinals
-
-=item Improved Perl version numbering system
-
-=item New syntax for declaring subroutine attributes
-
-=item File and directory handles can be autovivified
-
-=item open() with more than two arguments
-
-=item 64-bit support
-
-=item Large file support
-
-=item Long doubles
-
-=item "more bits"
-
-=item Enhanced support for sort() subroutines
-
-=item C<sort $coderef @foo> allowed
-
-=item File globbing implemented internally
-
-=item Support for CHECK blocks
-
-=item POSIX character class syntax [: :] supported
-
-=item Better pseudo-random number generator
-
-=item Improved C<qw//> operator
-
-=item Better worst-case behavior of hashes
-
-=item pack() format 'Z' supported
-
-=item pack() format modifier '!' supported
-
-=item pack() and unpack() support counted strings
-
-=item Comments in pack() templates
-
-=item Weak references
-
-=item Binary numbers supported
-
-=item Lvalue subroutines
-
-=item Some arrows may be omitted in calls through references
-
-=item Boolean assignment operators are legal lvalues
-
-=item exists() is supported on subroutine names
-
-=item exists() and delete() are supported on array elements
-
-=item Pseudo-hashes work better
-
-=item Automatic flushing of output buffers
-
-=item Better diagnostics on meaningless filehandle operations
-
-=item Where possible, buffered data discarded from duped input filehandle
-
-=item eof() has the same old magic as <>
-
-=item binmode() can be used to set :crlf and :raw modes
-
-=item C<-T> filetest recognizes UTF-8 encoded files as "text"
-
-=item system(), backticks and pipe open now reflect exec() failure
-
-=item Improved diagnostics
-
-=item Diagnostics follow STDERR
-
-=item More consistent close-on-exec behavior
-
-=item syswrite() ease-of-use
-
-=item Better syntax checks on parenthesized unary operators
-
-=item Bit operators support full native integer width
-
-=item Improved security features
-
-=item More functional bareword prototype (*)
-
-=item C<require> and C<do> may be overridden
-
-=item $^X variables may now have names longer than one character
-
-=item New variable $^C reflects C<-c> switch
-
-=item New variable $^V contains Perl version as a string
-
-=item Optional Y2K warnings
-
-=item Arrays now always interpolate into double-quoted strings
-
-=item @- and @+ provide starting/ending offsets of regex matches
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item Modules
-
-attributes, B, Benchmark, ByteLoader, constant, charnames, Data::Dumper,
-DB, DB_File, Devel::DProf, Devel::Peek, Dumpvalue, DynaLoader, English,
-Env, Fcntl, File::Compare, File::Find, File::Glob, File::Spec,
-File::Spec::Functions, Getopt::Long, IO, JPL, lib, Math::BigInt,
-Math::Complex, Math::Trig, Pod::Parser, Pod::InputObjects, Pod::Checker,
-podchecker, Pod::ParseUtils, Pod::Find, Pod::Select, podselect, Pod::Usage,
-pod2usage, Pod::Text and Pod::Man, SDBM_File, Sys::Syslog, Sys::Hostname,
-Term::ANSIColor, Time::Local, Win32, XSLoader, DBM Filters
-
-=item Pragmata
-
-=back
-
-=item Utility Changes
-
-=over 4
-
-=item dprofpp
-
-=item find2perl
-
-=item h2xs
-
-=item perlcc
-
-=item perldoc
-
-=item The Perl Debugger
-
-=back
-
-=item Improved Documentation
-
-perlapi.pod, perlboot.pod, perlcompile.pod, perldbmfilter.pod,
-perldebug.pod, perldebguts.pod, perlfork.pod, perlfilter.pod, perlhack.pod,
-perlintern.pod, perllexwarn.pod, perlnumber.pod, perlopentut.pod,
-perlreftut.pod, perltootc.pod, perltodo.pod, perlunicode.pod
-
-=item Performance enhancements
-
-=over 4
-
-=item Simple sort() using { $a <=> $b } and the like are optimized
-
-=item Optimized assignments to lexical variables
-
-=item Faster subroutine calls
-
-=item delete(), each(), values() and hash iteration are faster
-
-=back
-
-=item Installation and Configuration Improvements
-
-=over 4
-
-=item -Dusethreads means something different
-
-=item New Configure flags
-
-=item Threadedness and 64-bitness now more daring
-
-=item Long Doubles
-
-=item -Dusemorebits
-
-=item -Duselargefiles
-
-=item installusrbinperl
-
-=item SOCKS support
-
-=item C<-A> flag
-
-=item Enhanced Installation Directories
-
-=back
-
-=item Platform specific changes
-
-=over 4
-
-=item Supported platforms
-
-=item DOS
-
-=item OS390 (OpenEdition MVS)
-
-=item VMS
-
-=item Win32
-
-=back
-
-=item Significant bug fixes
-
-=over 4
-
-=item <HANDLE> on empty files
-
-=item C<eval '...'> improvements
-
-=item All compilation errors are true errors
-
-=item Implicitly closed filehandles are safer
-
-=item Behavior of list slices is more consistent
-
-=item C<(\$)> prototype and C<$foo{a}>
-
-=item C<goto &sub> and AUTOLOAD
-
-=item C<-bareword> allowed under C<use integer>
-
-=item Failures in DESTROY()
-
-=item Locale bugs fixed
-
-=item Memory leaks
-
-=item Spurious subroutine stubs after failed subroutine calls
-
-=item Taint failures under C<-U>
-
-=item END blocks and the C<-c> switch
-
-=item Potential to leak DATA filehandles
-
-=back
-
-=item New or Changed Diagnostics
-
-"%s" variable %s masks earlier declaration in same %s, "my sub" not yet
-implemented, "our" variable %s redeclared, '!' allowed only after types %s,
-/ cannot take a count, / must be followed by a, A or Z, / must be followed
-by a*, A* or Z*, / must follow a numeric type, /%s/: Unrecognized escape
-\\%c passed through, /%s/: Unrecognized escape \\%c in character class
-passed through, /%s/ should probably be written as "%s", %s() called too
-early to check prototype, %s argument is not a HASH or ARRAY element, %s
-argument is not a HASH or ARRAY element or slice, %s argument is not a
-subroutine name, %s package attribute may clash with future reserved word:
-%s, (in cleanup) %s, <> should be quotes, Attempt to join self, Bad evalled
-substitution pattern, Bad realloc() ignored, Bareword found in conditional,
-Binary number > 0b11111111111111111111111111111111 non-portable, Bit vector
-size > 32 non-portable, Buffer overflow in prime_env_iter: %s, Can't check
-filesystem of script "%s", Can't declare class for non-scalar %s in "%s",
-Can't declare %s in "%s", Can't ignore signal CHLD, forcing to default,
-Can't modify non-lvalue subroutine call, Can't read CRTL environ, Can't
-remove %s: %s, skipping file, Can't return %s from lvalue subroutine, Can't
-weaken a nonreference, Character class [:%s:] unknown, Character class
-syntax [%s] belongs inside character classes, Constant is not %s reference,
-constant(%s): %s, CORE::%s is not a keyword, defined(@array) is deprecated,
-defined(%hash) is deprecated, Did not produce a valid header, (Did you mean
-"local" instead of "our"?), Document contains no data, entering effective
-%s failed, false [] range "%s" in regexp, Filehandle %s opened only for
-output, flock() on closed filehandle %s, Global symbol "%s" requires
-explicit package name, Hexadecimal number > 0xffffffff non-portable,
-Ill-formed CRTL environ value "%s", Ill-formed message in prime_env_iter:
-|%s|, Illegal binary digit %s, Illegal binary digit %s ignored, Illegal
-number of bits in vec, Integer overflow in %s number, Invalid %s attribute:
-%s, Invalid %s attributes: %s, invalid [] range "%s" in regexp, Invalid
-separator character %s in attribute list, Invalid separator character %s in
-subroutine attribute list, leaving effective %s failed, Lvalue subs
-returning %s not implemented yet, Method %s not permitted, Missing
-%sbrace%s on \N{}, Missing command in piped open, Missing name in "my sub",
-No %s specified for -%c, No package name allowed for variable %s in "our",
-No space allowed after -%c, no UTC offset information; assuming local time
-is UTC, Octal number > 037777777777 non-portable, panic: del_backref,
-panic: kid popen errno read, panic: magic_killbackrefs, Parentheses missing
-around "%s" list, Possible unintended interpolation of %s in string,
-Possible Y2K bug: %s, pragma "attrs" is deprecated, use "sub NAME : ATTRS"
-instead, Premature end of script headers, Repeat count in pack overflows,
-Repeat count in unpack overflows, realloc() of freed memory ignored,
-Reference is already weak, setpgrp can't take arguments, Strange *+?{} on
-zero-length expression, switching effective %s is not implemented, This
-Perl can't reset CRTL environ elements (%s), This Perl can't set CRTL
-environ elements (%s=%s), Too late to run %s block, Unknown open() mode
-'%s', Unknown process %x sent message to prime_env_iter: %s, Unrecognized
-escape \\%c passed through, Unterminated attribute parameter in attribute
-list, Unterminated attribute list, Unterminated attribute parameter in
-subroutine attribute list, Unterminated subroutine attribute list, Value of
-CLI symbol "%s" too long, Version number must be a constant number
-
-=item New tests
-
-=item Incompatible Changes
-
-=over 4
-
-=item Perl Source Incompatibilities
-
-CHECK is a new keyword, Treatment of list slices of undef has changed,
-Format of $English::PERL_VERSION is different, Literals of the form
-C<1.2.3> parse differently, Possibly changed pseudo-random number
-generator, Hashing function for hash keys has changed, C<undef> fails on
-read only values, Close-on-exec bit may be set on pipe and socket handles,
-Writing C<"$$1"> to mean C<"${$}1"> is unsupported, delete(), each(),
-values() and C<\(%h)>, vec(EXPR,OFFSET,BITS) enforces powers-of-two BITS,
-Text of some diagnostic output has changed, C<%@> has been removed,
-Parenthesized not() behaves like a list operator, Semantics of bareword
-prototype C<(*)> have changed, Semantics of bit operators may have changed
-on 64-bit platforms, More builtins taint their results
-
-=item C Source Incompatibilities
-
-C<PERL_POLLUTE>, C<PERL_IMPLICIT_CONTEXT>, C<PERL_POLLUTE_MALLOC>
-
-=item Compatible C Source API Changes
-
-C<PATCHLEVEL> is now C<PERL_VERSION>
-
-=item Binary Incompatibilities
-
-=back
-
-=item Known Problems
-
-=over 4
-
-=item Thread test failures
-
-=item EBCDIC platforms not supported
-
-=item In 64-bit HP-UX the lib/io_multihomed test may hang
-
-=item NEXTSTEP 3.3 POSIX test failure
-
-=item Tru64 (aka Digital UNIX, aka DEC OSF/1) lib/sdbm test failure with
-gcc
-
-=item UNICOS/mk CC failures during Configure run
-
-=item Arrow operator and arrays
-
-=item Experimental features
-
-Threads, Unicode, 64-bit support, Lvalue subroutines, Weak references, The
-pseudo-hash data type, The Compiler suite, Internal implementation of file
-globbing, The DB module, The regular expression code constructs:
-
-=back
-
-=item Obsolete Diagnostics
-
-Character class syntax [: :] is reserved for future extensions, Ill-formed
-logical name |%s| in prime_env_iter, In string, @%s now must be written as
-\@%s, Probable precedence problem on %s, regexp too big, Use of "$$<digit>"
-to mean "${$}<digit>" is deprecated
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 perl5005delta - what's new for perl5.005
-
-=over 4
-
-=item DESCRIPTION
-
-=item About the new versioning system
-
-=item Incompatible Changes
-
-=over 4
-
-=item WARNING: This version is not binary compatible with Perl 5.004.
-
-=item Default installation structure has changed
-
-=item Perl Source Compatibility
-
-=item C Source Compatibility
-
-=item Binary Compatibility
-
-=item Security fixes may affect compatibility
-
-=item Relaxed new mandatory warnings introduced in 5.004
-
-=item Licensing
-
-=back
-
-=item Core Changes
-
-=over 4
-
-=item Threads
-
-=item Compiler
-
-=item Regular Expressions
-
-Many new and improved optimizations, Many bug fixes, New regular expression
-constructs, New operator for precompiled regular expressions, Other
-improvements, Incompatible changes
-
-=item Improved malloc()
-
-=item Quicksort is internally implemented
-
-=item Reliable signals
-
-=item Reliable stack pointers
-
-=item More generous treatment of carriage returns
-
-=item Memory leaks
-
-=item Better support for multiple interpreters
-
-=item Behavior of local() on array and hash elements is now well-defined
-
-=item C<%!> is transparently tied to the L<Errno> module
-
-=item Pseudo-hashes are supported
-
-=item C<EXPR foreach EXPR> is supported
-
-=item Keywords can be globally overridden
-
-=item C<$^E> is meaningful on Win32
-
-=item C<foreach (1..1000000)> optimized
-
-=item C<Foo::> can be used as implicitly quoted package name
-
-=item C<exists $Foo::{Bar::}> tests existence of a package
-
-=item Better locale support
-
-=item Experimental support for 64-bit platforms
-
-=item prototype() returns useful results on builtins
-
-=item Extended support for exception handling
-
-=item Re-blessing in DESTROY() supported for chaining DESTROY() methods
-
-=item All C<printf> format conversions are handled internally
-
-=item New C<INIT> keyword
-
-=item New C<lock> keyword
-
-=item New C<qr//> operator
-
-=item C<our> is now a reserved word
-
-=item Tied arrays are now fully supported
-
-=item Tied handles support is better
-
-=item 4th argument to substr
-
-=item Negative LENGTH argument to splice
-
-=item Magic lvalues are now more magical
-
-=item <> now reads in records
-
-=back
-
-=item Supported Platforms
-
-=over 4
-
-=item New Platforms
-
-=item Changes in existing support
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item New Modules
-
-B, Data::Dumper, Dumpvalue, Errno, File::Spec, ExtUtils::Installed,
-ExtUtils::Packlist, Fatal, IPC::SysV, Test, Tie::Array, Tie::Handle,
-Thread, attrs, fields, re
-
-=item Changes in existing modules
-
-Benchmark, Carp, CGI, Fcntl, Math::Complex, Math::Trig, POSIX, DB_File,
-MakeMaker, CPAN, Cwd
-
-=back
-
-=item Utility Changes
-
-=item Documentation Changes
-
-=item New Diagnostics
-
-Ambiguous call resolved as CORE::%s(), qualify as such or use &, Bad index
-while coercing array into hash, Bareword "%s" refers to nonexistent
-package, Can't call method "%s" on an undefined value, Can't check
-filesystem of script "%s" for nosuid, Can't coerce array into hash, Can't
-goto subroutine from an eval-string, Can't localize pseudo-hash element,
-Can't use %%! because Errno.pm is not available, Cannot find an opnumber
-for "%s", Character class syntax [. .] is reserved for future extensions,
-Character class syntax [: :] is reserved for future extensions, Character
-class syntax [= =] is reserved for future extensions, %s: Eval-group in
-insecure regular expression, %s: Eval-group not allowed, use re 'eval', %s:
-Eval-group not allowed at run time, Explicit blessing to '' (assuming
-package main), Illegal hex digit ignored, No such array field, No such
-field "%s" in variable %s of type %s, Out of memory during ridiculously
-large request, Range iterator outside integer range, Recursive inheritance
-detected while looking for method '%s' %s, Reference found where even-sized
-list expected, Undefined value assigned to typeglob, Use of reserved word
-"%s" is deprecated, perl: warning: Setting locale failed
-
-=item Obsolete Diagnostics
-
-Can't mktemp(), Can't write to temp file for B<-e>: %s, Cannot open
-temporary file, regexp too big
-
-=item Configuration Changes
-
-=item BUGS
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 perl5004delta - what's new for perl5.004
-
-=over 4
-
-=item DESCRIPTION
-
-=item Supported Environments
-
-=item Core Changes
-
-=over 4
-
-=item List assignment to %ENV works
-
-=item Change to "Can't locate Foo.pm in @INC" error
-
-=item Compilation option: Binary compatibility with 5.003
-
-=item $PERL5OPT environment variable
-
-=item Limitations on B<-M>, B<-m>, and B<-T> options
-
-=item More precise warnings
-
-=item Deprecated: Inherited C<AUTOLOAD> for non-methods
-
-=item Previously deprecated %OVERLOAD is no longer usable
-
-=item Subroutine arguments created only when they're modified
-
-=item Group vector changeable with C<$)>
-
-=item Fixed parsing of $$<digit>, &$<digit>, etc.
-
-=item Fixed localization of $<digit>, $&, etc.
-
-=item No resetting of $. on implicit close
-
-=item C<wantarray> may return undef
-
-=item C<eval EXPR> determines value of EXPR in scalar context
-
-=item Changes to tainting checks
-
-No glob() or <*>, No spawning if tainted $CDPATH, $ENV, $BASH_ENV, No
-spawning if tainted $TERM doesn't look like a terminal name
-
-=item New Opcode module and revised Safe module
-
-=item Embedding improvements
-
-=item Internal change: FileHandle class based on IO::* classes
-
-=item Internal change: PerlIO abstraction interface
-
-=item New and changed syntax
-
-$coderef->(PARAMS)
-
-=item New and changed builtin constants
-
-__PACKAGE__
-
-=item New and changed builtin variables
-
-$^E, $^H, $^M
-
-=item New and changed builtin functions
-
-delete on slices, flock, printf and sprintf, keys as an lvalue, my() in
-Control Structures, pack() and unpack(), sysseek(), use VERSION, use Module
-VERSION LIST, prototype(FUNCTION), srand, $_ as Default, C<m//gc> does not
-reset search position on failure, C<m//x> ignores whitespace before ?*+{},
-nested C<sub{}> closures work now, formats work right on changing lexicals
-
-=item New builtin methods
-
-isa(CLASS), can(METHOD), VERSION( [NEED] )
-
-=item TIEHANDLE now supported
-
-TIEHANDLE classname, LIST, PRINT this, LIST, PRINTF this, LIST, READ this
-LIST, READLINE this, GETC this, DESTROY this
-
-=item Malloc enhancements
-
--DPERL_EMERGENCY_SBRK, -DPACK_MALLOC, -DTWO_POT_OPTIMIZE
-
-=item Miscellaneous efficiency enhancements
-
-=back
-
-=item Support for More Operating Systems
-
-=over 4
-
-=item Win32
-
-=item Plan 9
-
-=item QNX
-
-=item AmigaOS
-
-=back
-
-=item Pragmata
-
-use autouse MODULE => qw(sub1 sub2 sub3), use blib, use blib 'dir', use
-constant NAME => VALUE, use locale, use ops, use vmsish
-
-=item Modules
-
-=over 4
-
-=item Required Updates
-
-=item Installation directories
-
-=item Module information summary
-
-=item Fcntl
-
-=item IO
-
-=item Math::Complex
-
-=item Math::Trig
-
-=item DB_File
-
-=item Net::Ping
-
-=item Object-oriented overrides for builtin operators
-
-=back
-
-=item Utility Changes
-
-=over 4
-
-=item pod2html
-
-Sends converted HTML to standard output
-
-=item xsubpp
-
-C<void> XSUBs now default to returning nothing
-
-=back
-
-=item C Language API Changes
-
-C<gv_fetchmethod> and C<perl_call_sv>, C<perl_eval_pv>, Extended API for
-manipulating hashes
-
-=item Documentation Changes
-
-L<perldelta>, L<perlfaq>, L<perllocale>, L<perltoot>, L<perlapio>,
-L<perlmodlib>, L<perldebug>, L<perlsec>
-
-=item New Diagnostics
-
-"my" variable %s masks earlier declaration in same scope, %s argument is
-not a HASH element or slice, Allocation too large: %lx, Allocation too
-large, Applying %s to %s will act on scalar(%s), Attempt to free
-nonexistent shared string, Attempt to use reference as lvalue in substr,
-Bareword "%s" refers to nonexistent package, Can't redefine active sort
-subroutine %s, Can't use bareword ("%s") as %s ref while "strict refs" in
-use, Cannot resolve method `%s' overloading `%s' in package `%s', Constant
-subroutine %s redefined, Constant subroutine %s undefined, Copy method did
-not return a reference, Died, Exiting pseudo-block via %s, Identifier too
-long, Illegal character %s (carriage return), Illegal switch in PERL5OPT:
-%s, Integer overflow in hex number, Integer overflow in octal number,
-internal error: glob failed, Invalid conversion in %s: "%s", Invalid type
-in pack: '%s', Invalid type in unpack: '%s', Name "%s::%s" used only once:
-possible typo, Null picture in formline, Offset outside string, Out of
-memory!, Out of memory during request for %s, panic: frexp, Possible
-attempt to put comments in qw() list, Possible attempt to separate words
-with commas, Scalar value @%s{%s} better written as $%s{%s}, Stub found
-while resolving method `%s' overloading `%s' in %s, Too late for "B<-T>"
-option, untie attempted while %d inner references still exist, Unrecognized
-character %s, Unsupported function fork, Use of "$$<digit>" to mean
-"${$}<digit>" is deprecated, Value of %s can be "0"; test with defined(),
-Variable "%s" may be unavailable, Variable "%s" will not stay shared,
-Warning: something's wrong, Ill-formed logical name |%s| in prime_env_iter,
-Got an error from DosAllocMem, Malformed PERLLIB_PREFIX, PERL_SH_DIR too
-long, Process terminated by SIG%s
-
-=item BUGS
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 perlartistic - the Perl Artistic License
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item The "Artistic License"
-
-=over 4
-
-=item Preamble
-
-=item Definitions
-
-"Package", "Standard Version", "Copyright Holder", "You", "Reasonable
-copying fee", "Freely Available"
-
-=item Conditions
-
-a), b), c), d), a), b), c), d)
-
-=back
-
-=back
-
-=head2 perlgpl - the GNU General Public License, version 2
-
-=over 4
-
-=item SYNOPSIS
-
-=back
-
-=over 4
-
-=item DESCRIPTION
-
-=item GNU GENERAL PUBLIC LICENSE
-
-=back
-
-=head2 perlaix, README.aix - Perl version 5 on IBM Unix (AIX) systems
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Compiling Perl 5 on AIX
-
-=item OS level
-
-=item Building Dynamic Extensions on AIX
-
-=item The IBM ANSI C Compiler
-
-=item The usenm option
-
-=item Using GNU's gcc for building perl
-
-=item Using Large Files with Perl
-
-=item Threaded Perl
-
-=item 64-bit Perl
-
-=item AIX 4.2 and extensions using C++ with statics
-
-=back
-
-=item AUTHOR
-
-=item DATE
-
-=back
-
-=head2 perlamiga - Perl under Amiga OS
-
-=over 4
-
-=item NOTE
-
-=item SYNOPSIS
-
-=back
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Prerequisites for Compiling Perl on AmigaOS
-
-B<Unix emulation for AmigaOS: ixemul.library>, B<Version of Amiga OS>
-
-=item Starting Perl programs under AmigaOS
-
-=item Shortcomings of Perl under AmigaOS
-
-=back
-
-=item INSTALLATION
-
-=item Accessing documentation
-
-=over 4
-
-=item Manpages for Perl on AmigaOS
-
-=item Perl HTML Documentation on AmigaOS
-
-=item Perl GNU Info Files on AmigaOS
-
-=item Perl LaTeX Documentation on AmigaOS
-
-=back
-
-=item BUILDING PERL ON AMIGAOS
-
-=over 4
-
-=item Build Prerequisites for Perl on AmigaOS
-
-=item Getting the Perl Source for AmigaOS
-
-=item Making Perl on AmigaOS
-
-=item Testing Perl on AmigaOS
-
-=item Installing the built Perl on AmigaOS
-
-=back
-
-=item PERL 5.8.0 BROKEN IN AMIGAOS
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=back
-
-=head2 perlapollo, README.apollo - Perl version 5 on Apollo DomainOS
-
-=over 4
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=back
-
-=head2 perlbeos, README.beos - Perl version 5.8+ on BeOS
-
-=over 4
-
-=item DESCRIPTION
-
-=item BUILD AND INSTALL
-
-=over 4
-
-=item Requirements
-
-=item Configure
-
-=item Build
-
-=item Install
-
-=back
-
-=item KNOWN PROBLEMS
-
-=item CONTACT
-
-=back
-
-=head2 perlbs2000, README.BS2000 - building and installing Perl for BS2000.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item gzip on BS2000
-
-=item bison on BS2000
-
-=item Unpacking Perl Distribution on BS2000
-
-=item Compiling Perl on BS2000
-
-=item Testing Perl on BS2000
-
-=item Installing Perl on BS2000
-
-=item Using Perl in the Posix-Shell of BS2000
-
-=item Using Perl in "native" BS2000
-
-=item Floating point anomalies on BS2000
-
-=item Using PerlIO and different encodings on ASCII and EBCDIC partitions
-
-=back
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=over 4
-
-=item Mailing list
-
-=back
-
-=item HISTORY
-
-=back
-
-=head2 perlce - Perl for WinCE
-
-=over 4
-
-=item Building Perl for WinCE
-
-=over 4
-
-=item DESCRIPTION
-
-=item General explanations on cross-compiling WinCE
-
-=item BUILD
-
-Microsoft Embedded Visual Tools, Microsoft Visual C++, Rainer Keuchel's
-celib-sources, Rainer Keuchel's console-sources, go to C<./win32>
-subdirectory, edit file C<./win32/ce-helpers/compile.bat>, run
-compile.bat, run compile.bat dist
-
-=back
-
-=item Using Perl on WinCE
-
-=over 4
-
-=item DESCRIPTION
-
-=item LIMITATIONS
-
-=item ENVIRONMENT
-
-PERL5LIB, PATH, TMP, UNIXROOTPATH, ROWS/COLS, HOME, CONSOLEFONTSIZE
-
-=item REGISTRY
-
-=item XS
-
-=item BUGS
-
-=item INSTALLATION
-
-=back
-
-=item ACKNOWLEDGEMENTS
-
-=item History of WinCE port
-
-=item AUTHORS
-
-Rainer Keuchel <coyxc at rainer-keuchel.de>, Vadim Konovalov
-
-=back
-
-=head2 perlcygwin, README.cygwin - Perl for Cygwin
-
-=over 4
-
-=item SYNOPSIS
-
-=item PREREQUISITES FOR COMPILING PERL ON CYGWIN
-
-=over 4
-
-=item Cygwin = GNU+Cygnus+Windows (Don't leave UNIX without it)
-
-=item Cygwin Configuration
-
-C<PATH>, I<nroff>, Permissions
-
-=back
-
-=item CONFIGURE PERL ON CYGWIN
-
-=over 4
-
-=item Stripping Perl Binaries on Cygwin
-
-=item Optional Libraries for Perl on Cygwin
-
-C<-lcrypt>, C<-lgdbm_compat> (C<use GDBM_File>), C<-ldb> (C<use DB_File>),
-C<cygserver> (C<use IPC::SysV>), C<-lutil>
-
-=item Configure-time Options for Perl on Cygwin
-
-C<-Uusedl>, C<-Uusemymalloc>, C<-Uuseperlio>, C<-Dusemultiplicity>,
-C<-Duse64bitint>, C<-Duselongdouble>, C<-Dusethreads>, C<-Duselargefiles>,
-C<-Dmksymlinks>
-
-=item Suspicious Warnings on Cygwin
-
-Win9x and C<d_eofnblk>, Compiler/Preprocessor defines
-
-=back
-
-=item MAKE ON CYGWIN
-
-=item TEST ON CYGWIN
-
-=over 4
-
-=item File Permissions on Cygwin
-
-=item NDBM_File and ODBM_File do not work on FAT filesystems
-
-=item C<fork()> failures in io_* tests
-
-=back
-
-=item Specific features of the Cygwin port
-
-=over 4
-
-=item Script Portability on Cygwin
-
-Pathnames, Text/Binary, PerlIO, F<.exe>, Cygwin vs. Windows process ids,
-Cygwin vs. Windows errors, C<chown()>, Miscellaneous
-
-=item Prebuilt methods:
-
-C<Cwd::cwd>, C<Cygwin::pid_to_winpid>, C<Cygwin::winpid_to_pid>,
-C<Cygwin::win_to_posix_path>, C<Cygwin::posix_to_win_path>,
-C<Cygwin::mount_table()>, C<Cygwin::mount_flags>, C<Cygwin::is_binmount>
-
-=back
-
-=item INSTALL PERL ON CYGWIN
-
-=item MANIFEST ON CYGWIN
-
-Documentation, Build, Configure, Make, Install, Tests, Compiled Perl
-Source, Compiled Module Source, Perl Modules/Scripts, Perl Module Tests
-
-=item BUGS ON CYGWIN
-
-=item AUTHORS
-
-=item HISTORY
-
-=back
-
-=head2 perldgux - Perl under DG/UX.
-
-=over 4
-
-=item SYNOPSIS
-
-=back
-
-=over 4
-
-=item DESCRIPTION
-
-=item BUILDING PERL ON DG/UX
-
-=over 4
-
-=item Non-threaded Perl on DG/UX
-
-=item Threaded Perl on DG/UX
-
-=item Testing Perl on DG/UX
-
-=item Installing the built perl on DG/UX
-
-=back
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 perldos - Perl under DOS, W31, W95.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Prerequisites for Compiling Perl on DOS
-
-DJGPP, Pthreads
-
-=item Shortcomings of Perl under DOS
-
-=item Building Perl on DOS
-
-=item Testing Perl on DOS
-
-=item Installation of Perl on DOS
-
-=back
-
-=item BUILDING AND INSTALLING MODULES ON DOS
-
-=over 4
-
-=item Building Prerequisites for Perl on DOS
-
-=item Unpacking CPAN Modules on DOS
-
-=item Building Non-XS Modules on DOS
-
-=item Building XS Modules on DOS
-
-=back
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 perlepoc, README.epoc - Perl for EPOC
-
-=over 4
-
-=item SYNOPSIS
-
-=item INTRODUCTION
-
-=item INSTALLING PERL ON EPOC
-
-=item STARTING PERL ON EPOC
-
-=over 4
-
-=item Editors on Epoc
-
-=item Features of Perl on Epoc
-
-=item Restrictions of Perl on Epoc
-
-=item Compiling Perl 5 on the EPOC cross compiling environment
-
-=back
-
-=item SUPPORT STATUS OF PERL ON EPOC
-
-=item AUTHOR
-
-=item LAST UPDATE
-
-=back
-
-=head2 perlfreebsd, README.freebsd - Perl version 5 on FreeBSD systems
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item FreeBSD core dumps from readdir_r with ithreads
-
-=item $^X doesn't always contain a full path in FreeBSD
-
-=item Perl will no longer be part of "base FreeBSD"
-
-=back
-
-=item AUTHOR
-
-=back
-
-=head2 perlhpux, README.hpux - Perl version 5 on Hewlett-Packard Unix
-(HP-UX) systems
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Using perl as shipped with HP-UX
-
-=item Using perl from HP's porting centre
-
-=item Compiling Perl 5 on HP-UX
-
-=item PA-RISC
-
-=item Portability Between PA-RISC Versions
-
-=item PA-RISC 1.0
-
-=item PA-RISC 1.1
-
-=item PA-RISC 2.0
-
-=item Itanium Processor Family (IPF) and HP-UX
-
-=item Itanium, Itanium 2 & Madison 6
-
-=item Building Dynamic Extensions on HP-UX
-
-=item The HP ANSI C Compiler
-
-=item The GNU C Compiler
-
-=item Using Large Files with Perl on HP-UX
-
-=item Threaded Perl on HP-UX
-
-=item 64-bit Perl on HP-UX
-
-=item Oracle on HP-UX
-
-=item GDBM and Threads on HP-UX
-
-=item NFS filesystems and utime(2) on HP-UX
-
-=item perl -P and // and HP-UX
-
-=item HP-UX Kernel Parameters (maxdsiz) for Compiling Perl
-
-=back
-
-=item nss_delete core dump from op/pwent or op/grent
-
-=item Miscellaneous
-
-=item AUTHOR
-
-=item DATE
-
-=back
-
-=head2 perlhurd, README.hurd - Perl version 5 on Hurd
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Known Problems with Perl on Hurd
-
-=back
-
-=item AUTHOR
-
-=back
-
-=head2 perlirix, README.irix - Perl version 5 on Irix systems
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Building 32-bit Perl in Irix
-
-=item Building 64-bit Perl in Irix
-
-=item About Compiler Versions of Irix
-
-=item Linker Problems in Irix
-
-=item Malloc in Irix
-
-=item Building with threads in Irix
-
-=item Irix 5.3
-
-=back
-
-=item AUTHOR
-
-=back
-
-=head2 perllinux, README.linux - Perl version 5 on Linux systems
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Experimental Support for Sun Studio Compilers for Linux OS
-
-=back
-
-=item AUTHOR
-
-=back
-
-=head2 perlmachten, README.machten - Perl version 5 on Power MachTen
-systems
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Perl version 5.8.x and greater not supported
-
-=item Compiling Perl 5.6.x on MachTen
-
-=item Failures during C<make test> on MachTen
-
-op/lexassign.t, pragma/warnings.t
-
-=item Building external modules on MachTen
-
-=back
-
-=item AUTHOR
-
-=item DATE
-
-=back
-
-=head2 perlmacos, README.macos - Perl under Mac OS (Classic)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item DATE
-
-=back
-
-=head2 perlmacosx, README.macosx - Perl under Mac OS X
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Installation Prefix
-
-=item SDK support
-
-=item Universal Binary support
-
-=item 64-bit PPC support
-
-=item libperl and Prebinding
-
-=item Updating Apple's Perl
-
-=item Known problems
-
-=item MacPerl
-
-=item Carbon
-
-=item Cocoa
-
-=back
-
-=item Starting From Scratch
-
-=item AUTHOR
-
-=item DATE
-
-=back
-
-=head2 perlmint, README.mint - Perl version 5 on Atari MiNT
-
-=over 4
-
-=item DESCRIPTION
-
-=item Known problems with Perl on MiNT
-
-=item AUTHOR
-
-=back
-
-=head2 perlmpeix, README.mpeix - Perl/iX for HP e3000 MPE
-
-=over 4
-
-=item SYNOPSIS
-
-=item NOTE
-
-=item Binary distribution from HP
-
-=item What's New in Perl for MPE/iX
-
-=item Welcome to Perl/iX
-
-=item System Requirements for Perl/iX
-
-=item How to Obtain Perl/iX
-
-=item Perl/iX Distribution Contents Highlights
-
-README, INSTALL, LIBSHP3K, PERL, .cpan/, lib/, man/,
-public_html/feedback.cgi, src/perl-5.6.0-mpe
-
-=item How to Compile Perl/iX
-
- 4, 6
-
-=item Getting Started with Perl/iX
-
-=item MPE/iX Implementation Considerations
-
-=item Known Perl/iX Bugs Under Investigation
-
-=item Perl/iX To-Do List
-
-=item Perl/iX Change History
-
-=item AUTHOR
-
-=back
-
-=head2 perlnetware - Perl for NetWare
-
-=over 4
-
-=item DESCRIPTION
-
-=item BUILD
-
-=over 4
-
-=item Tools & SDK
-
-=item Setup
-
-SetNWBld.bat, Buildtype.bat
-
-=item Make
-
-=item Interpreter
-
-=item Extensions
-
-=back
-
-=item INSTALL
-
-=item BUILD NEW EXTENSIONS
-
-=item ACKNOWLEDGEMENTS
-
-=item AUTHORS
-
-=item DATE
-
-=back
-
-=head2 perlopenbsd, README.openbsd - Perl version 5 on OpenBSD systems
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item OpenBSD core dumps from getprotobyname_r and getservbyname_r with
-ithreads
-
-=back
-
-=item AUTHOR
-
-=back
-
-=head2 perlos2 - Perl under OS/2, DOS, Win0.3*, Win0.95 and WinNT.
-
-=over 4
-
-=item SYNOPSIS
-
-=back
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Target
-
-=item Other OSes
-
-=item Prerequisites
-
-EMX, RSX, HPFS, pdksh
-
-=item Starting Perl programs under OS/2 (and DOS and...)
-
-=item Starting OS/2 (and DOS) programs under Perl
-
-=back
-
-=item Frequently asked questions
-
-=over 4
-
-=item "It does not work"
-
-=item I cannot run external programs
-
-=item I cannot embed perl into my program, or use F<perl.dll> from my
-program.
-
-Is your program EMX-compiled with C<-Zmt -Zcrtdll>?, Did you use
-L<ExtUtils::Embed>?
-
-=item C<``> and pipe-C<open> do not work under DOS.
-
-=item Cannot start C<find.exe "pattern" file>
-
-=back
-
-=item INSTALLATION
-
-=over 4
-
-=item Automatic binary installation
-
-C<PERL_BADLANG>, C<PERL_BADFREE>, F<Config.pm>
-
-=item Manual binary installation
-
-Perl VIO and PM executables (dynamically linked), Perl_ VIO executable
-(statically linked), Executables for Perl utilities, Main Perl library,
-Additional Perl modules, Tools to compile Perl modules, Manpages for Perl
-and utilities, Manpages for Perl modules, Source for Perl documentation,
-Perl manual in F<.INF> format, Pdksh
-
-=item B<Warning>
-
-=back
-
-=item Accessing documentation
-
-=over 4
-
-=item OS/2 F<.INF> file
-
-=item Plain text
-
-=item Manpages
-
-=item HTML
-
-=item GNU C<info> files
-
-=item F<PDF> files
-
-=item C<LaTeX> docs
-
-=back
-
-=item BUILD
-
-=over 4
-
-=item The short story
-
-=item Prerequisites
-
-=item Getting perl source
-
-=item Application of the patches
-
-=item Hand-editing
-
-=item Making
-
-=item Testing
-
-A lot of C<bad free>, Process terminated by SIGTERM/SIGINT, F<op/fs.t>,
-F<op/stat.t>
-
-=item Installing the built perl
-
-=item C<a.out>-style build
-
-=back
-
-=item Building a binary distribution
-
-=item Building custom F<.EXE> files
-
-=over 4
-
-=item Making executables with a custom collection of statically loaded
-extensions
-
-=item Making executables with a custom search-paths
-
-=back
-
-=item Build FAQ
-
-=over 4
-
-=item Some C</> became C<\> in pdksh.
-
-=item C<'errno'> - unresolved external
-
-=item Problems with tr or sed
-
-=item Some problem (forget which ;-)
-
-=item Library ... not found
-
-=item Segfault in make
-
-=item op/sprintf test failure
-
-=back
-
-=item Specific (mis)features of OS/2 port
-
-=over 4
-
-=item C<setpriority>, C<getpriority>
-
-=item C<system()>
-
-=item C<extproc> on the first line
-
-=item Additional modules:
-
-=item Prebuilt methods:
-
-C<File::Copy::syscopy>, C<DynaLoader::mod2fname>, C<Cwd::current_drive()>,
- C<Cwd::sys_chdir(name)>, C<Cwd::change_drive(name)>,
-C<Cwd::sys_is_absolute(name)>, C<Cwd::sys_is_rooted(name)>,
-C<Cwd::sys_is_relative(name)>, C<Cwd::sys_cwd(name)>,
-C<Cwd::sys_abspath(name, dir)>, C<Cwd::extLibpath([type])>,
-C<Cwd::extLibpath_set( path [, type ] )>,
-C<OS2::Error(do_harderror,do_exception)>, C<OS2::Errors2Drive(drive)>,
-OS2::SysInfo(), OS2::BootDrive(), C<OS2::MorphPM(serve)>,
-C<OS2::UnMorphPM(serve)>, C<OS2::Serve_Messages(force)>,
-C<OS2::Process_Messages(force [, cnt])>, C<OS2::_control87(new,mask)>,
-OS2::get_control87(), C<OS2::set_control87_em(new=MCW_EM,mask=MCW_EM)>,
-C<OS2::DLLname([how [, \&xsub]])>
-
-=item Prebuilt variables:
-
-$OS2::emx_rev, $OS2::emx_env, $OS2::os_ver, $OS2::is_aout, $OS2::can_fork,
-$OS2::nsyserror
-
-=item Misfeatures
-
-=item Modifications
-
-C<popen>, C<tmpnam>, C<tmpfile>, C<ctermid>, C<stat>, C<mkdir>, C<rmdir>,
-C<flock>
-
-=item Identifying DLLs
-
-=item Centralized management of resources
-
-C<HAB>, C<HMQ>, Treating errors reported by OS/2 API,
-C<CheckOSError(expr)>, C<CheckWinError(expr)>, C<SaveWinError(expr)>,
-C<SaveCroakWinError(expr,die,name1,name2)>, C<WinError_2_Perl_rc>,
-C<FillWinError>, C<FillOSError(rc)>, Loading DLLs and ordinals in DLLs
-
-=back
-
-=item Perl flavors
-
-=over 4
-
-=item F<perl.exe>
-
-=item F<perl_.exe>
-
-=item F<perl__.exe>
-
-=item F<perl___.exe>
-
-=item Why strange names?
-
-=item Why dynamic linking?
-
-=item Why chimera build?
-
-=back
-
-=item ENVIRONMENT
-
-=over 4
-
-=item C<PERLLIB_PREFIX>
-
-=item C<PERL_BADLANG>
-
-=item C<PERL_BADFREE>
-
-=item C<PERL_SH_DIR>
-
-=item C<USE_PERL_FLOCK>
-
-=item C<TMP> or C<TEMP>
-
-=back
-
-=item Evolution
-
-=over 4
-
-=item Text-mode filehandles
-
-=item Priorities
-
-=item DLL name mangling: pre 5.6.2
-
-=item DLL name mangling: 5.6.2 and beyond
-
-Global DLLs, specific DLLs, C<BEGINLIBPATH> and C<ENDLIBPATH>, F<.> from
-C<LIBPATH>
-
-=item DLL forwarder generation
-
-=item Threading
-
-=item Calls to external programs
-
-=item Memory allocation
-
-=item Threads
-
-C<COND_WAIT>, F<os2.c>
-
-=back
-
-=item BUGS
-
-=back
-
-=over 4
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 perlos390, README.os390 - building and installing Perl for OS/390
-and z/OS
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Tools
-
-=item Unpacking Perl distribution on OS/390
-
-=item Setup and utilities for Perl on OS/390
-
-=item Configure Perl on OS/390
-
-=item Build, Test, Install Perl on OS/390
-
-=item Build Anomalies with Perl on OS/390
-
-=item Testing Anomalies with Perl on OS/390
-
-=item Installation Anomalies with Perl on OS/390
-
-=item Usage Hints for Perl on OS/390
-
-=item Floating Point Anomalies with Perl on OS/390
-
-=item Modules and Extensions for Perl on OS/390
-
-=back
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=over 4
-
-=item Mailing list for Perl on OS/390
-
-=back
-
-=item HISTORY
-
-=back
-
-=head2 perlos400, README.os400 - Perl version 5 on OS/400
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Compiling Perl for OS/400 PASE
-
-=item Installing Perl in OS/400 PASE
-
-=item Using Perl in OS/400 PASE
-
-=item Known Problems
-
-=item Perl on ILE
-
-=back
-
-=item AUTHORS
-
-=back
-
-=head2 perlplan9 - Plan 9-specific documentation for Perl
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Invoking Perl
-
-=item What's in Plan 9 Perl
-
-=item What's not in Plan 9 Perl
-
-=item Perl5 Functions not currently supported in Plan 9 Perl
-
-=item Signals in Plan 9 Perl
-
-=back
-
-=item COMPILING AND INSTALLING PERL ON PLAN 9
-
-=over 4
-
-=item Installing Perl Documentation on Plan 9
-
-=back
-
-=item BUGS
-
-=item Revision date
-
-=item AUTHOR
-
-=back
-
-=head2 perlqnx, README.qnx - Perl version 5 on QNX
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Required Software for Compiling Perl on QNX4
-
-/bin/sh, ar, nm, cpp, make
-
-=item Outstanding Issues with Perl on QNX4
-
-=item QNX auxiliary files
-
-qnx/ar, qnx/cpp
-
-=item Outstanding issues with perl under QNX6
-
-=back
-
-=item AUTHOR
-
-=back
-
-=head2 perlriscos, README.riscos - Perl version 5 for RISC OS
-
-=over 4
-
-=item DESCRIPTION
-
-=item BUILD
-
-=item AUTHOR
-
-=back
-
-=head2 perlsolaris, README.solaris - Perl version 5 on Solaris systems
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Solaris Version Numbers.
-
-=back
-
-=item RESOURCES
-
-Solaris FAQ, Precompiled Binaries, Solaris Documentation
-
-=item SETTING UP
-
-=over 4
-
-=item File Extraction Problems on Solaris.
-
-=item Compiler and Related Tools on Solaris.
-
-=item Environment for Compiling perl on Solaris
-
-=back
-
-=item RUN CONFIGURE.
-
-=over 4
-
-=item 64-bit perl on Solaris.
-
-=item Threads in perl on Solaris.
-
-=item Malloc Issues with perl on Solaris.
-
-=back
-
-=item MAKE PROBLEMS.
-
-Dynamic Loading Problems With GNU as and GNU ld, ld.so.1: ./perl: fatal:
-relocation error:, dlopen: stub interception failed, #error "No
-DATAMODEL_NATIVE specified", sh: ar: not found
-
-=item MAKE TEST
-
-=over 4
-
-=item op/stat.t test 4 in Solaris
-
-=item nss_delete core dump from op/pwent or op/grent
-
-=back
-
-=item PREBUILT BINARIES OF PERL FOR SOLARIS.
-
-=item RUNTIME ISSUES FOR PERL ON SOLARIS.
-
-=over 4
-
-=item Limits on Numbers of Open Files on Solaris.
-
-=back
-
-=item SOLARIS-SPECIFIC MODULES.
-
-=item SOLARIS-SPECIFIC PROBLEMS WITH MODULES.
-
-=over 4
-
-=item Proc::ProcessTable on Solaris
-
-=item BSD::Resource on Solaris
-
-=item Net::SSLeay on Solaris
-
-=back
-
-=item SunOS 4.x
-
-=item AUTHOR
-
-=back
-
-=head2 perlsymbian, README.symbian - Perl version 5 on Symbian OS
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Compiling Perl on Symbian
-
-=item Compilation problems
-
-=item PerlApp
-
-=item sisify.pl
-
-=item Using Perl in Symbian
-
-=back
-
-=item TO DO
-
-=item WARNING
-
-=item NOTE
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item LICENSE
-
-=item HISTORY
-
-=back
-
-=head2 perltru64, README.tru64 - Perl version 5 on Tru64 (formerly known as
-Digital UNIX formerly known as DEC OSF/1) systems
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Compiling Perl 5 on Tru64
-
-=item Using Large Files with Perl on Tru64
-
-=item Threaded Perl on Tru64
-
-=item Long Doubles on Tru64
-
-=item DB_File tests failing on Tru64
-
-=item 64-bit Perl on Tru64
-
-=item Warnings about floating-point overflow when compiling Perl on Tru64
-
-=back
-
-=item Testing Perl on Tru64
-
-=item ext/ODBM_File/odbm Test Failing With Static Builds
-
-=item Perl Fails Because Of Unresolved Symbol sockatmark
-
-=item AUTHOR
-
-=back
-
-=head2 perluts - Perl under UTS
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUILDING PERL ON UTS
-
-=item Installing the built perl on UTS
-
-=item AUTHOR
-
-=back
-
-=head2 perlvmesa, README.vmesa - building and installing Perl for VM/ESA.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Unpacking Perl Distribution on VM/ESA
-
-=item Setup Perl and utilities on VM/ESA
-
-=item Configure Perl on VM/ESA
-
-=item Testing Anomalies of Perl on VM/ESA
-
-=item Usage Hints for Perl on VM/ESA
-
-=back
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=over 4
-
-=item Mailing list for Perl on VM/ESA
-
-=back
-
-=back
-
-=head2 perlvms - VMS-specific documentation for Perl
-
-=over 4
-
-=item DESCRIPTION
-
-=item Installation
-
-=item Organization of Perl Images
-
-=over 4
-
-=item Core Images
-
-=item Perl Extensions
-
-=item Installing static extensions
-
-=item Installing dynamic extensions
-
-=back
-
-=item File specifications
-
-=over 4
-
-=item Syntax
-
-=item Filename Case
-
-=item Symbolic Links
-
-=item Wildcard expansion
-
-=item Pipes
-
-=back
-
-=item PERL5LIB and PERLLIB
-
-=item The Perl Forked Debugger
-
-=item PERL_VMS_EXCEPTION_DEBUG
-
-=item Command line
-
-=over 4
-
-=item I/O redirection and backgrounding
-
-=item Command line switches
-
--i, -S, -u
-
-=back
-
-=item Perl functions
-
-File tests, backticks, binmode FILEHANDLE, crypt PLAINTEXT, USER, die,
-dump, exec LIST, fork, getpwent, getpwnam, getpwuid, gmtime, kill, qx//,
-select (system call), stat EXPR, system LIST, time, times, unlink LIST,
-utime LIST, waitpid PID,FLAGS
-
-=item Perl variables
-
-%ENV, CRTL_ENV, CLISYM_[LOCAL], Any other string, $!, $^E, $?, $|
-
-=item Standard modules with VMS-specific differences
-
-=over 4
-
-=item SDBM_File
-
-=back
-
-=item Revision date
-
-=item AUTHOR
-
-=back
-
-=head2 perlvos, README.vos - Perl for Stratus VOS
-
-=over 4
-
-=item SYNOPSIS
-
-=item BUILDING PERL FOR VOS
-
-=item INSTALLING PERL IN VOS
-
-=item USING PERL IN VOS
-
-=over 4
-
-=item Restrictions of Perl on VOS
-
-=item Handling of underflow and overflow
-
-=back
-
-=item TEST STATUS
-
-=item SUPPORT STATUS
-
-=item AUTHOR
-
-=item LAST UPDATE
-
-=back
-
-=head2 perlwin32 - Perl under Windows
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Setting Up Perl on Win32
-
-Make, Command Shell, Borland C++, Microsoft Visual C++, Microsoft Visual
-C++ 2008 Express Edition Beta 2, Microsoft Visual C++ 2005 Express Edition,
-Microsoft Visual C++ Toolkit 2003, Microsoft Platform SDK 64-bit Compiler,
-MinGW release 3 with gcc, MinGW release 1 with gcc
-
-=item Building
-
-=item Testing Perl on Win32
-
-=item Installation of Perl on Win32
-
-=item Usage Hints for Perl on Win32
-
-Environment Variables, File Globbing, Using perl from the command line,
-Building Extensions, Command-line Wildcard Expansion, Win32 Specific
-Extensions, Notes on 64-bit Windows
-
-=item Running Perl Scripts
-
-=item Miscellaneous Things
-
-=back
-
-=item BUGS AND CAVEATS
-
-=item ACKNOWLEDGEMENTS
-
-=item AUTHORS
-
-Gary Ng E<lt>71564.1743 at CompuServe.COME<gt>, Gurusamy Sarathy
-E<lt>gsar at activestate.comE<gt>, Nick Ing-Simmons
-E<lt>nick at ing-simmons.netE<gt>, Jan Dubois E<lt>jand at activestate.comE<gt>,
-Steve Hay E<lt>steve.hay at uk.radan.comE<gt>
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head1 PRAGMA DOCUMENTATION
-
-=head2 attrs - set/get attributes of a subroutine (deprecated)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-method, locked
-
-=back
-
-=head2 re - Perl pragma to alter regular expression behaviour
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item 'taint' mode
-
-=item 'eval' mode
-
-=item 'debug' mode
-
-=item 'Debug' mode
-
-Compile related options, COMPILE, PARSE, OPTIMISE, TRIEC, DUMP, Execute
-related options, EXECUTE, MATCH, TRIEE, INTUIT, Extra debugging options,
-EXTRA, BUFFERS, TRIEM, STATE, STACK, OPTIMISEM, OFFSETS, OFFSETSDBG, Other
-useful flags, ALL, All, MORE, More
-
-=item Exportable Functions
-
-is_regexp($ref), regexp_pattern($ref), regmust($ref), regname($name,$all),
-regnames($all), regnames_count()
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 threadshared::shared, threads::shared - Perl extension for sharing
-data structures between threads
-
-=over 4
-
-=item VERSION
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXPORT
-
-=item FUNCTIONS
-
-share VARIABLE, is_shared VARIABLE, lock VARIABLE, cond_wait VARIABLE,
-cond_wait CONDVAR, LOCKVAR, cond_timedwait VARIABLE, ABS_TIMEOUT,
-cond_timedwait CONDVAR, ABS_TIMEOUT, LOCKVAR, cond_signal VARIABLE,
-cond_broadcast VARIABLE
-
-=item OBJECTS
-
-=item NOTES
-
-=item BUGS AND LIMITATIONS
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 threads - Perl interpreter-based threads
-
-=over 4
-
-=item VERSION
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-$thr = threads->create(FUNCTION, ARGS), $thr->join(), $thr->detach(),
-threads->detach(), threads->self(), $thr->tid(), threads->tid(), "$thr",
-threads->object($tid), threads->yield(), threads->list(),
-threads->list(threads::all), threads->list(threads::running),
-threads->list(threads::joinable), $thr1->equal($thr2), async BLOCK;,
-$thr->error(), $thr->_handle(), threads->_handle()
-
-=item EXITING A THREAD
-
-threads->exit(), threads->exit(status), die(), exit(status), use threads
-'exit' => 'threads_only', threads->create({'exit' => 'thread_only'}, ...),
-$thr->set_thread_exit_only(boolean), threads->set_thread_exit_only(boolean)
-
-=item THREAD STATE
-
-$thr->is_running(), $thr->is_joinable(), $thr->is_detached(),
-threads->is_detached()
-
-=item THREAD CONTEXT
-
-=over 4
-
-=item Explicit context
-
-=item Implicit context
-
-=item $thr->wantarray()
-
-=item threads->wantarray()
-
-=back
-
-=item THREAD STACK SIZE
-
-threads->get_stack_size();, $size = $thr->get_stack_size();, $old_size =
-threads->set_stack_size($new_size);, use threads ('stack_size' => VALUE);,
-$ENV{'PERL5_ITHREADS_STACK_SIZE'}, threads->create({'stack_size' => VALUE},
-FUNCTION, ARGS), $thr2 = $thr1->create(FUNCTION, ARGS)
-
-=item THREAD SIGNALLING
-
-$thr->kill('SIG...');
-
-=item WARNINGS
-
-Perl exited with active threads:, Thread creation failed: pthread_create
-returned #, Thread # terminated abnormally: .., Using minimum thread stack
-size of #, Thread creation failed: pthread_attr_setstacksize(I<SIZE>)
-returned 22
-
-=item ERRORS
-
-This Perl not built to support threads, Cannot change stack size of an
-existing thread, Cannot signal threads without safe signals, Unrecognized
-signal name: ..
-
-=item BUGS AND LIMITATIONS
-
-Thread-safe modules, Using non-thread-safe modules, Current working
-directory, Environment variables, Parent-child threads, Creating threads
-inside special blocks, Unsafe signals, Perl has been built with
-C<PERL_OLD_SIGNALS> (see C<perl -V>), The environment variable
-C<PERL_SIGNALS> is set to C<unsafe> (see L<perlrun/"PERL_SIGNALS">), The
-module L<Perl::Unsafe::Signals> is used, Returning closures from threads,
-Returning objects from threads, Perl Bugs and the CPAN Version of
-L<threads>
-
-=item REQUIREMENTS
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item ACKNOWLEDGEMENTS
-
-=back
-
-=head2 attributes - get/set subroutine or variable attributes
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Built-in Attributes
-
-locked, method, lvalue
-
-=item Available Subroutines
-
-get, reftype
-
-=item Package-specific Attribute Handling
-
-FETCH_I<type>_ATTRIBUTES, MODIFY_I<type>_ATTRIBUTES
-
-=item Syntax of Attribute Lists
-
-=back
-
-=item EXPORTS
-
-=over 4
-
-=item Default exports
-
-=item Available exports
-
-=item Export tags defined
-
-=back
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=back
-
-=head2 autouse - postpone load of modules until a function is used
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item WARNING
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 base - Establish an ISA relationship with base classes at compile
-time
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item DIAGNOSTICS
-
-Base class package "%s" is empty, Class 'Foo' tried to inherit from itself
-
-=item HISTORY
-
-=item CAVEATS
-
-=item SEE ALSO
-
-=back
-
-=head2 bigint - Transparent BigInteger support for Perl
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item use integer vs. use bigint
-
-=item Options
-
-a or accuracy, p or precision, t or trace, hex, oct, l, lib, try or only, v
-or version
-
-=item Math Library
-
-=item Internal Format
-
-=item Sign
-
-=item Methods
-
-inf(), NaN(), e, PI, bexp(), bpi(), upgrade(), in_effect()
-
-=item MATH LIBRARY
-
-=item Caveat
-
-=back
-
-=item CAVAETS
-
-in_effect(), hex()/oct()
-
-=item MODULES USED
-
-=item EXAMPLES
-
-=item LICENSE
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=back
-
-=head2 bignum - Transparent BigNumber support for Perl
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Options
-
-a or accuracy, p or precision, t or trace, l or lib, hex, oct, v or version
-
-=item Methods
-
-=item Caveats
-
-inf(), NaN(), e, PI(), bexp(), bpi(), upgrade(), in_effect()
-
-=item Math Library
-
-=item INTERNAL FORMAT
-
-=item SIGN
-
-=back
-
-=item CAVAETS
-
-in_effect(), hex()/oct()
-
-=item MODULES USED
-
-=item EXAMPLES
-
-=item LICENSE
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=back
-
-=head2 bigrat - Transparent BigNumber/BigRational support for Perl
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Modules Used
-
-=item Math Library
-
-=item Sign
-
-=item Methods
-
-inf(), NaN(), e, PI, bexp(), bpi(), upgrade(), in_effect()
-
-=item MATH LIBRARY
-
-=item Cavaet
-
-=item Options
-
-a or accuracy, p or precision, t or trace, l or lib, hex, oct, v or version
-
-=back
-
-=item CAVAETS
-
-in_effect(), hex()/oct()
-
-=item EXAMPLES
-
- perl -Mbigrat -le 'print sqrt(33)'
- perl -Mbigrat -le 'print 2*255'
- perl -Mbigrat -le 'print 4.5+2*255'
- perl -Mbigrat -le 'print 3/7 + 5/7 + 8/3'
- perl -Mbigrat -le 'print 12->is_odd()';
- perl -Mbignum=l,GMP -le 'print 7 ** 7777'
-
-=item LICENSE
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=back
-
-=head2 blib - Use MakeMaker's uninstalled version of a package
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 bytes - Perl pragma to force byte semantics rather than character
-semantics
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item LIMITATIONS
-
-=item SEE ALSO
-
-=back
-
-=head2 charnames - define character names for C<\N{named}> string literal
-escapes
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item ALIASES
-
-=item CUSTOM ALIASES
-
-=over 4
-
-=item Anonymous hashes
-
-=item Alias file
-
-=item Alias shortcut
-
-=back
-
-=item charnames::viacode(code)
-
-=item charnames::vianame(name)
-
-=item CUSTOM TRANSLATORS
-
-=item ILLEGAL CHARACTERS
-
-=item BUGS
-
-=back
-
-=head2 constant - Perl pragma to declare constants
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTES
-
-=over 4
-
-=item List constants
-
-=item Defining multiple constants at once
-
-=item Magic constants
-
-=back
-
-=item TECHNICAL NOTES
-
-=item CAVEATS
-
-=item BUGS
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=back
-
-=head2 diagnostics, splain - produce verbose warning diagnostics
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item The C<diagnostics> Pragma
-
-=item The I<splain> Program
-
-=back
-
-=item EXAMPLES
-
-=item INTERNALS
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 encoding - allows you to write your script in non-ascii or non-utf8
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=over 4
-
-=item Literal Conversions
-
-=item PerlIO layers for C<STD(IN|OUT)>
-
-=item Implicit upgrading for byte strings
-
-=item Side effects
-
-=item Side effects
-
-=item Side effects
-
-=back
-
-=item FEATURES THAT REQUIRE 5.8.1
-
-"NON-EUC" doublebyte encodings, tr//, DATA pseudo-filehandle
-
-=item USAGE
-
-use encoding [I<ENCNAME>] ;, use encoding I<ENCNAME> [ STDIN =E<gt>
-I<ENCNAME_IN> ...] ;, use encoding I<ENCNAME> Filter=E<gt>1;, no encoding;
-
-=item The Filter Option
-
-=over 4
-
-=item Filter-related changes at Encode version 1.87
-
-=back
-
-=item CAVEATS
-
-=over 4
-
-=item NOT SCOPED
-
-=item DO NOT MIX MULTIPLE ENCODINGS
-
-=item tr/// with ranges
-
-Legend of characters above
-
-=back
-
-=item EXAMPLE - Greekperl
-
-=item KNOWN PROBLEMS
-
-literals in regex that are longer than 127 bytes, EBCDIC, format, Thread
-safety
-
-=over 4
-
-=item The Logic of :locale
-
-=back
-
-=item HISTORY
-
-=item SEE ALSO
-
-=back
-
-=head2 encoding::warnings - Warn on implicit encoding conversions
-
-=over 4
-
-=item VERSION
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Overview of the problem
-
-=item Detecting the problem
-
-=item Solving the problem
-
-Upgrade both sides to unicode-strings, Downgrade both sides to
-byte-strings, Specify the encoding for implicit byte-string upgrading,
-PerlIO layers for B<STDIN> and B<STDOUT>, Literal conversions, Implicit
-upgrading for byte-strings
-
-=back
-
-=item CAVEATS
-
-=back
-
-=over 4
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=back
-
-=head2 feature - Perl pragma to enable new syntactic features
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Lexical effect
-
-=item C<no feature>
-
-=item The 'switch' feature
-
-=item The 'say' feature
-
-=item the 'state' feature
-
-=back
-
-=item FEATURE BUNDLES
-
-=item IMPLICIT LOADING
-
-=back
-
-=head2 fields - compile-time class fields
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-new, phash
-
-=item SEE ALSO
-
-=back
-
-=head2 filetest - Perl pragma to control the filetest permission operators
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Consider this carefully
-
-=item The "access" sub-pragma
-
-=item Limitation with regard to C<_>
-
-=back
-
-=back
-
-=head2 if - C<use> a Perl module if a condition holds
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 integer - Perl pragma to use integer arithmetic instead of floating
-point
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 less - perl pragma to request less of something
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FOR MODULE AUTHORS
-
-=over 4
-
-=item C<< BOOLEAN = less->of( FEATURE ) >>
-
-=item C<< FEATURES = less->of() >>
-
-=back
-
-=item CAVEATS
-
-This probably does nothing, This works only on 5.10+
-
-=back
-
-=head2 lib - manipulate @INC at compile time
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Adding directories to @INC
-
-=item Deleting directories from @INC
-
-=item Restoring original @INC
-
-=back
-
-=item CAVEATS
-
-=item NOTES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 locale - Perl pragma to use and avoid POSIX locales for built-in
-operations
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 mro - Method Resolution Order
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OVERVIEW
-
-=item The C3 MRO
-
-=over 4
-
-=item What is C3?
-
-=item How does C3 work
-
-=back
-
-=item Functions
-
-=over 4
-
-=item mro::get_linear_isa($classname[, $type])
-
-=item mro::set_mro($classname, $type)
-
-=item mro::get_mro($classname)
-
-=item mro::get_isarev($classname)
-
-=item mro::is_universal($classname)
-
-=item mro::invalidate_all_method_caches()
-
-=item mro::method_changed_in($classname)
-
-=item mro::get_pkg_gen($classname)
-
-=item next::method
-
-=item next::can
-
-=item maybe::next::method
-
-=back
-
-=item SEE ALSO
-
-=over 4
-
-=item The original Dylan paper
-
-L<http://www.webcom.com/haahr/dylan/linearization-oopsla96.html>
-
-=item The prototype Perl 6 Object Model uses C3
-
-L<http://svn.openfoundry.org/pugs/perl5/Perl6-MetaModel/>
-
-=item Parrot now uses C3
-
-L<http://aspn.activestate.com/ASPN/Mail/Message/perl6-internals/2746631>,
-L<http://use.perl.org/~autrijus/journal/25768>
-
-=item Python 2.3 MRO related links
-
-L<http://www.python.org/2.3/mro.html>,
-L<http://www.python.org/2.2.2/descrintro.html#mro>
-
-=item C3 for TinyCLOS
-
-L<http://www.call-with-current-continuation.org/eggs/c3.html>
-
-=item Class::C3
-
-L<Class::C3>
-
-=back
-
-=item AUTHOR
-
-=back
-
-=head2 open - perl pragma to set default PerlIO layers for input and output
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NONPERLIO FUNCTIONALITY
-
-=item IMPLEMENTATION DETAILS
-
-=item SEE ALSO
-
-=back
-
-=head2 ops - Perl pragma to restrict unsafe operations when compiling
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=back
-
-=head2 overload - Package for overloading Perl operations
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Declaration of overloaded functions
-
-=item Calling Conventions for Binary Operations
-
-FALSE, TRUE, C<undef>
-
-=item Calling Conventions for Unary Operations
-
-=item Calling Conventions for Mutators
-
-C<++> and C<-->, C<x=> and other assignment versions
-
-=item Overloadable Operations
-
-I<Arithmetic operations>, I<Comparison operations>, I<Bit operations>,
-I<Increment and decrement>, I<Transcendental functions>, I<Boolean, string
-and numeric conversion>, I<Iteration>, I<Dereferencing>, I<Special>
-
-=item Inheritance and overloading
-
-Strings as values of C<use overload> directive, Overloading of an operation
-is inherited by derived classes
-
-=back
-
-=item SPECIAL SYMBOLS FOR C<use overload>
-
-=over 4
-
-=item Last Resort
-
-=item Fallback
-
-C<undef>, TRUE, defined, but FALSE
-
-=item Smart Match
-
-=item Copy Constructor
-
-B<Example>
-
-=back
-
-=item MAGIC AUTOGENERATION
-
-I<Assignment forms of arithmetic operations>, I<Conversion operations>,
-I<Increment and decrement>, C<abs($a)>, I<Unary minus>, I<Negation>,
-I<Concatenation>, I<Comparison operations>, I<Iterator>, I<Dereferencing>,
-I<Copy operator>
-
-=item Minimal set of overloaded operations
-
-=item Losing overloading
-
-=item Run-time Overloading
-
-=item Public functions
-
-overload::StrVal(arg), overload::Overloaded(arg), overload::Method(obj,op)
-
-=item Overloading constants
-
-integer, float, binary, q, qr
-
-=item IMPLEMENTATION
-
-=item Metaphor clash
-
-=item Cookbook
-
-=over 4
-
-=item Two-face scalars
-
-=item Two-face references
-
-=item Symbolic calculator
-
-=item I<Really> symbolic calculator
-
-=back
-
-=item AUTHOR
-
-=item DIAGNOSTICS
-
-Odd number of arguments for overload::constant, `%s' is not an overloadable
-type, `%s' is not a code reference
-
-=item BUGS
-
-=back
-
-=head2 sigtrap - Perl pragma to enable simple signal handling
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OPTIONS
-
-=over 4
-
-=item SIGNAL HANDLERS
-
-B<stack-trace>, B<die>, B<handler> I<your-handler>
-
-=item SIGNAL LISTS
-
-B<normal-signals>, B<error-signals>, B<old-interface-signals>
-
-=item OTHER
-
-B<untrapped>, B<any>, I<signal>, I<number>
-
-=back
-
-=item EXAMPLES
-
-=back
-
-=head2 sort - perl pragma to control sort() behaviour
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CAVEATS
-
-=back
-
-=head2 strict - Perl pragma to restrict unsafe constructs
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-C<strict refs>, C<strict vars>, C<strict subs>
-
-=item HISTORY
-
-=back
-
-=head2 subs - Perl pragma to predeclare sub names
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 threadshared, threads::shared - Perl extension for sharing data
-structures between threads
-
-=over 4
-
-=item VERSION
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXPORT
-
-=item FUNCTIONS
-
-share VARIABLE, is_shared VARIABLE, lock VARIABLE, cond_wait VARIABLE,
-cond_wait CONDVAR, LOCKVAR, cond_timedwait VARIABLE, ABS_TIMEOUT,
-cond_timedwait CONDVAR, ABS_TIMEOUT, LOCKVAR, cond_signal VARIABLE,
-cond_broadcast VARIABLE
-
-=item OBJECTS
-
-=item NOTES
-
-=item BUGS AND LIMITATIONS
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 utf8 - Perl pragma to enable/disable UTF-8 (or UTF-EBCDIC) in source
-code
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Utility functions
-
-$num_octets = utf8::upgrade($string), $success = utf8::downgrade($string[,
-FAIL_OK]), utf8::encode($string), $success = utf8::decode($string), $flag =
-utf8::is_utf8(STRING), $flag = utf8::valid(STRING)
-
-=back
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 vars - Perl pragma to predeclare global variable names (obsolete)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 version - Perl extension for Version Objects
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item BEST PRACTICES
-
-Be consistent, Be careful
-
-=item Using modules that use version.pm
-
-Numeric versions always work, Extended version work sometimes
-
-=item What IS a version
-
-Numeric Versions, Extended Versions
-
-=item Numeric Versions
-
-=item Extended Versions
-
-=item Numeric Alpha Versions
-
-=item Object Methods
-
-New Operator, qv(), Normal Form, Numification, Stringification, Comparison
-operators, Logical Operators
-
-=item Quoting
-
-=item What about v-strings?
-
-=item Types of Versions Objects
-
-Ordinary versions, Alpha Versions
-
-=item Replacement UNIVERSAL::VERSION
-
-=back
-
-=item SUBCLASSING
-
-=item EXPORT
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 vmsish - Perl pragma to control VMS-specific language features
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-C<vmsish status>, C<vmsish exit>, C<vmsish time>, C<vmsish hushed>
-
-=back
-
-=head2 warnings - Perl pragma to control optional warnings
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-use warnings::register, warnings::enabled(), warnings::enabled($category),
-warnings::enabled($object), warnings::warn($message),
-warnings::warn($category, $message), warnings::warn($object, $message),
-warnings::warnif($message), warnings::warnif($category, $message),
-warnings::warnif($object, $message)
-
-=back
-
-=head2 warnings::register - warnings import function
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head1 MODULE DOCUMENTATION
-
-=head2 AnyDBM_File - provide framework for multiple DBMs
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item DBM Comparisons
-
-[0], [1], [2], [3]
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 Archive::Extract - A generic archive extracting mechanism
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item METHODS
-
-=over 4
-
-=item $ae = Archive::Extract->new(archive => '/path/to/archive',[type =>
-TYPE])
-
-tar, tgz, gz, Z, zip, bz2, tbz
-
-=back
-
-=back
-
-=over 4
-
-=item $ae->extract( [to => '/output/path'] )
-
-$ae->extract_path, $ae->files
-
-=back
-
-=over 4
-
-=item ACCESSORS
-
-=over 4
-
-=item $ae->error([BOOL])
-
-=item $ae->extract_path
-
-=item $ae->files
-
-=item $ae->archive
-
-=item $ae->type
-
-=item $ae->types
-
-=back
-
-=back
-
-=over 4
-
-=item $ae->is_tgz
-
-=item $ae->is_tar
-
-=item $ae->is_gz
-
-=item $ae->is_Z
-
-=item $ae->is_zip
-
-=back
-
-=over 4
-
-=item $ae->bin_tar
-
-=item $ae->bin_gzip
-
-=item $ae->bin_unzip
-
-=back
-
-=over 4
-
-=item HOW IT WORKS
-
-=item CAVEATS
-
-=over 4
-
-=item File Extensions
-
-=item Supporting Very Large Files
-
-=item Bunzip2 support of arbitrary extensions.
-
-=back
-
-=item GLOBAL VARIABLES
-
-=over 4
-
-=item $Archive::Extract::DEBUG
-
-=item $Archive::Extract::WARN
-
-=item $Archive::Extract::PREFER_BIN
-
-=back
-
-=item TODO
-
-Mime magic support
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Archive::Tar - module for manipulations of tar archives
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Object Methods
-
-=over 4
-
-=item Archive::Tar->new( [$file, $compressed] )
-
-=back
-
-=back
-
-=over 4
-
-=item $tar->read ( $filename|$handle, $compressed, {opt => 'val'} )
-
-limit, extract
-
-=back
-
-=over 4
-
-=item $tar->contains_file( $filename )
-
-=back
-
-=over 4
-
-=item $tar->extract( [@filenames] )
-
-=back
-
-=over 4
-
-=item $tar->extract_file( $file, [$extract_path] )
-
-=back
-
-=over 4
-
-=item $tar->list_files( [\@properties] )
-
-=back
-
-=over 4
-
-=item $tar->get_files( [@filenames] )
-
-=back
-
-=over 4
-
-=item $tar->get_content( $file )
-
-=back
-
-=over 4
-
-=item $tar->replace_content( $file, $content )
-
-=back
-
-=over 4
-
-=item $tar->rename( $file, $new_name )
-
-=back
-
-=over 4
-
-=item $tar->remove (@filenamelist)
-
-=back
-
-=over 4
-
-=item $tar->clear
-
-=back
-
-=over 4
-
-=item $tar->write ( [$file, $compressed, $prefix] )
-
-=back
-
-=over 4
-
-=item $tar->add_files( @filenamelist )
-
-=back
-
-=over 4
-
-=item $tar->add_data ( $filename, $data, [$opthashref] )
-
-FILE, HARDLINK, SYMLINK, CHARDEV, BLOCKDEV, DIR, FIFO, SOCKET
-
-=back
-
-=over 4
-
-=item $tar->error( [$BOOL] )
-
-=back
-
-=over 4
-
-=item $tar->setcwd( $cwd );
-
-=back
-
-=over 4
-
-=item $bool = $tar->has_io_string
-
-=back
-
-=over 4
-
-=item $bool = $tar->has_perlio
-
-=back
-
-=over 4
-
-=item Class Methods
-
-=over 4
-
-=item Archive::Tar->create_archive($file, $compression, @filelist)
-
-=back
-
-=back
-
-=over 4
-
-=item Archive::Tar->list_archive ($file, $compressed, [\@properties])
-
-=back
-
-=over 4
-
-=item Archive::Tar->extract_archive ($file, $gzip)
-
-=back
-
-=over 4
-
-=item Archive::Tar->can_handle_compressed_files
-
-=back
-
-=over 4
-
-=item GLOBAL VARIABLES
-
-=over 4
-
-=item $Archive::Tar::FOLLOW_SYMLINK
-
-=item $Archive::Tar::CHOWN
-
-=item $Archive::Tar::CHMOD
-
-=item $Archive::Tar::DO_NOT_USE_PREFIX
-
-=item $Archive::Tar::DEBUG
-
-=item $Archive::Tar::WARN
-
-=item $Archive::Tar::error
-
-=item $Archive::Tar::INSECURE_EXTRACT_MODE
-
-=item $Archive::Tar::HAS_PERLIO
-
-=item $Archive::Tar::HAS_IO_STRING
-
-=back
-
-=item FAQ
-
-What's the minimum perl version required to run Archive::Tar?, Isn't
-Archive::Tar slow?, Isn't Archive::Tar heavier on memory than /bin/tar?,
-Can't you lazy-load data instead?, How much memory will an X kb tar file
-need?, What do you do with unsupported filetypes in an archive?, I'm using
-WinZip, or some other non-POSIX client, and files are not being extracted
-properly!, How do I extract only files that have property X from an
-archive?, How do I access .tar.Z files?, How do I handle Unicode strings?
-
-=item TODO
-
-Check if passed in handles are open for read/write, Allow archives to be
-passed in as string, Facilitate processing an opened filehandle of a
-compressed archive
-
-=item SEE ALSO
-
-The GNU tar specification, The PAX format specication, A comparison of GNU
-and POSIX tar standards;
-C<http://www.delorie.com/gnu/docs/tar/tar_114.html>, GNU tar intends to
-switch to POSIX compatibility, A Comparison between various tar
-implementations
-
-=item AUTHOR
-
-=item ACKNOWLEDGEMENTS
-
-=item COPYRIGHT
-
-=back
-
-=head2 Archive::Tar::File - a subclass for in-memory extracted file from
-Archive::Tar
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Accessors
-
-name, mode, uid, gid, size, mtime, chksum, type, linkname, magic, version,
-uname, gname, devmajor, devminor, prefix, raw
-
-=back
-
-=item Methods
-
-=over 4
-
-=item new( file => $path )
-
-=item new( data => $path, $data, $opt )
-
-=item new( chunk => $chunk )
-
-=back
-
-=back
-
-=over 4
-
-=item full_path
-
-=back
-
-=over 4
-
-=item validate
-
-=back
-
-=over 4
-
-=item has_content
-
-=back
-
-=over 4
-
-=item get_content
-
-=back
-
-=over 4
-
-=item get_content_by_ref
-
-=back
-
-=over 4
-
-=item replace_content( $content )
-
-=back
-
-=over 4
-
-=item rename( $new_name )
-
-=back
-
-=over 4
-
-=item Convenience methods
-
-is_file, is_dir, is_hardlink, is_symlink, is_chardev, is_blockdev, is_fifo,
-is_socket, is_longlink, is_label, is_unknown
-
-=back
-
-=head2 Attribute::Handlers - Simpler definition of attribute handlers
-
-=over 4
-
-=item VERSION
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-[0], [1], [2], [3], [4], [5], [6], [7]
-
-=over 4
-
-=item Typed lexicals
-
-=item Type-specific attribute handlers
-
-=item Non-interpretive attribute handlers
-
-=item Phase-specific attribute handlers
-
-=item Attributes as C<tie> interfaces
-
-=back
-
-=item EXAMPLES
-
-=item DIAGNOSTICS
-
-C<Bad attribute type: ATTR(%s)>, C<Attribute handler %s doesn't handle %s
-attributes>, C<Declaration of %s attribute in package %s may clash with
-future reserved word>, C<Can't have two ATTR specifiers on one subroutine>,
-C<Can't autotie a %s>, C<Internal error: %s symbol went missing>, C<Won't
-be able to apply END handler>
-
-=item AUTHOR
-
-=item BUGS
-
-=item COPYRIGHT
-
-=back
-
-=head2 AutoLoader - load subroutines only on demand
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Subroutine Stubs
-
-=item Using B<AutoLoader>'s AUTOLOAD Subroutine
-
-=item Overriding B<AutoLoader>'s AUTOLOAD Subroutine
-
-=item Package Lexicals
-
-=item Not Using AutoLoader
-
-=item B<AutoLoader> vs. B<SelfLoader>
-
-=back
-
-=item CAVEATS
-
-=item SEE ALSO
-
-=back
-
-=head2 AutoSplit - split a package for autoloading
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-$keep, $check, $modtime
-
-=over 4
-
-=item Multiple packages
-
-=back
-
-=item DIAGNOSTICS
-
-=back
-
-=head2 B - The Perl Compiler
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OVERVIEW
-
-=item Utility Functions
-
-=over 4
-
-=item Functions Returning C<B::SV>, C<B::AV>, C<B::HV>, and C<B::CV>
-objects
-
-sv_undef, sv_yes, sv_no, svref_2object(SVREF), amagic_generation, init_av,
-check_av, unitcheck_av, begin_av, end_av, comppadlist, regex_padav, main_cv
-
-=item Functions for Examining the Symbol Table
-
-walksymtable(SYMREF, METHOD, RECURSE, PREFIX)
-
-=item Functions Returning C<B::OP> objects or for walking op trees
-
-main_root, main_start, walkoptree(OP, METHOD), walkoptree_debug(DEBUG)
-
-=item Miscellaneous Utility Functions
-
-ppname(OPNUM), hash(STR), cast_I32(I), minus_c, cstring(STR),
-perlstring(STR), class(OBJ), threadsv_names
-
-=item Exported utility variabiles
-
- at optype, @specialsv_name
-
-=back
-
-=item OVERVIEW OF CLASSES
-
-=over 4
-
-=item SV-RELATED CLASSES
-
-=item B::SV Methods
-
-REFCNT, FLAGS, object_2svref
-
-=item B::IV Methods
-
-IV, IVX, UVX, int_value, needs64bits, packiv
-
-=item B::NV Methods
-
-NV, NVX
-
-=item B::RV Methods
-
-RV
-
-=item B::PV Methods
-
-PV, RV, PVX
-
-=item B::PVMG Methods
-
-MAGIC, SvSTASH
-
-=item B::MAGIC Methods
-
-MOREMAGIC, precomp, PRIVATE, TYPE, FLAGS, OBJ, PTR, REGEX
-
-=item B::PVLV Methods
-
-TARGOFF, TARGLEN, TYPE, TARG
-
-=item B::BM Methods
-
-USEFUL, PREVIOUS, RARE, TABLE
-
-=item B::GV Methods
-
-is_empty, NAME, SAFENAME, STASH, SV, IO, FORM, AV, HV, EGV, CV, CVGEN,
-LINE, FILE, FILEGV, GvREFCNT, FLAGS
-
-=item B::IO Methods
-
-LINES, PAGE, PAGE_LEN, LINES_LEFT, TOP_NAME, TOP_GV, FMT_NAME, FMT_GV,
-BOTTOM_NAME, BOTTOM_GV, SUBPROCESS, IoTYPE, IoFLAGS, IsSTD
-
-=item B::AV Methods
-
-FILL, MAX, ARRAY, ARRAYelt, OFF, AvFLAGS
-
-=item B::CV Methods
-
-STASH, START, ROOT, GV, FILE, DEPTH, PADLIST, OUTSIDE, OUTSIDE_SEQ, XSUB,
-XSUBANY, CvFLAGS, const_sv
-
-=item B::HV Methods
-
-FILL, MAX, KEYS, RITER, NAME, ARRAY, PMROOT
-
-=item OP-RELATED CLASSES
-
-=item B::OP Methods
-
-next, sibling, name, ppaddr, desc, targ, type, opt, flags, private, spare
-
-=item B::UNOP METHOD
-
-first
-
-=item B::BINOP METHOD
-
-last
-
-=item B::LOGOP METHOD
-
-other
-
-=item B::LISTOP METHOD
-
-children
-
-=item B::PMOP Methods
-
-pmreplroot, pmreplstart, pmnext, pmregexp, pmflags, extflags, precomp,
-pmoffset
-
-=item B::SVOP METHOD
-
-sv, gv
-
-=item B::PADOP METHOD
-
-padix
-
-=item B::PVOP METHOD
-
-pv
-
-=item B::LOOP Methods
-
-redoop, nextop, lastop
-
-=item B::COP Methods
-
-label, stash, stashpv, file, cop_seq, arybase, line, warnings, io, hints,
-hints_hash
-
-=back
-
-=item AUTHOR
-
-=back
-
-=head2 B::Concise - Walk Perl syntax tree, printing concise info about ops
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLE
-
-=item OPTIONS
-
-=over 4
-
-=item Options for Opcode Ordering
-
-B<-basic>, B<-exec>, B<-tree>
-
-=item Options for Line-Style
-
-B<-concise>, B<-terse>, B<-linenoise>, B<-debug>, B<-env>
-
-=item Options for tree-specific formatting
-
-B<-compact>, B<-loose>, B<-vt>, B<-ascii>
-
-=item Options controlling sequence numbering
-
-B<-base>I<n>, B<-bigendian>, B<-littleendian>
-
-=item Other options
-
-B<-src>, B<-stash="somepackage">, B<-main>, B<-nomain>, B<-nobanner>,
-B<-banner>, B<-banneris> => subref
-
-=item Option Stickiness
-
-=back
-
-=item ABBREVIATIONS
-
-=over 4
-
-=item OP class abbreviations
-
-=item OP flags abbreviations
-
-=back
-
-=item FORMATTING SPECIFICATIONS
-
-=over 4
-
-=item Special Patterns
-
-B<(x(>I<exec_text>B<;>I<basic_text>B<)x)>, B<(*(>I<text>B<)*)>,
-B<(*(>I<text1>B<;>I<text2>B<)*)>, B<(?(>I<text1>B<#>I<var>I<Text2>B<)?)>,
-B<~>
-
-=item # Variables
-
-B<#>I<var>, B<#>I<var>I<N>, B<#>I<Var>, B<#addr>, B<#arg>, B<#class>,
-B<#classsym>, B<#coplabel>, B<#exname>, B<#extarg>, B<#firstaddr>,
-B<#flags>, B<#flagval>, B<#hints>, B<#hintsval>, B<#hyphseq>, B<#label>,
-B<#lastaddr>, B<#name>, B<#NAME>, B<#next>, B<#nextaddr>, B<#noise>,
-B<#private>, B<#privval>, B<#seq>, B<#seqnum>, B<#opt>, B<#sibaddr>,
-B<#svaddr>, B<#svclass>, B<#svval>, B<#targ>, B<#targarg>, B<#targarglife>,
-B<#typenum>
-
-=back
-
-=item One-Liner Command tips
-
-perl -MO=Concise,bar foo.pl, perl -MDigest::MD5=md5 -MO=Concise,md5 -e1,
-perl -MPOSIX -MO=Concise,_POSIX_ARG_MAX -e1, perl -MPOSIX -MO=Concise,a -e
-'print _POSIX_SAVED_IDS', perl -MPOSIX -MO=Concise,a -e 'sub
-a{_POSIX_SAVED_IDS}', perl -MB::Concise -e
-'B::Concise::compile("-exec","-src", \%B::Concise::)->()'
-
-=item Using B::Concise outside of the O framework
-
-=over 4
-
-=item Example: Altering Concise Renderings
-
-=item set_style()
-
-=item set_style_standard($name)
-
-=item add_style()
-
-=item add_callback()
-
-=item Running B::Concise::compile()
-
-=item B::Concise::reset_sequence()
-
-=item Errors
-
-=back
-
-=item AUTHOR
-
-=back
-
-=head2 B::Debug - Walk Perl syntax tree, printing debug info about ops
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=back
-
-=head2 B::Deparse - Perl compiler backend to produce perl code
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OPTIONS
-
-B<-d>, B<-f>I<FILE>, B<-l>, B<-p>, B<-P>, B<-q>, B<-s>I<LETTERS>, B<C>,
-B<i>I<NUMBER>, B<T>, B<v>I<STRING>B<.>, B<-x>I<LEVEL>
-
-=item USING B::Deparse AS A MODULE
-
-=over 4
-
-=item Synopsis
-
-=item Description
-
-=item new
-
-=item ambient_pragmas
-
-strict, $[, bytes, utf8, integer, re, warnings, hint_bits, warning_bits,
-%^H
-
-=item coderef2text
-
-=back
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 B::Lint - Perl lint
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OPTIONS AND LINT CHECKS
-
-B<magic-diamond>, B<context>, B<implicit-read> and B<implicit-write>,
-B<bare-subs>, B<dollar-underscore>, B<private-names>, B<undefined-subs>,
-B<regexp-variables>, B<all>, B<none>
-
-=item NON LINT-CHECK OPTIONS
-
-B<-u Package>
-
-=item EXTENDING LINT
-
-=item TODO
-
-while(<FH>) stomps $_, strict oo, unchecked system calls, more tests,
-validate against older perls
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 B::O, O - Generic interface to Perl Compiler backends
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONVENTIONS
-
-=item IMPLEMENTATION
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 B::Showlex - Show lexical variables used in functions or files
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLES
-
-=over 4
-
-=item OPTIONS
-
-=back
-
-=item SEE ALSO
-
-=item TODO
-
-=item AUTHOR
-
-=back
-
-=head2 B::Terse - Walk Perl syntax tree, printing terse info about ops
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=back
-
-=head2 B::Xref - Generates cross reference reports for Perl programs
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OPTIONS
-
-C<-oFILENAME>, C<-r>, C<-d>, C<-D[tO]>
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 Benchmark - benchmark running times of Perl code
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Methods
-
-new, debug, iters
-
-=item Standard Exports
-
-timeit(COUNT, CODE), timethis ( COUNT, CODE, [ TITLE, [ STYLE ]] ),
-timethese ( COUNT, CODEHASHREF, [ STYLE ] ), timediff ( T1, T2 ), timestr (
-TIMEDIFF, [ STYLE, [ FORMAT ] ] )
-
-=item Optional Exports
-
-clearcache ( COUNT ), clearallcache ( ), cmpthese ( COUNT, CODEHASHREF, [
-STYLE ] ), cmpthese ( RESULTSHASHREF, [ STYLE ] ), countit(TIME, CODE),
-disablecache ( ), enablecache ( ), timesum ( T1, T2 )
-
-=item :hireswallclock
-
-=back
-
-=item NOTES
-
-=item EXAMPLES
-
-=item INHERITANCE
-
-=item CAVEATS
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item MODIFICATION HISTORY
-
-=back
-
-=head2 CGI - Simple Common Gateway Interface Class
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=item DESCRIPTION
-
-=over 4
-
-=item PROGRAMMING STYLE
-
-=item CALLING CGI.PM ROUTINES
-
-=item CREATING A NEW QUERY OBJECT (OBJECT-ORIENTED STYLE):
-
-=item CREATING A NEW QUERY OBJECT FROM AN INPUT FILE
-
-=item FETCHING A LIST OF KEYWORDS FROM THE QUERY:
-
-=item FETCHING THE NAMES OF ALL THE PARAMETERS PASSED TO YOUR SCRIPT:
-
-=item FETCHING THE VALUE OR VALUES OF A SINGLE NAMED PARAMETER:
-
-=item SETTING THE VALUE(S) OF A NAMED PARAMETER:
-
-=item APPENDING ADDITIONAL VALUES TO A NAMED PARAMETER:
-
-=item IMPORTING ALL PARAMETERS INTO A NAMESPACE:
-
-=item DELETING A PARAMETER COMPLETELY:
-
-=item DELETING ALL PARAMETERS:
-
-=item HANDLING NON-URLENCODED ARGUMENTS
-
-=item DIRECT ACCESS TO THE PARAMETER LIST:
-
-=item FETCHING THE PARAMETER LIST AS A HASH:
-
-=item SAVING THE STATE OF THE SCRIPT TO A FILE:
-
-=item RETRIEVING CGI ERRORS
-
-=item USING THE FUNCTION-ORIENTED INTERFACE
-
-B<:cgi>, B<:form>, B<:html2>, B<:html3>, B<:html4>, B<:netscape>, B<:html>,
-B<:standard>, B<:all>
-
-=item PRAGMAS
-
--any, -compile, -nosticky, -tabindex, -no_undef_params, -no_xhtml, -nph,
--newstyle_urls, -oldstyle_urls, -autoload, -no_debug, -debug,
--private_tempfiles
-
-=item SPECIAL FORMS FOR IMPORTING HTML-TAG FUNCTIONS
-
-1. start_table() (generates a <table> tag), 2. end_table() (generates a
-</table> tag), 3. start_ul() (generates a <ul> tag), 4. end_ul() (generates
-a </ul> tag)
-
-=back
-
-=item GENERATING DYNAMIC DOCUMENTS
-
-=over 4
-
-=item CREATING A STANDARD HTTP HEADER:
-
-=item GENERATING A REDIRECTION HEADER
-
-=item CREATING THE HTML DOCUMENT HEADER
-
-B<Parameters:>, 4, 5, 6..
-
-=item ENDING THE HTML DOCUMENT:
-
-=item CREATING A SELF-REFERENCING URL THAT PRESERVES STATE INFORMATION:
-
-=item OBTAINING THE SCRIPT'S URL
-
-B<-absolute>, B<-relative>, B<-full>, B<-path> (B<-path_info>), B<-query>
-(B<-query_string>), B<-base>, B<-rewrite>
-
-=item MIXING POST AND URL PARAMETERS
-
-=back
-
-=item CREATING STANDARD HTML ELEMENTS:
-
-=over 4
-
-=item PROVIDING ARGUMENTS TO HTML SHORTCUTS
-
-=item THE DISTRIBUTIVE PROPERTY OF HTML SHORTCUTS
-
-=item HTML SHORTCUTS AND LIST INTERPOLATION
-
-=item NON-STANDARD HTML SHORTCUTS
-
-=item AUTOESCAPING HTML
-
-$escaped_string = escapeHTML("unescaped string");, $charset =
-charset([$charset]);, $flag = autoEscape([$flag]);
-
-=item PRETTY-PRINTING HTML
-
-=back
-
-=item CREATING FILL-OUT FORMS:
-
-=over 4
-
-=item CREATING AN ISINDEX TAG
-
-=item STARTING AND ENDING A FORM
-
-B<application/x-www-form-urlencoded>, B<multipart/form-data>
-
-=item FORM ELEMENTS
-
-B<-name>, B<-value>, B<-values>, B<-tabindex>, B<-id>, B<-override>,
-B<-onChange>, B<-onFocus>, B<-onBlur>, B<-onMouseOver>, B<-onMouseOut>,
-B<-onSelect>
-
-=item CREATING A TEXT FIELD
-
-B<Parameters>
-
-=item CREATING A BIG TEXT FIELD
-
-=item CREATING A PASSWORD FIELD
-
-=item CREATING A FILE UPLOAD FIELD
-
-B<Parameters>
-
-=item CREATING A POPUP MENU
-
-=item CREATING AN OPTION GROUP
-
-=item CREATING A SCROLLING LIST
-
-B<Parameters:>
-
-=item CREATING A GROUP OF RELATED CHECKBOXES
-
-B<Parameters:>
-
-=item CREATING A STANDALONE CHECKBOX
-
-B<Parameters:>
-
-=item CREATING A RADIO BUTTON GROUP
-
-B<Parameters:>
-
-=item CREATING A SUBMIT BUTTON
-
-B<Parameters:>
-
-=item CREATING A RESET BUTTON
-
-=item CREATING A DEFAULT BUTTON
-
-=item CREATING A HIDDEN FIELD
-
-B<Parameters:>
-
-=item CREATING A CLICKABLE IMAGE BUTTON
-
-B<Parameters:>, 3. The third option (-align, optional) is an alignment
-type, and may be TOP, BOTTOM or MIDDLE
-
-=item CREATING A JAVASCRIPT ACTION BUTTON
-
-=back
-
-=item HTTP COOKIES
-
-1. an expiration time, 2. a domain, 3. a path, 4. a "secure" flag,
-B<-name>, B<-value>, B<-path>, B<-domain>, B<-expires>, B<-secure>
-
-=item WORKING WITH FRAMES
-
-1. Create a <Frameset> document, 2. Specify the destination for the
-document in the HTTP header, 3. Specify the destination for the document in
-the <form> tag
-
-=item SUPPORT FOR JAVASCRIPT
-
-B<onLoad>, B<onUnload>, B<onSubmit>, B<onClick>, B<onChange>, B<onFocus>,
-B<onBlur>, B<onSelect>, B<onMouseOver>, B<onMouseOut>
-
-=item LIMITED SUPPORT FOR CASCADING STYLE SHEETS
-
-=item DEBUGGING
-
-=over 4
-
-=item DUMPING OUT ALL THE NAME/VALUE PAIRS
-
-=back
-
-=item FETCHING ENVIRONMENT VARIABLES
-
-B<Accept()>, B<raw_cookie()>, B<user_agent()>, B<path_info()>,
-B<path_translated()>, B<remote_host()>, B<script_name()> Return the script
-name as a partial URL, for self-refering scripts, B<referer()>, B<auth_type
-()>, B<server_name ()>, B<virtual_host ()>, B<server_port ()>,
-B<virtual_port ()>, B<server_software ()>, B<remote_user ()>, B<user_name
-()>, B<request_method()>, B<content_type()>, B<http()>, B<https()>
-
-=item USING NPH SCRIPTS
-
-In the B<use> statement, By calling the B<nph()> method:, By using B<-nph>
-parameters
-
-=item Server Push
-
-multipart_init(), multipart_start(), multipart_end(), multipart_final()
-
-=item Avoiding Denial of Service Attacks
-
-B<$CGI::POST_MAX>, B<$CGI::DISABLE_UPLOADS>, B<1. On a script-by-script
-basis>, B<2. Globally for all scripts>
-
-=item COMPATIBILITY WITH CGI-LIB.PL
-
-=item AUTHOR INFORMATION
-
-=item CREDITS
-
-Matt Heffron (heffron at falstaff.css.beckman.com), James Taylor
-(james.taylor at srs.gov), Scott Anguish <sanguish at digifix.com>, Mike Jewell
-(mlj3u at virginia.edu), Timothy Shimmin (tes at kbs.citri.edu.au), Joergen Haegg
-(jh at axis.se), Laurent Delfosse (delfosse at delfosse.com), Richard Resnick
-(applepi1 at aol.com), Craig Bishop (csb at barwonwater.vic.gov.au), Tony Curtis
-(tc at vcpc.univie.ac.at), Tim Bunce (Tim.Bunce at ig.co.uk), Tom Christiansen
-(tchrist at convex.com), Andreas Koenig (k at franz.ww.TU-Berlin.DE), Tim
-MacKenzie (Tim.MacKenzie at fulcrum.com.au), Kevin B. Hendricks
-(kbhend at dogwood.tyler.wm.edu), Stephen Dahmen (joyfire at inxpress.net), Ed
-Jordan (ed at fidalgo.net), David Alan Pisoni (david at cnation.com), Doug
-MacEachern (dougm at opengroup.org), Robin Houston (robin at oneworld.org),
-...and many many more..
-
-=item A COMPLETE EXAMPLE OF A SIMPLE FORM-BASED SCRIPT
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 CGI::Apache - Backward compatibility module for CGI.pm
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=item DESCRIPTION
-
-=item AUTHOR INFORMATION
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 CGI::Carp, B<CGI::Carp> - CGI routines for writing to the HTTPD (or
-other) error log
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item REDIRECTING ERROR MESSAGES
-
-=item MAKING PERL ERRORS APPEAR IN THE BROWSER WINDOW
-
-=over 4
-
-=item Changing the default message
-
-=back
-
-=item DOING MORE THAN PRINTING A MESSAGE IN THE EVENT OF PERL ERRORS
-
-=item MAKING WARNINGS APPEAR AS HTML COMMENTS
-
-=item OVERRIDING THE NAME OF THE PROGRAM
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=back
-
-=head2 CGI::Cookie - Interface to Netscape Cookies
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item USING CGI::Cookie
-
-B<1. expiration date>, B<2. domain>, B<3. path>, B<4. secure flag>, B<4.
-httponly flag>
-
-=over 4
-
-=item Creating New Cookies
-
-=item Sending the Cookie to the Browser
-
-=item Recovering Previous Cookies
-
-=item Manipulating Cookies
-
-B<name()>, B<value()>, B<domain()>, B<path()>, B<expires()>
-
-=back
-
-=item AUTHOR INFORMATION
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 CGI::Fast - CGI Interface for Fast CGI
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OTHER PIECES OF THE PUZZLE
-
-=item WRITING FASTCGI PERL SCRIPTS
-
-=item INSTALLING FASTCGI SCRIPTS
-
-=item USING FASTCGI SCRIPTS AS CGI SCRIPTS
-
-=item EXTERNAL FASTCGI SERVER INVOCATION
-
-FCGI_SOCKET_PATH, FCGI_LISTEN_QUEUE
-
-=item CAVEATS
-
-=item AUTHOR INFORMATION
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 CGI::Pretty - module to produce nicely formatted HTML code
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Tags that won't be formatted
-
-=item Customizing the Indenting
-
-=back
-
-=item BUGS
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 CGI::Push - Simple Interface to Server Push
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item USING CGI::Push
-
--next_page, -last_page, -type, -delay, -cookie, -target, -expires, -nph
-
-=over 4
-
-=item Heterogeneous Pages
-
-=item Changing the Page Delay on the Fly
-
-=back
-
-=item INSTALLING CGI::Push SCRIPTS
-
-=item AUTHOR INFORMATION
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 CGI::Switch - Backward compatibility module for defunct CGI::Switch
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=item DESCRIPTION
-
-=item AUTHOR INFORMATION
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 CGI::Util - Internal utilities used by CGI module
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR INFORMATION
-
-=item SEE ALSO
-
-=back
-
-=head2 CORE - Pseudo-namespace for Perl's core routines
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OVERRIDING CORE FUNCTIONS
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 CPAN - query, download and build perl modules from CPAN sites
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item CPAN::shell([$prompt, $command]) Starting Interactive Mode
-
-Searching for authors, bundles, distribution files and modules, C<get>,
-C<make>, C<test>, C<install>, C<clean> modules or distributions, C<readme>,
-C<perldoc>, C<look> module or distribution, C<ls> author, C<ls>
-globbing_expression, C<failed>, Persistence between sessions, The C<force>
-and the C<fforce> pragma, Lockfile, Signals
-
-=item CPAN::Shell
-
-=item autobundle
-
-=item hosts
-
-=item mkmyconfig
-
-=item recent ***EXPERIMENTAL COMMAND***
-
-=item recompile
-
-=item report Bundle|Distribution|Module
-
-=item smoke ***EXPERIMENTAL COMMAND***
-
-=item upgrade [Module|/Regex/]...
-
-=item The four C<CPAN::*> Classes: Author, Bundle, Module, Distribution
-
-=item Integrating local directories
-
-=back
-
-=item CONFIGURATION
-
-completion support, displaying some help: o conf help, displaying current
-values: o conf [KEY], changing of scalar values: o conf KEY VALUE, changing
-of list values: o conf KEY SHIFT|UNSHIFT|PUSH|POP|SPLICE|LIST, reverting to
-saved: o conf defaults, saving the config: o conf commit
-
-=over 4
-
-=item Config Variables
-
-C<o conf E<lt>scalar optionE<gt>>, C<o conf E<lt>scalar optionE<gt>
-E<lt>valueE<gt>>, C<o conf E<lt>list optionE<gt>>, C<o conf E<lt>list
-optionE<gt> [shift|pop]>, C<o conf E<lt>list optionE<gt>
-[unshift|push|splice] E<lt>listE<gt>>, interactive editing: o conf init
-[MATCH|LIST]
-
-=item CPAN::anycwd($path): Note on config variable getcwd
-
-cwd, getcwd, fastcwd, backtickcwd
-
-=item Note on the format of the urllist parameter
-
-=item The urllist parameter has CD-ROM support
-
-=item Maintaining the urllist parameter
-
-=item The C<requires> and C<build_requires> dependency declarations
-
-=item Configuration for individual distributions (I<Distroprefs>)
-
-=item Filenames
-
-=item Fallback Data::Dumper and Storable
-
-=item Blueprint
-
-=item Language Specs
-
-comment [scalar], cpanconfig [hash], depends [hash] *** EXPERIMENTAL
-FEATURE ***, disabled [boolean], goto [string], install [hash], make
-[hash], match [hash], patches [array], pl [hash], test [hash]
-
-=item Processing Instructions
-
-args [array], commandline, eexpect [hash], env [hash], expect [array]
-
-=item Schema verification with C<Kwalify>
-
-=item Example Distroprefs Files
-
-=back
-
-=item PROGRAMMER'S INTERFACE
-
-expand($type, at things), expandany(@things), Programming Examples
-
-=over 4
-
-=item Methods in the other Classes
-
-CPAN::Author::as_glimpse(), CPAN::Author::as_string(),
-CPAN::Author::email(), CPAN::Author::fullname(), CPAN::Author::name(),
-CPAN::Bundle::as_glimpse(), CPAN::Bundle::as_string(),
-CPAN::Bundle::clean(), CPAN::Bundle::contains(),
-CPAN::Bundle::force($method, at args), CPAN::Bundle::get(),
-CPAN::Bundle::inst_file(), CPAN::Bundle::inst_version(),
-CPAN::Bundle::uptodate(), CPAN::Bundle::install(), CPAN::Bundle::make(),
-CPAN::Bundle::readme(), CPAN::Bundle::test(),
-CPAN::Distribution::as_glimpse(), CPAN::Distribution::as_string(),
-CPAN::Distribution::author, CPAN::Distribution::pretty_id(),
-CPAN::Distribution::base_id(), CPAN::Distribution::clean(),
-CPAN::Distribution::containsmods(), CPAN::Distribution::cvs_import(),
-CPAN::Distribution::dir(), CPAN::Distribution::force($method, at args),
-CPAN::Distribution::get(), CPAN::Distribution::install(),
-CPAN::Distribution::install_tested(), CPAN::Distribution::isa_perl(),
-CPAN::Distribution::is_tested(), CPAN::Distribution::look(),
-CPAN::Distribution::make(), CPAN::Distribution::perldoc(),
-CPAN::Distribution::prefs(), CPAN::Distribution::prereq_pm(),
-CPAN::Distribution::readme(), CPAN::Distribution::reports(),
-CPAN::Distribution::read_yaml(), CPAN::Distribution::test(),
-CPAN::Distribution::uptodate(), CPAN::Index::force_reload(),
-CPAN::Index::reload(), CPAN::InfoObj::dump(), CPAN::Module::as_glimpse(),
-CPAN::Module::as_string(), CPAN::Module::clean(),
-CPAN::Module::cpan_file(), CPAN::Module::cpan_version(),
-CPAN::Module::cvs_import(), CPAN::Module::description(),
-CPAN::Module::distribution(), CPAN::Module::dslip_status(),
-CPAN::Module::force($method, at args), CPAN::Module::get(),
-CPAN::Module::inst_file(), CPAN::Module::available_file(),
-CPAN::Module::inst_version(), CPAN::Module::available_version(),
-CPAN::Module::install(), CPAN::Module::look(), CPAN::Module::make(),
-CPAN::Module::manpage_headline(), CPAN::Module::perldoc(),
-CPAN::Module::readme(), CPAN::Module::reports(), CPAN::Module::test(),
-CPAN::Module::uptodate(), CPAN::Module::userid()
-
-=item Cache Manager
-
-=item Bundles
-
-=back
-
-=item PREREQUISITES
-
-=item UTILITIES
-
-=over 4
-
-=item Finding packages and VERSION
-
-=item Debugging
-
-o debug package.., o debug -package.., o debug all, o debug number
-
-=item Floppy, Zip, Offline Mode
-
-=item Basic Utilities for Programmers
-
-has_inst($module), has_usable($module), instance($module)
-
-=back
-
-=item SECURITY
-
-=over 4
-
-=item Cryptographically signed modules
-
-=back
-
-=item EXPORT
-
-=item ENVIRONMENT
-
-=item POPULATE AN INSTALLATION WITH LOTS OF MODULES
-
-=item WORKING WITH CPAN.pm BEHIND FIREWALLS
-
-=over 4
-
-=item Three basic types of firewalls
-
-http firewall, ftp firewall, One way visibility, SOCKS, IP Masquerade
-
-=item Configuring lynx or ncftp for going through a firewall
-
-=back
-
-=item FAQ
-
-1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
-
-=item COMPATIBILITY
-
-=over 4
-
-=item OLD PERL VERSIONS
-
-=item CPANPLUS
-
-=back
-
-=item SECURITY ADVICE
-
-=item BUGS
-
-=item AUTHOR
-
-=item LICENSE
-
-=item TRANSLATIONS
-
-=item SEE ALSO
-
-=back
-
-=head2 CPAN::API::HOWTO - a recipe book for programming with CPAN.pm
-
-=over 4
-
-=item RECIPES
-
-=over 4
-
-=item What distribution contains a particular module?
-
-=item What modules does a particular distribution contain?
-
-=back
-
-=item SEE ALSO
-
-=item LICENSE
-
-=item AUTHOR
-
-=back
-
-=head2 CPAN::FirstTime - Utility for CPAN::Config file Initialization
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-auto_commit, build_cache, build_dir, build_dir_reuse,
-build_requires_install_policy, cache_metadata, check_sigs, colorize_output,
-colorize_print, colorize_warn, colorize_debug, commandnumber_in_prompt,
-ftp_passive, getcwd, histfile, histsize, inactivity_timeout, index_expire,
-inhibit_startup_message, keep_source_where, load_module_verbosity,
-makepl_arg, make_arg, make_install_arg, make_install_make_command,
-mbuildpl_arg, mbuild_arg, mbuild_install_arg, mbuild_install_build_command,
-pager, prefer_installer, prefs_dir, prerequisites_policy,
-randomize_urllist, scan_cache, shell, show_unparsable_versions,
-show_upload_date, show_zero_versions, tar_verbosity, term_is_latin,
-term_ornaments, test_report, use_sqlite, yaml_load_code, yaml_module
-
-=over 4
-
-=item LICENSE
-
-=back
-
-=head2 CPAN::Kwalify - Interface between CPAN.pm and Kwalify.pm
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-_validate($schema_name, $data, $file, $doc), yaml($schema_name)
-
-=item AUTHOR
-
-=item LICENSE
-
-=back
-
-=head2 CPAN::Version - utility functions to compare CPAN versions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item LICENSE
-
-=back
-
-=head2 CPANPLUS - API & CLI access to the CPAN mirrors
-
-=over 4
-
-=item SYNOPSIS
-
-=item GUIDE TO DOCUMENTATION
-
-=over 4
-
-=item GENERAL USAGE
-
-=item API REFERENCE
-
-=back
-
-=back
-
-=over 4
-
-=item COMMANDLINE TOOLS
-
-=over 4
-
-=item STARTING AN INTERACTIVE SHELL
-
-=item BUILDING PACKAGES
-
-=item $bool = install( Module::Name | /A/AU/AUTHOR/Module-Name-1.tgz )
-
-=item $where = fetch( Module::Name | /A/AU/AUTHOR/Module-Name-1.tgz )
-
-=item $where = get( Module::Name | /A/AU/AUTHOR/Module-Name-1.tgz )
-
-=item shell()
-
-=back
-
-=item FAQ
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=item CONTACT INFORMATION
-
-Bug reporting: I<bug-cpanplus at rt.cpan.org>, Questions & suggestions:
-I<cpanplus-devel at lists.sourceforge.net>
-
-=back
-
-=head2 CPANPLUS::Backend
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item ENVIRONMENT
-
-=item METHODS
-
-=over 4
-
-=item $cb = CPANPLUS::Backend->new( [CONFIGURE_OBJ] )
-
-Provide a valid C<CPANPLUS::Configure> object, No arguments
-
-=back
-
-=back
-
-=over 4
-
-=item $href = $cb->module_tree( [@modules_names_list] )
-
-=back
-
-=over 4
-
-=item $href = $cb->author_tree( [@author_names_list] )
-
-=back
-
-=over 4
-
-=item $conf = $cb->configure_object;
-
-=back
-
-=over 4
-
-=item $su = $cb->selfupdate_object;
-
-=back
-
-=over 4
-
-=item @mods = $cb->search( type => TYPE, allow => AREF, [data => AREF,
-verbose => BOOL] )
-
-=back
-
-=over 4
-
-=item $backend_rv = $cb->fetch( modules => \@mods )
-
-=item $backend_rv = $cb->extract( modules => \@mods )
-
-=item $backend_rv = $cb->install( modules => \@mods )
-
-=item $backend_rv = $cb->readme( modules => \@mods )
-
-=item $backend_rv = $cb->files( modules => \@mods )
-
-=item $backend_rv = $cb->distributions( modules => \@mods )
-
-=back
-
-=over 4
-
-=item $mod_obj = $cb->parse_module( module =>
-$modname|$distname|$modobj|URI )
-
-Text::Bastardize, Text-Bastardize, Text-Bastardize-1.06,
-AYRNIEU/Text-Bastardize, AYRNIEU/Text-Bastardize-1.06,
-AYRNIEU/Text-Bastardize-1.06.tar.gz,
-http://example.com/Text-Bastardize-1.06.tar.gz,
-file:///tmp/Text-Bastardize-1.06.tar.gz
-
-=back
-
-=over 4
-
-=item $bool = $cb->reload_indices( [update_source => BOOL, verbose => BOOL]
-);
-
-=back
-
-=over 4
-
-=item $bool = $cb->flush(CACHE_NAME)
-
-C<methods>, C<hosts>, C<modules>, C<lib>, C<load>, C<all>
-
-=back
-
-=over 4
-
-=item @mods = $cb->installed()
-
-=back
-
-=over 4
-
-=item $bool = $cb->local_mirror([path => '/dir/to/save/to', index_files =>
-BOOL, force => BOOL, verbose => BOOL] )
-
-path, index_files, force, verbose
-
-=back
-
-=over 4
-
-=item $file = $cb->autobundle([path => OUTPUT_PATH, force => BOOL, verbose
-=> BOOL])
-
-=back
-
-=over 4
-
-=item CUSTOM MODULE SOURCES
-
-=over 4
-
-=item %files = $cb->list_custom_sources
-
-=back
-
-=back
-
-=over 4
-
-=item $local_index = $cb->add_custom_source( uri => URI, [verbose => BOOL]
-);
-
-=back
-
-=over 4
-
-=item $local_index = $cb->remove_custom_source( uri => URI, [verbose =>
-BOOL] );
-
-=back
-
-=over 4
-
-=item $bool = $cb->update_custom_source( [remote => URI] );
-
-=back
-
-=over 4
-
-=item $file = $cb->write_custom_source_index( path =>
-/path/to/package/root, [to => /path/to/index/file, verbose => BOOL] );
-
-=back
-
-=over 4
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 CPANPLUS::Backend::RV
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=over 4
-
-=item new( ok => BOOL, args => DATA, rv => DATA, [function => $method_name]
-)
-
-ok, args, rv, function
-
-=back
-
-=back
-
-=over 4
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 CPANPLUS::Config
-
-=over 4
-
-=item DESCRIPTION
-
-=item CONFIGURATION
-
-=back
-
-=over 4
-
-=item Section 'conf'
-
-hosts
-
-=back
-
-base
-
-buildflags
-
-cpantest
-
-cpantest_mx
-
-debug
-
-dist_type
-
-email
-
-extractdir
-
-fetchdir
-
-flush
-
-force
-
-lib
-
-makeflags
-
-makemakerflags
-
-md5
-
-no_update
-
-passive
-
-prefer_bin
-
-prefer_makefile
-
-prereqs
-
-shell
-
-show_startup_tip
-
-signature
-
-skiptest
-
-storable
-
-timeout
-
-verbose
-
-write_install_log
-
-editor
-
-make
-
-pager
-
-shell
-
-sudo
-
-perlwrapper
-
-=over 4
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 CPANPLUS::Configure
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=over 4
-
-=item $Configure = CPANPLUS::Configure->new( load_configs => BOOL )
-
-=back
-
-=back
-
-=over 4
-
-=item $bool = $Configure->init( [rescan => BOOL])
-
-=back
-
-=over 4
-
-=item can_save( [$config_location] )
-
-=back
-
-=over 4
-
-=item $file = $conf->save( [$package_name] )
-
-=back
-
-=over 4
-
-=item options( type => TYPE )
-
-=back
-
-=over 4
-
-=item ACCESSORS
-
-=over 4
-
-=item get_SOMETHING( ITEM, [ITEM, ITEM, ... ] );
-
-=item set_SOMETHING( ITEM => VAL, [ITEM => VAL, ITEM => VAL, ... ] );
-
-=item add_SOMETHING( ITEM => VAL, [ITEM => VAL, ITEM => VAL, ... ] );
-
-set|get_conf, set|get_program, _set|_get_build, _set|_get_source,
-_set|_get_mirror, _set|_get_fetch
-
-=back
-
-=back
-
-=over 4
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 CPANPLUS::Dist
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item ACCESSORS
-
-parent(), status()
-
-=item STATUS ACCESSORS
-
-created(), installed(), uninstalled(), dist()
-
-=back
-
-=over 4
-
-=item $dist = CPANPLUS::Dist->new( module => MODOBJ, [format => DIST_TYPE]
-);
-
-=back
-
-=over 4
-
-=item @dists = CPANPLUS::Dist->dist_types;
-
-=back
-
-=over 4
-
-=item prereq_satisfied( modobj => $modobj, version => $version_spec )
-
-=back
-
-=over 4
-
-=item _resolve_prereqs
-
-=back
-
-=head2 CPANPLUS::Dist::Base - Base class for custom distribution classes
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FLOW
-
-=item METHODS
-
-=back
-
-=over 4
-
-=item $bool = $Class->format_available
-
-=back
-
-=over 4
-
-=item $bool = $dist->init
-
-=back
-
-=over 4
-
-=item $bool = $dist->prepare
-
-=back
-
-=over 4
-
-=item $bool = $dist->create
-
-=back
-
-=over 4
-
-=item $bool = $dist->install
-
-=back
-
-=over 4
-
-=item $bool = $dist->uninstall
-
-=back
-
-=head2 CPANPLUS::Dist::Build
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item ACCESSORS
-
-parent(), status()
-
-=item STATUS ACCESSORS
-
-build_pl (), build (), test (), prepared (), distdir (), created (),
-installed (), uninstalled (), _create_args (), _install_args (), _mb_object
-()
-
-=back
-
-=over 4
-
-=item METHODS
-
-=over 4
-
-=item $bool = CPANPLUS::Dist::Build->format_available();
-
-=back
-
-=back
-
-=over 4
-
-=item $bool = $dist->init();
-
-=back
-
-=over 4
-
-=item $bool = $dist->prepare([perl => '/path/to/perl', buildflags =>
-'EXTRA=FLAGS', force => BOOL, verbose => BOOL])
-
-=back
-
-=over 4
-
-=item $dist->create([perl => '/path/to/perl', buildflags => 'EXTRA=FLAGS',
-prereq_target => TARGET, force => BOOL, verbose => BOOL, skiptest => BOOL])
-
-=back
-
-=over 4
-
-=item $dist->install([verbose => BOOL, perl => /path/to/perl])
-
-=back
-
-=over 4
-
-=item KNOWN ISSUES
-
-Module::Build can not be upgraded using its own API (#13169), Module::Build
-does not provide access to install history (#9793)
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 CPANPLUS::Dist::MM
-
-=over 4
-
-=item SYNOPSIS
-
-=item ACCESSORS
-
-parent(), status()
-
-=item STATUS ACCESSORS
-
-makefile (), make (), test (), prepared (), distdir (), created (),
-installed (), uninstalled (), _create_args (), _install_args ()
-
-=back
-
-=over 4
-
-=item METHODS
-
-=over 4
-
-=item $bool = $dist->format_available();
-
-=back
-
-=back
-
-=over 4
-
-=item $href = $dist->_find_prereqs( file => '/path/to/Makefile', [verbose
-=> BOOL])
-
-=back
-
-=over 4
-
-=item $bool = $dist->create([perl => '/path/to/perl', make =>
-'/path/to/make', makeflags => 'EXTRA=FLAGS', prereq_target => TARGET,
-skiptest => BOOL, force => BOOL, verbose => BOOL])
-
-=back
-
-=over 4
-
-=item $bool = $dist->install([make => '/path/to/make', makemakerflags =>
-'EXTRA=FLAGS', force => BOOL, verbose => BOOL])
-
-=back
-
-=over 4
-
-=item $bool = $dist->write_makefile_pl([force => BOOL, verbose => BOOL])
-
-=back
-
-=head2 CPANPLUS::Dist::Sample -- Sample code to create your own Dist::*
-plugin
-
-=over 4
-
-=item Description.
-
-=back
-
-=head2 CPANPLUS::Error
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FUNCTIONS
-
-=over 4
-
-=item cp_msg("message string" [,VERBOSE])
-
-=item msg()
-
-=item cp_error("error string" [,VERBOSE])
-
-=item error()
-
-=back
-
-=item CLASS METHODS
-
-=over 4
-
-=item CPANPLUS::Error->stack()
-
-=item CPANPLUS::Error->stack_as_string([TRACE])
-
-=item CPANPLUS::Error->flush()
-
-=back
-
-=back
-
-=over 4
-
-=item GLOBAL VARIABLES
-
-$ERROR_FH, $MSG_FH
-
-=back
-
-=head2 CPANPLUS::FAQ
-
-=over 4
-
-=item DESCRIPTION
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 CPANPLUS::Hacking
-
-=over 4
-
-=item DESCRIPTION
-
-=item OBTAINING CPANPLUS
-
-=item INSTALLING CPANPLUS
-
-=item CONFIGURING CPANPLUS
-
-=item RUNNING CPANPLUS FROM DEVELOPMENT ENVIRONMENT
-
-=item RUNNING CPANPLUS TESTS
-
-=item FINDING BUGS
-
-Problem description, Program demonstrating the bug, [OPTIONAL] A patch to
-the test suite to test for the bug, [OPTIONAL] A patch to the code + tests
-+ documentation
-
-=item SUPPLYING PATCHES
-
-In C<diff -u> or C<diff -c> format, From the root of the snapshot,
-Including patches for code + tests + docs, Sent per mail to
-cpanplus-devel at lists.sourceforge.net, With subject containing C<[PATCH]> +
-description of the patch
-
-=back
-
-=head2 CPANPLUS::Internals
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item ACCESSORS
-
-_conf, _id, _lib, _perl5lib
-
-=back
-
-=over 4
-
-=item METHODS
-
-=over 4
-
-=item $internals = CPANPLUS::Internals->_init( _conf => CONFIG_OBJ )
-
-=back
-
-=back
-
-=over 4
-
-=item $bool = $internals->_flush( list => \@caches )
-
-=back
-
-=over 4
-
-=item $bool = $internals->_register_callback( name => CALLBACK_NAME, code
-=> CODEREF );
-
-install_prerequisite, send_test_report, munge_test_report,
-edit_test_report, proceed_on_test_failure, munge_dist_metafile
-
-=back
-
-=over 4
-
-=item $bool = $internals->_add_to_includepath( directories => \@dirs )
-
-=back
-
-=over 4
-
-=item $id = CPANPLUS::Internals->_last_id
-
-=item $id = CPANPLUS::Internals->_store_id( $internals )
-
-=item $obj = CPANPLUS::Internals->_retrieve_id( $ID )
-
-=item CPANPLUS::Internals->_remove_id( $ID )
-
-=item @objs = CPANPLUS::Internals->_return_all_objects
-
-=back
-
-=head2 CPANPLUS::Internals::Extract
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item $dir = _extract( module => $modobj, [perl => '/path/to/perl',
-extractdir => '/path/to/extract/to', prefer_bin => BOOL, verbose => BOOL,
-force => BOOL] )
-
-module, extractdir, prefer_bin, perl, verbose, force
-
-=back
-
-=back
-
-=head2 CPANPLUS::Internals::Fetch
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=back
-
-=over 4
-
-=item $path = _fetch( module => $modobj, [fetchdir => '/path/to/save/to',
-fetch_from => 'scheme://path/to/fetch/from', verbose => BOOL, force =>
-BOOL, prefer_bin => BOOL] )
-
-=back
-
-=over 4
-
-=item _add_fail_host( host => $host_hashref )
-
-=item _host_ok( host => $host_hashref )
-
-=back
-
-=head2 CPANPLUS::Internals::Report
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=over 4
-
-=item $bool = $cb->_have_query_report_modules
-
-=item $bool = $cb->_have_send_report_modules
-
-=back
-
-=back
-
-=over 4
-
-=item @list = $cb->_query_report( module => $modobj, [all_versions => BOOL,
-verbose => BOOL] )
-
-=back
-
-=over 4
-
-=item $bool = $cb->_send_report( module => $modobj, buffer => $make_output,
-failed => BOOL, [save => BOOL, address => $email_to, dontcc => BOOL,
-verbose => BOOL, force => BOOL]);
-
-module, buffer, failed, save, address, dontcc, verbose, force
-
-=back
-
-=head2 CPANPLUS::Internals::Search
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=over 4
-
-=item _search_module_tree( type => TYPE, allow => \@regexex, [data =>
-\@previous_results ] )
-
-type, allow, data
-
-=back
-
-=back
-
-=over 4
-
-=item _search_author_tree( type => TYPE, allow => \@regexex, [data =>
-\@previous_results ] )
-
-type, allow, data
-
-=back
-
-=over 4
-
-=item _all_installed()
-
-=back
-
-=head2 CPANPLUS::Internals::Source
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=back
-
-=over 4
-
-=item $cb->_check_trees( [update_source => BOOL, path => PATH, verbose =>
-BOOL] )
-
-update_source, path, verbose
-
-=back
-
-=over 4
-
-=item $cb->__check_uptodate( file => $file, name => $name, [update_source
-=> BOOL, verbose => BOOL] )
-
-file, name, update_source, verbose
-
-=back
-
-=over 4
-
-=item $cb->_update_source( name => $name, [path => $path, verbose => BOOL]
-)
-
-name, path, verbose
-
-=back
-
-=over 4
-
-=item $cb->_build_trees( uptodate => BOOL, [use_stored => BOOL, path =>
-$path, verbose => BOOL] )
-
-uptodate, path, verbose, use_stored
-
-=back
-
-=over 4
-
-=item $cb->__retrieve_source(name => $name, [path => $path, uptodate =>
-BOOL, verbose => BOOL])
-
-name, uptodate, path, verbose
-
-=back
-
-=over 4
-
-=item $cb->_save_source([verbose => BOOL, path => $path])
-
-path, verbose
-
-=back
-
-=over 4
-
-=item $cb->__create_author_tree([path => $path, uptodate => BOOL, verbose
-=> BOOL])
-
-uptodate, path, verbose
-
-=back
-
-=over 4
-
-=item $cb->_create_mod_tree([path => $path, uptodate => BOOL, verbose =>
-BOOL])
-
-uptodate, path, verbose
-
-=back
-
-=over 4
-
-=item $cb->__create_dslip_tree([path => $path, uptodate => BOOL, verbose =>
-BOOL])
-
-uptodate, path, verbose
-
-=back
-
-=over 4
-
-=item $cb->_dslip_defs ()
-
-=back
-
-=over 4
-
-=item $file = $cb->_add_custom_module_source( uri => URI, [verbose => BOOL]
-);
-
-=back
-
-=over 4
-
-=item $index = $cb->__custom_module_source_index_file( uri => $uri );
-
-=back
-
-=over 4
-
-=item $file = $cb->_remove_custom_module_source( uri => URI, [verbose =>
-BOOL] );
-
-=back
-
-=over 4
-
-=item %files = $cb->__list_custom_module_sources
-
-=back
-
-=over 4
-
-=item $bool = $cb->__update_custom_module_sources( [verbose => BOOL] );
-
-=back
-
-=over 4
-
-=item $ok = $cb->__update_custom_module_source
-
-=back
-
-=over 4
-
-=item $bool = $cb->__write_custom_module_index( path => /path/to/packages,
-[to => /path/to/index/file, verbose => BOOL] )
-
-=back
-
-=over 4
-
-=item $bool = $cb->__create_custom_module_entries( [verbose => BOOL] )
-
-=back
-
-=head2 CPANPLUS::Internals::Utils
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=over 4
-
-=item $cb->_mkdir( dir => '/some/dir' )
-
-=back
-
-=back
-
-=over 4
-
-=item $cb->_chdir( dir => '/some/dir' )
-
-=back
-
-=over 4
-
-=item $cb->_rmdir( dir => '/some/dir' );
-
-=back
-
-=over 4
-
-=item $cb->_perl_version ( perl => 'some/perl/binary' );
-
-=back
-
-=over 4
-
-=item $cb->_version_to_number( version => $version );
-
-=back
-
-=over 4
-
-=item $cb->_whoami
-
-=back
-
-=over 4
-
-=item _get_file_contents( file => $file );
-
-=back
-
-=over 4
-
-=item $cb->_mode_plus_w( file => '/path/to/file' );
-
-=back
-
-=over 4
-
-=item $uri = $cb->_host_to_uri( scheme => SCHEME, host => HOST, path =>
-PATH );
-
-=back
-
-=over 4
-
-=item $cb->_vcmp( VERSION, VERSION );
-
-=back
-
-=over 4
-
-=item $cb->_home_dir
-
-=back
-
-=over 4
-
-=item $path = $cb->_safe_path( path => $path );
-
-=back
-
-=over 4
-
-=item ($pkg, $version, $ext) = $cb->_split_package_string( package =>
-PACKAGE_STRING );
-
-=back
-
-=head2 CPANPLUS::Module
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item CLASS METHODS
-
-=over 4
-
-=item accessors ()
-
-=back
-
-=back
-
-=over 4
-
-=item ACCESSORS
-
-name, module, version, path, comment, package, description, dslip
-
-=back
-
-status, author, parent
-
-=over 4
-
-=item STATUS ACCESSORS
-
-installer_type, dist_cpan, dist, prereqs, signature, extract, fetch,
-readme, uninstall, created, installed, checksums, checksum_ok,
-checksum_value
-
-=item METHODS
-
-=over 4
-
-=item $self = CPANPLUS::Module::new( OPTIONS )
-
-=back
-
-=back
-
-=over 4
-
-=item $mod->package_name
-
-=item $mod->package_version
-
-=item $mod->package_extension
-
-=item $mod->package_is_perl_core
-
-=item $mod->module_is_supplied_with_perl_core( [version => $]] )
-
-=item $mod->is_bundle
-
-=item $mod->is_third_party
-
-=item $mod->third_party_information
-
-=back
-
-=over 4
-
-=item $clone = $self->clone
-
-=back
-
-=over 4
-
-=item $where = $self->fetch
-
-=back
-
-=over 4
-
-=item $path = $self->extract
-
-=back
-
-=over 4
-
-=item $type = $self->get_installer_type([prefer_makefile => BOOL])
-
-=back
-
-=over 4
-
-=item $dist = $self->dist([target => 'prepare|create', format =>
-DISTRIBUTION_TYPE, args => {key => val}]);
-
-=back
-
-=over 4
-
-=item $bool = $mod->prepare( )
-
-Convenience method around C<install()> that prepares a module
-without actually building it. This is equivalent to invoking C<install>
-with C<target> set to C<prepare>
-
-=back
-
-=over 4
-
-=item $bool = $mod->create( )
-
-=back
-
-=over 4
-
-=item $bool = $mod->test( )
-
-=back
-
-=over 4
-
-=item $bool = $self->install([ target => 'prepare|create|install', format
-=> FORMAT_TYPE, extractdir => DIRECTORY, fetchdir => DIRECTORY, prefer_bin
-=> BOOL, force => BOOL, verbose => BOOL, ..... ]);
-
-=back
-
-=over 4
-
-=item $text = $self->readme
-
-=back
-
-=over 4
-
-=item $version = $self->installed_version()
-
-=item $where = $self->installed_file()
-
-=item $bool = $self->is_uptodate([version => VERSION_NUMBER])
-
-=back
-
-=over 4
-
-=item $href = $self->details()
-
-=back
-
-=over 4
-
-=item @list = $self->contains()
-
-=back
-
-=over 4
-
-=item @list_of_hrefs = $self->fetch_report()
-
-=back
-
-=over 4
-
-=item $bool = $self->uninstall([type => [all|man|prog])
-
-=back
-
-=over 4
-
-=item @modobj = $self->distributions()
-
-=back
-
-=over 4
-
-=item @list = $self->files ()
-
-=back
-
-=over 4
-
-=item @list = $self->directory_tree ()
-
-=back
-
-=over 4
-
-=item @list = $self->packlist ()
-
-=back
-
-=over 4
-
-=item @list = $self->validate ()
-
-=back
-
-=over 4
-
-=item $bool = $self->add_to_includepath;
-
-=item $path = $self->best_path_to_module_build();
-
-=back
-
-=over 4
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 CPANPLUS::Module::Author
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item ACCESSORS
-
-author, cpanid, email, parent
-
-=back
-
-=over 4
-
-=item METHODS
-
-=over 4
-
-=item $auth = CPANPLUS::Module::Author->new( author => AUTHOR_NAME, cpanid
-=> CPAN_ID, _id => INTERNALS_ID [, email => AUTHOR_EMAIL] )
-
-=back
-
-=back
-
-=over 4
-
-=item @mod_objs = $auth->modules()
-
-=back
-
-=over 4
-
-=item @dists = $auth->distributions()
-
-=back
-
-=over 4
-
-=item CLASS METHODS
-
-=over 4
-
-=item accessors ()
-
-=back
-
-=back
-
-=head2 CPANPLUS::Module::Author::Fake
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=over 4
-
-=item new( _id => DIGIT )
-
-=back
-
-=back
-
-=head2 CPANPLUS::Module::Checksums
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=over 4
-
-=item $mod->checksums
-
-=back
-
-=back
-
-=head2 CPANPLUS::Module::Fake
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=over 4
-
-=item new( module => $mod, path => $path, package => $pkg, [_id => DIGIT] )
-
-=back
-
-=back
-
-=head2 CPANPLUS::inc
-
-=over 4
-
-=item DESCRIPTION
-
-=back
-
-=head2 CPANPLUS::inc - runtime inclusion of privately bundled modules
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-Put a coderef at the beginning of C<@INC>, Add the full path to the
-C<CPANPLUS/inc> directory to C<$ENV{PERL5LIB>
-
-=item METHODS
-
-=over 4
-
-=item CPANPLUS::inc->inc_path()
-
-=item CPANPLUS::inc->my_path()
-
-=item CPANPLUS::inc->installer_path()
-
-=back
-
-=back
-
-=over 4
-
-=item CPANPLUS::inc->original_perl5lib
-
-=item CPANPLUS::inc->original_perl5opt
-
-=item CPANPLUS::inc->original_inc
-
-=item CPANPLUS::inc->limited_perl5opt(@modules);
-
-=back
-
-=over 4
-
-=item CPANPLUS::inc->interesting_modules()
-
-=back
-
-=over 4
-
-=item INTERESTING MODULES
-
-Loop over your @INC, Check the version on every suitable module found in
- at INC
-
-=back
-
-=over 4
-
-=item DEBUG
-
-=item CAVEATS
-
-On multiple C<use lib> calls, our coderef may not be the first in @INC,
-Non-directories in @INC
-
-=back
-
-=head2 CPANPLUSelfupdate, CPANPLUS::Selfupdate
-
-=over 4
-
-=item SYNOPSIS
-
-=back
-
-=over 4
-
-=item METHODS
-
-=over 4
-
-=item $self = CPANPLUS::Selfupdate->new( $backend_object );
-
-=back
-
-=back
-
-=over 4
-
-=item %list = $self->list_modules_to_update( update =>
-"core|dependencies|enabled_features|features|all", [latest => BOOL] )
-
-List which modules C<selfupdate> would upgrade. You can update either
-the core (CPANPLUS itself), the core dependencies, all features you have
-currently turned on, or all features available, or everything.
-
-=back
-
-=over 4
-
-=item @features = $self->list_features
-
-=back
-
-=over 4
-
-=item @features = $self->list_enabled_features
-
-=back
-
-=over 4
-
-=item @mods = $self->modules_for_feature( FEATURE [,AS_HASH] )
-
-=back
-
-=over 4
-
-=item @mods = $self->list_core_dependencies( [AS_HASH] )
-
-=back
-
-=over 4
-
-=item @mods = $self->list_core_modules( [AS_HASH] )
-
-=back
-
-=over 4
-
-=item CPANPLUS::Selfupdate::Module
-
-=back
-
-=over 4
-
-=item $version = $mod->version_required
-
-=back
-
-=over 4
-
-=item $bool = $mod->is_installed_version_sufficient
-
-=back
-
-=over 4
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 CPANPLUShell, CPANPLUS::Shell
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 CPANPLUShell::Classic, CPANPLUS::Shell::Classic - CPAN.pm emulation
-for CPANPLUS
-
-=over 4
-
-=item DESCRIPTION
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=over 4
-
-=item SEE ALSO
-
-=back
-
-=head2 CPANPLUShell::Default, CPANPLUS::Shell::Default
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 CPANPLUShell::Default::Plugins::CustomSource,
-CPANPLUS::Shell::Default::Plugins::CustomSource
-
-=over 4
-
-=item SYNOPSIS
-
- ### elaborate help text
- CPAN Terminal> /? cs
-
-=item DESCRIPTION
-
-=back
-
-=head2 CPANPLUShell::Default::Plugins::HOWTO,
-CPANPLUS::Shell::Default::Plugins::HOWTO -- documentation on how to write
-your own plugins
-
-=over 4
-
-=item SYNOPSIS
-
-=item HOWTO
-
-=over 4
-
-=item Registering Plugin Modules
-
-=item Registering Plugin Commands
-
-=item Registering Plugin Help
-
-=item Arguments to Plugin Commands
-
-Classname -- The name of your plugin class, Shell -- The
-CPANPLUS::Shell::Default object, Backend -- The CPANPLUS::Backend object,
-Command -- The command issued by the user, Input -- The input string
-from the user, Options -- A hashref of options provided by the user
-
-=back
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 CPANPLUShell::Default::Plugins::Remote,
-CPANPLUS::Shell::Default::Plugins::Remote
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 CPANPLUShell::Default::Plugins::Source,
-CPANPLUS::Shell::Default::Plugins::Source
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 CPANox, CPAN::Nox - Wrapper around CPAN.pm without using any XS
-module
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item LICENSE
-
-=item SEE ALSO
-
-=back
-
-=head2 Carp, carp - warn of errors (from perspective of caller)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Forcing a Stack Trace
-
-=back
-
-=item GLOBAL VARIABLES
-
-=over 4
-
-=item $Carp::MaxEvalLen
-
-=item $Carp::MaxArgLen
-
-=item $Carp::MaxArgNums
-
-=item $Carp::Verbose
-
-=item %Carp::Internal
-
-=item %Carp::CarpInternal
-
-=item $Carp::CarpLevel
-
-=back
-
-=item BUGS
-
-=back
-
-=head2 Carp::Heavy - heavy machinery, no user serviceable parts inside
-
-=head2 Class::ISA -- report the search path for a class's ISA tree
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FUNCTIONS
-
-the function Class::ISA::super_path($CLASS), the function
-Class::ISA::self_and_super_path($CLASS), the function
-Class::ISA::self_and_super_versions($CLASS)
-
-=item CAUTIONARY NOTES
-
-=item COPYRIGHT
-
-=item AUTHOR
-
-=back
-
-=head2 Class::Struct - declare struct-like datatypes as Perl classes
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item The C<struct()> function
-
-=item Class Creation at Compile Time
-
-=item Element Types and Accessor Methods
-
-Scalar (C<'$'> or C<'*$'>), Array (C<'@'> or C<'*@'>), Hash (C<'%'> or
-C<'*%'>), Class (C<'Class_Name'> or C<'*Class_Name'>)
-
-=item Initializing with C<new>
-
-=back
-
-=item EXAMPLES
-
-Example 1, Example 2, Example 3
-
-=item Author and Modification History
-
-=back
-
-=head2 Compress::Raw::Zlib - Low-Level Interface to zlib compression
-library
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Compress::Raw::Zlib::Deflate
-
-=over 4
-
-=item B<($d, $status) = new Compress::Raw::Zlib::Deflate( [OPT] ) >
-
-B<-Level>, B<-Method>, B<-WindowBits>, B<-MemLevel>, B<-Strategy>,
-B<-Dictionary>, B<-Bufsize>, B<-AppendOutput>, B<-CRC32>, B<-ADLER32>
-
-=item B<$status = $d-E<gt>deflate($input, $output)>
-
-=item B<$status = $d-E<gt>flush($output [, $flush_type]) >
-
-=item B<$status = $d-E<gt>deflateParams([OPT])>
-
-B<-Level>, B<-Strategy>, B<-BufSize>
-
-=item B<$status = $d-E<gt>deflateTune($good_length, $max_lazy,
-$nice_length, $max_chain)>
-
-=item B<$d-E<gt>dict_adler()>
-
-=item B<$d-E<gt>crc32()>
-
-=item B<$d-E<gt>adler32()>
-
-=item B<$d-E<gt>msg()>
-
-=item B<$d-E<gt>total_in()>
-
-=item B<$d-E<gt>total_out()>
-
-=item B<$d-E<gt>get_Strategy()>
-
-=item B<$d-E<gt>get_Level()>
-
-=item B<$d-E<gt>get_BufSize()>
-
-=item Example
-
-=back
-
-=item Compress::Raw::Zlib::Inflate
-
-=over 4
-
-=item B< ($i, $status) = new Compress::Raw::Zlib::Inflate( [OPT] ) >
-
-B<-WindowBits>, B<-Bufsize>, B<-Dictionary>, B<-AppendOutput>, B<-CRC32>,
-B<-ADLER32>, B<-ConsumeInput>
-
-=item B< $status = $i-E<gt>inflate($input, $output [,$eof]) >
-
-=item B<$status = $i-E<gt>inflateSync($input)>
-
-=item B<$i-E<gt>dict_adler()>
-
-=item B<$i-E<gt>crc32()>
-
-=item B<$i-E<gt>adler32()>
-
-=item B<$i-E<gt>msg()>
-
-=item B<$i-E<gt>total_in()>
-
-=item B<$i-E<gt>total_out()>
-
-=item B<$d-E<gt>get_BufSize()>
-
-=item Example
-
-=back
-
-=item CHECKSUM FUNCTIONS
-
-=item ACCESSING ZIP FILES
-
-=item CONSTANTS
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 Compress::Raw::Zlib::Compress::Raw::Zlib, Compress::Raw::Zlib -
-Low-Level Interface to zlib compression library
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Compress::Raw::Zlib::Deflate
-
-=over 4
-
-=item B<($d, $status) = new Compress::Raw::Zlib::Deflate( [OPT] ) >
-
-B<-Level>, B<-Method>, B<-WindowBits>, B<-MemLevel>, B<-Strategy>,
-B<-Dictionary>, B<-Bufsize>, B<-AppendOutput>, B<-CRC32>, B<-ADLER32>
-
-=item B<$status = $d-E<gt>deflate($input, $output)>
-
-=item B<$status = $d-E<gt>flush($output [, $flush_type]) >
-
-=item B<$status = $d-E<gt>deflateParams([OPT])>
-
-B<-Level>, B<-Strategy>, B<-BufSize>
-
-=item B<$status = $d-E<gt>deflateTune($good_length, $max_lazy,
-$nice_length, $max_chain)>
-
-=item B<$d-E<gt>dict_adler()>
-
-=item B<$d-E<gt>crc32()>
-
-=item B<$d-E<gt>adler32()>
-
-=item B<$d-E<gt>msg()>
-
-=item B<$d-E<gt>total_in()>
-
-=item B<$d-E<gt>total_out()>
-
-=item B<$d-E<gt>get_Strategy()>
-
-=item B<$d-E<gt>get_Level()>
-
-=item B<$d-E<gt>get_BufSize()>
-
-=item Example
-
-=back
-
-=item Compress::Raw::Zlib::Inflate
-
-=over 4
-
-=item B< ($i, $status) = new Compress::Raw::Zlib::Inflate( [OPT] ) >
-
-B<-WindowBits>, B<-Bufsize>, B<-Dictionary>, B<-AppendOutput>, B<-CRC32>,
-B<-ADLER32>, B<-ConsumeInput>
-
-=item B< $status = $i-E<gt>inflate($input, $output [,$eof]) >
-
-=item B<$status = $i-E<gt>inflateSync($input)>
-
-=item B<$i-E<gt>dict_adler()>
-
-=item B<$i-E<gt>crc32()>
-
-=item B<$i-E<gt>adler32()>
-
-=item B<$i-E<gt>msg()>
-
-=item B<$i-E<gt>total_in()>
-
-=item B<$i-E<gt>total_out()>
-
-=item B<$d-E<gt>get_BufSize()>
-
-=item Example
-
-=back
-
-=item CHECKSUM FUNCTIONS
-
-=item ACCESSING ZIP FILES
-
-=item CONSTANTS
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 Compress::Zlib - Interface to zlib compression library
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Notes for users of Compress::Zlib version 1
-
-=back
-
-=item GZIP INTERFACE
-
-B<$gz = gzopen($filename, $mode)>, B<$gz = gzopen($filehandle, $mode)>,
-B<$bytesread = $gz-E<gt>gzread($buffer [, $size]) ;>, B<$bytesread =
-$gz-E<gt>gzreadline($line) ;>, B<$byteswritten = $gz-E<gt>gzwrite($buffer)
-;>, B<$status = $gz-E<gt>gzflush($flush_type) ;>, B<$offset =
-$gz-E<gt>gztell() ;>, B<$status = $gz-E<gt>gzseek($offset, $whence) ;>,
-B<$gz-E<gt>gzclose>, B<$gz-E<gt>gzsetparams($level, $strategy>, B<$level>,
-B<$strategy>, B<$gz-E<gt>gzerror>, B<$gzerrno>
-
-=over 4
-
-=item Examples
-
-=item Compress::Zlib::memGzip
-
-=item Compress::Zlib::memGunzip
-
-=back
-
-=item COMPRESS/UNCOMPRESS
-
-B<$dest = compress($source [, $level] ) ;>, B<$dest = uncompress($source)
-;>
-
-=item Deflate Interface
-
-=over 4
-
-=item B<($d, $status) = deflateInit( [OPT] )>
-
-B<-Level>, B<-Method>, B<-WindowBits>, B<-MemLevel>, B<-Strategy>,
-B<-Dictionary>, B<-Bufsize>
-
-=item B<($out, $status) = $d-E<gt>deflate($buffer)>
-
-=item B<($out, $status) = $d-E<gt>flush([flush_type])>
-
-=item B<$status = $d-E<gt>deflateParams([OPT])>
-
-B<-Level>, B<-Strategy>
-
-=item B<$d-E<gt>dict_adler()>
-
-=item B<$d-E<gt>msg()>
-
-=item B<$d-E<gt>total_in()>
-
-=item B<$d-E<gt>total_out()>
-
-=item Example
-
-=back
-
-=item Inflate Interface
-
-=over 4
-
-=item B<($i, $status) = inflateInit()>
-
-B<-WindowBits>, B<-Bufsize>, B<-Dictionary>
-
-=item B<($out, $status) = $i-E<gt>inflate($buffer)>
-
-=item B<$status = $i-E<gt>inflateSync($buffer)>
-
-=item B<$i-E<gt>dict_adler()>
-
-=item B<$i-E<gt>msg()>
-
-=item B<$i-E<gt>total_in()>
-
-=item B<$i-E<gt>total_out()>
-
-=item Example
-
-=back
-
-=item CHECKSUM FUNCTIONS
-
-=item CONSTANTS
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 Compress::Zlib::Compress::Zlib, Compress::Zlib - Interface to zlib
-compression library
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Notes for users of Compress::Zlib version 1
-
-=back
-
-=item GZIP INTERFACE
-
-B<$gz = gzopen($filename, $mode)>, B<$gz = gzopen($filehandle, $mode)>,
-B<$bytesread = $gz-E<gt>gzread($buffer [, $size]) ;>, B<$bytesread =
-$gz-E<gt>gzreadline($line) ;>, B<$byteswritten = $gz-E<gt>gzwrite($buffer)
-;>, B<$status = $gz-E<gt>gzflush($flush_type) ;>, B<$offset =
-$gz-E<gt>gztell() ;>, B<$status = $gz-E<gt>gzseek($offset, $whence) ;>,
-B<$gz-E<gt>gzclose>, B<$gz-E<gt>gzsetparams($level, $strategy>, B<$level>,
-B<$strategy>, B<$gz-E<gt>gzerror>, B<$gzerrno>
-
-=over 4
-
-=item Examples
-
-=item Compress::Zlib::memGzip
-
-=item Compress::Zlib::memGunzip
-
-=back
-
-=item COMPRESS/UNCOMPRESS
-
-B<$dest = compress($source [, $level] ) ;>, B<$dest = uncompress($source)
-;>
-
-=item Deflate Interface
-
-=over 4
-
-=item B<($d, $status) = deflateInit( [OPT] )>
-
-B<-Level>, B<-Method>, B<-WindowBits>, B<-MemLevel>, B<-Strategy>,
-B<-Dictionary>, B<-Bufsize>
-
-=item B<($out, $status) = $d-E<gt>deflate($buffer)>
-
-=item B<($out, $status) = $d-E<gt>flush([flush_type])>
-
-=item B<$status = $d-E<gt>deflateParams([OPT])>
-
-B<-Level>, B<-Strategy>
-
-=item B<$d-E<gt>dict_adler()>
-
-=item B<$d-E<gt>msg()>
-
-=item B<$d-E<gt>total_in()>
-
-=item B<$d-E<gt>total_out()>
-
-=item Example
-
-=back
-
-=item Inflate Interface
-
-=over 4
-
-=item B<($i, $status) = inflateInit()>
-
-B<-WindowBits>, B<-Bufsize>, B<-Dictionary>
-
-=item B<($out, $status) = $i-E<gt>inflate($buffer)>
-
-=item B<$status = $i-E<gt>inflateSync($buffer)>
-
-=item B<$i-E<gt>dict_adler()>
-
-=item B<$i-E<gt>msg()>
-
-=item B<$i-E<gt>total_in()>
-
-=item B<$i-E<gt>total_out()>
-
-=item Example
-
-=back
-
-=item CHECKSUM FUNCTIONS
-
-=item CONSTANTS
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 Config - access Perl configuration information
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-myconfig(), config_sh(), config_re($regex), config_vars(@names)
-
-=item EXAMPLE
-
-=item WARNING
-
-=item GLOSSARY
-
-=over 4
-
-=item _
-
-C<_a>, C<_exe>, C<_o>
-
-=item a
-
-C<afs>, C<afsroot>, C<alignbytes>, C<ansi2knr>, C<aphostname>,
-C<api_revision>, C<api_subversion>, C<api_version>, C<api_versionstring>,
-C<ar>, C<archlib>, C<archlibexp>, C<archname>, C<archname64>, C<archobjs>,
-C<asctime_r_proto>, C<awk>
-
-=item b
-
-C<baserev>, C<bash>, C<bin>, C<binexp>, C<bison>, C<byacc>, C<byteorder>
-
-=item c
-
-C<c>, C<castflags>, C<cat>, C<cc>, C<cccdlflags>, C<ccdlflags>, C<ccflags>,
-C<ccflags_uselargefiles>, C<ccname>, C<ccsymbols>, C<ccversion>, C<cf_by>,
-C<cf_email>, C<cf_time>, C<chgrp>, C<chmod>, C<chown>, C<clocktype>,
-C<comm>, C<compress>, C<contains>, C<cp>, C<cpio>, C<cpp>, C<cpp_stuff>,
-C<cppccsymbols>, C<cppflags>, C<cpplast>, C<cppminus>, C<cpprun>,
-C<cppstdin>, C<cppsymbols>, C<crypt_r_proto>, C<cryptlib>, C<csh>,
-C<ctermid_r_proto>, C<ctime_r_proto>
-
-=item d
-
-C<d__fwalk>, C<d_access>, C<d_accessx>, C<d_aintl>, C<d_alarm>,
-C<d_archlib>, C<d_asctime_r>, C<d_atolf>, C<d_atoll>,
-C<d_attribute_format>, C<d_attribute_malloc>, C<d_attribute_nonnull>,
-C<d_attribute_noreturn>, C<d_attribute_pure>, C<d_attribute_unused>,
-C<d_attribute_warn_unused_result>, C<d_bcmp>, C<d_bcopy>, C<d_bsd>,
-C<d_bsdgetpgrp>, C<d_bsdsetpgrp>, C<d_builtin_choose_expr>,
-C<d_builtin_expect>, C<d_bzero>, C<d_c99_variadic_macros>, C<d_casti32>,
-C<d_castneg>, C<d_charvspr>, C<d_chown>, C<d_chroot>, C<d_chsize>,
-C<d_class>, C<d_clearenv>, C<d_closedir>, C<d_cmsghdr_s>, C<d_const>,
-C<d_copysignl>, C<d_cplusplus>, C<d_crypt>, C<d_crypt_r>, C<d_csh>,
-C<d_ctermid>, C<d_ctermid_r>, C<d_ctime_r>, C<d_cuserid>, C<d_dbl_dig>,
-C<d_dbminitproto>, C<d_difftime>, C<d_dir_dd_fd>, C<d_dirfd>,
-C<d_dirnamlen>, C<d_dlerror>, C<d_dlopen>, C<d_dlsymun>, C<d_dosuid>,
-C<d_drand48_r>, C<d_drand48proto>, C<d_dup2>, C<d_eaccess>, C<d_endgrent>,
-C<d_endgrent_r>, C<d_endhent>, C<d_endhostent_r>, C<d_endnent>,
-C<d_endnetent_r>, C<d_endpent>, C<d_endprotoent_r>, C<d_endpwent>,
-C<d_endpwent_r>, C<d_endsent>, C<d_endservent_r>, C<d_eofnblk>,
-C<d_eunice>, C<d_faststdio>, C<d_fchdir>, C<d_fchmod>, C<d_fchown>,
-C<d_fcntl>, C<d_fcntl_can_lock>, C<d_fd_macros>, C<d_fd_set>,
-C<d_fds_bits>, C<d_fgetpos>, C<d_finite>, C<d_finitel>, C<d_flexfnam>,
-C<d_flock>, C<d_flockproto>, C<d_fork>, C<d_fp_class>, C<d_fpathconf>,
-C<d_fpclass>, C<d_fpclassify>, C<d_fpclassl>, C<d_fpos64_t>, C<d_frexpl>,
-C<d_fs_data_s>, C<d_fseeko>, C<d_fsetpos>, C<d_fstatfs>, C<d_fstatvfs>,
-C<d_fsync>, C<d_ftello>, C<d_ftime>, C<d_futimes>, C<d_Gconvert>,
-C<d_getcwd>, C<d_getespwnam>, C<d_getfsstat>, C<d_getgrent>,
-C<d_getgrent_r>, C<d_getgrgid_r>, C<d_getgrnam_r>, C<d_getgrps>,
-C<d_gethbyaddr>, C<d_gethbyname>, C<d_gethent>, C<d_gethname>,
-C<d_gethostbyaddr_r>, C<d_gethostbyname_r>, C<d_gethostent_r>,
-C<d_gethostprotos>, C<d_getitimer>, C<d_getlogin>, C<d_getlogin_r>,
-C<d_getmnt>, C<d_getmntent>, C<d_getnbyaddr>, C<d_getnbyname>,
-C<d_getnent>, C<d_getnetbyaddr_r>, C<d_getnetbyname_r>, C<d_getnetent_r>,
-C<d_getnetprotos>, C<d_getpagsz>, C<d_getpbyname>, C<d_getpbynumber>,
-C<d_getpent>, C<d_getpgid>, C<d_getpgrp>, C<d_getpgrp2>, C<d_getppid>,
-C<d_getprior>, C<d_getprotobyname_r>, C<d_getprotobynumber_r>,
-C<d_getprotoent_r>, C<d_getprotoprotos>, C<d_getprpwnam>, C<d_getpwent>,
-C<d_getpwent_r>, C<d_getpwnam_r>, C<d_getpwuid_r>, C<d_getsbyname>,
-C<d_getsbyport>, C<d_getsent>, C<d_getservbyname_r>, C<d_getservbyport_r>,
-C<d_getservent_r>, C<d_getservprotos>, C<d_getspnam>, C<d_getspnam_r>,
-C<d_gettimeod>, C<d_gmtime_r>, C<d_gnulibc>, C<d_grpasswd>, C<d_hasmntopt>,
-C<d_htonl>, C<d_ilogbl>, C<d_inc_version_list>, C<d_index>, C<d_inetaton>,
-C<d_int64_t>, C<d_isascii>, C<d_isfinite>, C<d_isinf>, C<d_isnan>,
-C<d_isnanl>, C<d_killpg>, C<d_lchown>, C<d_ldbl_dig>,
-C<d_libm_lib_version>, C<d_link>, C<d_localtime_r>,
-C<d_localtime_r_needs_tzset>, C<d_locconv>, C<d_lockf>, C<d_longdbl>,
-C<d_longlong>, C<d_lseekproto>, C<d_lstat>, C<d_madvise>,
-C<d_malloc_good_size>, C<d_malloc_size>, C<d_mblen>, C<d_mbstowcs>,
-C<d_mbtowc>, C<d_memchr>, C<d_memcmp>, C<d_memcpy>, C<d_memmove>,
-C<d_memset>, C<d_mkdir>, C<d_mkdtemp>, C<d_mkfifo>, C<d_mkstemp>,
-C<d_mkstemps>, C<d_mktime>, C<d_mmap>, C<d_modfl>, C<d_modfl_pow32_bug>,
-C<d_modflproto>, C<d_mprotect>, C<d_msg>, C<d_msg_ctrunc>,
-C<d_msg_dontroute>, C<d_msg_oob>, C<d_msg_peek>, C<d_msg_proxy>,
-C<d_msgctl>, C<d_msgget>, C<d_msghdr_s>, C<d_msgrcv>, C<d_msgsnd>,
-C<d_msync>, C<d_munmap>, C<d_mymalloc>, C<d_nice>, C<d_nl_langinfo>,
-C<d_nv_preserves_uv>, C<d_nv_zero_is_allbits_zero>, C<d_off64_t>,
-C<d_old_pthread_create_joinable>, C<d_oldpthreads>, C<d_oldsock>,
-C<d_open3>, C<d_pathconf>, C<d_pause>, C<d_perl_otherlibdirs>,
-C<d_phostname>, C<d_pipe>, C<d_poll>, C<d_portable>, C<d_PRId64>,
-C<d_PRIeldbl>, C<d_PRIEUldbl>, C<d_PRIfldbl>, C<d_PRIFUldbl>,
-C<d_PRIgldbl>, C<d_PRIGUldbl>, C<d_PRIi64>, C<d_printf_format_null>,
-C<d_PRIo64>, C<d_PRIu64>, C<d_PRIx64>, C<d_PRIXU64>, C<d_procselfexe>,
-C<d_pseudofork>, C<d_pthread_atfork>, C<d_pthread_attr_setscope>,
-C<d_pthread_yield>, C<d_pwage>, C<d_pwchange>, C<d_pwclass>,
-C<d_pwcomment>, C<d_pwexpire>, C<d_pwgecos>, C<d_pwpasswd>, C<d_pwquota>,
-C<d_qgcvt>, C<d_quad>, C<d_random_r>, C<d_readdir>, C<d_readdir64_r>,
-C<d_readdir_r>, C<d_readlink>, C<d_readv>, C<d_recvmsg>, C<d_rename>,
-C<d_rewinddir>, C<d_rmdir>, C<d_safebcpy>, C<d_safemcpy>, C<d_sanemcmp>,
-C<d_sbrkproto>, C<d_scalbnl>, C<d_sched_yield>, C<d_scm_rights>,
-C<d_SCNfldbl>, C<d_seekdir>, C<d_select>, C<d_sem>, C<d_semctl>,
-C<d_semctl_semid_ds>, C<d_semctl_semun>, C<d_semget>, C<d_semop>,
-C<d_sendmsg>, C<d_setegid>, C<d_seteuid>, C<d_setgrent>, C<d_setgrent_r>,
-C<d_setgrps>, C<d_sethent>, C<d_sethostent_r>, C<d_setitimer>,
-C<d_setlinebuf>, C<d_setlocale>, C<d_setlocale_r>, C<d_setnent>,
-C<d_setnetent_r>, C<d_setpent>, C<d_setpgid>, C<d_setpgrp>, C<d_setpgrp2>,
-C<d_setprior>, C<d_setproctitle>, C<d_setprotoent_r>, C<d_setpwent>,
-C<d_setpwent_r>, C<d_setregid>, C<d_setresgid>, C<d_setresuid>,
-C<d_setreuid>, C<d_setrgid>, C<d_setruid>, C<d_setsent>, C<d_setservent_r>,
-C<d_setsid>, C<d_setvbuf>, C<d_sfio>, C<d_shm>, C<d_shmat>,
-C<d_shmatprototype>, C<d_shmctl>, C<d_shmdt>, C<d_shmget>, C<d_sigaction>,
-C<d_signbit>, C<d_sigprocmask>, C<d_sigsetjmp>, C<d_sitearch>,
-C<d_snprintf>, C<d_sockatmark>, C<d_sockatmarkproto>, C<d_socket>,
-C<d_socklen_t>, C<d_sockpair>, C<d_socks5_init>,
-C<d_sprintf_returns_strlen>, C<d_sqrtl>, C<d_srand48_r>, C<d_srandom_r>,
-C<d_sresgproto>, C<d_sresuproto>, C<d_statblks>, C<d_statfs_f_flags>,
-C<d_statfs_s>, C<d_statvfs>, C<d_stdio_cnt_lval>, C<d_stdio_ptr_lval>,
-C<d_stdio_ptr_lval_nochange_cnt>, C<d_stdio_ptr_lval_sets_cnt>,
-C<d_stdio_stream_array>, C<d_stdiobase>, C<d_stdstdio>, C<d_strchr>,
-C<d_strcoll>, C<d_strctcpy>, C<d_strerrm>, C<d_strerror>, C<d_strerror_r>,
-C<d_strftime>, C<d_strlcat>, C<d_strlcpy>, C<d_strtod>, C<d_strtol>,
-C<d_strtold>, C<d_strtoll>, C<d_strtoq>, C<d_strtoul>, C<d_strtoull>,
-C<d_strtouq>, C<d_strxfrm>, C<d_suidsafe>, C<d_symlink>, C<d_syscall>,
-C<d_syscallproto>, C<d_sysconf>, C<d_sysernlst>, C<d_syserrlst>,
-C<d_system>, C<d_tcgetpgrp>, C<d_tcsetpgrp>, C<d_telldir>,
-C<d_telldirproto>, C<d_time>, C<d_times>, C<d_tm_tm_gmtoff>,
-C<d_tm_tm_zone>, C<d_tmpnam_r>, C<d_truncate>, C<d_ttyname_r>, C<d_tzname>,
-C<d_u32align>, C<d_ualarm>, C<d_umask>, C<d_uname>, C<d_union_semun>,
-C<d_unordered>, C<d_unsetenv>, C<d_usleep>, C<d_usleepproto>, C<d_ustat>,
-C<d_vendorarch>, C<d_vendorbin>, C<d_vendorlib>, C<d_vendorscript>,
-C<d_vfork>, C<d_void_closedir>, C<d_voidsig>, C<d_voidtty>, C<d_volatile>,
-C<d_vprintf>, C<d_vsnprintf>, C<d_wait4>, C<d_waitpid>, C<d_wcstombs>,
-C<d_wctomb>, C<d_writev>, C<d_xenix>, C<date>, C<db_hashtype>,
-C<db_prefixtype>, C<db_version_major>, C<db_version_minor>,
-C<db_version_patch>, C<defvoidused>, C<direntrytype>, C<dlext>, C<dlsrc>,
-C<doublesize>, C<drand01>, C<drand48_r_proto>, C<dynamic_ext>
-
-=item e
-
-C<eagain>, C<ebcdic>, C<echo>, C<egrep>, C<emacs>, C<endgrent_r_proto>,
-C<endhostent_r_proto>, C<endnetent_r_proto>, C<endprotoent_r_proto>,
-C<endpwent_r_proto>, C<endservent_r_proto>, C<eunicefix>, C<exe_ext>,
-C<expr>, C<extensions>, C<extras>
-
-=item f
-
-C<fflushall>, C<fflushNULL>, C<find>, C<firstmakefile>, C<flex>,
-C<fpossize>, C<fpostype>, C<freetype>, C<from>, C<full_ar>, C<full_csh>,
-C<full_sed>
-
-=item g
-
-C<gccansipedantic>, C<gccosandvers>, C<gccversion>, C<getgrent_r_proto>,
-C<getgrgid_r_proto>, C<getgrnam_r_proto>, C<gethostbyaddr_r_proto>,
-C<gethostbyname_r_proto>, C<gethostent_r_proto>, C<getlogin_r_proto>,
-C<getnetbyaddr_r_proto>, C<getnetbyname_r_proto>, C<getnetent_r_proto>,
-C<getprotobyname_r_proto>, C<getprotobynumber_r_proto>,
-C<getprotoent_r_proto>, C<getpwent_r_proto>, C<getpwnam_r_proto>,
-C<getpwuid_r_proto>, C<getservbyname_r_proto>, C<getservbyport_r_proto>,
-C<getservent_r_proto>, C<getspnam_r_proto>, C<gidformat>, C<gidsign>,
-C<gidsize>, C<gidtype>, C<glibpth>, C<gmake>, C<gmtime_r_proto>,
-C<gnulibc_version>, C<grep>, C<groupcat>, C<groupstype>, C<gzip>
-
-=item h
-
-C<h_fcntl>, C<h_sysfile>, C<hint>, C<hostcat>, C<html1dir>, C<html1direxp>,
-C<html3dir>, C<html3direxp>
-
-=item i
-
-C<i16size>, C<i16type>, C<i32size>, C<i32type>, C<i64size>, C<i64type>,
-C<i8size>, C<i8type>, C<i_arpainet>, C<i_bsdioctl>, C<i_crypt>, C<i_db>,
-C<i_dbm>, C<i_dirent>, C<i_dld>, C<i_dlfcn>, C<i_fcntl>, C<i_float>,
-C<i_fp>, C<i_fp_class>, C<i_gdbm>, C<i_grp>, C<i_ieeefp>, C<i_inttypes>,
-C<i_langinfo>, C<i_libutil>, C<i_limits>, C<i_locale>, C<i_machcthr>,
-C<i_malloc>, C<i_math>, C<i_memory>, C<i_mntent>, C<i_ndbm>, C<i_netdb>,
-C<i_neterrno>, C<i_netinettcp>, C<i_niin>, C<i_poll>, C<i_prot>,
-C<i_pthread>, C<i_pwd>, C<i_rpcsvcdbm>, C<i_sfio>, C<i_sgtty>, C<i_shadow>,
-C<i_socks>, C<i_stdarg>, C<i_stddef>, C<i_stdlib>, C<i_string>,
-C<i_sunmath>, C<i_sysaccess>, C<i_sysdir>, C<i_sysfile>, C<i_sysfilio>,
-C<i_sysin>, C<i_sysioctl>, C<i_syslog>, C<i_sysmman>, C<i_sysmode>,
-C<i_sysmount>, C<i_sysndir>, C<i_sysparam>, C<i_sysresrc>, C<i_syssecrt>,
-C<i_sysselct>, C<i_syssockio>, C<i_sysstat>, C<i_sysstatfs>,
-C<i_sysstatvfs>, C<i_systime>, C<i_systimek>, C<i_systimes>, C<i_systypes>,
-C<i_sysuio>, C<i_sysun>, C<i_sysutsname>, C<i_sysvfs>, C<i_syswait>,
-C<i_termio>, C<i_termios>, C<i_time>, C<i_unistd>, C<i_ustat>, C<i_utime>,
-C<i_values>, C<i_varargs>, C<i_varhdr>, C<i_vfork>,
-C<ignore_versioned_solibs>, C<inc_version_list>, C<inc_version_list_init>,
-C<incpath>, C<inews>, C<initialinstalllocation>, C<installarchlib>,
-C<installbin>, C<installhtml1dir>, C<installhtml3dir>, C<installman1dir>,
-C<installman3dir>, C<installprefix>, C<installprefixexp>,
-C<installprivlib>, C<installscript>, C<installsitearch>, C<installsitebin>,
-C<installsitehtml1dir>, C<installsitehtml3dir>, C<installsitelib>,
-C<installsiteman1dir>, C<installsiteman3dir>, C<installsitescript>,
-C<installstyle>, C<installusrbinperl>, C<installvendorarch>,
-C<installvendorbin>, C<installvendorhtml1dir>, C<installvendorhtml3dir>,
-C<installvendorlib>, C<installvendorman1dir>, C<installvendorman3dir>,
-C<installvendorscript>, C<intsize>, C<issymlink>, C<ivdformat>, C<ivsize>,
-C<ivtype>
-
-=item k
-
-C<known_extensions>, C<ksh>
-
-=item l
-
-C<ld>, C<lddlflags>, C<ldflags>, C<ldflags_uselargefiles>, C<ldlibpthname>,
-C<less>, C<lib_ext>, C<libc>, C<libperl>, C<libpth>, C<libs>, C<libsdirs>,
-C<libsfiles>, C<libsfound>, C<libspath>, C<libswanted>,
-C<libswanted_uselargefiles>, C<line>, C<lint>, C<lkflags>, C<ln>, C<lns>,
-C<localtime_r_proto>, C<locincpth>, C<loclibpth>, C<longdblsize>,
-C<longlongsize>, C<longsize>, C<lp>, C<lpr>, C<ls>, C<lseeksize>,
-C<lseektype>
-
-=item m
-
-C<mad>, C<madlyh>, C<madlyobj>, C<madlysrc>, C<mail>, C<mailx>, C<make>,
-C<make_set_make>, C<mallocobj>, C<mallocsrc>, C<malloctype>, C<man1dir>,
-C<man1direxp>, C<man1ext>, C<man3dir>, C<man3direxp>, C<man3ext>
-
-=item M
-
-C<Mcc>, C<mips_type>, C<mistrustnm>, C<mkdir>, C<mmaptype>, C<modetype>,
-C<more>, C<multiarch>, C<mv>, C<myarchname>, C<mydomain>, C<myhostname>,
-C<myuname>
-
-=item n
-
-C<n>, C<need_va_copy>, C<netdb_hlen_type>, C<netdb_host_type>,
-C<netdb_name_type>, C<netdb_net_type>, C<nm>, C<nm_opt>, C<nm_so_opt>,
-C<nonxs_ext>, C<nroff>, C<nv_preserves_uv_bits>, C<nveformat>,
-C<nvEUformat>, C<nvfformat>, C<nvFUformat>, C<nvgformat>, C<nvGUformat>,
-C<nvsize>, C<nvtype>
-
-=item o
-
-C<o_nonblock>, C<obj_ext>, C<old_pthread_create_joinable>, C<optimize>,
-C<orderlib>, C<osname>, C<osvers>, C<otherlibdirs>
-
-=item p
-
-C<package>, C<pager>, C<passcat>, C<patchlevel>, C<path_sep>, C<perl>,
-C<perl5>
-
-=item P
-
-C<PERL_API_REVISION>, C<PERL_API_SUBVERSION>, C<PERL_API_VERSION>,
-C<PERL_CONFIG_SH>, C<PERL_PATCHLEVEL>, C<perl_patchlevel>,
-C<PERL_REVISION>, C<PERL_SUBVERSION>, C<PERL_VERSION>, C<perladmin>,
-C<perllibs>, C<perlpath>, C<pg>, C<phostname>, C<pidtype>, C<plibpth>,
-C<pmake>, C<pr>, C<prefix>, C<prefixexp>, C<privlib>, C<privlibexp>,
-C<procselfexe>, C<prototype>, C<ptrsize>
-
-=item q
-
-C<quadkind>, C<quadtype>
-
-=item r
-
-C<randbits>, C<randfunc>, C<random_r_proto>, C<randseedtype>, C<ranlib>,
-C<rd_nodata>, C<readdir64_r_proto>, C<readdir_r_proto>, C<revision>, C<rm>,
-C<rm_try>, C<rmail>, C<run>, C<runnm>
-
-=item s
-
-C<sched_yield>, C<scriptdir>, C<scriptdirexp>, C<sed>, C<seedfunc>,
-C<selectminbits>, C<selecttype>, C<sendmail>, C<setgrent_r_proto>,
-C<sethostent_r_proto>, C<setlocale_r_proto>, C<setnetent_r_proto>,
-C<setprotoent_r_proto>, C<setpwent_r_proto>, C<setservent_r_proto>, C<sh>,
-C<shar>, C<sharpbang>, C<shmattype>, C<shortsize>, C<shrpenv>, C<shsharp>,
-C<sig_count>, C<sig_name>, C<sig_name_init>, C<sig_num>, C<sig_num_init>,
-C<sig_size>, C<signal_t>, C<sitearch>, C<sitearchexp>, C<sitebin>,
-C<sitebinexp>, C<sitehtml1dir>, C<sitehtml1direxp>, C<sitehtml3dir>,
-C<sitehtml3direxp>, C<sitelib>, C<sitelib_stem>, C<sitelibexp>,
-C<siteman1dir>, C<siteman1direxp>, C<siteman3dir>, C<siteman3direxp>,
-C<siteprefix>, C<siteprefixexp>, C<sitescript>, C<sitescriptexp>,
-C<sizesize>, C<sizetype>, C<sleep>, C<smail>, C<so>, C<sockethdr>,
-C<socketlib>, C<socksizetype>, C<sort>, C<spackage>, C<spitshell>,
-C<sPRId64>, C<sPRIeldbl>, C<sPRIEUldbl>, C<sPRIfldbl>, C<sPRIFUldbl>,
-C<sPRIgldbl>, C<sPRIGUldbl>, C<sPRIi64>, C<sPRIo64>, C<sPRIu64>,
-C<sPRIx64>, C<sPRIXU64>, C<srand48_r_proto>, C<srandom_r_proto>, C<src>,
-C<sSCNfldbl>, C<ssizetype>, C<startperl>, C<startsh>, C<static_ext>,
-C<stdchar>, C<stdio_base>, C<stdio_bufsiz>, C<stdio_cnt>, C<stdio_filbuf>,
-C<stdio_ptr>, C<stdio_stream_array>, C<strerror_r_proto>, C<strings>,
-C<submit>, C<subversion>, C<sysman>
-
-=item t
-
-C<tail>, C<tar>, C<targetarch>, C<tbl>, C<tee>, C<test>, C<timeincl>,
-C<timetype>, C<tmpnam_r_proto>, C<to>, C<touch>, C<tr>, C<trnl>, C<troff>,
-C<ttyname_r_proto>
-
-=item u
-
-C<u16size>, C<u16type>, C<u32size>, C<u32type>, C<u64size>, C<u64type>,
-C<u8size>, C<u8type>, C<uidformat>, C<uidsign>, C<uidsize>, C<uidtype>,
-C<uname>, C<uniq>, C<uquadtype>, C<use5005threads>, C<use64bitall>,
-C<use64bitint>, C<usecrosscompile>, C<usedl>, C<usefaststdio>,
-C<useithreads>, C<uselargefiles>, C<uselongdouble>, C<usemallocwrap>,
-C<usemorebits>, C<usemultiplicity>, C<usemymalloc>, C<usenm>, C<useopcode>,
-C<useperlio>, C<useposix>, C<usereentrant>, C<userelocatableinc>,
-C<usesfio>, C<useshrplib>, C<usesitecustomize>, C<usesocks>, C<usethreads>,
-C<usevendorprefix>, C<usevfork>, C<usrinc>, C<uuname>, C<uvoformat>,
-C<uvsize>, C<uvtype>, C<uvuformat>, C<uvxformat>, C<uvXUformat>
-
-=item v
-
-C<vendorarch>, C<vendorarchexp>, C<vendorbin>, C<vendorbinexp>,
-C<vendorhtml1dir>, C<vendorhtml1direxp>, C<vendorhtml3dir>,
-C<vendorhtml3direxp>, C<vendorlib>, C<vendorlib_stem>, C<vendorlibexp>,
-C<vendorman1dir>, C<vendorman1direxp>, C<vendorman3dir>,
-C<vendorman3direxp>, C<vendorprefix>, C<vendorprefixexp>, C<vendorscript>,
-C<vendorscriptexp>, C<version>, C<version_patchlevel_string>,
-C<versiononly>, C<vi>, C<voidflags>
-
-=item x
-
-C<xlibpth>
-
-=item y
-
-C<yacc>, C<yaccflags>
-
-=item z
-
-C<zcat>, C<zip>
-
-=back
-
-=item NOTE
-
-=back
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-dynamic, nonxs, static
-
-=item AUTHOR
-
-=back
-
-=head2 Cwd - get pathname of current working directory
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item getcwd and friends
-
-getcwd, cwd, fastcwd, fastgetcwd, getdcwd
-
-=item abs_path and friends
-
-abs_path, realpath, fast_abs_path
-
-=item $ENV{PWD}
-
-=back
-
-=item NOTES
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 DB - programmatic interface to the Perl debugging API
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Global Variables
-
- $DB::sub, %DB::sub, $DB::single, $DB::signal, $DB::trace, @DB::args,
- at DB::dbline, %DB::dbline, $DB::package, $DB::filename, $DB::subname,
-$DB::lineno
-
-=item API Methods
-
-CLIENT->register(), CLIENT->evalcode(STRING), CLIENT->skippkg('D::hide'),
-CLIENT->run(), CLIENT->step(), CLIENT->next(), CLIENT->done()
-
-=item Client Callback Methods
-
-CLIENT->init(), CLIENT->prestop([STRING]), CLIENT->stop(), CLIENT->idle(),
-CLIENT->poststop([STRING]), CLIENT->evalcode(STRING), CLIENT->cleanup(),
-CLIENT->output(LIST)
-
-=back
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 DBM_Filter -- Filter DBM keys/values
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item What is a DBM Filter?
-
-=over 4
-
-=item So what's new?
-
-=back
-
-=item METHODS
-
-=over 4
-
-=item $db->Filter_Push()
-
-=item $db->Filter_Key_Push()
-
-=item $db->Filter_Value_Push()
-
-Filter_Push, Filter_Key_Push, Filter_Value_Push
-
-=item $db->Filter_Pop()
-
-=item $db->Filtered()
-
-=back
-
-=item Writing a Filter
-
-=over 4
-
-=item Immediate Filters
-
-=item Canned Filters
-
-"name", params
-
-=back
-
-=item Filters Included
-
-utf8, encode, compress, int32, null
-
-=item NOTES
-
-=over 4
-
-=item Maintain Round Trip Integrity
-
-=item Don't mix filtered & non-filtered data in the same database file.
-
-=back
-
-=item EXAMPLE
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 DBM_Filter::compress - filter for DBM_Filter
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 DBM_Filter::encode - filter for DBM_Filter
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 DBM_Filter::int32 - filter for DBM_Filter
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 DBM_Filter::null - filter for DBM_Filter
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 DBM_Filter::utf8 - filter for DBM_Filter
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 DB_File - Perl5 access to Berkeley DB version 1.x
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-B<DB_HASH>, B<DB_BTREE>, B<DB_RECNO>
-
-=over 4
-
-=item Using DB_File with Berkeley DB version 2 or greater
-
-=item Interface to Berkeley DB
-
-=item Opening a Berkeley DB Database File
-
-=item Default Parameters
-
-=item In Memory Databases
-
-=back
-
-=item DB_HASH
-
-=over 4
-
-=item A Simple Example
-
-=back
-
-=item DB_BTREE
-
-=over 4
-
-=item Changing the BTREE sort order
-
-=item Handling Duplicate Keys
-
-=item The get_dup() Method
-
-=item The find_dup() Method
-
-=item The del_dup() Method
-
-=item Matching Partial Keys
-
-=back
-
-=item DB_RECNO
-
-=over 4
-
-=item The 'bval' Option
-
-=item A Simple Example
-
-=item Extra RECNO Methods
-
-B<$X-E<gt>push(list) ;>, B<$value = $X-E<gt>pop ;>, B<$X-E<gt>shift>,
-B<$X-E<gt>unshift(list) ;>, B<$X-E<gt>length>, B<$X-E<gt>splice(offset,
-length, elements);>
-
-=item Another Example
-
-=back
-
-=item THE API INTERFACE
-
-B<$status = $X-E<gt>get($key, $value [, $flags]) ;>, B<$status =
-$X-E<gt>put($key, $value [, $flags]) ;>, B<$status = $X-E<gt>del($key [,
-$flags]) ;>, B<$status = $X-E<gt>fd ;>, B<$status = $X-E<gt>seq($key,
-$value, $flags) ;>, B<$status = $X-E<gt>sync([$flags]) ;>
-
-=item DBM FILTERS
-
-B<filter_store_key>, B<filter_store_value>, B<filter_fetch_key>,
-B<filter_fetch_value>
-
-=over 4
-
-=item The Filter
-
-=item An Example -- the NULL termination problem.
-
-=item Another Example -- Key is a C int.
-
-=back
-
-=item HINTS AND TIPS
-
-=over 4
-
-=item Locking: The Trouble with fd
-
-=item Safe ways to lock a database
-
-B<Tie::DB_Lock>, B<Tie::DB_LockFile>, B<DB_File::Lock>
-
-=item Sharing Databases With C Applications
-
-=item The untie() Gotcha
-
-=back
-
-=item COMMON QUESTIONS
-
-=over 4
-
-=item Why is there Perl source in my database?
-
-=item How do I store complex data structures with DB_File?
-
-=item What does "Invalid Argument" mean?
-
-=item What does "Bareword 'DB_File' not allowed" mean?
-
-=back
-
-=item REFERENCES
-
-=item HISTORY
-
-=item BUGS
-
-=item AVAILABILITY
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Data::Dumper - stringified perl data structures, suitable for both
-printing and C<eval>
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Methods
-
-I<PACKAGE>->new(I<ARRAYREF [>, I<ARRAYREF]>), I<$OBJ>->Dump I<or>
-I<PACKAGE>->Dump(I<ARRAYREF [>, I<ARRAYREF]>), I<$OBJ>->Seen(I<[HASHREF]>),
-I<$OBJ>->Values(I<[ARRAYREF]>), I<$OBJ>->Names(I<[ARRAYREF]>),
-I<$OBJ>->Reset
-
-=item Functions
-
-Dumper(I<LIST>)
-
-=item Configuration Variables or Methods
-
-=item Exports
-
-Dumper
-
-=back
-
-=item EXAMPLES
-
-=item BUGS
-
-=over 4
-
-=item NOTE
-
-=back
-
-=item AUTHOR
-
-=item VERSION
-
-=item SEE ALSO
-
-=back
-
-=head2 Devel::DProf - a Perl code profiler
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item PROFILE FORMAT
-
-=item AUTOLOAD
-
-=item ENVIRONMENT
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 Devel::InnerPackage - find all the inner packages of a package
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=over 4
-
-=item list_packages <package name>
-
-=back
-
-=back
-
-=over 4
-
-=item AUTHOR
-
-=item COPYING
-
-=item BUGS
-
-=back
-
-=head2 Devel::PPPort - Perl/Pollution/Portability
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Why use ppport.h?
-
-=item How to use ppport.h
-
-=item Running ppport.h
-
-=back
-
-=item FUNCTIONS
-
-=over 4
-
-=item WriteFile
-
-=back
-
-=item COMPATIBILITY
-
-=over 4
-
-=item Provided Perl compatibility API
-
-=item Perl API not supported by ppport.h
-
-perl 5.9.5, perl 5.9.4, perl 5.9.3, perl 5.9.2, perl 5.9.1, perl 5.9.0,
-perl 5.8.3, perl 5.8.1, perl 5.8.0, perl 5.7.3, perl 5.7.2, perl 5.7.1,
-perl 5.6.1, perl 5.6.0, perl 5.005_03, perl 5.005, perl 5.004_05, perl
-5.004
-
-=back
-
-=item BUGS
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 Devel::Peek - A data debugging tool for the XS programmer
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Runtime debugging
-
-=item Memory footprint debugging
-
-=back
-
-=item EXAMPLES
-
-=over 4
-
-=item A simple scalar string
-
-=item A simple scalar number
-
-=item A simple scalar with an extra reference
-
-=item A reference to a simple scalar
-
-=item A reference to an array
-
-=item A reference to a hash
-
-=item Dumping a large array or hash
-
-=item A reference to an SV which holds a C pointer
-
-=item A reference to a subroutine
-
-=back
-
-=item EXPORTS
-
-=item BUGS
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Devel::SelfStubber - generate stubs for a SelfLoading module
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 Digest - Modules that calculate message digests
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-I<binary>, I<hex>, I<base64>
-
-=item OO INTERFACE
-
-$ctx = Digest->XXX($arg,...), $ctx = Digest->new(XXX => $arg,...), $ctx =
-Digest::XXX->new($arg,...), $other_ctx = $ctx->clone, $ctx->reset,
-$ctx->add( $data ), $ctx->add( $chunk1, $chunk2, ... ), $ctx->addfile(
-$io_handle ), $ctx->add_bits( $data, $nbits ), $ctx->add_bits( $bitstring
-), $ctx->digest, $ctx->hexdigest, $ctx->b64digest
-
-=item Digest speed
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Digest::MD5 - Perl interface to the MD5 Algorithm
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FUNCTIONS
-
-md5($data,...), md5_hex($data,...), md5_base64($data,...)
-
-=item METHODS
-
-$md5 = Digest::MD5->new, $md5->reset, $md5->clone, $md5->add($data,...),
-$md5->addfile($io_handle), $md5->add_bits($data, $nbits),
-$md5->add_bits($bitstring), $md5->digest, $md5->hexdigest, $md5->b64digest
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item COPYRIGHT
-
-=item AUTHORS
-
-=back
-
-=head2 Digest::SHA - Perl extension for SHA-1/224/256/384/512
-
-=over 4
-
-=item SYNOPSIS
-
-=item SYNOPSIS (HMAC-SHA)
-
-=item ABSTRACT
-
-=item DESCRIPTION
-
-=item NIST STATEMENT ON SHA-1
-
-=item PADDING OF BASE64 DIGESTS
-
-=item EXPORT
-
-=item EXPORTABLE FUNCTIONS
-
-B<sha1($data, ...)>, B<sha224($data, ...)>, B<sha256($data, ...)>,
-B<sha384($data, ...)>, B<sha512($data, ...)>, B<sha1_hex($data, ...)>,
-B<sha224_hex($data, ...)>, B<sha256_hex($data, ...)>, B<sha384_hex($data,
-...)>, B<sha512_hex($data, ...)>, B<sha1_base64($data, ...)>,
-B<sha224_base64($data, ...)>, B<sha256_base64($data, ...)>,
-B<sha384_base64($data, ...)>, B<sha512_base64($data, ...)>, B<new($alg)>,
-B<reset($alg)>, B<hashsize>, B<algorithm>, B<clone>, B<add($data, ...)>,
-B<add_bits($data, $nbits)>, B<add_bits($bits)>, B<addfile(*FILE)>,
-B<addfile($filename [, $mode])>, B<dump($filename)>, B<load($filename)>,
-B<digest>, B<hexdigest>, B<b64digest>, B<hmac_sha1($data, $key)>,
-B<hmac_sha224($data, $key)>, B<hmac_sha256($data, $key)>,
-B<hmac_sha384($data, $key)>, B<hmac_sha512($data, $key)>,
-B<hmac_sha1_hex($data, $key)>, B<hmac_sha224_hex($data, $key)>,
-B<hmac_sha256_hex($data, $key)>, B<hmac_sha384_hex($data, $key)>,
-B<hmac_sha512_hex($data, $key)>, B<hmac_sha1_base64($data, $key)>,
-B<hmac_sha224_base64($data, $key)>, B<hmac_sha256_base64($data, $key)>,
-B<hmac_sha384_base64($data, $key)>, B<hmac_sha512_base64($data, $key)>
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item ACKNOWLEDGMENTS
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 Digest::base - Digest base class
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=back
-
-=head2 Digest::file - Calculate digests of files
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-digest_file( $file, $algorithm, [$arg,...] ), digest_file_hex( $file,
-$algorithm, [$arg,...] ), digest_file_base64( $file, $algorithm, [$arg,...]
-)
-
-=item SEE ALSO
-
-=back
-
-=head2 DirHandle - supply object methods for directory handles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTES
-
-=back
-
-=head2 Dumpvalue - provides screen dump of Perl data.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Creation
-
-C<arrayDepth>, C<hashDepth>, C<compactDump>, C<veryCompact>, C<globPrint>,
-C<dumpDBFiles>, C<dumpPackages>, C<dumpReused>, C<tick>, C<quoteHighBit>,
-C<printUndef>, C<usageOnly>, unctrl, subdump, bareStringify, quoteHighBit,
-stopDbSignal
-
-=item Methods
-
-dumpValue, dumpValues, stringify, dumpvars, set_quote, set_unctrl,
-compactDump, veryCompact, set, get
-
-=back
-
-=back
-
-=head2 DynaLoader - Dynamically load C libraries into Perl code
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
- at dl_library_path, @dl_resolve_using, @dl_require_symbols, @dl_librefs,
- at dl_modules, @dl_shared_objects, dl_error(), $dl_debug, dl_findfile(),
-dl_expandspec(), dl_load_file(), dl_unload_file(), dl_load_flags(),
-dl_find_symbol(), dl_find_symbol_anywhere(), dl_undef_symbols(),
-dl_install_xsub(), bootstrap()
-
-=item AUTHOR
-
-=back
-
-=head2 DynaLoader::XSLoader, XSLoader - Dynamically load C libraries into
-Perl code
-
-=over 4
-
-=item VERSION
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Migration from C<DynaLoader>
-
-=item Backward compatible boilerplate
-
-=back
-
-=item Order of initialization: early load()
-
-=over 4
-
-=item The most hairy case
-
-=back
-
-=item DIAGNOSTICS
-
-C<Can't find '%s' symbol in %s>, C<Can't load '%s' for module %s: %s>,
-C<Undefined symbols present after loading %s: %s>,
-C<XSLoader::load('Your::Module', $Your::Module::VERSION)>
-
-=item LIMITATIONS
-
-=item BUGS
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=back
-
-=head2 Encode - character encodings
-
-=over 4
-
-=item SYNOPSIS
-
-=over 4
-
-=item Table of Contents
-
-=back
-
-=item DESCRIPTION
-
-=over 4
-
-=item TERMINOLOGY
-
-=back
-
-=item PERL ENCODING API
-
-$octets = encode(ENCODING, $string [, CHECK]), $string = decode(ENCODING,
-$octets [, CHECK]), [$obj =] find_encoding(ENCODING), [$length =]
-from_to($octets, FROM_ENC, TO_ENC [, CHECK]), $octets =
-encode_utf8($string);, $string = decode_utf8($octets [, CHECK]);
-
-=over 4
-
-=item Listing available encodings
-
-=item Defining Aliases
-
-=item Finding IANA Character Set Registry names
-
-=back
-
-=item Encoding via PerlIO
-
-=item Handling Malformed Data
-
-B<NOTE:> Not all encoding support this feature, I<CHECK> =
-Encode::FB_DEFAULT ( == 0), I<CHECK> = Encode::FB_CROAK ( == 1), I<CHECK> =
-Encode::FB_QUIET, I<CHECK> = Encode::FB_WARN, perlqq mode (I<CHECK> =
-Encode::FB_PERLQQ), HTML charref mode (I<CHECK> = Encode::FB_HTMLCREF), XML
-charref mode (I<CHECK> = Encode::FB_XMLCREF), The bitmask,
-Encode::LEAVE_SRC
-
-=item Defining Encodings
-
-=item The UTF8 flag
-
-Goal #1:, Goal #2:, Goal #3:, Goal #4:
-
-=over 4
-
-=item Messing with Perl's Internals
-
-is_utf8(STRING [, CHECK]), _utf8_on(STRING), _utf8_off(STRING)
-
-=back
-
-=item UTF-8 vs. utf8 vs. UTF8
-
-=item SEE ALSO
-
-=item MAINTAINER
-
-=item COPYRIGHT
-
-=back
-
-=head2 Encode::Alias - alias definitions to encodings
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-As a simple string, As a qr// compiled regular expression, e.g.:, As a code
-reference, e.g.:
-
-=over 4
-
-=item Alias overloading
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::Byte - Single Byte Encodings
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::CJKConstants -- Internally used by Encode::??::ISO_2022_*
-
-=head2 Encode::CN - China-based Chinese Encodings
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTES
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::CN::HZ -- internally used by Encode::CN
-
-=head2 Encode::Config -- internally used by Encode
-
-=head2 Encode::EBCDIC - EBCDIC Encodings
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::Encoding - Encode Implementation Base Class
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Methods you should implement
-
--E<gt>encode($string [,$check]), -E<gt>decode($octets [,$check]),
--E<gt>cat_decode($destination, $octets, $offset, $terminator [,$check])
-
-=item Other methods defined in Encode::Encodings
-
--E<gt>name, -E<gt>mime_name, -E<gt>renew, -E<gt>renewed, -E<gt>perlio_ok(),
--E<gt>needs_lines()
-
-=item Example: Encode::ROT13
-
-=back
-
-=item Why the heck Encode API is different?
-
-=over 4
-
-=item Compiled Encodings
-
-=back
-
-=item SEE ALSO
-
-Scheme 1, Scheme 2, Other Schemes
-
-=back
-
-=head2 Encode::GSM0338 -- ESTI GSM 03.38 Encoding
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTES
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::Guess -- Guesses encoding from data
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=item DESCRIPTION
-
-Encode::Guess->set_suspects, Encode::Guess->add_suspects,
-Encode::decode("Guess" ...), Encode::Guess->guess($data),
-guess_encoding($data, [, I<list of suspects>])
-
-=item CAVEATS
-
-=item TO DO
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::JP - Japanese Encodings
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=item DESCRIPTION
-
-=item Note on ISO-2022-JP(-1)?
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::JP::H2Z -- internally used by Encode::JP::2022_JP*
-
-=head2 Encode::JP::JIS7 -- internally used by Encode::JP
-
-=head2 Encode::KR - Korean Encodings
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::KR::2022_KR -- internally used by Encode::KR
-
-=head2 Encode::MIME::Header -- MIME 'B' and 'Q' header encoding
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=item DESCRIPTION
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::MIME::Name, Encode::MIME::NAME -- internally used by Encode
-
-=over 4
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::PerlIO -- a detailed document on Encode and PerlIO
-
-=over 4
-
-=item Overview
-
-=item How does it work?
-
-=item Line Buffering
-
-=over 4
-
-=item How can I tell whether my encoding fully supports PerlIO ?
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::Supported -- Encodings supported by Encode
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Encoding Names
-
-=back
-
-=item Supported Encodings
-
-=over 4
-
-=item Built-in Encodings
-
-=item Encode::Unicode -- other Unicode encodings
-
-=item Encode::Byte -- Extended ASCII
-
-ISO-8859 and corresponding vendor mappings, KOI8 - De Facto Standard for
-the Cyrillic world
-
-=item gsm0338 - Hentai Latin 1
-
-gsm0338 support before 2.19
-
-=item CJK: Chinese, Japanese, Korean (Multibyte)
-
-Encode::CN -- Continental China, Encode::JP -- Japan, Encode::KR -- Korea,
-Encode::TW -- Taiwan, Encode::HanExtra -- More Chinese via CPAN,
-Encode::JIS2K -- JIS X 0213 encodings via CPAN
-
-=item Miscellaneous encodings
-
-Encode::EBCDIC, Encode::Symbols, Encode::MIME::Header, Encode::Guess
-
-=back
-
-=item Unsupported encodings
-
- ISO-2022-JP-2 [RFC1554], ISO-2022-CN [RFC1922], Various HP-UX encodings,
-Cyrillic encoding ISO-IR-111, ISO-8859-8-1 [Hebrew], ISIRI 3342, Iran
-System, ISIRI 2900 [Farsi], Thai encoding TCVN, Vietnamese encodings VPS,
-Various Mac encodings, (Mac) Indic encodings
-
-=item Encoding vs. Charset -- terminology
-
-=item Encoding Classification (by Anton Tagunov and Dan Kogai)
-
-=over 4
-
-=item Microsoft-related naming mess
-
-KS_C_5601-1987, GB2312, Big5, Shift_JIS
-
-=back
-
-=item Glossary
-
-character repertoire, coded character set (CCS), character encoding scheme
-(CES), charset (in MIME context), EUC, ISO-2022, UCS, UCS-2, Unicode, UTF,
-UTF-16
-
-=item See Also
-
-=item References
-
-ECMA, ECMA-035 (eq C<ISO-2022>), IANA, Assigned Charset Names by IANA, ISO,
-RFC, UC, Unicode Glossary
-
-=over 4
-
-=item Other Notable Sites
-
-czyborra.com, CJK.inf, Jungshik Shin's Hangul FAQ, debian.org:
-"Introduction to i18n"
-
-=item Offline sources
-
-C<CJKV Information Processing> by Ken Lunde
-
-=back
-
-=back
-
-=head2 Encode::Symbol - Symbol Encodings
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::TW - Taiwan-based Chinese Encodings
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTES
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::Unicode -- Various Unicode Transformation Formats
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-L<http://www.unicode.org/glossary/> says:, Quick Reference
-
-=item Size, Endianness, and BOM
-
-=over 4
-
-=item by size
-
-=item by endianness
-
-BOM as integer when fetched in network byte order
-
-=back
-
-=item Surrogate Pairs
-
-=item Error Checking
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::Unicode::UTF7 -- UTF-7 encoding
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=item In Practice
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::lib::Encode::Alias, Encode::Alias - alias definitions to
-encodings
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-As a simple string, As a qr// compiled regular expression, e.g.:, As a code
-reference, e.g.:
-
-=over 4
-
-=item Alias overloading
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::lib::Encode::CJKConstants, Encode::CJKConstants.pm --
-Internally used by Encode::??::ISO_2022_*
-
-=head2 Encode::lib::Encode::CN::HZ, Encode::CN::HZ -- internally used by
-Encode::CN
-
-=head2 Encode::lib::Encode::Config, Encode::Config -- internally used by
-Encode
-
-=head2 Encode::lib::Encode::Encoding, Encode::Encoding - Encode
-Implementation Base Class
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Methods you should implement
-
--E<gt>encode($string [,$check]), -E<gt>decode($octets [,$check]),
--E<gt>cat_decode($destination, $octets, $offset, $terminator [,$check])
-
-=item Other methods defined in Encode::Encodings
-
--E<gt>name, -E<gt>mime_name, -E<gt>renew, -E<gt>renewed, -E<gt>perlio_ok(),
--E<gt>needs_lines()
-
-=item Example: Encode::ROT13
-
-=back
-
-=item Why the heck Encode API is different?
-
-=over 4
-
-=item Compiled Encodings
-
-=back
-
-=item SEE ALSO
-
-Scheme 1, Scheme 2, Other Schemes
-
-=back
-
-=head2 Encode::lib::Encode::GSM0338, Encode::GSM0338 -- ESTI GSM 03.38
-Encoding
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTES
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::lib::Encode::Guess, Encode::Guess -- Guesses encoding from
-data
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=item DESCRIPTION
-
-Encode::Guess->set_suspects, Encode::Guess->add_suspects,
-Encode::decode("Guess" ...), Encode::Guess->guess($data),
-guess_encoding($data, [, I<list of suspects>])
-
-=item CAVEATS
-
-=item TO DO
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::lib::Encode::JP::H2Z, Encode::JP::H2Z -- internally used by
-Encode::JP::2022_JP*
-
-=head2 Encode::lib::Encode::JP::JIS7, Encode::JP::JIS7 -- internally used
-by Encode::JP
-
-=head2 Encode::lib::Encode::KR::2022_KR, Encode::KR::2022_KR -- internally
-used by Encode::KR
-
-=head2 Encode::lib::Encode::MIME::Header, Encode::MIME::Header -- MIME 'B'
-and 'Q' header encoding
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=item DESCRIPTION
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::lib::Encode::MIME::Name, Encode::MIME::NAME -- internally
-used by Encode
-
-=over 4
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::lib::Encode::PerlIO, Encode::PerlIO -- a detailed document
-on Encode and PerlIO
-
-=over 4
-
-=item Overview
-
-=item How does it work?
-
-=item Line Buffering
-
-=over 4
-
-=item How can I tell whether my encoding fully supports PerlIO ?
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::lib::Encode::Supported, Encode::Supported -- Encodings
-supported by Encode
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Encoding Names
-
-=back
-
-=item Supported Encodings
-
-=over 4
-
-=item Built-in Encodings
-
-=item Encode::Unicode -- other Unicode encodings
-
-=item Encode::Byte -- Extended ASCII
-
-ISO-8859 and corresponding vendor mappings, KOI8 - De Facto Standard for
-the Cyrillic world
-
-=item gsm0338 - Hentai Latin 1
-
-gsm0338 support before 2.19
-
-=item CJK: Chinese, Japanese, Korean (Multibyte)
-
-Encode::CN -- Continental China, Encode::JP -- Japan, Encode::KR -- Korea,
-Encode::TW -- Taiwan, Encode::HanExtra -- More Chinese via CPAN,
-Encode::JIS2K -- JIS X 0213 encodings via CPAN
-
-=item Miscellaneous encodings
-
-Encode::EBCDIC, Encode::Symbols, Encode::MIME::Header, Encode::Guess
-
-=back
-
-=item Unsupported encodings
-
- ISO-2022-JP-2 [RFC1554], ISO-2022-CN [RFC1922], Various HP-UX encodings,
-Cyrillic encoding ISO-IR-111, ISO-8859-8-1 [Hebrew], ISIRI 3342, Iran
-System, ISIRI 2900 [Farsi], Thai encoding TCVN, Vietnamese encodings VPS,
-Various Mac encodings, (Mac) Indic encodings
-
-=item Encoding vs. Charset -- terminology
-
-=item Encoding Classification (by Anton Tagunov and Dan Kogai)
-
-=over 4
-
-=item Microsoft-related naming mess
-
-KS_C_5601-1987, GB2312, Big5, Shift_JIS
-
-=back
-
-=item Glossary
-
-character repertoire, coded character set (CCS), character encoding scheme
-(CES), charset (in MIME context), EUC, ISO-2022, UCS, UCS-2, Unicode, UTF,
-UTF-16
-
-=item See Also
-
-=item References
-
-ECMA, ECMA-035 (eq C<ISO-2022>), IANA, Assigned Charset Names by IANA, ISO,
-RFC, UC, Unicode Glossary
-
-=over 4
-
-=item Other Notable Sites
-
-czyborra.com, CJK.inf, Jungshik Shin's Hangul FAQ, debian.org:
-"Introduction to i18n"
-
-=item Offline sources
-
-C<CJKV Information Processing> by Ken Lunde
-
-=back
-
-=back
-
-=head2 Encode::lib::Encode::Unicode::UTF7, Encode::Unicode::UTF7 -- UTF-7
-encoding
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=item In Practice
-
-=item SEE ALSO
-
-=back
-
-=head2 Encode::lib::Encoder, Encode::Encoder -- Object Oriented Encoder
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=item Description
-
-=over 4
-
-=item Predefined Methods
-
-$e = Encode::Encoder-E<gt>new([$data, $encoding]);, encoder(),
-$e-E<gt>data([$data]), $e-E<gt>encoding([$encoding]),
-$e-E<gt>bytes([$encoding])
-
-=item Example: base64 transcoder
-
-=item Operator Overloading
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 Encodencoding, encoding - allows you to write your script in
-non-ascii or non-utf8
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=over 4
-
-=item Literal Conversions
-
-=item PerlIO layers for C<STD(IN|OUT)>
-
-=item Implicit upgrading for byte strings
-
-=item Side effects
-
-=item Side effects
-
-=item Side effects
-
-=back
-
-=item FEATURES THAT REQUIRE 5.8.1
-
-"NON-EUC" doublebyte encodings, tr//, DATA pseudo-filehandle
-
-=item USAGE
-
-use encoding [I<ENCNAME>] ;, use encoding I<ENCNAME> [ STDIN =E<gt>
-I<ENCNAME_IN> ...] ;, use encoding I<ENCNAME> Filter=E<gt>1;, no encoding;
-
-=item The Filter Option
-
-=over 4
-
-=item Filter-related changes at Encode version 1.87
-
-=back
-
-=item CAVEATS
-
-=over 4
-
-=item NOT SCOPED
-
-=item DO NOT MIX MULTIPLE ENCODINGS
-
-=item tr/// with ranges
-
-Legend of characters above
-
-=back
-
-=item EXAMPLE - Greekperl
-
-=item KNOWN PROBLEMS
-
-literals in regex that are longer than 127 bytes, EBCDIC, format, Thread
-safety
-
-=over 4
-
-=item The Logic of :locale
-
-=back
-
-=item HISTORY
-
-=item SEE ALSO
-
-=back
-
-=head2 Encoder, Encode::Encoder -- Object Oriented Encoder
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=item Description
-
-=over 4
-
-=item Predefined Methods
-
-$e = Encode::Encoder-E<gt>new([$data, $encoding]);, encoder(),
-$e-E<gt>data([$data]), $e-E<gt>encoding([$encoding]),
-$e-E<gt>bytes([$encoding])
-
-=item Example: base64 transcoder
-
-=item Operator Overloading
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 English - use nice English (or awk) names for ugly punctuation
-variables
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item PERFORMANCE
-
-=back
-
-=head2 Env - perl module that imports environment variables as scalars or
-arrays
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item LIMITATIONS
-
-=item AUTHOR
-
-=back
-
-=head2 Errno - System errno constants
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CAVEATS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Exporter - Implements default import method for modules
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item How to Export
-
-=item Selecting What To Export
-
-=item How to Import
-
-C<use ModuleName;>, C<use ModuleName ();>, C<use ModuleName qw(...);>
-
-=back
-
-=item Advanced features
-
-=over 4
-
-=item Specialised Import Lists
-
-=item Exporting without using Exporter's import method
-
-=item Exporting without inheriting from Exporter
-
-=item Module Version Checking
-
-=item Managing Unknown Symbols
-
-=item Tag Handling Utility Functions
-
-=item Generating combined tags
-
-=item C<AUTOLOAD>ed Constants
-
-=back
-
-=item Good Practices
-
-=over 4
-
-=item Declaring C<@EXPORT_OK> and Friends
-
-=item Playing Safe
-
-=item What not to Export
-
-=back
-
-=item SEE ALSO
-
-=item LICENSE
-
-=back
-
-=head2 Exporter::Heavy - Exporter guts
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 ExtUtils::CBuilder - Compile and link C code for Perl modules
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-new, have_compiler, compile, C<object_file>, C<include_dirs>,
-C<extra_compiler_flags>, link, lib_file, module_name, extra_linker_flags,
-link_executable, exe_file, object_file, lib_file, exe_file, prelink,
-need_prelink, extra_link_args_after_prelink
-
-=item TO DO
-
-=item HISTORY
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 ExtUtils::CBuilder::Platform::Windows - Builder class for Windows
-platforms
-
-=over 4
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 ExtUtils::Command - utilities to replace common UNIX commands in
-Makefiles etc.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item FUNCTIONS
-
-=back
-
-=back
-
-cat
-
-eqtime
-
-rm_rf
-
-rm_f
-
-touch
-
-mv
-
-cp
-
-chmod
-
-mkpath
-
-test_f
-
-test_d
-
-dos2unix
-
-=over 4
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 ExtUtils::Command::MM - Commands for the MM's to use in Makefiles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-B<test_harness>
-
-=back
-
-B<pod2man>
-
-B<warn_if_old_packlist>
-
-B<perllocal_install>
-
-B<uninstall>
-
-=head2 ExtUtils::Constant - generate XS code to import C header constants
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item USAGE
-
-IV, UV, NV, PV, PVN, SV, YES, NO, UNDEF
-
-=item FUNCTIONS
-
-=back
-
-constant_types
-
-XS_constant PACKAGE, TYPES, SUBNAME, C_SUBNAME
-
-autoload PACKAGE, VERSION, AUTOLOADER
-
-WriteMakefileSnippet
-
-WriteConstants ATTRIBUTE =E<gt> VALUE [, ...], NAME, DEFAULT_TYPE,
-BREAKOUT_AT, NAMES, C_FH, C_FILE, XS_FH, XS_FILE, SUBNAME, C_SUBNAME
-
-=over 4
-
-=item AUTHOR
-
-=back
-
-=head2 ExtUtils::Constant::Base - base class for ExtUtils::Constant objects
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item USAGE
-
-=back
-
-header
-
-memEQ_clause args_hashref
-
-dump_names arg_hashref, ITEM..
-
-assign arg_hashref, VALUE..
-
-return_clause arg_hashref, ITEM
-
-switch_clause arg_hashref, NAMELEN, ITEMHASH, ITEM..
-
-params WHAT
-
-dogfood arg_hashref, ITEM..
-
-normalise_items args, default_type, seen_types, seen_items, ITEM..
-
-C_constant arg_hashref, ITEM.., name, type, value, macro, default, pre,
-post, def_pre, def_post, utf8, weight
-
-=over 4
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 ExtUtils::Constant::Utils - helper functions for ExtUtils::Constant
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item USAGE
-
-C_stringify NAME
-
-=back
-
-perl_stringify NAME
-
-=over 4
-
-=item AUTHOR
-
-=back
-
-=head2 ExtUtils::Constant::XS, ExtUtils::Constant::Base - base class for
-ExtUtils::Constant objects
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 ExtUtils::Embed - Utilities for embedding Perl in C/C++ applications
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item @EXPORT
-
-=item FUNCTIONS
-
-xsinit(), Examples, ldopts(), Examples, perl_inc(), ccflags(), ccdlflags(),
-ccopts(), xsi_header(), xsi_protos(@modules), xsi_body(@modules)
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 ExtUtils::Install - install files from here to there
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-_chmod($$;$), _warnonce(@), _choke(@)
-
-=back
-
-_move_file_at_boot( $file, $target, $moan )
-
-_unlink_or_rename( $file, $tryhard, $installing )
-
-=over 4
-
-=item Functions
-
-B<install>
-
-=back
-
-_get_install_skip
-
-_have_write_access
-
-_can_write_dir(C<$dir>)
-
-_mkpath($dir,$show,$mode,$verbose,$fake)
-
-_copy($from,$to,$verbose,$fake)
-
-_chdir($from)
-
-_do_cleanup
-
-install_rooted_file( $file ), install_rooted_dir( $dir )
-
-forceunlink( $file, $tryhard )
-
-directory_not_empty( $dir )
-
-B<install_default> I<DISCOURAGED>
-
-B<uninstall>
-
-inc_uninstall($filepath,$libdir,$verbose,$nonono,$ignore)
-
-run_filter($cmd,$src,$dest)
-
-B<pm_to_blib>
-
-_autosplit
-
-_invokant
-
-=over 4
-
-=item ENVIRONMENT
-
-B<PERL_INSTALL_ROOT>, B<EU_INSTALL_IGNORE_SKIP>,
-B<EU_INSTALL_SITE_SKIPFILE>
-
-=item AUTHOR
-
-=item LICENSE
-
-=back
-
-=head2 ExtUtils::Installed - Inventory management of installed modules
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item USAGE
-
-=item FUNCTIONS
-
-new(), modules(), files(), directories(), directory_tree(), validate(),
-packlist(), version()
-
-=item EXAMPLE
-
-=item AUTHOR
-
-=back
-
-=head2 ExtUtils::Liblist - determine libraries to use and how to use them
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-For static extensions, For dynamic extensions at build/link time, For
-dynamic extensions at load time
-
-=over 4
-
-=item EXTRALIBS
-
-=item LDLOADLIBS and LD_RUN_PATH
-
-=item BSLOADLIBS
-
-=back
-
-=item PORTABILITY
-
-=over 4
-
-=item VMS implementation
-
-=item Win32 implementation
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 ExtUtils::MM - OS adjusted ExtUtils::MakeMaker subclass
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 ExtUtils::MM_AIX - AIX specific subclass of ExtUtils::MM_Unix
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Overridden methods
-
-=back
-
-=back
-
-=over 4
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 ExtUtils::MM_Any - Platform-agnostic MM methods
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=over 4
-
-=item Cross-platform helper methods
-
-=back
-
-=back
-
-=over 4
-
-=item Targets
-
-=back
-
-=over 4
-
-=item Init methods
-
-=back
-
-=over 4
-
-=item Tools
-
-=back
-
-=over 4
-
-=item File::Spec wrappers
-
-=back
-
-=over 4
-
-=item Misc
-
-=back
-
-=over 4
-
-=item AUTHOR
-
-=back
-
-=head2 ExtUtils::MM_BeOS - methods to override UN*X behaviour in
-ExtUtils::MakeMaker
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-os_flavor
-
-init_linker
-
-=head2 ExtUtils::MM_Cygwin - methods to override UN*X behaviour in
-ExtUtils::MakeMaker
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-os_flavor
-
-=back
-
-cflags
-
-replace_manpage_separator
-
-init_linker
-
-=head2 ExtUtils::MM_DOS - DOS specific subclass of ExtUtils::MM_Unix
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Overridden methods
-
-os_flavor
-
-=back
-
-=back
-
-B<replace_manpage_separator>
-
-=over 4
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 ExtUtils::MM_MacOS - once produced Makefiles for MacOS Classic
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 ExtUtils::MM_NW5 - methods to override UN*X behaviour in
-ExtUtils::MakeMaker
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-os_flavor
-
-init_platform, platform_constants
-
-const_cccmd
-
-static_lib
-
-dynamic_lib
-
-=head2 ExtUtils::MM_OS2 - methods to override UN*X behaviour in
-ExtUtils::MakeMaker
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-init_dist
-
-=back
-
-init_linker
-
-os_flavor
-
-=head2 ExtUtils::MM_QNX - QNX specific subclass of ExtUtils::MM_Unix
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Overridden methods
-
-=back
-
-=back
-
-=over 4
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 ExtUtils::MM_UWIN - U/WIN specific subclass of ExtUtils::MM_Unix
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Overridden methods
-
-os_flavor
-
-=back
-
-=back
-
-B<replace_manpage_separator>
-
-=over 4
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 ExtUtils::MM_Unix - methods used by ExtUtils::MakeMaker
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=back
-
-=over 4
-
-=item Methods
-
-os_flavor
-
-=back
-
-c_o (o)
-
-cflags (o)
-
-const_cccmd (o)
-
-const_config (o)
-
-const_loadlibs (o)
-
-constants (o)
-
-depend (o)
-
-init_DEST
-
-init_dist
-
-dist (o)
-
-dist_basics (o)
-
-dist_ci (o)
-
-dist_core (o)
-
-B<dist_target>
-
-B<tardist_target>
-
-B<zipdist_target>
-
-B<tarfile_target>
-
-zipfile_target
-
-uutardist_target
-
-shdist_target
-
-dlsyms (o)
-
-dynamic_bs (o)
-
-dynamic_lib (o)
-
-exescan
-
-extliblist
-
-find_perl
-
-fixin
-
-force (o)
-
-guess_name
-
-has_link_code
-
-init_dirscan
-
-init_MANPODS
-
-init_MAN1PODS
-
-init_MAN3PODS
-
-init_PM
-
-init_DIRFILESEP
-
-init_main
-
-init_others
-
-init_linker
-
-init_lib2arch
-
-init_PERL
-
-init_platform, platform_constants
-
-init_PERM
-
-init_xs
-
-install (o)
-
-installbin (o)
-
-linkext (o)
-
-lsdir
-
-macro (o)
-
-makeaperl (o)
-
-makefile (o)
-
-maybe_command
-
-needs_linking (o)
-
-parse_abstract
-
-parse_version
-
-pasthru (o)
-
-perl_script
-
-perldepend (o)
-
-perm_rw (o)
-
-perm_rwx (o)
-
-pm_to_blib
-
-post_constants (o)
-
-post_initialize (o)
-
-postamble (o)
-
-ppd
-
-prefixify
-
-processPL (o)
-
-quote_paren
-
-replace_manpage_separator
-
-cd
-
-oneliner
-
-quote_literal
-
-escape_newlines
-
-max_exec_len
-
-static (o)
-
-static_lib (o)
-
-staticmake (o)
-
-subdir_x (o)
-
-subdirs (o)
-
-test (o)
-
-test_via_harness (override)
-
-test_via_script (override)
-
-tools_other (o)
-
-tool_xsubpp (o)
-
-all_target
-
-top_targets (o)
-
-writedoc
-
-xs_c (o)
-
-xs_cpp (o)
-
-xs_o (o)
-
-=over 4
-
-=item SEE ALSO
-
-=back
-
-=head2 ExtUtils::MM_VMS - methods to override UN*X behaviour in
-ExtUtils::MakeMaker
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Methods always loaded
-
-wraplist
-
-=back
-
-=back
-
-=over 4
-
-=item Methods
-
-guess_name (override)
-
-=back
-
-find_perl (override)
-
-maybe_command (override)
-
-pasthru (override)
-
-pm_to_blib (override)
-
-perl_script (override)
-
-replace_manpage_separator
-
-init_DEST
-
-init_DIRFILESEP
-
-init_main (override)
-
-init_others (override)
-
-init_platform (override)
-
-platform_constants
-
-init_VERSION (override)
-
-constants (override)
-
-special_targets
-
-cflags (override)
-
-const_cccmd (override)
-
-tools_other (override)
-
-init_dist (override)
-
-c_o (override)
-
-xs_c (override)
-
-xs_o (override)
-
-dlsyms (override)
-
-dynamic_lib (override)
-
-static_lib (override)
-
-extra_clean_files
-
-zipfile_target, tarfile_target, shdist_target
-
-install (override)
-
-perldepend (override)
-
-makeaperl (override)
-
-maketext_filter (override)
-
-prefixify (override)
-
-cd
-
-oneliner
-
-B<echo>
-
-quote_literal
-
-escape_newlines
-
-max_exec_len
-
-init_linker
-
-eliminate_macros
-
-fixpath
-
-os_flavor
-
-=over 4
-
-=item AUTHOR
-
-=back
-
-=head2 ExtUtils::MM_VOS - VOS specific subclass of ExtUtils::MM_Unix
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Overridden methods
-
-=back
-
-=back
-
-=over 4
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 ExtUtils::MM_Win32 - methods to override UN*X behaviour in
-ExtUtils::MakeMaker
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item Overridden methods
-
-B<dlsyms>
-
-=back
-
-replace_manpage_separator
-
-B<maybe_command>
-
-B<init_DIRFILESEP>
-
-B<init_others>
-
-init_platform, platform_constants
-
-special_targets
-
-static_lib
-
-dynamic_lib
-
-extra_clean_files
-
-init_linker
-
-perl_script
-
-xs_o
-
-pasthru
-
-oneliner
-
-cd
-
-max_exec_len
-
-os_flavor
-
-cflags
-
-=head2 ExtUtils::MM_Win95 - method to customize MakeMaker for Win9X
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Overridden methods
-
-xs_c
-
-=back
-
-=back
-
-xs_cpp
-
-xs_o
-
-max_exec_len
-
-os_flavor
-
-=over 4
-
-=item AUTHOR
-
-=back
-
-=head2 ExtUtils::MY - ExtUtils::MakeMaker subclass for customization
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 ExtUtils::MakeMaker - Create a module Makefile
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item How To Write A Makefile.PL
-
-=item Default Makefile Behaviour
-
-=item make test
-
-=item make testdb
-
-=item make install
-
-=item INSTALL_BASE
-
-=item PREFIX and LIB attribute
-
-=item AFS users
-
-=item Static Linking of a new Perl Binary
-
-=item Determination of Perl Library and Installation Locations
-
-=item Which architecture dependent directory?
-
-=item Using Attributes and Parameters
-
-ABSTRACT, ABSTRACT_FROM, AUTHOR, BINARY_LOCATION, C, CCFLAGS, CONFIG,
-CONFIGURE, DEFINE, DESTDIR, DIR, DISTNAME, DISTVNAME, DL_FUNCS, DL_VARS,
-EXCLUDE_EXT, EXE_FILES, FIRST_MAKEFILE, FULLPERL, FULLPERLRUN,
-FULLPERLRUNINST, FUNCLIST, H, IMPORTS, INC, INCLUDE_EXT, INSTALLARCHLIB,
-INSTALLBIN, INSTALLDIRS, INSTALLMAN1DIR, INSTALLMAN3DIR, INSTALLPRIVLIB,
-INSTALLSCRIPT, INSTALLSITEARCH, INSTALLSITEBIN, INSTALLSITELIB,
-INSTALLSITEMAN1DIR, INSTALLSITEMAN3DIR, INSTALLSITESCRIPT,
-INSTALLVENDORARCH, INSTALLVENDORBIN, INSTALLVENDORLIB,
-INSTALLVENDORMAN1DIR, INSTALLVENDORMAN3DIR, INSTALLVENDORSCRIPT,
-INST_ARCHLIB, INST_BIN, INST_LIB, INST_MAN1DIR, INST_MAN3DIR, INST_SCRIPT,
-LD, LDDLFLAGS, LDFROM, LIB, LIBPERL_A, LIBS, LICENSE, LINKTYPE, MAKE,
-MAKEAPERL, MAKEFILE_OLD, MAN1PODS, MAN3PODS, MAP_TARGET, MYEXTLIB, NAME,
-NEEDS_LINKING, NOECHO, NORECURS, NO_META, NO_VC, OBJECT, OPTIMIZE, PERL,
-PERL_CORE, PERLMAINCC, PERL_ARCHLIB, PERL_LIB, PERL_MALLOC_OK, PERLPREFIX,
-PERLRUN, PERLRUNINST, PERL_SRC, PERM_RW, PERM_RWX, PL_FILES, PM, PMLIBDIRS,
-PM_FILTER, POLLUTE, PPM_INSTALL_EXEC, PPM_INSTALL_SCRIPT, PREFIX,
-PREREQ_FATAL, PREREQ_PM, PREREQ_PRINT, PRINT_PREREQ, SITEPREFIX, SIGN,
-SKIP, TYPEMAPS, VENDORPREFIX, VERBINST, VERSION, VERSION_FROM, VERSION_SYM,
-XS, XSOPT, XSPROTOARG, XS_VERSION
-
-=item Additional lowercase attributes
-
-clean, depend, dist, dynamic_lib, linkext, macro, postamble, realclean,
-test, tool_autosplit
-
-=item Overriding MakeMaker Methods
-
-=item The End Of Cargo Cult Programming
-
-C<< MAN3PODS => ' ' >>
-
-=item Hintsfile support
-
-=item Distribution Support
-
- make distcheck, make skipcheck, make distclean, make manifest,
- make distdir, make disttest, make tardist, make dist, make
-uutardist, make shdist, make zipdist, make ci
-
-=item Module Meta-Data
-
-=item Disabling an extension
-
-=item Other Handy Functions
-
-prompt
-
-=back
-
-=item ENVIRONMENT
-
-PERL_MM_OPT, PERL_MM_USE_DEFAULT, PERL_CORE
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item LICENSE
-
-=back
-
-=head2 ExtUtils::MakeMaker::Config - Wrapper around Config.pm
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 ExtUtils::MakeMaker::FAQ - Frequently Asked Questions About
-MakeMaker
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Module Installation
-
-How do I install a module into my home directory?, How do I get MakeMaker
-and Module::Build to install to the same place?, How do I keep from
-installing man pages?, How do I use a module without installing it?, PREFIX
-vs INSTALL_BASE from Module::Build::Cookbook
-
-=item Philosophy and History
-
-Why not just use <insert other build config tool here>?, What is
-Module::Build and how does it relate to MakeMaker?, pure perl. no make, no
-shell commands, easier to customize, cleaner internals, less cruft
-
-=item Module Writing
-
-How do I keep my $VERSION up to date without resetting it manually?, What's
-this F<META.yml> thing and how did it get in my F<MANIFEST>?!, How do I
-delete everything not in my F<MANIFEST>?
-
-=item XS
-
-How to I prevent "object version X.XX does not match bootstrap parameter
-Y.YY" errors?, How do I make two or more XS files coexist in the same
-directory?
-
-=back
-
-=item PATCHING
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 ExtUtils::MakeMaker::Tutorial - Writing a module with MakeMaker
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item The Mantra
-
-=item The Layout
-
-Makefile.PL, MANIFEST, lib/, t/, Changes, README, INSTALL, MANIFEST.SKIP,
-bin/
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 ExtUtils::MakeMaker::bytes - Version-agnostic bytes.pm
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 ExtUtils::MakeMaker::vmsish - Platform-agnostic vmsish.pm
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 ExtUtils::Manifest - utilities to write and check a MANIFEST file
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Functions
-
-mkmanifest
-
-=back
-
-=back
-
-manifind
-
-manicheck
-
-filecheck
-
-fullcheck
-
-skipcheck
-
-maniread
-
-manicopy
-
-maniadd
-
-=over 4
-
-=item MANIFEST
-
-=item MANIFEST.SKIP
-
-#!include_default, #!include /Path/to/another/manifest.skip
-
-=item EXPORT_OK
-
-=item GLOBAL VARIABLES
-
-=back
-
-=over 4
-
-=item DIAGNOSTICS
-
-C<Not in MANIFEST:> I<file>, C<Skipping> I<file>, C<No such file:> I<file>,
-C<MANIFEST:> I<$!>, C<Added to MANIFEST:> I<file>
-
-=item ENVIRONMENT
-
-B<PERL_MM_MANIFEST_DEBUG>
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 ExtUtils::Miniperl, writemain - write the C code for perlmain.c
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=back
-
-=head2 ExtUtils::Mkbootstrap - make a bootstrap file for use by DynaLoader
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 ExtUtils::Mksymlists - write linker options files for dynamic
-extension
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-DLBASE, DL_FUNCS, DL_VARS, FILE, FUNCLIST, IMPORTS, NAME
-
-=item AUTHOR
-
-=item REVISION
-
-mkfh()
-
-=back
-
-__find_relocations
-
-=head2 ExtUtils::Packlist - manage .packlist files
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item USAGE
-
-=item FUNCTIONS
-
-new(), read(), write(), validate(), packlist_file()
-
-=item EXAMPLE
-
-=item AUTHOR
-
-=back
-
-=head2 ExtUtils::ParseXS - converts Perl XS code into C code
-
-=over 4
-
-=item SYNOPSIS
-
-=item EXPORT
-
-=item FUNCTIONS
-
-process_xs(), B<C++>, B<hiertype>, B<except>, B<typemap>, B<prototypes>,
-B<versioncheck>, B<linenumbers>, B<optimize>, B<inout>, B<argtypes>, B<s>,
-errors()
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 ExtUtils::testlib - add blib/* directories to @INC
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 Fatal - replace functions with equivalents which succeed or die
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 Fcntl - load the C Fcntl.h defines
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTE
-
-=item EXPORTED SYMBOLS
-
-=back
-
-=head2 File::Basename - Parse file paths into directory, filename and
-suffix.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-C<fileparse> X<fileparse>
-
-C<basename> X<basename> X<filename>
-
-C<dirname> X<dirname>
-
-C<fileparse_set_fstype> X<filesystem>
-
-=over 4
-
-=item SEE ALSO
-
-=back
-
-=head2 File::CheckTree - run many filetest checks on a tree
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item HISTORY
-
-=back
-
-=head2 File::Compare - Compare files or filehandles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item RETURN
-
-=item AUTHOR
-
-=back
-
-=head2 File::Copy - Copy files or filehandles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-copy X<copy> X<cp>, move X<move> X<mv> X<rename>, syscopy X<syscopy>,
-rmscopy($from,$to[,$date_flag]) X<rmscopy>
-
-=item RETURN
-
-=item NOTES
-
-=item AUTHOR
-
-=back
-
-=head2 File::DosGlob - DOS like globbing and then some
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTES
-
-=item EXPORTS (by request only)
-
-=item BUGS
-
-=item AUTHOR
-
-=item HISTORY
-
-=item SEE ALSO
-
-=back
-
-=head2 File::Fetch - A generic file fetching mechanism
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item ACCESSORS
-
-$ff->uri, $ff->scheme, $ff->host, $ff->vol, $ff->share, $ff->path,
-$ff->file
-
-=back
-
-$ff->output_file
-
-=over 4
-
-=item METHODS
-
-=over 4
-
-=item $ff = File::Fetch->new( uri => 'http://some.where.com/dir/file.txt'
-);
-
-=back
-
-=back
-
-=over 4
-
-=item $ff->fetch( [to => /my/output/dir/] )
-
-=back
-
-=over 4
-
-=item $ff->error([BOOL])
-
-=back
-
-=over 4
-
-=item HOW IT WORKS
-
-=item GLOBAL VARIABLES
-
-=over 4
-
-=item $File::Fetch::FROM_EMAIL
-
-=item $File::Fetch::USER_AGENT
-
-=item $File::Fetch::FTP_PASSIVE
-
-=item $File::Fetch::TIMEOUT
-
-=item $File::Fetch::WARN
-
-=item $File::Fetch::DEBUG
-
-=item $File::Fetch::BLACKLIST
-
-=item $File::Fetch::METHOD_FAIL
-
-=back
-
-=item MAPPING
-
-=item FREQUENTLY ASKED QUESTIONS
-
-=over 4
-
-=item So how do I use a proxy with File::Fetch?
-
-=item I used 'lynx' to fetch a file, but its contents is all wrong!
-
-=item Files I'm trying to fetch have reserved characters or non-ASCII
-characters in them. What do I do?
-
-=back
-
-=item TODO
-
-Implement $PREFER_BIN
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 File::Find - Traverse a directory tree.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-B<find>, B<finddepth>
-
-=over 4
-
-=item %options
-
-C<wanted>, C<bydepth>, C<preprocess>, C<postprocess>, C<follow>,
-C<follow_fast>, C<follow_skip>, C<dangling_symlinks>, C<no_chdir>,
-C<untaint>, C<untaint_pattern>, C<untaint_skip>
-
-=item The wanted function
-
-C<$File::Find::dir> is the current directory name,, C<$_> is the current
-filename within that directory, C<$File::Find::name> is the complete
-pathname to the file
-
-=back
-
-=item WARNINGS
-
-=item CAVEAT
-
-$dont_use_nlink, symlinks
-
-=item NOTES
-
-=item BUGS AND CAVEATS
-
-=item HISTORY
-
-=back
-
-=head2 File::Glob - Perl extension for BSD glob routine
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item META CHARACTERS
-
-=item POSIX FLAGS
-
-C<GLOB_ERR>, C<GLOB_LIMIT>, C<GLOB_MARK>, C<GLOB_NOCASE>, C<GLOB_NOCHECK>,
-C<GLOB_NOSORT>, C<GLOB_BRACE>, C<GLOB_NOMAGIC>, C<GLOB_QUOTE>,
-C<GLOB_TILDE>, C<GLOB_CSH>, C<GLOB_ALPHASORT>
-
-=back
-
-=item DIAGNOSTICS
-
-C<GLOB_NOSPACE>, C<GLOB_ABEND>
-
-=item NOTES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 File::GlobMapper - Extend File Glob to Allow Input and Output Files
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-This code is a work in progress, There are known bugs, The interface
-defined here is tentative, There are portability issues, Do not use in
-production code, Consider yourself warned!
-
-=over 4
-
-=item Behind The Scenes
-
-=item Limitations
-
-=item Input File Glob
-
-B<~>, B<~user>, B<.>, B<*>, B<?>, B<\>, B<[]>, B<{,}>, B<()>
-
-=item Output File Glob
-
-"*", #1
-
-=item Returned Data
-
-=back
-
-=item EXAMPLES
-
-=over 4
-
-=item A Rename script
-
-=item A few example globmaps
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 File::Path - Create or remove directory trees
-
-=over 4
-
-=item VERSION
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item FUNCTIONS
-
-mode, verbose, error, verbose, safe, keep_root, result, error
-
-=item TRADITIONAL INTERFACE
-
-=item ERROR HANDLING
-
-=item NOTES
-
-=back
-
-=item DIAGNOSTICS
-
-mkdir [path]: [errmsg] (SEVERE), No root path(s) specified, No such file or
-directory, cannot fetch initial working directory: [errmsg], cannot stat
-initial working directory: [errmsg], cannot chdir to [dir]: [errmsg],
-directory [dir] changed before chdir, expected dev=[n] inode=[n], actual
-dev=[n] ino=[n], aborting. (FATAL), cannot make directory [dir]
-read+writeable: [errmsg], cannot read [dir]: [errmsg], cannot reset chmod
-[dir]: [errmsg], cannot chdir to [parent-dir] from [child-dir]: [errmsg],
-aborting. (FATAL), cannot stat prior working directory [dir]: [errmsg],
-aborting. (FATAL), previous directory [parent-dir] changed before entering
-[child-dir], expected dev=[n] inode=[n], actual dev=[n] ino=[n], aborting.
-(FATAL), cannot make directory [dir] writeable: [errmsg], cannot remove
-directory [dir]: [errmsg], cannot restore permissions of [dir] to [0nnn]:
-[errmsg], cannot make file [file] writeable: [errmsg], cannot unlink file
-[file]: [errmsg], cannot restore permissions of [file] to [0nnn]: [errmsg]
-
-=item SEE ALSO
-
-=item BUGS
-
-=item ACKNOWLEDGEMENTS
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=item LICENSE
-
-=back
-
-=head2 File::Spec - portably perform operations on file names
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-canonpath X<canonpath>, catdir X<catdir>, catfile X<catfile>, curdir
-X<curdir>, devnull X<devnull>, rootdir X<rootdir>, tmpdir X<tmpdir>, updir
-X<updir>, no_upwards, case_tolerant, file_name_is_absolute, path X<path>,
-join X<join, path>, splitpath X<splitpath> X<split, path>, splitdir
-X<splitdir> X<split, dir>, catpath(), abs2rel X<abs2rel> X<absolute, path>
-X<relative, path>, rel2abs() X<rel2abs> X<absolute, path> X<relative, path>
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 File::Spec::Cygwin - methods for Cygwin file specs
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-canonpath
-
-file_name_is_absolute
-
-tmpdir (override)
-
-case_tolerant
-
-=over 4
-
-=item COPYRIGHT
-
-=back
-
-=head2 File::Spec::Epoc - methods for Epoc file specs
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-canonpath()
-
-=over 4
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 File::Spec::Functions - portably perform operations on file names
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Exports
-
-=back
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 File::Spec::Mac - File::Spec for Mac OS (Classic)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-canonpath
-
-=back
-
-catdir()
-
-catfile
-
-curdir
-
-devnull
-
-rootdir
-
-tmpdir
-
-updir
-
-file_name_is_absolute
-
-path
-
-splitpath
-
-splitdir
-
-catpath
-
-abs2rel
-
-rel2abs
-
-=over 4
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 File::Spec::OS2 - methods for OS/2 file specs
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-tmpdir, splitpath
-
-=item COPYRIGHT
-
-=back
-
-=head2 File::Spec::Unix - File::Spec for Unix, base for other File::Spec
-modules
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-canonpath()
-
-=back
-
-catdir()
-
-catfile
-
-curdir
-
-devnull
-
-rootdir
-
-tmpdir
-
-updir
-
-no_upwards
-
-case_tolerant
-
-file_name_is_absolute
-
-path
-
-join
-
-splitpath
-
-splitdir
-
-catpath()
-
-abs2rel
-
-rel2abs()
-
-=over 4
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 File::Spec::VMS - methods for VMS file specs
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-canonpath (override)
-
-=back
-
-catdir (override)
-
-catfile (override)
-
-curdir (override)
-
-devnull (override)
-
-rootdir (override)
-
-tmpdir (override)
-
-updir (override)
-
-case_tolerant (override)
-
-path (override)
-
-file_name_is_absolute (override)
-
-splitpath (override)
-
-splitdir (override)
-
-catpath (override)
-
-abs2rel (override)
-
-rel2abs (override)
-
-=over 4
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 File::Spec::Win32 - methods for Win32 file specs
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-devnull
-
-=back
-
-tmpdir
-
-case_tolerant
-
-file_name_is_absolute
-
-catfile
-
-canonpath
-
-splitpath
-
-splitdir
-
-catpath
-
-=over 4
-
-=item Note For File::Spec::Win32 Maintainers
-
-=back
-
-=over 4
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 File::Temp - return name and handle of a temporary file safely
-
-=over 4
-
-=item PORTABILITY
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item OBJECT-ORIENTED INTERFACE
-
-B<new>
-
-=back
-
-B<filename>
-
-B<unlink_on_destroy>
-
-B<DESTROY>
-
-=over 4
-
-=item FUNCTIONS
-
-B<tempfile>
-
-=back
-
-B<tempdir>
-
-=over 4
-
-=item MKTEMP FUNCTIONS
-
-B<mkstemp>
-
-=back
-
-B<mkstemps>
-
-B<mkdtemp>
-
-B<mktemp>
-
-=over 4
-
-=item POSIX FUNCTIONS
-
-B<tmpnam>
-
-=back
-
-B<tmpfile>
-
-=over 4
-
-=item ADDITIONAL FUNCTIONS
-
-B<tempnam>
-
-=back
-
-=over 4
-
-=item UTILITY FUNCTIONS
-
-B<unlink0>
-
-=back
-
-B<cmpstat>
-
-B<unlink1>
-
-B<cleanup>
-
-=over 4
-
-=item PACKAGE VARIABLES
-
-B<safe_level>, STANDARD, MEDIUM, HIGH
-
-=back
-
-TopSystemUID
-
-B<$KEEP_ALL>, B<$DEBUG>
-
-=over 4
-
-=item WARNING
-
-=over 4
-
-=item Temporary files and NFS
-
-=item Forking
-
-=item BINMODE
-
-=back
-
-=item HISTORY
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 File::stat - by-name interface to Perl's built-in stat() functions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUGS
-
-=item NOTE
-
-=item AUTHOR
-
-=back
-
-=head2 FileCache - keep more files open than the system permits
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-cacheout EXPR, cacheout MODE, EXPR
-
-=item CAVEATS
-
-=item BUGS
-
-=back
-
-=head2 FileHandle - supply object methods for filehandles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-$fh->print, $fh->printf, $fh->getline, $fh->getlines
-
-=item SEE ALSO
-
-=back
-
-=head2 Filter::Simple - Simplified source filtering
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item The Problem
-
-=item A Solution
-
-=item Disabling or changing <no> behaviour
-
-=item All-in-one interface
-
-=item Filtering only specific components of source code
-
-C<"code">, C<"code_no_comments">, C<"executable">,
-C<"executable_no_comments">, C<"quotelike">, C<"string">, C<"regex">,
-C<"all">
-
-=item Filtering only the code parts of source code
-
-Most source code ceases to be grammatically correct when it is broken up
-into the pieces between string literals and regexes. So the C<'code'>
-and C<'code_no_comments'> component filter behave slightly differently
-from the other partial filters described in the previous section.
-
-=item Using Filter::Simple with an explicit C<import> subroutine
-
-=item Using Filter::Simple and Exporter together
-
-=item How it works
-
-=back
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Filter::Util::Call - Perl Source Filter Utility Module
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item B<use Filter::Util::Call>
-
-=item B<import()>
-
-=item B<filter() and anonymous sub>
-
-B<$_>, B<$status>, B<filter_read> and B<filter_read_exact>, B<filter_del>
-
-=back
-
-=item EXAMPLES
-
-=over 4
-
-=item Example 1: A simple filter.
-
-=item Example 2: Using the context
-
-=item Example 3: Using the context within the filter
-
-=item Example 4: Using filter_del
-
-=back
-
-=item Filter::Simple
-
-=item AUTHOR
-
-=item DATE
-
-=back
-
-=head2 FindBin - Locate directory of original perl script
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXPORTABLE VARIABLES
-
-=item KNOWN ISSUES
-
-=item KNOWN BUGS
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=back
-
-=head2 GDBM_File - Perl5 access to the gdbm library.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AVAILABILITY
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 Getopt::Long - Extended processing of command line options
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Command Line Options, an Introduction
-
-=item Getting Started with Getopt::Long
-
-=over 4
-
-=item Simple options
-
-=item A little bit less simple options
-
-=item Mixing command line option with other arguments
-
-=item Options with values
-
-=item Options with multiple values
-
-=item Options with hash values
-
-=item User-defined subroutines to handle options
-
-=item Options with multiple names
-
-=item Case and abbreviations
-
-=item Summary of Option Specifications
-
-!, +, s, i, o, f, : I<type> [ I<desttype> ], : I<number> [ I<desttype> ], :
-+ [ I<desttype> ]
-
-=back
-
-=item Advanced Possibilities
-
-=over 4
-
-=item Object oriented interface
-
-=item Thread Safety
-
-=item Documentation and help texts
-
-=item Parsing options from an arbitrary array
-
-=item Parsing options from an arbitrary string
-
-=item Storing options values in a hash
-
-=item Bundling
-
-=item The lonesome dash
-
-=item Argument callback
-
-=back
-
-=item Configuring Getopt::Long
-
-default, posix_default, auto_abbrev, getopt_compat, gnu_compat, gnu_getopt,
-require_order, permute, bundling (default: disabled), bundling_override
-(default: disabled), ignore_case (default: enabled), ignore_case_always
-(default: disabled), auto_version (default:disabled), auto_help
-(default:disabled), pass_through (default: disabled), prefix,
-prefix_pattern, long_prefix_pattern, debug (default: disabled)
-
-=item Exportable Methods
-
-VersionMessage, C<-message>, C<-msg>, C<-exitval>, C<-output>, HelpMessage
-
-=item Return values and Errors
-
-=item Legacy
-
-=over 4
-
-=item Default destinations
-
-=item Alternative option starters
-
-=item Configuration variables
-
-=back
-
-=item Tips and Techniques
-
-=over 4
-
-=item Pushing multiple values in a hash option
-
-=back
-
-=item Trouble Shooting
-
-=over 4
-
-=item GetOptions does not return a false result when an option is not
-supplied
-
-=item GetOptions does not split the command line correctly
-
-=item Undefined subroutine &main::GetOptions called
-
-=item How do I put a "-?" option into a Getopt::Long?
-
-=back
-
-=item AUTHOR
-
-=item COPYRIGHT AND DISCLAIMER
-
-=back
-
-=head2 Getopt::Std, getopt, getopts - Process single-character switches
-with switch clustering
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item C<--help> and C<--version>
-
-=back
-
-=head2 Hash::Util - A selection of general-utility hash subroutines
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Restricted hashes
-
-B<lock_keys>, B<unlock_keys>
-
-=back
-
-=back
-
-B<lock_keys_plus>
-
-B<lock_value>, B<unlock_value>
-
-B<lock_hash>, B<unlock_hash>
-
-B<lock_hash_recurse>, B<unlock_hash_recurse>
-
-B<hash_unlocked>
-
-B<legal_keys>, B<hidden_keys>, B<all_keys>, B<hash_seed>
-
-B<hv_store>
-
-=over 4
-
-=item Operating on references to hashes.
-
-lock_ref_keys, unlock_ref_keys, lock_ref_keys_plus, lock_ref_value,
-unlock_ref_value, lock_hashref, unlock_hashref, lock_hashref_recurse,
-unlock_hashref_recurse, hash_ref_unlocked, legal_ref_keys, hidden_ref_keys
-
-=back
-
-=over 4
-
-=item CAVEATS
-
-=item BUGS
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Hash::Util::FieldHash - Support for Inside-Out Classes
-
-=over 4
-
-=item SYNOPSIS
-
-=item FUNCTIONS
-
-id, id_2obj, register, idhash, idhashes, fieldhash, fieldhashes
-
-=item DESCRIPTION
-
-=over 4
-
-=item The Inside-out Technique
-
-=item Problems of Inside-out
-
-=item Solutions
-
-=item More Problems
-
-=item The Generic Object
-
-=item How to use Field Hashes
-
-=item Garbage-Collected Hashes
-
-=back
-
-=item EXAMPLES
-
-C<init()>, C<first()>, C<last()>, C<name()>, C<Name_hash>, C<Name_id>,
-C<Name_idhash>, C<Name_id_reg>, C<Name_idhash_reg>, C<Name_fieldhash>
-
-=over 4
-
-=item Example 1
-
-=item Example 2
-
-=back
-
-=item GUTS
-
-=over 4
-
-=item The C<PERL_MAGIC_uvar> interface for hashes
-
-=item Weakrefs call uvar magic
-
-=item How field hashes work
-
-=item Internal function Hash::Util::FieldHash::_fieldhash
-
-=back
-
-=item AUTHOR
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 Hash::Util::FieldHash::lib::Hash::Util::FieldHash,
-Hash::Util::FieldHash - Support for Inside-Out Classes
-
-=over 4
-
-=item SYNOPSIS
-
-=item FUNCTIONS
-
-id, id_2obj, register, idhash, idhashes, fieldhash, fieldhashes
-
-=item DESCRIPTION
-
-=over 4
-
-=item The Inside-out Technique
-
-=item Problems of Inside-out
-
-=item Solutions
-
-=item More Problems
-
-=item The Generic Object
-
-=item How to use Field Hashes
-
-=item Garbage-Collected Hashes
-
-=back
-
-=item EXAMPLES
-
-C<init()>, C<first()>, C<last()>, C<name()>, C<Name_hash>, C<Name_id>,
-C<Name_idhash>, C<Name_id_reg>, C<Name_idhash_reg>, C<Name_fieldhash>
-
-=over 4
-
-=item Example 1
-
-=item Example 2
-
-=back
-
-=item GUTS
-
-=over 4
-
-=item The C<PERL_MAGIC_uvar> interface for hashes
-
-=item Weakrefs call uvar magic
-
-=item How field hashes work
-
-=item Internal function Hash::Util::FieldHash::_fieldhash
-
-=back
-
-=item AUTHOR
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 Hash::Utilib::Hash::Util, Hash::Util - A selection of
-general-utility hash subroutines
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Restricted hashes
-
-B<lock_keys>, B<unlock_keys>
-
-=back
-
-=back
-
-B<lock_keys_plus>
-
-B<lock_value>, B<unlock_value>
-
-B<lock_hash>, B<unlock_hash>
-
-B<lock_hash_recurse>, B<unlock_hash_recurse>
-
-B<hash_unlocked>
-
-B<legal_keys>, B<hidden_keys>, B<all_keys>, B<hash_seed>
-
-B<hv_store>
-
-=over 4
-
-=item Operating on references to hashes.
-
-lock_ref_keys, unlock_ref_keys, lock_ref_keys_plus, lock_ref_value,
-unlock_ref_value, lock_hashref, unlock_hashref, lock_hashref_recurse,
-unlock_hashref_recurse, hash_ref_unlocked, legal_ref_keys, hidden_ref_keys
-
-=back
-
-=over 4
-
-=item CAVEATS
-
-=item BUGS
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 I18N::Collate - compare 8-bit scalar data according to the current
-locale
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 I18N::LangTags - functions for dealing with RFC3066-style language
-tags
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-the function is_language_tag($lang1)
-
-the function extract_language_tags($whatever)
-
-the function same_language_tag($lang1, $lang2)
-
-the function similarity_language_tag($lang1, $lang2)
-
-the function is_dialect_of($lang1, $lang2)
-
-the function super_languages($lang1)
-
-the function locale2language_tag($locale_identifier)
-
-the function encode_language_tag($lang1)
-
-the function alternate_language_tags($lang1)
-
-the function @langs = panic_languages(@accept_languages)
-
-the function implicate_supers( ...languages... ), the function
-implicate_supers_strictly( ...languages... )
-
-=over 4
-
-=item ABOUT LOWERCASING
-
-=item ABOUT UNICODE PLAINTEXT LANGUAGE TAGS
-
-=item SEE ALSO
-
-=item COPYRIGHT
-
-=item AUTHOR
-
-=back
-
-=head2 I18N::LangTags::Detect - detect the user's language preferences
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FUNCTIONS
-
-=item ENVIRONMENT
-
-=item SEE ALSO
-
-=item COPYRIGHT
-
-=item AUTHOR
-
-=back
-
-=head2 I18N::LangTags::List -- tags and names for human languages
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item ABOUT LANGUAGE TAGS
-
-=item LIST OF LANGUAGES
-
-{ab} : Abkhazian, {ace} : Achinese, {ach} : Acoli, {ada} : Adangme, {ady} :
-Adyghe, {aa} : Afar, {afh} : Afrihili, {af} : Afrikaans, [{afa} :
-Afro-Asiatic (Other)], {ak} : Akan, {akk} : Akkadian, {sq} : Albanian,
-{ale} : Aleut, [{alg} : Algonquian languages], [{tut} : Altaic (Other)],
-{am} : Amharic, {i-ami} : Ami, [{apa} : Apache languages], {ar} : Arabic,
-{arc} : Aramaic, {arp} : Arapaho, {arn} : Araucanian, {arw} : Arawak, {hy}
-: Armenian, {an} : Aragonese, [{art} : Artificial (Other)], {ast} :
-Asturian, {as} : Assamese, [{ath} : Athapascan languages], [{aus} :
-Australian languages], [{map} : Austronesian (Other)], {av} : Avaric, {ae}
-: Avestan, {awa} : Awadhi, {ay} : Aymara, {az} : Azerbaijani, {ban} :
-Balinese, [{bat} : Baltic (Other)], {bal} : Baluchi, {bm} : Bambara, [{bai}
-: Bamileke languages], {bad} : Banda, [{bnt} : Bantu (Other)], {bas} :
-Basa, {ba} : Bashkir, {eu} : Basque, {btk} : Batak (Indonesia), {bej} :
-Beja, {be} : Belarusian, {bem} : Bemba, {bn} : Bengali, [{ber} : Berber
-(Other)], {bho} : Bhojpuri, {bh} : Bihari, {bik} : Bikol, {bin} : Bini,
-{bi} : Bislama, {bs} : Bosnian, {bra} : Braj, {br} : Breton, {bug} :
-Buginese, {bg} : Bulgarian, {i-bnn} : Bunun, {bua} : Buriat, {my} :
-Burmese, {cad} : Caddo, {car} : Carib, {ca} : Catalan, [{cau} : Caucasian
-(Other)], {ceb} : Cebuano, [{cel} : Celtic (Other)], [{cai} : Central
-American Indian (Other)], {chg} : Chagatai, [{cmc} : Chamic languages],
-{ch} : Chamorro, {ce} : Chechen, {chr} : Cherokee, {chy} : Cheyenne, {chb}
-: Chibcha, {ny} : Chichewa, {zh} : Chinese, {chn} : Chinook Jargon, {chp} :
-Chipewyan, {cho} : Choctaw, {cu} : Church Slavic, {chk} : Chuukese, {cv} :
-Chuvash, {cop} : Coptic, {kw} : Cornish, {co} : Corsican, {cr} : Cree,
-{mus} : Creek, [{cpe} : English-based Creoles and pidgins (Other)], [{cpf}
-: French-based Creoles and pidgins (Other)], [{cpp} : Portuguese-based
-Creoles and pidgins (Other)], [{crp} : Creoles and pidgins (Other)], {hr} :
-Croatian, [{cus} : Cushitic (Other)], {cs} : Czech, {dak} : Dakota, {da} :
-Danish, {dar} : Dargwa, {day} : Dayak, {i-default} : Default (Fallthru)
-Language, {del} : Delaware, {din} : Dinka, {dv} : Divehi, {doi} : Dogri,
-{dgr} : Dogrib, [{dra} : Dravidian (Other)], {dua} : Duala, {nl} : Dutch,
-{dum} : Middle Dutch (ca.1050-1350), {dyu} : Dyula, {dz} : Dzongkha, {efi}
-: Efik, {egy} : Ancient Egyptian, {eka} : Ekajuk, {elx} : Elamite, {en} :
-English, {enm} : Old English (1100-1500), {ang} : Old English
-(ca.450-1100), {i-enochian} : Enochian (Artificial), {myv} : Erzya, {eo} :
-Esperanto, {et} : Estonian, {ee} : Ewe, {ewo} : Ewondo, {fan} : Fang, {fat}
-: Fanti, {fo} : Faroese, {fj} : Fijian, {fi} : Finnish, [{fiu} :
-Finno-Ugrian (Other)], {fon} : Fon, {fr} : French, {frm} : Middle French
-(ca.1400-1600), {fro} : Old French (842-ca.1400), {fy} : Frisian, {fur} :
-Friulian, {ff} : Fulah, {gaa} : Ga, {gd} : Scots Gaelic, {gl} : Gallegan,
-{lg} : Ganda, {gay} : Gayo, {gba} : Gbaya, {gez} : Geez, {ka} : Georgian,
-{de} : German, {gmh} : Middle High German (ca.1050-1500), {goh} : Old High
-German (ca.750-1050), [{gem} : Germanic (Other)], {gil} : Gilbertese, {gon}
-: Gondi, {gor} : Gorontalo, {got} : Gothic, {grb} : Grebo, {grc} : Ancient
-Greek, {el} : Modern Greek, {gn} : Guarani, {gu} : Gujarati, {gwi} :
-Gwich'in, {hai} : Haida, {ht} : Haitian, {ha} : Hausa, {haw} : Hawaiian,
-{he} : Hebrew, {hz} : Herero, {hil} : Hiligaynon, {him} : Himachali, {hi} :
-Hindi, {ho} : Hiri Motu, {hit} : Hittite, {hmn} : Hmong, {hu} : Hungarian,
-{hup} : Hupa, {iba} : Iban, {is} : Icelandic, {io} : Ido, {ig} : Igbo,
-{ijo} : Ijo, {ilo} : Iloko, [{inc} : Indic (Other)], [{ine} : Indo-European
-(Other)], {id} : Indonesian, {inh} : Ingush, {ia} : Interlingua
-(International Auxiliary Language Association), {ie} : Interlingue, {iu} :
-Inuktitut, {ik} : Inupiaq, [{ira} : Iranian (Other)], {ga} : Irish, {mga} :
-Middle Irish (900-1200), {sga} : Old Irish (to 900), [{iro} : Iroquoian
-languages], {it} : Italian, {ja} : Japanese, {jv} : Javanese, {jrb} :
-Judeo-Arabic, {jpr} : Judeo-Persian, {kbd} : Kabardian, {kab} : Kabyle,
-{kac} : Kachin, {kl} : Kalaallisut, {xal} : Kalmyk, {kam} : Kamba, {kn} :
-Kannada, {kr} : Kanuri, {krc} : Karachay-Balkar, {kaa} : Kara-Kalpak, {kar}
-: Karen, {ks} : Kashmiri, {csb} : Kashubian, {kaw} : Kawi, {kk} : Kazakh,
-{kha} : Khasi, {km} : Khmer, [{khi} : Khoisan (Other)], {kho} : Khotanese,
-{ki} : Kikuyu, {kmb} : Kimbundu, {rw} : Kinyarwanda, {ky} : Kirghiz,
-{i-klingon} : Klingon, {kv} : Komi, {kg} : Kongo, {kok} : Konkani, {ko} :
-Korean, {kos} : Kosraean, {kpe} : Kpelle, {kro} : Kru, {kj} : Kuanyama,
-{kum} : Kumyk, {ku} : Kurdish, {kru} : Kurukh, {kut} : Kutenai, {lad} :
-Ladino, {lah} : Lahnda, {lam} : Lamba, {lo} : Lao, {la} : Latin, {lv} :
-Latvian, {lb} : Letzeburgesch, {lez} : Lezghian, {li} : Limburgish, {ln} :
-Lingala, {lt} : Lithuanian, {nds} : Low German, {art-lojban} : Lojban
-(Artificial), {loz} : Lozi, {lu} : Luba-Katanga, {lua} : Luba-Lulua, {lui}
-: Luiseno, {lun} : Lunda, {luo} : Luo (Kenya and Tanzania), {lus} : Lushai,
-{mk} : Macedonian, {mad} : Madurese, {mag} : Magahi, {mai} : Maithili,
-{mak} : Makasar, {mg} : Malagasy, {ms} : Malay, {ml} : Malayalam, {mt} :
-Maltese, {mnc} : Manchu, {mdr} : Mandar, {man} : Mandingo, {mni} :
-Manipuri, [{mno} : Manobo languages], {gv} : Manx, {mi} : Maori, {mr} :
-Marathi, {chm} : Mari, {mh} : Marshall, {mwr} : Marwari, {mas} : Masai,
-[{myn} : Mayan languages], {men} : Mende, {mic} : Micmac, {min} :
-Minangkabau, {i-mingo} : Mingo, [{mis} : Miscellaneous languages], {moh} :
-Mohawk, {mdf} : Moksha, {mo} : Moldavian, [{mkh} : Mon-Khmer (Other)],
-{lol} : Mongo, {mn} : Mongolian, {mos} : Mossi, [{mul} : Multiple
-languages], [{mun} : Munda languages], {nah} : Nahuatl, {nap} : Neapolitan,
-{na} : Nauru, {nv} : Navajo, {nd} : North Ndebele, {nr} : South Ndebele,
-{ng} : Ndonga, {ne} : Nepali, {new} : Newari, {nia} : Nias, [{nic} :
-Niger-Kordofanian (Other)], [{ssa} : Nilo-Saharan (Other)], {niu} : Niuean,
-{nog} : Nogai, {non} : Old Norse, [{nai} : North American Indian], {no} :
-Norwegian, {nb} : Norwegian Bokmal, {nn} : Norwegian Nynorsk, [{nub} :
-Nubian languages], {nym} : Nyamwezi, {nyn} : Nyankole, {nyo} : Nyoro, {nzi}
-: Nzima, {oc} : Occitan (post 1500), {oj} : Ojibwa, {or} : Oriya, {om} :
-Oromo, {osa} : Osage, {os} : Ossetian; Ossetic, [{oto} : Otomian
-languages], {pal} : Pahlavi, {i-pwn} : Paiwan, {pau} : Palauan, {pi} :
-Pali, {pam} : Pampanga, {pag} : Pangasinan, {pa} : Panjabi, {pap} :
-Papiamento, [{paa} : Papuan (Other)], {fa} : Persian, {peo} : Old Persian
-(ca.600-400 B.C.), [{phi} : Philippine (Other)], {phn} : Phoenician, {pon}
-: Pohnpeian, {pl} : Polish, {pt} : Portuguese, [{pra} : Prakrit languages],
-{pro} : Old Provencal (to 1500), {ps} : Pushto, {qu} : Quechua, {rm} :
-Raeto-Romance, {raj} : Rajasthani, {rap} : Rapanui, {rar} : Rarotongan,
-[{qaa - qtz} : Reserved for local use.], [{roa} : Romance (Other)], {ro} :
-Romanian, {rom} : Romany, {rn} : Rundi, {ru} : Russian, [{sal} : Salishan
-languages], {sam} : Samaritan Aramaic, {se} : Northern Sami, {sma} :
-Southern Sami, {smn} : Inari Sami, {smj} : Lule Sami, {sms} : Skolt Sami,
-[{smi} : Sami languages (Other)], {sm} : Samoan, {sad} : Sandawe, {sg} :
-Sango, {sa} : Sanskrit, {sat} : Santali, {sc} : Sardinian, {sas} : Sasak,
-{sco} : Scots, {sel} : Selkup, [{sem} : Semitic (Other)], {sr} : Serbian,
-{srr} : Serer, {shn} : Shan, {sn} : Shona, {sid} : Sidamo, {sgn-...} : Sign
-Languages, {bla} : Siksika, {sd} : Sindhi, {si} : Sinhalese, [{sit} :
-Sino-Tibetan (Other)], [{sio} : Siouan languages], {den} : Slave
-(Athapascan), [{sla} : Slavic (Other)], {sk} : Slovak, {sl} : Slovenian,
-{sog} : Sogdian, {so} : Somali, {son} : Songhai, {snk} : Soninke, {wen} :
-Sorbian languages, {nso} : Northern Sotho, {st} : Southern Sotho, [{sai} :
-South American Indian (Other)], {es} : Spanish, {suk} : Sukuma, {sux} :
-Sumerian, {su} : Sundanese, {sus} : Susu, {sw} : Swahili, {ss} : Swati,
-{sv} : Swedish, {syr} : Syriac, {tl} : Tagalog, {ty} : Tahitian, [{tai} :
-Tai (Other)], {tg} : Tajik, {tmh} : Tamashek, {ta} : Tamil, {i-tao} : Tao,
-{tt} : Tatar, {i-tay} : Tayal, {te} : Telugu, {ter} : Tereno, {tet} :
-Tetum, {th} : Thai, {bo} : Tibetan, {tig} : Tigre, {ti} : Tigrinya, {tem} :
-Timne, {tiv} : Tiv, {tli} : Tlingit, {tpi} : Tok Pisin, {tkl} : Tokelau,
-{tog} : Tonga (Nyasa), {to} : Tonga (Tonga Islands), {tsi} : Tsimshian,
-{ts} : Tsonga, {i-tsu} : Tsou, {tn} : Tswana, {tum} : Tumbuka, [{tup} :
-Tupi languages], {tr} : Turkish, {ota} : Ottoman Turkish (1500-1928), {crh}
-: Crimean Turkish, {tk} : Turkmen, {tvl} : Tuvalu, {tyv} : Tuvinian, {tw} :
-Twi, {udm} : Udmurt, {uga} : Ugaritic, {ug} : Uighur, {uk} : Ukrainian,
-{umb} : Umbundu, {und} : Undetermined, {ur} : Urdu, {uz} : Uzbek, {vai} :
-Vai, {ve} : Venda, {vi} : Vietnamese, {vo} : Volapuk, {vot} : Votic, [{wak}
-: Wakashan languages], {wa} : Walloon, {wal} : Walamo, {war} : Waray, {was}
-: Washo, {cy} : Welsh, {wo} : Wolof, {x-...} : Unregistered (Semi-Private
-Use), {xh} : Xhosa, {sah} : Yakut, {yao} : Yao, {yap} : Yapese, {ii} :
-Sichuan Yi, {yi} : Yiddish, {yo} : Yoruba, [{ypk} : Yupik languages], {znd}
-: Zande, [{zap} : Zapotec], {zen} : Zenaga, {za} : Zhuang, {zu} : Zulu,
-{zun} : Zuni
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMER
-
-=item AUTHOR
-
-=back
-
-=head2 I18N::Langinfo - query locale information
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item EXPORT
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO - load various IO modules
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item DEPRECATED
-
-=back
-
-=head2 IO::Compress::Base - Base Class for IO::Compress modules
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO::Compress::Deflate - Write RFC 1950 files/buffers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Functional Interface
-
-=over 4
-
-=item deflate $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeIn => 0|1 >>, C<< Append => 0|1 >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< Append => 0|1 >>, A Buffer, A Filename, A
-Filehandle, C<< Merge => 0|1 >>, -Level, -Strategy, C<< Strict => 0|1 >>
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item print
-
-=item printf
-
-=item syswrite
-
-=item write
-
-=item flush
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item newStream([OPTS])
-
-=item deflateParams
-
-=back
-
-=item Importing
-
-:all, :constants, :flush, :level, :strategy
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO::Compress::Gzip - Write RFC 1952 files/buffers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Functional Interface
-
-=over 4
-
-=item gzip $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeIn => 0|1 >>, C<< Append => 0|1 >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< Append => 0|1 >>, A Buffer, A Filename, A
-Filehandle, C<< Merge => 0|1 >>, -Level, -Strategy, C<< Minimal => 0|1 >>,
-C<< Comment => $comment >>, C<< Name => $string >>, C<< Time => $number >>,
-C<< TextFlag => 0|1 >>, C<< HeaderCRC => 0|1 >>, C<< OS_Code => $value >>,
-C<< ExtraField => $data >>, C<< ExtraFlags => $value >>, C<< Strict => 0|1
->>
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item print
-
-=item printf
-
-=item syswrite
-
-=item write
-
-=item flush
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item newStream([OPTS])
-
-=item deflateParams
-
-=back
-
-=item Importing
-
-:all, :constants, :flush, :level, :strategy
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO::Compress::RawDeflate - Write RFC 1951 files/buffers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Functional Interface
-
-=over 4
-
-=item rawdeflate $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeIn => 0|1 >>, C<< Append => 0|1 >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< Append => 0|1 >>, A Buffer, A Filename, A
-Filehandle, C<< Merge => 0|1 >>, -Level, -Strategy, C<< Strict => 0|1 >>
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item print
-
-=item printf
-
-=item syswrite
-
-=item write
-
-=item flush
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item newStream([OPTS])
-
-=item deflateParams
-
-=back
-
-=item Importing
-
-:all, :constants, :flush, :level, :strategy
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO::Compress::Zip - Write zip files/buffers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Functional Interface
-
-=over 4
-
-=item zip $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeIn => 0|1 >>, C<< Append => 0|1 >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< Append => 0|1 >>, A Buffer, A Filename, A
-Filehandle, C<< Name => $string >>, C<< Time => $number >>, C<< ExtAttr =>
-$attr >>, C<< exTime => [$atime, $mtime, $ctime] >>, C<< Comment =>
-$comment >>, C<< ZipComment => $comment >>, C<< Method => $method >>, C<<
-Stream => 0|1 >>, C<< Zip64 => 0|1 >>, C<< TextFlag => 0|1 >>, C<<
-ExtraFieldLocal => $data >> =item C<< ExtraFieldCentral => $data >>, C<<
-Minimal => 1|0 >>, C<< BlockSize100K => number >>, C<< WorkFactor => number
->>, -Level, -Strategy, C<< Strict => 0|1 >>
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item print
-
-=item printf
-
-=item syswrite
-
-=item write
-
-=item flush
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item newStream([OPTS])
-
-=item deflateParams
-
-=back
-
-=item Importing
-
-:all, :constants, :flush, :level, :strategy, :zip_method
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO::Dir - supply object methods for directory handles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-new ( [ DIRNAME ] ), open ( DIRNAME ), read (), seek ( POS ), tell (),
-rewind (), close (), tie %hash, 'IO::Dir', DIRNAME [, OPTIONS ]
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::File - supply object methods for filehandles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( FILENAME [,MODE [,PERMS]] ), new_tmpfile
-
-=item METHODS
-
-open( FILENAME [,MODE [,PERMS]] ), open( FILENAME, IOLAYERS ), binmode(
-[LAYER] )
-
-=item NOTE
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 IO::Handle - supply object methods for I/O handles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new (), new_from_fd ( FD, MODE )
-
-=item METHODS
-
-$io->fdopen ( FD, MODE ), $io->opened, $io->getline, $io->getlines,
-$io->ungetc ( ORD ), $io->write ( BUF, LEN [, OFFSET ] ), $io->error,
-$io->clearerr, $io->sync, $io->flush, $io->printflush ( ARGS ),
-$io->blocking ( [ BOOL ] ), $io->untaint
-
-=item NOTE
-
-=item SEE ALSO
-
-=item BUGS
-
-=item HISTORY
-
-=back
-
-=head2 IO::Pipe - supply object methods for pipes
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [READER, WRITER] )
-
-=item METHODS
-
-reader ([ARGS]), writer ([ARGS]), handles ()
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::Poll - Object interface to system poll call
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-mask ( IO [, EVENT_MASK ] ), poll ( [ TIMEOUT ] ), events ( IO ), remove (
-IO ), handles( [ EVENT_MASK ] )
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::Seekable - supply seek based methods for I/O objects
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-$io->getpos, $io->setpos, $io->seek ( POS, WHENCE ), WHENCE=0 (SEEK_SET),
-WHENCE=1 (SEEK_CUR), WHENCE=2 (SEEK_END), $io->sysseek( POS, WHENCE ),
-$io->tell
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 IO::Select - OO interface to the select system call
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ HANDLES ] )
-
-=item METHODS
-
-add ( HANDLES ), remove ( HANDLES ), exists ( HANDLE ), handles, can_read (
-[ TIMEOUT ] ), can_write ( [ TIMEOUT ] ), has_exception ( [ TIMEOUT ] ),
-count (), bits(), select ( READ, WRITE, EXCEPTION [, TIMEOUT ] )
-
-=item EXAMPLE
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::Socket - Object interface to socket communications
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ARGS] )
-
-=item METHODS
-
-accept([PKG]), socketpair(DOMAIN, TYPE, PROTOCOL), atmark, connected,
-protocol, sockdomain, sockopt(OPT [, VAL]), socktype, timeout([VAL])
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::Socket::INET - Object interface for AF_INET domain sockets
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ARGS] )
-
-=over 4
-
-=item METHODS
-
-sockaddr (), sockport (), sockhost (), peeraddr (), peerport (), peerhost
-()
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::Socket::UNIX - Object interface for AF_UNIX domain sockets
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ARGS] )
-
-=item METHODS
-
-hostpath(), peerpath()
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::Uncompress::AnyInflate - Uncompress zlib-based (zip, gzip)
-file/buffer
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-RFC 1950, RFC 1951 (optionally), gzip (RFC 1952), zip
-
-=item Functional Interface
-
-=over 4
-
-=item anyinflate $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeOut => 0|1 >>, C<< Append => 0|1 >>,
-C<< MultiStream => 0|1 >>, C<< TrailingData => $scalar >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< MultiStream => 0|1 >>, C<< Prime => $string
->>, C<< Transparent => 0|1 >>, C<< BlockSize => $num >>, C<< InputLength =>
-$size >>, C<< Append => 0|1 >>, C<< Strict => 0|1 >>, C<< RawInflate => 0|1
->>, C<< ParseExtra => 0|1 >> If the gzip FEXTRA header field is present and
-this option is set, it will force the module to check that it conforms to
-the sub-field structure as defined in RFC 1952
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item read
-
-=item read
-
-=item getline
-
-=item getc
-
-=item ungetc
-
-=item inflateSync
-
-=item getHeaderInfo
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item nextStream
-
-=item trailingData
-
-=back
-
-=item Importing
-
-:all
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO::Uncompress::AnyUncompress - Uncompress gzip, zip, bzip2 or lzop
-file/buffer
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-RFC 1950, RFC 1951 (optionally), gzip (RFC 1952), zip, bzip2, lzop, lzf
-
-=item Functional Interface
-
-=over 4
-
-=item anyuncompress $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeOut => 0|1 >>, C<< Append => 0|1 >>,
-C<< MultiStream => 0|1 >>, C<< TrailingData => $scalar >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< MultiStream => 0|1 >>, C<< Prime => $string
->>, C<< Transparent => 0|1 >>, C<< BlockSize => $num >>, C<< InputLength =>
-$size >>, C<< Append => 0|1 >>, C<< Strict => 0|1 >>, C<< RawInflate => 0|1
->>
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item read
-
-=item read
-
-=item getline
-
-=item getc
-
-=item ungetc
-
-=item getHeaderInfo
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item nextStream
-
-=item trailingData
-
-=back
-
-=item Importing
-
-:all
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO::Uncompress::Base - Base Class for IO::Uncompress modules
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO::Uncompress::Gunzip - Read RFC 1952 files/buffers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Functional Interface
-
-=over 4
-
-=item gunzip $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeOut => 0|1 >>, C<< Append => 0|1 >>,
-C<< MultiStream => 0|1 >>, C<< TrailingData => $scalar >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< MultiStream => 0|1 >>, C<< Prime => $string
->>, C<< Transparent => 0|1 >>, C<< BlockSize => $num >>, C<< InputLength =>
-$size >>, C<< Append => 0|1 >>, C<< Strict => 0|1 >>, C<< ParseExtra => 0|1
->> If the gzip FEXTRA header field is present and this option is set, it
-will force the module to check that it conforms to the sub-field structure
-as defined in RFC 1952
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item read
-
-=item read
-
-=item getline
-
-=item getc
-
-=item ungetc
-
-=item inflateSync
-
-=item getHeaderInfo
-
-Name, Comment
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item nextStream
-
-=item trailingData
-
-=back
-
-=item Importing
-
-:all
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO::Uncompress::Inflate - Read RFC 1950 files/buffers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Functional Interface
-
-=over 4
-
-=item inflate $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeOut => 0|1 >>, C<< Append => 0|1 >>,
-C<< MultiStream => 0|1 >>, C<< TrailingData => $scalar >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< MultiStream => 0|1 >>, C<< Prime => $string
->>, C<< Transparent => 0|1 >>, C<< BlockSize => $num >>, C<< InputLength =>
-$size >>, C<< Append => 0|1 >>, C<< Strict => 0|1 >>
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item read
-
-=item read
-
-=item getline
-
-=item getc
-
-=item ungetc
-
-=item inflateSync
-
-=item getHeaderInfo
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item nextStream
-
-=item trailingData
-
-=back
-
-=item Importing
-
-:all
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO::Uncompress::RawInflate - Read RFC 1951 files/buffers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Functional Interface
-
-=over 4
-
-=item rawinflate $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeOut => 0|1 >>, C<< Append => 0|1 >>,
-C<< MultiStream => 0|1 >>, C<< TrailingData => $scalar >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< MultiStream => 0|1 >>, C<< Prime => $string
->>, C<< Transparent => 0|1 >>, C<< BlockSize => $num >>, C<< InputLength =>
-$size >>, C<< Append => 0|1 >>, C<< Strict => 0|1 >>
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item read
-
-=item read
-
-=item getline
-
-=item getc
-
-=item ungetc
-
-=item inflateSync
-
-=item getHeaderInfo
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item nextStream
-
-=item trailingData
-
-=back
-
-=item Importing
-
-:all
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO::Uncompress::Unzip - Read zip files/buffers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Functional Interface
-
-=over 4
-
-=item unzip $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeOut => 0|1 >>, C<< Append => 0|1 >>,
-C<< MultiStream => 0|1 >>, C<< TrailingData => $scalar >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< MultiStream => 0|1 >>, C<< Prime => $string
->>, C<< Transparent => 0|1 >>, C<< BlockSize => $num >>, C<< InputLength =>
-$size >>, C<< Append => 0|1 >>, C<< Strict => 0|1 >>
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item read
-
-=item read
-
-=item getline
-
-=item getc
-
-=item ungetc
-
-=item inflateSync
-
-=item getHeaderInfo
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item nextStream
-
-=item trailingData
-
-=back
-
-=item Importing
-
-:all
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO::Zlib - IO:: style interface to L<Compress::Zlib>
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ARGS] )
-
-=item OBJECT METHODS
-
-open ( FILENAME, MODE ), opened, close, getc, getline, getlines, print (
-ARGS... ), read ( BUF, NBYTES, [OFFSET] ), eof, seek ( OFFSET, WHENCE ),
-tell, setpos ( POS ), getpos ( POS )
-
-=item USING THE EXTERNAL GZIP
-
-=item CLASS METHODS
-
-has_Compress_Zlib, gzip_external, gzip_used, gzip_read_open,
-gzip_write_open
-
-=item DIAGNOSTICS
-
-IO::Zlib::getlines: must be called in list context,
-IO::Zlib::gzopen_external: mode '...' is illegal, IO::Zlib::import: '...'
-is illegal, IO::Zlib::import: ':gzip_external' requires an argument,
-IO::Zlib::import: 'gzip_read_open' requires an argument, IO::Zlib::import:
-'gzip_read' '...' is illegal, IO::Zlib::import: 'gzip_write_open' requires
-an argument, IO::Zlib::import: 'gzip_write_open' '...' is illegal,
-IO::Zlib::import: no Compress::Zlib and no external gzip, IO::Zlib::open:
-needs a filename, IO::Zlib::READ: NBYTES must be specified,
-IO::Zlib::WRITE: too long LENGTH, IO::Zlib::WRITE: OFFSET is not supported
-
-=item SEE ALSO
-
-=item HISTORY
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::lib::IO::Dir, IO::Dir - supply object methods for directory
-handles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-new ( [ DIRNAME ] ), open ( DIRNAME ), read (), seek ( POS ), tell (),
-rewind (), close (), tie %hash, 'IO::Dir', DIRNAME [, OPTIONS ]
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::lib::IO::File, IO::File - supply object methods for filehandles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( FILENAME [,MODE [,PERMS]] ), new_tmpfile
-
-=item METHODS
-
-open( FILENAME [,MODE [,PERMS]] ), open( FILENAME, IOLAYERS ), binmode(
-[LAYER] )
-
-=item NOTE
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 IO::lib::IO::Handle, IO::Handle - supply object methods for I/O
-handles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new (), new_from_fd ( FD, MODE )
-
-=item METHODS
-
-$io->fdopen ( FD, MODE ), $io->opened, $io->getline, $io->getlines,
-$io->ungetc ( ORD ), $io->write ( BUF, LEN [, OFFSET ] ), $io->error,
-$io->clearerr, $io->sync, $io->flush, $io->printflush ( ARGS ),
-$io->blocking ( [ BOOL ] ), $io->untaint
-
-=item NOTE
-
-=item SEE ALSO
-
-=item BUGS
-
-=item HISTORY
-
-=back
-
-=head2 IO::lib::IO::Pipe, IO::Pipe - supply object methods for pipes
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [READER, WRITER] )
-
-=item METHODS
-
-reader ([ARGS]), writer ([ARGS]), handles ()
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::lib::IO::Poll, IO::Poll - Object interface to system poll call
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-mask ( IO [, EVENT_MASK ] ), poll ( [ TIMEOUT ] ), events ( IO ), remove (
-IO ), handles( [ EVENT_MASK ] )
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::lib::IO::Seekable, IO::Seekable - supply seek based methods for
-I/O objects
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-$io->getpos, $io->setpos, $io->seek ( POS, WHENCE ), WHENCE=0 (SEEK_SET),
-WHENCE=1 (SEEK_CUR), WHENCE=2 (SEEK_END), $io->sysseek( POS, WHENCE ),
-$io->tell
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 IO::lib::IO::Select, IO::Select - OO interface to the select system
-call
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ HANDLES ] )
-
-=item METHODS
-
-add ( HANDLES ), remove ( HANDLES ), exists ( HANDLE ), handles, can_read (
-[ TIMEOUT ] ), can_write ( [ TIMEOUT ] ), has_exception ( [ TIMEOUT ] ),
-count (), bits(), select ( READ, WRITE, EXCEPTION [, TIMEOUT ] )
-
-=item EXAMPLE
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::lib::IO::Socket, IO::Socket - Object interface to socket
-communications
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ARGS] )
-
-=item METHODS
-
-accept([PKG]), socketpair(DOMAIN, TYPE, PROTOCOL), atmark, connected,
-protocol, sockdomain, sockopt(OPT [, VAL]), socktype, timeout([VAL])
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::lib::IO::Socket::INET, IO::Socket::INET - Object interface for
-AF_INET domain sockets
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ARGS] )
-
-=over 4
-
-=item METHODS
-
-sockaddr (), sockport (), sockhost (), peeraddr (), peerport (), peerhost
-()
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::lib::IO::Socket::UNIX, IO::Socket::UNIX - Object interface for
-AF_UNIX domain sockets
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ARGS] )
-
-=item METHODS
-
-hostpath(), peerpath()
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO_Compress_Base::lib::File::GlobMapper, File::GlobMapper - Extend
-File Glob to Allow Input and Output Files
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-This code is a work in progress, There are known bugs, The interface
-defined here is tentative, There are portability issues, Do not use in
-production code, Consider yourself warned!
-
-=over 4
-
-=item Behind The Scenes
-
-=item Limitations
-
-=item Input File Glob
-
-B<~>, B<~user>, B<.>, B<*>, B<?>, B<\>, B<[]>, B<{,}>, B<()>
-
-=item Output File Glob
-
-"*", #1
-
-=item Returned Data
-
-=back
-
-=item EXAMPLES
-
-=over 4
-
-=item A Rename script
-
-=item A few example globmaps
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO_Compress_Base::lib::IO::Compress::Base, IO::Compress::Base - Base
-Class for IO::Compress modules
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO_Compress_Base::lib::IO::Uncompress::AnyUncompress,
-IO::Uncompress::AnyUncompress - Uncompress gzip, zip, bzip2 or lzop
-file/buffer
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-RFC 1950, RFC 1951 (optionally), gzip (RFC 1952), zip, bzip2, lzop, lzf
-
-=item Functional Interface
-
-=over 4
-
-=item anyuncompress $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeOut => 0|1 >>, C<< Append => 0|1 >>,
-C<< MultiStream => 0|1 >>, C<< TrailingData => $scalar >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< MultiStream => 0|1 >>, C<< Prime => $string
->>, C<< Transparent => 0|1 >>, C<< BlockSize => $num >>, C<< InputLength =>
-$size >>, C<< Append => 0|1 >>, C<< Strict => 0|1 >>, C<< RawInflate => 0|1
->>
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item read
-
-=item read
-
-=item getline
-
-=item getc
-
-=item ungetc
-
-=item getHeaderInfo
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item nextStream
-
-=item trailingData
-
-=back
-
-=item Importing
-
-:all
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO_Compress_Base::lib::IO::Uncompress::Base, IO::Uncompress::Base -
-Base Class for IO::Uncompress modules
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO_Compress_Zlib::IO::Compress::Deflate, IO::Compress::Deflate -
-Write RFC 1950 files/buffers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Functional Interface
-
-=over 4
-
-=item deflate $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeIn => 0|1 >>, C<< Append => 0|1 >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< Append => 0|1 >>, A Buffer, A Filename, A
-Filehandle, C<< Merge => 0|1 >>, -Level, -Strategy, C<< Strict => 0|1 >>
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item print
-
-=item printf
-
-=item syswrite
-
-=item write
-
-=item flush
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item newStream([OPTS])
-
-=item deflateParams
-
-=back
-
-=item Importing
-
-:all, :constants, :flush, :level, :strategy
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO_Compress_Zlib::IO::Compress::Gzip, IO::Compress::Gzip - Write RFC
-1952 files/buffers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Functional Interface
-
-=over 4
-
-=item gzip $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeIn => 0|1 >>, C<< Append => 0|1 >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< Append => 0|1 >>, A Buffer, A Filename, A
-Filehandle, C<< Merge => 0|1 >>, -Level, -Strategy, C<< Minimal => 0|1 >>,
-C<< Comment => $comment >>, C<< Name => $string >>, C<< Time => $number >>,
-C<< TextFlag => 0|1 >>, C<< HeaderCRC => 0|1 >>, C<< OS_Code => $value >>,
-C<< ExtraField => $data >>, C<< ExtraFlags => $value >>, C<< Strict => 0|1
->>
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item print
-
-=item printf
-
-=item syswrite
-
-=item write
-
-=item flush
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item newStream([OPTS])
-
-=item deflateParams
-
-=back
-
-=item Importing
-
-:all, :constants, :flush, :level, :strategy
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO_Compress_Zlib::IO::Compress::RawDeflate, IO::Compress::RawDeflate
-- Write RFC 1951 files/buffers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Functional Interface
-
-=over 4
-
-=item rawdeflate $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeIn => 0|1 >>, C<< Append => 0|1 >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< Append => 0|1 >>, A Buffer, A Filename, A
-Filehandle, C<< Merge => 0|1 >>, -Level, -Strategy, C<< Strict => 0|1 >>
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item print
-
-=item printf
-
-=item syswrite
-
-=item write
-
-=item flush
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item newStream([OPTS])
-
-=item deflateParams
-
-=back
-
-=item Importing
-
-:all, :constants, :flush, :level, :strategy
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO_Compress_Zlib::IO::Compress::Zip, IO::Compress::Zip - Write zip
-files/buffers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Functional Interface
-
-=over 4
-
-=item zip $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeIn => 0|1 >>, C<< Append => 0|1 >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< Append => 0|1 >>, A Buffer, A Filename, A
-Filehandle, C<< Name => $string >>, C<< Time => $number >>, C<< ExtAttr =>
-$attr >>, C<< exTime => [$atime, $mtime, $ctime] >>, C<< Comment =>
-$comment >>, C<< ZipComment => $comment >>, C<< Method => $method >>, C<<
-Stream => 0|1 >>, C<< Zip64 => 0|1 >>, C<< TextFlag => 0|1 >>, C<<
-ExtraFieldLocal => $data >> =item C<< ExtraFieldCentral => $data >>, C<<
-Minimal => 1|0 >>, C<< BlockSize100K => number >>, C<< WorkFactor => number
->>, -Level, -Strategy, C<< Strict => 0|1 >>
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item print
-
-=item printf
-
-=item syswrite
-
-=item write
-
-=item flush
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item newStream([OPTS])
-
-=item deflateParams
-
-=back
-
-=item Importing
-
-:all, :constants, :flush, :level, :strategy, :zip_method
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO_Compress_Zlib::IO::Uncompress::AnyInflate,
-IO::Uncompress::AnyInflate - Uncompress zlib-based (zip, gzip) file/buffer
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-RFC 1950, RFC 1951 (optionally), gzip (RFC 1952), zip
-
-=item Functional Interface
-
-=over 4
-
-=item anyinflate $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeOut => 0|1 >>, C<< Append => 0|1 >>,
-C<< MultiStream => 0|1 >>, C<< TrailingData => $scalar >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< MultiStream => 0|1 >>, C<< Prime => $string
->>, C<< Transparent => 0|1 >>, C<< BlockSize => $num >>, C<< InputLength =>
-$size >>, C<< Append => 0|1 >>, C<< Strict => 0|1 >>, C<< RawInflate => 0|1
->>, C<< ParseExtra => 0|1 >> If the gzip FEXTRA header field is present and
-this option is set, it will force the module to check that it conforms to
-the sub-field structure as defined in RFC 1952
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item read
-
-=item read
-
-=item getline
-
-=item getc
-
-=item ungetc
-
-=item inflateSync
-
-=item getHeaderInfo
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item nextStream
-
-=item trailingData
-
-=back
-
-=item Importing
-
-:all
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO_Compress_Zlib::IO::Uncompress::Gunzip, IO::Uncompress::Gunzip -
-Read RFC 1952 files/buffers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Functional Interface
-
-=over 4
-
-=item gunzip $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeOut => 0|1 >>, C<< Append => 0|1 >>,
-C<< MultiStream => 0|1 >>, C<< TrailingData => $scalar >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< MultiStream => 0|1 >>, C<< Prime => $string
->>, C<< Transparent => 0|1 >>, C<< BlockSize => $num >>, C<< InputLength =>
-$size >>, C<< Append => 0|1 >>, C<< Strict => 0|1 >>, C<< ParseExtra => 0|1
->> If the gzip FEXTRA header field is present and this option is set, it
-will force the module to check that it conforms to the sub-field structure
-as defined in RFC 1952
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item read
-
-=item read
-
-=item getline
-
-=item getc
-
-=item ungetc
-
-=item inflateSync
-
-=item getHeaderInfo
-
-Name, Comment
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item nextStream
-
-=item trailingData
-
-=back
-
-=item Importing
-
-:all
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO_Compress_Zlib::IO::Uncompress::Inflate, IO::Uncompress::Inflate -
-Read RFC 1950 files/buffers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Functional Interface
-
-=over 4
-
-=item inflate $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeOut => 0|1 >>, C<< Append => 0|1 >>,
-C<< MultiStream => 0|1 >>, C<< TrailingData => $scalar >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< MultiStream => 0|1 >>, C<< Prime => $string
->>, C<< Transparent => 0|1 >>, C<< BlockSize => $num >>, C<< InputLength =>
-$size >>, C<< Append => 0|1 >>, C<< Strict => 0|1 >>
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item read
-
-=item read
-
-=item getline
-
-=item getc
-
-=item ungetc
-
-=item inflateSync
-
-=item getHeaderInfo
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item nextStream
-
-=item trailingData
-
-=back
-
-=item Importing
-
-:all
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO_Compress_Zlib::IO::Uncompress::RawInflate,
-IO::Uncompress::RawInflate - Read RFC 1951 files/buffers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Functional Interface
-
-=over 4
-
-=item rawinflate $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeOut => 0|1 >>, C<< Append => 0|1 >>,
-C<< MultiStream => 0|1 >>, C<< TrailingData => $scalar >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< MultiStream => 0|1 >>, C<< Prime => $string
->>, C<< Transparent => 0|1 >>, C<< BlockSize => $num >>, C<< InputLength =>
-$size >>, C<< Append => 0|1 >>, C<< Strict => 0|1 >>
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item read
-
-=item read
-
-=item getline
-
-=item getc
-
-=item ungetc
-
-=item inflateSync
-
-=item getHeaderInfo
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item nextStream
-
-=item trailingData
-
-=back
-
-=item Importing
-
-:all
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IO_Compress_Zlib::IO::Uncompress::Unzip, IO::Uncompress::Unzip -
-Read zip files/buffers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Functional Interface
-
-=over 4
-
-=item unzip $input => $output [, OPTS]
-
-A filename, A filehandle, A scalar reference, An array reference, An Input
-FileGlob string, A filename, A filehandle, A scalar reference, An Array
-Reference, An Output FileGlob
-
-=item Notes
-
-=item Optional Parameters
-
-C<< AutoClose => 0|1 >>, C<< BinModeOut => 0|1 >>, C<< Append => 0|1 >>,
-C<< MultiStream => 0|1 >>, C<< TrailingData => $scalar >>
-
-=item Examples
-
-=back
-
-=item OO Interface
-
-=over 4
-
-=item Constructor
-
-A filename, A filehandle, A scalar reference
-
-=item Constructor Options
-
-C<< AutoClose => 0|1 >>, C<< MultiStream => 0|1 >>, C<< Prime => $string
->>, C<< Transparent => 0|1 >>, C<< BlockSize => $num >>, C<< InputLength =>
-$size >>, C<< Append => 0|1 >>, C<< Strict => 0|1 >>
-
-=item Examples
-
-=back
-
-=item Methods
-
-=over 4
-
-=item read
-
-=item read
-
-=item getline
-
-=item getc
-
-=item ungetc
-
-=item inflateSync
-
-=item getHeaderInfo
-
-=item tell
-
-=item eof
-
-=item seek
-
-=item binmode
-
-=item opened
-
-=item autoflush
-
-=item input_line_number
-
-=item fileno
-
-=item close
-
-=item nextStream
-
-=item trailingData
-
-=back
-
-=item Importing
-
-:all
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item MODIFICATION HISTORY
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 IPC::Msg - SysV Msg IPC object class
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-new ( KEY , FLAGS ), id, rcv ( BUF, LEN [, TYPE [, FLAGS ]] ), remove, set
-( STAT ), set ( NAME => VALUE [, NAME => VALUE ...] ), snd ( TYPE, MSG [,
-FLAGS ] ), stat
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IPC::Open2, open2 - open a process for both reading and writing
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item WARNING
-
-=item SEE ALSO
-
-=back
-
-=head2 IPC::Open3, open3 - open a process for reading, writing, and error
-handling
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item See Also
-
-L<IPC::Open2>, L<IPC::Run>
-
-=item WARNING
-
-=back
-
-=head2 IPC::Semaphore - SysV Semaphore IPC object class
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-new ( KEY , NSEMS , FLAGS ), getall, getncnt ( SEM ), getpid ( SEM ),
-getval ( SEM ), getzcnt ( SEM ), id, op ( OPLIST ), remove, set ( STAT ),
-set ( NAME => VALUE [, NAME => VALUE ...] ), setall ( VALUES ), setval ( N
-, VALUE ), stat
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IPC::SysV - SysV IPC constants
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-ftok( PATH, ID )
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=back
-
-=head2 IPC::SysV::Msg, IPC::Msg - SysV Msg IPC object class
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-new ( KEY , FLAGS ), id, rcv ( BUF, LEN [, TYPE [, FLAGS ]] ), remove, set
-( STAT ), set ( NAME => VALUE [, NAME => VALUE ...] ), snd ( TYPE, MSG [,
-FLAGS ] ), stat
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IPC::SysV::Semaphore, IPC::Semaphore - SysV Semaphore IPC object
-class
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-new ( KEY , NSEMS , FLAGS ), getall, getncnt ( SEM ), getpid ( SEM ),
-getval ( SEM ), getzcnt ( SEM ), id, op ( OPLIST ), remove, set ( STAT ),
-set ( NAME => VALUE [, NAME => VALUE ...] ), setall ( VALUES ), setval ( N
-, VALUE ), stat
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IPCmd, IPC::Cmd - finding and running system commands made easy
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CLASS METHODS
-
-=over 4
-
-=item $bool = IPC::Cmd->can_use_ipc_run( [VERBOSE] )
-
-=back
-
-=back
-
-=over 4
-
-=item $bool = IPC::Cmd->can_use_ipc_open3( [VERBOSE] )
-
-=back
-
-=over 4
-
-=item $bool = IPC::Cmd->can_capture_buffer
-
-=back
-
-=over 4
-
-=item FUNCTIONS
-
-=over 4
-
-=item $path = can_run( PROGRAM );
-
-=back
-
-=back
-
-=over 4
-
-=item $ok | ($ok, $err, $full_buf, $stdout_buff, $stderr_buff) = run(
-command => COMMAND, [verbose => BOOL, buffer => \$SCALAR] );
-
-command, verbose, buffer, success, errorcode, full_buffer, out_buffer,
-error_buffer
-
-=back
-
-=over 4
-
-=item HOW IT WORKS
-
-=item Global Variables
-
-=over 4
-
-=item $IPC::Cmd::VERBOSE
-
-=item $IPC::Cmd::USE_IPC_RUN
-
-=item $IPC::Cmd::USE_IPC_OPEN3
-
-=item $IPC::Cmd::WARN
-
-=back
-
-=item Caveats
-
-Whitespace, IO Redirect
-
-=item See Also
-
-=item ACKNOWLEDGEMENTS
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 List::Util - A selection of general-utility list subroutines
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-first BLOCK LIST, max LIST, maxstr LIST, min LIST, minstr LIST, reduce
-BLOCK LIST, shuffle LIST, sum LIST
-
-=item KNOWN BUGS
-
-=item SUGGESTED ADDITIONS
-
-=item SEE ALSO
-
-=item COPYRIGHT
-
-=back
-
-=head2 List::Utilib::List::Util, List::Util - A selection of
-general-utility list subroutines
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-first BLOCK LIST, max LIST, maxstr LIST, min LIST, minstr LIST, reduce
-BLOCK LIST, shuffle LIST, sum LIST
-
-=item KNOWN BUGS
-
-=item SUGGESTED ADDITIONS
-
-=item SEE ALSO
-
-=item COPYRIGHT
-
-=back
-
-=head2 List::Utilib::Scalar::Util, Scalar::Util - A selection of
-general-utility scalar subroutines
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-blessed EXPR, dualvar NUM, STRING, isvstring EXPR, isweak EXPR,
-looks_like_number EXPR, openhandle FH, refaddr EXPR, reftype EXPR,
-set_prototype CODEREF, PROTOTYPE, tainted EXPR, weaken REF
-
-=item KNOWN BUGS
-
-=item SEE ALSO
-
-=item COPYRIGHT
-
-=item BLATANT PLUG
-
-=back
-
-=head2 Locale::Constants - constants for Locale codes
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item KNOWN BUGS AND LIMITATIONS
-
-=item SEE ALSO
-
-Locale::Language, Locale::Country, Locale::Script, Locale::Currency
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Locale::Country - ISO codes for country identification (ISO 3166)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-B<alpha-2>, B<alpha-3>, B<numeric>
-
-=item CONVERSION ROUTINES
-
-code2country( CODE, [ CODESET ] ), country2code( STRING, [ CODESET ] ),
-country_code2code( CODE, CODESET, CODESET )
-
-=item QUERY ROUTINES
-
-C<all_country_codes( [ CODESET ] )>, C<all_country_names( [ CODESET ] )>
-
-=item SEMI-PRIVATE ROUTINES
-
-=over 4
-
-=item alias_code
-
-=item rename_country
-
-=back
-
-=item EXAMPLES
-
-=item DOMAIN NAMES
-
-=item KNOWN BUGS AND LIMITATIONS
-
-=item SEE ALSO
-
-Locale::Language, Locale::Script, Locale::Currency, Locale::SubCountry, ISO
-3166-1, http://www.iso.org/iso/en/prods-services/iso3166ma/index.html,
-http://www.egt.ie/standards/iso3166/iso3166-1-en.html,
-http://www.cia.gov/cia/publications/factbook/docs/app-d-1.html
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Locale::Currency - ISO three letter codes for currency
-identification (ISO 4217)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-XTS, XXX
-
-=item CONVERSION ROUTINES
-
-code2currency(), currency2code()
-
-=item QUERY ROUTINES
-
-C<all_currency_codes()>, C<all_currency_names()>
-
-=item EXAMPLES
-
-=item KNOWN BUGS AND LIMITATIONS
-
-=item SEE ALSO
-
-Locale::Country, Locale::Script, ISO 4217:1995,
-http://www.bsi-global.com/iso4217currency
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Locale::Language - ISO two letter codes for language identification
-(ISO 639)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONVERSION ROUTINES
-
-code2language(), language2code()
-
-=item QUERY ROUTINES
-
-C<all_language_codes()>, C<all_language_names()>
-
-=item EXAMPLES
-
-=item KNOWN BUGS AND LIMITATIONS
-
-=item SEE ALSO
-
-Locale::Country, Locale::Script, Locale::Currency, ISO 639:1988 (E/F),
-http://lcweb.loc.gov/standards/iso639-2/langhome.html
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Locale::Maketext - framework for localization
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item QUICK OVERVIEW
-
-=item METHODS
-
-=over 4
-
-=item Construction Methods
-
-=item The "maketext" Method
-
-$lh->fail_with I<or> $lh->fail_with(I<PARAM>), $lh->failure_handler_auto
-
-=item Utility Methods
-
-$language->quant($number, $singular), $language->quant($number, $singular,
-$plural), $language->quant($number, $singular, $plural, $negative),
-$language->numf($number), $language->sprintf($format, @items),
-$language->language_tag(), $language->encoding()
-
-=item Language Handle Attributes and Internals
-
-=back
-
-=item LANGUAGE CLASS HIERARCHIES
-
-=item ENTRIES IN EACH LEXICON
-
-=item BRACKET NOTATION
-
-=item AUTO LEXICONS
-
-=item CONTROLLING LOOKUP FAILURE
-
-=item HOW TO USE MAKETEXT
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMER
-
-=item AUTHOR
-
-=back
-
-=head2 Locale::Maketext::Simple - Simple interface to
-Locale::Maketext::Lexicon
-
-=over 4
-
-=item VERSION
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OPTIONS
-
-=over 4
-
-=item Class
-
-=item Path
-
-=item Style
-
-=item Export
-
-=item Subclass
-
-=item Decode
-
-=item Encoding
-
-=back
-
-=back
-
-=over 4
-
-=item ACKNOWLEDGMENTS
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=over 4
-
-=item The "MIT" License
-
-=back
-
-=back
-
-=head2 Locale::Maketext::TPJ13 -- article about software localization
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Localization and Perl: gettext breaks, Maketext fixes
-
-=over 4
-
-=item A Localization Horror Story: It Could Happen To You
-
-=item The Linguistic View
-
-=item Breaking gettext
-
-=item Replacing gettext
-
-=item Buzzwords: Abstraction and Encapsulation
-
-=item Buzzword: Isomorphism
-
-=item Buzzword: Inheritance
-
-=item Buzzword: Concision
-
-=item The Devil in the Details
-
-=item The Proof in the Pudding: Localizing Web Sites
-
-=item References
-
-=back
-
-=back
-
-=head2 Locale::Script - ISO codes for script identification (ISO 15924)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-B<alpha-2>, B<alpha-3>, B<numeric>
-
-=over 4
-
-=item SPECIAL CODES
-
-=back
-
-=item CONVERSION ROUTINES
-
-code2script( CODE, [ CODESET ] ), script2code( STRING, [ CODESET ] ),
-script_code2code( CODE, CODESET, CODESET )
-
-=item QUERY ROUTINES
-
-C<all_script_codes ( [ CODESET ] )>, C<all_script_names ( [ CODESET ] )>
-
-=item EXAMPLES
-
-=item KNOWN BUGS AND LIMITATIONS
-
-=item SEE ALSO
-
-Locale::Language, Locale::Currency, Locale::Country, ISO 15924,
-http://www.evertype.com/standards/iso15924/
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Log::Message - A generic message storing mechanism;
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Hierarchy
-
-Log::Message, Log::Message::Item, Log::Message::Handlers,
-Log::Message::Config
-
-=item Options
-
-config, private, verbose, tag, level, remove, chrono
-
-=back
-
-=over 4
-
-=item Methods
-
-=over 4
-
-=item new
-
-=back
-
-=back
-
-=over 4
-
-=item store
-
-message, tag, level, extra
-
-=back
-
-=over 4
-
-=item retrieve
-
-tag, level, message, amount, chrono, remove
-
-=back
-
-=over 4
-
-=item first
-
-=back
-
-=over 4
-
-=item last
-
-=back
-
-=over 4
-
-=item flush
-
-=back
-
-=over 4
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item Acknowledgements
-
-=item COPYRIGHT
-
-=back
-
-=head2 Log::Message::Config - Configuration options for Log::Message
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item Acknowledgements
-
-=item COPYRIGHT
-
-=back
-
-=head2 Log::Message::Handlers - Message handlers for Log::Message
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Default Handlers
-
-=over 4
-
-=item log
-
-=back
-
-=back
-
-=over 4
-
-=item carp
-
-=back
-
-=over 4
-
-=item croak
-
-=back
-
-=over 4
-
-=item cluck
-
-=back
-
-=over 4
-
-=item confess
-
-=back
-
-=over 4
-
-=item die
-
-=back
-
-=over 4
-
-=item warn
-
-=back
-
-=over 4
-
-=item trace
-
-=back
-
-=over 4
-
-=item Custom Handlers
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item Acknowledgements
-
-=item COPYRIGHT
-
-=back
-
-=head2 Log::Message::Item - Message objects for Log::Message
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Methods and Accessors
-
-=over 4
-
-=item remove
-
-=item id
-
-=item when
-
-=item message
-
-=item level
-
-=item tag
-
-=item shortmess
-
-=item longmess
-
-=item parent
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item Acknowledgements
-
-=item COPYRIGHT
-
-=back
-
-=head2 Log::Message::Simple
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FUNCTIONS
-
-=over 4
-
-=item msg("message string" [,VERBOSE])
-
-=item debug("message string" [,VERBOSE])
-
-=item error("error string" [,VERBOSE])
-
-=back
-
-=back
-
-=over 4
-
-=item carp();
-
-=item croak();
-
-=item confess();
-
-=item cluck();
-
-=back
-
-=over 4
-
-=item CLASS METHODS
-
-=over 4
-
-=item Log::Message::Simple->stack()
-
-=item Log::Message::Simple->stack_as_string([TRACE])
-
-=item Log::Message::Simple->flush()
-
-=back
-
-=back
-
-=over 4
-
-=item GLOBAL VARIABLES
-
-$ERROR_FH, $MSG_FH, $DEBUG_FH, $STACKTRACE_ON_ERROR
-
-=back
-
-=head2 MIME::Base64 - Encoding and decoding of base64 strings
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-encode_base64($str), encode_base64($str, $eol);, decode_base64($str)
-
-=item DIAGNOSTICS
-
-Premature end of base64 data, Premature padding of base64 data, Wide
-character in subroutine entry
-
-=item EXAMPLES
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 MIME::Base64::QuotedPrint, MIME::QuotedPrint - Encoding and decoding
-of quoted-printable strings
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-encode_qp($str), encode_qp($str, $eol), encode_qp($str, $eol, $binmode),
-decode_qp($str);
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 MIME::QuotedPrint - Encoding and decoding of quoted-printable
-strings
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-encode_qp($str), encode_qp($str, $eol), encode_qp($str, $eol, $binmode),
-decode_qp($str);
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 Math::BigFloat - Arbitrary size floating point math package
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Canonical notation
-
-=item Output
-
-=item C<mantissa()>, C<exponent()> and C<parts()>
-
-=item Accuracy vs. Precision
-
-=item Rounding
-
-ffround ( +$scale ), ffround ( -$scale ), ffround ( 0 ), fround ( +$scale
-), fround ( -$scale ) and fround ( 0 )
-
-=back
-
-=item METHODS
-
-=over 4
-
-=item accuracy
-
-=item precision()
-
-=item bexp()
-
-=item bnok()
-
-=item bpi()
-
-=item bcos()
-
-=item bsin()
-
-=item batan2()
-
-=item batan()
-
-=item bmuladd()
-
-=back
-
-=item Autocreating constants
-
-=over 4
-
-=item Math library
-
-=item Using Math::BigInt::Lite
-
-=back
-
-=item EXPORTS
-
-=item BUGS
-
-=item CAVEATS
-
-stringify, bstr(), bdiv, brsft, Modifying and =, bpow, precision() vs.
-accuracy()
-
-=item SEE ALSO
-
-=item LICENSE
-
-=item AUTHORS
-
-=back
-
-=head2 Math::BigInt - Arbitrary size integer/float math package
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-Input, Output
-
-=item METHODS
-
-=over 4
-
-=item config()
-
-=item accuracy()
-
-=item precision()
-
-=item brsft()
-
-=item new()
-
-=item from_oct()
-
-=item from_hex()
-
-=item from_bin()
-
-=item bnan()
-
-=item bzero()
-
-=item binf()
-
-=item bone()
-
-=item is_one()/is_zero()/is_nan()/is_inf()
-
-=item is_pos()/is_neg()/is_positive()/is_negative()
-
- $x->is_pos(); # true if > 0
- $x->is_neg(); # true if < 0
-
-=item is_odd()/is_even()/is_int()
-
-=item bcmp()
-
-=item bacmp()
-
-=item sign()
-
-=item digit()
-
-=item bneg()
-
-=item babs()
-
-=item bnorm()
-
-=item bnot()
-
-=item binc()
-
-=item bdec()
-
-=item badd()
-
-=item bsub()
-
-=item bmul()
-
-=item bmuladd()
-
-=item bdiv()
-
-=item bmod()
-
-=item bmodinv()
-
-=item bmodpow()
-
-=item bpow()
-
-=item blog()
-
-=item bexp()
-
-=item bnok()
-
-=item bpi()
-
-=item bcos()
-
-=item bsin()
-
-=item batan2()
-
-=item batan()
-
-=item blsft()
-
-=item brsft()
-
-=item band()
-
-=item bior()
-
-=item bxor()
-
-=item bnot()
-
-=item bsqrt()
-
-=item broot()
-
-=item bfac()
-
-=item round()
-
-=item bround()
-
-=item bfround()
-
-=item bfloor()
-
-=item bceil()
-
-=item bgcd()
-
-=item blcm()
-
-=item exponent()
-
-=item mantissa()
-
-=item parts()
-
-=item copy()
-
-=item as_int()/as_number()
-
-=item bsstr()
-
-=item as_hex()
-
-=item as_bin()
-
-=item as_oct()
-
-=item numify()
-
-=item modify()
-
-=item upgrade()/downgrade()
-
-=item div_scale()
-
-=item round_mode()
-
-=back
-
-=item ACCURACY and PRECISION
-
-=over 4
-
-=item Precision P
-
-=item Accuracy A
-
-=item Fallback F
-
-=item Rounding mode R
-
-'trunc', 'even', 'odd', '+inf', '-inf', 'zero', 'common', Precision,
-Accuracy (significant digits), Setting/Accessing, Creating numbers, Usage,
-Precedence, Overriding globals, Local settings, Rounding, Default values,
-Remarks
-
-=back
-
-=item Infinity and Not a Number
-
-oct()/hex(), log(-inf), exp(), cos(), sin(), atan2()
-
-=item INTERNALS
-
-=over 4
-
-=item MATH LIBRARY
-
-=item SIGN
-
-=item mantissa(), exponent() and parts()
-
-=back
-
-=item EXAMPLES
-
- use Math::BigInt;
-
-=item Autocreating constants
-
-=item PERFORMANCE
-
-=over 4
-
-=item Alternative math libraries
-
-=item SUBCLASSING
-
-=back
-
-=item Subclassing Math::BigInt
-
-=item UPGRADING
-
-=over 4
-
-=item Auto-upgrade
-
-bsqrt(), div(), blog(), bexp()
-
-=back
-
-=item EXPORTS
-
-=item CAVEATS
-
-bstr(), bsstr() and 'cmp', int(), length, bdiv, infinity handling,
-Modifying and =, bpow, Overloading -$x, Mixing different object types,
-bsqrt(), brsft()
-
-=item LICENSE
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=back
-
-=head2 Math::BigInt::Calc - Pure Perl module to support Math::BigInt
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item STORAGE
-
-=item METHODS
-
-=item WRAP YOUR OWN
-
-=item LICENSE
-
-This program is free software; you may redistribute it and/or modify it
-under
-the same terms as Perl itself.
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=back
-
-=head2 Math::BigInt::CalcEmu - Emulate low-level math with BigInt code
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=over 4
-
-=item __emu_bxor
-
-=item __emu_band
-
-=item __emu_bior
-
-=back
-
-=item LICENSE
-
-This program is free software; you may redistribute it and/or modify it
-under
-the same terms as Perl itself.
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=back
-
-=head2 Math::BigInt::FastCalc - Math::BigInt::Calc with some XS for more
-speed
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item STORAGE
-
-=item METHODS
-
-=item LICENSE
-
-This program is free software; you may redistribute it and/or modify it
-under
-the same terms as Perl itself.
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=back
-
-=head2 Math::BigRat - Arbitrary big rational numbers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item MATH LIBRARY
-
-=back
-
-=item METHODS
-
-=over 4
-
-=item new()
-
-=item numerator()
-
-=item denominator()
-
- $d = $x->denominator();
-
-=item parts()
-
-=item numify()
-
-=item as_int()/as_number()
-
-=item as_hex()
-
-=item as_bin()
-
-=item as_oct()
-
-=item from_hex()/from_bin()/from_oct()
-
-=item length()
-
-=item digit()
-
-=item bnorm()
-
-=item bfac()
-
-=item bround()/round()/bfround()
-
-=item bmod()
-
-=item bneg()
-
-=item is_one()
-
-=item is_zero()
-
-=item is_pos()/is_positive()
-
-=item is_neg()/is_negative()
-
-=item is_int()
-
-=item is_odd()
-
-=item is_even()
-
-=item bceil()
-
-=item bfloor()
-
- $x->bfloor();
-
-=item bsqrt()
-
- $x->bsqrt();
-
-=item broot()
-
- $x->broot($n);
-
-=item badd()/bmul()/bsub()/bdiv()/bdec()/binc()
-
-=item copy()
-
-=item bstr()/bsstr()
-
-=item bacmp()/bcmp()
-
-=item blsft()/brsft()
-
-=item bpow()
-
-=item bexp()
-
-=item bnok()
-
-=item config()
-
-=back
-
-=item BUGS
-
-inf handling (partial), NaN handling (partial), rounding (not implemented
-except for bceil/bfloor), $x ** $y where $y is not an integer, bmod(),
-blog(), bmodinv() and bmodpow() (partial)
-
-=item LICENSE
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=back
-
-=head2 Math::Complex - complex numbers and associated mathematical
-functions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OPERATIONS
-
-=item CREATION
-
-=item DISPLAYING
-
-=over 4
-
-=item CHANGED IN PERL 5.6
-
-=back
-
-=item USAGE
-
-=over 4
-
-=item PI
-
-=back
-
-=item ERRORS DUE TO DIVISION BY ZERO OR LOGARITHM OF ZERO
-
-=item ERRORS DUE TO INDIGESTIBLE ARGUMENTS
-
-=item BUGS
-
-=item AUTHORS
-
-=back
-
-=head2 Math::Trig - trigonometric functions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item TRIGONOMETRIC FUNCTIONS
-
-B<tan>
-
-=over 4
-
-=item ERRORS DUE TO DIVISION BY ZERO
-
-=item SIMPLE (REAL) ARGUMENTS, COMPLEX RESULTS
-
-=back
-
-=item PLANE ANGLE CONVERSIONS
-
-deg2rad, grad2rad, rad2deg, grad2deg, deg2grad, rad2grad, rad2rad, deg2deg,
-grad2grad
-
-=item RADIAL COORDINATE CONVERSIONS
-
-=over 4
-
-=item COORDINATE SYSTEMS
-
-=item 3-D ANGLE CONVERSIONS
-
-cartesian_to_cylindrical, cartesian_to_spherical, cylindrical_to_cartesian,
-cylindrical_to_spherical, spherical_to_cartesian, spherical_to_cylindrical
-
-=back
-
-=item GREAT CIRCLE DISTANCES AND DIRECTIONS
-
-=over 4
-
-=item great_circle_distance
-
-=item great_circle_direction
-
-=item great_circle_bearing
-
-=item great_circle_destination
-
-=item great_circle_midpoint
-
-=item great_circle_waypoint
-
-=back
-
-=item EXAMPLES
-
-=over 4
-
-=item CAVEAT FOR GREAT CIRCLE FORMULAS
-
-=back
-
-=item BUGS
-
-=item AUTHORS
-
-=back
-
-=head2 Memoize - Make functions faster by trading space for time
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item DETAILS
-
-=item OPTIONS
-
-=over 4
-
-=item INSTALL
-
-=item NORMALIZER
-
-=item C<SCALAR_CACHE>, C<LIST_CACHE>
-
-C<MEMORY>, C<HASH>, C<TIE>, C<FAULT>, C<MERGE>
-
-=back
-
-=item OTHER FACILITIES
-
-=over 4
-
-=item C<unmemoize>
-
-=item C<flush_cache>
-
-=back
-
-=item CAVEATS
-
-=item PERSISTENT CACHE SUPPORT
-
-=item EXPIRATION SUPPORT
-
-=item BUGS
-
-=item MAILING LIST
-
-=item AUTHOR
-
-=item COPYRIGHT AND LICENSE
-
-=item THANK YOU
-
-=back
-
-=head2 Memoize::AnyDBM_File - glue to provide EXISTS for AnyDBM_File for
-Storable use
-
-=over 4
-
-=item DESCRIPTION
-
-=back
-
-=head2 Memoize::Expire - Plug-in module for automatic expiration of
-memoized values
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item INTERFACE
-
- TIEHASH, EXISTS, STORE
-
-=item ALTERNATIVES
-
-=item CAVEATS
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Memoize::ExpireFile - test for Memoize expiration semantics
-
-=over 4
-
-=item DESCRIPTION
-
-=back
-
-=head2 Memoize::ExpireTest - test for Memoize expiration semantics
-
-=over 4
-
-=item DESCRIPTION
-
-=back
-
-=head2 Memoize::NDBM_File - glue to provide EXISTS for NDBM_File for
-Storable use
-
-=over 4
-
-=item DESCRIPTION
-
-=back
-
-=head2 Memoize::SDBM_File - glue to provide EXISTS for SDBM_File for
-Storable use
-
-=over 4
-
-=item DESCRIPTION
-
-=back
-
-=head2 Memoize::Storable - store Memoized data in Storable database
-
-=over 4
-
-=item DESCRIPTION
-
-=back
-
-=head2 Module::Build - Build and install Perl modules
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item GUIDE TO DOCUMENTATION
-
-General Usage (L<Module::Build>), Authoring Reference
-(L<Module::Build::Authoring>), API Reference (L<Module::Build::API>),
-Cookbook (L<Module::Build::Cookbook>)
-
-=item ACTIONS
-
-build, clean, code, config_data, diff, dist, distcheck, distclean, distdir,
-distmeta, distsign, disttest, docs, fakeinstall, help, html, install,
-manifest, manpages, pardist, ppd, ppmdist, prereq_report, pure_install,
-realclean, retest, skipcheck, test, testall, testcover, testdb, testpod,
-testpodcoverage, versioninstall
-
-=item OPTIONS
-
-=over 4
-
-=item Command Line Options
-
-quiet, use_rcfile, verbose, allow_mb_mismatch
-
-=item Default Options File (F<.modulebuildrc>)
-
-=back
-
-=item INSTALL PATHS
-
-lib, arch, script, bin, bindoc, libdoc, binhtml, libhtml, installdirs,
-install_path, install_base, destdir, prefix
-
-=item MOTIVATIONS
-
-+, +
-
-=item TO DO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::API - API Reference for Module Authors
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item CONSTRUCTORS
-
-current(), new(), add_to_cleanup, auto_features, autosplit, build_class,
-build_requires, create_packlist, c_source, conflicts, create_makefile_pl,
-create_readme, dist_abstract, dist_author, dist_name, dist_version,
-dist_version_from, dynamic_config, extra_compiler_flags,
-extra_linker_flags, get_options, type, store, default, include_dirs,
-install_path, installdirs, license, apache, artistic, artistic_2, bsd, gpl,
-lgpl, mit, mozilla, open_source, perl, restrictive, unrestricted, meta_add,
-meta_merge, module_name, PL_files, pm_files, pod_files, recommends,
-recursive_test_files, requires, script_files, sign, test_files, xs_files,
-new_from_context(%args), resume(), subclass()
-
-=item METHODS
-
-add_build_element($type), add_to_cleanup(@files), args(),
-autosplit_file($from, $to), base_dir(), build_requires(),
-check_installed_status($module, $version), check_installed_version($module,
-$version), compare_versions($v1, $op, $v2), config($key), config($key,
-$value), config() [deprecated], config_data($name), config_data($name =>
-$value), conflicts(), contains_pod($file), copy_if_modified(%parameters),
-create_build_script(), current_action(), depends_on(@actions),
-dir_contains($first_dir, $second_dir), dispatch($action, %args),
-dist_dir(), dist_name(), dist_version(), do_system($cmd, @args),
-feature($name), feature($name => $value), have_c_compiler(),
-install_base_relpaths(), install_base_relpaths($type),
-install_base_relpaths($type => $path), install_destination($type),
-install_path(), install_path($type), install_path($type => $path),
-install_types(), invoked_action(), notes(), notes($key), notes($key =>
-$value), orig_dir(), os_type(), is_vmsish(), is_windowsish(), is_unixish(),
-prefix_relpaths(), prefix_relpaths($installdirs),
-prefix_relpaths($installdirs, $type), prefix_relpaths($installdirs, $type
-=> $path), prepare_metadata(), prereq_failures(), prereq_report(),
-prompt($message, $default), recommends(), requires(), rscan_dir($dir,
-$pattern), runtime_params(), runtime_params($key), script_files(),
-up_to_date($source_file, $derived_file), up_to_date(\@source_files,
-\@derived_files), y_n($message, $default)
-
-=item Autogenerated Accessors
-
-PL_files(), allow_mb_mismatch(), autosplit(), base_dir(), bindoc_dirs(),
-blib(), build_bat(), build_class(), build_elements(), build_requires(),
-build_script(), c_source(), config_dir(), configure_requires(),
-conflicts(), create_makefile_pl(), create_packlist(), create_readme(),
-debugger(), destdir(), get_options(), html_css(), include_dirs(),
-install_base(), install_sets(), installdirs(), libdoc_dirs(), license(),
-magic_number(), mb_version(), meta_add(), meta_merge(), metafile(),
-module_name(), orig_dir(), original_prefix(), perl(), pm_files(),
-pod_files(), pollute(), prefix(), prereq_action_types(), quiet(),
-recommends(), recurse_into(), recursive_test_files(), requires(),
-scripts(), use_rcfile(), verbose(), xs_files()
-
-=back
-
-=item MODULE METADATA
-
-keywords, resources
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::Authoring - Authoring Module::Build modules
-
-=over 4
-
-=item DESCRIPTION
-
-=item STRUCTURE
-
-=item SUBCLASSING
-
-=item PREREQUISITES
-
-=over 4
-
-=item Types of prerequisites
-
-configure_requires, build_requires, requires, recommends, conflicts
-
-=item Format of prerequisites
-
-=item XS Extensions
-
-=back
-
-=item SAVING CONFIGURATION INFORMATION
-
-=item STARTING MODULE DEVELOPMENT
-
-=item AUTOMATION
-
-=item MIGRATION
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::Base - Default methods for Module::Build
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::Compat - Compatibility with ExtUtils::MakeMaker
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-create_makefile_pl($style, $build), small, passthrough, traditional,
-run_build_pl(args => \@ARGV), args, script, write_makefile(), makefile
-
-=item SCENARIOS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::ConfigData - Configuration for Module::Build
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-config($name), feature($name), set_config($name, $value),
-set_feature($name, $value), config_names(), feature_names(),
-auto_feature_names(), write()
-
-=item AUTHOR
-
-=back
-
-=head2 Module::Build::Cookbook - Examples of Module::Build Usage
-
-=over 4
-
-=item DESCRIPTION
-
-=item BASIC RECIPES
-
-=over 4
-
-=item Installing modules that use Module::Build
-
-=item Modifying Config.pm values
-
-=item Installing modules using the programmatic interface
-
-=item Installing to a temporary directory
-
-=item Installing to a non-standard directory
-
-=item Installing in the same location as ExtUtils::MakeMaker
-
-=item Running a single test file
-
-=back
-
-=item ADVANCED RECIPES
-
-=over 4
-
-=item Making a CPAN.pm-compatible distribution
-
-=item Changing the order of the build process
-
-=item Adding new file types to the build process
-
-=item Adding new elements to the install process
-
-=back
-
-=item EXAMPLES ON CPAN
-
-=over 4
-
-=item SVN-Notify-Mirror
-
-1. Using C<auto_features>, I check to see whether two optional modules are
-available - SVN::Notify::Config and Net::SSH;, 2. If the S::N::Config
-module is loaded, I automatically generate testfiles for it during Build
-(using the C<PL_files> property), 3. If the C<ssh_feature> is available, I
-ask if the user wishes to perform the ssh tests (since it requires a little
-preliminary setup);, 4. Only if the user has C<ssh_feature> and answers yes
-to the testing, do I generate a test file
-
-=item Modifying an action
-
-=back
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::ModuleInfo, ModuleInfo - Gather package and POD
-information from a perl module files
-
-=over 4
-
-=item DESCRIPTION
-
-new_from_file($filename, collect_pod => 1), new_from_module($module,
-collect_pod => 1, inc => \@dirs), name(), version($package), filename(),
-packages_inside(), pod_inside(), contains_pod(), pod($section),
-find_module_by_name($module, \@dirs), find_module_dir_by_name($module,
-\@dirs)
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::Notes, $notes_name - Configuration for $module_name
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-config(\$name), feature(\$name), set_config(\$name, \$value),
-set_feature(\$name, \$value), config_names(), feature_names(),
-auto_feature_names(), write()
-
-=item AUTHOR
-
-=back
-
-=head2 Module::Build::PPMMaker - Perl Package Manager file creation
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::Platform::Amiga - Builder class for Amiga platforms
-
-=over 4
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::Platform::Default - Stub class for unknown platforms
-
-=over 4
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::Platform::EBCDIC - Builder class for EBCDIC platforms
-
-=over 4
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::Platform::MPEiX - Builder class for MPEiX platforms
-
-=over 4
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::Platform::MacOS - Builder class for MacOS platforms
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Overriden Methods
-
-new(), make_executable(), dispatch(), ACTION_realclean()
-
-=back
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::Platform::RiscOS - Builder class for RiscOS platforms
-
-=over 4
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::Platform::Unix - Builder class for Unix platforms
-
-=over 4
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::Platform::VMS - Builder class for VMS platforms
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Overridden Methods
-
-_set_defaults
-
-=back
-
-=back
-
-cull_args
-
-manpage_separator
-
-prefixify
-
-_quote_args
-
-have_forkpipe
-
-_backticks
-
-do_system
-
-_infer_xs_spec
-
-rscan_dir
-
-dist_dir
-
-man3page_name
-
-expand_test_dir
-
-_detildefy
-
-find_perl_interpreter
-
-=over 4
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::Platform::VOS - Builder class for VOS platforms
-
-=over 4
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::Platform::Windows - Builder class for Windows
-platforms
-
-=over 4
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::Platform::aix - Builder class for AIX platform
-
-=over 4
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::Platform::cygwin - Builder class for Cygwin platform
-
-=over 4
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::Platform::darwin - Builder class for Mac OS X
-platform
-
-=over 4
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::Platform::os2 - Builder class for OS/2 platform
-
-=over 4
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Build::YAML - Provides just enough YAML support so that
-Module::Build works even if YAML.pm is not installed
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Module::CoreList - what modules shipped with versions of perl
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CAVEATS
-
-=item HISTORY
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Load - runtime require of both modules and files
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Rules
-
-=item Caveats
-
-=item ACKNOWLEDGEMENTS
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Module::Load::Conditional - Looking up module information / loading
-at runtime
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Methods
-
-=item $href = check_install( module => NAME [, version => VERSION, verbose
-=> BOOL ] );
-
-module, version, verbose, file, version, uptodate
-
-=back
-
-=over 4
-
-=item $bool = can_load( modules => { NAME => VERSION [,NAME => VERSION] },
-[verbose => BOOL, nocache => BOOL] )
-
-modules, verbose, nocache
-
-=back
-
-=over 4
-
-=item @list = requires( MODULE );
-
-=back
-
-=over 4
-
-=item Global Variables
-
-=over 4
-
-=item $Module::Load::Conditional::VERBOSE
-
-=item $Module::Load::Conditional::FIND_VERSION
-
-=item $Module::Load::Conditional::CHECK_INC_HASH
-
-=item $Module::Load::Conditional::CACHE
-
-=item $Module::Load::Conditional::ERROR
-
-=back
-
-=item See Also
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Module::Loaded - mark modules as loaded or unloaded
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FUNCTIONS
-
-=over 4
-
-=item $bool = mark_as_loaded( PACKAGE );
-
-=back
-
-=back
-
-=over 4
-
-=item $bool = mark_as_unloaded( PACKAGE );
-
-=back
-
-=over 4
-
-=item $loc = is_loaded( PACKAGE );
-
-=back
-
-=over 4
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Module::Pluggable - automatically give your module the ability to
-have plugins
-
-=over 4
-
-=item SYNOPSIS
-
-=item EXAMPLE
-
-=item DESCRIPTION
-
-=item ADVANCED USAGE
-
-=item INNER PACKAGES
-
-=item OPTIONS
-
-=over 4
-
-=item sub_name
-
-=item search_path
-
-=item search_dirs
-
-=item instantiate
-
-=item require
-
-=item inner
-
-=item only
-
-=item except
-
-=item package
-
-=item file_regex
-
-=back
-
-=item METHODs
-
-=over 4
-
-=item search_path
-
-=back
-
-=item FUTURE PLANS
-
-=item AUTHOR
-
-=item COPYING
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 Module::Pluggable::Object - automatically give your module the
-ability to have plugins
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item COPYING
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 NDBM_File - Tied access to ndbm files
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-C<O_RDONLY>, C<O_WRONLY>, C<O_RDWR>
-
-=item DIAGNOSTICS
-
-=over 4
-
-=item C<ndbm store returned -1, errno 22, key "..." at ...>
-
-=back
-
-=item BUGS AND WARNINGS
-
-=back
-
-=head2 NEXT - Provide a pseudo-class NEXT (et al) that allows method
-redispatch
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Enforcing redispatch
-
-=item Avoiding repetitions
-
-=item Invoking all versions of a method with a single call
-
-=item Using C<EVERY> methods
-
-=back
-
-=item AUTHOR
-
-=item BUGS AND IRRITATIONS
-
-=item COPYRIGHT
-
-=back
-
-=head2 Net::Cmd - Network Command class (as used by FTP, SMTP etc)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item USER METHODS
-
-debug ( VALUE ), message (), code (), ok (), status (), datasend ( DATA ),
-dataend ()
-
-=item CLASS METHODS
-
-debug_print ( DIR, TEXT ), debug_text ( TEXT ), command ( CMD [, ARGS, ...
-]), unsupported (), response (), parse_response ( TEXT ), getline (),
-ungetline ( TEXT ), rawdatasend ( DATA ), read_until_dot (), tied_fh ()
-
-=item EXPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Net::Config - Local configuration data for libnet
-
-=over 4
-
-=item SYNOPSYS
-
-=item DESCRIPTION
-
-=item METHODS
-
-requires_firewall HOST
-
-=item NetConfig VALUES
-
-nntp_hosts, snpp_hosts, pop3_hosts, smtp_hosts, ph_hosts, daytime_hosts,
-time_hosts, inet_domain, ftp_firewall, ftp_firewall_type, ftp_ext_passive,
-ftp_int_passive, local_netmask, test_hosts, test_exists
-
-=back
-
-=head2 Net::Domain - Attempt to evaluate the current host's internet name
-and domain
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-hostfqdn (), domainname (), hostname (), hostdomain ()
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Net::FTP - FTP Client class
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OVERVIEW
-
-=item CONSTRUCTOR
-
-new ([ HOST ] [, OPTIONS ])
-
-=item METHODS
-
-login ([LOGIN [,PASSWORD [, ACCOUNT] ] ]), authorize ( [AUTH [, RESP]]),
-site (ARGS), ascii, binary, rename ( OLDNAME, NEWNAME ), delete ( FILENAME
-), cwd ( [ DIR ] ), cdup (), pwd (), restart ( WHERE ), rmdir ( DIR [,
-RECURSE ]), mkdir ( DIR [, RECURSE ]), alloc ( SIZE [, RECORD_SIZE] ), ls (
-[ DIR ] ), dir ( [ DIR ] ), get ( REMOTE_FILE [, LOCAL_FILE [, WHERE]] ),
-put ( LOCAL_FILE [, REMOTE_FILE ] ), put_unique ( LOCAL_FILE [, REMOTE_FILE
-] ), append ( LOCAL_FILE [, REMOTE_FILE ] ), unique_name (), mdtm ( FILE ),
-size ( FILE ), supported ( CMD ), hash ( [FILEHANDLE_GLOB_REF],[
-BYTES_PER_HASH_MARK] ), feature ( NAME ), nlst ( [ DIR ] ), list ( [ DIR ]
-), retr ( FILE ), stor ( FILE ), stou ( FILE ), appe ( FILE ), port ( [
-PORT ] ), pasv (), pasv_xfer ( SRC_FILE, DEST_SERVER [, DEST_FILE ] ),
-pasv_xfer_unique ( SRC_FILE, DEST_SERVER [, DEST_FILE ] ), pasv_wait (
-NON_PASV_SERVER ), abort (), quit ()
-
-=over 4
-
-=item Methods for the adventurous
-
-quot (CMD [,ARGS])
-
-=back
-
-=item THE dataconn CLASS
-
-read ( BUFFER, SIZE [, TIMEOUT ] ), write ( BUFFER, SIZE [, TIMEOUT ] ),
-bytes_read (), abort (), close ()
-
-=item UNIMPLEMENTED
-
-B<SMNT>, B<HELP>, B<MODE>, B<SYST>, B<STAT>, B<STRU>, B<REIN>
-
-=item REPORTING BUGS
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=item USE EXAMPLES
-
-http://www.csh.rit.edu/~adam/Progs/
-
-=item CREDITS
-
-=item COPYRIGHT
-
-=back
-
-=head2 Net::NNTP - NNTP Client class
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ HOST ] [, OPTIONS ])
-
-=item METHODS
-
-article ( [ MSGID|MSGNUM ], [FH] ), body ( [ MSGID|MSGNUM ], [FH] ), head (
-[ MSGID|MSGNUM ], [FH] ), articlefh ( [ MSGID|MSGNUM ] ), bodyfh ( [
-MSGID|MSGNUM ] ), headfh ( [ MSGID|MSGNUM ] ), nntpstat ( [ MSGID|MSGNUM ]
-), group ( [ GROUP ] ), ihave ( MSGID [, MESSAGE ]), last (), date (),
-postok (), authinfo ( USER, PASS ), list (), newgroups ( SINCE [,
-DISTRIBUTIONS ]), newnews ( SINCE [, GROUPS [, DISTRIBUTIONS ]]), next (),
-post ( [ MESSAGE ] ), postfh (), slave (), quit ()
-
-=over 4
-
-=item Extension methods
-
-newsgroups ( [ PATTERN ] ), distributions (), subscriptions (),
-overview_fmt (), active_times (), active ( [ PATTERN ] ), xgtitle ( PATTERN
-), xhdr ( HEADER, MESSAGE-SPEC ), xover ( MESSAGE-SPEC ), xpath (
-MESSAGE-ID ), xpat ( HEADER, PATTERN, MESSAGE-SPEC), xrover, listgroup ( [
-GROUP ] ), reader
-
-=back
-
-=item UNSUPPORTED
-
-=item DEFINITIONS
-
-MESSAGE-SPEC, PATTERN, Examples, C<[^]-]>, C<*bdc>, C<[0-9a-zA-Z]>, C<a??d>
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Net::POP3 - Post Office Protocol 3 Client class (RFC1939)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ HOST ] [, OPTIONS ] 0
-
-=item METHODS
-
-auth ( USERNAME, PASSWORD ), user ( USER ), pass ( PASS ), login ( [ USER
-[, PASS ]] ), apop ( [ USER [, PASS ]] ), banner (), capa (), capabilities
-(), top ( MSGNUM [, NUMLINES ] ), list ( [ MSGNUM ] ), get ( MSGNUM [, FH ]
-), getfh ( MSGNUM ), last (), popstat (), ping ( USER ), uidl ( [ MSGNUM ]
-), delete ( MSGNUM ), reset (), quit ()
-
-=item NOTES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Net::Ping - check a remote host for reachability
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Functions
-
-Net::Ping->new([$proto [, $def_timeout [, $bytes [, $device [, $tos
-]]]]]);, $p->ping($host [, $timeout]);, $p->source_verify( { 0 | 1 } );,
-$p->service_check( { 0 | 1 } );, $p->tcp_service_check( { 0 | 1 } );,
-$p->hires( { 0 | 1 } );, $p->bind($local_addr);, $p->open($host);, $p->ack(
-[ $host ] );, $p->nack( $failed_ack_host );, $p->close();,
-$p->port_number([$port_number]), pingecho($host [, $timeout]);
-
-=back
-
-=item NOTES
-
-=item INSTALL
-
-=item BUGS
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=back
-
-=head2 Net::SMTP - Simple Mail Transfer Protocol Client
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLES
-
-=item CONSTRUCTOR
-
-new ( [ HOST ] [, OPTIONS ] )
-
-=item METHODS
-
-banner (), domain (), hello ( DOMAIN ), host (), etrn ( DOMAIN ), auth (
-USERNAME, PASSWORD ), mail ( ADDRESS [, OPTIONS] ), send ( ADDRESS ),
-send_or_mail ( ADDRESS ), send_and_mail ( ADDRESS ), reset (), recipient (
-ADDRESS [, ADDRESS, [...]] [, OPTIONS ] ), to ( ADDRESS [, ADDRESS [...]]
-), cc ( ADDRESS [, ADDRESS [...]] ), bcc ( ADDRESS [, ADDRESS [...]] ),
-data ( [ DATA ] ), expand ( ADDRESS ), verify ( ADDRESS ), help ( [
-$subject ] ), quit ()
-
-=item ADDRESSES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Net::Time - time and daytime network client interface
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-inet_time ( [HOST [, PROTOCOL [, TIMEOUT]]]), inet_daytime ( [HOST [,
-PROTOCOL [, TIMEOUT]]])
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Net::hostent - by-name interface to Perl's built-in gethost*()
-functions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLES
-
-=item NOTE
-
-=item AUTHOR
-
-=back
-
-=head2 Net::libnetFAQ, libnetFAQ - libnet Frequently Asked Questions
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Where to get this document
-
-=item How to contribute to this document
-
-=back
-
-=item Author and Copyright Information
-
-=over 4
-
-=item Disclaimer
-
-=back
-
-=item Obtaining and installing libnet
-
-=over 4
-
-=item What is libnet ?
-
-=item Which version of perl do I need ?
-
-=item What other modules do I need ?
-
-=item What machines support libnet ?
-
-=item Where can I get the latest libnet release
-
-=back
-
-=item Using Net::FTP
-
-=over 4
-
-=item How do I download files from an FTP server ?
-
-=item How do I transfer files in binary mode ?
-
-=item How can I get the size of a file on a remote FTP server ?
-
-=item How can I get the modification time of a file on a remote FTP server
-?
-
-=item How can I change the permissions of a file on a remote server ?
-
-=item Can I do a reget operation like the ftp command ?
-
-=item How do I get a directory listing from an FTP server ?
-
-=item Changing directory to "" does not fail ?
-
-=item I am behind a SOCKS firewall, but the Firewall option does not work ?
-
-=item I am behind an FTP proxy firewall, but cannot access machines outside
-?
-
-=item My ftp proxy firewall does not listen on port 21
-
-=item Is it possible to change the file permissions of a file on an FTP
-server ?
-
-=item I have seen scripts call a method message, but cannot find it
-documented ?
-
-=item Why does Net::FTP not implement mput and mget methods
-
-=back
-
-=item Using Net::SMTP
-
-=over 4
-
-=item Why can't the part of an Email address after the @ be used as the
-hostname ?
-
-=item Why does Net::SMTP not do DNS MX lookups ?
-
-=item The verify method always returns true ?
-
-=back
-
-=item Debugging scripts
-
-=over 4
-
-=item How can I debug my scripts that use Net::* modules ?
-
-=back
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 Net::netent - by-name interface to Perl's built-in getnet*()
-functions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLES
-
-=item NOTE
-
-=item AUTHOR
-
-=back
-
-=head2 Net::protoent - by-name interface to Perl's built-in getproto*()
-functions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTE
-
-=item AUTHOR
-
-=back
-
-=head2 Net::servent - by-name interface to Perl's built-in getserv*()
-functions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLES
-
-=item NOTE
-
-=item AUTHOR
-
-=back
-
-=head2 Netrc, Net::Netrc - OO interface to users netrc file
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item THE .netrc FILE
-
-machine name, default, login name, password string, account string, macdef
-name
-
-=item CONSTRUCTOR
-
-lookup ( MACHINE [, LOGIN ])
-
-=item METHODS
-
-login (), password (), account (), lpa ()
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=item COPYRIGHT
-
-=back
-
-=head2 O - Generic interface to Perl Compiler backends
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONVENTIONS
-
-=item IMPLEMENTATION
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 ODBM_File - Tied access to odbm files
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-C<O_RDONLY>, C<O_WRONLY>, C<O_RDWR>
-
-=item DIAGNOSTICS
-
-=over 4
-
-=item C<odbm store returned -1, errno 22, key "..." at ...>
-
-=back
-
-=item BUGS AND WARNINGS
-
-=back
-
-=head2 Object::Accessor
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=over 4
-
-=item $object = Object::Accessor->new( [ARGS] );
-
-=back
-
-=back
-
-=over 4
-
-=item $bool = $object->mk_accessors( @ACCESSORS | \%ACCESSOR_MAP );
-
-=back
-
-=over 4
-
-=item @list = $self->ls_accessors;
-
-=back
-
-=over 4
-
-=item $ref = $self->ls_allow(KEY)
-
-=back
-
-=over 4
-
-=item $clone = $self->mk_clone;
-
-=back
-
-=over 4
-
-=item $bool = $self->mk_flush;
-
-=back
-
-=over 4
-
-=item $bool = $self->mk_verify;
-
-=back
-
-=over 4
-
-=item $bool = $self->register_callback( sub { ... } );
-
-=back
-
-=over 4
-
-=item $bool = $self->can( METHOD_NAME )
-
-=back
-
-=over 4
-
-=item $val = $self->___get( METHOD_NAME );
-
-=back
-
-=over 4
-
-=item $bool = $self->___set( METHOD_NAME => VALUE );
-
-=back
-
-=over 4
-
-=item LVALUE ACCESSORS
-
-=over 4
-
-=item CAVEATS
-
-Allow handlers, Callbacks
-
-=back
-
-=back
-
-=over 4
-
-=item GLOBAL VARIABLES
-
-=over 4
-
-=item $Object::Accessor::FATAL
-
-=item $Object::Accessor::DEBUG
-
-=back
-
-=item TODO
-
-=over 4
-
-=item Create read-only accessors
-
-=back
-
-=item CAVEATS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Opcode - Disable named opcodes when compiling perl code
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTE
-
-=item WARNING
-
-=item Operator Names and Operator Lists
-
-an operator name (opname), an operator tag name (optag), a negated opname
-or optag, an operator set (opset)
-
-=item Opcode Functions
-
-opcodes, opset (OP, ...), opset_to_ops (OPSET), opset_to_hex (OPSET),
-full_opset, empty_opset, invert_opset (OPSET), verify_opset (OPSET, ...),
-define_optag (OPTAG, OPSET), opmask_add (OPSET), opmask, opdesc (OP, ...),
-opdump (PAT)
-
-=item Manipulating Opsets
-
-=item TO DO (maybe)
-
-=back
-
-=over 4
-
-=item Predefined Opcode Tags
-
-:base_core, :base_mem, :base_loop, :base_io, :base_orig, :base_math,
-:base_thread, :default, :filesys_read, :sys_db, :browse, :filesys_open,
-:filesys_write, :subprocess, :ownprocess, :others, :load,
-:still_to_be_decided, :dangerous
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=back
-
-=head2 Opcode::Safe, Safe - Compile and execute code in restricted
-compartments
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-a new namespace, an operator mask
-
-=item WARNING
-
-=over 4
-
-=item RECENT CHANGES
-
-=item Methods in class Safe
-
-permit (OP, ...), permit_only (OP, ...), deny (OP, ...), deny_only (OP,
-...), trap (OP, ...), untrap (OP, ...), share (NAME, ...), share_from
-(PACKAGE, ARRAYREF), varglob (VARNAME), reval (STRING), rdo (FILENAME),
-root (NAMESPACE), mask (MASK)
-
-=item Some Safety Issues
-
-Memory, CPU, Snooping, Signals, State Changes
-
-=item AUTHOR
-
-=back
-
-=back
-
-=head2 Opcode::ops, ops - Perl pragma to restrict unsafe operations when
-compiling
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=back
-
-=head2 POSIX - Perl interface to IEEE Std 1003.1
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTE
-
-=item CAVEATS
-
-=item FUNCTIONS
-
-_exit, abort, abs, access, acos, alarm, asctime, asin, assert, atan, atan2,
-atexit, atof, atoi, atol, bsearch, calloc, ceil, chdir, chmod, chown,
-clearerr, clock, close, closedir, cos, cosh, creat, ctermid, ctime,
-cuserid, difftime, div, dup, dup2, errno, execl, execle, execlp, execv,
-execve, execvp, exit, exp, fabs, fclose, fcntl, fdopen, feof, ferror,
-fflush, fgetc, fgetpos, fgets, fileno, floor, fmod, fopen, fork, fpathconf,
-fprintf, fputc, fputs, fread, free, freopen, frexp, fscanf, fseek, fsetpos,
-fstat, fsync, ftell, fwrite, getc, getchar, getcwd, getegid, getenv,
-geteuid, getgid, getgrgid, getgrnam, getgroups, getlogin, getpgrp, getpid,
-getppid, getpwnam, getpwuid, gets, getuid, gmtime, isalnum, isalpha,
-isatty, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace,
-isupper, isxdigit, kill, labs, ldexp, ldiv, link, localeconv, localtime,
-log, log10, longjmp, lseek, malloc, mblen, mbstowcs, mbtowc, memchr,
-memcmp, memcpy, memmove, memset, mkdir, mkfifo, mktime, modf, nice,
-offsetof, open, opendir, pathconf, pause, perror, pipe, pow, printf, putc,
-putchar, puts, qsort, raise, rand, read, readdir, realloc, remove, rename,
-rewind, rewinddir, rmdir, scanf, setgid, setjmp, setlocale, setpgid,
-setsid, setuid, sigaction, siglongjmp, sigpending, sigprocmask, sigsetjmp,
-sigsuspend, sin, sinh, sleep, sprintf, sqrt, srand, sscanf, stat, strcat,
-strchr, strcmp, strcoll, strcpy, strcspn, strerror, strftime, strlen,
-strncat, strncmp, strncpy, strpbrk, strrchr, strspn, strstr, strtod,
-strtok, strtol, strtoul, strxfrm, sysconf, system, tan, tanh, tcdrain,
-tcflow, tcflush, tcgetpgrp, tcsendbreak, tcsetpgrp, time, times, tmpfile,
-tmpnam, tolower, toupper, ttyname, tzname, tzset, umask, uname, ungetc,
-unlink, utime, vfprintf, vprintf, vsprintf, wait, waitpid, wcstombs,
-wctomb, write
-
-=item CLASSES
-
-=over 4
-
-=item POSIX::SigAction
-
-new, handler, mask, flags, safe
-
-=item POSIX::SigRt
-
-%SIGRT, SIGRTMIN, SIGRTMAX
-
-=item POSIX::SigSet
-
-new, addset, delset, emptyset, fillset, ismember
-
-=item POSIX::Termios
-
-new, getattr, getcc, getcflag, getiflag, getispeed, getlflag, getoflag,
-getospeed, setattr, setcc, setcflag, setiflag, setispeed, setlflag,
-setoflag, setospeed, Baud rate values, Terminal interface values, c_cc
-field values, c_cflag field values, c_iflag field values, c_lflag field
-values, c_oflag field values
-
-=back
-
-=item PATHNAME CONSTANTS
-
-Constants
-
-=item POSIX CONSTANTS
-
-Constants
-
-=item SYSTEM CONFIGURATION
-
-Constants
-
-=item ERRNO
-
-Constants
-
-=item FCNTL
-
-Constants
-
-=item FLOAT
-
-Constants
-
-=item LIMITS
-
-Constants
-
-=item LOCALE
-
-Constants
-
-=item MATH
-
-Constants
-
-=item SIGNAL
-
-Constants
-
-=item STAT
-
-Constants, Macros
-
-=item STDLIB
-
-Constants
-
-=item STDIO
-
-Constants
-
-=item TIME
-
-Constants
-
-=item UNISTD
-
-Constants
-
-=item WAIT
-
-Constants, WNOHANG, WUNTRACED, Macros, WIFEXITED, WEXITSTATUS, WIFSIGNALED,
-WTERMSIG, WIFSTOPPED, WSTOPSIG
-
-=back
-
-=head2 Package::Constants - List all constants declared in a package
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CLASS METHODS
-
-=over 4
-
-=item @const = Package::Constants->list( PACKAGE_NAME );
-
-=back
-
-=back
-
-=over 4
-
-=item GLOBAL VARIABLES
-
-=over 4
-
-=item $Package::Constants::DEBUG
-
-=back
-
-=back
-
-=over 4
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Params::Check - A generic input parsing/checking mechanism.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Template
-
-default, required, strict_type, defined, no_override, store, allow
-
-=item Functions
-
-=over 4
-
-=item check( \%tmpl, \%args, [$verbose] );
-
-Template, Arguments, Verbose
-
-=back
-
-=back
-
-=over 4
-
-=item allow( $test_me, \@criteria );
-
-string, regexp, subroutine, array ref
-
-=back
-
-=over 4
-
-=item last_error()
-
-=back
-
-=over 4
-
-=item Global Variables
-
-=over 4
-
-=item $Params::Check::VERBOSE
-
-=item $Params::Check::STRICT_TYPE
-
-=item $Params::Check::ALLOW_UNKNOWN
-
-=item $Params::Check::STRIP_LEADING_DASHES
-
-=item $Params::Check::NO_DUPLICATES
-
-=item $Params::Check::PRESERVE_CASE
-
-=item $Params::Check::ONLY_ALLOW_DEFINED
-
-=item $Params::Check::SANITY_CHECK_TEMPLATE
-
-=item $Params::Check::WARNINGS_FATAL
-
-=item $Params::Check::CALLER_DEPTH
-
-=back
-
-=item AUTHOR
-
-=item Acknowledgements
-
-=item COPYRIGHT
-
-=back
-
-=head2 PerlIO - On demand loader for PerlIO layers and root of PerlIO::*
-name space
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-:unix, :stdio, :perlio, :crlf, :mmap, :utf8, :bytes, :raw, :pop, :win32
-
-=over 4
-
-=item Custom Layers
-
-:encoding, :via
-
-=item Alternatives to raw
-
-=item Defaults and how to override them
-
-=item Querying the layers of filehandles
-
-=back
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 PerlIO::encoding - encoding layer
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=back
-
-=head2 PerlIO::scalar - in-memory IO, scalar IO
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item IMPLEMENTATION NOTE
-
-=back
-
-=head2 PerlIO::via - Helper class for PerlIO layers implemented in perl
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXPECTED METHODS
-
-$class->PUSHED([$mode[,$fh]]), $obj->POPPED([$fh]),
-$obj->UTF8($bellowFlag,[$fh]), $obj->OPEN($path,$mode[,$fh]),
-$obj->BINMODE([,$fh]), $obj->FDOPEN($fd[,$fh]),
-$obj->SYSOPEN($path,$imode,$perm,[,$fh]), $obj->FILENO($fh),
-$obj->READ($buffer,$len,$fh), $obj->WRITE($buffer,$fh), $obj->FILL($fh),
-$obj->CLOSE($fh), $obj->SEEK($posn,$whence,$fh), $obj->TELL($fh),
-$obj->UNREAD($buffer,$fh), $obj->FLUSH($fh), $obj->SETLINEBUF($fh),
-$obj->CLEARERR($fh), $obj->ERROR($fh), $obj->EOF($fh)
-
-=item EXAMPLES
-
-=over 4
-
-=item Example - a Hexadecimal Handle
-
-=back
-
-=back
-
-=head2 PerlIO::via::QuotedPrint - PerlIO layer for quoted-printable strings
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item REQUIRED MODULES
-
-=item SEE ALSO
-
-=item ACKNOWLEDGEMENTS
-
-=item COPYRIGHT
-
-=back
-
-=head2 Pod::Checker, podchecker() - check pod documents for syntax errors
-
-=over 4
-
-=item SYNOPSIS
-
-=item OPTIONS/ARGUMENTS
-
-=over 4
-
-=item podchecker()
-
-B<-warnings> =E<gt> I<val>
-
-=back
-
-=item DESCRIPTION
-
-=item DIAGNOSTICS
-
-=over 4
-
-=item Errors
-
-empty =headn, =over on line I<N> without closing =back, =item without
-previous =over, =back without previous =over, No argument for =begin, =end
-without =begin, Nested =begin's, =for without formatter specification,
-unresolved internal link I<NAME>, Unknown command "I<CMD>", Unknown
-interior-sequence "I<SEQ>", nested commands
-I<CMD>E<lt>...I<CMD>E<lt>...E<gt>...E<gt>, garbled entity I<STRING>, Entity
-number out of range, malformed link LE<lt>E<gt>, nonempty ZE<lt>E<gt>,
-empty XE<lt>E<gt>, Spurious text after =pod / =cut, Spurious character(s)
-after =back
-
-=item Warnings
-
-multiple occurrence of link target I<name>, line containing nothing but
-whitespace in paragraph, file does not start with =head, previous =item has
-no contents, preceding non-item paragraph(s), =item type mismatch (I<one>
-vs. I<two>), I<N> unescaped C<E<lt>E<gt>> in paragraph, Unknown entity, No
-items in =over, No argument for =item, empty section in previous paragraph,
-Verbatim paragraph in NAME section, =headI<n> without preceding higher
-level
-
-=item Hyperlinks
-
-ignoring leading/trailing whitespace in link, (section) in '$page'
-deprecated, alternative text/node '%s' contains non-escaped | or /
-
-=back
-
-=item RETURN VALUE
-
-=item EXAMPLES
-
-=item INTERFACE
-
-=back
-
-C<Pod::Checker-E<gt>new( %options )>
-
-C<$checker-E<gt>poderror( @args )>, C<$checker-E<gt>poderror( {%opts},
- at args )>
-
-C<$checker-E<gt>num_errors()>
-
-C<$checker-E<gt>num_warnings()>
-
-C<$checker-E<gt>name()>
-
-C<$checker-E<gt>node()>
-
-C<$checker-E<gt>idx()>
-
-C<$checker-E<gt>hyperlink()>
-
-=over 4
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Escapes -- for resolving Pod EE<lt>...E<gt> sequences
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item GOODIES
-
-e2char($e_content), e2charnum($e_content), $Name2character{I<name>},
-$Name2character_number{I<name>}, $Latin1Code_to_fallback{I<integer>},
-$Latin1Char_to_fallback{I<character>}, $Code2USASCII{I<integer>}
-
-=item CAVEATS
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Find - find POD documents in directory trees
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item C<pod_find( { %opts } , @directories )>
-
-C<-verbose =E<gt> 1>, C<-perl =E<gt> 1>, C<-script =E<gt> 1>, C<-inc =E<gt>
-1>
-
-=back
-
-=over 4
-
-=item C<simplify_name( $str )>
-
-=back
-
-=over 4
-
-=item C<pod_where( { %opts }, $pod )>
-
-C<-inc =E<gt> 1>, C<-dirs =E<gt> [ $dir1, $dir2, ... ]>, C<-verbose =E<gt>
-1>
-
-=back
-
-=over 4
-
-=item C<contains_pod( $file , $verbose )>
-
-=back
-
-=over 4
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Pod::Html - module to convert pod files to HTML
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FUNCTIONS
-
-=over 4
-
-=item pod2html
-
-backlink, cachedir, css, flush, header, help, hiddendirs, htmldir,
-htmlroot, index, infile, libpods, netscape, outfile, podpath, podroot,
-quiet, recurse, title, verbose
-
-=item htmlify
-
-=item anchorify
-
-=back
-
-=item ENVIRONMENT
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=item COPYRIGHT
-
-=back
-
-=head2 Pod::InputObjects - objects representing POD input paragraphs,
-commands, etc.
-
-=over 4
-
-=item SYNOPSIS
-
-=item REQUIRES
-
-=item EXPORTS
-
-=item DESCRIPTION
-
-package B<Pod::InputSource>, package B<Pod::Paragraph>, package
-B<Pod::InteriorSequence>, package B<Pod::ParseTree>
-
-=back
-
-=over 4
-
-=item B<Pod::InputSource>
-
-=back
-
-=over 4
-
-=item B<new()>
-
-=back
-
-=over 4
-
-=item B<name()>
-
-=back
-
-=over 4
-
-=item B<handle()>
-
-=back
-
-=over 4
-
-=item B<was_cutting()>
-
-=back
-
-=over 4
-
-=item B<Pod::Paragraph>
-
-=back
-
-=over 4
-
-=item Pod::Paragraph-E<gt>B<new()>
-
-=back
-
-=over 4
-
-=item $pod_para-E<gt>B<cmd_name()>
-
-=back
-
-=over 4
-
-=item $pod_para-E<gt>B<text()>
-
-=back
-
-=over 4
-
-=item $pod_para-E<gt>B<raw_text()>
-
-=back
-
-=over 4
-
-=item $pod_para-E<gt>B<cmd_prefix()>
-
-=back
-
-=over 4
-
-=item $pod_para-E<gt>B<cmd_separator()>
-
-=back
-
-=over 4
-
-=item $pod_para-E<gt>B<parse_tree()>
-
-=back
-
-=over 4
-
-=item $pod_para-E<gt>B<file_line()>
-
-=back
-
-=over 4
-
-=item B<Pod::InteriorSequence>
-
-=back
-
-=over 4
-
-=item Pod::InteriorSequence-E<gt>B<new()>
-
-=back
-
-=over 4
-
-=item $pod_seq-E<gt>B<cmd_name()>
-
-=back
-
-=over 4
-
-=item $pod_seq-E<gt>B<prepend()>
-
-=back
-
-=over 4
-
-=item $pod_seq-E<gt>B<append()>
-
-=back
-
-=over 4
-
-=item $pod_seq-E<gt>B<nested()>
-
-=back
-
-=over 4
-
-=item $pod_seq-E<gt>B<raw_text()>
-
-=back
-
-=over 4
-
-=item $pod_seq-E<gt>B<left_delimiter()>
-
-=back
-
-=over 4
-
-=item $pod_seq-E<gt>B<right_delimiter()>
-
-=back
-
-=over 4
-
-=item $pod_seq-E<gt>B<parse_tree()>
-
-=back
-
-=over 4
-
-=item $pod_seq-E<gt>B<file_line()>
-
-=back
-
-=over 4
-
-=item Pod::InteriorSequence::B<DESTROY()>
-
-=back
-
-=over 4
-
-=item B<Pod::ParseTree>
-
-=back
-
-=over 4
-
-=item Pod::ParseTree-E<gt>B<new()>
-
-=back
-
-=over 4
-
-=item $ptree-E<gt>B<top()>
-
-=back
-
-=over 4
-
-=item $ptree-E<gt>B<children()>
-
-=back
-
-=over 4
-
-=item $ptree-E<gt>B<prepend()>
-
-=back
-
-=over 4
-
-=item $ptree-E<gt>B<append()>
-
-=back
-
-=over 4
-
-=item $ptree-E<gt>B<raw_text()>
-
-=back
-
-=over 4
-
-=item Pod::ParseTree::B<DESTROY()>
-
-=back
-
-=over 4
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::LaTeX - Convert Pod data to formatted Latex
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item OBJECT METHODS
-
-C<initialize>
-
-=back
-
-=over 4
-
-=item Data Accessors
-
-B<AddPreamble>
-
-=back
-
-B<AddPostamble>
-
-B<Head1Level>
-
-B<Label>
-
-B<LevelNoNum>
-
-B<MakeIndex>
-
-B<ReplaceNAMEwithSection>
-
-B<StartWithNewPage>
-
-B<TableOfContents>
-
-B<UniqueLabels>
-
-B<UserPreamble>
-
-B<UserPostamble>
-
-B<Lists>
-
-=over 4
-
-=item Subclassed methods
-
-=back
-
-B<begin_pod>
-
-B<end_pod>
-
-B<command>
-
-B<verbatim>
-
-B<textblock>
-
-B<interior_sequence>
-
-=over 4
-
-=item List Methods
-
-B<begin_list>
-
-=back
-
-B<end_list>
-
-B<add_item>
-
-=over 4
-
-=item Methods for headings
-
-B<head>
-
-=back
-
-=over 4
-
-=item Internal methods
-
-B<_output>
-
-=back
-
-B<_replace_special_chars>
-
-B<_replace_special_chars_late>
-
-B<_create_label>
-
-B<_create_index>
-
-B<_clean_latex_commands>
-
-B<_split_delimited>
-
-=over 4
-
-=item NOTES
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=item REVISION
-
-=back
-
-=head2 Pod::Man - Convert POD data to formatted *roff input
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-center, date, fixed, fixedbold, fixeditalic, fixedbolditalic, name, quotes,
-release, section
-
-=item DIAGNOSTICS
-
-roff font should be 1 or 2 chars, not "%s", Invalid quote specification
-"%s"
-
-=item BUGS
-
-=item CAVEATS
-
-=item AUTHOR
-
-=item COPYRIGHT AND LICENSE
-
-=item SEE ALSO
-
-=back
-
-=head2 Pod::ParseLink - Parse an LE<lt>E<gt> formatting code in POD text
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 Pod::ParseUtils - helpers for POD parsing and conversion
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item Pod::List
-
-Pod::List-E<gt>new()
-
-=back
-
-$list-E<gt>file()
-
-$list-E<gt>start()
-
-$list-E<gt>indent()
-
-$list-E<gt>type()
-
-$list-E<gt>rx()
-
-$list-E<gt>item()
-
-$list-E<gt>parent()
-
-$list-E<gt>tag()
-
-=over 4
-
-=item Pod::Hyperlink
-
-Pod::Hyperlink-E<gt>new()
-
-=back
-
-$link-E<gt>parse($string)
-
-$link-E<gt>markup($string)
-
-$link-E<gt>text()
-
-$link-E<gt>warning()
-
-$link-E<gt>file(), $link-E<gt>line()
-
-$link-E<gt>page()
-
-$link-E<gt>node()
-
-$link-E<gt>alttext()
-
-$link-E<gt>type()
-
-$link-E<gt>link()
-
-=over 4
-
-=item Pod::Cache
-
-Pod::Cache-E<gt>new()
-
-=back
-
-$cache-E<gt>item()
-
-$cache-E<gt>find_page($name)
-
-=over 4
-
-=item Pod::Cache::Item
-
-Pod::Cache::Item-E<gt>new()
-
-=back
-
-$cacheitem-E<gt>page()
-
-$cacheitem-E<gt>description()
-
-$cacheitem-E<gt>path()
-
-$cacheitem-E<gt>file()
-
-$cacheitem-E<gt>nodes()
-
-$cacheitem-E<gt>find_node($name)
-
-$cacheitem-E<gt>idx()
-
-=over 4
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Pod::Parser - base class for creating POD filters and translators
-
-=over 4
-
-=item SYNOPSIS
-
-=item REQUIRES
-
-=item EXPORTS
-
-=item DESCRIPTION
-
-=item QUICK OVERVIEW
-
-=item PARSING OPTIONS
-
-B<-want_nonPODs> (default: unset), B<-process_cut_cmd> (default: unset),
-B<-warnings> (default: unset)
-
-=back
-
-=over 4
-
-=item RECOMMENDED SUBROUTINE/METHOD OVERRIDES
-
-=back
-
-=over 4
-
-=item B<command()>
-
-C<$cmd>, C<$text>, C<$line_num>, C<$pod_para>
-
-=back
-
-=over 4
-
-=item B<verbatim()>
-
-C<$text>, C<$line_num>, C<$pod_para>
-
-=back
-
-=over 4
-
-=item B<textblock()>
-
-C<$text>, C<$line_num>, C<$pod_para>
-
-=back
-
-=over 4
-
-=item B<interior_sequence()>
-
-=back
-
-=over 4
-
-=item OPTIONAL SUBROUTINE/METHOD OVERRIDES
-
-=back
-
-=over 4
-
-=item B<new()>
-
-=back
-
-=over 4
-
-=item B<initialize()>
-
-=back
-
-=over 4
-
-=item B<begin_pod()>
-
-=back
-
-=over 4
-
-=item B<begin_input()>
-
-=back
-
-=over 4
-
-=item B<end_input()>
-
-=back
-
-=over 4
-
-=item B<end_pod()>
-
-=back
-
-=over 4
-
-=item B<preprocess_line()>
-
-=back
-
-=over 4
-
-=item B<preprocess_paragraph()>
-
-=back
-
-=over 4
-
-=item METHODS FOR PARSING AND PROCESSING
-
-=back
-
-=over 4
-
-=item B<parse_text()>
-
-B<-expand_seq> =E<gt> I<code-ref>|I<method-name>, B<-expand_text> =E<gt>
-I<code-ref>|I<method-name>, B<-expand_ptree> =E<gt>
-I<code-ref>|I<method-name>
-
-=back
-
-=over 4
-
-=item B<interpolate()>
-
-=back
-
-=over 4
-
-=item B<parse_paragraph()>
-
-=back
-
-=over 4
-
-=item B<parse_from_filehandle()>
-
-=back
-
-=over 4
-
-=item B<parse_from_file()>
-
-=back
-
-=over 4
-
-=item ACCESSOR METHODS
-
-=back
-
-=over 4
-
-=item B<errorsub()>
-
-=back
-
-=over 4
-
-=item B<cutting()>
-
-=back
-
-=over 4
-
-=item B<parseopts()>
-
-=back
-
-=over 4
-
-=item B<output_file()>
-
-=back
-
-=over 4
-
-=item B<output_handle()>
-
-=back
-
-=over 4
-
-=item B<input_file()>
-
-=back
-
-=over 4
-
-=item B<input_handle()>
-
-=back
-
-=over 4
-
-=item B<input_streams()>
-
-=back
-
-=over 4
-
-=item B<top_stream()>
-
-=back
-
-=over 4
-
-=item PRIVATE METHODS AND DATA
-
-=back
-
-=over 4
-
-=item B<_push_input_stream()>
-
-=back
-
-=over 4
-
-=item B<_pop_input_stream()>
-
-=back
-
-=over 4
-
-=item TREE-BASED PARSING
-
-=item CAVEATS
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Perldoc::ToChecker - let Perldoc check Pod for errors
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Perldoc::ToMan - let Perldoc render Pod as man pages
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CAVEAT
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Perldoc::ToNroff - let Perldoc convert Pod to nroff
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CAVEAT
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Perldoc::ToPod - let Perldoc render Pod as ... Pod!
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Perldoc::ToRtf - let Perldoc render Pod as RTF
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Perldoc::ToText - let Perldoc render Pod as plaintext
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CAVEAT
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Perldoc::ToTk - let Perldoc use Tk::Pod to render Pod
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Perldoc::ToXml - let Perldoc render Pod as XML
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::PlainText - Convert POD data to formatted ASCII text
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-alt, indent, loose, sentence, width
-
-=item DIAGNOSTICS
-
-Bizarre space in item, Can't open %s for reading: %s, Unknown escape: %s,
-Unknown sequence: %s, Unmatched =back
-
-=item RESTRICTIONS
-
-=item NOTES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Plainer - Perl extension for converting Pod to old style Pod.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item EXPORT
-
-=back
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Pod::Select, podselect() - extract selected sections of POD from
-input
-
-=over 4
-
-=item SYNOPSIS
-
-=item REQUIRES
-
-=item EXPORTS
-
-=item DESCRIPTION
-
-=item SECTION SPECIFICATIONS
-
-=item RANGE SPECIFICATIONS
-
-=back
-
-=over 4
-
-=item OBJECT METHODS
-
-=back
-
-=over 4
-
-=item B<curr_headings()>
-
-=back
-
-=over 4
-
-=item B<select()>
-
-=back
-
-=over 4
-
-=item B<add_selection()>
-
-=back
-
-=over 4
-
-=item B<clear_selections()>
-
-=back
-
-=over 4
-
-=item B<match_section()>
-
-=back
-
-=over 4
-
-=item B<is_selected()>
-
-=back
-
-=over 4
-
-=item EXPORTED FUNCTIONS
-
-=back
-
-=over 4
-
-=item B<podselect()>
-
-B<-output>, B<-sections>, B<-ranges>
-
-=back
-
-=over 4
-
-=item PRIVATE METHODS AND DATA
-
-=back
-
-=over 4
-
-=item B<_compile_section_spec()>
-
-=back
-
-=over 4
-
-=item $self->{_SECTION_HEADINGS}
-
-=back
-
-=over 4
-
-=item $self->{_SELECTED_SECTIONS}
-
-=back
-
-=over 4
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple - framework for parsing Pod
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item MAIN METHODS
-
-C<< $parser = I<SomeClass>->new(); >>, C<< $parser->output_fh( *OUT ); >>,
-C<< $parser->output_string( \$somestring ); >>, C<< $parser->parse_file(
-I<$some_filename> ); >>, C<< $parser->parse_file( *INPUT_FH ); >>, C<<
-$parser->parse_string_document( I<$all_content> ); >>, C<<
-$parser->parse_lines( I<... at lines...>, undef ); >>, C<<
-$parser->content_seen >>, C<< I<SomeClass>->filter( I<$filename> ); >>, C<<
-I<SomeClass>->filter( I<*INPUT_FH> ); >>, C<< I<SomeClass>->filter(
-I<\$document_content> ); >>
-
-=item SECONDARY METHODS
-
-C<< $parser->no_whining( I<SOMEVALUE> ) >>, C<< $parser->no_errata_section(
-I<SOMEVALUE> ) >>, C<< $parser->complain_stderr( I<SOMEVALUE> ) >>, C<<
-$parser->source_filename >>, C<< $parser->doc_has_started >>, C<<
-$parser->source_dead >>
-
-=item CAVEATS
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple::Checker -- check the Pod syntax of a document
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple::Debug -- put Pod::Simple into trace/debug mode
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CAVEATS
-
-=item GUTS
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple::DumpAsText -- dump Pod-parsing events as text
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple::DumpAsXML -- turn Pod into XML
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple::HTML - convert Pod to HTML
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CALLING FROM THE COMMAND LINE
-
-=item CALLING FROM PERL
-
-=item METHODS
-
-=item SUBCLASSING
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple::HTMLBatch - convert several Pod files to several HTML
-files
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item FROM THE COMMAND LINE
-
-=back
-
-=item MAIN METHODS
-
-$batchconv = Pod::Simple::HTMLBatch->new;, $batchconv->batch_convert(
-I<indirs>, I<outdir> );, $batchconv->batch_convert( undef , ...);,
-$batchconv->batch_convert( q{@INC}, ...);, $batchconv->batch_convert(
-\@dirs , ...);, $batchconv->batch_convert( "somedir" , ...);,
-$batchconv->batch_convert( 'somedir:someother:also' , ...);,
-$batchconv->batch_convert( ... , undef );, $batchconv->batch_convert( ... ,
-'somedir' );
-
-=over 4
-
-=item ACCESSOR METHODS
-
-$batchconv->verbose( I<nonnegative_integer> );, $batchconv->index(
-I<true-or-false> );, $batchconv->contents_file( I<filename> );,
-$batchconv->contents_page_start( I<HTML_string> );,
-$batchconv->contents_page_end( I<HTML_string> );, $batchconv->add_css( $url
-);, $batchconv->add_javascript( $url );, $batchconv->css_flurry(
-I<true-or-false> );, $batchconv->javascript_flurry( I<true-or-false> );,
-$batchconv->no_contents_links( I<true-or-false> );,
-$batchconv->html_render_class( I<classname> );
-
-=back
-
-=item NOTES ON CUSTOMIZATION
-
-=item ASK ME!
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple::LinkSection -- represent "section" attributes of L
-codes
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple::Methody -- turn Pod::Simple events into method calls
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHOD CALLING
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple::PullParser -- a pull-parser interface to parsing Pod
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-my $token = $parser->get_token, $parser->unget_token( $token ),
-$parser->unget_token( $token1, $token2, ... ), $parser->set_source(
-$filename ), $parser->set_source( $filehandle_object ),
-$parser->set_source( \$document_source ), $parser->set_source(
-\@document_lines ), $parser->parse_file(...),
-$parser->parse_string_document(...), $parser->filter(...),
-$parser->parse_from_file(...), my $title_string = $parser->get_title, my
-$title_string = $parser->get_short_title, $author_name =
-$parser->get_author, $description_name = $parser->get_description,
-$version_block = $parser->get_version
-
-=item NOTE
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple::PullParserEndToken -- end-tokens from
-Pod::Simple::PullParser
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-$token->tagname, $token->tagname(I<somestring>), $token->tag(...),
-$token->is_tag(I<somestring>) or $token->is_tagname(I<somestring>)
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple::PullParserStartToken -- start-tokens from
-Pod::Simple::PullParser
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-$token->tagname, $token->tagname(I<somestring>), $token->tag(...),
-$token->is_tag(I<somestring>) or $token->is_tagname(I<somestring>),
-$token->attr(I<attrname>), $token->attr(I<attrname>, I<newvalue>),
-$token->attr_hash
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple::PullParserTextToken -- text-tokens from
-Pod::Simple::PullParser
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-$token->text, $token->text(I<somestring>), $token->text_r()
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple::PullParserToken -- tokens from Pod::Simple::PullParser
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-$token->type, $token->is_start, $token->is_text, $token->is_end,
-$token->dump
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple::RTF -- format Pod as RTF
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FORMAT CONTROL ATTRIBUTES
-
-$parser->head1_halfpoint_size( I<halfpoint_integer> );,
-$parser->head2_halfpoint_size( I<halfpoint_integer> );,
-$parser->head3_halfpoint_size( I<halfpoint_integer> );,
-$parser->head4_halfpoint_size( I<halfpoint_integer> );,
-$parser->codeblock_halfpoint_size( I<halfpoint_integer> );,
-$parser->header_halfpoint_size( I<halfpoint_integer> );,
-$parser->normal_halfpoint_size( I<halfpoint_integer> );,
-$parser->no_proofing_exemptions( I<true_or_false> );, $parser->doc_lang(
-I<microsoft_decimal_language_code> )
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple::Search - find POD documents in directory trees
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-=item ACCESSORS
-
-$search->inc( I<true-or-false> );, $search->verbose( I<nonnegative-number>
-);, $search->limit_glob( I<some-glob-string> );, $search->callback(
-I<\&some_routine> );, $search->laborious( I<true-or-false> );,
-$search->shadows( I<true-or-false> );, $search->limit_re( I<some-regxp> );,
-$search->dir_prefix( I<some-string-value> );, $search->progress(
-I<some-progress-object> );, $name2path = $self->name2path;, $path2name =
-$self->path2name;
-
-=item MAIN SEARCH METHODS
-
-=over 4
-
-=item C<< $search->survey( @directories ) >>
-
-C<name2path>, C<path2name>
-
-=item C<< $search->simplify_name( $str ) >>
-
-=item C<< $search->find( $pod ) >>
-
-=item C<< $search->find( $pod, @search_dirs ) >>
-
-=item C<< $self->contains_pod( $file ) >>
-
-=back
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Pod::Simple::Subclassing -- write a formatter as a Pod::Simple
-subclass
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Events
-
-C<< $parser->_handle_element_start( I<element_name>, I<attr_hashref> ) >>,
-C<< $parser->_handle_element_end( I<element_name> ) >>, C<<
-$parser->_handle_text( I<text_string> ) >>, events with an element_name
-of Document, events with an element_name of Para, events with an
-element_name of B, C, F, or I, events with an element_name of S, events
-with an element_name of X, events with an element_name of L, events with an
-element_name of E or Z, events with an element_name of Verbatim, events
-with an element_name of head1 .. head4, events with an element_name of
-over-bullet, events with an element_name of over-number, events with an
-element_name of over-text, events with an element_name of over-block,
-events with an element_name of item-bullet, events with an element_name of
-item-number, events with an element_name of item-text, events with an
-element_name of for, events with an element_name of Data
-
-=item More Pod::Simple Methods
-
-C<< $parser->accept_targets( I<SOMEVALUE> ) >>, C<<
-$parser->accept_targets_as_text( I<SOMEVALUE> ) >>, C<<
-$parser->accept_codes( I<Codename>, I<Codename>... ) >>, C<<
-$parser->accept_directive_as_data( I<directive_name> ) >>, C<<
-$parser->accept_directive_as_verbatim( I<directive_name> ) >>, C<<
-$parser->accept_directive_as_processed( I<directive_name> ) >>, C<<
-$parser->nbsp_for_S( I<BOOLEAN> ); >>, C<< $parser->version_report() >>,
-C<< $parser->pod_para_count() >>, C<< $parser->line_count() >>, C<<
-$parser->nix_X_codes( I<SOMEVALUE> ) >>, C<< $parser->merge_text(
-I<SOMEVALUE> ) >>, C<< $parser->code_handler( I<CODE_REF> ) >>, C<<
-$parser->cut_handler( I<CODE_REF> ) >>, C<< $parser->whine(
-I<linenumber>, I<complaint string> ) >>, C<< $parser->scream(
-I<linenumber>, I<complaint string> ) >>, C<< $parser->source_dead(1) >>,
-C<< $parser->hide_line_numbers( I<SOMEVALUE> ) >>, C<< $parser->no_whining(
-I<SOMEVALUE> ) >>, C<< $parser->no_errata_section( I<SOMEVALUE> ) >>, C<<
-$parser->complain_stderr( I<SOMEVALUE> ) >>, C<< $parser->bare_output(
-I<SOMEVALUE> ) >>, C<< $parser->preserve_whitespace( I<SOMEVALUE> ) >>
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple::Text -- format Pod as plaintext
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple::TextContent -- get the text content of Pod
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Simple::XMLOutStream -- turn Pod into XML
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item ABOUT EXTENDING POD
-
-=item ASK ME!
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::SimpleTree, Pod::Simple::SimpleTree -- parse Pod into a simple
-parse tree
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=item Tree Contents
-
-=item SEE ALSO
-
-=item COPYRIGHT AND DISCLAIMERS
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Text - Convert POD data to formatted ASCII text
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-alt, code, indent, loose, margin, quotes, sentence, width
-
-=item DIAGNOSTICS
-
-Bizarre space in item, Item called without tag, Can't open %s for reading:
-%s, Invalid quote specification "%s"
-
-=item NOTES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 Pod::Text::Color - Convert POD data to formatted color ASCII text
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUGS
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 Pod::Text::Overstrike - Convert POD data to formatted overstrike
-text
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUGS
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 Pod::Text::Termcap - Convert POD data to ASCII text with format
-escapes
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 Pod::Usage, pod2usage() - print a usage message from embedded pod
-documentation
-
-=over 4
-
-=item SYNOPSIS
-
-=item ARGUMENTS
-
-C<-message>, C<-msg>, C<-exitval>, C<-verbose>, C<-sections>, C<-output>,
-C<-input>, C<-pathlist>, C<-noperldoc>
-
-=item DESCRIPTION
-
-=item EXAMPLES
-
-=over 4
-
-=item Recommended Use
-
-=back
-
-=item CAVEATS
-
-=item AUTHOR
-
-=item ACKNOWLEDGMENTS
-
-=back
-
-=head2 SDBM_File - Tied access to sdbm files
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-C<O_RDONLY>, C<O_WRONLY>, C<O_RDWR>
-
-=item DIAGNOSTICS
-
-=over 4
-
-=item C<sdbm store returned -1, errno 22, key "..." at ...>
-
-=back
-
-=item BUGS AND WARNINGS
-
-=back
-
-=head2 Safe - Compile and execute code in restricted compartments
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-a new namespace, an operator mask
-
-=item WARNING
-
-=over 4
-
-=item RECENT CHANGES
-
-=item Methods in class Safe
-
-permit (OP, ...), permit_only (OP, ...), deny (OP, ...), deny_only (OP,
-...), trap (OP, ...), untrap (OP, ...), share (NAME, ...), share_from
-(PACKAGE, ARRAYREF), varglob (VARNAME), reval (STRING), rdo (FILENAME),
-root (NAMESPACE), mask (MASK)
-
-=item Some Safety Issues
-
-Memory, CPU, Snooping, Signals, State Changes
-
-=item AUTHOR
-
-=back
-
-=back
-
-=head2 Scalar::Util - A selection of general-utility scalar subroutines
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-blessed EXPR, dualvar NUM, STRING, isvstring EXPR, isweak EXPR,
-looks_like_number EXPR, openhandle FH, refaddr EXPR, reftype EXPR,
-set_prototype CODEREF, PROTOTYPE, tainted EXPR, weaken REF
-
-=item KNOWN BUGS
-
-=item SEE ALSO
-
-=item COPYRIGHT
-
-=item BLATANT PLUG
-
-=back
-
-=head2 Search::Dict, look - search for key in dictionary file
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 SelectSaver - save and restore selected file handle
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 SelfLoader - load functions only on demand
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item The __DATA__ token
-
-=item SelfLoader autoloading
-
-=item Autoloading and package lexicals
-
-=item SelfLoader and AutoLoader
-
-=item __DATA__, __END__, and the FOOBAR::DATA filehandle.
-
-=item Classes and inherited methods.
-
-=back
-
-=item Multiple packages and fully qualified subroutine names
-
-=back
-
-B<_make_cmd>
-
-=head2 Shell - run shell commands transparently within perl
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Caveats
-
-=item Escaping Magic Characters
-
-=item Configuration
-
-=back
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 Socket, sockaddr_in, sockaddr_un, inet_aton, inet_ntoa - load the C
-socket.h defines and structure manipulators
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-inet_aton HOSTNAME, inet_ntoa IP_ADDRESS, INADDR_ANY, INADDR_BROADCAST,
-INADDR_LOOPBACK, INADDR_NONE, sockaddr_family SOCKADDR, sockaddr_in PORT,
-ADDRESS, sockaddr_in SOCKADDR_IN, pack_sockaddr_in PORT, IP_ADDRESS,
-unpack_sockaddr_in SOCKADDR_IN, sockaddr_un PATHNAME, sockaddr_un
-SOCKADDR_UN, pack_sockaddr_un PATH, unpack_sockaddr_un SOCKADDR_UN
-
-=back
-
-=head2 Storable - persistence for Perl data structures
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item MEMORY STORE
-
-=item ADVISORY LOCKING
-
-=item SPEED
-
-=item CANONICAL REPRESENTATION
-
-=item CODE REFERENCES
-
-=item FORWARD COMPATIBILITY
-
-utf8 data, restricted hashes, files from future versions of Storable
-
-=item ERROR REPORTING
-
-=item WIZARDS ONLY
-
-=over 4
-
-=item Hooks
-
-C<STORABLE_freeze> I<obj>, I<cloning>, C<STORABLE_thaw> I<obj>, I<cloning>,
-I<serialized>, .., C<STORABLE_attach> I<class>, I<cloning>, I<serialized>
-
-=item Predicates
-
-C<Storable::last_op_in_netorder>, C<Storable::is_storing>,
-C<Storable::is_retrieving>
-
-=item Recursion
-
-=item Deep Cloning
-
-=back
-
-=item Storable magic
-
-$info = Storable::file_magic( $filename ), C<version>, C<version_nv>,
-C<major>, C<minor>, C<hdrsize>, C<netorder>, C<byteorder>, C<intsize>,
-C<longsize>, C<ptrsize>, C<nvsize>, C<file>, $info = Storable::read_magic(
-$buffer ), $info = Storable::read_magic( $buffer, $must_be_file )
-
-=item EXAMPLES
-
-=item WARNING
-
-=item BUGS
-
-=over 4
-
-=item 64 bit data in perl 5.6.0 and 5.6.1
-
-=back
-
-=item CREDITS
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Switch - A switch statement for Perl
-
-=over 4
-
-=item VERSION
-
-=item SYNOPSIS
-
-=item BACKGROUND
-
-=item DESCRIPTION
-
-=over 4
-
-=item Allowing fall-through
-
-=item Automating fall-through
-
-=item Alternative syntax
-
-=item Higher-order Operations
-
-=back
-
-=item DEPENDENCIES
-
-=item AUTHOR
-
-=item BUGS
-
-=item LIMITATIONS
-
-=item COPYRIGHT
-
-=back
-
-=head2 Symbol - manipulate Perl symbols and their names
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUGS
-
-=back
-
-=head2 Sys::Hostname - Try every conceivable way to get hostname
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=back
-
-=head2 Syslog, Sys::Syslog - Perl interface to the UNIX syslog(3) calls
-
-=over 4
-
-=item VERSION
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXPORTS
-
-=item FUNCTIONS
-
-B<openlog($ident, $logopt, $facility)>, B<syslog($priority, $message)>,
-B<syslog($priority, $format, @args)>, B<Note>,
-B<setlogmask($mask_priority)>, B<setlogsock($sock_type)>,
-B<setlogsock($sock_type, $stream_location)> (added in Perl 5.004_02),
-B<Note>, B<closelog()>
-
-=item THE RULES OF SYS::SYSLOG
-
-=item EXAMPLES
-
-=item CONSTANTS
-
-=over 4
-
-=item Facilities
-
-=item Levels
-
-=back
-
-=item DIAGNOSTICS
-
-C<Invalid argument passed to setlogsock>, C<eventlog passed to setlogsock,
-but no Win32 API available>, C<no connection to syslog available>, C<stream
-passed to setlogsock, but %s is not writable>, C<stream passed to
-setlogsock, but could not find any device>, C<tcp passed to setlogsock, but
-tcp service unavailable>, C<syslog: expecting argument %s>, C<syslog:
-invalid level/facility: %s>, C<syslog: too many levels given: %s>,
-C<syslog: too many facilities given: %s>, C<syslog: level must be given>,
-C<udp passed to setlogsock, but udp service unavailable>, C<unix passed to
-setlogsock, but path not available>
-
-=item SEE ALSO
-
-=over 4
-
-=item Manual Pages
-
-=item RFCs
-
-=item Articles
-
-=item Event Log
-
-=back
-
-=item AUTHORS & ACKNOWLEDGEMENTS
-
-=item BUGS
-
-=item SUPPORT
-
-AnnoCPAN: Annotated CPAN documentation, CPAN Ratings, RT: CPAN's request
-tracker, Search CPAN, Kobes' CPAN Search, Perl Documentation
-
-=item COPYRIGHT
-
-=item LICENSE
-
-=back
-
-=head2 Syslog::Syslog, Sys::Syslog - Perl interface to the UNIX syslog(3)
-calls
-
-=over 4
-
-=item VERSION
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXPORTS
-
-=item FUNCTIONS
-
-B<openlog($ident, $logopt, $facility)>, B<syslog($priority, $message)>,
-B<syslog($priority, $format, @args)>, B<Note>,
-B<setlogmask($mask_priority)>, B<setlogsock($sock_type)>,
-B<setlogsock($sock_type, $stream_location)> (added in Perl 5.004_02),
-B<Note>, B<closelog()>
-
-=item THE RULES OF SYS::SYSLOG
-
-=item EXAMPLES
-
-=item CONSTANTS
-
-=over 4
-
-=item Facilities
-
-=item Levels
-
-=back
-
-=item DIAGNOSTICS
-
-C<Invalid argument passed to setlogsock>, C<eventlog passed to setlogsock,
-but no Win32 API available>, C<no connection to syslog available>, C<stream
-passed to setlogsock, but %s is not writable>, C<stream passed to
-setlogsock, but could not find any device>, C<tcp passed to setlogsock, but
-tcp service unavailable>, C<syslog: expecting argument %s>, C<syslog:
-invalid level/facility: %s>, C<syslog: too many levels given: %s>,
-C<syslog: too many facilities given: %s>, C<syslog: level must be given>,
-C<udp passed to setlogsock, but udp service unavailable>, C<unix passed to
-setlogsock, but path not available>
-
-=item SEE ALSO
-
-=over 4
-
-=item Manual Pages
-
-=item RFCs
-
-=item Articles
-
-=item Event Log
-
-=back
-
-=item AUTHORS & ACKNOWLEDGEMENTS
-
-=item BUGS
-
-=item SUPPORT
-
-AnnoCPAN: Annotated CPAN documentation, CPAN Ratings, RT: CPAN's request
-tracker, Search CPAN, Kobes' CPAN Search, Perl Documentation
-
-=item COPYRIGHT
-
-=item LICENSE
-
-=back
-
-=head2 Syslog::win32::Win32, Sys::Syslog::Win32 - Win32 support for
-Sys::Syslog
-
-=over 4
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item LICENSE
-
-=back
-
-=head2 Term::ANSIColor - Color screen output using ANSI escape sequences
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item DIAGNOSTICS
-
-Bad escape sequence %s, Bareword "%s" not allowed while "strict subs" in
-use, Invalid attribute name %s, Name "%s" used only once: possible typo, No
-comma allowed after filehandle, No name for escape sequence %s
-
-=item ENVIRONMENT
-
-ANSI_COLORS_DISABLED
-
-=item RESTRICTIONS
-
-=item NOTES
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 Term::Cap - Perl termcap interface
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item METHODS
-
-=back
-
-=back
-
-B<Tgetent>, OSPEED, TERM
-
-B<Tpad>, B<$string>, B<$cnt>, B<$FH>
-
-B<Tputs>, B<$cap>, B<$cnt>, B<$FH>
-
-B<Tgoto>, B<$cap>, B<$col>, B<$row>, B<$FH>
-
-B<Trequire>
-
-=over 4
-
-=item EXAMPLES
-
-=item COPYRIGHT AND LICENSE
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Term::Complete - Perl word completion module
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-E<lt>tabE<gt>, ^D, ^U, E<lt>delE<gt>, E<lt>bsE<gt>
-
-=item DIAGNOSTICS
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 Term::ReadLine - Perl interface to various C<readline> packages.
-If no real package is found, substitutes stubs instead of basic functions.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Minimal set of supported functions
-
-C<ReadLine>, C<new>, C<readline>, C<addhistory>, C<IN>, C<OUT>, C<MinLine>,
-C<findConsole>, Attribs, C<Features>
-
-=item Additional supported functions
-
-C<tkRunning>, C<ornaments>, C<newTTY>
-
-=item EXPORTS
-
-=item ENVIRONMENT
-
-=item CAVEATS
-
-=back
-
-=head2 Term::UI - Term::ReadLine UI made easy
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item HOW IT WORKS
-
-=item METHODS
-
-=over 4
-
-=item $reply = $term->get_reply( prompt => 'question?', [choices => \@list,
-default => $list[0], multi => BOOL, print_me => "extra text to print &
-record", allow => $ref] );
-
-=back
-
-=back
-
-=over 4
-
-=item $bool = $term->ask_yn( prompt => "your question", [default =>
-(y|1,n|0), print_me => "extra text to print & record"] )
-
-=back
-
-=over 4
-
-=item ($opts, $munged) = $term->parse_options( STRING );
-
-=back
-
-=over 4
-
-=item $str = $term->history_as_string
-
-=back
-
-=over 4
-
-=item GLOBAL VARIABLES
-
-=over 4
-
-=item $Term::UI::VERBOSE
-
-=item $Term::UI::AUTOREPLY
-
-=item $Term::UI::INVALID
-
-=item $Term::UI::History::HISTORY_FH
-
-=back
-
-=item EXAMPLES
-
-=over 4
-
-=item Basic get_reply sample
-
-=item get_reply with choices
-
-=item get_reply with choices and default
-
-=item get_reply using print_me & multi
-
-=item get_reply & allow
-
-=item an elaborate ask_yn sample
-
-=back
-
-=item See Also
-
-=item BUG REPORTS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Term::UI::History
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FUNCTIONS
-
-=over 4
-
-=item history("message string" [,VERBOSE])
-
-=back
-
-=back
-
-=over 4
-
-=item GLOBAL VARIABLES
-
-$HISTORY_FH
-
-=item See Also
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Test - provides a simple framework for writing test scripts
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item QUICK START GUIDE
-
-=over 4
-
-=item Functions
-
-C<plan(...)>, C<tests =E<gt> I<number>>, C<todo =E<gt> [I<1,5,14>]>,
-C<onfail =E<gt> sub { ... }>, C<onfail =E<gt> \&some_sub>
-
-=back
-
-=back
-
-B<_to_value>
-
-C<ok(...)>
-
-C<skip(I<skip_if_true>, I<args...>)>
-
-=over 4
-
-=item TEST TYPES
-
-NORMAL TESTS, SKIPPED TESTS, TODO TESTS
-
-=item ONFAIL
-
-=item BUGS and CAVEATS
-
-=item ENVIRONMENT
-
-=item NOTE
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Test::Builder - Backend for building test libraries
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Construction
-
-B<new>
-
-=back
-
-=back
-
-B<create>
-
-B<reset>
-
-=over 4
-
-=item Setting up tests
-
-B<exported_to>
-
-=back
-
-B<plan>
-
-B<expected_tests>
-
-B<no_plan>
-
-B<has_plan>
-
-B<skip_all>
-
-=over 4
-
-=item Running tests
-
-B<ok>
-
-=back
-
-B<is_eq>, B<is_num>
-
-B<isnt_eq>, B<isnt_num>
-
-B<like>, B<unlike>
-
-B<cmp_ok>
-
-=over 4
-
-=item Other Testing Methods
-
-B<BAIL_OUT>
-
-=back
-
-B<skip>
-
-B<todo_skip>
-
-B<skip_rest>
-
-=over 4
-
-=item Test building utility methods
-
-B<maybe_regex>
-
-=back
-
-B<_try>
-
-B<is_fh>
-
-=over 4
-
-=item Test style
-
-B<level>
-
-=back
-
-B<use_numbers>
-
-B<no_diag>, B<no_ending>, B<no_header>
-
-=over 4
-
-=item Output
-
-B<diag>
-
-=back
-
-B<_print>
-
-B<_print_diag>
-
-B<output>, B<failure_output>, B<todo_output>
-
-carp, croak
-
-=over 4
-
-=item Test Status and Info
-
-B<current_test>
-
-=back
-
-B<summary>
-
-B<details>
-
-B<todo>
-
-B<caller>
-
-B<_sanity_check>
-
-B<_whoa>
-
-B<_my_exit>
-
-=over 4
-
-=item EXIT CODES
-
-=item THREADS
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=back
-
-=head2 Test::Builder::Module - Base class for test modules
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Importing
-
-=back
-
-=back
-
-=over 4
-
-=item Builder
-
-=back
-
-=head2 Test::Builder::Tester - test testsuites that have been built with
-Test::Builder
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item Functions
-
-test_out, test_err
-
-=back
-
-test_fail
-
-test_diag
-
-test_test, title (synonym 'name', 'label'), skip_out, skip_err
-
-line_num
-
-color
-
-=over 4
-
-=item BUGS
-
-=item AUTHOR
-
-=item NOTES
-
-=item SEE ALSO
-
-=back
-
-=head2 Test::Builder::Tester::Color - turn on colour in
-Test::Builder::Tester
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item AUTHOR
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 Test::Harness - Run Perl standard test scripts with statistics
-
-=over 4
-
-=item VERSION
-
-=back
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Taint mode
-
-=item Configuration variables.
-
-C<$Test::Harness::Verbose>, C<$Test::Harness::switches>,
-C<$Test::Harness::Timer>
-
-=item Failure
-
-B<Failed Test>, B<Stat>, B<Wstat>, B<Total>, B<Fail>, B<List of Failed>
-
-=back
-
-=item FUNCTIONS
-
-=over 4
-
-=item runtests( @test_files )
-
-=back
-
-=back
-
-=over 4
-
-=item execute_tests( tests => \@test_files, out => \*FH )
-
-=back
-
-=over 4
-
-=item EXPORT
-
-=item DIAGNOSTICS
-
-C<All tests successful.\nFiles=%d, Tests=%d, %s>, C<FAILED tests
-%s\n\tFailed %d/%d tests, %.2f%% okay.>, C<Test returned status %d (wstat
-%d)>, C<Failed 1 test, %.2f%% okay. %s>, C<Failed %d/%d tests, %.2f%% okay.
-%s>, C<FAILED--Further testing stopped: %s>
-
-=item ENVIRONMENT VARIABLES THAT TEST::HARNESS SETS
-
-C<HARNESS_ACTIVE>, C<HARNESS_VERSION>
-
-=item ENVIRONMENT VARIABLES THAT AFFECT TEST::HARNESS
-
-C<HARNESS_COLUMNS>, C<HARNESS_COMPILE_TEST>, C<HARNESS_DEBUG>,
-C<HARNESS_FILELEAK_IN_DIR>, C<HARNESS_NOTTY>, C<HARNESS_PERL>,
-C<HARNESS_PERL_SWITCHES>, C<HARNESS_TIMER>, C<HARNESS_VERBOSE>,
-C<HARNESS_STRAP_CLASS>
-
-=item EXAMPLE
-
-=item SEE ALSO
-
-=item TODO
-
-=item BUGS
-
-=item SUPPORT
-
-AnnoCPAN: Annotated CPAN documentation, CPAN Ratings, RT: CPAN's request
-tracker, Search CPAN
-
-=item SOURCE CODE
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=back
-
-=head2 Test::Harness::Assert - simple assert
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FUNCTIONS
-
-=over 4
-
-=item C<assert()>
-
-=back
-
-=back
-
-=over 4
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Test::Harness::Iterator - Internal Test::Harness Iterator
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item new()
-
-=item next()
-
-=back
-
-=back
-
-=head2 Test::Harness::Point - object for tracking a single test point
-
-=over 4
-
-=item SYNOPSIS
-
-=item CONSTRUCTION
-
-=over 4
-
-=item new()
-
-=back
-
-=back
-
-=over 4
-
-=item from_test_line( $line )
-
-=back
-
-=over 4
-
-=item ACCESSORS
-
-ok, number
-
-=back
-
-=head2 Test::Harness::Results - object for tracking results from a single
-test file
-
-=over 4
-
-=item SYNOPSIS
-
-=item CONSTRUCTION
-
-=over 4
-
-=item new()
-
-=back
-
-=back
-
-=over 4
-
-=item ACCESSORS
-
-wait, exit
-
-=back
-
-=head2 Test::Harness::Straps - detailed analysis of test results
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTION
-
-=over 4
-
-=item new()
-
-=back
-
-=back
-
-=over 4
-
-=item ANALYSIS
-
-=over 4
-
-=item $strap->analyze( $name, \@output_lines )
-
-=back
-
-=back
-
-=over 4
-
-=item $strap->analyze_file( $test_file )
-
-=back
-
-=over 4
-
-=item Parsing
-
-=back
-
-=over 4
-
-=item EXAMPLES
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Test::Harness::TAP - Documentation for the TAP format
-
-=over 4
-
-=item SYNOPSIS
-
-=item TODO
-
-=item THE TAP FORMAT
-
-=item HARNESS BEHAVIOR
-
-=item TESTS LINES AND THE PLAN
-
-=over 4
-
-=item The plan
-
-=item The test line
-
-C<ok> or C<not ok>, Test number, Description, Directive, ok/not ok
-(required), Test number (recommended), Description (recommended), Directive
-(only when necessary)
-
-=back
-
-=item DIRECTIVES
-
-=over 4
-
-=item TODO tests
-
-=item Skipping tests
-
-=back
-
-=item OTHER LINES
-
-=over 4
-
-=item Bail out!
-
-=item Diagnostics
-
-=item Anything else
-
-=back
-
-=item EXAMPLES
-
-=over 4
-
-=item Common with explanation
-
-=item Unknown amount and failures
-
-=item Giving up
-
-=item Skipping a few
-
-=item Skipping everything
-
-=item Got spare tuits?
-
-=item Creative liberties
-
-=back
-
-=item Non-Perl TAP
-
-=over 4
-
-=item C/C++
-
-Specify a test plan, Run tests, Skip tests in certain situations, Have TODO
-tests, Produce TAP compatible diagnostics
-
-=item Python
-
-=item JavaScript
-
-=item PHP
-
-phpt, PHPUnit, SimpleTest, Apache-Test
-
-=back
-
-=item AUTHORS
-
-=item ACKNOWLEDGEMENTS
-
-=item COPYRIGHT
-
-=back
-
-=head2 Test::Harness::Util - Utility functions for Test::Harness::*
-
-=over 4
-
-=item SYNOPSIS
-
-=item PUBLIC FUNCTIONS
-
-=over 4
-
-=item all_in( {parm => value, parm => value} )
-
-start, recurse
-
-=back
-
-=back
-
-=over 4
-
-=item shuffle( @list )
-
-=back
-
-=over 4
-
-=item blibdir()
-
-=back
-
-=head2 Test::More - yet another framework for writing test scripts
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item I love it when a plan comes together
-
-=back
-
-=back
-
-=over 4
-
-=item Test names
-
-=item I'm ok, you're not ok.
-
-B<ok>
-
-=back
-
-B<is>, B<isnt>
-
-B<like>
-
-B<unlike>
-
-B<cmp_ok>
-
-B<can_ok>
-
-B<isa_ok>
-
-B<pass>, B<fail>
-
-=over 4
-
-=item Module tests
-
-B<use_ok>
-
-=back
-
-B<require_ok>
-
-=over 4
-
-=item Complex data structures
-
-B<is_deeply>
-
-=back
-
-=over 4
-
-=item Diagnostics
-
-B<diag>
-
-=back
-
-=over 4
-
-=item Conditional tests
-
-B<SKIP: BLOCK>
-
-=back
-
-B<TODO: BLOCK>, B<todo_skip>
-
-When do I use SKIP vs. TODO?
-
-=over 4
-
-=item Test control
-
-B<BAIL_OUT>
-
-=back
-
-=over 4
-
-=item Discouraged comparison functions
-
-B<eq_array>
-
-=back
-
-B<eq_hash>
-
-B<eq_set>
-
-=over 4
-
-=item Extending and Embedding Test::More
-
-B<builder>
-
-=back
-
-=over 4
-
-=item EXIT CODES
-
-=item CAVEATS and NOTES
-
-Backwards compatibility, Overloaded objects, Threads, Test::Harness upgrade
-
-=item HISTORY
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item BUGS
-
-=item COPYRIGHT
-
-=back
-
-=head2 Test::Simple - Basic utilities for writing tests.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-B<ok>
-
-=back
-
-=over 4
-
-=item EXAMPLE
-
-=item CAVEATS
-
-=item NOTES
-
-=item HISTORY
-
-=item SEE ALSO
-
-L<Test::More>, L<Test>, L<Test::Unit>, L<Test::Inline>, L<SelfTest>,
-L<Test::Harness>
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=back
-
-=head2 Test::Tutorial - A tutorial about writing really basic tests
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Nuts and bolts of testing.
-
-=item Where to start?
-
-=item Names
-
-=item Test the manual
-
-=item Sometimes the tests are wrong
-
-=item Testing lots of values
-
-=item Informative names
-
-=item Skipping tests
-
-=item Todo tests
-
-=item Testing with taint mode.
-
-=back
-
-=item FOOTNOTES
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=back
-
-=head2 Text::Abbrev, abbrev - create an abbreviation table from a list
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLE
-
-=back
-
-=head2 Text::Balanced - Extract delimited text sequences from strings.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item General behaviour in list contexts
-
-[0], [1], [2]
-
-=item General behaviour in scalar and void contexts
-
-=item A note about prefixes
-
-=item C<extract_delimited>
-
-=item C<extract_bracketed>
-
-=item C<extract_variable>
-
-[0], [1], [2]
-
-=item C<extract_tagged>
-
-C<reject =E<gt> $listref>, C<ignore =E<gt> $listref>, C<fail =E<gt> $str>,
-[0], [1], [2], [3], [4], [5]
-
-=item C<gen_extract_tagged>
-
-=item C<extract_quotelike>
-
-[0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10]
-
-=item C<extract_quotelike> and "here documents"
-
-[0], [1], [2], [3], [4], [5], [6], [7..10]
-
-=item C<extract_codeblock>
-
-=item C<extract_multiple>
-
-=item C<gen_delimited_pat>
-
-=item C<delimited_pat>
-
-=back
-
-=item DIAGNOSTICS
-
- C<Did not find a suitable bracket: "%s">, C<Did not find prefix: /%s/>,
-C<Did not find opening bracket after prefix: "%s">, C<No quotelike
-operator found after prefix: "%s">, C<Unmatched closing bracket: "%c">,
-C<Unmatched opening bracket(s): "%s">, C<Unmatched embedded quote (%s)>,
-C<Did not find closing delimiter to match '%s'>, C<Mismatched closing
-bracket: expected "%c" but found "%s">, C<No block delimiter found after
-quotelike "%s">, C<Did not find leading dereferencer>, C<Bad identifier
-after dereferencer>, C<Did not find expected opening bracket at %s>,
-C<Improperly nested codeblock at %s>, C<Missing second block for quotelike
-"%s">, C<No match found for opening bracket>, C<Did not find opening tag:
-/%s/>, C<Unable to construct closing tag to match: /%s/>, C<Found invalid
-nested tag: %s>, C<Found unbalanced nested tag: %s>, C<Did not find closing
-tag>
-
-=item AUTHOR
-
-=item BUGS AND IRRITATIONS
-
-=item COPYRIGHT
-
-=back
-
-=head2 Text::ParseWords - parse text into an array of tokens or array of
-arrays
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLES
-
-=item AUTHORS
-
-=back
-
-=head2 Text::Soundex - Implementation of the soundex algorithm.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLES
-
-=item LIMITATIONS
-
-=item MAINTAINER
-
-=item HISTORY
-
-=back
-
-=head2 Text::Tabs -- expand and unexpand tabs per the unix expand(1) and
-unexpand(1)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLE
-
-=item LICENSE
-
-=back
-
-=head2 Text::Wrap - line wrapping to form simple paragraphs
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OVERRIDES
-
-=item EXAMPLES
-
-=item LICENSE
-
-=back
-
-=head2 Thread - Manipulate threads in Perl (for old code only)
-
-=over 4
-
-=item DEPRECATED
-
-=item HISTORY
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FUNCTIONS
-
-$thread = Thread->new(\&start_sub), $thread = Thread->new(\&start_sub,
-LIST), lock VARIABLE, async BLOCK;, Thread->self, Thread->list, cond_wait
-VARIABLE, cond_signal VARIABLE, cond_broadcast VARIABLE, yield
-
-=item METHODS
-
-join, detach, equal, tid, done
-
-=item DEFUNCT
-
-lock(\&sub), eval, flags
-
-=item SEE ALSO
-
-=back
-
-=head2 Thread::Queue - thread-safe queues
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FUNCTIONS AND METHODS
-
-new, enqueue LIST, dequeue, dequeue_nb, pending
-
-=item SEE ALSO
-
-=back
-
-=head2 Thread::Semaphore - thread-safe semaphores
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FUNCTIONS AND METHODS
-
-new, new NUMBER, down, down NUMBER, up, up NUMBER
-
-=back
-
-=head2 Tie::Array - base class for tied arrays
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-TIEARRAY classname, LIST, STORE this, index, value, FETCH this, index,
-FETCHSIZE this, STORESIZE this, count, EXTEND this, count, EXISTS this,
-key, DELETE this, key, CLEAR this, DESTROY this, PUSH this, LIST, POP this,
-SHIFT this, UNSHIFT this, LIST, SPLICE this, offset, length, LIST
-
-=item CAVEATS
-
-=item AUTHOR
-
-=back
-
-=head2 Tie::File - Access the lines of a disk file via a Perl array
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item C<recsep>
-
-=item C<autochomp>
-
-=item C<mode>
-
-=item C<memory>
-
-=item C<dw_size>
-
-=item Option Format
-
-=back
-
-=item Public Methods
-
-=over 4
-
-=item C<flock>
-
-=item C<autochomp>
-
-=item C<defer>, C<flush>, C<discard>, and C<autodefer>
-
-=item C<offset>
-
-=back
-
-=item Tying to an already-opened filehandle
-
-=item Deferred Writing
-
-=over 4
-
-=item Autodeferring
-
-=back
-
-=item CONCURRENT ACCESS TO FILES
-
-=item CAVEATS
-
-=item SUBCLASSING
-
-=item WHAT ABOUT C<DB_File>?
-
-=item AUTHOR
-
-=item LICENSE
-
-=item WARRANTY
-
-=item THANKS
-
-=item TODO
-
-=back
-
-=head2 Tie::Handle - base class definitions for tied handles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-TIEHANDLE classname, LIST, WRITE this, scalar, length, offset, PRINT this,
-LIST, PRINTF this, format, LIST, READ this, scalar, length, offset,
-READLINE this, GETC this, CLOSE this, OPEN this, filename, BINMODE this,
-EOF this, TELL this, SEEK this, offset, whence, DESTROY this
-
-=item MORE INFORMATION
-
-=item COMPATIBILITY
-
-=back
-
-=head2 Tie::Hash, Tie::StdHash, Tie::ExtraHash - base class definitions for
-tied hashes
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-TIEHASH classname, LIST, STORE this, key, value, FETCH this, key, FIRSTKEY
-this, NEXTKEY this, lastkey, EXISTS this, key, DELETE this, key, CLEAR
-this, SCALAR this
-
-=item Inheriting from B<Tie::StdHash>
-
-=item Inheriting from B<Tie::ExtraHash>
-
-=item C<SCALAR>, C<UNTIE> and C<DESTROY>
-
-=item MORE INFORMATION
-
-=back
-
-=head2 Tie::Hash::NamedCapture - Named regexp capture buffers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=back
-
-=head2 Tie::Memoize - add data to hash when needed
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Inheriting from B<Tie::Memoize>
-
-=item EXAMPLE
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 Tie::RefHash - use references as hash keys
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLE
-
-=item THREAD SUPPORT
-
-=item STORABLE SUPPORT
-
-=item RELIC SUPPORT
-
-=item MAINTAINER
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Tie::Scalar, Tie::StdScalar - base class definitions for tied
-scalars
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-TIESCALAR classname, LIST, FETCH this, STORE this, value, DESTROY this
-
-=item MORE INFORMATION
-
-=back
-
-=head2 Tie::SubstrHash - Fixed-table-size, fixed-key-length hashing
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CAVEATS
-
-=back
-
-=head2 Time::HiRes - High resolution alarm, sleep, gettimeofday, interval
-timers
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-gettimeofday (), usleep ( $useconds ), nanosleep ( $nanoseconds ), ualarm (
-$useconds [, $interval_useconds ] ), tv_interval, time (), sleep (
-$floating_seconds ), alarm ( $floating_seconds [,
-$interval_floating_seconds ] ), setitimer ( $which, $floating_seconds [,
-$interval_floating_seconds ] ), getitimer ( $which ), clock_gettime (
-$which ), clock_getres ( $which ), clock_nanosleep ( $which, $nanoseconds,
-$flags = 0), clock(), stat, stat FH, stat EXPR
-
-=item EXAMPLES
-
-=item C API
-
-=item DIAGNOSTICS
-
-=over 4
-
-=item useconds or interval more than ...
-
-=item negative time not invented yet
-
-=item internal error: useconds < 0 (unsigned ... signed ...)
-
-=back
-
-=item CAVEATS
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 Time::Local - efficiently compute time from local and GMT time
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FUNCTIONS
-
-=over 4
-
-=item C<timelocal()> and C<timegm()>
-
-=item C<timelocal_nocheck()> and C<timegm_nocheck()>
-
-=item Year Value Interpretation
-
-=item Limits of time_t
-
-=item Ambiguous Local Times (DST)
-
-=item Non-Existent Local Times (DST)
-
-=item Negative Epoch Values
-
-=back
-
-=item IMPLEMENTATION
-
-=item BUGS
-
-=item SUPPORT
-
-=item COPYRIGHT
-
-=item AUTHOR
-
-=back
-
-=head2 Time::Piece - Object Oriented time objects
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item USAGE
-
-=over 4
-
-=item Local Locales
-
-=item Date Calculations
-
-=item Date Comparisons
-
-=item Date Parsing
-
-=item YYYY-MM-DDThh:mm:ss
-
-=item Week Number
-
-=item Global Overriding
-
-=back
-
-=item AUTHOR
-
-=item License
-
-=item SEE ALSO
-
-=item BUGS
-
-=back
-
-=head2 Time::Piece::Seconds, Time::Seconds - a simple API to convert
-seconds to other date values
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=item AUTHOR
-
-=item LICENSE
-
-=item Bugs
-
-=back
-
-=head2 Time::Seconds - a simple API to convert seconds to other date values
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=item AUTHOR
-
-=item LICENSE
-
-=item Bugs
-
-=back
-
-=head2 Time::gmtime - by-name interface to Perl's built-in gmtime()
-function
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTE
-
-=item AUTHOR
-
-=back
-
-=head2 Time::localtime - by-name interface to Perl's built-in localtime()
-function
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTE
-
-=item AUTHOR
-
-=back
-
-=head2 Time::tm - internal object used by Time::gmtime and Time::localtime
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=back
-
-=head2 UNIVERSAL - base class for ALL classes (blessed references)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-C<< $obj->isa( TYPE ) >>, C<< CLASS->isa( TYPE ) >>, C<< eval { VAL->isa(
-TYPE ) } >>, C<TYPE>, C<$obj>, C<CLASS>, C<VAL>, C<< $obj->DOES( ROLE ) >>,
-C<< CLASS->DOES( ROLE ) >>, C<< $obj->can( METHOD ) >>, C<< CLASS->can(
-METHOD ) >>, C<< eval { VAL->can( METHOD ) } >>, C<VERSION ( [ REQUIRE ] )>
-
-=item EXPORTS
-
-=back
-
-=head2 Unicode::Collate - Unicode Collation Algorithm
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Constructor and Tailoring
-
-UCA_Version, alternate, backwards, entry, hangul_terminator, ignoreChar,
-ignoreName, katakana_before_hiragana, level, normalization, overrideCJK,
-overrideHangul, preprocess, rearrange, table, undefChar, undefName,
-upper_before_lower, variable
-
-=item Methods for Collation
-
-C<@sorted = $Collator-E<gt>sort(@not_sorted)>, C<$result =
-$Collator-E<gt>cmp($a, $b)>, C<$result = $Collator-E<gt>eq($a, $b)>,
-C<$result = $Collator-E<gt>ne($a, $b)>, C<$result = $Collator-E<gt>lt($a,
-$b)>, C<$result = $Collator-E<gt>le($a, $b)>, C<$result =
-$Collator-E<gt>gt($a, $b)>, C<$result = $Collator-E<gt>ge($a, $b)>,
-C<$sortKey = $Collator-E<gt>getSortKey($string)>, C<$sortKeyForm =
-$Collator-E<gt>viewSortKey($string)>
-
-=item Methods for Searching
-
-C<$position = $Collator-E<gt>index($string, $substring[, $position])>,
-C<($position, $length) = $Collator-E<gt>index($string, $substring[,
-$position])>, C<$match_ref = $Collator-E<gt>match($string, $substring)>,
-C<($match) = $Collator-E<gt>match($string, $substring)>, C<@match =
-$Collator-E<gt>gmatch($string, $substring)>, C<$count =
-$Collator-E<gt>subst($string, $substring, $replacement)>, C<$count =
-$Collator-E<gt>gsubst($string, $substring, $replacement)>
-
-=item Other Methods
-
-C<%old_tailoring = $Collator-E<gt>change(%new_tailoring)>, C<$version =
-$Collator-E<gt>version()>, C<UCA_Version()>, C<Base_Unicode_Version()>
-
-=back
-
-=item EXPORT
-
-=item INSTALL
-
-=item CAVEATS
-
-Normalization, Conformance Test
-
-=item AUTHOR, COPYRIGHT AND LICENSE
-
-=item SEE ALSO
-
-Unicode Collation Algorithm - UTS #10, The Default Unicode Collation
-Element Table (DUCET), The conformance test for the UCA, Hangul Syllable
-Type, Unicode Normalization Forms - UAX #15
-
-=back
-
-=head2 Unicode::Normalize - Unicode Normalization Forms
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Normalization Forms
-
-C<$NFD_string = NFD($string)>, C<$NFC_string = NFC($string)>,
-C<$NFKD_string = NFKD($string)>, C<$NFKC_string = NFKC($string)>,
-C<$FCD_string = FCD($string)>, C<$FCC_string = FCC($string)>,
-C<$normalized_string = normalize($form_name, $string)>
-
-=item Decomposition and Composition
-
-C<$decomposed_string = decompose($string [, $useCompatMapping])>,
-C<$reordered_string = reorder($string)>, C<$composed_string =
-compose($string)>
-
-=item Quick Check
-
-C<$result = checkNFD($string)>, C<$result = checkNFC($string)>, C<$result =
-checkNFKD($string)>, C<$result = checkNFKC($string)>, C<$result =
-checkFCD($string)>, C<$result = checkFCC($string)>, C<$result =
-check($form_name, $string)>
-
-=item Character Data
-
-C<$canonical_decomposition = getCanon($code_point)>,
-C<$compatibility_decomposition = getCompat($code_point)>,
-C<$code_point_composite = getComposite($code_point_here,
-$code_point_next)>, C<$combining_class = getCombinClass($code_point)>,
-C<$may_be_composed_with_prev_char = isComp2nd($code_point)>,
-C<$is_exclusion = isExclusion($code_point)>, C<$is_singleton =
-isSingleton($code_point)>, C<$is_non_starter_decomposition =
-isNonStDecomp($code_point)>, C<$is_Full_Composition_Exclusion =
-isComp_Ex($code_point)>, C<$NFD_is_NO = isNFD_NO($code_point)>,
-C<$NFC_is_NO = isNFC_NO($code_point)>, C<$NFC_is_MAYBE =
-isNFC_MAYBE($code_point)>, C<$NFKD_is_NO = isNFKD_NO($code_point)>,
-C<$NFKC_is_NO = isNFKC_NO($code_point)>, C<$NFKC_is_MAYBE =
-isNFKC_MAYBE($code_point)>
-
-=back
-
-=item EXPORT
-
-=item CAVEATS
-
-Perl's version vs. Unicode version, Correction of decomposition mapping,
-Revised definition of canonical composition
-
-=item AUTHOR
-
-=item SEE ALSO
-
-http://www.unicode.org/reports/tr15/,
-http://www.unicode.org/Public/UNIDATA/CompositionExclusions.txt,
-http://www.unicode.org/Public/UNIDATA/DerivedNormalizationProps.txt,
-http://www.unicode.org/Public/UNIDATA/NormalizationCorrections.txt,
-http://www.unicode.org/review/pr-29.html, http://www.unicode.org/notes/tn5/
-
-=back
-
-=head2 Unicode::UCD - Unicode character database
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item charinfo
-
-=back
-
-=over 4
-
-=item charblock
-
-=back
-
-=over 4
-
-=item charscript
-
-=back
-
-=over 4
-
-=item charblocks
-
-=back
-
-=over 4
-
-=item charscripts
-
-=back
-
-=over 4
-
-=item Blocks versus Scripts
-
-=item Matching Scripts and Blocks
-
-=item Code Point Arguments
-
-=item charinrange
-
-=back
-
-=over 4
-
-=item general_categories
-
-=back
-
-=over 4
-
-=item bidi_types
-
-=back
-
-=over 4
-
-=item compexcl
-
-=back
-
-=over 4
-
-=item casefold
-
-=back
-
-=over 4
-
-=item casespec
-
-=back
-
-=over 4
-
-=item namedseq()
-
-=back
-
-=over 4
-
-=item Unicode::UCD::UnicodeVersion
-
-=back
-
-=over 4
-
-=item Implementation Note
-
-=back
-
-=over 4
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 User::grent - by-name interface to Perl's built-in getgr*()
-functions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTE
-
-=item AUTHOR
-
-=back
-
-=head2 User::pwent - by-name interface to Perl's built-in getpw*()
-functions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item System Specifics
-
-=back
-
-=item NOTE
-
-=item AUTHOR
-
-=item HISTORY
-
-March 18th, 2000
-
-=back
-
-=head2 Win32 - Interfaces to some Win32 API Functions
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Alphabetical Listing of Win32 Functions
-
-Win32::AbortSystemShutdown(MACHINE), Win32::BuildNumber(),
-Win32::CopyFile(FROM, TO, OVERWRITE), Win32::CreateDirectory(DIRECTORY),
-Win32::CreateFile(FILE), Win32::DomainName(),
-Win32::ExpandEnvironmentStrings(STRING), Win32::FormatMessage(ERRORCODE),
-Win32::FsType(), Win32::FreeLibrary(HANDLE),
-Win32::GetANSIPathName(FILENAME), Win32::GetArchName(),
-Win32::GetChipName(), Win32::GetCwd(), Win32::GetCurrentThreadId(),
-Win32::GetFileVersion(FILENAME), Win32::GetFolderPath(FOLDER [, CREATE]),
-Win32::GetFullPathName(FILENAME), Win32::GetLastError(),
-Win32::GetLongPathName(PATHNAME), Win32::GetNextAvailDrive(),
-Win32::GetOSVersion(), Win32::GetOSName(),
-Win32::GetShortPathName(PATHNAME), Win32::GetProcAddress(INSTANCE,
-PROCNAME), Win32::GetTickCount(), Win32::GuidGen(), Win32::IsAdminUser(),
-Win32::IsWinNT(), Win32::IsWin95(), Win32::LoadLibrary(LIBNAME),
-Win32::LoginName(), Win32::LookupAccountName(SYSTEM, ACCOUNT, DOMAIN, SID,
-SIDTYPE), Win32::LookupAccountSID(SYSTEM, SID, ACCOUNT, DOMAIN, SIDTYPE),
-Win32::MsgBox(MESSAGE [, FLAGS [, TITLE]]), Win32::NodeName(),
-Win32::OutputDebugString(STRING), Win32::RegisterServer(LIBRARYNAME),
-Win32::SetChildShowWindow(SHOWWINDOW), Win32::SetCwd(NEWDIRECTORY),
-Win32::SetLastError(ERROR), Win32::Sleep(TIME), Win32::Spawn(COMMAND, ARGS,
-PID), Win32::UnregisterServer(LIBRARYNAME)
-
-=back
-
-=back
-
-=head2 Win32API::File - Low-level access to Win32 system API calls for
-files/dirs.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Object Oriented/Tied Handle Interface
-
-=item Exports
-
-C<":Func">, attrLetsToBits, C<$uBits= attrLetsToBits( $sAttributeLetters
-)>, C<"a">, C<"c">, C<"h">, C<"o">, C<"r">, C<"s">, C<"t">, createFile,
-C<$hObject= createFile( $sPath )>, C<$hObject= createFile( $sPath,
-$rvhvOptions )>, C<$hObject= createFile( $sPath, $svAccess )>, C<$hObject=
-createFile( $sPath, $svAccess, $rvhvOptions )>, C<$hObject= createFile(
-$sPath, $svAccess, $svShare )>, C<$hObject= createFile( $sPath, $svAccess,
-$svShare, $rvhvOptions )>, C<"q">, C<"r">, C<"w">, C<"k">, C<"t">, C<"n">,
-C<"c">, C<"e">, C<"kc">, C<"ke">, C<"tc">, C<"te">, C<"nc">, C<"ne">, Flags
-=> $uFlags, Attributes => $sAttributes, Security => $pSecurityAttributes,
-Model => $hModelFile, Access => $sAccess, Access => $uAccess, Create =>
-$sCreate, Create => $uCreate, Share => $sShare, Share => $uShare,
-getLogicalDrives, C<@roots= getLogicalDrives()>, CloseHandle,
-C<CloseHandle( $hObject )>, CopyFile, C<CopyFile( $sOldFileName,
-$sNewFileName, $bFailIfExists )>, CreateFile, C<$hObject= CreateFile(
-$sPath, $uAccess, $uShare, $pSecAttr, $uCreate, $uFlags, $hModel )>,
-C<"//./PhysicalDrive0">, C<"//./C:">, C<"//./A:">, C<"//./PIPE/PipeName">,
-DefineDosDevice, C<DefineDosDevice( $uFlags, $sDosDeviceName, $sTargetPath
-)>, C<DDD_RAW_TARGET_PATH>, C<DDD_REMOVE_DEFINITION>,
-C<DDD_EXACT_MATCH_ON_REMOVE>, DeleteFile, C<DeleteFile( $sFileName )>,
-DeviceIoControl, C<DeviceIoControl( $hDevice, $uIoControlCode, $pInBuf,
-$lInBuf, $opOutBuf, $lOutBuf, $olRetBytes, $pOverlapped )>, FdGetOsFHandle,
-C<$hNativeHandle= FdGetOsFHandle( $ivFd )>, fileConstant, C<$value=
-fileConstant( $sConstantName )>, fileLastError, C<$svError=
-fileLastError();>, C<fileLastError( $uError );>, GetDriveType,
-C<$uDriveType= GetDriveType( $sRootPath )>, C<DRIVE_UNKNOWN>,
-C<DRIVE_NO_ROOT_DIR>, C<DRIVE_REMOVABLE>, C<DRIVE_FIXED>, C<DRIVE_REMOTE>,
-C<DRIVE_CDROM>, C<DRIVE_RAMDISK>, GetFileAttributes, C<$uAttrs =
-GetFileAttributes( $sPath )>, C<FILE_ATTRIBUTE_ARCHIVE>,
-C<FILE_ATTRIBUTE_COMPRESSED>, C<FILE_ATTRIBUTE_DEVICE>,
-C<FILE_ATTRIBUTE_DIRECTORY>, C<FILE_ATTRIBUTE_ENCRYPTED>,
-C<FILE_ATTRIBUTE_HIDDEN>, C<FILE_ATTRIBUTE_NORMAL>,
-C<FILE_ATTRIBUTE_NOT_CONTENT_INDEXED>, C<FILE_ATTRIBUTE_OFFLINE>,
-C<FILE_ATTRIBUTE_READONLY>, C<FILE_ATTRIBUTE_REPARSE_POINT>,
-C<FILE_ATTRIBUTE_SPARSE_FILE>, C<FILE_ATTRIBUTE_SYSTEM>,
-C<FILE_ATTRIBUTE_TEMPORARY>, GetFileType, C<$uFileType= GetFileType( $hFile
-)>, C<FILE_TYPE_UNKNOWN>, C<FILE_TYPE_DISK>, C<FILE_TYPE_CHAR>,
-C<FILE_TYPE_PIPE>, getFileSize, C<$size= getFileSize( $hFile )>,
-GetFileSize, C<$iSizeLow= GetFileSize($win32Handle, $iSizeHigh)>,
-GetOverlappedResult, C<$bRetval= GetOverlappedResult( $win32Handle,
-$pOverlapped, $numBytesTransferred, $bWait )>, GetLogicalDrives,
-C<$uDriveBits= GetLogicalDrives()>, GetLogicalDriveStrings, C<$olOutLength=
-GetLogicalDriveStrings( $lBufSize, $osBuffer )>, GetHandleInformation,
-C<GetHandleInformation( $hObject, $ouFlags )>, GetOsFHandle,
-C<$hNativeHandle= GetOsFHandle( FILE )>, GetVolumeInformation,
-C<GetVolumeInformation( $sRootPath, $osVolName, $lVolName, $ouSerialNum,
-$ouMaxNameLen, $ouFsFlags, $osFsType, $lFsType )>, C<FS_CASE_IS_PRESERVED>,
-C<FS_CASE_SENSITIVE>, C<FS_UNICODE_STORED_ON_DISK>, C<FS_PERSISTENT_ACLS>,
-C<FS_FILE_COMPRESSION>, C<FS_VOL_IS_COMPRESSED>, IsRecognizedPartition,
-C<IsRecognizedPartition( $ivPartitionType )>, IsContainerPartition,
-C<IsContainerPartition( $ivPartitionType )>, MoveFile, C<MoveFile(
-$sOldName, $sNewName )>, MoveFileEx, C<MoveFileEx( $sOldName, $sNewName,
-$uFlags )>, C<MOVEFILE_REPLACE_EXISTING>, C<MOVEFILE_COPY_ALLOWED>,
-C<MOVEFILE_DELAY_UNTIL_REBOOT>, C<MOVEFILE_WRITE_THROUGH>, OsFHandleOpen,
-C<OsFHandleOpen( FILE, $hNativeHandle, $sMode )>, OsFHandleOpenFd, C<$ivFD=
-OsFHandleOpenFd( $hNativeHandle, $uMode )>, QueryDosDevice, C<$olTargetLen=
-QueryDosDevice( $sDosDeviceName, $osTargetPath, $lTargetBuf )>, ReadFile,
-C<ReadFile( $hFile, $opBuffer, $lBytes, $olBytesRead, $pOverlapped )>,
-SetErrorMode, C<$uOldMode= SetErrorMode( $uNewMode )>,
-C<SEM_FAILCRITICALERRORS>, C<SEM_NOALIGNMENTFAULTEXCEPT>,
-C<SEM_NOGPFAULTERRORBOX>, C<SEM_NOOPENFILEERRORBOX>, setFilePointer,
-C<$uNewPos = setFilePointer( $hFile, $ivOffset, $uFromWhere )>,
-SetFilePointer, C<$uNewPos = SetFilePointer( $hFile, $ivOffset,
-$ioivOffsetHigh, $uFromWhere )>, SetHandleInformation,
-C<SetHandleInformation( $hObject, $uMask, $uFlags )>, WriteFile,
-C<WriteFile( $hFile, $pBuffer, $lBytes, $ouBytesWritten, $pOverlapped )>,
-C<":FuncA">, C<":FuncW">, CopyFileW, C<CopyFileW( $swOldFileName,
-$swNewFileName, $bFailIfExists )>, CreateFileW, C<$hObject= CreateFileW(
-$swPath, $uAccess, $uShare, $pSecAttr, $uCreate, $uFlags, $hModel )>,
-DefineDosDeviceW, C<DefineDosDeviceW( $uFlags, $swDosDeviceName,
-$swTargetPath )>, DeleteFileW, C<DeleteFileW( $swFileName )>,
-GetDriveTypeW, C<$uDriveType= GetDriveTypeW( $swRootPath )>,
-GetFileAttributesW, C<$uAttrs= GetFileAttributesW( $swPath )>,
-GetLogicalDriveStringsW, C<$olwOutLength= GetLogicalDriveStringsW(
-$lwBufSize, $oswBuffer )>, GetVolumeInformationW, C<GetVolumeInformationW(
-$swRootPath, $oswVolName, $lwVolName, $ouSerialNum, $ouMaxNameLen,
-$ouFsFlags, $oswFsType, $lwFsType )>, MoveFileW, C<MoveFileW( $swOldName,
-$swNewName )>, MoveFileExW, C<MoveFileExW( $swOldName, $swNewName, $uFlags
-)>, QueryDosDeviceW, C<$olwTargetLen= QueryDosDeviceW( $swDeviceName,
-$oswTargetPath, $lwTargetBuf )>, C<":Misc">, C<":DDD_">, C<":DRIVE_">,
-C<":FILE_">, C<":FILE_ATTRIBUTE_">, C<":FILE_FLAG_">, C<":FILE_SHARE_">,
-C<":FILE_TYPE_">, C<":FS_">, C<":HANDLE_FLAG_">, HANDLE_FLAG_INHERIT,
-HANDLE_FLAG_PROTECT_FROM_CLOSE, C<":IOCTL_STORAGE_">,
-C<IOCTL_STORAGE_CHECK_VERIFY>, C<IOCTL_STORAGE_MEDIA_REMOVAL>,
-C<IOCTL_STORAGE_EJECT_MEDIA>, C<IOCTL_STORAGE_LOAD_MEDIA>,
-C<IOCTL_STORAGE_RESERVE>, C<IOCTL_STORAGE_RELEASE>,
-C<IOCTL_STORAGE_FIND_NEW_DEVICES>, C<IOCTL_STORAGE_GET_MEDIA_TYPES>,
-C<$ucCylsLow[$i]>, C<$ivcCylsHigh[$i]>, C<$uMediaType[$i]>,
-C<$uTracksPerCyl[$i]>, C<$uSectsPerTrack[$i]>, C<$uBytesPerSect[$i]>,
-C<":IOCTL_DISK_">, C<IOCTL_DISK_GET_DRIVE_GEOMETRY>, C<$ucCylsLow>,
-C<$ivcCylsHigh>, C<$uMediaType>, C<$uTracksPerCyl>, C<$uSectsPerTrack>,
-C<$uBytesPerSect>, C<IOCTL_DISK_GET_PARTITION_INFO>, C<$uStartLow> and
-C<$ivStartHigh>, C<$ucHiddenSects>, C<$uPartitionSeqNumber>,
-C<$uPartitionType>, C<$bActive>, C<$bRecognized>, C<$bToRewrite>,
-C<IOCTL_DISK_SET_PARTITION_INFO>, C<IOCTL_DISK_GET_DRIVE_LAYOUT>,
-C<$cPartitions>, C<$uDiskSignature>, C<IOCTL_DISK_GET_MEDIA_TYPES>,
-C<IOCTL_DISK_SET_DRIVE_LAYOUT>, C<IOCTL_DISK_VERIFY>, C<$uStartOffsetLow>
-and C<$ivStartOffsetHigh>, C<$uLength>, C<IOCTL_DISK_FORMAT_TRACKS>,
-C<IOCTL_DISK_REASSIGN_BLOCKS>, C<IOCTL_DISK_PERFORMANCE>,
-C<IOCTL_DISK_IS_WRITABLE>, C<IOCTL_DISK_LOGGING>, DISK_LOGGING_START,
-DISK_LOGGING_STOP, DISK_LOGGING_DUMP, DISK_LOGGING_BINNING,
-C<IOCTL_DISK_FORMAT_TRACKS_EX>, C<IOCTL_DISK_HISTOGRAM_STRUCTURE>,
-C<IOCTL_DISK_HISTOGRAM_DATA>, C<IOCTL_DISK_HISTOGRAM_RESET>,
-C<IOCTL_DISK_REQUEST_STRUCTURE>, C<IOCTL_DISK_REQUEST_DATA>, C<":FSCTL_">,
-C<FSCTL_SET_REPARSE_POINT>, C<FSCTL_GET_REPARSE_POINT>,
-C<FSCTL_DELETE_REPARSE_POINT>, C<":GENERIC_">, C<":MEDIA_TYPE">,
-C<Unknown>, C<F5_1Pt2_512>, C<F3_1Pt44_512>, C<F3_2Pt88_512>,
-C<F3_20Pt8_512>, C<F3_720_512>, C<F5_360_512>, C<F5_320_512>,
-C<F5_320_1024>, C<F5_180_512>, C<F5_160_512>, C<RemovableMedia>,
-C<FixedMedia>, C<F3_120M_512>, C<":MOVEFILE_">, C<":SECURITY_">,
-C<":SEM_">, C<":PARTITION_">, C<":ALL">
-
-=back
-
-=item BUGS
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Win32CORE - Win32 CORE function stubs
-
-=over 4
-
-=item DESCRIPTION
-
-=item HISTORY
-
-=back
-
-=head2 XSLoader - Dynamically load C libraries into Perl code
-
-=over 4
-
-=item VERSION
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Migration from C<DynaLoader>
-
-=item Backward compatible boilerplate
-
-=back
-
-=item Order of initialization: early load()
-
-=over 4
-
-=item The most hairy case
-
-=back
-
-=item DIAGNOSTICS
-
-C<Can't find '%s' symbol in %s>, C<Can't load '%s' for module %s: %s>,
-C<Undefined symbols present after loading %s: %s>,
-C<XSLoader::load('Your::Module', $Your::Module::VERSION)>
-
-=item LIMITATIONS
-
-=item BUGS
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=back
-
-=head1 AUXILIARY DOCUMENTATION
-
-Here should be listed all the extra programs' documentation, but they
-don't all have manual pages yet:
-
-=over 4
-
-=item a2p
-
-=item c2ph
-
-=item dprofpp
-
-=item h2ph
-
-=item h2xs
-
-=item perlbug
-
-=item perldoc
-
-=item pl2pm
-
-=item pod2html
-
-=item pod2man
-
-=item s2p
-
-=item splain
-
-=item xsubpp
-
-=back
-
-=head1 AUTHOR
-
-Larry Wall <F<larry at wall.org>>, with the help of oodles
-of other folks.
-
Deleted: trunk/contrib/perl/pod/perlxs.pod
===================================================================
--- trunk/contrib/perl/pod/perlxs.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlxs.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,2142 +0,0 @@
-=head1 NAME
-
-perlxs - XS language reference manual
-
-=head1 DESCRIPTION
-
-=head2 Introduction
-
-XS is an interface description file format used to create an extension
-interface between Perl and C code (or a C library) which one wishes
-to use with Perl. The XS interface is combined with the library to
-create a new library which can then be either dynamically loaded
-or statically linked into perl. The XS interface description is
-written in the XS language and is the core component of the Perl
-extension interface.
-
-An B<XSUB> forms the basic unit of the XS interface. After compilation
-by the B<xsubpp> compiler, each XSUB amounts to a C function definition
-which will provide the glue between Perl calling conventions and C
-calling conventions.
-
-The glue code pulls the arguments from the Perl stack, converts these
-Perl values to the formats expected by a C function, call this C function,
-transfers the return values of the C function back to Perl.
-Return values here may be a conventional C return value or any C
-function arguments that may serve as output parameters. These return
-values may be passed back to Perl either by putting them on the
-Perl stack, or by modifying the arguments supplied from the Perl side.
-
-The above is a somewhat simplified view of what really happens. Since
-Perl allows more flexible calling conventions than C, XSUBs may do much
-more in practice, such as checking input parameters for validity,
-throwing exceptions (or returning undef/empty list) if the return value
-from the C function indicates failure, calling different C functions
-based on numbers and types of the arguments, providing an object-oriented
-interface, etc.
-
-Of course, one could write such glue code directly in C. However, this
-would be a tedious task, especially if one needs to write glue for
-multiple C functions, and/or one is not familiar enough with the Perl
-stack discipline and other such arcana. XS comes to the rescue here:
-instead of writing this glue C code in long-hand, one can write
-a more concise short-hand I<description> of what should be done by
-the glue, and let the XS compiler B<xsubpp> handle the rest.
-
-The XS language allows one to describe the mapping between how the C
-routine is used, and how the corresponding Perl routine is used. It
-also allows creation of Perl routines which are directly translated to
-C code and which are not related to a pre-existing C function. In cases
-when the C interface coincides with the Perl interface, the XSUB
-declaration is almost identical to a declaration of a C function (in K&R
-style). In such circumstances, there is another tool called C<h2xs>
-that is able to translate an entire C header file into a corresponding
-XS file that will provide glue to the functions/macros described in
-the header file.
-
-The XS compiler is called B<xsubpp>. This compiler creates
-the constructs necessary to let an XSUB manipulate Perl values, and
-creates the glue necessary to let Perl call the XSUB. The compiler
-uses B<typemaps> to determine how to map C function parameters
-and output values to Perl values and back. The default typemap
-(which comes with Perl) handles many common C types. A supplementary
-typemap may also be needed to handle any special structures and types
-for the library being linked.
-
-A file in XS format starts with a C language section which goes until the
-first C<MODULE =Z<>> directive. Other XS directives and XSUB definitions
-may follow this line. The "language" used in this part of the file
-is usually referred to as the XS language. B<xsubpp> recognizes and
-skips POD (see L<perlpod>) in both the C and XS language sections, which
-allows the XS file to contain embedded documentation.
-
-See L<perlxstut> for a tutorial on the whole extension creation process.
-
-Note: For some extensions, Dave Beazley's SWIG system may provide a
-significantly more convenient mechanism for creating the extension
-glue code. See L<http://www.swig.org/> for more information.
-
-=head2 On The Road
-
-Many of the examples which follow will concentrate on creating an interface
-between Perl and the ONC+ RPC bind library functions. The rpcb_gettime()
-function is used to demonstrate many features of the XS language. This
-function has two parameters; the first is an input parameter and the second
-is an output parameter. The function also returns a status value.
-
- bool_t rpcb_gettime(const char *host, time_t *timep);
-
-From C this function will be called with the following
-statements.
-
- #include <rpc/rpc.h>
- bool_t status;
- time_t timep;
- status = rpcb_gettime( "localhost", &timep );
-
-If an XSUB is created to offer a direct translation between this function
-and Perl, then this XSUB will be used from Perl with the following code.
-The $status and $timep variables will contain the output of the function.
-
- use RPC;
- $status = rpcb_gettime( "localhost", $timep );
-
-The following XS file shows an XS subroutine, or XSUB, which
-demonstrates one possible interface to the rpcb_gettime()
-function. This XSUB represents a direct translation between
-C and Perl and so preserves the interface even from Perl.
-This XSUB will be invoked from Perl with the usage shown
-above. Note that the first three #include statements, for
-C<EXTERN.h>, C<perl.h>, and C<XSUB.h>, will always be present at the
-beginning of an XS file. This approach and others will be
-expanded later in this document.
-
- #include "EXTERN.h"
- #include "perl.h"
- #include "XSUB.h"
- #include <rpc/rpc.h>
-
- MODULE = RPC PACKAGE = RPC
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t &timep
- OUTPUT:
- timep
-
-Any extension to Perl, including those containing XSUBs,
-should have a Perl module to serve as the bootstrap which
-pulls the extension into Perl. This module will export the
-extension's functions and variables to the Perl program and
-will cause the extension's XSUBs to be linked into Perl.
-The following module will be used for most of the examples
-in this document and should be used from Perl with the C<use>
-command as shown earlier. Perl modules are explained in
-more detail later in this document.
-
- package RPC;
-
- require Exporter;
- require DynaLoader;
- @ISA = qw(Exporter DynaLoader);
- @EXPORT = qw( rpcb_gettime );
-
- bootstrap RPC;
- 1;
-
-Throughout this document a variety of interfaces to the rpcb_gettime()
-XSUB will be explored. The XSUBs will take their parameters in different
-orders or will take different numbers of parameters. In each case the
-XSUB is an abstraction between Perl and the real C rpcb_gettime()
-function, and the XSUB must always ensure that the real rpcb_gettime()
-function is called with the correct parameters. This abstraction will
-allow the programmer to create a more Perl-like interface to the C
-function.
-
-=head2 The Anatomy of an XSUB
-
-The simplest XSUBs consist of 3 parts: a description of the return
-value, the name of the XSUB routine and the names of its arguments,
-and a description of types or formats of the arguments.
-
-The following XSUB allows a Perl program to access a C library function
-called sin(). The XSUB will imitate the C function which takes a single
-argument and returns a single value.
-
- double
- sin(x)
- double x
-
-Optionally, one can merge the description of types and the list of
-argument names, rewriting this as
-
- double
- sin(double x)
-
-This makes this XSUB look similar to an ANSI C declaration. An optional
-semicolon is allowed after the argument list, as in
-
- double
- sin(double x);
-
-Parameters with C pointer types can have different semantic: C functions
-with similar declarations
-
- bool string_looks_as_a_number(char *s);
- bool make_char_uppercase(char *c);
-
-are used in absolutely incompatible manner. Parameters to these functions
-could be described B<xsubpp> like this:
-
- char * s
- char &c
-
-Both these XS declarations correspond to the C<char*> C type, but they have
-different semantics, see L<"The & Unary Operator">.
-
-It is convenient to think that the indirection operator
-C<*> should be considered as a part of the type and the address operator C<&>
-should be considered part of the variable. See L<"The Typemap">
-for more info about handling qualifiers and unary operators in C types.
-
-The function name and the return type must be placed on
-separate lines and should be flush left-adjusted.
-
- INCORRECT CORRECT
-
- double sin(x) double
- double x sin(x)
- double x
-
-The rest of the function description may be indented or left-adjusted. The
-following example shows a function with its body left-adjusted. Most
-examples in this document will indent the body for better readability.
-
- CORRECT
-
- double
- sin(x)
- double x
-
-More complicated XSUBs may contain many other sections. Each section of
-an XSUB starts with the corresponding keyword, such as INIT: or CLEANUP:.
-However, the first two lines of an XSUB always contain the same data:
-descriptions of the return type and the names of the function and its
-parameters. Whatever immediately follows these is considered to be
-an INPUT: section unless explicitly marked with another keyword.
-(See L<The INPUT: Keyword>.)
-
-An XSUB section continues until another section-start keyword is found.
-
-=head2 The Argument Stack
-
-The Perl argument stack is used to store the values which are
-sent as parameters to the XSUB and to store the XSUB's
-return value(s). In reality all Perl functions (including non-XSUB
-ones) keep their values on this stack all the same time, each limited
-to its own range of positions on the stack. In this document the
-first position on that stack which belongs to the active
-function will be referred to as position 0 for that function.
-
-XSUBs refer to their stack arguments with the macro B<ST(x)>, where I<x>
-refers to a position in this XSUB's part of the stack. Position 0 for that
-function would be known to the XSUB as ST(0). The XSUB's incoming
-parameters and outgoing return values always begin at ST(0). For many
-simple cases the B<xsubpp> compiler will generate the code necessary to
-handle the argument stack by embedding code fragments found in the
-typemaps. In more complex cases the programmer must supply the code.
-
-=head2 The RETVAL Variable
-
-The RETVAL variable is a special C variable that is declared automatically
-for you. The C type of RETVAL matches the return type of the C library
-function. The B<xsubpp> compiler will declare this variable in each XSUB
-with non-C<void> return type. By default the generated C function
-will use RETVAL to hold the return value of the C library function being
-called. In simple cases the value of RETVAL will be placed in ST(0) of
-the argument stack where it can be received by Perl as the return value
-of the XSUB.
-
-If the XSUB has a return type of C<void> then the compiler will
-not declare a RETVAL variable for that function. When using
-a PPCODE: section no manipulation of the RETVAL variable is required, the
-section may use direct stack manipulation to place output values on the stack.
-
-If PPCODE: directive is not used, C<void> return value should be used
-only for subroutines which do not return a value, I<even if> CODE:
-directive is used which sets ST(0) explicitly.
-
-Older versions of this document recommended to use C<void> return
-value in such cases. It was discovered that this could lead to
-segfaults in cases when XSUB was I<truly> C<void>. This practice is
-now deprecated, and may be not supported at some future version. Use
-the return value C<SV *> in such cases. (Currently C<xsubpp> contains
-some heuristic code which tries to disambiguate between "truly-void"
-and "old-practice-declared-as-void" functions. Hence your code is at
-mercy of this heuristics unless you use C<SV *> as return value.)
-
-=head2 Returning SVs, AVs and HVs through RETVAL
-
-When you're using RETVAL to return an C<SV *>, there's some magic
-going on behind the scenes that should be mentioned. When you're
-manipulating the argument stack using the ST(x) macro, for example,
-you usually have to pay special attention to reference counts. (For
-more about reference counts, see L<perlguts>.) To make your life
-easier, the typemap file automatically makes C<RETVAL> mortal when
-you're returning an C<SV *>. Thus, the following two XSUBs are more
-or less equivalent:
-
- void
- alpha()
- PPCODE:
- ST(0) = newSVpv("Hello World",0);
- sv_2mortal(ST(0));
- XSRETURN(1);
-
- SV *
- beta()
- CODE:
- RETVAL = newSVpv("Hello World",0);
- OUTPUT:
- RETVAL
-
-This is quite useful as it usually improves readability. While
-this works fine for an C<SV *>, it's unfortunately not as easy
-to have C<AV *> or C<HV *> as a return value. You I<should> be
-able to write:
-
- AV *
- array()
- CODE:
- RETVAL = newAV();
- /* do something with RETVAL */
- OUTPUT:
- RETVAL
-
-But due to an unfixable bug (fixing it would break lots of existing
-CPAN modules) in the typemap file, the reference count of the C<AV *>
-is not properly decremented. Thus, the above XSUB would leak memory
-whenever it is being called. The same problem exists for C<HV *>.
-
-When you're returning an C<AV *> or a C<HV *>, you have to make sure
-their reference count is decremented by making the AV or HV mortal:
-
- AV *
- array()
- CODE:
- RETVAL = newAV();
- sv_2mortal((SV*)RETVAL);
- /* do something with RETVAL */
- OUTPUT:
- RETVAL
-
-And also remember that you don't have to do this for an C<SV *>.
-
-=head2 The MODULE Keyword
-
-The MODULE keyword is used to start the XS code and to specify the package
-of the functions which are being defined. All text preceding the first
-MODULE keyword is considered C code and is passed through to the output with
-POD stripped, but otherwise untouched. Every XS module will have a
-bootstrap function which is used to hook the XSUBs into Perl. The package
-name of this bootstrap function will match the value of the last MODULE
-statement in the XS source files. The value of MODULE should always remain
-constant within the same XS file, though this is not required.
-
-The following example will start the XS code and will place
-all functions in a package named RPC.
-
- MODULE = RPC
-
-=head2 The PACKAGE Keyword
-
-When functions within an XS source file must be separated into packages
-the PACKAGE keyword should be used. This keyword is used with the MODULE
-keyword and must follow immediately after it when used.
-
- MODULE = RPC PACKAGE = RPC
-
- [ XS code in package RPC ]
-
- MODULE = RPC PACKAGE = RPCB
-
- [ XS code in package RPCB ]
-
- MODULE = RPC PACKAGE = RPC
-
- [ XS code in package RPC ]
-
-The same package name can be used more than once, allowing for
-non-contiguous code. This is useful if you have a stronger ordering
-principle than package names.
-
-Although this keyword is optional and in some cases provides redundant
-information it should always be used. This keyword will ensure that the
-XSUBs appear in the desired package.
-
-=head2 The PREFIX Keyword
-
-The PREFIX keyword designates prefixes which should be
-removed from the Perl function names. If the C function is
-C<rpcb_gettime()> and the PREFIX value is C<rpcb_> then Perl will
-see this function as C<gettime()>.
-
-This keyword should follow the PACKAGE keyword when used.
-If PACKAGE is not used then PREFIX should follow the MODULE
-keyword.
-
- MODULE = RPC PREFIX = rpc_
-
- MODULE = RPC PACKAGE = RPCB PREFIX = rpcb_
-
-=head2 The OUTPUT: Keyword
-
-The OUTPUT: keyword indicates that certain function parameters should be
-updated (new values made visible to Perl) when the XSUB terminates or that
-certain values should be returned to the calling Perl function. For
-simple functions which have no CODE: or PPCODE: section,
-such as the sin() function above, the RETVAL variable is
-automatically designated as an output value. For more complex functions
-the B<xsubpp> compiler will need help to determine which variables are output
-variables.
-
-This keyword will normally be used to complement the CODE: keyword.
-The RETVAL variable is not recognized as an output variable when the
-CODE: keyword is present. The OUTPUT: keyword is used in this
-situation to tell the compiler that RETVAL really is an output
-variable.
-
-The OUTPUT: keyword can also be used to indicate that function parameters
-are output variables. This may be necessary when a parameter has been
-modified within the function and the programmer would like the update to
-be seen by Perl.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t &timep
- OUTPUT:
- timep
-
-The OUTPUT: keyword will also allow an output parameter to
-be mapped to a matching piece of code rather than to a
-typemap.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t &timep
- OUTPUT:
- timep sv_setnv(ST(1), (double)timep);
-
-B<xsubpp> emits an automatic C<SvSETMAGIC()> for all parameters in the
-OUTPUT section of the XSUB, except RETVAL. This is the usually desired
-behavior, as it takes care of properly invoking 'set' magic on output
-parameters (needed for hash or array element parameters that must be
-created if they didn't exist). If for some reason, this behavior is
-not desired, the OUTPUT section may contain a C<SETMAGIC: DISABLE> line
-to disable it for the remainder of the parameters in the OUTPUT section.
-Likewise, C<SETMAGIC: ENABLE> can be used to reenable it for the
-remainder of the OUTPUT section. See L<perlguts> for more details
-about 'set' magic.
-
-=head2 The NO_OUTPUT Keyword
-
-The NO_OUTPUT can be placed as the first token of the XSUB. This keyword
-indicates that while the C subroutine we provide an interface to has
-a non-C<void> return type, the return value of this C subroutine should not
-be returned from the generated Perl subroutine.
-
-With this keyword present L<The RETVAL Variable> is created, and in the
-generated call to the subroutine this variable is assigned to, but the value
-of this variable is not going to be used in the auto-generated code.
-
-This keyword makes sense only if C<RETVAL> is going to be accessed by the
-user-supplied code. It is especially useful to make a function interface
-more Perl-like, especially when the C return value is just an error condition
-indicator. For example,
-
- NO_OUTPUT int
- delete_file(char *name)
- POSTCALL:
- if (RETVAL != 0)
- croak("Error %d while deleting file '%s'", RETVAL, name);
-
-Here the generated XS function returns nothing on success, and will die()
-with a meaningful error message on error.
-
-=head2 The CODE: Keyword
-
-This keyword is used in more complicated XSUBs which require
-special handling for the C function. The RETVAL variable is
-still declared, but it will not be returned unless it is specified
-in the OUTPUT: section.
-
-The following XSUB is for a C function which requires special handling of
-its parameters. The Perl usage is given first.
-
- $status = rpcb_gettime( "localhost", $timep );
-
-The XSUB follows.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t timep
- CODE:
- RETVAL = rpcb_gettime( host, &timep );
- OUTPUT:
- timep
- RETVAL
-
-=head2 The INIT: Keyword
-
-The INIT: keyword allows initialization to be inserted into the XSUB before
-the compiler generates the call to the C function. Unlike the CODE: keyword
-above, this keyword does not affect the way the compiler handles RETVAL.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t &timep
- INIT:
- printf("# Host is %s\n", host );
- OUTPUT:
- timep
-
-Another use for the INIT: section is to check for preconditions before
-making a call to the C function:
-
- long long
- lldiv(a,b)
- long long a
- long long b
- INIT:
- if (a == 0 && b == 0)
- XSRETURN_UNDEF;
- if (b == 0)
- croak("lldiv: cannot divide by 0");
-
-=head2 The NO_INIT Keyword
-
-The NO_INIT keyword is used to indicate that a function
-parameter is being used only as an output value. The B<xsubpp>
-compiler will normally generate code to read the values of
-all function parameters from the argument stack and assign
-them to C variables upon entry to the function. NO_INIT
-will tell the compiler that some parameters will be used for
-output rather than for input and that they will be handled
-before the function terminates.
-
-The following example shows a variation of the rpcb_gettime() function.
-This function uses the timep variable only as an output variable and does
-not care about its initial contents.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t &timep = NO_INIT
- OUTPUT:
- timep
-
-=head2 Initializing Function Parameters
-
-C function parameters are normally initialized with their values from
-the argument stack (which in turn contains the parameters that were
-passed to the XSUB from Perl). The typemaps contain the
-code segments which are used to translate the Perl values to
-the C parameters. The programmer, however, is allowed to
-override the typemaps and supply alternate (or additional)
-initialization code. Initialization code starts with the first
-C<=>, C<;> or C<+> on a line in the INPUT: section. The only
-exception happens if this C<;> terminates the line, then this C<;>
-is quietly ignored.
-
-The following code demonstrates how to supply initialization code for
-function parameters. The initialization code is eval'ed within double
-quotes by the compiler before it is added to the output so anything
-which should be interpreted literally [mainly C<$>, C<@>, or C<\\>]
-must be protected with backslashes. The variables $var, $arg,
-and $type can be used as in typemaps.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host = (char *)SvPV_nolen($arg);
- time_t &timep = 0;
- OUTPUT:
- timep
-
-This should not be used to supply default values for parameters. One
-would normally use this when a function parameter must be processed by
-another library function before it can be used. Default parameters are
-covered in the next section.
-
-If the initialization begins with C<=>, then it is output in
-the declaration for the input variable, replacing the initialization
-supplied by the typemap. If the initialization
-begins with C<;> or C<+>, then it is performed after
-all of the input variables have been declared. In the C<;>
-case the initialization normally supplied by the typemap is not performed.
-For the C<+> case, the declaration for the variable will include the
-initialization from the typemap. A global
-variable, C<%v>, is available for the truly rare case where
-information from one initialization is needed in another
-initialization.
-
-Here's a truly obscure example:
-
- bool_t
- rpcb_gettime(host,timep)
- time_t &timep; /* \$v{timep}=@{[$v{timep}=$arg]} */
- char *host + SvOK($v{timep}) ? SvPV_nolen($arg) : NULL;
- OUTPUT:
- timep
-
-The construct C<\$v{timep}=@{[$v{timep}=$arg]}> used in the above
-example has a two-fold purpose: first, when this line is processed by
-B<xsubpp>, the Perl snippet C<$v{timep}=$arg> is evaluated. Second,
-the text of the evaluated snippet is output into the generated C file
-(inside a C comment)! During the processing of C<char *host> line,
-$arg will evaluate to C<ST(0)>, and C<$v{timep}> will evaluate to
-C<ST(1)>.
-
-=head2 Default Parameter Values
-
-Default values for XSUB arguments can be specified by placing an
-assignment statement in the parameter list. The default value may
-be a number, a string or the special string C<NO_INIT>. Defaults should
-always be used on the right-most parameters only.
-
-To allow the XSUB for rpcb_gettime() to have a default host
-value the parameters to the XSUB could be rearranged. The
-XSUB will then call the real rpcb_gettime() function with
-the parameters in the correct order. This XSUB can be called
-from Perl with either of the following statements:
-
- $status = rpcb_gettime( $timep, $host );
-
- $status = rpcb_gettime( $timep );
-
-The XSUB will look like the code which follows. A CODE:
-block is used to call the real rpcb_gettime() function with
-the parameters in the correct order for that function.
-
- bool_t
- rpcb_gettime(timep,host="localhost")
- char *host
- time_t timep = NO_INIT
- CODE:
- RETVAL = rpcb_gettime( host, &timep );
- OUTPUT:
- timep
- RETVAL
-
-=head2 The PREINIT: Keyword
-
-The PREINIT: keyword allows extra variables to be declared immediately
-before or after the declarations of the parameters from the INPUT: section
-are emitted.
-
-If a variable is declared inside a CODE: section it will follow any typemap
-code that is emitted for the input parameters. This may result in the
-declaration ending up after C code, which is C syntax error. Similar
-errors may happen with an explicit C<;>-type or C<+>-type initialization of
-parameters is used (see L<"Initializing Function Parameters">). Declaring
-these variables in an INIT: section will not help.
-
-In such cases, to force an additional variable to be declared together
-with declarations of other variables, place the declaration into a
-PREINIT: section. The PREINIT: keyword may be used one or more times
-within an XSUB.
-
-The following examples are equivalent, but if the code is using complex
-typemaps then the first example is safer.
-
- bool_t
- rpcb_gettime(timep)
- time_t timep = NO_INIT
- PREINIT:
- char *host = "localhost";
- CODE:
- RETVAL = rpcb_gettime( host, &timep );
- OUTPUT:
- timep
- RETVAL
-
-For this particular case an INIT: keyword would generate the
-same C code as the PREINIT: keyword. Another correct, but error-prone example:
-
- bool_t
- rpcb_gettime(timep)
- time_t timep = NO_INIT
- CODE:
- char *host = "localhost";
- RETVAL = rpcb_gettime( host, &timep );
- OUTPUT:
- timep
- RETVAL
-
-Another way to declare C<host> is to use a C block in the CODE: section:
-
- bool_t
- rpcb_gettime(timep)
- time_t timep = NO_INIT
- CODE:
- {
- char *host = "localhost";
- RETVAL = rpcb_gettime( host, &timep );
- }
- OUTPUT:
- timep
- RETVAL
-
-The ability to put additional declarations before the typemap entries are
-processed is very handy in the cases when typemap conversions manipulate
-some global state:
-
- MyObject
- mutate(o)
- PREINIT:
- MyState st = global_state;
- INPUT:
- MyObject o;
- CLEANUP:
- reset_to(global_state, st);
-
-Here we suppose that conversion to C<MyObject> in the INPUT: section and from
-MyObject when processing RETVAL will modify a global variable C<global_state>.
-After these conversions are performed, we restore the old value of
-C<global_state> (to avoid memory leaks, for example).
-
-There is another way to trade clarity for compactness: INPUT sections allow
-declaration of C variables which do not appear in the parameter list of
-a subroutine. Thus the above code for mutate() can be rewritten as
-
- MyObject
- mutate(o)
- MyState st = global_state;
- MyObject o;
- CLEANUP:
- reset_to(global_state, st);
-
-and the code for rpcb_gettime() can be rewritten as
-
- bool_t
- rpcb_gettime(timep)
- time_t timep = NO_INIT
- char *host = "localhost";
- C_ARGS:
- host, &timep
- OUTPUT:
- timep
- RETVAL
-
-=head2 The SCOPE: Keyword
-
-The SCOPE: keyword allows scoping to be enabled for a particular XSUB. If
-enabled, the XSUB will invoke ENTER and LEAVE automatically.
-
-To support potentially complex type mappings, if a typemap entry used
-by an XSUB contains a comment like C</*scope*/> then scoping will
-be automatically enabled for that XSUB.
-
-To enable scoping:
-
- SCOPE: ENABLE
-
-To disable scoping:
-
- SCOPE: DISABLE
-
-=head2 The INPUT: Keyword
-
-The XSUB's parameters are usually evaluated immediately after entering the
-XSUB. The INPUT: keyword can be used to force those parameters to be
-evaluated a little later. The INPUT: keyword can be used multiple times
-within an XSUB and can be used to list one or more input variables. This
-keyword is used with the PREINIT: keyword.
-
-The following example shows how the input parameter C<timep> can be
-evaluated late, after a PREINIT.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- PREINIT:
- time_t tt;
- INPUT:
- time_t timep
- CODE:
- RETVAL = rpcb_gettime( host, &tt );
- timep = tt;
- OUTPUT:
- timep
- RETVAL
-
-The next example shows each input parameter evaluated late.
-
- bool_t
- rpcb_gettime(host,timep)
- PREINIT:
- time_t tt;
- INPUT:
- char *host
- PREINIT:
- char *h;
- INPUT:
- time_t timep
- CODE:
- h = host;
- RETVAL = rpcb_gettime( h, &tt );
- timep = tt;
- OUTPUT:
- timep
- RETVAL
-
-Since INPUT sections allow declaration of C variables which do not appear
-in the parameter list of a subroutine, this may be shortened to:
-
- bool_t
- rpcb_gettime(host,timep)
- time_t tt;
- char *host;
- char *h = host;
- time_t timep;
- CODE:
- RETVAL = rpcb_gettime( h, &tt );
- timep = tt;
- OUTPUT:
- timep
- RETVAL
-
-(We used our knowledge that input conversion for C<char *> is a "simple" one,
-thus C<host> is initialized on the declaration line, and our assignment
-C<h = host> is not performed too early. Otherwise one would need to have the
-assignment C<h = host> in a CODE: or INIT: section.)
-
-=head2 The IN/OUTLIST/IN_OUTLIST/OUT/IN_OUT Keywords
-
-In the list of parameters for an XSUB, one can precede parameter names
-by the C<IN>/C<OUTLIST>/C<IN_OUTLIST>/C<OUT>/C<IN_OUT> keywords.
-C<IN> keyword is the default, the other keywords indicate how the Perl
-interface should differ from the C interface.
-
-Parameters preceded by C<OUTLIST>/C<IN_OUTLIST>/C<OUT>/C<IN_OUT>
-keywords are considered to be used by the C subroutine I<via
-pointers>. C<OUTLIST>/C<OUT> keywords indicate that the C subroutine
-does not inspect the memory pointed by this parameter, but will write
-through this pointer to provide additional return values.
-
-Parameters preceded by C<OUTLIST> keyword do not appear in the usage
-signature of the generated Perl function.
-
-Parameters preceded by C<IN_OUTLIST>/C<IN_OUT>/C<OUT> I<do> appear as
-parameters to the Perl function. With the exception of
-C<OUT>-parameters, these parameters are converted to the corresponding
-C type, then pointers to these data are given as arguments to the C
-function. It is expected that the C function will write through these
-pointers.
-
-The return list of the generated Perl function consists of the C return value
-from the function (unless the XSUB is of C<void> return type or
-C<The NO_OUTPUT Keyword> was used) followed by all the C<OUTLIST>
-and C<IN_OUTLIST> parameters (in the order of appearance). On the
-return from the XSUB the C<IN_OUT>/C<OUT> Perl parameter will be
-modified to have the values written by the C function.
-
-For example, an XSUB
-
- void
- day_month(OUTLIST day, IN unix_time, OUTLIST month)
- int day
- int unix_time
- int month
-
-should be used from Perl as
-
- my ($day, $month) = day_month(time);
-
-The C signature of the corresponding function should be
-
- void day_month(int *day, int unix_time, int *month);
-
-The C<IN>/C<OUTLIST>/C<IN_OUTLIST>/C<IN_OUT>/C<OUT> keywords can be
-mixed with ANSI-style declarations, as in
-
- void
- day_month(OUTLIST int day, int unix_time, OUTLIST int month)
-
-(here the optional C<IN> keyword is omitted).
-
-The C<IN_OUT> parameters are identical with parameters introduced with
-L<The & Unary Operator> and put into the C<OUTPUT:> section (see
-L<The OUTPUT: Keyword>). The C<IN_OUTLIST> parameters are very similar,
-the only difference being that the value C function writes through the
-pointer would not modify the Perl parameter, but is put in the output
-list.
-
-The C<OUTLIST>/C<OUT> parameter differ from C<IN_OUTLIST>/C<IN_OUT>
-parameters only by the initial value of the Perl parameter not
-being read (and not being given to the C function - which gets some
-garbage instead). For example, the same C function as above can be
-interfaced with as
-
- void day_month(OUT int day, int unix_time, OUT int month);
-
-or
-
- void
- day_month(day, unix_time, month)
- int &day = NO_INIT
- int unix_time
- int &month = NO_INIT
- OUTPUT:
- day
- month
-
-However, the generated Perl function is called in very C-ish style:
-
- my ($day, $month);
- day_month($day, time, $month);
-
-=head2 The C<length(NAME)> Keyword
-
-If one of the input arguments to the C function is the length of a string
-argument C<NAME>, one can substitute the name of the length-argument by
-C<length(NAME)> in the XSUB declaration. This argument must be omitted when
-the generated Perl function is called. E.g.,
-
- void
- dump_chars(char *s, short l)
- {
- short n = 0;
- while (n < l) {
- printf("s[%d] = \"\\%#03o\"\n", n, (int)s[n]);
- n++;
- }
- }
-
- MODULE = x PACKAGE = x
-
- void dump_chars(char *s, short length(s))
-
-should be called as C<dump_chars($string)>.
-
-This directive is supported with ANSI-type function declarations only.
-
-=head2 Variable-length Parameter Lists
-
-XSUBs can have variable-length parameter lists by specifying an ellipsis
-C<(...)> in the parameter list. This use of the ellipsis is similar to that
-found in ANSI C. The programmer is able to determine the number of
-arguments passed to the XSUB by examining the C<items> variable which the
-B<xsubpp> compiler supplies for all XSUBs. By using this mechanism one can
-create an XSUB which accepts a list of parameters of unknown length.
-
-The I<host> parameter for the rpcb_gettime() XSUB can be
-optional so the ellipsis can be used to indicate that the
-XSUB will take a variable number of parameters. Perl should
-be able to call this XSUB with either of the following statements.
-
- $status = rpcb_gettime( $timep, $host );
-
- $status = rpcb_gettime( $timep );
-
-The XS code, with ellipsis, follows.
-
- bool_t
- rpcb_gettime(timep, ...)
- time_t timep = NO_INIT
- PREINIT:
- char *host = "localhost";
- CODE:
- if( items > 1 )
- host = (char *)SvPV_nolen(ST(1));
- RETVAL = rpcb_gettime( host, &timep );
- OUTPUT:
- timep
- RETVAL
-
-=head2 The C_ARGS: Keyword
-
-The C_ARGS: keyword allows creating of XSUBS which have different
-calling sequence from Perl than from C, without a need to write
-CODE: or PPCODE: section. The contents of the C_ARGS: paragraph is
-put as the argument to the called C function without any change.
-
-For example, suppose that a C function is declared as
-
- symbolic nth_derivative(int n, symbolic function, int flags);
-
-and that the default flags are kept in a global C variable
-C<default_flags>. Suppose that you want to create an interface which
-is called as
-
- $second_deriv = $function->nth_derivative(2);
-
-To do this, declare the XSUB as
-
- symbolic
- nth_derivative(function, n)
- symbolic function
- int n
- C_ARGS:
- n, function, default_flags
-
-=head2 The PPCODE: Keyword
-
-The PPCODE: keyword is an alternate form of the CODE: keyword and is used
-to tell the B<xsubpp> compiler that the programmer is supplying the code to
-control the argument stack for the XSUBs return values. Occasionally one
-will want an XSUB to return a list of values rather than a single value.
-In these cases one must use PPCODE: and then explicitly push the list of
-values on the stack. The PPCODE: and CODE: keywords should not be used
-together within the same XSUB.
-
-The actual difference between PPCODE: and CODE: sections is in the
-initialization of C<SP> macro (which stands for the I<current> Perl
-stack pointer), and in the handling of data on the stack when returning
-from an XSUB. In CODE: sections SP preserves the value which was on
-entry to the XSUB: SP is on the function pointer (which follows the
-last parameter). In PPCODE: sections SP is moved backward to the
-beginning of the parameter list, which allows C<PUSH*()> macros
-to place output values in the place Perl expects them to be when
-the XSUB returns back to Perl.
-
-The generated trailer for a CODE: section ensures that the number of return
-values Perl will see is either 0 or 1 (depending on the C<void>ness of the
-return value of the C function, and heuristics mentioned in
-L<"The RETVAL Variable">). The trailer generated for a PPCODE: section
-is based on the number of return values and on the number of times
-C<SP> was updated by C<[X]PUSH*()> macros.
-
-Note that macros C<ST(i)>, C<XST_m*()> and C<XSRETURN*()> work equally
-well in CODE: sections and PPCODE: sections.
-
-The following XSUB will call the C rpcb_gettime() function
-and will return its two output values, timep and status, to
-Perl as a single list.
-
- void
- rpcb_gettime(host)
- char *host
- PREINIT:
- time_t timep;
- bool_t status;
- PPCODE:
- status = rpcb_gettime( host, &timep );
- EXTEND(SP, 2);
- PUSHs(sv_2mortal(newSViv(status)));
- PUSHs(sv_2mortal(newSViv(timep)));
-
-Notice that the programmer must supply the C code necessary
-to have the real rpcb_gettime() function called and to have
-the return values properly placed on the argument stack.
-
-The C<void> return type for this function tells the B<xsubpp> compiler that
-the RETVAL variable is not needed or used and that it should not be created.
-In most scenarios the void return type should be used with the PPCODE:
-directive.
-
-The EXTEND() macro is used to make room on the argument
-stack for 2 return values. The PPCODE: directive causes the
-B<xsubpp> compiler to create a stack pointer available as C<SP>, and it
-is this pointer which is being used in the EXTEND() macro.
-The values are then pushed onto the stack with the PUSHs()
-macro.
-
-Now the rpcb_gettime() function can be used from Perl with
-the following statement.
-
- ($status, $timep) = rpcb_gettime("localhost");
-
-When handling output parameters with a PPCODE section, be sure to handle
-'set' magic properly. See L<perlguts> for details about 'set' magic.
-
-=head2 Returning Undef And Empty Lists
-
-Occasionally the programmer will want to return simply
-C<undef> or an empty list if a function fails rather than a
-separate status value. The rpcb_gettime() function offers
-just this situation. If the function succeeds we would like
-to have it return the time and if it fails we would like to
-have undef returned. In the following Perl code the value
-of $timep will either be undef or it will be a valid time.
-
- $timep = rpcb_gettime( "localhost" );
-
-The following XSUB uses the C<SV *> return type as a mnemonic only,
-and uses a CODE: block to indicate to the compiler
-that the programmer has supplied all the necessary code. The
-sv_newmortal() call will initialize the return value to undef, making that
-the default return value.
-
- SV *
- rpcb_gettime(host)
- char * host
- PREINIT:
- time_t timep;
- bool_t x;
- CODE:
- ST(0) = sv_newmortal();
- if( rpcb_gettime( host, &timep ) )
- sv_setnv( ST(0), (double)timep);
-
-The next example demonstrates how one would place an explicit undef in the
-return value, should the need arise.
-
- SV *
- rpcb_gettime(host)
- char * host
- PREINIT:
- time_t timep;
- bool_t x;
- CODE:
- if( rpcb_gettime( host, &timep ) ){
- ST(0) = sv_newmortal();
- sv_setnv( ST(0), (double)timep);
- }
- else{
- ST(0) = &PL_sv_undef;
- }
-
-To return an empty list one must use a PPCODE: block and
-then not push return values on the stack.
-
- void
- rpcb_gettime(host)
- char *host
- PREINIT:
- time_t timep;
- PPCODE:
- if( rpcb_gettime( host, &timep ) )
- PUSHs(sv_2mortal(newSViv(timep)));
- else{
- /* Nothing pushed on stack, so an empty
- * list is implicitly returned. */
- }
-
-Some people may be inclined to include an explicit C<return> in the above
-XSUB, rather than letting control fall through to the end. In those
-situations C<XSRETURN_EMPTY> should be used, instead. This will ensure that
-the XSUB stack is properly adjusted. Consult L<perlapi> for other
-C<XSRETURN> macros.
-
-Since C<XSRETURN_*> macros can be used with CODE blocks as well, one can
-rewrite this example as:
-
- int
- rpcb_gettime(host)
- char *host
- PREINIT:
- time_t timep;
- CODE:
- RETVAL = rpcb_gettime( host, &timep );
- if (RETVAL == 0)
- XSRETURN_UNDEF;
- OUTPUT:
- RETVAL
-
-In fact, one can put this check into a POSTCALL: section as well. Together
-with PREINIT: simplifications, this leads to:
-
- int
- rpcb_gettime(host)
- char *host
- time_t timep;
- POSTCALL:
- if (RETVAL == 0)
- XSRETURN_UNDEF;
-
-=head2 The REQUIRE: Keyword
-
-The REQUIRE: keyword is used to indicate the minimum version of the
-B<xsubpp> compiler needed to compile the XS module. An XS module which
-contains the following statement will compile with only B<xsubpp> version
-1.922 or greater:
-
- REQUIRE: 1.922
-
-=head2 The CLEANUP: Keyword
-
-This keyword can be used when an XSUB requires special cleanup procedures
-before it terminates. When the CLEANUP: keyword is used it must follow
-any CODE:, PPCODE:, or OUTPUT: blocks which are present in the XSUB. The
-code specified for the cleanup block will be added as the last statements
-in the XSUB.
-
-=head2 The POSTCALL: Keyword
-
-This keyword can be used when an XSUB requires special procedures
-executed after the C subroutine call is performed. When the POSTCALL:
-keyword is used it must precede OUTPUT: and CLEANUP: blocks which are
-present in the XSUB.
-
-See examples in L<"The NO_OUTPUT Keyword"> and L<"Returning Undef And Empty Lists">.
-
-The POSTCALL: block does not make a lot of sense when the C subroutine
-call is supplied by user by providing either CODE: or PPCODE: section.
-
-=head2 The BOOT: Keyword
-
-The BOOT: keyword is used to add code to the extension's bootstrap
-function. The bootstrap function is generated by the B<xsubpp> compiler and
-normally holds the statements necessary to register any XSUBs with Perl.
-With the BOOT: keyword the programmer can tell the compiler to add extra
-statements to the bootstrap function.
-
-This keyword may be used any time after the first MODULE keyword and should
-appear on a line by itself. The first blank line after the keyword will
-terminate the code block.
-
- BOOT:
- # The following message will be printed when the
- # bootstrap function executes.
- printf("Hello from the bootstrap!\n");
-
-=head2 The VERSIONCHECK: Keyword
-
-The VERSIONCHECK: keyword corresponds to B<xsubpp>'s C<-versioncheck> and
-C<-noversioncheck> options. This keyword overrides the command line
-options. Version checking is enabled by default. When version checking is
-enabled the XS module will attempt to verify that its version matches the
-version of the PM module.
-
-To enable version checking:
-
- VERSIONCHECK: ENABLE
-
-To disable version checking:
-
- VERSIONCHECK: DISABLE
-
-Note that if the version of the PM module is an NV (a floating point
-number), it will be stringified with a possible loss of precision
-(currently chopping to nine decimal places) so that it may not match
-the version of the XS module anymore. Quoting the $VERSION declaration
-to make it a string is recommended if long version numbers are used.
-
-=head2 The PROTOTYPES: Keyword
-
-The PROTOTYPES: keyword corresponds to B<xsubpp>'s C<-prototypes> and
-C<-noprototypes> options. This keyword overrides the command line options.
-Prototypes are enabled by default. When prototypes are enabled XSUBs will
-be given Perl prototypes. This keyword may be used multiple times in an XS
-module to enable and disable prototypes for different parts of the module.
-
-To enable prototypes:
-
- PROTOTYPES: ENABLE
-
-To disable prototypes:
-
- PROTOTYPES: DISABLE
-
-=head2 The PROTOTYPE: Keyword
-
-This keyword is similar to the PROTOTYPES: keyword above but can be used to
-force B<xsubpp> to use a specific prototype for the XSUB. This keyword
-overrides all other prototype options and keywords but affects only the
-current XSUB. Consult L<perlsub/Prototypes> for information about Perl
-prototypes.
-
- bool_t
- rpcb_gettime(timep, ...)
- time_t timep = NO_INIT
- PROTOTYPE: $;$
- PREINIT:
- char *host = "localhost";
- CODE:
- if( items > 1 )
- host = (char *)SvPV_nolen(ST(1));
- RETVAL = rpcb_gettime( host, &timep );
- OUTPUT:
- timep
- RETVAL
-
-If the prototypes are enabled, you can disable it locally for a given
-XSUB as in the following example:
-
- void
- rpcb_gettime_noproto()
- PROTOTYPE: DISABLE
- ...
-
-=head2 The ALIAS: Keyword
-
-The ALIAS: keyword allows an XSUB to have two or more unique Perl names
-and to know which of those names was used when it was invoked. The Perl
-names may be fully-qualified with package names. Each alias is given an
-index. The compiler will setup a variable called C<ix> which contain the
-index of the alias which was used. When the XSUB is called with its
-declared name C<ix> will be 0.
-
-The following example will create aliases C<FOO::gettime()> and
-C<BAR::getit()> for this function.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t &timep
- ALIAS:
- FOO::gettime = 1
- BAR::getit = 2
- INIT:
- printf("# ix = %d\n", ix );
- OUTPUT:
- timep
-
-=head2 The OVERLOAD: Keyword
-
-Instead of writing an overloaded interface using pure Perl, you
-can also use the OVERLOAD keyword to define additional Perl names
-for your functions (like the ALIAS: keyword above). However, the
-overloaded functions must be defined with three parameters (except
-for the nomethod() function which needs four parameters). If any
-function has the OVERLOAD: keyword, several additional lines
-will be defined in the c file generated by xsubpp in order to
-register with the overload magic.
-
-Since blessed objects are actually stored as RV's, it is useful
-to use the typemap features to preprocess parameters and extract
-the actual SV stored within the blessed RV. See the sample for
-T_PTROBJ_SPECIAL below.
-
-To use the OVERLOAD: keyword, create an XS function which takes
-three input parameters ( or use the c style '...' definition) like
-this:
-
- SV *
- cmp (lobj, robj, swap)
- My_Module_obj lobj
- My_Module_obj robj
- IV swap
- OVERLOAD: cmp <=>
- { /* function defined here */}
-
-In this case, the function will overload both of the three way
-comparison operators. For all overload operations using non-alpha
-characters, you must type the parameter without quoting, separating
-multiple overloads with whitespace. Note that "" (the stringify
-overload) should be entered as \"\" (i.e. escaped).
-
-=head2 The FALLBACK: Keyword
-
-In addition to the OVERLOAD keyword, if you need to control how
-Perl autogenerates missing overloaded operators, you can set the
-FALLBACK keyword in the module header section, like this:
-
- MODULE = RPC PACKAGE = RPC
-
- FALLBACK: TRUE
- ...
-
-where FALLBACK can take any of the three values TRUE, FALSE, or
-UNDEF. If you do not set any FALLBACK value when using OVERLOAD,
-it defaults to UNDEF. FALLBACK is not used except when one or
-more functions using OVERLOAD have been defined. Please see
-L<overload/Fallback> for more details.
-
-=head2 The INTERFACE: Keyword
-
-This keyword declares the current XSUB as a keeper of the given
-calling signature. If some text follows this keyword, it is
-considered as a list of functions which have this signature, and
-should be attached to the current XSUB.
-
-For example, if you have 4 C functions multiply(), divide(), add(),
-subtract() all having the signature:
-
- symbolic f(symbolic, symbolic);
-
-you can make them all to use the same XSUB using this:
-
- symbolic
- interface_s_ss(arg1, arg2)
- symbolic arg1
- symbolic arg2
- INTERFACE:
- multiply divide
- add subtract
-
-(This is the complete XSUB code for 4 Perl functions!) Four generated
-Perl function share names with corresponding C functions.
-
-The advantage of this approach comparing to ALIAS: keyword is that there
-is no need to code a switch statement, each Perl function (which shares
-the same XSUB) knows which C function it should call. Additionally, one
-can attach an extra function remainder() at runtime by using
-
- CV *mycv = newXSproto("Symbolic::remainder",
- XS_Symbolic_interface_s_ss, __FILE__, "$$");
- XSINTERFACE_FUNC_SET(mycv, remainder);
-
-say, from another XSUB. (This example supposes that there was no
-INTERFACE_MACRO: section, otherwise one needs to use something else instead of
-C<XSINTERFACE_FUNC_SET>, see the next section.)
-
-=head2 The INTERFACE_MACRO: Keyword
-
-This keyword allows one to define an INTERFACE using a different way
-to extract a function pointer from an XSUB. The text which follows
-this keyword should give the name of macros which would extract/set a
-function pointer. The extractor macro is given return type, C<CV*>,
-and C<XSANY.any_dptr> for this C<CV*>. The setter macro is given cv,
-and the function pointer.
-
-The default value is C<XSINTERFACE_FUNC> and C<XSINTERFACE_FUNC_SET>.
-An INTERFACE keyword with an empty list of functions can be omitted if
-INTERFACE_MACRO keyword is used.
-
-Suppose that in the previous example functions pointers for
-multiply(), divide(), add(), subtract() are kept in a global C array
-C<fp[]> with offsets being C<multiply_off>, C<divide_off>, C<add_off>,
-C<subtract_off>. Then one can use
-
- #define XSINTERFACE_FUNC_BYOFFSET(ret,cv,f) \
- ((XSINTERFACE_CVT_ANON(ret))fp[CvXSUBANY(cv).any_i32])
- #define XSINTERFACE_FUNC_BYOFFSET_set(cv,f) \
- CvXSUBANY(cv).any_i32 = CAT2( f, _off )
-
-in C section,
-
- symbolic
- interface_s_ss(arg1, arg2)
- symbolic arg1
- symbolic arg2
- INTERFACE_MACRO:
- XSINTERFACE_FUNC_BYOFFSET
- XSINTERFACE_FUNC_BYOFFSET_set
- INTERFACE:
- multiply divide
- add subtract
-
-in XSUB section.
-
-=head2 The INCLUDE: Keyword
-
-This keyword can be used to pull other files into the XS module. The other
-files may have XS code. INCLUDE: can also be used to run a command to
-generate the XS code to be pulled into the module.
-
-The file F<Rpcb1.xsh> contains our C<rpcb_gettime()> function:
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t &timep
- OUTPUT:
- timep
-
-The XS module can use INCLUDE: to pull that file into it.
-
- INCLUDE: Rpcb1.xsh
-
-If the parameters to the INCLUDE: keyword are followed by a pipe (C<|>) then
-the compiler will interpret the parameters as a command. This feature is
-mildly deprecated in favour of the C<INCLUDE_COMMAND:> directive, as documented
-below.
-
- INCLUDE: cat Rpcb1.xsh |
-
-Do not use this to run perl: C<INCLUDE: perl |> will run the perl that
-happens to be the first in your path and not necessarily the same perl that is
-used to run C<xsubpp>. See L<"The INCLUDE_COMMAND: Keyword">.
-
-=head2 The INCLUDE_COMMAND: Keyword
-
-Runs the supplied command and includes its output into the current XS
-document. C<INCLUDE_COMMAND> assigns special meaning to the C<$^X> token
-in that it runs the same perl interpreter that is running C<xsubpp>:
-
- INCLUDE_COMMAND: cat Rpcb1.xsh
-
- INCLUDE_COMMAND: $^X -e ...
-
-=head2 The CASE: Keyword
-
-The CASE: keyword allows an XSUB to have multiple distinct parts with each
-part acting as a virtual XSUB. CASE: is greedy and if it is used then all
-other XS keywords must be contained within a CASE:. This means nothing may
-precede the first CASE: in the XSUB and anything following the last CASE: is
-included in that case.
-
-A CASE: might switch via a parameter of the XSUB, via the C<ix> ALIAS:
-variable (see L<"The ALIAS: Keyword">), or maybe via the C<items> variable
-(see L<"Variable-length Parameter Lists">). The last CASE: becomes the
-B<default> case if it is not associated with a conditional. The following
-example shows CASE switched via C<ix> with a function C<rpcb_gettime()>
-having an alias C<x_gettime()>. When the function is called as
-C<rpcb_gettime()> its parameters are the usual C<(char *host, time_t *timep)>,
-but when the function is called as C<x_gettime()> its parameters are
-reversed, C<(time_t *timep, char *host)>.
-
- long
- rpcb_gettime(a,b)
- CASE: ix == 1
- ALIAS:
- x_gettime = 1
- INPUT:
- # 'a' is timep, 'b' is host
- char *b
- time_t a = NO_INIT
- CODE:
- RETVAL = rpcb_gettime( b, &a );
- OUTPUT:
- a
- RETVAL
- CASE:
- # 'a' is host, 'b' is timep
- char *a
- time_t &b = NO_INIT
- OUTPUT:
- b
- RETVAL
-
-That function can be called with either of the following statements. Note
-the different argument lists.
-
- $status = rpcb_gettime( $host, $timep );
-
- $status = x_gettime( $timep, $host );
-
-=head2 The & Unary Operator
-
-The C<&> unary operator in the INPUT: section is used to tell B<xsubpp>
-that it should convert a Perl value to/from C using the C type to the left
-of C<&>, but provide a pointer to this value when the C function is called.
-
-This is useful to avoid a CODE: block for a C function which takes a parameter
-by reference. Typically, the parameter should be not a pointer type (an
-C<int> or C<long> but not an C<int*> or C<long*>).
-
-The following XSUB will generate incorrect C code. The B<xsubpp> compiler will
-turn this into code which calls C<rpcb_gettime()> with parameters C<(char
-*host, time_t timep)>, but the real C<rpcb_gettime()> wants the C<timep>
-parameter to be of type C<time_t*> rather than C<time_t>.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t timep
- OUTPUT:
- timep
-
-That problem is corrected by using the C<&> operator. The B<xsubpp> compiler
-will now turn this into code which calls C<rpcb_gettime()> correctly with
-parameters C<(char *host, time_t *timep)>. It does this by carrying the
-C<&> through, so the function call looks like C<rpcb_gettime(host, &timep)>.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t &timep
- OUTPUT:
- timep
-
-=head2 Inserting POD, Comments and C Preprocessor Directives
-
-C preprocessor directives are allowed within BOOT:, PREINIT: INIT:, CODE:,
-PPCODE:, POSTCALL:, and CLEANUP: blocks, as well as outside the functions.
-Comments are allowed anywhere after the MODULE keyword. The compiler will
-pass the preprocessor directives through untouched and will remove the
-commented lines. POD documentation is allowed at any point, both in the
-C and XS language sections. POD must be terminated with a C<=cut> command;
-C<xsubpp> will exit with an error if it does not. It is very unlikely that
-human generated C code will be mistaken for POD, as most indenting styles
-result in whitespace in front of any line starting with C<=>. Machine
-generated XS files may fall into this trap unless care is taken to
-ensure that a space breaks the sequence "\n=".
-
-Comments can be added to XSUBs by placing a C<#> as the first
-non-whitespace of a line. Care should be taken to avoid making the
-comment look like a C preprocessor directive, lest it be interpreted as
-such. The simplest way to prevent this is to put whitespace in front of
-the C<#>.
-
-If you use preprocessor directives to choose one of two
-versions of a function, use
-
- #if ... version1
- #else /* ... version2 */
- #endif
-
-and not
-
- #if ... version1
- #endif
- #if ... version2
- #endif
-
-because otherwise B<xsubpp> will believe that you made a duplicate
-definition of the function. Also, put a blank line before the
-#else/#endif so it will not be seen as part of the function body.
-
-=head2 Using XS With C++
-
-If an XSUB name contains C<::>, it is considered to be a C++ method.
-The generated Perl function will assume that
-its first argument is an object pointer. The object pointer
-will be stored in a variable called THIS. The object should
-have been created by C++ with the new() function and should
-be blessed by Perl with the sv_setref_pv() macro. The
-blessing of the object by Perl can be handled by a typemap. An example
-typemap is shown at the end of this section.
-
-If the return type of the XSUB includes C<static>, the method is considered
-to be a static method. It will call the C++
-function using the class::method() syntax. If the method is not static
-the function will be called using the THIS-E<gt>method() syntax.
-
-The next examples will use the following C++ class.
-
- class color {
- public:
- color();
- ~color();
- int blue();
- void set_blue( int );
-
- private:
- int c_blue;
- };
-
-The XSUBs for the blue() and set_blue() methods are defined with the class
-name but the parameter for the object (THIS, or "self") is implicit and is
-not listed.
-
- int
- color::blue()
-
- void
- color::set_blue( val )
- int val
-
-Both Perl functions will expect an object as the first parameter. In the
-generated C++ code the object is called C<THIS>, and the method call will
-be performed on this object. So in the C++ code the blue() and set_blue()
-methods will be called as this:
-
- RETVAL = THIS->blue();
-
- THIS->set_blue( val );
-
-You could also write a single get/set method using an optional argument:
-
- int
- color::blue( val = NO_INIT )
- int val
- PROTOTYPE $;$
- CODE:
- if (items > 1)
- THIS->set_blue( val );
- RETVAL = THIS->blue();
- OUTPUT:
- RETVAL
-
-If the function's name is B<DESTROY> then the C++ C<delete> function will be
-called and C<THIS> will be given as its parameter. The generated C++ code for
-
- void
- color::DESTROY()
-
-will look like this:
-
- color *THIS = ...; // Initialized as in typemap
-
- delete THIS;
-
-If the function's name is B<new> then the C++ C<new> function will be called
-to create a dynamic C++ object. The XSUB will expect the class name, which
-will be kept in a variable called C<CLASS>, to be given as the first
-argument.
-
- color *
- color::new()
-
-The generated C++ code will call C<new>.
-
- RETVAL = new color();
-
-The following is an example of a typemap that could be used for this C++
-example.
-
- TYPEMAP
- color * O_OBJECT
-
- OUTPUT
- # The Perl object is blessed into 'CLASS', which should be a
- # char* having the name of the package for the blessing.
- O_OBJECT
- sv_setref_pv( $arg, CLASS, (void*)$var );
-
- INPUT
- O_OBJECT
- if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG) )
- $var = ($type)SvIV((SV*)SvRV( $arg ));
- else{
- warn( \"${Package}::$func_name() -- $var is not a blessed SV reference\" );
- XSRETURN_UNDEF;
- }
-
-=head2 Interface Strategy
-
-When designing an interface between Perl and a C library a straight
-translation from C to XS (such as created by C<h2xs -x>) is often sufficient.
-However, sometimes the interface will look
-very C-like and occasionally nonintuitive, especially when the C function
-modifies one of its parameters, or returns failure inband (as in "negative
-return values mean failure"). In cases where the programmer wishes to
-create a more Perl-like interface the following strategy may help to
-identify the more critical parts of the interface.
-
-Identify the C functions with input/output or output parameters. The XSUBs for
-these functions may be able to return lists to Perl.
-
-Identify the C functions which use some inband info as an indication
-of failure. They may be
-candidates to return undef or an empty list in case of failure. If the
-failure may be detected without a call to the C function, you may want to use
-an INIT: section to report the failure. For failures detectable after the C
-function returns one may want to use a POSTCALL: section to process the
-failure. In more complicated cases use CODE: or PPCODE: sections.
-
-If many functions use the same failure indication based on the return value,
-you may want to create a special typedef to handle this situation. Put
-
- typedef int negative_is_failure;
-
-near the beginning of XS file, and create an OUTPUT typemap entry
-for C<negative_is_failure> which converts negative values to C<undef>, or
-maybe croak()s. After this the return value of type C<negative_is_failure>
-will create more Perl-like interface.
-
-Identify which values are used by only the C and XSUB functions
-themselves, say, when a parameter to a function should be a contents of a
-global variable. If Perl does not need to access the contents of the value
-then it may not be necessary to provide a translation for that value
-from C to Perl.
-
-Identify the pointers in the C function parameter lists and return
-values. Some pointers may be used to implement input/output or
-output parameters, they can be handled in XS with the C<&> unary operator,
-and, possibly, using the NO_INIT keyword.
-Some others will require handling of types like C<int *>, and one needs
-to decide what a useful Perl translation will do in such a case. When
-the semantic is clear, it is advisable to put the translation into a typemap
-file.
-
-Identify the structures used by the C functions. In many
-cases it may be helpful to use the T_PTROBJ typemap for
-these structures so they can be manipulated by Perl as
-blessed objects. (This is handled automatically by C<h2xs -x>.)
-
-If the same C type is used in several different contexts which require
-different translations, C<typedef> several new types mapped to this C type,
-and create separate F<typemap> entries for these new types. Use these
-types in declarations of return type and parameters to XSUBs.
-
-=head2 Perl Objects And C Structures
-
-When dealing with C structures one should select either
-B<T_PTROBJ> or B<T_PTRREF> for the XS type. Both types are
-designed to handle pointers to complex objects. The
-T_PTRREF type will allow the Perl object to be unblessed
-while the T_PTROBJ type requires that the object be blessed.
-By using T_PTROBJ one can achieve a form of type-checking
-because the XSUB will attempt to verify that the Perl object
-is of the expected type.
-
-The following XS code shows the getnetconfigent() function which is used
-with ONC+ TIRPC. The getnetconfigent() function will return a pointer to a
-C structure and has the C prototype shown below. The example will
-demonstrate how the C pointer will become a Perl reference. Perl will
-consider this reference to be a pointer to a blessed object and will
-attempt to call a destructor for the object. A destructor will be
-provided in the XS source to free the memory used by getnetconfigent().
-Destructors in XS can be created by specifying an XSUB function whose name
-ends with the word B<DESTROY>. XS destructors can be used to free memory
-which may have been malloc'd by another XSUB.
-
- struct netconfig *getnetconfigent(const char *netid);
-
-A C<typedef> will be created for C<struct netconfig>. The Perl
-object will be blessed in a class matching the name of the C
-type, with the tag C<Ptr> appended, and the name should not
-have embedded spaces if it will be a Perl package name. The
-destructor will be placed in a class corresponding to the
-class of the object and the PREFIX keyword will be used to
-trim the name to the word DESTROY as Perl will expect.
-
- typedef struct netconfig Netconfig;
-
- MODULE = RPC PACKAGE = RPC
-
- Netconfig *
- getnetconfigent(netid)
- char *netid
-
- MODULE = RPC PACKAGE = NetconfigPtr PREFIX = rpcb_
-
- void
- rpcb_DESTROY(netconf)
- Netconfig *netconf
- CODE:
- printf("Now in NetconfigPtr::DESTROY\n");
- free( netconf );
-
-This example requires the following typemap entry. Consult the typemap
-section for more information about adding new typemaps for an extension.
-
- TYPEMAP
- Netconfig * T_PTROBJ
-
-This example will be used with the following Perl statements.
-
- use RPC;
- $netconf = getnetconfigent("udp");
-
-When Perl destroys the object referenced by $netconf it will send the
-object to the supplied XSUB DESTROY function. Perl cannot determine, and
-does not care, that this object is a C struct and not a Perl object. In
-this sense, there is no difference between the object created by the
-getnetconfigent() XSUB and an object created by a normal Perl subroutine.
-
-=head2 The Typemap
-
-The typemap is a collection of code fragments which are used by the B<xsubpp>
-compiler to map C function parameters and values to Perl values. The
-typemap file may consist of three sections labelled C<TYPEMAP>, C<INPUT>, and
-C<OUTPUT>. An unlabelled initial section is assumed to be a C<TYPEMAP>
-section. The INPUT section tells
-the compiler how to translate Perl values
-into variables of certain C types. The OUTPUT section tells the compiler
-how to translate the values from certain C types into values Perl can
-understand. The TYPEMAP section tells the compiler which of the INPUT and
-OUTPUT code fragments should be used to map a given C type to a Perl value.
-The section labels C<TYPEMAP>, C<INPUT>, or C<OUTPUT> must begin
-in the first column on a line by themselves, and must be in uppercase.
-
-The default typemap in the C<lib/ExtUtils> directory of the Perl source
-contains many useful types which can be used by Perl extensions. Some
-extensions define additional typemaps which they keep in their own directory.
-These additional typemaps may reference INPUT and OUTPUT maps in the main
-typemap. The B<xsubpp> compiler will allow the extension's own typemap to
-override any mappings which are in the default typemap.
-
-Most extensions which require a custom typemap will need only the TYPEMAP
-section of the typemap file. The custom typemap used in the
-getnetconfigent() example shown earlier demonstrates what may be the typical
-use of extension typemaps. That typemap is used to equate a C structure
-with the T_PTROBJ typemap. The typemap used by getnetconfigent() is shown
-here. Note that the C type is separated from the XS type with a tab and
-that the C unary operator C<*> is considered to be a part of the C type name.
-
- TYPEMAP
- Netconfig *<tab>T_PTROBJ
-
-Here's a more complicated example: suppose that you wanted C<struct
-netconfig> to be blessed into the class C<Net::Config>. One way to do
-this is to use underscores (_) to separate package names, as follows:
-
- typedef struct netconfig * Net_Config;
-
-And then provide a typemap entry C<T_PTROBJ_SPECIAL> that maps underscores to
-double-colons (::), and declare C<Net_Config> to be of that type:
-
-
- TYPEMAP
- Net_Config T_PTROBJ_SPECIAL
-
- INPUT
- T_PTROBJ_SPECIAL
- if (sv_derived_from($arg, \"${(my $ntt=$ntype)=~s/_/::/g;\$ntt}\")) {
- IV tmp = SvIV((SV*)SvRV($arg));
- $var = INT2PTR($type, tmp);
- }
- else
- croak(\"$var is not of type ${(my $ntt=$ntype)=~s/_/::/g;\$ntt}\")
-
- OUTPUT
- T_PTROBJ_SPECIAL
- sv_setref_pv($arg, \"${(my $ntt=$ntype)=~s/_/::/g;\$ntt}\",
- (void*)$var);
-
-The INPUT and OUTPUT sections substitute underscores for double-colons
-on the fly, giving the desired effect. This example demonstrates some
-of the power and versatility of the typemap facility.
-
-The INT2PTR macro (defined in perl.h) casts an integer to a pointer,
-of a given type, taking care of the possible different size of integers
-and pointers. There are also PTR2IV, PTR2UV, PTR2NV macros,
-to map the other way, which may be useful in OUTPUT sections.
-
-=head2 Safely Storing Static Data in XS
-
-Starting with Perl 5.8, a macro framework has been defined to allow
-static data to be safely stored in XS modules that will be accessed from
-a multi-threaded Perl.
-
-Although primarily designed for use with multi-threaded Perl, the macros
-have been designed so that they will work with non-threaded Perl as well.
-
-It is therefore strongly recommended that these macros be used by all
-XS modules that make use of static data.
-
-The easiest way to get a template set of macros to use is by specifying
-the C<-g> (C<--global>) option with h2xs (see L<h2xs>).
-
-Below is an example module that makes use of the macros.
-
- #include "EXTERN.h"
- #include "perl.h"
- #include "XSUB.h"
-
- /* Global Data */
-
- #define MY_CXT_KEY "BlindMice::_guts" XS_VERSION
-
- typedef struct {
- int count;
- char name[3][100];
- } my_cxt_t;
-
- START_MY_CXT
-
- MODULE = BlindMice PACKAGE = BlindMice
-
- BOOT:
- {
- MY_CXT_INIT;
- MY_CXT.count = 0;
- strcpy(MY_CXT.name[0], "None");
- strcpy(MY_CXT.name[1], "None");
- strcpy(MY_CXT.name[2], "None");
- }
-
- int
- newMouse(char * name)
- char * name;
- PREINIT:
- dMY_CXT;
- CODE:
- if (MY_CXT.count >= 3) {
- warn("Already have 3 blind mice");
- RETVAL = 0;
- }
- else {
- RETVAL = ++ MY_CXT.count;
- strcpy(MY_CXT.name[MY_CXT.count - 1], name);
- }
-
- char *
- get_mouse_name(index)
- int index
- CODE:
- dMY_CXT;
- RETVAL = MY_CXT.lives ++;
- if (index > MY_CXT.count)
- croak("There are only 3 blind mice.");
- else
- RETVAL = newSVpv(MY_CXT.name[index - 1]);
-
- void
- CLONE(...)
- CODE:
- MY_CXT_CLONE;
-
-B<REFERENCE>
-
-=over 5
-
-=item MY_CXT_KEY
-
-This macro is used to define a unique key to refer to the static data
-for an XS module. The suggested naming scheme, as used by h2xs, is to
-use a string that consists of the module name, the string "::_guts"
-and the module version number.
-
- #define MY_CXT_KEY "MyModule::_guts" XS_VERSION
-
-=item typedef my_cxt_t
-
-This struct typedef I<must> always be called C<my_cxt_t>. The other
-C<CXT*> macros assume the existence of the C<my_cxt_t> typedef name.
-
-Declare a typedef named C<my_cxt_t> that is a structure that contains
-all the data that needs to be interpreter-local.
-
- typedef struct {
- int some_value;
- } my_cxt_t;
-
-=item START_MY_CXT
-
-Always place the START_MY_CXT macro directly after the declaration
-of C<my_cxt_t>.
-
-=item MY_CXT_INIT
-
-The MY_CXT_INIT macro initialises storage for the C<my_cxt_t> struct.
-
-It I<must> be called exactly once, typically in a BOOT: section. If you
-are maintaining multiple interpreters, it should be called once in each
-interpreter instance, except for interpreters cloned from existing ones.
-(But see C<MY_CXT_CLONE> below.)
-
-=item dMY_CXT
-
-Use the dMY_CXT macro (a declaration) in all the functions that access
-MY_CXT.
-
-=item MY_CXT
-
-Use the MY_CXT macro to access members of the C<my_cxt_t> struct. For
-example, if C<my_cxt_t> is
-
- typedef struct {
- int index;
- } my_cxt_t;
-
-then use this to access the C<index> member
-
- dMY_CXT;
- MY_CXT.index = 2;
-
-=item aMY_CXT/pMY_CXT
-
-C<dMY_CXT> may be quite expensive to calculate, and to avoid the overhead
-of invoking it in each function it is possible to pass the declaration
-onto other functions using the C<aMY_CXT>/C<pMY_CXT> macros, eg
-
- void sub1() {
- dMY_CXT;
- MY_CXT.index = 1;
- sub2(aMY_CXT);
- }
-
- void sub2(pMY_CXT) {
- MY_CXT.index = 2;
- }
-
-Analogously to C<pTHX>, there are equivalent forms for when the macro is the
-first or last in multiple arguments, where an underscore represents a
-comma, i.e. C<_aMY_CXT>, C<aMY_CXT_>, C<_pMY_CXT> and C<pMY_CXT_>.
-
-=item MY_CXT_CLONE
-
-By default, when a new interpreter is created as a copy of an existing one
-(eg via C<< threads->create() >>), both interpreters share the same physical
-my_cxt_t structure. Calling C<MY_CXT_CLONE> (typically via the package's
-C<CLONE()> function), causes a byte-for-byte copy of the structure to be
-taken, and any future dMY_CXT will cause the copy to be accessed instead.
-
-=item MY_CXT_INIT_INTERP(my_perl)
-
-=item dMY_CXT_INTERP(my_perl)
-
-These are versions of the macros which take an explicit interpreter as an
-argument.
-
-=back
-
-Note that these macros will only work together within the I<same> source
-file; that is, a dMY_CTX in one source file will access a different structure
-than a dMY_CTX in another source file.
-
-=head2 Thread-aware system interfaces
-
-Starting from Perl 5.8, in C/C++ level Perl knows how to wrap
-system/library interfaces that have thread-aware versions
-(e.g. getpwent_r()) into frontend macros (e.g. getpwent()) that
-correctly handle the multithreaded interaction with the Perl
-interpreter. This will happen transparently, the only thing
-you need to do is to instantiate a Perl interpreter.
-
-This wrapping happens always when compiling Perl core source
-(PERL_CORE is defined) or the Perl core extensions (PERL_EXT is
-defined). When compiling XS code outside of Perl core the wrapping
-does not take place. Note, however, that intermixing the _r-forms
-(as Perl compiled for multithreaded operation will do) and the _r-less
-forms is neither well-defined (inconsistent results, data corruption,
-or even crashes become more likely), nor is it very portable.
-
-=head1 EXAMPLES
-
-File C<RPC.xs>: Interface to some ONC+ RPC bind library functions.
-
- #include "EXTERN.h"
- #include "perl.h"
- #include "XSUB.h"
-
- #include <rpc/rpc.h>
-
- typedef struct netconfig Netconfig;
-
- MODULE = RPC PACKAGE = RPC
-
- SV *
- rpcb_gettime(host="localhost")
- char *host
- PREINIT:
- time_t timep;
- CODE:
- ST(0) = sv_newmortal();
- if( rpcb_gettime( host, &timep ) )
- sv_setnv( ST(0), (double)timep );
-
- Netconfig *
- getnetconfigent(netid="udp")
- char *netid
-
- MODULE = RPC PACKAGE = NetconfigPtr PREFIX = rpcb_
-
- void
- rpcb_DESTROY(netconf)
- Netconfig *netconf
- CODE:
- printf("NetconfigPtr::DESTROY\n");
- free( netconf );
-
-File C<typemap>: Custom typemap for RPC.xs.
-
- TYPEMAP
- Netconfig * T_PTROBJ
-
-File C<RPC.pm>: Perl module for the RPC extension.
-
- package RPC;
-
- require Exporter;
- require DynaLoader;
- @ISA = qw(Exporter DynaLoader);
- @EXPORT = qw(rpcb_gettime getnetconfigent);
-
- bootstrap RPC;
- 1;
-
-File C<rpctest.pl>: Perl test program for the RPC extension.
-
- use RPC;
-
- $netconf = getnetconfigent();
- $a = rpcb_gettime();
- print "time = $a\n";
- print "netconf = $netconf\n";
-
- $netconf = getnetconfigent("tcp");
- $a = rpcb_gettime("poplar");
- print "time = $a\n";
- print "netconf = $netconf\n";
-
-
-=head1 XS VERSION
-
-This document covers features supported by C<xsubpp> 1.935.
-
-=head1 AUTHOR
-
-Originally written by Dean Roehrich <F<roehrich at cray.com>>.
-
-Maintained since 1996 by The Perl Porters <F<perlbug at perl.org>>.
Deleted: trunk/contrib/perl/pod/perlxstut.pod
===================================================================
--- trunk/contrib/perl/pod/perlxstut.pod 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/perlxstut.pod 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1370 +0,0 @@
-=head1 NAME
-
-perlXStut - Tutorial for writing XSUBs
-
-=head1 DESCRIPTION
-
-This tutorial will educate the reader on the steps involved in creating
-a Perl extension. The reader is assumed to have access to L<perlguts>,
-L<perlapi> and L<perlxs>.
-
-This tutorial starts with very simple examples and becomes more complex,
-with each new example adding new features. Certain concepts may not be
-completely explained until later in the tutorial in order to slowly ease
-the reader into building extensions.
-
-This tutorial was written from a Unix point of view. Where I know them
-to be otherwise different for other platforms (e.g. Win32), I will list
-them. If you find something that was missed, please let me know.
-
-=head1 SPECIAL NOTES
-
-=head2 make
-
-This tutorial assumes that the make program that Perl is configured to
-use is called C<make>. Instead of running "make" in the examples that
-follow, you may have to substitute whatever make program Perl has been
-configured to use. Running B<perl -V:make> should tell you what it is.
-
-=head2 Version caveat
-
-When writing a Perl extension for general consumption, one should expect that
-the extension will be used with versions of Perl different from the
-version available on your machine. Since you are reading this document,
-the version of Perl on your machine is probably 5.005 or later, but the users
-of your extension may have more ancient versions.
-
-To understand what kinds of incompatibilities one may expect, and in the rare
-case that the version of Perl on your machine is older than this document,
-see the section on "Troubleshooting these Examples" for more information.
-
-If your extension uses some features of Perl which are not available on older
-releases of Perl, your users would appreciate an early meaningful warning.
-You would probably put this information into the F<README> file, but nowadays
-installation of extensions may be performed automatically, guided by F<CPAN.pm>
-module or other tools.
-
-In MakeMaker-based installations, F<Makefile.PL> provides the earliest
-opportunity to perform version checks. One can put something like this
-in F<Makefile.PL> for this purpose:
-
- eval { require 5.007 }
- or die <<EOD;
- ############
- ### This module uses frobnication framework which is not available before
- ### version 5.007 of Perl. Upgrade your Perl before installing Kara::Mba.
- ############
- EOD
-
-=head2 Dynamic Loading versus Static Loading
-
-It is commonly thought that if a system does not have the capability to
-dynamically load a library, you cannot build XSUBs. This is incorrect.
-You I<can> build them, but you must link the XSUBs subroutines with the
-rest of Perl, creating a new executable. This situation is similar to
-Perl 4.
-
-This tutorial can still be used on such a system. The XSUB build mechanism
-will check the system and build a dynamically-loadable library if possible,
-or else a static library and then, optionally, a new statically-linked
-executable with that static library linked in.
-
-Should you wish to build a statically-linked executable on a system which
-can dynamically load libraries, you may, in all the following examples,
-where the command "C<make>" with no arguments is executed, run the command
-"C<make perl>" instead.
-
-If you have generated such a statically-linked executable by choice, then
-instead of saying "C<make test>", you should say "C<make test_static>".
-On systems that cannot build dynamically-loadable libraries at all, simply
-saying "C<make test>" is sufficient.
-
-=head1 TUTORIAL
-
-Now let's go on with the show!
-
-=head2 EXAMPLE 1
-
-Our first extension will be very simple. When we call the routine in the
-extension, it will print out a well-known message and return.
-
-Run "C<h2xs -A -n Mytest>". This creates a directory named Mytest,
-possibly under ext/ if that directory exists in the current working
-directory. Several files will be created under the Mytest dir, including
-MANIFEST, Makefile.PL, lib/Mytest.pm, Mytest.xs, t/Mytest.t, and Changes.
-
-The MANIFEST file contains the names of all the files just created in the
-Mytest directory.
-
-The file Makefile.PL should look something like this:
-
- use ExtUtils::MakeMaker;
- # See lib/ExtUtils/MakeMaker.pm for details of how to influence
- # the contents of the Makefile that is written.
- WriteMakefile(
- NAME => 'Mytest',
- VERSION_FROM => 'Mytest.pm', # finds $VERSION
- LIBS => [''], # e.g., '-lm'
- DEFINE => '', # e.g., '-DHAVE_SOMETHING'
- INC => '', # e.g., '-I/usr/include/other'
- );
-
-The file Mytest.pm should start with something like this:
-
- package Mytest;
-
- use 5.008008;
- use strict;
- use warnings;
-
- require Exporter;
-
- our @ISA = qw(Exporter);
- our %EXPORT_TAGS = ( 'all' => [ qw(
-
- ) ] );
-
- our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
-
- our @EXPORT = qw(
-
- );
-
- our $VERSION = '0.01';
-
- require XSLoader;
- XSLoader::load('Mytest', $VERSION);
-
- # Preloaded methods go here.
-
- 1;
- __END__
- # Below is the stub of documentation for your module. You better edit it!
-
-The rest of the .pm file contains sample code for providing documentation for
-the extension.
-
-Finally, the Mytest.xs file should look something like this:
-
- #include "EXTERN.h"
- #include "perl.h"
- #include "XSUB.h"
-
- #include "ppport.h"
-
- MODULE = Mytest PACKAGE = Mytest
-
-Let's edit the .xs file by adding this to the end of the file:
-
- void
- hello()
- CODE:
- printf("Hello, world!\n");
-
-It is okay for the lines starting at the "CODE:" line to not be indented.
-However, for readability purposes, it is suggested that you indent CODE:
-one level and the lines following one more level.
-
-Now we'll run "C<perl Makefile.PL>". This will create a real Makefile,
-which make needs. Its output looks something like:
-
- % perl Makefile.PL
- Checking if your kit is complete...
- Looks good
- Writing Makefile for Mytest
- %
-
-Now, running make will produce output that looks something like this (some
-long lines have been shortened for clarity and some extraneous lines have
-been deleted):
-
- % make
- cp lib/Mytest.pm blib/lib/Mytest.pm
- perl xsubpp -typemap typemap Mytest.xs > Mytest.xsc && mv Mytest.xsc Mytest.c
- Please specify prototyping behavior for Mytest.xs (see perlxs manual)
- cc -c Mytest.c
- Running Mkbootstrap for Mytest ()
- chmod 644 Mytest.bs
- rm -f blib/arch/auto/Mytest/Mytest.so
- cc -shared -L/usr/local/lib Mytest.o -o blib/arch/auto/Mytest/Mytest.so \
- \
-
- chmod 755 blib/arch/auto/Mytest/Mytest.so
- cp Mytest.bs blib/arch/auto/Mytest/Mytest.bs
- chmod 644 blib/arch/auto/Mytest/Mytest.bs
- Manifying blib/man3/Mytest.3pm
- %
-
-You can safely ignore the line about "prototyping behavior" - it is
-explained in L<perlxs/"The PROTOTYPES: Keyword">.
-
-Perl has its own special way of easily writing test scripts, but for this
-example only, we'll create our own test script. Create a file called hello
-that looks like this:
-
- #! /opt/perl5/bin/perl
-
- use ExtUtils::testlib;
-
- use Mytest;
-
- Mytest::hello();
-
-Now we make the script executable (C<chmod +x hello>), run the script
-and we should see the following output:
-
- % ./hello
- Hello, world!
- %
-
-=head2 EXAMPLE 2
-
-Now let's add to our extension a subroutine that will take a single numeric
-argument as input and return 1 if the number is even or 0 if the number
-is odd.
-
-Add the following to the end of Mytest.xs:
-
- int
- is_even(input)
- int input
- CODE:
- RETVAL = (input % 2 == 0);
- OUTPUT:
- RETVAL
-
-There does not need to be whitespace at the start of the "C<int input>"
-line, but it is useful for improving readability. Placing a semi-colon at
-the end of that line is also optional. Any amount and kind of whitespace
-may be placed between the "C<int>" and "C<input>".
-
-Now re-run make to rebuild our new shared library.
-
-Now perform the same steps as before, generating a Makefile from the
-Makefile.PL file, and running make.
-
-In order to test that our extension works, we now need to look at the
-file Mytest.t. This file is set up to imitate the same kind of testing
-structure that Perl itself has. Within the test script, you perform a
-number of tests to confirm the behavior of the extension, printing "ok"
-when the test is correct, "not ok" when it is not.
-
- use Test::More tests => 4;
- BEGIN { use_ok('Mytest') };
-
- #########################
-
- # Insert your test code below, the Test::More module is use()ed here so read
- # its man page ( perldoc Test::More ) for help writing this test script.
-
- is(&Mytest::is_even(0), 1);
- is(&Mytest::is_even(1), 0);
- is(&Mytest::is_even(2), 1);
-
-We will be calling the test script through the command "C<make test>". You
-should see output that looks something like this:
-
- %make test
- PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
- t/Mytest....ok
- All tests successful.
- Files=1, Tests=4, 0 wallclock secs ( 0.03 cusr + 0.00 csys = 0.03 CPU)
- %
-
-=head2 What has gone on?
-
-The program h2xs is the starting point for creating extensions. In later
-examples we'll see how we can use h2xs to read header files and generate
-templates to connect to C routines.
-
-h2xs creates a number of files in the extension directory. The file
-Makefile.PL is a perl script which will generate a true Makefile to build
-the extension. We'll take a closer look at it later.
-
-The .pm and .xs files contain the meat of the extension. The .xs file holds
-the C routines that make up the extension. The .pm file contains routines
-that tell Perl how to load your extension.
-
-Generating the Makefile and running C<make> created a directory called blib
-(which stands for "build library") in the current working directory. This
-directory will contain the shared library that we will build. Once we have
-tested it, we can install it into its final location.
-
-Invoking the test script via "C<make test>" did something very important.
-It invoked perl with all those C<-I> arguments so that it could find the
-various files that are part of the extension. It is I<very> important that
-while you are still testing extensions that you use "C<make test>". If you
-try to run the test script all by itself, you will get a fatal error.
-Another reason it is important to use "C<make test>" to run your test
-script is that if you are testing an upgrade to an already-existing version,
-using "C<make test>" ensures that you will test your new extension, not the
-already-existing version.
-
-When Perl sees a C<use extension;>, it searches for a file with the same name
-as the C<use>'d extension that has a .pm suffix. If that file cannot be found,
-Perl dies with a fatal error. The default search path is contained in the
-C<@INC> array.
-
-In our case, Mytest.pm tells perl that it will need the Exporter and Dynamic
-Loader extensions. It then sets the C<@ISA> and C<@EXPORT> arrays and the
-C<$VERSION> scalar; finally it tells perl to bootstrap the module. Perl
-will call its dynamic loader routine (if there is one) and load the shared
-library.
-
-The two arrays C<@ISA> and C<@EXPORT> are very important. The C<@ISA>
-array contains a list of other packages in which to search for methods (or
-subroutines) that do not exist in the current package. This is usually
-only important for object-oriented extensions (which we will talk about
-much later), and so usually doesn't need to be modified.
-
-The C<@EXPORT> array tells Perl which of the extension's variables and
-subroutines should be placed into the calling package's namespace. Because
-you don't know if the user has already used your variable and subroutine
-names, it's vitally important to carefully select what to export. Do I<not>
-export method or variable names I<by default> without a good reason.
-
-As a general rule, if the module is trying to be object-oriented then don't
-export anything. If it's just a collection of functions and variables, then
-you can export them via another array, called C<@EXPORT_OK>. This array
-does not automatically place its subroutine and variable names into the
-namespace unless the user specifically requests that this be done.
-
-See L<perlmod> for more information.
-
-The C<$VERSION> variable is used to ensure that the .pm file and the shared
-library are "in sync" with each other. Any time you make changes to
-the .pm or .xs files, you should increment the value of this variable.
-
-=head2 Writing good test scripts
-
-The importance of writing good test scripts cannot be over-emphasized. You
-should closely follow the "ok/not ok" style that Perl itself uses, so that
-it is very easy and unambiguous to determine the outcome of each test case.
-When you find and fix a bug, make sure you add a test case for it.
-
-By running "C<make test>", you ensure that your Mytest.t script runs and uses
-the correct version of your extension. If you have many test cases,
-save your test files in the "t" directory and use the suffix ".t".
-When you run "C<make test>", all of these test files will be executed.
-
-=head2 EXAMPLE 3
-
-Our third extension will take one argument as its input, round off that
-value, and set the I<argument> to the rounded value.
-
-Add the following to the end of Mytest.xs:
-
- void
- round(arg)
- double arg
- CODE:
- if (arg > 0.0) {
- arg = floor(arg + 0.5);
- } else if (arg < 0.0) {
- arg = ceil(arg - 0.5);
- } else {
- arg = 0.0;
- }
- OUTPUT:
- arg
-
-Edit the Makefile.PL file so that the corresponding line looks like this:
-
- 'LIBS' => ['-lm'], # e.g., '-lm'
-
-Generate the Makefile and run make. Change the test number in Mytest.t to
-"9" and add the following tests:
-
- $i = -1.5; &Mytest::round($i); is( $i, -2.0 );
- $i = -1.1; &Mytest::round($i); is( $i, -1.0 );
- $i = 0.0; &Mytest::round($i); is( $i, 0.0 );
- $i = 0.5; &Mytest::round($i); is( $i, 1.0 );
- $i = 1.2; &Mytest::round($i); is( $i, 1.0 );
-
-Running "C<make test>" should now print out that all nine tests are okay.
-
-Notice that in these new test cases, the argument passed to round was a
-scalar variable. You might be wondering if you can round a constant or
-literal. To see what happens, temporarily add the following line to Mytest.t:
-
- &Mytest::round(3);
-
-Run "C<make test>" and notice that Perl dies with a fatal error. Perl won't
-let you change the value of constants!
-
-=head2 What's new here?
-
-=over 4
-
-=item *
-
-We've made some changes to Makefile.PL. In this case, we've specified an
-extra library to be linked into the extension's shared library, the math
-library libm in this case. We'll talk later about how to write XSUBs that
-can call every routine in a library.
-
-=item *
-
-The value of the function is not being passed back as the function's return
-value, but by changing the value of the variable that was passed into the
-function. You might have guessed that when you saw that the return value
-of round is of type "void".
-
-=back
-
-=head2 Input and Output Parameters
-
-You specify the parameters that will be passed into the XSUB on the line(s)
-after you declare the function's return value and name. Each input parameter
-line starts with optional whitespace, and may have an optional terminating
-semicolon.
-
-The list of output parameters occurs at the very end of the function, just
-after the OUTPUT: directive. The use of RETVAL tells Perl that you
-wish to send this value back as the return value of the XSUB function. In
-Example 3, we wanted the "return value" placed in the original variable
-which we passed in, so we listed it (and not RETVAL) in the OUTPUT: section.
-
-=head2 The XSUBPP Program
-
-The B<xsubpp> program takes the XS code in the .xs file and translates it into
-C code, placing it in a file whose suffix is .c. The C code created makes
-heavy use of the C functions within Perl.
-
-=head2 The TYPEMAP file
-
-The B<xsubpp> program uses rules to convert from Perl's data types (scalar,
-array, etc.) to C's data types (int, char, etc.). These rules are stored
-in the typemap file ($PERLLIB/ExtUtils/typemap). This file is split into
-three parts.
-
-The first section maps various C data types to a name, which corresponds
-somewhat with the various Perl types. The second section contains C code
-which B<xsubpp> uses to handle input parameters. The third section contains
-C code which B<xsubpp> uses to handle output parameters.
-
-Let's take a look at a portion of the .c file created for our extension.
-The file name is Mytest.c:
-
- XS(XS_Mytest_round)
- {
- dXSARGS;
- if (items != 1)
- Perl_croak(aTHX_ "Usage: Mytest::round(arg)");
- PERL_UNUSED_VAR(cv); /* -W */
- {
- double arg = (double)SvNV(ST(0)); /* XXXXX */
- if (arg > 0.0) {
- arg = floor(arg + 0.5);
- } else if (arg < 0.0) {
- arg = ceil(arg - 0.5);
- } else {
- arg = 0.0;
- }
- sv_setnv(ST(0), (double)arg); /* XXXXX */
- SvSETMAGIC(ST(0));
- }
- XSRETURN_EMPTY;
- }
-
-Notice the two lines commented with "XXXXX". If you check the first section
-of the typemap file, you'll see that doubles are of type T_DOUBLE. In the
-INPUT section, an argument that is T_DOUBLE is assigned to the variable
-arg by calling the routine SvNV on something, then casting it to double,
-then assigned to the variable arg. Similarly, in the OUTPUT section,
-once arg has its final value, it is passed to the sv_setnv function to
-be passed back to the calling subroutine. These two functions are explained
-in L<perlguts>; we'll talk more later about what that "ST(0)" means in the
-section on the argument stack.
-
-=head2 Warning about Output Arguments
-
-In general, it's not a good idea to write extensions that modify their input
-parameters, as in Example 3. Instead, you should probably return multiple
-values in an array and let the caller handle them (we'll do this in a later
-example). However, in order to better accommodate calling pre-existing C
-routines, which often do modify their input parameters, this behavior is
-tolerated.
-
-=head2 EXAMPLE 4
-
-In this example, we'll now begin to write XSUBs that will interact with
-pre-defined C libraries. To begin with, we will build a small library of
-our own, then let h2xs write our .pm and .xs files for us.
-
-Create a new directory called Mytest2 at the same level as the directory
-Mytest. In the Mytest2 directory, create another directory called mylib,
-and cd into that directory.
-
-Here we'll create some files that will generate a test library. These will
-include a C source file and a header file. We'll also create a Makefile.PL
-in this directory. Then we'll make sure that running make at the Mytest2
-level will automatically run this Makefile.PL file and the resulting Makefile.
-
-In the mylib directory, create a file mylib.h that looks like this:
-
- #define TESTVAL 4
-
- extern double foo(int, long, const char*);
-
-Also create a file mylib.c that looks like this:
-
- #include <stdlib.h>
- #include "./mylib.h"
-
- double
- foo(int a, long b, const char *c)
- {
- return (a + b + atof(c) + TESTVAL);
- }
-
-And finally create a file Makefile.PL that looks like this:
-
- use ExtUtils::MakeMaker;
- $Verbose = 1;
- WriteMakefile(
- NAME => 'Mytest2::mylib',
- SKIP => [qw(all static static_lib dynamic dynamic_lib)],
- clean => {'FILES' => 'libmylib$(LIB_EXT)'},
- );
-
-
- sub MY::top_targets {
- '
- all :: static
-
- pure_all :: static
-
- static :: libmylib$(LIB_EXT)
-
- libmylib$(LIB_EXT): $(O_FILES)
- $(AR) cr libmylib$(LIB_EXT) $(O_FILES)
- $(RANLIB) libmylib$(LIB_EXT)
-
- ';
- }
-
-Make sure you use a tab and not spaces on the lines beginning with "$(AR)"
-and "$(RANLIB)". Make will not function properly if you use spaces.
-It has also been reported that the "cr" argument to $(AR) is unnecessary
-on Win32 systems.
-
-We will now create the main top-level Mytest2 files. Change to the directory
-above Mytest2 and run the following command:
-
- % h2xs -O -n Mytest2 ./Mytest2/mylib/mylib.h
-
-This will print out a warning about overwriting Mytest2, but that's okay.
-Our files are stored in Mytest2/mylib, and will be untouched.
-
-The normal Makefile.PL that h2xs generates doesn't know about the mylib
-directory. We need to tell it that there is a subdirectory and that we
-will be generating a library in it. Let's add the argument MYEXTLIB to
-the WriteMakefile call so that it looks like this:
-
- WriteMakefile(
- 'NAME' => 'Mytest2',
- 'VERSION_FROM' => 'Mytest2.pm', # finds $VERSION
- 'LIBS' => [''], # e.g., '-lm'
- 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING'
- 'INC' => '', # e.g., '-I/usr/include/other'
- 'MYEXTLIB' => 'mylib/libmylib$(LIB_EXT)',
- );
-
-and then at the end add a subroutine (which will override the pre-existing
-subroutine). Remember to use a tab character to indent the line beginning
-with "cd"!
-
- sub MY::postamble {
- '
- $(MYEXTLIB): mylib/Makefile
- cd mylib && $(MAKE) $(PASSTHRU)
- ';
- }
-
-Let's also fix the MANIFEST file so that it accurately reflects the contents
-of our extension. The single line that says "mylib" should be replaced by
-the following three lines:
-
- mylib/Makefile.PL
- mylib/mylib.c
- mylib/mylib.h
-
-To keep our namespace nice and unpolluted, edit the .pm file and change
-the variable C<@EXPORT> to C<@EXPORT_OK>. Finally, in the
-.xs file, edit the #include line to read:
-
- #include "mylib/mylib.h"
-
-And also add the following function definition to the end of the .xs file:
-
- double
- foo(a,b,c)
- int a
- long b
- const char * c
- OUTPUT:
- RETVAL
-
-Now we also need to create a typemap file because the default Perl doesn't
-currently support the const char * type. Create a file called typemap in
-the Mytest2 directory and place the following in it:
-
- const char * T_PV
-
-Now run perl on the top-level Makefile.PL. Notice that it also created a
-Makefile in the mylib directory. Run make and watch that it does cd into
-the mylib directory and run make in there as well.
-
-Now edit the Mytest2.t script and change the number of tests to "4",
-and add the following lines to the end of the script:
-
- is( &Mytest2::foo(1, 2, "Hello, world!"), 7 );
- is( &Mytest2::foo(1, 2, "0.0"), 7 );
- ok( abs(&Mytest2::foo(0, 0, "-3.4") - 0.6) <= 0.01 );
-
-(When dealing with floating-point comparisons, it is best to not check for
-equality, but rather that the difference between the expected and actual
-result is below a certain amount (called epsilon) which is 0.01 in this case)
-
-Run "C<make test>" and all should be well. There are some warnings on missing tests
-for the Mytest2::mylib extension, but you can ignore them.
-
-=head2 What has happened here?
-
-Unlike previous examples, we've now run h2xs on a real include file. This
-has caused some extra goodies to appear in both the .pm and .xs files.
-
-=over 4
-
-=item *
-
-In the .xs file, there's now a #include directive with the absolute path to
-the mylib.h header file. We changed this to a relative path so that we
-could move the extension directory if we wanted to.
-
-=item *
-
-There's now some new C code that's been added to the .xs file. The purpose
-of the C<constant> routine is to make the values that are #define'd in the
-header file accessible by the Perl script (by calling either C<TESTVAL> or
-C<&Mytest2::TESTVAL>). There's also some XS code to allow calls to the
-C<constant> routine.
-
-=item *
-
-The .pm file originally exported the name C<TESTVAL> in the C<@EXPORT> array.
-This could lead to name clashes. A good rule of thumb is that if the #define
-is only going to be used by the C routines themselves, and not by the user,
-they should be removed from the C<@EXPORT> array. Alternately, if you don't
-mind using the "fully qualified name" of a variable, you could move most
-or all of the items from the C<@EXPORT> array into the C<@EXPORT_OK> array.
-
-=item *
-
-If our include file had contained #include directives, these would not have
-been processed by h2xs. There is no good solution to this right now.
-
-=item *
-
-We've also told Perl about the library that we built in the mylib
-subdirectory. That required only the addition of the C<MYEXTLIB> variable
-to the WriteMakefile call and the replacement of the postamble subroutine
-to cd into the subdirectory and run make. The Makefile.PL for the
-library is a bit more complicated, but not excessively so. Again we
-replaced the postamble subroutine to insert our own code. This code
-simply specified that the library to be created here was a static archive
-library (as opposed to a dynamically loadable library) and provided the
-commands to build it.
-
-=back
-
-=head2 Anatomy of .xs file
-
-The .xs file of L<"EXAMPLE 4"> contained some new elements. To understand
-the meaning of these elements, pay attention to the line which reads
-
- MODULE = Mytest2 PACKAGE = Mytest2
-
-Anything before this line is plain C code which describes which headers
-to include, and defines some convenience functions. No translations are
-performed on this part, apart from having embedded POD documentation
-skipped over (see L<perlpod>) it goes into the generated output C file as is.
-
-Anything after this line is the description of XSUB functions.
-These descriptions are translated by B<xsubpp> into C code which
-implements these functions using Perl calling conventions, and which
-makes these functions visible from Perl interpreter.
-
-Pay a special attention to the function C<constant>. This name appears
-twice in the generated .xs file: once in the first part, as a static C
-function, then another time in the second part, when an XSUB interface to
-this static C function is defined.
-
-This is quite typical for .xs files: usually the .xs file provides
-an interface to an existing C function. Then this C function is defined
-somewhere (either in an external library, or in the first part of .xs file),
-and a Perl interface to this function (i.e. "Perl glue") is described in the
-second part of .xs file. The situation in L<"EXAMPLE 1">, L<"EXAMPLE 2">,
-and L<"EXAMPLE 3">, when all the work is done inside the "Perl glue", is
-somewhat of an exception rather than the rule.
-
-=head2 Getting the fat out of XSUBs
-
-In L<"EXAMPLE 4"> the second part of .xs file contained the following
-description of an XSUB:
-
- double
- foo(a,b,c)
- int a
- long b
- const char * c
- OUTPUT:
- RETVAL
-
-Note that in contrast with L<"EXAMPLE 1">, L<"EXAMPLE 2"> and L<"EXAMPLE 3">,
-this description does not contain the actual I<code> for what is done
-during a call to Perl function foo(). To understand what is going
-on here, one can add a CODE section to this XSUB:
-
- double
- foo(a,b,c)
- int a
- long b
- const char * c
- CODE:
- RETVAL = foo(a,b,c);
- OUTPUT:
- RETVAL
-
-However, these two XSUBs provide almost identical generated C code: B<xsubpp>
-compiler is smart enough to figure out the C<CODE:> section from the first
-two lines of the description of XSUB. What about C<OUTPUT:> section? In
-fact, that is absolutely the same! The C<OUTPUT:> section can be removed
-as well, I<as far as C<CODE:> section or C<PPCODE:> section> is not
-specified: B<xsubpp> can see that it needs to generate a function call
-section, and will autogenerate the OUTPUT section too. Thus one can
-shortcut the XSUB to become:
-
- double
- foo(a,b,c)
- int a
- long b
- const char * c
-
-Can we do the same with an XSUB
-
- int
- is_even(input)
- int input
- CODE:
- RETVAL = (input % 2 == 0);
- OUTPUT:
- RETVAL
-
-of L<"EXAMPLE 2">? To do this, one needs to define a C function C<int
-is_even(int input)>. As we saw in L<Anatomy of .xs file>, a proper place
-for this definition is in the first part of .xs file. In fact a C function
-
- int
- is_even(int arg)
- {
- return (arg % 2 == 0);
- }
-
-is probably overkill for this. Something as simple as a C<#define> will
-do too:
-
- #define is_even(arg) ((arg) % 2 == 0)
-
-After having this in the first part of .xs file, the "Perl glue" part becomes
-as simple as
-
- int
- is_even(input)
- int input
-
-This technique of separation of the glue part from the workhorse part has
-obvious tradeoffs: if you want to change a Perl interface, you need to
-change two places in your code. However, it removes a lot of clutter,
-and makes the workhorse part independent from idiosyncrasies of Perl calling
-convention. (In fact, there is nothing Perl-specific in the above description,
-a different version of B<xsubpp> might have translated this to TCL glue or
-Python glue as well.)
-
-=head2 More about XSUB arguments
-
-With the completion of Example 4, we now have an easy way to simulate some
-real-life libraries whose interfaces may not be the cleanest in the world.
-We shall now continue with a discussion of the arguments passed to the
-B<xsubpp> compiler.
-
-When you specify arguments to routines in the .xs file, you are really
-passing three pieces of information for each argument listed. The first
-piece is the order of that argument relative to the others (first, second,
-etc). The second is the type of argument, and consists of the type
-declaration of the argument (e.g., int, char*, etc). The third piece is
-the calling convention for the argument in the call to the library function.
-
-While Perl passes arguments to functions by reference,
-C passes arguments by value; to implement a C function which modifies data
-of one of the "arguments", the actual argument of this C function would be
-a pointer to the data. Thus two C functions with declarations
-
- int string_length(char *s);
- int upper_case_char(char *cp);
-
-may have completely different semantics: the first one may inspect an array
-of chars pointed by s, and the second one may immediately dereference C<cp>
-and manipulate C<*cp> only (using the return value as, say, a success
-indicator). From Perl one would use these functions in
-a completely different manner.
-
-One conveys this info to B<xsubpp> by replacing C<*> before the
-argument by C<&>. C<&> means that the argument should be passed to a library
-function by its address. The above two function may be XSUB-ified as
-
- int
- string_length(s)
- char * s
-
- int
- upper_case_char(cp)
- char &cp
-
-For example, consider:
-
- int
- foo(a,b)
- char &a
- char * b
-
-The first Perl argument to this function would be treated as a char and assigned
-to the variable a, and its address would be passed into the function foo.
-The second Perl argument would be treated as a string pointer and assigned to the
-variable b. The I<value> of b would be passed into the function foo. The
-actual call to the function foo that B<xsubpp> generates would look like this:
-
- foo(&a, b);
-
-B<xsubpp> will parse the following function argument lists identically:
-
- char &a
- char&a
- char & a
-
-However, to help ease understanding, it is suggested that you place a "&"
-next to the variable name and away from the variable type), and place a
-"*" near the variable type, but away from the variable name (as in the
-call to foo above). By doing so, it is easy to understand exactly what
-will be passed to the C function; it will be whatever is in the "last
-column".
-
-You should take great pains to try to pass the function the type of variable
-it wants, when possible. It will save you a lot of trouble in the long run.
-
-=head2 The Argument Stack
-
-If we look at any of the C code generated by any of the examples except
-example 1, you will notice a number of references to ST(n), where n is
-usually 0. "ST" is actually a macro that points to the n'th argument
-on the argument stack. ST(0) is thus the first argument on the stack and
-therefore the first argument passed to the XSUB, ST(1) is the second
-argument, and so on.
-
-When you list the arguments to the XSUB in the .xs file, that tells B<xsubpp>
-which argument corresponds to which of the argument stack (i.e., the first
-one listed is the first argument, and so on). You invite disaster if you
-do not list them in the same order as the function expects them.
-
-The actual values on the argument stack are pointers to the values passed
-in. When an argument is listed as being an OUTPUT value, its corresponding
-value on the stack (i.e., ST(0) if it was the first argument) is changed.
-You can verify this by looking at the C code generated for Example 3.
-The code for the round() XSUB routine contains lines that look like this:
-
- double arg = (double)SvNV(ST(0));
- /* Round the contents of the variable arg */
- sv_setnv(ST(0), (double)arg);
-
-The arg variable is initially set by taking the value from ST(0), then is
-stored back into ST(0) at the end of the routine.
-
-XSUBs are also allowed to return lists, not just scalars. This must be
-done by manipulating stack values ST(0), ST(1), etc, in a subtly
-different way. See L<perlxs> for details.
-
-XSUBs are also allowed to avoid automatic conversion of Perl function arguments
-to C function arguments. See L<perlxs> for details. Some people prefer
-manual conversion by inspecting C<ST(i)> even in the cases when automatic
-conversion will do, arguing that this makes the logic of an XSUB call clearer.
-Compare with L<"Getting the fat out of XSUBs"> for a similar tradeoff of
-a complete separation of "Perl glue" and "workhorse" parts of an XSUB.
-
-While experts may argue about these idioms, a novice to Perl guts may
-prefer a way which is as little Perl-guts-specific as possible, meaning
-automatic conversion and automatic call generation, as in
-L<"Getting the fat out of XSUBs">. This approach has the additional
-benefit of protecting the XSUB writer from future changes to the Perl API.
-
-=head2 Extending your Extension
-
-Sometimes you might want to provide some extra methods or subroutines
-to assist in making the interface between Perl and your extension simpler
-or easier to understand. These routines should live in the .pm file.
-Whether they are automatically loaded when the extension itself is loaded
-or only loaded when called depends on where in the .pm file the subroutine
-definition is placed. You can also consult L<AutoLoader> for an alternate
-way to store and load your extra subroutines.
-
-=head2 Documenting your Extension
-
-There is absolutely no excuse for not documenting your extension.
-Documentation belongs in the .pm file. This file will be fed to pod2man,
-and the embedded documentation will be converted to the manpage format,
-then placed in the blib directory. It will be copied to Perl's
-manpage directory when the extension is installed.
-
-You may intersperse documentation and Perl code within the .pm file.
-In fact, if you want to use method autoloading, you must do this,
-as the comment inside the .pm file explains.
-
-See L<perlpod> for more information about the pod format.
-
-=head2 Installing your Extension
-
-Once your extension is complete and passes all its tests, installing it
-is quite simple: you simply run "make install". You will either need
-to have write permission into the directories where Perl is installed,
-or ask your system administrator to run the make for you.
-
-Alternately, you can specify the exact directory to place the extension's
-files by placing a "PREFIX=/destination/directory" after the make install.
-(or in between the make and install if you have a brain-dead version of make).
-This can be very useful if you are building an extension that will eventually
-be distributed to multiple systems. You can then just archive the files in
-the destination directory and distribute them to your destination systems.
-
-=head2 EXAMPLE 5
-
-In this example, we'll do some more work with the argument stack. The
-previous examples have all returned only a single value. We'll now
-create an extension that returns an array.
-
-This extension is very Unix-oriented (struct statfs and the statfs system
-call). If you are not running on a Unix system, you can substitute for
-statfs any other function that returns multiple values, you can hard-code
-values to be returned to the caller (although this will be a bit harder
-to test the error case), or you can simply not do this example. If you
-change the XSUB, be sure to fix the test cases to match the changes.
-
-Return to the Mytest directory and add the following code to the end of
-Mytest.xs:
-
- void
- statfs(path)
- char * path
- INIT:
- int i;
- struct statfs buf;
-
- PPCODE:
- i = statfs(path, &buf);
- if (i == 0) {
- XPUSHs(sv_2mortal(newSVnv(buf.f_bavail)));
- XPUSHs(sv_2mortal(newSVnv(buf.f_bfree)));
- XPUSHs(sv_2mortal(newSVnv(buf.f_blocks)));
- XPUSHs(sv_2mortal(newSVnv(buf.f_bsize)));
- XPUSHs(sv_2mortal(newSVnv(buf.f_ffree)));
- XPUSHs(sv_2mortal(newSVnv(buf.f_files)));
- XPUSHs(sv_2mortal(newSVnv(buf.f_type)));
- } else {
- XPUSHs(sv_2mortal(newSVnv(errno)));
- }
-
-You'll also need to add the following code to the top of the .xs file, just
-after the include of "XSUB.h":
-
- #include <sys/vfs.h>
-
-Also add the following code segment to Mytest.t while incrementing the "9"
-tests to "11":
-
- @a = &Mytest::statfs("/blech");
- ok( scalar(@a) == 1 && $a[0] == 2 );
- @a = &Mytest::statfs("/");
- is( scalar(@a), 7 );
-
-=head2 New Things in this Example
-
-This example added quite a few new concepts. We'll take them one at a time.
-
-=over 4
-
-=item *
-
-The INIT: directive contains code that will be placed immediately after
-the argument stack is decoded. C does not allow variable declarations at
-arbitrary locations inside a function,
-so this is usually the best way to declare local variables needed by the XSUB.
-(Alternatively, one could put the whole C<PPCODE:> section into braces, and
-put these declarations on top.)
-
-=item *
-
-This routine also returns a different number of arguments depending on the
-success or failure of the call to statfs. If there is an error, the error
-number is returned as a single-element array. If the call is successful,
-then a 7-element array is returned. Since only one argument is passed into
-this function, we need room on the stack to hold the 7 values which may be
-returned.
-
-We do this by using the PPCODE: directive, rather than the CODE: directive.
-This tells B<xsubpp> that we will be managing the return values that will be
-put on the argument stack by ourselves.
-
-=item *
-
-When we want to place values to be returned to the caller onto the stack,
-we use the series of macros that begin with "XPUSH". There are five
-different versions, for placing integers, unsigned integers, doubles,
-strings, and Perl scalars on the stack. In our example, we placed a
-Perl scalar onto the stack. (In fact this is the only macro which
-can be used to return multiple values.)
-
-The XPUSH* macros will automatically extend the return stack to prevent
-it from being overrun. You push values onto the stack in the order you
-want them seen by the calling program.
-
-=item *
-
-The values pushed onto the return stack of the XSUB are actually mortal SV's.
-They are made mortal so that once the values are copied by the calling
-program, the SV's that held the returned values can be deallocated.
-If they were not mortal, then they would continue to exist after the XSUB
-routine returned, but would not be accessible. This is a memory leak.
-
-=item *
-
-If we were interested in performance, not in code compactness, in the success
-branch we would not use C<XPUSHs> macros, but C<PUSHs> macros, and would
-pre-extend the stack before pushing the return values:
-
- EXTEND(SP, 7);
-
-The tradeoff is that one needs to calculate the number of return values
-in advance (though overextending the stack will not typically hurt
-anything but memory consumption).
-
-Similarly, in the failure branch we could use C<PUSHs> I<without> extending
-the stack: the Perl function reference comes to an XSUB on the stack, thus
-the stack is I<always> large enough to take one return value.
-
-=back
-
-=head2 EXAMPLE 6
-
-In this example, we will accept a reference to an array as an input
-parameter, and return a reference to an array of hashes. This will
-demonstrate manipulation of complex Perl data types from an XSUB.
-
-This extension is somewhat contrived. It is based on the code in
-the previous example. It calls the statfs function multiple times,
-accepting a reference to an array of filenames as input, and returning
-a reference to an array of hashes containing the data for each of the
-filesystems.
-
-Return to the Mytest directory and add the following code to the end of
-Mytest.xs:
-
- SV *
- multi_statfs(paths)
- SV * paths
- INIT:
- AV * results;
- I32 numpaths = 0;
- int i, n;
- struct statfs buf;
-
- if ((!SvROK(paths))
- || (SvTYPE(SvRV(paths)) != SVt_PVAV)
- || ((numpaths = av_len((AV *)SvRV(paths))) < 0))
- {
- XSRETURN_UNDEF;
- }
- results = (AV *)sv_2mortal((SV *)newAV());
- CODE:
- for (n = 0; n <= numpaths; n++) {
- HV * rh;
- STRLEN l;
- char * fn = SvPV(*av_fetch((AV *)SvRV(paths), n, 0), l);
-
- i = statfs(fn, &buf);
- if (i != 0) {
- av_push(results, newSVnv(errno));
- continue;
- }
-
- rh = (HV *)sv_2mortal((SV *)newHV());
-
- hv_store(rh, "f_bavail", 8, newSVnv(buf.f_bavail), 0);
- hv_store(rh, "f_bfree", 7, newSVnv(buf.f_bfree), 0);
- hv_store(rh, "f_blocks", 8, newSVnv(buf.f_blocks), 0);
- hv_store(rh, "f_bsize", 7, newSVnv(buf.f_bsize), 0);
- hv_store(rh, "f_ffree", 7, newSVnv(buf.f_ffree), 0);
- hv_store(rh, "f_files", 7, newSVnv(buf.f_files), 0);
- hv_store(rh, "f_type", 6, newSVnv(buf.f_type), 0);
-
- av_push(results, newRV((SV *)rh));
- }
- RETVAL = newRV((SV *)results);
- OUTPUT:
- RETVAL
-
-And add the following code to Mytest.t, while incrementing the "11"
-tests to "13":
-
- $results = Mytest::multi_statfs([ '/', '/blech' ]);
- ok( ref $results->[0] );
- ok( ! ref $results->[1] );
-
-=head2 New Things in this Example
-
-There are a number of new concepts introduced here, described below:
-
-=over 4
-
-=item *
-
-This function does not use a typemap. Instead, we declare it as accepting
-one SV* (scalar) parameter, and returning an SV* value, and we take care of
-populating these scalars within the code. Because we are only returning
-one value, we don't need a C<PPCODE:> directive - instead, we use C<CODE:>
-and C<OUTPUT:> directives.
-
-=item *
-
-When dealing with references, it is important to handle them with caution.
-The C<INIT:> block first checks that
-C<SvROK> returns true, which indicates that paths is a valid reference. It
-then verifies that the object referenced by paths is an array, using C<SvRV>
-to dereference paths, and C<SvTYPE> to discover its type. As an added test,
-it checks that the array referenced by paths is non-empty, using the C<av_len>
-function (which returns -1 if the array is empty). The XSRETURN_UNDEF macro
-is used to abort the XSUB and return the undefined value whenever all three of
-these conditions are not met.
-
-=item *
-
-We manipulate several arrays in this XSUB. Note that an array is represented
-internally by an AV* pointer. The functions and macros for manipulating
-arrays are similar to the functions in Perl: C<av_len> returns the highest
-index in an AV*, much like $#array; C<av_fetch> fetches a single scalar value
-from an array, given its index; C<av_push> pushes a scalar value onto the
-end of the array, automatically extending the array as necessary.
-
-Specifically, we read pathnames one at a time from the input array, and
-store the results in an output array (results) in the same order. If
-statfs fails, the element pushed onto the return array is the value of
-errno after the failure. If statfs succeeds, though, the value pushed
-onto the return array is a reference to a hash containing some of the
-information in the statfs structure.
-
-As with the return stack, it would be possible (and a small performance win)
-to pre-extend the return array before pushing data into it, since we know
-how many elements we will return:
-
- av_extend(results, numpaths);
-
-=item *
-
-We are performing only one hash operation in this function, which is storing
-a new scalar under a key using C<hv_store>. A hash is represented by an HV*
-pointer. Like arrays, the functions for manipulating hashes from an XSUB
-mirror the functionality available from Perl. See L<perlguts> and L<perlapi>
-for details.
-
-=item *
-
-To create a reference, we use the C<newRV> function. Note that you can
-cast an AV* or an HV* to type SV* in this case (and many others). This
-allows you to take references to arrays, hashes and scalars with the same
-function. Conversely, the C<SvRV> function always returns an SV*, which may
-need to be cast to the appropriate type if it is something other than a
-scalar (check with C<SvTYPE>).
-
-=item *
-
-At this point, xsubpp is doing very little work - the differences between
-Mytest.xs and Mytest.c are minimal.
-
-=back
-
-=head2 EXAMPLE 7 (Coming Soon)
-
-XPUSH args AND set RETVAL AND assign return value to array
-
-=head2 EXAMPLE 8 (Coming Soon)
-
-Setting $!
-
-=head2 EXAMPLE 9 Passing open files to XSes
-
-You would think passing files to an XS is difficult, with all the
-typeglobs and stuff. Well, it isn't.
-
-Suppose that for some strange reason we need a wrapper around the
-standard C library function C<fputs()>. This is all we need:
-
- #define PERLIO_NOT_STDIO 0
- #include "EXTERN.h"
- #include "perl.h"
- #include "XSUB.h"
-
- #include <stdio.h>
-
- int
- fputs(s, stream)
- char * s
- FILE * stream
-
-The real work is done in the standard typemap.
-
-B<But> you loose all the fine stuff done by the perlio layers. This
-calls the stdio function C<fputs()>, which knows nothing about them.
-
-The standard typemap offers three variants of PerlIO *:
-C<InputStream> (T_IN), C<InOutStream> (T_INOUT) and C<OutputStream>
-(T_OUT). A bare C<PerlIO *> is considered a T_INOUT. If it matters
-in your code (see below for why it might) #define or typedef
-one of the specific names and use that as the argument or result
-type in your XS file.
-
-The standard typemap does not contain PerlIO * before perl 5.7,
-but it has the three stream variants. Using a PerlIO * directly
-is not backwards compatible unless you provide your own typemap.
-
-For streams coming I<from> perl the main difference is that
-C<OutputStream> will get the output PerlIO * - which may make
-a difference on a socket. Like in our example...
-
-For streams being handed I<to> perl a new file handle is created
-(i.e. a reference to a new glob) and associated with the PerlIO *
-provided. If the read/write state of the PerlIO * is not correct then you
-may get errors or warnings from when the file handle is used.
-So if you opened the PerlIO * as "w" it should really be an
-C<OutputStream> if open as "r" it should be an C<InputStream>.
-
-Now, suppose you want to use perlio layers in your XS. We'll use the
-perlio C<PerlIO_puts()> function as an example.
-
-In the C part of the XS file (above the first MODULE line) you
-have
-
- #define OutputStream PerlIO *
- or
- typedef PerlIO * OutputStream;
-
-
-And this is the XS code:
-
- int
- perlioputs(s, stream)
- char * s
- OutputStream stream
- CODE:
- RETVAL = PerlIO_puts(stream, s);
- OUTPUT:
- RETVAL
-
-We have to use a C<CODE> section because C<PerlIO_puts()> has the arguments
-reversed compared to C<fputs()>, and we want to keep the arguments the same.
-
-Wanting to explore this thoroughly, we want to use the stdio C<fputs()>
-on a PerlIO *. This means we have to ask the perlio system for a stdio
-C<FILE *>:
-
- int
- perliofputs(s, stream)
- char * s
- OutputStream stream
- PREINIT:
- FILE *fp = PerlIO_findFILE(stream);
- CODE:
- if (fp != (FILE*) 0) {
- RETVAL = fputs(s, fp);
- } else {
- RETVAL = -1;
- }
- OUTPUT:
- RETVAL
-
-Note: C<PerlIO_findFILE()> will search the layers for a stdio
-layer. If it can't find one, it will call C<PerlIO_exportFILE()> to
-generate a new stdio C<FILE>. Please only call C<PerlIO_exportFILE()> if
-you want a I<new> C<FILE>. It will generate one on each call and push a
-new stdio layer. So don't call it repeatedly on the same
-file. C<PerlIO_findFILE()> will retrieve the stdio layer once it has been
-generated by C<PerlIO_exportFILE()>.
-
-This applies to the perlio system only. For versions before 5.7,
-C<PerlIO_exportFILE()> is equivalent to C<PerlIO_findFILE()>.
-
-=head2 Troubleshooting these Examples
-
-As mentioned at the top of this document, if you are having problems with
-these example extensions, you might see if any of these help you.
-
-=over 4
-
-=item *
-
-In versions of 5.002 prior to the gamma version, the test script in Example
-1 will not function properly. You need to change the "use lib" line to
-read:
-
- use lib './blib';
-
-=item *
-
-In versions of 5.002 prior to version 5.002b1h, the test.pl file was not
-automatically created by h2xs. This means that you cannot say "make test"
-to run the test script. You will need to add the following line before the
-"use extension" statement:
-
- use lib './blib';
-
-=item *
-
-In versions 5.000 and 5.001, instead of using the above line, you will need
-to use the following line:
-
- BEGIN { unshift(@INC, "./blib") }
-
-=item *
-
-This document assumes that the executable named "perl" is Perl version 5.
-Some systems may have installed Perl version 5 as "perl5".
-
-=back
-
-=head1 See also
-
-For more information, consult L<perlguts>, L<perlapi>, L<perlxs>, L<perlmod>,
-and L<perlpod>.
-
-=head1 Author
-
-Jeff Okamoto <F<okamoto at corp.hp.com>>
-
-Reviewed and assisted by Dean Roehrich, Ilya Zakharevich, Andreas Koenig,
-and Tim Bunce.
-
-PerlIO material contributed by Lupe Christoph, with some clarification
-by Nick Ing-Simmons.
-
-Changes for h2xs as of Perl 5.8.x by Renee Baecker
-
-=head2 Last Changed
-
-2007/10/11
Deleted: trunk/contrib/perl/pod/pod2html.PL
===================================================================
--- trunk/contrib/perl/pod/pod2html.PL 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/pod2html.PL 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,183 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-=pod
-
-=head1 NAME
-
-pod2html - convert .pod files to .html files
-
-=head1 SYNOPSIS
-
- pod2html --help --htmlroot=<name> --infile=<name> --outfile=<name>
- --podpath=<name>:...:<name> --podroot=<name>
- --libpods=<name>:...:<name> --recurse --norecurse --verbose
- --index --noindex --title=<name>
-
-=head1 DESCRIPTION
-
-Converts files from pod format (see L<perlpod>) to HTML format.
-
-=head1 ARGUMENTS
-
-pod2html takes the following arguments:
-
-=over 4
-
-=item help
-
- --help
-
-Displays the usage message.
-
-=item htmlroot
-
- --htmlroot=name
-
-Sets the base URL for the HTML files. When cross-references are made,
-the HTML root is prepended to the URL.
-
-=item infile
-
- --infile=name
-
-Specify the pod file to convert. Input is taken from STDIN if no
-infile is specified.
-
-=item outfile
-
- --outfile=name
-
-Specify the HTML file to create. Output goes to STDOUT if no outfile
-is specified.
-
-=item podroot
-
- --podroot=name
-
-Specify the base directory for finding library pods.
-
-=item podpath
-
- --podpath=name:...:name
-
-Specify which subdirectories of the podroot contain pod files whose
-HTML converted forms can be linked-to in cross-references.
-
-=item libpods
-
- --libpods=name:...:name
-
-List of page names (eg, "perlfunc") which contain linkable C<=item>s.
-
-=item netscape
-
- --netscape
-
-Use Netscape HTML directives when applicable.
-
-=item nonetscape
-
- --nonetscape
-
-Do not use Netscape HTML directives (default).
-
-=item index
-
- --index
-
-Generate an index at the top of the HTML file (default behaviour).
-
-=item noindex
-
- --noindex
-
-Do not generate an index at the top of the HTML file.
-
-
-=item recurse
-
- --recurse
-
-Recurse into subdirectories specified in podpath (default behaviour).
-
-=item norecurse
-
- --norecurse
-
-Do not recurse into subdirectories specified in podpath.
-
-=item title
-
- --title=title
-
-Specify the title of the resulting HTML file.
-
-=item verbose
-
- --verbose
-
-Display progress messages.
-
-=back
-
-=head1 AUTHOR
-
-Tom Christiansen, E<lt>tchrist at perl.comE<gt>.
-
-=head1 BUGS
-
-See L<Pod::Html> for a list of known bugs in the translator.
-
-=head1 SEE ALSO
-
-L<perlpod>, L<Pod::Html>
-
-=head1 COPYRIGHT
-
-This program is distributed under the Artistic License.
-
-=cut
-
-use Pod::Html;
-
-pod2html @ARGV;
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
Deleted: trunk/contrib/perl/pod/pod2latex.PL
===================================================================
--- trunk/contrib/perl/pod/pod2latex.PL 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/pod2latex.PL 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,421 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-# pod2latex conversion program
-
-use strict;
-use Pod::LaTeX;
-use Pod::Find qw/ pod_find /;
-use Pod::Usage;
-use Getopt::Long;
-use File::Basename;
-use Symbol;
-
-my $VERSION = "1.01";
-
-# return the entire contents of a text file
-# whose name is given as argument
-sub _get {
- my $fn = shift;
- my $infh = gensym;
- open $infh, $fn
- or die "Could not open file $fn: $!\n";
- local $/;
- return <$infh>;
-}
-
-# Read command line arguments
-
-my %options = (
- "help" => 0,
- "man" => 0,
- "sections" => [],
- "full" => 0,
- "out" => undef,
- "verbose" => 0,
- "modify" => 0,
- "h1level" => 1, # section is equivalent to H1
- "preamble" => [],
- "postamble" => [],
- );
-# "prefile" is just like "preamble", but the argument
-# comes from the file named by the argument
-$options{"prefile"} = sub { shift; push @{$options{"preamble"}}, _get(shift) };
-# the same between "postfile" and "postamble"
-$options{"postfile"} = sub { shift; push @{$options{"postamble"}}, _get(shift) };
-
-GetOptions(\%options,
- "help",
- "man",
- "verbose",
- "full",
- "sections=s@",
- "out=s",
- "modify",
- "h1level=i",
- "preamble=s@",
- "postamble=s@",
- "prefile=s",
- "postfile=s"
- ) || pod2usage(2);
-
-pod2usage(1) if ($options{help});
-pod2usage(-verbose => 2) if ($options{man});
-
-
-# Read all the files from the command line
-my @files = @ARGV;
-
-# Now find which ones are real pods and convert
-# directories to their contents.
-
-# Extract the pods from each arg since some of them might
-# be directories
-# This is not as efficient as using pod_find to search through
-# everything at once but it allows us to preserve the order
-# supplied by the user
-
-my @pods;
-foreach my $arg (@files) {
- my %pods = pod_find($arg);
- push(@pods, sort keys %pods);
-}
-
-# Abort if nothing to do
-if ($#pods == -1) {
- warn "None of the supplied Pod files actually exist\n";
- exit;
-}
-
-# Only want to override the preamble and postamble if we have
-# been given values.
-my %User;
-$User{UserPreamble} = join("\n", @{$options{'preamble'}})
- if ($options{preamble} && @{$options{preamble}});
-$User{UserPostamble} = join("\n", @{$options{'postamble'}})
- if ($options{postamble} && @{$options{postamble}});
-
-
-
-# If $options{'out'} is set we are processing to a single output file
-my $multi_documents;
-if (exists $options{'out'} && defined $options{'out'}) {
- $multi_documents = 0;
-} else {
- $multi_documents = 1;
-}
-
-# If the output file is not specified it is assumed that
-# a single output file is required per input file using
-# a .tex extension rather than any exisiting extension
-
-if ($multi_documents) {
-
- # Case where we just generate one input per output
-
- foreach my $pod (@pods) {
-
- if (-f $pod) {
-
- my $output = $pod;
- $output = basename($output, '.pm', '.pod','.pl') . '.tex';
-
- # Create a new parser object
- my $parser = new Pod::LaTeX(
- AddPreamble => $options{'full'},
- AddPostamble => $options{'full'},
- MakeIndex => $options{'full'},
- TableOfContents => $options{'full'},
- ReplaceNAMEwithSection => $options{'modify'},
- UniqueLabels => $options{'modify'},
- Head1Level => $options{'h1level'},
- LevelNoNum => $options{'h1level'} + 1,
- %User,
- );
-
- # Select sections if supplied
- $parser->select(@{ $options{'sections'}})
- if @{$options{'sections'}};
-
- # Derive the input file from the output file
- $parser->parse_from_file($pod, $output);
-
- print "Written output to $output\n" if $options{'verbose'};
-
- } else {
- warn "File $pod not found\n";
- }
-
- }
-} else {
-
- # Case where we want everything to be in a single document
-
- # Need to open the output file ourselves
- my $output = $options{'out'};
- $output .= '.tex' unless $output =~ /\.tex$/;
-
- # Use auto-vivified file handle in perl 5.6
- my $outfh = gensym;
- open ($outfh, ">$output") || die "Could not open output file: $!\n";
-
- # Flag to indicate whether we have converted at least one file
- # indicates how many files have been converted
- my $converted = 0;
-
- # Loop over the input files
- foreach my $pod (@pods) {
-
- if (-f $pod) {
-
- warn "Converting $pod\n" if $options{'verbose'};
-
- # Open the file (need the handle)
- # Use auto-vivified handle in perl 5.6
- my $podfh = gensym;
- open ($podfh, "<$pod") || die "Could not open pod file $pod: $!\n";
-
- # if this is the first file to be converted we may want to add
- # a preamble (controlled by command line option)
- my $preamble = 0;
- $preamble = 1 if ($converted == 0 && $options{'full'});
-
- # if this is the last file to be converted may want to add
- # a postamble (controlled by command line option)
- # relies on a previous pass to check existence of all pods we
- # are converting.
- my $postamble = ( ($converted == $#pods && $options{'full'}) ? 1 : 0 );
-
- # Open parser object
- # May want to start with a preamble for the first one and
- # end with an index for the last
- my $parser = new Pod::LaTeX(
- MakeIndex => $options{'full'},
- TableOfContents => $preamble,
- ReplaceNAMEwithSection => $options{'modify'},
- UniqueLabels => $options{'modify'},
- StartWithNewPage => $options{'full'},
- AddPreamble => $preamble,
- AddPostamble => $postamble,
- Head1Level => $options{'h1level'},
- LevelNoNum => $options{'h1level'} + 1,
- %User
- );
-
- # Store the file name for error messages
- # This is a kluge that breaks the data hiding of the object
- $parser->{_INFILE} = $pod;
-
- # Select sections if supplied
- $parser->select(@{ $options{'sections'}})
- if @{$options{'sections'}};
-
- # Parse it
- $parser->parse_from_filehandle($podfh, $outfh);
-
- # We have converted at least one file
- $converted++;
-
- } else {
- warn "File $pod not found\n";
- }
-
- }
-
- # Should unlink the file if we didn't convert anything!
- # dont check for return status of unlink
- # since there is not a lot to be done if the unlink failed
- # and the program does not rely upon it.
- unlink "$output" unless $converted;
-
- # If verbose
- warn "Converted $converted files\n" if $options{'verbose'};
-
-}
-
-exit;
-
-__END__
-
-=head1 NAME
-
-pod2latex - convert pod documentation to latex format
-
-=head1 SYNOPSIS
-
- pod2latex *.pm
-
- pod2latex -out mytex.tex *.pod
-
- pod2latex -full -sections 'DESCRIPTION|NAME' SomeDir
-
- pod2latex -prefile h.tex -postfile t.tex my.pod
-
-=head1 DESCRIPTION
-
-C<pod2latex> is a program to convert POD format documentation
-(L<perlpod>) into latex. It can process multiple input documents at a
-time and either generate a latex file per input document or a single
-combined output file.
-
-=head1 OPTIONS AND ARGUMENTS
-
-This section describes the supported command line options. Minimum
-matching is supported.
-
-=over 4
-
-=item B<-out>
-
-Name of the output file to be used. If there are multiple input pods
-it is assumed that the intention is to write all translated output
-into a single file. C<.tex> is appended if not present. If the
-argument is not supplied, a single document will be created for each
-input file.
-
-=item B<-full>
-
-Creates a complete C<latex> file that can be processed immediately
-(unless C<=for/=begin> directives are used that rely on extra packages).
-Table of contents and index generation commands are included in the
-wrapper C<latex> code.
-
-=item B<-sections>
-
-Specify pod sections to include (or remove if negated) in the
-translation. See L<Pod::Select/"SECTION SPECIFICATIONS"> for the
-format to use for I<section-spec>. This option may be given multiple
-times on the command line.This is identical to the similar option in
-the C<podselect()> command.
-
-=item B<-modify>
-
-This option causes the output C<latex> to be slightly
-modified from the input pod such that when a C<=head1 NAME>
-is encountered a section is created containing the actual
-pod name (rather than B<NAME>) and all subsequent C<=head1>
-directives are treated as subsections. This has the advantage
-that the description of a module will be in its own section
-which is helpful for including module descriptions in documentation.
-Also forces C<latex> label and index entries to be prefixed by the
-name of the module.
-
-=item B<-h1level>
-
-Specifies the C<latex> section that is equivalent to a C<H1> pod
-directive. This is an integer between 0 and 5 with 0 equivalent to a
-C<latex> chapter, 1 equivalent to a C<latex> section etc. The default
-is 1 (C<H1> equivalent to a latex section).
-
-=item B<-help>
-
-Print a brief help message and exit.
-
-=item B<-man>
-
-Print the manual page and exit.
-
-=item B<-verbose>
-
-Print information messages as each document is processed.
-
-=item B<-preamble>
-
-A user-supplied preamble for the LaTeX code. Multiple values
-are supported and appended in order separated by "\n".
-See B<-prefile> for reading the preamble from a file.
-
-=item B<-postamble>
-
-A user supplied postamble for the LaTeX code. Multiple values
-are supported and appended in order separated by "\n".
-See B<-postfile> for reading the postamble from a file.
-
-=item B<-prefile>
-
-A user-supplied preamble for the LaTeX code to be read from the
-named file. Multiple values are supported and appended in
-order. See B<-preamble>.
-
-=item B<-postfile>
-
-A user-supplied postamble for the LaTeX code to be read from the
-named file. Multiple values are supported and appended in
-order. See B<-postamble>.
-
-=back
-
-=head1 BUGS
-
-Known bugs are:
-
-=over 4
-
-=item *
-
-Cross references between documents are not resolved when multiple
-pod documents are converted into a single output C<latex> file.
-
-=item *
-
-Functions and variables are not automatically recognized
-and they will therefore not be marked up in any special way
-unless instructed by an explicit pod command.
-
-=back
-
-=head1 SEE ALSO
-
-L<Pod::LaTeX>
-
-=head1 AUTHOR
-
-Tim Jenness E<lt>tjenness at cpan.orgE<gt>
-
-This program is free software; you can redistribute it
-and/or modify it under the same terms as Perl itself.
-
-Copyright (C) 2000, 2003, 2004 Tim Jenness. All Rights Reserved.
-
-=cut
-
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
Deleted: trunk/contrib/perl/pod/pod2man.PL
===================================================================
--- trunk/contrib/perl/pod/pod2man.PL 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/pod2man.PL 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,588 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-# pod2man -- Convert POD data to formatted *roff input.
-#
-# Copyright 1999, 2000, 2001, 2004, 2006, 2008 Russ Allbery <rra at stanford.edu>
-#
-# This program is free software; you may redistribute it and/or modify it
-# under the same terms as Perl itself.
-
-require 5.004;
-
-use Getopt::Long qw(GetOptions);
-use Pod::Man ();
-use Pod::Usage qw(pod2usage);
-
-use strict;
-
-# Silence -w warnings.
-use vars qw($running_under_some_shell);
-
-# Insert -- into @ARGV before any single dash argument to hide it from
-# Getopt::Long; we want to interpret it as meaning stdin.
-my $stdin;
- at ARGV = map { $_ eq '-' && !$stdin++ ? ('--', $_) : $_ } @ARGV;
-
-# Parse our options, trying to retain backward compatibility with pod2man but
-# allowing short forms as well. --lax is currently ignored.
-my %options;
-$options{errors} = 'pod';
-Getopt::Long::config ('bundling_override');
-GetOptions (\%options, 'center|c=s', 'date|d=s', 'fixed=s', 'fixedbold=s',
- 'fixeditalic=s', 'fixedbolditalic=s', 'help|h', 'lax|l',
- 'name|n=s', 'official|o', 'quotes|q=s', 'release|r:s',
- 'section|s=s', 'stderr', 'verbose|v', 'utf8|u') or exit 1;
-pod2usage (0) if $options{help};
-
-# Official sets --center, but don't override things explicitly set.
-if ($options{official} && !defined $options{center}) {
- $options{center} = 'Perl Programmers Reference Guide';
-}
-
-# Verbose is only our flag, not a Pod::Man flag.
-my $verbose = $options{verbose};
-delete $options{verbose};
-
-# This isn't a valid Pod::Man option and is only accepted for backward
-# compatibility.
-delete $options{lax};
-
-# Initialize and run the formatter, pulling a pair of input and output off at
-# a time.
-my $parser = Pod::Man->new (%options);
-my @files;
-do {
- @files = splice (@ARGV, 0, 2);
- print " $files[1]\n" if $verbose;
- $parser->parse_from_file (@files);
-} while (@ARGV);
-
-__END__
-
-=head1 NAME
-
-pod2man - Convert POD data to formatted *roff input
-
-=for stopwords
-en em --stderr stderr --utf8 UTF-8 overdo markup MT-LEVEL Allbery Solaris
-URL troff troff-specific formatters uppercased Christiansen
-
-=head1 SYNOPSIS
-
-pod2man [B<--center>=I<string>] [B<--date>=I<string>]
- [B<--fixed>=I<font>] [B<--fixedbold>=I<font>] [B<--fixeditalic>=I<font>]
- [B<--fixedbolditalic>=I<font>] [B<--name>=I<name>] [B<--official>]
- [B<--quotes>=I<quotes>] [B<--release>[=I<version>]]
- [B<--section>=I<manext>] [B<--stderr>] [B<--utf8>] [B<--verbose>]
- [I<input> [I<output>] ...]
-
-pod2man B<--help>
-
-=head1 DESCRIPTION
-
-B<pod2man> is a front-end for Pod::Man, using it to generate *roff input
-from POD source. The resulting *roff code is suitable for display on a
-terminal using nroff(1), normally via man(1), or printing using troff(1).
-
-I<input> is the file to read for POD source (the POD can be embedded in
-code). If I<input> isn't given, it defaults to C<STDIN>. I<output>, if
-given, is the file to which to write the formatted output. If I<output>
-isn't given, the formatted output is written to C<STDOUT>. Several POD
-files can be processed in the same B<pod2man> invocation (saving module
-load and compile times) by providing multiple pairs of I<input> and
-I<output> files on the command line.
-
-B<--section>, B<--release>, B<--center>, B<--date>, and B<--official> can
-be used to set the headers and footers to use; if not given, Pod::Man will
-assume various defaults. See below or L<Pod::Man> for details.
-
-B<pod2man> assumes that your *roff formatters have a fixed-width font
-named C<CW>. If yours is called something else (like C<CR>), use
-B<--fixed> to specify it. This generally only matters for troff output
-for printing. Similarly, you can set the fonts used for bold, italic, and
-bold italic fixed-width output.
-
-Besides the obvious pod conversions, Pod::Man, and therefore pod2man also
-takes care of formatting func(), func(n), and simple variable references
-like $foo or @bar so you don't have to use code escapes for them; complex
-expressions like C<$fred{'stuff'}> will still need to be escaped, though.
-It also translates dashes that aren't used as hyphens into en dashes, makes
-long dashes--like this--into proper em dashes, fixes "paired quotes," and
-takes care of several other troff-specific tweaks. See L<Pod::Man> for
-complete information.
-
-=head1 OPTIONS
-
-=over 4
-
-=item B<-c> I<string>, B<--center>=I<string>
-
-Sets the centered page header to I<string>. The default is "User
-Contributed Perl Documentation", but also see B<--official> below.
-
-=item B<-d> I<string>, B<--date>=I<string>
-
-Set the left-hand footer string to this value. By default, the modification
-date of the input file will be used, or the current date if input comes from
-C<STDIN>.
-
-=item B<--fixed>=I<font>
-
-The fixed-width font to use for verbatim text and code. Defaults to
-C<CW>. Some systems may want C<CR> instead. Only matters for troff(1)
-output.
-
-=item B<--fixedbold>=I<font>
-
-Bold version of the fixed-width font. Defaults to C<CB>. Only matters
-for troff(1) output.
-
-=item B<--fixeditalic>=I<font>
-
-Italic version of the fixed-width font (actually, something of a misnomer,
-since most fixed-width fonts only have an oblique version, not an italic
-version). Defaults to C<CI>. Only matters for troff(1) output.
-
-=item B<--fixedbolditalic>=I<font>
-
-Bold italic (probably actually oblique) version of the fixed-width font.
-Pod::Man doesn't assume you have this, and defaults to C<CB>. Some
-systems (such as Solaris) have this font available as C<CX>. Only matters
-for troff(1) output.
-
-=item B<-h>, B<--help>
-
-Print out usage information.
-
-=item B<-l>, B<--lax>
-
-No longer used. B<pod2man> used to check its input for validity as a
-manual page, but this should now be done by L<podchecker(1)> instead.
-Accepted for backward compatibility; this option no longer does anything.
-
-=item B<-n> I<name>, B<--name>=I<name>
-
-Set the name of the manual page to I<name>. Without this option, the manual
-name is set to the uppercased base name of the file being converted unless
-the manual section is 3, in which case the path is parsed to see if it is a
-Perl module path. If it is, a path like C<.../lib/Pod/Man.pm> is converted
-into a name like C<Pod::Man>. This option, if given, overrides any
-automatic determination of the name.
-
-Note that this option is probably not useful when converting multiple POD
-files at once. The convention for Unix man pages for commands is for the
-man page title to be in all-uppercase even if the command isn't.
-
-=item B<-o>, B<--official>
-
-Set the default header to indicate that this page is part of the standard
-Perl release, if B<--center> is not also given.
-
-=item B<-q> I<quotes>, B<--quotes>=I<quotes>
-
-Sets the quote marks used to surround CE<lt>> text to I<quotes>. If
-I<quotes> is a single character, it is used as both the left and right
-quote; if I<quotes> is two characters, the first character is used as the
-left quote and the second as the right quoted; and if I<quotes> is four
-characters, the first two are used as the left quote and the second two as
-the right quote.
-
-I<quotes> may also be set to the special value C<none>, in which case no
-quote marks are added around CE<lt>> text (but the font is still changed for
-troff output).
-
-=item B<-r>, B<--release>
-
-Set the centered footer. By default, this is the version of Perl you run
-B<pod2man> under. Note that some system an macro sets assume that the
-centered footer will be a modification date and will prepend something like
-"Last modified: "; if this is the case, you may want to set B<--release> to
-the last modified date and B<--date> to the version number.
-
-=item B<-s>, B<--section>
-
-Set the section for the C<.TH> macro. The standard section numbering
-convention is to use 1 for user commands, 2 for system calls, 3 for
-functions, 4 for devices, 5 for file formats, 6 for games, 7 for
-miscellaneous information, and 8 for administrator commands. There is a lot
-of variation here, however; some systems (like Solaris) use 4 for file
-formats, 5 for miscellaneous information, and 7 for devices. Still others
-use 1m instead of 8, or some mix of both. About the only section numbers
-that are reliably consistent are 1, 2, and 3.
-
-By default, section 1 will be used unless the file ends in C<.pm>, in
-which case section 3 will be selected.
-
-=item B<--stderr>
-
-By default, B<pod2man> puts any errors detected in the POD input in a POD
-ERRORS section in the output manual page. If B<--stderr> is given, errors
-are sent to standard error instead and the POD ERRORS section is
-suppressed.
-
-=item B<-u>, B<--utf8>
-
-By default, B<pod2man> produces the most conservative possible *roff
-output to try to ensure that it will work with as many different *roff
-implementations as possible. Many *roff implementations cannot handle
-non-ASCII characters, so this means all non-ASCII characters are converted
-either to a *roff escape sequence that tries to create a properly accented
-character (at least for troff output) or to C<X>.
-
-This option says to instead output literal UTF-8 characters. If your
-*roff implementation can handle it, this is the best output format to use
-and avoids corruption of documents containing non-ASCII characters.
-However, be warned that *roff source with literal UTF-8 characters is not
-supported by many implementations and may even result in segfaults and
-other bad behavior.
-
-Be aware that, when using this option, the input encoding of your POD
-source must be properly declared unless it is US-ASCII or Latin-1. POD
-input without an C<=encoding> command will be assumed to be in Latin-1,
-and if it's actually in UTF-8, the output will be double-encoded. See
-L<perlpod(1)> for more information on the C<=encoding> command.
-
-=item B<-v>, B<--verbose>
-
-Print out the name of each output file as it is being generated.
-
-=back
-
-=head1 DIAGNOSTICS
-
-If B<pod2man> fails with errors, see L<Pod::Man> and L<Pod::Simple> for
-information about what those errors might mean.
-
-=head1 EXAMPLES
-
- pod2man program > program.1
- pod2man SomeModule.pm /usr/perl/man/man3/SomeModule.3
- pod2man --section=7 note.pod > note.7
-
-If you would like to print out a lot of man page continuously, you probably
-want to set the C and D registers to set contiguous page numbering and
-even/odd paging, at least on some versions of man(7).
-
- troff -man -rC1 -rD1 perl.1 perldata.1 perlsyn.1 ...
-
-To get index entries on C<STDERR>, turn on the F register, as in:
-
- troff -man -rF1 perl.1
-
-The indexing merely outputs messages via C<.tm> for each major page,
-section, subsection, item, and any C<XE<lt>E<gt>> directives. See
-L<Pod::Man> for more details.
-
-=head1 BUGS
-
-Lots of this documentation is duplicated from L<Pod::Man>.
-
-=head1 NOTES
-
-For those not sure of the proper layout of a man page, here are some notes
-on writing a proper man page.
-
-The name of the program being documented is conventionally written in bold
-(using BE<lt>E<gt>) wherever it occurs, as are all program options.
-Arguments should be written in italics (IE<lt>E<gt>). Functions are
-traditionally written in italics; if you write a function as function(),
-Pod::Man will take care of this for you. Literal code or commands should
-be in CE<lt>E<gt>. References to other man pages should be in the form
-C<manpage(section)>, and Pod::Man will automatically format those
-appropriately. As an exception, it's traditional not to use this form when
-referring to module documentation; use C<LE<lt>Module::NameE<gt>> instead.
-
-References to other programs or functions are normally in the form of man
-page references so that cross-referencing tools can provide the user with
-links and the like. It's possible to overdo this, though, so be careful not
-to clutter your documentation with too much markup.
-
-The major headers should be set out using a C<=head1> directive, and are
-historically written in the rather startling ALL UPPER CASE format, although
-this is not mandatory. Minor headers may be included using C<=head2>, and
-are typically in mixed case.
-
-The standard sections of a manual page are:
-
-=over 4
-
-=item NAME
-
-Mandatory section; should be a comma-separated list of programs or functions
-documented by this POD page, such as:
-
- foo, bar - programs to do something
-
-Manual page indexers are often extremely picky about the format of this
-section, so don't put anything in it except this line. A single dash, and
-only a single dash, should separate the list of programs or functions from
-the description. Functions should not be qualified with C<()> or the like.
-The description should ideally fit on a single line, even if a man program
-replaces the dash with a few tabs.
-
-=item SYNOPSIS
-
-A short usage summary for programs and functions. This section is mandatory
-for section 3 pages.
-
-=item DESCRIPTION
-
-Extended description and discussion of the program or functions, or the body
-of the documentation for man pages that document something else. If
-particularly long, it's a good idea to break this up into subsections
-C<=head2> directives like:
-
- =head2 Normal Usage
-
- =head2 Advanced Features
-
- =head2 Writing Configuration Files
-
-or whatever is appropriate for your documentation.
-
-=item OPTIONS
-
-Detailed description of each of the command-line options taken by the
-program. This should be separate from the description for the use of things
-like L<Pod::Usage|Pod::Usage>. This is normally presented as a list, with
-each option as a separate C<=item>. The specific option string should be
-enclosed in BE<lt>E<gt>. Any values that the option takes should be
-enclosed in IE<lt>E<gt>. For example, the section for the option
-B<--section>=I<manext> would be introduced with:
-
- =item B<--section>=I<manext>
-
-Synonymous options (like both the short and long forms) are separated by a
-comma and a space on the same C<=item> line, or optionally listed as their
-own item with a reference to the canonical name. For example, since
-B<--section> can also be written as B<-s>, the above would be:
-
- =item B<-s> I<manext>, B<--section>=I<manext>
-
-(Writing the short option first is arguably easier to read, since the long
-option is long enough to draw the eye to it anyway and the short option can
-otherwise get lost in visual noise.)
-
-=item RETURN VALUE
-
-What the program or function returns, if successful. This section can be
-omitted for programs whose precise exit codes aren't important, provided
-they return 0 on success as is standard. It should always be present for
-functions.
-
-=item ERRORS
-
-Exceptions, error return codes, exit statuses, and errno settings.
-Typically used for function documentation; program documentation uses
-DIAGNOSTICS instead. The general rule of thumb is that errors printed to
-C<STDOUT> or C<STDERR> and intended for the end user are documented in
-DIAGNOSTICS while errors passed internal to the calling program and
-intended for other programmers are documented in ERRORS. When documenting
-a function that sets errno, a full list of the possible errno values
-should be given here.
-
-=item DIAGNOSTICS
-
-All possible messages the program can print out--and what they mean. You
-may wish to follow the same documentation style as the Perl documentation;
-see perldiag(1) for more details (and look at the POD source as well).
-
-If applicable, please include details on what the user should do to correct
-the error; documenting an error as indicating "the input buffer is too
-small" without telling the user how to increase the size of the input buffer
-(or at least telling them that it isn't possible) aren't very useful.
-
-=item EXAMPLES
-
-Give some example uses of the program or function. Don't skimp; users often
-find this the most useful part of the documentation. The examples are
-generally given as verbatim paragraphs.
-
-Don't just present an example without explaining what it does. Adding a
-short paragraph saying what the example will do can increase the value of
-the example immensely.
-
-=item ENVIRONMENT
-
-Environment variables that the program cares about, normally presented as a
-list using C<=over>, C<=item>, and C<=back>. For example:
-
- =over 6
-
- =item HOME
-
- Used to determine the user's home directory. F<.foorc> in this
- directory is read for configuration details, if it exists.
-
- =back
-
-Since environment variables are normally in all uppercase, no additional
-special formatting is generally needed; they're glaring enough as it is.
-
-=item FILES
-
-All files used by the program or function, normally presented as a list, and
-what it uses them for. File names should be enclosed in FE<lt>E<gt>. It's
-particularly important to document files that will be potentially modified.
-
-=item CAVEATS
-
-Things to take special care with, sometimes called WARNINGS.
-
-=item BUGS
-
-Things that are broken or just don't work quite right.
-
-=item RESTRICTIONS
-
-Bugs you don't plan to fix. :-)
-
-=item NOTES
-
-Miscellaneous commentary.
-
-=item AUTHOR
-
-Who wrote it (use AUTHORS for multiple people). Including your current
-e-mail address (or some e-mail address to which bug reports should be sent)
-so that users have a way of contacting you is a good idea. Remember that
-program documentation tends to roam the wild for far longer than you expect
-and pick an e-mail address that's likely to last if possible.
-
-=item HISTORY
-
-Programs derived from other sources sometimes have this, or you might keep
-a modification log here. If the log gets overly long or detailed,
-consider maintaining it in a separate file, though.
-
-=item COPYRIGHT AND LICENSE
-
-For copyright
-
- Copyright YEAR(s) by YOUR NAME(s)
-
-(No, (C) is not needed. No, "all rights reserved" is not needed.)
-
-For licensing the easiest way is to use the same licensing as Perl itself:
-
- This library is free software; you may redistribute it and/or modify
- it under the same terms as Perl itself.
-
-This makes it easy for people to use your module with Perl. Note that
-this licensing is neither an endorsement or a requirement, you are of
-course free to choose any licensing.
-
-=item SEE ALSO
-
-Other man pages to check out, like man(1), man(7), makewhatis(8), or
-catman(8). Normally a simple list of man pages separated by commas, or a
-paragraph giving the name of a reference work. Man page references, if they
-use the standard C<name(section)> form, don't have to be enclosed in
-LE<lt>E<gt> (although it's recommended), but other things in this section
-probably should be when appropriate.
-
-If the package has a mailing list, include a URL or subscription
-instructions here.
-
-If the package has a web site, include a URL here.
-
-=back
-
-In addition, some systems use CONFORMING TO to note conformance to relevant
-standards and MT-LEVEL to note safeness for use in threaded programs or
-signal handlers. These headings are primarily useful when documenting parts
-of a C library. Documentation of object-oriented libraries or modules may
-use CONSTRUCTORS and METHODS sections for detailed documentation of the
-parts of the library and save the DESCRIPTION section for an overview; other
-large modules may use FUNCTIONS for similar reasons. Some people use
-OVERVIEW to summarize the description if it's quite long.
-
-Section ordering varies, although NAME should I<always> be the first section
-(you'll break some man page systems otherwise), and NAME, SYNOPSIS,
-DESCRIPTION, and OPTIONS generally always occur first and in that order if
-present. In general, SEE ALSO, AUTHOR, and similar material should be left
-for last. Some systems also move WARNINGS and NOTES to last. The order
-given above should be reasonable for most purposes.
-
-Finally, as a general note, try not to use an excessive amount of markup.
-As documented here and in L<Pod::Man>, you can safely leave Perl variables,
-function names, man page references, and the like unadorned by markup and
-the POD translators will figure it out for you. This makes it much easier
-to later edit the documentation. Note that many existing translators
-(including this one currently) will do the wrong thing with e-mail addresses
-when wrapped in LE<lt>E<gt>, so don't do that.
-
-For additional information that may be more accurate for your specific
-system, see either L<man(5)> or L<man(7)> depending on your system manual
-section numbering conventions.
-
-=head1 SEE ALSO
-
-L<Pod::Man>, L<Pod::Simple>, L<man(1)>, L<nroff(1)>, L<perlpod(1)>,
-L<podchecker(1)>, L<troff(1)>, L<man(7)>
-
-The man page documenting the an macro set may be L<man(5)> instead of
-L<man(7)> on your system.
-
-The current version of this script is always available from its web site at
-L<http://www.eyrie.org/~eagle/software/podlators/>. It is also part of the
-Perl core distribution as of 5.6.0.
-
-=head1 AUTHOR
-
-Russ Allbery <rra at stanford.edu>, based I<very> heavily on the original
-B<pod2man> by Larry Wall and Tom Christiansen. Large portions of this
-documentation, particularly the sections on the anatomy of a proper man
-page, are taken from the B<pod2man> documentation by Tom.
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright 1999, 2000, 2001, 2004, 2006, 2008 Russ Allbery
-<rra at stanford.edu>.
-
-This program is free software; you may redistribute it and/or modify it
-under the same terms as Perl itself.
-
-=cut
-!NO!SUBS!
-#'# (cperl-mode)
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
Deleted: trunk/contrib/perl/pod/pod2text.PL
===================================================================
--- trunk/contrib/perl/pod/pod2text.PL 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/pod2text.PL 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,312 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-# pod2text -- Convert POD data to formatted ASCII text.
-#
-# Copyright 1999, 2000, 2001, 2004, 2006, 2008 Russ Allbery <rra at stanford.edu>
-#
-# This program is free software; you may redistribute it and/or modify it
-# under the same terms as Perl itself.
-#
-# The driver script for Pod::Text, Pod::Text::Termcap, and Pod::Text::Color,
-# invoked by perldoc -t among other things.
-
-require 5.004;
-
-use Getopt::Long qw(GetOptions);
-use Pod::Text ();
-use Pod::Usage qw(pod2usage);
-
-use strict;
-
-# Silence -w warnings.
-use vars qw($running_under_some_shell);
-
-# Take an initial pass through our options, looking for one of the form
-# -<number>. We turn that into -w <number> for compatibility with the
-# original pod2text script.
-for (my $i = 0; $i < @ARGV; $i++) {
- last if $ARGV[$i] =~ /^--$/;
- if ($ARGV[$i] =~ /^-(\d+)$/) {
- splice (@ARGV, $i++, 1, '-w', $1);
- }
-}
-
-# Insert -- into @ARGV before any single dash argument to hide it from
-# Getopt::Long; we want to interpret it as meaning stdin (which Pod::Simple
-# does correctly).
-my $stdin;
- at ARGV = map { $_ eq '-' && !$stdin++ ? ('--', $_) : $_ } @ARGV;
-
-# Parse our options. Use the same names as Pod::Text for simplicity, and
-# default to sentence boundaries turned off for compatibility.
-my %options;
-$options{sentence} = 0;
-Getopt::Long::config ('bundling');
-GetOptions (\%options, 'alt|a', 'code', 'color|c', 'help|h', 'indent|i=i',
- 'loose|l', 'margin|left-margin|m=i', 'overstrike|o',
- 'quotes|q=s', 'sentence|s', 'stderr', 'termcap|t', 'utf8|u',
- 'width|w=i')
- or exit 1;
-pod2usage (1) if $options{help};
-
-# Figure out what formatter we're going to use. -c overrides -t.
-my $formatter = 'Pod::Text';
-if ($options{color}) {
- $formatter = 'Pod::Text::Color';
- eval { require Term::ANSIColor };
- if ($@) { die "-c (--color) requires Term::ANSIColor be installed\n" }
- require Pod::Text::Color;
-} elsif ($options{termcap}) {
- $formatter = 'Pod::Text::Termcap';
- require Pod::Text::Termcap;
-} elsif ($options{overstrike}) {
- $formatter = 'Pod::Text::Overstrike';
- require Pod::Text::Overstrike;
-}
-delete @options{'color', 'termcap', 'overstrike'};
-
-# Initialize and run the formatter.
-my $parser = $formatter->new (%options);
-do {
- my ($input, $output) = splice (@ARGV, 0, 2);
- $parser->parse_from_file ($input, $output);
-} while (@ARGV);
-
-__END__
-
-=head1 NAME
-
-pod2text - Convert POD data to formatted ASCII text
-
-=for stopwords
--aclostu --alt --stderr Allbery --overstrike overstrike --termcap --utf8
-UTF-8
-
-=head1 SYNOPSIS
-
-pod2text [B<-aclostu>] [B<--code>] [B<-i> I<indent>] S<[B<-q> I<quotes>]>
- [B<--stderr>] S<[B<-w> I<width>]> [I<input> [I<output> ...]]
-
-pod2text B<-h>
-
-=head1 DESCRIPTION
-
-B<pod2text> is a front-end for Pod::Text and its subclasses. It uses them
-to generate formatted ASCII text from POD source. It can optionally use
-either termcap sequences or ANSI color escape sequences to format the text.
-
-I<input> is the file to read for POD source (the POD can be embedded in
-code). If I<input> isn't given, it defaults to C<STDIN>. I<output>, if
-given, is the file to which to write the formatted output. If I<output>
-isn't given, the formatted output is written to C<STDOUT>. Several POD
-files can be processed in the same B<pod2text> invocation (saving module
-load and compile times) by providing multiple pairs of I<input> and
-I<output> files on the command line.
-
-=head1 OPTIONS
-
-=over 4
-
-=item B<-a>, B<--alt>
-
-Use an alternate output format that, among other things, uses a different
-heading style and marks C<=item> entries with a colon in the left margin.
-
-=item B<--code>
-
-Include any non-POD text from the input file in the output as well. Useful
-for viewing code documented with POD blocks with the POD rendered and the
-code left intact.
-
-=item B<-c>, B<--color>
-
-Format the output with ANSI color escape sequences. Using this option
-requires that Term::ANSIColor be installed on your system.
-
-=item B<-i> I<indent>, B<--indent=>I<indent>
-
-Set the number of spaces to indent regular text, and the default indentation
-for C<=over> blocks. Defaults to 4 spaces if this option isn't given.
-
-=item B<-h>, B<--help>
-
-Print out usage information and exit.
-
-=item B<-l>, B<--loose>
-
-Print a blank line after a C<=head1> heading. Normally, no blank line is
-printed after C<=head1>, although one is still printed after C<=head2>,
-because this is the expected formatting for manual pages; if you're
-formatting arbitrary text documents, using this option is recommended.
-
-=item B<-m> I<width>, B<--left-margin>=I<width>, B<--margin>=I<width>
-
-The width of the left margin in spaces. Defaults to 0. This is the margin
-for all text, including headings, not the amount by which regular text is
-indented; for the latter, see B<-i> option.
-
-=item B<-o>, B<--overstrike>
-
-Format the output with overstrike printing. Bold text is rendered as
-character, backspace, character. Italics and file names are rendered as
-underscore, backspace, character. Many pagers, such as B<less>, know how
-to convert this to bold or underlined text.
-
-=item B<-q> I<quotes>, B<--quotes>=I<quotes>
-
-Sets the quote marks used to surround CE<lt>> text to I<quotes>. If
-I<quotes> is a single character, it is used as both the left and right
-quote; if I<quotes> is two characters, the first character is used as the
-left quote and the second as the right quoted; and if I<quotes> is four
-characters, the first two are used as the left quote and the second two as
-the right quote.
-
-I<quotes> may also be set to the special value C<none>, in which case no
-quote marks are added around CE<lt>> text.
-
-=item B<-s>, B<--sentence>
-
-Assume each sentence ends with two spaces and try to preserve that spacing.
-Without this option, all consecutive whitespace in non-verbatim paragraphs
-is compressed into a single space.
-
-=item B<--stderr>
-
-By default, B<pod2text> puts any errors detected in the POD input in a POD
-ERRORS section in the output manual page. If B<--stderr> is given, errors
-are sent to standard error instead and the POD ERRORS section is
-suppressed.
-
-=item B<-t>, B<--termcap>
-
-Try to determine the width of the screen and the bold and underline
-sequences for the terminal from termcap, and use that information in
-formatting the output. Output will be wrapped at two columns less than the
-width of your terminal device. Using this option requires that your system
-have a termcap file somewhere where Term::Cap can find it and requires that
-your system support termios. With this option, the output of B<pod2text>
-will contain terminal control sequences for your current terminal type.
-
-=item B<-u>, B<--utf8>
-
-By default, B<pod2text> tries to use the same output encoding as its input
-encoding (to be backward-compatible with older versions). This option
-says to instead force the output encoding to UTF-8.
-
-Be aware that, when using this option, the input encoding of your POD
-source must be properly declared unless it is US-ASCII or Latin-1. POD
-input without an C<=encoding> command will be assumed to be in Latin-1,
-and if it's actually in UTF-8, the output will be double-encoded. See
-L<perlpod(1)> for more information on the C<=encoding> command.
-
-=item B<-w>, B<--width=>I<width>, B<->I<width>
-
-The column at which to wrap text on the right-hand side. Defaults to 76,
-unless B<-t> is given, in which case it's two columns less than the width of
-your terminal device.
-
-=back
-
-=head1 DIAGNOSTICS
-
-If B<pod2text> fails with errors, see L<Pod::Text> and L<Pod::Simple> for
-information about what those errors might mean. Internally, it can also
-produce the following diagnostics:
-
-=over 4
-
-=item -c (--color) requires Term::ANSIColor be installed
-
-(F) B<-c> or B<--color> were given, but Term::ANSIColor could not be
-loaded.
-
-=item Unknown option: %s
-
-(F) An unknown command line option was given.
-
-=back
-
-In addition, other L<Getopt::Long> error messages may result from invalid
-command-line options.
-
-=head1 ENVIRONMENT
-
-=over 4
-
-=item COLUMNS
-
-If B<-t> is given, B<pod2text> will take the current width of your screen
-from this environment variable, if available. It overrides terminal width
-information in TERMCAP.
-
-=item TERMCAP
-
-If B<-t> is given, B<pod2text> will use the contents of this environment
-variable if available to determine the correct formatting sequences for your
-current terminal device.
-
-=back
-
-=head1 SEE ALSO
-
-L<Pod::Text>, L<Pod::Text::Color>, L<Pod::Text::Overstrike>,
-L<Pod::Text::Termcap>, L<Pod::Simple>, L<perlpod(1)>
-
-The current version of this script is always available from its web site at
-L<http://www.eyrie.org/~eagle/software/podlators/>. It is also part of the
-Perl core distribution as of 5.6.0.
-
-=head1 AUTHOR
-
-Russ Allbery <rra at stanford.edu>.
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright 1999, 2000, 2001, 2004, 2006, 2008 Russ Allbery
-<rra at stanford.edu>.
-
-This program is free software; you may redistribute it and/or modify it
-under the same terms as Perl itself.
-
-=cut
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
Deleted: trunk/contrib/perl/pod/pod2usage.PL
===================================================================
--- trunk/contrib/perl/pod/pod2usage.PL 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/pod2usage.PL 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,180 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir(dirname($0));
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{'startperl'}
- eval 'exec perl -S \$0 "\$@"'
- if 0;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-#############################################################################
-# pod2usage -- command to print usage messages from embedded pod docs
-#
-# Copyright (c) 1996-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-use strict;
-#use diagnostics;
-
-=head1 NAME
-
-pod2usage - print usage messages from embedded pod docs in files
-
-=head1 SYNOPSIS
-
-=over 12
-
-=item B<pod2usage>
-
-[B<-help>]
-[B<-man>]
-[B<-exit>S< >I<exitval>]
-[B<-output>S< >I<outfile>]
-[B<-verbose> I<level>]
-[B<-pathlist> I<dirlist>]
-I<file>
-
-=back
-
-=head1 OPTIONS AND ARGUMENTS
-
-=over 8
-
-=item B<-help>
-
-Print a brief help message and exit.
-
-=item B<-man>
-
-Print this command's manual page and exit.
-
-=item B<-exit> I<exitval>
-
-The exit status value to return.
-
-=item B<-output> I<outfile>
-
-The output file to print to. If the special names "-" or ">&1" or ">&STDOUT"
-are used then standard output is used. If ">&2" or ">&STDERR" is used then
-standard error is used.
-
-=item B<-verbose> I<level>
-
-The desired level of verbosity to use:
-
- 1 : print SYNOPSIS only
- 2 : print SYNOPSIS sections and any OPTIONS/ARGUMENTS sections
- 3 : print the entire manpage (similar to running pod2text)
-
-=item B<-pathlist> I<dirlist>
-
-Specifies one or more directories to search for the input file if it
-was not supplied with an absolute path. Each directory path in the given
-list should be separated by a ':' on Unix (';' on MSWin32 and DOS).
-
-=item I<file>
-
-The pathname of a file containing pod documentation to be output in
-usage message format (defaults to standard input).
-
-=back
-
-=head1 DESCRIPTION
-
-B<pod2usage> will read the given input file looking for pod
-documentation and will print the corresponding usage message.
-If no input file is specified then standard input is read.
-
-B<pod2usage> invokes the B<pod2usage()> function in the B<Pod::Usage>
-module. Please see L<Pod::Usage/pod2usage()>.
-
-=head1 SEE ALSO
-
-L<Pod::Usage>, L<pod2text(1)>
-
-=head1 AUTHOR
-
-Please report bugs using L<http://rt.cpan.org>.
-
-Brad Appleton E<lt>bradapp at enteract.comE<gt>
-
-Based on code for B<pod2text(1)> written by
-Tom Christiansen E<lt>tchrist at mox.perl.comE<gt>
-
-=cut
-
-use Pod::Usage;
-use Getopt::Long;
-
-## Define options
-my %options = ();
-my @opt_specs = (
- 'help',
- 'man',
- 'exit=i',
- 'output=s',
- 'pathlist=s',
- 'verbose=i',
-);
-
-## Parse options
-GetOptions(\%options, @opt_specs) || pod2usage(2);
-pod2usage(1) if ($options{help});
-pod2usage(VERBOSE => 2) if ($options{man});
-
-## Dont default to STDIN if connected to a terminal
-pod2usage(2) if ((@ARGV == 0) && (-t STDIN));
-
- at ARGV = ('-') unless (@ARGV);
-if (@ARGV > 1) {
- print STDERR "pod2usage: Too many filenames given\n\n";
- pod2usage(2);
-}
-
-my %usage = ();
-$usage{-input} = shift(@ARGV);
-$usage{-exitval} = $options{'exit'} if (defined $options{'exit'});
-$usage{-output} = $options{'output'} if (defined $options{'output'});
-$usage{-verbose} = $options{'verbose'} if (defined $options{'verbose'});
-$usage{-pathlist} = $options{'pathlist'} if (defined $options{'pathlist'});
-
-pod2usage(\%usage);
-
-
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
Deleted: trunk/contrib/perl/pod/podchecker.PL
===================================================================
--- trunk/contrib/perl/pod/podchecker.PL 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/podchecker.PL 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,186 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
- if ($^O eq 'VMS' or $^O eq 'os2' or $^O eq 'dos'); # "case-forgiving"
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{'startperl'}
- eval 'exec perl -S \$0 "\$@"'
- if 0;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-#############################################################################
-# podchecker -- command to invoke the podchecker function in Pod::Checker
-#
-# Copyright (c) 1998-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-use strict;
-#use diagnostics;
-
-=head1 NAME
-
-podchecker - check the syntax of POD format documentation files
-
-=head1 SYNOPSIS
-
-B<podchecker> [B<-help>] [B<-man>] [B<-(no)warnings>] [I<file>S< >...]
-
-=head1 OPTIONS AND ARGUMENTS
-
-=over 8
-
-=item B<-help>
-
-Print a brief help message and exit.
-
-=item B<-man>
-
-Print the manual page and exit.
-
-=item B<-warnings> B<-nowarnings>
-
-Turn on/off printing of warnings. Repeating B<-warnings> increases the
-warning level, i.e. more warnings are printed. Currently increasing to
-level two causes flagging of unescaped "E<lt>,E<gt>" characters.
-
-=item I<file>
-
-The pathname of a POD file to syntax-check (defaults to standard input).
-
-=back
-
-=head1 DESCRIPTION
-
-B<podchecker> will read the given input files looking for POD
-syntax errors in the POD documentation and will print any errors
-it find to STDERR. At the end, it will print a status message
-indicating the number of errors found.
-
-Directories are ignored, an appropriate warning message is printed.
-
-B<podchecker> invokes the B<podchecker()> function exported by B<Pod::Checker>
-Please see L<Pod::Checker/podchecker()> for more details.
-
-=head1 RETURN VALUE
-
-B<podchecker> returns a 0 (zero) exit status if all specified
-POD files are ok.
-
-=head1 ERRORS
-
-B<podchecker> returns the exit status 1 if at least one of
-the given POD files has syntax errors.
-
-The status 2 indicates that at least one of the specified
-files does not contain I<any> POD commands.
-
-Status 1 overrides status 2. If you want unambiguous
-results, call B<podchecker> with one single argument only.
-
-=head1 SEE ALSO
-
-L<Pod::Parser> and L<Pod::Checker>
-
-=head1 AUTHORS
-
-Please report bugs using L<http://rt.cpan.org>.
-
-Brad Appleton E<lt>bradapp at enteract.comE<gt>,
-Marek Rouchal E<lt>marekr at cpan.orgE<gt>
-
-Based on code for B<Pod::Text::pod2text(1)> written by
-Tom Christiansen E<lt>tchrist at mox.perl.comE<gt>
-
-=cut
-
-
-use Pod::Checker;
-use Pod::Usage;
-use Getopt::Long;
-
-## Define options
-my %options;
-
-## Parse options
-GetOptions(\%options, qw(help man warnings+ nowarnings)) || pod2usage(2);
-pod2usage(1) if ($options{help});
-pod2usage(-verbose => 2) if ($options{man});
-
-if($options{nowarnings}) {
- $options{warnings} = 0;
-}
-elsif(!defined $options{warnings}) {
- $options{warnings} = 1; # default is warnings on
-}
-
-## Dont default to STDIN if connected to a terminal
-pod2usage(2) if ((@ARGV == 0) && (-t STDIN));
-
-## Invoke podchecker()
-my $status = 0;
- at ARGV = qw(-) unless(@ARGV);
-for my $podfile (@ARGV) {
- if($podfile eq '-') {
- $podfile = '<&STDIN';
- }
- elsif(-d $podfile) {
- warn "podchecker: Warning: Ignoring directory '$podfile'\n";
- next;
- }
- my $errors =
- podchecker($podfile, undef, '-warnings' => $options{warnings});
- if($errors > 0) {
- # errors occurred
- $status = 1;
- printf STDERR ("%s has %d pod syntax %s.\n",
- $podfile, $errors,
- ($errors == 1) ? 'error' : 'errors');
- }
- elsif($errors < 0) {
- # no pod found
- $status = 2 unless($status);
- print STDERR "$podfile does not contain any pod commands.\n";
- }
- else {
- print STDERR "$podfile pod syntax OK.\n";
- }
-}
-exit $status;
-
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
Deleted: trunk/contrib/perl/pod/podselect.PL
===================================================================
--- trunk/contrib/perl/pod/podselect.PL 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/podselect.PL 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,143 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir(dirname($0));
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{'startperl'}
- eval 'exec perl -S \$0 "\$@"'
- if 0;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-#############################################################################
-# podselect -- command to invoke the podselect function in Pod::Select
-#
-# Copyright (c) 1996-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-use strict;
-#use diagnostics;
-
-=head1 NAME
-
-podselect - print selected sections of pod documentation on standard output
-
-=head1 SYNOPSIS
-
-B<podselect> [B<-help>] [B<-man>] [B<-section>S< >I<section-spec>]
-[I<file>S< >...]
-
-=head1 OPTIONS AND ARGUMENTS
-
-=over 8
-
-=item B<-help>
-
-Print a brief help message and exit.
-
-=item B<-man>
-
-Print the manual page and exit.
-
-=item B<-section>S< >I<section-spec>
-
-Specify a section to include in the output.
-See L<Pod::Parser/"SECTION SPECIFICATIONS">
-for the format to use for I<section-spec>.
-This option may be given multiple times on the command line.
-
-=item I<file>
-
-The pathname of a file from which to select sections of pod
-documentation (defaults to standard input).
-
-=back
-
-=head1 DESCRIPTION
-
-B<podselect> will read the given input files looking for pod
-documentation and will print out (in raw pod format) all sections that
-match one ore more of the given section specifications. If no section
-specifications are given than all pod sections encountered are output.
-
-B<podselect> invokes the B<podselect()> function exported by B<Pod::Select>
-Please see L<Pod::Select/podselect()> for more details.
-
-=head1 SEE ALSO
-
-L<Pod::Parser> and L<Pod::Select>
-
-=head1 AUTHOR
-
-Please report bugs using L<http://rt.cpan.org>.
-
-Brad Appleton E<lt>bradapp at enteract.comE<gt>
-
-Based on code for B<Pod::Text::pod2text(1)> written by
-Tom Christiansen E<lt>tchrist at mox.perl.comE<gt>
-
-=cut
-
-use Pod::Select;
-use Pod::Usage;
-use Getopt::Long;
-
-## Define options
-my %options = (
- 'help' => 0,
- 'man' => 0,
- 'sections' => [],
-);
-
-## Parse options
-GetOptions(\%options, 'help', 'man', 'sections|select=s@') || pod2usage(2);
-pod2usage(1) if ($options{help});
-pod2usage(-verbose => 2) if ($options{man});
-
-## Dont default to STDIN if connected to a terminal
-pod2usage(2) if ((@ARGV == 0) && (-t STDIN));
-
-## Invoke podselect().
-if (@{ $options{'sections'} } > 0) {
- podselect({ -sections => $options{'sections'} }, @ARGV);
-}
-else {
- podselect(@ARGV);
-}
-
-
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
Deleted: trunk/contrib/perl/pod/roffitall
===================================================================
--- trunk/contrib/perl/pod/roffitall 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod/roffitall 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,311 +0,0 @@
-#!/bin/sh
-#
-# Usage: roffitall [-nroff|-psroff|-groff]
-#
-# Authors: Tom Christiansen, Raphael Manfredi
-
-me=roffitall
-tmp=.
-
-if test -f ../config.sh; then
- . ../config.sh
-fi
-
-mandir=$installman1dir
-libdir=$installman3dir
-
-test -d $mandir || mandir=/usr/new/man/man1
-test -d $libdir || libdir=/usr/new/man/man3
-
-case "$1" in
--nroff) cmd="nroff -man"; ext='txt';;
--psroff) cmd="psroff -t"; ext='ps';;
--groff) cmd="groff -man"; ext='ps';;
-*)
- echo "Usage: roffitall [-nroff|-psroff|-groff]" >&2
- exit 1
- ;;
-esac
-
-# NEEDS TO BE BUILT BASED ON Makefile (or Makefile.SH, should such happen)
-toroff=`
- echo \
- $mandir/perl.1 \
- $mandir/perl5004delta.1 \
- $mandir/perl5005delta.1 \
- $mandir/perl56delta.1 \
- $mandir/perlapi.1 \
- $mandir/perlapio.1 \
- $mandir/perlbook.1 \
- $mandir/perlboot.1 \
- $mandir/perlbot.1 \
- $mandir/perlcall.1 \
- $mandir/perlcompile.1 \
- $mandir/perldata.1 \
- $mandir/perldbmfilter.1 \
- $mandir/perldebguts.1 \
- $mandir/perldebug.1 \
- $mandir/perldelta.1 \
- $mandir/perldiag.1 \
- $mandir/perldsc.1 \
- $mandir/perlembed.1 \
- $mandir/perlfaq.1 \
- $mandir/perlfaq1.1 \
- $mandir/perlfaq2.1 \
- $mandir/perlfaq3.1 \
- $mandir/perlfaq4.1 \
- $mandir/perlfaq5.1 \
- $mandir/perlfaq6.1 \
- $mandir/perlfaq7.1 \
- $mandir/perlfaq8.1 \
- $mandir/perlfaq9.1 \
- $mandir/perlfilter.1 \
- $mandir/perlfork.1 \
- $mandir/perlform.1 \
- $mandir/perlfunc.1 \
- $mandir/perlguts.1 \
- $mandir/perlhack.1 \
- $mandir/perlhist.1 \
- $mandir/perlintern.1 \
- $mandir/perlipc.1 \
- $mandir/perllexwarn.1 \
- $mandir/perllocale.1 \
- $mandir/perllol.1 \
- $mandir/perlmod.1 \
- $mandir/perlmodinstall.1 \
- $mandir/perlmodlib.1 \
- $mandir/perlnewmod.1 \
- $mandir/perlnumber.1 \
- $mandir/perlobj.1 \
- $mandir/perlop.1 \
- $mandir/perlopentut.1 \
- $mandir/perlpod.1 \
- $mandir/perlport.1 \
- $mandir/perlre.1 \
- $mandir/perlref.1 \
- $mandir/perlreftut.1 \
- $mandir/perlrequick.1 \
- $mandir/perlretut.1 \
- $mandir/perlrun.1 \
- $mandir/perlsec.1 \
- $mandir/perlstyle.1 \
- $mandir/perlsub.1 \
- $mandir/perlsyn.1 \
- $mandir/perlthrtut.1 \
- $mandir/perltie.1 \
- $mandir/perltoc.1 \
- $mandir/perltodo.1 \
- $mandir/perltooc.1 \
- $mandir/perltoot.1 \
- $mandir/perltrap.1 \
- $mandir/perlunicode.1 \
- $mandir/perlutil.1 \
- $mandir/perlvar.1 \
- $mandir/perlxs.1 \
- $mandir/perlxstut.1 \
- \
- $mandir/a2p.1 \
- $mandir/c2ph.1 \
- $mandir/dprofpp.1 \
- $mandir/h2ph.1 \
- $mandir/h2xs.1 \
- $mandir/perlbug.1 \
- $mandir/perldoc.1 \
- $mandir/pl2pm.1 \
- $mandir/pod2html.1 \
- $mandir/pod2man.1 \
- $mandir/s2p.1 \
- $mandir/splain.1 \
- $mandir/xsubpp.1 \
- \
- $libdir/autouse.3 \
- $libdir/base.3 \
- $libdir/blib.3 \
- $libdir/constant.3 \
- $libdir/diagnostics.3 \
- $libdir/fields.3 \
- $libdir/filetest.3 \
- $libdir/integer.3 \
- $libdir/less.3 \
- $libdir/lib.3 \
- $libdir/locale.3 \
- $libdir/ops.3 \
- $libdir/overload.3 \
- $libdir/re.3 \
- $libdir/sigtrap.3 \
- $libdir/strict.3 \
- $libdir/subs.3 \
- $libdir/vars.3 \
- \
- $libdir/AnyDBM_File.3 \
- $libdir/AutoLoader.3 \
- $libdir/AutoSplit.3 \
- $libdir/B.3 \
- $libdir/B::Asmdata.3 \
- $libdir/B::Assembler.3 \
- $libdir/B::Bblock.3 \
- $libdir/B::Bytecode.3 \
- $libdir/B::C.3 \
- $libdir/B::CC.3 \
- $libdir/B::Debug.3 \
- $libdir/B::Deparse.3 \
- $libdir/B::Disassembler.3 \
- $libdir/B::Lint.3 \
- $libdir/B::Showlex.3 \
- $libdir/B::Stackobj.3 \
- $libdir/B::Terse.3 \
- $libdir/B::Xref.3 \
- $libdir/Benchmark.3 \
- $libdir/Carp.3 \
- $libdir/CGI.3 \
- $libdir/CGI::Apache.3 \
- $libdir/CGI::Carp.3 \
- $libdir/CGI::Cookie.3 \
- $libdir/CGI::Fast.3 \
- $libdir/CGI::Push.3 \
- $libdir/CGI::Switch.3 \
- $libdir/Class::Struct.3 \
- $libdir/Config.3 \
- $libdir/CPAN.3 \
- $libdir/CPAN::FirstTime.3 \
- $libdir/CPAN::Nox.3 \
- $libdir/Cwd.3 \
- $libdir/Data::Dumper.3 \
- $libdir/DB_File.3 \
- $libdir/Devel::SelfStubber.3 \
- $libdir/DirHandle.3 \
- $libdir/DynaLoader.3 \
- $libdir/Dumpvalue.3 \
- $libdir/English.3 \
- $libdir/Env.3 \
- $libdir/Errno.3 \
- $libdir/Exporter.3 \
- $libdir/ExtUtils::Command.3 \
- $libdir/ExtUtils::Embed.3 \
- $libdir/ExtUtils::Install.3 \
- $libdir/ExtUtils::Installed.3 \
- $libdir/ExtUtils::Liblist.3 \
- $libdir/ExtUtils::MakeMaker.3 \
- $libdir/ExtUtils::Manifest.3 \
- $libdir/ExtUtils::Miniperl.3 \
- $libdir/ExtUtils::Mkbootstrap.3 \
- $libdir/ExtUtils::Mksymlists.3 \
- $libdir/ExtUtils::MM_OS2.3 \
- $libdir/ExtUtils::MM_Unix.3 \
- $libdir/ExtUtils::MM_VMS.3 \
- $libdir/ExtUtils::MM_Win32.3 \
- $libdir/ExtUtils::Packlist.3 \
- $libdir/ExtUtils::testlib.3 \
- $libdir/Fatal.3 \
- $libdir/Fcntl.3 \
- $libdir/File::Basename.3 \
- $libdir/File::CheckTree.3 \
- $libdir/File::Compare.3 \
- $libdir/File::Copy.3 \
- $libdir/File::DosGlob.3 \
- $libdir/File::Find.3 \
- $libdir/File::Path.3 \
- $libdir/File::Spec.3 \
- $libdir/File::Spec::Mac.3 \
- $libdir/File::Spec::OS2.3 \
- $libdir/File::Spec::Unix.3 \
- $libdir/File::Spec::VMS.3 \
- $libdir/File::Spec::Win32.3 \
- $libdir/File::stat.3 \
- $libdir/FileCache.3 \
- $libdir/FileHandle.3 \
- $libdir/FindBin.3 \
- $libdir/GDBM_File.3 \
- $libdir/Getopt::Long.3 \
- $libdir/Getopt::Std.3 \
- $libdir/I18N::Collate.3 \
- $libdir/IO.3 \
- $libdir/IO::File.3 \
- $libdir/IO::Handle.3 \
- $libdir/IO::Pipe.3 \
- $libdir/IO::Seekable.3 \
- $libdir/IO::Select.3 \
- $libdir/IO::Socket.3 \
- $libdir/IPC::Msg.3 \
- $libdir/IPC::Open2.3 \
- $libdir/IPC::Open3.3 \
- $libdir/IPC::Semaphore.3 \
- $libdir/IPC::SysV.3 \
- $libdir/Math::BigFloat.3 \
- $libdir/Math::BigInt.3 \
- $libdir/Math::Complex.3 \
- $libdir/Math::Trig.3 \
- $libdir/NDBM_File.3 \
- $libdir/Net::hostent.3 \
- $libdir/Net::netent.3 \
- $libdir/Net::Ping.3 \
- $libdir/Net::protoent.3 \
- $libdir/Net::servent.3 \
- $libdir/O.3 \
- $libdir/Opcode.3 \
- $libdir/Pod::Html.3 \
- $libdir/Pod::Text.3 \
- $libdir/POSIX.3 \
- $libdir/Safe.3 \
- $libdir/SDBM_File.3 \
- $libdir/Search::Dict.3 \
- $libdir/SelectSaver.3 \
- $libdir/SelfLoader.3 \
- $libdir/Shell.3 \
- $libdir/Socket.3 \
- $libdir/Symbol.3 \
- $libdir/Sys::Hostname.3 \
- $libdir/Sys::Syslog.3 \
- $libdir/Term::Cap.3 \
- $libdir/Term::Complete.3 \
- $libdir/Term::ReadLine.3 \
- $libdir/Test.3 \
- $libdir/Test::Harness.3 \
- $libdir/Text::Abbrev.3 \
- $libdir/Text::ParseWords.3 \
- $libdir/Text::Soundex.3 \
- $libdir/Text::Tabs.3 \
- $libdir/Text::Wrap.3 \
- $libdir/Tie::Array.3 \
- $libdir/Tie::Handle.3 \
- $libdir/Tie::Hash.3 \
- $libdir/Tie::RefHash.3 \
- $libdir/Tie::Scalar.3 \
- $libdir/Tie::SubstrHash.3 \
- $libdir/Time::gmtime.3 \
- $libdir/Time::Local.3 \
- $libdir/Time::localtime.3 \
- $libdir/Time::tm.3 \
- $libdir/UNIVERSAL.3 \
- $libdir/User::grent.3 \
- $libdir/User::pwent.3 | \
- perl -ne 'map { -r && print "$_ " } split'`
-
- # Bypass internal shell buffer limit -- can't use case
- if perl -e '$a = shift; exit($a =~ m|/|)' $toroff; then
- echo "$me: empty file list -- did you run install?" >&2
- exit 1
- fi
-
- #psroff -t -man -rC1 -rD1 -rF1 > $tmp/PerlDoc.ps 2>$tmp/PerlTOC.raw
- #nroff -man -rC1 -rD1 -rF1 > $tmp/PerlDoc.txt 2>$tmp/PerlTOC.nr.raw
-
- # First, create the raw data
- run="$cmd -rC1 -rD1 -rF1 >$tmp/PerlDoc.$ext 2>$tmp/PerlTOC.$ext.raw"
- echo "$me: running $run"
- eval $run $toroff
-
- #Now create the TOC
- echo "$me: parsing TOC"
- ./rofftoc $tmp/PerlTOC.$ext.raw > $tmp/PerlTOC.tmp.man
- run="$cmd $tmp/PerlTOC.tmp.man >$tmp/PerlTOC.$ext"
- echo "$me: running $run"
- eval $run
-
- # Finally, recreate the Doc, without the blank page 0
- run="$cmd -rC1 -rD1 >$tmp/PerlDoc.$ext 2>$tmp/PerlTOC.$ext.raw"
- echo "$me: running $run"
- eval $run $toroff
- rm -f $tmp/PerlTOC.tmp.man $tmp/PerlTOC.$ext.raw
- echo "$me: leaving you with $tmp/PerlDoc.$ext and $tmp/PerlTOC.$ext"
-
Deleted: trunk/contrib/perl/pod.lst
===================================================================
--- trunk/contrib/perl/pod.lst 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/pod.lst 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,257 +0,0 @@
-# h - Header
-# o - Omit from toc
-# r - top level READMEs to be copied/symlinked
-# g - other autogenerated pods
-# a - for auxiliary documentation
-# number - indent by
-# D - this version's perldelta
-# d - copied to this name
-
-h Overview
-
- perl Perl overview (this section)
- perlintro Perl introduction for beginners
-go perltoc Perl documentation table of contents
-
-h Tutorials
-
- perlreftut Perl references short introduction
- perldsc Perl data structures intro
- perllol Perl data structures: arrays of arrays
-
- perlrequick Perl regular expressions quick start
- perlretut Perl regular expressions tutorial
-
- perlboot Perl OO tutorial for beginners
- perltoot Perl OO tutorial, part 1
- perltooc Perl OO tutorial, part 2
- perlbot Perl OO tricks and examples
-
- perlperf Perl Performance and Optimization Techniques
-
- perlstyle Perl style guide
-
- perlcheat Perl cheat sheet
- perltrap Perl traps for the unwary
- perldebtut Perl debugging tutorial
-
- perlfaq Perl frequently asked questions
-2 perlfaq1 General Questions About Perl
-2 perlfaq2 Obtaining and Learning about Perl
-2 perlfaq3 Programming Tools
-2 perlfaq4 Data Manipulation
-2 perlfaq5 Files and Formats
-2 perlfaq6 Regexes
-2 perlfaq7 Perl Language Issues
-2 perlfaq8 System Interaction
-2 perlfaq9 Networking
-
-h Reference Manual
-
- perlsyn Perl syntax
- perldata Perl data structures
- perlop Perl operators and precedence
- perlsub Perl subroutines
- perlfunc Perl built-in functions
-2 perlopentut Perl open() tutorial
-2 perlpacktut Perl pack() and unpack() tutorial
- perlpod Perl plain old documentation
- perlpodspec Perl plain old documentation format specification
- perlpodstyle Perl POD style guide
- perlrun Perl execution and options
- perldiag Perl diagnostic messages
- perllexwarn Perl warnings and their control
- perldebug Perl debugging
- perlvar Perl predefined variables
- perlre Perl regular expressions, the rest of the story
- perlrebackslash Perl regular expression backslash sequences
- perlrecharclass Perl regular expression character classes
- perlreref Perl regular expressions quick reference
- perlref Perl references, the rest of the story
- perlform Perl formats
- perlobj Perl objects
- perltie Perl objects hidden behind simple variables
-2 perldbmfilter Perl DBM filters
-
- perlipc Perl interprocess communication
- perlfork Perl fork() information
- perlnumber Perl number semantics
-
- perlthrtut Perl threads tutorial
-
- perlport Perl portability guide
- perllocale Perl locale support
- perluniintro Perl Unicode introduction
- perlunicode Perl Unicode support
- perlunifaq Perl Unicode FAQ
-g perluniprops Index of Unicode Version 6.0.0 properties in Perl
- perlunitut Perl Unicode tutorial
- perlebcdic Considerations for running Perl on EBCDIC platforms
-
- perlsec Perl security
-
- perlmod Perl modules: how they work
-g perlmodlib Perl modules: how to write and use
- perlmodstyle Perl modules: how to write modules with style
- perlmodinstall Perl modules: how to install from CPAN
- perlnewmod Perl modules: preparing a new module for distribution
- perlpragma Perl modules: writing a user pragma
-
- perlutil utilities packaged with the Perl distribution
-
- perlcompile Perl compiler suite intro
-
- perlfilter Perl source filters
-
- perlglossary Perl Glossary
-
-h Internals and C Language Interface
-
- perlembed Perl ways to embed perl in your C or C++ application
- perldebguts Perl debugging guts and tips
- perlxstut Perl XS tutorial
- perlxs Perl XS application programming interface
- perlclib Internal replacements for standard C library functions
- perlguts Perl internal functions for those doing extensions
- perlcall Perl calling conventions from C
- perlmroapi Perl method resolution plugin interface
- perlreapi Perl regular expression plugin interface
- perlreguts Perl regular expression engine internals
-
-g perlapi Perl API listing (autogenerated)
-g perlintern Perl internal functions (autogenerated)
- perliol C API for Perl's implementation of IO in Layers
- perlapio Perl internal IO abstraction interface
-
- perlhack Perl hackers guide
- perlsource Guide to the Perl source tree
- perlinterp Overview of the Perl intepreter source and how it works
- perlhacktut Walk through the creation of a simple C code patch
- perlhacktips Tips for Perl core C code hacking
- perlpolicy Perl development policies
- perlgit Using git with the Perl repository
-
-h Miscellaneous
-
- perlbook Perl book information
- perlcommunity Perl community information
- perltodo Perl things to do
-
- perldoc Look up Perl documentation in Pod format
-
- perlhist Perl history records
-D perldelta Perl changes since previous version
-d perl5142delta Perl changes in version 5.14.2
- perl5141delta Perl changes in version 5.14.1
- perl5140delta Perl changes in version 5.14.0
- perl51311delta Perl changes in version 5.13.11
- perl51310delta Perl changes in version 5.13.10
- perl5139delta Perl changes in version 5.13.9
- perl5138delta Perl changes in version 5.13.8
- perl5137delta Perl changes in version 5.13.7
- perl5136delta Perl changes in version 5.13.6
- perl5135delta Perl changes in version 5.13.5
- perl5134delta Perl changes in version 5.13.4
- perl5133delta Perl changes in version 5.13.3
- perl5132delta Perl changes in version 5.13.2
- perl5131delta Perl changes in version 5.13.1
- perl5130delta Perl changes in version 5.13.0
- perl5123delta Perl changes in version 5.12.3
- perl5122delta Perl changes in version 5.12.2
- perl5121delta Perl changes in version 5.12.1
- perl5120delta Perl changes in version 5.12.0
- perl5115delta Perl changes in version 5.11.5
- perl5114delta Perl changes in version 5.11.4
- perl5113delta Perl changes in version 5.11.3
- perl5112delta Perl changes in version 5.11.2
- perl5111delta Perl changes in version 5.11.1
- perl5110delta Perl changes in version 5.11.0
- perl5101delta Perl changes in version 5.10.1
- perl5100delta Perl changes in version 5.10.0
- perl595delta Perl changes in version 5.9.5
- perl594delta Perl changes in version 5.9.4
- perl593delta Perl changes in version 5.9.3
- perl592delta Perl changes in version 5.9.2
- perl591delta Perl changes in version 5.9.1
- perl590delta Perl changes in version 5.9.0
- perl589delta Perl changes in version 5.8.9
- perl588delta Perl changes in version 5.8.8
- perl587delta Perl changes in version 5.8.7
- perl586delta Perl changes in version 5.8.6
- perl585delta Perl changes in version 5.8.5
- perl584delta Perl changes in version 5.8.4
- perl583delta Perl changes in version 5.8.3
- perl582delta Perl changes in version 5.8.2
- perl581delta Perl changes in version 5.8.1
- perl58delta Perl changes in version 5.8.0
- perl573delta Perl changes in version 5.7.3
- perl572delta Perl changes in version 5.7.2
- perl571delta Perl changes in version 5.7.1
- perl570delta Perl changes in version 5.7.0
- perl561delta Perl changes in version 5.6.1
- perl56delta Perl changes in version 5.6
- perl5005delta Perl changes in version 5.005
- perl5004delta Perl changes in version 5.004
-
- perlartistic Perl Artistic License
- perlgpl GNU General Public License
-
-ho Language-Specific
-
-ro perlcn Perl for Simplified Chinese (in EUC-CN)
-ro perljp Perl for Japanese (in EUC-JP)
-ro perlko Perl for Korean (in EUC-KR)
-ro perltw Perl for Traditional Chinese (in Big5)
-
-h Platform-Specific
-
-r perlaix Perl notes for AIX
-r perlamiga Perl notes for AmigaOS
-r perlbeos Perl notes for BeOS
-r perlbs2000 Perl notes for POSIX-BC BS2000
-r perlce Perl notes for WinCE
-r perlcygwin Perl notes for Cygwin
-r perldgux Perl notes for DG/UX
-r perldos Perl notes for DOS
-r perlepoc Perl notes for EPOC
-r perlfreebsd Perl notes for FreeBSD
-r perlhaiku Perl notes for Haiku
-r perlhpux Perl notes for HP-UX
-r perlhurd Perl notes for Hurd
-r perlirix Perl notes for Irix
-r perllinux Perl notes for Linux
-r perlmacos Perl notes for Mac OS (Classic)
-r perlmacosx Perl notes for Mac OS X
-r perlmpeix Perl notes for MPE/iX
-r perlnetware Perl notes for NetWare
-r perlopenbsd Perl notes for OpenBSD
-r perlos2 Perl notes for OS/2
-r perlos390 Perl notes for OS/390
-r perlos400 Perl notes for OS/400
-r perlplan9 Perl notes for Plan 9
-r perlqnx Perl notes for QNX
-r perlriscos Perl notes for RISC OS
-r perlsolaris Perl notes for Solaris
-r perlsymbian Perl notes for Symbian
-r perltru64 Perl notes for Tru64
-r perluts Perl notes for UTS
-r perlvmesa Perl notes for VM/ESA
- perlvms Perl notes for VMS
-r perlvos Perl notes for Stratus VOS
-r perlwin32 Perl notes for Windows
-
-aoh Auxiliary Documentation
-
-ao a2p
-ao c2ph
-ao dprofpp
-ao h2ph
-ao h2xs
-ao perlbug
-ao perldoc
-ao pl2pm
-ao pod2html
-ao pod2man
-ao s2p
-ao splain
-ao xsubpp
Deleted: trunk/contrib/perl/t/TestInit.pm
===================================================================
--- trunk/contrib/perl/t/TestInit.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/TestInit.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,28 +0,0 @@
-# This is a replacement for the old BEGIN preamble which heads (or
-# should head) up every core test program to prepare it for running.
-# Now instead of:
-#
-# BEGIN {
-# chdir 't' if -d 't';
-# @INC = '../lib';
-# }
-#
-# t/TEST will use -MTestInit. You may "use TestInit" in the test
-# programs but it is not required.
-#
-# P.S. This documentation is not in POD format in order to avoid
-# problems when there are fundamental bugs in perl.
-
-package TestInit;
-
-$VERSION = 1.01;
-
-chdir 't' if -d 't';
- at INC = '../lib';
-
-# Don't interfere with the taintedness of %ENV, this could perturbate tests
-$ENV{PERL_CORE} = 1 unless ${^TAINT};
-
-$0 =~ s/\.dp$//; # for the test.deparse make target
-1;
-
Deleted: trunk/contrib/perl/t/cmd/while.t
===================================================================
--- trunk/contrib/perl/t/cmd/while.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/cmd/while.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,214 +0,0 @@
-#!./perl
-
-BEGIN {
- require "test.pl";
-}
-
-plan(25);
-
-my $tmpfile = tempfile();
-open (tmp,'>', $tmpfile) || die "Can't create Cmd_while.tmp.";
-print tmp "tvi925\n";
-print tmp "tvi920\n";
-print tmp "vt100\n";
-print tmp "Amiga\n";
-print tmp "paper\n";
-close tmp or die "Could not close: $!";
-
-# test "last" command
-
-open(fh, $tmpfile) || die "Can't open Cmd_while.tmp.";
-while (<fh>) {
- last if /vt100/;
-}
-ok(!eof && /vt100/);
-
-# test "next" command
-
-$bad = '';
-open(fh, $tmpfile) || die "Can't open Cmd_while.tmp.";
-while (<fh>) {
- next if /vt100/;
- $bad = 1 if /vt100/;
-}
-ok(eof && !/vt100/ && !$bad);
-
-# test "redo" command
-
-$bad = '';
-open(fh,$tmpfile) || die "Can't open Cmd_while.tmp.";
-while (<fh>) {
- if (s/vt100/VT100/g) {
- s/VT100/Vt100/g;
- redo;
- }
- $bad = 1 if /vt100/;
- $bad = 1 if /VT100/;
-}
-ok(eof && !$bad);
-
-# now do the same with a label and a continue block
-
-# test "last" command
-
-$badcont = '';
-open(fh,$tmpfile) || die "Can't open Cmd_while.tmp.";
-line: while (<fh>) {
- if (/vt100/) {last line;}
-} continue {
- $badcont = 1 if /vt100/;
-}
-ok(!eof && /vt100/);
-ok(!$badcont);
-
-# test "next" command
-
-$bad = '';
-$badcont = 1;
-open(fh,$tmpfile) || die "Can't open Cmd_while.tmp.";
-entry: while (<fh>) {
- next entry if /vt100/;
- $bad = 1 if /vt100/;
-} continue {
- $badcont = '' if /vt100/;
-}
-ok(eof && !/vt100/ && !$bad);
-ok(!$badcont);
-
-# test "redo" command
-
-$bad = '';
-$badcont = '';
-open(fh,$tmpfile) || die "Can't open Cmd_while.tmp.";
-loop: while (<fh>) {
- if (s/vt100/VT100/g) {
- s/VT100/Vt100/g;
- redo loop;
- }
- $bad = 1 if /vt100/;
- $bad = 1 if /VT100/;
-} continue {
- $badcont = 1 if /vt100/;
-}
-ok(eof && !$bad);
-ok(!$badcont);
-
-close(fh) || die "Can't close Cmd_while.tmp.";
-
-$i = 9;
-{
- $i++;
-}
-is($i, 10);
-
-# Check curpm is reset when jumping out of a scope
-$i = 0;
-'abc' =~ /b/;
-WHILE:
-while (1) {
- $i++;
- is($` . $& . $', "abc");
- { # Localize changes to $` and friends
- 'end' =~ /end/;
- redo WHILE if $i == 1;
- next WHILE if $i == 2;
- # 3 do a normal loop
- last WHILE if $i == 4;
- }
-}
-is($` . $& . $', "abc");
-
-# check that scope cleanup happens right when there's a continue block
-{
- my $var = 16;
- my (@got_var, @got_i);
- while (my $i = ++$var) {
- next if $i == 17;
- last if $i > 17;
- my $i = 0;
- }
- continue {
- ($got_var, $got_i) = ($var, $i);
- }
- is($got_var, 17);
- is($got_i, 17);
-}
-
-{
- my $got_l;
- local $l = 18;
- {
- local $l = 0
- }
- continue {
- $got_l = $l;
- }
- is($got_l, 18);
-}
-
-{
- my $got_l;
- local $l = 19;
- my $x = 0;
- while (!$x++) {
- local $l = 0
- }
- continue {
- $got_l = $l;
- }
- is($got_l, $l);
-}
-
-{
- my $ok = 1;
- $i = 20;
- while (1) {
- my $x;
- $ok = 0 if defined $x;
- if ($i == 21) {
- next;
- }
- last;
- }
- continue {
- ++$i;
- }
- ok($ok);
-}
-
-sub save_context { $_[0] = wantarray; $_[1] }
-
-{
- my $context = -1;
- my $p = sub {
- my $x = 1;
- while ($x--) {
- save_context($context, "foo");
- }
- };
- is(scalar($p->()), 0);
- is($context, undef, "last statement in while block has 'void' context");
-}
-
-{
- my $context = -1;
- my $p = sub {
- my $x = 1;
- {
- save_context($context, "foo");
- }
- };
- is(scalar($p->()), "foo");
- is($context, "", "last statement in block has 'scalar' context");
-}
-
-{
- # test scope is cleaned
- my $i = 0;
- my @a;
- while ($i++ < 2) {
- my $x;
- push @a, \$x;
- }
- ok($a[0] ne $a[1]);
-}
Deleted: trunk/contrib/perl/t/comp/cpp.aux
===================================================================
--- trunk/contrib/perl/t/comp/cpp.aux 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/comp/cpp.aux 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,35 +0,0 @@
-#!./perl -l
-
-# There's a bug in -P where the #! line is ignored. If this test
-# suddenly starts printing blank lines that bug has been fixed.
-
-print "1..3\n";
-
-#define MESS "ok 1\n"
-print MESS;
-
-#ifdef MESS
- print "ok 2\n";
-#else
- print "not ok 2\n";
-#endif
-
-open(TRY,">Comp_cpp.tmp") || die "Can't open temp perl file: $!";
-
-($prog = <<'END') =~ s/X//g;
-X$ok = "not ok 3\n";
-X#include "Comp_cpp.inc"
-X#ifdef OK
-X$ok = OK;
-X#endif
-Xprint $ok;
-END
-print TRY $prog;
-close TRY or die "Could not close Comp_cpp.tmp: $!";
-
-open(TRY,">Comp_cpp.inc") || (die "Can't open temp include file: $!");
-print TRY '#define OK "ok 3\n"' . "\n";
-close TRY or die "Could not close Comp_cpp.tmp: $!";
-
-print `$^X "-P" Comp_cpp.tmp`;
-unlink "Comp_cpp.tmp", "Comp_cpp.inc";
Deleted: trunk/contrib/perl/t/comp/cpp.t
===================================================================
--- trunk/contrib/perl/t/comp/cpp.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/comp/cpp.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,17 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- $ENV{PERL5LIB} = '../lib';
-}
-
-use Config;
-if ( $^O eq 'MacOS' ||
- ($Config{'cppstdin'} =~ /\bcppstdin\b/) &&
- ! -x $Config{'binexp'} . "/cppstdin" ) {
- print "1..0 # Skip: \$Config{cppstdin} unavailable\n";
- exit; # Cannot test till after install, alas.
-}
-
-system qq{$^X -"P" "comp/cpp.aux"};
Deleted: trunk/contrib/perl/t/comp/script.t
===================================================================
--- trunk/contrib/perl/t/comp/script.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/comp/script.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,29 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't';
- @INC = '../lib';
- require './test.pl'; # for which_perl() etc
-}
-
-my $Perl = which_perl();
-
-my $filename = tempfile();
-
-print "1..3\n";
-
-$x = `$Perl -le "print 'ok';"`;
-
-if ($x eq "ok\n") {print "ok 1\n";} else {print "not ok 1\n";}
-
-open(try,">$filename") || (die "Can't open temp file.");
-print try 'print "ok\n";'; print try "\n";
-close try or die "Could not close: $!";
-
-$x = `$Perl $filename`;
-
-if ($x eq "ok\n") {print "ok 2\n";} else {print "not ok 2\n";}
-
-$x = `$Perl <$filename`;
-
-if ($x eq "ok\n") {print "ok 3\n";} else {print "not ok 3\n";}
Deleted: trunk/contrib/perl/t/lib/Dummy.pm
===================================================================
--- trunk/contrib/perl/t/lib/Dummy.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/lib/Dummy.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,4 +0,0 @@
-package Dummy;
-
-# Attempt to emulate a bug with finding the version in Exporter.
-$VERSION = '5.562';
Deleted: trunk/contrib/perl/t/lib/HasSigDie.pm
===================================================================
--- trunk/contrib/perl/t/lib/HasSigDie.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/lib/HasSigDie.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,6 +0,0 @@
-package HasSigDie;
-
-$SIG{__DIE__} = sub { "Die, Bart, Die!" };
-
-1;
-
Deleted: trunk/contrib/perl/t/lib/NoExporter.pm
===================================================================
--- trunk/contrib/perl/t/lib/NoExporter.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/lib/NoExporter.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,10 +0,0 @@
-package NoExporter;
-
-$VERSION = 1.02;
-sub import {
- shift;
- die "NoExporter exports nothing. You asked for: @_" if @_;
-}
-
-1;
-
Deleted: trunk/contrib/perl/t/lib/TieIn.pm
===================================================================
--- trunk/contrib/perl/t/lib/TieIn.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/lib/TieIn.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,23 +0,0 @@
-package TieIn;
-
-sub TIEHANDLE {
- bless( \(my $scalar), $_[0]);
-}
-
-sub write {
- my $self = shift;
- $$self .= join '', @_;
-}
-
-sub READLINE {
- my $self = shift;
- $$self =~ s/^(.*\n?)//;
- return $1;
-}
-
-sub EOF {
- my $self = shift;
- return !length $$self;
-}
-
-1;
Deleted: trunk/contrib/perl/t/lib/TieOut.pm
===================================================================
--- trunk/contrib/perl/t/lib/TieOut.pm 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/lib/TieOut.pm 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,28 +0,0 @@
-package TieOut;
-
-sub TIEHANDLE {
- my $scalar = '';
- bless( \$scalar, $_[0]);
-}
-
-sub PRINT {
- my $self = shift;
- $$self .= join('', @_);
-}
-
-sub PRINTF {
- my $self = shift;
- my $fmt = shift;
- $$self .= sprintf $fmt, @_;
-}
-
-sub FILENO {}
-
-sub read {
- my $self = shift;
- my $data = $$self;
- $$self = '';
- return $data;
-}
-
-1;
Deleted: trunk/contrib/perl/t/lib/contains_bad_pod.xr
===================================================================
--- trunk/contrib/perl/t/lib/contains_bad_pod.xr 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/lib/contains_bad_pod.xr 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,5 +0,0 @@
-=head foo
-
-bar baz.
-
-=cut
Deleted: trunk/contrib/perl/t/lib/contains_pod.xr
===================================================================
--- trunk/contrib/perl/t/lib/contains_pod.xr 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/lib/contains_pod.xr 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,5 +0,0 @@
-=head1 foo
-
-bar baz.
-
-=cut
Deleted: trunk/contrib/perl/t/lib/filter-util.pl
===================================================================
--- trunk/contrib/perl/t/lib/filter-util.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/lib/filter-util.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,56 +0,0 @@
-
-use strict ;
-use warnings;
-
-use vars qw( $Perl $Inc);
-
-sub readFile
-{
- my ($filename) = @_ ;
- my ($string) = '' ;
-
- open (F, "<$filename")
- or die "Cannot open $filename: $!\n" ;
- while (<F>)
- { $string .= $_ }
- close F ;
- $string ;
-}
-
-sub writeFile
-{
- my($filename, @strings) = @_ ;
- open (F, ">$filename")
- or die "Cannot open $filename: $!\n" ;
- binmode(F) if $filename =~ /bin$/i;
- foreach (@strings)
- { print F }
- close F or die "Could not close: $!" ;
-}
-
-sub ok
-{
- my($number, $result, $note) = @_ ;
-
- $note = "" if ! defined $note ;
- if ($note) {
- $note = "# $note" if $note !~ /^\s*#/ ;
- $note =~ s/^\s*/ / ;
- }
-
- print "not " if !$result ;
- print "ok ${number}${note}\n";
-}
-
-$Inc = '' ;
-foreach (@INC)
- { $Inc .= "\"-I$_\" " }
-$Inc = "-I::lib" if $^O eq 'MacOS';
-
-$Perl = '' ;
-$Perl = ($ENV{'FULLPERL'} or $^X or 'perl') ;
-
-$Perl = "$Perl -MMac::err=unix" if $^O eq 'MacOS';
-$Perl = "$Perl -w" ;
-
-1;
Deleted: trunk/contrib/perl/t/lib/manifest.t
===================================================================
--- trunk/contrib/perl/t/lib/manifest.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/lib/manifest.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,52 +0,0 @@
-#!./perl -w
-
-# Test the well-formed-ness of the MANIFEST file.
-
-BEGIN {
- chdir 't';
- @INC = '../lib';
-}
-
-use strict;
-use File::Spec;
-require './test.pl';
-
-plan('no_plan');
-
-my $manifest = File::Spec->catfile(File::Spec->updir(), 'MANIFEST');
-
-open my $m, '<', $manifest or die "Can't open '$manifest': $!";
-
-# Test that MANIFEST uses tabs - not spaces - after the name of the file.
-while (<$m>) {
- chomp;
- next unless /\s/; # Ignore lines without whitespace (i.e., filename only)
- my ($file, $separator) = /^(\S+)(\s+)/;
- isnt($file, undef, "Line $. doesn't start with a blank") or next;
- if ($separator !~ tr/\t//c) {
- # It's all tabs
- next;
- } elsif ($separator !~ tr/ //c) {
- # It's all spaces
- fail("Spaces in entry for $file");
- } elsif ($separator =~ tr/\t//) {
- fail("Mixed tabs and spaces in entry for $file");
- } else {
- fail("Odd whitespace in entry for $file");
- }
-}
-
-close $m or die $!;
-
-# Test that MANIFEST is properly sorted
-SKIP: {
- skip("'Porting/manisort' not found", 1) if (! -f '../Porting/manisort');
-
- my $result = runperl('progfile' => '../Porting/manisort',
- 'args' => [ '-c', '../MANIFEST' ],
- 'stderr' => 1);
-
- like($result, qr/is sorted properly/, 'MANIFEST sorted properly');
-}
-
-# EOF
Deleted: trunk/contrib/perl/t/op/arith.t
===================================================================
--- trunk/contrib/perl/t/op/arith.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/arith.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,326 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..145\n";
-
-sub try ($$) {
- print +($_[1] ? "ok" : "not ok"), " $_[0]\n";
-}
-sub tryeq ($$$) {
- if ($_[1] == $_[2]) {
- print "ok $_[0]\n";
- } else {
- print "not ok $_[0] # $_[1] != $_[2]\n";
- }
-}
-sub tryeq_sloppy ($$$) {
- if ($_[1] == $_[2]) {
- print "ok $_[0]\n";
- } else {
- my $error = abs ($_[1] - $_[2]) / $_[1];
- if ($error < 1e-9) {
- print "ok $_[0] # $_[1] is close to $_[2], \$^O eq $^O\n";
- } else {
- print "not ok $_[0] # $_[1] != $_[2]\n";
- }
- }
-}
-
-my $T = 1;
-tryeq $T++, 13 % 4, 1;
-tryeq $T++, -13 % 4, 3;
-tryeq $T++, 13 % -4, -3;
-tryeq $T++, -13 % -4, -1;
-
-# Give abs() a good work-out before using it in anger
-tryeq $T++, abs(0), 0;
-tryeq $T++, abs(1), 1;
-tryeq $T++, abs(-1), 1;
-tryeq $T++, abs(2147483647), 2147483647;
-tryeq $T++, abs(-2147483647), 2147483647;
-tryeq $T++, abs(4294967295), 4294967295;
-tryeq $T++, abs(-4294967295), 4294967295;
-tryeq $T++, abs(9223372036854775807), 9223372036854775807;
-tryeq $T++, abs(-9223372036854775807), 9223372036854775807;
-tryeq $T++, abs(1e50), 1e50; # Assume no change whatever; no slop needed
-tryeq $T++, abs(-1e50), 1e50; # Assume only sign bit flipped
-
-my $limit = 1e6;
-
-# Division (and modulo) of floating point numbers
-# seem to be rather sloppy in Cray.
-$limit = 1e8 if $^O eq 'unicos';
-
-try $T++, abs( 13e21 % 4e21 - 1e21) < $limit;
-try $T++, abs(-13e21 % 4e21 - 3e21) < $limit;
-try $T++, abs( 13e21 % -4e21 - -3e21) < $limit;
-try $T++, abs(-13e21 % -4e21 - -1e21) < $limit;
-
-# UVs should behave properly
-
-tryeq $T++, 4063328477 % 65535, 27407;
-tryeq $T++, 4063328477 % 4063328476, 1;
-tryeq $T++, 4063328477 % 2031664238, 1;
-tryeq $T++, 2031664238 % 4063328477, 2031664238;
-
-# These should trigger wrapping on 32 bit IVs and UVs
-
-tryeq $T++, 2147483647 + 0, 2147483647;
-
-# IV + IV promote to UV
-tryeq $T++, 2147483647 + 1, 2147483648;
-tryeq $T++, 2147483640 + 10, 2147483650;
-tryeq $T++, 2147483647 + 2147483647, 4294967294;
-# IV + UV promote to NV
-tryeq $T++, 2147483647 + 2147483649, 4294967296;
-# UV + IV promote to NV
-tryeq $T++, 4294967294 + 2, 4294967296;
-# UV + UV promote to NV
-tryeq $T++, 4294967295 + 4294967295, 8589934590;
-
-# UV + IV to IV
-tryeq $T++, 2147483648 + -1, 2147483647;
-tryeq $T++, 2147483650 + -10, 2147483640;
-# IV + UV to IV
-tryeq $T++, -1 + 2147483648, 2147483647;
-tryeq $T++, -10 + 4294967294, 4294967284;
-# IV + IV to NV
-tryeq $T++, -2147483648 + -2147483648, -4294967296;
-tryeq $T++, -2147483640 + -10, -2147483650;
-
-# Hmm. Don't forget the simple stuff
-tryeq $T++, 1 + 1, 2;
-tryeq $T++, 4 + -2, 2;
-tryeq $T++, -10 + 100, 90;
-tryeq $T++, -7 + -9, -16;
-tryeq $T++, -63 + +2, -61;
-tryeq $T++, 4 + -1, 3;
-tryeq $T++, -1 + 1, 0;
-tryeq $T++, +29 + -29, 0;
-tryeq $T++, -1 + 4, 3;
-tryeq $T++, +4 + -17, -13;
-
-# subtraction
-tryeq $T++, 3 - 1, 2;
-tryeq $T++, 3 - 15, -12;
-tryeq $T++, 3 - -7, 10;
-tryeq $T++, -156 - 5, -161;
-tryeq $T++, -156 - -5, -151;
-tryeq $T++, -5 - -12, 7;
-tryeq $T++, -3 - -3, 0;
-tryeq $T++, 15 - 15, 0;
-
-tryeq $T++, 2147483647 - 0, 2147483647;
-tryeq $T++, 2147483648 - 0, 2147483648;
-tryeq $T++, -2147483648 - 0, -2147483648;
-
-tryeq $T++, 0 - -2147483647, 2147483647;
-tryeq $T++, -1 - -2147483648, 2147483647;
-tryeq $T++, 2 - -2147483648, 2147483650;
-
-tryeq $T++, 4294967294 - 3, 4294967291;
-tryeq $T++, -2147483648 - -1, -2147483647;
-
-# IV - IV promote to UV
-tryeq $T++, 2147483647 - -1, 2147483648;
-tryeq $T++, 2147483647 - -2147483648, 4294967295;
-# UV - IV promote to NV
-tryeq $T++, 4294967294 - -3, 4294967297;
-# IV - IV promote to NV
-tryeq $T++, -2147483648 - +1, -2147483649;
-# UV - UV promote to IV
-tryeq $T++, 2147483648 - 2147483650, -2;
-# IV - UV promote to IV
-tryeq $T++, 2000000000 - 4000000000, -2000000000;
-
-# No warnings should appear;
-my $a;
-$a += 1;
-tryeq $T++, $a, 1;
-undef $a;
-$a += -1;
-tryeq $T++, $a, -1;
-undef $a;
-$a += 4294967290;
-tryeq $T++, $a, 4294967290;
-undef $a;
-$a += -4294967290;
-tryeq $T++, $a, -4294967290;
-undef $a;
-$a += 4294967297;
-tryeq $T++, $a, 4294967297;
-undef $a;
-$a += -4294967297;
-tryeq $T++, $a, -4294967297;
-
-my $s;
-$s -= 1;
-tryeq $T++, $s, -1;
-undef $s;
-$s -= -1;
-tryeq $T++, $s, +1;
-undef $s;
-$s -= -4294967290;
-tryeq $T++, $s, +4294967290;
-undef $s;
-$s -= 4294967290;
-tryeq $T++, $s, -4294967290;
-undef $s;
-$s -= 4294967297;
-tryeq $T++, $s, -4294967297;
-undef $s;
-$s -= -4294967297;
-tryeq $T++, $s, +4294967297;
-
-# Multiplication
-
-tryeq $T++, 1 * 3, 3;
-tryeq $T++, -2 * 3, -6;
-tryeq $T++, 3 * -3, -9;
-tryeq $T++, -4 * -3, 12;
-
-# check with 0xFFFF and 0xFFFF
-tryeq $T++, 65535 * 65535, 4294836225;
-tryeq $T++, 65535 * -65535, -4294836225;
-tryeq $T++, -65535 * 65535, -4294836225;
-tryeq $T++, -65535 * -65535, 4294836225;
-
-# check with 0xFFFF and 0x10001
-tryeq $T++, 65535 * 65537, 4294967295;
-tryeq $T++, 65535 * -65537, -4294967295;
-tryeq $T++, -65535 * 65537, -4294967295;
-tryeq $T++, -65535 * -65537, 4294967295;
-
-# check with 0x10001 and 0xFFFF
-tryeq $T++, 65537 * 65535, 4294967295;
-tryeq $T++, 65537 * -65535, -4294967295;
-tryeq $T++, -65537 * 65535, -4294967295;
-tryeq $T++, -65537 * -65535, 4294967295;
-
-# These should all be dones as NVs
-tryeq $T++, 65537 * 65537, 4295098369;
-tryeq $T++, 65537 * -65537, -4295098369;
-tryeq $T++, -65537 * 65537, -4295098369;
-tryeq $T++, -65537 * -65537, 4295098369;
-
-# will overflow an IV (in 32-bit)
-tryeq $T++, 46340 * 46342, 0x80001218;
-tryeq $T++, 46340 * -46342, -0x80001218;
-tryeq $T++, -46340 * 46342, -0x80001218;
-tryeq $T++, -46340 * -46342, 0x80001218;
-
-tryeq $T++, 46342 * 46340, 0x80001218;
-tryeq $T++, 46342 * -46340, -0x80001218;
-tryeq $T++, -46342 * 46340, -0x80001218;
-tryeq $T++, -46342 * -46340, 0x80001218;
-
-# will overflow a positive IV (in 32-bit)
-tryeq $T++, 65536 * 32768, 0x80000000;
-tryeq $T++, 65536 * -32768, -0x80000000;
-tryeq $T++, -65536 * 32768, -0x80000000;
-tryeq $T++, -65536 * -32768, 0x80000000;
-
-tryeq $T++, 32768 * 65536, 0x80000000;
-tryeq $T++, 32768 * -65536, -0x80000000;
-tryeq $T++, -32768 * 65536, -0x80000000;
-tryeq $T++, -32768 * -65536, 0x80000000;
-
-# 2147483647 is prime. bah.
-
-tryeq $T++, 46339 * 46341, 0x7ffea80f;
-tryeq $T++, 46339 * -46341, -0x7ffea80f;
-tryeq $T++, -46339 * 46341, -0x7ffea80f;
-tryeq $T++, -46339 * -46341, 0x7ffea80f;
-
-# leading space should be ignored
-
-tryeq $T++, 1 + " 1", 2;
-tryeq $T++, 3 + " -1", 2;
-tryeq $T++, 1.2, " 1.2";
-tryeq $T++, -1.2, " -1.2";
-
-# divide
-
-tryeq $T++, 28/14, 2;
-tryeq $T++, 28/-7, -4;
-tryeq $T++, -28/4, -7;
-tryeq $T++, -28/-2, 14;
-
-tryeq $T++, 0x80000000/1, 0x80000000;
-tryeq $T++, 0x80000000/-1, -0x80000000;
-tryeq $T++, -0x80000000/1, -0x80000000;
-tryeq $T++, -0x80000000/-1, 0x80000000;
-
-# The example for sloppy divide, rigged to avoid the peephole optimiser.
-tryeq_sloppy $T++, "20." / "5.", 4;
-
-tryeq $T++, 2.5 / 2, 1.25;
-tryeq $T++, 3.5 / -2, -1.75;
-tryeq $T++, -4.5 / 2, -2.25;
-tryeq $T++, -5.5 / -2, 2.75;
-
-# Bluuurg if your floating point can't accurately cope with powers of 2
-# [I suspect this is parsing string->float problems, not actual arith]
-tryeq_sloppy $T++, 18446744073709551616/1, 18446744073709551616; # Bluuurg
-tryeq_sloppy $T++, 18446744073709551616/2, 9223372036854775808;
-tryeq_sloppy $T++, 18446744073709551616/4294967296, 4294967296;
-tryeq_sloppy $T++, 18446744073709551616/9223372036854775808, 2;
-
-{
- # The peephole optimiser is wrong to think that it can substitute intops
- # in place of regular ops, because i_multiply can overflow.
- # Bug reported by "Sisyphus" <kalinabears at hdc.com.au>
- my $n = 1127;
-
- my $float = ($n % 1000) * 167772160.0;
- tryeq_sloppy $T++, $float, 21307064320;
-
- # On a 32 bit machine, if the i_multiply op is used, you will probably get
- # -167772160. It's actually undefined behaviour, so anything may happen.
- my $int = ($n % 1000) * 167772160;
- tryeq $T++, $int, 21307064320;
-
- my $t = time;
- my $t1000 = time() * 1000;
- try $T++, abs($t1000 -1000 * $t) <= 2000;
-}
-
-my $vms_no_ieee;
-if ($^O eq 'VMS') {
- use vars '%Config';
- eval {require Config; import Config};
- $vms_no_ieee = 1 unless defined($Config{useieee});
-}
-
-if ($^O eq 'vos') {
- print "not ok ", $T++, " # TODO VOS raises SIGFPE instead of producing infinity.\n";
-}
-elsif ($vms_no_ieee) {
- print $T++, " # SKIP -- the IEEE infinity model is unavailable in this configuration.\n"
-}
-elsif ($^O eq 'ultrix') {
- print "not ok ", $T++, " # TODO Ultrix enters deep nirvana instead of producing infinity.\n";
-}
-else {
- # The computation of $v should overflow and produce "infinity"
- # on any system whose max exponent is less than 10**1506.
- # The exact string used to represent infinity varies by OS,
- # so we don't test for it; all we care is that we don't die.
- #
- # Perl considers it to be an error if SIGFPE is raised.
- # Chances are the interpreter will die, since it doesn't set
- # up a handler for SIGFPE. That's why this test is last; to
- # minimize the number of test failures. --PG
-
- my $n = 5000;
- my $v = 2;
- while (--$n)
- {
- $v *= 2;
- }
- print "ok ", $T++, "\n";
-}
Deleted: trunk/contrib/perl/t/op/array_base.aux
===================================================================
--- trunk/contrib/perl/t/op/array_base.aux 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/array_base.aux 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,5 +0,0 @@
-our($ra1, $ri1, $rf1, $rfe1);
-$ra1 = $[;
-BEGIN { $ri1 = $^H; $rf1 = $^H{foo}; $rfe1 = exists($^H{foo}); }
-
-1;
Deleted: trunk/contrib/perl/t/op/cmp.t
===================================================================
--- trunk/contrib/perl/t/op/cmp.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/cmp.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,318 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-# 2s complement assumption. Won't break test, just makes the internals of
-# the SVs less interesting if were not on 2s complement system.
-my $uv_max = ~0;
-my $uv_maxm1 = ~0 ^ 1;
-my $uv_big = $uv_max;
-$uv_big = ($uv_big - 20000) | 1;
-my ($iv0, $iv1, $ivm1, $iv_min, $iv_max, $iv_big, $iv_small);
-$iv_max = $uv_max; # Do copy, *then* divide
-$iv_max /= 2;
-$iv_min = $iv_max;
-{
- use integer;
- $iv0 = 2 - 2;
- $iv1 = 3 - 2;
- $ivm1 = 2 - 3;
- $iv_max -= 1;
- $iv_min += 0;
- $iv_big = $iv_max - 3;
- $iv_small = $iv_min + 2;
-}
-my $uv_bigi = $iv_big;
-$uv_bigi |= 0x0;
-
-my @array = qw(perl rules);
-
-my @raw, @upgraded, @utf8;
-foreach ("\x{1F4A9}", chr(163), 'N') {
- push @raw, $_;
- my $temp = $_ . chr 256;
- chop $temp;
- push @upgraded, $temp;
- my $utf8 = $_;
- next if utf8::upgrade($utf8) == length $_;
- utf8::encode($utf8);
- push @utf8, $utf8;
-}
-
-# Seems one needs to perform the maths on 'Inf' to get the NV correctly primed.
- at FOO = ('s', 'N/A', 'a', 'NaN', -1, undef, 0, 1, 3.14, 1e37, 0.632120558, -.5,
- 'Inf'+1, '-Inf'-1, 0x0, 0x1, 0x5, 0xFFFFFFFF, $uv_max, $uv_maxm1,
- $uv_big, $uv_bigi, $iv0, $iv1, $ivm1, $iv_min, $iv_max, $iv_big,
- $iv_small, \$array[0], \$array[0], \$array[1], \$^X, @raw, @upgraded,
- @utf8);
-
-$expect = 7 * ($#FOO+2) * ($#FOO+1) + 6 * @raw + 6 * @utf8;
-print "1..$expect\n";
-
-my $bad_NaN = 0;
-
-{
- # gcc's -ffast-math option may stop NaNs working correctly
- use Config;
- my $ccflags = $Config{ccflags} // '';
- $bad_NaN = 1 if $ccflags =~ /-ffast-math\b/;
-}
-
-sub nok ($$$$$$$$) {
- my ($test, $left, $threeway, $right, $result, $i, $j, $boolean) = @_;
- $result = defined $result ? "'$result'" : 'undef';
- if ($bad_NaN && ($left eq 'NaN' || $right eq 'NaN')) {
- print "ok $test # skipping failed NaN test under -ffast-math\n";
- }
- else {
- print "not ok $test # ($left $threeway $right) gives: $result \$i=$i \$j=$j, $boolean disagrees\n";
- }
-}
-
-my $ok = 0;
-for my $i (0..$#FOO) {
- for my $j ($i..$#FOO) {
- $ok++;
- # Comparison routines may convert these internally, which would change
- # what is used to determine the comparison on later runs. Hence copy
- my ($i1, $i2, $i3, $i4, $i5, $i6, $i7, $i8, $i9, $i10,
- $i11, $i12, $i13, $i14, $i15, $i16, $i17) =
- ($FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i],
- $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i],
- $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i]);
- my ($j1, $j2, $j3, $j4, $j5, $j6, $j7, $j8, $j9, $j10,
- $j11, $j12, $j13, $j14, $j15, $j16, $j17) =
- ($FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j],
- $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j],
- $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j]);
- my $cmp = $i1 <=> $j1;
- if (!defined($cmp) ? !($i2 < $j2)
- : ($cmp == -1 && $i2 < $j2 ||
- $cmp == 0 && !($i2 < $j2) ||
- $cmp == 1 && !($i2 < $j2)))
- {
- print "ok $ok\n";
- }
- else {
- nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '<');
- }
- $ok++;
- if (!defined($cmp) ? !($i4 == $j4)
- : ($cmp == -1 && !($i4 == $j4) ||
- $cmp == 0 && $i4 == $j4 ||
- $cmp == 1 && !($i4 == $j4)))
- {
- print "ok $ok\n";
- }
- else {
- nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '==');
- }
- $ok++;
- if (!defined($cmp) ? !($i5 > $j5)
- : ($cmp == -1 && !($i5 > $j5) ||
- $cmp == 0 && !($i5 > $j5) ||
- $cmp == 1 && ($i5 > $j5)))
- {
- print "ok $ok\n";
- }
- else {
- nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '>');
- }
- $ok++;
- if (!defined($cmp) ? !($i6 >= $j6)
- : ($cmp == -1 && !($i6 >= $j6) ||
- $cmp == 0 && $i6 >= $j6 ||
- $cmp == 1 && $i6 >= $j6))
- {
- print "ok $ok\n";
- }
- else {
- nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '>=');
- }
- $ok++;
- # OK, so the docs are wrong it seems. NaN != NaN
- if (!defined($cmp) ? ($i7 != $j7)
- : ($cmp == -1 && $i7 != $j7 ||
- $cmp == 0 && !($i7 != $j7) ||
- $cmp == 1 && $i7 != $j7))
- {
- print "ok $ok\n";
- }
- else {
- nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '!=');
- }
- $ok++;
- if (!defined($cmp) ? !($i8 <= $j8)
- : ($cmp == -1 && $i8 <= $j8 ||
- $cmp == 0 && $i8 <= $j8 ||
- $cmp == 1 && !($i8 <= $j8)))
- {
- print "ok $ok\n";
- }
- else {
- nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '<=');
- }
- $ok++;
- my $pmc = $j16 <=> $i16; # cmp it in reverse
- # Should give -ve of other answer, or undef for NaNs
- # a + -a should be zero. not zero is truth. which avoids using ==
- if (defined($cmp) ? !($cmp + $pmc) : !defined $pmc)
- {
- print "ok $ok\n";
- }
- else {
- nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '<=> transposed');
- }
-
-
- # String comparisons
- $ok++;
- $cmp = $i9 cmp $j9;
- if ($cmp == -1 && $i10 lt $j10 ||
- $cmp == 0 && !($i10 lt $j10) ||
- $cmp == 1 && !($i10 lt $j10))
- {
- print "ok $ok\n";
- }
- else {
- nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'lt');
- }
- $ok++;
- if ($cmp == -1 && !($i11 eq $j11) ||
- $cmp == 0 && ($i11 eq $j11) ||
- $cmp == 1 && !($i11 eq $j11))
- {
- print "ok $ok\n";
- }
- else {
- nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'eq');
- }
- $ok++;
- if ($cmp == -1 && !($i12 gt $j12) ||
- $cmp == 0 && !($i12 gt $j12) ||
- $cmp == 1 && ($i12 gt $j12))
- {
- print "ok $ok\n";
- }
- else {
- nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'gt');
- }
- $ok++;
- if ($cmp == -1 && $i13 le $j13 ||
- $cmp == 0 && ($i13 le $j13) ||
- $cmp == 1 && !($i13 le $j13))
- {
- print "ok $ok\n";
- }
- else {
- nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'le');
- }
- $ok++;
- if ($cmp == -1 && ($i14 ne $j14) ||
- $cmp == 0 && !($i14 ne $j14) ||
- $cmp == 1 && ($i14 ne $j14))
- {
- print "ok $ok\n";
- }
- else {
- nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'ne');
- }
- $ok++;
- if ($cmp == -1 && !($i15 ge $j15) ||
- $cmp == 0 && ($i15 ge $j15) ||
- $cmp == 1 && ($i15 ge $j15))
- {
- print "ok $ok\n";
- }
- else {
- nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'ge');
- }
- $ok++;
- $pmc = $j17 cmp $i17; # cmp it in reverse
- # Should give -ve of other answer
- # a + -a should be zero. not zero is truth. which avoids using ==
- if (!($cmp + $pmc))
- {
- print "ok $ok\n";
- }
- else {
- nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'cmp transposed');
- }
- }
-}
-
-# We know the answers for these. We can rely on the consistency checks above
-# to test the other string comparisons.
-
-while (my ($i, $v) = each @raw) {
- # Copy, to avoid any inadvertent conversion
- my ($raw, $cooked, $not);
- $raw = $v;
- $cooked = $upgraded[$i];
- $not = $raw eq $cooked ? '' : 'not ';
- printf "%sok %d # eq, chr %d\n", $not, ++$ok, ord $raw;
-
- $raw = $v;
- $cooked = $upgraded[$i];
- $not = $raw ne $cooked ? 'not ' : '';
- printf "%sok %d # ne, chr %d\n", $not, ++$ok, ord $raw;
-
- $raw = $v;
- $cooked = $upgraded[$i];
- $not = (($raw cmp $cooked) == 0) ? '' : 'not ';
- printf "%sok %d # cmp, chr %d\n", $not, ++$ok, ord $raw;
-
- # And now, transposed.
- $raw = $v;
- $cooked = $upgraded[$i];
- $not = $cooked eq $raw ? '' : 'not ';
- printf "%sok %d # eq, chr %d\n", $not, ++$ok, ord $raw;
-
- $raw = $v;
- $cooked = $upgraded[$i];
- $not = $cooked ne $raw ? 'not ' : '';
- printf "%sok %d # ne, chr %d\n", $not, ++$ok, ord $raw;
-
- $raw = $v;
- $cooked = $upgraded[$i];
- $not = (($cooked cmp $raw) == 0) ? '' : 'not ';
- printf "%sok %d # cmp, chr %d\n", $not, ++$ok, ord $raw;
-}
-
-while (my ($i, $v) = each @utf8) {
- # Copy, to avoid any inadvertent conversion
- my ($raw, $cooked, $not);
- $raw = $raw[$i];
- $cooked = $v;
- $not = $raw eq $cooked ? 'not ' : '';
- printf "%sok %d # eq vs octets, chr %d\n", $not, ++$ok, ord $raw;
-
- $raw = $raw[$i];
- $cooked = $v;
- $not = $raw ne $cooked ? '' : 'not ';
- printf "%sok %d # ne vs octets, chr %d\n", $not, ++$ok, ord $raw;
-
- $raw = $raw[$i];
- $cooked = $v;
- $not = (($raw cmp $cooked) == 0) ? 'not ' : '';
- printf "%sok %d # cmp vs octects, chr %d\n", $not, ++$ok, ord $raw;
-
- # And now, transposed.
- $raw = $raw[$i];
- $cooked = $v;
- $not = $cooked eq $raw ? 'not ' : '';
- printf "%sok %d # eq vs octets, chr %d\n", $not, ++$ok, ord $raw;
-
- $raw = $raw[$i];
- $cooked = $v;
- $not = $cooked ne $raw? '' : 'not ';
- printf "%sok %d # ne vs octets, chr %d\n", $not, ++$ok, ord $raw;
-
- $raw = $raw[$i];
- $cooked = $v;
- $not = (($cooked cmp $raw) == 0) ? 'not ' : '';
- printf "%sok %d # cmp vs octects, chr %d\n", $not, ++$ok, ord $raw;
-}
Deleted: trunk/contrib/perl/t/op/concat.t
===================================================================
--- trunk/contrib/perl/t/op/concat.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/concat.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,161 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-# This ok() function is specially written to avoid any concatenation.
-my $test = 1;
-sub ok {
- my($ok, $name) = @_;
-
- printf "%sok %d - %s\n", ($ok ? "" : "not "), $test, $name;
-
- printf "# Failed test at line %d\n", (caller)[2] unless $ok;
-
- $test++;
- return $ok;
-}
-
-print "1..30\n";
-
-($a, $b, $c) = qw(foo bar);
-
-ok("$a" eq "foo", "verifying assign");
-ok("$a$b" eq "foobar", "basic concatenation");
-ok("$c$a$c" eq "foo", "concatenate undef, fore and aft");
-
-# Okay, so that wasn't very challenging. Let's go Unicode.
-
-{
- # bug id 20000819.004
-
- $_ = $dx = "\x{10f2}";
- s/($dx)/$dx$1/;
- {
- ok($_ eq "$dx$dx","bug id 20000819.004, back");
- }
-
- $_ = $dx = "\x{10f2}";
- s/($dx)/$1$dx/;
- {
- ok($_ eq "$dx$dx","bug id 20000819.004, front");
- }
-
- $dx = "\x{10f2}";
- $_ = "\x{10f2}\x{10f2}";
- s/($dx)($dx)/$1$2/;
- {
- ok($_ eq "$dx$dx","bug id 20000819.004, front and back");
- }
-}
-
-{
- # bug id 20000901.092
- # test that undef left and right of utf8 results in a valid string
-
- my $a;
- $a .= "\x{1ff}";
- ok($a eq "\x{1ff}", "bug id 20000901.092, undef left");
- $a .= undef;
- ok($a eq "\x{1ff}", "bug id 20000901.092, undef right");
-}
-
-{
- # ID 20001020.006
-
- "x" =~ /(.)/; # unset $2
-
- # Without the fix this 5.7.0 would croak:
- # Modification of a read-only value attempted at ...
- eval {"$2\x{1234}"};
- ok(!$@, "bug id 20001020.006, left");
-
- # For symmetry with the above.
- eval {"\x{1234}$2"};
- ok(!$@, "bug id 20001020.006, right");
-
- *pi = \undef;
- # This bug existed earlier than the $2 bug, but is fixed with the same
- # patch. Without the fix this 5.7.0 would also croak:
- # Modification of a read-only value attempted at ...
- eval{"$pi\x{1234}"};
- ok(!$@, "bug id 20001020.006, constant left");
-
- # For symmetry with the above.
- eval{"\x{1234}$pi"};
- ok(!$@, "bug id 20001020.006, constant right");
-}
-
-sub beq { use bytes; $_[0] eq $_[1]; }
-
-{
- # concat should not upgrade its arguments.
- my($l, $r, $c);
-
- ($l, $r, $c) = ("\x{101}", "\x{fe}", "\x{101}\x{fe}");
- ok(beq($l.$r, $c), "concat utf8 and byte");
- ok(beq($l, "\x{101}"), "right not changed after concat u+b");
- ok(beq($r, "\x{fe}"), "left not changed after concat u+b");
-
- ($l, $r, $c) = ("\x{fe}", "\x{101}", "\x{fe}\x{101}");
- ok(beq($l.$r, $c), "concat byte and utf8");
- ok(beq($l, "\x{fe}"), "right not changed after concat b+u");
- ok(beq($r, "\x{101}"), "left not changed after concat b+u");
-}
-
-{
- my $a; ($a .= 5) . 6;
- ok($a == 5, '($a .= 5) . 6 - present since 5.000');
-}
-
-{
- # [perl #24508] optree construction bug
- sub strfoo { "x" }
- my ($x, $y);
- $y = ($x = '' . strfoo()) . "y";
- ok( "$x,$y" eq "x,xy", 'figures out correct target' );
-}
-
-{
- # [perl #26905] "use bytes" doesn't apply byte semantics to concatenation
-
- my $p = "\xB6"; # PILCROW SIGN (ASCII/EBCDIC), 2bytes in UTF-X
- my $u = "\x{100}";
- my $b = pack 'a*', "\x{100}";
- my $pu = "\xB6\x{100}";
- my $up = "\x{100}\xB6";
- my $x1 = $p;
- my $y1 = $u;
-
- use bytes;
- ok(beq($p.$u, $p.$b), "perl #26905, left eq bytes");
- ok(beq($u.$p, $b.$p), "perl #26905, right eq bytes");
- ok(!beq($p.$u, $pu), "perl #26905, left ne unicode");
- ok(!beq($u.$p, $up), "perl #26905, right ne unicode");
-
- $x1 .= $u;
- $x2 = $p . $u;
- $y1 .= $p;
- $y2 = $u . $p;
-
- no bytes;
- ok(beq($x1, $x2), "perl #26905, left, .= vs = . in bytes");
- ok(beq($y1, $y2), "perl #26905, right, .= vs = . in bytes");
- ok(($x1 eq $x2), "perl #26905, left, .= vs = . in chars");
- ok(($y1 eq $y2), "perl #26905, right, .= vs = . in chars");
-}
-
-{
- # Concatenation needs to preserve UTF8ness of left oper.
- my $x = eval"qr/\x{fff}/";
- ok( ord chop($x .= "\303\277") == 191, "UTF8ness preserved" );
-}
-
-{
- my $x;
- $x = "a" . "b";
- $x .= "-append-";
- ok($x eq "ab-append-", "Appending to something initialized using constant folding");
-}
Deleted: trunk/contrib/perl/t/op/lc_user.t
===================================================================
--- trunk/contrib/perl/t/op/lc_user.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/lc_user.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,33 +0,0 @@
-BEGIN {
- chdir 't';
- @INC = '../lib';
- require './test.pl';
-}
-
-plan tests => 5;
-
-%utf8::ToSpecUpper = (
-"s" => "SS", # Make sure can handle weird ASCII translations
-);
-
-sub ToUpper {
- return <<END;
-0061 0063 0041
-END
-}
-
-is("\Ufoo\x{101}", "foo\x{101}", "no changes on 'foo'");
-is("\Ubar\x{101}", "BAr\x{101}", "changing 'ab' on 'bar' ");
-my $s = 's';
-utf8::upgrade $s;
-is(uc($s), "SS", "Verify uc('s') is 'SS' with our weird xlation, and utf8");
-
-sub ToLower {
- return <<END;
-0041 0061
-END
-}
-
-is("\LFOO\x{100}", "FOO\x{100}", "no changes on 'FOO'");
-is("\LBAR\x{100}", "BaR\x{100}", "changing 'A' on 'BAR' ");
-
Deleted: trunk/contrib/perl/t/op/magic_phase.t
===================================================================
--- trunk/contrib/perl/t/op/magic_phase.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/magic_phase.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,48 +0,0 @@
-#!./perl
-
-use strict;
-use warnings;
-
-# Test ${^GLOBAL_PHASE}
-#
-# Test::More, test.pl, etc assert plans in END, which happens before global
-# destruction, so we don't want to use those here.
-
-BEGIN { print "1..7\n" }
-
-sub ok ($$) {
- print "not " if !$_[0];
- print "ok";
- print " - $_[1]" if defined $_[1];
- print "\n";
-}
-
-BEGIN {
- ok ${^GLOBAL_PHASE} eq 'START', 'START';
-}
-
-CHECK {
- ok ${^GLOBAL_PHASE} eq 'CHECK', 'CHECK';
-}
-
-INIT {
- ok ${^GLOBAL_PHASE} eq 'INIT', 'INIT';
-}
-
-ok ${^GLOBAL_PHASE} eq 'RUN', 'RUN';
-
-sub Moo::DESTROY {
- ok ${^GLOBAL_PHASE} eq 'RUN', 'DESTROY is run-time too, usually';
-}
-
-my $tiger = bless {}, Moo::;
-
-sub Kooh::DESTROY {
- ok ${^GLOBAL_PHASE} eq 'DESTRUCT', 'DESTRUCT';
-}
-
-our $affe = bless {}, Kooh::;
-
-END {
- ok ${^GLOBAL_PHASE} eq 'END', 'END';
-}
Deleted: trunk/contrib/perl/t/op/pat.t
===================================================================
--- trunk/contrib/perl/t/op/pat.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/pat.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,4373 +0,0 @@
-#!./perl
-#
-# This is a home for regular expression tests that don't fit into
-# the format supported by op/regexp.t. If you want to add a test
-# that does fit that format, add it to op/re_tests, not here.
-
-use strict;
-use warnings;
-use 5.010;
-
-
-sub run_tests;
-
-$| = 1;
-
-my $EXPECTED_TESTS = 4065; # Update this when adding/deleting tests.
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-our $TODO;
-our $Message = "Noname test";
-our $Error;
-our $DiePattern;
-our $WarnPattern;
-our $BugId;
-our $PatchId;
-our $running_as_thread;
-
-my $ordA = ord ('A'); # This defines ASCII/UTF-8 vs EBCDIC/UTF-EBCDIC
-# This defined the platform.
-my $IS_ASCII = $ordA == 65;
-my $IS_EBCDIC = $ordA == 193;
-
-use vars '%Config';
-eval 'use Config'; # Defaults assumed if this fails
-
-my $test = 0;
-
-print "1..$EXPECTED_TESTS\n";
-
-run_tests unless caller ();
-
-END {
-}
-
-sub pretty {
- my ($mess) = @_;
- $mess =~ s/\n/\\n/g;
- $mess =~ s/\r/\\r/g;
- $mess =~ s/\t/\\t/g;
- $mess =~ s/([\00-\37\177])/sprintf '\%03o', ord $1/eg;
- $mess =~ s/#/\\#/g;
- $mess;
-}
-
-sub safe_globals {
- defined($_) and s/#/\\#/g for $BugId, $PatchId, $TODO;
-}
-
-sub _ok {
- my ($ok, $mess, $error) = @_;
- safe_globals();
- $mess = pretty ($mess // $Message);
- $mess .= "; Bug $BugId" if defined $BugId;
- $mess .= "; Patch $PatchId" if defined $PatchId;
- $mess .= " # TODO $TODO" if defined $TODO;
-
- my $line_nr = (caller(1)) [2];
-
- printf "%sok %d - %s\n",
- ($ok ? "" : "not "),
- ++ $test,
- "$mess\tLine $line_nr";
-
- unless ($ok) {
- print "# Failed test at line $line_nr\n" unless defined $TODO;
- if ($error //= $Error) {
- no warnings 'utf8';
- chomp $error;
- $error = join "\n#", map {pretty $_} split /\n\h*#/ => $error;
- $error = "# $error" unless $error =~ /^\h*#/;
- print $error, "\n";
- }
- }
-
- return $ok;
-}
-
-# Force scalar context on the pattern match
-sub ok ($;$$) {_ok $_ [0], $_ [1], $_ [2]}
-sub nok ($;$$) {_ok !$_ [0], "Failed: " . ($_ [1] // $Message), $_ [2]}
-
-
-sub skip {
- my $why = shift;
- safe_globals();
- $why =~ s/\n.*//s;
- $why .= "; Bug $BugId" if defined $BugId;
- # seems like the new harness code doesnt like todo and skip to be mixed.
- # which seems like a bug in the harness to me. -- dmq
- #$why .= " # TODO $TODO" if defined $TODO;
-
- my $n = shift // 1;
- my $line_nr = (caller(0)) [2];
- for (1 .. $n) {
- ++ $test;
- #print "not " if defined $TODO;
- print "ok $test # skip $why\tLine $line_nr\n";
- }
- no warnings "exiting";
- last SKIP;
-}
-
-sub iseq ($$;$) {
- my ($got, $expect, $name) = @_;
-
- $_ = defined ($_) ? "'$_'" : "undef" for $got, $expect;
-
- my $ok = $got eq $expect;
- my $error = "# expected: $expect\n" .
- "# result: $got";
-
- _ok $ok, $name, $error;
-}
-
-sub isneq ($$;$) {
- my ($got, $expect, $name) = @_;
- my $todo = $TODO ? " # TODO $TODO" : '';
-
- $_ = defined ($_) ? "'$_'" : "undef" for $got, $expect;
-
- my $ok = $got ne $expect;
- my $error = "# results are equal ($got)";
-
- _ok $ok, $name, $error;
-}
-
-
-sub eval_ok ($;$) {
- my ($code, $name) = @_;
- local $@;
- if (ref $code) {
- _ok eval {&$code} && !$@, $name;
- }
- else {
- _ok eval ($code) && !$@, $name;
- }
-}
-
-sub must_die {
- my ($code, $pattern, $name) = @_;
- $pattern //= $DiePattern;
- undef $@;
- ref $code ? &$code : eval $code;
- my $r = $@ && $@ =~ /$pattern/;
- _ok $r, $name // $Message // "\$\@ =~ /$pattern/";
-}
-
-sub must_warn {
- my ($code, $pattern, $name) = @_;
- $pattern //= $WarnPattern;
- my $w;
- local $SIG {__WARN__} = sub {$w .= join "" => @_};
- use warnings 'all';
- ref $code ? &$code : eval $code;
- my $r = $w && $w =~ /$pattern/;
- $w //= "UNDEF";
- _ok $r, $name // $Message // "Got warning /$pattern/",
- "# expected: /$pattern/\n" .
- "# result: $w";
-}
-
-sub may_not_warn {
- my ($code, $name) = @_;
- my $w;
- local $SIG {__WARN__} = sub {$w .= join "" => @_};
- use warnings 'all';
- ref $code ? &$code : eval $code;
- _ok !$w, $name // ($Message ? "$Message (did not warn)"
- : "Did not warn"),
- "Got warning '$w'";
-}
-
-
-#
-# Tests start here.
-#
-sub run_tests {
-
- {
-
- my $x = "abc\ndef\n";
-
- ok $x =~ /^abc/, qq ["$x" =~ /^abc/];
- ok $x !~ /^def/, qq ["$x" !~ /^def/];
-
- # used to be a test for $*
- ok $x =~ /^def/m, qq ["$x" =~ /^def/m];
-
- nok $x =~ /^xxx/, qq ["$x" =~ /^xxx/];
- nok $x !~ /^abc/, qq ["$x" !~ /^abc/];
-
- ok $x =~ /def/, qq ["$x" =~ /def/];
- nok $x !~ /def/, qq ["$x" !~ /def/];
-
- ok $x !~ /.def/, qq ["$x" !~ /.def/];
- nok $x =~ /.def/, qq ["$x" =~ /.def/];
-
- ok $x =~ /\ndef/, qq ["$x" =~ /\ndef/];
- nok $x !~ /\ndef/, qq ["$x" !~ /\ndef/];
- }
-
- {
- $_ = '123';
- ok /^([0-9][0-9]*)/, qq [\$_ = '$_'; /^([0-9][0-9]*)/];
- }
-
- {
- $_ = 'aaabbbccc';
- ok /(a*b*)(c*)/ && $1 eq 'aaabbb' && $2 eq 'ccc',
- qq [\$_ = '$_'; /(a*b*)(c*)/];
- ok /(a+b+c+)/ && $1 eq 'aaabbbccc', qq [\$_ = '$_'; /(a+b+c+)/];
- nok /a+b?c+/, qq [\$_ = '$_'; /a+b?c+/];
-
- $_ = 'aaabccc';
- ok /a+b?c+/, qq [\$_ = '$_'; /a+b?c+/];
- ok /a*b?c*/, qq [\$_ = '$_'; /a*b?c*/];
-
- $_ = 'aaaccc';
- ok /a*b?c*/, qq [\$_ = '$_'; /a*b?c*/];
- nok /a*b+c*/, qq [\$_ = '$_'; /a*b+c*/];
-
- $_ = 'abcdef';
- ok /bcd|xyz/, qq [\$_ = '$_'; /bcd|xyz/];
- ok /xyz|bcd/, qq [\$_ = '$_'; /xyz|bcd/];
- ok m|bc/*d|, qq [\$_ = '$_'; m|bc/*d|];
- ok /^$_$/, qq [\$_ = '$_'; /^\$_\$/];
- }
-
- {
- # used to be a test for $*
- ok "ab\ncd\n" =~ /^cd/m, qq ["ab\ncd\n" =~ /^cd/m];
- }
-
- {
- our %XXX = map {($_ => $_)} 123, 234, 345;
-
- our @XXX = ('ok 1','not ok 1', 'ok 2','not ok 2','not ok 3');
- while ($_ = shift(@XXX)) {
- my $f = index ($_, 'not') >= 0 ? \&nok : \&ok;
- my $r = ?(.*)?;
- &$f ($r, "?(.*)?");
- /not/ && reset;
- if (/not ok 2/) {
- if ($^O eq 'VMS') {
- $_ = shift(@XXX);
- }
- else {
- reset 'X';
- }
- }
- }
-
- SKIP: {
- if ($^O eq 'VMS') {
- skip "Reset 'X'", 1;
- }
- ok !keys %XXX, "%XXX is empty";
- }
-
- }
-
- {
- local $Message = "Test empty pattern";
- my $xyz = 'xyz';
- my $cde = 'cde';
-
- $cde =~ /[^ab]*/;
- $xyz =~ //;
- iseq $&, $xyz;
-
- my $foo = '[^ab]*';
- $cde =~ /$foo/;
- $xyz =~ //;
- iseq $&, $xyz;
-
- $cde =~ /$foo/;
- my $null;
- no warnings 'uninitialized';
- $xyz =~ /$null/;
- iseq $&, $xyz;
-
- $null = "";
- $xyz =~ /$null/;
- iseq $&, $xyz;
- }
-
- {
- local $Message = q !Check $`, $&, $'!;
- $_ = 'abcdefghi';
- /def/; # optimized up to cmd
- iseq "$`:$&:$'", 'abc:def:ghi';
-
- no warnings 'void';
- /cde/ + 0; # optimized only to spat
- iseq "$`:$&:$'", 'ab:cde:fghi';
-
- /[d][e][f]/; # not optimized
- iseq "$`:$&:$'", 'abc:def:ghi';
- }
-
- {
- $_ = 'now is the {time for all} good men to come to.';
- / {([^}]*)}/;
- iseq $1, 'time for all', "Match braces";
- }
-
- {
- local $Message = "{N,M} quantifier";
- $_ = 'xxx {3,4} yyy zzz';
- ok /( {3,4})/;
- iseq $1, ' ';
- ok !/( {4,})/;
- ok /( {2,3}.)/;
- iseq $1, ' y';
- ok /(y{2,3}.)/;
- iseq $1, 'yyy ';
- ok !/x {3,4}/;
- ok !/^xxx {3,4}/;
- }
-
- {
- local $Message = "Test /g";
- local $" = ":";
- $_ = "now is the time for all good men to come to.";
- my @words = /(\w+)/g;
- my $exp = "now:is:the:time:for:all:good:men:to:come:to";
-
- iseq "@words", $exp;
-
- @words = ();
- while (/\w+/g) {
- push (@words, $&);
- }
- iseq "@words", $exp;
-
- @words = ();
- pos = 0;
- while (/to/g) {
- push(@words, $&);
- }
- iseq "@words", "to:to";
-
- pos $_ = 0;
- @words = /to/g;
- iseq "@words", "to:to";
- }
-
- {
- $_ = "abcdefghi";
-
- my $pat1 = 'def';
- my $pat2 = '^def';
- my $pat3 = '.def.';
- my $pat4 = 'abc';
- my $pat5 = '^abc';
- my $pat6 = 'abc$';
- my $pat7 = 'ghi';
- my $pat8 = '\w*ghi';
- my $pat9 = 'ghi$';
-
- my $t1 = my $t2 = my $t3 = my $t4 = my $t5 =
- my $t6 = my $t7 = my $t8 = my $t9 = 0;
-
- for my $iter (1 .. 5) {
- $t1++ if /$pat1/o;
- $t2++ if /$pat2/o;
- $t3++ if /$pat3/o;
- $t4++ if /$pat4/o;
- $t5++ if /$pat5/o;
- $t6++ if /$pat6/o;
- $t7++ if /$pat7/o;
- $t8++ if /$pat8/o;
- $t9++ if /$pat9/o;
- }
- my $x = "$t1$t2$t3$t4$t5$t6$t7$t8$t9";
- iseq $x, '505550555', "Test /o";
- }
-
-
- SKIP: {
- my $xyz = 'xyz';
- ok "abc" =~ /^abc$|$xyz/, "| after \$";
-
- # perl 4.009 says "unmatched ()"
- local $Message = '$ inside ()';
-
- my $result;
- eval '"abc" =~ /a(bc$)|$xyz/; $result = "$&:$1"';
- iseq $@, "" or skip "eval failed", 1;
- iseq $result, "abc:bc";
- }
-
-
- {
- local $Message = "Scalar /g";
- $_ = "abcfooabcbar";
-
- ok /abc/g && $` eq "";
- ok /abc/g && $` eq "abcfoo";
- ok !/abc/g;
-
- local $Message = "Scalar /gi";
- pos = 0;
- ok /ABC/gi && $` eq "";
- ok /ABC/gi && $` eq "abcfoo";
- ok !/ABC/gi;
-
- local $Message = "Scalar /g";
- pos = 0;
- ok /abc/g && $' eq "fooabcbar";
- ok /abc/g && $' eq "bar";
-
- $_ .= '';
- my @x = /abc/g;
- iseq @x, 2, "/g reset after assignment";
- }
-
- {
- local $Message = '/g, \G and pos';
- $_ = "abdc";
- pos $_ = 2;
- /\Gc/gc;
- iseq pos $_, 2;
- /\Gc/g;
- ok !defined pos $_;
- }
-
- {
- local $Message = '(?{ })';
- our $out = 1;
- 'abc' =~ m'a(?{ $out = 2 })b';
- iseq $out, 2;
-
- $out = 1;
- 'abc' =~ m'a(?{ $out = 3 })c';
- iseq $out, 1;
- }
-
-
- {
- $_ = 'foobar1 bar2 foobar3 barfoobar5 foobar6';
- my @out = /(?<!foo)bar./g;
- iseq "@out", 'bar2 barf', "Negative lookbehind";
- }
-
- {
- local $Message = "REG_INFTY tests";
- # Tests which depend on REG_INFTY
- $::reg_infty = $Config {reg_infty} // 32767;
- $::reg_infty_m = $::reg_infty - 1;
- $::reg_infty_p = $::reg_infty + 1;
- $::reg_infty_m = $::reg_infty_m; # Surpress warning.
-
- # As well as failing if the pattern matches do unexpected things, the
- # next three tests will fail if you should have picked up a lower-than-
- # default value for $reg_infty from Config.pm, but have not.
-
- eval_ok q (('aaa' =~ /(a{1,$::reg_infty_m})/)[0] eq 'aaa');
- eval_ok q (('a' x $::reg_infty_m) =~ /a{$::reg_infty_m}/);
- eval_ok q (('a' x ($::reg_infty_m - 1)) !~ /a{$::reg_infty_m}/);
- eval "'aaa' =~ /a{1,$::reg_infty}/";
- ok $@ =~ /^\QQuantifier in {,} bigger than/;
- eval "'aaa' =~ /a{1,$::reg_infty_p}/";
- ok $@ =~ /^\QQuantifier in {,} bigger than/;
- }
-
- {
- # Poke a couple more parse failures
- my $context = 'x' x 256;
- eval qq("${context}y" =~ /(?<=$context)y/);
- ok $@ =~ /^\QLookbehind longer than 255 not/, "Lookbehind limit";
- }
-
- {
- # Long Monsters
- local $Message = "Long monster";
- for my $l (125, 140, 250, 270, 300000, 30) { # Ordered to free memory
- my $a = 'a' x $l;
- local $Error = "length = $l";
- ok "ba$a=" =~ /a$a=/;
- nok "b$a=" =~ /a$a=/;
- ok "b$a=" =~ /ba+=/;
-
- ok "ba$a=" =~ /b(?:a|b)+=/;
- }
- }
-
-
- {
- # 20000 nodes, each taking 3 words per string, and 1 per branch
- my $long_constant_len = join '|', 12120 .. 32645;
- my $long_var_len = join '|', 8120 .. 28645;
- my %ans = ( 'ax13876y25677lbc' => 1,
- 'ax13876y25677mcb' => 0, # not b.
- 'ax13876y35677nbc' => 0, # Num too big
- 'ax13876y25677y21378obc' => 1,
- 'ax13876y25677y21378zbc' => 0, # Not followed by [k-o]
- 'ax13876y25677y21378y21378kbc' => 1,
- 'ax13876y25677y21378y21378kcb' => 0, # Not b.
- 'ax13876y25677y21378y21378y21378kbc' => 0, # 5 runs
- );
-
- local $Message = "20000 nodes";
- for (keys %ans) {
- local $Error = "const-len '$_'";
- ok !($ans{$_} xor /a(?=([yx]($long_constant_len)){2,4}[k-o]).*b./o);
-
- local $Error = "var-len '$_'";
- ok !($ans{$_} xor /a(?=([yx]($long_var_len)){2,4}[k-o]).*b./o);
- }
- }
-
- {
- local $Message = "Complicated backtracking";
- $_ = " a (bla()) and x(y b((l)u((e))) and b(l(e)e)e";
- my $expect = "(bla()) ((l)u((e))) (l(e)e)";
-
- use vars '$c';
- sub matchit {
- m/
- (
- \(
- (?{ $c = 1 }) # Initialize
- (?:
- (?(?{ $c == 0 }) # PREVIOUS iteration was OK, stop the loop
- (?!
- ) # Fail: will unwind one iteration back
- )
- (?:
- [^()]+ # Match a big chunk
- (?=
- [()]
- ) # Do not try to match subchunks
- |
- \(
- (?{ ++$c })
- |
- \)
- (?{ --$c })
- )
- )+ # This may not match with different subblocks
- )
- (?(?{ $c != 0 })
- (?!
- ) # Fail
- ) # Otherwise the chunk 1 may succeed with $c>0
- /xg;
- }
-
- my @ans = ();
- my $res;
- push @ans, $res while $res = matchit;
- iseq "@ans", "1 1 1";
-
- @ans = matchit;
- iseq "@ans", $expect;
-
- local $Message = "Recursion with (??{ })";
- our $matched;
- $matched = qr/\((?:(?>[^()]+)|(??{$matched}))*\)/;
-
- @ans = my @ans1 = ();
- push (@ans, $res), push (@ans1, $&) while $res = m/$matched/g;
-
- iseq "@ans", "1 1 1";
- iseq "@ans1", $expect;
-
- @ans = m/$matched/g;
- iseq "@ans", $expect;
-
- }
-
- {
- ok "abc" =~ /^(??{"a"})b/, '"abc" =~ /^(??{"a"})b/';
- }
-
- {
- my @ans = ('a/b' =~ m%(.*/)?(.*)%); # Stack may be bad
- iseq "@ans", 'a/ b', "Stack may be bad";
- }
-
- {
- local $Message = "Eval-group not allowed at runtime";
- my $code = '{$blah = 45}';
- our $blah = 12;
- eval { /(?$code)/ };
- ok $@ && $@ =~ /not allowed at runtime/ && $blah == 12;
-
- for $code ('{$blah = 45}','=xx') {
- $blah = 12;
- my $res = eval { "xx" =~ /(?$code)/o };
- no warnings 'uninitialized';
- local $Error = "'$@', '$res', '$blah'";
- if ($code eq '=xx') {
- ok !$@ && $res;
- }
- else {
- ok $@ && $@ =~ /not allowed at runtime/ && $blah == 12;
- }
- }
-
- $code = '{$blah = 45}';
- $blah = 12;
- eval "/(?$code)/";
- iseq $blah, 45;
-
- $blah = 12;
- /(?{$blah = 45})/;
- iseq $blah, 45;
- }
-
- {
- local $Message = "Pos checks";
- my $x = 'banana';
- $x =~ /.a/g;
- iseq pos ($x), 2;
-
- $x =~ /.z/gc;
- iseq pos ($x), 2;
-
- sub f {
- my $p = $_[0];
- return $p;
- }
-
- $x =~ /.a/g;
- iseq f (pos ($x)), 4;
- }
-
- {
- local $Message = 'Checking $^R';
- our $x = $^R = 67;
- 'foot' =~ /foo(?{$x = 12; 75})[t]/;
- iseq $^R, 75;
-
- $x = $^R = 67;
- 'foot' =~ /foo(?{$x = 12; 75})[xy]/;
- ok $^R eq '67' && $x eq '12';
-
- $x = $^R = 67;
- 'foot' =~ /foo(?{ $^R + 12 })((?{ $x = 12; $^R + 17 })[xy])?/;
- ok $^R eq '79' && $x eq '12';
- }
-
- {
- iseq qr/\b\v$/i, '(?i-xsm:\b\v$)', 'qr/\b\v$/i';
- iseq qr/\b\v$/s, '(?s-xim:\b\v$)', 'qr/\b\v$/s';
- iseq qr/\b\v$/m, '(?m-xis:\b\v$)', 'qr/\b\v$/m';
- iseq qr/\b\v$/x, '(?x-ism:\b\v$)', 'qr/\b\v$/x';
- iseq qr/\b\v$/xism, '(?msix:\b\v$)', 'qr/\b\v$/xism';
- iseq qr/\b\v$/, '(?-xism:\b\v$)', 'qr/\b\v$/';
- }
-
-
- {
- local $Message = "Look around";
- $_ = 'xabcx';
- SKIP:
- foreach my $ans ('', 'c') {
- ok /(?<=(?=a)..)((?=c)|.)/g or skip "Match failed", 1;
- iseq $1, $ans;
- }
- }
-
- {
- local $Message = "Empty clause";
- $_ = 'a';
- foreach my $ans ('', 'a', '') {
- ok /^|a|$/g or skip "Match failed", 1;
- iseq $&, $ans;
- }
- }
-
- {
- local $Message = "Prefixify";
- sub prefixify {
- SKIP: {
- my ($v, $a, $b, $res) = @_;
- ok $v =~ s/\Q$a\E/$b/ or skip "Match failed", 1;
- iseq $v, $res;
- }
- }
-
- prefixify ('/a/b/lib/arch', "/a/b/lib", 'X/lib', 'X/lib/arch');
- prefixify ('/a/b/man/arch', "/a/b/man", 'X/man', 'X/man/arch');
- }
-
- {
- $_ = 'var="foo"';
- /(\")/;
- ok $1 && /$1/, "Capture a quote";
- }
-
- {
- local $Message = "Call code from qr //";
- $a = qr/(?{++$b})/;
- $b = 7;
- ok /$a$a/ && $b eq '9';
-
- $c="$a";
- ok /$a$a/ && $b eq '11';
-
- undef $@;
- eval {/$c/};
- ok $@ && $@ =~ /not allowed at runtime/;
-
- use re "eval";
- /$a$c$a/;
- iseq $b, '14';
-
- our $lex_a = 43;
- our $lex_b = 17;
- our $lex_c = 27;
- my $lex_res = ($lex_b =~ qr/$lex_b(?{ $lex_c = $lex_a++ })/);
-
- iseq $lex_res, 1;
- iseq $lex_a, 44;
- iseq $lex_c, 43;
-
- no re "eval";
- undef $@;
- my $match = eval { /$a$c$a/ };
- ok $@ && $@ =~ /Eval-group not allowed/ && !$match;
- iseq $b, '14';
-
- $lex_a = 2;
- $lex_a = 43;
- $lex_b = 17;
- $lex_c = 27;
- $lex_res = ($lex_b =~ qr/17(?{ $lex_c = $lex_a++ })/);
-
- iseq $lex_res, 1;
- iseq $lex_a, 44;
- iseq $lex_c, 43;
-
- }
-
-
- {
- no warnings 'closure';
- local $Message = '(?{ $var } refers to package vars';
- package aa;
- our $c = 2;
- $::c = 3;
- '' =~ /(?{ $c = 4 })/;
- main::iseq $c, 4;
- main::iseq $::c, 3;
- }
-
-
- {
- must_die 'q(a:[b]:) =~ /[x[:foo:]]/',
- 'POSIX class \[:[^:]+:\] unknown in regex',
- 'POSIX class [: :] must have valid name';
-
- for my $d (qw [= .]) {
- must_die "/[[${d}foo${d}]]/",
- "\QPOSIX syntax [$d $d] is reserved for future extensions",
- "POSIX syntax [[$d $d]] is an error";
- }
- }
-
-
- {
- # test if failure of patterns returns empty list
- local $Message = "Failed pattern returns empty list";
- $_ = 'aaa';
- @_ = /bbb/;
- iseq "@_", "";
-
- @_ = /bbb/g;
- iseq "@_", "";
-
- @_ = /(bbb)/;
- iseq "@_", "";
-
- @_ = /(bbb)/g;
- iseq "@_", "";
- }
-
-
- {
- local $Message = '@- and @+ tests';
-
- /a(?=.$)/;
- iseq $#+, 0;
- iseq $#-, 0;
- iseq $+ [0], 2;
- iseq $- [0], 1;
- ok !defined $+ [1] && !defined $- [1] &&
- !defined $+ [2] && !defined $- [2];
-
- /a(a)(a)/;
- iseq $#+, 2;
- iseq $#-, 2;
- iseq $+ [0], 3;
- iseq $- [0], 0;
- iseq $+ [1], 2;
- iseq $- [1], 1;
- iseq $+ [2], 3;
- iseq $- [2], 2;
- ok !defined $+ [3] && !defined $- [3] &&
- !defined $+ [4] && !defined $- [4];
-
-
- /.(a)(b)?(a)/;
- iseq $#+, 3;
- iseq $#-, 3;
- iseq $+ [1], 2;
- iseq $- [1], 1;
- iseq $+ [3], 3;
- iseq $- [3], 2;
- ok !defined $+ [2] && !defined $- [2] &&
- !defined $+ [4] && !defined $- [4];
-
-
- /.(a)/;
- iseq $#+, 1;
- iseq $#-, 1;
- iseq $+ [0], 2;
- iseq $- [0], 0;
- iseq $+ [1], 2;
- iseq $- [1], 1;
- ok !defined $+ [2] && !defined $- [2] &&
- !defined $+ [3] && !defined $- [3];
-
- /.(a)(ba*)?/;
- iseq $#+, 2;
- iseq $#-, 1;
- }
-
-
- {
- local $DiePattern = '^Modification of a read-only value attempted';
- local $Message = 'Elements of @- and @+ are read-only';
- must_die '$+[0] = 13';
- must_die '$-[0] = 13';
- must_die '@+ = (7, 6, 5)';
- must_die '@- = qw (foo bar)';
- }
-
-
- {
- local $Message = '\G testing';
- $_ = 'aaa';
- pos = 1;
- my @a = /\Ga/g;
- iseq "@a", "a a";
-
- my $str = 'abcde';
- pos $str = 2;
- ok $str !~ /^\G/;
- ok $str !~ /^.\G/;
- ok $str =~ /^..\G/;
- ok $str !~ /^...\G/;
- ok $str =~ /\G../ && $& eq 'cd';
-
- local $TODO = $running_as_thread;
- ok $str =~ /.\G./ && $& eq 'bc';
- }
-
-
- {
- local $Message = 'pos inside (?{ })';
- my $str = 'abcde';
- our ($foo, $bar);
- ok $str =~ /b(?{$foo = $_; $bar = pos})c/;
- iseq $foo, $str;
- iseq $bar, 2;
- ok !defined pos ($str);
-
- undef $foo;
- undef $bar;
- pos $str = undef;
- ok $str =~ /b(?{$foo = $_; $bar = pos})c/g;
- iseq $foo, $str;
- iseq $bar, 2;
- iseq pos ($str), 3;
-
- $_ = $str;
- undef $foo;
- undef $bar;
- ok /b(?{$foo = $_; $bar = pos})c/;
- iseq $foo, $str;
- iseq $bar, 2;
-
- undef $foo;
- undef $bar;
- ok /b(?{$foo = $_; $bar = pos})c/g;
- iseq $foo, $str;
- iseq $bar, 2;
- iseq pos, 3;
-
- undef $foo;
- undef $bar;
- pos = undef;
- 1 while /b(?{$foo = $_; $bar = pos})c/g;
- iseq $foo, $str;
- iseq $bar, 2;
- ok !defined pos;
-
- undef $foo;
- undef $bar;
- $_ = 'abcde|abcde';
- ok s/b(?{$foo = $_; $bar = pos})c/x/g;
- iseq $foo, 'abcde|abcde';
- iseq $bar, 8;
- iseq $_, 'axde|axde';
-
- # List context:
- $_ = 'abcde|abcde';
- our @res;
- () = /([ace]).(?{push @res, $1,$2})([ce])(?{push @res, $1,$2})/g;
- @res = map {defined $_ ? "'$_'" : 'undef'} @res;
- iseq "@res", "'a' undef 'a' 'c' 'e' undef 'a' undef 'a' 'c'";
-
- @res = ();
- () = /([ace]).(?{push @res, $`,$&,$'})([ce])(?{push @res, $`,$&,$'})/g;
- @res = map {defined $_ ? "'$_'" : 'undef'} @res;
- iseq "@res", "'' 'ab' 'cde|abcde' " .
- "'' 'abc' 'de|abcde' " .
- "'abcd' 'e|' 'abcde' " .
- "'abcde|' 'ab' 'cde' " .
- "'abcde|' 'abc' 'de'" ;
- }
-
-
- {
- local $Message = '\G anchor checks';
- my $foo = 'aabbccddeeffgg';
- pos ($foo) = 1;
- {
- local $TODO = $running_as_thread;
- no warnings 'uninitialized';
- ok $foo =~ /.\G(..)/g;
- iseq $1, 'ab';
-
- pos ($foo) += 1;
- ok $foo =~ /.\G(..)/g;
- iseq $1, 'cc';
-
- pos ($foo) += 1;
- ok $foo =~ /.\G(..)/g;
- iseq $1, 'de';
-
- ok $foo =~ /\Gef/g;
- }
-
- undef pos $foo;
- ok $foo =~ /\G(..)/g;
- iseq $1, 'aa';
-
- ok $foo =~ /\G(..)/g;
- iseq $1, 'bb';
-
- pos ($foo) = 5;
- ok $foo =~ /\G(..)/g;
- iseq $1, 'cd';
- }
-
-
- {
- $_ = '123x123';
- my @res = /(\d*|x)/g;
- local $" = '|';
- iseq "@res", "123||x|123|", "0 match in alternation";
- }
-
-
- {
- local $Message = "Match against temporaries (created via pp_helem())" .
- " is safe";
- ok {foo => "bar\n" . $^X} -> {foo} =~ /^(.*)\n/g;
- iseq $1, "bar";
- }
-
-
- {
- local $Message = 'package $i inside (?{ }), ' .
- 'saved substrings and changing $_';
- our @a = qw [foo bar];
- our @b = ();
- s/(\w)(?{push @b, $1})/,$1,/g for @a;
- iseq "@b", "f o o b a r";
- iseq "@a", ",f,,o,,o, ,b,,a,,r,";
-
- local $Message = 'lexical $i inside (?{ }), ' .
- 'saved substrings and changing $_';
- no warnings 'closure';
- my @c = qw [foo bar];
- my @d = ();
- s/(\w)(?{push @d, $1})/,$1,/g for @c;
- iseq "@d", "f o o b a r";
- iseq "@c", ",f,,o,,o, ,b,,a,,r,";
- }
-
-
- {
- local $Message = 'Brackets';
- our $brackets;
- $brackets = qr {
- { (?> [^{}]+ | (??{ $brackets }) )* }
- }x;
-
- ok "{{}" =~ $brackets;
- iseq $&, "{}";
- ok "something { long { and } hairy" =~ $brackets;
- iseq $&, "{ and }";
- ok "something { long { and } hairy" =~ m/((??{ $brackets }))/;
- iseq $&, "{ and }";
- }
-
-
- {
- $_ = "a-a\nxbb";
- pos = 1;
- nok m/^-.*bb/mg, '$_ = "a-a\nxbb"; m/^-.*bb/mg';
- }
-
-
- {
- local $Message = '\G anchor checks';
- my $text = "aaXbXcc";
- pos ($text) = 0;
- ok $text !~ /\GXb*X/g;
- }
-
-
- {
- $_ = "xA\n" x 500;
- nok /^\s*A/m, '$_ = "xA\n" x 500; /^\s*A/m"';
-
- my $text = "abc dbf";
- my @res = ($text =~ /.*?(b).*?\b/g);
- iseq "@res", "b b", '\b is not special';
- }
-
-
- {
- local $Message = '\S, [\S], \s, [\s]';
- my @a = map chr, 0 .. 255;
- my @b = grep /\S/, @a;
- my @c = grep /[^\s]/, @a;
- iseq "@b", "@c";
-
- @b = grep /\S/, @a;
- @c = grep /[\S]/, @a;
- iseq "@b", "@c";
-
- @b = grep /\s/, @a;
- @c = grep /[^\S]/, @a;
- iseq "@b", "@c";
-
- @b = grep /\s/, @a;
- @c = grep /[\s]/, @a;
- iseq "@b", "@c";
- }
- {
- local $Message = '\D, [\D], \d, [\d]';
- my @a = map chr, 0 .. 255;
- my @b = grep /\D/, @a;
- my @c = grep /[^\d]/, @a;
- iseq "@b", "@c";
-
- @b = grep /\D/, @a;
- @c = grep /[\D]/, @a;
- iseq "@b", "@c";
-
- @b = grep /\d/, @a;
- @c = grep /[^\D]/, @a;
- iseq "@b", "@c";
-
- @b = grep /\d/, @a;
- @c = grep /[\d]/, @a;
- iseq "@b", "@c";
- }
- {
- local $Message = '\W, [\W], \w, [\w]';
- my @a = map chr, 0 .. 255;
- my @b = grep /\W/, @a;
- my @c = grep /[^\w]/, @a;
- iseq "@b", "@c";
-
- @b = grep /\W/, @a;
- @c = grep /[\W]/, @a;
- iseq "@b", "@c";
-
- @b = grep /\w/, @a;
- @c = grep /[^\W]/, @a;
- iseq "@b", "@c";
-
- @b = grep /\w/, @a;
- @c = grep /[\w]/, @a;
- iseq "@b", "@c";
- }
-
-
- {
- # see if backtracking optimization works correctly
- local $Message = 'Backtrack optimization';
- ok "\n\n" =~ /\n $ \n/x;
- ok "\n\n" =~ /\n* $ \n/x;
- ok "\n\n" =~ /\n+ $ \n/x;
- ok "\n\n" =~ /\n? $ \n/x;
- ok "\n\n" =~ /\n*? $ \n/x;
- ok "\n\n" =~ /\n+? $ \n/x;
- ok "\n\n" =~ /\n?? $ \n/x;
- ok "\n\n" !~ /\n*+ $ \n/x;
- ok "\n\n" !~ /\n++ $ \n/x;
- ok "\n\n" =~ /\n?+ $ \n/x;
- }
-
-
- {
- package S;
- use overload '""' => sub {'Object S'};
- sub new {bless []}
-
- local $Message = "Ref stringification";
- ::ok do { \my $v} =~ /^SCALAR/, "Scalar ref stringification";
- ::ok do {\\my $v} =~ /^REF/, "Ref ref stringification";
- ::ok [] =~ /^ARRAY/, "Array ref stringification";
- ::ok {} =~ /^HASH/, "Hash ref stringification";
- ::ok 'S' -> new =~ /^Object S/, "Object stringification";
- }
-
-
- {
- local $Message = "Test result of match used as match";
- ok 'a1b' =~ ('xyz' =~ /y/);
- iseq $`, 'a';
- ok 'a1b' =~ ('xyz' =~ /t/);
- iseq $`, 'a';
- }
-
-
- {
- local $Message = '"1" is not \s';
- may_not_warn sub {ok ("1\n" x 102) !~ /^\s*\n/m};
- }
-
-
- {
- local $Message = '\s, [[:space:]] and [[:blank:]]';
- my %space = (spc => " ",
- tab => "\t",
- cr => "\r",
- lf => "\n",
- ff => "\f",
- # There's no \v but the vertical tabulator seems miraculously
- # be 11 both in ASCII and EBCDIC.
- vt => chr(11),
- false => "space");
-
- my @space0 = sort grep {$space {$_} =~ /\s/ } keys %space;
- my @space1 = sort grep {$space {$_} =~ /[[:space:]]/} keys %space;
- my @space2 = sort grep {$space {$_} =~ /[[:blank:]]/} keys %space;
-
- iseq "@space0", "cr ff lf spc tab";
- iseq "@space1", "cr ff lf spc tab vt";
- iseq "@space2", "spc tab";
- }
-
-
- {
- local $BugId = '20000731.001';
- ok "A \x{263a} B z C" =~ /A . B (??{ "z" }) C/,
- "Match UTF-8 char in presense of (??{ })";
- }
-
-
- {
- local $BugId = '20001021.005';
- no warnings 'uninitialized';
- ok undef =~ /^([^\/]*)(.*)$/, "Used to cause a SEGV";
- }
-
-
- SKIP:
- {
- local $Message = '\C matches octet';
- $_ = "a\x{100}b";
- ok /(.)(\C)(\C)(.)/ or skip q [\C doesn't match], 4;
- iseq $1, "a";
- if ($IS_ASCII) { # ASCII (or equivalent), should be UTF-8
- iseq $2, "\xC4";
- iseq $3, "\x80";
- }
- elsif ($IS_EBCDIC) { # EBCDIC (or equivalent), should be UTF-EBCDIC
- iseq $2, "\x8C";
- iseq $3, "\x41";
- }
- else {
- SKIP: {
- ok 0, "Unexpected platform", "ord ('A') = $ordA";
- skip "Unexpected platform";
- }
- }
- iseq $4, "b";
- }
-
-
- SKIP:
- {
- local $Message = '\C matches octet';
- $_ = "\x{100}";
- ok /(\C)/g or skip q [\C doesn't match], 2;
- if ($IS_ASCII) {
- iseq $1, "\xC4";
- }
- elsif ($IS_EBCDIC) {
- iseq $1, "\x8C";
- }
- else {
- ok 0, "Unexpected platform", "ord ('A') = $ordA";
- }
- ok /(\C)/g or skip q [\C doesn't match];
- if ($IS_ASCII) {
- iseq $1, "\x80";
- }
- elsif ($IS_EBCDIC) {
- iseq $1, "\x41";
- }
- else {
- ok 0, "Unexpected platform", "ord ('A') = $ordA";
- }
- }
-
-
- {
- # Japhy -- added 03/03/2001
- () = (my $str = "abc") =~ /(...)/;
- $str = "def";
- iseq $1, "abc", 'Changing subject does not modify $1';
- }
-
-
- SKIP:
- {
- # The trick is that in EBCDIC the explicit numeric range should
- # match (as also in non-EBCDIC) but the explicit alphabetic range
- # should not match.
- ok "\x8e" =~ /[\x89-\x91]/, '"\x8e" =~ /[\x89-\x91]/';
- ok "\xce" =~ /[\xc9-\xd1]/, '"\xce" =~ /[\xc9-\xd1]/';
-
- skip "Not an EBCDIC platform", 2 unless ord ('i') == 0x89 &&
- ord ('J') == 0xd1;
-
- # In most places these tests would succeed since \x8e does not
- # in most character sets match 'i' or 'j' nor would \xce match
- # 'I' or 'J', but strictly speaking these tests are here for
- # the good of EBCDIC, so let's test these only there.
- nok "\x8e" !~ /[i-j]/, '"\x8e" !~ /[i-j]/';
- nok "\xce" !~ /[I-J]/, '"\xce" !~ /[I-J]/';
- }
-
-
- {
- ok "\x{ab}" =~ /\x{ab}/, '"\x{ab}" =~ /\x{ab}/ ';
- ok "\x{abcd}" =~ /\x{abcd}/, '"\x{abcd}" =~ /\x{abcd}/';
- }
-
-
- {
- local $Message = 'bug id 20001008.001';
-
- my @x = ("stra\337e 138", "stra\337e 138");
- for (@x) {
- ok s/(\d+)\s*([\w\-]+)/$1 . uc $2/e;
- ok my ($latin) = /^(.+)(?:\s+\d)/;
- iseq $latin, "stra\337e";
- ok $latin =~ s/stra\337e/straße/;
- #
- # Previous code follows, but outcommented - there were no tests.
- #
- # $latin =~ s/stra\337e/straße/; # \303\237 after the 2nd a
- # use utf8; # needed for the raw UTF-8
- # $latin =~ s!(s)tr(?:aß|s+e)!$1tr.!; # \303\237 after the a
- }
- }
-
-
- {
- local $Message = 'Test \x escapes';
- ok "ba\xd4c" =~ /([a\xd4]+)/ && $1 eq "a\xd4";
- ok "ba\xd4c" =~ /([a\xd4]+)/ && $1 eq "a\x{d4}";
- ok "ba\x{d4}c" =~ /([a\xd4]+)/ && $1 eq "a\x{d4}";
- ok "ba\x{d4}c" =~ /([a\xd4]+)/ && $1 eq "a\xd4";
- ok "ba\xd4c" =~ /([a\x{d4}]+)/ && $1 eq "a\xd4";
- ok "ba\xd4c" =~ /([a\x{d4}]+)/ && $1 eq "a\x{d4}";
- ok "ba\x{d4}c" =~ /([a\x{d4}]+)/ && $1 eq "a\x{d4}";
- ok "ba\x{d4}c" =~ /([a\x{d4}]+)/ && $1 eq "a\xd4";
- }
-
-
- {
- local $BugId = '20001028.003';
-
- # Fist half of the bug.
- local $Message = 'HEBREW ACCENT QADMA matched by .*';
- my $X = chr (1448);
- ok my ($Y) = $X =~ /(.*)/;
- iseq $Y, v1448;
- iseq length ($Y), 1;
-
- # Second half of the bug.
- $Message = 'HEBREW ACCENT QADMA in replacement';
- $X = '';
- $X =~ s/^/chr(1488)/e;
- iseq length $X, 1;
- iseq ord ($X), 1488;
- }
-
-
- {
- local $BugId = '20001108.001';
- local $Message = 'Repeated s///';
- my $X = "Szab\x{f3},Bal\x{e1}zs";
- my $Y = $X;
- $Y =~ s/(B)/$1/ for 0 .. 3;
- iseq $Y, $X;
- iseq $X, "Szab\x{f3},Bal\x{e1}zs";
- }
-
-
- {
- local $BugId = '20000517.001';
- local $Message = 's/// on UTF-8 string';
- my $x = "\x{100}A";
- $x =~ s/A/B/;
- iseq $x, "\x{100}B";
- iseq length $x, 2;
- }
-
-
- {
- local $BugId = '20001230.002';
- local $Message = '\C and É';
- ok "École" =~ /^\C\C(.)/ && $1 eq 'c';
- ok "École" =~ /^\C\C(c)/;
- }
-
-
- SKIP:
- {
- local $Message = 'Match code points > 255';
- $_ = "abc\x{100}\x{200}\x{300}\x{380}\x{400}defg";
- ok /(.\x{300})./ or skip "No match", 4;
- ok $` eq "abc\x{100}" && length ($`) == 4;
- ok $& eq "\x{200}\x{300}\x{380}" && length ($&) == 3;
- ok $' eq "\x{400}defg" && length ($') == 5;
- ok $1 eq "\x{200}\x{300}" && length ($1) == 2;
- }
-
-
- {
- # The original bug report had 'no utf8' here but that was irrelevant.
- local $BugId = '20010306.008';
- local $Message = "Don't dump core";
- my $a = "a\x{1234}";
- ok $a =~ m/\w/; # used to core dump.
- }
-
-
- {
- local $BugId = '20010410.006';
- local $Message = '/g in scalar context';
- for my $rx ('/(.*?)\{(.*?)\}/csg',
- '/(.*?)\{(.*?)\}/cg',
- '/(.*?)\{(.*?)\}/sg',
- '/(.*?)\{(.*?)\}/g',
- '/(.+?)\{(.+?)\}/csg',) {
- my $i = 0;
- my $input = "a{b}c{d}";
- eval <<" --";
- while (eval \$input =~ $rx) {
- \$i ++;
- }
- --
- iseq $i, 2;
- }
- }
-
-
- {
- my $x = "\x{10FFFD}";
- $x =~ s/(.)/$1/g;
- ok ord($x) == 0x10FFFD && length($x) == 1, "From Robin Houston";
- }
-
-
- {
- my %d = (
- "7f" => [0, 0, 0],
- "80" => [1, 1, 0],
- "ff" => [1, 1, 0],
- "100" => [0, 1, 1],
- );
- SKIP:
- while (my ($code, $match) = each %d) {
- local $Message = "Properties of \\x$code";
- my $char = eval qq ["\\x{$code}"];
- my $i = 0;
- ok (($char =~ /[\x80-\xff]/) xor !$$match [$i ++]);
- ok (($char =~ /[\x80-\x{100}]/) xor !$$match [$i ++]);
- ok (($char =~ /[\x{100}]/) xor !$$match [$i ++]);
- }
- }
-
-
- {
- # From Japhy
- local $Message;
- must_warn 'qr/(?c)/', '^Useless \(\?c\)';
- must_warn 'qr/(?-c)/', '^Useless \(\?-c\)';
- must_warn 'qr/(?g)/', '^Useless \(\?g\)';
- must_warn 'qr/(?-g)/', '^Useless \(\?-g\)';
- must_warn 'qr/(?o)/', '^Useless \(\?o\)';
- must_warn 'qr/(?-o)/', '^Useless \(\?-o\)';
-
- # Now test multi-error regexes
- must_warn 'qr/(?g-o)/', '^Useless \(\?g\).*\nUseless \(\?-o\)';
- must_warn 'qr/(?g-c)/', '^Useless \(\?g\).*\nUseless \(\?-c\)';
- # (?c) means (?g) error won't be thrown
- must_warn 'qr/(?o-cg)/', '^Useless \(\?o\).*\nUseless \(\?-c\)';
- must_warn 'qr/(?ogc)/', '^Useless \(\?o\).*\nUseless \(\?g\).*\n' .
- 'Useless \(\?c\)';
- }
-
-
- {
- local $Message = "/x tests";
- $_ = "foo";
- eval_ok <<" --";
- /f
- o\r
- o
- \$
- /x
- --
- eval_ok <<" --";
- /f
- o
- o
- \$\r
- /x
- --
- }
-
-
- {
- local $Message = "/o feature";
- sub test_o {$_ [0] =~ /$_[1]/o; return $1}
- iseq test_o ('abc', '(.)..'), 'a';
- iseq test_o ('abc', '..(.)'), 'a';
- }
-
-
- {
- local $BugId = "20010619.003";
- # Amazingly vertical tabulator is the same in ASCII and EBCDIC.
- for ("\n", "\t", "\014", "\r") {
- ok !/[[:print:]]/, "'$_' not in [[:print:]]";
- }
- for (" ") {
- ok /[[:print:]]/, "'$_' in [[:print:]]";
- }
- }
-
-
- {
- # Test basic $^N usage outside of a regex
- local $Message = '$^N usage outside of a regex';
- my $x = "abcdef";
- ok ($x =~ /cde/ and !defined $^N);
- ok ($x =~ /(cde)/ and $^N eq "cde");
- ok ($x =~ /(c)(d)(e)/ and $^N eq "e");
- ok ($x =~ /(c(d)e)/ and $^N eq "cde");
- ok ($x =~ /(foo)|(c(d)e)/ and $^N eq "cde");
- ok ($x =~ /(c(d)e)|(foo)/ and $^N eq "cde");
- ok ($x =~ /(c(d)e)|(abc)/ and $^N eq "abc");
- ok ($x =~ /(c(d)e)|(abc)x/ and $^N eq "cde");
- ok ($x =~ /(c(d)e)(abc)?/ and $^N eq "cde");
- ok ($x =~ /(?:c(d)e)/ and $^N eq "d");
- ok ($x =~ /(?:c(d)e)(?:f)/ and $^N eq "d");
- ok ($x =~ /(?:([abc])|([def]))*/ and $^N eq "f");
- ok ($x =~ /(?:([ace])|([bdf]))*/ and $^N eq "f");
- ok ($x =~ /(([ace])|([bd]))*/ and $^N eq "e");
- {ok ($x =~ /(([ace])|([bdf]))*/ and $^N eq "f");}
- ## Test to see if $^N is automatically localized -- it should now
- ## have the value set in the previous test.
- iseq $^N, "e", '$^N is automatically localized';
-
- # Now test inside (?{ ... })
- local $Message = '$^N usage inside (?{ ... })';
- our ($y, $z);
- ok ($x =~ /a([abc])(?{$y=$^N})c/ and $y eq "b");
- ok ($x =~ /a([abc]+)(?{$y=$^N})d/ and $y eq "bc");
- ok ($x =~ /a([abcdefg]+)(?{$y=$^N})d/ and $y eq "bc");
- ok ($x =~ /(a([abcdefg]+)(?{$y=$^N})d)(?{$z=$^N})e/ and $y eq "bc"
- and $z eq "abcd");
- ok ($x =~ /(a([abcdefg]+)(?{$y=$^N})de)(?{$z=$^N})/ and $y eq "bc"
- and $z eq "abcde");
-
- }
-
-
- SKIP:
- {
- ## Should probably put in tests for all the POSIX stuff,
- ## but not sure how to guarantee a specific locale......
-
- skip "Not an ASCII platform", 2 unless $IS_ASCII;
- local $Message = 'Test [[:cntrl:]]';
- my $AllBytes = join "" => map {chr} 0 .. 255;
- (my $x = $AllBytes) =~ s/[[:cntrl:]]//g;
- iseq $x, join "", map {chr} 0x20 .. 0x7E, 0x80 .. 0xFF;
-
- ($x = $AllBytes) =~ s/[^[:cntrl:]]//g;
- iseq $x, join "", map {chr} 0x00 .. 0x1F, 0x7F;
- }
-
-
- {
- # With /s modifier UTF8 chars were interpreted as bytes
- local $Message = "UTF-8 chars aren't bytes";
- my $a = "Hello \x{263A} World";
- my @a = ($a =~ /./gs);
- iseq $#a, 12;
- }
-
-
- {
- local $Message = '. matches \n with /s';
- my $str1 = "foo\nbar";
- my $str2 = "foo\n\x{100}bar";
- my ($a, $b) = map {chr} $IS_ASCII ? (0xc4, 0x80) : (0x8c, 0x41);
- my @a;
- @a = $str1 =~ /./g; iseq @a, 6; iseq "@a", "f o o b a r";
- @a = $str1 =~ /./gs; iseq @a, 7; iseq "@a", "f o o \n b a r";
- @a = $str1 =~ /\C/g; iseq @a, 7; iseq "@a", "f o o \n b a r";
- @a = $str1 =~ /\C/gs; iseq @a, 7; iseq "@a", "f o o \n b a r";
- @a = $str2 =~ /./g; iseq @a, 7; iseq "@a", "f o o \x{100} b a r";
- @a = $str2 =~ /./gs; iseq @a, 8; iseq "@a", "f o o \n \x{100} b a r";
- @a = $str2 =~ /\C/g; iseq @a, 9; iseq "@a", "f o o \n $a $b b a r";
- @a = $str2 =~ /\C/gs; iseq @a, 9; iseq "@a", "f o o \n $a $b b a r";
- }
-
-
- {
- # [ID 20010814.004] pos() doesn't work when using =~m// in list context
- local $BugId = '20010814.004';
- $_ = "ababacadaea";
- my $a = join ":", /b./gc;
- my $b = join ":", /a./gc;
- my $c = pos;
- iseq "$a $b $c", 'ba:ba ad:ae 10', "pos() works with () = m//";
- }
-
-
- {
- # [ID 20010407.006] matching utf8 return values from
- # functions does not work
- local $BugId = '20010407.006';
- local $Message = 'UTF-8 return values from functions';
- package ID_20010407_006;
- sub x {"a\x{1234}"}
- my $x = x;
- my $y;
- ::ok $x =~ /(..)/;
- $y = $1;
- ::ok length ($y) == 2 && $y eq $x;
- ::ok x =~ /(..)/;
- $y = $1;
- ::ok length ($y) == 2 && $y eq $x;
- }
-
-
- {
- no warnings 'digit';
- # Check that \x## works. 5.6.1 and 5.005_03 fail some of these.
- my $x;
- $x = "\x4e" . "E";
- ok ($x =~ /^\x4EE$/, "Check only 2 bytes of hex are matched.");
-
- $x = "\x4e" . "i";
- ok ($x =~ /^\x4Ei$/, "Check that invalid hex digit stops it (2)");
-
- $x = "\x4" . "j";
- ok ($x =~ /^\x4j$/, "Check that invalid hex digit stops it (1)");
-
- $x = "\x0" . "k";
- ok ($x =~ /^\xk$/, "Check that invalid hex digit stops it (0)");
-
- $x = "\x0" . "x";
- ok ($x =~ /^\xx$/, "\\xx isn't to be treated as \\0");
-
- $x = "\x0" . "xa";
- ok ($x =~ /^\xxa$/, "\\xxa isn't to be treated as \\xa");
-
- $x = "\x9" . "_b";
- ok ($x =~ /^\x9_b$/, "\\x9_b isn't to be treated as \\x9b");
-
- # and now again in [] ranges
-
- $x = "\x4e" . "E";
- ok ($x =~ /^[\x4EE]{2}$/, "Check only 2 bytes of hex are matched.");
-
- $x = "\x4e" . "i";
- ok ($x =~ /^[\x4Ei]{2}$/, "Check that invalid hex digit stops it (2)");
-
- $x = "\x4" . "j";
- ok ($x =~ /^[\x4j]{2}$/, "Check that invalid hex digit stops it (1)");
-
- $x = "\x0" . "k";
- ok ($x =~ /^[\xk]{2}$/, "Check that invalid hex digit stops it (0)");
-
- $x = "\x0" . "x";
- ok ($x =~ /^[\xx]{2}$/, "\\xx isn't to be treated as \\0");
-
- $x = "\x0" . "xa";
- ok ($x =~ /^[\xxa]{3}$/, "\\xxa isn't to be treated as \\xa");
-
- $x = "\x9" . "_b";
- ok ($x =~ /^[\x9_b]{3}$/, "\\x9_b isn't to be treated as \\x9b");
-
- # Check that \x{##} works. 5.6.1 fails quite a few of these.
-
- $x = "\x9b";
- ok ($x =~ /^\x{9_b}$/, "\\x{9_b} is to be treated as \\x9b");
-
- $x = "\x9b" . "y";
- ok ($x =~ /^\x{9_b}y$/, "\\x{9_b} is to be treated as \\x9b (again)");
-
- $x = "\x9b" . "y";
- ok ($x =~ /^\x{9b_}y$/, "\\x{9b_} is to be treated as \\x9b");
-
- $x = "\x9b" . "y";
- ok ($x =~ /^\x{9_bq}y$/, "\\x{9_bc} is to be treated as \\x9b");
-
- $x = "\x0" . "y";
- ok ($x =~ /^\x{x9b}y$/, "\\x{x9b} is to be treated as \\x0");
-
- $x = "\x0" . "y";
- ok ($x =~ /^\x{0x9b}y$/, "\\x{0x9b} is to be treated as \\x0");
-
- $x = "\x9b" . "y";
- ok ($x =~ /^\x{09b}y$/, "\\x{09b} is to be treated as \\x9b");
-
- $x = "\x9b";
- ok ($x =~ /^[\x{9_b}]$/, "\\x{9_b} is to be treated as \\x9b");
-
- $x = "\x9b" . "y";
- ok ($x =~ /^[\x{9_b}y]{2}$/,
- "\\x{9_b} is to be treated as \\x9b (again)");
-
- $x = "\x9b" . "y";
- ok ($x =~ /^[\x{9b_}y]{2}$/, "\\x{9b_} is to be treated as \\x9b");
-
- $x = "\x9b" . "y";
- ok ($x =~ /^[\x{9_bq}y]{2}$/, "\\x{9_bc} is to be treated as \\x9b");
-
- $x = "\x0" . "y";
- ok ($x =~ /^[\x{x9b}y]{2}$/, "\\x{x9b} is to be treated as \\x0");
-
- $x = "\x0" . "y";
- ok ($x =~ /^[\x{0x9b}y]{2}$/, "\\x{0x9b} is to be treated as \\x0");
-
- $x = "\x9b" . "y";
- ok ($x =~ /^[\x{09b}y]{2}$/, "\\x{09b} is to be treated as \\x9b");
-
- }
-
-
- {
- # High bit bug -- japhy
- my $x = "ab\200d";
- ok $x =~ /.*?\200/, "High bit fine";
- }
-
-
- {
- # The basic character classes and Unicode
- ok "\x{0100}" =~ /\w/, 'LATIN CAPITAL LETTER A WITH MACRON in /\w/';
- ok "\x{0660}" =~ /\d/, 'ARABIC-INDIC DIGIT ZERO in /\d/';
- ok "\x{1680}" =~ /\s/, 'OGHAM SPACE MARK in /\s/';
- }
-
-
- {
- local $Message = "Folding matches and Unicode";
- ok "a\x{100}" =~ /A/i;
- ok "A\x{100}" =~ /a/i;
- ok "a\x{100}" =~ /a/i;
- ok "A\x{100}" =~ /A/i;
- ok "\x{101}a" =~ /\x{100}/i;
- ok "\x{100}a" =~ /\x{100}/i;
- ok "\x{101}a" =~ /\x{101}/i;
- ok "\x{100}a" =~ /\x{101}/i;
- ok "a\x{100}" =~ /A\x{100}/i;
- ok "A\x{100}" =~ /a\x{100}/i;
- ok "a\x{100}" =~ /a\x{100}/i;
- ok "A\x{100}" =~ /A\x{100}/i;
- ok "a\x{100}" =~ /[A]/i;
- ok "A\x{100}" =~ /[a]/i;
- ok "a\x{100}" =~ /[a]/i;
- ok "A\x{100}" =~ /[A]/i;
- ok "\x{101}a" =~ /[\x{100}]/i;
- ok "\x{100}a" =~ /[\x{100}]/i;
- ok "\x{101}a" =~ /[\x{101}]/i;
- ok "\x{100}a" =~ /[\x{101}]/i;
- }
-
-
- {
- use charnames ':full';
- local $Message = "Folding 'LATIN LETTER A WITH GRAVE'";
-
- my $lower = "\N{LATIN SMALL LETTER A WITH GRAVE}";
- my $UPPER = "\N{LATIN CAPITAL LETTER A WITH GRAVE}";
-
- ok $lower =~ m/$UPPER/i;
- ok $UPPER =~ m/$lower/i;
- ok $lower =~ m/[$UPPER]/i;
- ok $UPPER =~ m/[$lower]/i;
-
- local $Message = "Folding 'GREEK LETTER ALPHA WITH VRACHY'";
-
- $lower = "\N{GREEK CAPITAL LETTER ALPHA WITH VRACHY}";
- $UPPER = "\N{GREEK SMALL LETTER ALPHA WITH VRACHY}";
-
- ok $lower =~ m/$UPPER/i;
- ok $UPPER =~ m/$lower/i;
- ok $lower =~ m/[$UPPER]/i;
- ok $UPPER =~ m/[$lower]/i;
-
- local $Message = "Folding 'LATIN LETTER Y WITH DIAERESIS'";
-
- $lower = "\N{LATIN SMALL LETTER Y WITH DIAERESIS}";
- $UPPER = "\N{LATIN CAPITAL LETTER Y WITH DIAERESIS}";
-
- ok $lower =~ m/$UPPER/i;
- ok $UPPER =~ m/$lower/i;
- ok $lower =~ m/[$UPPER]/i;
- ok $UPPER =~ m/[$lower]/i;
- }
-
-
- {
- use charnames ':full';
- local $PatchId = "13843";
- local $Message = "GREEK CAPITAL LETTER SIGMA vs " .
- "COMBINING GREEK PERISPOMENI";
-
- my $SIGMA = "\N{GREEK CAPITAL LETTER SIGMA}";
- my $char = "\N{COMBINING GREEK PERISPOMENI}";
-
- may_not_warn sub {ok "_:$char:_" !~ m/_:$SIGMA:_/i};
- }
-
-
- {
- local $Message = '\X';
- use charnames ':full';
-
- ok "a!" =~ /^(\X)!/ && $1 eq "a";
- ok "\xDF!" =~ /^(\X)!/ && $1 eq "\xDF";
- ok "\x{100}!" =~ /^(\X)!/ && $1 eq "\x{100}";
- ok "\x{100}\x{300}!" =~ /^(\X)!/ && $1 eq "\x{100}\x{300}";
- ok "\N{LATIN CAPITAL LETTER E}!" =~ /^(\X)!/ &&
- $1 eq "\N{LATIN CAPITAL LETTER E}";
- ok "\N{LATIN CAPITAL LETTER E}\N{COMBINING GRAVE ACCENT}!"
- =~ /^(\X)!/ &&
- $1 eq "\N{LATIN CAPITAL LETTER E}\N{COMBINING GRAVE ACCENT}";
-
- local $Message = '\C and \X';
- ok "!abc!" =~ /a\Cc/;
- ok "!abc!" =~ /a\Xc/;
- }
-
-
- {
- local $Message = "Final Sigma";
-
- my $SIGMA = "\x{03A3}"; # CAPITAL
- my $Sigma = "\x{03C2}"; # SMALL FINAL
- my $sigma = "\x{03C3}"; # SMALL
-
- ok $SIGMA =~ /$SIGMA/i;
- ok $SIGMA =~ /$Sigma/i;
- ok $SIGMA =~ /$sigma/i;
-
- ok $Sigma =~ /$SIGMA/i;
- ok $Sigma =~ /$Sigma/i;
- ok $Sigma =~ /$sigma/i;
-
- ok $sigma =~ /$SIGMA/i;
- ok $sigma =~ /$Sigma/i;
- ok $sigma =~ /$sigma/i;
-
- ok $SIGMA =~ /[$SIGMA]/i;
- ok $SIGMA =~ /[$Sigma]/i;
- ok $SIGMA =~ /[$sigma]/i;
-
- ok $Sigma =~ /[$SIGMA]/i;
- ok $Sigma =~ /[$Sigma]/i;
- ok $Sigma =~ /[$sigma]/i;
-
- ok $sigma =~ /[$SIGMA]/i;
- ok $sigma =~ /[$Sigma]/i;
- ok $sigma =~ /[$sigma]/i;
-
- local $Message = "More final Sigma";
-
- my $S3 = "$SIGMA$Sigma$sigma";
-
- ok ":$S3:" =~ /:(($SIGMA)+):/i && $1 eq $S3 && $2 eq $sigma;
- ok ":$S3:" =~ /:(($Sigma)+):/i && $1 eq $S3 && $2 eq $sigma;
- ok ":$S3:" =~ /:(($sigma)+):/i && $1 eq $S3 && $2 eq $sigma;
-
- ok ":$S3:" =~ /:(([$SIGMA])+):/i && $1 eq $S3 && $2 eq $sigma;
- ok ":$S3:" =~ /:(([$Sigma])+):/i && $1 eq $S3 && $2 eq $sigma;
- ok ":$S3:" =~ /:(([$sigma])+):/i && $1 eq $S3 && $2 eq $sigma;
- }
-
-
- {
- use charnames ':full';
- local $Message = "Parlez-Vous " .
- "Fran\N{LATIN SMALL LETTER C WITH CEDILLA}ais?";
-
- ok "Fran\N{LATIN SMALL LETTER C}ais" =~ /Fran.ais/ &&
- $& eq "Francais";
- ok "Fran\N{LATIN SMALL LETTER C WITH CEDILLA}ais" =~ /Fran.ais/ &&
- $& eq "Fran\N{LATIN SMALL LETTER C WITH CEDILLA}ais";
- ok "Fran\N{LATIN SMALL LETTER C}ais" =~ /Fran\Cais/ &&
- $& eq "Francais";
- # COMBINING CEDILLA is two bytes when encoded
- ok "Franc\N{COMBINING CEDILLA}ais" =~ /Franc\C\Cais/;
- ok "Fran\N{LATIN SMALL LETTER C}ais" =~ /Fran\Xais/ &&
- $& eq "Francais";
- ok "Fran\N{LATIN SMALL LETTER C WITH CEDILLA}ais" =~ /Fran\Xais/ &&
- $& eq "Fran\N{LATIN SMALL LETTER C WITH CEDILLA}ais";
- ok "Franc\N{COMBINING CEDILLA}ais" =~ /Fran\Xais/ &&
- $& eq "Franc\N{COMBINING CEDILLA}ais";
- ok "Fran\N{LATIN SMALL LETTER C WITH CEDILLA}ais" =~
- /Fran\N{LATIN SMALL LETTER C WITH CEDILLA}ais/ &&
- $& eq "Fran\N{LATIN SMALL LETTER C WITH CEDILLA}ais";
- ok "Franc\N{COMBINING CEDILLA}ais" =~ /Franc\N{COMBINING CEDILLA}ais/ &&
- $& eq "Franc\N{COMBINING CEDILLA}ais";
-
- my @f = (
- ["Fran\N{LATIN SMALL LETTER C}ais", "Francais"],
- ["Fran\N{LATIN SMALL LETTER C WITH CEDILLA}ais",
- "Fran\N{LATIN SMALL LETTER C WITH CEDILLA}ais"],
- ["Franc\N{COMBINING CEDILLA}ais", "Franc\N{COMBINING CEDILLA}ais"],
- );
- foreach my $entry (@f) {
- my ($subject, $match) = @$entry;
- ok $subject =~ /Fran(?:c\N{COMBINING CEDILLA}?|
- \N{LATIN SMALL LETTER C WITH CEDILLA})ais/x &&
- $& eq $match;
- }
- }
-
-
- {
- local $Message = "Lingering (and useless) UTF8 flag doesn't mess up /i";
- my $pat = "ABcde";
- my $str = "abcDE\x{100}";
- chop $str;
- ok $str =~ /$pat/i;
-
- $pat = "ABcde\x{100}";
- $str = "abcDE";
- chop $pat;
- ok $str =~ /$pat/i;
-
- $pat = "ABcde\x{100}";
- $str = "abcDE\x{100}";
- chop $pat;
- chop $str;
- ok $str =~ /$pat/i;
- }
-
-
- {
- use charnames ':full';
- local $Message = "LATIN SMALL LETTER SHARP S " .
- "(\N{LATIN SMALL LETTER SHARP S})";
-
- ok "\N{LATIN SMALL LETTER SHARP S}" =~
- /\N{LATIN SMALL LETTER SHARP S}/;
- ok "\N{LATIN SMALL LETTER SHARP S}" =~
- /\N{LATIN SMALL LETTER SHARP S}/i;
- ok "\N{LATIN SMALL LETTER SHARP S}" =~
- /[\N{LATIN SMALL LETTER SHARP S}]/;
- ok "\N{LATIN SMALL LETTER SHARP S}" =~
- /[\N{LATIN SMALL LETTER SHARP S}]/i;
-
- ok "ss" =~ /\N{LATIN SMALL LETTER SHARP S}/i;
- ok "SS" =~ /\N{LATIN SMALL LETTER SHARP S}/i;
- ok "ss" =~ /[\N{LATIN SMALL LETTER SHARP S}]/i;
- ok "SS" =~ /[\N{LATIN SMALL LETTER SHARP S}]/i;
-
- ok "\N{LATIN SMALL LETTER SHARP S}" =~ /ss/i;
- ok "\N{LATIN SMALL LETTER SHARP S}" =~ /SS/i;
-
- local $Message = "Unoptimized named sequence in class";
- ok "ss" =~ /[\N{LATIN SMALL LETTER SHARP S}x]/i;
- ok "SS" =~ /[\N{LATIN SMALL LETTER SHARP S}x]/i;
- ok "\N{LATIN SMALL LETTER SHARP S}" =~
- /[\N{LATIN SMALL LETTER SHARP S}x]/;
- ok "\N{LATIN SMALL LETTER SHARP S}" =~
- /[\N{LATIN SMALL LETTER SHARP S}x]/i;
- }
-
-
- {
- # More whitespace: U+0085, U+2028, U+2029\n";
-
- # U+0085, U+00A0 need to be forced to be Unicode, the \x{100} does that.
- SKIP: {
- skip "EBCDIC platform", 4 if $IS_EBCDIC;
- # Do \x{0015} and \x{0041} match \s in EBCDIC?
- ok "<\x{100}\x{0085}>" =~ /<\x{100}\s>/, '\x{0085} in \s';
- ok "<\x{0085}>" =~ /<\v>/, '\x{0085} in \v';
- ok "<\x{100}\x{00A0}>" =~ /<\x{100}\s>/, '\x{00A0} in \s';
- ok "<\x{00A0}>" =~ /<\h>/, '\x{00A0} in \h';
- }
- my @h = map {sprintf "%05x" => $_} 0x01680, 0x0180E, 0x02000 .. 0x0200A,
- 0x0202F, 0x0205F, 0x03000;
- my @v = map {sprintf "%05x" => $_} 0x02028, 0x02029;
-
- my @H = map {sprintf "%05x" => $_} 0x01361, 0x0200B, 0x02408, 0x02420,
- 0x0303F, 0xE0020;
- my @V = map {sprintf "%05x" => $_} 0x0008A .. 0x0008D, 0x00348, 0x10100,
- 0xE005F, 0xE007C;
-
- for my $hex (@h) {
- my $str = eval qq ["<\\x{$hex}>"];
- ok $str =~ /<\s>/, "\\x{$hex} in \\s";
- ok $str =~ /<\h>/, "\\x{$hex} in \\h";
- ok $str !~ /<\v>/, "\\x{$hex} not in \\v";
- }
-
- for my $hex (@v) {
- my $str = eval qq ["<\\x{$hex}>"];
- ok $str =~ /<\s>/, "\\x{$hex} in \\s";
- ok $str =~ /<\v>/, "\\x{$hex} in \\v";
- ok $str !~ /<\h>/, "\\x{$hex} not in \\h";
- }
-
- for my $hex (@H) {
- my $str = eval qq ["<\\x{$hex}>"];
- ok $str =~ /<\S>/, "\\x{$hex} in \\S";
- ok $str =~ /<\H>/, "\\x{$hex} in \\H";
- }
-
- for my $hex (@V) {
- my $str = eval qq ["<\\x{$hex}>"];
- ok $str =~ /<\S>/, "\\x{$hex} in \\S";
- ok $str =~ /<\V>/, "\\x{$hex} in \\V";
- }
- }
-
-
- {
- # . with /s should work on characters, as opposed to bytes
- local $Message = ". with /s works on characters, not bytes";
-
- my $s = "\x{e4}\x{100}";
- # This is not expected to match: the point is that
- # neither should we get "Malformed UTF-8" warnings.
- may_not_warn sub {$s =~ /\G(.+?)\n/gcs}, "No 'Malformed UTF-8' warning";
-
- my @c;
- push @c => $1 while $s =~ /\G(.)/gs;
-
- local $" = "";
- iseq "@c", $s;
-
- # Test only chars < 256
- my $t1 = "Q003\n\n\x{e4}\x{f6}\n\nQ004\n\n\x{e7}";
- my $r1 = "";
- while ($t1 =~ / \G ( .+? ) \n\s+ ( .+? ) ( $ | \n\s+ ) /xgcs) {
- $r1 .= $1 . $2;
- }
-
- my $t2 = $t1 . "\x{100}"; # Repeat with a larger char
- my $r2 = "";
- while ($t2 =~ / \G ( .+? ) \n\s+ ( .+? ) ( $ | \n\s+ ) /xgcs) {
- $r2 .= $1 . $2;
- }
- $r2 =~ s/\x{100}//;
-
- iseq $r1, $r2;
- }
-
-
- {
- local $Message = "Unicode lookbehind";
- ok "A\x{100}B" =~ /(?<=A.)B/;
- ok "A\x{200}\x{300}B" =~ /(?<=A..)B/;
- ok "\x{400}AB" =~ /(?<=\x{400}.)B/;
- ok "\x{500}\x{600}B" =~ /(?<=\x{500}.)B/;
-
- # Original code also contained:
- # ok "\x{500\x{600}}B" =~ /(?<=\x{500}.)B/;
- # but that looks like a typo.
- }
-
-
- {
- local $Message = 'UTF-8 hash keys and /$/';
- # http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters
- # /2002-01/msg01327.html
-
- my $u = "a\x{100}";
- my $v = substr ($u, 0, 1);
- my $w = substr ($u, 1, 1);
- my %u = ($u => $u, $v => $v, $w => $w);
- for (keys %u) {
- my $m1 = /^\w*$/ ? 1 : 0;
- my $m2 = $u {$_} =~ /^\w*$/ ? 1 : 0;
- iseq $m1, $m2;
- }
- }
-
-
- {
- local $BugId = "20020124.005";
- local $PatchId = "14795";
- local $Message = "s///eg";
-
- for my $char ("a", "\x{df}", "\x{100}") {
- my $x = "$char b $char";
- $x =~ s{($char)}{
- "c" =~ /c/;
- "x";
- }ge;
- iseq substr ($x, 0, 1), substr ($x, -1, 1);
- }
- }
-
-
- {
- local $Message = "No SEGV in s/// and UTF-8";
- my $s = "s#\x{100}" x 4;
- ok $s =~ s/[^\w]/ /g;
- if ($ENV {REAL_POSIX_CC}) {
- iseq $s, "s " x 4;
- }
- else {
- iseq $s, "s \x{100}" x 4;
- }
- }
-
-
- {
- local $Message = "UTF-8 bug (maybe already known?)";
- my $u = "foo";
- $u =~ s/./\x{100}/g;
- iseq $u, "\x{100}\x{100}\x{100}";
-
- $u = "foobar";
- $u =~ s/[ao]/\x{100}/g;
- iseq $u, "f\x{100}\x{100}b\x{100}r";
-
- $u =~ s/\x{100}/e/g;
- iseq $u, "feeber";
- }
-
-
- {
- local $Message = "UTF-8 bug with s///";
- # check utf8/non-utf8 mixtures
- # try to force all float/anchored check combinations
-
- my $c = "\x{100}";
- my $subst;
- for my $re ("xx.*$c", "x.*$c$c", "$c.*xx", "$c$c.*x",
- "xx.*(?=$c)", "(?=$c).*xx",) {
- ok "xxx" !~ /$re/;
- ok +($subst = "xxx") !~ s/$re//;
- }
- for my $re ("xx.*$c*", "$c*.*xx") {
- ok "xxx" =~ /$re/;
- ok +($subst = "xxx") =~ s/$re//;
- iseq $subst, "";
- }
- for my $re ("xxy*", "y*xx") {
- ok "xx$c" =~ /$re/;
- ok +($subst = "xx$c") =~ s/$re//;
- iseq $subst, $c;
- ok "xy$c" !~ /$re/;
- ok +($subst = "xy$c") !~ s/$re//;
- }
- for my $re ("xy$c*z", "x$c*yz") {
- ok "xyz" =~ /$re/;
- ok +($subst = "xyz") =~ s/$re//;
- iseq $subst, "";
- }
- }
-
-
- {
- local $Message = "qr /.../x";
- my $R = qr / A B C # D E/x;
- ok "ABCDE" =~ $R && $& eq "ABC";
- ok "ABCDE" =~ /$R/ && $& eq "ABC";
- ok "ABCDE" =~ m/$R/ && $& eq "ABC";
- ok "ABCDE" =~ /($R)/ && $1 eq "ABC";
- ok "ABCDE" =~ m/($R)/ && $1 eq "ABC";
- }
-
-
- {
- local $BugId = "20020412.005";
- local $Message = "Correct pmop flags checked when empty pattern";
-
- # Requires reuse of last successful pattern.
- my $num = 123;
- $num =~ /\d/;
- for (0 .. 1) {
- my $match = ?? + 0;
- ok $match != $_, $Message,
- sprintf "'match one' %s on %s iteration" =>
- $match ? 'succeeded' : 'failed',
- $_ ? 'second' : 'first';
- }
- $num =~ /(\d)/;
- my $result = join "" => $num =~ //g;
- iseq $result, $num;
- }
-
-
- {
- local $BugId = '20020630.002';
- local $Message = 'UTF-8 regex matches above 32k';
- for (['byte', "\x{ff}"], ['utf8', "\x{1ff}"]) {
- my ($type, $char) = @$_;
- for my $len (32000, 32768, 33000) {
- my $s = $char . "f" x $len;
- my $r = $s =~ /$char([f]*)/gc;
- ok $r, $Message, "<$type x $len>";
- ok !$r || pos ($s) == $len + 1, $Message,
- "<$type x $len>; pos = @{[pos $s]}";
- }
- }
- }
-
-
- {
- our $a = bless qr /foo/ => 'Foo';
- ok 'goodfood' =~ $a, "Reblessed qr // matches";
- iseq $a, '(?-xism:foo)', "Reblessed qr // stringifies";
- my $x = "\x{3fe}";
- my $z = my $y = "\317\276"; # Byte representation of $x
- $a = qr /$x/;
- ok $x =~ $a, "UTF-8 interpolation in qr //";
- ok "a$a" =~ $x, "Stringified qr // preserves UTF-8";
- ok "a$x" =~ /^a$a\z/, "Interpolated qr // preserves UTF-8";
- ok "a$x" =~ /^a(??{$a})\z/,
- "Postponed interpolation of qr // preserves UTF-8";
- {
- local $BugId = '17776';
- iseq length qr /##/x, 12, "## in qr // doesn't corrupt memory";
- }
- {
- use re 'eval';
- ok "$x$x" =~ /^$x(??{$x})\z/,
- "Postponed UTF-8 string in UTF-8 re matches UTF-8";
- ok "$y$x" =~ /^$y(??{$x})\z/,
- "Postponed UTF-8 string in non-UTF-8 re matches UTF-8";
- ok "$y$x" !~ /^$y(??{$y})\z/,
- "Postponed non-UTF-8 string in non-UTF-8 re doesn't match UTF-8";
- ok "$x$x" !~ /^$x(??{$y})\z/,
- "Postponed non-UTF-8 string in UTF-8 re doesn't match UTF-8";
- ok "$y$y" =~ /^$y(??{$y})\z/,
- "Postponed non-UTF-8 string in non-UTF-8 re matches non-UTF8";
- ok "$x$y" =~ /^$x(??{$y})\z/,
- "Postponed non-UTF-8 string in UTF-8 re matches non-UTF8";
-
- $y = $z; # Reset $y after upgrade.
- ok "$x$y" !~ /^$x(??{$x})\z/,
- "Postponed UTF-8 string in UTF-8 re doesn't match non-UTF-8";
- ok "$y$y" !~ /^$y(??{$x})\z/,
- "Postponed UTF-8 string in non-UTF-8 re doesn't match non-UTF-8";
- }
- }
-
-
- {
- local $PatchId = '18179';
- my $s = "\x{100}" x 5;
- my $ok = $s =~ /(\x{100}{4})/;
- my ($ord, $len) = (ord $1, length $1);
- ok $ok && $ord == 0x100 && $len == 4, "No panic: end_shift";
- }
-
-
- {
- local $BugId = '15763';
- our $a = "x\x{100}";
- chop $a; # Leaves the UTF-8 flag
- $a .= "y"; # 1 byte before 'y'.
-
- ok $a =~ /^\C/, 'match one \C on 1-byte UTF-8';
- ok $a =~ /^\C{1}/, 'match \C{1}';
-
- ok $a =~ /^\Cy/, 'match \Cy';
- ok $a =~ /^\C{1}y/, 'match \C{1}y';
-
- ok $a !~ /^\C\Cy/, q {don't match two \Cy};
- ok $a !~ /^\C{2}y/, q {don't match \C{2}y};
-
- $a = "\x{100}y"; # 2 bytes before "y"
-
- ok $a =~ /^\C/, 'match one \C on 2-byte UTF-8';
- ok $a =~ /^\C{1}/, 'match \C{1}';
- ok $a =~ /^\C\C/, 'match two \C';
- ok $a =~ /^\C{2}/, 'match \C{2}';
-
- ok $a =~ /^\C\C\C/, 'match three \C on 2-byte UTF-8 and a byte';
- ok $a =~ /^\C{3}/, 'match \C{3}';
-
- ok $a =~ /^\C\Cy/, 'match two \C';
- ok $a =~ /^\C{2}y/, 'match \C{2}';
-
- ok $a !~ /^\C\C\Cy/, q {don't match three \Cy};
- ok $a !~ /^\C{2}\Cy/, q {don't match \C{2}\Cy};
- ok $a !~ /^\C{3}y/, q {don't match \C{3}y};
-
- $a = "\x{1000}y"; # 3 bytes before "y"
-
- ok $a =~ /^\C/, 'match one \C on three-byte UTF-8';
- ok $a =~ /^\C{1}/, 'match \C{1}';
- ok $a =~ /^\C\C/, 'match two \C';
- ok $a =~ /^\C{2}/, 'match \C{2}';
- ok $a =~ /^\C\C\C/, 'match three \C';
- ok $a =~ /^\C{3}/, 'match \C{3}';
-
- ok $a =~ /^\C\C\C\C/, 'match four \C on three-byte UTF-8 and a byte';
- ok $a =~ /^\C{4}/, 'match \C{4}';
-
- ok $a =~ /^\C\C\Cy/, 'match three \Cy';
- ok $a =~ /^\C{3}y/, 'match \C{3}y';
-
- ok $a !~ /^\C\C\C\Cy/, q {don't match four \Cy};
- ok $a !~ /^\C{4}y/, q {don't match \C{4}y};
- }
-
-
- {
- local $\;
- $_ = 'aaaaaaaaaa';
- utf8::upgrade($_); chop $_; $\="\n";
- ok /[^\s]+/, 'm/[^\s]/ utf8';
- ok /[^\d]+/, 'm/[^\d]/ utf8';
- ok +($a = $_, $_ =~ s/[^\s]+/./g), 's/[^\s]/ utf8';
- ok +($a = $_, $a =~ s/[^\d]+/./g), 's/[^\s]/ utf8';
- }
-
-
- {
- local $BugId = '15397';
- local $Message = 'UTF-8 matching';
- ok "\x{100}" =~ /\x{100}/;
- ok "\x{100}" =~ /(\x{100})/;
- ok "\x{100}" =~ /(\x{100}){1}/;
- ok "\x{100}\x{100}" =~ /(\x{100}){2}/;
- ok "\x{100}\x{100}" =~ /(\x{100})(\x{100})/;
- }
-
-
- {
- local $BugId = '7471';
- local $Message = 'Neither ()* nor ()*? sets $1 when matched 0 times';
- local $_ = 'CD';
- ok /(AB)*?CD/ && !defined $1;
- ok /(AB)*CD/ && !defined $1;
- }
-
-
- {
- local $BugId = '3547';
- local $Message = "Caching shouldn't prevent match";
- my $pattern = "^(b+?|a){1,2}c";
- ok "bac" =~ /$pattern/ && $1 eq 'a';
- ok "bbac" =~ /$pattern/ && $1 eq 'a';
- ok "bbbac" =~ /$pattern/ && $1 eq 'a';
- ok "bbbbac" =~ /$pattern/ && $1 eq 'a';
- }
-
-
-
- {
- local $BugId = '18232';
- local $Message = '$1 should keep UTF-8 ness';
- ok "\x{100}" =~ /(.)/;
- iseq $1, "\x{100}", '$1 is UTF-8';
- { 'a' =~ /./; }
- iseq $1, "\x{100}", '$1 is still UTF-8';
- isneq $1, "\xC4\x80", '$1 is not non-UTF-8';
- }
-
-
- {
- local $BugId = '19767';
- local $Message = "Optimizer doesn't prematurely reject match";
- use utf8;
-
- my $attr = 'Name-1';
- my $NormalChar = qr /[\p{IsDigit}\p{IsLower}\p{IsUpper}]/;
- my $NormalWord = qr /${NormalChar}+?/;
- my $PredNameHyphen = qr /^${NormalWord}(\-${NormalWord})*?$/;
-
- $attr =~ /^$/;
- ok $attr =~ $PredNameHyphen; # Original test.
-
- "a" =~ m/[b]/;
- ok "0" =~ /\p{N}+\z/; # Variant.
- }
-
-
- {
- local $BugId = '20683';
- local $Message = "(??{ }) doesn't return stale values";
- our $p = 1;
- foreach (1, 2, 3, 4) {
- $p ++ if /(??{ $p })/
- }
- iseq $p, 5;
-
- {
- package P;
- $a = 1;
- sub TIESCALAR {bless []}
- sub FETCH {$a ++}
- }
- tie $p, "P";
- foreach (1, 2, 3, 4) {
- /(??{ $p })/
- }
- iseq $p, 5;
- }
-
-
- {
- # Subject: Odd regexp behavior
- # From: Markus Kuhn <Markus.Kuhn at cl.cam.ac.uk>
- # Date: Wed, 26 Feb 2003 16:53:12 +0000
- # Message-Id: <E18o4nw-0008Ly-00 at wisbech.cl.cam.ac.uk>
- # To: perl-unicode at perl.org
-
- local $Message = 'Markus Kuhn 2003-02-26';
-
- my $x = "\x{2019}\nk";
- ok $x =~ s/(\S)\n(\S)/$1 $2/sg;
- ok $x eq "\x{2019} k";
-
- $x = "b\nk";
- ok $x =~ s/(\S)\n(\S)/$1 $2/sg;
- ok $x eq "b k";
-
- ok "\x{2019}" =~ /\S/;
- }
-
-
- {
- local $BugId = '21411';
- local $Message = "(??{ .. }) in split doesn't corrupt its stack";
- our $i;
- ok '-1-3-5-' eq join '', split /((??{$i++}))/, '-1-3-5-';
- no warnings 'deprecated', 'syntax';
- split /(?{'WOW'})/, 'abc';
- local $" = "|";
- iseq "@_", "a|b|c";
- }
-
-
- {
- # XXX DAPM 13-Apr-06. Recursive split is still broken. It's only luck it
- # hasn't been crashing. Disable this test until it is fixed properly.
- # XXX also check what it returns rather than just doing ok(1,...)
- # split /(?{ split "" })/, "abc";
- local $TODO = "Recursive split is still broken";
- ok 0, 'cache_re & "(?{": it dumps core in 5.6.1 & 5.8.0';
- }
-
-
- {
- ok "\x{100}\n" =~ /\x{100}\n$/, "UTF-8 length cache and fbm_compile";
- }
-
-
- {
- package Str;
- use overload q /""/ => sub {${$_ [0]};};
- sub new {my ($c, $v) = @_; bless \$v, $c;}
-
- package main;
- $_ = Str -> new ("a\x{100}/\x{100}b");
- ok join (":", /\b(.)\x{100}/g) eq "a:/", "re_intuit_start and PL_bostr";
- }
-
-
- {
- local $BugId = '17757';
- $_ = "code: 'x' { '...' }\n"; study;
- my @x; push @x, $& while m/'[^\']*'/gx;
- local $" = ":";
- iseq "@x", "'x':'...'", "Parse::RecDescent triggered infinite loop";
- }
-
-
- {
- my $re = qq /^([^X]*)X/;
- utf8::upgrade ($re);
- ok "\x{100}X" =~ /$re/, "S_cl_and ANYOF_UNICODE & ANYOF_INVERTED";
- }
-
-
- {
- local $BugId = '22354';
- sub func ($) {
- ok "a\nb" !~ /^b/, "Propagated modifier; $_[0]";
- ok "a\nb" =~ /^b/m, "Propagated modifier; $_[0] - with /m";
- }
- func "standalone";
- $_ = "x"; s/x/func "in subst"/e;
- $_ = "x"; s/x/func "in multiline subst"/em;
-
- #
- # Next two give 'panic: malloc'.
- # Outcommented, using two TODOs.
- #
- local $TODO = 'panic: malloc';
- local $Message = 'Postponed regexp and propaged modifier';
- # ok 0 for 1 .. 2;
- SKIP: {
- skip "panic: malloc", 2;
- $_ = "x"; /x(?{func "in regexp"})/;
- $_ = "x"; /x(?{func "in multiline regexp"})/m;
- }
- }
-
-
- {
- local $BugId = '19049';
- $_ = "abcdef\n";
- my @x = m/./g;
- iseq "abcde", $`, 'Global match sets $`';
- }
-
-
- {
- ok "123\x{100}" =~ /^.*1.*23\x{100}$/,
- 'UTF-8 + multiple floating substr';
- }
-
-
- {
- local $Message = '<20030808193656.5109.1 at llama.ni-s.u-net.com>';
-
- # LATIN SMALL/CAPITAL LETTER A WITH MACRON
- ok " \x{101}" =~ qr/\x{100}/i;
-
- # LATIN SMALL/CAPITAL LETTER A WITH RING BELOW
- ok " \x{1E01}" =~ qr/\x{1E00}/i;
-
- # DESERET SMALL/CAPITAL LETTER LONG I
- ok " \x{10428}" =~ qr/\x{10400}/i;
-
- # LATIN SMALL/CAPITAL LETTER A WITH RING BELOW + 'X'
- ok " \x{1E01}x" =~ qr/\x{1E00}X/i;
- }
-
-
- {
- # [perl #23769] Unicode regex broken on simple example
- # regrepeat() didn't handle UTF-8 EXACT case right.
- local $BugId = '23769';
- my $Mess = 'regrepeat() handles UTF-8 EXACT case right';
- local $Message = $Mess;
-
- my $s = "\x{a0}\x{a0}\x{a0}\x{100}"; chop $s;
-
- ok $s =~ /\x{a0}/;
- ok $s =~ /\x{a0}+/;
- ok $s =~ /\x{a0}\x{a0}/;
-
- $Message = "$Mess (easy variant)";
- ok "aaa\x{100}" =~ /(a+)/;
- iseq $1, "aaa";
-
- $Message = "$Mess (easy invariant)";
- ok "aaa\x{100} " =~ /(a+?)/;
- iseq $1, "a";
-
- $Message = "$Mess (regrepeat variant)";
- ok "\xa0\xa0\xa0\x{100} " =~ /(\xa0+?)/;
- iseq $1, "\xa0";
-
- $Message = "$Mess (regrepeat invariant)";
- ok "\xa0\xa0\xa0\x{100}" =~ /(\xa0+)/;
- iseq $1, "\xa0\xa0\xa0";
-
- $Message = "$Mess (hard variant)";
- ok "\xa0\xa1\xa0\xa1\xa0\xa1\x{100}" =~ /((?:\xa0\xa1)+?)/;
- iseq $1, "\xa0\xa1";
-
- $Message = "$Mess (hard invariant)";
- ok "ababab\x{100} " =~ /((?:ab)+)/;
- iseq $1, 'ababab';
-
- ok "\xa0\xa1\xa0\xa1\xa0\xa1\x{100}" =~ /((?:\xa0\xa1)+)/;
- iseq $1, "\xa0\xa1\xa0\xa1\xa0\xa1";
-
- ok "ababab\x{100} " =~ /((?:ab)+?)/;
- iseq $1, "ab";
-
- $Message = "Don't match first byte of UTF-8 representation";
- ok "\xc4\xc4\xc4" !~ /(\x{100}+)/;
- ok "\xc4\xc4\xc4" !~ /(\x{100}+?)/;
- ok "\xc4\xc4\xc4" !~ /(\x{100}++)/;
- }
-
-
- {
- for (120 .. 130) {
- my $head = 'x' x $_;
- local $Message = q [Don't misparse \x{...} in regexp ] .
- q [near 127 char EXACT limit];
- for my $tail ('\x{0061}', '\x{1234}', '\x61') {
- eval_ok qq ["$head$tail" =~ /$head$tail/];
- }
- local $Message = q [Don't misparse \N{...} in regexp ] .
- q [near 127 char EXACT limit];
- for my $tail ('\N{SNOWFLAKE}') {
- eval_ok qq [use charnames ':full';
- "$head$tail" =~ /$head$tail/];
- }
- }
- }
-
-
- {
- # perl panic: pp_match start/end pointers
- local $BugId = '25269';
- iseq "a-bc", eval {my ($x, $y) = "bca" =~ /^(?=.*(a)).*(bc)/; "$x-$y"},
- 'Captures can move backwards in string';
- }
-
-
- {
- local $BugId = '27940'; # \cA not recognized in character classes
- ok "a\cAb" =~ /\cA/, '\cA in pattern';
- ok "a\cAb" =~ /[\cA]/, '\cA in character class';
- ok "a\cAb" =~ /[\cA-\cB]/, '\cA in character class range';
- ok "abc" =~ /[^\cA-\cB]/, '\cA in negated character class range';
- ok "a\cBb" =~ /[\cA-\cC]/, '\cB in character class range';
- ok "a\cCbc" =~ /[^\cA-\cB]/, '\cC in negated character class range';
- ok "a\cAb" =~ /(??{"\cA"})/, '\cA in ??{} pattern';
- ok "ab" !~ /a\cIb/x, '\cI in pattern';
- }
-
-
- {
- # perl #28532: optional zero-width match at end of string is ignored
- local $BugId = '28532';
- ok "abc" =~ /^abc(\z)?/ && defined($1),
- 'Optional zero-width match at end of string';
- ok "abc" =~ /^abc(\z)??/ && !defined($1),
- 'Optional zero-width match at end of string';
- }
-
-
-
- { # TRIE related
- our @got = ();
- "words" =~ /(word|word|word)(?{push @got, $1})s$/;
- iseq @got, 1, "TRIE optimation";
-
- @got = ();
- "words" =~ /(word|word|word)(?{push @got,$1})s$/i;
- iseq @got, 1,"TRIEF optimisation";
-
- my @nums = map {int rand 1000} 1 .. 100;
- my $re = "(" . (join "|", @nums) . ")";
- $re = qr/\b$re\b/;
-
- foreach (@nums) {
- ok $_ =~ /$re/, "Trie nums";
- }
-
- $_ = join " ", @nums;
- @got = ();
- push @got, $1 while /$re/g;
-
- my %count;
- $count {$_} ++ for @got;
- my $ok = 1;
- for (@nums) {
- $ok = 0 if --$count {$_} < 0;
- }
- ok $ok, "Trie min count matches";
- }
-
-
- {
- # TRIE related
- # LATIN SMALL/CAPITAL LETTER A WITH MACRON
- ok "foba \x{101}foo" =~ qr/(foo|\x{100}foo|bar)/i &&
- $1 eq "\x{101}foo",
- "TRIEF + LATIN SMALL/CAPITAL LETTER A WITH MACRON";
-
- # LATIN SMALL/CAPITAL LETTER A WITH RING BELOW
- ok "foba \x{1E01}foo" =~ qr/(foo|\x{1E00}foo|bar)/i &&
- $1 eq "\x{1E01}foo",
- "TRIEF + LATIN SMALL/CAPITAL LETTER A WITH RING BELOW";
-
- # DESERET SMALL/CAPITAL LETTER LONG I
- ok "foba \x{10428}foo" =~ qr/(foo|\x{10400}foo|bar)/i &&
- $1 eq "\x{10428}foo",
- "TRIEF + DESERET SMALL/CAPITAL LETTER LONG I";
-
- # LATIN SMALL/CAPITAL LETTER A WITH RING BELOW + 'X'
- ok "foba \x{1E01}xfoo" =~ qr/(foo|\x{1E00}Xfoo|bar)/i &&
- $1 eq "\x{1E01}xfoo",
- "TRIEF + LATIN SMALL/CAPITAL LETTER A WITH RING BELOW + 'X'";
-
- use charnames ':full';
-
- my $s = "\N{LATIN SMALL LETTER SHARP S}";
- ok "foba ba$s" =~ qr/(foo|Ba$s|bar)/i && $1 eq "ba$s",
- "TRIEF + LATIN SMALL LETTER SHARP S =~ ss";
- ok "foba ba$s" =~ qr/(Ba$s|foo|bar)/i && $1 eq "ba$s",
- "TRIEF + LATIN SMALL LETTER SHARP S =~ ss";
- ok "foba ba$s" =~ qr/(foo|bar|Ba$s)/i && $1 eq "ba$s",
- "TRIEF + LATIN SMALL LETTER SHARP S =~ ss";
-
- ok "foba ba$s" =~ qr/(foo|Bass|bar)/i && $1 eq "ba$s",
- "TRIEF + LATIN SMALL LETTER SHARP S =~ ss";
-
- ok "foba ba$s" =~ qr/(foo|BaSS|bar)/i && $1 eq "ba$s",
- "TRIEF + LATIN SMALL LETTER SHARP S =~ SS";
-
- ok "foba ba${s}pxySS$s$s" =~ qr/(b(?:a${s}t|a${s}f|a${s}p)[xy]+$s*)/i
- && $1 eq "ba${s}pxySS$s$s",
- "COMMON PREFIX TRIEF + LATIN SMALL LETTER SHARP S";
- }
-
-
- SKIP:
- {
- print "# Set PERL_SKIP_PSYCHO_TEST to skip this test\n";
- my @normal = qw [the are some normal words];
-
- skip "Skipped Psycho", 2 * @normal if $ENV {PERL_SKIP_PSYCHO_TEST};
-
- local $" = "|";
-
- my @psycho = (@normal, map chr $_, 255 .. 20000);
- my $psycho1 = "@psycho";
- for (my $i = @psycho; -- $i;) {
- my $j = int rand (1 + $i);
- @psycho [$i, $j] = @psycho [$j, $i];
- }
- my $psycho2 = "@psycho";
-
- foreach my $word (@normal) {
- ok $word =~ /($psycho1)/ && $1 eq $word, 'Psycho';
- ok $word =~ /($psycho2)/ && $1 eq $word, 'Psycho';
- }
- }
-
-
- {
- local $BugId = '36207';
- my $utf8 = "\xe9\x{100}"; chop $utf8;
- my $latin1 = "\xe9";
-
- ok $utf8 =~ /\xe9/i, "utf8/latin";
- ok $utf8 =~ /$latin1/i, "utf8/latin runtime";
- ok $utf8 =~ /(abc|\xe9)/i, "utf8/latin trie";
- ok $utf8 =~ /(abc|$latin1)/i, "utf8/latin trie runtime";
-
- ok "\xe9" =~ /$utf8/i, "latin/utf8";
- ok "\xe9" =~ /(abc|$utf8)/i, "latin/utf8 trie";
- ok $latin1 =~ /$utf8/i, "latin/utf8 runtime";
- ok $latin1 =~ /(abc|$utf8)/i, "latin/utf8 trie runtime";
- }
-
-
- {
- local $BugId = '37038';
- my $s = "abcd";
- $s =~ /(..)(..)/g;
- $s = $1;
- $s = $2;
- iseq $2, 'cd',
- "Assigning to original string does not corrupt match vars";
- }
-
-
- {
- {
- package wooosh;
- sub gloople {"!"}
- }
- my $aeek = bless {} => 'wooosh';
- eval_ok sub {$aeek -> gloople () =~ /(.)/g},
- "//g match against return value of sub";
-
- sub gloople {"!"}
- eval_ok sub {gloople () =~ /(.)/g},
- "26410 didn't affect sub calls for some reason";
- }
-
-
- {
- local $TODO = "See changes 26925-26928, which reverted change 26410";
- {
- package lv;
- our $var = "abc";
- sub variable : lvalue {$var}
- }
- my $o = bless [] => 'lv';
- my $f = "";
- my $r = eval {
- for (1 .. 2) {
- $f .= $1 if $o -> variable =~ /(.)/g;
- }
- 1;
- };
- if ($r) {
- iseq $f, "ab", "pos() retained between calls";
- }
- else {
- local $TODO;
- ok 0, "Code failed: $@";
- }
-
- our $var = "abc";
- sub variable : lvalue {$var}
- my $g = "";
- my $s = eval {
- for (1 .. 2) {
- $g .= $1 if variable =~ /(.)/g;
- }
- 1;
- };
- if ($s) {
- iseq $g, "ab", "pos() retained between calls";
- }
- else {
- local $TODO;
- ok 0, "Code failed: $@";
- }
- }
-
-
- SKIP:
- {
- local $BugId = '37836';
- skip "In EBCDIC" if $IS_EBCDIC;
- no warnings 'utf8';
- $_ = pack 'U0C2', 0xa2, 0xf8; # Ill-formed UTF-8
- my $ret = 0;
- eval_ok sub {!($ret = s/[\0]+//g)},
- "Ill-formed UTF-8 doesn't match NUL in class";
- }
-
-
- {
- # chr(65535) should be allowed in regexes
- local $BugId = '38293';
- no warnings 'utf8'; # To allow non-characters
- my ($c, $r, $s);
-
- $c = chr 0xffff;
- $c =~ s/$c//g;
- ok $c eq "", "U+FFFF, parsed as atom";
-
- $c = chr 0xffff;
- $r = "\\$c";
- $c =~ s/$r//g;
- ok $c eq "", "U+FFFF backslashed, parsed as atom";
-
- $c = chr 0xffff;
- $c =~ s/[$c]//g;
- ok $c eq "", "U+FFFF, parsed in class";
-
- $c = chr 0xffff;
- $r = "[\\$c]";
- $c =~ s/$r//g;
- ok $c eq "", "U+FFFF backslashed, parsed in class";
-
- $s = "A\x{ffff}B";
- $s =~ s/\x{ffff}//i;
- ok $s eq "AB", "U+FFFF, EXACTF";
-
- $s = "\x{ffff}A";
- $s =~ s/\bA//;
- ok $s eq "\x{ffff}", "U+FFFF, BOUND";
-
- $s = "\x{ffff}!";
- $s =~ s/\B!//;
- ok $s eq "\x{ffff}", "U+FFFF, NBOUND";
- }
-
-
- {
- local $BugId = '39583';
-
- # The printing characters
- my @chars = ("A" .. "Z");
- my $delim = ",";
- my $size = 32771 - 4;
- my $str = '';
-
- # Create some random junk. Inefficient, but it works.
- for (my $i = 0; $i < $size; $ i++) {
- $str .= $chars [rand @chars];
- }
-
- $str .= ($delim x 4);
- my $res;
- my $matched;
- ok $str =~ s/^(.*?)${delim}{4}//s, "Pattern matches";
- iseq $str, "", "Empty string";
- ok defined $1 && length ($1) == $size, '$1 is correct size';
- }
-
-
- {
- local $BugId = '27940';
- ok "\0-A" =~ /\c at -A/, '@- should not be interpolated in a pattern';
- ok "\0\0A" =~ /\c at +A/, '@+ should not be interpolated in a pattern';
- ok "X\@-A" =~ /X at -A/, '@- should not be interpolated in a pattern';
- ok "X\@\@A" =~ /X at +A/, '@+ should not be interpolated in a pattern';
-
- ok "X\0A" =~ /X\c@?A/, '\c@?';
- ok "X\0A" =~ /X\c@*A/, '\c@*';
- ok "X\0A" =~ /X\c@(A)/, '\c@(';
- ok "X\0A" =~ /X(\c@)A/, '\c@)';
- ok "X\0A" =~ /X\c@|ZA/, '\c@|';
-
- ok "X\@A" =~ /X@?A/, '@?';
- ok "X\@A" =~ /X@*A/, '@*';
- ok "X\@A" =~ /X@(A)/, '@(';
- ok "X\@A" =~ /X(@)A/, '@)';
- ok "X\@A" =~ /X@|ZA/, '@|';
-
- local $" = ','; # non-whitespace and non-RE-specific
- ok 'abc' =~ /(.)(.)(.)/, 'The last successful match is bogus';
- ok "A at +B" =~ /A@{+}B/, 'Interpolation of @+ in /@{+}/';
- ok "A at -B" =~ /A@{-}B/, 'Interpolation of @- in /@{-}/';
- ok "A at +B" =~ /A@{+}B/x, 'Interpolation of @+ in /@{+}/x';
- ok "A at -B" =~ /A@{-}B/x, 'Interpolation of @- in /@{-}/x';
- }
-
-
- {
- use lib 'lib';
- use Cname;
-
- ok 'fooB' =~ /\N{foo}[\N{B}\N{b}]/, "Passthrough charname";
- my $test = 1233;
- #
- # Why doesn't must_warn work here?
- #
- my $w;
- local $SIG {__WARN__} = sub {$w .= "@_"};
- eval 'q(xxWxx) =~ /[\N{WARN}]/';
- ok $w && $w =~ /^Ignoring excess chars from/,
- "Ignoring excess chars warning";
-
- undef $w;
- eval q [ok "\0" !~ /[\N{EMPTY-STR}XY]/,
- "Zerolength charname in charclass doesn't match \\0"];
- ok $w && $w =~ /^Ignoring zero length/,
- 'Ignoring zero length \N{%} in character class warning';
-
- ok 'AB' =~ /(\N{EVIL})/ && $1 eq 'A', 'Charname caching $1';
- ok 'ABC' =~ /(\N{EVIL})/, 'Charname caching $1';
- ok 'xy' =~ /x\N{EMPTY-STR}y/,
- 'Empty string charname produces NOTHING node';
- ok '' =~ /\N{EMPTY-STR}/,
- 'Empty string charname produces NOTHING node';
-
- }
-
-
- {
- use charnames ':full';
-
- ok 'aabc' !~ /a\N{PLUS SIGN}b/, '/a\N{PLUS SIGN}b/ against aabc';
- ok 'a+bc' =~ /a\N{PLUS SIGN}b/, '/a\N{PLUS SIGN}b/ against a+bc';
-
- ok ' A B' =~ /\N{SPACE}\N{U+0041}\N{SPACE}\N{U+0042}/,
- 'Intermixed named and unicode escapes';
- ok "\N{SPACE}\N{U+0041}\N{SPACE}\N{U+0042}" =~
- /\N{SPACE}\N{U+0041}\N{SPACE}\N{U+0042}/,
- 'Intermixed named and unicode escapes';
- ok "\N{SPACE}\N{U+0041}\N{SPACE}\N{U+0042}" =~
- /[\N{SPACE}\N{U+0041}][\N{SPACE}\N{U+0042}]/,
- 'Intermixed named and unicode escapes';
- }
-
-
- {
- our $brackets;
- $brackets = qr{
- { (?> [^{}]+ | (??{ $brackets }) )* }
- }x;
-
- ok "{b{c}d" !~ m/^((??{ $brackets }))/, "Bracket mismatch";
-
- SKIP: {
- our @stack = ();
- my @expect = qw(
- stuff1
- stuff2
- <stuff1>and<stuff2>
- right
- <right>
- <<right>>
- <<<right>>>
- <<stuff1>and<stuff2>><<<<right>>>>
- );
-
- local $_ = '<<<stuff1>and<stuff2>><<<<right>>>>>';
- ok /^(<((?:(?>[^<>]+)|(?1))*)>(?{push @stack, $2 }))$/,
- "Recursion matches";
- iseq @stack, @expect, "Right amount of matches"
- or skip "Won't test individual results as count isn't equal",
- 0 + @expect;
- my $idx = 0;
- foreach my $expect (@expect) {
- iseq $stack [$idx], $expect,
- "Expecting '$expect' at stack pos #$idx";
- $idx ++;
- }
- }
- }
-
-
- {
- my $s = '123453456';
- $s =~ s/(?<digits>\d+)\k<digits>/$+{digits}/;
- ok $s eq '123456', 'Named capture (angle brackets) s///';
- $s = '123453456';
- $s =~ s/(?'digits'\d+)\k'digits'/$+{digits}/;
- ok $s eq '123456', 'Named capture (single quotes) s///';
- }
-
-
- {
- my @ary = (
- pack('U', 0x00F1), # n-tilde
- '_'.pack('U', 0x00F1), # _ + n-tilde
- 'c'.pack('U', 0x0327), # c + cedilla
- pack('U*', 0x00F1, 0x0327), # n-tilde + cedilla
- 'a'.pack('U', 0x00B2), # a + superscript two
- pack('U', 0x0391), # ALPHA
- pack('U', 0x0391).'2', # ALPHA + 2
- pack('U', 0x0391).'_', # ALPHA + _
- );
-
- for my $uni (@ary) {
- my ($r1, $c1, $r2, $c2) = eval qq {
- use utf8;
- scalar ("..foo foo.." =~ /(?'${uni}'foo) \\k'${uni}'/),
- \$+{${uni}},
- scalar ("..bar bar.." =~ /(?<${uni}>bar) \\k<${uni}>/),
- \$+{${uni}};
- };
- ok $r1, "Named capture UTF (?'')";
- ok defined $c1 && $c1 eq 'foo', "Named capture UTF \%+";
- ok $r2, "Named capture UTF (?<>)";
- ok defined $c2 && $c2 eq 'bar', "Named capture UTF \%+";
- }
- }
-
-
- {
- my $s = 'foo bar baz';
- my (@k, @v, @fetch, $res);
- my $count = 0;
- my @names = qw ($+{A} $+{B} $+{C});
- if ($s =~ /(?<A>foo)\s+(?<B>bar)?\s+(?<C>baz)/) {
- while (my ($k, $v) = each (%+)) {
- $count++;
- }
- @k = sort keys (%+);
- @v = sort values (%+);
- $res = 1;
- push @fetch,
- ["$+{A}", "$1"],
- ["$+{B}", "$2"],
- ["$+{C}", "$3"],
- ;
- }
- foreach (0 .. 2) {
- if ($fetch [$_]) {
- iseq $fetch [$_] [0], $fetch [$_] [1], $names [$_];
- } else {
- ok 0, $names[$_];
- }
- }
- iseq $res, 1, "'$s' =~ /(?<A>foo)\\s+(?<B>bar)?\\s+(?<C>baz)/";
- iseq $count, 3, "Got 3 keys in %+ via each";
- iseq 0 + @k, 3, 'Got 3 keys in %+ via keys';
- iseq "@k", "A B C", "Got expected keys";
- iseq "@v", "bar baz foo", "Got expected values";
- eval '
- no warnings "uninitialized";
- print for $+ {this_key_doesnt_exist};
- ';
- ok !$@, 'lvalue $+ {...} should not throw an exception';
- }
-
-
- {
- #
- # Almost the same as the block above, except that the capture is nested.
- #
- local $BugId = '50496';
- my $s = 'foo bar baz';
- my (@k, @v, @fetch, $res);
- my $count = 0;
- my @names = qw ($+{A} $+{B} $+{C} $+{D});
- if ($s =~ /(?<D>(?<A>foo)\s+(?<B>bar)?\s+(?<C>baz))/) {
- while (my ($k,$v) = each(%+)) {
- $count++;
- }
- @k = sort keys (%+);
- @v = sort values (%+);
- $res = 1;
- push @fetch,
- ["$+{A}", "$2"],
- ["$+{B}", "$3"],
- ["$+{C}", "$4"],
- ["$+{D}", "$1"],
- ;
- }
- foreach (0 .. 3) {
- if ($fetch [$_]) {
- iseq $fetch [$_] [0], $fetch [$_] [1], $names [$_];
- } else {
- ok 0, $names [$_];
- }
- }
- iseq $res, 1, "'$s' =~ /(?<D>(?<A>foo)\\s+(?<B>bar)?\\s+(?<C>baz))/";
- iseq $count, 4, "Got 4 keys in %+ via each";
- iseq @k, 4, 'Got 4 keys in %+ via keys';
- iseq "@k", "A B C D", "Got expected keys";
- iseq "@v", "bar baz foo foo bar baz", "Got expected values";
- eval '
- no warnings "uninitialized";
- print for $+ {this_key_doesnt_exist};
- ';
- ok !$@,'lvalue $+ {...} should not throw an exception';
- }
-
-
- {
- my $s = 'foo bar baz';
- my @res;
- if ('1234' =~ /(?<A>1)(?<B>2)(?<A>3)(?<B>4)/) {
- foreach my $name (sort keys(%-)) {
- my $ary = $- {$name};
- foreach my $idx (0 .. $#$ary) {
- push @res, "$name:$idx:$ary->[$idx]";
- }
- }
- }
- my @expect = qw (A:0:1 A:1:3 B:0:2 B:1:4);
- iseq "@res", "@expect", "Check %-";
- eval'
- no warnings "uninitialized";
- print for $- {this_key_doesnt_exist};
- ';
- ok !$@,'lvalue $- {...} should not throw an exception';
- }
-
-
- SKIP:
- {
- # stress test CURLYX/WHILEM.
- #
- # This test includes varying levels of nesting, and according to
- # profiling done against build 28905, exercises every code line in the
- # CURLYX and WHILEM blocks, except those related to LONGJMP, the
- # super-linear cache and warnings. It executes about 0.5M regexes
-
- skip "No psycho tests" if $ENV {PERL_SKIP_PSYCHO_TEST};
- print "# Set PERL_SKIP_PSYCHO_TEST to skip this test\n";
- my $r = qr/^
- (?:
- ( (?:a|z+)+ )
- (?:
- ( (?:b|z+){3,}? )
- (
- (?:
- (?:
- (?:c|z+){1,1}?z
- )?
- (?:c|z+){1,1}
- )*
- )
- (?:z*){2,}
- ( (?:z+|d)+ )
- (?:
- ( (?:e|z+)+ )
- )*
- ( (?:f|z+)+ )
- )*
- ( (?:z+|g)+ )
- (?:
- ( (?:h|z+)+ )
- )*
- ( (?:i|z+)+ )
- )+
- ( (?:j|z+)+ )
- (?:
- ( (?:k|z+)+ )
- )*
- ( (?:l|z+)+ )
- $/x;
-
- my $ok = 1;
- my $msg = "CURLYX stress test";
- OUTER:
- for my $a ("x","a","aa") {
- for my $b ("x","bbb","bbbb") {
- my $bs = $a.$b;
- for my $c ("x","c","cc") {
- my $cs = $bs.$c;
- for my $d ("x","d","dd") {
- my $ds = $cs.$d;
- for my $e ("x","e","ee") {
- my $es = $ds.$e;
- for my $f ("x","f","ff") {
- my $fs = $es.$f;
- for my $g ("x","g","gg") {
- my $gs = $fs.$g;
- for my $h ("x","h","hh") {
- my $hs = $gs.$h;
- for my $i ("x","i","ii") {
- my $is = $hs.$i;
- for my $j ("x","j","jj") {
- my $js = $is.$j;
- for my $k ("x","k","kk") {
- my $ks = $js.$k;
- for my $l ("x","l","ll") {
- my $ls = $ks.$l;
- if ($ls =~ $r) {
- if ($ls =~ /x/) {
- $msg .= ": unexpected match for [$ls]";
- $ok = 0;
- last OUTER;
- }
- my $cap = "$1$2$3$4$5$6$7$8$9$10$11$12";
- unless ($ls eq $cap) {
- $msg .= ": capture: [$ls], got [$cap]";
- $ok = 0;
- last OUTER;
- }
- }
- else {
- unless ($ls =~ /x/) {
- $msg = ": failed for [$ls]";
- $ok = 0;
- last OUTER;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- ok($ok, $msg);
- }
-
-
- {
- # \, breaks {3,4}
- ok "xaaay" !~ /xa{3\,4}y/, '\, in a pattern';
- ok "xa{3,4}y" =~ /xa{3\,4}y/, '\, in a pattern';
-
- # \c\ followed by _
- ok "x\c_y" !~ /x\c\_y/, '\_ in a pattern';
- ok "x\c\_y" =~ /x\c\_y/, '\_ in a pattern';
-
- # \c\ followed by other characters
- for my $c ("z", "\0", "!", chr(254), chr(256)) {
- my $targ = "a\034$c";
- my $reg = "a\\c\\$c";
- ok eval ("qq/$targ/ =~ /$reg/"), "\\c\\ in pattern";
- }
- }
-
-
- {
- local $BugId = '36046';
- my $str = 'abc';
- my $count = 0;
- my $mval = 0;
- my $pval = 0;
- while ($str =~ /b/g) {$mval = $#-; $pval = $#+; $count ++}
- iseq $mval, 0, '@- should be empty';
- iseq $pval, 0, '@+ should be empty';
- iseq $count, 1, 'Should have matched once only';
- }
-
-
- { # Test the (*PRUNE) pattern
- our $count = 0;
- 'aaab' =~ /a+b?(?{$count++})(*FAIL)/;
- iseq $count, 9, "Expect 9 for no (*PRUNE)";
- $count = 0;
- 'aaab' =~ /a+b?(*PRUNE)(?{$count++})(*FAIL)/;
- iseq $count, 3, "Expect 3 with (*PRUNE)";
- local $_ = 'aaab';
- $count = 0;
- 1 while /.(*PRUNE)(?{$count++})(*FAIL)/g;
- iseq $count, 4, "/.(*PRUNE)/";
- $count = 0;
- 'aaab' =~ /a+b?(??{'(*PRUNE)'})(?{$count++})(*FAIL)/;
- iseq $count, 3, "Expect 3 with (*PRUNE)";
- local $_ = 'aaab';
- $count = 0;
- 1 while /.(??{'(*PRUNE)'})(?{$count++})(*FAIL)/g;
- iseq $count, 4, "/.(*PRUNE)/";
- }
-
-
- { # Test the (*SKIP) pattern
- our $count = 0;
- 'aaab' =~ /a+b?(*SKIP)(?{$count++})(*FAIL)/;
- iseq $count, 1, "Expect 1 with (*SKIP)";
- local $_ = 'aaab';
- $count = 0;
- 1 while /.(*SKIP)(?{$count++})(*FAIL)/g;
- iseq $count, 4, "/.(*SKIP)/";
- $_ = 'aaabaaab';
- $count = 0;
- our @res = ();
- 1 while /(a+b?)(*SKIP)(?{$count++; push @res,$1})(*FAIL)/g;
- iseq $count, 2, "Expect 2 with (*SKIP)";
- iseq "@res", "aaab aaab", "Adjacent (*SKIP) works as expected";
- }
-
-
- { # Test the (*SKIP) pattern
- our $count = 0;
- 'aaab' =~ /a+b?(*MARK:foo)(*SKIP)(?{$count++})(*FAIL)/;
- iseq $count, 1, "Expect 1 with (*SKIP)";
- local $_ = 'aaab';
- $count = 0;
- 1 while /.(*MARK:foo)(*SKIP)(?{$count++})(*FAIL)/g;
- iseq $count, 4, "/.(*SKIP)/";
- $_ = 'aaabaaab';
- $count = 0;
- our @res = ();
- 1 while /(a+b?)(*MARK:foo)(*SKIP)(?{$count++; push @res,$1})(*FAIL)/g;
- iseq $count, 2, "Expect 2 with (*SKIP)";
- iseq "@res", "aaab aaab", "Adjacent (*SKIP) works as expected";
- }
-
-
- { # Test the (*SKIP) pattern
- our $count = 0;
- 'aaab' =~ /a*(*MARK:a)b?(*MARK:b)(*SKIP:a)(?{$count++})(*FAIL)/;
- iseq $count, 3, "Expect 3 with *MARK:a)b?(*MARK:b)(*SKIP:a)";
- local $_ = 'aaabaaab';
- $count = 0;
- our @res = ();
- 1 while
- /(a*(*MARK:a)b?)(*MARK:x)(*SKIP:a)(?{$count++; push @res,$1})(*FAIL)/g;
- iseq $count, 5, "Expect 5 with (*MARK:a)b?)(*MARK:x)(*SKIP:a)";
- iseq "@res", "aaab b aaab b ",
- "Adjacent (*MARK:a)b?)(*MARK:x)(*SKIP:a) works as expected";
- }
-
-
- { # Test the (*COMMIT) pattern
- our $count = 0;
- 'aaabaaab' =~ /a+b?(*COMMIT)(?{$count++})(*FAIL)/;
- iseq $count, 1, "Expect 1 with (*COMMIT)";
- local $_ = 'aaab';
- $count = 0;
- 1 while /.(*COMMIT)(?{$count++})(*FAIL)/g;
- iseq $count, 1, "/.(*COMMIT)/";
- $_ = 'aaabaaab';
- $count = 0;
- our @res = ();
- 1 while /(a+b?)(*COMMIT)(?{$count++; push @res,$1})(*FAIL)/g;
- iseq $count, 1, "Expect 1 with (*COMMIT)";
- iseq "@res", "aaab", "Adjacent (*COMMIT) works as expected";
- }
-
-
- {
- # Test named commits and the $REGERROR var
- our $REGERROR;
- for my $name ('', ':foo') {
- for my $pat ("(*PRUNE$name)",
- ($name ? "(*MARK$name)" : "") . "(*SKIP$name)",
- "(*COMMIT$name)") {
- for my $suffix ('(*FAIL)', '') {
- 'aaaab' =~ /a+b$pat$suffix/;
- iseq $REGERROR,
- ($suffix ? ($name ? 'foo' : "1") : ""),
- "Test $pat and \$REGERROR $suffix";
- }
- }
- }
- }
-
-
- {
- # Test named commits and the $REGERROR var
- package Fnorble;
- our $REGERROR;
- for my $name ('', ':foo') {
- for my $pat ("(*PRUNE$name)",
- ($name ? "(*MARK$name)" : "") . "(*SKIP$name)",
- "(*COMMIT$name)") {
- for my $suffix ('(*FAIL)','') {
- 'aaaab' =~ /a+b$pat$suffix/;
- ::iseq $REGERROR,
- ($suffix ? ($name ? 'foo' : "1") : ""),
- "Test $pat and \$REGERROR $suffix";
- }
- }
- }
- }
-
-
- {
- # Test named commits and the $REGERROR var
- local $Message = '$REGERROR';
- our $REGERROR;
- for my $word (qw (bar baz bop)) {
- $REGERROR = "";
- "aaaaa$word" =~
- /a+(?:bar(*COMMIT:bar)|baz(*COMMIT:baz)|bop(*COMMIT:bop))(*FAIL)/;
- iseq $REGERROR, $word;
- }
- }
-
-
- {
- local $BugId = '40684';
- local $Message = '/m in precompiled regexp';
- my $s = "abc\ndef";
- my $rex = qr'^abc$'m;
- ok $s =~ m/$rex/;
- ok $s =~ m/^abc$/m;
- }
-
-
- {
- #Mindnumbingly simple test of (*THEN)
- for ("ABC","BAX") {
- ok /A (*THEN) X | B (*THEN) C/x, "Simple (*THEN) test";
- }
- }
-
-
- {
- local $Message = "Relative Recursion";
- my $parens = qr/(\((?:[^()]++|(?-1))*+\))/;
- local $_ = 'foo((2*3)+4-3) + bar(2*(3+4)-1*(2-3))';
- my ($all, $one, $two) = ('', '', '');
- ok /foo $parens \s* \+ \s* bar $parens/x;
- iseq $1, '((2*3)+4-3)';
- iseq $2, '(2*(3+4)-1*(2-3))';
- iseq $&, 'foo((2*3)+4-3) + bar(2*(3+4)-1*(2-3))';
- iseq $&, $_;
- }
-
- {
- my $spaces=" ";
- local $_ = join 'bar', $spaces, $spaces;
- our $count = 0;
- s/(?>\s+bar)(?{$count++})//g;
- iseq $_, $spaces, "SUSPEND final string";
- iseq $count, 1, "Optimiser should have prevented more than one match";
- }
-
- {
- local $BugId = '36909';
- local $Message = '(?: ... )? should not lose $^R';
- $^R = 'Nothing';
- {
- local $^R = "Bad";
- ok 'x foofoo y' =~ m {
- (foo) # $^R correctly set
- (?{ "last regexp code result" })
- }x;
- iseq $^R, 'last regexp code result';
- }
- iseq $^R, 'Nothing';
-
- {
- local $^R = "Bad";
-
- ok 'x foofoo y' =~ m {
- (?:foo|bar)+ # $^R correctly set
- (?{ "last regexp code result" })
- }x;
- iseq $^R, 'last regexp code result';
- }
- iseq $^R, 'Nothing';
-
- {
- local $^R = "Bad";
- ok 'x foofoo y' =~ m {
- (foo|bar)\1+ # $^R undefined
- (?{ "last regexp code result" })
- }x;
- iseq $^R, 'last regexp code result';
- }
- iseq $^R, 'Nothing';
-
- {
- local $^R = "Bad";
- ok 'x foofoo y' =~ m {
- (foo|bar)\1 # This time without the +
- (?{"last regexp code result"})
- }x;
- iseq $^R, 'last regexp code result';
- }
- iseq $^R, 'Nothing';
- }
-
-
- {
- local $BugId = '22395';
- local $Message = 'Match is linear, not quadratic';
- our $count;
- for my $l (10, 100, 1000) {
- $count = 0;
- ('a' x $l) =~ /(.*)(?{$count++})[bc]/;
- local $TODO = "Should be L+1 not L*(L+3)/2 (L=$l)";
- iseq $count, $l + 1;
- }
- }
-
-
- {
- local $BugId = '22614';
- local $Message = '@-/@+ should not have undefined values';
- local $_ = 'ab';
- our @len = ();
- /(.){1,}(?{push @len,0+ at -})(.){1,}(?{})^/;
- iseq "@len", "2 2 2";
- }
-
-
- {
- local $BugId = '18209';
- local $Message = '$& set on s///';
- my $text = ' word1 word2 word3 word4 word5 word6 ';
-
- my @words = ('word1', 'word3', 'word5');
- my $count;
- foreach my $word (@words) {
- $text =~ s/$word\s//gi; # Leave a space to seperate words
- # in the resultant str.
- # The following block is not working.
- if ($&) {
- $count ++;
- }
- # End bad block
- }
- iseq $count, 3;
- iseq $text, ' word2 word4 word6 ';
- }
-
-
- {
- # RT#6893
- local $BugId = '6893';
- local $_ = qq (A\nB\nC\n);
- my @res;
- while (m#(\G|\n)([^\n]*)\n#gsx) {
- push @res, "$2";
- last if @res > 3;
- }
- iseq "@res", "A B C", "/g pattern shouldn't infinite loop";
- }
-
-
- {
- # From Message-ID: <877ixs6oa6.fsf at k75.linux.bogus>
- my $dow_name = "nada";
- my $parser = "(\$dow_name) = \$time_string =~ /(D\x{e9}\\ " .
- "C\x{e9}adaoin|D\x{e9}\\ Sathairn|\\w+|\x{100})/";
- my $time_string = "D\x{e9} C\x{e9}adaoin";
- eval $parser;
- ok !$@, "Test Eval worked";
- iseq $dow_name, $time_string, "UTF-8 trie common prefix extraction";
- }
-
-
- {
- my $v;
- ($v = 'bar') =~ /(\w+)/g;
- $v = 'foo';
- iseq "$1", 'bar', '$1 is safe after /g - may fail due ' .
- 'to specialized config in pp_hot.c'
- }
-
-
- {
- local $Message = "http://nntp.perl.org/group/perl.perl5.porters/118663";
- my $qr_barR1 = qr/(bar)\g-1/;
- ok "foobarbarxyz" =~ $qr_barR1;
- ok "foobarbarxyz" =~ qr/foo${qr_barR1}xyz/;
- ok "foobarbarxyz" =~ qr/(foo)${qr_barR1}xyz/;
- ok "foobarbarxyz" =~ qr/(foo)(bar)\g{-1}xyz/;
- ok "foobarbarxyz" =~ qr/(foo${qr_barR1})xyz/;
- ok "foobarbarxyz" =~ qr/(foo(bar)\g{-1})xyz/;
- }
-
-
- {
- local $BugId = '41010';
- local $Message = 'No optimizer bug';
- my @tails = ('', '(?(1))', '(|)', '()?');
- my @quants = ('*','+');
- my $doit = sub {
- my $pats = shift;
- for (@_) {
- for my $pat (@$pats) {
- for my $quant (@quants) {
- for my $tail (@tails) {
- my $re = "($pat$quant\$)$tail";
- ok /$re/ && $1 eq $_, "'$_' =~ /$re/";
- ok /$re/m && $1 eq $_, "'$_' =~ /$re/m";
- }
- }
- }
- }
- };
-
- my @dpats = ('\d',
- '[1234567890]',
- '(1|[23]|4|[56]|[78]|[90])',
- '(?:1|[23]|4|[56]|[78]|[90])',
- '(1|2|3|4|5|6|7|8|9|0)',
- '(?:1|2|3|4|5|6|7|8|9|0)');
- my @spats = ('[ ]', ' ', '( |\t)', '(?: |\t)', '[ \t]', '\s');
- my @sstrs = (' ');
- my @dstrs = ('12345');
- $doit -> (\@spats, @sstrs);
- $doit -> (\@dpats, @dstrs);
- }
-
-
- {
- local $Message = '$REGMARK';
- our @r = ();
- our ($REGMARK, $REGERROR);
- ok 'foofoo' =~ /foo (*MARK:foo) (?{push @r,$REGMARK}) /x;
- iseq "@r","foo";
- iseq $REGMARK, "foo";
- ok 'foofoo' !~ /foo (*MARK:foo) (*FAIL) /x;
- ok !$REGMARK;
- iseq $REGERROR, 'foo';
- }
-
-
- {
- local $Message = '\K test';
- my $x;
- $x = "abc.def.ghi.jkl";
- $x =~ s/.*\K\..*//;
- iseq $x, "abc.def.ghi";
-
- $x = "one two three four";
- $x =~ s/o+ \Kthree//g;
- iseq $x, "one two four";
-
- $x = "abcde";
- $x =~ s/(.)\K/$1/g;
- iseq $x, "aabbccddee";
- }
-
-
- {
- sub kt {
- return '4' if $_[0] eq '09028623';
- }
- # Nested EVAL using PL_curpm (via $1 or friends)
- my $re;
- our $grabit = qr/ ([0-6][0-9]{7}) (??{ kt $1 }) [890] /x;
- $re = qr/^ ( (??{ $grabit }) ) $ /x;
- my @res = '0902862349' =~ $re;
- iseq join ("-", @res), "0902862349",
- 'PL_curpm is set properly on nested eval';
-
- our $qr = qr/ (o) (??{ $1 }) /x;
- ok 'boob'=~/( b (??{ $qr }) b )/x && 1, "PL_curpm, nested eval";
- }
-
-
- {
- use charnames ":full";
- ok "\N{ROMAN NUMERAL ONE}" =~ /\p{Alphabetic}/, "I =~ Alphabetic";
- ok "\N{ROMAN NUMERAL ONE}" =~ /\p{Uppercase}/, "I =~ Uppercase";
- ok "\N{ROMAN NUMERAL ONE}" !~ /\p{Lowercase}/, "I !~ Lowercase";
- ok "\N{ROMAN NUMERAL ONE}" =~ /\p{IDStart}/, "I =~ ID_Start";
- ok "\N{ROMAN NUMERAL ONE}" =~ /\p{IDContinue}/, "I =~ ID_Continue";
- ok "\N{SMALL ROMAN NUMERAL ONE}" =~ /\p{Alphabetic}/, "i =~ Alphabetic";
- ok "\N{SMALL ROMAN NUMERAL ONE}" !~ /\p{Uppercase}/, "i !~ Uppercase";
- ok "\N{SMALL ROMAN NUMERAL ONE}" =~ /\p{Lowercase}/, "i =~ Lowercase";
- ok "\N{SMALL ROMAN NUMERAL ONE}" =~ /\p{IDStart}/, "i =~ ID_Start";
- ok "\N{SMALL ROMAN NUMERAL ONE}" =~ /\p{IDContinue}/, "i =~ ID_Continue"
- }
-
-
- {
- # requirement of Unicode Technical Standard #18, 1.7 Code Points
- # cf. http://www.unicode.org/reports/tr18/#Supplementary_Characters
- for my $u (0x7FF, 0x800, 0xFFFF, 0x10000) {
- no warnings 'utf8'; # oops
- my $c = chr $u;
- my $x = sprintf '%04X', $u;
- ok "A${c}B" =~ /A[\0-\x{10000}]B/, "Unicode range - $x";
- }
- }
-
-
- {
- my $res="";
-
- if ('1' =~ /(?|(?<digit>1)|(?<digit>2))/) {
- $res = "@{$- {digit}}";
- }
- iseq $res, "1",
- "Check that (?|...) doesnt cause dupe entries in the names array";
-
- $res = "";
- if ('11' =~ /(?|(?<digit>1)|(?<digit>2))(?&digit)/) {
- $res = "@{$- {digit}}";
- }
- iseq $res, "1", "Check that (?&..) to a buffer inside " .
- "a (?|...) goes to the leftmost";
- }
-
-
- {
- use warnings;
- local $Message = "ASCII pattern that really is UTF-8";
- my @w;
- local $SIG {__WARN__} = sub {push @w, "@_"};
- my $c = qq (\x{DF});
- ok $c =~ /${c}|\x{100}/;
- ok @w == 0;
- }
-
-
- {
- local $Message = "Corruption of match results of qr// across scopes";
- my $qr = qr/(fo+)(ba+r)/;
- 'foobar' =~ /$qr/;
- iseq "$1$2", "foobar";
- {
- 'foooooobaaaaar' =~ /$qr/;
- iseq "$1$2", 'foooooobaaaaar';
- }
- iseq "$1$2", "foobar";
- }
-
-
- {
- local $Message = "HORIZWS";
- local $_ = "\t \r\n \n \t".chr(11)."\n";
- s/\H/H/g;
- s/\h/h/g;
- iseq $_, "hhHHhHhhHH";
- $_ = "\t \r\n \n \t" . chr (11) . "\n";
- utf8::upgrade ($_);
- s/\H/H/g;
- s/\h/h/g;
- iseq $_, "hhHHhHhhHH";
- }
-
-
- {
- local $Message = "Various whitespace special patterns";
- my @h = map {chr $_} 0x09, 0x20, 0xa0, 0x1680, 0x180e, 0x2000,
- 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006,
- 0x2007, 0x2008, 0x2009, 0x200a, 0x202f, 0x205f,
- 0x3000;
- my @v = map {chr $_} 0x0a, 0x0b, 0x0c, 0x0d, 0x85, 0x2028,
- 0x2029;
- my @lb = ("\x0D\x0A", map {chr $_} 0x0A .. 0x0D, 0x85, 0x2028, 0x2029);
- foreach my $t ([\@h, qr/\h/, qr/\h+/],
- [\@v, qr/\v/, qr/\v+/],
- [\@lb, qr/\R/, qr/\R+/],) {
- my $ary = shift @$t;
- foreach my $pat (@$t) {
- foreach my $str (@$ary) {
- ok $str =~ /($pat)/, $pat;
- iseq $1, $str, $pat;
- utf8::upgrade ($str);
- ok $str =~ /($pat)/, "Upgraded string - $pat";
- iseq $1, $str, "Upgraded string - $pat";
- }
- }
- }
- }
-
-
- {
- local $Message = "Check that \\xDF match properly in its various forms";
- # Test that \xDF matches properly. this is pretty hacky stuff,
- # but its actually needed. The malarky with '-' is to prevent
- # compilation caching from playing any role in the test.
- my @df = (chr (0xDF), '-', chr (0xDF));
- utf8::upgrade ($df [2]);
- my @strs = ('ss', 'sS', 'Ss', 'SS', chr (0xDF));
- my @ss = map {("$_", "$_")} @strs;
- utf8::upgrade ($ss [$_ * 2 + 1]) for 0 .. $#strs;
-
- for my $ssi (0 .. $#ss) {
- for my $dfi (0 .. $#df) {
- my $pat = $df [$dfi];
- my $str = $ss [$ssi];
- my $utf_df = ($dfi > 1) ? 'utf8' : '';
- my $utf_ss = ($ssi % 2) ? 'utf8' : '';
- (my $sstr = $str) =~ s/\xDF/\\xDF/;
-
- if ($utf_df || $utf_ss || length ($ss [$ssi]) == 1) {
- my $ret = $str =~ /$pat/i;
- next if $pat eq '-';
- ok $ret, "\"$sstr\" =~ /\\xDF/i " .
- "(str is @{[$utf_ss||'latin']}, pat is " .
- "@{[$utf_df||'latin']})";
- }
- else {
- my $ret = $str !~ /$pat/i;
- next if $pat eq '-';
- ok $ret, "\"$sstr\" !~ /\\xDF/i " .
- "(str is @{[$utf_ss||'latin']}, pat is " .
- "@{[$utf_df||'latin']})";
- }
- }
- }
- }
-
-
- {
- local $Message = "BBC(Bleadperl Breaks CPAN) Today: String::Multibyte";
- my $re = qr/(?:[\x00-\xFF]{4})/;
- my $hyp = "\0\0\0-";
- my $esc = "\0\0\0\\";
-
- my $str = "$esc$hyp$hyp$esc$esc";
- my @a = ($str =~ /\G(?:\Q$esc$esc\E|\Q$esc$hyp\E|$re)/g);
-
- iseq @a,3;
- local $" = "=";
- iseq "@a","$esc$hyp=$hyp=$esc$esc";
- }
-
-
- {
- # Test for keys in %+ and %-
- local $Message = 'Test keys in %+ and %-';
- no warnings 'uninitialized';
- my $_ = "abcdef";
- /(?<foo>a)|(?<foo>b)/;
- iseq ((join ",", sort keys %+), "foo");
- iseq ((join ",", sort keys %-), "foo");
- iseq ((join ",", sort values %+), "a");
- iseq ((join ",", sort map "@$_", values %-), "a ");
- /(?<bar>a)(?<bar>b)(?<quux>.)/;
- iseq ((join ",", sort keys %+), "bar,quux");
- iseq ((join ",", sort keys %-), "bar,quux");
- iseq ((join ",", sort values %+), "a,c"); # leftmost
- iseq ((join ",", sort map "@$_", values %-), "a b,c");
- /(?<un>a)(?<deux>c)?/; # second buffer won't capture
- iseq ((join ",", sort keys %+), "un");
- iseq ((join ",", sort keys %-), "deux,un");
- iseq ((join ",", sort values %+), "a");
- iseq ((join ",", sort map "@$_", values %-), ",a");
- }
-
-
- {
- # length() on captures, the numbered ones end up in Perl_magic_len
- my $_ = "aoeu \xe6var ook";
- /^ \w+ \s (?<eek>\S+)/x;
-
- iseq length ($`), 0, q[length $`];
- iseq length ($'), 4, q[length $'];
- iseq length ($&), 9, q[length $&];
- iseq length ($1), 4, q[length $1];
- iseq length ($+{eek}), 4, q[length $+{eek} == length $1];
- }
-
-
- {
- my $ok = -1;
-
- $ok = exists ($-{x}) ? 1 : 0 if 'bar' =~ /(?<x>foo)|bar/;
- iseq $ok, 1, '$-{x} exists after "bar"=~/(?<x>foo)|bar/';
- iseq scalar (%+), 0, 'scalar %+ == 0 after "bar"=~/(?<x>foo)|bar/';
- iseq scalar (%-), 1, 'scalar %- == 1 after "bar"=~/(?<x>foo)|bar/';
-
- $ok = -1;
- $ok = exists ($+{x}) ? 1 : 0 if 'bar' =~ /(?<x>foo)|bar/;
- iseq $ok, 0, '$+{x} not exists after "bar"=~/(?<x>foo)|bar/';
- iseq scalar (%+), 0, 'scalar %+ == 0 after "bar"=~/(?<x>foo)|bar/';
- iseq scalar (%-), 1, 'scalar %- == 1 after "bar"=~/(?<x>foo)|bar/';
-
- $ok = -1;
- $ok = exists ($-{x}) ? 1 : 0 if 'foo' =~ /(?<x>foo)|bar/;
- iseq $ok, 1, '$-{x} exists after "foo"=~/(?<x>foo)|bar/';
- iseq scalar (%+), 1, 'scalar %+ == 1 after "foo"=~/(?<x>foo)|bar/';
- iseq scalar (%-), 1, 'scalar %- == 1 after "foo"=~/(?<x>foo)|bar/';
-
- $ok = -1;
- $ok = exists ($+{x}) ? 1 : 0 if 'foo'=~/(?<x>foo)|bar/;
- iseq $ok, 1, '$+{x} exists after "foo"=~/(?<x>foo)|bar/';
- }
-
-
- {
- local $_;
- ($_ = 'abc') =~ /(abc)/g;
- $_ = '123';
- iseq "$1", 'abc', "/g leads to unsafe match vars: $1";
- }
-
-
- {
- local $Message = 'Message-ID: <20070818091501.7eff4831 at r2d2>';
- my $str = "";
- for (0 .. 5) {
- my @x;
- $str .= "@x"; # this should ALWAYS be the empty string
- 'a' =~ /(a|)/;
- push @x, 1;
- }
- iseq length ($str), 0, "Trie scope error, string should be empty";
- $str = "";
- my @foo = ('a') x 5;
- for (@foo) {
- my @bar;
- $str .= "@bar";
- s/a|/push @bar, 1/e;
- }
- iseq length ($str), 0, "Trie scope error, string should be empty";
- }
-
-
- {
- local $BugId = '45605';
- # [perl #45605] Regexp failure with utf8-flagged and byte-flagged string
-
- my $utf_8 = "\xd6schel";
- utf8::upgrade ($utf_8);
- $utf_8 =~ m {(\xd6|Ö)schel};
- iseq $1, "\xd6", "Upgrade error";
- }
-
- {
-# more TRIE/AHOCORASICK problems with mixed utf8 / latin-1 and case folding
- for my $chr (160 .. 255) {
- my $chr_byte = chr($chr);
- my $chr_utf8 = chr($chr); utf8::upgrade($chr_utf8);
- my $rx = qr{$chr_byte|X}i;
- ok($chr_utf8 =~ $rx, "utf8/latin, codepoint $chr");
- }
- }
-
- {
- # Regardless of utf8ness any character matches itself when
- # doing a case insensitive match. See also [perl #36207]
- local $BugId = '36207';
- for my $o (0 .. 255) {
- my @ch = (chr ($o), chr ($o));
- utf8::upgrade ($ch [1]);
- for my $u_str (0, 1) {
- for my $u_pat (0, 1) {
- ok $ch [$u_str] =~ /\Q$ch[$u_pat]\E/i,
- "\$c =~ /\$c/i : chr ($o) : u_str = $u_str u_pat = $u_pat";
- ok $ch [$u_str] =~ /\Q$ch[$u_pat]\E|xyz/i,
- "\$c=~/\$c|xyz/i : chr($o) : u_str = $u_str u_pat = $u_pat";
- }
- }
- }
- }
-
-
- {
- our $a = 3; "" =~ /(??{ $a })/;
- our $b = $a;
- iseq $b, $a, "Copy of scalar used for postponed subexpression";
- }
-
-
- {
- local $BugId = '49190';
- local $Message = '$REGMARK in replacement';
- our $REGMARK;
- my $_ = "A";
- ok s/(*:B)A/$REGMARK/;
- iseq $_, "B";
- $_ = "CCCCBAA";
- ok s/(*:X)A+|(*:Y)B+|(*:Z)C+/$REGMARK/g;
- iseq $_, "ZYX";
- }
-
-
- {
- our @ctl_n = ();
- our @plus = ();
- our $nested_tags;
- $nested_tags = qr{
- <
- (\w+)
- (?{
- push @ctl_n,$^N;
- push @plus,$+;
- })
- >
- (??{$nested_tags})*
- </\s* \w+ \s*>
- }x;
-
- my $match = '<bla><blubb></blubb></bla>' =~ m/^$nested_tags$/;
- ok $match, 'nested construct matches';
- iseq "@ctl_n", "bla blubb", '$^N inside of (?{}) works as expected';
- iseq "@plus", "bla blubb", '$+ inside of (?{}) works as expected';
- }
-
-
- {
- local $BugId = '52658';
- local $Message = 'Substitution evaluation in list context';
- my $reg = '../xxx/';
- my @te = ($reg =~ m{^(/?(?:\.\./)*)},
- $reg =~ s/(x)/'b'/eg > 1 ? '##' : '++');
- iseq $reg, '../bbb/';
- iseq $te [0], '../';
- }
-
- # This currently has to come before any "use encoding" in this file.
- {
- local $Message;
- local $BugId = '59342';
- # for 5.10.x, add a dummy test indead
- #must_warn 'qr/\400/', '^Use of octal value above 377';
- $Message=""; ok 1;
- }
-
-
- SKIP: {
- # XXX: This set of tests is essentially broken, POSIX character classes
- # should not have differing definitions under Unicode.
- # There are property names for that.
- skip "Tests assume ASCII", 4 unless $IS_ASCII;
-
- my @notIsPunct = grep {/[[:punct:]]/ and not /\p{IsPunct}/}
- map {chr} 0x20 .. 0x7f;
- iseq join ('', @notIsPunct), '$+<=>^`|~',
- '[:punct:] disagress with IsPunct on Symbols';
-
- my @isPrint = grep {not /[[:print:]]/ and /\p{IsPrint}/}
- map {chr} 0 .. 0x1f, 0x7f .. 0x9f;
- iseq join ('', @isPrint), "\x09\x0a\x0b\x0c\x0d\x85",
- 'IsPrint disagrees with [:print:] on control characters';
-
- my @isPunct = grep {/[[:punct:]]/ != /\p{IsPunct}/}
- map {chr} 0x80 .. 0xff;
- iseq join ('', @isPunct), "\xa1\xab\xb7\xbb\xbf", # ¡ « · » ¿
- 'IsPunct disagrees with [:punct:] outside ASCII';
-
- my @isPunctLatin1 = eval q {
- use encoding 'latin1';
- grep {/[[:punct:]]/ != /\p{IsPunct}/} map {chr} 0x80 .. 0xff;
- };
- skip "Eval failed ($@)", 1 if $@;
- skip "PERL_LEGACY_UNICODE_CHARCLASS_MAPPINGS set to 0", 1
- if $ENV {REAL_POSIX_CC};
- iseq join ('', @isPunctLatin1), '',
- 'IsPunct agrees with [:punct:] with explicit Latin1';
- }
-
-
- {
- local $BugId = '60034';
- my $a = "xyzt" x 8192;
- ok $a =~ /\A(?>[a-z])*\z/,
- '(?>) does not cause wrongness on long string';
- my $b = $a . chr 256;
- chop $b;
- {
- iseq $a, $b;
- }
- ok $b =~ /\A(?>[a-z])*\z/,
- '(?>) does not cause wrongness on long string with UTF-8';
- }
-
-
- #
- # Keep the following tests last -- they may crash perl
- #
- print "# Tests that follow may crash perl\n";
- {
- local $BugId = '19049/38869';
- local $Message = 'Pattern in a loop, failure should not ' .
- 'affect previous success';
- my @list = (
- 'ab cdef', # Matches regex
- ('e' x 40000 ) .'ab c' # Matches not, but 'ab c' matches part of it
- );
- my $y;
- my $x;
- foreach (@list) {
- m/ab(.+)cd/i; # The ignore-case seems to be important
- $y = $1; # Use $1, which might not be from the last match!
- $x = substr ($list [0], $- [0], $+ [0] - $- [0]);
- }
- iseq $y, ' ';
- iseq $x, 'ab cd';
- }
-
-
- {
- local $BugId = '24274';
-
- ok (("a" x (2 ** 15 - 10)) =~ /^()(a|bb)*$/, "Recursive stack cracker");
- ok ((q(a)x 100) =~ /^(??{'(.)'x 100})/,
- "Regexp /^(??{'(.)'x 100})/ crashes older perls");
- }
-
-
- {
- eval '/\k/';
- ok $@ =~ /\QSequence \k... not terminated in regex;\E/,
- 'Lone \k not allowed';
- }
-
-
- {
- local $Message = "Substitution with lookahead (possible segv)";
- $_ = "ns1ns1ns1";
- s/ns(?=\d)/ns_/g;
- iseq $_, "ns_1ns_1ns_1";
- $_ = "ns1";
- s/ns(?=\d)/ns_/;
- iseq $_, "ns_1";
- $_ = "123";
- s/(?=\d+)|(?<=\d)/!Bang!/g;
- iseq $_, "!Bang!1!Bang!2!Bang!3!Bang!";
- }
-
-
- {
- # [perl #45337] utf8 + "[a]a{2}" + /$.../ = panic: sv_len_utf8 cache
- local $BugId = '45337';
- local ${^UTF8CACHE} = -1;
- local $Message = "Shouldn't panic";
- my $s = "[a]a{2}";
- utf8::upgrade $s;
- ok "aaa" =~ /$s/;
- }
- {
- local $BugId = '57042';
- local $Message = "Check if tree logic breaks \$^R";
- my $cond_re = qr/\s*
- \s* (?:
- \( \s* A (?{1})
- | \( \s* B (?{2})
- )
- /x;
- my @res;
- for my $line ("(A)","(B)") {
- if ($line =~ m/$cond_re/) {
- push @res, $^R ? "#$^R" : "UNDEF";
- }
- }
- iseq "@res","#1 #2";
- }
- {
- no warnings 'closure';
- my $re = qr/A(??{"1"})/;
- ok "A1B" =~ m/^((??{ $re }))((??{"B"}))$/;
- ok $1 eq "A1";
- ok $2 eq "B";
- }
-
-
- {
- use re 'eval';
- local $Message = 'Test if $^N and $+ work in (?{{})';
- our @ctl_n = ();
- our @plus = ();
- our $nested_tags;
- $nested_tags = qr{
- <
- ((\w)+)
- (?{
- push @ctl_n, (defined $^N ? $^N : "undef");
- push @plus, (defined $+ ? $+ : "undef");
- })
- >
- (??{$nested_tags})*
- </\s* \w+ \s*>
- }x;
-
-
- my $c = 0;
- for my $test (
- # Test structure:
- # [ Expected result, Regex, Expected value(s) of $^N, Expected value(s) of $+ ]
- [ 1, qr#^$nested_tags$#, "bla blubb bla", "a b a" ],
- [ 1, qr#^($nested_tags)$#, "bla blubb <bla><blubb></blubb></bla>", "a b a" ],
- [ 1, qr#^(|)$nested_tags$#, "bla blubb bla", "a b a" ],
- [ 1, qr#^(?:|)$nested_tags$#, "bla blubb bla", "a b a" ],
- [ 1, qr#^<(bl|bla)>$nested_tags<(/\1)>$#, "blubb /bla", "b /bla" ],
- [ 1, qr#(??{"(|)"})$nested_tags$#, "bla blubb bla", "a b a" ],
- [ 1, qr#^(??{"(bla|)"})$nested_tags$#, "bla blubb bla", "a b a" ],
- [ 1, qr#^(??{"(|)"})(??{$nested_tags})$#, "bla blubb undef", "a b undef" ],
- [ 1, qr#^(??{"(?:|)"})$nested_tags$#, "bla blubb bla", "a b a" ],
- [ 1, qr#^((??{"(?:bla|)"}))((??{$nested_tags}))$#, "bla blubb <bla><blubb></blubb></bla>", "a b <bla><blubb></blubb></bla>" ],
- [ 1, qr#^((??{"(?!)?"}))((??{$nested_tags}))$#, "bla blubb <bla><blubb></blubb></bla>", "a b <bla><blubb></blubb></bla>" ],
- [ 1, qr#^((??{"(?:|<(/?bla)>)"}))((??{$nested_tags}))\1$#, "bla blubb <bla><blubb></blubb></bla>", "a b <bla><blubb></blubb></bla>" ],
- [ 0, qr#^((??{"(?!)"}))?((??{$nested_tags}))(?!)$#, "bla blubb undef", "a b undef" ],
-
- ) { #"#silence vim highlighting
- $c++;
- @ctl_n = ();
- @plus = ();
- my $match = (("<bla><blubb></blubb></bla>" =~ $test->[1]) ? 1 : 0);
- push @ctl_n, (defined $^N ? $^N : "undef");
- push @plus, (defined $+ ? $+ : "undef");
- ok($test->[0] == $match, "match $c");
- if ($test->[0] != $match) {
- # unset @ctl_n and @plus
- @ctl_n = @plus = ();
- }
- iseq("@ctl_n", $test->[2], "ctl_n $c");
- iseq("@plus", $test->[3], "plus $c");
- }
- }
-
- {
- use re 'eval';
- local $BugId = '56194';
-
- our $f;
- local $f;
- $f = sub {
- defined $_[0] ? $_[0] : "undef";
- };
-
- ok("123" =~ m/^(\d)(((??{1 + $^N})))+$/);
-
- our @ctl_n;
- our @plus;
-
- my $re = qr#(1)((??{ push @ctl_n, $f->($^N); push @plus, $f->($+); $^N + 1}))*(?{$^N})#;
- my $re2 = qr#(1)((??{ push @ctl_n, $f->($^N); push @plus, $f->($+); $^N + 1}))*(?{$^N})(|a(b)c|def)(??{"$^R"})#;
- my $re3 = qr#(1)((??{ push @ctl_n, $f->($^N); push @plus, $f->($+); $^N + 1})){2}(?{$^N})(|a(b)c|def)(??{"$^R"})#;
- our $re5;
- local $re5 = qr#(1)((??{ push @ctl_n, $f->($^N); push @plus, $f->($+); $^N + 1})){2}(?{$^N})#;
- my $re6 = qr#(??{ push @ctl_n, $f->($^N); push @plus, $f->($+); $^N + 1})#;
- my $re7 = qr#(??{ push @ctl_n, $f->($^N); push @plus, $f->($+); $^N + 1})#;
- my $re8 = qr/(\d+)/;
- my $c = 0;
- for my $test (
- # Test structure:
- # [
- # String to match
- # Regex too match
- # Expected values of $^N
- # Expected values of $+
- # Expected values of $1, $2, $3, $4 and $5
- # ]
- [
- "1233",
- qr#^(1)((??{ push @ctl_n, $f->($^N); push @plus, $f->($+); $^N + 1}))+(??{$^N})$#,
- "1 2 3 3",
- "1 2 3 3",
- "\$1 = 1, \$2 = 3, \$3 = undef, \$4 = undef, \$5 = undef",
- ],
- [
- "1233",
- qr#^(1)((??{ push @ctl_n, $f->($^N); push @plus, $f->($+); $^N + 1}))+(abc|def|)?(??{$+})$#,
- "1 2 3 3",
- "1 2 3 3",
- "\$1 = 1, \$2 = 3, \$3 = undef, \$4 = undef, \$5 = undef",
- ],
- [
- "1233",
- qr#^(1)((??{ push @ctl_n, $f->($^N); push @plus, $f->($+); $^N + 1}))+(|abc|def)?(??{$+})$#,
- "1 2 3 3",
- "1 2 3 3",
- "\$1 = 1, \$2 = 3, \$3 = undef, \$4 = undef, \$5 = undef",
- ],
- [
- "1233",
- qr#^(1)((??{ push @ctl_n, $f->($^N); push @plus, $f->($+); $^N + 1}))+(abc|def|)?(??{$^N})$#,
- "1 2 3 3",
- "1 2 3 3",
- "\$1 = 1, \$2 = 3, \$3 = undef, \$4 = undef, \$5 = undef",
- ],
- [
- "1233",
- qr#^(1)((??{ push @ctl_n, $f->($^N); push @plus, $f->($+); $^N + 1}))+(|abc|def)?(??{$^N})$#,
- "1 2 3 3",
- "1 2 3 3",
- "\$1 = 1, \$2 = 3, \$3 = undef, \$4 = undef, \$5 = undef",
- ],
- [
- "123abc3",
- qr#^($re)(|a(b)c|def)(??{$^R})$#,
- "1 2 3 abc",
- "1 2 3 b",
- "\$1 = 123, \$2 = 1, \$3 = 3, \$4 = abc, \$5 = b",
- ],
- [
- "123abc3",
- qr#^($re2)$#,
- "1 2 3 123abc3",
- "1 2 3 b",
- "\$1 = 123abc3, \$2 = 1, \$3 = 3, \$4 = abc, \$5 = b",
- ],
- [
- "123abc3",
- qr#^($re3)$#,
- "1 2 123abc3",
- "1 2 b",
- "\$1 = 123abc3, \$2 = 1, \$3 = 3, \$4 = abc, \$5 = b",
- ],
- [
- "123abc3",
- qr#^(??{$re5})(|abc|def)(??{"$^R"})$#,
- "1 2 abc",
- "1 2 abc",
- "\$1 = abc, \$2 = undef, \$3 = undef, \$4 = undef, \$5 = undef",
- ],
- [
- "123abc3",
- qr#^(??{$re5})(|a(b)c|def)(??{"$^R"})$#,
- "1 2 abc",
- "1 2 b",
- "\$1 = abc, \$2 = b, \$3 = undef, \$4 = undef, \$5 = undef",
- ],
- [
- "1234",
- qr#^((\d+)((??{push @ctl_n, $f->($^N); push @plus, $f->($+);$^N + 1}))((??{push @ctl_n, $f->($^N); push @plus, $f->($+);$^N + 1}))((??{push @ctl_n, $f->($^N); push @plus, $f->($+);$^N + 1})))$#,
- "1234 123 12 1 2 3 1234",
- "1234 123 12 1 2 3 4",
- "\$1 = 1234, \$2 = 1, \$3 = 2, \$4 = 3, \$5 = 4",
- ],
- [
- "1234556",
- qr#^(\d+)($re6)($re6)($re6)$re6(($re6)$re6)$#,
- "1234556 123455 12345 1234 123 12 1 2 3 4 4 5 56",
- "1234556 123455 12345 1234 123 12 1 2 3 4 4 5 5",
- "\$1 = 1, \$2 = 2, \$3 = 3, \$4 = 4, \$5 = 56",
- ],
- [
- "12345562",
- qr#^((??{$re8}))($re7)($re7)($re7)$re7($re7)($re7(\2))$#,
- "12345562 1234556 123455 12345 1234 123 12 1 2 3 4 4 5 62",
- "12345562 1234556 123455 12345 1234 123 12 1 2 3 4 4 5 2",
- "\$1 = 1, \$2 = 2, \$3 = 3, \$4 = 4, \$5 = 5",
- ],
- ) {
- $c++;
- @ctl_n = ();
- @plus = ();
- undef $^R;
- my $match = $test->[0] =~ $test->[1];
- my $str = join(", ", '$1 = '.$f->($1), '$2 = '.$f->($2), '$3 = '.$f->($3), '$4 = '.$f->($4),'$5 = '.$f->($5));
- push @ctl_n, $f->($^N);
- push @plus, $f->($+);
- ok($match, "match $c");
- if (not $match) {
- # unset $str, @ctl_n and @plus
- $str = "";
- @ctl_n = @plus = ();
- }
- iseq("@ctl_n", $test->[2], "ctl_n $c");
- iseq("@plus", $test->[3], "plus $c");
- iseq($str, $test->[4], "str $c");
- }
- SKIP: {
- if ($] le '5.010') {
- skip "test segfaults on perl < 5.10", 4;
- }
-
- @ctl_n = ();
- @plus = ();
-
- our $re4;
- local $re4 = qr#(1)((??{push @ctl_n, $f->($^N); push @plus, $f->($+);$^N + 1})){2}(?{$^N})(|abc|def)(??{"$^R"})#;
- undef $^R;
- my $match = "123abc3" =~ m/^(??{$re4})$/;
- my $str = join(", ", '$1 = '.$f->($1), '$2 = '.$f->($2), '$3 = '.$f->($3), '$4 = '.$f->($4),'$5 = '.$f->($5),'$^R = '.$f->($^R));
- push @ctl_n, $f->($^N);
- push @plus, $f->($+);
- ok($match);
- if (not $match) {
- # unset $str
- @ctl_n = ();
- @plus = ();
- $str = "";
- }
- iseq("@ctl_n", "1 2 undef");
- iseq("@plus", "1 2 undef");
- iseq($str, "\$1 = undef, \$2 = undef, \$3 = undef, \$4 = undef, \$5 = undef, \$^R = undef");
- }
- }
-
- {
- local $BugId = 65372; # minimal CURLYM limited to 32767 matches
- my @pat = (
- qr{a(x|y)*b}, # CURLYM
- qr{a(x|y)*?b}, # .. with minmod
- qr{a([wx]|[yz])*b}, # .. and without tries
- qr{a([wx]|[yz])*?b},
- );
- my $len = 32768;
- my $s = join '', 'a', 'x' x $len, 'b';
- for my $pat (@pat) {
- ok($s =~ $pat, $pat);
- }
- }
- #
- # This should be the last test.
- #
- iseq $test + 1, $EXPECTED_TESTS, "Got the right number of tests!";
-
-} # End of sub run_tests
-
-1;
Deleted: trunk/contrib/perl/t/op/pat_thr.t
===================================================================
--- trunk/contrib/perl/t/op/pat_thr.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/pat_thr.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,7 +0,0 @@
-#!./perl
-
-chdir 't' if -d 't';
- at INC = ('../lib', '.');
-
-require 'thread_it.pl';
-thread_it(qw(op pat.t));
Deleted: trunk/contrib/perl/t/op/qq.t
===================================================================
--- trunk/contrib/perl/t/op/qq.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/qq.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,73 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print q(1..28
-);
-
-# This is() function is written to avoid ""
-my $test = 1;
-sub is {
- my($left, $right) = @_;
-
- if ($left eq $right) {
- printf 'ok %d
-', $test++;
- return 1;
- }
- foreach ($left, $right) {
- # Comment out these regexps to map non-printables to ord if the perl under
- # test is so broken that it's not helping
- s/([^-+A-Za-z_0-9])/sprintf q{'.chr(%d).'}, ord $1/ge;
- $_ = sprintf q('%s'), $_;
- s/^''\.//;
- s/\.''$//;
- }
- printf q(not ok %d - got %s expected %s
-), $test++, $left, $right;
-
- printf q(# Failed test at line %d
-), (caller)[2];
-
- return 0;
-}
-
-is ("\x53", chr 83);
-is ("\x4EE", chr (78) . 'E');
-is ("\x4i", chr (4) . 'i'); # This will warn
-is ("\xh", chr (0) . 'h'); # This will warn
-is ("\xx", chr (0) . 'x'); # This will warn
-is ("\xx9", chr (0) . 'x9'); # This will warn. \x9 is tab in EBCDIC too?
-is ("\x9_E", chr (9) . '_E'); # This will warn
-
-is ("\x{4E}", chr 78);
-is ("\x{6_9}", chr 105);
-is ("\x{_6_3}", chr 99);
-is ("\x{_6B}", chr 107);
-
-is ("\x{9__0}", chr 9); # multiple underscores not allowed.
-is ("\x{77_}", chr 119); # trailing underscore warns.
-is ("\x{6FQ}z", chr (111) . 'z');
-
-is ("\x{0x4E}", chr 0);
-is ("\x{x4E}", chr 0);
-
-is ("\x{0065}", chr 101);
-is ("\x{000000000000000000000000000000000000000000000000000000000000000072}",
- chr 114);
-is ("\x{0_06_5}", chr 101);
-is ("\x{1234}", chr 4660);
-is ("\x{10FFFD}", chr 1114109);
-is ("\400", chr 0x100);
-is ("\600", chr 0x180);
-is ("\777", chr 0x1FF);
-is ("a\o{120}b", "a" . chr(0x50) . "b");
-is ("a\o{400}b", "a" . chr(0x100) . "b");
-is ("a\o{1000}b", "a" . chr(0x200) . "b");
-
-# This caused a memory fault
-no warnings "utf8";
-is ("abc", eval qq[qq\x{8000_0000}abc\x{8000_0000}])
Deleted: trunk/contrib/perl/t/op/qr_gc.t
===================================================================
--- trunk/contrib/perl/t/op/qr_gc.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/qr_gc.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,35 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require './test.pl';
- undef &Regexp::DESTROY;
-}
-
-plan tests => 2;
-
-if ($] >= 5.011) { # doesn't leak on 5.10.x
- $TODO = "leaking since 32751";
-}
-
-my $destroyed;
-{
- sub Regexp::DESTROY { $destroyed++ }
-}
-
-{
- my $rx = qr//;
-}
-
-is( $destroyed, 1, "destroyed regexp" );
-
-undef $destroyed;
-
-{
- my $var = bless {}, "Foo";
- my $rx = qr/(?{ $var })/;
-}
-
-is( $destroyed, 1, "destroyed regexp with closure capture" );
-
Deleted: trunk/contrib/perl/t/op/qrstack.t
===================================================================
--- trunk/contrib/perl/t/op/qrstack.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/qrstack.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,11 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require './test.pl';
-}
-
-plan tests => 1;
-
-ok(defined [(1)x127,qr//,1]->[127], "qr// should extend the stack properly");
Deleted: trunk/contrib/perl/t/op/re.t
===================================================================
--- trunk/contrib/perl/t/op/re.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/re.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,46 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use strict;
-use warnings;
-
-use Test::More; # test count at bottom of file
-use re qw(is_regexp regexp_pattern
- regname regnames regnames_count);
-{
- my $qr=qr/foo/pi;
- ok(is_regexp($qr),'is_regexp($qr)');
- ok(!is_regexp(''),'is_regexp("")');
- is((regexp_pattern($qr))[0],'foo','regexp_pattern[0]');
- is((regexp_pattern($qr))[1],'ip','regexp_pattern[1]');
- is(regexp_pattern($qr),'(?pi-xsm:foo)','scalar regexp_pattern');
- ok(!regexp_pattern(''),'!regexp_pattern("")');
-}
-
-if ('1234'=~/(?:(?<A>\d)|(?<C>!))(?<B>\d)(?<A>\d)(?<B>\d)/){
- my @names = sort +regnames();
- is("@names","A B","regnames");
- @names = sort +regnames(0);
- is("@names","A B","regnames");
- my $names = regnames();
- is($names, "B", "regnames in scalar context");
- @names = sort +regnames(1);
- is("@names","A B C","regnames");
- is(join("", @{regname("A",1)}),"13");
- is(join("", @{regname("B",1)}),"24");
- {
- if ('foobar'=~/(?<foo>foo)(?<bar>bar)/) {
- is(regnames_count(),2);
- } else {
- ok(0); ok(0);
- }
- }
- is(regnames_count(),3);
-}
-# New tests above this line, don't forget to update the test count below!
-use Test::More tests => 14;
-# No tests here!
Deleted: trunk/contrib/perl/t/op/re_tests
===================================================================
--- trunk/contrib/perl/t/op/re_tests 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/re_tests 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1375 +0,0 @@
-# This stops me getting screenfulls of syntax errors every time I accidentally
-# run this file via a shell glob
-__END__
-abc abc y $& abc
-abc abc y $-[0] 0
-abc abc y $+[0] 3
-abc xbc n - -
-abc axc n - -
-abc abx n - -
-abc xabcy y $& abc
-abc xabcy y $-[0] 1
-abc xabcy y $+[0] 4
-abc ababc y $& abc
-abc ababc y $-[0] 2
-abc ababc y $+[0] 5
-ab*c abc y $& abc
-ab*c abc y $-[0] 0
-ab*c abc y $+[0] 3
-ab*bc abc y $& abc
-ab*bc abc y $-[0] 0
-ab*bc abc y $+[0] 3
-ab*bc abbc y $& abbc
-ab*bc abbc y $-[0] 0
-ab*bc abbc y $+[0] 4
-ab*bc abbbbc y $& abbbbc
-ab*bc abbbbc y $-[0] 0
-ab*bc abbbbc y $+[0] 6
-.{1} abbbbc y $& a
-.{1} abbbbc y $-[0] 0
-.{1} abbbbc y $+[0] 1
-.{3,4} abbbbc y $& abbb
-.{3,4} abbbbc y $-[0] 0
-.{3,4} abbbbc y $+[0] 4
-ab{0,}bc abbbbc y $& abbbbc
-ab{0,}bc abbbbc y $-[0] 0
-ab{0,}bc abbbbc y $+[0] 6
-ab+bc abbc y $& abbc
-ab+bc abbc y $-[0] 0
-ab+bc abbc y $+[0] 4
-ab+bc abc n - -
-ab+bc abq n - -
-ab{1,}bc abq n - -
-ab+bc abbbbc y $& abbbbc
-ab+bc abbbbc y $-[0] 0
-ab+bc abbbbc y $+[0] 6
-ab{1,}bc abbbbc y $& abbbbc
-ab{1,}bc abbbbc y $-[0] 0
-ab{1,}bc abbbbc y $+[0] 6
-ab{1,3}bc abbbbc y $& abbbbc
-ab{1,3}bc abbbbc y $-[0] 0
-ab{1,3}bc abbbbc y $+[0] 6
-ab{3,4}bc abbbbc y $& abbbbc
-ab{3,4}bc abbbbc y $-[0] 0
-ab{3,4}bc abbbbc y $+[0] 6
-ab{4,5}bc abbbbc n - -
-ab?bc abbc y $& abbc
-ab?bc abc y $& abc
-ab{0,1}bc abc y $& abc
-ab?bc abbbbc n - -
-ab?c abc y $& abc
-ab{0,1}c abc y $& abc
-^abc$ abc y $& abc
-^abc$ abcc n - -
-^abc abcc y $& abc
-^abc$ aabc n - -
-abc$ aabc y $& abc
-abc$ aabcd n - -
-^ abc y $&
-$ abc y $&
-a.c abc y $& abc
-a.c axc y $& axc
-a.*c axyzc y $& axyzc
-a.*c axyzd n - -
-a[bc]d abc n - -
-a[bc]d abd y $& abd
-a[b]d abd y $& abd
-[a][b][d] abd y $& abd
-.[b]. abd y $& abd
-.[b]. aBd n - -
-(?i:.[b].) abd y $& abd
-a[b-d]e abd n - -
-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\"
-a[]b - c - Unmatched [
-a[ - c - Unmatched [
-a] a] y $& a]
-a[]]b a]b y $& a]b
-a[^bc]d aed y $& aed
-a[^bc]d abd n - -
-a[^-b]c adc y $& adc
-a[^-b]c a-c n - -
-a[^]b]c a]c n - -
-a[^]b]c adc y $& adc
-\ba\b a- y - -
-\ba\b -a y - -
-\ba\b -a- y - -
-\by\b xy n - -
-\by\b yz n - -
-\by\b xyz n - -
-\Ba\B a- n - -
-\Ba\B -a n - -
-\Ba\B -a- n - -
-\By\b xy y - -
-\By\b xy y $-[0] 1
-\By\b xy y $+[0] 2
-\By\b xy y - -
-\by\B yz y - -
-\By\B xyz y - -
-\w a y - -
-\w - n - -
-\W a n - -
-\W - y - -
-a\sb a b y - -
-a\sb a-b n - -
-a\Sb a b n - -
-a\Sb a-b y - -
-\d 1 y - -
-\d - n - -
-\D 1 n - -
-\D - y - -
-[\w] a y - -
-[\w] - n - -
-[\W] a n - -
-[\W] - y - -
-a[\s]b a b y - -
-a[\s]b a-b n - -
-a[\S]b a b n - -
-a[\S]b a-b y - -
-[\d] 1 y - -
-[\d] - n - -
-[\D] 1 n - -
-[\D] - y - -
-ab|cd abc y $& ab
-ab|cd abcd y $& ab
-()ef def y $&-$1 ef-
-()ef def y $-[0] 1
-()ef def y $+[0] 3
-()ef def y $-[1] 1
-()ef def y $+[1] 1
-*a - c - Quantifier follows nothing
-(|*)b - c - Quantifier follows nothing
-(*)b - c - Unknown verb
-$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 )
-(abc - c - Unmatched (
-((a)) abc y $&-$1-$2 a-a-a
-((a)) abc y $-[0]-$-[1]-$-[2] 0-0-0
-((a)) abc y $+[0]-$+[1]-$+[2] 1-1-1
-((a)) abc b @- 0 0 0
-((a)) abc b @+ 1 1 1
-(a)b(c) abc y $&-$1-$2 abc-a-c
-(a)b(c) abc y $-[0]-$-[1]-$-[2] 0-0-2
-(a)b(c) abc y $+[0]-$+[1]-$+[2] 3-1-3
-a+b+c aabbabc y $& abc
-a{1,}b{1,}c aabbabc y $& abc
-a** - c - Nested quantifiers
-a.+?c abcabc y $& abc
-(a+|b)* ab y $&-$1 ab-b
-(a+|b)* ab y $-[0] 0
-(a+|b)* ab y $+[0] 2
-(a+|b)* ab y $-[1] 1
-(a+|b)* ab y $+[1] 2
-(a+|b){0,} ab y $&-$1 ab-b
-(a+|b)+ ab y $&-$1 ab-b
-(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 )
-[^ab]* cde y $& cde
-abc n - -
-a* y $&
-([abc])*d abbbcd y $&-$1 abbbcd-c
-([abc])*bcd abcd y $&-$1 abcd-a
-a|b|c|d|e e y $& e
-(a|b|c|d|e)f ef y $&-$1 ef-e
-(a|b|c|d|e)f ef y $-[0] 0
-(a|b|c|d|e)f ef y $+[0] 2
-(a|b|c|d|e)f ef y $-[1] 0
-(a|b|c|d|e)f ef y $+[1] 1
-abcd*efg abcdefg y $& abcdefg
-ab* xabyabbbz y $& ab
-ab* xayabbbz y $& a
-(ab|cd)e abcde y $&-$1 cde-cd
-[abhgefdc]ij hij y $& hij
-^(ab|cd)e abcde n x$1y xy
-(abc|)ef abcdef y $&-$1 ef-
-(a|b)c*d abcd y $&-$1 bcd-b
-(ab|ab*)bc abc y $&-$1 abc-a
-a([bc]*)c* abc y $&-$1 abc-bc
-a([bc]*)(c*d) abcd y $&-$1-$2 abcd-bc-d
-a([bc]*)(c*d) abcd y $-[0] 0
-a([bc]*)(c*d) abcd y $+[0] 4
-a([bc]*)(c*d) abcd y $-[1] 1
-a([bc]*)(c*d) abcd y $+[1] 3
-a([bc]*)(c*d) abcd y $-[2] 3
-a([bc]*)(c*d) abcd y $+[2] 4
-a([bc]+)(c*d) abcd y $&-$1-$2 abcd-bc-d
-a([bc]*)(c+d) abcd y $&-$1-$2 abcd-b-cd
-a([bc]*)(c+d) abcd y $-[0] 0
-a([bc]*)(c+d) abcd y $+[0] 4
-a([bc]*)(c+d) abcd y $-[1] 1
-a([bc]*)(c+d) abcd y $+[1] 2
-a([bc]*)(c+d) abcd y $-[2] 2
-a([bc]*)(c+d) abcd y $+[2] 4
-a[bcd]*dcdcde adcdcde y $& adcdcde
-a[bcd]+dcdcde adcdcde n - -
-(ab|a)b*c abc y $&-$1 abc-ab
-(ab|a)b*c abc y $-[0] 0
-(ab|a)b*c abc y $+[0] 3
-(ab|a)b*c abc y $-[1] 0
-(ab|a)b*c abc y $+[1] 2
-((a)(b)c)(d) abcd y $1-$2-$3-$4 abc-a-b-d
-((a)(b)c)(d) abcd y $-[0] 0
-((a)(b)c)(d) abcd y $+[0] 4
-((a)(b)c)(d) abcd y $-[1] 0
-((a)(b)c)(d) abcd y $+[1] 3
-((a)(b)c)(d) abcd y $-[2] 0
-((a)(b)c)(d) abcd y $+[2] 1
-((a)(b)c)(d) abcd y $-[3] 1
-((a)(b)c)(d) abcd y $+[3] 2
-((a)(b)c)(d) abcd y $-[4] 3
-((a)(b)c)(d) abcd y $+[4] 4
-[a-zA-Z_][a-zA-Z0-9_]* alpha y $& alpha
-^a(bc+|b[eh])g|.h$ abh y $&-$1 bh-
-(bc+d$|ef*g.|h?i(j|k)) effgz y $&-$1-$2 effgz-effgz-
-(bc+d$|ef*g.|h?i(j|k)) ij y $&-$1-$2 ij-ij-j
-(bc+d$|ef*g.|h?i(j|k)) effg n - -
-(bc+d$|ef*g.|h?i(j|k)) bcdd n - -
-(bc+d$|ef*g.|h?i(j|k)) reffgz y $&-$1-$2 effgz-effgz-
-((((((((((a)))))))))) a y $10 a
-((((((((((a)))))))))) a y $-[0] 0
-((((((((((a)))))))))) a y $+[0] 1
-((((((((((a)))))))))) a y $-[10] 0
-((((((((((a)))))))))) a y $+[10] 1
-((((((((((a))))))))))\10 aa y $& aa
-((((((((((a))))))))))${bang} aa n - -
-((((((((((a))))))))))${bang} a! y $& a!
-(((((((((a))))))))) a y $& a
-multiple words of text uh-uh n - -
-multiple words multiple words, yeah y $& multiple words
-(.*)c(.*) abcde y $&-$1-$2 abcde-ab-de
-\((.*), (.*)\) (a, b) y ($2, $1) (b, a)
-[k] ab n - -
-abcd abcd y $&-\$&-\\$& abcd-\$&-\\abcd
-a(bc)d abcd y $1-\$1-\\$1 bc-\$1-\\bc
-a[-]?c ac y $& ac
-(abc)\1 abcabc y $1 abc
-([a-c]*)\1 abcabc y $1 abc
-\1 - c - Reference to nonexistent group
-\2 - c - Reference to nonexistent group
-\g1 - c - Reference to nonexistent group
-\g-1 - c - Reference to nonexistent or unclosed group
-\g{1} - c - Reference to nonexistent group
-\g{-1} - c - Reference to nonexistent or unclosed group
-\g0 - c - Reference to invalid group 0
-\g-0 - c - Reference to invalid group 0
-\g{0} - c - Reference to invalid group 0
-\g{-0} - c - Reference to invalid group 0
-(a)|\1 a y - -
-(a)|\1 x n - -
-(a)|\2 - c - Reference to nonexistent group
-(([a-c])b*?\2)* ababbbcbc y $&-$1-$2 ababb-bb-b
-(([a-c])b*?\2){3} ababbbcbc y $&-$1-$2 ababbbcbc-cbc-c
-((\3|b)\2(a)x)+ aaxabxbaxbbx n - -
-((\3|b)\2(a)x)+ aaaxabaxbaaxbbax y $&-$1-$2-$3 bbax-bbax-b-a
-((\3|b)\2(a)){2,} bbaababbabaaaaabbaaaabba y $&-$1-$2-$3 bbaaaabba-bba-b-a
-#Bug #3589 - up to perl-5.6.0 matches incorrectly, from 5.6.1 not anymore
-^((.)?a\2)+$ babadad n - -
-(a)|(b) b y $-[0] 0
-(a)|(b) b y $+[0] 1
-(a)|(b) b y x$-[1] x
-(a)|(b) b y x$+[1] x
-(a)|(b) b y $-[2] 0
-(a)|(b) b y $+[2] 1
-'abc'i ABC y $& ABC
-'abc'i XBC n - -
-'abc'i AXC n - -
-'abc'i ABX n - -
-'abc'i XABCY y $& ABC
-'abc'i ABABC y $& ABC
-'ab*c'i ABC y $& ABC
-'ab*bc'i ABC y $& ABC
-'ab*bc'i ABBC y $& ABBC
-'ab*?bc'i ABBBBC y $& ABBBBC
-'ab{0,}?bc'i ABBBBC y $& ABBBBC
-'ab+?bc'i ABBC y $& ABBC
-'ab+bc'i ABC n - -
-'ab+bc'i ABQ n - -
-'ab{1,}bc'i ABQ n - -
-'ab+bc'i ABBBBC y $& ABBBBC
-'ab{1,}?bc'i ABBBBC y $& ABBBBC
-'ab{1,3}?bc'i ABBBBC y $& ABBBBC
-'ab{3,4}?bc'i ABBBBC y $& ABBBBC
-'ab{4,5}?bc'i ABBBBC n - -
-'ab??bc'i ABBC y $& ABBC
-'ab??bc'i ABC y $& ABC
-'ab{0,1}?bc'i ABC y $& ABC
-'ab??bc'i ABBBBC n - -
-'ab??c'i ABC y $& ABC
-'ab{0,1}?c'i ABC y $& ABC
-'^abc$'i ABC y $& ABC
-'^abc$'i ABCC n - -
-'^abc'i ABCC y $& ABC
-'^abc$'i AABC n - -
-'abc$'i AABC y $& ABC
-'^'i ABC y $&
-'$'i ABC y $&
-'a.c'i ABC y $& ABC
-'a.c'i AXC y $& AXC
-'a.*?c'i AXYZC y $& AXYZC
-'a.*c'i AXYZD n - -
-'a[bc]d'i ABC n - -
-'a[bc]d'i ABD y $& ABD
-'a[b-d]e'i ABD n - -
-'a[b-d]e'i ACE y $& ACE
-'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\"
-'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
-'a[^bc]d'i ABD n - -
-'a[^-b]c'i ADC y $& ADC
-'a[^-b]c'i A-C n - -
-'a[^]b]c'i A]C n - -
-'a[^]b]c'i ADC y $& ADC
-'ab|cd'i ABC y $& AB
-'ab|cd'i ABCD y $& AB
-'()ef'i DEF y $&-$1 EF-
-'*a'i - c - Quantifier follows nothing
-'(|*)b'i - c - Quantifier follows nothing
-'(*)b'i - c - Unknown verb
-'$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 )
-'(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
-'a.+?c'i ABCABC y $& ABC
-'a.*?c'i ABCABC y $& ABC
-'a.{0,5}?c'i ABCABC y $& ABC
-'(a+|b)*'i AB y $&-$1 AB-B
-'(a+|b){0,}'i AB y $&-$1 AB-B
-'(a+|b)+'i AB y $&-$1 AB-B
-'(a+|b){1,}'i AB y $&-$1 AB-B
-'(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 )
-'[^ab]*'i CDE y $& CDE
-'abc'i n - -
-'a*'i y $&
-'([abc])*d'i ABBBCD y $&-$1 ABBBCD-C
-'([abc])*bcd'i ABCD y $&-$1 ABCD-A
-'a|b|c|d|e'i E y $& E
-'(a|b|c|d|e)f'i EF y $&-$1 EF-E
-'abcd*efg'i ABCDEFG y $& ABCDEFG
-'ab*'i XABYABBBZ y $& AB
-'ab*'i XAYABBBZ y $& A
-'(ab|cd)e'i ABCDE y $&-$1 CDE-CD
-'[abhgefdc]ij'i HIJ y $& HIJ
-'^(ab|cd)e'i ABCDE n x$1y XY
-'(abc|)ef'i ABCDEF y $&-$1 EF-
-'(a|b)c*d'i ABCD y $&-$1 BCD-B
-'(ab|ab*)bc'i ABC y $&-$1 ABC-A
-'a([bc]*)c*'i ABC y $&-$1 ABC-BC
-'a([bc]*)(c*d)'i ABCD y $&-$1-$2 ABCD-BC-D
-'a([bc]+)(c*d)'i ABCD y $&-$1-$2 ABCD-BC-D
-'a([bc]*)(c+d)'i ABCD y $&-$1-$2 ABCD-B-CD
-'a[bcd]*dcdcde'i ADCDCDE y $& ADCDCDE
-'a[bcd]+dcdcde'i ADCDCDE n - -
-'(ab|a)b*c'i ABC y $&-$1 ABC-AB
-'((a)(b)c)(d)'i ABCD y $1-$2-$3-$4 ABC-A-B-D
-'[a-zA-Z_][a-zA-Z0-9_]*'i ALPHA y $& ALPHA
-'^a(bc+|b[eh])g|.h$'i ABH y $&-$1 BH-
-'(bc+d$|ef*g.|h?i(j|k))'i EFFGZ y $&-$1-$2 EFFGZ-EFFGZ-
-'(bc+d$|ef*g.|h?i(j|k))'i IJ y $&-$1-$2 IJ-IJ-J
-'(bc+d$|ef*g.|h?i(j|k))'i EFFG n - -
-'(bc+d$|ef*g.|h?i(j|k))'i BCDD n - -
-'(bc+d$|ef*g.|h?i(j|k))'i REFFGZ y $&-$1-$2 EFFGZ-EFFGZ-
-'((((((((((a))))))))))'i A y $10 A
-'((((((((((a))))))))))\10'i AA y $& AA
-'((((((((((a))))))))))${bang}'i AA n - -
-'((((((((((a))))))))))${bang}'i A! y $& A!
-'(((((((((a)))))))))'i A y $& A
-'(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))'i A y $1 A
-'(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))'i C y $1 C
-'multiple words of text'i UH-UH n - -
-'multiple words'i MULTIPLE WORDS, YEAH y $& MULTIPLE WORDS
-'(.*)c(.*)'i ABCDE y $&-$1-$2 ABCDE-AB-DE
-'\((.*), (.*)\)'i (A, B) y ($2, $1) (B, A)
-'[k]'i AB n - -
-'abcd'i ABCD y $&-\$&-\\$& ABCD-\$&-\\ABCD
-'a(bc)d'i ABCD y $1-\$1-\\$1 BC-\$1-\\BC
-'a[-]?c'i AC y $& AC
-'(abc)\1'i ABCABC y $1 ABC
-'([a-c]*)\1'i ABCABC y $1 ABC
-a(?!b). abad y $& ad
-(?=)a a y $& a
-a(?=d). abad y $& ad
-a(?=c|d). abad y $& ad
-a(?:b|c|d)(.) ace y $1 e
-a(?:b|c|d)*(.) ace y $1 e
-a(?:b|c|d)+?(.) ace y $1 e
-a(?:b|c|d)+?(.) acdbcdbe y $1 d
-a(?:b|c|d)+(.) acdbcdbe y $1 e
-a(?:b|c|d){2}(.) acdbcdbe y $1 b
-a(?:b|c|d){4,5}(.) acdbcdbe y $1 b
-a(?:b|c|d){4,5}?(.) acdbcdbe y $1 d
-((foo)|(bar))* foobar y $1-$2-$3 bar-foo-bar
-:(?: - c - Sequence (? incomplete
-a(?:b|c|d){6,7}(.) acdbcdbe y $1 e
-a(?:b|c|d){6,7}?(.) acdbcdbe y $1 e
-a(?:b|c|d){5,6}(.) acdbcdbe y $1 e
-a(?:b|c|d){5,6}?(.) acdbcdbe y $1 b
-a(?:b|c|d){5,7}(.) acdbcdbe y $1 e
-a(?:b|c|d){5,7}?(.) acdbcdbe y $1 b
-a(?:b|(c|e){1,2}?|d)+?(.) ace y $1$2 ce
-^(.+)?B AB y $1 A
-^([^a-z])|(\^)$ . y $1 .
-^[<>]& <&OUT y $& <&
-^(a\1?){4}$ aaaaaaaaaa y $1 aaaa
-^(a\1?){4}$ aaaaaaaaa n - -
-^(a\1?){4}$ aaaaaaaaaaa n - -
-^(a(?(1)\1)){4}$ aaaaaaaaaa y $1 aaaa
-^(a(?(1)\1)){4}$ aaaaaaaaa n - -
-^(a(?(1)\1)){4}$ aaaaaaaaaaa n - -
-((a{4})+) aaaaaaaaa y $1 aaaaaaaa
-(((aa){2})+) aaaaaaaaaa y $1 aaaaaaaa
-(((a{2}){2})+) aaaaaaaaaa y $1 aaaaaaaa
-(?:(f)(o)(o)|(b)(a)(r))* foobar y $1:$2:$3:$4:$5:$6 f:o:o:b:a:r
-(?<=a)b ab y $& b
-(?<=a)b cb n - -
-(?<=a)b b n - -
-(?<!c)b ab y $& b
-(?<!c)b cb n - -
-(?<!c)b b y - -
-(?<!c)b b y $& b
-(?<%)b - c - Sequence (?<%...) not recognized
-(?:..)*a aba y $& aba
-(?:..)*?a aba y $& a
-^(?:b|a(?=(.)))*\1 abc y $& ab
-^(){3,5} abc y a$1 a
-^(a+)*ax aax y $1 a
-^((a|b)+)*ax aax y $1 a
-^((a|bc)+)*ax aax y $1 a
-(a|x)*ab cab y y$1 y
-(a)*ab cab y y$1 y
-(?:(?i)a)b ab y $& ab
-((?i)a)b ab y $&:$1 ab:a
-(?:(?i)a)b Ab y $& Ab
-((?i)a)b Ab y $&:$1 Ab:A
-(?:(?i)a)b aB n - -
-((?i)a)b aB n - -
-(?i:a)b ab y $& ab
-((?i:a))b ab y $&:$1 ab:a
-(?i:a)b Ab y $& Ab
-((?i:a))b Ab y $&:$1 Ab:A
-(?i:a)b aB n - -
-((?i:a))b aB n - -
-'(?:(?-i)a)b'i ab y $& ab
-'((?-i)a)b'i ab y $&:$1 ab:a
-'(?:(?-i)a)b'i aB y $& aB
-'((?-i)a)b'i aB y $&:$1 aB:a
-'(?:(?-i)a)b'i Ab n - -
-'((?-i)a)b'i Ab n - -
-'(?:(?-i)a)b'i aB y $& aB
-'((?-i)a)b'i aB y $1 a
-'(?:(?-i)a)b'i AB n - -
-'((?-i)a)b'i AB n - -
-'(?-i:a)b'i ab y $& ab
-'((?-i:a))b'i ab y $&:$1 ab:a
-'(?-i:a)b'i aB y $& aB
-'((?-i:a))b'i aB y $&:$1 aB:a
-'(?-i:a)b'i Ab n - -
-'((?-i:a))b'i Ab n - -
-'(?-i:a)b'i aB y $& aB
-'((?-i:a))b'i aB y $1 a
-'(?-i:a)b'i AB n - -
-'((?-i:a))b'i AB n - -
-'((?-i:a.))b'i a\nB n - -
-'((?s-i:a.))b'i a\nB y $1 a\n
-'((?s-i:a.))b'i B\nB n - -
-(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b))) cabbbb y $& cabbbb
-(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb))) caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb y $& caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
-'(ab)\d\1'i Ab4ab y $1 Ab
-'(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
-a(?{{})b - c - Sequence (?{...}) not terminated or not {}-balanced
-a(?{}})b - c -
-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 {
-x(~~)*(?:(?:F)?)? x~~ y - -
-^a(?#xxx){3}c aaac y $& aaac
-'^a (?#xxx) (?#yyy) {3}c'x aaac y $& aaac
-(?<![cd])b dbcb n - -
-(?<![cd])[ab] dbaacb y $& a
-(?<!(c|d))b dbcb n - -
-(?<!(c|d))[ab] dbaacb y $& a
-(?<!cd)[ab] cdaccb y $& b
-^(?:a?b?)*$ a-- n - -
-((?s)^a(.))((?m)^b$) a\nb\nc\n y $1;$2;$3 a\n;\n;b
-((?m)^b$) a\nb\nc\n y $1 b
-(?m)^b a\nb\n y $& b
-(?m)^(b) a\nb\n y $1 b
-((?m)^b) a\nb\n y $1 b
-\n((?m)^b) a\nb\n y $1 b
-((?s).)c(?!.) a\nb\nc\n y $1 \n
-((?s).)c(?!.) a\nb\nc\n y $1:$& \n:\nc
-((?s)b.)c(?!.) a\nb\nc\n y $1 b\n
-((?s)b.)c(?!.) a\nb\nc\n y $1:$& b\n:b\nc
-^b a\nb\nc\n n - -
-()^b a\nb\nc\n n - -
-((?m)^b) a\nb\nc\n y $1 b
-(?(1)a|b) a n - -
-(?(1)b|a) a y $& a
-(x)?(?(1)a|b) a n - -
-(x)?(?(1)b|a) a y $& a
-()?(?(1)b|a) a y $& a
-()(?(1)b|a) a n - -
-()?(?(1)a|b) a y $& a
-^(\()?blah(?(1)(\)))$ (blah) y $2 )
-^(\()?blah(?(1)(\)))$ blah y ($2) ()
-^(\()?blah(?(1)(\)))$ blah) n - -
-^(\()?blah(?(1)(\)))$ (blah n - -
-^(\(+)?blah(?(1)(\)))$ (blah) y $2 )
-^(\(+)?blah(?(1)(\)))$ blah y ($2) ()
-^(\(+)?blah(?(1)(\)))$ blah) n - -
-^(\(+)?blah(?(1)(\)))$ (blah n - -
-(?(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
-(?(?{1})b|a) a n - -
-(?(?{1})a|b) a y $& a
-(?(?!a)a|b) a n - -
-(?(?!a)b|a) a y $& a
-(?(?=a)b|a) a n - -
-(?(?=a)a|b) a y $& a
-(?=(a+?))(\1ab) aaab y $2 aab
-^(?=(a+?))\1ab aaab n - -
-(\w+:)+ one: y $1 one:
-$(?<=^(a)) a y $1 a
-(?=(a+?))(\1ab) aaab y $2 aab
-^(?=(a+?))\1ab aaab n - -
-([\w:]+::)?(\w+)$ abcd: n - -
-([\w:]+::)?(\w+)$ abcd y $1-$2 -abcd
-([\w:]+::)?(\w+)$ xy:z:::abcd y $1-$2 xy:z:::-abcd
-^[^bcd]*(c+) aexycd y $1 c
-(a*)b+ caab y $1 aa
-([\w:]+::)?(\w+)$ abcd: n - -
-([\w:]+::)?(\w+)$ abcd y $1-$2 -abcd
-([\w:]+::)?(\w+)$ xy:z:::abcd y $1-$2 xy:z:::-abcd
-^[^bcd]*(c+) aexycd y $1 c
-(?{$a=2})a*aa(?{local$a=$a+1})k*c(?{$b=$a}) yaaxxaaaacd y $b 3
-(?{$a=2})(a(?{local$a=$a+1}))*aak*c(?{$b=$a}) yaaxxaaaacd y $b 4
-(>a+)ab aaab n - -
-(?>a+)b aaab y - -
-([[:]+) a:[b]: y $1 :[
-([[=]+) a=[b]= y $1 =[
-([[.]+) a.[b]. y $1 .[
-[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
-[a[:]b[:c] abc y $& abc
-([[:alpha:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd
-([[:alnum:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01Xy
-([[:ascii:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01Xy__-- ${nulnul}
-([[:cntrl:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ${nulnul}
-([[:digit:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 01
-([[:graph:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01Xy__--
-([[:lower:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 cd
-([[:print:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01Xy__--
-([[:punct:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 __--
-([[:space:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1
-([[:word:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01Xy__
-([[:upper:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 AB
-([[:xdigit:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01
-([[:^alpha:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 01
-([[:^alnum:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 __-- ${nulnul}${ffff}
-([[:^ascii:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ${ffff}
-([[:^cntrl:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01Xy__--
-([[:^digit:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd
-([[:^lower:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 AB
-([[:^print:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ${nulnul}${ffff}
-([[:^punct:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01Xy
-([[:^space:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01Xy__--
-([[:^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
-[[:^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
-(?<=x+)y - c - Variable length lookbehind not implemented
-a{37,17} - c - Can't do {n,m} with n > m
-a{37,0} - c - Can't do {n,m} with n > m
-\Z a\nb\n y $-[0] 3
-\z a\nb\n y $-[0] 4
-$ a\nb\n y $-[0] 3
-\Z b\na\n y $-[0] 3
-\z b\na\n y $-[0] 4
-$ b\na\n y $-[0] 3
-\Z b\na y $-[0] 3
-\z b\na y $-[0] 3
-$ b\na y $-[0] 3
-'\Z'm a\nb\n y $-[0] 3
-'\z'm a\nb\n y $-[0] 4
-'$'m a\nb\n y $-[0] 1
-'\Z'm b\na\n y $-[0] 3
-'\z'm b\na\n y $-[0] 4
-'$'m b\na\n y $-[0] 1
-'\Z'm b\na y $-[0] 3
-'\z'm b\na y $-[0] 3
-'$'m b\na y $-[0] 1
-a\Z a\nb\n n - -
-a\z a\nb\n n - -
-a$ a\nb\n n - -
-a\Z b\na\n y $-[0] 2
-a\z b\na\n n - -
-a$ b\na\n y $-[0] 2
-a\Z b\na y $-[0] 2
-a\z b\na y $-[0] 2
-a$ b\na y $-[0] 2
-'a\Z'm a\nb\n n - -
-'a\z'm a\nb\n n - -
-'a$'m a\nb\n y $-[0] 0
-'a\Z'm b\na\n y $-[0] 2
-'a\z'm b\na\n n - -
-'a$'m b\na\n y $-[0] 2
-'a\Z'm b\na y $-[0] 2
-'a\z'm b\na y $-[0] 2
-'a$'m b\na y $-[0] 2
-aa\Z aa\nb\n n - -
-aa\z aa\nb\n n - -
-aa$ aa\nb\n n - -
-aa\Z b\naa\n y $-[0] 2
-aa\z b\naa\n n - -
-aa$ b\naa\n y $-[0] 2
-aa\Z b\naa y $-[0] 2
-aa\z b\naa y $-[0] 2
-aa$ b\naa y $-[0] 2
-'aa\Z'm aa\nb\n n - -
-'aa\z'm aa\nb\n n - -
-'aa$'m aa\nb\n y $-[0] 0
-'aa\Z'm b\naa\n y $-[0] 2
-'aa\z'm b\naa\n n - -
-'aa$'m b\naa\n y $-[0] 2
-'aa\Z'm b\naa y $-[0] 2
-'aa\z'm b\naa y $-[0] 2
-'aa$'m b\naa y $-[0] 2
-aa\Z ac\nb\n n - -
-aa\z ac\nb\n n - -
-aa$ ac\nb\n n - -
-aa\Z b\nac\n n - -
-aa\z b\nac\n n - -
-aa$ b\nac\n n - -
-aa\Z b\nac n - -
-aa\z b\nac n - -
-aa$ b\nac n - -
-'aa\Z'm ac\nb\n n - -
-'aa\z'm ac\nb\n n - -
-'aa$'m ac\nb\n n - -
-'aa\Z'm b\nac\n n - -
-'aa\z'm b\nac\n n - -
-'aa$'m b\nac\n n - -
-'aa\Z'm b\nac n - -
-'aa\z'm b\nac n - -
-'aa$'m b\nac n - -
-aa\Z ca\nb\n n - -
-aa\z ca\nb\n n - -
-aa$ ca\nb\n n - -
-aa\Z b\nca\n n - -
-aa\z b\nca\n n - -
-aa$ b\nca\n n - -
-aa\Z b\nca n - -
-aa\z b\nca n - -
-aa$ b\nca n - -
-'aa\Z'm ca\nb\n n - -
-'aa\z'm ca\nb\n n - -
-'aa$'m ca\nb\n n - -
-'aa\Z'm b\nca\n n - -
-'aa\z'm b\nca\n n - -
-'aa$'m b\nca\n n - -
-'aa\Z'm b\nca n - -
-'aa\z'm b\nca n - -
-'aa$'m b\nca n - -
-ab\Z ab\nb\n n - -
-ab\z ab\nb\n n - -
-ab$ ab\nb\n n - -
-ab\Z b\nab\n y $-[0] 2
-ab\z b\nab\n n - -
-ab$ b\nab\n y $-[0] 2
-ab\Z b\nab y $-[0] 2
-ab\z b\nab y $-[0] 2
-ab$ b\nab y $-[0] 2
-'ab\Z'm ab\nb\n n - -
-'ab\z'm ab\nb\n n - -
-'ab$'m ab\nb\n y $-[0] 0
-'ab\Z'm b\nab\n y $-[0] 2
-'ab\z'm b\nab\n n - -
-'ab$'m b\nab\n y $-[0] 2
-'ab\Z'm b\nab y $-[0] 2
-'ab\z'm b\nab y $-[0] 2
-'ab$'m b\nab y $-[0] 2
-ab\Z ac\nb\n n - -
-ab\z ac\nb\n n - -
-ab$ ac\nb\n n - -
-ab\Z b\nac\n n - -
-ab\z b\nac\n n - -
-ab$ b\nac\n n - -
-ab\Z b\nac n - -
-ab\z b\nac n - -
-ab$ b\nac n - -
-'ab\Z'm ac\nb\n n - -
-'ab\z'm ac\nb\n n - -
-'ab$'m ac\nb\n n - -
-'ab\Z'm b\nac\n n - -
-'ab\z'm b\nac\n n - -
-'ab$'m b\nac\n n - -
-'ab\Z'm b\nac n - -
-'ab\z'm b\nac n - -
-'ab$'m b\nac n - -
-ab\Z ca\nb\n n - -
-ab\z ca\nb\n n - -
-ab$ ca\nb\n n - -
-ab\Z b\nca\n n - -
-ab\z b\nca\n n - -
-ab$ b\nca\n n - -
-ab\Z b\nca n - -
-ab\z b\nca n - -
-ab$ b\nca n - -
-'ab\Z'm ca\nb\n n - -
-'ab\z'm ca\nb\n n - -
-'ab$'m ca\nb\n n - -
-'ab\Z'm b\nca\n n - -
-'ab\z'm b\nca\n n - -
-'ab$'m b\nca\n n - -
-'ab\Z'm b\nca n - -
-'ab\z'm b\nca n - -
-'ab$'m b\nca n - -
-abb\Z abb\nb\n n - -
-abb\z abb\nb\n n - -
-abb$ abb\nb\n n - -
-abb\Z b\nabb\n y $-[0] 2
-abb\z b\nabb\n n - -
-abb$ b\nabb\n y $-[0] 2
-abb\Z b\nabb y $-[0] 2
-abb\z b\nabb y $-[0] 2
-abb$ b\nabb y $-[0] 2
-'abb\Z'm abb\nb\n n - -
-'abb\z'm abb\nb\n n - -
-'abb$'m abb\nb\n y $-[0] 0
-'abb\Z'm b\nabb\n y $-[0] 2
-'abb\z'm b\nabb\n n - -
-'abb$'m b\nabb\n y $-[0] 2
-'abb\Z'm b\nabb y $-[0] 2
-'abb\z'm b\nabb y $-[0] 2
-'abb$'m b\nabb y $-[0] 2
-abb\Z ac\nb\n n - -
-abb\z ac\nb\n n - -
-abb$ ac\nb\n n - -
-abb\Z b\nac\n n - -
-abb\z b\nac\n n - -
-abb$ b\nac\n n - -
-abb\Z b\nac n - -
-abb\z b\nac n - -
-abb$ b\nac n - -
-'abb\Z'm ac\nb\n n - -
-'abb\z'm ac\nb\n n - -
-'abb$'m ac\nb\n n - -
-'abb\Z'm b\nac\n n - -
-'abb\z'm b\nac\n n - -
-'abb$'m b\nac\n n - -
-'abb\Z'm b\nac n - -
-'abb\z'm b\nac n - -
-'abb$'m b\nac n - -
-abb\Z ca\nb\n n - -
-abb\z ca\nb\n n - -
-abb$ ca\nb\n n - -
-abb\Z b\nca\n n - -
-abb\z b\nca\n n - -
-abb$ b\nca\n n - -
-abb\Z b\nca n - -
-abb\z b\nca n - -
-abb$ b\nca n - -
-'abb\Z'm ca\nb\n n - -
-'abb\z'm ca\nb\n n - -
-'abb$'m ca\nb\n n - -
-'abb\Z'm b\nca\n n - -
-'abb\z'm b\nca\n n - -
-'abb$'m b\nca\n n - -
-'abb\Z'm b\nca n - -
-'abb\z'm b\nca n - -
-'abb$'m b\nca n - -
-(^|x)(c) ca y $2 c
-a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz x n - -
-a(?{$a=2;$b=3;($b)=$a})b yabz y $b 2
-round\(((?>[^()]+))\) _I(round(xs * sz),1) y $1 xs * sz
-'((?x:.) )' x y $1- x -
-'((?-x:.) )'x x y $1- x-
-foo.bart foo.bart y - -
-'^d[x][x][x]'m abcd\ndxxx y - -
-.X(.+)+X bbbbXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y - -
-.X(.+)+XX bbbbXcXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y - -
-.XX(.+)+X bbbbXXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y - -
-.X(.+)+X bbbbXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n - -
-.X(.+)+XX bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n - -
-.XX(.+)+X bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n - -
-.X(.+)+[X] bbbbXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y - -
-.X(.+)+[X][X] bbbbXcXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y - -
-.XX(.+)+[X] bbbbXXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y - -
-.X(.+)+[X] bbbbXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n - -
-.X(.+)+[X][X] bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n - -
-.XX(.+)+[X] bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n - -
-.[X](.+)+[X] bbbbXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y - -
-.[X](.+)+[X][X] bbbbXcXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y - -
-.[X][X](.+)+[X] bbbbXXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y - -
-.[X](.+)+[X] bbbbXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n - -
-.[X](.+)+[X][X] bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n - -
-.[X][X](.+)+[X] bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n - -
-tt+$ xxxtt y - -
-([a-\d]+) za-9z y $1 a-9
-([\d-z]+) a0-za y $1 0-z
-([\d-\s]+) a0- z y $1 0-
-([a-[:digit:]]+) za-9z y $1 a-9
-([[:digit:]-z]+) =0-z= y $1 0-z
-([[:digit:]-[:alpha:]]+) =0-z= y $1 0-z
-\GX.*X aaaXbX n - -
-(\d+\.\d+) 3.1415926 y $1 3.1415926
-(\ba.{0,10}br) have a web browser y $1 a web br
-'\.c(pp|xx|c)?$'i Changes n - -
-'\.c(pp|xx|c)?$'i IO.c y - -
-'(\.c(pp|xx|c)?$)'i IO.c y $1 .c
-^([a-z]:) C:/ n - -
-'^\S\s+aa$'m \nx aa y - -
-(^|a)b ab y - -
-^([ab]*?)(b)?(c)$ abac y -$2- --
-(\w)?(abc)\1b abcab n - -
-^(?:.,){2}c a,b,c y - -
-^(.,){2}c a,b,c y $1 b,
-^(?:[^,]*,){2}c a,b,c y - -
-^([^,]*,){2}c a,b,c y $1 b,
-^([^,]*,){3}d aaa,b,c,d y $1 c,
-^([^,]*,){3,}d aaa,b,c,d y $1 c,
-^([^,]*,){0,3}d aaa,b,c,d y $1 c,
-^([^,]{1,3},){3}d aaa,b,c,d y $1 c,
-^([^,]{1,3},){3,}d aaa,b,c,d y $1 c,
-^([^,]{1,3},){0,3}d aaa,b,c,d y $1 c,
-^([^,]{1,},){3}d aaa,b,c,d y $1 c,
-^([^,]{1,},){3,}d aaa,b,c,d y $1 c,
-^([^,]{1,},){0,3}d aaa,b,c,d y $1 c,
-^([^,]{0,3},){3}d aaa,b,c,d y $1 c,
-^([^,]{0,3},){3,}d aaa,b,c,d y $1 c,
-^([^,]{0,3},){0,3}d aaa,b,c,d y $1 c,
-(?i) y - -
-'(?!\A)x'm a\nxb\n y - -
-^(a(b)?)+$ aba y -$1-$2- -a--
-^(aa(bb)?)+$ aabbaa y -$1-$2- -aa--
-'^.{9}abc.*\n'm 123\nabcabcabcabc\n y - -
-^(a)?a$ a y -$1- --
-^(a)?(?(1)a|b)+$ a n - -
-^(a\1?)(a\1?)(a\2?)(a\3?)$ aaaaaa y $1,$2,$3,$4 a,aa,a,aa
-^(a\1?){4}$ aaaaaa y $1 aa
-^(0+)?(?:x(1))? x1 y - -
-^([0-9a-fA-F]+)(?:x([0-9a-fA-F]+)?)(?:x([0-9a-fA-F]+))? 012cxx0190 y - -
-^(b+?|a){1,2}c bbbac y $1 a
-^(b+?|a){1,2}c bbbbac y $1 a
-\((\w\. \w+)\) cd. (A. Tw) y -$1- -A. Tw-
-((?:aaaa|bbbb)cccc)? aaaacccc y - -
-((?:aaaa|bbbb)cccc)? bbbbcccc y - -
-(a)?(a)+ a y $1:$2 :a -
-(ab)?(ab)+ ab y $1:$2 :ab -
-(abc)?(abc)+ abc y $1:$2 :abc -
-'b\s^'m a\nb\n n - -
-\ba a y - -
-^(a(??{"(?!)"})|(a)(?{1}))b ab y $2 a # [ID 20010811.006]
-ab(?i)cd AbCd n - - # [ID 20010809.023]
-ab(?i)cd abCd y - -
-(A|B)*(?(1)(CD)|(CD)) CD y $2-$3 -CD
-(A|B)*(?(1)(CD)|(CD)) ABCD y $2-$3 CD-
-(A|B)*?(?(1)(CD)|(CD)) CD y $2-$3 -CD # [ID 20010803.016]
-(A|B)*?(?(1)(CD)|(CD)) ABCD y $2-$3 CD-
-'^(o)(?!.*\1)'i Oo n - -
-(.*)\d+\1 abc12bc y $1 bc
-(?m:(foo\s*$)) foo\n bar y $1 foo
-(.*)c abcd y $1 ab
-(.*)(?=c) abcd y $1 ab
-(.*)(?=c)c abcd yB $1 ab
-(.*)(?=b|c) abcd y $1 ab
-(.*)(?=b|c)c abcd y $1 ab
-(.*)(?=c|b) abcd y $1 ab
-(.*)(?=c|b)c abcd y $1 ab
-(.*)(?=[bc]) abcd y $1 ab
-(.*)(?=[bc])c abcd yB $1 ab
-(.*)(?<=b) abcd y $1 ab
-(.*)(?<=b)c abcd y $1 ab
-(.*)(?<=b|c) abcd y $1 abc
-(.*)(?<=b|c)c abcd y $1 ab
-(.*)(?<=c|b) abcd y $1 abc
-(.*)(?<=c|b)c abcd y $1 ab
-(.*)(?<=[bc]) abcd y $1 abc
-(.*)(?<=[bc])c abcd y $1 ab
-(.*?)c abcd y $1 ab
-(.*?)(?=c) abcd y $1 ab
-(.*?)(?=c)c abcd yB $1 ab
-(.*?)(?=b|c) abcd y $1 a
-(.*?)(?=b|c)c abcd y $1 ab
-(.*?)(?=c|b) abcd y $1 a
-(.*?)(?=c|b)c abcd y $1 ab
-(.*?)(?=[bc]) abcd y $1 a
-(.*?)(?=[bc])c abcd yB $1 ab
-(.*?)(?<=b) abcd y $1 ab
-(.*?)(?<=b)c abcd y $1 ab
-(.*?)(?<=b|c) abcd y $1 ab
-(.*?)(?<=b|c)c abcd y $1 ab
-(.*?)(?<=c|b) abcd y $1 ab
-(.*?)(?<=c|b)c abcd y $1 ab
-(.*?)(?<=[bc]) abcd y $1 ab
-(.*?)(?<=[bc])c abcd y $1 ab
-2(]*)?$\1 2 y $& 2
-(??{}) x y - -
-a(b)?? abc y <$1> <> # undef [perl #16773]
-(\d{1,3}\.){3,} 128.134.142.8 y <$1> <142.> # [perl #18019]
-^.{3,4}(.+)\1\z foobarbar y $1 bar # 16 tests for [perl #23171]
-^(?:f|o|b){3,4}(.+)\1\z foobarbar y $1 bar
-^.{3,4}((?:b|a|r)+)\1\z foobarbar y $1 bar
-^(?:f|o|b){3,4}((?:b|a|r)+)\1\z foobarbar y $1 bar
-^.{3,4}(.+?)\1\z foobarbar y $1 bar
-^(?:f|o|b){3,4}(.+?)\1\z foobarbar y $1 bar
-^.{3,4}((?:b|a|r)+?)\1\z foobarbar y $1 bar
-^(?:f|o|b){3,4}((?:b|a|r)+?)\1\z foobarbar y $1 bar
-^.{2,3}?(.+)\1\z foobarbar y $1 bar
-^(?:f|o|b){2,3}?(.+)\1\z foobarbar y $1 bar
-^.{2,3}?((?:b|a|r)+)\1\z foobarbar y $1 bar
-^(?:f|o|b){2,3}?((?:b|a|r)+)\1\z foobarbar y $1 bar
-^.{2,3}?(.+?)\1\z foobarbar y $1 bar
-^(?:f|o|b){2,3}?(.+?)\1\z foobarbar y $1 bar
-^.{2,3}?((?:b|a|r)+?)\1\z foobarbar y $1 bar
-^(?:f|o|b){2,3}?((?:b|a|r)+?)\1\z foobarbar y $1 bar
-.*a(?!(b|cd)*e).*f ......abef n - - # [perl #23030]
-x(?# x c - Sequence (?#... not terminated
-:x(?#: x c - Sequence (?#... not terminated
-(WORDS|WORD)S WORDS y $1 WORD
-(X.|WORDS|X.|WORD)S WORDS y $1 WORD
-(WORDS|WORLD|WORD)S WORDS y $1 WORD
-(X.|WORDS|WORD|Y.)S WORDS y $1 WORD
-(foo|fool|x.|money|parted)$ fool y $1 fool
-(x.|foo|fool|x.|money|parted|y.)$ fool y $1 fool
-(foo|fool|money|parted)$ fool y $1 fool
-(foo|fool|x.|money|parted)$ fools n - -
-(x.|foo|fool|x.|money|parted|y.)$ fools n - -
-(foo|fool|money|parted)$ fools n - -
-(a|aa|aaa||aaaa|aaaaa|aaaaaa)(b|c) aaaaaaaaaaaaaaab y $1$2 aaaaaab
-(a|aa|aaa||aaaa|aaaaa|aaaaaa)(??{$1&&""})(b|c) aaaaaaaaaaaaaaab y $1$2 aaaaaab
-(a|aa|aaa|aaaa|aaaaa|aaaaaa)(??{$1&&"foo"})(b|c) aaaaaaaaaaaaaaab n - -
-^(a*?)(?!(aa|aaaa)*$) aaaaaaaaaaaaaaaaaaaa y $1 a # [perl #34195]
-^(a*?)(?!(aa|aaaa)*$)(?=a\z) aaaaaaaa y $1 aaaaaaa
-^(.)\s+.$(?(1)) A B y $1 A # [perl #37688]
-(?:r?)*?r|(.{2,4}) abcde y $1 abcd
-(?!)+?|(.{2,4}) abcde y $1 abcd
-^(a*?)(?!(a{6}|a{5})*$) aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y $+[1] 12 # super-linear cache bug may return 18
-^((?>(?:aa)?b)?) aab y $1 aab
-^((?:aa)*)(?:X+((?:\d+|-)(?:X+(.+))?))?$ aaaaX5 y $1 aaaa
-X(A|B||C|D)Y XXXYYY y $& XY # Trie w/ NOTHING
-(?i:X([A]|[B]|y[Y]y|[D]|)Y) XXXYYYB y $& XY # Trie w/ NOTHING
-^([a]{1})*$ aa y $1 a
-a(?!b(?!c))(..) abababc y $1 bc # test nested negatives
-a(?!b(?=a))(..) abababc y $1 bc # test nested lookaheads
-a(?!b(?!c(?!d(?!e))))...(.) abxabcdxabcde y $1 e
-X(?!b+(?!(c+)*(?!(c+)*d))).*X aXbbbbbbbcccccccccccccaaaX y - -
-^(XXXXXXXXXX|YYYYYYYYYY|Z.Q*X|Z[TE]Q*P): ZEQQQQQQQQQQQQQQQQQQP: y $1 ZEQQQQQQQQQQQQQQQQQQP
-^(XXXXXXXXXX|YYYYYYYYYY|Z.Q*X|Z[TE]Q*P): ZEQQQX: y $1 ZEQQQX
-^([TUV]+|XXXXXXXXXX|YYYYYYYYYY|Z.Q*X|Z[TE]Q*P): ZEQQQQQQQQQQQQQQQQQQP: y $1 ZEQQQQQQQQQQQQQQQQQQP
-^([TUV]+|XXXXXXXXXX|YYYYYYYYYY|Z.Q*X|Z[TE]Q*P): ZEQQQX: y $1 ZEQQQX
-^([TUV]+|XXXXXXXXXX|YYYYYYYYYY|Z.Q*X|Z[TE]Q*P|[MKJ]): ZEQQQQQQQQQQQQQQQQQQP: y $1 ZEQQQQQQQQQQQQQQQQQQP
-^([TUV]+|XXXXXXXXXX|YYYYYYYYYY|Z.Q*X|Z[TE]Q*P|[MKJ]): ZEQQQX: y $1 ZEQQQX
-^(XXX|YYY|Z.Q*X|Z[TE]Q*P): ZEQQQQQQQQQQQQQQQQQQP: y $1 ZEQQQQQQQQQQQQQQQQQQP
-^(XXX|YYY|Z.Q*X|Z[TE]Q*P): ZEQQQX: y $1 ZEQQQX
-^([TUV]+|XXX|YYY|Z.Q*X|Z[TE]Q*P): ZEQQQQQQQQQQQQQQQQQQP: y $1 ZEQQQQQQQQQQQQQQQQQQP
-^([TUV]+|XXX|YYY|Z.Q*X|Z[TE]Q*P): ZEQQQX: y $1 ZEQQQX
-^([TUV]+|XXX|YYY|Z.Q*X|Z[TE]Q*P|[MKJ]): ZEQQQQQQQQQQQQQQQQQQP: y $1 ZEQQQQQQQQQQQQQQQQQQP
-^([TUV]+|XXX|YYY|Z.Q*X|Z[TE]Q*P|[MKJ]): ZEQQQX: y $1 ZEQQQX
-X(?:ABCF[cC]x*|ABCD|ABCF):(?:DIT|DID|DIM) XABCFCxxxxxxxxxx:DIM y $& XABCFCxxxxxxxxxx:DIM
-(((ABCD|ABCE|ABCF)))(A|B|C[xy]*): ABCFCxxxxxxxxxx:DIM y $& ABCFCxxxxxxxxxx:
-(?=foo) foo y pos 0
-(?=foo) XfooY y pos 1
-.*(?=foo) XfooY y pos 1
-(?<=foo) foo y pos 3
-(?<=foo) XfooY y pos 4
-.*(?<=foo) foo y pos 3
-.*(?<=foo) XfooY y pos 4
-(?<=foo)Y XfooY y pos 5
-o(?<=foo)Y ..XfooY.. y pos 7
-X(?=foo)f ..XfooY.. y pos 4
-X(?=foo) ..XfooY.. y pos 3
-X(?<=foo.)[YZ] ..XfooXY.. y pos 8
-(?=XY*foo) Xfoo y pos 0
-^(?=XY*foo) Xfoo y pos 0
-^(??{"a+"})a aa y $& aa
-^(?:(??{"a+"})|b)a aa y $& aa
-^(??{chr 0x100}).$ \x{100}\x{100} y $& \x{100}\x{100}
-^(??{q(\x{100})}). \x{100}\x{100} y $& \x{100}\x{100}
-^(??{q(.+)})\x{100} \x{100}\x{100} y $& \x{100}\x{100}
-^(??{q(.)})\x{100} \x{100}\x{100} y $& \x{100}\x{100}
-^(??{chr 0x100})\xbb \x{100}\x{bb} y $& \x{100}\x{bb}
-^(.)(??{"(.)(.)"})(.)$ abcd y $1-$2 a-d
-^(.)(??{"(bz+|.)(.)"})(.)$ abcd y $1-$2 a-d
-^(.)((??{"(.)(cz+)"})|.) abcd y $1-$2 a-b
-^a(?>(??{q(b)}))(??{q(c)})d abcd y - -
-^x(??{""})+$ x y $& x
-^(<(?:[^<>]+|(?3)|(?1))*>)()(!>!>!>)$ <<!>!>!>><>>!>!>!> y $1 <<!>!>!>><>>
-^(<(?:[^<>]+|(?1))*>)$ <<><<<><>>>> y $1 <<><<<><>>>>
-((?2)*)([fF]o+) fooFoFoo y $1-$2 fooFo-Foo
-(<(?:[^<>]+|(?R))*>) <<><<<><>>>> y $1 <<><<<><>>>>
-(?<n>foo|bar|baz) snofooewa y $1 foo
-(?<n>foo|bar|baz) snofooewa y $+{n} foo
-(?<n>foo|bar|baz)(?<m>[ew]+) snofooewa y $+{n} foo
-(?<n>foo|bar|baz)(?<m>[ew]+) snofooewa y $+{m} ew
-(?<n>foo)|(?<n>bar)|(?<n>baz) snofooewa y $+{n} foo
-(?<n>foo)(??{ $+{n} }) snofooefoofoowaa y $+{n} foo
-(?P<n>foo|bar|baz) snofooewa y $1 foo
-(?P<n>foo|bar|baz) snofooewa y $+{n} foo
-(?P<n>foo|bar|baz)(?P<m>[ew]+) snofooewa y $+{n} foo
-(?P<n>foo|bar|baz)(?P<m>[ew]+) snofooewa y $+{m} ew
-(?P<n>foo)|(?P<n>bar)|(?P<n>baz) snofooewa y $+{n} foo
-(?P<n>foo)(??{ $+{n} }) snofooefoofoowaa y $+{n} foo
-(?P<=n>foo|bar|baz) snofooewa c - Sequence (?P<=...) not recognized
-(?P<!n>foo|bar|baz) snofooewa c - Sequence (?P<!...) not recognized
-(?PX<n>foo|bar|baz) snofooewa c - Sequence (?PX<...) not recognized
-/(?'n'foo|bar|baz)/ snofooewa y $1 foo
-/(?'n'foo|bar|baz)/ snofooewa y $+{n} foo
-/(?'n'foo|bar|baz)(?'m'[ew]+)/ snofooewa y $+{n} foo
-/(?'n'foo|bar|baz)(?'m'[ew]+)/ snofooewa y $+{m} ew
-/(?'n'foo)|(?'n'bar)|(?<n>baz)/ snobazewa y $+{n} baz
-/(?'n'foo)(??{ $+{n} })/ snofooefoofoowaa y $+{n} foo
-/(?'n'foo)\k<n>/ ..foofoo.. y $1 foo
-/(?'n'foo)\k<n>/ ..foofoo.. y $+{n} foo
-/(?<n>foo)\k'n'/ ..foofoo.. y $1 foo
-/(?<n>foo)\k'n'/ ..foofoo.. y $+{n} foo
-/(?:(?<n>foo)|(?<n>bar))\k<n>/ ..barbar.. y $+{n} bar
-/^(?'main'<(?:[^<>]+|(?&crap)|(?&main))*>)(?'empty')(?'crap'!>!>!>)$/ <<!>!>!>><>>!>!>!> y $+{main} <<!>!>!>><>>
-/^(?'main'<(?:[^<>]+|(?&main))*>)$/ <<><<<><>>>> y $1 <<><<<><>>>>
-/(?'first'(?&second)*)(?'second'[fF]o+)/ fooFoFoo y $+{first}-$+{second} fooFo-Foo
-(?<A>foo)?(?(<A>)bar|nada) foobar y $+{A} foo
-(?<A>foo)?(?(<A>)bar|nada) foo-barnada y $& nada
-(?<A>foo)?(?(1)bar|nada) foo-barnada y $& nada
-(?<A>foo(?(R)bar))?(?1) foofoobar y $1 foo
-(?<A>foo(?(R)bar))?(?1) foofoobar y $& foofoobar
-(x)(?<A>foo(?(R&A)bar))?(?&A) xfoofoobar y $2 foo
-(x)(?<A>foo(?(R&A)bar))?(?&A) xfoofoobar y $& xfoofoobar
-(x)(?<A>foo(?(R2)bar))?(?&A) xfoofoobar y $2 foo
-(x)(?<A>foo(?(R2)bar))?(?&A) xfoofoobar y $& xfoofoobar
-(?1)(?(DEFINE)(blah)) blah y $& blah
-/^(?<PAL>(?<CHAR>.)((?&PAL)|.?)\k<CHAR>)$/ madamimadam y $& madamimadam
-/^(?<PAL>(?<CHAR>.)((?&PAL)|.?)\k<CHAR>)$/ madamiamadam n - -
-/(a)?((?1))(fox)/ aafox y $1-$2-$3 a-a-fox
-/(a)*((?1))(fox)/ aafox y $1-$2-$3 a-a-fox
-/(a)+((?1))(fox)/ aafox y $1-$2-$3 a-a-fox
-/(a){1,100}((?1))(fox)/ aafox y $1-$2-$3 a-a-fox
-/(a){0,100}((?1))(fox)/ aafox y $1-$2-$3 a-a-fox
-/(ab)?((?1))(fox)/ ababfox y $1-$2-$3 ab-ab-fox
-/(ab)*((?1))(fox)/ ababfox y $1-$2-$3 ab-ab-fox
-/(ab)+((?1))(fox)/ ababfox y $1-$2-$3 ab-ab-fox
-/(ab){1,100}((?1))(fox)/ ababfox y $1-$2-$3 ab-ab-fox
-/(ab){0,100}((?1))(fox)/ ababfox y $1-$2-$3 ab-ab-fox
-# possessive captures
-a++a aaaaa n - -
-a*+a aaaaa n - -
-a{1,5}+a aaaaa n - -
-a?+a ab n - -
-a++b aaaaab y $& aaaaab
-a*+b aaaaab y $& aaaaab
-a{1,5}+b aaaaab y $& aaaaab
-a?+b ab y $& ab
-fooa++a fooaaaaa n - -
-fooa*+a fooaaaaa n - -
-fooa{1,5}+a fooaaaaa n - -
-fooa?+a fooab n - -
-fooa++b fooaaaaab y $& fooaaaaab
-fooa*+b fooaaaaab y $& fooaaaaab
-fooa{1,5}+b fooaaaaab y $& fooaaaaab
-fooa?+b fooab y $& fooab
-(?:aA)++(?:aA) aAaAaAaAaA n - aAaAaAaAaA
-(aA)++(aA) aAaAaAaAaA n - aAaAaAaAaA
-(aA|bB)++(aA|bB) aAaAbBaAbB n - aAaAbBaAbB
-(?:aA|bB)++(?:aA|bB) aAbBbBbBaA n - aAbBbBbBaA
-(?:aA)*+(?:aA) aAaAaAaAaA n - aAaAaAaAaA
-(aA)*+(aA) aAaAaAaAaA n - aAaAaAaAaA
-(aA|bB)*+(aA|bB) aAaAbBaAaA n - aAaAbBaAaA
-(?:aA|bB)*+(?:aA|bB) aAaAaAbBaA n - aAaAaAbBaA
-(?:aA){1,5}+(?:aA) aAaAaAaAaA n - aAaAaAaAaA
-(aA){1,5}+(aA) aAaAaAaAaA n - aAaAaAaAaA
-(aA|bB){1,5}+(aA|bB) aAaAbBaAaA n - aAaAbBaAaA
-(?:aA|bB){1,5}+(?:aA|bB) bBbBbBbBbB n - bBbBbBbBbB
-(?:aA)?+(?:aA) aAb n - aAb
-(aA)?+(aA) aAb n - aAb
-(aA|bB)?+(aA|bB) bBb n - bBb
-(?:aA|bB)?+(?:aA|bB) aAb n - aAb
-(?:aA)++b aAaAaAaAaAb y $& aAaAaAaAaAb
-(aA)++b aAaAaAaAaAb y $& aAaAaAaAaAb
-(aA|bB)++b aAbBaAaAbBb y $& aAbBaAaAbBb
-(?:aA|bB)++b aAbBbBaAaAb y $& aAbBbBaAaAb
-(?:aA)*+b aAaAaAaAaAb y $& aAaAaAaAaAb
-(aA)*+b aAaAaAaAaAb y $& aAaAaAaAaAb
-(aA|bB)*+b bBbBbBbBbBb y $& bBbBbBbBbBb
-(?:aA|bB)*+b bBaAbBbBaAb y $& bBaAbBbBaAb
-(?:aA){1,5}+b aAaAaAaAaAb y $& aAaAaAaAaAb
-(aA){1,5}+b aAaAaAaAaAb y $& aAaAaAaAaAb
-(aA|bB){1,5}+b bBaAbBaAbBb y $& bBaAbBaAbBb
-(?:aA|bB){1,5}+b aAbBaAbBbBb y $& aAbBaAbBbBb
-(?:aA)?+b aAb y $& aAb
-(aA)?+b aAb y $& aAb
-(aA|bB)?+b bBb y $& bBb
-(?:aA|bB)?+b bBb y $& bBb
-foo(?:aA)++(?:aA) fooaAaAaAaAaA n - fooaAaAaAaAaA
-foo(aA)++(aA) fooaAaAaAaAaA n - fooaAaAaAaAaA
-foo(aA|bB)++(aA|bB) foobBbBbBaAaA n - foobBbBbBaAaA
-foo(?:aA|bB)++(?:aA|bB) fooaAaAaAaAaA n - fooaAaAaAaAaA
-foo(?:aA)*+(?:aA) fooaAaAaAaAaA n - fooaAaAaAaAaA
-foo(aA)*+(aA) fooaAaAaAaAaA n - fooaAaAaAaAaA
-foo(aA|bB)*+(aA|bB) foobBaAbBaAaA n - foobBaAbBaAaA
-foo(?:aA|bB)*+(?:aA|bB) fooaAaAbBbBaA n - fooaAaAbBbBaA
-foo(?:aA){1,5}+(?:aA) fooaAaAaAaAaA n - fooaAaAaAaAaA
-foo(aA){1,5}+(aA) fooaAaAaAaAaA n - fooaAaAaAaAaA
-foo(aA|bB){1,5}+(aA|bB) fooaAbBbBaAaA n - fooaAbBbBaAaA
-foo(?:aA|bB){1,5}+(?:aA|bB) fooaAbBbBaAbB n - fooaAbBbBaAbB
-foo(?:aA)?+(?:aA) fooaAb n - fooaAb
-foo(aA)?+(aA) fooaAb n - fooaAb
-foo(aA|bB)?+(aA|bB) foobBb n - foobBb
-foo(?:aA|bB)?+(?:aA|bB) fooaAb n - fooaAb
-foo(?:aA)++b fooaAaAaAaAaAb y $& fooaAaAaAaAaAb
-foo(aA)++b fooaAaAaAaAaAb y $& fooaAaAaAaAaAb
-foo(aA|bB)++b foobBaAbBaAbBb y $& foobBaAbBaAbBb
-foo(?:aA|bB)++b fooaAaAbBaAaAb y $& fooaAaAbBaAaAb
-foo(?:aA)*+b fooaAaAaAaAaAb y $& fooaAaAaAaAaAb
-foo(aA)*+b fooaAaAaAaAaAb y $& fooaAaAaAaAaAb
-foo(aA|bB)*+b foobBbBaAaAaAb y $& foobBbBaAaAaAb
-foo(?:aA|bB)*+b foobBaAaAbBaAb y $& foobBaAaAbBaAb
-foo(?:aA){1,5}+b fooaAaAaAaAaAb y $& fooaAaAaAaAaAb
-foo(aA){1,5}+b fooaAaAaAaAaAb y $& fooaAaAaAaAaAb
-foo(aA|bB){1,5}+b foobBaAaAaAaAb y $& foobBaAaAaAaAb
-foo(?:aA|bB){1,5}+b fooaAbBaAbBbBb y $& fooaAbBaAbBbBb
-foo(?:aA)?+b fooaAb y $& fooaAb
-foo(aA)?+b fooaAb y $& fooaAb
-foo(aA|bB)?+b foobBb y $& foobBb
-foo(?:aA|bB)?+b foobBb y $& foobBb
-
-([^()]++|\([^()]*\))+ ((abc(ade)ufh()()x y $& abc(ade)ufh()()x
-round\(([^()]++)\) _I(round(xs * sz),1) y $1 xs * sz
-
-(foo[1x]|bar[2x]|baz[3x])+y foo1bar2baz3y y $1 baz3
-(foo[1x]|bar[2x]|baz[3x])+y foo1bar2baz3y y $& foo1bar2baz3y
-(foo[1x]|bar[2x]|baz[3x])*y foo1bar2baz3y y $1 baz3
-(foo[1x]|bar[2x]|baz[3x])*y foo1bar2baz3y y $& foo1bar2baz3y
-
-([yX].|WORDS|[yX].|WORD)S WORDS y $1 WORD
-(WORDS|WORLD|WORD)S WORDS y $1 WORD
-([yX].|WORDS|WORD|[xY].)S WORDS y $1 WORD
-(foo|fool|[zx].|money|parted)$ fool y $1 fool
-([zx].|foo|fool|[zq].|money|parted|[yx].)$ fool y $1 fool
-(foo|fool|[zx].|money|parted)$ fools n - -
-([zx].|foo|fool|[qx].|money|parted|[py].)$ fools n - -
-
-([yX].|WORDS|[yX].|WORD)+S WORDS y $1 WORD
-(WORDS|WORLD|WORD)+S WORDS y $1 WORD
-([yX].|WORDS|WORD|[xY].)+S WORDS y $1 WORD
-(foo|fool|[zx].|money|parted)+$ fool y $1 fool
-([zx].|foo|fool|[zq].|money|parted|[yx].)+$ fool y $1 fool
-(foo|fool|[zx].|money|parted)+$ fools n - -
-([zx].|foo|fool|[qx].|money|parted|[py].)+$ fools n - -
-
-(x|y|z[QW])+(longish|loquatious|excessive|overblown[QW])+ xyzQzWlongishoverblownW y $1-$2 zW-overblownW
-(x|y|z[QW])*(longish|loquatious|excessive|overblown[QW])* xyzQzWlongishoverblownW y $1-$2 zW-overblownW
-(x|y|z[QW]){1,5}(longish|loquatious|excessive|overblown[QW]){1,5} xyzQzWlongishoverblownW y $1-$2 zW-overblownW
-
-(x|y|z[QW])++(longish|loquatious|excessive|overblown[QW])++ xyzQzWlongishoverblownW y $1-$2 zW-overblownW
-(x|y|z[QW])*+(longish|loquatious|excessive|overblown[QW])*+ xyzQzWlongishoverblownW y $1-$2 zW-overblownW
-(x|y|z[QW]){1,5}+(longish|loquatious|excessive|overblown[QW]){1,5}+ xyzQzWlongishoverblownW y $1-$2 zW-overblownW
-
-a*(?!) aaaab n - -
-a*(*FAIL) aaaab n - -
-a*(*F) aaaab n - -
-
-(A(A|B(*ACCEPT)|C)D)(E) AB y $1 AB
-(A(A|B(*ACCEPT)|C)D)(E) ACDE y $1$2$3 ACDCE
-
-(a)(?:(?-1)|(?+1))(b) aab y $&-$1-$2 aab-a-b
-(a)(?:(?-1)|(?+1))(b) abb y $1-$2 a-b
-(a)(?:(?-1)|(?+1))(b) acb n - -
-
-(foo)(\g-2) foofoo y $1-$2 foo-foo
-(foo)(\g-2)(foo)(\g-2) foofoofoofoo y $1-$2-$3-$4 foo-foo-foo-foo
-(([abc]+) \g-1)(([abc]+) \g{-1}) abc abccba cba y $2-$4 abc-cba
-(a)(b)(c)\g1\g2\g3 abcabc y $1$2$3 abc
-
-# \k<n> preceded by a literal
-/(?'n'foo) \k<n>/ ..foo foo.. y $1 foo
-/(?'n'foo) \k<n>/ ..foo foo.. y $+{n} foo
-/(?<n>foo) \k'n'/ ..foo foo.. y $1 foo
-/(?<n>foo) \k'n'/ ..foo foo.. y $+{n} foo
-/(?'a1'foo) \k'a1'/ ..foo foo.. y $+{a1} foo
-/(?<a1>foo) \k<a1>/ ..foo foo.. y $+{a1} foo
-/(?'_'foo) \k'_'/ ..foo foo.. y $+{_} foo
-/(?<_>foo) \k<_>/ ..foo foo.. y $+{_} foo
-/(?'_0_'foo) \k'_0_'/ ..foo foo.. y $+{_0_} foo
-/(?<_0_>foo) \k<_0_>/ ..foo foo.. y $+{_0_} foo
-/(?'0'foo) bar/ ..foo bar.. c - Sequence (?'
-/(?<0>foo) bar/ ..foo bar.. c - Sequence (?<
-/(?'12'foo) bar/ ..foo bar.. c - Sequence (?'
-/(?<12>foo) bar/ ..foo bar.. c - Sequence (?<
-/(?'1a'foo) bar/ ..foo bar.. c - Sequence (?'
-/(?<1a>foo) bar/ ..foo bar.. c - Sequence (?<
-/(?''foo) bar/ ..foo bar.. c - Sequence (?''
-/(?<>foo) bar/ ..foo bar.. c - Sequence (?<>
-/foo \k'n'/ foo foo c - Reference to nonexistent named group
-/foo \k<n>/ foo foo c - Reference to nonexistent named group
-/foo \k'a1'/ foo foo c - Reference to nonexistent named group
-/foo \k<a1>/ foo foo c - Reference to nonexistent named group
-/foo \k'_'/ foo foo c - Reference to nonexistent named group
-/foo \k<_>/ foo foo c - Reference to nonexistent named group
-/foo \k'_0_'/ foo foo c - Reference to nonexistent named group
-/foo \k<_0_>/ foo foo c - Reference to nonexistent named group
-/foo \k'0'/ foo foo c - Sequence \\k'
-/foo \k<0>/ foo foo c - Sequence \\k<
-/foo \k'12'/ foo foo c - Sequence \\k'
-/foo \k<12>/ foo foo c - Sequence \\k<
-/foo \k'1a'/ foo foo c - Sequence \\k'
-/foo \k<1a>/ foo foo c - Sequence \\k<
-/foo \k''/ foo foo c - Sequence \\k'
-/foo \k<>/ foo foo c - Sequence \\k<
-/(?<as>as) (\w+) \k<as> (\w+)/ as easy as pie y $1-$2-$3 as-easy-pie
-
-# \g{...} with a name as the argument
-/(?'n'foo) \g{n}/ ..foo foo.. y $1 foo
-/(?'n'foo) \g{n}/ ..foo foo.. y $+{n} foo
-/(?<n>foo) \g{n}/ ..foo foo.. y $1 foo
-/(?<n>foo) \g{n}/ ..foo foo.. y $+{n} foo
-/(?<as>as) (\w+) \g{as} (\w+)/ as easy as pie y $1-$2-$3 as-easy-pie
-
-# Python style named capture buffer stuff
-/(?P<n>foo)(?P=n)/ ..foofoo.. y $1 foo
-/(?P<n>foo)(?P=n)/ ..foofoo.. y $+{n} foo
-/(?:(?P<n>foo)|(?P<n>bar))(?P=n)/ ..barbar.. y $+{n} bar
-/^(?P<PAL>(?P<CHAR>.)((?P>PAL)|.?)(?P=CHAR))$/ madamimadam y $& madamimadam
-/^(?P<PAL>(?P<CHAR>.)((?P>PAL)|.?)(?P=CHAR))$/ madamiamadam n - -
-/(?P<n>foo) (?P=n)/ ..foo foo.. y $1 foo
-/(?P<n>foo) (?P=n)/ ..foo foo.. y $+{n} foo
-/(?P<as>as) (\w+) (?P=as) (\w+)/ as easy as pie y $1-$2-$3 as-easy-pie
-
-#check that non identifiers as names are treated as the appropriate lookaround
-(?<=bar>)foo bar>foo y $& foo
-(?<!bar>)foo bar>foo n - -
-(?<=bar>ABC)foo bar>ABCfoo y $& foo
-(?<!bar>ABC)foo bar>ABCfoo n - -
-(?<bar>)foo bar>ABCfoo y $& foo
-(?<bar>ABC)foo bar>ABCfoo y $& ABCfoo
-
-(?<=abcd(?<=(aaaabcd))) ..aaaabcd.. y $1 aaaabcd
-(?=xy(?<=(aaxy))) ..aaxy.. y $1 aaxy
-
-X(\w+)(?=\s)|X(\w+) Xab y [$1-$2] [-ab]
-
-#check that branch reset works ok.
-(?|(a)) a y $1-$+-$^N a-a-a
-(?|a(.)b|d(.(o).)d|i(.)(.)j)(.) d!o!da y $1-$2-$3 !o!-o-a
-(?|a(.)b|d(.(o).)d|i(.)(.)j)(.) aabc y $1-$2-$3 a--c
-(?|a(.)b|d(.(o).)d|i(.)(.)j)(.) ixyjp y $1-$2-$3 x-y-p
-(?|(?|(a)|(b))|(?|(c)|(d))) a y $1 a
-(?|(?|(a)|(b))|(?|(c)|(d))) b y $1 b
-(?|(?|(a)|(b))|(?|(c)|(d))) c y $1 c
-(?|(?|(a)|(b))|(?|(c)|(d))) d y $1 d
-(.)(?|(.)(.)x|(.)d)(.) abcde y $1-$2-$3-$4-$5- b-c--e--
-(?|(?<foo>x)) x y $+{foo} x
-(?|(?<foo>x)|(?<bar>y)) x y $+{foo} x
-(?|(?<bar>y)|(?<foo>x)) x y $+{foo} x
-(?<bar>)(?|(?<foo>x)) x y $+{foo} x
-
-#Bug #41492
-(?(DEFINE)(?<A>(?&B)+)(?<B>a))(?&A) a y $& a
-(?(DEFINE)(?<A>(?&B)+)(?<B>a))(?&A) aa y $& aa
-\x{100}?(??{""})xxx xxx y $& xxx
-
-foo(\R)bar foo\r\nbar y $1 \r\n
-foo(\R)bar foo\nbar y $1 \n
-foo(\R)bar foo\rbar y $1 \r
-
-foo(\R+)bar foo\r\n\x{85}\r\n\nbar y $1 \r\n\x{85}\r\n\n
-(\V+)(\R) foo\r\n\x{85}\r\n\nbar y $1-$2 foo-\r\n
-(\R+)(\V) foo\r\n\x{85}\r\n\nbar y $1-$2 \r\n\x{85}\r\n\n-b
-foo(\R)bar foo\x{85}bar y $1 \x{85}
-(\V)(\R) foo\x{85}bar y $1-$2 o-\x{85}
-(\R)(\V) foo\x{85}bar y $1-$2 \x{85}-b
-foo(\R)bar foo\r\nbar y $1 \r\n
-(\V)(\R) foo\r\nbar y $1-$2 o-\r\n
-(\R)(\V) foo\r\nbar y $1-$2 \r\n-b
-foo(\R)bar foo\r\nbar y $1 \r\n
-(\V)(\R) foo\r\nbar y $1-$2 o-\r\n
-(\R)(\V) foo\r\nbar y $1-$2 \r\n-b
-foo(\R)bar foo\rbar y $1 \r
-(\V)(\R) foo\rbar y $1-$2 o-\r
-(\R)(\V) foo\rbar y $1-$2 \r-b
-
-foo(\v+)bar foo\r\n\x{85}\r\n\nbar y $1 \r\n\x{85}\r\n\n
-(\V+)(\v) foo\r\n\x{85}\r\n\nbar y $1-$2 foo-\r
-(\v+)(\V) foo\r\n\x{85}\r\n\nbar y $1-$2 \r\n\x{85}\r\n\n-b
-foo(\v)bar foo\x{85}bar y $1 \x{85}
-(\V)(\v) foo\x{85}bar y $1-$2 o-\x{85}
-(\v)(\V) foo\x{85}bar y $1-$2 \x{85}-b
-foo(\v)bar foo\rbar y $1 \r
-(\V)(\v) foo\rbar y $1-$2 o-\r
-(\v)(\V) foo\rbar y $1-$2 \r-b
-
-
-foo(\h+)bar foo\t\x{A0}bar y $1 \t\x{A0}
-(\H+)(\h) foo\t\x{A0}bar y $1-$2 foo-\t
-(\h+)(\H) foo\t\x{A0}bar y $1-$2 \t\x{A0}-b
-foo(\h)bar foo\x{A0}bar y $1 \x{A0}
-(\H)(\h) foo\x{A0}bar y $1-$2 o-\x{A0}
-(\h)(\H) foo\x{A0}bar y $1-$2 \x{A0}-b
-foo(\h)bar foo\tbar y $1 \t
-(\H)(\h) foo\tbar y $1-$2 o-\t
-(\h)(\H) foo\tbar y $1-$2 \t-b
-
-.*\z foo\n y - -
-^(?:(\d)x)?\d$ 1 y ${\(defined($1)?1:0)} 0
-.*?(?:(\w)|(\w))x abx y $1-$2 b-
-
-0{50} 000000000000000000000000000000000000000000000000000 y - -
-^a?(?=b)b ab y $& ab # Bug #56690
-^a*(?=b)b ab y $& ab # Bug #56690
-/>\d+$ \n/ix >10\n y $& >10
-/>\d+$ \n/ix >1\n y $& >1
-/\d+$ \n/ix >10\n y $& 10
-/>\d\d$ \n/ix >10\n y $& >10
-/>\d+$ \n/x >10\n y $& >10
-
-# Two regressions in 5.8.x (only) introduced by change 30638
-# Simplification of the test failure in XML::LibXML::Simple:
-/^\s*i.*?o\s*$/s io\n io y - -
-# As reported in #59168 by Father Chrysostomos:
-/(.*?)a(?!(a+)b\2c)/ baaabaac y $&-$1 baa-ba
-# [perl #60344] Regex lookbehind failure after an (if)then|else in perl 5.10
-/\A(?(?=db2)db2|\D+)(?<!processed)\.csv\z/xms sql_processed.csv n - -
-/\N{U+0100}/ \x{100} y $& \x{100} # Bug #59328
-[\s][\S] \x{a0}\x{a0} nT - - # TODO Unicode complements should not match same character
-
-# was generating malformed utf8
-'[\x{100}\xff]'i \x{ff} y $& \x{ff}
-
-((??{ "(?:|)" }))\s C\x20 y - -
Deleted: trunk/contrib/perl/t/op/reg_email.t
===================================================================
--- trunk/contrib/perl/t/op/reg_email.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/reg_email.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,103 +0,0 @@
-#!./perl
-#
-# Tests to make sure the regexp engine doesn't run into limits too soon.
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..13\n";
-
-my $email = qr {
- (?(DEFINE)
- (?<address> (?&mailbox) | (?&group))
- (?<mailbox> (?&name_addr) | (?&addr_spec))
- (?<name_addr> (?&display_name)? (?&angle_addr))
- (?<angle_addr> (?&CFWS)? < (?&addr_spec) > (?&CFWS)?)
- (?<group> (?&display_name) : (?:(?&mailbox_list) | (?&CFWS))? ;
- (?&CFWS)?)
- (?<display_name> (?&phrase))
- (?<mailbox_list> (?&mailbox) (?: , (?&mailbox))*)
-
- (?<addr_spec> (?&local_part) \@ (?&domain))
- (?<local_part> (?&dot_atom) | (?"ed_string))
- (?<domain> (?&dot_atom) | (?&domain_literal))
- (?<domain_literal> (?&CFWS)? \[ (?: (?&FWS)? (?&dcontent))* (?&FWS)?
- \] (?&CFWS)?)
- (?<dcontent> (?&dtext) | (?"ed_pair))
- (?<dtext> (?&NO_WS_CTL) | [\x21-\x5a\x5e-\x7e])
-
- (?<atext> (?&ALPHA) | (?&DIGIT) | [!#\$%&'*+-/=?^_`{|}~])
- (?<atom> (?&CFWS)? (?&atext)+ (?&CFWS)?)
- (?<dot_atom> (?&CFWS)? (?&dot_atom_text) (?&CFWS)?)
- (?<dot_atom_text> (?&atext)+ (?: \. (?&atext)+)*)
-
- (?<text> [\x01-\x09\x0b\x0c\x0e-\x7f])
- (?<quoted_pair> \\ (?&text))
-
- (?<qtext> (?&NO_WS_CTL) | [\x21\x23-\x5b\x5d-\x7e])
- (?<qcontent> (?&qtext) | (?"ed_pair))
- (?<quoted_string> (?&CFWS)? (?&DQUOTE) (?:(?&FWS)? (?&qcontent))*
- (?&FWS)? (?&DQUOTE) (?&CFWS)?)
-
- (?<word> (?&atom) | (?"ed_string))
- (?<phrase> (?&word)+)
-
- # Folding white space
- (?<FWS> (?: (?&WSP)* (?&CRLF))? (?&WSP)+)
- (?<ctext> (?&NO_WS_CTL) | [\x21-\x27\x2a-\x5b\x5d-\x7e])
- (?<ccontent> (?&ctext) | (?"ed_pair) | (?&comment))
- (?<comment> \( (?: (?&FWS)? (?&ccontent))* (?&FWS)? \) )
- (?<CFWS> (?: (?&FWS)? (?&comment))*
- (?: (?:(?&FWS)? (?&comment)) | (?&FWS)))
-
- # No whitespace control
- (?<NO_WS_CTL> [\x01-\x08\x0b\x0c\x0e-\x1f\x7f])
-
- (?<ALPHA> [A-Za-z])
- (?<DIGIT> [0-9])
- (?<CRLF> \x0d \x0a)
- (?<DQUOTE> ")
- (?<WSP> [\x20\x09])
- )
-
- (?&address)
-}x;
-
-
-run_tests() unless caller;
-
-sub run_tests {
- my $count = 0;
-
- $| = 1;
- # rewinding DATA is necessary with PERLIO=stdio when this
- # test is run from another thread
- seek *DATA, 0, 0;
- while (<DATA>) { last if /^__DATA__/ }
- while (<DATA>) {
- chomp;
- next if /^#/;
- print /^$email$/ ? "ok " : "not ok ", ++ $count, "\n";
- }
-}
-
-#
-# Acme::MetaSyntactic ++
-#
-__DATA__
-Jeff_Tracy at thunderbirds.org
-"Lady Penelope"@thunderbirds.org
-"The\ Hood"@thunderbirds.org
-fred @ flintstones.net
-barney (rubble) @ flintstones.org
-bammbamm (bam! bam! (bam! bam! (bam!)) bam!) @ flintstones.org
-Michelangelo@[127.0.0.1]
-Donatello @ [127.0.0.1]
-Raphael (He as well) @ [127.0.0.1]
-"Leonardo" @ [127.0.0.1]
-Barbapapa <barbapapa @ barbapapa.net>
-"Barba Mama" <barbamama @ [127.0.0.1]>
-Barbalala (lalalalalalalala) <barbalala (Yes, her!) @ (barba) barbapapa.net>
Deleted: trunk/contrib/perl/t/op/reg_email_thr.t
===================================================================
--- trunk/contrib/perl/t/op/reg_email_thr.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/reg_email_thr.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,7 +0,0 @@
-#!./perl
-
-chdir 't' if -d 't';
- at INC = ('../lib', '.');
-
-require 'thread_it.pl';
-thread_it(qw(op reg_email.t));
Deleted: trunk/contrib/perl/t/op/reg_fold.t
===================================================================
--- trunk/contrib/perl/t/op/reg_fold.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/reg_fold.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,42 +0,0 @@
-#!perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use strict;
-use warnings;
-use Test::More;
-my $count=1;
-my @tests;
-
-my $file="../lib/unicore/CaseFolding.txt";
-open my $fh,"<",$file or die "Failed to read '$file': $!";
-while (<$fh>) {
- chomp;
- my ($line,$comment)= split/\s+#\s+/, $_;
- my ($cp,$type, at fc)=split/[\s;]+/,$line||'';
- next unless $type and ($type eq 'F' or $type eq 'C');
- $_="\\x{$_}" for @fc;
- my $cpv=hex("0x$cp");
- my $chr="chr(0x$cp)";
- my @str;
- push @str,$chr if $cpv<128 or $cpv>256;
- if ($cpv<256) {
- push @str,"do{my \$c=$chr; utf8::upgrade(\$c); \$c}"
- }
-
- foreach my $str ( @str ) {
- my $expr="$str=~/@fc/ix";
- my $t=($cpv > 256 || $str=~/^do/) ? "unicode" : "latin";
- push @tests,
- qq[ok($expr,'$chr=~/@fc/ix - $comment ($t string)')];
- $tests[-1]="TODO: { local \$TODO='[13:41] <BinGOs> cue *It is all Greek to me* joke.';\n$tests[-1] }"
- if $cp eq '0390' or $cp eq '03B0';
- $count++;
- }
-}
-eval join ";\n","plan tests=>".($count-1), at tests,"1"
- or die $@;
-__DATA__
Deleted: trunk/contrib/perl/t/op/reg_mesg.t
===================================================================
--- trunk/contrib/perl/t/op/reg_mesg.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/reg_mesg.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,194 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-my $debug = 1;
-
-##
-## If the markers used are changed (search for "MARKER1" in regcomp.c),
-## update only these two variables, and leave the {#} in the @death/@warning
-## arrays below. The {#} is a meta-marker -- it marks where the marker should
-## go.
-
-my $marker1 = "<-- HERE";
-my $marker2 = " <-- HERE ";
-
-##
-## Key-value pairs of code/error of code that should have fatal errors.
-##
-
-eval 'use Config'; # assume defaults if fail
-our %Config;
-my $inf_m1 = ($Config{reg_infty} || 32767) - 1;
-my $inf_p1 = $inf_m1 + 2;
-my @death =
-(
- '/[[=foo=]]/' => 'POSIX syntax [= =] is reserved for future extensions in regex; marked by {#} in m/[[=foo=]{#}]/',
-
- '/(?<= .*)/' => 'Variable length lookbehind not implemented in regex m/(?<= .*)/',
-
- '/(?<= x{1000})/' => 'Lookbehind longer than 255 not implemented in regex m/(?<= x{1000})/',
-
- '/(?@)/' => 'Sequence (?@...) not implemented in regex; marked by {#} in m/(?@{#})/',
-
- '/(?{ 1/' => 'Sequence (?{...}) not terminated or not {}-balanced in regex; marked by {#} in m/(?{{#} 1/',
-
- '/(?(1x))/' => 'Switch condition not recognized in regex; marked by {#} in m/(?(1x{#}))/',
-
- '/(?(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) in regex; marked by {#} in m/(?({#}x)y|x)/',
-
- '/(?/' => 'Sequence (? incomplete in regex; marked by {#} in m/(?{#}/',
-
- '/(?;x/' => 'Sequence (?;...) not recognized in regex; marked by {#} in m/(?;{#}x/',
- '/(?<;x/' => 'Sequence (?<;...) not recognized in regex; marked by {#} in m/(?<;{#}x/',
-
- '/(?\ix/' => 'Sequence (?\...) not recognized in regex; marked by {#} in m/(?\{#}ix/',
- '/(?\mx/' => 'Sequence (?\...) not recognized in regex; marked by {#} in m/(?\{#}mx/',
- '/(?\:x/' => 'Sequence (?\...) not recognized in regex; marked by {#} in 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/' => 'Sequence (?\...) not recognized in regex; marked by {#} in 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 ( in regex; marked by {#} in m/({#}(x)/',
-
- "/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 in regex; marked by {#} in m/x{3,1}{#}/',
-
- '/x**/' => 'Nested quantifiers in regex; marked by {#} in m/x**{#}/',
-
- '/x[/' => 'Unmatched [ in regex; marked by {#} in m/x[{#}/',
-
- '/*/', => 'Quantifier follows nothing in regex; marked by {#} in m/*{#}/',
-
- '/\p{x/' => 'Missing right brace on \p{} in regex; marked by {#} in m/\p{{#}x/',
-
- '/[\p{x]/' => 'Missing right brace on \p{} in regex; marked by {#} in m/[\p{{#}x]/',
-
- '/(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{} in regex; marked by {#} in m/\x{{#}1/',
-
- '/[\x{X]/' => 'Missing right brace on \x{} in regex; marked by {#} in m/[\x{{#}X]/',
-
- '/[[:barf:]]/' => 'POSIX class [:barf:] unknown in regex; marked by {#} in 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 in regex; marked by {#} in m/[[.barf.]{#}]/',
-
- '/[z-a]/' => 'Invalid [] range "z-a" in regex; marked by {#} in m/[z-a{#}]/',
-
- '/\p/' => 'Empty \p{} in regex; marked by {#} in m/\p{#}/',
-
- '/\P{}/' => 'Empty \P{} in regex; marked by {#} in m/\P{{#}}/',
-);
-
-##
-## Key-value pairs of code/error of code that should have non-fatal warnings.
-##
- at warning = (
- 'm/\b*/' => '\b* matches null string many times in regex; marked by {#} in m/\b*{#}/',
-
- '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 in regex; marked by {#} in 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/[a-\pM]/' => 'False [] range "a-\pM" in regex; marked by {#} in m/[a-\pM{#}]/',
- 'm/[\pM-x]/' => 'False [] range "\pM-" in regex; marked by {#} in m/[\pM-{#}x]/',
- "m'\\y'" => 'Unrecognized escape \y passed through in regex; marked by {#} in m/\y{#}/',
-);
-
-my $total = (@death + @warning)/2;
-
-# utf8 is a noop on EBCDIC platforms, it is not fatal
-my $Is_EBCDIC = (ord('A') == 193);
-if ($Is_EBCDIC) {
- my @utf8_death = grep(/utf8/, @death);
- $total = $total - @utf8_death;
-}
-
-print "1..$total\n";
-
-my $count = 0;
-
-while (@death)
-{
- my $regex = shift @death;
- my $result = shift @death;
- # skip the utf8 test on EBCDIC since they do not die
- next if ($Is_EBCDIC && $regex =~ /utf8/);
- $count++;
-
- $_ = "x";
- eval $regex;
- if (not $@) {
- print "# oops, $regex didn't die\nnot ok $count\n";
- next;
- }
- chomp $@;
- $result =~ s/{\#}/$marker1/;
- $result =~ s/{\#}/$marker2/;
- $result .= " at ";
- if ($@ !~ /^\Q$result/) {
- print "# For $regex, expected:\n# $result\n# Got:\n# $@\n#\nnot ";
- }
- print "ok $count - $regex\n";
-}
-
-
-our $warning;
-$SIG{__WARN__} = sub { $warning = shift };
-
-while (@warning)
-{
- $count++;
- my $regex = shift @warning;
- my $result = shift @warning;
-
- undef $warning;
- $_ = "x";
- eval $regex;
-
- if ($@)
- {
- print "# oops, $regex died with:\n#\t$@#\nnot ok $count\n";
- next;
- }
-
- if (not $warning)
- {
- print "# oops, $regex didn't generate a warning\nnot ok $count\n";
- next;
- }
- $result =~ s/{\#}/$marker1/;
- $result =~ s/{\#}/$marker2/;
- $result .= " at ";
- if ($warning !~ /^\Q$result/)
- {
- print <<"EOM";
-# For $regex, expected:
-# $result
-# Got:
-# $warning
-#
-not ok $count
-EOM
- next;
- }
- print "ok $count - $regex\n";
-}
-
-
-
Deleted: trunk/contrib/perl/t/op/reg_namedcapture.t
===================================================================
--- trunk/contrib/perl/t/op/reg_namedcapture.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/reg_namedcapture.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,26 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- unless ( -r "$INC[0]/Errno.pm") {
- print "1..0 # Skip: Errno.pm not yet available\n";
- exit 0;
- }
-}
-
-# WARNING: Do not directly use any modules as part of this test code.
-# We could get action at a distance that would invalidate the tests.
-
-print "1..2\n";
-
-# This tests whether glob assignment fails to load the tie.
-*X = *-;
-'X'=~/(?<X>X)/;
-print eval '*X{HASH}{X} || 1' ? "" :"not ","ok ",++$test,"\n";
-
-# And since it's a similar case we check %! as well. Note that
-# this can't be done until ../lib/Errno.pm is in place, as the
-# glob hits $!, which needs that module.
-*Y = *!;
-print 0<keys(%Y) ? "" :"not ","ok ",++$test,"\n";
Deleted: trunk/contrib/perl/t/op/reg_nc_tie.t
===================================================================
--- trunk/contrib/perl/t/op/reg_nc_tie.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/reg_nc_tie.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,53 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require './test.pl';
-}
-
-# Do a basic test on all the tied methods of Tie::Hash::NamedCapture
-
-print "1..13\n";
-
-# PL_curpm->paren_names can be a null pointer. See that this succeeds anyway.
-'x' =~ /(.)/;
-() = %+;
-pass( 'still alive' );
-
-"hlagh" =~ /
- (?<a>.)
- (?<b>.)
- (?<a>.)
- .*
- (?<e>$)
-/x;
-
-# FETCH
-is($+{a}, "h", "FETCH");
-is($+{b}, "l", "FETCH");
-is($-{a}[0], "h", "FETCH");
-is($-{a}[1], "a", "FETCH");
-
-# STORE
-eval { $+{a} = "yon" };
-ok(index($@, "read-only") != -1, "STORE");
-
-# DELETE
-eval { delete $+{a} };
-ok(index($@, "read-only") != -1, "DELETE");
-
-# CLEAR
-eval { %+ = () };
-ok(index($@, "read-only") != -1, "CLEAR");
-
-# EXISTS
-ok(exists $+{e}, "EXISTS");
-ok(!exists $+{d}, "EXISTS");
-
-# FIRSTKEY/NEXTKEY
-is(join('|', sort keys %+), "a|b|e", "FIRSTKEY/NEXTKEY");
-
-# SCALAR
-is(scalar(%+), 3, "SCALAR");
-is(scalar(%-), 3, "SCALAR");
Deleted: trunk/contrib/perl/t/op/reg_pmod.t
===================================================================
--- trunk/contrib/perl/t/op/reg_pmod.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/reg_pmod.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,49 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require './test.pl';
-}
-
-use strict;
-use warnings;
-
-our @tests = (
- # /p Pattern PRE MATCH POST
- [ '/p', "456", "123-", "456", "-789"],
- [ '(?p)', "456", "123-", "456", "-789"],
- [ '', "(456)", "123-", "456", "-789"],
- [ '', "456", undef, undef, undef ],
-);
-
-plan tests => 4 * @tests + 2;
-my $W = "";
-
-$SIG{__WARN__} = sub { $W.=join("", at _); };
-sub _u($$) { "$_[0] is ".(defined $_[1] ? "'$_[1]'" : "undef") }
-
-$_ = '123-456-789';
-foreach my $test (@tests) {
- my ($p, $pat,$l,$m,$r) = @$test;
- my $test_name = $p eq '/p' ? "/$pat/p"
- : $p eq '(?p)' ? "/(?p)$pat/"
- : "/$pat/";
-
- #
- # Cannot use if/else due to the scope invalidating ${^MATCH} and friends.
- #
- my $ok = ok $p eq '/p' ? /$pat/p
- : $p eq '(?p)' ? /(?p)$pat/
- : /$pat/
- => $test_name;
- SKIP: {
- skip "/$pat/$p failed to match", 3
- unless $ok;
- is(${^PREMATCH}, $l,_u "$test_name: ^PREMATCH",$l);
- is(${^MATCH}, $m,_u "$test_name: ^MATCH",$m );
- is(${^POSTMATCH}, $r,_u "$test_name: ^POSTMATCH",$r );
- }
-}
-is($W,"","No warnings should be produced");
-ok(!defined ${^MATCH}, "No /p in scope so ^MATCH is undef");
Deleted: trunk/contrib/perl/t/op/reg_posixcc.t
===================================================================
--- trunk/contrib/perl/t/op/reg_posixcc.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/reg_posixcc.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,158 +0,0 @@
-#!perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use strict;
-use warnings;
-use Test::More 'no_plan'; # otherwise it would 38401 tests, which is, uh, a lot. :-)
-my @pats=(
- "\\w",
- "\\W",
- "\\s",
- "\\S",
- "\\d",
- "\\D",
- "[:alnum:]",
- "[:^alnum:]",
- "[:alpha:]",
- "[:^alpha:]",
- "[:ascii:]",
- "[:^ascii:]",
- "[:cntrl:]",
- "[:^cntrl:]",
- "[:graph:]",
- "[:^graph:]",
- "[:lower:]",
- "[:^lower:]",
- "[:print:]",
- "[:^print:]",
- "[:punct:]",
- "[:^punct:]",
- "[:upper:]",
- "[:^upper:]",
- "[:xdigit:]",
- "[:^xdigit:]",
- "[:space:]",
- "[:^space:]",
- "[:blank:]",
- "[:^blank:]" );
-if (not $ENV{REAL_POSIX_CC}) {
- $TODO = "Only works under PERL_LEGACY_UNICODE_CHARCLASS_MAPPINGS = 0";
-}
-
-sub rangify {
- my $ary= shift;
- my $fmt= shift || '%d';
- my $sep= shift || ' ';
- my $rng= shift || '..';
-
-
- my $first= $ary->[0];
- my $last= $ary->[0];
- my $ret= sprintf $fmt, $first;
- for my $idx (1..$#$ary) {
- if ( $ary->[$idx] != $last + 1) {
- if ($last!=$first) {
- $ret.=sprintf "%s$fmt",$rng, $last;
- }
- $first= $last= $ary->[$idx];
- $ret.=sprintf "%s$fmt",$sep,$first;
- } else {
- $last= $ary->[$idx];
- }
- }
- if ( $last != $first) {
- $ret.=sprintf "%s$fmt",$rng, $last;
- }
- return $ret;
-}
-
-my $description = "";
-while (@pats) {
- my ($yes,$no)= splice @pats,0,2;
-
- my %err_by_type;
- my %singles;
- my %complements;
- foreach my $b (0..255) {
- my %got;
- for my $type ('unicode','not-unicode') {
- my $str=chr($b).chr($b);
- if ($type eq 'unicode') {
- $str.=chr(256);
- chop $str;
- }
- if ($str=~/[$yes][$no]/){
- TODO: {
- unlike($str,qr/[$yes][$no]/,
- "chr($b)=~/[$yes][$no]/ should not match under $type");
- }
- push @{$err_by_type{$type}},$b;
- }
- $got{"[$yes]"}{$type} = $str=~/[$yes]/ ? 1 : 0;
- $got{"[$no]"}{$type} = $str=~/[$no]/ ? 1 : 0;
- $got{"[^$yes]"}{$type} = $str=~/[^$yes]/ ? 1 : 0;
- $got{"[^$no]"}{$type} = $str=~/[^$no]/ ? 1 : 0;
- }
- foreach my $which ("[$yes]","[$no]","[^$yes]","[^$no]") {
- if ($got{$which}{'unicode'} != $got{$which}{'not-unicode'}){
- TODO: {
- is($got{$which}{'unicode'},$got{$which}{'not-unicode'},
- "chr($b)=~/$which/ should have the same results regardless of internal string encoding");
- }
- push @{$singles{$which}},$b;
- }
- }
- foreach my $which ($yes,$no) {
- foreach my $strtype ('unicode','not-unicode') {
- if ($got{"[$which]"}{$strtype} == $got{"[^$which]"}{$strtype}) {
- TODO: {
- isnt($got{"[$which]"}{$strtype},$got{"[^$which]"}{$strtype},
- "chr($b)=~/[$which]/ should not have the same result as chr($b)=~/[^$which]/");
- }
- push @{$complements{$which}{$strtype}},$b;
- }
- }
- }
- }
-
-
- if (%err_by_type || %singles || %complements) {
- $description||=" Error:\n";
- $description .= "/[$yes][$no]/\n";
- if (%err_by_type) {
- foreach my $type (sort keys %err_by_type) {
- $description .= "\tmatches $type codepoints:\t";
- $description .= rangify($err_by_type{$type});
- $description .= "\n";
- }
- $description .= "\n";
- }
- if (%singles) {
- $description .= "Unicode/Nonunicode mismatches:\n";
- foreach my $type (sort keys %singles) {
- $description .= "\t$type:\t";
- $description .= rangify($singles{$type});
- $description .= "\n";
- }
- $description .= "\n";
- }
- if (%complements) {
- foreach my $class (sort keys %complements) {
- foreach my $strtype (sort keys %{$complements{$class}}) {
- $description .= "\t$class has complement failures under $strtype for:\t";
- $description .= rangify($complements{$class}{$strtype});
- $description .= "\n";
- }
- }
- }
- }
-}
-TODO: {
- is( $description, "", "POSIX and perl charclasses should not depend on string type");
-}
-
-__DATA__
Deleted: trunk/contrib/perl/t/op/reg_unsafe.t
===================================================================
--- trunk/contrib/perl/t/op/reg_unsafe.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/reg_unsafe.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,19 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-
-}
-print "1..1\n";
-
-# there is an equivelent test in t/op/pat.t which does NOT fail
-# its not clear why it doesnt fail, so this todo gets its own test
-# file until we can work it out.
-
-my $x;
-($x='abc')=~/(abc)/g;
-$x='123';
-
-print "not " if $1 ne 'abc';
-print "ok 1 # TODO safe match vars make /g slow\n";
Deleted: trunk/contrib/perl/t/op/regexp.t
===================================================================
--- trunk/contrib/perl/t/op/regexp.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/regexp.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,207 +0,0 @@
-#!./perl
-
-# The tests are in a separate file 't/op/re_tests'.
-# Each line in that file is a separate test.
-# There are five columns, separated by tabs.
-#
-# Column 1 contains the pattern, optionally enclosed in C<''>.
-# Modifiers can be put after the closing C<'>.
-#
-# Column 2 contains the string to be matched.
-#
-# Column 3 contains the expected result:
-# y expect a match
-# n expect no match
-# c expect an error
-# T the test is a TODO (can be combined with y/n/c)
-# B test exposes a known bug in Perl, should be skipped
-# b test exposes a known bug in Perl, should be skipped if noamp
-# t test exposes a bug with threading, TODO if qr_embed_thr
-#
-# Columns 4 and 5 are used only if column 3 contains C<y> or C<c>.
-#
-# Column 4 contains a string, usually C<$&>.
-#
-# Column 5 contains the expected result of double-quote
-# interpolating that string after the match, or start of error message.
-#
-# Column 6, if present, contains a reason why the test is skipped.
-# This is printed with "skipped", for harness to pick up.
-#
-# \n in the tests are interpolated, as are variables of the form ${\w+}.
-#
-# Blanks lines are treated as PASSING tests to keep the line numbers
-# linked to the test number.
-#
-# If you want to add a regular expression test that can't be expressed
-# in this format, don't add it here: put it in op/pat.t instead.
-#
-# Note that columns 2,3 and 5 are all enclosed in double quotes and then
-# evalled; so something like a\"\x{100}$1 has length 3+length($1).
-
-my $file;
-BEGIN {
- $iters = shift || 1; # Poor man performance suite, 10000 is OK.
-
- # Do this open before any chdir
- $file = shift;
- if (defined $file) {
- open TESTS, $file or die "Can't open $file";
- }
-
- chdir 't' if -d 't';
- @INC = '../lib';
-
- if ($qr_embed_thr) {
- require Config;
- if (!$Config::Config{useithreads}) {
- print "1..0 # Skip: no ithreads\n";
- exit 0;
- }
- if ($ENV{PERL_CORE_MINITEST}) {
- print "1..0 # Skip: no dynamic loading on miniperl, no threads\n";
- exit 0;
- }
- require threads;
- }
-}
-
-use strict;
-use warnings FATAL=>"all";
-use vars qw($iters $numtests $bang $ffff $nulnul $OP);
-use vars qw($qr $skip_amp $qr_embed $qr_embed_thr); # set by our callers
-
-
-if (!defined $file) {
- open(TESTS,'op/re_tests') || open(TESTS,'t/op/re_tests')
- || open(TESTS,':op:re_tests') || die "Can't open re_tests";
-}
-
-my @tests = <TESTS>;
-
-close TESTS;
-
-$bang = sprintf "\\%03o", ord "!"; # \41 would not be portable.
-$ffff = chr(0xff) x 2;
-$nulnul = "\0" x 2;
-$OP = $qr ? 'qr' : 'm';
-
-$| = 1;
-printf "1..%d\n# $iters iterations\n", scalar @tests;
-
-my $test;
-TEST:
-foreach (@tests) {
- $test++;
- if (!/\S/ || /^\s*#/ || /^__END__$/) {
- print "ok $test # (Blank line or comment)\n";
- if (/#/) { print $_ };
- next;
- }
- chomp;
- s/\\n/\n/g;
- my ($pat, $subject, $result, $repl, $expect, $reason) = split(/\t/,$_,6);
- $reason = '' unless defined $reason;
- my $input = join(':',$pat,$subject,$result,$repl,$expect);
- # the double '' below keeps simple syntax highlighters from going crazy
- $pat = "'$pat'" unless $pat =~ /^[:''\/]/;
- $pat =~ s/(\$\{\w+\})/$1/eeg;
- $pat =~ s/\\n/\n/g;
- $subject = eval qq("$subject"); die $@ if $@;
- $expect = eval qq("$expect"); die $@ if $@;
- $expect = $repl = '-' if $skip_amp and $input =~ /\$[&\`\']/;
- my $todo_qr = $qr_embed_thr && ($result =~ s/t//);
- my $skip = ($skip_amp ? ($result =~ s/B//i) : ($result =~ s/B//));
- $reason = 'skipping $&' if $reason eq '' && $skip_amp;
- $result =~ s/B//i unless $skip;
- my $todo= $result =~ s/T// ? " # TODO" : "";
-
-
- for my $study ('', 'study $subject', 'utf8::upgrade($subject)',
- 'utf8::upgrade($subject); study $subject') {
- # Need to make a copy, else the utf8::upgrade of an alreay studied
- # scalar confuses things.
- my $subject = $subject;
- my $c = $iters;
- my ($code, $match, $got);
- if ($repl eq 'pos') {
- $code= <<EOFCODE;
- $study;
- pos(\$subject)=0;
- \$match = ( \$subject =~ m${pat}g );
- \$got = pos(\$subject);
-EOFCODE
- }
- elsif ($qr_embed) {
- $code= <<EOFCODE;
- my \$RE = qr$pat;
- $study;
- \$match = (\$subject =~ /(?:)\$RE(?:)/) while \$c--;
- \$got = "$repl";
-EOFCODE
- }
- elsif ($qr_embed_thr) {
- $code= <<EOFCODE;
- # Can't run the match in a subthread, but can do this and
- # clone the pattern the other way.
- my \$RE = threads->new(sub {qr$pat})->join();
- $study;
- \$match = (\$subject =~ /(?:)\$RE(?:)/) while \$c--;
- \$got = "$repl";
-EOFCODE
- }
- else {
- $code= <<EOFCODE;
- $study;
- \$match = (\$subject =~ $OP$pat) while \$c--;
- \$got = "$repl";
-EOFCODE
- }
- #$code.=qq[\n\$expect="$expect";\n];
- #use Devel::Peek;
- #die Dump($code) if $pat=~/\\h/ and $subject=~/\x{A0}/;
- {
- # Probably we should annotate specific tests with which warnings
- # categories they're known to trigger, and hence should be
- # disabled just for that test
- no warnings qw(uninitialized regexp);
- eval $code;
- }
- chomp( my $err = $@ );
- if ($result eq 'c') {
- if ($err !~ m!^\Q$expect!) { print "not ok $test$todo (compile) $input => `$err'\n"; next TEST }
- last; # no need to study a syntax error
- }
- elsif ( $skip ) {
- print "ok $test # skipped", length($reason) ? " $reason" : '', "\n";
- next TEST;
- }
- elsif ( $todo_qr ) {
- print "not ok $test # TODO", length($reason) ? " - $reason" : '', "\n";
- next TEST;
- }
- elsif ($@) {
- print "not ok $test$todo $input => error `$err'\n$code\n$@\n"; next TEST;
- }
- elsif ($result =~ /^n/) {
- if ($match) { print "not ok $test$todo ($study) $input => false positive\n"; next TEST }
- }
- else {
- if (!$match || $got ne $expect) {
- eval { require Data::Dumper };
- if ($@) {
- print "not ok $test$todo ($study) $input => `$got', match=$match\n$code\n";
- }
- else { # better diagnostics
- my $s = Data::Dumper->new([$subject],['subject'])->Useqq(1)->Dump;
- my $g = Data::Dumper->new([$got],['got'])->Useqq(1)->Dump;
- print "not ok $test$todo ($study) $input => `$got', match=$match\n$s\n$g\n$code\n";
- }
- next TEST;
- }
- }
- }
- print "ok $test$todo\n";
-}
-
-1;
Deleted: trunk/contrib/perl/t/op/regexp_noamp.t
===================================================================
--- trunk/contrib/perl/t/op/regexp_noamp.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/regexp_noamp.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,10 +0,0 @@
-#!./perl
-
-$skip_amp = 1;
-for $file ('./op/regexp.t', './t/op/regexp.t', ':op:regexp.t') {
- if (-r $file) {
- do $file or die $@;
- exit;
- }
-}
-die "Cannot find ./op/regexp.t or ./t/op/regexp.t\n";
Deleted: trunk/contrib/perl/t/op/regexp_notrie.t
===================================================================
--- trunk/contrib/perl/t/op/regexp_notrie.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/regexp_notrie.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,15 +0,0 @@
-#!./perl
-#use re 'debug';
-BEGIN {
- ${^RE_TRIE_MAXBUF}=-1;
- #${^RE_DEBUG_FLAGS}=0;
-}
-
-$qr = 1;
-for $file ('./op/regexp.t', './t/op/regexp.t', ':op:regexp.t') {
- if (-r $file) {
- do $file or die $@;
- exit;
- }
-}
-die "Cannot find ./op/regexp.t or ./t/op/regexp.t\n";
Deleted: trunk/contrib/perl/t/op/regexp_qr.t
===================================================================
--- trunk/contrib/perl/t/op/regexp_qr.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/regexp_qr.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,10 +0,0 @@
-#!./perl
-
-$qr = 1;
-for $file ('./op/regexp.t', './t/op/regexp.t', ':op:regexp.t') {
- if (-r $file) {
- do $file or die $@;
- exit;
- }
-}
-die "Cannot find ./op/regexp.t or ./t/op/regexp.t\n";
Deleted: trunk/contrib/perl/t/op/regexp_qr_embed.t
===================================================================
--- trunk/contrib/perl/t/op/regexp_qr_embed.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/regexp_qr_embed.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,11 +0,0 @@
-#!./perl
-
-$qr = 1;
-$qr_embed = 1;
-for $file ('./op/regexp.t', './t/op/regexp.t', ':op:regexp.t') {
- if (-r $file) {
- do $file or die $@;
- exit;
- }
-}
-die "Cannot find ./op/regexp.t or ./t/op/regexp.t\n";
Deleted: trunk/contrib/perl/t/op/regexp_qr_embed_thr.t
===================================================================
--- trunk/contrib/perl/t/op/regexp_qr_embed_thr.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/regexp_qr_embed_thr.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,11 +0,0 @@
-#!./perl
-
-$qr = 1;
-$qr_embed_thr = 1;
-for $file ('./op/regexp.t', './t/op/regexp.t', ':op:regexp.t') {
- if (-r $file) {
- do $file or die $@;
- exit;
- }
-}
-die "Cannot find ./op/regexp.t or ./t/op/regexp.t\n";
Deleted: trunk/contrib/perl/t/op/regexp_trielist.t
===================================================================
--- trunk/contrib/perl/t/op/regexp_trielist.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/regexp_trielist.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,15 +0,0 @@
-#!./perl
-#use re 'debug';
-BEGIN {
- ${^RE_TRIE_MAXBUFF}=0;
- #${^RE_DEBUG_FLAGS}=0;
- }
-
-$qr = 1;
-for $file ('./op/regexp.t', './t/op/regexp.t', ':op:regexp.t') {
- if (-r $file) {
- do $file or die $@;
- exit;
- }
-}
-die "Cannot find ./op/regexp.t or ./t/op/regexp.t\n";
Deleted: trunk/contrib/perl/t/op/regexp_unicode_prop.t
===================================================================
--- trunk/contrib/perl/t/op/regexp_unicode_prop.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/regexp_unicode_prop.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,303 +0,0 @@
-#!./perl
-#
-# Tests that have to do with checking whether characters have (or not have)
-# certain Unicode properties; belong (or not belong) to blocks, scripts, etc.
-#
-
-use strict;
-use warnings;
-use 5.010;
-
-my $IS_EBCDIC = ord ('A') == 193;
-
-sub run_tests;
-
-#
-# This is the data to test.
-#
-# This is a hash; keys are the property to test.
-# Values are arrays containing characters to test. The characters can
-# have the following formats:
-# '\N{CHARACTER NAME}' - Use character with that name
-# '\x{1234}' - Use character with that hex escape
-# '0x1234' - Use chr() to get that character
-# "a" - Character to use
-#
-# If a character entry starts with ! the character does not belong to the class
-#
-# If the class is just single letter, we use both \pL and \p{L}
-#
-
-use charnames ':full';
-
-my @CLASSES = (
- L => ["a", "A"],
- Ll => ["b", "!B"],
- Lu => ["!c", "C"],
- IsLl => ["d", "!D"],
- IsLu => ["!e", "E"],
- LC => ["f", "!1"],
- 'L&' => ["g", "!2"],
- 'Lowercase Letter' => ["h", "!H"],
-
- Common => ["!i", "3"],
- Inherited => ["!j", '\x{300}'],
-
- InBasicLatin => ['\N{LATIN CAPITAL LETTER A}'],
- InLatin1Supplement => ['\N{LATIN CAPITAL LETTER A WITH GRAVE}'],
- InLatinExtendedA => ['\N{LATIN CAPITAL LETTER A WITH MACRON}'],
- InLatinExtendedB => ['\N{LATIN SMALL LETTER B WITH STROKE}'],
- InKatakana => ['\N{KATAKANA LETTER SMALL A}'],
- IsLatin => ["0x100", "0x212b"],
- IsHebrew => ["0x5d0", "0xfb4f"],
- IsGreek => ["0x37a", "0x386", "!0x387", "0x388",
- "0x38a", "!0x38b", "0x38c"],
- HangulSyllables => ['\x{AC00}'],
- 'Script=Latin' => ['\x{0100}'],
- 'Block=LatinExtendedA' => ['\x{0100}'],
- 'Category=UppercaseLetter' => ['\x{0100}'],
-
- #
- # It's ok to repeat class names.
- #
- InLatin1Supplement =>
- $IS_EBCDIC ? ['!\x{7f}', '\x{80}', '!\x{100}']
- : ['!\x{7f}', '\x{80}', '\x{ff}', '!\x{100}'],
- InLatinExtendedA =>
- ['!\x{7f}', '!\x{80}', '!\x{ff}', '\x{100}'],
-
- #
- # Properties are case-insensitive, and may have whitespace,
- # dashes and underscores.
- #
- 'in-latin1_SUPPLEMENT' => ['\x{80}',
- '\N{LATIN SMALL LETTER Y WITH DIAERESIS}'],
- ' ^ In Latin 1 Supplement '
- => ['!\x{80}', '\N{COFFIN}'],
- 'latin-1 supplement' => ['\x{80}', "0xDF"],
-
-);
-
-my @USER_DEFINED_PROPERTIES = (
- #
- # User defined properties
- #
- InKana1 => ['\x{3040}', '!\x{303F}'],
- InKana2 => ['\x{3040}', '!\x{303F}'],
- InKana3 => ['\x{3041}', '!\x{3040}'],
- InNotKana => ['\x{3040}', '!\x{3041}'],
- InConsonant => ['d', '!e'],
- IsSyriac1 => ['\x{0712}', '!\x{072F}'],
- Syriac1 => ['\x{0712}', '!\x{072F}'],
- '# User-defined character properties my lack \n at the end',
- InGreekSmall => ['\N{GREEK SMALL LETTER PI}',
- '\N{GREEK SMALL LETTER FINAL SIGMA}'],
- InGreekCapital => ['\N{GREEK CAPITAL LETTER PI}', '!\x{03A2}'],
- Dash => ['-'],
- ASCII_Hex_Digit => ['!-', 'A'],
- AsciiHexAndDash => ['-', 'A'],
-);
-
-
-#
-# From the short properties we populate POSIX-like classes.
-#
-my %SHORT_PROPERTIES = (
- 'Ll' => ['m', '\N{CYRILLIC SMALL LETTER A}'],
- 'Lu' => ['M', '\N{GREEK CAPITAL LETTER ALPHA}'],
- 'Lo' => ['\N{HIRAGANA LETTER SMALL A}'],
- 'Mn' => ['\N{COMBINING GRAVE ACCENT}'],
- 'Nd' => ["0", '\N{ARABIC-INDIC DIGIT ZERO}'],
- 'Pc' => ["_"],
- 'Po' => ["!"],
- 'Zs' => [" "],
- 'Cc' => ['\x{00}'],
-);
-
-#
-# Illegal properties
-#
-my @ILLEGAL_PROPERTIES = qw [q qrst];
-
-my %d;
-
-while (my ($class, $chars) = each %SHORT_PROPERTIES) {
- push @{$d {IsAlpha}} => map {$class =~ /^[LM]/ ? $_ : "!$_"} @$chars;
- push @{$d {IsAlnum}} => map {$class =~ /^[LMN]./ ? $_ : "!$_"} @$chars;
- push @{$d {IsASCII}} => map {length ($_) == 1 || $_ eq '\x{00}'
- ? $_ : "!$_"} @$chars;
- push @{$d {IsCntrl}} => map {$class =~ /^C/ ? $_ : "!$_"} @$chars;
- push @{$d {IsBlank}} => map {$class =~ /^Z[lps]/ ? $_ : "!$_"} @$chars;
- push @{$d {IsDigit}} => map {$class =~ /^Nd$/ ? $_ : "!$_"} @$chars;
- push @{$d {IsGraph}} => map {$class =~ /^([LMNPS]|Co)/
- ? $_ : "!$_"} @$chars;
- push @{$d {IsPrint}} => map {$class =~ /^([LMNPS]|Co|Zs)/
- ? $_ : "!$_"} @$chars;
- push @{$d {IsLower}} => map {$class =~ /^Ll$/ ? $_ : "!$_"} @$chars;
- push @{$d {IsUpper}} => map {$class =~ /^L[ut]/ ? $_ : "!$_"} @$chars;
- push @{$d {IsPunct}} => map {$class =~ /^P/ ? $_ : "!$_"} @$chars;
- push @{$d {IsWord}} => map {$class =~ /^[LMN]/ || $_ eq "_"
- ? $_ : "!$_"} @$chars;
- push @{$d {IsSpace}} => map {$class =~ /^Z/ ||
- length ($_) == 1 && ord ($_) >= 0x09
- && ord ($_) <= 0x0D
- ? $_ : "!$_"} @$chars;
-}
-
-delete $d {IsASCII} if $IS_EBCDIC;
-
-push @CLASSES => "# Short properties" => %SHORT_PROPERTIES,
- "# POSIX like properties" => %d,
- "# User defined properties" => @USER_DEFINED_PROPERTIES;
-
-
-#
-# Calculate the number of tests.
-#
-my $count = 0;
-for (my $i = 0; $i < @CLASSES; $i += 2) {
- $i ++, redo if $CLASSES [$i] =~ /^\h*#\h*(.*)/;
- $count += (length $CLASSES [$i] == 1 ? 4 : 2) * @{$CLASSES [$i + 1]};
-}
-$count += 2 * @ILLEGAL_PROPERTIES;
-$count += 2 * grep {length $_ == 1} @ILLEGAL_PROPERTIES;
-
-my $tests = 0;
-
-say "1..$count";
-
-run_tests unless caller ();
-
-sub match {
- my ($char, $match, $nomatch) = @_;
-
- my ($str, $name);
-
- given ($char) {
- when (/^\\/) {
- $str = eval qq ["$char"];
- $name = qq ["$char"];
- }
- when (/^0x([0-9A-Fa-f]+)$/) {
- $str = chr hex $1;
- $name = "chr ($char)";
- }
- default {
- $str = $char;
- $name = qq ["$char"];
- }
- }
-
- print "not " unless $str =~ /$match/;
- print "ok ", ++ $tests, " - $name =~ /$match/\n";
- print "not " unless $str !~ /$nomatch/;
- print "ok ", ++ $tests, " - $name !~ /$nomatch/\n";
-}
-
-sub run_tests {
-
- while (@CLASSES) {
- my $class = shift @CLASSES;
- if ($class =~ /^\h*#\h*(.*)/) {
- print "# $1\n";
- next;
- }
- last unless @CLASSES;
- my $chars = shift @CLASSES;
- my @in = grep {!/^!./} @$chars;
- my @out = map {s/^!(?=.)//; $_} grep { /^!./} @$chars;
- my $in_pat = eval qq ['\\p{$class}'];
- my $out_pat = eval qq ['\\P{$class}'];
-
- match $_, $in_pat, $out_pat for @in;
- match $_, $out_pat, $in_pat for @out;
-
- if (1 == length $class) {
- my $in_pat = eval qq ['\\p$class'];
- my $out_pat = eval qq ['\\P$class'];
-
- match $_, $in_pat, $out_pat for @in;
- match $_, $out_pat, $in_pat for @out;
- }
- }
-
-
- my $pat = qr /^Can't find Unicode property definition/;
- print "# Illegal properties\n";
- foreach my $p (@ILLEGAL_PROPERTIES) {
- undef $@;
- my $r = eval "'a' =~ /\\p{$p}/; 1";
- print "not " unless !$r && $@ && $@ =~ $pat;
- print "ok ", ++ $tests, " - Unknown Unicode property \\p{$p}\n";
- undef $@;
- my $s = eval "'a' =~ /\\P{$p}/; 1";
- print "not " unless !$s && $@ && $@ =~ $pat;
- print "ok ", ++ $tests, " - Unknown Unicode property \\P{$p}\n";
- if (length $p == 1) {
- undef $@;
- my $r = eval "'a' =~ /\\p$p/; 1";
- print "not " unless !$r && $@ && $@ =~ $pat;
- print "ok ", ++ $tests, " - Unknown Unicode property \\p$p\n";
- undef $@;
- my $s = eval "'a' =~ /\\P$p/; 1";
- print "not " unless !$s && $@ && $@ =~ $pat;
- print "ok ", ++ $tests, " - Unknown Unicode property \\P$p\n";
- }
- }
-}
-
-
-#
-# User defined properties
-#
-
-sub InKana1 {<<'--'}
-3040 309F
-30A0 30FF
---
-
-sub InKana2 {<<'--'}
-+utf8::InHiragana
-+utf8::InKatakana
---
-
-sub InKana3 {<<'--'}
-+utf8::InHiragana
-+utf8::InKatakana
--utf8::IsCn
---
-
-sub InNotKana {<<'--'}
-!utf8::InHiragana
--utf8::InKatakana
-+utf8::IsCn
---
-
-sub InConsonant {<<'--'} # Not EBCDIC-aware.
-0061 007f
--0061
--0065
--0069
--006f
--0075
---
-
-sub IsSyriac1 {<<'--'}
-0712 072C
-0730 074A
---
-
-sub Syriac1 {<<'--'}
-0712 072C
-0730 074A
---
-
-sub InGreekSmall {return "03B1\t03C9"}
-sub InGreekCapital {return "0391\t03A9\n-03A2"}
-
-sub AsciiHexAndDash {<<'--'}
-+utf8::ASCII_Hex_Digit
-+utf8::Dash
---
-
-__END__
Deleted: trunk/contrib/perl/t/op/regexp_unicode_prop_thr.t
===================================================================
--- trunk/contrib/perl/t/op/regexp_unicode_prop_thr.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/regexp_unicode_prop_thr.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,7 +0,0 @@
-#!./perl
-
-chdir 't' if -d 't';
- at INC = ('../lib', '.');
-
-require 'thread_it.pl';
-thread_it(qw(op regexp_unicode_prop.t));
Deleted: trunk/contrib/perl/t/op/rxcode.t
===================================================================
--- trunk/contrib/perl/t/op/rxcode.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/rxcode.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,86 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require './test.pl';
-}
-
-plan tests => 38;
-
-$^R = undef;
-like( 'a', qr/^a(?{1})(?:b(?{2}))?/, 'a =~ ab?' );
-cmp_ok( $^R, '==', 1, '..$^R after a =~ ab?' );
-
-$^R = undef;
-unlike( 'abc', qr/^a(?{3})(?:b(?{4}))$/, 'abc !~ a(?:b)$' );
-ok( !defined $^R, '..$^R after abc !~ a(?:b)$' );
-
-$^R = undef;
-like( 'ab', qr/^a(?{5})b(?{6})/, 'ab =~ ab' );
-cmp_ok( $^R, '==', 6, '..$^R after ab =~ ab' );
-
-$^R = undef;
-like( 'ab', qr/^a(?{7})(?:b(?{8}))?/, 'ab =~ ab?' );
-
-cmp_ok( $^R, '==', 8, '..$^R after ab =~ ab?' );
-
-$^R = undef;
-like( 'ab', qr/^a(?{9})b?(?{10})/, 'ab =~ ab? (2)' );
-cmp_ok( $^R, '==', 10, '..$^R after ab =~ ab? (2)' );
-
-$^R = undef;
-like( 'ab', qr/^(a(?{11})(?:b(?{12})))?/, 'ab =~ (ab)? (3)' );
-cmp_ok( $^R, '==', 12, '..$^R after ab =~ ab? (3)' );
-
-$^R = undef;
-unlike( 'ac', qr/^a(?{13})b(?{14})/, 'ac !~ ab' );
-ok( !defined $^R, '..$^R after ac !~ ab' );
-
-$^R = undef;
-like( 'ac', qr/^a(?{15})(?:b(?{16}))?/, 'ac =~ ab?' );
-cmp_ok( $^R, '==', 15, '..$^R after ac =~ ab?' );
-
-my @ar;
-like( 'ab', qr/^a(?{push @ar,101})(?:b(?{push @ar,102}))?/, 'ab =~ ab? with code push' );
-cmp_ok( scalar(@ar), '==', 2, '.. at ar pushed' );
-cmp_ok( $ar[0], '==', 101, '..first element pushed' );
-cmp_ok( $ar[1], '==', 102, '..second element pushed' );
-
-$^R = undef;
-unlike( 'a', qr/^a(?{103})b(?{104})/, 'a !~ ab with code push' );
-ok( !defined $^R, '..$^R after a !~ ab with code push' );
-
- at ar = ();
-unlike( 'a', qr/^a(?{push @ar,105})b(?{push @ar,106})/, 'a !~ ab (push)' );
-cmp_ok( scalar(@ar), '==', 0, '..nothing pushed' );
-
- at ar = ();
-unlike( 'abc', qr/^a(?{push @ar,107})b(?{push @ar,108})$/, 'abc !~ ab$ (push)' );
-cmp_ok( scalar(@ar), '==', 0, '..still nothing pushed' );
-
-use vars '@var';
-
-like( 'ab', qr/^a(?{push @var,109})(?:b(?{push @var,110}))?/, 'ab =~ ab? push to package var' );
-cmp_ok( scalar(@var), '==', 2, '.. at var pushed' );
-cmp_ok( $var[0], '==', 109, '..first element pushed (package)' );
-cmp_ok( $var[1], '==', 110, '..second element pushed (package)' );
-
- at var = ();
-unlike( 'a', qr/^a(?{push @var,111})b(?{push @var,112})/, 'a !~ ab (push package var)' );
-cmp_ok( scalar(@var), '==', 0, '..nothing pushed (package)' );
-
- at var = ();
-unlike( 'abc', qr/^a(?{push @var,113})b(?{push @var,114})$/, 'abc !~ ab$ (push package var)' );
-cmp_ok( scalar(@var), '==', 0, '..still nothing pushed (package)' );
-
-{
- local $^R = undef;
- ok( 'ac' =~ /^a(?{30})(?:b(?{31})|c(?{32}))?/, 'ac =~ a(?:b|c)?' );
- ok( $^R == 32, '$^R == 32' );
-}
-{
- local $^R = undef;
- ok( 'abbb' =~ /^a(?{36})(?:b(?{37})|c(?{38}))+/, 'abbbb =~ a(?:b|c)+' );
- ok( $^R == 37, '$^R == 37' ) or print "# \$^R=$^R\n";
-}
Deleted: trunk/contrib/perl/t/op/subst.t
===================================================================
--- trunk/contrib/perl/t/op/subst.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/subst.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,593 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
-}
-
-require './test.pl';
-plan( tests => 139 );
-
-$x = 'foo';
-$_ = "x";
-s/x/\$x/;
-ok( $_ eq '$x', ":$_: eq :\$x:" );
-
-$_ = "x";
-s/x/$x/;
-ok( $_ eq 'foo', ":$_: eq :foo:" );
-
-$_ = "x";
-s/x/\$x $x/;
-ok( $_ eq '$x foo', ":$_: eq :\$x foo:" );
-
-$b = 'cd';
-($a = 'abcdef') =~ s<(b${b}e)>'\n$1';
-ok( $1 eq 'bcde' && $a eq 'a\n$1f', ":$1: eq :bcde: ; :$a: eq :a\\n\$1f:" );
-
-$a = 'abacada';
-ok( ($a =~ s/a/x/g) == 4 && $a eq 'xbxcxdx' );
-
-ok( ($a =~ s/a/y/g) == 0 && $a eq 'xbxcxdx' );
-
-ok( ($a =~ s/b/y/g) == 1 && $a eq 'xyxcxdx' );
-
-$_ = 'ABACADA';
-ok( /a/i && s///gi && $_ eq 'BCD' );
-
-$_ = '\\' x 4;
-ok( length($_) == 4 );
-$snum = s/\\/\\\\/g;
-ok( $_ eq '\\' x 8 && $snum == 4 );
-
-$_ = '\/' x 4;
-ok( length($_) == 8 );
-$snum = s/\//\/\//g;
-ok( $_ eq '\\//' x 4 && $snum == 4 );
-ok( length($_) == 12 );
-
-$_ = 'aaaXXXXbbb';
-s/^a//;
-ok( $_ eq 'aaXXXXbbb' );
-
-$_ = 'aaaXXXXbbb';
-s/a//;
-ok( $_ eq 'aaXXXXbbb' );
-
-$_ = 'aaaXXXXbbb';
-s/^a/b/;
-ok( $_ eq 'baaXXXXbbb' );
-
-$_ = 'aaaXXXXbbb';
-s/a/b/;
-ok( $_ eq 'baaXXXXbbb' );
-
-$_ = 'aaaXXXXbbb';
-s/aa//;
-ok( $_ eq 'aXXXXbbb' );
-
-$_ = 'aaaXXXXbbb';
-s/aa/b/;
-ok( $_ eq 'baXXXXbbb' );
-
-$_ = 'aaaXXXXbbb';
-s/b$//;
-ok( $_ eq 'aaaXXXXbb' );
-
-$_ = 'aaaXXXXbbb';
-s/b//;
-ok( $_ eq 'aaaXXXXbb' );
-
-$_ = 'aaaXXXXbbb';
-s/bb//;
-ok( $_ eq 'aaaXXXXb' );
-
-$_ = 'aaaXXXXbbb';
-s/aX/y/;
-ok( $_ eq 'aayXXXbbb' );
-
-$_ = 'aaaXXXXbbb';
-s/Xb/z/;
-ok( $_ eq 'aaaXXXzbb' );
-
-$_ = 'aaaXXXXbbb';
-s/aaX.*Xbb//;
-ok( $_ eq 'ab' );
-
-$_ = 'aaaXXXXbbb';
-s/bb/x/;
-ok( $_ eq 'aaaXXXXxb' );
-
-# now for some unoptimized versions of the same.
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/^a//;
-ok( $_ eq 'aaXXXXbbb' );
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/a//;
-ok( $_ eq 'aaXXXXbbb' );
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/^a/b/;
-ok( $_ eq 'baaXXXXbbb' );
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/a/b/;
-ok( $_ eq 'baaXXXXbbb' );
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/aa//;
-ok( $_ eq 'aXXXXbbb' );
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/aa/b/;
-ok( $_ eq 'baXXXXbbb' );
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/b$//;
-ok( $_ eq 'aaaXXXXbb' );
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/b//;
-ok( $_ eq 'aaaXXXXbb' );
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/bb//;
-ok( $_ eq 'aaaXXXXb' );
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/aX/y/;
-ok( $_ eq 'aayXXXbbb' );
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/Xb/z/;
-ok( $_ eq 'aaaXXXzbb' );
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/aaX.*Xbb//;
-ok( $_ eq 'ab' );
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/bb/x/;
-ok( $_ eq 'aaaXXXXxb' );
-
-$_ = 'abc123xyz';
-s/(\d+)/$1*2/e; # yields 'abc246xyz'
-ok( $_ eq 'abc246xyz' );
-s/(\d+)/sprintf("%5d",$1)/e; # yields 'abc 246xyz'
-ok( $_ eq 'abc 246xyz' );
-s/(\w)/$1 x 2/eg; # yields 'aabbcc 224466xxyyzz'
-ok( $_ eq 'aabbcc 224466xxyyzz' );
-
-$_ = "aaaaa";
-ok( y/a/b/ == 5 );
-ok( y/a/b/ == 0 );
-ok( y/b// == 5 );
-ok( y/b/c/s == 5 );
-ok( y/c// == 1 );
-ok( y/c//d == 1 );
-ok( $_ eq "" );
-
-$_ = "Now is the %#*! time for all good men...";
-ok( ($x=(y/a-zA-Z //cd)) == 7 );
-ok( y/ / /s == 8 );
-
-$_ = 'abcdefghijklmnopqrstuvwxyz0123456789';
-tr/a-z/A-Z/;
-
-ok( $_ eq 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' );
-
-# same as tr/A-Z/a-z/;
-if (defined $Config{ebcdic} && $Config{ebcdic} eq 'define') { # EBCDIC.
- no utf8;
- y[\301-\351][\201-\251];
-} else { # Ye Olde ASCII. Or something like it.
- y[\101-\132][\141-\172];
-}
-
-ok( $_ eq 'abcdefghijklmnopqrstuvwxyz0123456789' );
-
-SKIP: {
- skip("not ASCII",1) unless (ord("+") == ord(",") - 1
- && ord(",") == ord("-") - 1
- && ord("a") == ord("b") - 1
- && ord("b") == ord("c") - 1);
- $_ = '+,-';
- tr/+--/a-c/;
- ok( $_ eq 'abc' );
-}
-
-$_ = '+,-';
-tr/+\--/a\/c/;
-ok( $_ eq 'a,/' );
-
-$_ = '+,-';
-tr/-+,/ab\-/;
-ok( $_ eq 'b-a' );
-
-
-# test recursive substitutions
-# code based on the recursive expansion of makefile variables
-
-my %MK = (
- AAAAA => '$(B)', B=>'$(C)', C => 'D', # long->short
- E => '$(F)', F=>'p $(G) q', G => 'HHHHH', # short->long
- DIR => '$(UNDEFINEDNAME)/xxx',
-);
-sub var {
- my($var,$level) = @_;
- return "\$($var)" unless exists $MK{$var};
- return exp_vars($MK{$var}, $level+1); # can recurse
-}
-sub exp_vars {
- my($str,$level) = @_;
- $str =~ s/\$\((\w+)\)/var($1, $level+1)/ge; # can recurse
- #warn "exp_vars $level = '$str'\n";
- $str;
-}
-
-ok( exp_vars('$(AAAAA)',0) eq 'D' );
-ok( exp_vars('$(E)',0) eq 'p HHHHH q' );
-ok( exp_vars('$(DIR)',0) eq '$(UNDEFINEDNAME)/xxx' );
-ok( exp_vars('foo $(DIR)/yyy bar',0) eq 'foo $(UNDEFINEDNAME)/xxx/yyy bar' );
-
-$_ = "abcd";
-s/(..)/$x = $1, m#.#/eg;
-ok( $x eq "cd", 'a match nested in the RHS of a substitution' );
-
-# Subst and lookbehind
-
-$_="ccccc";
-$snum = s/(?<!x)c/x/g;
-ok( $_ eq "xxxxx" && $snum == 5 );
-
-$_="ccccc";
-$snum = s/(?<!x)(c)/x/g;
-ok( $_ eq "xxxxx" && $snum == 5 );
-
-$_="foobbarfoobbar";
-$snum = s/(?<!r)foobbar/foobar/g;
-ok( $_ eq "foobarfoobbar" && $snum == 1 );
-
-$_="foobbarfoobbar";
-$snum = s/(?<!ar)(foobbar)/foobar/g;
-ok( $_ eq "foobarfoobbar" && $snum == 1 );
-
-$_="foobbarfoobbar";
-$snum = s/(?<!ar)foobbar/foobar/g;
-ok( $_ eq "foobarfoobbar" && $snum == 1 );
-
-eval 's{foo} # this is a comment, not a delimiter
- {bar};';
-ok( ! @?, 'parsing of split subst with comment' );
-
-$_="baacbaa";
-$snum = tr/a/b/s;
-ok( $_ eq "bbcbb" && $snum == 4,
- 'check if squashing works at the end of string' );
-
-$_ = "ab";
-ok( s/a/b/ == 1 );
-
-$_ = <<'EOL';
- $url = new URI::URL "http://www/"; die if $url eq "xXx";
-EOL
-$^R = 'junk';
-
-$foo = ' $@%#lowercase $@%# lowercase UPPERCASE$@%#UPPERCASE' .
- ' $@%#lowercase$@%#lowercase$@%# lowercase lowercase $@%#lowercase' .
- ' lowercase $@%#MiXeD$@%# ';
-
-$snum =
-s{ \d+ \b [,.;]? (?{ 'digits' })
- |
- [a-z]+ \b [,.;]? (?{ 'lowercase' })
- |
- [A-Z]+ \b [,.;]? (?{ 'UPPERCASE' })
- |
- [A-Z] [a-z]+ \b [,.;]? (?{ 'Capitalized' })
- |
- [A-Za-z]+ \b [,.;]? (?{ 'MiXeD' })
- |
- [A-Za-z0-9]+ \b [,.;]? (?{ 'alphanumeric' })
- |
- \s+ (?{ ' ' })
- |
- [^A-Za-z0-9\s]+ (?{ '$@%#' })
-}{$^R}xg;
-ok( $_ eq $foo );
-ok( $snum == 31 );
-
-$_ = 'a' x 6;
-$snum = s/a(?{})//g;
-ok( $_ eq '' && $snum == 6 );
-
-$_ = 'x' x 20;
-$snum = s/(\d*|x)/<$1>/g;
-$foo = '<>' . ('<x><>' x 20) ;
-ok( $_ eq $foo && $snum == 41 );
-
-$t = 'aaaaaaaaa';
-
-$_ = $t;
-pos = 6;
-$snum = s/\Ga/xx/g;
-ok( $_ eq 'aaaaaaxxxxxx' && $snum == 3 );
-
-$_ = $t;
-pos = 6;
-$snum = s/\Ga/x/g;
-ok( $_ eq 'aaaaaaxxx' && $snum == 3 );
-
-$_ = $t;
-pos = 6;
-s/\Ga/xx/;
-ok( $_ eq 'aaaaaaxxaa' );
-
-$_ = $t;
-pos = 6;
-s/\Ga/x/;
-ok( $_ eq 'aaaaaaxaa' );
-
-$_ = $t;
-$snum = s/\Ga/xx/g;
-ok( $_ eq 'xxxxxxxxxxxxxxxxxx' && $snum == 9 );
-
-$_ = $t;
-$snum = s/\Ga/x/g;
-ok( $_ eq 'xxxxxxxxx' && $snum == 9 );
-
-$_ = $t;
-s/\Ga/xx/;
-ok( $_ eq 'xxaaaaaaaa' );
-
-$_ = $t;
-s/\Ga/x/;
-ok( $_ eq 'xaaaaaaaa' );
-
-$_ = 'aaaa';
-$snum = s/\ba/./g;
-ok( $_ eq '.aaa' && $snum == 1 );
-
-eval q% s/a/"b"}/e %;
-ok( $@ =~ /Bad evalled substitution/ );
-eval q% ($_ = "x") =~ s/(.)/"$1 "/e %;
-ok( $_ eq "x " and !length $@ );
-$x = $x = 'interp';
-eval q% ($_ = "x") =~ s/x(($x)*)/"$1"/e %;
-ok( $_ eq '' and !length $@ );
-
-$_ = "C:/";
-ok( !s/^([a-z]:)/\u$1/ );
-
-$_ = "Charles Bronson";
-$snum = s/\B\w//g;
-ok( $_ eq "C B" && $snum == 12 );
-
-{
- use utf8;
- my $s = "H\303\266he";
- my $l = my $r = $s;
- $l =~ s/[^\w]//g;
- $r =~ s/[^\w\.]//g;
- is($l, $r, "use utf8 \\w");
-}
-
-my $pv1 = my $pv2 = "Andreas J. K\303\266nig";
-$pv1 =~ s/A/\x{100}/;
-substr($pv2,0,1) = "\x{100}";
-is($pv1, $pv2);
-
-SKIP: {
- skip("EBCDIC", 3) if ord("A") == 193;
-
- {
- # Gregor Chrupala <gregor.chrupala at star-group.net>
- use utf8;
- $a = 'España';
- $a =~ s/ñ/ñ/;
- like($a, qr/ñ/, "use utf8 RHS");
- }
-
- {
- use utf8;
- $a = 'España España';
- $a =~ s/ñ/ñ/;
- like($a, qr/ñ/, "use utf8 LHS");
- }
-
- {
- use utf8;
- $a = 'España';
- $a =~ s/ñ/ñ/;
- like($a, qr/ñ/, "use utf8 LHS and RHS");
- }
-}
-
-{
- # SADAHIRO Tomoyuki <bqw10602 at nifty.com>
-
- $a = "\x{100}\x{101}";
- $a =~ s/\x{101}/\xFF/;
- like($a, qr/\xFF/);
- is(length($a), 2, "SADAHIRO utf8 s///");
-
- $a = "\x{100}\x{101}";
- $a =~ s/\x{101}/"\xFF"/e;
- like($a, qr/\xFF/);
- is(length($a), 2);
-
- $a = "\x{100}\x{101}";
- $a =~ s/\x{101}/\xFF\xFF\xFF/;
- like($a, qr/\xFF\xFF\xFF/);
- is(length($a), 4);
-
- $a = "\x{100}\x{101}";
- $a =~ s/\x{101}/"\xFF\xFF\xFF"/e;
- like($a, qr/\xFF\xFF\xFF/);
- is(length($a), 4);
-
- $a = "\xFF\x{101}";
- $a =~ s/\xFF/\x{100}/;
- like($a, qr/\x{100}/);
- is(length($a), 2);
-
- $a = "\xFF\x{101}";
- $a =~ s/\xFF/"\x{100}"/e;
- like($a, qr/\x{100}/);
- is(length($a), 2);
-
- $a = "\xFF";
- $a =~ s/\xFF/\x{100}/;
- like($a, qr/\x{100}/);
- is(length($a), 1);
-
- $a = "\xFF";
- $a =~ s/\xFF/"\x{100}"/e;
- like($a, qr/\x{100}/);
- is(length($a), 1);
-}
-
-{
- # subst with mixed utf8/non-utf8 type
- my($ua, $ub, $uc, $ud) = ("\x{101}", "\x{102}", "\x{103}", "\x{104}");
- my($na, $nb) = ("\x{ff}", "\x{fe}");
- my $a = "$ua--$ub";
- my $b;
- ($b = $a) =~ s/--/$na/;
- is($b, "$ua$na$ub", "s///: replace non-utf8 into utf8");
- ($b = $a) =~ s/--/--$na--/;
- is($b, "$ua--$na--$ub", "s///: replace long non-utf8 into utf8");
- ($b = $a) =~ s/--/$uc/;
- is($b, "$ua$uc$ub", "s///: replace utf8 into utf8");
- ($b = $a) =~ s/--/--$uc--/;
- is($b, "$ua--$uc--$ub", "s///: replace long utf8 into utf8");
- $a = "$na--$nb";
- ($b = $a) =~ s/--/$ua/;
- is($b, "$na$ua$nb", "s///: replace utf8 into non-utf8");
- ($b = $a) =~ s/--/--$ua--/;
- is($b, "$na--$ua--$nb", "s///: replace long utf8 into non-utf8");
-
- # now with utf8 pattern
- $a = "$ua--$ub";
- ($b = $a) =~ s/-($ud)?-/$na/;
- is($b, "$ua$na$ub", "s///: replace non-utf8 into utf8 (utf8 pattern)");
- ($b = $a) =~ s/-($ud)?-/--$na--/;
- is($b, "$ua--$na--$ub", "s///: replace long non-utf8 into utf8 (utf8 pattern)");
- ($b = $a) =~ s/-($ud)?-/$uc/;
- is($b, "$ua$uc$ub", "s///: replace utf8 into utf8 (utf8 pattern)");
- ($b = $a) =~ s/-($ud)?-/--$uc--/;
- is($b, "$ua--$uc--$ub", "s///: replace long utf8 into utf8 (utf8 pattern)");
- $a = "$na--$nb";
- ($b = $a) =~ s/-($ud)?-/$ua/;
- is($b, "$na$ua$nb", "s///: replace utf8 into non-utf8 (utf8 pattern)");
- ($b = $a) =~ s/-($ud)?-/--$ua--/;
- is($b, "$na--$ua--$nb", "s///: replace long utf8 into non-utf8 (utf8 pattern)");
- ($b = $a) =~ s/-($ud)?-/$na/;
- is($b, "$na$na$nb", "s///: replace non-utf8 into non-utf8 (utf8 pattern)");
- ($b = $a) =~ s/-($ud)?-/--$na--/;
- is($b, "$na--$na--$nb", "s///: replace long non-utf8 into non-utf8 (utf8 pattern)");
-}
-
-$_ = 'aaaa';
-$r = 'x';
-$s = s/a(?{})/$r/g;
-is("<$_> <$s>", "<xxxx> <4>", "[perl #7806]");
-
-$_ = 'aaaa';
-$s = s/a(?{})//g;
-is("<$_> <$s>", "<> <4>", "[perl #7806]");
-
-# [perl #19048] Coredump in silly replacement
-{
- local $^W = 0;
- $_="abcdef\n";
- s!.!!eg;
- is($_, "\n", "[perl #19048]");
-}
-
-# [perl #17757] interaction between saw_ampersand and study
-{
- my $f = eval q{ $& };
- $f = "xx";
- study $f;
- $f =~ s/x/y/g;
- is($f, "yy", "[perl #17757]");
-}
-
-# [perl #20684] returned a zero count
-$_ = "1111";
-is(s/(??{1})/2/eg, 4, '#20684 s/// with (??{..}) inside');
-
-# [perl #20682] @- not visible in replacement
-$_ = "123";
-/(2)/; # seed @- with something else
-s/(1)(2)(3)/$#- (@-)/;
-is($_, "3 (0 0 1 2)", '#20682 @- not visible in replacement');
-
-# [perl #20682] $^N not visible in replacement
-$_ = "abc";
-/(a)/; s/(b)|(c)/-$^N/g;
-is($_,'a-b-c','#20682 $^N not visible in replacement');
-
-# [perl #22351] perl bug with 'e' substitution modifier
-my $name = "chris";
-{
- no warnings 'uninitialized';
- $name =~ s/hr//e;
-}
-is($name, "cis", q[#22351 bug with 'e' substitution modifier]);
-
-
-# [perl #34171] $1 didn't honour 'use bytes' in s//e
-{
- my $s="\x{100}";
- my $x;
- {
- use bytes;
- $s=~ s/(..)/$x=$1/e
- }
- is(length($x), 2, '[perl #34171]');
-}
-
-
-{ # [perl #27940] perlbug: [\x00-\x1f] works, [\c at -\c_] does not
- my $c;
-
- ($c = "\x20\c@\x30\cA\x40\cZ\x50\c_\x60") =~ s/[\c at -\c_]//g;
- is($c, "\x20\x30\x40\x50\x60", "s/[\\c\@-\\c_]//g");
-
- ($c = "\x20\x00\x30\x01\x40\x1A\x50\x1F\x60") =~ s/[\x00-\x1f]//g;
- is($c, "\x20\x30\x40\x50\x60", "s/[\\x00-\\x1f]//g");
-}
-{
- $_ = "xy";
- no warnings 'uninitialized';
- /(((((((((x)))))))))(z)/; # clear $10
- s/(((((((((x)))))))))(y)/${10}/;
- is($_,"y","RT#6006: \$_ eq '$_'");
- $_ = "xr";
- s/(((((((((x)))))))))(r)/fooba${10}/;
- is($_,"foobar","RT#6006: \$_ eq '$_'");
-}
-{
- my $want=("\n" x 11).("B\n" x 11)."B";
- $_="B";
- our $i;
- for $i(1..11){
- s/^.*$/$&/gm;
- $_="\n$_\n$&";
- }
- is($want,$_,"RT#17542");
-}
-
-{
- my @tests = ('ABC', "\xA3\xA4\xA5", "\x{410}\x{411}\x{412}");
- foreach (@tests) {
- my $id = ord $_;
- s/./pos/ge;
- is($_, "012", "RT#52104: $id");
- }
-}
Deleted: trunk/contrib/perl/t/op/substT.t
===================================================================
--- trunk/contrib/perl/t/op/substT.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/substT.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,9 +0,0 @@
-#!perl -wT
-
-for $file ('op/subst.t', 't/op/subst.t', ':op:subst.t') {
- if (-r $file) {
- do ($^O eq 'MacOS' ? $file : "./$file");
- exit;
- }
-}
-die "Cannot find op/subst.t or t/op/subst.t\n";
Deleted: trunk/contrib/perl/t/op/subst_amp.t
===================================================================
--- trunk/contrib/perl/t/op/subst_amp.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/subst_amp.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,104 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
-}
-
-print "1..13\n";
-
-$_ = 'x' x 20;
-s/\d*|x/<$&>/g;
-$foo = '<>' . ('<x><>' x 20) ;
-print ($_ eq $foo ? "ok 1\n" : "not ok 1\n#'$_'\n#'$foo'\n");
-
-$t = 'aaa';
-
-$_ = $t;
- at res = ();
-pos = 1;
-s/\Ga(?{push @res, $_, $`})/xx/g;
-print "not " unless "$_ @res" eq 'axxxx aaa a aaa aa';
-print "ok 2\n";
-
-$_ = $t;
- at res = ();
-pos = 1;
-s/\Ga(?{push @res, $_, $`})/x/g;
-print "not " unless "$_ @res" eq 'axx aaa a aaa aa';
-print "ok 3\n";
-
-$_ = $t;
- at res = ();
-pos = 1;
-s/\Ga(?{push @res, $_, $`})/xx/;
-print "not " unless "$_ @res" eq 'axxa aaa a';
-print "ok 4\n";
-
-$_ = $t;
- at res = ();
-pos = 1;
-s/\Ga(?{push @res, $_, $`})/x/;
-print "not " unless "$_ @res" eq 'axa aaa a';
-print "ok 5\n";
-
-$a = $t;
- at res = ();
-pos ($a) = 1;
-$a =~ s/\Ga(?{push @res, $_, $`})/xx/g;
-print "#'$a' '@res'\nnot " unless "$a @res" eq 'axxxx aaa a aaa aa';
-print "ok 6\n";
-
-$a = $t;
- at res = ();
-pos ($a) = 1;
-$a =~ s/\Ga(?{push @res, $_, $`})/x/g;
-print "#'$a' '@res'\nnot " unless "$a @res" eq 'axx aaa a aaa aa';
-print "ok 7\n";
-
-$a = $t;
- at res = ();
-pos ($a) = 1;
-$a =~ s/\Ga(?{push @res, $_, $`})/xx/;
-print "#'$a' '@res'\nnot " unless "$a @res" eq 'axxa aaa a';
-print "ok 8\n";
-
-$a = $t;
- at res = ();
-pos ($a) = 1;
-$a =~ s/\Ga(?{push @res, $_, $`})/x/;
-print "#'$a' '@res'\nnot " unless "$a @res" eq 'axa aaa a';
-print "ok 9\n";
-
-sub x2 {'xx'}
-sub x1 {'x'}
-
-$a = $t;
- at res = ();
-pos ($a) = 1;
-$a =~ s/\Ga(?{push @res, $_, $`})/x2/ge;
-print "#'$a' '@res'\nnot " unless "$a @res" eq 'axxxx aaa a aaa aa';
-print "ok 10\n";
-
-$a = $t;
- at res = ();
-pos ($a) = 1;
-$a =~ s/\Ga(?{push @res, $_, $`})/x1/ge;
-print "#'$a' '@res'\nnot " unless "$a @res" eq 'axx aaa a aaa aa';
-print "ok 11\n";
-
-$a = $t;
- at res = ();
-pos ($a) = 1;
-$a =~ s/\Ga(?{push @res, $_, $`})/x2/e;
-print "#'$a' '@res'\nnot " unless "$a @res" eq 'axxa aaa a';
-print "ok 12\n";
-
-$a = $t;
- at res = ();
-pos ($a) = 1;
-$a =~ s/\Ga(?{push @res, $_, $`})/x1/e;
-print "#'$a' '@res'\nnot " unless "$a @res" eq 'axa aaa a';
-print "ok 13\n";
-
Deleted: trunk/contrib/perl/t/op/subst_wamp.t
===================================================================
--- trunk/contrib/perl/t/op/subst_wamp.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/subst_wamp.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,11 +0,0 @@
-#!./perl
-
-$dummy = defined $&; # Now we have it...
-for $file ('op/subst.t', 't/op/subst.t', ':op:subst.t') {
- if (-r $file) {
- do ($^O eq 'MacOS' ? $file : "./$file");
- exit;
- }
-}
-die "Cannot find op/subst.t or t/op/subst.t\n";
-
Deleted: trunk/contrib/perl/t/op/substr.t
===================================================================
--- trunk/contrib/perl/t/op/substr.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/substr.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,864 +0,0 @@
-#!./perl
-
-#P = start of string Q = start of substr R = end of substr S = end of string
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-use warnings ;
-
-$a = 'abcdefxyz';
-$SIG{__WARN__} = sub {
- if ($_[0] =~ /^substr outside of string/) {
- $w++;
- } elsif ($_[0] =~ /^Attempt to use reference as lvalue in substr/) {
- $w += 2;
- } elsif ($_[0] =~ /^Use of uninitialized value/) {
- $w += 3;
- } else {
- warn $_[0];
- }
-};
-
-BEGIN { require './test.pl'; }
-
-plan(387);
-
-run_tests() unless caller;
-
-my $krunch = "a";
-
-sub run_tests {
-
-$FATAL_MSG = qr/^substr outside of string/;
-
-is(substr($a,0,3), 'abc'); # P=Q R S
-is(substr($a,3,3), 'def'); # P Q R S
-is(substr($a,6,999), 'xyz'); # P Q S R
-$b = substr($a,999,999) ; # warn # P R Q S
-is ($w--, 1);
-eval{substr($a,999,999) = "" ; };# P R Q S
-like ($@, $FATAL_MSG);
-is(substr($a,0,-6), 'abc'); # P=Q R S
-is(substr($a,-3,1), 'x'); # P Q R S
-sub{$b = shift}->(substr($a,999,999));
-is ($w--, 1, 'boundless lvalue substr only warns on fetch');
-
-substr($a,3,3) = 'XYZ';
-is($a, 'abcXYZxyz' );
-substr($a,0,2) = '';
-is($a, 'cXYZxyz' );
-substr($a,0,0) = 'ab';
-is($a, 'abcXYZxyz' );
-substr($a,0,0) = '12345678';
-is($a, '12345678abcXYZxyz' );
-substr($a,-3,3) = 'def';
-is($a, '12345678abcXYZdef');
-substr($a,-3,3) = '<';
-is($a, '12345678abcXYZ<' );
-substr($a,-1,1) = '12345678';
-is($a, '12345678abcXYZ12345678' );
-
-$a = 'abcdefxyz';
-
-is(substr($a,6), 'xyz' ); # P Q R=S
-is(substr($a,-3), 'xyz' ); # P Q R=S
-$b = substr($a,999,999) ; # warning # P R=S Q
-is($w--, 1);
-eval{substr($a,999,999) = "" ; } ; # P R=S Q
-like($@, $FATAL_MSG);
-is(substr($a,0), 'abcdefxyz'); # P=Q R=S
-is(substr($a,9), ''); # P Q=R=S
-is(substr($a,-11), 'abcdefxyz'); # Q P R=S
-is(substr($a,-9), 'abcdefxyz'); # P=Q R=S
-
-$a = '54321';
-
-$b = substr($a,-7, 1) ; # warn # Q R P S
-is($w--, 1);
-eval{substr($a,-7, 1) = "" ; }; # Q R P S
-like($@, $FATAL_MSG);
-$b = substr($a,-7,-6) ; # warn # Q R P S
-is($w--, 1);
-eval{substr($a,-7,-6) = "" ; }; # Q R P S
-like($@, $FATAL_MSG);
-is(substr($a,-5,-7), ''); # R P=Q S
-is(substr($a, 2,-7), ''); # R P Q S
-is(substr($a,-3,-7), ''); # R P Q S
-is(substr($a, 2,-5), ''); # P=R Q S
-is(substr($a,-3,-5), ''); # P=R Q S
-is(substr($a, 2,-4), ''); # P R Q S
-is(substr($a,-3,-4), ''); # P R Q S
-is(substr($a, 5,-6), ''); # R P Q=S
-is(substr($a, 5,-5), ''); # P=R Q S
-is(substr($a, 5,-3), ''); # P R Q=S
-$b = substr($a, 7,-7) ; # warn # R P S Q
-is($w--, 1);
-eval{substr($a, 7,-7) = "" ; }; # R P S Q
-like($@, $FATAL_MSG);
-$b = substr($a, 7,-5) ; # warn # P=R S Q
-is($w--, 1);
-eval{substr($a, 7,-5) = "" ; }; # P=R S Q
-like($@, $FATAL_MSG);
-$b = substr($a, 7,-3) ; # warn # P Q S Q
-is($w--, 1);
-eval{substr($a, 7,-3) = "" ; }; # P Q S Q
-like($@, $FATAL_MSG);
-$b = substr($a, 7, 0) ; # warn # P S Q=R
-is($w--, 1);
-eval{substr($a, 7, 0) = "" ; }; # P S Q=R
-like($@, $FATAL_MSG);
-
-is(substr($a,-7,2), ''); # Q P=R S
-is(substr($a,-7,4), '54'); # Q P R S
-is(substr($a,-7,7), '54321');# Q P R=S
-is(substr($a,-7,9), '54321');# Q P S R
-is(substr($a,-5,0), ''); # P=Q=R S
-is(substr($a,-5,3), '543');# P=Q R S
-is(substr($a,-5,5), '54321');# P=Q R=S
-is(substr($a,-5,7), '54321');# P=Q S R
-is(substr($a,-3,0), ''); # P Q=R S
-is(substr($a,-3,3), '321');# P Q R=S
-is(substr($a,-2,3), '21'); # P Q S R
-is(substr($a,0,-5), ''); # P=Q=R S
-is(substr($a,2,-3), ''); # P Q=R S
-is(substr($a,0,0), ''); # P=Q=R S
-is(substr($a,0,5), '54321');# P=Q R=S
-is(substr($a,0,7), '54321');# P=Q S R
-is(substr($a,2,0), ''); # P Q=R S
-is(substr($a,2,3), '321'); # P Q R=S
-is(substr($a,5,0), ''); # P Q=R=S
-is(substr($a,5,2), ''); # P Q=S R
-is(substr($a,-7,-5), ''); # Q P=R S
-is(substr($a,-7,-2), '543');# Q P R S
-is(substr($a,-5,-5), ''); # P=Q=R S
-is(substr($a,-5,-2), '543');# P=Q R S
-is(substr($a,-3,-3), ''); # P Q=R S
-is(substr($a,-3,-1), '32');# P Q R S
-
-$a = '';
-
-is(substr($a,-2,2), ''); # Q P=R=S
-is(substr($a,0,0), ''); # P=Q=R=S
-is(substr($a,0,1), ''); # P=Q=S R
-is(substr($a,-2,3), ''); # Q P=S R
-is(substr($a,-2), ''); # Q P=R=S
-is(substr($a,0), ''); # P=Q=R=S
-
-
-is(substr($a,0,-1), ''); # R P=Q=S
-$b = substr($a,-2, 0) ; # warn # Q=R P=S
-is($w--, 1);
-eval{substr($a,-2, 0) = "" ; }; # Q=R P=S
-like($@, $FATAL_MSG);
-
-$b = substr($a,-2, 1) ; # warn # Q R P=S
-is($w--, 1);
-eval{substr($a,-2, 1) = "" ; }; # Q R P=S
-like($@, $FATAL_MSG);
-
-$b = substr($a,-2,-1) ; # warn # Q R P=S
-is($w--, 1);
-eval{substr($a,-2,-1) = "" ; }; # Q R P=S
-like($@, $FATAL_MSG);
-
-$b = substr($a,-2,-2) ; # warn # Q=R P=S
-is($w--, 1);
-eval{substr($a,-2,-2) = "" ; }; # Q=R P=S
-like($@, $FATAL_MSG);
-
-$b = substr($a, 1,-2) ; # warn # R P=S Q
-is($w--, 1);
-eval{substr($a, 1,-2) = "" ; }; # R P=S Q
-like($@, $FATAL_MSG);
-
-$b = substr($a, 1, 1) ; # warn # P=S Q R
-is($w--, 1);
-eval{substr($a, 1, 1) = "" ; }; # P=S Q R
-like($@, $FATAL_MSG);
-
-$b = substr($a, 1, 0) ;# warn # P=S Q=R
-is($w--, 1);
-eval{substr($a, 1, 0) = "" ; }; # P=S Q=R
-like($@, $FATAL_MSG);
-
-$b = substr($a,1) ; # warning # P=R=S Q
-is($w--, 1);
-eval{substr($a,1) = "" ; }; # P=R=S Q
-like($@, $FATAL_MSG);
-
-$b = substr($a,-7,-6) ; # warn # Q R P S
-is($w--, 1);
-eval{substr($a,-7,-6) = "" ; }; # Q R P S
-like($@, $FATAL_MSG);
-
-my $a = 'zxcvbnm';
-substr($a,2,0) = '';
-is($a, 'zxcvbnm');
-substr($a,7,0) = '';
-is($a, 'zxcvbnm');
-substr($a,5,0) = '';
-is($a, 'zxcvbnm');
-substr($a,0,2) = 'pq';
-is($a, 'pqcvbnm');
-substr($a,2,0) = 'r';
-is($a, 'pqrcvbnm');
-substr($a,8,0) = 'asd';
-is($a, 'pqrcvbnmasd');
-substr($a,0,2) = 'iop';
-is($a, 'ioprcvbnmasd');
-substr($a,0,5) = 'fgh';
-is($a, 'fghvbnmasd');
-substr($a,3,5) = 'jkl';
-is($a, 'fghjklsd');
-substr($a,3,2) = '1234';
-is($a, 'fgh1234lsd');
-
-
-# with lexicals (and in re-entered scopes)
-for (0,1) {
- my $txt;
- unless ($_) {
- $txt = "Foo";
- substr($txt, -1) = "X";
- is($txt, "FoX");
- }
- else {
- substr($txt, 0, 1) = "X";
- is($txt, "X");
- }
-}
-
-$w = 0 ;
-# coercion of references
-{
- my $s = [];
- substr($s, 0, 1) = 'Foo';
- is (substr($s,0,7), "FooRRAY");
- is ($w,2);
- $w = 0;
-}
-
-# check no spurious warnings
-is($w, 0);
-
-# check new 4 arg replacement syntax
-$a = "abcxyz";
-$w = 0;
-is(substr($a, 0, 3, ""), "abc");
-is($a, "xyz");
-is(substr($a, 0, 0, "abc"), "");
-is($a, "abcxyz");
-is(substr($a, 3, -1, ""), "xy");
-is($a, "abcz");
-
-is(substr($a, 3, undef, "xy"), "");
-is($a, "abcxyz");
-is($w, 3);
-
-$w = 0;
-
-is(substr($a, 3, 9999999, ""), "xyz");
-is($a, "abc");
-eval{substr($a, -99, 0, "") };
-like($@, $FATAL_MSG);
-eval{substr($a, 99, 3, "") };
-like($@, $FATAL_MSG);
-
-substr($a, 0, length($a), "foo");
-is ($a, "foo");
-is ($w, 0);
-
-# using 4 arg substr as lvalue is a compile time error
-eval 'substr($a,0,0,"") = "abc"';
-like ($@, qr/Can't modify substr/);
-is ($a, "foo");
-
-$a = "abcdefgh";
-is(sub { shift }->(substr($a, 0, 4, "xxxx")), 'abcd');
-is($a, 'xxxxefgh');
-
-{
- my $y = 10;
- $y = "2" . $y;
- is ($y, 210);
-}
-
-# utf8 sanity
-{
- my $x = substr("a\x{263a}b",0);
- is(length($x), 3);
- $x = substr($x,1,1);
- is($x, "\x{263a}");
- $x = $x x 2;
- is(length($x), 2);
- substr($x,0,1) = "abcd";
- is($x, "abcd\x{263a}");
- is(length($x), 5);
- $x = reverse $x;
- is(length($x), 5);
- is($x, "\x{263a}dcba");
-
- my $z = 10;
- $z = "21\x{263a}" . $z;
- is(length($z), 5);
- is($z, "21\x{263a}10");
-}
-
-# replacement should work on magical values
-require Tie::Scalar;
-my %data;
-tie $data{'a'}, 'Tie::StdScalar'; # makes $data{'a'} magical
-$data{a} = "firstlast";
-is(substr($data{'a'}, 0, 5, ""), "first");
-is($data{'a'}, "last");
-
-# more utf8
-
-# The following two originally from Ignasi Roca.
-
-$x = "\xF1\xF2\xF3";
-substr($x, 0, 1) = "\x{100}"; # Ignasi had \x{FF}
-is(length($x), 3);
-is($x, "\x{100}\xF2\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{F3}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, 0, 1) = "\x{100}\x{FF}"; # Ignasi had \x{FF}
-is(length($x), 4);
-is($x, "\x{100}\x{FF}\xF2\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{F2}");
-is(substr($x, 3, 1), "\x{F3}");
-
-# more utf8 lval exercise
-
-$x = "\xF1\xF2\xF3";
-substr($x, 0, 2) = "\x{100}\xFF";
-is(length($x), 3);
-is($x, "\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{F3}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, 1, 1) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\xF1\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{F1}");
-is(substr($x, 1, 1), "\x{100}");
-is(substr($x, 2, 1), "\x{FF}");
-is(substr($x, 3, 1), "\x{F3}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, 2, 1) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\xF1\xF2\x{100}\xFF");
-is(substr($x, 0, 1), "\x{F1}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{100}");
-is(substr($x, 3, 1), "\x{FF}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, 3, 1) = "\x{100}\xFF";
-is(length($x), 5);
-is($x, "\xF1\xF2\xF3\x{100}\xFF");
-is(substr($x, 0, 1), "\x{F1}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{F3}");
-is(substr($x, 3, 1), "\x{100}");
-is(substr($x, 4, 1), "\x{FF}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, -1, 1) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\xF1\xF2\x{100}\xFF");
-is(substr($x, 0, 1), "\x{F1}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{100}");
-is(substr($x, 3, 1), "\x{FF}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, -1, 0) = "\x{100}\xFF";
-is(length($x), 5);
-is($x, "\xF1\xF2\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{F1}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{100}");
-is(substr($x, 3, 1), "\x{FF}");
-is(substr($x, 4, 1), "\x{F3}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, 0, -1) = "\x{100}\xFF";
-is(length($x), 3);
-is($x, "\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{F3}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, 0, -2) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\x{100}\xFF\xF2\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{F2}");
-is(substr($x, 3, 1), "\x{F3}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, 0, -3) = "\x{100}\xFF";
-is(length($x), 5);
-is($x, "\x{100}\xFF\xF1\xF2\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{F1}");
-is(substr($x, 3, 1), "\x{F2}");
-is(substr($x, 4, 1), "\x{F3}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, 1, -1) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\xF1\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{F1}");
-is(substr($x, 1, 1), "\x{100}");
-is(substr($x, 2, 1), "\x{FF}");
-is(substr($x, 3, 1), "\x{F3}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, -1, -1) = "\x{100}\xFF";
-is(length($x), 5);
-is($x, "\xF1\xF2\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{F1}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{100}");
-is(substr($x, 3, 1), "\x{FF}");
-is(substr($x, 4, 1), "\x{F3}");
-
-# And tests for already-UTF8 one
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 0, 1) = "\x{100}";
-is(length($x), 3);
-is($x, "\x{100}\xF2\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{F3}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 0, 1) = "\x{100}\x{FF}";
-is(length($x), 4);
-is($x, "\x{100}\x{FF}\xF2\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{F2}");
-is(substr($x, 3, 1), "\x{F3}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 0, 2) = "\x{100}\xFF";
-is(length($x), 3);
-is($x, "\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{F3}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 1, 1) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\x{101}\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{101}");
-is(substr($x, 1, 1), "\x{100}");
-is(substr($x, 2, 1), "\x{FF}");
-is(substr($x, 3, 1), "\x{F3}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 2, 1) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\x{101}\xF2\x{100}\xFF");
-is(substr($x, 0, 1), "\x{101}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{100}");
-is(substr($x, 3, 1), "\x{FF}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 3, 1) = "\x{100}\xFF";
-is(length($x), 5);
-is($x, "\x{101}\x{F2}\x{F3}\x{100}\xFF");
-is(substr($x, 0, 1), "\x{101}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{F3}");
-is(substr($x, 3, 1), "\x{100}");
-is(substr($x, 4, 1), "\x{FF}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, -1, 1) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\x{101}\xF2\x{100}\xFF");
-is(substr($x, 0, 1), "\x{101}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{100}");
-is(substr($x, 3, 1), "\x{FF}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, -1, 0) = "\x{100}\xFF";
-is(length($x), 5);
-is($x, "\x{101}\xF2\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{101}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{100}");
-is(substr($x, 3, 1), "\x{FF}");
-is(substr($x, 4, 1), "\x{F3}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 0, -1) = "\x{100}\xFF";
-is(length($x), 3);
-is($x, "\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{F3}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 0, -2) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\x{100}\xFF\xF2\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{F2}");
-is(substr($x, 3, 1), "\x{F3}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 0, -3) = "\x{100}\xFF";
-is(length($x), 5);
-is($x, "\x{100}\xFF\x{101}\x{F2}\x{F3}");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{101}");
-is(substr($x, 3, 1), "\x{F2}");
-is(substr($x, 4, 1), "\x{F3}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 1, -1) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\x{101}\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{101}");
-is(substr($x, 1, 1), "\x{100}");
-is(substr($x, 2, 1), "\x{FF}");
-is(substr($x, 3, 1), "\x{F3}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, -1, -1) = "\x{100}\xFF";
-is(length($x), 5);
-is($x, "\x{101}\xF2\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{101}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{100}");
-is(substr($x, 3, 1), "\x{FF}");
-is(substr($x, 4, 1), "\x{F3}");
-
-substr($x = "ab", 0, 0, "\x{100}\x{200}");
-is($x, "\x{100}\x{200}ab");
-
-substr($x = "\x{100}\x{200}", 0, 0, "ab");
-is($x, "ab\x{100}\x{200}");
-
-substr($x = "ab", 1, 0, "\x{100}\x{200}");
-is($x, "a\x{100}\x{200}b");
-
-substr($x = "\x{100}\x{200}", 1, 0, "ab");
-is($x, "\x{100}ab\x{200}");
-
-substr($x = "ab", 2, 0, "\x{100}\x{200}");
-is($x, "ab\x{100}\x{200}");
-
-substr($x = "\x{100}\x{200}", 2, 0, "ab");
-is($x, "\x{100}\x{200}ab");
-
-substr($x = "\xFFb", 0, 0, "\x{100}\x{200}");
-is($x, "\x{100}\x{200}\xFFb");
-
-substr($x = "\x{100}\x{200}", 0, 0, "\xFFb");
-is($x, "\xFFb\x{100}\x{200}");
-
-substr($x = "\xFFb", 1, 0, "\x{100}\x{200}");
-is($x, "\xFF\x{100}\x{200}b");
-
-substr($x = "\x{100}\x{200}", 1, 0, "\xFFb");
-is($x, "\x{100}\xFFb\x{200}");
-
-substr($x = "\xFFb", 2, 0, "\x{100}\x{200}");
-is($x, "\xFFb\x{100}\x{200}");
-
-substr($x = "\x{100}\x{200}", 2, 0, "\xFFb");
-is($x, "\x{100}\x{200}\xFFb");
-
-# [perl #20933]
-{
- my $s = "ab";
- my @r;
- $r[$_] = \ substr $s, $_, 1 for (0, 1);
- is(join("", map { $$_ } @r), "ab");
-}
-
-# [perl #23207]
-{
- sub ss {
- substr($_[0],0,1) ^= substr($_[0],1,1) ^=
- substr($_[0],0,1) ^= substr($_[0],1,1);
- }
- my $x = my $y = 'AB'; ss $x; ss $y;
- is($x, $y);
-}
-
-# [perl #24605]
-{
- my $x = "0123456789\x{500}";
- my $y = substr $x, 4;
- is(substr($x, 7, 1), "7");
-}
-
-# multiple assignments to lvalue [perl #24346]
-{
- my $x = "abcdef";
- for (substr($x,1,3)) {
- is($_, 'bcd');
- $_ = 'XX';
- is($_, 'XX');
- is($x, 'aXXef');
- $_ = "\xFF";
- is($_, "\xFF");
- is($x, "a\xFFef");
- $_ = "\xF1\xF2\xF3\xF4\xF5\xF6";
- is($_, "\xF1\xF2\xF3\xF4\xF5\xF6");
- is($x, "a\xF1\xF2\xF3\xF4\xF5\xF6ef");
- $_ = 'YYYY';
- is($_, 'YYYY');
- is($x, 'aYYYYef');
- }
- $x = "abcdef";
- for (substr($x,1)) {
- is($_, 'bcdef');
- $_ = 'XX';
- is($_, 'XX');
- is($x, 'aXX');
- $x .= "frompswiggle";
- is $_, "XXfrompswiggle";
- }
- $x = "abcdef";
- for (substr($x,1,-1)) {
- is($_, 'bcde');
- $_ = 'XX';
- is($_, 'XX');
- is($x, 'aXXf');
- $x .= "frompswiggle";
- is $_, "XXffrompswiggl";
- }
- $x = "abcdef";
- for (substr($x,-5,3)) {
- is($_, 'bcd');
- $_ = 'XX'; # now $_ is substr($x, -4, 2)
- is($_, 'XX');
- is($x, 'aXXef');
- $x .= "frompswiggle";
- is $_, "gg";
- }
- $x = "abcdef";
- for (substr($x,-5)) {
- is($_, 'bcdef');
- $_ = 'XX'; # now substr($x, -2)
- is($_, 'XX');
- is($x, 'aXX');
- $x .= "frompswiggle";
- is $_, "le";
- }
- $x = "abcdef";
- for (substr($x,-5,-1)) {
- is($_, 'bcde');
- $_ = 'XX'; # now substr($x, -3, -1)
- is($_, 'XX');
- is($x, 'aXXf');
- $x .= "frompswiggle";
- is $_, "gl";
- }
-}
-
-# [perl #24200] string corruption with lvalue sub
-
-{
- sub bar: lvalue { substr $krunch, 0 }
- bar = "XXX";
- is(bar, 'XXX');
- $krunch = '123456789';
- is(bar, '123456789');
-}
-
-# [perl #29149]
-{
- my $text = "0123456789\xED ";
- utf8::upgrade($text);
- my $pos = 5;
- pos($text) = $pos;
- my $a = substr($text, $pos, $pos);
- is(substr($text,$pos,1), $pos);
-
-}
-
-# [perl #23765]
-{
- my $a = pack("C", 0xbf);
- substr($a, -1) &= chr(0xfeff);
- is($a, "\xbf");
-}
-
-# [perl #34976] incorrect caching of utf8 substr length
-{
- my $a = "abcd\x{100}";
- is(substr($a,1,2), 'bc');
- is(substr($a,1,1), 'b');
-}
-
-# [perl #62646] offsets exceeding 32 bits on 64-bit system
-SKIP: {
- skip("32-bit system", 24) unless ~0 > 0xffffffff;
- my $a = "abc";
- my $s;
- my $r;
-
- utf8::downgrade($a);
- for (1..2) {
- $w = 0;
- $r = substr($a, 0xffffffff, 1);
- is($r, undef);
- is($w, 1);
-
- $w = 0;
- $r = substr($a, 0xffffffff+1, 1);
- is($r, undef);
- is($w, 1);
-
- $w = 0;
- ok( !eval { $r = substr($s=$a, 0xffffffff, 1, "_"); 1 } );
- is($r, undef);
- is($s, $a);
- is($w, 0);
-
- $w = 0;
- ok( !eval { $r = substr($s=$a, 0xffffffff+1, 1, "_"); 1 } );
- is($r, undef);
- is($s, $a);
- is($w, 0);
-
- utf8::upgrade($a);
- }
-}
-
-# [perl #77692] UTF8 cache not being reset when TARG is reused
-ok eval {
- local ${^UTF8CACHE} = -1;
- for my $i (0..1)
- {
- my $dummy = length(substr("\x{100}",0,$i));
- }
- 1
-}, 'UTF8 cache is reset when TARG is reused [perl #77692]';
-
-{
- use utf8;
- use open qw( :utf8 :std );
- no warnings 'once';
-
- my $t = "";
- substr $t, 0, 0, *ワルド;
- is($t, "*main::ワルド", "substr works on UTF-8 globs");
-
- $t = "The World!";
- substr $t, 0, 9, *ザ::ワルド;
- is($t, "*ザ::ワルド!", "substr works on a UTF-8 glob + stash");
-}
-
-{
- my $x = *foo;
- my $y = \substr *foo, 0, 0;
- is ref \$x, 'GLOB', '\substr does not coerce its glob arg just yet';
- $x = \"foo";
- $y = \substr *foo, 0, 0;
- is ref \$x, 'REF', '\substr does not coerce its ref arg just yet';
-}
-
-# Test that UTF8-ness of magic var changing does not confuse substr lvalue
-# assignment.
-# We use overloading for our magic var, but a typeglob would work, too.
-package o {
- use overload '""' => sub { ++our $count; $_[0][0] }
-}
-my $refee = bless ["\x{100}a"], o::;
-my $substr = \substr $refee, -2; # UTF8 flag still off for $$substr.
-$$substr = "b"; # UTF8 flag turns on when setsubstr
-is $refee, "b", # magic stringifies $$substr.
- 'substr lvalue assignment when stringification turns on UTF8ness';
-
-# Test that changing UTF8-ness does not confuse 4-arg substr.
-$refee = bless [], "\x{100}a";
-# stringify without returning on UTF8 flag on $refee:
-my $string = $refee; $string = "$string";
-substr $refee, 0, 0, "\xff";
-is $refee, "\xff$string",
- '4-arg substr with target UTF8ness turning on when stringified';
-$refee = bless [], "\x{100}";
-() = "$refee"; # UTF8 flag now on
-bless $refee, "\xff";
-$string = $refee; $string = "$string";
-substr $refee, 0, 0, "\xff";
-is $refee, "\xff$string",
- '4-arg substr with target UTF8ness turning off when stringified';
-
-# Overload count
-$refee = bless ["foo"], o::;
-$o::count = 0;
-substr $refee, 0, 0, "";
-is $o::count, 1, '4-arg substr calls overloading once on the target';
-$refee = bless ["\x{100}"], o::;
-() = "$refee"; # turn UTF8 flag on
-$o::count = 0;
-() = substr $refee, 0;
-is $o::count, 1, 'rvalue substr calls overloading once on utf8 target';
-$o::count = 0;
-$refee = "";
-${\substr $refee, 0} = bless ["\x{100}"], o::;
-is $o::count, 1, 'assigning utf8 overload to substr lvalue calls ovld 1ce';
-
-# [perl #7678] core dump with substr reference and localisation
-{$b="abcde"; local $k; *k=\substr($b, 2, 1);}
-
-} # sub run_tests - put tests above this line that can run in threads
-
-
-my $destroyed;
-{ package Class; DESTROY { ++$destroyed; } }
-
-$destroyed = 0;
-{
- my $x = '';
- substr($x,0,1) = "";
- $x = bless({}, 'Class');
-}
-is($destroyed, 1, 'Timely scalar destruction with lvalue substr');
-
-{
- my $result_3363;
- sub a_3363 {
- my ($word, $replace) = @_;
- my $ref = \substr($word, 0, 1);
- $$ref = $replace;
- if ($replace eq "b") {
- $result_3363 = $word;
- } else {
- a_3363($word, "b");
- }
- }
- a_3363($_, "v") for "test";
-
- is($result_3363, "best", "ref-to-substr retains lvalue-ness under recursion [perl #3363]");
-}
Deleted: trunk/contrib/perl/t/op/turkish.t
===================================================================
--- trunk/contrib/perl/t/op/turkish.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/turkish.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,100 +0,0 @@
-# Verifies that can implement Turkish casing as defined by Unicode 5.2.
-
-use Config;
-
-BEGIN {
- chdir 't';
- @INC = '../lib';
- require './test.pl';
-}
-
-use subs qw(lc lcfirst uc ucfirst);
-
-sub uc($) {
- my $string = shift;
- utf8::upgrade($string);
- return CORE::uc($string);
-}
-
-sub ucfirst($) {
- my $string = shift;
- utf8::upgrade($string);
- return CORE::ucfirst($string);
-}
-
-sub lc($) {
- my $string = shift;
- utf8::upgrade($string);
-
- # Unless an I is before a dot_above, it turns into a dotless i.
- $string =~ s/I (?! [^\p{ccc=0}\p{ccc=Above}]* \x{0307} )/\x{131}/gx;
-
- # But when the I is followed by a dot_above, remove the dot_above so
- # the end result will be i.
- $string =~ s/I ([^\p{ccc=0}\p{ccc=Above}]* ) \x{0307}/i$1/gx;
- return CORE::lc($string);
-}
-
-sub lcfirst($) {
- my $string = shift;
- utf8::upgrade($string);
-
- # Unless an I is before a dot_above, it turns into a dotless i.
- $string =~ s/^I (?! [^\p{ccc=0}\p{ccc=Above}]* \x{0307} )/\x{131}/x;
-
- # But when the I is followed by a dot_above, remove the dot_above so
- # the end result will be i.
- $string =~ s/^I ([^\p{ccc=0}\p{ccc=Above}]* ) \x{0307}/i$1/x;
- return CORE::lcfirst($string);
-}
-
-plan tests => 22;
-
-my $map_directory = "../lib/unicore/To";
-my $upper = "$map_directory/Upper.pl";
-my $lower = "$map_directory/Lower.pl";
-my $title = "$map_directory/Title.pl";
-
-sub ToUpper {
- my $official = do $upper;
- $utf8::ToSpecUpper{'i'} = "\x{0130}";
- return $official;
-}
-
-sub ToTitle {
- my $official = do $title;
- $utf8::ToSpecTitle{'i'} = "\x{0130}";
- return $official;
-}
-
-sub ToLower {
- my $official = do $lower;
- $utf8::ToSpecLower{"\xc4\xb0"} = "i";
- return $official;
-}
-
-is(uc("\x{DF}\x{DF}"), "SSSS", "Verify that uc of non-overridden multi-char works");
-is(uc("aa"), "AA", "Verify that uc of non-overridden ASCII works");
-is(uc("\x{101}\x{101}"), "\x{100}\x{100}", "Verify that uc of non-overridden utf8 works");
-is(uc("ii"), "\x{130}\x{130}", "Verify uc('ii') eq \\x{130}\\x{130}");
-
-is(ucfirst("\x{DF}\x{DF}"), "Ss\x{DF}", "Verify that ucfirst of non-overridden multi-char works");
-is(ucfirst("\x{101}\x{101}"), "\x{100}\x{101}", "Verify that ucfirst of non-overridden utf8 works");
-is(ucfirst("aa"), "Aa", "Verify that ucfirst of non-overridden ASCII works");
-is(ucfirst("ii"), "\x{130}i", "Verify ucfirst('ii') eq \"\\x{130}i\"");
-
-is(lc("AA"), "aa", "Verify that lc of non-overridden ASCII works");
-is(lc("\x{C0}\x{C0}"), "\x{E0}\x{E0}", "Verify that lc of non-overridden latin1 works");
-is(lc("\x{0178}\x{0178}"), "\x{FF}\x{FF}", "Verify that lc of non-overridden utf8 works");
-is(lc("II"), "\x{131}\x{131}", "Verify that lc('I') eq \\x{131}");
-is(lc("IG\x{0307}IG\x{0307}"), "\x{131}g\x{0307}\x{131}g\x{0307}", "Verify that lc(\"I...\\x{0307}\") eq \"\\x{131}...\\x{0307}\"");
-is(lc("I\x{0307}I\x{0307}"), "ii", "Verify that lc(\"I\\x{0307}\") removes the \\x{0307}, leaving 'i'");
-is(lc("\x{130}\x{130}"), "ii", "Verify that lc(\"\\x{130}\\x{130}\") eq 'ii'");
-
-is(lcfirst("AA"), "aA", "Verify that lcfirst of non-overridden ASCII works");
-is(lcfirst("\x{C0}\x{C0}"), "\x{E0}\x{C0}", "Verify that lcfirst of non-overridden latin1 works");
-is(lcfirst("\x{0178}\x{0178}"), "\x{FF}\x{0178}", "Verify that lcfirst of non-overridden utf8 works");
-is(lcfirst("I"), "\x{131}", "Verify that lcfirst('II') eq \"\\x{131}I\"");
-is(lcfirst("IG\x{0307}"), "\x{131}G\x{0307}", "Verify that lcfirst(\"I...\\x{0307}\") eq \"\\x{131}...\\x{0307}\"");
-is(lcfirst("I\x{0307}I\x{0307}"), "iI\x{0307}", "Verify that lcfirst(\"I\\x{0307}I\\x{0307}\") removes the first \\x{0307}, leaving 'iI\\x{0307}'");
-is(lcfirst("\x{130}\x{130}"), "i\x{130}", "Verify that lcfirst(\"\\x{130}\\x{130}\") eq \"i\\x{130}\"");
Deleted: trunk/contrib/perl/t/op/while_readdir.t
===================================================================
--- trunk/contrib/perl/t/op/while_readdir.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/op/while_readdir.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,180 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require './test.pl';
-}
-
-use strict;
-use warnings;
-
-plan 10;
-
-# Need to run this in a quiet private directory as it assumes that it can read
-# the contents twice and get the same result.
-my $tempdir = tempfile;
-
-mkdir $tempdir, 0700 or die "Can't mkdir '$tempdir': $!";
-chdir $tempdir or die die "Can't chdir '$tempdir': $!";
-
-my $cleanup = 1;
-my %tempfiles;
-
-END {
- if ($cleanup) {
- foreach my $file (keys %tempfiles) {
- # We only wrote each of these once so 1 delete should work:
- if (unlink $file) {
- warn "unlink tempfile '$file' passed but it's still there"
- if -e $file;
- } else {
- warn "Couldn't unlink tempfile '$file': $!";
- }
- }
- chdir '..' or die "Couldn't chdir .. for cleanup: $!";
- rmdir $tempdir or die "Couldn't unlink tempdir '$tempdir': $!";
- }
-}
-
-# This is intentionally not random (per run), but intentionally will try to
-# give different file names for different people running this test.
-srand $< * $];
-
-my @chars = ('A' .. 'Z', 'a' .. 'z', 0 .. 9);
-
-sub make_file {
- my $name = shift;
-
- return if $tempfiles{$name}++;
-
- print "# Writing to $name in $tempdir\n";
-
- open my $fh, '>', $name or die "Can't open '$name' for writing: $!\n";
- print $fh <<'FILE0';
-This file is here for testing
-
-while(readdir $dir){...}
-... while readdir $dir
-
-etc
-FILE0
- close $fh or die "Can't close '$name': $!";
-}
-
-sub make_some_files {
- for (1..int rand 10) {
- my $name;
- $name .= $chars[rand $#chars] for 1..int(1 + rand 5);
- make_file($name);
- }
-}
-
-make_some_files();
-make_file('0');
-make_some_files();
-
-ok(-f '0', "'0' file is here");
-
-opendir my $dirhandle, '.'
- or die "Failed test: unable to open directory: $!\n";
-
-my @dir = readdir $dirhandle;
-rewinddir $dirhandle;
-
-{
- my @list;
- while(readdir $dirhandle){
- push @list, $_;
- }
- ok( eq_array( \@dir, \@list ), 'while(readdir){push}' );
- rewinddir $dirhandle;
-}
-
-{
- my @list;
- push @list, $_ while readdir $dirhandle;
- ok( eq_array( \@dir, \@list ), 'push while readdir' );
- rewinddir $dirhandle;
-}
-
-{
- my $tmp;
- my @list;
- push @list, $tmp while $tmp = readdir $dirhandle;
- ok( eq_array( \@dir, \@list ), 'push $dir while $dir = readdir' );
- rewinddir $dirhandle;
-}
-
-{
- my @list;
- while( my $dir = readdir $dirhandle){
- push @list, $dir;
- }
- ok( eq_array( \@dir, \@list ), 'while($dir=readdir){push}' );
- rewinddir $dirhandle;
-}
-
-
-{
- my @list;
- my $sub = sub{
- push @list, $_;
- };
- $sub->($_) while readdir $dirhandle;
- ok( eq_array( \@dir, \@list ), '$sub->($_) while readdir' );
- rewinddir $dirhandle;
-}
-
-{
- my $works = 0;
- while(readdir $dirhandle){
- $_ =~ s/\.$// if defined $_ && $^O eq 'VMS'; # may have zero-length extension
- if( defined $_ && $_ eq '0'){
- $works = 1;
- last;
- }
- }
- ok( $works, 'while(readdir){} with file named "0"' );
- rewinddir $dirhandle;
-}
-
-{
- my $works = 0;
- my $sub = sub{
- $_ =~ s/\.$// if defined $_ && $^O eq 'VMS'; # may have zero-length extension
- if( defined $_ && $_ eq '0' ){
- $works = 1;
- }
- };
- $sub->($_) while readdir $dirhandle;
- ok( $works, '$sub->($_) while readdir; with file named "0"' );
- rewinddir $dirhandle;
-}
-
-{
- my $works = 0;
- while( my $dir = readdir $dirhandle ){
- $dir =~ s/\.$// if defined $dir && $^O eq 'VMS'; # may have zero-length extension
- if( defined $dir && $dir eq '0'){
- $works = 1;
- last;
- }
- }
- ok( $works, 'while($dir=readdir){} with file named "0"');
- rewinddir $dirhandle;
-}
-
-{
- my $tmp;
- my $ok;
- my @list;
- while( $tmp = readdir $dirhandle ){
- $tmp =~ s/\.$// if defined $tmp && $^O eq 'VMS'; # may have zero-length extension
- last if defined($tmp)&& !$tmp && ($ok=1)
- }
- ok( $ok, '$dir while $dir = readdir; with file named "0"' );
- rewinddir $dirhandle;
-}
-
-closedir $dirhandle;
Deleted: trunk/contrib/perl/t/porting/buildtoc.t
===================================================================
--- trunk/contrib/perl/t/porting/buildtoc.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/porting/buildtoc.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,15 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir '..' unless -d 't';
- unshift @INC, 'lib';
-}
-
-use strict;
-require 't/test.pl';
-
-my $result = runperl(switches => ['-f', '-Ilib'],
- progfile => 'pod/buildtoc',
- args => ['--build-toc', '-q', '--test', '--build-all']);
-
-print $result;
Deleted: trunk/contrib/perl/t/re/substr.t
===================================================================
--- trunk/contrib/perl/t/re/substr.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/re/substr.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,747 +0,0 @@
-#!./perl
-
-#P = start of string Q = start of substr R = end of substr S = end of string
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-use warnings ;
-no warnings 'deprecated';
-
-$a = 'abcdefxyz';
-$SIG{__WARN__} = sub {
- if ($_[0] =~ /^substr outside of string/) {
- $w++;
- } elsif ($_[0] =~ /^Attempt to use reference as lvalue in substr/) {
- $w += 2;
- } elsif ($_[0] =~ /^Use of uninitialized value/) {
- $w += 3;
- } else {
- warn $_[0];
- }
-};
-
-BEGIN { require './test.pl'; }
-
-plan(362);
-
-run_tests() unless caller;
-
-my $krunch = "a";
-
-sub run_tests {
-
-$FATAL_MSG = qr/^substr outside of string/;
-
-is(substr($a,0,3), 'abc'); # P=Q R S
-is(substr($a,3,3), 'def'); # P Q R S
-is(substr($a,6,999), 'xyz'); # P Q S R
-$b = substr($a,999,999) ; # warn # P R Q S
-is ($w--, 1);
-eval{substr($a,999,999) = "" ; };# P R Q S
-like ($@, $FATAL_MSG);
-is(substr($a,0,-6), 'abc'); # P=Q R S
-is(substr($a,-3,1), 'x'); # P Q R S
-
-$[ = 1;
-
-is(substr($a,1,3), 'abc' ); # P=Q R S
-is(substr($a,4,3), 'def' ); # P Q R S
-is(substr($a,7,999), 'xyz');# P Q S R
-$b = substr($a,999,999) ; # warn # P R Q S
-is($w--, 1);
-eval{substr($a,999,999) = "" ; } ; # P R Q S
-like ($@, $FATAL_MSG);
-is(substr($a,1,-6), 'abc' );# P=Q R S
-is(substr($a,-3,1), 'x' ); # P Q R S
-
-$[ = 0;
-
-substr($a,3,3) = 'XYZ';
-is($a, 'abcXYZxyz' );
-substr($a,0,2) = '';
-is($a, 'cXYZxyz' );
-substr($a,0,0) = 'ab';
-is($a, 'abcXYZxyz' );
-substr($a,0,0) = '12345678';
-is($a, '12345678abcXYZxyz' );
-substr($a,-3,3) = 'def';
-is($a, '12345678abcXYZdef');
-substr($a,-3,3) = '<';
-is($a, '12345678abcXYZ<' );
-substr($a,-1,1) = '12345678';
-is($a, '12345678abcXYZ12345678' );
-
-$a = 'abcdefxyz';
-
-is(substr($a,6), 'xyz' ); # P Q R=S
-is(substr($a,-3), 'xyz' ); # P Q R=S
-$b = substr($a,999,999) ; # warning # P R=S Q
-is($w--, 1);
-eval{substr($a,999,999) = "" ; } ; # P R=S Q
-like($@, $FATAL_MSG);
-is(substr($a,0), 'abcdefxyz'); # P=Q R=S
-is(substr($a,9), ''); # P Q=R=S
-is(substr($a,-11), 'abcdefxyz'); # Q P R=S
-is(substr($a,-9), 'abcdefxyz'); # P=Q R=S
-
-$a = '54321';
-
-$b = substr($a,-7, 1) ; # warn # Q R P S
-is($w--, 1);
-eval{substr($a,-7, 1) = "" ; }; # Q R P S
-like($@, $FATAL_MSG);
-$b = substr($a,-7,-6) ; # warn # Q R P S
-is($w--, 1);
-eval{substr($a,-7,-6) = "" ; }; # Q R P S
-like($@, $FATAL_MSG);
-is(substr($a,-5,-7), ''); # R P=Q S
-is(substr($a, 2,-7), ''); # R P Q S
-is(substr($a,-3,-7), ''); # R P Q S
-is(substr($a, 2,-5), ''); # P=R Q S
-is(substr($a,-3,-5), ''); # P=R Q S
-is(substr($a, 2,-4), ''); # P R Q S
-is(substr($a,-3,-4), ''); # P R Q S
-is(substr($a, 5,-6), ''); # R P Q=S
-is(substr($a, 5,-5), ''); # P=R Q S
-is(substr($a, 5,-3), ''); # P R Q=S
-$b = substr($a, 7,-7) ; # warn # R P S Q
-is($w--, 1);
-eval{substr($a, 7,-7) = "" ; }; # R P S Q
-like($@, $FATAL_MSG);
-$b = substr($a, 7,-5) ; # warn # P=R S Q
-is($w--, 1);
-eval{substr($a, 7,-5) = "" ; }; # P=R S Q
-like($@, $FATAL_MSG);
-$b = substr($a, 7,-3) ; # warn # P Q S Q
-is($w--, 1);
-eval{substr($a, 7,-3) = "" ; }; # P Q S Q
-like($@, $FATAL_MSG);
-$b = substr($a, 7, 0) ; # warn # P S Q=R
-is($w--, 1);
-eval{substr($a, 7, 0) = "" ; }; # P S Q=R
-like($@, $FATAL_MSG);
-
-is(substr($a,-7,2), ''); # Q P=R S
-is(substr($a,-7,4), '54'); # Q P R S
-is(substr($a,-7,7), '54321');# Q P R=S
-is(substr($a,-7,9), '54321');# Q P S R
-is(substr($a,-5,0), ''); # P=Q=R S
-is(substr($a,-5,3), '543');# P=Q R S
-is(substr($a,-5,5), '54321');# P=Q R=S
-is(substr($a,-5,7), '54321');# P=Q S R
-is(substr($a,-3,0), ''); # P Q=R S
-is(substr($a,-3,3), '321');# P Q R=S
-is(substr($a,-2,3), '21'); # P Q S R
-is(substr($a,0,-5), ''); # P=Q=R S
-is(substr($a,2,-3), ''); # P Q=R S
-is(substr($a,0,0), ''); # P=Q=R S
-is(substr($a,0,5), '54321');# P=Q R=S
-is(substr($a,0,7), '54321');# P=Q S R
-is(substr($a,2,0), ''); # P Q=R S
-is(substr($a,2,3), '321'); # P Q R=S
-is(substr($a,5,0), ''); # P Q=R=S
-is(substr($a,5,2), ''); # P Q=S R
-is(substr($a,-7,-5), ''); # Q P=R S
-is(substr($a,-7,-2), '543');# Q P R S
-is(substr($a,-5,-5), ''); # P=Q=R S
-is(substr($a,-5,-2), '543');# P=Q R S
-is(substr($a,-3,-3), ''); # P Q=R S
-is(substr($a,-3,-1), '32');# P Q R S
-
-$a = '';
-
-is(substr($a,-2,2), ''); # Q P=R=S
-is(substr($a,0,0), ''); # P=Q=R=S
-is(substr($a,0,1), ''); # P=Q=S R
-is(substr($a,-2,3), ''); # Q P=S R
-is(substr($a,-2), ''); # Q P=R=S
-is(substr($a,0), ''); # P=Q=R=S
-
-
-is(substr($a,0,-1), ''); # R P=Q=S
-$b = substr($a,-2, 0) ; # warn # Q=R P=S
-is($w--, 1);
-eval{substr($a,-2, 0) = "" ; }; # Q=R P=S
-like($@, $FATAL_MSG);
-
-$b = substr($a,-2, 1) ; # warn # Q R P=S
-is($w--, 1);
-eval{substr($a,-2, 1) = "" ; }; # Q R P=S
-like($@, $FATAL_MSG);
-
-$b = substr($a,-2,-1) ; # warn # Q R P=S
-is($w--, 1);
-eval{substr($a,-2,-1) = "" ; }; # Q R P=S
-like($@, $FATAL_MSG);
-
-$b = substr($a,-2,-2) ; # warn # Q=R P=S
-is($w--, 1);
-eval{substr($a,-2,-2) = "" ; }; # Q=R P=S
-like($@, $FATAL_MSG);
-
-$b = substr($a, 1,-2) ; # warn # R P=S Q
-is($w--, 1);
-eval{substr($a, 1,-2) = "" ; }; # R P=S Q
-like($@, $FATAL_MSG);
-
-$b = substr($a, 1, 1) ; # warn # P=S Q R
-is($w--, 1);
-eval{substr($a, 1, 1) = "" ; }; # P=S Q R
-like($@, $FATAL_MSG);
-
-$b = substr($a, 1, 0) ;# warn # P=S Q=R
-is($w--, 1);
-eval{substr($a, 1, 0) = "" ; }; # P=S Q=R
-like($@, $FATAL_MSG);
-
-$b = substr($a,1) ; # warning # P=R=S Q
-is($w--, 1);
-eval{substr($a,1) = "" ; }; # P=R=S Q
-like($@, $FATAL_MSG);
-
-$b = substr($a,-7,-6) ; # warn # Q R P S
-is($w--, 1);
-eval{substr($a,-7,-6) = "" ; }; # Q R P S
-like($@, $FATAL_MSG);
-
-my $a = 'zxcvbnm';
-substr($a,2,0) = '';
-is($a, 'zxcvbnm');
-substr($a,7,0) = '';
-is($a, 'zxcvbnm');
-substr($a,5,0) = '';
-is($a, 'zxcvbnm');
-substr($a,0,2) = 'pq';
-is($a, 'pqcvbnm');
-substr($a,2,0) = 'r';
-is($a, 'pqrcvbnm');
-substr($a,8,0) = 'asd';
-is($a, 'pqrcvbnmasd');
-substr($a,0,2) = 'iop';
-is($a, 'ioprcvbnmasd');
-substr($a,0,5) = 'fgh';
-is($a, 'fghvbnmasd');
-substr($a,3,5) = 'jkl';
-is($a, 'fghjklsd');
-substr($a,3,2) = '1234';
-is($a, 'fgh1234lsd');
-
-
-# with lexicals (and in re-entered scopes)
-for (0,1) {
- my $txt;
- unless ($_) {
- $txt = "Foo";
- substr($txt, -1) = "X";
- is($txt, "FoX");
- }
- else {
- substr($txt, 0, 1) = "X";
- is($txt, "X");
- }
-}
-
-$w = 0 ;
-# coercion of references
-{
- my $s = [];
- substr($s, 0, 1) = 'Foo';
- is (substr($s,0,7), "FooRRAY");
- is ($w,2);
- $w = 0;
-}
-
-# check no spurious warnings
-is($w, 0);
-
-# check new 4 arg replacement syntax
-$a = "abcxyz";
-$w = 0;
-is(substr($a, 0, 3, ""), "abc");
-is($a, "xyz");
-is(substr($a, 0, 0, "abc"), "");
-is($a, "abcxyz");
-is(substr($a, 3, -1, ""), "xy");
-is($a, "abcz");
-
-is(substr($a, 3, undef, "xy"), "");
-is($a, "abcxyz");
-is($w, 3);
-
-$w = 0;
-
-is(substr($a, 3, 9999999, ""), "xyz");
-is($a, "abc");
-eval{substr($a, -99, 0, "") };
-like($@, $FATAL_MSG);
-eval{substr($a, 99, 3, "") };
-like($@, $FATAL_MSG);
-
-substr($a, 0, length($a), "foo");
-is ($a, "foo");
-is ($w, 0);
-
-# using 4 arg substr as lvalue is a compile time error
-eval 'substr($a,0,0,"") = "abc"';
-like ($@, qr/Can't modify substr/);
-is ($a, "foo");
-
-$a = "abcdefgh";
-is(sub { shift }->(substr($a, 0, 4, "xxxx")), 'abcd');
-is($a, 'xxxxefgh');
-
-{
- my $y = 10;
- $y = "2" . $y;
- is ($y, 210);
-}
-
-# utf8 sanity
-{
- my $x = substr("a\x{263a}b",0);
- is(length($x), 3);
- $x = substr($x,1,1);
- is($x, "\x{263a}");
- $x = $x x 2;
- is(length($x), 2);
- substr($x,0,1) = "abcd";
- is($x, "abcd\x{263a}");
- is(length($x), 5);
- $x = reverse $x;
- is(length($x), 5);
- is($x, "\x{263a}dcba");
-
- my $z = 10;
- $z = "21\x{263a}" . $z;
- is(length($z), 5);
- is($z, "21\x{263a}10");
-}
-
-# replacement should work on magical values
-require Tie::Scalar;
-my %data;
-tie $data{'a'}, 'Tie::StdScalar'; # makes $data{'a'} magical
-$data{a} = "firstlast";
-is(substr($data{'a'}, 0, 5, ""), "first");
-is($data{'a'}, "last");
-
-# more utf8
-
-# The following two originally from Ignasi Roca.
-
-$x = "\xF1\xF2\xF3";
-substr($x, 0, 1) = "\x{100}"; # Ignasi had \x{FF}
-is(length($x), 3);
-is($x, "\x{100}\xF2\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{F3}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, 0, 1) = "\x{100}\x{FF}"; # Ignasi had \x{FF}
-is(length($x), 4);
-is($x, "\x{100}\x{FF}\xF2\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{F2}");
-is(substr($x, 3, 1), "\x{F3}");
-
-# more utf8 lval exercise
-
-$x = "\xF1\xF2\xF3";
-substr($x, 0, 2) = "\x{100}\xFF";
-is(length($x), 3);
-is($x, "\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{F3}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, 1, 1) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\xF1\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{F1}");
-is(substr($x, 1, 1), "\x{100}");
-is(substr($x, 2, 1), "\x{FF}");
-is(substr($x, 3, 1), "\x{F3}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, 2, 1) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\xF1\xF2\x{100}\xFF");
-is(substr($x, 0, 1), "\x{F1}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{100}");
-is(substr($x, 3, 1), "\x{FF}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, 3, 1) = "\x{100}\xFF";
-is(length($x), 5);
-is($x, "\xF1\xF2\xF3\x{100}\xFF");
-is(substr($x, 0, 1), "\x{F1}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{F3}");
-is(substr($x, 3, 1), "\x{100}");
-is(substr($x, 4, 1), "\x{FF}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, -1, 1) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\xF1\xF2\x{100}\xFF");
-is(substr($x, 0, 1), "\x{F1}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{100}");
-is(substr($x, 3, 1), "\x{FF}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, -1, 0) = "\x{100}\xFF";
-is(length($x), 5);
-is($x, "\xF1\xF2\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{F1}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{100}");
-is(substr($x, 3, 1), "\x{FF}");
-is(substr($x, 4, 1), "\x{F3}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, 0, -1) = "\x{100}\xFF";
-is(length($x), 3);
-is($x, "\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{F3}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, 0, -2) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\x{100}\xFF\xF2\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{F2}");
-is(substr($x, 3, 1), "\x{F3}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, 0, -3) = "\x{100}\xFF";
-is(length($x), 5);
-is($x, "\x{100}\xFF\xF1\xF2\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{F1}");
-is(substr($x, 3, 1), "\x{F2}");
-is(substr($x, 4, 1), "\x{F3}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, 1, -1) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\xF1\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{F1}");
-is(substr($x, 1, 1), "\x{100}");
-is(substr($x, 2, 1), "\x{FF}");
-is(substr($x, 3, 1), "\x{F3}");
-
-$x = "\xF1\xF2\xF3";
-substr($x, -1, -1) = "\x{100}\xFF";
-is(length($x), 5);
-is($x, "\xF1\xF2\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{F1}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{100}");
-is(substr($x, 3, 1), "\x{FF}");
-is(substr($x, 4, 1), "\x{F3}");
-
-# And tests for already-UTF8 one
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 0, 1) = "\x{100}";
-is(length($x), 3);
-is($x, "\x{100}\xF2\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{F3}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 0, 1) = "\x{100}\x{FF}";
-is(length($x), 4);
-is($x, "\x{100}\x{FF}\xF2\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{F2}");
-is(substr($x, 3, 1), "\x{F3}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 0, 2) = "\x{100}\xFF";
-is(length($x), 3);
-is($x, "\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{F3}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 1, 1) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\x{101}\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{101}");
-is(substr($x, 1, 1), "\x{100}");
-is(substr($x, 2, 1), "\x{FF}");
-is(substr($x, 3, 1), "\x{F3}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 2, 1) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\x{101}\xF2\x{100}\xFF");
-is(substr($x, 0, 1), "\x{101}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{100}");
-is(substr($x, 3, 1), "\x{FF}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 3, 1) = "\x{100}\xFF";
-is(length($x), 5);
-is($x, "\x{101}\x{F2}\x{F3}\x{100}\xFF");
-is(substr($x, 0, 1), "\x{101}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{F3}");
-is(substr($x, 3, 1), "\x{100}");
-is(substr($x, 4, 1), "\x{FF}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, -1, 1) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\x{101}\xF2\x{100}\xFF");
-is(substr($x, 0, 1), "\x{101}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{100}");
-is(substr($x, 3, 1), "\x{FF}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, -1, 0) = "\x{100}\xFF";
-is(length($x), 5);
-is($x, "\x{101}\xF2\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{101}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{100}");
-is(substr($x, 3, 1), "\x{FF}");
-is(substr($x, 4, 1), "\x{F3}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 0, -1) = "\x{100}\xFF";
-is(length($x), 3);
-is($x, "\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{F3}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 0, -2) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\x{100}\xFF\xF2\xF3");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{F2}");
-is(substr($x, 3, 1), "\x{F3}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 0, -3) = "\x{100}\xFF";
-is(length($x), 5);
-is($x, "\x{100}\xFF\x{101}\x{F2}\x{F3}");
-is(substr($x, 0, 1), "\x{100}");
-is(substr($x, 1, 1), "\x{FF}");
-is(substr($x, 2, 1), "\x{101}");
-is(substr($x, 3, 1), "\x{F2}");
-is(substr($x, 4, 1), "\x{F3}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 1, -1) = "\x{100}\xFF";
-is(length($x), 4);
-is($x, "\x{101}\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{101}");
-is(substr($x, 1, 1), "\x{100}");
-is(substr($x, 2, 1), "\x{FF}");
-is(substr($x, 3, 1), "\x{F3}");
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, -1, -1) = "\x{100}\xFF";
-is(length($x), 5);
-is($x, "\x{101}\xF2\x{100}\xFF\xF3");
-is(substr($x, 0, 1), "\x{101}");
-is(substr($x, 1, 1), "\x{F2}");
-is(substr($x, 2, 1), "\x{100}");
-is(substr($x, 3, 1), "\x{FF}");
-is(substr($x, 4, 1), "\x{F3}");
-
-substr($x = "ab", 0, 0, "\x{100}\x{200}");
-is($x, "\x{100}\x{200}ab");
-
-substr($x = "\x{100}\x{200}", 0, 0, "ab");
-is($x, "ab\x{100}\x{200}");
-
-substr($x = "ab", 1, 0, "\x{100}\x{200}");
-is($x, "a\x{100}\x{200}b");
-
-substr($x = "\x{100}\x{200}", 1, 0, "ab");
-is($x, "\x{100}ab\x{200}");
-
-substr($x = "ab", 2, 0, "\x{100}\x{200}");
-is($x, "ab\x{100}\x{200}");
-
-substr($x = "\x{100}\x{200}", 2, 0, "ab");
-is($x, "\x{100}\x{200}ab");
-
-substr($x = "\xFFb", 0, 0, "\x{100}\x{200}");
-is($x, "\x{100}\x{200}\xFFb");
-
-substr($x = "\x{100}\x{200}", 0, 0, "\xFFb");
-is($x, "\xFFb\x{100}\x{200}");
-
-substr($x = "\xFFb", 1, 0, "\x{100}\x{200}");
-is($x, "\xFF\x{100}\x{200}b");
-
-substr($x = "\x{100}\x{200}", 1, 0, "\xFFb");
-is($x, "\x{100}\xFFb\x{200}");
-
-substr($x = "\xFFb", 2, 0, "\x{100}\x{200}");
-is($x, "\xFFb\x{100}\x{200}");
-
-substr($x = "\x{100}\x{200}", 2, 0, "\xFFb");
-is($x, "\x{100}\x{200}\xFFb");
-
-# [perl #20933]
-{
- my $s = "ab";
- my @r;
- $r[$_] = \ substr $s, $_, 1 for (0, 1);
- is(join("", map { $$_ } @r), "ab");
-}
-
-# [perl #23207]
-{
- sub ss {
- substr($_[0],0,1) ^= substr($_[0],1,1) ^=
- substr($_[0],0,1) ^= substr($_[0],1,1);
- }
- my $x = my $y = 'AB'; ss $x; ss $y;
- is($x, $y);
-}
-
-# [perl #24605]
-{
- my $x = "0123456789\x{500}";
- my $y = substr $x, 4;
- is(substr($x, 7, 1), "7");
-}
-
-# multiple assignments to lvalue [perl #24346]
-{
- my $x = "abcdef";
- for (substr($x,1,3)) {
- is($_, 'bcd');
- $_ = 'XX';
- is($_, 'XX');
- is($x, 'aXXef');
- $_ = "\xFF";
- is($_, "\xFF");
- is($x, "a\xFFef");
- $_ = "\xF1\xF2\xF3\xF4\xF5\xF6";
- is($_, "\xF1\xF2\xF3\xF4\xF5\xF6");
- is($x, "a\xF1\xF2\xF3\xF4\xF5\xF6ef");
- $_ = 'YYYY';
- is($_, 'YYYY');
- is($x, 'aYYYYef');
- }
-}
-
-# [perl #24200] string corruption with lvalue sub
-
-{
- sub bar: lvalue { substr $krunch, 0 }
- bar = "XXX";
- is(bar, 'XXX');
- $krunch = '123456789';
- is(bar, '123456789');
-}
-
-# [perl #29149]
-{
- my $text = "0123456789\xED ";
- utf8::upgrade($text);
- my $pos = 5;
- pos($text) = $pos;
- my $a = substr($text, $pos, $pos);
- is(substr($text,$pos,1), $pos);
-
-}
-
-# [perl #23765]
-{
- my $a = pack("C", 0xbf);
- substr($a, -1) &= chr(0xfeff);
- is($a, "\xbf");
-}
-
-# [perl #34976] incorrect caching of utf8 substr length
-{
- my $a = "abcd\x{100}";
- is(substr($a,1,2), 'bc');
- is(substr($a,1,1), 'b');
-}
-
-# [perl #62646] offsets exceeding 32 bits on 64-bit system
-SKIP: {
- skip("32-bit system", 24) unless ~0 > 0xffffffff;
- my $a = "abc";
- my $s;
- my $r;
-
- utf8::downgrade($a);
- for (1..2) {
- $w = 0;
- $r = substr($a, 0xffffffff, 1);
- is($r, undef);
- is($w, 1);
-
- $w = 0;
- $r = substr($a, 0xffffffff+1, 1);
- is($r, undef);
- is($w, 1);
-
- $w = 0;
- ok( !eval { $r = substr($s=$a, 0xffffffff, 1, "_"); 1 } );
- is($r, undef);
- is($s, $a);
- is($w, 0);
-
- $w = 0;
- ok( !eval { $r = substr($s=$a, 0xffffffff+1, 1, "_"); 1 } );
- is($r, undef);
- is($s, $a);
- is($w, 0);
-
- utf8::upgrade($a);
- }
-}
-
-}
-
-
-my $destroyed;
-{ package Class; DESTROY { ++$destroyed; } }
-
-$destroyed = 0;
-{
- my $x = '';
- substr($x,0,1) = "";
- $x = bless({}, 'Class');
-}
-is($destroyed, 1, 'Timely scalar destruction with lvalue substr');
-
-# [perl #77692] UTF8 cache not being reset when TARG is reused
-ok eval {
- local ${^UTF8CACHE} = -1;
- for my $i (0..1)
- {
- my $dummy = length(substr("\x{100}",0,$i));
- }
- 1
-}, 'UTF8 cache is reset when TARG is reused [perl #77692]';
Deleted: trunk/contrib/perl/t/re/substr_thr.t
===================================================================
--- trunk/contrib/perl/t/re/substr_thr.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/re/substr_thr.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,3 +0,0 @@
-#!./perl
-chdir 't' if -d 't';
-require './thread_it.pl';
Deleted: trunk/contrib/perl/t/run/switchPx.aux
===================================================================
--- trunk/contrib/perl/t/run/switchPx.aux 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/run/switchPx.aux 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,34 +0,0 @@
-Some stuff that's not Perl
-
-This CPP directive should not be read.
-#define BARMAR 1
-
-#perl
-
-Still not perl.
-
-#!
-
-still not perl
-
-#!/something/else
-
-still not perl
-
-#!/some/path/that/leads/to/perl -l
-
-# The -l switch should be applied from the #! line.
-# Unfortunately, -P has a bug whereby the #! line is ignored.
-# If this test suddenly starts printing blank lines that bug is fixed.
-
-#define FOO "ok 1\n"
-
-#ifdef BARMAR
-# define YAR "not ok 2\n"
-#else
-# define YAR "ok 2\n"
-#endif
-
-print "1..2\n";
-print FOO;
-print YAR;
Deleted: trunk/contrib/perl/t/run/switchPx.t
===================================================================
--- trunk/contrib/perl/t/run/switchPx.t 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/t/run/switchPx.t 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,22 +0,0 @@
-#!./perl
-
-# Ensure that the -P and -x flags work together.
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- $ENV{PERL5LIB} = '../lib';
-
- use Config;
- if ( $^O eq 'MacOS' || ($Config{'cppstdin'} =~ /\bcppstdin\b/) &&
- ! -x $Config{'binexp'} . "/cppstdin" ) {
- print "1..0 # Skip: \$Config{cppstdin} unavailable\n";
- exit; # Cannot test till after install, alas.
- }
-}
-
-require './test.pl';
-
-print runperl( switches => ['-Px'],
- nolib => 1, # for some reason this is necessary under VMS
- progfile => 'run/switchPx.aux' );
Deleted: trunk/contrib/perl/utils/dprofpp.PL
===================================================================
--- trunk/contrib/perl/utils/dprofpp.PL 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/utils/dprofpp.PL 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,51 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-my $origdir = cwd;
-chdir dirname($0);
-my $file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-use File::Spec;
-
-my $script = File::Spec->catfile(
- File::Spec->catdir(
- File::Spec->updir, qw[ cpan Devel-DProf bin ]
- ), "dprofpp");
-
-if (open(IN, $script)) {
- print OUT <IN>;
- close IN;
-} else {
- die "$0: cannot find '$script'\n";
-}
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
Deleted: trunk/contrib/perl/vms/sockadapt.c
===================================================================
--- trunk/contrib/perl/vms/sockadapt.c 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/vms/sockadapt.c 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,130 +0,0 @@
-/* sockadapt.c
- *
- * Author: Charles Bailey bailey at newman.upenn.edu
- * Last Revised: 4-Mar-1997
- *
- * This file should contain stubs for any of the TCP/IP functions perl5
- * requires which are not supported by your TCP/IP stack. These stubs
- * can attempt to emulate the routine in question, or can just return
- * an error status or cause perl to die.
- *
- * This version is set up for perl5 with UCX (or emulation) via
- * the DECCRTL or SOCKETSHR 0.9D.
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-
-#if defined(__DECC) && defined(__DECC_VER) && (__DECC_VER >= 50200000)
-# define __sockadapt_my_hostent_t __struct_hostent_ptr32
-# define __sockadapt_my_netent_t __struct_netent_ptr32
-# define __sockadapt_my_servent_t __struct_servent_ptr32
-# define __sockadapt_my_addr_t __in_addr_t
-# define __sockadapt_my_name_t const char *
-#else
-# define __sockadapt_my_hostent_t struct hostent *
-# define __sockadapt_my_netent_t struct netent *
-# define __sockadapt_my_servent_t struct servent *
-# define __sockadapt_my_addr_t long
-# define __sockadapt_my_name_t char *
-#endif
-
-/* We have these on VMS 7.0 and above, or on Dec C 5.6 if it's providing */
-/* the 7.0 DECC RTL */
-#if ((((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)) && defined(DECCRTL_SOCKETS))
-#else
-void setnetent(int stayopen) {
- dTHX;
- Perl_croak(aTHX_ "Function \"setnetent\" not implemented in this version of perl");
-}
-void endnetent() {
- dTHX;
- Perl_croak(aTHX_ "Function \"endnetent\" not implemented in this version of perl");
-}
-#endif
-
-#if defined(DECCRTL_SOCKETS)
- /* Use builtin socket interface in DECCRTL and
- * UCX emulation in whatever TCP/IP stack is present.
- */
-
-#if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#else
- void sethostent(int stayopen) {
- dTHX;
- Perl_croak(aTHX_ "Function \"sethostent\" not implemented in this version of perl");
- }
- void endhostent() {
- dTHX;
- Perl_croak(aTHX_ "Function \"endhostent\" not implemented in this version of perl");
- }
- void setprotoent(int stayopen) {
- dTHX;
- Perl_croak(aTHX_ "Function \"setprotoent\" not implemented in this version of perl");
- }
- void endprotoent() {
- dTHX;
- Perl_croak(aTHX_ "Function \"endprotoent\" not implemented in this version of perl");
- }
- void setservent(int stayopen) {
- dTHX;
- Perl_croak(aTHX_ "Function \"setservent\" not implemented in this version of perl");
- }
- void endservent() {
- dTHX;
- Perl_croak(aTHX_ "Function \"endservent\" not implemented in this version of perl");
- }
- __sockadapt_my_hostent_t gethostent() {
- dTHX;
- Perl_croak(aTHX_ "Function \"gethostent\" not implemented in this version of perl");
- return (__sockadapt_my_hostent_t )NULL; /* Avoid MISSINGRETURN warning, not reached */
- }
- __sockadapt_my_servent_t getservent() {
- dTHX;
- Perl_croak(aTHX_ "Function \"getservent\" not implemented in this version of perl");
- return (__sockadapt_my_servent_t )NULL; /* Avoid MISSINGRETURN warning, not reached */
- }
-#endif
-
-#else
- /* Work around things missing/broken in SOCKETSHR. */
-
-__sockadapt_my_netent_t getnetbyaddr( __sockadapt_my_addr_t net, int type) {
- dTHX;
- Perl_croak(aTHX_ "Function \"getnetbyaddr\" not implemented in this version of perl");
- return (struct netent *)NULL; /* Avoid MISSINGRETURN warning, not reached */
-}
-__sockadapt_my_netent_t getnetbyname( __sockadapt_my_name_t name) {
- dTHX;
- Perl_croak(aTHX_ "Function \"getnetbyname\" not implemented in this version of perl");
- return (struct netent *)NULL; /* Avoid MISSINGRETURN warning, not reached */
-}
-__sockadapt_my_netent_t getnetent() {
- dTHX;
- Perl_croak(aTHX_ "Function \"getnetent\" not implemented in this version of perl");
- return (__sockadapt_my_netent_t )NULL; /* Avoid MISSINGRETURN warning, not reached */
-}
-
-/* Some TCP/IP implementations seem to return success, when getpeername()
- * is called on a UDP socket, but the port and in_addr are all zeroes.
- */
-
-int my_getpeername(int sock, struct sockaddr *addr, int *addrlen) {
- static char nowhere[] = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
- int rslt;
-
- rslt = si_getpeername(sock, addr, addrlen);
-
- /* Just pass an error back up the line */
- if (rslt) return rslt;
-
- /* If the call succeeded, make sure we don't have a zeroed port/addr */
- if (addr->sa_family == AF_INET &&
- !memcmp((char *)addr + sizeof(u_short), nowhere,
- sizeof(u_short) + sizeof(struct in_addr))) {
- rslt = -1;
- SETERRNO(ENOTCONN,SS$_CLEARED);
- }
- return rslt;
-}
-#endif /* SOCKETSHR stuff */
Deleted: trunk/contrib/perl/vms/sockadapt.h
===================================================================
--- trunk/contrib/perl/vms/sockadapt.h 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/vms/sockadapt.h 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,188 +0,0 @@
-/* sockadapt.h
- *
- * Authors: Charles Bailey bailey at newman.upenn.edu
- * David Denholm denholm at conmat.phys.soton.ac.uk
- * Last Revised: 4-Mar-1997
- *
- * This file should include any other header files and procide any
- * declarations, typedefs, and prototypes needed by perl for TCP/IP
- * operations.
- *
- * This version is set up for perl5 with socketshr 0.9D TCP/IP support.
- */
-
-#ifndef __SOCKADAPT_INCLUDED
-#define __SOCKADAPT_INCLUDED 1
-
-#if defined(DECCRTL_SOCKETS)
- /* Use builtin socket interface in DECCRTL and
- * UCX emulation in whatever TCP/IP stack is present.
- * Provide prototypes for missing routines; stubs are
- * in sockadapt.c.
- */
-# include <socket.h>
-# include <inet.h>
-# include <in.h>
-# include <netdb.h>
-#if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#else
- void sethostent(int);
- void endhostent(void);
- void setnetent(int);
- void endnetent(void);
- void setprotoent(int);
- void endprotoent(void);
- void setservent(int);
- void endservent(void);
-#endif
-# if defined(__DECC) && defined(__DECC_VER) && (__DECC_VER >= 50200000) && !defined(Sock_size_t)
-# define Sock_size_t unsigned int
-# endif
-
-#else
- /* Pull in SOCKETSHR's header, and set up structures for
- * gcc, whose basic header file set doesn't include the
- * TCP/IP stuff.
- */
-
-
-#ifdef __GNU_CC__
-
-/* we may not have netdb.h etc, so lets just do this here - div */
-/* no harm doing this for all .c files - needed only by pp_sys.c */
-
-struct hostent {
- char *h_name; /* official name of host */
- char **h_aliases; /* alias list */
- int h_addrtype; /* host address type */
- int h_length; /* length of address */
- char **h_addr_list; /* address */
-};
-#ifdef h_addr
-# undef h_addr
-#endif
-#define h_addr h_addr_list[0]
-
-struct protoent {
- char *p_name; /* official protocol name */
- char **p_aliases; /* alias list */
- int p_proto; /* protocol # */
-};
-
-struct servent {
- char *s_name; /* official service name */
- char **s_aliases; /* alias list */
- int s_port; /* port # */
- char *s_proto; /* protocol to use */
-};
-
-struct in_addr {
- unsigned long s_addr;
-};
-
-struct sockaddr {
- unsigned short sa_family; /* address family */
- char sa_data[14]; /* up to 14 bytes of direct address */
-};
-
-/*
- * Socket address, internet style.
- */
-struct sockaddr_in {
- short sin_family;
- unsigned short sin_port;
- struct in_addr sin_addr;
- char sin_zero[8];
-};
-
-struct timeval {
- long tv_sec;
- long tv_usec;
-};
-
-struct netent {
- char *n_name;
- char **n_aliases;
- int n_addrtype;
- long n_net;
-};
-
-/* Since socketshr.h won't declare function prototypes unless it thinks
- * the system headers have already been included, we convince it that
- * this is the case.
- */
-
-#ifndef AF_INET
-# define AF_INET 2
-#endif
-#ifndef IPPROTO_TCP
-# define IPPROTO_TCP 6
-#endif
-#ifndef __INET_LOADED
-# define __INET_LOADED
-#endif
-#ifndef __NETDB_LOADED
-# define __NETDB_LOADED
-#endif
-
-/* Finally, we provide prototypes for routines not supported by SocketShr,
- * so that the stubs in sockadapt.c won't cause complaints about
- * undeclared routines.
- */
-
-struct netent *getnetbyaddr( long net, int type);
-struct netent *getnetbyname( char *name);
-struct netent *getnetent();
-void setnetent(int);
-void endnetent();
-
-#else /* !__GNU_CC__ */
-
-/* DECC and VAXC have socket headers in the system set; they're for UCX, but
- * we'll assume that the actual calling sequence is identical across the
- * various TCP/IP stacks; these routines are pretty standard.
- */
-#include <socket.h>
-#include <in.h>
-#include <inet.h>
-
-/* SocketShr doesn't support these routines, but the DECC RTL contains
- * stubs with these names, designed to be used with the UCX socket
- * library. We avoid linker collisions by substituting new names.
- */
-#define getnetbyaddr no_getnetbyaddr
-#define getnetbyname no_getnetbyname
-#define getnetent no_getnetent
-#define setnetent no_setnetent
-#define endnetent no_endnetent
-
-#include <netdb.h>
-#endif
-
-/* We don't have these two in the system headers. */
-void setnetent(int);
-void endnetent();
-
-#include <socketshr.h>
-/* socketshr.h from SocketShr 0.9D doesn't alias fileno; its comments say
- * that the CRTL version works OK. This isn't the case, at least with
- * VAXC, so we use the SocketShr version.
- * N.B. This means that sockadapt.h must be included *after* stdio.h.
- * This is presently the case for Perl.
- */
-#ifdef fileno
-# undef fileno
-#endif
-#define fileno si_fileno
-int si_fileno(FILE *);
-
-
-/* Catch erroneous results for UDP sockets -- see sockadapt.c */
-#ifdef getpeername
-# undef getpeername
-#endif
-#define getpeername my_getpeername
-int my_getpeername (int, struct sockaddr *, int *);
-
-#endif /* SOCKETSHR stuff */
-#endif /* include guard */
Deleted: trunk/contrib/perl/vos/syslog.h
===================================================================
--- trunk/contrib/perl/vos/syslog.h 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/vos/syslog.h 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,75 +0,0 @@
-/* Beginning of modification history */
-/* Written 02-08-13 by PG */
-/* End of modification history */
-
-/* This header conforms to IEEE Std 1003.1-2001 */
-
-#ifndef _INCLUDED_SYSLOG_H
-#define _INCLUDED_SYSLOG_H
-
-/* values of the "logopt" option of openlog */
-
-#define LOG_PID 1
-#define LOG_CONS 2
-#define LOG_NDELAY 4
-#define LOG_ODELAY 8
-#define LOG_NOWAIT 16
-
-/* values of the "facility" argument of openlog
- and of the "priority" argument of syslog */
-
-#define LOG_KERN 0
-#define LOG_USER (1<<3)
-#define LOG_MAIL (2<<3)
-#define LOG_NEWS (3<<3)
-#define LOG_UUCP (4<<3)
-#define LOG_DAEMON (5<<3)
-#define LOG_AUTH (6<<3)
-#define LOG_CRON (7<<3)
-#define LOG_LPR (8<<3)
-#define LOG_LOCAL0 (9<<3)
-#define LOG_LOCAL1 (10<<3)
-#define LOG_LOCAL2 (11<<3)
-#define LOG_LOCAL3 (12<<3)
-#define LOG_LOCAL4 (13<<3)
-#define LOG_LOCAL5 (14<<3)
-#define LOG_LOCAL6 (15<<3)
-#define LOG_LOCAL7 (16<<3)
-
-/* macro for constructing "maskpri" arg to setlogmask */
-
-#define LOG_MASK(p) (1 << (p))
-
-/* values of the "priority" argument of syslog */
-
-#define LOG_EMERG 0
-#define LOG_ALERT 1
-#define LOG_CRIT 2
-#define LOG_ERR 3
-#define LOG_WARNING 4
-#define LOG_NOTICE 5
-#define LOG_INFO 6
-#define LOG_DEBUG 7
-
-#undef __P
-#ifdef __PROTOTYPES__
-#define __P(args) args
-#else
-#define __P(args) ()
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern void closelog __P((void));
-extern void openlog __P((const char *ident, int logopt,
- int facility));
-extern int setlogmask __P((int maskpri));
-extern void syslog __P((int priority, const char * message, ...));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _INCLUDED_SYSLOG_H */
Deleted: trunk/contrib/perl/win32/config.bc
===================================================================
--- trunk/contrib/perl/win32/config.bc 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/win32/config.bc 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1084 +0,0 @@
-## Configured by: ~cf_email~
-## Target system: WIN32
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.lib'
-_exe='.exe'
-_o='.obj'
-afs='false'
-afsroot='/afs'
-alignbytes='8'
-ansi2knr=''
-aphostname=''
-api_revision='~PERL_API_REVISION~'
-api_subversion='~PERL_API_SUBVERSION~'
-api_version='~PERL_API_VERSION~'
-api_versionstring='~PERL_API_REVISION~.~PERL_API_VERSION~.~PERL_API_SUBVERSION~'
-ar='tlib /P128'
-archlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
-archlibexp='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
-archname64=''
-archname='MSWin32'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5'
-bash=''
-bin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-binexp='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-bison=''
-byacc='byacc'
-byteorder='1234'
-c=''
-castflags='0'
-cat='type'
-cc='bcc32'
-cccdlflags=' '
-ccdlflags='-tWD'
-ccflags='-DWIN32'
-ccflags_uselargefiles=''
-ccname='~cc~'
-ccsymbols=''
-ccversion=''
-cf_by='nobody'
-cf_email='nobody at no.where.net'
-cf_time=''
-charbits='8'
-chgrp=''
-chmod=''
-chown=''
-clocktype='clock_t'
-comm=''
-compress=''
-contains='grep'
-cp='copy'
-cpio=''
-cpp='cpp32 -oCON'
-cpp_stuff='42'
-cppccsymbols=''
-cppflags='-DWIN32'
-cpplast=''
-cppminus=''
-cpprun='cpp32 -oCON'
-cppstdin='cppstdin'
-cppsymbols=''
-crypt_r_proto='0'
-cryptlib=''
-csh='undef'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='gcvt((x),(n),(b))'
-d_PRIEUldbl='undef'
-d_PRIFUldbl='undef'
-d_PRIGUldbl='undef'
-d_PRIXU64='undef'
-d_PRId64='undef'
-d_PRIeldbl='undef'
-d_PRIfldbl='undef'
-d_PRIgldbl='undef'
-d_PRIi64='undef'
-d_PRIo64='undef'
-d_PRIu64='undef'
-d_PRIx64='undef'
-d_SCNfldbl='undef'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime64='undef'
-d_asctime_r='undef'
-d_atolf='undef'
-d_atoll='undef'
-d_attribute_deprecated='undef'
-d_attribute_format='undef'
-d_attribute_malloc='undef'
-d_attribute_nonnull='undef'
-d_attribute_noreturn='undef'
-d_attribute_pure='undef'
-d_attribute_unused='undef'
-d_attribute_warn_unused_result='undef'
-d_bcmp='undef'
-d_bcopy='undef'
-d_bsd='define'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_builtin_choose_expr='undef'
-d_builtin_expect='undef'
-d_bzero='undef'
-d_c99_variadic_macros='undef'
-d_casti32='define'
-d_castneg='define'
-d_charvspr='undef'
-d_chown='undef'
-d_chroot='undef'
-d_chsize='define'
-d_class='undef'
-d_clearenv='undef'
-d_closedir='define'
-d_cmsghdr_s='undef'
-d_const='define'
-d_copysignl='undef'
-d_cplusplus='undef'
-d_crypt='define'
-d_crypt_r='undef'
-d_csh='undef'
-d_ctermid='undef'
-d_ctermid_r='undef'
-d_ctime64='undef'
-d_ctime_r='undef'
-d_cuserid='undef'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime64='undef'
-d_difftime='define'
-d_dir_dd_fd='undef'
-d_dirfd='undef'
-d_dirnamlen='define'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='undef'
-d_drand48proto='undef'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='undef'
-d_endgrent_r='undef'
-d_endhent='undef'
-d_endhostent_r='undef'
-d_endnent='undef'
-d_endnetent_r='undef'
-d_endpent='undef'
-d_endprotoent_r='undef'
-d_endpwent='undef'
-d_endpwent_r='undef'
-d_endsent='undef'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_faststdio='define'
-d_fchdir='undef'
-d_fchmod='undef'
-d_fchown='undef'
-d_fcntl_can_lock='undef'
-d_fcntl='undef'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='define'
-d_fgetpos='define'
-d_finitel='undef'
-d_finite='undef'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fork='undef'
-d_fp_class='undef'
-d_fpathconf='undef'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpos64_t='undef'
-d_frexpl='undef'
-d_fs_data_s='undef'
-d_fseeko='undef'
-d_fsetpos='define'
-d_fstatfs='undef'
-d_fstatvfs='undef'
-d_fsync='undef'
-d_ftello='undef'
-d_ftime='define'
-d_futimes='undef'
-d_gdbm_ndbm_h_uses_prototypes='undef'
-d_gdbmndbm_h_uses_prototypes='undef'
-d_getaddrinfo='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='undef'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='undef'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='undef'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='undef'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='undef'
-d_getnameinfo='undef'
-d_getnbyaddr='undef'
-d_getnbyname='undef'
-d_getnent='undef'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='undef'
-d_getpagsz='undef'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='undef'
-d_getpgid='undef'
-d_getpgrp2='undef'
-d_getpgrp='undef'
-d_getppid='undef'
-d_getprior='undef'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='undef'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='undef'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspnam='undef'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime64='undef'
-d_gmtime_r='undef'
-d_gnulibc='undef'
-d_grpasswd='undef'
-d_hasmntopt='undef'
-d_htonl='define'
-d_ilogbl='undef'
-d_inc_version_list='undef'
-d_index='undef'
-d_inetaton='undef'
-d_inetntop='undef'
-d_inetpton='undef'
-d_int64_t='undef'
-d_isascii='define'
-d_isfinite='undef'
-d_isinf='undef'
-d_isnan='define'
-d_isnanl='undef'
-d_killpg='define'
-d_lchown='undef'
-d_ldbl_dig='define'
-d_libm_lib_version='undef'
-d_link='define'
-d_localtime64='undef'
-d_localtime_r='undef'
-d_localtime_r_needs_tzset='undef'
-d_locconv='define'
-d_lockf='undef'
-d_longdbl='define'
-d_longlong='undef'
-d_lseekproto='define'
-d_lstat='undef'
-d_madvise='undef'
-d_malloc_good_size='undef'
-d_malloc_size='undef'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='undef'
-d_mkfifo='undef'
-d_mkstemp='undef'
-d_mkstemps='undef'
-d_mktime64='undef'
-d_mktime='define'
-d_mmap='undef'
-d_modfl='undef'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='undef'
-d_msgctl='undef'
-d_msg_ctrunc='undef'
-d_msg_dontroute='undef'
-d_msgget='undef'
-d_msghdr_s='undef'
-d_msg_oob='undef'
-d_msg_peek='undef'
-d_msg_proxy='undef'
-d_msgrcv='undef'
-d_msgsnd='undef'
-d_msg='undef'
-d_msync='undef'
-d_munmap='undef'
-d_mymalloc='undef'
-d_ndbm='undef'
-d_ndbm_h_uses_prototypes='undef'
-d_nice='undef'
-d_nl_langinfo='undef'
-d_nv_preserves_uv='define'
-d_nv_zero_is_allbits_zero='define'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='undef'
-d_pathconf='undef'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='undef'
-d_portable='define'
-d_prctl='undef'
-d_prctl_set_name='undef'
-d_printf_format_null='undef'
-d_procselfexe='undef'
-d_pseudofork='undef'
-d_pthread_atfork='undef'
-d_pthread_attr_setscope='undef'
-d_pthread_yield='undef'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='undef'
-d_pwpasswd='undef'
-d_pwquota='undef'
-d_qgcvt='undef'
-d_quad='define'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='undef'
-d_readv='undef'
-d_recvmsg='undef'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='undef'
-d_scalbnl='undef'
-d_sched_yield='undef'
-d_scm_rights='undef'
-d_seekdir='define'
-d_select='define'
-d_sem='undef'
-d_semctl='undef'
-d_semctl_semid_ds='undef'
-d_semctl_semun='undef'
-d_semget='undef'
-d_semop='undef'
-d_sendmsg='undef'
-d_setegid='undef'
-d_seteuid='undef'
-d_setgrent='undef'
-d_setgrent_r='undef'
-d_setgrps='undef'
-d_sethent='undef'
-d_sethostent_r='undef'
-d_setitimer='undef'
-d_setlinebuf='undef'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='undef'
-d_setnetent_r='undef'
-d_setpent='undef'
-d_setpgid='undef'
-d_setpgrp2='undef'
-d_setpgrp='undef'
-d_setprior='undef'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='undef'
-d_setpwent_r='undef'
-d_setregid='undef'
-d_setresgid='undef'
-d_setresuid='undef'
-d_setreuid='undef'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='undef'
-d_setservent_r='undef'
-d_setsid='undef'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='undef'
-d_shmat='undef'
-d_shmatprototype='undef'
-d_shmctl='undef'
-d_shmdt='undef'
-d_shmget='undef'
-d_sigaction='undef'
-d_signbit='undef'
-d_sigprocmask='undef'
-d_sigsetjmp='undef'
-d_sin6_scope_id='define'
-d_sitearch='define'
-d_snprintf='define'
-d_sockaddr_sa_len='undef'
-d_sockatmark='undef'
-d_sockatmarkproto='undef'
-d_socket='define'
-d_socklen_t='undef'
-d_sockpair='undef'
-d_socks5_init='undef'
-d_sprintf_returns_strlen='define'
-d_sqrtl='undef'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_statblks='undef'
-d_static_inline='undef'
-d_statfs_f_flags='undef'
-d_statfs_s='undef'
-d_statvfs='undef'
-d_stdio_cnt_lval='define'
-d_stdio_ptr_lval='define'
-d_stdio_ptr_lval_nochange_cnt='define'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='define'
-d_stdstdio='define'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='undef'
-d_strftime='define'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strtod='define'
-d_strtol='define'
-d_strtold='undef'
-d_strtoll='undef'
-d_strtoq='undef'
-d_strtoul='define'
-d_strtoull='undef'
-d_strtouq='undef'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='undef'
-d_syscall='undef'
-d_syscallproto='undef'
-d_sysconf='undef'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='undef'
-d_tcsetpgrp='undef'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_timegm='undef'
-d_times='define'
-d_tm_tm_gmtoff='undef'
-d_tm_tm_zone='undef'
-d_tmpnam_r='undef'
-d_truncate='undef'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='define'
-d_ualarm='undef'
-d_umask='define'
-d_uname='define'
-d_union_semun='define'
-d_unordered='undef'
-d_unsetenv='undef'
-d_usleep='undef'
-d_usleepproto='undef'
-d_ustat='undef'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vendorscript='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_vsnprintf='define'
-d_wait4='undef'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_writev='undef'
-d_xenix='undef'
-date='date'
-db_hashtype='int'
-db_prefixtype='int'
-db_version_major='0'
-db_version_minor='0'
-db_version_patch='0'
-defvoidused='15'
-direntrytype='struct direct'
-dlext='dll'
-dlsrc='dl_win32.xs'
-doublesize='8'
-drand01='(rand()/(double)((unsigned)1<<RANDBITS))'
-drand48_r_proto='0'
-dtrace=''
-dynamic_ext='Socket IO Fcntl Opcode SDBM_File attributes'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext='.exe'
-expr='expr'
-extensions='~static_ext~ ~dynamic_ext~ ~nonxs_ext~'
-extern_C='extern'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find='find'
-firstmakefile='makefile'
-flex=''
-fpossize='4'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar=''
-full_csh=''
-full_sed=''
-gccansipedantic=''
-gccosandvers=''
-gccversion=''
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"d"'
-gidsign='-1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib/pa1.1 /usr/lib/large /lib /usr/lib /usr/lib/386 /lib/386 /lib/large /usr/lib/small /lib/small /usr/ccs/lib /usr/ucblib /usr/shlib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version=''
-grep='grep'
-groupcat=''
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-hostcat='ypcat hosts'
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='__int64'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_assert='define'
-i_bsdioctl=''
-i_crypt='undef'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='define'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_gdbm_ndbm='undef'
-i_gdbmndbm='undef'
-i_grp='undef'
-i_ieeefp='undef'
-i_inttypes='undef'
-i_langinfo='undef'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_mallocmalloc='undef'
-i_math='define'
-i_memory='undef'
-i_mntent='undef'
-i_ndbm='undef'
-i_netdb='undef'
-i_neterrno='undef'
-i_netinettcp='undef'
-i_niin='undef'
-i_poll='undef'
-i_prot='undef'
-i_pthread='undef'
-i_pwd='undef'
-i_rpcsvcdbm='define'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='undef'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='undef'
-i_sysfile='undef'
-i_sysfilio='define'
-i_sysin='undef'
-i_sysioctl='undef'
-i_syslog='undef'
-i_sysmman='undef'
-i_sysmode='undef'
-i_sysmount='undef'
-i_sysndir='undef'
-i_sysparam='undef'
-i_syspoll='undef'
-i_sysresrc='undef'
-i_syssecrt='undef'
-i_sysselct='undef'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='undef'
-i_sysstatvfs='undef'
-i_systime='undef'
-i_systimek='undef'
-i_systimes='undef'
-i_systypes='define'
-i_sysuio='undef'
-i_sysun='undef'
-i_sysutsname='undef'
-i_sysvfs='undef'
-i_syswait='undef'
-i_termio='undef'
-i_termios='undef'
-i_time='define'
-i_unistd='undef'
-i_ustat='undef'
-i_utime='define'
-i_values='undef'
-i_varargs='undef'
-i_varhdr='varargs.h'
-i_vfork='undef'
-ignore_versioned_solibs=''
-inc_version_list=''
-inc_version_list_init='0'
-incpath=''
-inews=''
-initialinstalllocation=''
-installarchlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
-installbin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-installhtml1dir=''
-installhtml3dir=''
-installhtmldir='~INST_TOP~~INST_VER~\html'
-installhtmlhelpdir='~INST_TOP~~INST_VER~\htmlhelp'
-installman1dir='~INST_TOP~~INST_VER~\man\man1'
-installman3dir='~INST_TOP~~INST_VER~\man\man3'
-installprefix='~INST_TOP~~INST_VER~'
-installprefixexp='~INST_TOP~~INST_VER~'
-installprivlib='~INST_TOP~~INST_VER~\lib'
-installscript='~INST_TOP~~INST_VER~\bin'
-installsitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
-installsitebin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='~INST_TOP~\site~INST_VER~\lib'
-installsiteman1dir=''
-installsiteman3dir=''
-installsitescript=''
-installstyle='lib'
-installusrbinperl='undef'
-installvendorarch=''
-installvendorbin=''
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib=''
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript=''
-intsize='4'
-issymlink=''
-ivdformat='"ld"'
-ivsize='4'
-ivtype='long'
-known_extensions='~static_ext~ ~dynamic_ext~ ~nonxs_ext~'
-ksh=''
-ld='tlink32'
-lddlflags='-Tpd ~LINK_FLAGS~'
-ldflags='~LINK_FLAGS~'
-ldflags_uselargefiles=''
-ldlibpthname=''
-less='less'
-lib_ext='.lib'
-libc='cw32mti.lib'
-libperl='perl.lib'
-libpth=''
-libs=''
-libsdirs=''
-libsfiles=''
-libsfound=''
-libspath=''
-libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x'
-libswanted_uselargefiles='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x'
-line='line'
-lint=''
-lkflags=''
-ln=''
-lns='copy'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='10'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='dir'
-lseeksize='4'
-lseektype='long'
-mad='undef'
-madlyh=''
-madlyobj=''
-madlysrc=''
-mail=''
-mailx=''
-make='dmake'
-make_set_make='#'
-mallocobj='malloc.o'
-mallocsrc='malloc.c'
-malloctype='void *'
-man1dir='~INST_TOP~~INST_VER~\man\man1'
-man1direxp='~INST_TOP~~INST_VER~\man\man1'
-man1ext='1'
-man3dir='~INST_TOP~~INST_VER~\man\man3'
-man3direxp='~INST_TOP~~INST_VER~\man\man3'
-man3ext='3'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more /e'
-multiarch='undef'
-mv=''
-myarchname='MSWin32'
-mydomain=''
-myhostname=''
-myuname=''
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='int'
-netdb_host_type='char *'
-netdb_name_type='char *'
-netdb_net_type='long'
-nm=''
-nm_opt=''
-nm_so_opt=''
-nonxs_ext='Errno'
-nroff=''
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0'
-nv_preserves_uv_bits='32'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.obj'
-old_pthread_create_joinable=''
-optimize='-O2'
-orderlib='false'
-osname='MSWin32'
-osvers='4.0'
-otherlibdirs=''
-package='perl5'
-pager='more /e'
-passcat=''
-patchlevel='~PERL_VERSION~'
-path_sep=';'
-perl5=''
-perl='perl'
-perl_patchlevel='~PERL_PATCHLEVEL~'
-perladmin=''
-perllibs='~libs~'
-perlpath='~INST_TOP~~INST_VER~\bin~INST_ARCH~\perl.exe'
-perl_static_inline='static'
-pg=''
-phostname='hostname'
-pidtype='int'
-plibpth=''
-pmake=''
-pr=''
-prefix='~INST_TOP~'
-prefixexp='~INST_TOP~'
-privlib='~INST_TOP~~INST_VER~\lib'
-privlibexp='~INST_TOP~~INST_VER~\lib'
-procselfexe=''
-prototype='define'
-ptrsize='4'
-quadkind='5'
-quadtype='__int64'
-randbits='15'
-randfunc='rand'
-random_r_proto='0'
-randseedtype='unsigned'
-ranlib='rem'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='del'
-rm_try=''
-rmail=''
-run=''
-runnm='true'
-sGMTIME_max="2147483647"
-sGMTIME_min="0"
-sLOCALTIME_max="2147483647"
-sLOCALTIME_min="0"
-sPRIEUldbl='"E"'
-sPRIFUldbl='"F"'
-sPRIGUldbl='"G"'
-sPRIXU64='"lX"'
-sPRId64='"ld"'
-sPRIeldbl='"Le"'
-sPRIfldbl='"Lf"'
-sPRIgldbl='"Lg"'
-sPRIi64='"li"'
-sPRIo64='"lo"'
-sPRIu64='"lu"'
-sPRIx64='"lx"'
-sSCNfldbl='"Lf"'
-sched_yield=''
-scriptdir='~INST_TOP~~INST_VER~\bin'
-scriptdirexp='~INST_TOP~~INST_VER~\bin'
-sed='sed'
-seedfunc='srand'
-selectminbits='32'
-selecttype='Perl_fd_set *'
-sendmail='blat'
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='cmd /x /c'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='26'
-sig_name='ZERO HUP INT QUIT ILL NUM05 NUM06 NUM07 FPE KILL NUM10 SEGV NUM12 PIPE ALRM TERM USR1 USR2 CHLD NUM19 USR3 BREAK ABRT STOP NUM24 CONT CLD'
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "USR1", "USR2", "CHLD", "NUM19", "USR3", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0'
-sig_num='0 1 2 21 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 18'
-sig_num_init='0, 1, 2, 21, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 18, 0'
-sig_size='27'
-signal_t='void'
-sitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
-sitearchexp='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
-sitebin='~INST_TOP~\site~INST_VER~\bin~INST_ARCH~'
-sitebinexp='~INST_TOP~\site~INST_VER~\bin~INST_ARCH~'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='~INST_TOP~\site~INST_VER~\lib'
-sitelib_stem=''
-sitelibexp='~INST_TOP~\site~INST_VER~\lib'
-siteman1dir=''
-siteman1direxp=''
-siteman3dir=''
-siteman3direxp=''
-siteprefix='~INST_TOP~\site~INST_VER~'
-siteprefixexp='~INST_TOP~\site~INST_VER~'
-sitescript=''
-sitescriptexp=''
-sizesize='4'
-sizetype='size_t'
-sleep=''
-smail=''
-so='dll'
-sockethdr=''
-socketlib=''
-socksizetype='int'
-sort='sort'
-spackage='Perl5'
-spitshell=''
-srand48_r_proto='0'
-srandom_r_proto='0'
-src=''
-ssizetype='int'
-startperl='#!perl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='unsigned char'
-stdio_base='((fp)->buffer)'
-stdio_bufsiz='((fp)->level + (fp)->curp - (fp)->buffer)'
-stdio_cnt='((fp)->level)'
-stdio_filbuf=''
-stdio_ptr='((fp)->curp)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='~SUBVERSION~'
-sysman='/usr/man/man1'
-tail=''
-tar=''
-targetarch=''
-tbl=''
-tee=''
-test=''
-timeincl='/usr/include/sys/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr=''
-trnl='\012'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned __int64'
-u8size='1'
-u8type='unsigned char'
-uidformat='"d"'
-uidsign='-1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned __int64'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='undef'
-usecrosscompile='undef'
-usedevel='undef'
-usedl='define'
-usedtrace='undef'
-usefaststdio='undef'
-useithreads='undef'
-uselargefiles='undef'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='false'
-useopcode='true'
-useperlio='undef'
-useposix='true'
-usereentrant='undef'
-userelocatableinc='undef'
-usesfio='false'
-useshrplib='true'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='undef'
-usevendorprefix='undef'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='4'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vaproto='undef'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorman1dir=' '
-vendorman1direxp=''
-vendorman3dir=' '
-vendorman3direxp=''
-vendorprefix=''
-vendorprefixexp=''
-vendorscript=''
-vendorscriptexp=''
-version='~VERSION~'
-version_patchlevel_string=''
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-PERL_REVISION='~PERL_REVISION~'
-PERL_SUBVERSION='~PERL_SUBVERSION~'
-PERL_VERSION='~PERL_VERSION~'
-PERL_API_REVISION='~PERL_API_REVISION~'
-PERL_API_SUBVERSION='~PERL_API_SUBVERSION~'
-PERL_API_VERSION='~PERL_API_VERSION~'
-PERL_PATCHLEVEL='~PERL_PATCHLEVEL~'
-PERL_CONFIG_SH='true'
Deleted: trunk/contrib/perl/win32/config.gc64
===================================================================
--- trunk/contrib/perl/win32/config.gc64 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/win32/config.gc64 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1085 +0,0 @@
-## Configured by: ~cf_email~
-## Target system: WIN32
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.a'
-_exe='.exe'
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='8'
-ansi2knr=''
-aphostname=''
-api_revision='~PERL_API_REVISION~'
-api_subversion='~PERL_API_SUBVERSION~'
-api_version='~PERL_API_VERSION~'
-api_versionstring='~PERL_API_REVISION~.~PERL_API_VERSION~.~PERL_API_SUBVERSION~'
-ar='x86_64-w64-mingw32-ar'
-archlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
-archlibexp='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
-archname64=''
-archname='MSWin32'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5'
-bash=''
-bin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-binexp='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-bison=''
-byacc='byacc'
-byteorder='1234'
-c=''
-castflags='0'
-cat='type'
-cc='x86_64-w64-mingw32-gcc'
-cccdlflags=' '
-ccdlflags=' '
-ccflags='-MD -DWIN32'
-ccflags_uselargefiles=''
-ccname='~cc~'
-ccsymbols=''
-ccversion=''
-cf_by='nobody'
-cf_email='nobody at no.where.net'
-cf_time=''
-charbits='8'
-chgrp=''
-chmod=''
-chown=''
-clocktype='clock_t'
-comm=''
-compress=''
-contains='grep'
-cp='copy'
-cpio=''
-cpp='~cc~ -E'
-cpp_stuff='42'
-cppccsymbols=''
-cppflags='-DWIN32'
-cpplast=''
-cppminus='-'
-cpprun='~cc~ -E'
-cppstdin='~cc~ -E'
-cppsymbols=''
-crypt_r_proto='0'
-cryptlib=''
-csh='undef'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='sprintf((b),"%.*g",(n),(x))'
-d_PRIEUldbl='undef'
-d_PRIFUldbl='undef'
-d_PRIGUldbl='undef'
-d_PRIXU64='undef'
-d_PRId64='undef'
-d_PRIeldbl='undef'
-d_PRIfldbl='undef'
-d_PRIgldbl='undef'
-d_PRIi64='undef'
-d_PRIo64='undef'
-d_PRIu64='undef'
-d_PRIx64='undef'
-d_SCNfldbl='undef'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime64='undef'
-d_asctime_r='undef'
-d_atolf='undef'
-d_atoll='define'
-d_attribute_deprecated='undef'
-d_attribute_format='undef'
-d_attribute_malloc='undef'
-d_attribute_nonnull='undef'
-d_attribute_noreturn='undef'
-d_attribute_pure='undef'
-d_attribute_unused='undef'
-d_attribute_warn_unused_result='undef'
-d_bcmp='undef'
-d_bcopy='undef'
-d_bsd='define'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_builtin_choose_expr='undef'
-d_builtin_expect='undef'
-d_bzero='undef'
-d_c99_variadic_macros='undef'
-d_casti32='define'
-d_castneg='define'
-d_charvspr='undef'
-d_chown='undef'
-d_chroot='undef'
-d_chsize='define'
-d_class='undef'
-d_clearenv='undef'
-d_closedir='define'
-d_cmsghdr_s='undef'
-d_const='define'
-d_copysignl='undef'
-d_cplusplus='undef'
-d_crypt='define'
-d_crypt_r='undef'
-d_csh='undef'
-d_ctermid='undef'
-d_ctermid_r='undef'
-d_ctime64='undef'
-d_ctime_r='undef'
-d_cuserid='undef'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime64='undef'
-d_difftime='define'
-d_dir_dd_fd='undef'
-d_dirfd='undef'
-d_dirnamlen='define'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='undef'
-d_drand48proto='undef'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='undef'
-d_endgrent_r='undef'
-d_endhent='undef'
-d_endhostent_r='undef'
-d_endnent='undef'
-d_endnetent_r='undef'
-d_endpent='undef'
-d_endprotoent_r='undef'
-d_endpwent='undef'
-d_endpwent_r='undef'
-d_endsent='undef'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_faststdio='define'
-d_fchdir='undef'
-d_fchmod='undef'
-d_fchown='undef'
-d_fcntl_can_lock='undef'
-d_fcntl='undef'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='define'
-d_fgetpos='define'
-d_finitel='undef'
-d_finite='undef'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fork='undef'
-d_fp_class='undef'
-d_fpathconf='undef'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpos64_t='undef'
-d_frexpl='undef'
-d_fs_data_s='undef'
-d_fseeko='undef'
-d_fsetpos='define'
-d_fstatfs='undef'
-d_fstatvfs='undef'
-d_fsync='undef'
-d_ftello='undef'
-d_ftime='define'
-d_futimes='undef'
-d_gdbm_ndbm_h_uses_prototypes='undef'
-d_gdbmndbm_h_uses_prototypes='undef'
-d_getaddrinfo='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='undef'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='undef'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='undef'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='undef'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='undef'
-d_getnameinfo='undef'
-d_getnbyaddr='undef'
-d_getnbyname='undef'
-d_getnent='undef'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='undef'
-d_getpagsz='undef'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='undef'
-d_getpgid='undef'
-d_getpgrp2='undef'
-d_getpgrp='undef'
-d_getppid='undef'
-d_getprior='undef'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='undef'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='undef'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspnam='undef'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime64='undef'
-d_gmtime_r='undef'
-d_gnulibc='undef'
-d_grpasswd='undef'
-d_hasmntopt='undef'
-d_htonl='define'
-d_ilogbl='undef'
-d_inc_version_list='undef'
-d_index='undef'
-d_inetaton='undef'
-d_inetntop='undef'
-d_inetpton='undef'
-d_int64_t='undef'
-d_isascii='define'
-d_isfinite='undef'
-d_isinf='undef'
-d_isnan='define'
-d_isnanl='undef'
-d_killpg='define'
-d_lchown='undef'
-d_ldbl_dig='define'
-d_libm_lib_version='undef'
-d_link='define'
-d_localtime64='undef'
-d_localtime_r='undef'
-d_localtime_r_needs_tzset='undef'
-d_locconv='define'
-d_lockf='undef'
-d_longdbl='define'
-d_longlong='define'
-d_lseekproto='define'
-d_lstat='undef'
-d_madvise='undef'
-d_malloc_good_size='undef'
-d_malloc_size='undef'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='undef'
-d_mkfifo='undef'
-d_mkstemp='undef'
-d_mkstemps='undef'
-d_mktime64='undef'
-d_mktime='define'
-d_mmap='undef'
-d_modfl='undef'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='undef'
-d_msgctl='undef'
-d_msg_ctrunc='undef'
-d_msg_dontroute='undef'
-d_msgget='undef'
-d_msghdr_s='undef'
-d_msg_oob='undef'
-d_msg_peek='undef'
-d_msg_proxy='undef'
-d_msgrcv='undef'
-d_msgsnd='undef'
-d_msg='undef'
-d_msync='undef'
-d_munmap='undef'
-d_mymalloc='undef'
-d_ndbm='undef'
-d_ndbm_h_uses_prototypes='undef'
-d_nice='undef'
-d_nl_langinfo='undef'
-d_nv_preserves_uv='undef'
-d_nv_zero_is_allbits_zero='define'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='undef'
-d_pathconf='undef'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='undef'
-d_portable='define'
-d_prctl='undef'
-d_prctl_set_name='undef'
-d_printf_format_null='undef'
-d_procselfexe='undef'
-d_pseudofork='undef'
-d_pthread_atfork='undef'
-d_pthread_attr_setscope='undef'
-d_pthread_yield='undef'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='undef'
-d_pwpasswd='undef'
-d_pwquota='undef'
-d_qgcvt='undef'
-d_quad='define'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='undef'
-d_readv='undef'
-d_recvmsg='undef'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='undef'
-d_scalbnl='undef'
-d_sched_yield='undef'
-d_scm_rights='undef'
-d_seekdir='define'
-d_select='define'
-d_sem='undef'
-d_semctl='undef'
-d_semctl_semid_ds='undef'
-d_semctl_semun='undef'
-d_semget='undef'
-d_semop='undef'
-d_sendmsg='undef'
-d_setegid='undef'
-d_seteuid='undef'
-d_setgrent='undef'
-d_setgrent_r='undef'
-d_setgrps='undef'
-d_sethent='undef'
-d_sethostent_r='undef'
-d_setitimer='undef'
-d_setlinebuf='undef'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='undef'
-d_setnetent_r='undef'
-d_setpent='undef'
-d_setpgid='undef'
-d_setpgrp2='undef'
-d_setpgrp='undef'
-d_setprior='undef'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='undef'
-d_setpwent_r='undef'
-d_setregid='undef'
-d_setresgid='undef'
-d_setresuid='undef'
-d_setreuid='undef'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='undef'
-d_setservent_r='undef'
-d_setsid='undef'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='undef'
-d_shmat='undef'
-d_shmatprototype='undef'
-d_shmctl='undef'
-d_shmdt='undef'
-d_shmget='undef'
-d_sigaction='undef'
-d_signbit='undef'
-d_sigprocmask='undef'
-d_sigsetjmp='undef'
-d_sin6_scope_id='define'
-d_sitearch='define'
-d_snprintf='define'
-d_sockaddr_sa_len='undef'
-d_sockatmark='undef'
-d_sockatmarkproto='undef'
-d_socket='define'
-d_socklen_t='undef'
-d_sockpair='undef'
-d_socks5_init='undef'
-d_sprintf_returns_strlen='define'
-d_sqrtl='undef'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_statblks='undef'
-d_static_inline='define'
-d_statfs_f_flags='undef'
-d_statfs_s='undef'
-d_statvfs='undef'
-d_stdio_cnt_lval='define'
-d_stdio_ptr_lval='define'
-d_stdio_ptr_lval_nochange_cnt='define'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='define'
-d_stdstdio='define'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='undef'
-d_strftime='define'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strtod='define'
-d_strtol='define'
-d_strtold='undef'
-d_strtoll='define'
-d_strtoq='undef'
-d_strtoul='define'
-d_strtoull='define'
-d_strtouq='undef'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='undef'
-d_syscall='undef'
-d_syscallproto='undef'
-d_sysconf='undef'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='undef'
-d_tcsetpgrp='undef'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_timegm='undef'
-d_times='define'
-d_tm_tm_gmtoff='undef'
-d_tm_tm_zone='undef'
-d_tmpnam_r='undef'
-d_truncate='undef'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='define'
-d_ualarm='undef'
-d_umask='define'
-d_uname='define'
-d_union_semun='define'
-d_unordered='undef'
-d_unsetenv='undef'
-d_usleep='undef'
-d_usleepproto='undef'
-d_ustat='undef'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vendorscript='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_vsnprintf='define'
-d_wait4='undef'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_writev='undef'
-d_xenix='undef'
-date='date'
-db_hashtype='int'
-db_prefixtype='int'
-db_version_major='0'
-db_version_minor='0'
-db_version_patch='0'
-defvoidused='15'
-direntrytype='struct direct'
-dlext='dll'
-dlltool='x86_64-w64-mingw32-dlltool'
-dlsrc='dl_win32.xs'
-doublesize='8'
-drand01='(rand()/(double)((unsigned)1<<RANDBITS))'
-drand48_r_proto='0'
-dtrace=''
-dynamic_ext='Socket IO Fcntl Opcode SDBM_File attributes'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext='.exe'
-expr='expr'
-extensions='~static_ext~ ~dynamic_ext~ ~nonxs_ext~'
-extern_C='extern'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find='find'
-firstmakefile='makefile'
-flex=''
-fpossize='8'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar=''
-full_csh=''
-full_sed=''
-gccansipedantic=''
-gccosandvers=''
-gccversion=''
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"ld"'
-gidsign='-1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib/pa1.1 /usr/lib/large /lib /usr/lib /usr/lib/386 /lib/386 /lib/large /usr/lib/small /lib/small /usr/ccs/lib /usr/ucblib /usr/shlib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version=''
-grep='grep'
-groupcat=''
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-hostcat='ypcat hosts'
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='long long'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_assert='define'
-i_bsdioctl=''
-i_crypt='undef'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='define'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_gdbm_ndbm='undef'
-i_gdbmndbm='undef'
-i_grp='undef'
-i_ieeefp='undef'
-i_inttypes='undef'
-i_langinfo='undef'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_mallocmalloc='undef'
-i_math='define'
-i_memory='undef'
-i_mntent='undef'
-i_ndbm='undef'
-i_netdb='undef'
-i_neterrno='undef'
-i_netinettcp='undef'
-i_niin='undef'
-i_poll='undef'
-i_prot='undef'
-i_pthread='undef'
-i_pwd='undef'
-i_rpcsvcdbm='define'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='undef'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='undef'
-i_sysfile='undef'
-i_sysfilio='define'
-i_sysin='undef'
-i_sysioctl='undef'
-i_syslog='undef'
-i_sysmman='undef'
-i_sysmode='undef'
-i_sysmount='undef'
-i_sysndir='undef'
-i_sysparam='undef'
-i_syspoll='undef'
-i_sysresrc='undef'
-i_syssecrt='undef'
-i_sysselct='undef'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='undef'
-i_sysstatvfs='undef'
-i_systime='undef'
-i_systimek='undef'
-i_systimes='undef'
-i_systypes='define'
-i_sysuio='undef'
-i_sysun='undef'
-i_sysutsname='undef'
-i_sysvfs='undef'
-i_syswait='undef'
-i_termio='undef'
-i_termios='undef'
-i_time='define'
-i_unistd='undef'
-i_ustat='undef'
-i_utime='define'
-i_values='undef'
-i_varargs='undef'
-i_varhdr='varargs.h'
-i_vfork='undef'
-ignore_versioned_solibs=''
-inc_version_list=''
-inc_version_list_init='0'
-incpath=''
-inews=''
-initialinstalllocation=''
-installarchlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
-installbin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-installhtml1dir=''
-installhtml3dir=''
-installhtmldir='~INST_TOP~~INST_VER~\html'
-installhtmlhelpdir='~INST_TOP~~INST_VER~\htmlhelp'
-installman1dir='~INST_TOP~~INST_VER~\man\man1'
-installman3dir='~INST_TOP~~INST_VER~\man\man3'
-installprefix='~INST_TOP~~INST_VER~'
-installprefixexp='~INST_TOP~~INST_VER~'
-installprivlib='~INST_TOP~~INST_VER~\lib'
-installscript='~INST_TOP~~INST_VER~\bin'
-installsitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
-installsitebin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='~INST_TOP~\site~INST_VER~\lib'
-installsiteman1dir=''
-installsiteman3dir=''
-installsitescript=''
-installstyle='lib'
-installusrbinperl='undef'
-installvendorarch=''
-installvendorbin=''
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib=''
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript=''
-intsize='4'
-issymlink=''
-ivdformat='"I64d"'
-ivsize='8'
-ivtype='long long'
-known_extensions='~static_ext~ ~dynamic_ext~ ~nonxs_ext~'
-ksh=''
-ld='x86_64-w64-mingw32-g++'
-lddlflags='-mdll ~LINK_FLAGS~'
-ldflags='~LINK_FLAGS~'
-ldflags_uselargefiles=''
-ldlibpthname=''
-less='less'
-lib_ext='.a'
-libc='libmsvcrt.a'
-libperl='libperl.a'
-libpth=''
-libs=''
-libsdirs=''
-libsfiles=''
-libsfound=''
-libspath=''
-libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x'
-libswanted_uselargefiles='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x'
-line='line'
-lint=''
-lkflags=''
-ln=''
-lns='copy'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='12'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='dir'
-lseeksize='8'
-lseektype='long long'
-mad='undef'
-madlyh=''
-madlyobj=''
-madlysrc=''
-mail=''
-mailx=''
-make='dmake'
-make_set_make='#'
-mallocobj='malloc.o'
-mallocsrc='malloc.c'
-malloctype='void *'
-man1dir='~INST_TOP~~INST_VER~\man\man1'
-man1direxp='~INST_TOP~~INST_VER~\man\man1'
-man1ext='1'
-man3dir='~INST_TOP~~INST_VER~\man\man3'
-man3direxp='~INST_TOP~~INST_VER~\man\man3'
-man3ext='3'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more /e'
-multiarch='undef'
-mv=''
-myarchname='MSWin32'
-mydomain=''
-myhostname=''
-myuname=''
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='int'
-netdb_host_type='char *'
-netdb_name_type='char *'
-netdb_net_type='long'
-nm='x86_64-w64-mingw32-nm'
-nm_opt=''
-nm_so_opt=''
-nonxs_ext='Errno'
-nroff=''
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0'
-nv_preserves_uv_bits='53'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O2'
-orderlib='false'
-osname='MSWin32'
-osvers='4.0'
-otherlibdirs=''
-package='perl5'
-pager='more /e'
-passcat=''
-patchlevel='~PERL_VERSION~'
-path_sep=';'
-perl5=''
-perl='perl'
-perl_patchlevel='~PERL_PATCHLEVEL~'
-perladmin=''
-perllibs='~libs~'
-perlpath='~INST_TOP~~INST_VER~\bin~INST_ARCH~\perl.exe'
-perl_static_inline='static __inline__'
-pg=''
-phostname='hostname'
-pidtype='int'
-plibpth=''
-pmake=''
-pr=''
-prefix='~INST_TOP~'
-prefixexp='~INST_TOP~'
-privlib='~INST_TOP~~INST_VER~\lib'
-privlibexp='~INST_TOP~~INST_VER~\lib'
-procselfexe=''
-prototype='define'
-ptrsize='8'
-quadkind='3'
-quadtype='long long'
-randbits='15'
-randfunc='rand'
-random_r_proto='0'
-randseedtype='unsigned'
-ranlib='rem'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='del'
-rm_try=''
-rmail=''
-run=''
-runnm='true'
-sGMTIME_max="2147483647"
-sGMTIME_min="0"
-sLOCALTIME_max="2147483647"
-sLOCALTIME_min="0"
-sPRIEUldbl='"E"'
-sPRIFUldbl='"F"'
-sPRIGUldbl='"G"'
-sPRIXU64='"I64X"'
-sPRId64='"I64d"'
-sPRIeldbl='"e"'
-sPRIfldbl='"f"'
-sPRIgldbl='"g"'
-sPRIi64='"I64i"'
-sPRIo64='"I64o"'
-sPRIu64='"I64u"'
-sPRIx64='"I64x"'
-sSCNfldbl='"f"'
-sched_yield=''
-scriptdir='~INST_TOP~~INST_VER~\bin'
-scriptdirexp='~INST_TOP~~INST_VER~\bin'
-sed='sed'
-seedfunc='srand'
-selectminbits='32'
-selecttype='Perl_fd_set *'
-sendmail='blat'
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='cmd /x /c'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='26'
-sig_name='ZERO HUP INT QUIT ILL NUM05 NUM06 NUM07 FPE KILL NUM10 SEGV NUM12 PIPE ALRM TERM NUM16 NUM17 NUM18 NUM19 CHLD BREAK ABRT STOP NUM24 CONT CLD'
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0'
-sig_num='0 1 2 21 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 20'
-sig_num_init='0, 1, 2, 21, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 20, 0'
-sig_size='27'
-signal_t='void'
-sitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
-sitearchexp='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
-sitebin='~INST_TOP~\site~INST_VER~\bin~INST_ARCH~'
-sitebinexp='~INST_TOP~\site~INST_VER~\bin~INST_ARCH~'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='~INST_TOP~\site~INST_VER~\lib'
-sitelib_stem=''
-sitelibexp='~INST_TOP~\site~INST_VER~\lib'
-siteman1dir=''
-siteman1direxp=''
-siteman3dir=''
-siteman3direxp=''
-siteprefix='~INST_TOP~\site~INST_VER~'
-siteprefixexp='~INST_TOP~\site~INST_VER~'
-sitescript=''
-sitescriptexp=''
-sizesize='8'
-sizetype='size_t'
-sleep=''
-smail=''
-so='dll'
-sockethdr=''
-socketlib=''
-socksizetype='int'
-sort='sort'
-spackage='Perl5'
-spitshell=''
-srand48_r_proto='0'
-srandom_r_proto='0'
-src=''
-ssizetype='long long'
-startperl='#!perl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='char'
-stdio_base='((fp)->_base)'
-stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)'
-stdio_cnt='((fp)->_cnt)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='~SUBVERSION~'
-sysman='/usr/man/man1'
-tail=''
-tar=''
-targetarch=''
-tbl=''
-tee=''
-test=''
-timeincl='/usr/include/sys/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr=''
-trnl='\012'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned long long'
-u8size='1'
-u8type='unsigned char'
-uidformat='"ld"'
-uidsign='-1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned long long'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='define'
-usecrosscompile='undef'
-usedevel='undef'
-usedl='define'
-usedtrace='undef'
-usefaststdio='undef'
-useithreads='undef'
-uselargefiles='undef'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='false'
-useopcode='true'
-useperlio='undef'
-useposix='true'
-usereentrant='undef'
-userelocatableinc='undef'
-usesfio='false'
-useshrplib='true'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='undef'
-usevendorprefix='undef'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"I64X"'
-uvoformat='"I64o"'
-uvsize='8'
-uvtype='unsigned long long'
-uvuformat='"I64u"'
-uvxformat='"I64x"'
-vaproto='undef'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorman1dir=' '
-vendorman1direxp=''
-vendorman3dir=' '
-vendorman3direxp=''
-vendorprefix=''
-vendorprefixexp=''
-vendorscript=''
-vendorscriptexp=''
-version='~VERSION~'
-version_patchlevel_string=''
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-PERL_REVISION='~PERL_REVISION~'
-PERL_SUBVERSION='~PERL_SUBVERSION~'
-PERL_VERSION='~PERL_VERSION~'
-PERL_API_REVISION='~PERL_API_REVISION~'
-PERL_API_SUBVERSION='~PERL_API_SUBVERSION~'
-PERL_API_VERSION='~PERL_API_VERSION~'
-PERL_PATCHLEVEL='~PERL_PATCHLEVEL~'
-PERL_CONFIG_SH='true'
Deleted: trunk/contrib/perl/win32/config.gc64nox
===================================================================
--- trunk/contrib/perl/win32/config.gc64nox 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/win32/config.gc64nox 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1085 +0,0 @@
-## Configured by: ~cf_email~
-## Target system: WIN32
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.a'
-_exe='.exe'
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='8'
-ansi2knr=''
-aphostname=''
-api_revision='~PERL_API_REVISION~'
-api_subversion='~PERL_API_SUBVERSION~'
-api_version='~PERL_API_VERSION~'
-api_versionstring='~PERL_API_REVISION~.~PERL_API_VERSION~.~PERL_API_SUBVERSION~'
-ar='ar'
-archlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
-archlibexp='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
-archname64=''
-archname='MSWin32'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5'
-bash=''
-bin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-binexp='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-bison=''
-byacc='byacc'
-byteorder='1234'
-c=''
-castflags='0'
-cat='type'
-cc='gcc'
-cccdlflags=' '
-ccdlflags=' '
-ccflags='-MD -DWIN32'
-ccflags_uselargefiles=''
-ccname='~cc~'
-ccsymbols=''
-ccversion=''
-cf_by='nobody'
-cf_email='nobody at no.where.net'
-cf_time=''
-charbits='8'
-chgrp=''
-chmod=''
-chown=''
-clocktype='clock_t'
-comm=''
-compress=''
-contains='grep'
-cp='copy'
-cpio=''
-cpp='~cc~ -E'
-cpp_stuff='42'
-cppccsymbols=''
-cppflags='-DWIN32'
-cpplast=''
-cppminus='-'
-cpprun='~cc~ -E'
-cppstdin='~cc~ -E'
-cppsymbols=''
-crypt_r_proto='0'
-cryptlib=''
-csh='undef'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='sprintf((b),"%.*g",(n),(x))'
-d_PRIEUldbl='undef'
-d_PRIFUldbl='undef'
-d_PRIGUldbl='undef'
-d_PRIXU64='undef'
-d_PRId64='undef'
-d_PRIeldbl='undef'
-d_PRIfldbl='undef'
-d_PRIgldbl='undef'
-d_PRIi64='undef'
-d_PRIo64='undef'
-d_PRIu64='undef'
-d_PRIx64='undef'
-d_SCNfldbl='undef'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime64='undef'
-d_asctime_r='undef'
-d_atolf='undef'
-d_atoll='define'
-d_attribute_deprecated='undef'
-d_attribute_format='undef'
-d_attribute_malloc='undef'
-d_attribute_nonnull='undef'
-d_attribute_noreturn='undef'
-d_attribute_pure='undef'
-d_attribute_unused='undef'
-d_attribute_warn_unused_result='undef'
-d_bcmp='undef'
-d_bcopy='undef'
-d_bsd='define'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_builtin_choose_expr='undef'
-d_builtin_expect='undef'
-d_bzero='undef'
-d_c99_variadic_macros='undef'
-d_casti32='define'
-d_castneg='define'
-d_charvspr='undef'
-d_chown='undef'
-d_chroot='undef'
-d_chsize='define'
-d_class='undef'
-d_clearenv='undef'
-d_closedir='define'
-d_cmsghdr_s='undef'
-d_const='define'
-d_copysignl='undef'
-d_cplusplus='undef'
-d_crypt='define'
-d_crypt_r='undef'
-d_csh='undef'
-d_ctermid='undef'
-d_ctermid_r='undef'
-d_ctime64='undef'
-d_ctime_r='undef'
-d_cuserid='undef'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime64='undef'
-d_difftime='define'
-d_dir_dd_fd='undef'
-d_dirfd='undef'
-d_dirnamlen='define'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='undef'
-d_drand48proto='undef'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='undef'
-d_endgrent_r='undef'
-d_endhent='undef'
-d_endhostent_r='undef'
-d_endnent='undef'
-d_endnetent_r='undef'
-d_endpent='undef'
-d_endprotoent_r='undef'
-d_endpwent='undef'
-d_endpwent_r='undef'
-d_endsent='undef'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_faststdio='define'
-d_fchdir='undef'
-d_fchmod='undef'
-d_fchown='undef'
-d_fcntl_can_lock='undef'
-d_fcntl='undef'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='define'
-d_fgetpos='define'
-d_finitel='undef'
-d_finite='undef'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fork='undef'
-d_fp_class='undef'
-d_fpathconf='undef'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpos64_t='undef'
-d_frexpl='undef'
-d_fs_data_s='undef'
-d_fseeko='undef'
-d_fsetpos='define'
-d_fstatfs='undef'
-d_fstatvfs='undef'
-d_fsync='undef'
-d_ftello='undef'
-d_ftime='define'
-d_futimes='undef'
-d_gdbm_ndbm_h_uses_prototypes='undef'
-d_gdbmndbm_h_uses_prototypes='undef'
-d_getaddrinfo='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='undef'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='undef'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='undef'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='undef'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='undef'
-d_getnameinfo='undef'
-d_getnbyaddr='undef'
-d_getnbyname='undef'
-d_getnent='undef'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='undef'
-d_getpagsz='undef'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='undef'
-d_getpgid='undef'
-d_getpgrp2='undef'
-d_getpgrp='undef'
-d_getppid='undef'
-d_getprior='undef'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='undef'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='undef'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspnam='undef'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime64='undef'
-d_gmtime_r='undef'
-d_gnulibc='undef'
-d_grpasswd='undef'
-d_hasmntopt='undef'
-d_htonl='define'
-d_ilogbl='undef'
-d_inc_version_list='undef'
-d_index='undef'
-d_inetaton='undef'
-d_inetntop='undef'
-d_inetpton='undef'
-d_int64_t='undef'
-d_isascii='define'
-d_isfinite='undef'
-d_isinf='undef'
-d_isnan='define'
-d_isnanl='undef'
-d_killpg='define'
-d_lchown='undef'
-d_ldbl_dig='define'
-d_libm_lib_version='undef'
-d_link='define'
-d_localtime64='undef'
-d_localtime_r='undef'
-d_localtime_r_needs_tzset='undef'
-d_locconv='define'
-d_lockf='undef'
-d_longdbl='define'
-d_longlong='define'
-d_lseekproto='define'
-d_lstat='undef'
-d_madvise='undef'
-d_malloc_good_size='undef'
-d_malloc_size='undef'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='undef'
-d_mkfifo='undef'
-d_mkstemp='undef'
-d_mkstemps='undef'
-d_mktime64='undef'
-d_mktime='define'
-d_mmap='undef'
-d_modfl='undef'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='undef'
-d_msgctl='undef'
-d_msg_ctrunc='undef'
-d_msg_dontroute='undef'
-d_msgget='undef'
-d_msghdr_s='undef'
-d_msg_oob='undef'
-d_msg_peek='undef'
-d_msg_proxy='undef'
-d_msgrcv='undef'
-d_msgsnd='undef'
-d_msg='undef'
-d_msync='undef'
-d_munmap='undef'
-d_mymalloc='undef'
-d_ndbm='undef'
-d_ndbm_h_uses_prototypes='undef'
-d_nice='undef'
-d_nl_langinfo='undef'
-d_nv_preserves_uv='undef'
-d_nv_zero_is_allbits_zero='define'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='undef'
-d_pathconf='undef'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='undef'
-d_portable='define'
-d_prctl='undef'
-d_prctl_set_name='undef'
-d_printf_format_null='undef'
-d_procselfexe='undef'
-d_pseudofork='undef'
-d_pthread_atfork='undef'
-d_pthread_attr_setscope='undef'
-d_pthread_yield='undef'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='undef'
-d_pwpasswd='undef'
-d_pwquota='undef'
-d_qgcvt='undef'
-d_quad='define'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='undef'
-d_readv='undef'
-d_recvmsg='undef'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='undef'
-d_scalbnl='undef'
-d_sched_yield='undef'
-d_scm_rights='undef'
-d_seekdir='define'
-d_select='define'
-d_sem='undef'
-d_semctl='undef'
-d_semctl_semid_ds='undef'
-d_semctl_semun='undef'
-d_semget='undef'
-d_semop='undef'
-d_sendmsg='undef'
-d_setegid='undef'
-d_seteuid='undef'
-d_setgrent='undef'
-d_setgrent_r='undef'
-d_setgrps='undef'
-d_sethent='undef'
-d_sethostent_r='undef'
-d_setitimer='undef'
-d_setlinebuf='undef'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='undef'
-d_setnetent_r='undef'
-d_setpent='undef'
-d_setpgid='undef'
-d_setpgrp2='undef'
-d_setpgrp='undef'
-d_setprior='undef'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='undef'
-d_setpwent_r='undef'
-d_setregid='undef'
-d_setresgid='undef'
-d_setresuid='undef'
-d_setreuid='undef'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='undef'
-d_setservent_r='undef'
-d_setsid='undef'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='undef'
-d_shmat='undef'
-d_shmatprototype='undef'
-d_shmctl='undef'
-d_shmdt='undef'
-d_shmget='undef'
-d_sigaction='undef'
-d_signbit='undef'
-d_sigprocmask='undef'
-d_sigsetjmp='undef'
-d_sin6_scope_id='define'
-d_sitearch='define'
-d_snprintf='define'
-d_sockaddr_sa_len='undef'
-d_sockatmark='undef'
-d_sockatmarkproto='undef'
-d_socket='define'
-d_socklen_t='undef'
-d_sockpair='undef'
-d_socks5_init='undef'
-d_sprintf_returns_strlen='define'
-d_sqrtl='undef'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_statblks='undef'
-d_static_inline='define'
-d_statfs_f_flags='undef'
-d_statfs_s='undef'
-d_statvfs='undef'
-d_stdio_cnt_lval='define'
-d_stdio_ptr_lval='define'
-d_stdio_ptr_lval_nochange_cnt='define'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='define'
-d_stdstdio='define'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='undef'
-d_strftime='define'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strtod='define'
-d_strtol='define'
-d_strtold='undef'
-d_strtoll='define'
-d_strtoq='undef'
-d_strtoul='define'
-d_strtoull='define'
-d_strtouq='undef'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='undef'
-d_syscall='undef'
-d_syscallproto='undef'
-d_sysconf='undef'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='undef'
-d_tcsetpgrp='undef'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_timegm='undef'
-d_times='define'
-d_tm_tm_gmtoff='undef'
-d_tm_tm_zone='undef'
-d_tmpnam_r='undef'
-d_truncate='undef'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='define'
-d_ualarm='undef'
-d_umask='define'
-d_uname='define'
-d_union_semun='define'
-d_unordered='undef'
-d_unsetenv='undef'
-d_usleep='undef'
-d_usleepproto='undef'
-d_ustat='undef'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vendorscript='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_vsnprintf='define'
-d_wait4='undef'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_writev='undef'
-d_xenix='undef'
-date='date'
-db_hashtype='int'
-db_prefixtype='int'
-db_version_major='0'
-db_version_minor='0'
-db_version_patch='0'
-defvoidused='15'
-direntrytype='struct direct'
-dlext='dll'
-dlltool='dlltool'
-dlsrc='dl_win32.xs'
-doublesize='8'
-drand01='(rand()/(double)((unsigned)1<<RANDBITS))'
-drand48_r_proto='0'
-dtrace=''
-dynamic_ext='Socket IO Fcntl Opcode SDBM_File attributes'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext='.exe'
-expr='expr'
-extensions='~static_ext~ ~dynamic_ext~ ~nonxs_ext~'
-extern_C='extern'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find='find'
-firstmakefile='makefile'
-flex=''
-fpossize='8'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar=''
-full_csh=''
-full_sed=''
-gccansipedantic=''
-gccosandvers=''
-gccversion=''
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"ld"'
-gidsign='-1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib/pa1.1 /usr/lib/large /lib /usr/lib /usr/lib/386 /lib/386 /lib/large /usr/lib/small /lib/small /usr/ccs/lib /usr/ucblib /usr/shlib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version=''
-grep='grep'
-groupcat=''
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-hostcat='ypcat hosts'
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='long long'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_assert='define'
-i_bsdioctl=''
-i_crypt='undef'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='define'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_gdbm_ndbm='undef'
-i_gdbmndbm='undef'
-i_grp='undef'
-i_ieeefp='undef'
-i_inttypes='undef'
-i_langinfo='undef'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_mallocmalloc='undef'
-i_math='define'
-i_memory='undef'
-i_mntent='undef'
-i_ndbm='undef'
-i_netdb='undef'
-i_neterrno='undef'
-i_netinettcp='undef'
-i_niin='undef'
-i_poll='undef'
-i_prot='undef'
-i_pthread='undef'
-i_pwd='undef'
-i_rpcsvcdbm='define'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='undef'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='undef'
-i_sysfile='undef'
-i_sysfilio='define'
-i_sysin='undef'
-i_sysioctl='undef'
-i_syslog='undef'
-i_sysmman='undef'
-i_sysmode='undef'
-i_sysmount='undef'
-i_sysndir='undef'
-i_sysparam='undef'
-i_syspoll='undef'
-i_sysresrc='undef'
-i_syssecrt='undef'
-i_sysselct='undef'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='undef'
-i_sysstatvfs='undef'
-i_systime='undef'
-i_systimek='undef'
-i_systimes='undef'
-i_systypes='define'
-i_sysuio='undef'
-i_sysun='undef'
-i_sysutsname='undef'
-i_sysvfs='undef'
-i_syswait='undef'
-i_termio='undef'
-i_termios='undef'
-i_time='define'
-i_unistd='undef'
-i_ustat='undef'
-i_utime='define'
-i_values='undef'
-i_varargs='undef'
-i_varhdr='varargs.h'
-i_vfork='undef'
-ignore_versioned_solibs=''
-inc_version_list=''
-inc_version_list_init='0'
-incpath=''
-inews=''
-initialinstalllocation=''
-installarchlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
-installbin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-installhtml1dir=''
-installhtml3dir=''
-installhtmldir='~INST_TOP~~INST_VER~\html'
-installhtmlhelpdir='~INST_TOP~~INST_VER~\htmlhelp'
-installman1dir='~INST_TOP~~INST_VER~\man\man1'
-installman3dir='~INST_TOP~~INST_VER~\man\man3'
-installprefix='~INST_TOP~~INST_VER~'
-installprefixexp='~INST_TOP~~INST_VER~'
-installprivlib='~INST_TOP~~INST_VER~\lib'
-installscript='~INST_TOP~~INST_VER~\bin'
-installsitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
-installsitebin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='~INST_TOP~\site~INST_VER~\lib'
-installsiteman1dir=''
-installsiteman3dir=''
-installsitescript=''
-installstyle='lib'
-installusrbinperl='undef'
-installvendorarch=''
-installvendorbin=''
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib=''
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript=''
-intsize='4'
-issymlink=''
-ivdformat='"I64d"'
-ivsize='8'
-ivtype='long long'
-known_extensions='~static_ext~ ~dynamic_ext~ ~nonxs_ext~'
-ksh=''
-ld='g++'
-lddlflags='-mdll ~LINK_FLAGS~'
-ldflags='~LINK_FLAGS~'
-ldflags_uselargefiles=''
-ldlibpthname=''
-less='less'
-lib_ext='.a'
-libc='libmsvcrt.a'
-libperl='libperl.a'
-libpth=''
-libs=''
-libsdirs=''
-libsfiles=''
-libsfound=''
-libspath=''
-libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x'
-libswanted_uselargefiles='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x'
-line='line'
-lint=''
-lkflags=''
-ln=''
-lns='copy'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='12'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='dir'
-lseeksize='8'
-lseektype='long long'
-mad='undef'
-madlyh=''
-madlyobj=''
-madlysrc=''
-mail=''
-mailx=''
-make='dmake'
-make_set_make='#'
-mallocobj='malloc.o'
-mallocsrc='malloc.c'
-malloctype='void *'
-man1dir='~INST_TOP~~INST_VER~\man\man1'
-man1direxp='~INST_TOP~~INST_VER~\man\man1'
-man1ext='1'
-man3dir='~INST_TOP~~INST_VER~\man\man3'
-man3direxp='~INST_TOP~~INST_VER~\man\man3'
-man3ext='3'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more /e'
-multiarch='undef'
-mv=''
-myarchname='MSWin32'
-mydomain=''
-myhostname=''
-myuname=''
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='int'
-netdb_host_type='char *'
-netdb_name_type='char *'
-netdb_net_type='long'
-nm='nm'
-nm_opt=''
-nm_so_opt=''
-nonxs_ext='Errno'
-nroff=''
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0'
-nv_preserves_uv_bits='53'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O2'
-orderlib='false'
-osname='MSWin32'
-osvers='4.0'
-otherlibdirs=''
-package='perl5'
-pager='more /e'
-passcat=''
-patchlevel='~PERL_VERSION~'
-path_sep=';'
-perl5=''
-perl='perl'
-perl_patchlevel='~PERL_PATCHLEVEL~'
-perladmin=''
-perllibs='~libs~'
-perlpath='~INST_TOP~~INST_VER~\bin~INST_ARCH~\perl.exe'
-perl_static_inline='static __inline__'
-pg=''
-phostname='hostname'
-pidtype='int'
-plibpth=''
-pmake=''
-pr=''
-prefix='~INST_TOP~'
-prefixexp='~INST_TOP~'
-privlib='~INST_TOP~~INST_VER~\lib'
-privlibexp='~INST_TOP~~INST_VER~\lib'
-procselfexe=''
-prototype='define'
-ptrsize='8'
-quadkind='3'
-quadtype='long long'
-randbits='15'
-randfunc='rand'
-random_r_proto='0'
-randseedtype='unsigned'
-ranlib='rem'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='del'
-rm_try=''
-rmail=''
-run=''
-runnm='true'
-sGMTIME_max="2147483647"
-sGMTIME_min="0"
-sLOCALTIME_max="2147483647"
-sLOCALTIME_min="0"
-sPRIEUldbl='"E"'
-sPRIFUldbl='"F"'
-sPRIGUldbl='"G"'
-sPRIXU64='"I64X"'
-sPRId64='"I64d"'
-sPRIeldbl='"e"'
-sPRIfldbl='"f"'
-sPRIgldbl='"g"'
-sPRIi64='"I64i"'
-sPRIo64='"I64o"'
-sPRIu64='"I64u"'
-sPRIx64='"I64x"'
-sSCNfldbl='"f"'
-sched_yield=''
-scriptdir='~INST_TOP~~INST_VER~\bin'
-scriptdirexp='~INST_TOP~~INST_VER~\bin'
-sed='sed'
-seedfunc='srand'
-selectminbits='32'
-selecttype='Perl_fd_set *'
-sendmail='blat'
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='cmd /x /c'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='26'
-sig_name='ZERO HUP INT QUIT ILL NUM05 NUM06 NUM07 FPE KILL NUM10 SEGV NUM12 PIPE ALRM TERM NUM16 NUM17 NUM18 NUM19 CHLD BREAK ABRT STOP NUM24 CONT CLD'
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0'
-sig_num='0 1 2 21 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 20'
-sig_num_init='0, 1, 2, 21, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 20, 0'
-sig_size='27'
-signal_t='void'
-sitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
-sitearchexp='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
-sitebin='~INST_TOP~\site~INST_VER~\bin~INST_ARCH~'
-sitebinexp='~INST_TOP~\site~INST_VER~\bin~INST_ARCH~'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='~INST_TOP~\site~INST_VER~\lib'
-sitelib_stem=''
-sitelibexp='~INST_TOP~\site~INST_VER~\lib'
-siteman1dir=''
-siteman1direxp=''
-siteman3dir=''
-siteman3direxp=''
-siteprefix='~INST_TOP~\site~INST_VER~'
-siteprefixexp='~INST_TOP~\site~INST_VER~'
-sitescript=''
-sitescriptexp=''
-sizesize='8'
-sizetype='size_t'
-sleep=''
-smail=''
-so='dll'
-sockethdr=''
-socketlib=''
-socksizetype='int'
-sort='sort'
-spackage='Perl5'
-spitshell=''
-srand48_r_proto='0'
-srandom_r_proto='0'
-src=''
-ssizetype='long long'
-startperl='#!perl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='char'
-stdio_base='((fp)->_base)'
-stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)'
-stdio_cnt='((fp)->_cnt)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='~SUBVERSION~'
-sysman='/usr/man/man1'
-tail=''
-tar=''
-targetarch=''
-tbl=''
-tee=''
-test=''
-timeincl='/usr/include/sys/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr=''
-trnl='\012'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned long long'
-u8size='1'
-u8type='unsigned char'
-uidformat='"ld"'
-uidsign='-1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned long long'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='define'
-usecrosscompile='undef'
-usedevel='undef'
-usedl='define'
-usedtrace='undef'
-usefaststdio='undef'
-useithreads='undef'
-uselargefiles='undef'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='false'
-useopcode='true'
-useperlio='undef'
-useposix='true'
-usereentrant='undef'
-userelocatableinc='undef'
-usesfio='false'
-useshrplib='true'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='undef'
-usevendorprefix='undef'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"I64X"'
-uvoformat='"I64o"'
-uvsize='8'
-uvtype='unsigned long long'
-uvuformat='"I64u"'
-uvxformat='"I64x"'
-vaproto='undef'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorman1dir=' '
-vendorman1direxp=''
-vendorman3dir=' '
-vendorman3direxp=''
-vendorprefix=''
-vendorprefixexp=''
-vendorscript=''
-vendorscriptexp=''
-version='~VERSION~'
-version_patchlevel_string=''
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-PERL_REVISION='~PERL_REVISION~'
-PERL_SUBVERSION='~PERL_SUBVERSION~'
-PERL_VERSION='~PERL_VERSION~'
-PERL_API_REVISION='~PERL_API_REVISION~'
-PERL_API_SUBVERSION='~PERL_API_SUBVERSION~'
-PERL_API_VERSION='~PERL_API_VERSION~'
-PERL_PATCHLEVEL='~PERL_PATCHLEVEL~'
-PERL_CONFIG_SH='true'
Deleted: trunk/contrib/perl/win32/config.vc64
===================================================================
--- trunk/contrib/perl/win32/config.vc64 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/win32/config.vc64 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,1084 +0,0 @@
-## Configured by: ~cf_email~
-## Target system: WIN32
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.lib'
-_exe='.exe'
-_o='.obj'
-afs='false'
-afsroot='/afs'
-alignbytes='8'
-ansi2knr=''
-aphostname=''
-api_revision='~PERL_API_REVISION~'
-api_subversion='~PERL_API_SUBVERSION~'
-api_version='~PERL_API_VERSION~'
-api_versionstring='~PERL_API_REVISION~.~PERL_API_VERSION~.~PERL_API_SUBVERSION~'
-ar='lib'
-archlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
-archlibexp='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
-archname64=''
-archname='MSWin32'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5'
-bash=''
-bin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-binexp='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-bison=''
-byacc='byacc'
-byteorder='1234'
-c=''
-castflags='0'
-cat='type'
-cc='cl'
-cccdlflags=' '
-ccdlflags=' '
-ccflags='-MD -DWIN32'
-ccflags_uselargefiles=''
-ccname='~cc~'
-ccsymbols=''
-ccversion=''
-cf_by='nobody'
-cf_email='nobody at no.where.net'
-cf_time=''
-charbits='8'
-chgrp=''
-chmod=''
-chown=''
-clocktype='clock_t'
-comm=''
-compress=''
-contains='grep'
-cp='copy'
-cpio=''
-cpp='~cc~ -nologo -E'
-cpp_stuff='42'
-cppccsymbols=''
-cppflags='-DWIN32'
-cpplast=''
-cppminus=''
-cpprun='~cc~ -nologo -E'
-cppstdin='cppstdin'
-cppsymbols=''
-crypt_r_proto='0'
-cryptlib=''
-csh='undef'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='sprintf((b),"%.*g",(n),(x))'
-d_PRIEUldbl='undef'
-d_PRIFUldbl='undef'
-d_PRIGUldbl='undef'
-d_PRIXU64='undef'
-d_PRId64='undef'
-d_PRIeldbl='undef'
-d_PRIfldbl='undef'
-d_PRIgldbl='undef'
-d_PRIi64='undef'
-d_PRIo64='undef'
-d_PRIu64='undef'
-d_PRIx64='undef'
-d_SCNfldbl='undef'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime64='undef'
-d_asctime_r='undef'
-d_atolf='undef'
-d_atoll='define'
-d_attribute_deprecated='undef'
-d_attribute_format='undef'
-d_attribute_malloc='undef'
-d_attribute_nonnull='undef'
-d_attribute_noreturn='undef'
-d_attribute_pure='undef'
-d_attribute_unused='undef'
-d_attribute_warn_unused_result='undef'
-d_bcmp='undef'
-d_bcopy='undef'
-d_bsd='define'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_builtin_choose_expr='undef'
-d_builtin_expect='undef'
-d_bzero='undef'
-d_c99_variadic_macros='undef'
-d_casti32='undef'
-d_castneg='define'
-d_charvspr='undef'
-d_chown='undef'
-d_chroot='undef'
-d_chsize='define'
-d_class='undef'
-d_clearenv='undef'
-d_closedir='define'
-d_cmsghdr_s='undef'
-d_const='define'
-d_copysignl='undef'
-d_cplusplus='undef'
-d_crypt='define'
-d_crypt_r='undef'
-d_csh='undef'
-d_ctermid='undef'
-d_ctermid_r='undef'
-d_ctime64='undef'
-d_ctime_r='undef'
-d_cuserid='undef'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime64='undef'
-d_difftime='define'
-d_dir_dd_fd='undef'
-d_dirfd='undef'
-d_dirnamlen='define'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='undef'
-d_drand48proto='undef'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='undef'
-d_endgrent_r='undef'
-d_endhent='undef'
-d_endhostent_r='undef'
-d_endnent='undef'
-d_endnetent_r='undef'
-d_endpent='undef'
-d_endprotoent_r='undef'
-d_endpwent='undef'
-d_endpwent_r='undef'
-d_endsent='undef'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_faststdio='define'
-d_fchdir='undef'
-d_fchmod='undef'
-d_fchown='undef'
-d_fcntl_can_lock='undef'
-d_fcntl='undef'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='define'
-d_fgetpos='define'
-d_finitel='undef'
-d_finite='undef'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fork='undef'
-d_fp_class='undef'
-d_fpathconf='undef'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpos64_t='undef'
-d_frexpl='undef'
-d_fs_data_s='undef'
-d_fseeko='undef'
-d_fsetpos='define'
-d_fstatfs='undef'
-d_fstatvfs='undef'
-d_fsync='undef'
-d_ftello='undef'
-d_ftime='define'
-d_futimes='undef'
-d_gdbm_ndbm_h_uses_prototypes='undef'
-d_gdbmndbm_h_uses_prototypes='undef'
-d_getaddrinfo='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='undef'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='undef'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='undef'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='undef'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='undef'
-d_getnameinfo='undef'
-d_getnbyaddr='undef'
-d_getnbyname='undef'
-d_getnent='undef'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='undef'
-d_getpagsz='undef'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='undef'
-d_getpgid='undef'
-d_getpgrp2='undef'
-d_getpgrp='undef'
-d_getppid='undef'
-d_getprior='undef'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='undef'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='undef'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspnam='undef'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime64='undef'
-d_gmtime_r='undef'
-d_gnulibc='undef'
-d_grpasswd='undef'
-d_hasmntopt='undef'
-d_htonl='define'
-d_ilogbl='undef'
-d_inc_version_list='undef'
-d_index='undef'
-d_inetaton='undef'
-d_inetntop='undef'
-d_inetpton='undef'
-d_int64_t='undef'
-d_isascii='define'
-d_isfinite='undef'
-d_isinf='undef'
-d_isnan='define'
-d_isnanl='undef'
-d_killpg='define'
-d_lchown='undef'
-d_ldbl_dig='define'
-d_libm_lib_version='undef'
-d_link='define'
-d_localtime64='undef'
-d_localtime_r='undef'
-d_localtime_r_needs_tzset='undef'
-d_locconv='define'
-d_lockf='undef'
-d_longdbl='define'
-d_longlong='undef'
-d_lseekproto='define'
-d_lstat='undef'
-d_madvise='undef'
-d_malloc_good_size='undef'
-d_malloc_size='undef'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='undef'
-d_mkfifo='undef'
-d_mkstemp='undef'
-d_mkstemps='undef'
-d_mktime64='undef'
-d_mktime='define'
-d_mmap='undef'
-d_modfl='undef'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='undef'
-d_msgctl='undef'
-d_msg_ctrunc='undef'
-d_msg_dontroute='undef'
-d_msgget='undef'
-d_msghdr_s='undef'
-d_msg_oob='undef'
-d_msg_peek='undef'
-d_msg_proxy='undef'
-d_msgrcv='undef'
-d_msgsnd='undef'
-d_msg='undef'
-d_msync='undef'
-d_munmap='undef'
-d_mymalloc='undef'
-d_ndbm='undef'
-d_ndbm_h_uses_prototypes='undef'
-d_nice='undef'
-d_nl_langinfo='undef'
-d_nv_preserves_uv='undef'
-d_nv_zero_is_allbits_zero='define'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='undef'
-d_pathconf='undef'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='undef'
-d_portable='define'
-d_prctl='undef'
-d_prctl_set_name='undef'
-d_printf_format_null='undef'
-d_procselfexe='undef'
-d_pseudofork='undef'
-d_pthread_atfork='undef'
-d_pthread_attr_setscope='undef'
-d_pthread_yield='undef'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='undef'
-d_pwpasswd='undef'
-d_pwquota='undef'
-d_qgcvt='undef'
-d_quad='define'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='undef'
-d_readv='undef'
-d_recvmsg='undef'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='undef'
-d_scalbnl='undef'
-d_sched_yield='undef'
-d_scm_rights='undef'
-d_seekdir='define'
-d_select='define'
-d_sem='undef'
-d_semctl='undef'
-d_semctl_semid_ds='undef'
-d_semctl_semun='undef'
-d_semget='undef'
-d_semop='undef'
-d_sendmsg='undef'
-d_setegid='undef'
-d_seteuid='undef'
-d_setgrent='undef'
-d_setgrent_r='undef'
-d_setgrps='undef'
-d_sethent='undef'
-d_sethostent_r='undef'
-d_setitimer='undef'
-d_setlinebuf='undef'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='undef'
-d_setnetent_r='undef'
-d_setpent='undef'
-d_setpgid='undef'
-d_setpgrp2='undef'
-d_setpgrp='undef'
-d_setprior='undef'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='undef'
-d_setpwent_r='undef'
-d_setregid='undef'
-d_setresgid='undef'
-d_setresuid='undef'
-d_setreuid='undef'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='undef'
-d_setservent_r='undef'
-d_setsid='undef'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='undef'
-d_shmat='undef'
-d_shmatprototype='undef'
-d_shmctl='undef'
-d_shmdt='undef'
-d_shmget='undef'
-d_sigaction='undef'
-d_signbit='undef'
-d_sigprocmask='undef'
-d_sigsetjmp='undef'
-d_sin6_scope_id='define'
-d_sitearch='define'
-d_snprintf='define'
-d_sockaddr_sa_len='undef'
-d_sockatmark='undef'
-d_sockatmarkproto='undef'
-d_socket='define'
-d_socklen_t='undef'
-d_sockpair='undef'
-d_socks5_init='undef'
-d_sprintf_returns_strlen='define'
-d_sqrtl='undef'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_statblks='undef'
-d_static_inline='define'
-d_statfs_f_flags='undef'
-d_statfs_s='undef'
-d_statvfs='undef'
-d_stdio_cnt_lval='define'
-d_stdio_ptr_lval='define'
-d_stdio_ptr_lval_nochange_cnt='define'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='define'
-d_stdstdio='define'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='undef'
-d_strftime='define'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strtod='define'
-d_strtol='define'
-d_strtold='undef'
-d_strtoll='define'
-d_strtoq='undef'
-d_strtoul='define'
-d_strtoull='define'
-d_strtouq='undef'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='undef'
-d_syscall='undef'
-d_syscallproto='undef'
-d_sysconf='undef'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='undef'
-d_tcsetpgrp='undef'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_timegm='undef'
-d_times='define'
-d_tm_tm_gmtoff='undef'
-d_tm_tm_zone='undef'
-d_tmpnam_r='undef'
-d_truncate='undef'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='define'
-d_ualarm='undef'
-d_umask='define'
-d_uname='define'
-d_union_semun='define'
-d_unordered='undef'
-d_unsetenv='undef'
-d_usleep='undef'
-d_usleepproto='undef'
-d_ustat='undef'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vendorscript='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_vsnprintf='define'
-d_wait4='undef'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_writev='undef'
-d_xenix='undef'
-date='date'
-db_hashtype='int'
-db_prefixtype='int'
-db_version_major='0'
-db_version_minor='0'
-db_version_patch='0'
-defvoidused='15'
-direntrytype='struct direct'
-dlext='dll'
-dlsrc='dl_win32.xs'
-doublesize='8'
-drand01='(rand()/(double)((unsigned)1<<RANDBITS))'
-drand48_r_proto='0'
-dtrace=''
-dynamic_ext='Socket IO Fcntl Opcode SDBM_File attributes'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext='.exe'
-expr='expr'
-extensions='~static_ext~ ~dynamic_ext~ ~nonxs_ext~'
-extern_C='extern'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find='find'
-firstmakefile='makefile'
-flex=''
-fpossize='8'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar=''
-full_csh=''
-full_sed=''
-gccansipedantic=''
-gccosandvers=''
-gccversion=''
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"ld"'
-gidsign='-1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib/pa1.1 /usr/lib/large /lib /usr/lib /usr/lib/386 /lib/386 /lib/large /usr/lib/small /lib/small /usr/ccs/lib /usr/ucblib /usr/shlib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version=''
-grep='grep'
-groupcat=''
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-hostcat='ypcat hosts'
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='__int64'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_assert='define'
-i_bsdioctl=''
-i_crypt='undef'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='define'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_gdbm_ndbm='undef'
-i_gdbmndbm='undef'
-i_grp='undef'
-i_ieeefp='undef'
-i_inttypes='undef'
-i_langinfo='undef'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_mallocmalloc='undef'
-i_math='define'
-i_memory='undef'
-i_mntent='undef'
-i_ndbm='undef'
-i_netdb='undef'
-i_neterrno='undef'
-i_netinettcp='undef'
-i_niin='undef'
-i_poll='undef'
-i_prot='undef'
-i_pthread='undef'
-i_pwd='undef'
-i_rpcsvcdbm='define'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='undef'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='undef'
-i_sysfile='undef'
-i_sysfilio='define'
-i_sysin='undef'
-i_sysioctl='undef'
-i_syslog='undef'
-i_sysmman='undef'
-i_sysmode='undef'
-i_sysmount='undef'
-i_sysndir='undef'
-i_sysparam='undef'
-i_syspoll='undef'
-i_sysresrc='undef'
-i_syssecrt='undef'
-i_sysselct='undef'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='undef'
-i_sysstatvfs='undef'
-i_systime='undef'
-i_systimek='undef'
-i_systimes='undef'
-i_systypes='define'
-i_sysuio='undef'
-i_sysun='undef'
-i_sysutsname='undef'
-i_sysvfs='undef'
-i_syswait='undef'
-i_termio='undef'
-i_termios='undef'
-i_time='define'
-i_unistd='undef'
-i_ustat='undef'
-i_utime='define'
-i_values='undef'
-i_varargs='undef'
-i_varhdr='varargs.h'
-i_vfork='undef'
-ignore_versioned_solibs=''
-inc_version_list=''
-inc_version_list_init='0'
-incpath=''
-inews=''
-initialinstalllocation=''
-installarchlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
-installbin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-installhtml1dir=''
-installhtml3dir=''
-installhtmldir='~INST_TOP~~INST_VER~\html'
-installhtmlhelpdir='~INST_TOP~~INST_VER~\htmlhelp'
-installman1dir='~INST_TOP~~INST_VER~\man\man1'
-installman3dir='~INST_TOP~~INST_VER~\man\man3'
-installprefix='~INST_TOP~~INST_VER~'
-installprefixexp='~INST_TOP~~INST_VER~'
-installprivlib='~INST_TOP~~INST_VER~\lib'
-installscript='~INST_TOP~~INST_VER~\bin'
-installsitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
-installsitebin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='~INST_TOP~\site~INST_VER~\lib'
-installsiteman1dir=''
-installsiteman3dir=''
-installsitescript=''
-installstyle='lib'
-installusrbinperl='undef'
-installvendorarch=''
-installvendorbin=''
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib=''
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript=''
-intsize='4'
-issymlink=''
-ivdformat='"I64d"'
-ivsize='8'
-ivtype='__int64'
-known_extensions='~static_ext~ ~dynamic_ext~ ~nonxs_ext~'
-ksh=''
-ld='link'
-lddlflags='-dll ~LINK_FLAGS~'
-ldflags='~LINK_FLAGS~'
-ldflags_uselargefiles=''
-ldlibpthname=''
-less='less'
-lib_ext='.lib'
-libc='msvcrt.lib'
-libperl='perl.lib'
-libpth=''
-libs=''
-libsdirs=''
-libsfiles=''
-libsfound=''
-libspath=''
-libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x'
-libswanted_uselargefiles='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x'
-line='line'
-lint=''
-lkflags=''
-ln=''
-lns='copy'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='8'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='dir'
-lseeksize='4'
-lseektype='long'
-mad='undef'
-madlyh=''
-madlyobj=''
-madlysrc=''
-mail=''
-mailx=''
-make='nmake'
-make_set_make='#'
-mallocobj='malloc.o'
-mallocsrc='malloc.c'
-malloctype='void *'
-man1dir='~INST_TOP~~INST_VER~\man\man1'
-man1direxp='~INST_TOP~~INST_VER~\man\man1'
-man1ext='1'
-man3dir='~INST_TOP~~INST_VER~\man\man3'
-man3direxp='~INST_TOP~~INST_VER~\man\man3'
-man3ext='3'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more /e'
-multiarch='undef'
-mv=''
-myarchname='MSWin32'
-mydomain=''
-myhostname=''
-myuname=''
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='int'
-netdb_host_type='char *'
-netdb_name_type='char *'
-netdb_net_type='long'
-nm=''
-nm_opt=''
-nm_so_opt=''
-nonxs_ext='Errno'
-nroff=''
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0'
-nv_preserves_uv_bits='53'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.obj'
-old_pthread_create_joinable=''
-optimize='-O'
-orderlib='false'
-osname='MSWin32'
-osvers='4.0'
-otherlibdirs=''
-package='perl5'
-pager='more /e'
-passcat=''
-patchlevel='~PERL_VERSION~'
-path_sep=';'
-perl5=''
-perl='perl'
-perl_patchlevel='~PERL_PATCHLEVEL~'
-perladmin=''
-perllibs='~libs~'
-perlpath='~INST_TOP~~INST_VER~\bin~INST_ARCH~\perl.exe'
-perl_static_inline='static __inline'
-pg=''
-phostname='hostname'
-pidtype='int'
-plibpth=''
-pmake=''
-pr=''
-prefix='~INST_TOP~'
-prefixexp='~INST_TOP~'
-privlib='~INST_TOP~~INST_VER~\lib'
-privlibexp='~INST_TOP~~INST_VER~\lib'
-procselfexe=''
-prototype='define'
-ptrsize='8'
-quadkind='5'
-quadtype='__int64'
-randbits='15'
-randfunc='rand'
-random_r_proto='0'
-randseedtype='unsigned'
-ranlib='rem'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='del'
-rm_try=''
-rmail=''
-run=''
-runnm='true'
-sGMTIME_max="2147483647"
-sGMTIME_min="0"
-sLOCALTIME_max="2147483647"
-sLOCALTIME_min="0"
-sPRIEUldbl='"E"'
-sPRIFUldbl='"F"'
-sPRIGUldbl='"G"'
-sPRIXU64='"I64X"'
-sPRId64='"I64d"'
-sPRIeldbl='"e"'
-sPRIfldbl='"f"'
-sPRIgldbl='"g"'
-sPRIi64='"I64i"'
-sPRIo64='"I64o"'
-sPRIu64='"I64u"'
-sPRIx64='"I64x"'
-sSCNfldbl='"f"'
-sched_yield=''
-scriptdir='~INST_TOP~~INST_VER~\bin'
-scriptdirexp='~INST_TOP~~INST_VER~\bin'
-sed='sed'
-seedfunc='srand'
-selectminbits='32'
-selecttype='Perl_fd_set *'
-sendmail='blat'
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='cmd /x /c'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='26'
-sig_name='ZERO HUP INT QUIT ILL NUM05 NUM06 NUM07 FPE KILL NUM10 SEGV NUM12 PIPE ALRM TERM NUM16 NUM17 NUM18 NUM19 CHLD BREAK ABRT STOP NUM24 CONT CLD'
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0'
-sig_num='0 1 2 21 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 20'
-sig_num_init='0, 1, 2, 21, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 20, 0'
-sig_size='27'
-signal_t='void'
-sitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
-sitearchexp='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
-sitebin='~INST_TOP~\site~INST_VER~\bin~INST_ARCH~'
-sitebinexp='~INST_TOP~\site~INST_VER~\bin~INST_ARCH~'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='~INST_TOP~\site~INST_VER~\lib'
-sitelib_stem=''
-sitelibexp='~INST_TOP~\site~INST_VER~\lib'
-siteman1dir=''
-siteman1direxp=''
-siteman3dir=''
-siteman3direxp=''
-siteprefix='~INST_TOP~\site~INST_VER~'
-siteprefixexp='~INST_TOP~\site~INST_VER~'
-sitescript=''
-sitescriptexp=''
-sizesize='8'
-sizetype='size_t'
-sleep=''
-smail=''
-so='dll'
-sockethdr=''
-socketlib=''
-socksizetype='int'
-sort='sort'
-spackage='Perl5'
-spitshell=''
-srand48_r_proto='0'
-srandom_r_proto='0'
-src=''
-ssizetype='__int64'
-startperl='#!perl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='char'
-stdio_base='((fp)->_base)'
-stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)'
-stdio_cnt='((fp)->_cnt)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='~SUBVERSION~'
-sysman='/usr/man/man1'
-tail=''
-tar=''
-targetarch=''
-tbl=''
-tee=''
-test=''
-timeincl='/usr/include/sys/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr=''
-trnl='\012'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned __int64'
-u8size='1'
-u8type='unsigned char'
-uidformat='"ld"'
-uidsign='-1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned __int64'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='define'
-usecrosscompile='undef'
-usedevel='undef'
-usedl='define'
-usedtrace='undef'
-usefaststdio='undef'
-useithreads='undef'
-uselargefiles='undef'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='false'
-useopcode='true'
-useperlio='undef'
-useposix='true'
-usereentrant='undef'
-userelocatableinc='undef'
-usesfio='false'
-useshrplib='true'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='undef'
-usevendorprefix='undef'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"I64X"'
-uvoformat='"I64o"'
-uvsize='8'
-uvtype='unsigned __int64'
-uvuformat='"I64u"'
-uvxformat='"I64x"'
-vaproto='undef'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorman1dir=' '
-vendorman1direxp=''
-vendorman3dir=' '
-vendorman3direxp=''
-vendorprefix=''
-vendorprefixexp=''
-vendorscript=''
-vendorscriptexp=''
-version='~VERSION~'
-version_patchlevel_string=''
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-PERL_REVISION='~PERL_REVISION~'
-PERL_SUBVERSION='~PERL_SUBVERSION~'
-PERL_VERSION='~PERL_VERSION~'
-PERL_API_REVISION='~PERL_API_REVISION~'
-PERL_API_SUBVERSION='~PERL_API_SUBVERSION~'
-PERL_API_VERSION='~PERL_API_VERSION~'
-PERL_PATCHLEVEL='~PERL_PATCHLEVEL~'
-PERL_CONFIG_SH='true'
Deleted: trunk/contrib/perl/win32/config_H.bc
===================================================================
--- trunk/contrib/perl/win32/config_H.bc 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/win32/config_H.bc 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,4670 +0,0 @@
-/*
- * This file was produced by running the config_h.SH script, which
- * gets its values from undef, which is generally produced by
- * running Configure.
- *
- * Feel free to modify any of this as the need arises. Note, however,
- * that running config_h.SH again will wipe out any changes you've made.
- * For a more permanent change edit undef and rerun config_h.SH.
- *
- * $Id: config_H.bc,v 1.1.1.1 2011-05-19 23:03:36 laffer1 Exp $
- */
-
-/*
- * Package name : perl5
- * Source directory :
- * Configuration time: Mon Jan 11 00:09:46 2010
- * Configured by : Steve
- * Target system :
- */
-
-#ifndef _config_h_
-#define _config_h_
-
-/* LOC_SED:
- * This symbol holds the complete pathname to the sed program.
- */
-#define LOC_SED "" /**/
-
-/* HAS_ALARM:
- * This symbol, if defined, indicates that the alarm routine is
- * available.
- */
-#define HAS_ALARM /**/
-
-/* HAS_BCMP:
- * This symbol is defined if the bcmp() routine is available to
- * compare blocks of memory.
- */
-/*#define HAS_BCMP / **/
-
-/* HAS_BCOPY:
- * This symbol is defined if the bcopy() routine is available to
- * copy blocks of memory.
- */
-/*#define HAS_BCOPY / **/
-
-/* HAS_BZERO:
- * This symbol is defined if the bzero() routine is available to
- * set a memory block to 0.
- */
-/*#define HAS_BZERO / **/
-
-/* HAS_CHOWN:
- * This symbol, if defined, indicates that the chown routine is
- * available.
- */
-/*#define HAS_CHOWN / **/
-
-/* HAS_CHROOT:
- * This symbol, if defined, indicates that the chroot routine is
- * available.
- */
-/*#define HAS_CHROOT / **/
-
-/* HAS_CHSIZE:
- * This symbol, if defined, indicates that the chsize routine is available
- * to truncate files. You might need a -lx to get this routine.
- */
-#define HAS_CHSIZE /**/
-
-/* HAS_CRYPT:
- * This symbol, if defined, indicates that the crypt routine is available
- * to encrypt passwords and the like.
- */
-/*#define HAS_CRYPT / **/
-
-/* HAS_CTERMID:
- * This symbol, if defined, indicates that the ctermid routine is
- * available to generate filename for terminal.
- */
-/*#define HAS_CTERMID / **/
-
-/* HAS_CUSERID:
- * This symbol, if defined, indicates that the cuserid routine is
- * available to get character login names.
- */
-/*#define HAS_CUSERID / **/
-
-/* HAS_DBL_DIG:
- * This symbol, if defined, indicates that this system's <float.h>
- * or <limits.h> defines the symbol DBL_DIG, which is the number
- * of significant digits in a double precision number. If this
- * symbol is not defined, a guess of 15 is usually pretty good.
- */
-#define HAS_DBL_DIG /**/
-
-/* HAS_DIFFTIME:
- * This symbol, if defined, indicates that the difftime routine is
- * available.
- */
-#define HAS_DIFFTIME /**/
-
-/* HAS_DLERROR:
- * This symbol, if defined, indicates that the dlerror routine is
- * available to return a string describing the last error that
- * occurred from a call to dlopen(), dlclose() or dlsym().
- */
-#define HAS_DLERROR /**/
-
-/* HAS_DUP2:
- * This symbol, if defined, indicates that the dup2 routine is
- * available to duplicate file descriptors.
- */
-#define HAS_DUP2 /**/
-
-/* HAS_FCHMOD:
- * This symbol, if defined, indicates that the fchmod routine is available
- * to change mode of opened files. If unavailable, use chmod().
- */
-/*#define HAS_FCHMOD / **/
-
-/* HAS_FCHOWN:
- * This symbol, if defined, indicates that the fchown routine is available
- * to change ownership of opened files. If unavailable, use chown().
- */
-/*#define HAS_FCHOWN / **/
-
-/* HAS_FCNTL:
- * This symbol, if defined, indicates to the C program that
- * the fcntl() function exists.
- */
-/*#define HAS_FCNTL / **/
-
-/* HAS_FGETPOS:
- * This symbol, if defined, indicates that the fgetpos routine is
- * available to get the file position indicator, similar to ftell().
- */
-#define HAS_FGETPOS /**/
-
-/* HAS_FLOCK:
- * This symbol, if defined, indicates that the flock routine is
- * available to do file locking.
- */
-#define HAS_FLOCK /**/
-
-/* HAS_FORK:
- * This symbol, if defined, indicates that the fork routine is
- * available.
- */
-/*#define HAS_FORK / **/
-
-/* HAS_FSETPOS:
- * This symbol, if defined, indicates that the fsetpos routine is
- * available to set the file position indicator, similar to fseek().
- */
-#define HAS_FSETPOS /**/
-
-/* HAS_GETTIMEOFDAY:
- * This symbol, if defined, indicates that the gettimeofday() system
- * call is available for a sub-second accuracy clock. Usually, the file
- * <sys/resource.h> needs to be included (see I_SYS_RESOURCE).
- * The type "Timeval" should be used to refer to "struct timeval".
- */
-#define HAS_GETTIMEOFDAY /**/
-#ifdef HAS_GETTIMEOFDAY
-#define Timeval struct timeval /* Structure used by gettimeofday() */
-#endif
-
-/* HAS_GETGROUPS:
- * This symbol, if defined, indicates that the getgroups() routine is
- * available to get the list of process groups. If unavailable, multiple
- * groups are probably not supported.
- */
-/*#define HAS_GETGROUPS / **/
-
-/* HAS_GETLOGIN:
- * This symbol, if defined, indicates that the getlogin routine is
- * available to get the login name.
- */
-#define HAS_GETLOGIN /**/
-
-/* HAS_GETPGID:
- * This symbol, if defined, indicates to the C program that
- * the getpgid(pid) function is available to get the
- * process group id.
- */
-/*#define HAS_GETPGID / **/
-
-/* HAS_GETPGRP2:
- * This symbol, if defined, indicates that the getpgrp2() (as in DG/UX)
- * routine is available to get the current process group.
- */
-/*#define HAS_GETPGRP2 / **/
-
-/* HAS_GETPPID:
- * This symbol, if defined, indicates that the getppid routine is
- * available to get the parent process ID.
- */
-/*#define HAS_GETPPID / **/
-
-/* HAS_GETPRIORITY:
- * This symbol, if defined, indicates that the getpriority routine is
- * available to get a process's priority.
- */
-/*#define HAS_GETPRIORITY / **/
-
-/* HAS_INET_ATON:
- * This symbol, if defined, indicates to the C program that the
- * inet_aton() function is available to parse IP address "dotted-quad"
- * strings.
- */
-/*#define HAS_INET_ATON / **/
-
-/* HAS_KILLPG:
- * This symbol, if defined, indicates that the killpg routine is available
- * to kill process groups. If unavailable, you probably should use kill
- * with a negative process number.
- */
-#define HAS_KILLPG /**/
-
-/* HAS_LINK:
- * This symbol, if defined, indicates that the link routine is
- * available to create hard links.
- */
-#define HAS_LINK /**/
-
-/* HAS_LOCALECONV:
- * This symbol, if defined, indicates that the localeconv routine is
- * available for numeric and monetary formatting conventions.
- */
-#define HAS_LOCALECONV /**/
-
-/* HAS_LOCKF:
- * This symbol, if defined, indicates that the lockf routine is
- * available to do file locking.
- */
-/*#define HAS_LOCKF / **/
-
-/* HAS_LSTAT:
- * This symbol, if defined, indicates that the lstat routine is
- * available to do file stats on symbolic links.
- */
-/*#define HAS_LSTAT / **/
-
-/* HAS_MBLEN:
- * This symbol, if defined, indicates that the mblen routine is available
- * to find the number of bytes in a multibye character.
- */
-#define HAS_MBLEN /**/
-
-/* HAS_MBSTOWCS:
- * This symbol, if defined, indicates that the mbstowcs routine is
- * available to covert a multibyte string into a wide character string.
- */
-#define HAS_MBSTOWCS /**/
-
-/* HAS_MBTOWC:
- * This symbol, if defined, indicates that the mbtowc routine is available
- * to covert a multibyte to a wide character.
- */
-#define HAS_MBTOWC /**/
-
-/* HAS_MEMCMP:
- * This symbol, if defined, indicates that the memcmp routine is available
- * to compare blocks of memory.
- */
-#define HAS_MEMCMP /**/
-
-/* HAS_MEMCPY:
- * This symbol, if defined, indicates that the memcpy routine is available
- * to copy blocks of memory.
- */
-#define HAS_MEMCPY /**/
-
-/* HAS_MEMMOVE:
- * This symbol, if defined, indicates that the memmove routine is available
- * to copy potentially overlapping blocks of memory. This should be used
- * only when HAS_SAFE_BCOPY is not defined. If neither is there, roll your
- * own version.
- */
-#define HAS_MEMMOVE /**/
-
-/* HAS_MEMSET:
- * This symbol, if defined, indicates that the memset routine is available
- * to set blocks of memory.
- */
-#define HAS_MEMSET /**/
-
-/* HAS_MKDIR:
- * This symbol, if defined, indicates that the mkdir routine is available
- * to create directories. Otherwise you should fork off a new process to
- * exec /bin/mkdir.
- */
-#define HAS_MKDIR /**/
-
-/* HAS_MKFIFO:
- * This symbol, if defined, indicates that the mkfifo routine is
- * available to create FIFOs. Otherwise, mknod should be able to
- * do it for you. However, if mkfifo is there, mknod might require
- * super-user privileges which mkfifo will not.
- */
-/*#define HAS_MKFIFO / **/
-
-/* HAS_MKTIME:
- * This symbol, if defined, indicates that the mktime routine is
- * available.
- */
-#define HAS_MKTIME /**/
-
-/* HAS_MSYNC:
- * This symbol, if defined, indicates that the msync system call is
- * available to synchronize a mapped file.
- */
-/*#define HAS_MSYNC / **/
-
-/* HAS_MUNMAP:
- * This symbol, if defined, indicates that the munmap system call is
- * available to unmap a region, usually mapped by mmap().
- */
-/*#define HAS_MUNMAP / **/
-
-/* HAS_NICE:
- * This symbol, if defined, indicates that the nice routine is
- * available.
- */
-/*#define HAS_NICE / **/
-
-/* HAS_PATHCONF:
- * This symbol, if defined, indicates that pathconf() is available
- * to determine file-system related limits and options associated
- * with a given filename.
- */
-/* HAS_FPATHCONF:
- * This symbol, if defined, indicates that pathconf() is available
- * to determine file-system related limits and options associated
- * with a given open file descriptor.
- */
-/*#define HAS_PATHCONF / **/
-/*#define HAS_FPATHCONF / **/
-
-/* HAS_PAUSE:
- * This symbol, if defined, indicates that the pause routine is
- * available to suspend a process until a signal is received.
- */
-#define HAS_PAUSE /**/
-
-/* HAS_PIPE:
- * This symbol, if defined, indicates that the pipe routine is
- * available to create an inter-process channel.
- */
-#define HAS_PIPE /**/
-
-/* HAS_POLL:
- * This symbol, if defined, indicates that the poll routine is
- * available to poll active file descriptors. Please check I_POLL and
- * I_SYS_POLL to know which header should be included as well.
- */
-/*#define HAS_POLL / **/
-
-/* HAS_READDIR:
- * This symbol, if defined, indicates that the readdir routine is
- * available to read directory entries. You may have to include
- * <dirent.h>. See I_DIRENT.
- */
-#define HAS_READDIR /**/
-
-/* HAS_SEEKDIR:
- * This symbol, if defined, indicates that the seekdir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_SEEKDIR /**/
-
-/* HAS_TELLDIR:
- * This symbol, if defined, indicates that the telldir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_TELLDIR /**/
-
-/* HAS_REWINDDIR:
- * This symbol, if defined, indicates that the rewinddir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_REWINDDIR /**/
-
-/* HAS_READLINK:
- * This symbol, if defined, indicates that the readlink routine is
- * available to read the value of a symbolic link.
- */
-/*#define HAS_READLINK / **/
-
-/* HAS_RENAME:
- * This symbol, if defined, indicates that the rename routine is available
- * to rename files. Otherwise you should do the unlink(), link(), unlink()
- * trick.
- */
-#define HAS_RENAME /**/
-
-/* HAS_RMDIR:
- * This symbol, if defined, indicates that the rmdir routine is
- * available to remove directories. Otherwise you should fork off a
- * new process to exec /bin/rmdir.
- */
-#define HAS_RMDIR /**/
-
-/* HAS_SELECT:
- * This symbol, if defined, indicates that the select routine is
- * available to select active file descriptors. If the timeout field
- * is used, <sys/time.h> may need to be included.
- */
-#define HAS_SELECT /**/
-
-/* HAS_SETEGID:
- * This symbol, if defined, indicates that the setegid routine is available
- * to change the effective gid of the current program.
- */
-/*#define HAS_SETEGID / **/
-
-/* HAS_SETEUID:
- * This symbol, if defined, indicates that the seteuid routine is available
- * to change the effective uid of the current program.
- */
-/*#define HAS_SETEUID / **/
-
-/* HAS_SETGROUPS:
- * This symbol, if defined, indicates that the setgroups() routine is
- * available to set the list of process groups. If unavailable, multiple
- * groups are probably not supported.
- */
-/*#define HAS_SETGROUPS / **/
-
-/* HAS_SETLINEBUF:
- * This symbol, if defined, indicates that the setlinebuf routine is
- * available to change stderr or stdout from block-buffered or unbuffered
- * to a line-buffered mode.
- */
-/*#define HAS_SETLINEBUF / **/
-
-/* HAS_SETLOCALE:
- * This symbol, if defined, indicates that the setlocale routine is
- * available to handle locale-specific ctype implementations.
- */
-#define HAS_SETLOCALE /**/
-
-/* HAS_SETPGID:
- * This symbol, if defined, indicates that the setpgid(pid, gpid)
- * routine is available to set process group ID.
- */
-/*#define HAS_SETPGID / **/
-
-/* HAS_SETPGRP2:
- * This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
- * routine is available to set the current process group.
- */
-/*#define HAS_SETPGRP2 / **/
-
-/* HAS_SETPRIORITY:
- * This symbol, if defined, indicates that the setpriority routine is
- * available to set a process's priority.
- */
-/*#define HAS_SETPRIORITY / **/
-
-/* HAS_SETREGID:
- * This symbol, if defined, indicates that the setregid routine is
- * available to change the real and effective gid of the current
- * process.
- */
-/* HAS_SETRESGID:
- * This symbol, if defined, indicates that the setresgid routine is
- * available to change the real, effective and saved gid of the current
- * process.
- */
-/*#define HAS_SETREGID / **/
-/*#define HAS_SETRESGID / **/
-
-/* HAS_SETREUID:
- * This symbol, if defined, indicates that the setreuid routine is
- * available to change the real and effective uid of the current
- * process.
- */
-/* HAS_SETRESUID:
- * This symbol, if defined, indicates that the setresuid routine is
- * available to change the real, effective and saved uid of the current
- * process.
- */
-/*#define HAS_SETREUID / **/
-/*#define HAS_SETRESUID / **/
-
-/* HAS_SETRGID:
- * This symbol, if defined, indicates that the setrgid routine is available
- * to change the real gid of the current program.
- */
-/*#define HAS_SETRGID / **/
-
-/* HAS_SETRUID:
- * This symbol, if defined, indicates that the setruid routine is available
- * to change the real uid of the current program.
- */
-/*#define HAS_SETRUID / **/
-
-/* HAS_SETSID:
- * This symbol, if defined, indicates that the setsid routine is
- * available to set the process group ID.
- */
-/*#define HAS_SETSID / **/
-
-/* HAS_STRCHR:
- * This symbol is defined to indicate that the strchr()/strrchr()
- * functions are available for string searching. If not, try the
- * index()/rindex() pair.
- */
-/* HAS_INDEX:
- * This symbol is defined to indicate that the index()/rindex()
- * functions are available for string searching.
- */
-#define HAS_STRCHR /**/
-/*#define HAS_INDEX / **/
-
-/* HAS_STRCOLL:
- * This symbol, if defined, indicates that the strcoll routine is
- * available to compare strings using collating information.
- */
-#define HAS_STRCOLL /**/
-
-/* HAS_STRTOD:
- * This symbol, if defined, indicates that the strtod routine is
- * available to provide better numeric string conversion than atof().
- */
-#define HAS_STRTOD /**/
-
-/* HAS_STRTOL:
- * This symbol, if defined, indicates that the strtol routine is available
- * to provide better numeric string conversion than atoi() and friends.
- */
-#define HAS_STRTOL /**/
-
-/* HAS_STRXFRM:
- * This symbol, if defined, indicates that the strxfrm() routine is
- * available to transform strings.
- */
-#define HAS_STRXFRM /**/
-
-/* HAS_SYMLINK:
- * This symbol, if defined, indicates that the symlink routine is available
- * to create symbolic links.
- */
-/*#define HAS_SYMLINK / **/
-
-/* HAS_SYSCALL:
- * This symbol, if defined, indicates that the syscall routine is
- * available to call arbitrary system calls. If undefined, that's tough.
- */
-/*#define HAS_SYSCALL / **/
-
-/* HAS_SYSCONF:
- * This symbol, if defined, indicates that sysconf() is available
- * to determine system related limits and options.
- */
-/*#define HAS_SYSCONF / **/
-
-/* HAS_SYSTEM:
- * This symbol, if defined, indicates that the system routine is
- * available to issue a shell command.
- */
-#define HAS_SYSTEM /**/
-
-/* HAS_TCGETPGRP:
- * This symbol, if defined, indicates that the tcgetpgrp routine is
- * available to get foreground process group ID.
- */
-/*#define HAS_TCGETPGRP / **/
-
-/* HAS_TCSETPGRP:
- * This symbol, if defined, indicates that the tcsetpgrp routine is
- * available to set foreground process group ID.
- */
-/*#define HAS_TCSETPGRP / **/
-
-/* HAS_TRUNCATE:
- * This symbol, if defined, indicates that the truncate routine is
- * available to truncate files.
- */
-/*#define HAS_TRUNCATE / **/
-
-/* HAS_TZNAME:
- * This symbol, if defined, indicates that the tzname[] array is
- * available to access timezone names.
- */
-#define HAS_TZNAME /**/
-
-/* HAS_UMASK:
- * This symbol, if defined, indicates that the umask routine is
- * available to set and get the value of the file creation mask.
- */
-#define HAS_UMASK /**/
-
-/* HAS_USLEEP:
- * This symbol, if defined, indicates that the usleep routine is
- * available to let the process sleep on a sub-second accuracy.
- */
-/*#define HAS_USLEEP / **/
-
-/* HAS_WAIT4:
- * This symbol, if defined, indicates that wait4() exists.
- */
-/*#define HAS_WAIT4 / **/
-
-/* HAS_WAITPID:
- * This symbol, if defined, indicates that the waitpid routine is
- * available to wait for child process.
- */
-#define HAS_WAITPID /**/
-
-/* HAS_WCSTOMBS:
- * This symbol, if defined, indicates that the wcstombs routine is
- * available to convert wide character strings to multibyte strings.
- */
-#define HAS_WCSTOMBS /**/
-
-/* HAS_WCTOMB:
- * This symbol, if defined, indicates that the wctomb routine is available
- * to covert a wide character to a multibyte.
- */
-#define HAS_WCTOMB /**/
-
-/* Groups_t:
- * This symbol holds the type used for the second argument to
- * getgroups() and setgroups(). Usually, this is the same as
- * gidtype (gid_t) , but sometimes it isn't.
- * It can be int, ushort, gid_t, etc...
- * It may be necessary to include <sys/types.h> to get any
- * typedef'ed information. This is only required if you have
- * getgroups() or setgroups()..
- */
-#if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS)
-#define Groups_t gid_t /* Type for 2nd arg to [sg]etgroups() */
-#endif
-
-/* I_ARPA_INET:
- * This symbol, if defined, indicates to the C program that it should
- * include <arpa/inet.h> to get inet_addr and friends declarations.
- */
-#define I_ARPA_INET /**/
-
-/* I_DBM:
- * This symbol, if defined, indicates that <dbm.h> exists and should
- * be included.
- */
-/* I_RPCSVC_DBM:
- * This symbol, if defined, indicates that <rpcsvc/dbm.h> exists and
- * should be included.
- */
-/*#define I_DBM / **/
-#define I_RPCSVC_DBM /**/
-
-/* I_DLFCN:
- * This symbol, if defined, indicates that <dlfcn.h> exists and should
- * be included.
- */
-#define I_DLFCN /**/
-
-/* I_FCNTL:
- * This manifest constant tells the C program to include <fcntl.h>.
- */
-#define I_FCNTL /**/
-
-/* I_FLOAT:
- * This symbol, if defined, indicates to the C program that it should
- * include <float.h> to get definition of symbols like DBL_MAX or
- * DBL_MIN, i.e. machine dependent floating point values.
- */
-#define I_FLOAT /**/
-
-/* I_GDBM:
- * This symbol, if defined, indicates that <gdbm.h> exists and should
- * be included.
- */
-/*#define I_GDBM / **/
-
-/* I_LIMITS:
- * This symbol, if defined, indicates to the C program that it should
- * include <limits.h> to get definition of symbols like WORD_BIT or
- * LONG_MAX, i.e. machine dependant limitations.
- */
-#define I_LIMITS /**/
-
-/* I_LOCALE:
- * This symbol, if defined, indicates to the C program that it should
- * include <locale.h>.
- */
-#define I_LOCALE /**/
-
-/* I_MATH:
- * This symbol, if defined, indicates to the C program that it should
- * include <math.h>.
- */
-#define I_MATH /**/
-
-/* I_MEMORY:
- * This symbol, if defined, indicates to the C program that it should
- * include <memory.h>.
- */
-/*#define I_MEMORY / **/
-
-/* I_NETINET_IN:
- * This symbol, if defined, indicates to the C program that it should
- * include <netinet/in.h>. Otherwise, you may try <sys/in.h>.
- */
-/*#define I_NETINET_IN / **/
-
-/* I_SFIO:
- * This symbol, if defined, indicates to the C program that it should
- * include <sfio.h>.
- */
-/*#define I_SFIO / **/
-
-/* I_STDDEF:
- * This symbol, if defined, indicates that <stddef.h> exists and should
- * be included.
- */
-#define I_STDDEF /**/
-
-/* I_STDLIB:
- * This symbol, if defined, indicates that <stdlib.h> exists and should
- * be included.
- */
-#define I_STDLIB /**/
-
-/* I_STRING:
- * This symbol, if defined, indicates to the C program that it should
- * include <string.h> (USG systems) instead of <strings.h> (BSD systems).
- */
-#define I_STRING /**/
-
-/* I_SYS_DIR:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/dir.h>.
- */
-/*#define I_SYS_DIR / **/
-
-/* I_SYS_FILE:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/file.h> to get definition of R_OK and friends.
- */
-/*#define I_SYS_FILE / **/
-
-/* I_SYS_IOCTL:
- * This symbol, if defined, indicates that <sys/ioctl.h> exists and should
- * be included. Otherwise, include <sgtty.h> or <termio.h>.
- */
-/* I_SYS_SOCKIO:
- * This symbol, if defined, indicates the <sys/sockio.h> should be included
- * to get socket ioctl options, like SIOCATMARK.
- */
-/*#define I_SYS_IOCTL / **/
-/*#define I_SYS_SOCKIO / **/
-
-/* I_SYS_NDIR:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/ndir.h>.
- */
-/*#define I_SYS_NDIR / **/
-
-/* I_SYS_PARAM:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/param.h>.
- */
-/*#define I_SYS_PARAM / **/
-
-/* I_SYS_POLL:
- * This symbol, if defined, indicates that the program may include
- * <sys/poll.h>. When I_POLL is also defined, it's probably safest
- * to only include <poll.h>.
- */
-/*#define I_SYS_POLL / **/
-
-/* I_SYS_RESOURCE:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/resource.h>.
- */
-/*#define I_SYS_RESOURCE / **/
-
-/* I_SYS_SELECT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/select.h> in order to get definition of struct timeval.
- */
-/*#define I_SYS_SELECT / **/
-
-/* I_SYS_STAT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/stat.h>.
- */
-#define I_SYS_STAT /**/
-
-/* I_SYS_TIMES:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/times.h>.
- */
-/*#define I_SYS_TIMES / **/
-
-/* I_SYS_TYPES:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/types.h>.
- */
-#define I_SYS_TYPES /**/
-
-/* I_SYS_UN:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/un.h> to get UNIX domain socket definitions.
- */
-/*#define I_SYS_UN / **/
-
-/* I_SYS_WAIT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/wait.h>.
- */
-/*#define I_SYS_WAIT / **/
-
-/* I_TERMIO:
- * This symbol, if defined, indicates that the program should include
- * <termio.h> rather than <sgtty.h>. There are also differences in
- * the ioctl() calls that depend on the value of this symbol.
- */
-/* I_TERMIOS:
- * This symbol, if defined, indicates that the program should include
- * the POSIX termios.h rather than sgtty.h or termio.h.
- * There are also differences in the ioctl() calls that depend on the
- * value of this symbol.
- */
-/* I_SGTTY:
- * This symbol, if defined, indicates that the program should include
- * <sgtty.h> rather than <termio.h>. There are also differences in
- * the ioctl() calls that depend on the value of this symbol.
- */
-/*#define I_TERMIO / **/
-/*#define I_TERMIOS / **/
-/*#define I_SGTTY / **/
-
-/* I_UNISTD:
- * This symbol, if defined, indicates to the C program that it should
- * include <unistd.h>.
- */
-/*#define I_UNISTD / **/
-
-/* I_UTIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <utime.h>.
- */
-#define I_UTIME /**/
-
-/* I_VALUES:
- * This symbol, if defined, indicates to the C program that it should
- * include <values.h> to get definition of symbols like MINFLOAT or
- * MAXLONG, i.e. machine dependant limitations. Probably, you
- * should use <limits.h> instead, if it is available.
- */
-/*#define I_VALUES / **/
-
-/* I_VFORK:
- * This symbol, if defined, indicates to the C program that it should
- * include vfork.h.
- */
-/*#define I_VFORK / **/
-
-/* CAN_VAPROTO:
- * This variable is defined on systems supporting prototype declaration
- * of functions with a variable number of arguments.
- */
-/* _V:
- * This macro is used to declare function parameters in prototypes for
- * functions with a variable number of parameters. Use double parentheses.
- * For example:
- *
- * int printf _V((char *fmt, ...));
- *
- * Remember to use the plain simple _() macro when declaring a function
- * with no variable number of arguments, since it might be possible to
- * have a non-effect _V() macro and still get prototypes via _().
- */
-/*#define CAN_VAPROTO / **/
-#ifdef CAN_VAPROTO
-#define _V(args) args
-#else
-#define _V(args) ()
-#endif
-
-/* INTSIZE:
- * This symbol contains the value of sizeof(int) so that the C
- * preprocessor can make decisions based on it.
- */
-/* LONGSIZE:
- * This symbol contains the value of sizeof(long) so that the C
- * preprocessor can make decisions based on it.
- */
-/* SHORTSIZE:
- * This symbol contains the value of sizeof(short) so that the C
- * preprocessor can make decisions based on it.
- */
-#define INTSIZE 4 /**/
-#define LONGSIZE 4 /**/
-#define SHORTSIZE 2 /**/
-
-/* MULTIARCH:
- * This symbol, if defined, signifies that the build
- * process will produce some binary files that are going to be
- * used in a cross-platform environment. This is the case for
- * example with the NeXT "fat" binaries that contain executables
- * for several CPUs.
- */
-/*#define MULTIARCH / **/
-
-/* HAS_QUAD:
- * This symbol, if defined, tells that there's a 64-bit integer type,
- * Quad_t, and its unsigned counterpar, Uquad_t. QUADKIND will be one
- * of QUAD_IS_INT, QUAD_IS_LONG, QUAD_IS_LONG_LONG, QUAD_IS_INT64_T,
- * or QUAD_IS___INT64.
- */
-#define HAS_QUAD /**/
-#ifdef HAS_QUAD
-# define Quad_t __int64 /**/
-# define Uquad_t unsigned __int64 /**/
-# define QUADKIND 5 /**/
-# define QUAD_IS_INT 1
-# define QUAD_IS_LONG 2
-# define QUAD_IS_LONG_LONG 3
-# define QUAD_IS_INT64_T 4
-# define QUAD_IS___INT64 5
-#endif
-
-/* OSNAME:
- * This symbol contains the name 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.
- */
-/* 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 "MSWin32" /**/
-#define OSVERS "5.1" /**/
-
-/* ARCHLIB:
- * This variable, if defined, holds the name of the directory in
- * which the user wants to put architecture-dependent public
- * library files for perl5. It is most often a local directory
- * such as /usr/local/lib. Programs using this variable must be
- * prepared to deal with filename expansion. If ARCHLIB is the
- * same as PRIVLIB, it is not defined, since presumably the
- * program already searches PRIVLIB.
- */
-/* ARCHLIB_EXP:
- * This symbol contains the ~name expanded version of ARCHLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define ARCHLIB "c:\\perl\\lib" /**/
-/*#define ARCHLIB_EXP "" / **/
-
-/* ARCHNAME:
- * This symbol holds a string representing the architecture name.
- * It may be used to construct an architecture-dependant pathname
- * where library files may be held under a private library, for
- * instance.
- */
-#define ARCHNAME "MSWin32-x86" /**/
-
-/* BIN:
- * This symbol holds the path of the bin directory where the package will
- * be installed. Program must be prepared to deal with ~name substitution.
- */
-/* BIN_EXP:
- * This symbol is the filename expanded version of the BIN symbol, for
- * programs that do not want to deal with that at run-time.
- */
-/* PERL_RELOCATABLE_INC:
- * This symbol, if defined, indicates that we'd like to relocate entries
- * in @INC at run time based on the location of the perl binary.
- */
-#define BIN "c:\\perl\\bin" /**/
-#define BIN_EXP "c:\\perl\\bin" /**/
-#define PERL_RELOCATABLE_INC "undef" /**/
-
-/* CAT2:
- * This macro concatenates 2 tokens together.
- */
-/* STRINGIFY:
- * This macro surrounds its token with double quotes.
- */
-#if 42 == 1
-#define CAT2(a,b) a/**/b
-#define STRINGIFY(a) "a"
-#endif
-#if 42 == 42
-#define PeRl_CaTiFy(a, b) a ## b
-#define PeRl_StGiFy(a) #a
-#define CAT2(a,b) PeRl_CaTiFy(a,b)
-#define StGiFy(a) PeRl_StGiFy(a)
-#define STRINGIFY(a) PeRl_StGiFy(a)
-#endif
-#if 42 != 1 && 42 != 42
-#include "Bletch: How does this C preprocessor concatenate tokens?"
-#endif
-
-/* CPPSTDIN:
- * This symbol contains the first part of the string which will invoke
- * the C preprocessor on the standard input and produce to standard
- * output. Typical value of "cc -E" or "/lib/cpp", but it can also
- * call a wrapper. See CPPRUN.
- */
-/* CPPMINUS:
- * This symbol contains the second part of the string which will invoke
- * the C preprocessor on the standard input and produce to standard
- * output. This symbol will have the value "-" if CPPSTDIN needs a minus
- * to specify standard input, otherwise the value is "".
- */
-/* CPPRUN:
- * This symbol contains the string which will invoke a C preprocessor on
- * the standard input and produce to standard output. It needs to end
- * with CPPLAST, after all other preprocessor flags have been specified.
- * The main difference with CPPSTDIN is that this program will never be a
- * pointer to a shell wrapper, i.e. it will be empty if no preprocessor is
- * available directly to the user. Note that it may well be different from
- * the preprocessor used to compile the C program.
- */
-/* CPPLAST:
- * This symbol is intended to be used along with CPPRUN in the same manner
- * symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "".
- */
-#define CPPSTDIN "cppstdin"
-#define CPPMINUS ""
-#define CPPRUN "cpp32 -oCON"
-#define CPPLAST ""
-
-/* HAS_ACCESS:
- * This manifest constant lets the C program know that the access()
- * system call is available to check for accessibility using real UID/GID.
- * (always present on UNIX.)
- */
-#define HAS_ACCESS /**/
-
-/* HAS_ACCESSX:
- * This symbol, if defined, indicates that the accessx routine is
- * available to do extended access checks.
- */
-/*#define HAS_ACCESSX / **/
-
-/* HAS_ASCTIME_R:
- * This symbol, if defined, indicates that the asctime_r routine
- * is available to asctime re-entrantly.
- */
-/* ASCTIME_R_PROTO:
- * This symbol encodes the prototype of asctime_r.
- * It is zero if d_asctime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_asctime_r
- * is defined.
- */
-/*#define HAS_ASCTIME_R / **/
-#define ASCTIME_R_PROTO 0 /**/
-
-/* HASATTRIBUTE_FORMAT:
- * Can we handle GCC attribute for checking printf-style formats
- */
-/* PRINTF_FORMAT_NULL_OK:
- * Allows __printf__ format to be null when checking printf-style
- */
-/* HASATTRIBUTE_MALLOC:
- * Can we handle GCC attribute for malloc-style functions.
- */
-/* HASATTRIBUTE_NONNULL:
- * Can we handle GCC attribute for nonnull function parms.
- */
-/* HASATTRIBUTE_NORETURN:
- * Can we handle GCC attribute for functions that do not return
- */
-/* HASATTRIBUTE_PURE:
- * Can we handle GCC attribute for pure functions
- */
-/* HASATTRIBUTE_UNUSED:
- * Can we handle GCC attribute for unused variables and arguments
- */
-/* HASATTRIBUTE_DEPRECATED:
- * Can we handle GCC attribute for marking deprecated APIs
- */
-/* HASATTRIBUTE_WARN_UNUSED_RESULT:
- * Can we handle GCC attribute for warning on unused results
- */
-/*#define HASATTRIBUTE_DEPRECATED / **/
-/*#define HASATTRIBUTE_FORMAT / **/
-/*#define PRINTF_FORMAT_NULL_OK / **/
-/*#define HASATTRIBUTE_NORETURN / **/
-/*#define HASATTRIBUTE_MALLOC / **/
-/*#define HASATTRIBUTE_NONNULL / **/
-/*#define HASATTRIBUTE_PURE / **/
-/*#define HASATTRIBUTE_UNUSED / **/
-/*#define HASATTRIBUTE_WARN_UNUSED_RESULT / **/
-
-/* HASCONST:
- * This symbol, if defined, indicates that this C compiler knows about
- * the const type. There is no need to actually test for that symbol
- * within your programs. The mere use of the "const" keyword will
- * trigger the necessary tests.
- */
-#define HASCONST /**/
-#ifndef HASCONST
-#define const
-#endif
-
-/* HAS_CRYPT_R:
- * This symbol, if defined, indicates that the crypt_r routine
- * is available to crypt re-entrantly.
- */
-/* CRYPT_R_PROTO:
- * This symbol encodes the prototype of crypt_r.
- * It is zero if d_crypt_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_crypt_r
- * is defined.
- */
-/*#define HAS_CRYPT_R / **/
-#define CRYPT_R_PROTO 0 /**/
-
-/* HAS_CSH:
- * This symbol, if defined, indicates that the C-shell exists.
- */
-/* CSH:
- * This symbol, if defined, contains the full pathname of csh.
- */
-/*#define HAS_CSH / **/
-#ifdef HAS_CSH
-#define CSH "" /**/
-#endif
-
-/* HAS_CTERMID_R:
- * This symbol, if defined, indicates that the ctermid_r routine
- * is available to ctermid re-entrantly.
- */
-/* CTERMID_R_PROTO:
- * This symbol encodes the prototype of ctermid_r.
- * It is zero if d_ctermid_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ctermid_r
- * is defined.
- */
-/*#define HAS_CTERMID_R / **/
-#define CTERMID_R_PROTO 0 /**/
-
-/* HAS_CTIME_R:
- * This symbol, if defined, indicates that the ctime_r routine
- * is available to ctime re-entrantly.
- */
-/* CTIME_R_PROTO:
- * This symbol encodes the prototype of ctime_r.
- * It is zero if d_ctime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ctime_r
- * is defined.
- */
-/*#define HAS_CTIME_R / **/
-#define CTIME_R_PROTO 0 /**/
-
-/* HAS_DRAND48_R:
- * This symbol, if defined, indicates that the drand48_r routine
- * is available to drand48 re-entrantly.
- */
-/* DRAND48_R_PROTO:
- * This symbol encodes the prototype of drand48_r.
- * It is zero if d_drand48_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_drand48_r
- * is defined.
- */
-/*#define HAS_DRAND48_R / **/
-#define DRAND48_R_PROTO 0 /**/
-
-/* HAS_DRAND48_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the drand48() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern double drand48(void);
- */
-/*#define HAS_DRAND48_PROTO / **/
-
-/* HAS_EACCESS:
- * This symbol, if defined, indicates that the eaccess routine is
- * available to do extended access checks.
- */
-/*#define HAS_EACCESS / **/
-
-/* HAS_ENDGRENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for finalizing sequential access of the group database.
- */
-/*#define HAS_ENDGRENT / **/
-
-/* HAS_ENDGRENT_R:
- * This symbol, if defined, indicates that the endgrent_r routine
- * is available to endgrent re-entrantly.
- */
-/* ENDGRENT_R_PROTO:
- * This symbol encodes the prototype of endgrent_r.
- * It is zero if d_endgrent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endgrent_r
- * is defined.
- */
-/*#define HAS_ENDGRENT_R / **/
-#define ENDGRENT_R_PROTO 0 /**/
-
-/* HAS_ENDHOSTENT:
- * This symbol, if defined, indicates that the endhostent() routine is
- * available to close whatever was being used for host queries.
- */
-/*#define HAS_ENDHOSTENT / **/
-
-/* HAS_ENDHOSTENT_R:
- * This symbol, if defined, indicates that the endhostent_r routine
- * is available to endhostent re-entrantly.
- */
-/* ENDHOSTENT_R_PROTO:
- * This symbol encodes the prototype of endhostent_r.
- * It is zero if d_endhostent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endhostent_r
- * is defined.
- */
-/*#define HAS_ENDHOSTENT_R / **/
-#define ENDHOSTENT_R_PROTO 0 /**/
-
-/* HAS_ENDNETENT:
- * This symbol, if defined, indicates that the endnetent() routine is
- * available to close whatever was being used for network queries.
- */
-/*#define HAS_ENDNETENT / **/
-
-/* HAS_ENDNETENT_R:
- * This symbol, if defined, indicates that the endnetent_r routine
- * is available to endnetent re-entrantly.
- */
-/* ENDNETENT_R_PROTO:
- * This symbol encodes the prototype of endnetent_r.
- * It is zero if d_endnetent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endnetent_r
- * is defined.
- */
-/*#define HAS_ENDNETENT_R / **/
-#define ENDNETENT_R_PROTO 0 /**/
-
-/* HAS_ENDPROTOENT:
- * This symbol, if defined, indicates that the endprotoent() routine is
- * available to close whatever was being used for protocol queries.
- */
-/*#define HAS_ENDPROTOENT / **/
-
-/* HAS_ENDPROTOENT_R:
- * This symbol, if defined, indicates that the endprotoent_r routine
- * is available to endprotoent re-entrantly.
- */
-/* ENDPROTOENT_R_PROTO:
- * This symbol encodes the prototype of endprotoent_r.
- * It is zero if d_endprotoent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endprotoent_r
- * is defined.
- */
-/*#define HAS_ENDPROTOENT_R / **/
-#define ENDPROTOENT_R_PROTO 0 /**/
-
-/* HAS_ENDPWENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for finalizing sequential access of the passwd database.
- */
-/*#define HAS_ENDPWENT / **/
-
-/* HAS_ENDPWENT_R:
- * This symbol, if defined, indicates that the endpwent_r routine
- * is available to endpwent re-entrantly.
- */
-/* ENDPWENT_R_PROTO:
- * This symbol encodes the prototype of endpwent_r.
- * It is zero if d_endpwent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endpwent_r
- * is defined.
- */
-/*#define HAS_ENDPWENT_R / **/
-#define ENDPWENT_R_PROTO 0 /**/
-
-/* HAS_ENDSERVENT:
- * This symbol, if defined, indicates that the endservent() routine is
- * available to close whatever was being used for service queries.
- */
-/*#define HAS_ENDSERVENT / **/
-
-/* HAS_ENDSERVENT_R:
- * This symbol, if defined, indicates that the endservent_r routine
- * is available to endservent re-entrantly.
- */
-/* ENDSERVENT_R_PROTO:
- * This symbol encodes the prototype of endservent_r.
- * It is zero if d_endservent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endservent_r
- * is defined.
- */
-/*#define HAS_ENDSERVENT_R / **/
-#define ENDSERVENT_R_PROTO 0 /**/
-
-/* FLEXFILENAMES:
- * This symbol, if defined, indicates that the system supports filenames
- * longer than 14 characters.
- */
-#define FLEXFILENAMES /**/
-
-/* HAS_GETGRENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for sequential access of the group database.
- */
-/*#define HAS_GETGRENT / **/
-
-/* HAS_GETGRENT_R:
- * This symbol, if defined, indicates that the getgrent_r routine
- * is available to getgrent re-entrantly.
- */
-/* GETGRENT_R_PROTO:
- * This symbol encodes the prototype of getgrent_r.
- * It is zero if d_getgrent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrent_r
- * is defined.
- */
-/*#define HAS_GETGRENT_R / **/
-#define GETGRENT_R_PROTO 0 /**/
-
-/* HAS_GETGRGID_R:
- * This symbol, if defined, indicates that the getgrgid_r routine
- * is available to getgrgid re-entrantly.
- */
-/* GETGRGID_R_PROTO:
- * This symbol encodes the prototype of getgrgid_r.
- * It is zero if d_getgrgid_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrgid_r
- * is defined.
- */
-/*#define HAS_GETGRGID_R / **/
-#define GETGRGID_R_PROTO 0 /**/
-
-/* HAS_GETGRNAM_R:
- * This symbol, if defined, indicates that the getgrnam_r routine
- * is available to getgrnam re-entrantly.
- */
-/* GETGRNAM_R_PROTO:
- * This symbol encodes the prototype of getgrnam_r.
- * It is zero if d_getgrnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrnam_r
- * is defined.
- */
-/*#define HAS_GETGRNAM_R / **/
-#define GETGRNAM_R_PROTO 0 /**/
-
-/* HAS_GETHOSTBYADDR:
- * This symbol, if defined, indicates that the gethostbyaddr() routine is
- * available to look up hosts by their IP addresses.
- */
-#define HAS_GETHOSTBYADDR /**/
-
-/* HAS_GETHOSTBYNAME:
- * This symbol, if defined, indicates that the gethostbyname() routine is
- * available to look up host names in some data base or other.
- */
-#define HAS_GETHOSTBYNAME /**/
-
-/* HAS_GETHOSTENT:
- * This symbol, if defined, indicates that the gethostent() routine is
- * available to look up host names in some data base or another.
- */
-/*#define HAS_GETHOSTENT / **/
-
-/* HAS_GETHOSTNAME:
- * This symbol, if defined, indicates that the C program may use the
- * gethostname() routine to derive the host name. See also HAS_UNAME
- * and PHOSTNAME.
- */
-/* HAS_UNAME:
- * This symbol, if defined, indicates that the C program may use the
- * uname() routine to derive the host name. See also HAS_GETHOSTNAME
- * and PHOSTNAME.
- */
-/* PHOSTNAME:
- * This symbol, if defined, indicates the command to feed to the
- * popen() routine to derive the host name. See also HAS_GETHOSTNAME
- * and HAS_UNAME. Note that the command uses a fully qualified path,
- * so that it is safe even if used by a process with super-user
- * privileges.
- */
-/* HAS_PHOSTNAME:
- * This symbol, if defined, indicates that the C program may use the
- * contents of PHOSTNAME as a command to feed to the popen() routine
- * to derive the host name.
- */
-#define HAS_GETHOSTNAME /**/
-#define HAS_UNAME /**/
-/*#define HAS_PHOSTNAME / **/
-#ifdef HAS_PHOSTNAME
-#define PHOSTNAME "" /* How to get the host name */
-#endif
-
-/* HAS_GETHOSTBYADDR_R:
- * This symbol, if defined, indicates that the gethostbyaddr_r routine
- * is available to gethostbyaddr re-entrantly.
- */
-/* GETHOSTBYADDR_R_PROTO:
- * This symbol encodes the prototype of gethostbyaddr_r.
- * It is zero if d_gethostbyaddr_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gethostbyaddr_r
- * is defined.
- */
-/*#define HAS_GETHOSTBYADDR_R / **/
-#define GETHOSTBYADDR_R_PROTO 0 /**/
-
-/* HAS_GETHOSTBYNAME_R:
- * This symbol, if defined, indicates that the gethostbyname_r routine
- * is available to gethostbyname re-entrantly.
- */
-/* GETHOSTBYNAME_R_PROTO:
- * This symbol encodes the prototype of gethostbyname_r.
- * It is zero if d_gethostbyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gethostbyname_r
- * is defined.
- */
-/*#define HAS_GETHOSTBYNAME_R / **/
-#define GETHOSTBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETHOSTENT_R:
- * This symbol, if defined, indicates that the gethostent_r routine
- * is available to gethostent re-entrantly.
- */
-/* GETHOSTENT_R_PROTO:
- * This symbol encodes the prototype of gethostent_r.
- * It is zero if d_gethostent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gethostent_r
- * is defined.
- */
-/*#define HAS_GETHOSTENT_R / **/
-#define GETHOSTENT_R_PROTO 0 /**/
-
-/* HAS_GETHOST_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for gethostent(), gethostbyname(), and
- * gethostbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETHOST_PROTOS /**/
-
-/* HAS_GETLOGIN_R:
- * This symbol, if defined, indicates that the getlogin_r routine
- * is available to getlogin re-entrantly.
- */
-/* GETLOGIN_R_PROTO:
- * This symbol encodes the prototype of getlogin_r.
- * It is zero if d_getlogin_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getlogin_r
- * is defined.
- */
-/*#define HAS_GETLOGIN_R / **/
-#define GETLOGIN_R_PROTO 0 /**/
-
-/* HAS_GETNETBYADDR:
- * This symbol, if defined, indicates that the getnetbyaddr() routine is
- * available to look up networks by their IP addresses.
- */
-/*#define HAS_GETNETBYADDR / **/
-
-/* HAS_GETNETBYNAME:
- * This symbol, if defined, indicates that the getnetbyname() routine is
- * available to look up networks by their names.
- */
-/*#define HAS_GETNETBYNAME / **/
-
-/* HAS_GETNETENT:
- * This symbol, if defined, indicates that the getnetent() routine is
- * available to look up network names in some data base or another.
- */
-/*#define HAS_GETNETENT / **/
-
-/* HAS_GETNETBYADDR_R:
- * This symbol, if defined, indicates that the getnetbyaddr_r routine
- * is available to getnetbyaddr re-entrantly.
- */
-/* GETNETBYADDR_R_PROTO:
- * This symbol encodes the prototype of getnetbyaddr_r.
- * It is zero if d_getnetbyaddr_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getnetbyaddr_r
- * is defined.
- */
-/*#define HAS_GETNETBYADDR_R / **/
-#define GETNETBYADDR_R_PROTO 0 /**/
-
-/* HAS_GETNETBYNAME_R:
- * This symbol, if defined, indicates that the getnetbyname_r routine
- * is available to getnetbyname re-entrantly.
- */
-/* GETNETBYNAME_R_PROTO:
- * This symbol encodes the prototype of getnetbyname_r.
- * It is zero if d_getnetbyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getnetbyname_r
- * is defined.
- */
-/*#define HAS_GETNETBYNAME_R / **/
-#define GETNETBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETNETENT_R:
- * This symbol, if defined, indicates that the getnetent_r routine
- * is available to getnetent re-entrantly.
- */
-/* GETNETENT_R_PROTO:
- * This symbol encodes the prototype of getnetent_r.
- * It is zero if d_getnetent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getnetent_r
- * is defined.
- */
-/*#define HAS_GETNETENT_R / **/
-#define GETNETENT_R_PROTO 0 /**/
-
-/* HAS_GETNET_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getnetent(), getnetbyname(), and
- * getnetbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-/*#define HAS_GETNET_PROTOS / **/
-
-/* HAS_GETPROTOENT:
- * This symbol, if defined, indicates that the getprotoent() routine is
- * available to look up protocols in some data base or another.
- */
-/*#define HAS_GETPROTOENT / **/
-
-/* HAS_GETPGRP:
- * This symbol, if defined, indicates that the getpgrp routine is
- * available to get the current process group.
- */
-/* USE_BSD_GETPGRP:
- * This symbol, if defined, indicates that getpgrp needs one
- * arguments whereas USG one needs none.
- */
-/*#define HAS_GETPGRP / **/
-/*#define USE_BSD_GETPGRP / **/
-
-/* HAS_GETPROTOBYNAME:
- * This symbol, if defined, indicates that the getprotobyname()
- * routine is available to look up protocols by their name.
- */
-/* HAS_GETPROTOBYNUMBER:
- * This symbol, if defined, indicates that the getprotobynumber()
- * routine is available to look up protocols by their number.
- */
-#define HAS_GETPROTOBYNAME /**/
-#define HAS_GETPROTOBYNUMBER /**/
-
-/* HAS_GETPROTOBYNAME_R:
- * This symbol, if defined, indicates that the getprotobyname_r routine
- * is available to getprotobyname re-entrantly.
- */
-/* GETPROTOBYNAME_R_PROTO:
- * This symbol encodes the prototype of getprotobyname_r.
- * It is zero if d_getprotobyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getprotobyname_r
- * is defined.
- */
-/*#define HAS_GETPROTOBYNAME_R / **/
-#define GETPROTOBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETPROTOBYNUMBER_R:
- * This symbol, if defined, indicates that the getprotobynumber_r routine
- * is available to getprotobynumber re-entrantly.
- */
-/* GETPROTOBYNUMBER_R_PROTO:
- * This symbol encodes the prototype of getprotobynumber_r.
- * It is zero if d_getprotobynumber_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getprotobynumber_r
- * is defined.
- */
-/*#define HAS_GETPROTOBYNUMBER_R / **/
-#define GETPROTOBYNUMBER_R_PROTO 0 /**/
-
-/* HAS_GETPROTOENT_R:
- * This symbol, if defined, indicates that the getprotoent_r routine
- * is available to getprotoent re-entrantly.
- */
-/* GETPROTOENT_R_PROTO:
- * This symbol encodes the prototype of getprotoent_r.
- * It is zero if d_getprotoent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getprotoent_r
- * is defined.
- */
-/*#define HAS_GETPROTOENT_R / **/
-#define GETPROTOENT_R_PROTO 0 /**/
-
-/* HAS_GETPROTO_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getprotoent(), getprotobyname(), and
- * getprotobyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETPROTO_PROTOS /**/
-
-/* HAS_GETPWENT:
- * This symbol, if defined, indicates that the getpwent routine is
- * available for sequential access of the passwd database.
- * If this is not available, the older getpw() function may be available.
- */
-/*#define HAS_GETPWENT / **/
-
-/* HAS_GETPWENT_R:
- * This symbol, if defined, indicates that the getpwent_r routine
- * is available to getpwent re-entrantly.
- */
-/* GETPWENT_R_PROTO:
- * This symbol encodes the prototype of getpwent_r.
- * It is zero if d_getpwent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwent_r
- * is defined.
- */
-/*#define HAS_GETPWENT_R / **/
-#define GETPWENT_R_PROTO 0 /**/
-
-/* HAS_GETPWNAM_R:
- * This symbol, if defined, indicates that the getpwnam_r routine
- * is available to getpwnam re-entrantly.
- */
-/* GETPWNAM_R_PROTO:
- * This symbol encodes the prototype of getpwnam_r.
- * It is zero if d_getpwnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwnam_r
- * is defined.
- */
-/*#define HAS_GETPWNAM_R / **/
-#define GETPWNAM_R_PROTO 0 /**/
-
-/* HAS_GETPWUID_R:
- * This symbol, if defined, indicates that the getpwuid_r routine
- * is available to getpwuid re-entrantly.
- */
-/* GETPWUID_R_PROTO:
- * This symbol encodes the prototype of getpwuid_r.
- * It is zero if d_getpwuid_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwuid_r
- * is defined.
- */
-/*#define HAS_GETPWUID_R / **/
-#define GETPWUID_R_PROTO 0 /**/
-
-/* HAS_GETSERVENT:
- * This symbol, if defined, indicates that the getservent() routine is
- * available to look up network services in some data base or another.
- */
-/*#define HAS_GETSERVENT / **/
-
-/* HAS_GETSERVBYNAME_R:
- * This symbol, if defined, indicates that the getservbyname_r routine
- * is available to getservbyname re-entrantly.
- */
-/* GETSERVBYNAME_R_PROTO:
- * This symbol encodes the prototype of getservbyname_r.
- * It is zero if d_getservbyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservbyname_r
- * is defined.
- */
-/*#define HAS_GETSERVBYNAME_R / **/
-#define GETSERVBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETSERVBYPORT_R:
- * This symbol, if defined, indicates that the getservbyport_r routine
- * is available to getservbyport re-entrantly.
- */
-/* GETSERVBYPORT_R_PROTO:
- * This symbol encodes the prototype of getservbyport_r.
- * It is zero if d_getservbyport_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservbyport_r
- * is defined.
- */
-/*#define HAS_GETSERVBYPORT_R / **/
-#define GETSERVBYPORT_R_PROTO 0 /**/
-
-/* HAS_GETSERVENT_R:
- * This symbol, if defined, indicates that the getservent_r routine
- * is available to getservent re-entrantly.
- */
-/* GETSERVENT_R_PROTO:
- * This symbol encodes the prototype of getservent_r.
- * It is zero if d_getservent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservent_r
- * is defined.
- */
-/*#define HAS_GETSERVENT_R / **/
-#define GETSERVENT_R_PROTO 0 /**/
-
-/* HAS_GETSERV_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getservent(), getservbyname(), and
- * getservbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETSERV_PROTOS /**/
-
-/* HAS_GETSPNAM_R:
- * This symbol, if defined, indicates that the getspnam_r routine
- * is available to getspnam re-entrantly.
- */
-/* GETSPNAM_R_PROTO:
- * This symbol encodes the prototype of getspnam_r.
- * It is zero if d_getspnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getspnam_r
- * is defined.
- */
-/*#define HAS_GETSPNAM_R / **/
-#define GETSPNAM_R_PROTO 0 /**/
-
-/* HAS_GETSERVBYNAME:
- * This symbol, if defined, indicates that the getservbyname()
- * routine is available to look up services by their name.
- */
-/* HAS_GETSERVBYPORT:
- * This symbol, if defined, indicates that the getservbyport()
- * routine is available to look up services by their port.
- */
-#define HAS_GETSERVBYNAME /**/
-#define HAS_GETSERVBYPORT /**/
-
-/* HAS_GMTIME_R:
- * This symbol, if defined, indicates that the gmtime_r routine
- * is available to gmtime re-entrantly.
- */
-/* GMTIME_R_PROTO:
- * This symbol encodes the prototype of gmtime_r.
- * It is zero if d_gmtime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gmtime_r
- * is defined.
- */
-/*#define HAS_GMTIME_R / **/
-#define GMTIME_R_PROTO 0 /**/
-
-/* HAS_HTONL:
- * This symbol, if defined, indicates that the htonl() routine (and
- * friends htons() ntohl() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_HTONS:
- * This symbol, if defined, indicates that the htons() routine (and
- * friends htonl() ntohl() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_NTOHL:
- * This symbol, if defined, indicates that the ntohl() routine (and
- * friends htonl() htons() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_NTOHS:
- * This symbol, if defined, indicates that the ntohs() routine (and
- * friends htonl() htons() ntohl()) are available to do network
- * order byte swapping.
- */
-#define HAS_HTONL /**/
-#define HAS_HTONS /**/
-#define HAS_NTOHL /**/
-#define HAS_NTOHS /**/
-
-/* HAS_LOCALTIME_R:
- * This symbol, if defined, indicates that the localtime_r routine
- * is available to localtime re-entrantly.
- */
-/* LOCALTIME_R_NEEDS_TZSET:
- * Many libc's localtime_r implementations do not call tzset,
- * making them differ from localtime(), and making timezone
- * changes using \undef{TZ} without explicitly calling tzset
- * impossible. This symbol makes us call tzset before localtime_r
- */
-/*#define LOCALTIME_R_NEEDS_TZSET / **/
-#ifdef LOCALTIME_R_NEEDS_TZSET
-#define L_R_TZSET tzset(),
-#else
-#define L_R_TZSET
-#endif
-
-/* LOCALTIME_R_PROTO:
- * This symbol encodes the prototype of localtime_r.
- * It is zero if d_localtime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_localtime_r
- * is defined.
- */
-/*#define HAS_LOCALTIME_R / **/
-#define LOCALTIME_R_PROTO 0 /**/
-
-/* HAS_LONG_DOUBLE:
- * This symbol will be defined if the C compiler supports long
- * doubles.
- */
-/* LONG_DOUBLESIZE:
- * This symbol contains the size of a long double, so that the
- * C preprocessor can make decisions based on it. It is only
- * defined if the system supports long doubles.
- */
-#define HAS_LONG_DOUBLE /**/
-#ifdef HAS_LONG_DOUBLE
-#define LONG_DOUBLESIZE 10 /**/
-#endif
-
-/* HAS_LONG_LONG:
- * This symbol will be defined if the C compiler supports long long.
- */
-/* LONGLONGSIZE:
- * This symbol contains the size of a long long, so that the
- * C preprocessor can make decisions based on it. It is only
- * defined if the system supports long long.
- */
-/*#define HAS_LONG_LONG / **/
-#ifdef HAS_LONG_LONG
-#define LONGLONGSIZE 8 /**/
-#endif
-
-/* HAS_LSEEK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the lseek() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern off_t lseek(int, off_t, int);
- */
-#define HAS_LSEEK_PROTO /**/
-
-/* HAS_MEMCHR:
- * This symbol, if defined, indicates that the memchr routine is available
- * to locate characters within a C string.
- */
-#define HAS_MEMCHR /**/
-
-/* HAS_MKSTEMP:
- * This symbol, if defined, indicates that the mkstemp routine is
- * available to exclusively create and open a uniquely named
- * temporary file.
- */
-/*#define HAS_MKSTEMP / **/
-
-/* HAS_MMAP:
- * This symbol, if defined, indicates that the mmap system call is
- * available to map a file into memory.
- */
-/* Mmap_t:
- * This symbol holds the return type of the mmap() system call
- * (and simultaneously the type of the first argument).
- * Usually set to 'void *' or 'caddr_t'.
- */
-/*#define HAS_MMAP / **/
-#define Mmap_t void * /**/
-
-/* HAS_MSG:
- * This symbol, if defined, indicates that the entire msg*(2) library is
- * supported (IPC mechanism based on message queues).
- */
-/*#define HAS_MSG / **/
-
-/* OLD_PTHREAD_CREATE_JOINABLE:
- * This symbol, if defined, indicates how to create pthread
- * in joinable (aka undetached) state. NOTE: not defined
- * if pthread.h already has defined PTHREAD_CREATE_JOINABLE
- * (the new version of the constant).
- * If defined, known values are PTHREAD_CREATE_UNDETACHED
- * and __UNDETACHED.
- */
-/*#define OLD_PTHREAD_CREATE_JOINABLE / **/
-
-/* HAS_PTHREAD_ATFORK:
- * This symbol, if defined, indicates that the pthread_atfork routine
- * is available to setup fork handlers.
- */
-/*#define HAS_PTHREAD_ATFORK / **/
-
-/* HAS_PTHREAD_YIELD:
- * This symbol, if defined, indicates that the pthread_yield
- * routine is available to yield the execution of the current
- * thread. sched_yield is preferable to pthread_yield.
- */
-/* SCHED_YIELD:
- * This symbol defines the way to yield the execution of
- * the current thread. Known ways are sched_yield,
- * pthread_yield, and pthread_yield with NULL.
- */
-/* HAS_SCHED_YIELD:
- * This symbol, if defined, indicates that the sched_yield
- * routine is available to yield the execution of the current
- * thread. sched_yield is preferable to pthread_yield.
- */
-/*#define HAS_PTHREAD_YIELD / **/
-#define SCHED_YIELD /**/
-/*#define HAS_SCHED_YIELD / **/
-
-/* HAS_RANDOM_R:
- * This symbol, if defined, indicates that the random_r routine
- * is available to random re-entrantly.
- */
-/* RANDOM_R_PROTO:
- * This symbol encodes the prototype of random_r.
- * It is zero if d_random_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_random_r
- * is defined.
- */
-/*#define HAS_RANDOM_R / **/
-#define RANDOM_R_PROTO 0 /**/
-
-/* HAS_READDIR64_R:
- * This symbol, if defined, indicates that the readdir64_r routine
- * is available to readdir64 re-entrantly.
- */
-/* READDIR64_R_PROTO:
- * This symbol encodes the prototype of readdir64_r.
- * It is zero if d_readdir64_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_readdir64_r
- * is defined.
- */
-/*#define HAS_READDIR64_R / **/
-#define READDIR64_R_PROTO 0 /**/
-
-/* HAS_READDIR_R:
- * This symbol, if defined, indicates that the readdir_r routine
- * is available to readdir re-entrantly.
- */
-/* READDIR_R_PROTO:
- * This symbol encodes the prototype of readdir_r.
- * It is zero if d_readdir_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_readdir_r
- * is defined.
- */
-/*#define HAS_READDIR_R / **/
-#define READDIR_R_PROTO 0 /**/
-
-/* HAS_SEM:
- * This symbol, if defined, indicates that the entire sem*(2) library is
- * supported.
- */
-/*#define HAS_SEM / **/
-
-/* HAS_SETGRENT:
- * This symbol, if defined, indicates that the setgrent routine is
- * available for initializing sequential access of the group database.
- */
-/*#define HAS_SETGRENT / **/
-
-/* HAS_SETGRENT_R:
- * This symbol, if defined, indicates that the setgrent_r routine
- * is available to setgrent re-entrantly.
- */
-/* SETGRENT_R_PROTO:
- * This symbol encodes the prototype of setgrent_r.
- * It is zero if d_setgrent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setgrent_r
- * is defined.
- */
-/*#define HAS_SETGRENT_R / **/
-#define SETGRENT_R_PROTO 0 /**/
-
-/* HAS_SETHOSTENT:
- * This symbol, if defined, indicates that the sethostent() routine is
- * available.
- */
-/*#define HAS_SETHOSTENT / **/
-
-/* HAS_SETHOSTENT_R:
- * This symbol, if defined, indicates that the sethostent_r routine
- * is available to sethostent re-entrantly.
- */
-/* SETHOSTENT_R_PROTO:
- * This symbol encodes the prototype of sethostent_r.
- * It is zero if d_sethostent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_sethostent_r
- * is defined.
- */
-/*#define HAS_SETHOSTENT_R / **/
-#define SETHOSTENT_R_PROTO 0 /**/
-
-/* HAS_SETLOCALE_R:
- * This symbol, if defined, indicates that the setlocale_r routine
- * is available to setlocale re-entrantly.
- */
-/* SETLOCALE_R_PROTO:
- * This symbol encodes the prototype of setlocale_r.
- * It is zero if d_setlocale_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setlocale_r
- * is defined.
- */
-/*#define HAS_SETLOCALE_R / **/
-#define SETLOCALE_R_PROTO 0 /**/
-
-/* HAS_SETNETENT:
- * This symbol, if defined, indicates that the setnetent() routine is
- * available.
- */
-/*#define HAS_SETNETENT / **/
-
-/* HAS_SETNETENT_R:
- * This symbol, if defined, indicates that the setnetent_r routine
- * is available to setnetent re-entrantly.
- */
-/* SETNETENT_R_PROTO:
- * This symbol encodes the prototype of setnetent_r.
- * It is zero if d_setnetent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setnetent_r
- * is defined.
- */
-/*#define HAS_SETNETENT_R / **/
-#define SETNETENT_R_PROTO 0 /**/
-
-/* HAS_SETPROTOENT:
- * This symbol, if defined, indicates that the setprotoent() routine is
- * available.
- */
-/*#define HAS_SETPROTOENT / **/
-
-/* HAS_SETPGRP:
- * This symbol, if defined, indicates that the setpgrp routine is
- * available to set the current process group.
- */
-/* USE_BSD_SETPGRP:
- * This symbol, if defined, indicates that setpgrp needs two
- * arguments whereas USG one needs none. See also HAS_SETPGID
- * for a POSIX interface.
- */
-/*#define HAS_SETPGRP / **/
-/*#define USE_BSD_SETPGRP / **/
-
-/* HAS_SETPROTOENT_R:
- * This symbol, if defined, indicates that the setprotoent_r routine
- * is available to setprotoent re-entrantly.
- */
-/* SETPROTOENT_R_PROTO:
- * This symbol encodes the prototype of setprotoent_r.
- * It is zero if d_setprotoent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setprotoent_r
- * is defined.
- */
-/*#define HAS_SETPROTOENT_R / **/
-#define SETPROTOENT_R_PROTO 0 /**/
-
-/* HAS_SETPWENT:
- * This symbol, if defined, indicates that the setpwent routine is
- * available for initializing sequential access of the passwd database.
- */
-/*#define HAS_SETPWENT / **/
-
-/* HAS_SETPWENT_R:
- * This symbol, if defined, indicates that the setpwent_r routine
- * is available to setpwent re-entrantly.
- */
-/* SETPWENT_R_PROTO:
- * This symbol encodes the prototype of setpwent_r.
- * It is zero if d_setpwent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setpwent_r
- * is defined.
- */
-/*#define HAS_SETPWENT_R / **/
-#define SETPWENT_R_PROTO 0 /**/
-
-/* HAS_SETSERVENT:
- * This symbol, if defined, indicates that the setservent() routine is
- * available.
- */
-/*#define HAS_SETSERVENT / **/
-
-/* HAS_SETSERVENT_R:
- * This symbol, if defined, indicates that the setservent_r routine
- * is available to setservent re-entrantly.
- */
-/* SETSERVENT_R_PROTO:
- * This symbol encodes the prototype of setservent_r.
- * It is zero if d_setservent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setservent_r
- * is defined.
- */
-/*#define HAS_SETSERVENT_R / **/
-#define SETSERVENT_R_PROTO 0 /**/
-
-/* HAS_SETVBUF:
- * This symbol, if defined, indicates that the setvbuf routine is
- * available to change buffering on an open stdio stream.
- * to a line-buffered mode.
- */
-#define HAS_SETVBUF /**/
-
-/* HAS_SHM:
- * This symbol, if defined, indicates that the entire shm*(2) library is
- * supported.
- */
-/*#define HAS_SHM / **/
-
-/* Shmat_t:
- * This symbol holds the return type of the shmat() system call.
- * Usually set to 'void *' or 'char *'.
- */
-/* HAS_SHMAT_PROTOTYPE:
- * This symbol, if defined, indicates that the sys/shm.h includes
- * a prototype for shmat(). Otherwise, it is up to the program to
- * guess one. Shmat_t shmat(int, Shmat_t, int) is a good guess,
- * but not always right so it should be emitted by the program only
- * when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs.
- */
-#define Shmat_t void * /**/
-/*#define HAS_SHMAT_PROTOTYPE / **/
-
-/* HAS_SOCKET:
- * This symbol, if defined, indicates that the BSD socket interface is
- * supported.
- */
-/* HAS_SOCKETPAIR:
- * This symbol, if defined, indicates that the BSD socketpair() call is
- * supported.
- */
-/* HAS_MSG_CTRUNC:
- * This symbol, if defined, indicates that the MSG_CTRUNC is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_DONTROUTE:
- * This symbol, if defined, indicates that the MSG_DONTROUTE is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_OOB:
- * This symbol, if defined, indicates that the MSG_OOB is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_PEEK:
- * This symbol, if defined, indicates that the MSG_PEEK is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_PROXY:
- * This symbol, if defined, indicates that the MSG_PROXY is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_SCM_RIGHTS:
- * This symbol, if defined, indicates that the SCM_RIGHTS is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-#define HAS_SOCKET /**/
-/*#define HAS_SOCKETPAIR / **/
-/*#define HAS_MSG_CTRUNC / **/
-/*#define HAS_MSG_DONTROUTE / **/
-/*#define HAS_MSG_OOB / **/
-/*#define HAS_MSG_PEEK / **/
-/*#define HAS_MSG_PROXY / **/
-/*#define HAS_SCM_RIGHTS / **/
-
-/* HAS_SRAND48_R:
- * This symbol, if defined, indicates that the srand48_r routine
- * is available to srand48 re-entrantly.
- */
-/* SRAND48_R_PROTO:
- * This symbol encodes the prototype of srand48_r.
- * It is zero if d_srand48_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_srand48_r
- * is defined.
- */
-/*#define HAS_SRAND48_R / **/
-#define SRAND48_R_PROTO 0 /**/
-
-/* HAS_SRANDOM_R:
- * This symbol, if defined, indicates that the srandom_r routine
- * is available to srandom re-entrantly.
- */
-/* SRANDOM_R_PROTO:
- * This symbol encodes the prototype of srandom_r.
- * It is zero if d_srandom_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_srandom_r
- * is defined.
- */
-/*#define HAS_SRANDOM_R / **/
-#define SRANDOM_R_PROTO 0 /**/
-
-/* USE_STAT_BLOCKS:
- * This symbol is defined if this system has a stat structure declaring
- * st_blksize and st_blocks.
- */
-#ifndef USE_STAT_BLOCKS
-/*#define USE_STAT_BLOCKS / **/
-#endif
-
-/* USE_STRUCT_COPY:
- * This symbol, if defined, indicates that this C compiler knows how
- * to copy structures. If undefined, you'll need to use a block copy
- * routine of some sort instead.
- */
-#define USE_STRUCT_COPY /**/
-
-/* HAS_STRERROR:
- * This symbol, if defined, indicates that the strerror routine is
- * available to translate error numbers to strings. See the writeup
- * of Strerror() in this file before you try to define your own.
- */
-/* HAS_SYS_ERRLIST:
- * This symbol, if defined, indicates that the sys_errlist array is
- * available to translate error numbers to strings. The extern int
- * sys_nerr gives the size of that table.
- */
-/* Strerror:
- * This preprocessor symbol is defined as a macro if strerror() is
- * not available to translate error numbers to strings but sys_errlist[]
- * array is there.
- */
-#define HAS_STRERROR /**/
-#define HAS_SYS_ERRLIST /**/
-#define Strerror(e) strerror(e)
-
-/* HAS_STRERROR_R:
- * This symbol, if defined, indicates that the strerror_r routine
- * is available to strerror re-entrantly.
- */
-/* STRERROR_R_PROTO:
- * This symbol encodes the prototype of strerror_r.
- * It is zero if d_strerror_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_strerror_r
- * is defined.
- */
-/*#define HAS_STRERROR_R / **/
-#define STRERROR_R_PROTO 0 /**/
-
-/* HAS_STRTOUL:
- * This symbol, if defined, indicates that the strtoul routine is
- * available to provide conversion of strings to unsigned long.
- */
-#define HAS_STRTOUL /**/
-
-/* HAS_TIME:
- * This symbol, if defined, indicates that the time() routine exists.
- */
-/* Time_t:
- * This symbol holds the type returned by time(). It can be long,
- * or time_t on BSD sites (in which case <sys/types.h> should be
- * included).
- */
-#define HAS_TIME /**/
-#define Time_t time_t /* Time type */
-
-/* HAS_TIMES:
- * This symbol, if defined, indicates that the times() routine exists.
- * Note that this became obsolete on some systems (SUNOS), which now
- * use getrusage(). It may be necessary to include <sys/times.h>.
- */
-#define HAS_TIMES /**/
-
-/* HAS_TMPNAM_R:
- * This symbol, if defined, indicates that the tmpnam_r routine
- * is available to tmpnam re-entrantly.
- */
-/* TMPNAM_R_PROTO:
- * This symbol encodes the prototype of tmpnam_r.
- * It is zero if d_tmpnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_tmpnam_r
- * is defined.
- */
-/*#define HAS_TMPNAM_R / **/
-#define TMPNAM_R_PROTO 0 /**/
-
-/* HAS_TTYNAME_R:
- * This symbol, if defined, indicates that the ttyname_r routine
- * is available to ttyname re-entrantly.
- */
-/* TTYNAME_R_PROTO:
- * This symbol encodes the prototype of ttyname_r.
- * It is zero if d_ttyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ttyname_r
- * is defined.
- */
-/*#define HAS_TTYNAME_R / **/
-#define TTYNAME_R_PROTO 0 /**/
-
-/* HAS_UNION_SEMUN:
- * This symbol, if defined, indicates that the union semun is
- * defined by including <sys/sem.h>. If not, the user code
- * probably needs to define it as:
- * union semun {
- * int val;
- * struct semid_ds *buf;
- * unsigned short *array;
- * }
- */
-/* USE_SEMCTL_SEMUN:
- * This symbol, if defined, indicates that union semun is
- * used for semctl IPC_STAT.
- */
-/* USE_SEMCTL_SEMID_DS:
- * This symbol, if defined, indicates that struct semid_ds * is
- * used for semctl IPC_STAT.
- */
-#define HAS_UNION_SEMUN /**/
-/*#define USE_SEMCTL_SEMUN / **/
-/*#define USE_SEMCTL_SEMID_DS / **/
-
-/* HAS_VFORK:
- * This symbol, if defined, indicates that vfork() exists.
- */
-/*#define HAS_VFORK / **/
-
-/* HAS_PSEUDOFORK:
- * This symbol, if defined, indicates that an emulation of the
- * fork routine is available.
- */
-/*#define HAS_PSEUDOFORK / **/
-
-/* Signal_t:
- * This symbol's value is either "void" or "int", corresponding to the
- * appropriate return type of a signal handler. Thus, you can declare
- * a signal handler using "Signal_t (*handler)()", and define the
- * handler using "Signal_t handler(sig)".
- */
-#define Signal_t void /* Signal handler's return type */
-
-/* HASVOLATILE:
- * This symbol, if defined, indicates that this C compiler knows about
- * the volatile declaration.
- */
-#define HASVOLATILE /**/
-#ifndef HASVOLATILE
-#define volatile
-#endif
-
-/* Fpos_t:
- * This symbol holds the type used to declare file positions in libc.
- * It can be fpos_t, long, uint, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Fpos_t fpos_t /* File position type */
-
-/* Gid_t_f:
- * This symbol defines the format string used for printing a Gid_t.
- */
-#define Gid_t_f "d" /**/
-
-/* Gid_t_sign:
- * This symbol holds the signedess of a Gid_t.
- * 1 for unsigned, -1 for signed.
- */
-#define Gid_t_sign -1 /* GID sign */
-
-/* Gid_t_size:
- * This symbol holds the size of a Gid_t in bytes.
- */
-#define Gid_t_size 4 /* GID size */
-
-/* Gid_t:
- * This symbol holds the return type of getgid() and the type of
- * argument to setrgid() and related functions. Typically,
- * it is the type of group ids in the kernel. It can be int, ushort,
- * gid_t, etc... It may be necessary to include <sys/types.h> to get
- * any typedef'ed information.
- */
-#define Gid_t gid_t /* Type for getgid(), etc... */
-
-/* I_DIRENT:
- * This symbol, if defined, indicates to the C program that it should
- * include <dirent.h>. Using this symbol also triggers the definition
- * of the Direntry_t define which ends up being 'struct dirent' or
- * 'struct direct' depending on the availability of <dirent.h>.
- */
-/* DIRNAMLEN:
- * This symbol, if defined, indicates to the C program that the length
- * of directory entry names is provided by a d_namlen field. Otherwise
- * you need to do strlen() on the d_name field.
- */
-/* Direntry_t:
- * This symbol is set to 'struct direct' or 'struct dirent' depending on
- * whether dirent is available or not. You should use this pseudo type to
- * portably declare your directory entries.
- */
-#define I_DIRENT /**/
-#define DIRNAMLEN /**/
-#define Direntry_t struct direct
-
-/* I_GRP:
- * This symbol, if defined, indicates to the C program that it should
- * include <grp.h>.
- */
-/* GRPASSWD:
- * This symbol, if defined, indicates to the C program that struct group
- * in <grp.h> contains gr_passwd.
- */
-/*#define I_GRP / **/
-/*#define GRPASSWD / **/
-
-/* I_MACH_CTHREADS:
- * This symbol, if defined, indicates to the C program that it should
- * include <mach/cthreads.h>.
- */
-/*#define I_MACH_CTHREADS / **/
-
-/* I_NDBM:
- * This symbol, if defined, indicates that <ndbm.h> exists and should
- * be included.
- */
-/* I_GDBMNDBM:
- * This symbol, if defined, indicates that <gdbm/ndbm.h> exists and should
- * be included. This was the location of the ndbm.h compatibility file
- * in RedHat 7.1.
- */
-/* I_GDBM_NDBM:
- * This symbol, if defined, indicates that <gdbm-ndbm.h> exists and should
- * be included. This is the location of the ndbm.h compatibility file
- * in Debian 4.0.
- */
-/* NDBM_H_USES_PROTOTYPES:
- * This symbol, if defined, indicates that <ndbm.h> uses real ANSI C
- * prototypes instead of K&R style function declarations without any
- * parameter information. While ANSI C prototypes are supported in C++,
- * K&R style function declarations will yield errors.
- */
-/* GDBMNDBM_H_USES_PROTOTYPES:
- * This symbol, if defined, indicates that <gdbm/ndbm.h> uses real ANSI C
- * prototypes instead of K&R style function declarations without any
- * parameter information. While ANSI C prototypes are supported in C++,
- * K&R style function declarations will yield errors.
- */
-/* GDBM_NDBM_H_USES_PROTOTYPES:
- * This symbol, if defined, indicates that <gdbm-ndbm.h> uses real ANSI C
- * prototypes instead of K&R style function declarations without any
- * parameter information. While ANSI C prototypes are supported in C++,
- * K&R style function declarations will yield errors.
- */
-/*#define I_NDBM / **/
-/*#define I_GDBMNDBM / **/
-/*#define I_GDBM_NDBM / **/
-/*#define NDBM_H_USES_PROTOTYPES / **/
-/*#define GDBMNDBM_H_USES_PROTOTYPES / **/
-/*#define GDBM_NDBM_H_USES_PROTOTYPES / **/
-
-/* I_NETDB:
- * This symbol, if defined, indicates that <netdb.h> exists and
- * should be included.
- */
-/*#define I_NETDB / **/
-
-/* I_NET_ERRNO:
- * This symbol, if defined, indicates that <net/errno.h> exists and
- * should be included.
- */
-/*#define I_NET_ERRNO / **/
-
-/* I_PTHREAD:
- * This symbol, if defined, indicates to the C program that it should
- * include <pthread.h>.
- */
-/*#define I_PTHREAD / **/
-
-/* I_PWD:
- * This symbol, if defined, indicates to the C program that it should
- * include <pwd.h>.
- */
-/* PWQUOTA:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_quota.
- */
-/* PWAGE:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_age.
- */
-/* PWCHANGE:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_change.
- */
-/* PWCLASS:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_class.
- */
-/* PWEXPIRE:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_expire.
- */
-/* PWCOMMENT:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_comment.
- */
-/* PWGECOS:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_gecos.
- */
-/* PWPASSWD:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_passwd.
- */
-/*#define I_PWD / **/
-/*#define PWQUOTA / **/
-/*#define PWAGE / **/
-/*#define PWCHANGE / **/
-/*#define PWCLASS / **/
-/*#define PWEXPIRE / **/
-/*#define PWCOMMENT / **/
-/*#define PWGECOS / **/
-/*#define PWPASSWD / **/
-
-/* I_SYS_ACCESS:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/access.h>.
- */
-/*#define I_SYS_ACCESS / **/
-
-/* I_SYS_SECURITY:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/security.h>.
- */
-/*#define I_SYS_SECURITY / **/
-
-/* I_SYSUIO:
- * This symbol, if defined, indicates that <sys/uio.h> exists and
- * should be included.
- */
-/*#define I_SYSUIO / **/
-
-/* I_STDARG:
- * This symbol, if defined, indicates that <stdarg.h> exists and should
- * be included.
- */
-/* I_VARARGS:
- * This symbol, if defined, indicates to the C program that it should
- * include <varargs.h>.
- */
-#define I_STDARG /**/
-/*#define I_VARARGS / **/
-
-/* PERL_INC_VERSION_LIST:
- * This variable specifies the list of subdirectories in over
- * which perl.c:incpush() and lib/lib.pm will automatically
- * search when adding directories to @INC, in a format suitable
- * for a C initialization string. See the inc_version_list entry
- * in Porting/Glossary for more details.
- */
-/*#define PERL_INC_VERSION_LIST 0 / **/
-
-/* INSTALL_USR_BIN_PERL:
- * This symbol, if defined, indicates that Perl is to be installed
- * also as /usr/bin/perl.
- */
-/*#define INSTALL_USR_BIN_PERL / **/
-
-/* Off_t:
- * This symbol holds the type used to declare offsets in the kernel.
- * It can be int, long, off_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-/* LSEEKSIZE:
- * This symbol holds the number of bytes used by the Off_t.
- */
-/* Off_t_size:
- * This symbol holds the number of bytes used by the Off_t.
- */
-#define Off_t long /* <offset> type */
-#define LSEEKSIZE 4 /* <offset> size */
-#define Off_t_size 4 /* <offset> size */
-
-/* Free_t:
- * This variable contains the return type of free(). It is usually
- * void, but occasionally int.
- */
-/* Malloc_t:
- * This symbol is the type of pointer returned by malloc and realloc.
- */
-#define Malloc_t void * /**/
-#define Free_t void /**/
-
-/* PERL_MALLOC_WRAP:
- * This symbol, if defined, indicates that we'd like malloc wrap checks.
- */
-#define PERL_MALLOC_WRAP /**/
-
-/* MYMALLOC:
- * This symbol, if defined, indicates that we're using our own malloc.
- */
-/*#define MYMALLOC / **/
-
-/* Mode_t:
- * This symbol holds the type used to declare file modes
- * for systems calls. It is usually mode_t, but may be
- * int or unsigned short. It may be necessary to include <sys/types.h>
- * to get any typedef'ed information.
- */
-#define Mode_t mode_t /* file mode parameter for system calls */
-
-/* Netdb_host_t:
- * This symbol holds the type used for the 1st argument
- * to gethostbyaddr().
- */
-/* Netdb_hlen_t:
- * This symbol holds the type used for the 2nd argument
- * to gethostbyaddr().
- */
-/* Netdb_name_t:
- * This symbol holds the type used for the argument to
- * gethostbyname().
- */
-/* Netdb_net_t:
- * This symbol holds the type used for the 1st argument to
- * getnetbyaddr().
- */
-#define Netdb_host_t char * /**/
-#define Netdb_hlen_t int /**/
-#define Netdb_name_t char * /**/
-#define Netdb_net_t long /**/
-
-/* PERL_OTHERLIBDIRS:
- * This variable contains a colon-separated set of paths for the perl
- * binary to search for additional library files or modules.
- * These directories will be tacked to the end of @INC.
- * Perl will automatically search below each path for version-
- * and architecture-specific directories. See PERL_INC_VERSION_LIST
- * for more details.
- */
-/*#define PERL_OTHERLIBDIRS "" / **/
-
-/* Pid_t:
- * This symbol holds the type used to declare process ids in the kernel.
- * It can be int, uint, pid_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Pid_t int /* PID type */
-
-/* PRIVLIB:
- * This symbol contains the name of the private library for this package.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world. The program
- * should be prepared to do ~ expansion.
- */
-/* PRIVLIB_EXP:
- * This symbol contains the ~name expanded version of PRIVLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define PRIVLIB "c:\\perl\\lib" /**/
-#define PRIVLIB_EXP (win32_get_privlib(PERL_VERSION_STRING, NULL)) /**/
-
-/* CAN_PROTOTYPE:
- * If defined, this macro indicates that the C compiler can handle
- * function prototypes.
- */
-/* _:
- * This macro is used to declare function parameters for folks who want
- * to make declarations with prototypes using a different style than
- * the above macros. Use double parentheses. For example:
- *
- * int main _((int argc, char *argv[]));
- */
-#define CAN_PROTOTYPE /**/
-#ifdef CAN_PROTOTYPE
-#define _(args) args
-#else
-#define _(args) ()
-#endif
-
-/* Select_fd_set_t:
- * This symbol holds the type used for the 2nd, 3rd, and 4th
- * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET
- * is defined, and 'int *' otherwise. This is only useful if you
- * have select(), of course.
- */
-#define Select_fd_set_t Perl_fd_set * /**/
-
-/* SH_PATH:
- * This symbol contains the full pathname to the shell used on this
- * on this system to execute Bourne shell scripts. Usually, this will be
- * /bin/sh, though it's possible that some systems will have /bin/ksh,
- * /bin/pdksh, /bin/ash, /bin/bash, or even something such as
- * D:/bin/sh.exe.
- */
-#define SH_PATH "cmd /x /c" /**/
-
-/* SIG_NAME:
- * This symbol contains a list of signal names in order of
- * signal number. This is intended
- * to be used as a static array initialization, like this:
- * char *sig_name[] = { SIG_NAME };
- * The signals in the list are separated with commas, and each signal
- * is surrounded by double quotes. There is no leading SIG in the signal
- * name, i.e. SIGQUIT is known as "QUIT".
- * Gaps in the signal numbers (up to NSIG) are filled in with NUMnn,
- * etc., where nn is the actual signal number (e.g. NUM37).
- * The signal number for sig_name[i] is stored in sig_num[i].
- * The last element is 0 to terminate the list with a NULL. This
- * corresponds to the 0 at the end of the sig_name_init list.
- * Note that this variable is initialized from the sig_name_init,
- * not from sig_name (which is unused).
- */
-/* SIG_NUM:
- * This symbol contains a list of signal numbers, in the same order as the
- * SIG_NAME list. It is suitable for static array initialization, as in:
- * int sig_num[] = { SIG_NUM };
- * The signals in the list are separated with commas, and the indices
- * within that list and the SIG_NAME list match, so it's easy to compute
- * the signal name from a number or vice versa at the price of a small
- * dynamic linear lookup.
- * Duplicates are allowed, but are moved to the end of the list.
- * The signal number corresponding to sig_name[i] is sig_number[i].
- * if (i < NSIG) then sig_number[i] == i.
- * The last element is 0, corresponding to the 0 at the end of
- * the sig_name_init list.
- * Note that this variable is initialized from the sig_num_init,
- * not from sig_num (which is unused).
- */
-/* SIG_SIZE:
- * This variable contains the number of elements of the SIG_NAME
- * and SIG_NUM arrays, excluding the final NULL entry.
- */
-#define SIG_NAME "ZERO", "HUP", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "USR1", "USR2", "CHLD", "NUM19", "USR3", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0 /**/
-#define SIG_NUM 0, 1, 2, 21, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 18, 0 /**/
-#define SIG_SIZE 27 /**/
-
-/* SITEARCH:
- * This symbol contains the name of the private library for this package.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world. The program
- * should be prepared to do ~ expansion.
- * The standard distribution will put nothing in this directory.
- * After perl has been installed, users may install their own local
- * architecture-dependent modules in this directory with
- * MakeMaker Makefile.PL
- * or equivalent. See INSTALL for details.
- */
-/* SITEARCH_EXP:
- * This symbol contains the ~name expanded version of SITEARCH, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define SITEARCH "c:\\perl\\site\\lib" /**/
-/*#define SITEARCH_EXP "" / **/
-
-/* SITELIB:
- * This symbol contains the name of the private library for this package.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world. The program
- * should be prepared to do ~ expansion.
- * The standard distribution will put nothing in this directory.
- * After perl has been installed, users may install their own local
- * architecture-independent modules in this directory with
- * MakeMaker Makefile.PL
- * or equivalent. See INSTALL for details.
- */
-/* SITELIB_EXP:
- * This symbol contains the ~name expanded version of SITELIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/* SITELIB_STEM:
- * This define is SITELIB_EXP with any trailing version-specific component
- * removed. The elements in inc_version_list (inc_version_list.U) can
- * be tacked onto this variable to generate a list of directories to search.
- */
-#define SITELIB "c:\\perl\\site\\lib" /**/
-#define SITELIB_EXP (win32_get_sitelib(PERL_VERSION_STRING, NULL)) /**/
-#define SITELIB_STEM "" /**/
-
-/* Size_t_size:
- * This symbol holds the size of a Size_t in bytes.
- */
-#define Size_t_size 4 /**/
-
-/* Size_t:
- * This symbol holds the type used to declare length parameters
- * for string functions. It is usually size_t, but may be
- * unsigned long, int, etc. It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Size_t size_t /* length paramater for string functions */
-
-/* Sock_size_t:
- * This symbol holds the type used for the size argument of
- * various socket calls (just the base type, not the pointer-to).
- */
-#define Sock_size_t int /**/
-
-/* STDCHAR:
- * This symbol is defined to be the type of char used in stdio.h.
- * It has the values "unsigned char" or "char".
- */
-#define STDCHAR unsigned char /**/
-
-/* Uid_t_f:
- * This symbol defines the format string used for printing a Uid_t.
- */
-#define Uid_t_f "d" /**/
-
-/* Uid_t_sign:
- * This symbol holds the signedess of a Uid_t.
- * 1 for unsigned, -1 for signed.
- */
-#define Uid_t_sign -1 /* UID sign */
-
-/* Uid_t_size:
- * This symbol holds the size of a Uid_t in bytes.
- */
-#define Uid_t_size 4 /* UID size */
-
-/* Uid_t:
- * This symbol holds the type used to declare user ids in the kernel.
- * It can be int, ushort, uid_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Uid_t uid_t /* UID type */
-
-/* USE_ITHREADS:
- * This symbol, if defined, indicates that Perl should be built to
- * use the interpreter-based threading implementation.
- */
-/* USE_5005THREADS:
- * This symbol, if defined, indicates that Perl should be built to
- * use the 5.005-based threading implementation.
- * Only valid up to 5.8.x.
- */
-/* OLD_PTHREADS_API:
- * This symbol, if defined, indicates that Perl should
- * be built to use the old draft POSIX threads API.
- */
-/* USE_REENTRANT_API:
- * This symbol, if defined, indicates that Perl should
- * try to use the various _r versions of library functions.
- * This is extremely experimental.
- */
-/*#define USE_5005THREADS / **/
-/*#define USE_ITHREADS / **/
-#if defined(USE_5005THREADS) && !defined(USE_ITHREADS)
-#define USE_THREADS /* until src is revised*/
-#endif
-/*#define OLD_PTHREADS_API / **/
-/*#define USE_REENTRANT_API / **/
-
-/* PERL_VENDORARCH:
- * If defined, this symbol contains the name of a private library.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world.
- * It may have a ~ on the front.
- * The standard distribution will put nothing in this directory.
- * Vendors who distribute perl may wish to place their own
- * architecture-dependent modules and extensions in this directory with
- * MakeMaker Makefile.PL INSTALLDIRS=vendor
- * or equivalent. See INSTALL for details.
- */
-/* PERL_VENDORARCH_EXP:
- * This symbol contains the ~name expanded version of PERL_VENDORARCH, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/*#define PERL_VENDORARCH "" / **/
-/*#define PERL_VENDORARCH_EXP "" / **/
-
-/* PERL_VENDORLIB_EXP:
- * This symbol contains the ~name expanded version of VENDORLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/* PERL_VENDORLIB_STEM:
- * This define is PERL_VENDORLIB_EXP with any trailing version-specific component
- * removed. The elements in inc_version_list (inc_version_list.U) can
- * be tacked onto this variable to generate a list of directories to search.
- */
-/*#define PERL_VENDORLIB_EXP "" / **/
-/*#define PERL_VENDORLIB_STEM "" / **/
-
-/* VOIDFLAGS:
- * This symbol indicates how much support of the void type is given by this
- * compiler. What various bits mean:
- *
- * 1 = supports declaration of void
- * 2 = supports arrays of pointers to functions returning void
- * 4 = supports comparisons between pointers to void functions and
- * addresses of void functions
- * 8 = suports declaration of generic void pointers
- *
- * The package designer should define VOIDUSED to indicate the requirements
- * of the package. This can be done either by #defining VOIDUSED before
- * including config.h, or by defining defvoidused in Myinit.U. If the
- * latter approach is taken, only those flags will be tested. If the
- * level of void support necessary is not present, defines void to int.
- */
-#ifndef VOIDUSED
-#define VOIDUSED 15
-#endif
-#define VOIDFLAGS 15
-#if (VOIDFLAGS & VOIDUSED) != VOIDUSED
-#define void int /* is void to be avoided? */
-#define M_VOID /* Xenix strikes again */
-#endif
-
-/* USE_CROSS_COMPILE:
- * This symbol, if defined, indicates that Perl is being cross-compiled.
- */
-/* PERL_TARGETARCH:
- * This symbol, if defined, indicates the target architecture
- * Perl has been cross-compiled to. Undefined if not a cross-compile.
- */
-#ifndef USE_CROSS_COMPILE
-/*#define USE_CROSS_COMPILE / **/
-#define PERL_TARGETARCH "" /**/
-#endif
-
-/* MEM_ALIGNBYTES:
- * This symbol contains the number of bytes required to align a
- * double, or a long double when applicable. Usual values are 2,
- * 4 and 8. The default is eight, for safety.
- */
-#if defined(USE_CROSS_COMPILE) || defined(MULTIARCH)
-# define MEM_ALIGNBYTES 8
-#else
-#define MEM_ALIGNBYTES 8
-#endif
-
-/* BYTEORDER:
- * This symbol holds the hexadecimal constant defined in byteorder,
- * in a UV, i.e. 0x1234 or 0x4321 or 0x12345678, etc...
- * If the compiler supports cross-compiling or multiple-architecture
- * binaries (eg. on NeXT systems), use compiler-defined macros to
- * determine the byte order.
- * On NeXT 3.2 (and greater), you can build "Fat" Multiple Architecture
- * Binaries (MAB) on either big endian or little endian machines.
- * The endian-ness is available at compile-time. This only matters
- * for perl, where the config.h can be generated and installed on
- * one system, and used by a different architecture to build an
- * extension. Older versions of NeXT that might not have
- * defined either *_ENDIAN__ were all on Motorola 680x0 series,
- * so the default case (for NeXT) is big endian to catch them.
- * This might matter for NeXT 3.0.
- */
-#if defined(USE_CROSS_COMPILE) || defined(MULTIARCH)
-# ifdef __LITTLE_ENDIAN__
-# if LONGSIZE == 4
-# define BYTEORDER 0x1234
-# else
-# if LONGSIZE == 8
-# define BYTEORDER 0x12345678
-# endif
-# endif
-# else
-# ifdef __BIG_ENDIAN__
-# if LONGSIZE == 4
-# define BYTEORDER 0x4321
-# else
-# if LONGSIZE == 8
-# define BYTEORDER 0x87654321
-# endif
-# endif
-# endif
-# endif
-# if !defined(BYTEORDER) && (defined(NeXT) || defined(__NeXT__))
-# define BYTEORDER 0x4321
-# endif
-#else
-#define BYTEORDER 0x1234 /* large digits for MSB */
-#endif /* NeXT */
-
-/* CHARBITS:
- * This symbol contains the size of a char, so that the C preprocessor
- * can make decisions based on it.
- */
-#define CHARBITS 8 /**/
-
-/* CASTI32:
- * This symbol is defined if the C compiler can cast negative
- * or large floating point numbers to 32-bit ints.
- */
-#define CASTI32 /**/
-
-/* CASTNEGFLOAT:
- * This symbol is defined if the C compiler can cast negative
- * numbers to unsigned longs, ints and shorts.
- */
-/* CASTFLAGS:
- * This symbol contains flags that say what difficulties the compiler
- * has casting odd floating values to unsigned long:
- * 0 = ok
- * 1 = couldn't cast < 0
- * 2 = couldn't cast >= 0x80000000
- * 4 = couldn't cast in argument expression list
- */
-#define CASTNEGFLOAT /**/
-#define CASTFLAGS 0 /**/
-
-/* VOID_CLOSEDIR:
- * This symbol, if defined, indicates that the closedir() routine
- * does not return a value.
- */
-/*#define VOID_CLOSEDIR / **/
-
-/* HAS_FD_SET:
- * This symbol, when defined, indicates presence of the fd_set typedef
- * in <sys/types.h>
- */
-#define HAS_FD_SET /**/
-
-/* Gconvert:
- * This preprocessor macro is defined to convert a floating point
- * number to a string without a trailing decimal point. This
- * emulates the behavior of sprintf("%g"), but is sometimes much more
- * efficient. If gconvert() is not available, but gcvt() drops the
- * trailing decimal point, then gcvt() is used. If all else fails,
- * a macro using sprintf("%g") is used. Arguments for the Gconvert
- * macro are: value, number of digits, whether trailing zeros should
- * be retained, and the output buffer.
- * The usual values are:
- * d_Gconvert='gconvert((x),(n),(t),(b))'
- * d_Gconvert='gcvt((x),(n),(b))'
- * d_Gconvert='sprintf((b),"%.*g",(n),(x))'
- * The last two assume trailing zeros should not be kept.
- */
-#define Gconvert(x,n,t,b) gcvt((x),(n),(b))
-
-/* HAS_GETPAGESIZE:
- * This symbol, if defined, indicates that the getpagesize system call
- * is available to get system page size, which is the granularity of
- * many memory management calls.
- */
-/*#define HAS_GETPAGESIZE / **/
-
-/* HAS_GNULIBC:
- * This symbol, if defined, indicates to the C program that
- * the GNU C library is being used. A better check is to use
- * the __GLIBC__ and __GLIBC_MINOR__ symbols supplied with glibc.
- */
-/*#define HAS_GNULIBC / **/
-#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)
-# define _GNU_SOURCE
-#endif
-
-/* HAS_ISASCII:
- * This manifest constant lets the C program know that isascii
- * is available.
- */
-#define HAS_ISASCII /**/
-
-/* HAS_LCHOWN:
- * This symbol, if defined, indicates that the lchown routine is
- * available to operate on a symbolic link (instead of following the
- * link).
- */
-/*#define HAS_LCHOWN / **/
-
-/* HAS_OPEN3:
- * This manifest constant lets the C program know that the three
- * argument form of open(2) is available.
- */
-/*#define HAS_OPEN3 / **/
-
-/* HAS_SAFE_BCOPY:
- * This symbol, if defined, indicates that the bcopy routine is available
- * to copy potentially overlapping memory blocks. Normally, you should
- * probably use memmove() or memcpy(). If neither is defined, roll your
- * own version.
- */
-/*#define HAS_SAFE_BCOPY / **/
-
-/* HAS_SAFE_MEMCPY:
- * This symbol, if defined, indicates that the memcpy routine is available
- * to copy potentially overlapping memory blocks. If you need to
- * copy overlapping memory blocks, you should check HAS_MEMMOVE and
- * use memmove() instead, if available.
- */
-/*#define HAS_SAFE_MEMCPY / **/
-
-/* HAS_SANE_MEMCMP:
- * This symbol, if defined, indicates that the memcmp routine is available
- * and can be used to compare relative magnitudes of chars with their high
- * bits set. If it is not defined, roll your own version.
- */
-#define HAS_SANE_MEMCMP /**/
-
-/* HAS_SIGACTION:
- * This symbol, if defined, indicates that Vr4's sigaction() routine
- * is available.
- */
-/*#define HAS_SIGACTION / **/
-
-/* HAS_SIGSETJMP:
- * This variable indicates to the C program that the sigsetjmp()
- * routine is available to save the calling process's registers
- * and stack environment for later use by siglongjmp(), and
- * to optionally save the process's signal mask. See
- * Sigjmp_buf, Sigsetjmp, and Siglongjmp.
- */
-/* Sigjmp_buf:
- * This is the buffer type to be used with Sigsetjmp and Siglongjmp.
- */
-/* Sigsetjmp:
- * This macro is used in the same way as sigsetjmp(), but will invoke
- * traditional setjmp() if sigsetjmp isn't available.
- * See HAS_SIGSETJMP.
- */
-/* Siglongjmp:
- * This macro is used in the same way as siglongjmp(), but will invoke
- * traditional longjmp() if siglongjmp isn't available.
- * See HAS_SIGSETJMP.
- */
-/*#define HAS_SIGSETJMP / **/
-#ifdef HAS_SIGSETJMP
-#define Sigjmp_buf sigjmp_buf
-#define Sigsetjmp(buf,save_mask) sigsetjmp((buf),(save_mask))
-#define Siglongjmp(buf,retval) siglongjmp((buf),(retval))
-#else
-#define Sigjmp_buf jmp_buf
-#define Sigsetjmp(buf,save_mask) setjmp((buf))
-#define Siglongjmp(buf,retval) longjmp((buf),(retval))
-#endif
-
-/* HAS_STATIC_INLINE:
- * This symbol, if defined, indicates that the C compiler supports
- * C99-style static inline. That is, the function can't be called
- * from another translation unit.
- */
-/* PERL_STATIC_INLINE:
- * This symbol gives the best-guess incantation to use for static
- * inline functions. If HAS_STATIC_INLINE is defined, this will
- * give C99-style inline. If HAS_STATIC_INLINE is not defined,
- * this will give a plain 'static'. It will always be defined
- * to something that gives static linkage.
- * Possibilities include
- * static inline (c99)
- * static __inline__ (gcc -ansi)
- * static __inline (MSVC)
- * static _inline (older MSVC)
- * static (c89 compilers)
- */
-/*#define HAS_STATIC_INLINE / **/
-#define PERL_STATIC_INLINE static /**/
-
-/* USE_STDIO_PTR:
- * This symbol is defined if the _ptr and _cnt fields (or similar)
- * of the stdio FILE structure can be used to access the stdio buffer
- * for a file handle. If this is defined, then the FILE_ptr(fp)
- * and FILE_cnt(fp) macros will also be defined and should be used
- * to access these fields.
- */
-/* FILE_ptr:
- * This macro is used to access the _ptr field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_PTR is defined.
- */
-/* STDIO_PTR_LVALUE:
- * This symbol is defined if the FILE_ptr macro can be used as an
- * lvalue.
- */
-/* FILE_cnt:
- * This macro is used to access the _cnt field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_PTR is defined.
- */
-/* STDIO_CNT_LVALUE:
- * This symbol is defined if the FILE_cnt macro can be used as an
- * lvalue.
- */
-/* STDIO_PTR_LVAL_SETS_CNT:
- * This symbol is defined if using the FILE_ptr macro as an lvalue
- * to increase the pointer by n has the side effect of decreasing the
- * value of File_cnt(fp) by n.
- */
-/* STDIO_PTR_LVAL_NOCHANGE_CNT:
- * This symbol is defined if using the FILE_ptr macro as an lvalue
- * to increase the pointer by n leaves File_cnt(fp) unchanged.
- */
-#define USE_STDIO_PTR /**/
-#ifdef USE_STDIO_PTR
-#define FILE_ptr(fp) ((fp)->curp)
-#define STDIO_PTR_LVALUE /**/
-#define FILE_cnt(fp) ((fp)->level)
-#define STDIO_CNT_LVALUE /**/
-/*#define STDIO_PTR_LVAL_SETS_CNT / **/
-#define STDIO_PTR_LVAL_NOCHANGE_CNT /**/
-#endif
-
-/* USE_STDIO_BASE:
- * This symbol is defined if the _base field (or similar) of the
- * stdio FILE structure can be used to access the stdio buffer for
- * a file handle. If this is defined, then the FILE_base(fp) macro
- * will also be defined and should be used to access this field.
- * Also, the FILE_bufsiz(fp) macro will be defined and should be used
- * to determine the number of bytes in the buffer. USE_STDIO_BASE
- * will never be defined unless USE_STDIO_PTR is.
- */
-/* FILE_base:
- * This macro is used to access the _base field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_BASE is defined.
- */
-/* FILE_bufsiz:
- * This macro is used to determine the number of bytes in the I/O
- * buffer pointed to by _base field (or equivalent) of the FILE
- * structure pointed to its argument. This macro will always be defined
- * if USE_STDIO_BASE is defined.
- */
-#define USE_STDIO_BASE /**/
-#ifdef USE_STDIO_BASE
-#define FILE_base(fp) ((fp)->buffer)
-#define FILE_bufsiz(fp) ((fp)->level + (fp)->curp - (fp)->buffer)
-#endif
-
-/* HAS_VPRINTF:
- * This symbol, if defined, indicates that the vprintf routine is available
- * to printf with a pointer to an argument list. If unavailable, you
- * may need to write your own, probably in terms of _doprnt().
- */
-/* USE_CHAR_VSPRINTF:
- * This symbol is defined if this system has vsprintf() returning type
- * (char*). The trend seems to be to declare it as "int vsprintf()". It
- * is up to the package author to declare vsprintf correctly based on the
- * symbol.
- */
-#define HAS_VPRINTF /**/
-/*#define USE_CHAR_VSPRINTF / **/
-
-/* DOUBLESIZE:
- * This symbol contains the size of a double, so that the C preprocessor
- * can make decisions based on it.
- */
-#define DOUBLESIZE 8 /**/
-
-/* I_TIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <time.h>.
- */
-/* I_SYS_TIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/time.h>.
- */
-/* I_SYS_TIME_KERNEL:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/time.h> with KERNEL defined.
- */
-/* HAS_TM_TM_ZONE:
- * This symbol, if defined, indicates to the C program that
- * the struct tm has a tm_zone field.
- */
-/* HAS_TM_TM_GMTOFF:
- * This symbol, if defined, indicates to the C program that
- * the struct tm has a tm_gmtoff field.
- */
-#define I_TIME /**/
-/*#define I_SYS_TIME / **/
-/*#define I_SYS_TIME_KERNEL / **/
-/*#define HAS_TM_TM_ZONE / **/
-/*#define HAS_TM_TM_GMTOFF / **/
-
-/* VAL_O_NONBLOCK:
- * This symbol is to be used during open() or fcntl(F_SETFL) to turn on
- * non-blocking I/O for the file descriptor. Note that there is no way
- * back, i.e. you cannot turn it blocking again this way. If you wish to
- * alternatively switch between blocking and non-blocking, use the
- * ioctl(FIOSNBIO) call instead, but that is not supported by all devices.
- */
-/* VAL_EAGAIN:
- * This symbol holds the errno error code set by read() when no data was
- * present on the non-blocking file descriptor.
- */
-/* RD_NODATA:
- * This symbol holds the return code from read() when no data is present
- * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is
- * not defined, then you can't distinguish between no data and EOF by
- * issuing a read(). You'll have to find another way to tell for sure!
- */
-/* EOF_NONBLOCK:
- * This symbol, if defined, indicates to the C program that a read() on
- * a non-blocking file descriptor will return 0 on EOF, and not the value
- * held in RD_NODATA (-1 usually, in that case!).
- */
-#define VAL_O_NONBLOCK O_NONBLOCK
-#define VAL_EAGAIN EAGAIN
-#define RD_NODATA -1
-#define EOF_NONBLOCK
-
-/* PTRSIZE:
- * This symbol contains the size of a pointer, so that the C preprocessor
- * can make decisions based on it. It will be sizeof(void *) if
- * the compiler supports (void *); otherwise it will be
- * sizeof(char *).
- */
-#define PTRSIZE 4 /**/
-
-/* Drand01:
- * This macro is to be used to generate uniformly distributed
- * random numbers over the range [0., 1.[. You may have to supply
- * an 'extern double drand48();' in your program since SunOS 4.1.3
- * doesn't provide you with anything relevant in its headers.
- * See HAS_DRAND48_PROTO.
- */
-/* Rand_seed_t:
- * This symbol defines the type of the argument of the
- * random seed function.
- */
-/* seedDrand01:
- * This symbol defines the macro to be used in seeding the
- * random number generator (see Drand01).
- */
-/* RANDBITS:
- * This symbol indicates how many bits are produced by the
- * function used to generate normalized random numbers.
- * Values include 15, 16, 31, and 48.
- */
-#define Drand01() (rand()/(double)((unsigned)1<<RANDBITS)) /**/
-#define Rand_seed_t unsigned /**/
-#define seedDrand01(x) srand((Rand_seed_t)x) /**/
-#define RANDBITS 15 /**/
-
-/* SSize_t:
- * This symbol holds the type used by functions that return
- * a count of bytes or an error condition. It must be a signed type.
- * It is usually ssize_t, but may be long or int, etc.
- * It may be necessary to include <sys/types.h> or <unistd.h>
- * to get any typedef'ed information.
- * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
- */
-#define SSize_t int /* signed count of bytes */
-
-/* EBCDIC:
- * This symbol, if defined, indicates that this system uses
- * EBCDIC encoding.
- */
-/*#define EBCDIC / **/
-
-/* SETUID_SCRIPTS_ARE_SECURE_NOW:
- * This symbol, if defined, indicates that the bug that prevents
- * setuid scripts from being secure is not present in this kernel.
- */
-/* DOSUID:
- * This symbol, if defined, indicates that the C program should
- * check the script that it is executing for setuid/setgid bits, and
- * attempt to emulate setuid/setgid on systems that have disabled
- * setuid #! scripts because the kernel can't do it securely.
- * It is up to the package designer to make sure that this emulation
- * is done securely. Among other things, it should do an fstat on
- * the script it just opened to make sure it really is a setuid/setgid
- * script, it should make sure the arguments passed correspond exactly
- * to the argument on the #! line, and it should not trust any
- * subprocesses to which it must pass the filename rather than the
- * file descriptor of the script to be executed.
- */
-/*#define SETUID_SCRIPTS_ARE_SECURE_NOW / **/
-/*#define DOSUID / **/
-
-/* PERL_USE_DEVEL:
- * This symbol, if defined, indicates that Perl was configured with
- * -Dusedevel, to enable development features. This should not be
- * done for production builds.
- */
-/*#define PERL_USE_DEVEL / **/
-
-/* HAS_ATOLF:
- * This symbol, if defined, indicates that the atolf routine is
- * available to convert strings into long doubles.
- */
-/*#define HAS_ATOLF / **/
-
-/* HAS_ATOLL:
- * This symbol, if defined, indicates that the atoll routine is
- * available to convert strings into long longs.
- */
-/*#define HAS_ATOLL / **/
-
-/* HAS__FWALK:
- * This symbol, if defined, indicates that the _fwalk system call is
- * available to apply a function to all the file handles.
- */
-/*#define HAS__FWALK / **/
-
-/* HAS_AINTL:
- * This symbol, if defined, indicates that the aintl routine is
- * available. If copysignl is also present we can emulate modfl.
- */
-/*#define HAS_AINTL / **/
-
-/* HAS_BUILTIN_CHOOSE_EXPR:
- * Can we handle GCC builtin for compile-time ternary-like expressions
- */
-/* HAS_BUILTIN_EXPECT:
- * Can we handle GCC builtin for telling that certain values are more
- * likely
- */
-/*#define HAS_BUILTIN_EXPECT / **/
-/*#define HAS_BUILTIN_CHOOSE_EXPR / **/
-
-/* HAS_C99_VARIADIC_MACROS:
- * If defined, the compiler supports C99 variadic macros.
- */
-/*#define HAS_C99_VARIADIC_MACROS / **/
-
-/* HAS_CLASS:
- * This symbol, if defined, indicates that the class routine is
- * available to classify doubles. Available for example in AIX.
- * The returned values are defined in <float.h> and are:
- *
- * FP_PLUS_NORM Positive normalized, nonzero
- * FP_MINUS_NORM Negative normalized, nonzero
- * FP_PLUS_DENORM Positive denormalized, nonzero
- * FP_MINUS_DENORM Negative denormalized, nonzero
- * FP_PLUS_ZERO +0.0
- * FP_MINUS_ZERO -0.0
- * FP_PLUS_INF +INF
- * FP_MINUS_INF -INF
- * FP_NANS Signaling Not a Number (NaNS)
- * FP_NANQ Quiet Not a Number (NaNQ)
- */
-/*#define HAS_CLASS / **/
-
-/* HAS_CLEARENV:
- * This symbol, if defined, indicates that the clearenv () routine is
- * available for use.
- */
-/*#define HAS_CLEARENV / **/
-
-/* HAS_STRUCT_CMSGHDR:
- * This symbol, if defined, indicates that the struct cmsghdr
- * is supported.
- */
-/*#define HAS_STRUCT_CMSGHDR / **/
-
-/* HAS_COPYSIGNL:
- * This symbol, if defined, indicates that the copysignl routine is
- * available. If aintl is also present we can emulate modfl.
- */
-/*#define HAS_COPYSIGNL / **/
-
-/* USE_CPLUSPLUS:
- * This symbol, if defined, indicates that a C++ compiler was
- * used to compiled Perl and will be used to compile extensions.
- */
-/*#define USE_CPLUSPLUS / **/
-
-/* HAS_DBMINIT_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the dbminit() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int dbminit(char *);
- */
-/*#define HAS_DBMINIT_PROTO / **/
-
-/* HAS_DIR_DD_FD:
- * This symbol, if defined, indicates that the the DIR* dirstream
- * structure contains a member variable named dd_fd.
- */
-/*#define HAS_DIR_DD_FD / **/
-
-/* HAS_DIRFD:
- * This manifest constant lets the C program know that dirfd
- * is available.
- */
-/*#define HAS_DIRFD / **/
-
-/* DLSYM_NEEDS_UNDERSCORE:
- * This symbol, if defined, indicates that we need to prepend an
- * underscore to the symbol name before calling dlsym(). This only
- * makes sense if you *have* dlsym, which we will presume is the
- * case if you're using dl_dlopen.xs.
- */
-/*#define DLSYM_NEEDS_UNDERSCORE / **/
-
-/* HAS_FAST_STDIO:
- * This symbol, if defined, indicates that the "fast stdio"
- * is available to manipulate the stdio buffers directly.
- */
-#define HAS_FAST_STDIO /**/
-
-/* HAS_FCHDIR:
- * This symbol, if defined, indicates that the fchdir routine is
- * available to change directory using a file descriptor.
- */
-/*#define HAS_FCHDIR / **/
-
-/* FCNTL_CAN_LOCK:
- * This symbol, if defined, indicates that fcntl() can be used
- * for file locking. Normally on Unix systems this is defined.
- * It may be undefined on VMS.
- */
-/*#define FCNTL_CAN_LOCK / **/
-
-/* HAS_FINITE:
- * This symbol, if defined, indicates that the finite routine is
- * available to check whether a double is finite (non-infinity non-NaN).
- */
-/*#define HAS_FINITE / **/
-
-/* HAS_FINITEL:
- * This symbol, if defined, indicates that the finitel routine is
- * available to check whether a long double is finite
- * (non-infinity non-NaN).
- */
-/*#define HAS_FINITEL / **/
-
-/* HAS_FLOCK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the flock() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int flock(int, int);
- */
-#define HAS_FLOCK_PROTO /**/
-
-/* HAS_FP_CLASS:
- * This symbol, if defined, indicates that the fp_class routine is
- * available to classify doubles. Available for example in Digital UNIX.
- * The returned values are defined in <math.h> and are:
- *
- * FP_SNAN Signaling NaN (Not-a-Number)
- * FP_QNAN Quiet NaN (Not-a-Number)
- * FP_POS_INF +infinity
- * FP_NEG_INF -infinity
- * FP_POS_NORM Positive normalized
- * FP_NEG_NORM Negative normalized
- * FP_POS_DENORM Positive denormalized
- * FP_NEG_DENORM Negative denormalized
- * FP_POS_ZERO +0.0 (positive zero)
- * FP_NEG_ZERO -0.0 (negative zero)
- */
-/*#define HAS_FP_CLASS / **/
-
-/* HAS_FPCLASS:
- * This symbol, if defined, indicates that the fpclass routine is
- * available to classify doubles. Available for example in Solaris/SVR4.
- * The returned values are defined in <ieeefp.h> and are:
- *
- * FP_SNAN signaling NaN
- * FP_QNAN quiet NaN
- * FP_NINF negative infinity
- * FP_PINF positive infinity
- * FP_NDENORM negative denormalized non-zero
- * FP_PDENORM positive denormalized non-zero
- * FP_NZERO negative zero
- * FP_PZERO positive zero
- * FP_NNORM negative normalized non-zero
- * FP_PNORM positive normalized non-zero
- */
-/*#define HAS_FPCLASS / **/
-
-/* HAS_FPCLASSIFY:
- * This symbol, if defined, indicates that the fpclassify routine is
- * available to classify doubles. Available for example in HP-UX.
- * The returned values are defined in <math.h> and are
- *
- * FP_NORMAL Normalized
- * FP_ZERO Zero
- * FP_INFINITE Infinity
- * FP_SUBNORMAL Denormalized
- * FP_NAN NaN
- *
- */
-/*#define HAS_FPCLASSIFY / **/
-
-/* HAS_FPCLASSL:
- * This symbol, if defined, indicates that the fpclassl routine is
- * available to classify long doubles. Available for example in IRIX.
- * The returned values are defined in <ieeefp.h> and are:
- *
- * FP_SNAN signaling NaN
- * FP_QNAN quiet NaN
- * FP_NINF negative infinity
- * FP_PINF positive infinity
- * FP_NDENORM negative denormalized non-zero
- * FP_PDENORM positive denormalized non-zero
- * FP_NZERO negative zero
- * FP_PZERO positive zero
- * FP_NNORM negative normalized non-zero
- * FP_PNORM positive normalized non-zero
- */
-/*#define HAS_FPCLASSL / **/
-
-/* HAS_FPOS64_T:
- * This symbol will be defined if the C compiler supports fpos64_t.
- */
-/*#define HAS_FPOS64_T / **/
-
-/* HAS_FREXPL:
- * This symbol, if defined, indicates that the frexpl routine is
- * available to break a long double floating-point number into
- * a normalized fraction and an integral power of 2.
- */
-/*#define HAS_FREXPL / **/
-
-/* HAS_STRUCT_FS_DATA:
- * This symbol, if defined, indicates that the struct fs_data
- * to do statfs() is supported.
- */
-/*#define HAS_STRUCT_FS_DATA / **/
-
-/* HAS_FSEEKO:
- * This symbol, if defined, indicates that the fseeko routine is
- * available to fseek beyond 32 bits (useful for ILP32 hosts).
- */
-/*#define HAS_FSEEKO / **/
-
-/* HAS_FSTATFS:
- * This symbol, if defined, indicates that the fstatfs routine is
- * available to stat filesystems by file descriptors.
- */
-/*#define HAS_FSTATFS / **/
-
-/* HAS_FSYNC:
- * This symbol, if defined, indicates that the fsync routine is
- * available to write a file's modified data and attributes to
- * permanent storage.
- */
-/*#define HAS_FSYNC / **/
-
-/* HAS_FTELLO:
- * This symbol, if defined, indicates that the ftello routine is
- * available to ftell beyond 32 bits (useful for ILP32 hosts).
- */
-/*#define HAS_FTELLO / **/
-
-/* HAS_FUTIMES:
- * This symbol, if defined, indicates that the futimes routine is
- * available to change file descriptor time stamps with struct timevals.
- */
-/*#define HAS_FUTIMES / **/
-
-/* HAS_GETADDRINFO:
- * This symbol, if defined, indicates that the getaddrinfo() function
- * is available for use.
- */
-/*#define HAS_GETADDRINFO / **/
-
-/* HAS_GETCWD:
- * This symbol, if defined, indicates that the getcwd routine is
- * available to get the current working directory.
- */
-#define HAS_GETCWD /**/
-
-/* HAS_GETESPWNAM:
- * This symbol, if defined, indicates that the getespwnam system call is
- * available to retrieve enchanced (shadow) password entries by name.
- */
-/*#define HAS_GETESPWNAM / **/
-
-/* HAS_GETFSSTAT:
- * This symbol, if defined, indicates that the getfsstat routine is
- * available to stat filesystems in bulk.
- */
-/*#define HAS_GETFSSTAT / **/
-
-/* HAS_GETITIMER:
- * This symbol, if defined, indicates that the getitimer routine is
- * available to return interval timers.
- */
-/*#define HAS_GETITIMER / **/
-
-/* HAS_GETMNT:
- * This symbol, if defined, indicates that the getmnt routine is
- * available to get filesystem mount info by filename.
- */
-/*#define HAS_GETMNT / **/
-
-/* HAS_GETMNTENT:
- * This symbol, if defined, indicates that the getmntent routine is
- * available to iterate through mounted file systems to get their info.
- */
-/*#define HAS_GETMNTENT / **/
-
-/* HAS_GETNAMEINFO:
- * This symbol, if defined, indicates that the getnameinfo() function
- * is available for use.
- */
-/*#define HAS_GETNAMEINFO / **/
-
-/* HAS_GETPRPWNAM:
- * This symbol, if defined, indicates that the getprpwnam system call is
- * available to retrieve protected (shadow) password entries by name.
- */
-/*#define HAS_GETPRPWNAM / **/
-
-/* HAS_GETSPNAM:
- * This symbol, if defined, indicates that the getspnam system call is
- * available to retrieve SysV shadow password entries by name.
- */
-/*#define HAS_GETSPNAM / **/
-
-/* HAS_HASMNTOPT:
- * This symbol, if defined, indicates that the hasmntopt routine is
- * available to query the mount options of file systems.
- */
-/*#define HAS_HASMNTOPT / **/
-
-/* HAS_ILOGBL:
- * This symbol, if defined, indicates that the ilogbl routine is
- * available. If scalbnl is also present we can emulate frexpl.
- */
-/*#define HAS_ILOGBL / **/
-
-/* HAS_INETNTOP:
- * This symbol, if defined, indicates that the inet_ntop() function
- * is available to parse IPv4 and IPv6 strings.
- */
-/*#define HAS_INETNTOP / **/
-
-/* HAS_INETPTON:
- * This symbol, if defined, indicates that the inet_pton() function
- * is available to parse IPv4 and IPv6 strings.
- */
-/*#define HAS_INETPTON / **/
-
-/* HAS_INT64_T:
- * This symbol will defined if the C compiler supports int64_t.
- * Usually the <inttypes.h> needs to be included, but sometimes
- * <sys/types.h> is enough.
- */
-/*#define HAS_INT64_T / **/
-
-/* HAS_ISFINITE:
- * This symbol, if defined, indicates that the isfinite routine is
- * available to check whether a double is finite (non-infinity non-NaN).
- */
-/*#define HAS_ISFINITE / **/
-
-/* HAS_ISINF:
- * This symbol, if defined, indicates that the isinf routine is
- * available to check whether a double is an infinity.
- */
-/*#define HAS_ISINF / **/
-
-/* HAS_ISNAN:
- * This symbol, if defined, indicates that the isnan routine is
- * available to check whether a double is a NaN.
- */
-#define HAS_ISNAN /**/
-
-/* HAS_ISNANL:
- * This symbol, if defined, indicates that the isnanl routine is
- * available to check whether a long double is a NaN.
- */
-/*#define HAS_ISNANL / **/
-
-/* HAS_LDBL_DIG:
- * This symbol, if defined, indicates that this system's <float.h>
- * or <limits.h> defines the symbol LDBL_DIG, which is the number
- * of significant digits in a long double precision number. Unlike
- * for DBL_DIG, there's no good guess for LDBL_DIG if it is undefined.
- */
-#define HAS_LDBL_DIG /**/
-
-/* LIBM_LIB_VERSION:
- * This symbol, if defined, indicates that libm exports _LIB_VERSION
- * and that math.h defines the enum to manipulate it.
- */
-/*#define LIBM_LIB_VERSION / **/
-
-/* HAS_MADVISE:
- * This symbol, if defined, indicates that the madvise system call is
- * available to map a file into memory.
- */
-/*#define HAS_MADVISE / **/
-
-/* HAS_MALLOC_SIZE:
- * This symbol, if defined, indicates that the malloc_size
- * routine is available for use.
- */
-/*#define HAS_MALLOC_SIZE / **/
-
-/* HAS_MALLOC_GOOD_SIZE:
- * This symbol, if defined, indicates that the malloc_good_size
- * routine is available for use.
- */
-/*#define HAS_MALLOC_GOOD_SIZE / **/
-
-/* HAS_MKDTEMP:
- * This symbol, if defined, indicates that the mkdtemp routine is
- * available to exclusively create a uniquely named temporary directory.
- */
-/*#define HAS_MKDTEMP / **/
-
-/* HAS_MKSTEMPS:
- * This symbol, if defined, indicates that the mkstemps routine is
- * available to excluslvely create and open a uniquely named
- * (with a suffix) temporary file.
- */
-/*#define HAS_MKSTEMPS / **/
-
-/* HAS_MODFL:
- * This symbol, if defined, indicates that the modfl routine is
- * available to split a long double x into a fractional part f and
- * an integer part i such that |f| < 1.0 and (f + i) = x.
- */
-/* HAS_MODFL_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the modfl() function. Otherwise, it is up
- * to the program to supply one.
- */
-/* HAS_MODFL_POW32_BUG:
- * This symbol, if defined, indicates that the modfl routine is
- * broken for long doubles >= pow(2, 32).
- * For example from 4294967303.150000 one would get 4294967302.000000
- * and 1.150000. The bug has been seen in certain versions of glibc,
- * release 2.2.2 is known to be okay.
- */
-/*#define HAS_MODFL / **/
-/*#define HAS_MODFL_PROTO / **/
-/*#define HAS_MODFL_POW32_BUG / **/
-
-/* HAS_MPROTECT:
- * This symbol, if defined, indicates that the mprotect system call is
- * available to modify the access protection of a memory mapped file.
- */
-/*#define HAS_MPROTECT / **/
-
-/* HAS_STRUCT_MSGHDR:
- * This symbol, if defined, indicates that the struct msghdr
- * is supported.
- */
-/*#define HAS_STRUCT_MSGHDR / **/
-
-/* HAS_NL_LANGINFO:
- * This symbol, if defined, indicates that the nl_langinfo routine is
- * available to return local data. You will also need <langinfo.h>
- * and therefore I_LANGINFO.
- */
-/*#define HAS_NL_LANGINFO / **/
-
-/* HAS_OFF64_T:
- * This symbol will be defined if the C compiler supports off64_t.
- */
-/*#define HAS_OFF64_T / **/
-
-/* HAS_PROCSELFEXE:
- * This symbol is defined if PROCSELFEXE_PATH is a symlink
- * to the absolute pathname of the executing program.
- */
-/* PROCSELFEXE_PATH:
- * If HAS_PROCSELFEXE is defined this symbol is the filename
- * of the symbolic link pointing to the absolute pathname of
- * the executing program.
- */
-/*#define HAS_PROCSELFEXE / **/
-#if defined(HAS_PROCSELFEXE) && !defined(PROCSELFEXE_PATH)
-#define PROCSELFEXE_PATH /**/
-#endif
-
-/* HAS_PTHREAD_ATTR_SETSCOPE:
- * This symbol, if defined, indicates that the pthread_attr_setscope
- * system call is available to set the contention scope attribute of
- * a thread attribute object.
- */
-/*#define HAS_PTHREAD_ATTR_SETSCOPE / **/
-
-/* HAS_READV:
- * This symbol, if defined, indicates that the readv routine is
- * available to do gather reads. You will also need <sys/uio.h>
- * and there I_SYSUIO.
- */
-/*#define HAS_READV / **/
-
-/* HAS_RECVMSG:
- * This symbol, if defined, indicates that the recvmsg routine is
- * available to send structured socket messages.
- */
-/*#define HAS_RECVMSG / **/
-
-/* HAS_SBRK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the sbrk() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern void* sbrk(int);
- * extern void* sbrk(size_t);
- */
-/*#define HAS_SBRK_PROTO / **/
-
-/* HAS_SCALBNL:
- * This symbol, if defined, indicates that the scalbnl routine is
- * available. If ilogbl is also present we can emulate frexpl.
- */
-/*#define HAS_SCALBNL / **/
-
-/* HAS_SENDMSG:
- * This symbol, if defined, indicates that the sendmsg routine is
- * available to send structured socket messages.
- */
-/*#define HAS_SENDMSG / **/
-
-/* HAS_SETITIMER:
- * This symbol, if defined, indicates that the setitimer routine is
- * available to set interval timers.
- */
-/*#define HAS_SETITIMER / **/
-
-/* HAS_SETPROCTITLE:
- * This symbol, if defined, indicates that the setproctitle routine is
- * available to set process title.
- */
-/*#define HAS_SETPROCTITLE / **/
-
-/* USE_SFIO:
- * This symbol, if defined, indicates that sfio should
- * be used.
- */
-/*#define USE_SFIO / **/
-
-/* HAS_SIGNBIT:
- * This symbol, if defined, indicates that the signbit routine is
- * available to check if the given number has the sign bit set.
- * This should include correct testing of -0.0. This will only be set
- * if the signbit() routine is safe to use with the NV type used internally
- * in perl. Users should call Perl_signbit(), which will be #defined to
- * the system's signbit() function or macro if this symbol is defined.
- */
-/*#define HAS_SIGNBIT / **/
-
-/* HAS_SIGPROCMASK:
- * This symbol, if defined, indicates that the sigprocmask
- * system call is available to examine or change the signal mask
- * of the calling process.
- */
-/*#define HAS_SIGPROCMASK / **/
-
-/* USE_SITECUSTOMIZE:
- * This symbol, if defined, indicates that sitecustomize should
- * be used.
- */
-#ifndef USE_SITECUSTOMIZE
-/*#define USE_SITECUSTOMIZE / **/
-#endif
-
-/* HAS_SNPRINTF:
- * This symbol, if defined, indicates that the snprintf () library
- * function is available for use.
- */
-/* HAS_VSNPRINTF:
- * This symbol, if defined, indicates that the vsnprintf () library
- * function is available for use.
- */
-#define HAS_SNPRINTF /**/
-#define HAS_VSNPRINTF /**/
-
-/* HAS_SOCKATMARK:
- * This symbol, if defined, indicates that the sockatmark routine is
- * available to test whether a socket is at the out-of-band mark.
- */
-/*#define HAS_SOCKATMARK / **/
-
-/* HAS_SOCKATMARK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the sockatmark() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int sockatmark(int);
- */
-/*#define HAS_SOCKATMARK_PROTO / **/
-
-/* HAS_SOCKS5_INIT:
- * This symbol, if defined, indicates that the socks5_init routine is
- * available to initialize SOCKS 5.
- */
-/*#define HAS_SOCKS5_INIT / **/
-
-/* SPRINTF_RETURNS_STRLEN:
- * This variable defines whether sprintf returns the length of the string
- * (as per the ANSI spec). Some C libraries retain compatibility with
- * pre-ANSI C and return a pointer to the passed in buffer; for these
- * this variable will be undef.
- */
-#define SPRINTF_RETURNS_STRLEN /**/
-
-/* HAS_SQRTL:
- * This symbol, if defined, indicates that the sqrtl routine is
- * available to do long double square roots.
- */
-/*#define HAS_SQRTL / **/
-
-/* HAS_SETRESGID_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the setresgid() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern int setresgid(uid_t ruid, uid_t euid, uid_t suid);
- */
-/*#define HAS_SETRESGID_PROTO / **/
-
-/* HAS_SETRESUID_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the setresuid() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern int setresuid(uid_t ruid, uid_t euid, uid_t suid);
- */
-/*#define HAS_SETRESUID_PROTO / **/
-
-/* HAS_STRUCT_STATFS_F_FLAGS:
- * This symbol, if defined, indicates that the struct statfs
- * does have the f_flags member containing the mount flags of
- * the filesystem containing the file.
- * This kind of struct statfs is coming from <sys/mount.h> (BSD 4.3),
- * not from <sys/statfs.h> (SYSV). Older BSDs (like Ultrix) do not
- * have statfs() and struct statfs, they have ustat() and getmnt()
- * with struct ustat and struct fs_data.
- */
-/*#define HAS_STRUCT_STATFS_F_FLAGS / **/
-
-/* HAS_STRUCT_STATFS:
- * This symbol, if defined, indicates that the struct statfs
- * to do statfs() is supported.
- */
-/*#define HAS_STRUCT_STATFS / **/
-
-/* HAS_FSTATVFS:
- * This symbol, if defined, indicates that the fstatvfs routine is
- * available to stat filesystems by file descriptors.
- */
-/*#define HAS_FSTATVFS / **/
-
-/* HAS_STRFTIME:
- * This symbol, if defined, indicates that the strftime routine is
- * available to do time formatting.
- */
-#define HAS_STRFTIME /**/
-
-/* HAS_STRLCAT:
- * This symbol, if defined, indicates that the strlcat () routine is
- * available to do string concatenation.
- */
-/*#define HAS_STRLCAT / **/
-
-/* HAS_STRLCPY:
- * This symbol, if defined, indicates that the strlcpy () routine is
- * available to do string copying.
- */
-/*#define HAS_STRLCPY / **/
-
-/* HAS_STRTOLD:
- * This symbol, if defined, indicates that the strtold routine is
- * available to convert strings to long doubles.
- */
-/*#define HAS_STRTOLD / **/
-
-/* HAS_STRTOLL:
- * This symbol, if defined, indicates that the strtoll routine is
- * available to convert strings to long longs.
- */
-/*#define HAS_STRTOLL / **/
-
-/* HAS_STRTOQ:
- * This symbol, if defined, indicates that the strtoq routine is
- * available to convert strings to long longs (quads).
- */
-/*#define HAS_STRTOQ / **/
-
-/* HAS_STRTOULL:
- * This symbol, if defined, indicates that the strtoull routine is
- * available to convert strings to unsigned long longs.
- */
-/*#define HAS_STRTOULL / **/
-
-/* HAS_STRTOUQ:
- * This symbol, if defined, indicates that the strtouq routine is
- * available to convert strings to unsigned long longs (quads).
- */
-/*#define HAS_STRTOUQ / **/
-
-/* HAS_SYSCALL_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the syscall() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern int syscall(int, ...);
- * extern int syscall(long, ...);
- */
-/*#define HAS_SYSCALL_PROTO / **/
-
-/* HAS_TELLDIR_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the telldir() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern long telldir(DIR*);
- */
-#define HAS_TELLDIR_PROTO /**/
-
-/* HAS_CTIME64:
- * This symbol, if defined, indicates that the ctime64 () routine is
- * available to do the 64bit variant of ctime ()
- */
-/* HAS_LOCALTIME64:
- * This symbol, if defined, indicates that the localtime64 () routine is
- * available to do the 64bit variant of localtime ()
- */
-/* HAS_GMTIME64:
- * This symbol, if defined, indicates that the gmtime64 () routine is
- * available to do the 64bit variant of gmtime ()
- */
-/* HAS_MKTIME64:
- * This symbol, if defined, indicates that the mktime64 () routine is
- * available to do the 64bit variant of mktime ()
- */
-/* HAS_DIFFTIME64:
- * This symbol, if defined, indicates that the difftime64 () routine is
- * available to do the 64bit variant of difftime ()
- */
-/* HAS_ASCTIME64:
- * This symbol, if defined, indicates that the asctime64 () routine is
- * available to do the 64bit variant of asctime ()
- */
-/*#define HAS_CTIME64 / **/
-/*#define HAS_LOCALTIME64 / **/
-/*#define HAS_GMTIME64 / **/
-/*#define HAS_MKTIME64 / **/
-/*#define HAS_DIFFTIME64 / **/
-/*#define HAS_ASCTIME64 / **/
-
-/* HAS_TIMEGM:
- * This symbol, if defined, indicates that the timegm routine is
- * available to do the opposite of gmtime ()
- */
-/*#define HAS_TIMEGM / **/
-
-/* U32_ALIGNMENT_REQUIRED:
- * This symbol, if defined, indicates that you must access
- * character data through U32-aligned pointers.
- */
-#ifndef U32_ALIGNMENT_REQUIRED
-#define U32_ALIGNMENT_REQUIRED /**/
-#endif
-
-/* HAS_UALARM:
- * This symbol, if defined, indicates that the ualarm routine is
- * available to do alarms with microsecond granularity.
- */
-/*#define HAS_UALARM / **/
-
-/* HAS_UNORDERED:
- * This symbol, if defined, indicates that the unordered routine is
- * available to check whether two doubles are unordered
- * (effectively: whether either of them is NaN)
- */
-/*#define HAS_UNORDERED / **/
-
-/* HAS_UNSETENV:
- * This symbol, if defined, indicates that the unsetenv () routine is
- * available for use.
- */
-/*#define HAS_UNSETENV / **/
-
-/* HAS_USLEEP_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the usleep() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int usleep(useconds_t);
- */
-/*#define HAS_USLEEP_PROTO / **/
-
-/* HAS_USTAT:
- * This symbol, if defined, indicates that the ustat system call is
- * available to query file system statistics by dev_t.
- */
-/*#define HAS_USTAT / **/
-
-/* HAS_WRITEV:
- * This symbol, if defined, indicates that the writev routine is
- * available to do scatter writes.
- */
-/*#define HAS_WRITEV / **/
-
-/* USE_DYNAMIC_LOADING:
- * This symbol, if defined, indicates that dynamic loading of
- * some sort is available.
- */
-#define USE_DYNAMIC_LOADING /**/
-
-/* FFLUSH_NULL:
- * This symbol, if defined, tells that fflush(NULL) does flush
- * all pending stdio output.
- */
-/* FFLUSH_ALL:
- * This symbol, if defined, tells that to flush
- * all pending stdio output one must loop through all
- * the stdio file handles stored in an array and fflush them.
- * Note that if fflushNULL is defined, fflushall will not
- * even be probed for and will be left undefined.
- */
-#define FFLUSH_NULL /**/
-/*#define FFLUSH_ALL / **/
-
-/* I_ASSERT:
- * This symbol, if defined, indicates that <assert.h> exists and
- * could be included by the C program to get the assert() macro.
- */
-#define I_ASSERT /**/
-
-/* I_CRYPT:
- * This symbol, if defined, indicates that <crypt.h> exists and
- * should be included.
- */
-/*#define I_CRYPT / **/
-
-/* DB_Prefix_t:
- * This symbol contains the type of the prefix structure element
- * in the <db.h> header file. In older versions of DB, it was
- * int, while in newer ones it is u_int32_t.
- */
-/* DB_Hash_t:
- * This symbol contains the type of the prefix structure element
- * in the <db.h> header file. In older versions of DB, it was
- * int, while in newer ones it is size_t.
- */
-/* DB_VERSION_MAJOR_CFG:
- * This symbol, if defined, defines the major version number of
- * Berkeley DB found in the <db.h> header when Perl was configured.
- */
-/* DB_VERSION_MINOR_CFG:
- * This symbol, if defined, defines the minor version number of
- * Berkeley DB found in the <db.h> header when Perl was configured.
- * For DB version 1 this is always 0.
- */
-/* DB_VERSION_PATCH_CFG:
- * This symbol, if defined, defines the patch version number of
- * Berkeley DB found in the <db.h> header when Perl was configured.
- * For DB version 1 this is always 0.
- */
-#define DB_Hash_t int /**/
-#define DB_Prefix_t int /**/
-#define DB_VERSION_MAJOR_CFG 0 /**/
-#define DB_VERSION_MINOR_CFG 0 /**/
-#define DB_VERSION_PATCH_CFG 0 /**/
-
-/* I_FP:
- * This symbol, if defined, indicates that <fp.h> exists and
- * should be included.
- */
-/*#define I_FP / **/
-
-/* I_FP_CLASS:
- * This symbol, if defined, indicates that <fp_class.h> exists and
- * should be included.
- */
-/*#define I_FP_CLASS / **/
-
-/* I_IEEEFP:
- * This symbol, if defined, indicates that <ieeefp.h> exists and
- * should be included.
- */
-/*#define I_IEEEFP / **/
-
-/* I_INTTYPES:
- * This symbol, if defined, indicates to the C program that it should
- * include <inttypes.h>.
- */
-/*#define I_INTTYPES / **/
-
-/* I_LANGINFO:
- * This symbol, if defined, indicates that <langinfo.h> exists and
- * should be included.
- */
-/*#define I_LANGINFO / **/
-
-/* I_LIBUTIL:
- * This symbol, if defined, indicates that <libutil.h> exists and
- * should be included.
- */
-/*#define I_LIBUTIL / **/
-
-/* I_MALLOCMALLOC:
- * This symbol, if defined, indicates to the C program that it should
- * include <malloc/malloc.h>.
- */
-/*#define I_MALLOCMALLOC / **/
-
-/* I_MNTENT:
- * This symbol, if defined, indicates that <mntent.h> exists and
- * should be included.
- */
-/*#define I_MNTENT / **/
-
-/* I_NETINET_TCP:
- * This symbol, if defined, indicates to the C program that it should
- * include <netinet/tcp.h>.
- */
-/*#define I_NETINET_TCP / **/
-
-/* I_POLL:
- * This symbol, if defined, indicates that <poll.h> exists and
- * should be included. (see also HAS_POLL)
- */
-/*#define I_POLL / **/
-
-/* I_PROT:
- * This symbol, if defined, indicates that <prot.h> exists and
- * should be included.
- */
-/*#define I_PROT / **/
-
-/* I_SHADOW:
- * This symbol, if defined, indicates that <shadow.h> exists and
- * should be included.
- */
-/*#define I_SHADOW / **/
-
-/* I_SOCKS:
- * This symbol, if defined, indicates that <socks.h> exists and
- * should be included.
- */
-/*#define I_SOCKS / **/
-
-/* I_SUNMATH:
- * This symbol, if defined, indicates that <sunmath.h> exists and
- * should be included.
- */
-/*#define I_SUNMATH / **/
-
-/* I_SYSLOG:
- * This symbol, if defined, indicates that <syslog.h> exists and
- * should be included.
- */
-/*#define I_SYSLOG / **/
-
-/* I_SYSMODE:
- * This symbol, if defined, indicates that <sys/mode.h> exists and
- * should be included.
- */
-/*#define I_SYSMODE / **/
-
-/* I_SYS_MOUNT:
- * This symbol, if defined, indicates that <sys/mount.h> exists and
- * should be included.
- */
-/*#define I_SYS_MOUNT / **/
-
-/* I_SYS_STATFS:
- * This symbol, if defined, indicates that <sys/statfs.h> exists.
- */
-/*#define I_SYS_STATFS / **/
-
-/* I_SYS_STATVFS:
- * This symbol, if defined, indicates that <sys/statvfs.h> exists and
- * should be included.
- */
-/*#define I_SYS_STATVFS / **/
-
-/* I_SYSUTSNAME:
- * This symbol, if defined, indicates that <sys/utsname.h> exists and
- * should be included.
- */
-/*#define I_SYSUTSNAME / **/
-
-/* I_SYS_VFS:
- * This symbol, if defined, indicates that <sys/vfs.h> exists and
- * should be included.
- */
-/*#define I_SYS_VFS / **/
-
-/* I_USTAT:
- * This symbol, if defined, indicates that <ustat.h> exists and
- * should be included.
- */
-/*#define I_USTAT / **/
-
-/* PERL_PRIfldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'f') for output.
- */
-/* PERL_PRIgldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'g') for output.
- */
-/* PERL_PRIeldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'e') for output.
- */
-/* PERL_SCNfldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'f') for input.
- */
-/*#define PERL_PRIfldbl "Lf" / **/
-/*#define PERL_PRIgldbl "Lg" / **/
-/*#define PERL_PRIeldbl "Le" / **/
-/*#define PERL_SCNfldbl "Lf" / **/
-
-/* PERL_MAD:
- * This symbol, if defined, indicates that the Misc Attribution
- * Declaration code should be conditionally compiled.
- */
-/*#define PERL_MAD / **/
-
-/* NEED_VA_COPY:
- * This symbol, if defined, indicates that the system stores
- * the variable argument list datatype, va_list, in a format
- * that cannot be copied by simple assignment, so that some
- * other means must be used when copying is required.
- * As such systems vary in their provision (or non-provision)
- * of copying mechanisms, handy.h defines a platform-
- * independent macro, Perl_va_copy(src, dst), to do the job.
- */
-/*#define NEED_VA_COPY / **/
-
-/* IVTYPE:
- * This symbol defines the C type used for Perl's IV.
- */
-/* UVTYPE:
- * This symbol defines the C type used for Perl's UV.
- */
-/* I8TYPE:
- * This symbol defines the C type used for Perl's I8.
- */
-/* U8TYPE:
- * This symbol defines the C type used for Perl's U8.
- */
-/* I16TYPE:
- * This symbol defines the C type used for Perl's I16.
- */
-/* U16TYPE:
- * This symbol defines the C type used for Perl's U16.
- */
-/* I32TYPE:
- * This symbol defines the C type used for Perl's I32.
- */
-/* U32TYPE:
- * This symbol defines the C type used for Perl's U32.
- */
-/* I64TYPE:
- * This symbol defines the C type used for Perl's I64.
- */
-/* U64TYPE:
- * This symbol defines the C type used for Perl's U64.
- */
-/* NVTYPE:
- * This symbol defines the C type used for Perl's NV.
- */
-/* IVSIZE:
- * This symbol contains the sizeof(IV).
- */
-/* UVSIZE:
- * This symbol contains the sizeof(UV).
- */
-/* I8SIZE:
- * This symbol contains the sizeof(I8).
- */
-/* U8SIZE:
- * This symbol contains the sizeof(U8).
- */
-/* I16SIZE:
- * This symbol contains the sizeof(I16).
- */
-/* U16SIZE:
- * This symbol contains the sizeof(U16).
- */
-/* I32SIZE:
- * This symbol contains the sizeof(I32).
- */
-/* U32SIZE:
- * This symbol contains the sizeof(U32).
- */
-/* I64SIZE:
- * This symbol contains the sizeof(I64).
- */
-/* U64SIZE:
- * This symbol contains the sizeof(U64).
- */
-/* NVSIZE:
- * This symbol contains the sizeof(NV).
- */
-/* NV_PRESERVES_UV:
- * This symbol, if defined, indicates that a variable of type NVTYPE
- * can preserve all the bits of a variable of type UVTYPE.
- */
-/* NV_PRESERVES_UV_BITS:
- * This symbol contains the number of bits a variable of type NVTYPE
- * can preserve of a variable of type UVTYPE.
- */
-/* NV_OVERFLOWS_INTEGERS_AT:
- * This symbol gives the largest integer value that NVs can hold. This
- * value + 1.0 cannot be stored accurately. It is expressed as constant
- * floating point expression to reduce the chance of decimale/binary
- * conversion issues. If it can not be determined, the value 0 is given.
- */
-/* NV_ZERO_IS_ALLBITS_ZERO:
- * This symbol, if defined, indicates that a variable of type NVTYPE
- * stores 0.0 in memory as all bits zero.
- */
-#define IVTYPE long /**/
-#define UVTYPE unsigned long /**/
-#define I8TYPE char /**/
-#define U8TYPE unsigned char /**/
-#define I16TYPE short /**/
-#define U16TYPE unsigned short /**/
-#define I32TYPE long /**/
-#define U32TYPE unsigned long /**/
-#ifdef HAS_QUAD
-#define I64TYPE __int64 /**/
-#define U64TYPE unsigned __int64 /**/
-#endif
-#define NVTYPE double /**/
-#define IVSIZE 4 /**/
-#define UVSIZE 4 /**/
-#define I8SIZE 1 /**/
-#define U8SIZE 1 /**/
-#define I16SIZE 2 /**/
-#define U16SIZE 2 /**/
-#define I32SIZE 4 /**/
-#define U32SIZE 4 /**/
-#ifdef HAS_QUAD
-#define I64SIZE 8 /**/
-#define U64SIZE 8 /**/
-#endif
-#define NVSIZE 8 /**/
-#define NV_PRESERVES_UV
-#define NV_PRESERVES_UV_BITS 32
-#define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0
-#define NV_ZERO_IS_ALLBITS_ZERO
-#if UVSIZE == 8
-# ifdef BYTEORDER
-# if BYTEORDER == 0x1234
-# undef BYTEORDER
-# define BYTEORDER 0x12345678
-# else
-# if BYTEORDER == 0x4321
-# undef BYTEORDER
-# define BYTEORDER 0x87654321
-# endif
-# endif
-# endif
-#endif
-
-/* IVdf:
- * This symbol defines the format string used for printing a Perl IV
- * as a signed decimal integer.
- */
-/* UVuf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned decimal integer.
- */
-/* UVof:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned octal integer.
- */
-/* UVxf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned hexadecimal integer in lowercase abcdef.
- */
-/* UVXf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned hexadecimal integer in uppercase ABCDEF.
- */
-/* NVef:
- * This symbol defines the format string used for printing a Perl NV
- * using %e-ish floating point format.
- */
-/* NVff:
- * This symbol defines the format string used for printing a Perl NV
- * using %f-ish floating point format.
- */
-/* NVgf:
- * This symbol defines the format string used for printing a Perl NV
- * using %g-ish floating point format.
- */
-#define IVdf "ld" /**/
-#define UVuf "lu" /**/
-#define UVof "lo" /**/
-#define UVxf "lx" /**/
-#define UVXf "lX" /**/
-#define NVef "e" /**/
-#define NVff "f" /**/
-#define NVgf "g" /**/
-
-/* SELECT_MIN_BITS:
- * This symbol holds the minimum number of bits operated by select.
- * That is, if you do select(n, ...), how many bits at least will be
- * cleared in the masks if some activity is detected. Usually this
- * is either n or 32*ceil(n/32), especially many little-endians do
- * the latter. This is only useful if you have select(), naturally.
- */
-#define SELECT_MIN_BITS 32 /**/
-
-/* STARTPERL:
- * This variable contains the string to put in front of a perl
- * script to make sure (one hopes) that it runs with perl and not
- * some shell.
- */
-#define STARTPERL "#!perl" /**/
-
-/* HAS_STDIO_STREAM_ARRAY:
- * This symbol, if defined, tells that there is an array
- * holding the stdio streams.
- */
-/* STDIO_STREAM_ARRAY:
- * This symbol tells the name of the array holding the stdio streams.
- * Usual values include _iob, __iob, and __sF.
- */
-/*#define HAS_STDIO_STREAM_ARRAY / **/
-#ifdef HAS_STDIO_STREAM_ARRAY
-#define STDIO_STREAM_ARRAY
-#endif
-
-/* GMTIME_MAX:
- * This symbol contains the maximum value for the time_t offset that
- * the system function gmtime () accepts, and defaults to 0
- */
-/* GMTIME_MIN:
- * This symbol contains the minimum value for the time_t offset that
- * the system function gmtime () accepts, and defaults to 0
- */
-/* LOCALTIME_MAX:
- * This symbol contains the maximum value for the time_t offset that
- * the system function localtime () accepts, and defaults to 0
- */
-/* LOCALTIME_MIN:
- * This symbol contains the minimum value for the time_t offset that
- * the system function localtime () accepts, and defaults to 0
- */
-#define GMTIME_MAX 2147483647 /**/
-#define GMTIME_MIN 0 /**/
-#define LOCALTIME_MAX 2147483647 /**/
-#define LOCALTIME_MIN 0 /**/
-
-/* USE_64_BIT_INT:
- * This symbol, if defined, indicates that 64-bit integers should
- * be used when available. If not defined, the native integers
- * will be employed (be they 32 or 64 bits). The minimal possible
- * 64-bitness is used, just enough to get 64-bit integers into Perl.
- * This may mean using for example "long longs", while your memory
- * may still be limited to 2 gigabytes.
- */
-/* USE_64_BIT_ALL:
- * This symbol, if defined, indicates that 64-bit integers should
- * be used when available. If not defined, the native integers
- * will be used (be they 32 or 64 bits). The maximal possible
- * 64-bitness is employed: LP64 or ILP64, meaning that you will
- * be able to use more than 2 gigabytes of memory. This mode is
- * even more binary incompatible than USE_64_BIT_INT. You may not
- * be able to run the resulting executable in a 32-bit CPU at all or
- * you may need at least to reboot your OS to 64-bit mode.
- */
-#ifndef USE_64_BIT_INT
-/*#define USE_64_BIT_INT / **/
-#endif
-#ifndef USE_64_BIT_ALL
-/*#define USE_64_BIT_ALL / **/
-#endif
-
-/* USE_DTRACE:
- * This symbol, if defined, indicates that Perl should
- * be built with support for DTrace.
- */
-/*#define USE_DTRACE / **/
-
-/* USE_FAST_STDIO:
- * This symbol, if defined, indicates that Perl should
- * be built to use 'fast stdio'.
- * Defaults to define in Perls 5.8 and earlier, to undef later.
- */
-#ifndef USE_FAST_STDIO
-/*#define USE_FAST_STDIO / **/
-#endif
-
-/* USE_LARGE_FILES:
- * This symbol, if defined, indicates that large file support
- * should be used when available.
- */
-#ifndef USE_LARGE_FILES
-/*#define USE_LARGE_FILES / **/
-#endif
-
-/* USE_LONG_DOUBLE:
- * This symbol, if defined, indicates that long doubles should
- * be used when available.
- */
-#ifndef USE_LONG_DOUBLE
-/*#define USE_LONG_DOUBLE / **/
-#endif
-
-/* USE_MORE_BITS:
- * This symbol, if defined, indicates that 64-bit interfaces and
- * long doubles should be used when available.
- */
-#ifndef USE_MORE_BITS
-/*#define USE_MORE_BITS / **/
-#endif
-
-/* MULTIPLICITY:
- * This symbol, if defined, indicates that Perl should
- * be built to use multiplicity.
- */
-#ifndef MULTIPLICITY
-/*#define MULTIPLICITY / **/
-#endif
-
-/* USE_PERLIO:
- * This symbol, if defined, indicates that the PerlIO abstraction should
- * be used throughout. If not defined, stdio should be
- * used in a fully backward compatible manner.
- */
-#ifndef USE_PERLIO
-/*#define USE_PERLIO / **/
-#endif
-
-/* USE_SOCKS:
- * This symbol, if defined, indicates that Perl should
- * be built to use socks.
- */
-#ifndef USE_SOCKS
-/*#define USE_SOCKS / **/
-#endif
-
-#endif
Deleted: trunk/contrib/perl/win32/config_H.gc64
===================================================================
--- trunk/contrib/perl/win32/config_H.gc64 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/win32/config_H.gc64 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,4719 +0,0 @@
-/*
- * This file was produced by running the config_h.SH script, which
- * gets its values from undef, which is generally produced by
- * running Configure.
- *
- * Feel free to modify any of this as the need arises. Note, however,
- * that running config_h.SH again will wipe out any changes you've made.
- * For a more permanent change edit undef and rerun config_h.SH.
- *
- * $Id: config_H.gc64,v 1.1.1.1 2011-05-19 23:03:36 laffer1 Exp $
- */
-
-/*
- * Package name : perl5
- * Source directory :
- * Configuration time: Sun Jan 10 19:53:56 2010
- * Configured by : Steve
- * Target system :
- */
-
-#ifndef _config_h_
-#define _config_h_
-
-/* LOC_SED:
- * This symbol holds the complete pathname to the sed program.
- */
-#define LOC_SED "" /**/
-
-/* HAS_ALARM:
- * This symbol, if defined, indicates that the alarm routine is
- * available.
- */
-#define HAS_ALARM /**/
-
-/* HAS_BCMP:
- * This symbol is defined if the bcmp() routine is available to
- * compare blocks of memory.
- */
-/*#define HAS_BCMP / **/
-
-/* HAS_BCOPY:
- * This symbol is defined if the bcopy() routine is available to
- * copy blocks of memory.
- */
-/*#define HAS_BCOPY / **/
-
-/* HAS_BZERO:
- * This symbol is defined if the bzero() routine is available to
- * set a memory block to 0.
- */
-/*#define HAS_BZERO / **/
-
-/* HAS_CHOWN:
- * This symbol, if defined, indicates that the chown routine is
- * available.
- */
-/*#define HAS_CHOWN / **/
-
-/* HAS_CHROOT:
- * This symbol, if defined, indicates that the chroot routine is
- * available.
- */
-/*#define HAS_CHROOT / **/
-
-/* HAS_CHSIZE:
- * This symbol, if defined, indicates that the chsize routine is available
- * to truncate files. You might need a -lx to get this routine.
- */
-#define HAS_CHSIZE /**/
-
-/* HAS_CRYPT:
- * This symbol, if defined, indicates that the crypt routine is available
- * to encrypt passwords and the like.
- */
-/*#define HAS_CRYPT / **/
-
-/* HAS_CTERMID:
- * This symbol, if defined, indicates that the ctermid routine is
- * available to generate filename for terminal.
- */
-/*#define HAS_CTERMID / **/
-
-/* HAS_CUSERID:
- * This symbol, if defined, indicates that the cuserid routine is
- * available to get character login names.
- */
-/*#define HAS_CUSERID / **/
-
-/* HAS_DBL_DIG:
- * This symbol, if defined, indicates that this system's <float.h>
- * or <limits.h> defines the symbol DBL_DIG, which is the number
- * of significant digits in a double precision number. If this
- * symbol is not defined, a guess of 15 is usually pretty good.
- */
-#define HAS_DBL_DIG /**/
-
-/* HAS_DIFFTIME:
- * This symbol, if defined, indicates that the difftime routine is
- * available.
- */
-#define HAS_DIFFTIME /**/
-
-/* HAS_DLERROR:
- * This symbol, if defined, indicates that the dlerror routine is
- * available to return a string describing the last error that
- * occurred from a call to dlopen(), dlclose() or dlsym().
- */
-#define HAS_DLERROR /**/
-
-/* HAS_DUP2:
- * This symbol, if defined, indicates that the dup2 routine is
- * available to duplicate file descriptors.
- */
-#define HAS_DUP2 /**/
-
-/* HAS_FCHMOD:
- * This symbol, if defined, indicates that the fchmod routine is available
- * to change mode of opened files. If unavailable, use chmod().
- */
-/*#define HAS_FCHMOD / **/
-
-/* HAS_FCHOWN:
- * This symbol, if defined, indicates that the fchown routine is available
- * to change ownership of opened files. If unavailable, use chown().
- */
-/*#define HAS_FCHOWN / **/
-
-/* HAS_FCNTL:
- * This symbol, if defined, indicates to the C program that
- * the fcntl() function exists.
- */
-/*#define HAS_FCNTL / **/
-
-/* HAS_FGETPOS:
- * This symbol, if defined, indicates that the fgetpos routine is
- * available to get the file position indicator, similar to ftell().
- */
-#define HAS_FGETPOS /**/
-
-/* HAS_FLOCK:
- * This symbol, if defined, indicates that the flock routine is
- * available to do file locking.
- */
-#define HAS_FLOCK /**/
-
-/* HAS_FORK:
- * This symbol, if defined, indicates that the fork routine is
- * available.
- */
-/*#define HAS_FORK / **/
-
-/* HAS_FSETPOS:
- * This symbol, if defined, indicates that the fsetpos routine is
- * available to set the file position indicator, similar to fseek().
- */
-#define HAS_FSETPOS /**/
-
-/* HAS_GETTIMEOFDAY:
- * This symbol, if defined, indicates that the gettimeofday() system
- * call is available for a sub-second accuracy clock. Usually, the file
- * <sys/resource.h> needs to be included (see I_SYS_RESOURCE).
- * The type "Timeval" should be used to refer to "struct timeval".
- */
-#define HAS_GETTIMEOFDAY /**/
-#ifdef HAS_GETTIMEOFDAY
-#define Timeval struct timeval /* Structure used by gettimeofday() */
-#endif
-
-/* HAS_GETGROUPS:
- * This symbol, if defined, indicates that the getgroups() routine is
- * available to get the list of process groups. If unavailable, multiple
- * groups are probably not supported.
- */
-/*#define HAS_GETGROUPS / **/
-
-/* HAS_GETLOGIN:
- * This symbol, if defined, indicates that the getlogin routine is
- * available to get the login name.
- */
-#define HAS_GETLOGIN /**/
-
-/* HAS_GETPGID:
- * This symbol, if defined, indicates to the C program that
- * the getpgid(pid) function is available to get the
- * process group id.
- */
-/*#define HAS_GETPGID / **/
-
-/* HAS_GETPGRP2:
- * This symbol, if defined, indicates that the getpgrp2() (as in DG/UX)
- * routine is available to get the current process group.
- */
-/*#define HAS_GETPGRP2 / **/
-
-/* HAS_GETPPID:
- * This symbol, if defined, indicates that the getppid routine is
- * available to get the parent process ID.
- */
-/*#define HAS_GETPPID / **/
-
-/* HAS_GETPRIORITY:
- * This symbol, if defined, indicates that the getpriority routine is
- * available to get a process's priority.
- */
-/*#define HAS_GETPRIORITY / **/
-
-/* HAS_INET_ATON:
- * This symbol, if defined, indicates to the C program that the
- * inet_aton() function is available to parse IP address "dotted-quad"
- * strings.
- */
-/*#define HAS_INET_ATON / **/
-
-/* HAS_KILLPG:
- * This symbol, if defined, indicates that the killpg routine is available
- * to kill process groups. If unavailable, you probably should use kill
- * with a negative process number.
- */
-#define HAS_KILLPG /**/
-
-/* HAS_LINK:
- * This symbol, if defined, indicates that the link routine is
- * available to create hard links.
- */
-#define HAS_LINK /**/
-
-/* HAS_LOCALECONV:
- * This symbol, if defined, indicates that the localeconv routine is
- * available for numeric and monetary formatting conventions.
- */
-#define HAS_LOCALECONV /**/
-
-/* HAS_LOCKF:
- * This symbol, if defined, indicates that the lockf routine is
- * available to do file locking.
- */
-/*#define HAS_LOCKF / **/
-
-/* HAS_LSTAT:
- * This symbol, if defined, indicates that the lstat routine is
- * available to do file stats on symbolic links.
- */
-/*#define HAS_LSTAT / **/
-
-/* HAS_MBLEN:
- * This symbol, if defined, indicates that the mblen routine is available
- * to find the number of bytes in a multibye character.
- */
-#define HAS_MBLEN /**/
-
-/* HAS_MBSTOWCS:
- * This symbol, if defined, indicates that the mbstowcs routine is
- * available to covert a multibyte string into a wide character string.
- */
-#define HAS_MBSTOWCS /**/
-
-/* HAS_MBTOWC:
- * This symbol, if defined, indicates that the mbtowc routine is available
- * to covert a multibyte to a wide character.
- */
-#define HAS_MBTOWC /**/
-
-/* HAS_MEMCMP:
- * This symbol, if defined, indicates that the memcmp routine is available
- * to compare blocks of memory.
- */
-#define HAS_MEMCMP /**/
-
-/* HAS_MEMCPY:
- * This symbol, if defined, indicates that the memcpy routine is available
- * to copy blocks of memory.
- */
-#define HAS_MEMCPY /**/
-
-/* HAS_MEMMOVE:
- * This symbol, if defined, indicates that the memmove routine is available
- * to copy potentially overlapping blocks of memory. This should be used
- * only when HAS_SAFE_BCOPY is not defined. If neither is there, roll your
- * own version.
- */
-#define HAS_MEMMOVE /**/
-
-/* HAS_MEMSET:
- * This symbol, if defined, indicates that the memset routine is available
- * to set blocks of memory.
- */
-#define HAS_MEMSET /**/
-
-/* HAS_MKDIR:
- * This symbol, if defined, indicates that the mkdir routine is available
- * to create directories. Otherwise you should fork off a new process to
- * exec /bin/mkdir.
- */
-#define HAS_MKDIR /**/
-
-/* HAS_MKFIFO:
- * This symbol, if defined, indicates that the mkfifo routine is
- * available to create FIFOs. Otherwise, mknod should be able to
- * do it for you. However, if mkfifo is there, mknod might require
- * super-user privileges which mkfifo will not.
- */
-/*#define HAS_MKFIFO / **/
-
-/* HAS_MKTIME:
- * This symbol, if defined, indicates that the mktime routine is
- * available.
- */
-#define HAS_MKTIME /**/
-
-/* HAS_MSYNC:
- * This symbol, if defined, indicates that the msync system call is
- * available to synchronize a mapped file.
- */
-/*#define HAS_MSYNC / **/
-
-/* HAS_MUNMAP:
- * This symbol, if defined, indicates that the munmap system call is
- * available to unmap a region, usually mapped by mmap().
- */
-/*#define HAS_MUNMAP / **/
-
-/* HAS_NICE:
- * This symbol, if defined, indicates that the nice routine is
- * available.
- */
-/*#define HAS_NICE / **/
-
-/* HAS_PATHCONF:
- * This symbol, if defined, indicates that pathconf() is available
- * to determine file-system related limits and options associated
- * with a given filename.
- */
-/* HAS_FPATHCONF:
- * This symbol, if defined, indicates that pathconf() is available
- * to determine file-system related limits and options associated
- * with a given open file descriptor.
- */
-/*#define HAS_PATHCONF / **/
-/*#define HAS_FPATHCONF / **/
-
-/* HAS_PAUSE:
- * This symbol, if defined, indicates that the pause routine is
- * available to suspend a process until a signal is received.
- */
-#define HAS_PAUSE /**/
-
-/* HAS_PIPE:
- * This symbol, if defined, indicates that the pipe routine is
- * available to create an inter-process channel.
- */
-#define HAS_PIPE /**/
-
-/* HAS_POLL:
- * This symbol, if defined, indicates that the poll routine is
- * available to poll active file descriptors. Please check I_POLL and
- * I_SYS_POLL to know which header should be included as well.
- */
-/*#define HAS_POLL / **/
-
-/* HAS_READDIR:
- * This symbol, if defined, indicates that the readdir routine is
- * available to read directory entries. You may have to include
- * <dirent.h>. See I_DIRENT.
- */
-#define HAS_READDIR /**/
-
-/* HAS_SEEKDIR:
- * This symbol, if defined, indicates that the seekdir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_SEEKDIR /**/
-
-/* HAS_TELLDIR:
- * This symbol, if defined, indicates that the telldir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_TELLDIR /**/
-
-/* HAS_REWINDDIR:
- * This symbol, if defined, indicates that the rewinddir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_REWINDDIR /**/
-
-/* HAS_READLINK:
- * This symbol, if defined, indicates that the readlink routine is
- * available to read the value of a symbolic link.
- */
-/*#define HAS_READLINK / **/
-
-/* HAS_RENAME:
- * This symbol, if defined, indicates that the rename routine is available
- * to rename files. Otherwise you should do the unlink(), link(), unlink()
- * trick.
- */
-#define HAS_RENAME /**/
-
-/* HAS_RMDIR:
- * This symbol, if defined, indicates that the rmdir routine is
- * available to remove directories. Otherwise you should fork off a
- * new process to exec /bin/rmdir.
- */
-#define HAS_RMDIR /**/
-
-/* HAS_SELECT:
- * This symbol, if defined, indicates that the select routine is
- * available to select active file descriptors. If the timeout field
- * is used, <sys/time.h> may need to be included.
- */
-#define HAS_SELECT /**/
-
-/* HAS_SETEGID:
- * This symbol, if defined, indicates that the setegid routine is available
- * to change the effective gid of the current program.
- */
-/*#define HAS_SETEGID / **/
-
-/* HAS_SETEUID:
- * This symbol, if defined, indicates that the seteuid routine is available
- * to change the effective uid of the current program.
- */
-/*#define HAS_SETEUID / **/
-
-/* HAS_SETGROUPS:
- * This symbol, if defined, indicates that the setgroups() routine is
- * available to set the list of process groups. If unavailable, multiple
- * groups are probably not supported.
- */
-/*#define HAS_SETGROUPS / **/
-
-/* HAS_SETLINEBUF:
- * This symbol, if defined, indicates that the setlinebuf routine is
- * available to change stderr or stdout from block-buffered or unbuffered
- * to a line-buffered mode.
- */
-/*#define HAS_SETLINEBUF / **/
-
-/* HAS_SETLOCALE:
- * This symbol, if defined, indicates that the setlocale routine is
- * available to handle locale-specific ctype implementations.
- */
-#define HAS_SETLOCALE /**/
-
-/* HAS_SETPGID:
- * This symbol, if defined, indicates that the setpgid(pid, gpid)
- * routine is available to set process group ID.
- */
-/*#define HAS_SETPGID / **/
-
-/* HAS_SETPGRP2:
- * This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
- * routine is available to set the current process group.
- */
-/*#define HAS_SETPGRP2 / **/
-
-/* HAS_SETPRIORITY:
- * This symbol, if defined, indicates that the setpriority routine is
- * available to set a process's priority.
- */
-/*#define HAS_SETPRIORITY / **/
-
-/* HAS_SETREGID:
- * This symbol, if defined, indicates that the setregid routine is
- * available to change the real and effective gid of the current
- * process.
- */
-/* HAS_SETRESGID:
- * This symbol, if defined, indicates that the setresgid routine is
- * available to change the real, effective and saved gid of the current
- * process.
- */
-/*#define HAS_SETREGID / **/
-/*#define HAS_SETRESGID / **/
-
-/* HAS_SETREUID:
- * This symbol, if defined, indicates that the setreuid routine is
- * available to change the real and effective uid of the current
- * process.
- */
-/* HAS_SETRESUID:
- * This symbol, if defined, indicates that the setresuid routine is
- * available to change the real, effective and saved uid of the current
- * process.
- */
-/*#define HAS_SETREUID / **/
-/*#define HAS_SETRESUID / **/
-
-/* HAS_SETRGID:
- * This symbol, if defined, indicates that the setrgid routine is available
- * to change the real gid of the current program.
- */
-/*#define HAS_SETRGID / **/
-
-/* HAS_SETRUID:
- * This symbol, if defined, indicates that the setruid routine is available
- * to change the real uid of the current program.
- */
-/*#define HAS_SETRUID / **/
-
-/* HAS_SETSID:
- * This symbol, if defined, indicates that the setsid routine is
- * available to set the process group ID.
- */
-/*#define HAS_SETSID / **/
-
-/* HAS_STRCHR:
- * This symbol is defined to indicate that the strchr()/strrchr()
- * functions are available for string searching. If not, try the
- * index()/rindex() pair.
- */
-/* HAS_INDEX:
- * This symbol is defined to indicate that the index()/rindex()
- * functions are available for string searching.
- */
-#define HAS_STRCHR /**/
-/*#define HAS_INDEX / **/
-
-/* HAS_STRCOLL:
- * This symbol, if defined, indicates that the strcoll routine is
- * available to compare strings using collating information.
- */
-#define HAS_STRCOLL /**/
-
-/* HAS_STRTOD:
- * This symbol, if defined, indicates that the strtod routine is
- * available to provide better numeric string conversion than atof().
- */
-#define HAS_STRTOD /**/
-
-/* HAS_STRTOL:
- * This symbol, if defined, indicates that the strtol routine is available
- * to provide better numeric string conversion than atoi() and friends.
- */
-#define HAS_STRTOL /**/
-
-/* HAS_STRXFRM:
- * This symbol, if defined, indicates that the strxfrm() routine is
- * available to transform strings.
- */
-#define HAS_STRXFRM /**/
-
-/* HAS_SYMLINK:
- * This symbol, if defined, indicates that the symlink routine is available
- * to create symbolic links.
- */
-/*#define HAS_SYMLINK / **/
-
-/* HAS_SYSCALL:
- * This symbol, if defined, indicates that the syscall routine is
- * available to call arbitrary system calls. If undefined, that's tough.
- */
-/*#define HAS_SYSCALL / **/
-
-/* HAS_SYSCONF:
- * This symbol, if defined, indicates that sysconf() is available
- * to determine system related limits and options.
- */
-/*#define HAS_SYSCONF / **/
-
-/* HAS_SYSTEM:
- * This symbol, if defined, indicates that the system routine is
- * available to issue a shell command.
- */
-#define HAS_SYSTEM /**/
-
-/* HAS_TCGETPGRP:
- * This symbol, if defined, indicates that the tcgetpgrp routine is
- * available to get foreground process group ID.
- */
-/*#define HAS_TCGETPGRP / **/
-
-/* HAS_TCSETPGRP:
- * This symbol, if defined, indicates that the tcsetpgrp routine is
- * available to set foreground process group ID.
- */
-/*#define HAS_TCSETPGRP / **/
-
-/* HAS_TRUNCATE:
- * This symbol, if defined, indicates that the truncate routine is
- * available to truncate files.
- */
-/*#define HAS_TRUNCATE / **/
-
-/* HAS_TZNAME:
- * This symbol, if defined, indicates that the tzname[] array is
- * available to access timezone names.
- */
-#define HAS_TZNAME /**/
-
-/* HAS_UMASK:
- * This symbol, if defined, indicates that the umask routine is
- * available to set and get the value of the file creation mask.
- */
-#define HAS_UMASK /**/
-
-/* HAS_USLEEP:
- * This symbol, if defined, indicates that the usleep routine is
- * available to let the process sleep on a sub-second accuracy.
- */
-/*#define HAS_USLEEP / **/
-
-/* HAS_WAIT4:
- * This symbol, if defined, indicates that wait4() exists.
- */
-/*#define HAS_WAIT4 / **/
-
-/* HAS_WAITPID:
- * This symbol, if defined, indicates that the waitpid routine is
- * available to wait for child process.
- */
-#define HAS_WAITPID /**/
-
-/* HAS_WCSTOMBS:
- * This symbol, if defined, indicates that the wcstombs routine is
- * available to convert wide character strings to multibyte strings.
- */
-#define HAS_WCSTOMBS /**/
-
-/* HAS_WCTOMB:
- * This symbol, if defined, indicates that the wctomb routine is available
- * to covert a wide character to a multibyte.
- */
-#define HAS_WCTOMB /**/
-
-/* Groups_t:
- * This symbol holds the type used for the second argument to
- * getgroups() and setgroups(). Usually, this is the same as
- * gidtype (gid_t) , but sometimes it isn't.
- * It can be int, ushort, gid_t, etc...
- * It may be necessary to include <sys/types.h> to get any
- * typedef'ed information. This is only required if you have
- * getgroups() or setgroups()..
- */
-#if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS)
-#define Groups_t gid_t /* Type for 2nd arg to [sg]etgroups() */
-#endif
-
-/* I_ARPA_INET:
- * This symbol, if defined, indicates to the C program that it should
- * include <arpa/inet.h> to get inet_addr and friends declarations.
- */
-#define I_ARPA_INET /**/
-
-/* I_DBM:
- * This symbol, if defined, indicates that <dbm.h> exists and should
- * be included.
- */
-/* I_RPCSVC_DBM:
- * This symbol, if defined, indicates that <rpcsvc/dbm.h> exists and
- * should be included.
- */
-/*#define I_DBM / **/
-#define I_RPCSVC_DBM /**/
-
-/* I_DLFCN:
- * This symbol, if defined, indicates that <dlfcn.h> exists and should
- * be included.
- */
-#define I_DLFCN /**/
-
-/* I_FCNTL:
- * This manifest constant tells the C program to include <fcntl.h>.
- */
-#define I_FCNTL /**/
-
-/* I_FLOAT:
- * This symbol, if defined, indicates to the C program that it should
- * include <float.h> to get definition of symbols like DBL_MAX or
- * DBL_MIN, i.e. machine dependent floating point values.
- */
-#define I_FLOAT /**/
-
-/* I_GDBM:
- * This symbol, if defined, indicates that <gdbm.h> exists and should
- * be included.
- */
-/*#define I_GDBM / **/
-
-/* I_LIMITS:
- * This symbol, if defined, indicates to the C program that it should
- * include <limits.h> to get definition of symbols like WORD_BIT or
- * LONG_MAX, i.e. machine dependant limitations.
- */
-#define I_LIMITS /**/
-
-/* I_LOCALE:
- * This symbol, if defined, indicates to the C program that it should
- * include <locale.h>.
- */
-#define I_LOCALE /**/
-
-/* I_MATH:
- * This symbol, if defined, indicates to the C program that it should
- * include <math.h>.
- */
-#define I_MATH /**/
-
-/* I_MEMORY:
- * This symbol, if defined, indicates to the C program that it should
- * include <memory.h>.
- */
-/*#define I_MEMORY / **/
-
-/* I_NETINET_IN:
- * This symbol, if defined, indicates to the C program that it should
- * include <netinet/in.h>. Otherwise, you may try <sys/in.h>.
- */
-/*#define I_NETINET_IN / **/
-
-/* I_SFIO:
- * This symbol, if defined, indicates to the C program that it should
- * include <sfio.h>.
- */
-/*#define I_SFIO / **/
-
-/* I_STDDEF:
- * This symbol, if defined, indicates that <stddef.h> exists and should
- * be included.
- */
-#define I_STDDEF /**/
-
-/* I_STDLIB:
- * This symbol, if defined, indicates that <stdlib.h> exists and should
- * be included.
- */
-#define I_STDLIB /**/
-
-/* I_STRING:
- * This symbol, if defined, indicates to the C program that it should
- * include <string.h> (USG systems) instead of <strings.h> (BSD systems).
- */
-#define I_STRING /**/
-
-/* I_SYS_DIR:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/dir.h>.
- */
-/*#define I_SYS_DIR / **/
-
-/* I_SYS_FILE:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/file.h> to get definition of R_OK and friends.
- */
-/*#define I_SYS_FILE / **/
-
-/* I_SYS_IOCTL:
- * This symbol, if defined, indicates that <sys/ioctl.h> exists and should
- * be included. Otherwise, include <sgtty.h> or <termio.h>.
- */
-/* I_SYS_SOCKIO:
- * This symbol, if defined, indicates the <sys/sockio.h> should be included
- * to get socket ioctl options, like SIOCATMARK.
- */
-/*#define I_SYS_IOCTL / **/
-/*#define I_SYS_SOCKIO / **/
-
-/* I_SYS_NDIR:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/ndir.h>.
- */
-/*#define I_SYS_NDIR / **/
-
-/* I_SYS_PARAM:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/param.h>.
- */
-/*#define I_SYS_PARAM / **/
-
-/* I_SYS_POLL:
- * This symbol, if defined, indicates that the program may include
- * <sys/poll.h>. When I_POLL is also defined, it's probably safest
- * to only include <poll.h>.
- */
-/*#define I_SYS_POLL / **/
-
-/* I_SYS_RESOURCE:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/resource.h>.
- */
-/*#define I_SYS_RESOURCE / **/
-
-/* I_SYS_SELECT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/select.h> in order to get definition of struct timeval.
- */
-/*#define I_SYS_SELECT / **/
-
-/* I_SYS_STAT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/stat.h>.
- */
-#define I_SYS_STAT /**/
-
-/* I_SYS_TIMES:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/times.h>.
- */
-/*#define I_SYS_TIMES / **/
-
-/* I_SYS_TYPES:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/types.h>.
- */
-#define I_SYS_TYPES /**/
-
-/* I_SYS_UN:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/un.h> to get UNIX domain socket definitions.
- */
-/*#define I_SYS_UN / **/
-
-/* I_SYS_WAIT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/wait.h>.
- */
-/*#define I_SYS_WAIT / **/
-
-/* I_TERMIO:
- * This symbol, if defined, indicates that the program should include
- * <termio.h> rather than <sgtty.h>. There are also differences in
- * the ioctl() calls that depend on the value of this symbol.
- */
-/* I_TERMIOS:
- * This symbol, if defined, indicates that the program should include
- * the POSIX termios.h rather than sgtty.h or termio.h.
- * There are also differences in the ioctl() calls that depend on the
- * value of this symbol.
- */
-/* I_SGTTY:
- * This symbol, if defined, indicates that the program should include
- * <sgtty.h> rather than <termio.h>. There are also differences in
- * the ioctl() calls that depend on the value of this symbol.
- */
-/*#define I_TERMIO / **/
-/*#define I_TERMIOS / **/
-/*#define I_SGTTY / **/
-
-/* I_UNISTD:
- * This symbol, if defined, indicates to the C program that it should
- * include <unistd.h>.
- */
-/*#define I_UNISTD / **/
-
-/* I_UTIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <utime.h>.
- */
-#define I_UTIME /**/
-
-/* I_VALUES:
- * This symbol, if defined, indicates to the C program that it should
- * include <values.h> to get definition of symbols like MINFLOAT or
- * MAXLONG, i.e. machine dependant limitations. Probably, you
- * should use <limits.h> instead, if it is available.
- */
-/*#define I_VALUES / **/
-
-/* I_VFORK:
- * This symbol, if defined, indicates to the C program that it should
- * include vfork.h.
- */
-/*#define I_VFORK / **/
-
-/* CAN_VAPROTO:
- * This variable is defined on systems supporting prototype declaration
- * of functions with a variable number of arguments.
- */
-/* _V:
- * This macro is used to declare function parameters in prototypes for
- * functions with a variable number of parameters. Use double parentheses.
- * For example:
- *
- * int printf _V((char *fmt, ...));
- *
- * Remember to use the plain simple _() macro when declaring a function
- * with no variable number of arguments, since it might be possible to
- * have a non-effect _V() macro and still get prototypes via _().
- */
-/*#define CAN_VAPROTO / **/
-#ifdef CAN_VAPROTO
-#define _V(args) args
-#else
-#define _V(args) ()
-#endif
-
-/* INTSIZE:
- * This symbol contains the value of sizeof(int) so that the C
- * preprocessor can make decisions based on it.
- */
-/* LONGSIZE:
- * This symbol contains the value of sizeof(long) so that the C
- * preprocessor can make decisions based on it.
- */
-/* SHORTSIZE:
- * This symbol contains the value of sizeof(short) so that the C
- * preprocessor can make decisions based on it.
- */
-#define INTSIZE 4 /**/
-#define LONGSIZE 4 /**/
-#define SHORTSIZE 2 /**/
-
-/* MULTIARCH:
- * This symbol, if defined, signifies that the build
- * process will produce some binary files that are going to be
- * used in a cross-platform environment. This is the case for
- * example with the NeXT "fat" binaries that contain executables
- * for several CPUs.
- */
-/*#define MULTIARCH / **/
-
-/* HAS_QUAD:
- * This symbol, if defined, tells that there's a 64-bit integer type,
- * Quad_t, and its unsigned counterpar, Uquad_t. QUADKIND will be one
- * of QUAD_IS_INT, QUAD_IS_LONG, QUAD_IS_LONG_LONG, QUAD_IS_INT64_T,
- * or QUAD_IS___INT64.
- */
-#define HAS_QUAD /**/
-#ifdef HAS_QUAD
-# ifdef _MSC_VER
-# define Quad_t __int64 /**/
-# define Uquad_t unsigned __int64 /**/
-# define QUADKIND 5 /**/
-# else /* gcc presumably */
-# define Quad_t long long /**/
-# define Uquad_t unsigned long long /**/
-# define QUADKIND 3 /**/
-# endif
-# define QUAD_IS_INT 1
-# define QUAD_IS_LONG 2
-# define QUAD_IS_LONG_LONG 3
-# define QUAD_IS_INT64_T 4
-# define QUAD_IS___INT64 5
-#endif
-
-/* OSNAME:
- * This symbol contains the name 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.
- */
-/* 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 "MSWin32" /**/
-#define OSVERS "5.1" /**/
-
-/* ARCHLIB:
- * This variable, if defined, holds the name of the directory in
- * which the user wants to put architecture-dependent public
- * library files for perl5. It is most often a local directory
- * such as /usr/local/lib. Programs using this variable must be
- * prepared to deal with filename expansion. If ARCHLIB is the
- * same as PRIVLIB, it is not defined, since presumably the
- * program already searches PRIVLIB.
- */
-/* ARCHLIB_EXP:
- * This symbol contains the ~name expanded version of ARCHLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define ARCHLIB "c:\\perl\\lib" /**/
-/*#define ARCHLIB_EXP "" / **/
-
-/* ARCHNAME:
- * This symbol holds a string representing the architecture name.
- * It may be used to construct an architecture-dependant pathname
- * where library files may be held under a private library, for
- * instance.
- */
-#define ARCHNAME "MSWin32-x64" /**/
-
-/* BIN:
- * This symbol holds the path of the bin directory where the package will
- * be installed. Program must be prepared to deal with ~name substitution.
- */
-/* BIN_EXP:
- * This symbol is the filename expanded version of the BIN symbol, for
- * programs that do not want to deal with that at run-time.
- */
-/* PERL_RELOCATABLE_INC:
- * This symbol, if defined, indicates that we'd like to relocate entries
- * in @INC at run time based on the location of the perl binary.
- */
-#define BIN "c:\\perl\\bin" /**/
-#define BIN_EXP "c:\\perl\\bin" /**/
-#define PERL_RELOCATABLE_INC "undef" /**/
-
-/* CAT2:
- * This macro concatenates 2 tokens together.
- */
-/* STRINGIFY:
- * This macro surrounds its token with double quotes.
- */
-#if 42 == 1
-#define CAT2(a,b) a/**/b
-#undef STRINGIFY
-#define STRINGIFY(a) "a"
-#endif
-#if 42 == 42
-#define PeRl_CaTiFy(a, b) a ## b
-#define PeRl_StGiFy(a) #a
-#define CAT2(a,b) PeRl_CaTiFy(a,b)
-#define StGiFy(a) PeRl_StGiFy(a)
-#undef STRINGIFY
-#define STRINGIFY(a) PeRl_StGiFy(a)
-#endif
-#if 42 != 1 && 42 != 42
-#include "Bletch: How does this C preprocessor concatenate tokens?"
-#endif
-
-/* CPPSTDIN:
- * This symbol contains the first part of the string which will invoke
- * the C preprocessor on the standard input and produce to standard
- * output. Typical value of "cc -E" or "/lib/cpp", but it can also
- * call a wrapper. See CPPRUN.
- */
-/* CPPMINUS:
- * This symbol contains the second part of the string which will invoke
- * the C preprocessor on the standard input and produce to standard
- * output. This symbol will have the value "-" if CPPSTDIN needs a minus
- * to specify standard input, otherwise the value is "".
- */
-/* CPPRUN:
- * This symbol contains the string which will invoke a C preprocessor on
- * the standard input and produce to standard output. It needs to end
- * with CPPLAST, after all other preprocessor flags have been specified.
- * The main difference with CPPSTDIN is that this program will never be a
- * pointer to a shell wrapper, i.e. it will be empty if no preprocessor is
- * available directly to the user. Note that it may well be different from
- * the preprocessor used to compile the C program.
- */
-/* CPPLAST:
- * This symbol is intended to be used along with CPPRUN in the same manner
- * symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "".
- */
-#ifdef _MSC_VER
-# define CPPSTDIN "cppstdin"
-# define CPPMINUS ""
-# define CPPRUN "cl -nologo -E"
-#else
-# define CPPSTDIN "x86_64-w64-mingw32-gcc -E"
-# define CPPMINUS "-"
-# define CPPRUN "x86_64-w64-mingw32-gcc -E"
-#endif
-#define CPPLAST ""
-
-/* HAS_ACCESS:
- * This manifest constant lets the C program know that the access()
- * system call is available to check for accessibility using real UID/GID.
- * (always present on UNIX.)
- */
-#define HAS_ACCESS /**/
-
-/* HAS_ACCESSX:
- * This symbol, if defined, indicates that the accessx routine is
- * available to do extended access checks.
- */
-/*#define HAS_ACCESSX / **/
-
-/* HAS_ASCTIME_R:
- * This symbol, if defined, indicates that the asctime_r routine
- * is available to asctime re-entrantly.
- */
-/* ASCTIME_R_PROTO:
- * This symbol encodes the prototype of asctime_r.
- * It is zero if d_asctime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_asctime_r
- * is defined.
- */
-/*#define HAS_ASCTIME_R / **/
-#define ASCTIME_R_PROTO 0 /**/
-
-/* The HASATTRIBUTE_* defines are left undefined here because they vary from
- * one version of GCC to another. Instead, they are defined on the basis of
- * the compiler version in <perl.h>.
- */
-/* HASATTRIBUTE_FORMAT:
- * Can we handle GCC attribute for checking printf-style formats
- */
-/* PRINTF_FORMAT_NULL_OK:
- * Allows __printf__ format to be null when checking printf-style
- */
-/* HASATTRIBUTE_MALLOC:
- * Can we handle GCC attribute for malloc-style functions.
- */
-/* HASATTRIBUTE_NONNULL:
- * Can we handle GCC attribute for nonnull function parms.
- */
-/* HASATTRIBUTE_NORETURN:
- * Can we handle GCC attribute for functions that do not return
- */
-/* HASATTRIBUTE_PURE:
- * Can we handle GCC attribute for pure functions
- */
-/* HASATTRIBUTE_UNUSED:
- * Can we handle GCC attribute for unused variables and arguments
- */
-/* HASATTRIBUTE_DEPRECATED:
- * Can we handle GCC attribute for marking deprecated APIs
- */
-/* HASATTRIBUTE_WARN_UNUSED_RESULT:
- * Can we handle GCC attribute for warning on unused results
- */
-/*#define HASATTRIBUTE_DEPRECATED / **/
-/*#define HASATTRIBUTE_FORMAT / **/
-/*#define PRINTF_FORMAT_NULL_OK / **/
-/*#define HASATTRIBUTE_NORETURN / **/
-/*#define HASATTRIBUTE_MALLOC / **/
-/*#define HASATTRIBUTE_NONNULL / **/
-/*#define HASATTRIBUTE_PURE / **/
-/*#define HASATTRIBUTE_UNUSED / **/
-/*#define HASATTRIBUTE_WARN_UNUSED_RESULT / **/
-
-/* HASCONST:
- * This symbol, if defined, indicates that this C compiler knows about
- * the const type. There is no need to actually test for that symbol
- * within your programs. The mere use of the "const" keyword will
- * trigger the necessary tests.
- */
-#define HASCONST /**/
-#ifndef HASCONST
-#define const
-#endif
-
-/* HAS_CRYPT_R:
- * This symbol, if defined, indicates that the crypt_r routine
- * is available to crypt re-entrantly.
- */
-/* CRYPT_R_PROTO:
- * This symbol encodes the prototype of crypt_r.
- * It is zero if d_crypt_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_crypt_r
- * is defined.
- */
-/*#define HAS_CRYPT_R / **/
-#define CRYPT_R_PROTO 0 /**/
-
-/* HAS_CSH:
- * This symbol, if defined, indicates that the C-shell exists.
- */
-/* CSH:
- * This symbol, if defined, contains the full pathname of csh.
- */
-/*#define HAS_CSH / **/
-#ifdef HAS_CSH
-#define CSH "" /**/
-#endif
-
-/* HAS_CTERMID_R:
- * This symbol, if defined, indicates that the ctermid_r routine
- * is available to ctermid re-entrantly.
- */
-/* CTERMID_R_PROTO:
- * This symbol encodes the prototype of ctermid_r.
- * It is zero if d_ctermid_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ctermid_r
- * is defined.
- */
-/*#define HAS_CTERMID_R / **/
-#define CTERMID_R_PROTO 0 /**/
-
-/* HAS_CTIME_R:
- * This symbol, if defined, indicates that the ctime_r routine
- * is available to ctime re-entrantly.
- */
-/* CTIME_R_PROTO:
- * This symbol encodes the prototype of ctime_r.
- * It is zero if d_ctime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ctime_r
- * is defined.
- */
-/*#define HAS_CTIME_R / **/
-#define CTIME_R_PROTO 0 /**/
-
-/* HAS_DRAND48_R:
- * This symbol, if defined, indicates that the drand48_r routine
- * is available to drand48 re-entrantly.
- */
-/* DRAND48_R_PROTO:
- * This symbol encodes the prototype of drand48_r.
- * It is zero if d_drand48_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_drand48_r
- * is defined.
- */
-/*#define HAS_DRAND48_R / **/
-#define DRAND48_R_PROTO 0 /**/
-
-/* HAS_DRAND48_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the drand48() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern double drand48(void);
- */
-/*#define HAS_DRAND48_PROTO / **/
-
-/* HAS_EACCESS:
- * This symbol, if defined, indicates that the eaccess routine is
- * available to do extended access checks.
- */
-/*#define HAS_EACCESS / **/
-
-/* HAS_ENDGRENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for finalizing sequential access of the group database.
- */
-/*#define HAS_ENDGRENT / **/
-
-/* HAS_ENDGRENT_R:
- * This symbol, if defined, indicates that the endgrent_r routine
- * is available to endgrent re-entrantly.
- */
-/* ENDGRENT_R_PROTO:
- * This symbol encodes the prototype of endgrent_r.
- * It is zero if d_endgrent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endgrent_r
- * is defined.
- */
-/*#define HAS_ENDGRENT_R / **/
-#define ENDGRENT_R_PROTO 0 /**/
-
-/* HAS_ENDHOSTENT:
- * This symbol, if defined, indicates that the endhostent() routine is
- * available to close whatever was being used for host queries.
- */
-/*#define HAS_ENDHOSTENT / **/
-
-/* HAS_ENDHOSTENT_R:
- * This symbol, if defined, indicates that the endhostent_r routine
- * is available to endhostent re-entrantly.
- */
-/* ENDHOSTENT_R_PROTO:
- * This symbol encodes the prototype of endhostent_r.
- * It is zero if d_endhostent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endhostent_r
- * is defined.
- */
-/*#define HAS_ENDHOSTENT_R / **/
-#define ENDHOSTENT_R_PROTO 0 /**/
-
-/* HAS_ENDNETENT:
- * This symbol, if defined, indicates that the endnetent() routine is
- * available to close whatever was being used for network queries.
- */
-/*#define HAS_ENDNETENT / **/
-
-/* HAS_ENDNETENT_R:
- * This symbol, if defined, indicates that the endnetent_r routine
- * is available to endnetent re-entrantly.
- */
-/* ENDNETENT_R_PROTO:
- * This symbol encodes the prototype of endnetent_r.
- * It is zero if d_endnetent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endnetent_r
- * is defined.
- */
-/*#define HAS_ENDNETENT_R / **/
-#define ENDNETENT_R_PROTO 0 /**/
-
-/* HAS_ENDPROTOENT:
- * This symbol, if defined, indicates that the endprotoent() routine is
- * available to close whatever was being used for protocol queries.
- */
-/*#define HAS_ENDPROTOENT / **/
-
-/* HAS_ENDPROTOENT_R:
- * This symbol, if defined, indicates that the endprotoent_r routine
- * is available to endprotoent re-entrantly.
- */
-/* ENDPROTOENT_R_PROTO:
- * This symbol encodes the prototype of endprotoent_r.
- * It is zero if d_endprotoent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endprotoent_r
- * is defined.
- */
-/*#define HAS_ENDPROTOENT_R / **/
-#define ENDPROTOENT_R_PROTO 0 /**/
-
-/* HAS_ENDPWENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for finalizing sequential access of the passwd database.
- */
-/*#define HAS_ENDPWENT / **/
-
-/* HAS_ENDPWENT_R:
- * This symbol, if defined, indicates that the endpwent_r routine
- * is available to endpwent re-entrantly.
- */
-/* ENDPWENT_R_PROTO:
- * This symbol encodes the prototype of endpwent_r.
- * It is zero if d_endpwent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endpwent_r
- * is defined.
- */
-/*#define HAS_ENDPWENT_R / **/
-#define ENDPWENT_R_PROTO 0 /**/
-
-/* HAS_ENDSERVENT:
- * This symbol, if defined, indicates that the endservent() routine is
- * available to close whatever was being used for service queries.
- */
-/*#define HAS_ENDSERVENT / **/
-
-/* HAS_ENDSERVENT_R:
- * This symbol, if defined, indicates that the endservent_r routine
- * is available to endservent re-entrantly.
- */
-/* ENDSERVENT_R_PROTO:
- * This symbol encodes the prototype of endservent_r.
- * It is zero if d_endservent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endservent_r
- * is defined.
- */
-/*#define HAS_ENDSERVENT_R / **/
-#define ENDSERVENT_R_PROTO 0 /**/
-
-/* FLEXFILENAMES:
- * This symbol, if defined, indicates that the system supports filenames
- * longer than 14 characters.
- */
-#define FLEXFILENAMES /**/
-
-/* HAS_GETGRENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for sequential access of the group database.
- */
-/*#define HAS_GETGRENT / **/
-
-/* HAS_GETGRENT_R:
- * This symbol, if defined, indicates that the getgrent_r routine
- * is available to getgrent re-entrantly.
- */
-/* GETGRENT_R_PROTO:
- * This symbol encodes the prototype of getgrent_r.
- * It is zero if d_getgrent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrent_r
- * is defined.
- */
-/*#define HAS_GETGRENT_R / **/
-#define GETGRENT_R_PROTO 0 /**/
-
-/* HAS_GETGRGID_R:
- * This symbol, if defined, indicates that the getgrgid_r routine
- * is available to getgrgid re-entrantly.
- */
-/* GETGRGID_R_PROTO:
- * This symbol encodes the prototype of getgrgid_r.
- * It is zero if d_getgrgid_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrgid_r
- * is defined.
- */
-/*#define HAS_GETGRGID_R / **/
-#define GETGRGID_R_PROTO 0 /**/
-
-/* HAS_GETGRNAM_R:
- * This symbol, if defined, indicates that the getgrnam_r routine
- * is available to getgrnam re-entrantly.
- */
-/* GETGRNAM_R_PROTO:
- * This symbol encodes the prototype of getgrnam_r.
- * It is zero if d_getgrnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrnam_r
- * is defined.
- */
-/*#define HAS_GETGRNAM_R / **/
-#define GETGRNAM_R_PROTO 0 /**/
-
-/* HAS_GETHOSTBYADDR:
- * This symbol, if defined, indicates that the gethostbyaddr() routine is
- * available to look up hosts by their IP addresses.
- */
-#define HAS_GETHOSTBYADDR /**/
-
-/* HAS_GETHOSTBYNAME:
- * This symbol, if defined, indicates that the gethostbyname() routine is
- * available to look up host names in some data base or other.
- */
-#define HAS_GETHOSTBYNAME /**/
-
-/* HAS_GETHOSTENT:
- * This symbol, if defined, indicates that the gethostent() routine is
- * available to look up host names in some data base or another.
- */
-/*#define HAS_GETHOSTENT / **/
-
-/* HAS_GETHOSTNAME:
- * This symbol, if defined, indicates that the C program may use the
- * gethostname() routine to derive the host name. See also HAS_UNAME
- * and PHOSTNAME.
- */
-/* HAS_UNAME:
- * This symbol, if defined, indicates that the C program may use the
- * uname() routine to derive the host name. See also HAS_GETHOSTNAME
- * and PHOSTNAME.
- */
-/* PHOSTNAME:
- * This symbol, if defined, indicates the command to feed to the
- * popen() routine to derive the host name. See also HAS_GETHOSTNAME
- * and HAS_UNAME. Note that the command uses a fully qualified path,
- * so that it is safe even if used by a process with super-user
- * privileges.
- */
-/* HAS_PHOSTNAME:
- * This symbol, if defined, indicates that the C program may use the
- * contents of PHOSTNAME as a command to feed to the popen() routine
- * to derive the host name.
- */
-#define HAS_GETHOSTNAME /**/
-#define HAS_UNAME /**/
-/*#define HAS_PHOSTNAME / **/
-#ifdef HAS_PHOSTNAME
-#define PHOSTNAME "" /* How to get the host name */
-#endif
-
-/* HAS_GETHOSTBYADDR_R:
- * This symbol, if defined, indicates that the gethostbyaddr_r routine
- * is available to gethostbyaddr re-entrantly.
- */
-/* GETHOSTBYADDR_R_PROTO:
- * This symbol encodes the prototype of gethostbyaddr_r.
- * It is zero if d_gethostbyaddr_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gethostbyaddr_r
- * is defined.
- */
-/*#define HAS_GETHOSTBYADDR_R / **/
-#define GETHOSTBYADDR_R_PROTO 0 /**/
-
-/* HAS_GETHOSTBYNAME_R:
- * This symbol, if defined, indicates that the gethostbyname_r routine
- * is available to gethostbyname re-entrantly.
- */
-/* GETHOSTBYNAME_R_PROTO:
- * This symbol encodes the prototype of gethostbyname_r.
- * It is zero if d_gethostbyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gethostbyname_r
- * is defined.
- */
-/*#define HAS_GETHOSTBYNAME_R / **/
-#define GETHOSTBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETHOSTENT_R:
- * This symbol, if defined, indicates that the gethostent_r routine
- * is available to gethostent re-entrantly.
- */
-/* GETHOSTENT_R_PROTO:
- * This symbol encodes the prototype of gethostent_r.
- * It is zero if d_gethostent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gethostent_r
- * is defined.
- */
-/*#define HAS_GETHOSTENT_R / **/
-#define GETHOSTENT_R_PROTO 0 /**/
-
-/* HAS_GETHOST_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for gethostent(), gethostbyname(), and
- * gethostbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETHOST_PROTOS /**/
-
-/* HAS_GETLOGIN_R:
- * This symbol, if defined, indicates that the getlogin_r routine
- * is available to getlogin re-entrantly.
- */
-/* GETLOGIN_R_PROTO:
- * This symbol encodes the prototype of getlogin_r.
- * It is zero if d_getlogin_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getlogin_r
- * is defined.
- */
-/*#define HAS_GETLOGIN_R / **/
-#define GETLOGIN_R_PROTO 0 /**/
-
-/* HAS_GETNETBYADDR:
- * This symbol, if defined, indicates that the getnetbyaddr() routine is
- * available to look up networks by their IP addresses.
- */
-/*#define HAS_GETNETBYADDR / **/
-
-/* HAS_GETNETBYNAME:
- * This symbol, if defined, indicates that the getnetbyname() routine is
- * available to look up networks by their names.
- */
-/*#define HAS_GETNETBYNAME / **/
-
-/* HAS_GETNETENT:
- * This symbol, if defined, indicates that the getnetent() routine is
- * available to look up network names in some data base or another.
- */
-/*#define HAS_GETNETENT / **/
-
-/* HAS_GETNETBYADDR_R:
- * This symbol, if defined, indicates that the getnetbyaddr_r routine
- * is available to getnetbyaddr re-entrantly.
- */
-/* GETNETBYADDR_R_PROTO:
- * This symbol encodes the prototype of getnetbyaddr_r.
- * It is zero if d_getnetbyaddr_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getnetbyaddr_r
- * is defined.
- */
-/*#define HAS_GETNETBYADDR_R / **/
-#define GETNETBYADDR_R_PROTO 0 /**/
-
-/* HAS_GETNETBYNAME_R:
- * This symbol, if defined, indicates that the getnetbyname_r routine
- * is available to getnetbyname re-entrantly.
- */
-/* GETNETBYNAME_R_PROTO:
- * This symbol encodes the prototype of getnetbyname_r.
- * It is zero if d_getnetbyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getnetbyname_r
- * is defined.
- */
-/*#define HAS_GETNETBYNAME_R / **/
-#define GETNETBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETNETENT_R:
- * This symbol, if defined, indicates that the getnetent_r routine
- * is available to getnetent re-entrantly.
- */
-/* GETNETENT_R_PROTO:
- * This symbol encodes the prototype of getnetent_r.
- * It is zero if d_getnetent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getnetent_r
- * is defined.
- */
-/*#define HAS_GETNETENT_R / **/
-#define GETNETENT_R_PROTO 0 /**/
-
-/* HAS_GETNET_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getnetent(), getnetbyname(), and
- * getnetbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-/*#define HAS_GETNET_PROTOS / **/
-
-/* HAS_GETPROTOENT:
- * This symbol, if defined, indicates that the getprotoent() routine is
- * available to look up protocols in some data base or another.
- */
-/*#define HAS_GETPROTOENT / **/
-
-/* HAS_GETPGRP:
- * This symbol, if defined, indicates that the getpgrp routine is
- * available to get the current process group.
- */
-/* USE_BSD_GETPGRP:
- * This symbol, if defined, indicates that getpgrp needs one
- * arguments whereas USG one needs none.
- */
-/*#define HAS_GETPGRP / **/
-/*#define USE_BSD_GETPGRP / **/
-
-/* HAS_GETPROTOBYNAME:
- * This symbol, if defined, indicates that the getprotobyname()
- * routine is available to look up protocols by their name.
- */
-/* HAS_GETPROTOBYNUMBER:
- * This symbol, if defined, indicates that the getprotobynumber()
- * routine is available to look up protocols by their number.
- */
-#define HAS_GETPROTOBYNAME /**/
-#define HAS_GETPROTOBYNUMBER /**/
-
-/* HAS_GETPROTOBYNAME_R:
- * This symbol, if defined, indicates that the getprotobyname_r routine
- * is available to getprotobyname re-entrantly.
- */
-/* GETPROTOBYNAME_R_PROTO:
- * This symbol encodes the prototype of getprotobyname_r.
- * It is zero if d_getprotobyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getprotobyname_r
- * is defined.
- */
-/*#define HAS_GETPROTOBYNAME_R / **/
-#define GETPROTOBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETPROTOBYNUMBER_R:
- * This symbol, if defined, indicates that the getprotobynumber_r routine
- * is available to getprotobynumber re-entrantly.
- */
-/* GETPROTOBYNUMBER_R_PROTO:
- * This symbol encodes the prototype of getprotobynumber_r.
- * It is zero if d_getprotobynumber_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getprotobynumber_r
- * is defined.
- */
-/*#define HAS_GETPROTOBYNUMBER_R / **/
-#define GETPROTOBYNUMBER_R_PROTO 0 /**/
-
-/* HAS_GETPROTOENT_R:
- * This symbol, if defined, indicates that the getprotoent_r routine
- * is available to getprotoent re-entrantly.
- */
-/* GETPROTOENT_R_PROTO:
- * This symbol encodes the prototype of getprotoent_r.
- * It is zero if d_getprotoent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getprotoent_r
- * is defined.
- */
-/*#define HAS_GETPROTOENT_R / **/
-#define GETPROTOENT_R_PROTO 0 /**/
-
-/* HAS_GETPROTO_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getprotoent(), getprotobyname(), and
- * getprotobyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETPROTO_PROTOS /**/
-
-/* HAS_GETPWENT:
- * This symbol, if defined, indicates that the getpwent routine is
- * available for sequential access of the passwd database.
- * If this is not available, the older getpw() function may be available.
- */
-/*#define HAS_GETPWENT / **/
-
-/* HAS_GETPWENT_R:
- * This symbol, if defined, indicates that the getpwent_r routine
- * is available to getpwent re-entrantly.
- */
-/* GETPWENT_R_PROTO:
- * This symbol encodes the prototype of getpwent_r.
- * It is zero if d_getpwent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwent_r
- * is defined.
- */
-/*#define HAS_GETPWENT_R / **/
-#define GETPWENT_R_PROTO 0 /**/
-
-/* HAS_GETPWNAM_R:
- * This symbol, if defined, indicates that the getpwnam_r routine
- * is available to getpwnam re-entrantly.
- */
-/* GETPWNAM_R_PROTO:
- * This symbol encodes the prototype of getpwnam_r.
- * It is zero if d_getpwnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwnam_r
- * is defined.
- */
-/*#define HAS_GETPWNAM_R / **/
-#define GETPWNAM_R_PROTO 0 /**/
-
-/* HAS_GETPWUID_R:
- * This symbol, if defined, indicates that the getpwuid_r routine
- * is available to getpwuid re-entrantly.
- */
-/* GETPWUID_R_PROTO:
- * This symbol encodes the prototype of getpwuid_r.
- * It is zero if d_getpwuid_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwuid_r
- * is defined.
- */
-/*#define HAS_GETPWUID_R / **/
-#define GETPWUID_R_PROTO 0 /**/
-
-/* HAS_GETSERVENT:
- * This symbol, if defined, indicates that the getservent() routine is
- * available to look up network services in some data base or another.
- */
-/*#define HAS_GETSERVENT / **/
-
-/* HAS_GETSERVBYNAME_R:
- * This symbol, if defined, indicates that the getservbyname_r routine
- * is available to getservbyname re-entrantly.
- */
-/* GETSERVBYNAME_R_PROTO:
- * This symbol encodes the prototype of getservbyname_r.
- * It is zero if d_getservbyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservbyname_r
- * is defined.
- */
-/*#define HAS_GETSERVBYNAME_R / **/
-#define GETSERVBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETSERVBYPORT_R:
- * This symbol, if defined, indicates that the getservbyport_r routine
- * is available to getservbyport re-entrantly.
- */
-/* GETSERVBYPORT_R_PROTO:
- * This symbol encodes the prototype of getservbyport_r.
- * It is zero if d_getservbyport_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservbyport_r
- * is defined.
- */
-/*#define HAS_GETSERVBYPORT_R / **/
-#define GETSERVBYPORT_R_PROTO 0 /**/
-
-/* HAS_GETSERVENT_R:
- * This symbol, if defined, indicates that the getservent_r routine
- * is available to getservent re-entrantly.
- */
-/* GETSERVENT_R_PROTO:
- * This symbol encodes the prototype of getservent_r.
- * It is zero if d_getservent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservent_r
- * is defined.
- */
-/*#define HAS_GETSERVENT_R / **/
-#define GETSERVENT_R_PROTO 0 /**/
-
-/* HAS_GETSERV_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getservent(), getservbyname(), and
- * getservbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETSERV_PROTOS /**/
-
-/* HAS_GETSPNAM_R:
- * This symbol, if defined, indicates that the getspnam_r routine
- * is available to getspnam re-entrantly.
- */
-/* GETSPNAM_R_PROTO:
- * This symbol encodes the prototype of getspnam_r.
- * It is zero if d_getspnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getspnam_r
- * is defined.
- */
-/*#define HAS_GETSPNAM_R / **/
-#define GETSPNAM_R_PROTO 0 /**/
-
-/* HAS_GETSERVBYNAME:
- * This symbol, if defined, indicates that the getservbyname()
- * routine is available to look up services by their name.
- */
-/* HAS_GETSERVBYPORT:
- * This symbol, if defined, indicates that the getservbyport()
- * routine is available to look up services by their port.
- */
-#define HAS_GETSERVBYNAME /**/
-#define HAS_GETSERVBYPORT /**/
-
-/* HAS_GMTIME_R:
- * This symbol, if defined, indicates that the gmtime_r routine
- * is available to gmtime re-entrantly.
- */
-/* GMTIME_R_PROTO:
- * This symbol encodes the prototype of gmtime_r.
- * It is zero if d_gmtime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gmtime_r
- * is defined.
- */
-/*#define HAS_GMTIME_R / **/
-#define GMTIME_R_PROTO 0 /**/
-
-/* HAS_HTONL:
- * This symbol, if defined, indicates that the htonl() routine (and
- * friends htons() ntohl() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_HTONS:
- * This symbol, if defined, indicates that the htons() routine (and
- * friends htonl() ntohl() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_NTOHL:
- * This symbol, if defined, indicates that the ntohl() routine (and
- * friends htonl() htons() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_NTOHS:
- * This symbol, if defined, indicates that the ntohs() routine (and
- * friends htonl() htons() ntohl()) are available to do network
- * order byte swapping.
- */
-#define HAS_HTONL /**/
-#define HAS_HTONS /**/
-#define HAS_NTOHL /**/
-#define HAS_NTOHS /**/
-
-/* HAS_LOCALTIME_R:
- * This symbol, if defined, indicates that the localtime_r routine
- * is available to localtime re-entrantly.
- */
-/* LOCALTIME_R_NEEDS_TZSET:
- * Many libc's localtime_r implementations do not call tzset,
- * making them differ from localtime(), and making timezone
- * changes using \undef{TZ} without explicitly calling tzset
- * impossible. This symbol makes us call tzset before localtime_r
- */
-/*#define LOCALTIME_R_NEEDS_TZSET / **/
-#ifdef LOCALTIME_R_NEEDS_TZSET
-#define L_R_TZSET tzset(),
-#else
-#define L_R_TZSET
-#endif
-
-/* LOCALTIME_R_PROTO:
- * This symbol encodes the prototype of localtime_r.
- * It is zero if d_localtime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_localtime_r
- * is defined.
- */
-/*#define HAS_LOCALTIME_R / **/
-#define LOCALTIME_R_PROTO 0 /**/
-
-/* HAS_LONG_DOUBLE:
- * This symbol will be defined if the C compiler supports long
- * doubles.
- */
-/* LONG_DOUBLESIZE:
- * This symbol contains the size of a long double, so that the
- * C preprocessor can make decisions based on it. It is only
- * defined if the system supports long doubles.
- */
-#define HAS_LONG_DOUBLE /**/
-#ifdef HAS_LONG_DOUBLE
-# ifdef _MSC_VER
-# define LONG_DOUBLESIZE 8 /**/
-# else
-# define LONG_DOUBLESIZE 12 /**/
-# endif
-#endif
-
-/* HAS_LONG_LONG:
- * This symbol will be defined if the C compiler supports long long.
- */
-/* LONGLONGSIZE:
- * This symbol contains the size of a long long, so that the
- * C preprocessor can make decisions based on it. It is only
- * defined if the system supports long long.
- */
-#ifdef __GNUC__
-# define HAS_LONG_LONG /**/
-#endif
-#ifdef HAS_LONG_LONG
-#define LONGLONGSIZE 8 /**/
-#endif
-
-/* HAS_LSEEK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the lseek() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern off_t lseek(int, off_t, int);
- */
-#define HAS_LSEEK_PROTO /**/
-
-/* HAS_MEMCHR:
- * This symbol, if defined, indicates that the memchr routine is available
- * to locate characters within a C string.
- */
-#define HAS_MEMCHR /**/
-
-/* HAS_MKSTEMP:
- * This symbol, if defined, indicates that the mkstemp routine is
- * available to exclusively create and open a uniquely named
- * temporary file.
- */
-/*#define HAS_MKSTEMP / **/
-
-/* HAS_MMAP:
- * This symbol, if defined, indicates that the mmap system call is
- * available to map a file into memory.
- */
-/* Mmap_t:
- * This symbol holds the return type of the mmap() system call
- * (and simultaneously the type of the first argument).
- * Usually set to 'void *' or 'caddr_t'.
- */
-/*#define HAS_MMAP / **/
-#define Mmap_t void * /**/
-
-/* HAS_MSG:
- * This symbol, if defined, indicates that the entire msg*(2) library is
- * supported (IPC mechanism based on message queues).
- */
-/*#define HAS_MSG / **/
-
-/* OLD_PTHREAD_CREATE_JOINABLE:
- * This symbol, if defined, indicates how to create pthread
- * in joinable (aka undetached) state. NOTE: not defined
- * if pthread.h already has defined PTHREAD_CREATE_JOINABLE
- * (the new version of the constant).
- * If defined, known values are PTHREAD_CREATE_UNDETACHED
- * and __UNDETACHED.
- */
-/*#define OLD_PTHREAD_CREATE_JOINABLE / **/
-
-/* HAS_PTHREAD_ATFORK:
- * This symbol, if defined, indicates that the pthread_atfork routine
- * is available to setup fork handlers.
- */
-/*#define HAS_PTHREAD_ATFORK / **/
-
-/* HAS_PTHREAD_YIELD:
- * This symbol, if defined, indicates that the pthread_yield
- * routine is available to yield the execution of the current
- * thread. sched_yield is preferable to pthread_yield.
- */
-/* SCHED_YIELD:
- * This symbol defines the way to yield the execution of
- * the current thread. Known ways are sched_yield,
- * pthread_yield, and pthread_yield with NULL.
- */
-/* HAS_SCHED_YIELD:
- * This symbol, if defined, indicates that the sched_yield
- * routine is available to yield the execution of the current
- * thread. sched_yield is preferable to pthread_yield.
- */
-/*#define HAS_PTHREAD_YIELD / **/
-#define SCHED_YIELD /**/
-/*#define HAS_SCHED_YIELD / **/
-
-/* HAS_RANDOM_R:
- * This symbol, if defined, indicates that the random_r routine
- * is available to random re-entrantly.
- */
-/* RANDOM_R_PROTO:
- * This symbol encodes the prototype of random_r.
- * It is zero if d_random_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_random_r
- * is defined.
- */
-/*#define HAS_RANDOM_R / **/
-#define RANDOM_R_PROTO 0 /**/
-
-/* HAS_READDIR64_R:
- * This symbol, if defined, indicates that the readdir64_r routine
- * is available to readdir64 re-entrantly.
- */
-/* READDIR64_R_PROTO:
- * This symbol encodes the prototype of readdir64_r.
- * It is zero if d_readdir64_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_readdir64_r
- * is defined.
- */
-/*#define HAS_READDIR64_R / **/
-#define READDIR64_R_PROTO 0 /**/
-
-/* HAS_READDIR_R:
- * This symbol, if defined, indicates that the readdir_r routine
- * is available to readdir re-entrantly.
- */
-/* READDIR_R_PROTO:
- * This symbol encodes the prototype of readdir_r.
- * It is zero if d_readdir_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_readdir_r
- * is defined.
- */
-/*#define HAS_READDIR_R / **/
-#define READDIR_R_PROTO 0 /**/
-
-/* HAS_SEM:
- * This symbol, if defined, indicates that the entire sem*(2) library is
- * supported.
- */
-/*#define HAS_SEM / **/
-
-/* HAS_SETGRENT:
- * This symbol, if defined, indicates that the setgrent routine is
- * available for initializing sequential access of the group database.
- */
-/*#define HAS_SETGRENT / **/
-
-/* HAS_SETGRENT_R:
- * This symbol, if defined, indicates that the setgrent_r routine
- * is available to setgrent re-entrantly.
- */
-/* SETGRENT_R_PROTO:
- * This symbol encodes the prototype of setgrent_r.
- * It is zero if d_setgrent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setgrent_r
- * is defined.
- */
-/*#define HAS_SETGRENT_R / **/
-#define SETGRENT_R_PROTO 0 /**/
-
-/* HAS_SETHOSTENT:
- * This symbol, if defined, indicates that the sethostent() routine is
- * available.
- */
-/*#define HAS_SETHOSTENT / **/
-
-/* HAS_SETHOSTENT_R:
- * This symbol, if defined, indicates that the sethostent_r routine
- * is available to sethostent re-entrantly.
- */
-/* SETHOSTENT_R_PROTO:
- * This symbol encodes the prototype of sethostent_r.
- * It is zero if d_sethostent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_sethostent_r
- * is defined.
- */
-/*#define HAS_SETHOSTENT_R / **/
-#define SETHOSTENT_R_PROTO 0 /**/
-
-/* HAS_SETLOCALE_R:
- * This symbol, if defined, indicates that the setlocale_r routine
- * is available to setlocale re-entrantly.
- */
-/* SETLOCALE_R_PROTO:
- * This symbol encodes the prototype of setlocale_r.
- * It is zero if d_setlocale_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setlocale_r
- * is defined.
- */
-/*#define HAS_SETLOCALE_R / **/
-#define SETLOCALE_R_PROTO 0 /**/
-
-/* HAS_SETNETENT:
- * This symbol, if defined, indicates that the setnetent() routine is
- * available.
- */
-/*#define HAS_SETNETENT / **/
-
-/* HAS_SETNETENT_R:
- * This symbol, if defined, indicates that the setnetent_r routine
- * is available to setnetent re-entrantly.
- */
-/* SETNETENT_R_PROTO:
- * This symbol encodes the prototype of setnetent_r.
- * It is zero if d_setnetent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setnetent_r
- * is defined.
- */
-/*#define HAS_SETNETENT_R / **/
-#define SETNETENT_R_PROTO 0 /**/
-
-/* HAS_SETPROTOENT:
- * This symbol, if defined, indicates that the setprotoent() routine is
- * available.
- */
-/*#define HAS_SETPROTOENT / **/
-
-/* HAS_SETPGRP:
- * This symbol, if defined, indicates that the setpgrp routine is
- * available to set the current process group.
- */
-/* USE_BSD_SETPGRP:
- * This symbol, if defined, indicates that setpgrp needs two
- * arguments whereas USG one needs none. See also HAS_SETPGID
- * for a POSIX interface.
- */
-/*#define HAS_SETPGRP / **/
-/*#define USE_BSD_SETPGRP / **/
-
-/* HAS_SETPROTOENT_R:
- * This symbol, if defined, indicates that the setprotoent_r routine
- * is available to setprotoent re-entrantly.
- */
-/* SETPROTOENT_R_PROTO:
- * This symbol encodes the prototype of setprotoent_r.
- * It is zero if d_setprotoent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setprotoent_r
- * is defined.
- */
-/*#define HAS_SETPROTOENT_R / **/
-#define SETPROTOENT_R_PROTO 0 /**/
-
-/* HAS_SETPWENT:
- * This symbol, if defined, indicates that the setpwent routine is
- * available for initializing sequential access of the passwd database.
- */
-/*#define HAS_SETPWENT / **/
-
-/* HAS_SETPWENT_R:
- * This symbol, if defined, indicates that the setpwent_r routine
- * is available to setpwent re-entrantly.
- */
-/* SETPWENT_R_PROTO:
- * This symbol encodes the prototype of setpwent_r.
- * It is zero if d_setpwent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setpwent_r
- * is defined.
- */
-/*#define HAS_SETPWENT_R / **/
-#define SETPWENT_R_PROTO 0 /**/
-
-/* HAS_SETSERVENT:
- * This symbol, if defined, indicates that the setservent() routine is
- * available.
- */
-/*#define HAS_SETSERVENT / **/
-
-/* HAS_SETSERVENT_R:
- * This symbol, if defined, indicates that the setservent_r routine
- * is available to setservent re-entrantly.
- */
-/* SETSERVENT_R_PROTO:
- * This symbol encodes the prototype of setservent_r.
- * It is zero if d_setservent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setservent_r
- * is defined.
- */
-/*#define HAS_SETSERVENT_R / **/
-#define SETSERVENT_R_PROTO 0 /**/
-
-/* HAS_SETVBUF:
- * This symbol, if defined, indicates that the setvbuf routine is
- * available to change buffering on an open stdio stream.
- * to a line-buffered mode.
- */
-#define HAS_SETVBUF /**/
-
-/* HAS_SHM:
- * This symbol, if defined, indicates that the entire shm*(2) library is
- * supported.
- */
-/*#define HAS_SHM / **/
-
-/* Shmat_t:
- * This symbol holds the return type of the shmat() system call.
- * Usually set to 'void *' or 'char *'.
- */
-/* HAS_SHMAT_PROTOTYPE:
- * This symbol, if defined, indicates that the sys/shm.h includes
- * a prototype for shmat(). Otherwise, it is up to the program to
- * guess one. Shmat_t shmat(int, Shmat_t, int) is a good guess,
- * but not always right so it should be emitted by the program only
- * when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs.
- */
-#define Shmat_t void * /**/
-/*#define HAS_SHMAT_PROTOTYPE / **/
-
-/* HAS_SOCKET:
- * This symbol, if defined, indicates that the BSD socket interface is
- * supported.
- */
-/* HAS_SOCKETPAIR:
- * This symbol, if defined, indicates that the BSD socketpair() call is
- * supported.
- */
-/* HAS_MSG_CTRUNC:
- * This symbol, if defined, indicates that the MSG_CTRUNC is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_DONTROUTE:
- * This symbol, if defined, indicates that the MSG_DONTROUTE is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_OOB:
- * This symbol, if defined, indicates that the MSG_OOB is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_PEEK:
- * This symbol, if defined, indicates that the MSG_PEEK is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_PROXY:
- * This symbol, if defined, indicates that the MSG_PROXY is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_SCM_RIGHTS:
- * This symbol, if defined, indicates that the SCM_RIGHTS is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-#define HAS_SOCKET /**/
-/*#define HAS_SOCKETPAIR / **/
-/*#define HAS_MSG_CTRUNC / **/
-/*#define HAS_MSG_DONTROUTE / **/
-/*#define HAS_MSG_OOB / **/
-/*#define HAS_MSG_PEEK / **/
-/*#define HAS_MSG_PROXY / **/
-/*#define HAS_SCM_RIGHTS / **/
-
-/* HAS_SRAND48_R:
- * This symbol, if defined, indicates that the srand48_r routine
- * is available to srand48 re-entrantly.
- */
-/* SRAND48_R_PROTO:
- * This symbol encodes the prototype of srand48_r.
- * It is zero if d_srand48_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_srand48_r
- * is defined.
- */
-/*#define HAS_SRAND48_R / **/
-#define SRAND48_R_PROTO 0 /**/
-
-/* HAS_SRANDOM_R:
- * This symbol, if defined, indicates that the srandom_r routine
- * is available to srandom re-entrantly.
- */
-/* SRANDOM_R_PROTO:
- * This symbol encodes the prototype of srandom_r.
- * It is zero if d_srandom_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_srandom_r
- * is defined.
- */
-/*#define HAS_SRANDOM_R / **/
-#define SRANDOM_R_PROTO 0 /**/
-
-/* USE_STAT_BLOCKS:
- * This symbol is defined if this system has a stat structure declaring
- * st_blksize and st_blocks.
- */
-#ifndef USE_STAT_BLOCKS
-/*#define USE_STAT_BLOCKS / **/
-#endif
-
-/* USE_STRUCT_COPY:
- * This symbol, if defined, indicates that this C compiler knows how
- * to copy structures. If undefined, you'll need to use a block copy
- * routine of some sort instead.
- */
-#define USE_STRUCT_COPY /**/
-
-/* HAS_STRERROR:
- * This symbol, if defined, indicates that the strerror routine is
- * available to translate error numbers to strings. See the writeup
- * of Strerror() in this file before you try to define your own.
- */
-/* HAS_SYS_ERRLIST:
- * This symbol, if defined, indicates that the sys_errlist array is
- * available to translate error numbers to strings. The extern int
- * sys_nerr gives the size of that table.
- */
-/* Strerror:
- * This preprocessor symbol is defined as a macro if strerror() is
- * not available to translate error numbers to strings but sys_errlist[]
- * array is there.
- */
-#define HAS_STRERROR /**/
-#define HAS_SYS_ERRLIST /**/
-#define Strerror(e) strerror(e)
-
-/* HAS_STRERROR_R:
- * This symbol, if defined, indicates that the strerror_r routine
- * is available to strerror re-entrantly.
- */
-/* STRERROR_R_PROTO:
- * This symbol encodes the prototype of strerror_r.
- * It is zero if d_strerror_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_strerror_r
- * is defined.
- */
-/*#define HAS_STRERROR_R / **/
-#define STRERROR_R_PROTO 0 /**/
-
-/* HAS_STRTOUL:
- * This symbol, if defined, indicates that the strtoul routine is
- * available to provide conversion of strings to unsigned long.
- */
-#define HAS_STRTOUL /**/
-
-/* HAS_TIME:
- * This symbol, if defined, indicates that the time() routine exists.
- */
-/* Time_t:
- * This symbol holds the type returned by time(). It can be long,
- * or time_t on BSD sites (in which case <sys/types.h> should be
- * included).
- */
-#define HAS_TIME /**/
-#define Time_t time_t /* Time type */
-
-/* HAS_TIMES:
- * This symbol, if defined, indicates that the times() routine exists.
- * Note that this became obsolete on some systems (SUNOS), which now
- * use getrusage(). It may be necessary to include <sys/times.h>.
- */
-#define HAS_TIMES /**/
-
-/* HAS_TMPNAM_R:
- * This symbol, if defined, indicates that the tmpnam_r routine
- * is available to tmpnam re-entrantly.
- */
-/* TMPNAM_R_PROTO:
- * This symbol encodes the prototype of tmpnam_r.
- * It is zero if d_tmpnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_tmpnam_r
- * is defined.
- */
-/*#define HAS_TMPNAM_R / **/
-#define TMPNAM_R_PROTO 0 /**/
-
-/* HAS_TTYNAME_R:
- * This symbol, if defined, indicates that the ttyname_r routine
- * is available to ttyname re-entrantly.
- */
-/* TTYNAME_R_PROTO:
- * This symbol encodes the prototype of ttyname_r.
- * It is zero if d_ttyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ttyname_r
- * is defined.
- */
-/*#define HAS_TTYNAME_R / **/
-#define TTYNAME_R_PROTO 0 /**/
-
-/* HAS_UNION_SEMUN:
- * This symbol, if defined, indicates that the union semun is
- * defined by including <sys/sem.h>. If not, the user code
- * probably needs to define it as:
- * union semun {
- * int val;
- * struct semid_ds *buf;
- * unsigned short *array;
- * }
- */
-/* USE_SEMCTL_SEMUN:
- * This symbol, if defined, indicates that union semun is
- * used for semctl IPC_STAT.
- */
-/* USE_SEMCTL_SEMID_DS:
- * This symbol, if defined, indicates that struct semid_ds * is
- * used for semctl IPC_STAT.
- */
-#define HAS_UNION_SEMUN /**/
-/*#define USE_SEMCTL_SEMUN / **/
-/*#define USE_SEMCTL_SEMID_DS / **/
-
-/* HAS_VFORK:
- * This symbol, if defined, indicates that vfork() exists.
- */
-/*#define HAS_VFORK / **/
-
-/* HAS_PSEUDOFORK:
- * This symbol, if defined, indicates that an emulation of the
- * fork routine is available.
- */
-/*#define HAS_PSEUDOFORK / **/
-
-/* Signal_t:
- * This symbol's value is either "void" or "int", corresponding to the
- * appropriate return type of a signal handler. Thus, you can declare
- * a signal handler using "Signal_t (*handler)()", and define the
- * handler using "Signal_t handler(sig)".
- */
-#define Signal_t void /* Signal handler's return type */
-
-/* HASVOLATILE:
- * This symbol, if defined, indicates that this C compiler knows about
- * the volatile declaration.
- */
-#define HASVOLATILE /**/
-#ifndef HASVOLATILE
-#define volatile
-#endif
-
-/* Fpos_t:
- * This symbol holds the type used to declare file positions in libc.
- * It can be fpos_t, long, uint, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Fpos_t fpos_t /* File position type */
-
-/* Gid_t_f:
- * This symbol defines the format string used for printing a Gid_t.
- */
-#define Gid_t_f "ld" /**/
-
-/* Gid_t_sign:
- * This symbol holds the signedess of a Gid_t.
- * 1 for unsigned, -1 for signed.
- */
-#define Gid_t_sign -1 /* GID sign */
-
-/* Gid_t_size:
- * This symbol holds the size of a Gid_t in bytes.
- */
-#define Gid_t_size 4 /* GID size */
-
-/* Gid_t:
- * This symbol holds the return type of getgid() and the type of
- * argument to setrgid() and related functions. Typically,
- * it is the type of group ids in the kernel. It can be int, ushort,
- * gid_t, etc... It may be necessary to include <sys/types.h> to get
- * any typedef'ed information.
- */
-#define Gid_t gid_t /* Type for getgid(), etc... */
-
-/* I_DIRENT:
- * This symbol, if defined, indicates to the C program that it should
- * include <dirent.h>. Using this symbol also triggers the definition
- * of the Direntry_t define which ends up being 'struct dirent' or
- * 'struct direct' depending on the availability of <dirent.h>.
- */
-/* DIRNAMLEN:
- * This symbol, if defined, indicates to the C program that the length
- * of directory entry names is provided by a d_namlen field. Otherwise
- * you need to do strlen() on the d_name field.
- */
-/* Direntry_t:
- * This symbol is set to 'struct direct' or 'struct dirent' depending on
- * whether dirent is available or not. You should use this pseudo type to
- * portably declare your directory entries.
- */
-#define I_DIRENT /**/
-#define DIRNAMLEN /**/
-#define Direntry_t struct direct
-
-/* I_GRP:
- * This symbol, if defined, indicates to the C program that it should
- * include <grp.h>.
- */
-/* GRPASSWD:
- * This symbol, if defined, indicates to the C program that struct group
- * in <grp.h> contains gr_passwd.
- */
-/*#define I_GRP / **/
-/*#define GRPASSWD / **/
-
-/* I_MACH_CTHREADS:
- * This symbol, if defined, indicates to the C program that it should
- * include <mach/cthreads.h>.
- */
-/*#define I_MACH_CTHREADS / **/
-
-/* I_NDBM:
- * This symbol, if defined, indicates that <ndbm.h> exists and should
- * be included.
- */
-/* I_GDBMNDBM:
- * This symbol, if defined, indicates that <gdbm/ndbm.h> exists and should
- * be included. This was the location of the ndbm.h compatibility file
- * in RedHat 7.1.
- */
-/* I_GDBM_NDBM:
- * This symbol, if defined, indicates that <gdbm-ndbm.h> exists and should
- * be included. This is the location of the ndbm.h compatibility file
- * in Debian 4.0.
- */
-/* NDBM_H_USES_PROTOTYPES:
- * This symbol, if defined, indicates that <ndbm.h> uses real ANSI C
- * prototypes instead of K&R style function declarations without any
- * parameter information. While ANSI C prototypes are supported in C++,
- * K&R style function declarations will yield errors.
- */
-/* GDBMNDBM_H_USES_PROTOTYPES:
- * This symbol, if defined, indicates that <gdbm/ndbm.h> uses real ANSI C
- * prototypes instead of K&R style function declarations without any
- * parameter information. While ANSI C prototypes are supported in C++,
- * K&R style function declarations will yield errors.
- */
-/* GDBM_NDBM_H_USES_PROTOTYPES:
- * This symbol, if defined, indicates that <gdbm-ndbm.h> uses real ANSI C
- * prototypes instead of K&R style function declarations without any
- * parameter information. While ANSI C prototypes are supported in C++,
- * K&R style function declarations will yield errors.
- */
-/*#define I_NDBM / **/
-/*#define I_GDBMNDBM / **/
-/*#define I_GDBM_NDBM / **/
-/*#define NDBM_H_USES_PROTOTYPES / **/
-/*#define GDBMNDBM_H_USES_PROTOTYPES / **/
-/*#define GDBM_NDBM_H_USES_PROTOTYPES / **/
-
-/* I_NETDB:
- * This symbol, if defined, indicates that <netdb.h> exists and
- * should be included.
- */
-/*#define I_NETDB / **/
-
-/* I_NET_ERRNO:
- * This symbol, if defined, indicates that <net/errno.h> exists and
- * should be included.
- */
-/*#define I_NET_ERRNO / **/
-
-/* I_PTHREAD:
- * This symbol, if defined, indicates to the C program that it should
- * include <pthread.h>.
- */
-/*#define I_PTHREAD / **/
-
-/* I_PWD:
- * This symbol, if defined, indicates to the C program that it should
- * include <pwd.h>.
- */
-/* PWQUOTA:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_quota.
- */
-/* PWAGE:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_age.
- */
-/* PWCHANGE:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_change.
- */
-/* PWCLASS:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_class.
- */
-/* PWEXPIRE:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_expire.
- */
-/* PWCOMMENT:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_comment.
- */
-/* PWGECOS:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_gecos.
- */
-/* PWPASSWD:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_passwd.
- */
-/*#define I_PWD / **/
-/*#define PWQUOTA / **/
-/*#define PWAGE / **/
-/*#define PWCHANGE / **/
-/*#define PWCLASS / **/
-/*#define PWEXPIRE / **/
-/*#define PWCOMMENT / **/
-/*#define PWGECOS / **/
-/*#define PWPASSWD / **/
-
-/* I_SYS_ACCESS:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/access.h>.
- */
-/*#define I_SYS_ACCESS / **/
-
-/* I_SYS_SECURITY:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/security.h>.
- */
-/*#define I_SYS_SECURITY / **/
-
-/* I_SYSUIO:
- * This symbol, if defined, indicates that <sys/uio.h> exists and
- * should be included.
- */
-/*#define I_SYSUIO / **/
-
-/* I_STDARG:
- * This symbol, if defined, indicates that <stdarg.h> exists and should
- * be included.
- */
-/* I_VARARGS:
- * This symbol, if defined, indicates to the C program that it should
- * include <varargs.h>.
- */
-#define I_STDARG /**/
-/*#define I_VARARGS / **/
-
-/* PERL_INC_VERSION_LIST:
- * This variable specifies the list of subdirectories in over
- * which perl.c:incpush() and lib/lib.pm will automatically
- * search when adding directories to @INC, in a format suitable
- * for a C initialization string. See the inc_version_list entry
- * in Porting/Glossary for more details.
- */
-/*#define PERL_INC_VERSION_LIST 0 / **/
-
-/* INSTALL_USR_BIN_PERL:
- * This symbol, if defined, indicates that Perl is to be installed
- * also as /usr/bin/perl.
- */
-/*#define INSTALL_USR_BIN_PERL / **/
-
-/* Off_t:
- * This symbol holds the type used to declare offsets in the kernel.
- * It can be int, long, off_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-/* LSEEKSIZE:
- * This symbol holds the number of bytes used by the Off_t.
- */
-/* Off_t_size:
- * This symbol holds the number of bytes used by the Off_t.
- */
-#ifdef _MSC_VER
-# define Off_t __int64 /* <offset> type */
-#else
-# define Off_t long long /* <offset> type */
-#endif
-#define LSEEKSIZE 8 /* <offset> size */
-#define Off_t_size 8 /* <offset> size */
-
-/* Free_t:
- * This variable contains the return type of free(). It is usually
- * void, but occasionally int.
- */
-/* Malloc_t:
- * This symbol is the type of pointer returned by malloc and realloc.
- */
-#define Malloc_t void * /**/
-#define Free_t void /**/
-
-/* PERL_MALLOC_WRAP:
- * This symbol, if defined, indicates that we'd like malloc wrap checks.
- */
-#define PERL_MALLOC_WRAP /**/
-
-/* MYMALLOC:
- * This symbol, if defined, indicates that we're using our own malloc.
- */
-/*#define MYMALLOC / **/
-
-/* Mode_t:
- * This symbol holds the type used to declare file modes
- * for systems calls. It is usually mode_t, but may be
- * int or unsigned short. It may be necessary to include <sys/types.h>
- * to get any typedef'ed information.
- */
-#define Mode_t mode_t /* file mode parameter for system calls */
-
-/* Netdb_host_t:
- * This symbol holds the type used for the 1st argument
- * to gethostbyaddr().
- */
-/* Netdb_hlen_t:
- * This symbol holds the type used for the 2nd argument
- * to gethostbyaddr().
- */
-/* Netdb_name_t:
- * This symbol holds the type used for the argument to
- * gethostbyname().
- */
-/* Netdb_net_t:
- * This symbol holds the type used for the 1st argument to
- * getnetbyaddr().
- */
-#define Netdb_host_t char * /**/
-#define Netdb_hlen_t int /**/
-#define Netdb_name_t char * /**/
-#define Netdb_net_t long /**/
-
-/* PERL_OTHERLIBDIRS:
- * This variable contains a colon-separated set of paths for the perl
- * binary to search for additional library files or modules.
- * These directories will be tacked to the end of @INC.
- * Perl will automatically search below each path for version-
- * and architecture-specific directories. See PERL_INC_VERSION_LIST
- * for more details.
- */
-/*#define PERL_OTHERLIBDIRS "" / **/
-
-/* Pid_t:
- * This symbol holds the type used to declare process ids in the kernel.
- * It can be int, uint, pid_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Pid_t int /* PID type */
-
-/* PRIVLIB:
- * This symbol contains the name of the private library for this package.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world. The program
- * should be prepared to do ~ expansion.
- */
-/* PRIVLIB_EXP:
- * This symbol contains the ~name expanded version of PRIVLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define PRIVLIB "c:\\perl\\lib" /**/
-#define PRIVLIB_EXP (win32_get_privlib(PERL_VERSION_STRING)) /**/
-
-/* CAN_PROTOTYPE:
- * If defined, this macro indicates that the C compiler can handle
- * function prototypes.
- */
-/* _:
- * This macro is used to declare function parameters for folks who want
- * to make declarations with prototypes using a different style than
- * the above macros. Use double parentheses. For example:
- *
- * int main _((int argc, char *argv[]));
- */
-#define CAN_PROTOTYPE /**/
-#ifdef CAN_PROTOTYPE
-#define _(args) args
-#else
-#define _(args) ()
-#endif
-
-/* Select_fd_set_t:
- * This symbol holds the type used for the 2nd, 3rd, and 4th
- * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET
- * is defined, and 'int *' otherwise. This is only useful if you
- * have select(), of course.
- */
-#define Select_fd_set_t Perl_fd_set * /**/
-
-/* SH_PATH:
- * This symbol contains the full pathname to the shell used on this
- * on this system to execute Bourne shell scripts. Usually, this will be
- * /bin/sh, though it's possible that some systems will have /bin/ksh,
- * /bin/pdksh, /bin/ash, /bin/bash, or even something such as
- * D:/bin/sh.exe.
- */
-#define SH_PATH "cmd /x /c" /**/
-
-/* SIG_NAME:
- * This symbol contains a list of signal names in order of
- * signal number. This is intended
- * to be used as a static array initialization, like this:
- * char *sig_name[] = { SIG_NAME };
- * The signals in the list are separated with commas, and each signal
- * is surrounded by double quotes. There is no leading SIG in the signal
- * name, i.e. SIGQUIT is known as "QUIT".
- * Gaps in the signal numbers (up to NSIG) are filled in with NUMnn,
- * etc., where nn is the actual signal number (e.g. NUM37).
- * The signal number for sig_name[i] is stored in sig_num[i].
- * The last element is 0 to terminate the list with a NULL. This
- * corresponds to the 0 at the end of the sig_name_init list.
- * Note that this variable is initialized from the sig_name_init,
- * not from sig_name (which is unused).
- */
-/* SIG_NUM:
- * This symbol contains a list of signal numbers, in the same order as the
- * SIG_NAME list. It is suitable for static array initialization, as in:
- * int sig_num[] = { SIG_NUM };
- * The signals in the list are separated with commas, and the indices
- * within that list and the SIG_NAME list match, so it's easy to compute
- * the signal name from a number or vice versa at the price of a small
- * dynamic linear lookup.
- * Duplicates are allowed, but are moved to the end of the list.
- * The signal number corresponding to sig_name[i] is sig_number[i].
- * if (i < NSIG) then sig_number[i] == i.
- * The last element is 0, corresponding to the 0 at the end of
- * the sig_name_init list.
- * Note that this variable is initialized from the sig_num_init,
- * not from sig_num (which is unused).
- */
-/* SIG_SIZE:
- * This variable contains the number of elements of the SIG_NAME
- * and SIG_NUM arrays, excluding the final NULL entry.
- */
-#define SIG_NAME "ZERO", "HUP", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0 /**/
-#define SIG_NUM 0, 1, 2, 21, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 20, 0 /**/
-#define SIG_SIZE 27 /**/
-
-/* SITEARCH:
- * This symbol contains the name of the private library for this package.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world. The program
- * should be prepared to do ~ expansion.
- * The standard distribution will put nothing in this directory.
- * After perl has been installed, users may install their own local
- * architecture-dependent modules in this directory with
- * MakeMaker Makefile.PL
- * or equivalent. See INSTALL for details.
- */
-/* SITEARCH_EXP:
- * This symbol contains the ~name expanded version of SITEARCH, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define SITEARCH "c:\\perl\\site\\lib" /**/
-/*#define SITEARCH_EXP "" / **/
-
-/* SITELIB:
- * This symbol contains the name of the private library for this package.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world. The program
- * should be prepared to do ~ expansion.
- * The standard distribution will put nothing in this directory.
- * After perl has been installed, users may install their own local
- * architecture-independent modules in this directory with
- * MakeMaker Makefile.PL
- * or equivalent. See INSTALL for details.
- */
-/* SITELIB_EXP:
- * This symbol contains the ~name expanded version of SITELIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/* SITELIB_STEM:
- * This define is SITELIB_EXP with any trailing version-specific component
- * removed. The elements in inc_version_list (inc_version_list.U) can
- * be tacked onto this variable to generate a list of directories to search.
- */
-#define SITELIB "c:\\perl\\site\\lib" /**/
-#define SITELIB_EXP (win32_get_sitelib(PERL_VERSION_STRING)) /**/
-#define SITELIB_STEM "" /**/
-
-/* Size_t_size:
- * This symbol holds the size of a Size_t in bytes.
- */
-#define Size_t_size 8 /**/
-
-/* Size_t:
- * This symbol holds the type used to declare length parameters
- * for string functions. It is usually size_t, but may be
- * unsigned long, int, etc. It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Size_t size_t /* length paramater for string functions */
-
-/* Sock_size_t:
- * This symbol holds the type used for the size argument of
- * various socket calls (just the base type, not the pointer-to).
- */
-#define Sock_size_t int /**/
-
-/* STDCHAR:
- * This symbol is defined to be the type of char used in stdio.h.
- * It has the values "unsigned char" or "char".
- */
-#define STDCHAR char /**/
-
-/* Uid_t_f:
- * This symbol defines the format string used for printing a Uid_t.
- */
-#define Uid_t_f "ld" /**/
-
-/* Uid_t_sign:
- * This symbol holds the signedess of a Uid_t.
- * 1 for unsigned, -1 for signed.
- */
-#define Uid_t_sign -1 /* UID sign */
-
-/* Uid_t_size:
- * This symbol holds the size of a Uid_t in bytes.
- */
-#define Uid_t_size 4 /* UID size */
-
-/* Uid_t:
- * This symbol holds the type used to declare user ids in the kernel.
- * It can be int, ushort, uid_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Uid_t uid_t /* UID type */
-
-/* USE_ITHREADS:
- * This symbol, if defined, indicates that Perl should be built to
- * use the interpreter-based threading implementation.
- */
-/* USE_5005THREADS:
- * This symbol, if defined, indicates that Perl should be built to
- * use the 5.005-based threading implementation.
- * Only valid up to 5.8.x.
- */
-/* OLD_PTHREADS_API:
- * This symbol, if defined, indicates that Perl should
- * be built to use the old draft POSIX threads API.
- */
-/* USE_REENTRANT_API:
- * This symbol, if defined, indicates that Perl should
- * try to use the various _r versions of library functions.
- * This is extremely experimental.
- */
-/*#define USE_5005THREADS / **/
-/*#define USE_ITHREADS / **/
-#if defined(USE_5005THREADS) && !defined(USE_ITHREADS)
-#define USE_THREADS /* until src is revised*/
-#endif
-/*#define OLD_PTHREADS_API / **/
-/*#define USE_REENTRANT_API / **/
-
-/* PERL_VENDORARCH:
- * If defined, this symbol contains the name of a private library.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world.
- * It may have a ~ on the front.
- * The standard distribution will put nothing in this directory.
- * Vendors who distribute perl may wish to place their own
- * architecture-dependent modules and extensions in this directory with
- * MakeMaker Makefile.PL INSTALLDIRS=vendor
- * or equivalent. See INSTALL for details.
- */
-/* PERL_VENDORARCH_EXP:
- * This symbol contains the ~name expanded version of PERL_VENDORARCH, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/*#define PERL_VENDORARCH "" / **/
-/*#define PERL_VENDORARCH_EXP "" / **/
-
-/* PERL_VENDORLIB_EXP:
- * This symbol contains the ~name expanded version of VENDORLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/* PERL_VENDORLIB_STEM:
- * This define is PERL_VENDORLIB_EXP with any trailing version-specific component
- * removed. The elements in inc_version_list (inc_version_list.U) can
- * be tacked onto this variable to generate a list of directories to search.
- */
-/*#define PERL_VENDORLIB_EXP "" / **/
-/*#define PERL_VENDORLIB_STEM "" / **/
-
-/* VOIDFLAGS:
- * This symbol indicates how much support of the void type is given by this
- * compiler. What various bits mean:
- *
- * 1 = supports declaration of void
- * 2 = supports arrays of pointers to functions returning void
- * 4 = supports comparisons between pointers to void functions and
- * addresses of void functions
- * 8 = suports declaration of generic void pointers
- *
- * The package designer should define VOIDUSED to indicate the requirements
- * of the package. This can be done either by #defining VOIDUSED before
- * including config.h, or by defining defvoidused in Myinit.U. If the
- * latter approach is taken, only those flags will be tested. If the
- * level of void support necessary is not present, defines void to int.
- */
-#ifndef VOIDUSED
-#define VOIDUSED 15
-#endif
-#define VOIDFLAGS 15
-#if (VOIDFLAGS & VOIDUSED) != VOIDUSED
-#define void int /* is void to be avoided? */
-#define M_VOID /* Xenix strikes again */
-#endif
-
-/* USE_CROSS_COMPILE:
- * This symbol, if defined, indicates that Perl is being cross-compiled.
- */
-/* PERL_TARGETARCH:
- * This symbol, if defined, indicates the target architecture
- * Perl has been cross-compiled to. Undefined if not a cross-compile.
- */
-#ifndef USE_CROSS_COMPILE
-/*#define USE_CROSS_COMPILE / **/
-#define PERL_TARGETARCH "" /**/
-#endif
-
-/* MEM_ALIGNBYTES:
- * This symbol contains the number of bytes required to align a
- * double, or a long double when applicable. Usual values are 2,
- * 4 and 8. The default is eight, for safety.
- */
-#if defined(USE_CROSS_COMPILE) || defined(MULTIARCH)
-# define MEM_ALIGNBYTES 8
-#else
-#define MEM_ALIGNBYTES 8
-#endif
-
-/* BYTEORDER:
- * This symbol holds the hexadecimal constant defined in byteorder,
- * in a UV, i.e. 0x1234 or 0x4321 or 0x12345678, etc...
- * If the compiler supports cross-compiling or multiple-architecture
- * binaries (eg. on NeXT systems), use compiler-defined macros to
- * determine the byte order.
- * On NeXT 3.2 (and greater), you can build "Fat" Multiple Architecture
- * Binaries (MAB) on either big endian or little endian machines.
- * The endian-ness is available at compile-time. This only matters
- * for perl, where the config.h can be generated and installed on
- * one system, and used by a different architecture to build an
- * extension. Older versions of NeXT that might not have
- * defined either *_ENDIAN__ were all on Motorola 680x0 series,
- * so the default case (for NeXT) is big endian to catch them.
- * This might matter for NeXT 3.0.
- */
-#if defined(USE_CROSS_COMPILE) || defined(MULTIARCH)
-# ifdef __LITTLE_ENDIAN__
-# if LONGSIZE == 4
-# define BYTEORDER 0x1234
-# else
-# if LONGSIZE == 8
-# define BYTEORDER 0x12345678
-# endif
-# endif
-# else
-# ifdef __BIG_ENDIAN__
-# if LONGSIZE == 4
-# define BYTEORDER 0x4321
-# else
-# if LONGSIZE == 8
-# define BYTEORDER 0x87654321
-# endif
-# endif
-# endif
-# endif
-# if !defined(BYTEORDER) && (defined(NeXT) || defined(__NeXT__))
-# define BYTEORDER 0x4321
-# endif
-#else
-#define BYTEORDER 0x1234 /* large digits for MSB */
-#endif /* NeXT */
-
-/* CHARBITS:
- * This symbol contains the size of a char, so that the C preprocessor
- * can make decisions based on it.
- */
-#define CHARBITS 8 /**/
-
-/* CASTI32:
- * This symbol is defined if the C compiler can cast negative
- * or large floating point numbers to 32-bit ints.
- */
-#ifndef _MSC_VER
-# define CASTI32 /**/
-#endif
-
-/* CASTNEGFLOAT:
- * This symbol is defined if the C compiler can cast negative
- * numbers to unsigned longs, ints and shorts.
- */
-/* CASTFLAGS:
- * This symbol contains flags that say what difficulties the compiler
- * has casting odd floating values to unsigned long:
- * 0 = ok
- * 1 = couldn't cast < 0
- * 2 = couldn't cast >= 0x80000000
- * 4 = couldn't cast in argument expression list
- */
-#define CASTNEGFLOAT /**/
-#define CASTFLAGS 0 /**/
-
-/* VOID_CLOSEDIR:
- * This symbol, if defined, indicates that the closedir() routine
- * does not return a value.
- */
-/*#define VOID_CLOSEDIR / **/
-
-/* HAS_FD_SET:
- * This symbol, when defined, indicates presence of the fd_set typedef
- * in <sys/types.h>
- */
-#define HAS_FD_SET /**/
-
-/* Gconvert:
- * This preprocessor macro is defined to convert a floating point
- * number to a string without a trailing decimal point. This
- * emulates the behavior of sprintf("%g"), but is sometimes much more
- * efficient. If gconvert() is not available, but gcvt() drops the
- * trailing decimal point, then gcvt() is used. If all else fails,
- * a macro using sprintf("%g") is used. Arguments for the Gconvert
- * macro are: value, number of digits, whether trailing zeros should
- * be retained, and the output buffer.
- * The usual values are:
- * d_Gconvert='gconvert((x),(n),(t),(b))'
- * d_Gconvert='gcvt((x),(n),(b))'
- * d_Gconvert='sprintf((b),"%.*g",(n),(x))'
- * The last two assume trailing zeros should not be kept.
- */
-#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
-
-/* HAS_GETPAGESIZE:
- * This symbol, if defined, indicates that the getpagesize system call
- * is available to get system page size, which is the granularity of
- * many memory management calls.
- */
-/*#define HAS_GETPAGESIZE / **/
-
-/* HAS_GNULIBC:
- * This symbol, if defined, indicates to the C program that
- * the GNU C library is being used. A better check is to use
- * the __GLIBC__ and __GLIBC_MINOR__ symbols supplied with glibc.
- */
-/*#define HAS_GNULIBC / **/
-#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)
-# define _GNU_SOURCE
-#endif
-
-/* HAS_ISASCII:
- * This manifest constant lets the C program know that isascii
- * is available.
- */
-#define HAS_ISASCII /**/
-
-/* HAS_LCHOWN:
- * This symbol, if defined, indicates that the lchown routine is
- * available to operate on a symbolic link (instead of following the
- * link).
- */
-/*#define HAS_LCHOWN / **/
-
-/* HAS_OPEN3:
- * This manifest constant lets the C program know that the three
- * argument form of open(2) is available.
- */
-/*#define HAS_OPEN3 / **/
-
-/* HAS_SAFE_BCOPY:
- * This symbol, if defined, indicates that the bcopy routine is available
- * to copy potentially overlapping memory blocks. Normally, you should
- * probably use memmove() or memcpy(). If neither is defined, roll your
- * own version.
- */
-/*#define HAS_SAFE_BCOPY / **/
-
-/* HAS_SAFE_MEMCPY:
- * This symbol, if defined, indicates that the memcpy routine is available
- * to copy potentially overlapping memory blocks. If you need to
- * copy overlapping memory blocks, you should check HAS_MEMMOVE and
- * use memmove() instead, if available.
- */
-/*#define HAS_SAFE_MEMCPY / **/
-
-/* HAS_SANE_MEMCMP:
- * This symbol, if defined, indicates that the memcmp routine is available
- * and can be used to compare relative magnitudes of chars with their high
- * bits set. If it is not defined, roll your own version.
- */
-#define HAS_SANE_MEMCMP /**/
-
-/* HAS_SIGACTION:
- * This symbol, if defined, indicates that Vr4's sigaction() routine
- * is available.
- */
-/*#define HAS_SIGACTION / **/
-
-/* HAS_SIGSETJMP:
- * This variable indicates to the C program that the sigsetjmp()
- * routine is available to save the calling process's registers
- * and stack environment for later use by siglongjmp(), and
- * to optionally save the process's signal mask. See
- * Sigjmp_buf, Sigsetjmp, and Siglongjmp.
- */
-/* Sigjmp_buf:
- * This is the buffer type to be used with Sigsetjmp and Siglongjmp.
- */
-/* Sigsetjmp:
- * This macro is used in the same way as sigsetjmp(), but will invoke
- * traditional setjmp() if sigsetjmp isn't available.
- * See HAS_SIGSETJMP.
- */
-/* Siglongjmp:
- * This macro is used in the same way as siglongjmp(), but will invoke
- * traditional longjmp() if siglongjmp isn't available.
- * See HAS_SIGSETJMP.
- */
-/*#define HAS_SIGSETJMP / **/
-#ifdef HAS_SIGSETJMP
-#define Sigjmp_buf sigjmp_buf
-#define Sigsetjmp(buf,save_mask) sigsetjmp((buf),(save_mask))
-#define Siglongjmp(buf,retval) siglongjmp((buf),(retval))
-#else
-#define Sigjmp_buf jmp_buf
-#define Sigsetjmp(buf,save_mask) setjmp((buf))
-#define Siglongjmp(buf,retval) longjmp((buf),(retval))
-#endif
-
-/* HAS_STATIC_INLINE:
- * This symbol, if defined, indicates that the C compiler supports
- * C99-style static inline. That is, the function can't be called
- * from another translation unit.
- */
-/* PERL_STATIC_INLINE:
- * This symbol gives the best-guess incantation to use for static
- * inline functions. If HAS_STATIC_INLINE is defined, this will
- * give C99-style inline. If HAS_STATIC_INLINE is not defined,
- * this will give a plain 'static'. It will always be defined
- * to something that gives static linkage.
- * Possibilities include
- * static inline (c99)
- * static __inline__ (gcc -ansi)
- * static __inline (MSVC)
- * static _inline (older MSVC)
- * static (c89 compilers)
- */
-#ifdef _MSC_VER
-# define HAS_STATIC_INLINE /**/
-# define PERL_STATIC_INLINE static __inline /**/
-#else /* gcc presumably */
-# define HAS_STATIC_INLINE /**/
-# define PERL_STATIC_INLINE static __inline__ /**/
-#endif
-
-/* USE_STDIO_PTR:
- * This symbol is defined if the _ptr and _cnt fields (or similar)
- * of the stdio FILE structure can be used to access the stdio buffer
- * for a file handle. If this is defined, then the FILE_ptr(fp)
- * and FILE_cnt(fp) macros will also be defined and should be used
- * to access these fields.
- */
-/* FILE_ptr:
- * This macro is used to access the _ptr field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_PTR is defined.
- */
-/* STDIO_PTR_LVALUE:
- * This symbol is defined if the FILE_ptr macro can be used as an
- * lvalue.
- */
-/* FILE_cnt:
- * This macro is used to access the _cnt field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_PTR is defined.
- */
-/* STDIO_CNT_LVALUE:
- * This symbol is defined if the FILE_cnt macro can be used as an
- * lvalue.
- */
-/* STDIO_PTR_LVAL_SETS_CNT:
- * This symbol is defined if using the FILE_ptr macro as an lvalue
- * to increase the pointer by n has the side effect of decreasing the
- * value of File_cnt(fp) by n.
- */
-/* STDIO_PTR_LVAL_NOCHANGE_CNT:
- * This symbol is defined if using the FILE_ptr macro as an lvalue
- * to increase the pointer by n leaves File_cnt(fp) unchanged.
- */
-#define USE_STDIO_PTR /**/
-#ifdef USE_STDIO_PTR
-#define FILE_ptr(fp) ((fp)->_ptr)
-#define STDIO_PTR_LVALUE /**/
-#define FILE_cnt(fp) ((fp)->_cnt)
-#define STDIO_CNT_LVALUE /**/
-/*#define STDIO_PTR_LVAL_SETS_CNT / **/
-#define STDIO_PTR_LVAL_NOCHANGE_CNT /**/
-#endif
-
-/* USE_STDIO_BASE:
- * This symbol is defined if the _base field (or similar) of the
- * stdio FILE structure can be used to access the stdio buffer for
- * a file handle. If this is defined, then the FILE_base(fp) macro
- * will also be defined and should be used to access this field.
- * Also, the FILE_bufsiz(fp) macro will be defined and should be used
- * to determine the number of bytes in the buffer. USE_STDIO_BASE
- * will never be defined unless USE_STDIO_PTR is.
- */
-/* FILE_base:
- * This macro is used to access the _base field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_BASE is defined.
- */
-/* FILE_bufsiz:
- * This macro is used to determine the number of bytes in the I/O
- * buffer pointed to by _base field (or equivalent) of the FILE
- * structure pointed to its argument. This macro will always be defined
- * if USE_STDIO_BASE is defined.
- */
-#define USE_STDIO_BASE /**/
-#ifdef USE_STDIO_BASE
-#define FILE_base(fp) ((fp)->_base)
-#define FILE_bufsiz(fp) ((fp)->_cnt + (fp)->_ptr - (fp)->_base)
-#endif
-
-/* HAS_VPRINTF:
- * This symbol, if defined, indicates that the vprintf routine is available
- * to printf with a pointer to an argument list. If unavailable, you
- * may need to write your own, probably in terms of _doprnt().
- */
-/* USE_CHAR_VSPRINTF:
- * This symbol is defined if this system has vsprintf() returning type
- * (char*). The trend seems to be to declare it as "int vsprintf()". It
- * is up to the package author to declare vsprintf correctly based on the
- * symbol.
- */
-#define HAS_VPRINTF /**/
-/*#define USE_CHAR_VSPRINTF / **/
-
-/* DOUBLESIZE:
- * This symbol contains the size of a double, so that the C preprocessor
- * can make decisions based on it.
- */
-#define DOUBLESIZE 8 /**/
-
-/* I_TIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <time.h>.
- */
-/* I_SYS_TIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/time.h>.
- */
-/* I_SYS_TIME_KERNEL:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/time.h> with KERNEL defined.
- */
-/* HAS_TM_TM_ZONE:
- * This symbol, if defined, indicates to the C program that
- * the struct tm has a tm_zone field.
- */
-/* HAS_TM_TM_GMTOFF:
- * This symbol, if defined, indicates to the C program that
- * the struct tm has a tm_gmtoff field.
- */
-#define I_TIME /**/
-/*#define I_SYS_TIME / **/
-/*#define I_SYS_TIME_KERNEL / **/
-/*#define HAS_TM_TM_ZONE / **/
-/*#define HAS_TM_TM_GMTOFF / **/
-
-/* VAL_O_NONBLOCK:
- * This symbol is to be used during open() or fcntl(F_SETFL) to turn on
- * non-blocking I/O for the file descriptor. Note that there is no way
- * back, i.e. you cannot turn it blocking again this way. If you wish to
- * alternatively switch between blocking and non-blocking, use the
- * ioctl(FIOSNBIO) call instead, but that is not supported by all devices.
- */
-/* VAL_EAGAIN:
- * This symbol holds the errno error code set by read() when no data was
- * present on the non-blocking file descriptor.
- */
-/* RD_NODATA:
- * This symbol holds the return code from read() when no data is present
- * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is
- * not defined, then you can't distinguish between no data and EOF by
- * issuing a read(). You'll have to find another way to tell for sure!
- */
-/* EOF_NONBLOCK:
- * This symbol, if defined, indicates to the C program that a read() on
- * a non-blocking file descriptor will return 0 on EOF, and not the value
- * held in RD_NODATA (-1 usually, in that case!).
- */
-#define VAL_O_NONBLOCK O_NONBLOCK
-#define VAL_EAGAIN EAGAIN
-#define RD_NODATA -1
-#define EOF_NONBLOCK
-
-/* PTRSIZE:
- * This symbol contains the size of a pointer, so that the C preprocessor
- * can make decisions based on it. It will be sizeof(void *) if
- * the compiler supports (void *); otherwise it will be
- * sizeof(char *).
- */
-#define PTRSIZE 8 /**/
-
-/* Drand01:
- * This macro is to be used to generate uniformly distributed
- * random numbers over the range [0., 1.[. You may have to supply
- * an 'extern double drand48();' in your program since SunOS 4.1.3
- * doesn't provide you with anything relevant in its headers.
- * See HAS_DRAND48_PROTO.
- */
-/* Rand_seed_t:
- * This symbol defines the type of the argument of the
- * random seed function.
- */
-/* seedDrand01:
- * This symbol defines the macro to be used in seeding the
- * random number generator (see Drand01).
- */
-/* RANDBITS:
- * This symbol indicates how many bits are produced by the
- * function used to generate normalized random numbers.
- * Values include 15, 16, 31, and 48.
- */
-#define Drand01() (rand()/(double)((unsigned)1<<RANDBITS)) /**/
-#define Rand_seed_t unsigned /**/
-#define seedDrand01(x) srand((Rand_seed_t)x) /**/
-#define RANDBITS 15 /**/
-
-/* SSize_t:
- * This symbol holds the type used by functions that return
- * a count of bytes or an error condition. It must be a signed type.
- * It is usually ssize_t, but may be long or int, etc.
- * It may be necessary to include <sys/types.h> or <unistd.h>
- * to get any typedef'ed information.
- * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
- */
-#ifdef _MSC_VER
-# define SSize_t __int64 /* signed count of bytes */
-#else
-# define SSize_t long long /* signed count of bytes */
-#endif
-
-/* EBCDIC:
- * This symbol, if defined, indicates that this system uses
- * EBCDIC encoding.
- */
-/*#define EBCDIC / **/
-
-/* SETUID_SCRIPTS_ARE_SECURE_NOW:
- * This symbol, if defined, indicates that the bug that prevents
- * setuid scripts from being secure is not present in this kernel.
- */
-/* DOSUID:
- * This symbol, if defined, indicates that the C program should
- * check the script that it is executing for setuid/setgid bits, and
- * attempt to emulate setuid/setgid on systems that have disabled
- * setuid #! scripts because the kernel can't do it securely.
- * It is up to the package designer to make sure that this emulation
- * is done securely. Among other things, it should do an fstat on
- * the script it just opened to make sure it really is a setuid/setgid
- * script, it should make sure the arguments passed correspond exactly
- * to the argument on the #! line, and it should not trust any
- * subprocesses to which it must pass the filename rather than the
- * file descriptor of the script to be executed.
- */
-/*#define SETUID_SCRIPTS_ARE_SECURE_NOW / **/
-/*#define DOSUID / **/
-
-/* PERL_USE_DEVEL:
- * This symbol, if defined, indicates that Perl was configured with
- * -Dusedevel, to enable development features. This should not be
- * done for production builds.
- */
-/*#define PERL_USE_DEVEL / **/
-
-/* HAS_ATOLF:
- * This symbol, if defined, indicates that the atolf routine is
- * available to convert strings into long doubles.
- */
-/*#define HAS_ATOLF / **/
-
-/* HAS_ATOLL:
- * This symbol, if defined, indicates that the atoll routine is
- * available to convert strings into long longs.
- */
-#define HAS_ATOLL /**/
-
-/* HAS__FWALK:
- * This symbol, if defined, indicates that the _fwalk system call is
- * available to apply a function to all the file handles.
- */
-/*#define HAS__FWALK / **/
-
-/* HAS_AINTL:
- * This symbol, if defined, indicates that the aintl routine is
- * available. If copysignl is also present we can emulate modfl.
- */
-/*#define HAS_AINTL / **/
-
-/* HAS_BUILTIN_CHOOSE_EXPR:
- * Can we handle GCC builtin for compile-time ternary-like expressions
- */
-/* HAS_BUILTIN_EXPECT:
- * Can we handle GCC builtin for telling that certain values are more
- * likely
- */
-/*#define HAS_BUILTIN_EXPECT / **/
-/*#define HAS_BUILTIN_CHOOSE_EXPR / **/
-
-/* HAS_C99_VARIADIC_MACROS:
- * If defined, the compiler supports C99 variadic macros.
- */
-/*#define HAS_C99_VARIADIC_MACROS / **/
-
-/* HAS_CLASS:
- * This symbol, if defined, indicates that the class routine is
- * available to classify doubles. Available for example in AIX.
- * The returned values are defined in <float.h> and are:
- *
- * FP_PLUS_NORM Positive normalized, nonzero
- * FP_MINUS_NORM Negative normalized, nonzero
- * FP_PLUS_DENORM Positive denormalized, nonzero
- * FP_MINUS_DENORM Negative denormalized, nonzero
- * FP_PLUS_ZERO +0.0
- * FP_MINUS_ZERO -0.0
- * FP_PLUS_INF +INF
- * FP_MINUS_INF -INF
- * FP_NANS Signaling Not a Number (NaNS)
- * FP_NANQ Quiet Not a Number (NaNQ)
- */
-/*#define HAS_CLASS / **/
-
-/* HAS_CLEARENV:
- * This symbol, if defined, indicates that the clearenv () routine is
- * available for use.
- */
-/*#define HAS_CLEARENV / **/
-
-/* HAS_STRUCT_CMSGHDR:
- * This symbol, if defined, indicates that the struct cmsghdr
- * is supported.
- */
-/*#define HAS_STRUCT_CMSGHDR / **/
-
-/* HAS_COPYSIGNL:
- * This symbol, if defined, indicates that the copysignl routine is
- * available. If aintl is also present we can emulate modfl.
- */
-/*#define HAS_COPYSIGNL / **/
-
-/* USE_CPLUSPLUS:
- * This symbol, if defined, indicates that a C++ compiler was
- * used to compiled Perl and will be used to compile extensions.
- */
-/*#define USE_CPLUSPLUS / **/
-
-/* HAS_DBMINIT_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the dbminit() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int dbminit(char *);
- */
-/*#define HAS_DBMINIT_PROTO / **/
-
-/* HAS_DIR_DD_FD:
- * This symbol, if defined, indicates that the the DIR* dirstream
- * structure contains a member variable named dd_fd.
- */
-/*#define HAS_DIR_DD_FD / **/
-
-/* HAS_DIRFD:
- * This manifest constant lets the C program know that dirfd
- * is available.
- */
-/*#define HAS_DIRFD / **/
-
-/* DLSYM_NEEDS_UNDERSCORE:
- * This symbol, if defined, indicates that we need to prepend an
- * underscore to the symbol name before calling dlsym(). This only
- * makes sense if you *have* dlsym, which we will presume is the
- * case if you're using dl_dlopen.xs.
- */
-/*#define DLSYM_NEEDS_UNDERSCORE / **/
-
-/* HAS_FAST_STDIO:
- * This symbol, if defined, indicates that the "fast stdio"
- * is available to manipulate the stdio buffers directly.
- */
-#define HAS_FAST_STDIO /**/
-
-/* HAS_FCHDIR:
- * This symbol, if defined, indicates that the fchdir routine is
- * available to change directory using a file descriptor.
- */
-/*#define HAS_FCHDIR / **/
-
-/* FCNTL_CAN_LOCK:
- * This symbol, if defined, indicates that fcntl() can be used
- * for file locking. Normally on Unix systems this is defined.
- * It may be undefined on VMS.
- */
-/*#define FCNTL_CAN_LOCK / **/
-
-/* HAS_FINITE:
- * This symbol, if defined, indicates that the finite routine is
- * available to check whether a double is finite (non-infinity non-NaN).
- */
-/*#define HAS_FINITE / **/
-
-/* HAS_FINITEL:
- * This symbol, if defined, indicates that the finitel routine is
- * available to check whether a long double is finite
- * (non-infinity non-NaN).
- */
-/*#define HAS_FINITEL / **/
-
-/* HAS_FLOCK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the flock() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int flock(int, int);
- */
-#define HAS_FLOCK_PROTO /**/
-
-/* HAS_FP_CLASS:
- * This symbol, if defined, indicates that the fp_class routine is
- * available to classify doubles. Available for example in Digital UNIX.
- * The returned values are defined in <math.h> and are:
- *
- * FP_SNAN Signaling NaN (Not-a-Number)
- * FP_QNAN Quiet NaN (Not-a-Number)
- * FP_POS_INF +infinity
- * FP_NEG_INF -infinity
- * FP_POS_NORM Positive normalized
- * FP_NEG_NORM Negative normalized
- * FP_POS_DENORM Positive denormalized
- * FP_NEG_DENORM Negative denormalized
- * FP_POS_ZERO +0.0 (positive zero)
- * FP_NEG_ZERO -0.0 (negative zero)
- */
-/*#define HAS_FP_CLASS / **/
-
-/* HAS_FPCLASS:
- * This symbol, if defined, indicates that the fpclass routine is
- * available to classify doubles. Available for example in Solaris/SVR4.
- * The returned values are defined in <ieeefp.h> and are:
- *
- * FP_SNAN signaling NaN
- * FP_QNAN quiet NaN
- * FP_NINF negative infinity
- * FP_PINF positive infinity
- * FP_NDENORM negative denormalized non-zero
- * FP_PDENORM positive denormalized non-zero
- * FP_NZERO negative zero
- * FP_PZERO positive zero
- * FP_NNORM negative normalized non-zero
- * FP_PNORM positive normalized non-zero
- */
-/*#define HAS_FPCLASS / **/
-
-/* HAS_FPCLASSIFY:
- * This symbol, if defined, indicates that the fpclassify routine is
- * available to classify doubles. Available for example in HP-UX.
- * The returned values are defined in <math.h> and are
- *
- * FP_NORMAL Normalized
- * FP_ZERO Zero
- * FP_INFINITE Infinity
- * FP_SUBNORMAL Denormalized
- * FP_NAN NaN
- *
- */
-/*#define HAS_FPCLASSIFY / **/
-
-/* HAS_FPCLASSL:
- * This symbol, if defined, indicates that the fpclassl routine is
- * available to classify long doubles. Available for example in IRIX.
- * The returned values are defined in <ieeefp.h> and are:
- *
- * FP_SNAN signaling NaN
- * FP_QNAN quiet NaN
- * FP_NINF negative infinity
- * FP_PINF positive infinity
- * FP_NDENORM negative denormalized non-zero
- * FP_PDENORM positive denormalized non-zero
- * FP_NZERO negative zero
- * FP_PZERO positive zero
- * FP_NNORM negative normalized non-zero
- * FP_PNORM positive normalized non-zero
- */
-/*#define HAS_FPCLASSL / **/
-
-/* HAS_FPOS64_T:
- * This symbol will be defined if the C compiler supports fpos64_t.
- */
-/*#define HAS_FPOS64_T / **/
-
-/* HAS_FREXPL:
- * This symbol, if defined, indicates that the frexpl routine is
- * available to break a long double floating-point number into
- * a normalized fraction and an integral power of 2.
- */
-/*#define HAS_FREXPL / **/
-
-/* HAS_STRUCT_FS_DATA:
- * This symbol, if defined, indicates that the struct fs_data
- * to do statfs() is supported.
- */
-/*#define HAS_STRUCT_FS_DATA / **/
-
-/* HAS_FSEEKO:
- * This symbol, if defined, indicates that the fseeko routine is
- * available to fseek beyond 32 bits (useful for ILP32 hosts).
- */
-/*#define HAS_FSEEKO / **/
-
-/* HAS_FSTATFS:
- * This symbol, if defined, indicates that the fstatfs routine is
- * available to stat filesystems by file descriptors.
- */
-/*#define HAS_FSTATFS / **/
-
-/* HAS_FSYNC:
- * This symbol, if defined, indicates that the fsync routine is
- * available to write a file's modified data and attributes to
- * permanent storage.
- */
-/*#define HAS_FSYNC / **/
-
-/* HAS_FTELLO:
- * This symbol, if defined, indicates that the ftello routine is
- * available to ftell beyond 32 bits (useful for ILP32 hosts).
- */
-/*#define HAS_FTELLO / **/
-
-/* HAS_FUTIMES:
- * This symbol, if defined, indicates that the futimes routine is
- * available to change file descriptor time stamps with struct timevals.
- */
-/*#define HAS_FUTIMES / **/
-
-/* HAS_GETADDRINFO:
- * This symbol, if defined, indicates that the getaddrinfo() function
- * is available for use.
- */
-/*#define HAS_GETADDRINFO / **/
-
-/* HAS_GETCWD:
- * This symbol, if defined, indicates that the getcwd routine is
- * available to get the current working directory.
- */
-#define HAS_GETCWD /**/
-
-/* HAS_GETESPWNAM:
- * This symbol, if defined, indicates that the getespwnam system call is
- * available to retrieve enchanced (shadow) password entries by name.
- */
-/*#define HAS_GETESPWNAM / **/
-
-/* HAS_GETFSSTAT:
- * This symbol, if defined, indicates that the getfsstat routine is
- * available to stat filesystems in bulk.
- */
-/*#define HAS_GETFSSTAT / **/
-
-/* HAS_GETITIMER:
- * This symbol, if defined, indicates that the getitimer routine is
- * available to return interval timers.
- */
-/*#define HAS_GETITIMER / **/
-
-/* HAS_GETMNT:
- * This symbol, if defined, indicates that the getmnt routine is
- * available to get filesystem mount info by filename.
- */
-/*#define HAS_GETMNT / **/
-
-/* HAS_GETMNTENT:
- * This symbol, if defined, indicates that the getmntent routine is
- * available to iterate through mounted file systems to get their info.
- */
-/*#define HAS_GETMNTENT / **/
-
-/* HAS_GETNAMEINFO:
- * This symbol, if defined, indicates that the getnameinfo() function
- * is available for use.
- */
-/*#define HAS_GETNAMEINFO / **/
-
-/* HAS_GETPRPWNAM:
- * This symbol, if defined, indicates that the getprpwnam system call is
- * available to retrieve protected (shadow) password entries by name.
- */
-/*#define HAS_GETPRPWNAM / **/
-
-/* HAS_GETSPNAM:
- * This symbol, if defined, indicates that the getspnam system call is
- * available to retrieve SysV shadow password entries by name.
- */
-/*#define HAS_GETSPNAM / **/
-
-/* HAS_HASMNTOPT:
- * This symbol, if defined, indicates that the hasmntopt routine is
- * available to query the mount options of file systems.
- */
-/*#define HAS_HASMNTOPT / **/
-
-/* HAS_ILOGBL:
- * This symbol, if defined, indicates that the ilogbl routine is
- * available. If scalbnl is also present we can emulate frexpl.
- */
-/*#define HAS_ILOGBL / **/
-
-/* HAS_INETNTOP:
- * This symbol, if defined, indicates that the inet_ntop() function
- * is available to parse IPv4 and IPv6 strings.
- */
-/*#define HAS_INETNTOP / **/
-
-/* HAS_INETPTON:
- * This symbol, if defined, indicates that the inet_pton() function
- * is available to parse IPv4 and IPv6 strings.
- */
-/*#define HAS_INETPTON / **/
-
-/* HAS_INT64_T:
- * This symbol will defined if the C compiler supports int64_t.
- * Usually the <inttypes.h> needs to be included, but sometimes
- * <sys/types.h> is enough.
- */
-/*#define HAS_INT64_T / **/
-
-/* HAS_ISFINITE:
- * This symbol, if defined, indicates that the isfinite routine is
- * available to check whether a double is finite (non-infinity non-NaN).
- */
-/*#define HAS_ISFINITE / **/
-
-/* HAS_ISINF:
- * This symbol, if defined, indicates that the isinf routine is
- * available to check whether a double is an infinity.
- */
-/*#define HAS_ISINF / **/
-
-/* HAS_ISNAN:
- * This symbol, if defined, indicates that the isnan routine is
- * available to check whether a double is a NaN.
- */
-#define HAS_ISNAN /**/
-
-/* HAS_ISNANL:
- * This symbol, if defined, indicates that the isnanl routine is
- * available to check whether a long double is a NaN.
- */
-/*#define HAS_ISNANL / **/
-
-/* HAS_LDBL_DIG:
- * This symbol, if defined, indicates that this system's <float.h>
- * or <limits.h> defines the symbol LDBL_DIG, which is the number
- * of significant digits in a long double precision number. Unlike
- * for DBL_DIG, there's no good guess for LDBL_DIG if it is undefined.
- */
-#define HAS_LDBL_DIG /**/
-
-/* LIBM_LIB_VERSION:
- * This symbol, if defined, indicates that libm exports _LIB_VERSION
- * and that math.h defines the enum to manipulate it.
- */
-/*#define LIBM_LIB_VERSION / **/
-
-/* HAS_MADVISE:
- * This symbol, if defined, indicates that the madvise system call is
- * available to map a file into memory.
- */
-/*#define HAS_MADVISE / **/
-
-/* HAS_MALLOC_SIZE:
- * This symbol, if defined, indicates that the malloc_size
- * routine is available for use.
- */
-/*#define HAS_MALLOC_SIZE / **/
-
-/* HAS_MALLOC_GOOD_SIZE:
- * This symbol, if defined, indicates that the malloc_good_size
- * routine is available for use.
- */
-/*#define HAS_MALLOC_GOOD_SIZE / **/
-
-/* HAS_MKDTEMP:
- * This symbol, if defined, indicates that the mkdtemp routine is
- * available to exclusively create a uniquely named temporary directory.
- */
-/*#define HAS_MKDTEMP / **/
-
-/* HAS_MKSTEMPS:
- * This symbol, if defined, indicates that the mkstemps routine is
- * available to excluslvely create and open a uniquely named
- * (with a suffix) temporary file.
- */
-/*#define HAS_MKSTEMPS / **/
-
-/* HAS_MODFL:
- * This symbol, if defined, indicates that the modfl routine is
- * available to split a long double x into a fractional part f and
- * an integer part i such that |f| < 1.0 and (f + i) = x.
- */
-/* HAS_MODFL_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the modfl() function. Otherwise, it is up
- * to the program to supply one.
- */
-/* HAS_MODFL_POW32_BUG:
- * This symbol, if defined, indicates that the modfl routine is
- * broken for long doubles >= pow(2, 32).
- * For example from 4294967303.150000 one would get 4294967302.000000
- * and 1.150000. The bug has been seen in certain versions of glibc,
- * release 2.2.2 is known to be okay.
- */
-/*#define HAS_MODFL / **/
-/*#define HAS_MODFL_PROTO / **/
-/*#define HAS_MODFL_POW32_BUG / **/
-
-/* HAS_MPROTECT:
- * This symbol, if defined, indicates that the mprotect system call is
- * available to modify the access protection of a memory mapped file.
- */
-/*#define HAS_MPROTECT / **/
-
-/* HAS_STRUCT_MSGHDR:
- * This symbol, if defined, indicates that the struct msghdr
- * is supported.
- */
-/*#define HAS_STRUCT_MSGHDR / **/
-
-/* HAS_NL_LANGINFO:
- * This symbol, if defined, indicates that the nl_langinfo routine is
- * available to return local data. You will also need <langinfo.h>
- * and therefore I_LANGINFO.
- */
-/*#define HAS_NL_LANGINFO / **/
-
-/* HAS_OFF64_T:
- * This symbol will be defined if the C compiler supports off64_t.
- */
-/*#define HAS_OFF64_T / **/
-
-/* HAS_PROCSELFEXE:
- * This symbol is defined if PROCSELFEXE_PATH is a symlink
- * to the absolute pathname of the executing program.
- */
-/* PROCSELFEXE_PATH:
- * If HAS_PROCSELFEXE is defined this symbol is the filename
- * of the symbolic link pointing to the absolute pathname of
- * the executing program.
- */
-/*#define HAS_PROCSELFEXE / **/
-#if defined(HAS_PROCSELFEXE) && !defined(PROCSELFEXE_PATH)
-#define PROCSELFEXE_PATH /**/
-#endif
-
-/* HAS_PTHREAD_ATTR_SETSCOPE:
- * This symbol, if defined, indicates that the pthread_attr_setscope
- * system call is available to set the contention scope attribute of
- * a thread attribute object.
- */
-/*#define HAS_PTHREAD_ATTR_SETSCOPE / **/
-
-/* HAS_READV:
- * This symbol, if defined, indicates that the readv routine is
- * available to do gather reads. You will also need <sys/uio.h>
- * and there I_SYSUIO.
- */
-/*#define HAS_READV / **/
-
-/* HAS_RECVMSG:
- * This symbol, if defined, indicates that the recvmsg routine is
- * available to send structured socket messages.
- */
-/*#define HAS_RECVMSG / **/
-
-/* HAS_SBRK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the sbrk() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern void* sbrk(int);
- * extern void* sbrk(size_t);
- */
-/*#define HAS_SBRK_PROTO / **/
-
-/* HAS_SCALBNL:
- * This symbol, if defined, indicates that the scalbnl routine is
- * available. If ilogbl is also present we can emulate frexpl.
- */
-/*#define HAS_SCALBNL / **/
-
-/* HAS_SENDMSG:
- * This symbol, if defined, indicates that the sendmsg routine is
- * available to send structured socket messages.
- */
-/*#define HAS_SENDMSG / **/
-
-/* HAS_SETITIMER:
- * This symbol, if defined, indicates that the setitimer routine is
- * available to set interval timers.
- */
-/*#define HAS_SETITIMER / **/
-
-/* HAS_SETPROCTITLE:
- * This symbol, if defined, indicates that the setproctitle routine is
- * available to set process title.
- */
-/*#define HAS_SETPROCTITLE / **/
-
-/* USE_SFIO:
- * This symbol, if defined, indicates that sfio should
- * be used.
- */
-/*#define USE_SFIO / **/
-
-/* HAS_SIGNBIT:
- * This symbol, if defined, indicates that the signbit routine is
- * available to check if the given number has the sign bit set.
- * This should include correct testing of -0.0. This will only be set
- * if the signbit() routine is safe to use with the NV type used internally
- * in perl. Users should call Perl_signbit(), which will be #defined to
- * the system's signbit() function or macro if this symbol is defined.
- */
-/*#define HAS_SIGNBIT / **/
-
-/* HAS_SIGPROCMASK:
- * This symbol, if defined, indicates that the sigprocmask
- * system call is available to examine or change the signal mask
- * of the calling process.
- */
-/*#define HAS_SIGPROCMASK / **/
-
-/* USE_SITECUSTOMIZE:
- * This symbol, if defined, indicates that sitecustomize should
- * be used.
- */
-#ifndef USE_SITECUSTOMIZE
-/*#define USE_SITECUSTOMIZE / **/
-#endif
-
-/* HAS_SNPRINTF:
- * This symbol, if defined, indicates that the snprintf () library
- * function is available for use.
- */
-/* HAS_VSNPRINTF:
- * This symbol, if defined, indicates that the vsnprintf () library
- * function is available for use.
- */
-#define HAS_SNPRINTF /**/
-#define HAS_VSNPRINTF /**/
-
-/* HAS_SOCKATMARK:
- * This symbol, if defined, indicates that the sockatmark routine is
- * available to test whether a socket is at the out-of-band mark.
- */
-/*#define HAS_SOCKATMARK / **/
-
-/* HAS_SOCKATMARK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the sockatmark() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int sockatmark(int);
- */
-/*#define HAS_SOCKATMARK_PROTO / **/
-
-/* HAS_SOCKS5_INIT:
- * This symbol, if defined, indicates that the socks5_init routine is
- * available to initialize SOCKS 5.
- */
-/*#define HAS_SOCKS5_INIT / **/
-
-/* SPRINTF_RETURNS_STRLEN:
- * This variable defines whether sprintf returns the length of the string
- * (as per the ANSI spec). Some C libraries retain compatibility with
- * pre-ANSI C and return a pointer to the passed in buffer; for these
- * this variable will be undef.
- */
-#define SPRINTF_RETURNS_STRLEN /**/
-
-/* HAS_SQRTL:
- * This symbol, if defined, indicates that the sqrtl routine is
- * available to do long double square roots.
- */
-/*#define HAS_SQRTL / **/
-
-/* HAS_SETRESGID_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the setresgid() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern int setresgid(uid_t ruid, uid_t euid, uid_t suid);
- */
-/*#define HAS_SETRESGID_PROTO / **/
-
-/* HAS_SETRESUID_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the setresuid() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern int setresuid(uid_t ruid, uid_t euid, uid_t suid);
- */
-/*#define HAS_SETRESUID_PROTO / **/
-
-/* HAS_STRUCT_STATFS_F_FLAGS:
- * This symbol, if defined, indicates that the struct statfs
- * does have the f_flags member containing the mount flags of
- * the filesystem containing the file.
- * This kind of struct statfs is coming from <sys/mount.h> (BSD 4.3),
- * not from <sys/statfs.h> (SYSV). Older BSDs (like Ultrix) do not
- * have statfs() and struct statfs, they have ustat() and getmnt()
- * with struct ustat and struct fs_data.
- */
-/*#define HAS_STRUCT_STATFS_F_FLAGS / **/
-
-/* HAS_STRUCT_STATFS:
- * This symbol, if defined, indicates that the struct statfs
- * to do statfs() is supported.
- */
-/*#define HAS_STRUCT_STATFS / **/
-
-/* HAS_FSTATVFS:
- * This symbol, if defined, indicates that the fstatvfs routine is
- * available to stat filesystems by file descriptors.
- */
-/*#define HAS_FSTATVFS / **/
-
-/* HAS_STRFTIME:
- * This symbol, if defined, indicates that the strftime routine is
- * available to do time formatting.
- */
-#define HAS_STRFTIME /**/
-
-/* HAS_STRLCAT:
- * This symbol, if defined, indicates that the strlcat () routine is
- * available to do string concatenation.
- */
-/*#define HAS_STRLCAT / **/
-
-/* HAS_STRLCPY:
- * This symbol, if defined, indicates that the strlcpy () routine is
- * available to do string copying.
- */
-/*#define HAS_STRLCPY / **/
-
-/* HAS_STRTOLD:
- * This symbol, if defined, indicates that the strtold routine is
- * available to convert strings to long doubles.
- */
-/*#define HAS_STRTOLD / **/
-
-/* HAS_STRTOLL:
- * This symbol, if defined, indicates that the strtoll routine is
- * available to convert strings to long longs.
- */
-#define HAS_STRTOLL /**/
-
-/* HAS_STRTOQ:
- * This symbol, if defined, indicates that the strtoq routine is
- * available to convert strings to long longs (quads).
- */
-/*#define HAS_STRTOQ / **/
-
-/* HAS_STRTOULL:
- * This symbol, if defined, indicates that the strtoull routine is
- * available to convert strings to unsigned long longs.
- */
-#define HAS_STRTOULL /**/
-
-/* HAS_STRTOUQ:
- * This symbol, if defined, indicates that the strtouq routine is
- * available to convert strings to unsigned long longs (quads).
- */
-/*#define HAS_STRTOUQ / **/
-
-/* HAS_SYSCALL_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the syscall() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern int syscall(int, ...);
- * extern int syscall(long, ...);
- */
-/*#define HAS_SYSCALL_PROTO / **/
-
-/* HAS_TELLDIR_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the telldir() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern long telldir(DIR*);
- */
-#define HAS_TELLDIR_PROTO /**/
-
-/* HAS_CTIME64:
- * This symbol, if defined, indicates that the ctime64 () routine is
- * available to do the 64bit variant of ctime ()
- */
-/* HAS_LOCALTIME64:
- * This symbol, if defined, indicates that the localtime64 () routine is
- * available to do the 64bit variant of localtime ()
- */
-/* HAS_GMTIME64:
- * This symbol, if defined, indicates that the gmtime64 () routine is
- * available to do the 64bit variant of gmtime ()
- */
-/* HAS_MKTIME64:
- * This symbol, if defined, indicates that the mktime64 () routine is
- * available to do the 64bit variant of mktime ()
- */
-/* HAS_DIFFTIME64:
- * This symbol, if defined, indicates that the difftime64 () routine is
- * available to do the 64bit variant of difftime ()
- */
-/* HAS_ASCTIME64:
- * This symbol, if defined, indicates that the asctime64 () routine is
- * available to do the 64bit variant of asctime ()
- */
-/*#define HAS_CTIME64 / **/
-/*#define HAS_LOCALTIME64 / **/
-/*#define HAS_GMTIME64 / **/
-/*#define HAS_MKTIME64 / **/
-/*#define HAS_DIFFTIME64 / **/
-/*#define HAS_ASCTIME64 / **/
-
-/* HAS_TIMEGM:
- * This symbol, if defined, indicates that the timegm routine is
- * available to do the opposite of gmtime ()
- */
-/*#define HAS_TIMEGM / **/
-
-/* U32_ALIGNMENT_REQUIRED:
- * This symbol, if defined, indicates that you must access
- * character data through U32-aligned pointers.
- */
-#ifndef U32_ALIGNMENT_REQUIRED
-#define U32_ALIGNMENT_REQUIRED /**/
-#endif
-
-/* HAS_UALARM:
- * This symbol, if defined, indicates that the ualarm routine is
- * available to do alarms with microsecond granularity.
- */
-/*#define HAS_UALARM / **/
-
-/* HAS_UNORDERED:
- * This symbol, if defined, indicates that the unordered routine is
- * available to check whether two doubles are unordered
- * (effectively: whether either of them is NaN)
- */
-/*#define HAS_UNORDERED / **/
-
-/* HAS_UNSETENV:
- * This symbol, if defined, indicates that the unsetenv () routine is
- * available for use.
- */
-/*#define HAS_UNSETENV / **/
-
-/* HAS_USLEEP_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the usleep() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int usleep(useconds_t);
- */
-/*#define HAS_USLEEP_PROTO / **/
-
-/* HAS_USTAT:
- * This symbol, if defined, indicates that the ustat system call is
- * available to query file system statistics by dev_t.
- */
-/*#define HAS_USTAT / **/
-
-/* HAS_WRITEV:
- * This symbol, if defined, indicates that the writev routine is
- * available to do scatter writes.
- */
-/*#define HAS_WRITEV / **/
-
-/* USE_DYNAMIC_LOADING:
- * This symbol, if defined, indicates that dynamic loading of
- * some sort is available.
- */
-#define USE_DYNAMIC_LOADING /**/
-
-/* FFLUSH_NULL:
- * This symbol, if defined, tells that fflush(NULL) does flush
- * all pending stdio output.
- */
-/* FFLUSH_ALL:
- * This symbol, if defined, tells that to flush
- * all pending stdio output one must loop through all
- * the stdio file handles stored in an array and fflush them.
- * Note that if fflushNULL is defined, fflushall will not
- * even be probed for and will be left undefined.
- */
-#define FFLUSH_NULL /**/
-/*#define FFLUSH_ALL / **/
-
-/* I_ASSERT:
- * This symbol, if defined, indicates that <assert.h> exists and
- * could be included by the C program to get the assert() macro.
- */
-#define I_ASSERT /**/
-
-/* I_CRYPT:
- * This symbol, if defined, indicates that <crypt.h> exists and
- * should be included.
- */
-/*#define I_CRYPT / **/
-
-/* DB_Prefix_t:
- * This symbol contains the type of the prefix structure element
- * in the <db.h> header file. In older versions of DB, it was
- * int, while in newer ones it is u_int32_t.
- */
-/* DB_Hash_t:
- * This symbol contains the type of the prefix structure element
- * in the <db.h> header file. In older versions of DB, it was
- * int, while in newer ones it is size_t.
- */
-/* DB_VERSION_MAJOR_CFG:
- * This symbol, if defined, defines the major version number of
- * Berkeley DB found in the <db.h> header when Perl was configured.
- */
-/* DB_VERSION_MINOR_CFG:
- * This symbol, if defined, defines the minor version number of
- * Berkeley DB found in the <db.h> header when Perl was configured.
- * For DB version 1 this is always 0.
- */
-/* DB_VERSION_PATCH_CFG:
- * This symbol, if defined, defines the patch version number of
- * Berkeley DB found in the <db.h> header when Perl was configured.
- * For DB version 1 this is always 0.
- */
-#define DB_Hash_t int /**/
-#define DB_Prefix_t int /**/
-#define DB_VERSION_MAJOR_CFG 0 /**/
-#define DB_VERSION_MINOR_CFG 0 /**/
-#define DB_VERSION_PATCH_CFG 0 /**/
-
-/* I_FP:
- * This symbol, if defined, indicates that <fp.h> exists and
- * should be included.
- */
-/*#define I_FP / **/
-
-/* I_FP_CLASS:
- * This symbol, if defined, indicates that <fp_class.h> exists and
- * should be included.
- */
-/*#define I_FP_CLASS / **/
-
-/* I_IEEEFP:
- * This symbol, if defined, indicates that <ieeefp.h> exists and
- * should be included.
- */
-/*#define I_IEEEFP / **/
-
-/* I_INTTYPES:
- * This symbol, if defined, indicates to the C program that it should
- * include <inttypes.h>.
- */
-/*#define I_INTTYPES / **/
-
-/* I_LANGINFO:
- * This symbol, if defined, indicates that <langinfo.h> exists and
- * should be included.
- */
-/*#define I_LANGINFO / **/
-
-/* I_LIBUTIL:
- * This symbol, if defined, indicates that <libutil.h> exists and
- * should be included.
- */
-/*#define I_LIBUTIL / **/
-
-/* I_MALLOCMALLOC:
- * This symbol, if defined, indicates to the C program that it should
- * include <malloc/malloc.h>.
- */
-/*#define I_MALLOCMALLOC / **/
-
-/* I_MNTENT:
- * This symbol, if defined, indicates that <mntent.h> exists and
- * should be included.
- */
-/*#define I_MNTENT / **/
-
-/* I_NETINET_TCP:
- * This symbol, if defined, indicates to the C program that it should
- * include <netinet/tcp.h>.
- */
-/*#define I_NETINET_TCP / **/
-
-/* I_POLL:
- * This symbol, if defined, indicates that <poll.h> exists and
- * should be included. (see also HAS_POLL)
- */
-/*#define I_POLL / **/
-
-/* I_PROT:
- * This symbol, if defined, indicates that <prot.h> exists and
- * should be included.
- */
-/*#define I_PROT / **/
-
-/* I_SHADOW:
- * This symbol, if defined, indicates that <shadow.h> exists and
- * should be included.
- */
-/*#define I_SHADOW / **/
-
-/* I_SOCKS:
- * This symbol, if defined, indicates that <socks.h> exists and
- * should be included.
- */
-/*#define I_SOCKS / **/
-
-/* I_SUNMATH:
- * This symbol, if defined, indicates that <sunmath.h> exists and
- * should be included.
- */
-/*#define I_SUNMATH / **/
-
-/* I_SYSLOG:
- * This symbol, if defined, indicates that <syslog.h> exists and
- * should be included.
- */
-/*#define I_SYSLOG / **/
-
-/* I_SYSMODE:
- * This symbol, if defined, indicates that <sys/mode.h> exists and
- * should be included.
- */
-/*#define I_SYSMODE / **/
-
-/* I_SYS_MOUNT:
- * This symbol, if defined, indicates that <sys/mount.h> exists and
- * should be included.
- */
-/*#define I_SYS_MOUNT / **/
-
-/* I_SYS_STATFS:
- * This symbol, if defined, indicates that <sys/statfs.h> exists.
- */
-/*#define I_SYS_STATFS / **/
-
-/* I_SYS_STATVFS:
- * This symbol, if defined, indicates that <sys/statvfs.h> exists and
- * should be included.
- */
-/*#define I_SYS_STATVFS / **/
-
-/* I_SYSUTSNAME:
- * This symbol, if defined, indicates that <sys/utsname.h> exists and
- * should be included.
- */
-/*#define I_SYSUTSNAME / **/
-
-/* I_SYS_VFS:
- * This symbol, if defined, indicates that <sys/vfs.h> exists and
- * should be included.
- */
-/*#define I_SYS_VFS / **/
-
-/* I_USTAT:
- * This symbol, if defined, indicates that <ustat.h> exists and
- * should be included.
- */
-/*#define I_USTAT / **/
-
-/* PERL_PRIfldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'f') for output.
- */
-/* PERL_PRIgldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'g') for output.
- */
-/* PERL_PRIeldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'e') for output.
- */
-/* PERL_SCNfldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'f') for input.
- */
-/*#define PERL_PRIfldbl "f" / **/
-/*#define PERL_PRIgldbl "g" / **/
-/*#define PERL_PRIeldbl "e" / **/
-/*#define PERL_SCNfldbl "f" / **/
-
-/* PERL_MAD:
- * This symbol, if defined, indicates that the Misc Attribution
- * Declaration code should be conditionally compiled.
- */
-/*#define PERL_MAD / **/
-
-/* NEED_VA_COPY:
- * This symbol, if defined, indicates that the system stores
- * the variable argument list datatype, va_list, in a format
- * that cannot be copied by simple assignment, so that some
- * other means must be used when copying is required.
- * As such systems vary in their provision (or non-provision)
- * of copying mechanisms, handy.h defines a platform-
- * independent macro, Perl_va_copy(src, dst), to do the job.
- */
-/*#define NEED_VA_COPY / **/
-
-/* IVTYPE:
- * This symbol defines the C type used for Perl's IV.
- */
-/* UVTYPE:
- * This symbol defines the C type used for Perl's UV.
- */
-/* I8TYPE:
- * This symbol defines the C type used for Perl's I8.
- */
-/* U8TYPE:
- * This symbol defines the C type used for Perl's U8.
- */
-/* I16TYPE:
- * This symbol defines the C type used for Perl's I16.
- */
-/* U16TYPE:
- * This symbol defines the C type used for Perl's U16.
- */
-/* I32TYPE:
- * This symbol defines the C type used for Perl's I32.
- */
-/* U32TYPE:
- * This symbol defines the C type used for Perl's U32.
- */
-/* I64TYPE:
- * This symbol defines the C type used for Perl's I64.
- */
-/* U64TYPE:
- * This symbol defines the C type used for Perl's U64.
- */
-/* NVTYPE:
- * This symbol defines the C type used for Perl's NV.
- */
-/* IVSIZE:
- * This symbol contains the sizeof(IV).
- */
-/* UVSIZE:
- * This symbol contains the sizeof(UV).
- */
-/* I8SIZE:
- * This symbol contains the sizeof(I8).
- */
-/* U8SIZE:
- * This symbol contains the sizeof(U8).
- */
-/* I16SIZE:
- * This symbol contains the sizeof(I16).
- */
-/* U16SIZE:
- * This symbol contains the sizeof(U16).
- */
-/* I32SIZE:
- * This symbol contains the sizeof(I32).
- */
-/* U32SIZE:
- * This symbol contains the sizeof(U32).
- */
-/* I64SIZE:
- * This symbol contains the sizeof(I64).
- */
-/* U64SIZE:
- * This symbol contains the sizeof(U64).
- */
-/* NVSIZE:
- * This symbol contains the sizeof(NV).
- */
-/* NV_PRESERVES_UV:
- * This symbol, if defined, indicates that a variable of type NVTYPE
- * can preserve all the bits of a variable of type UVTYPE.
- */
-/* NV_PRESERVES_UV_BITS:
- * This symbol contains the number of bits a variable of type NVTYPE
- * can preserve of a variable of type UVTYPE.
- */
-/* NV_OVERFLOWS_INTEGERS_AT:
- * This symbol gives the largest integer value that NVs can hold. This
- * value + 1.0 cannot be stored accurately. It is expressed as constant
- * floating point expression to reduce the chance of decimale/binary
- * conversion issues. If it can not be determined, the value 0 is given.
- */
-/* NV_ZERO_IS_ALLBITS_ZERO:
- * This symbol, if defined, indicates that a variable of type NVTYPE
- * stores 0.0 in memory as all bits zero.
- */
-#ifdef _MSC_VER
-# define IVTYPE __int64 /**/
-# define UVTYPE unsigned __int64 /**/
-#else
-# define IVTYPE long long /**/
-# define UVTYPE unsigned long long /**/
-#endif
-#define I8TYPE char /**/
-#define U8TYPE unsigned char /**/
-#define I16TYPE short /**/
-#define U16TYPE unsigned short /**/
-#define I32TYPE long /**/
-#define U32TYPE unsigned long /**/
-#ifdef HAS_QUAD
-# ifdef _MSC_VER
-# define I64TYPE __int64 /**/
-# define U64TYPE unsigned __int64 /**/
-# else
-# define I64TYPE long long /**/
-# define U64TYPE unsigned long long /**/
-# endif
-#endif
-#define NVTYPE double /**/
-#define IVSIZE 8 /**/
-#define UVSIZE 8 /**/
-#define I8SIZE 1 /**/
-#define U8SIZE 1 /**/
-#define I16SIZE 2 /**/
-#define U16SIZE 2 /**/
-#define I32SIZE 4 /**/
-#define U32SIZE 4 /**/
-#ifdef HAS_QUAD
-#define I64SIZE 8 /**/
-#define U64SIZE 8 /**/
-#endif
-#define NVSIZE 8 /**/
-#undef NV_PRESERVES_UV
-#define NV_PRESERVES_UV_BITS 53
-#define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0
-#define NV_ZERO_IS_ALLBITS_ZERO
-#if UVSIZE == 8
-# ifdef BYTEORDER
-# if BYTEORDER == 0x1234
-# undef BYTEORDER
-# define BYTEORDER 0x12345678
-# else
-# if BYTEORDER == 0x4321
-# undef BYTEORDER
-# define BYTEORDER 0x87654321
-# endif
-# endif
-# endif
-#endif
-
-/* IVdf:
- * This symbol defines the format string used for printing a Perl IV
- * as a signed decimal integer.
- */
-/* UVuf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned decimal integer.
- */
-/* UVof:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned octal integer.
- */
-/* UVxf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned hexadecimal integer in lowercase abcdef.
- */
-/* UVXf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned hexadecimal integer in uppercase ABCDEF.
- */
-/* NVef:
- * This symbol defines the format string used for printing a Perl NV
- * using %e-ish floating point format.
- */
-/* NVff:
- * This symbol defines the format string used for printing a Perl NV
- * using %f-ish floating point format.
- */
-/* NVgf:
- * This symbol defines the format string used for printing a Perl NV
- * using %g-ish floating point format.
- */
-#define IVdf "I64d" /**/
-#define UVuf "I64u" /**/
-#define UVof "I64o" /**/
-#define UVxf "I64x" /**/
-#define UVXf "I64X" /**/
-#define NVef "e" /**/
-#define NVff "f" /**/
-#define NVgf "g" /**/
-
-/* SELECT_MIN_BITS:
- * This symbol holds the minimum number of bits operated by select.
- * That is, if you do select(n, ...), how many bits at least will be
- * cleared in the masks if some activity is detected. Usually this
- * is either n or 32*ceil(n/32), especially many little-endians do
- * the latter. This is only useful if you have select(), naturally.
- */
-#define SELECT_MIN_BITS 32 /**/
-
-/* STARTPERL:
- * This variable contains the string to put in front of a perl
- * script to make sure (one hopes) that it runs with perl and not
- * some shell.
- */
-#define STARTPERL "#!perl" /**/
-
-/* HAS_STDIO_STREAM_ARRAY:
- * This symbol, if defined, tells that there is an array
- * holding the stdio streams.
- */
-/* STDIO_STREAM_ARRAY:
- * This symbol tells the name of the array holding the stdio streams.
- * Usual values include _iob, __iob, and __sF.
- */
-/*#define HAS_STDIO_STREAM_ARRAY / **/
-#ifdef HAS_STDIO_STREAM_ARRAY
-#define STDIO_STREAM_ARRAY
-#endif
-
-/* GMTIME_MAX:
- * This symbol contains the maximum value for the time_t offset that
- * the system function gmtime () accepts, and defaults to 0
- */
-/* GMTIME_MIN:
- * This symbol contains the minimum value for the time_t offset that
- * the system function gmtime () accepts, and defaults to 0
- */
-/* LOCALTIME_MAX:
- * This symbol contains the maximum value for the time_t offset that
- * the system function localtime () accepts, and defaults to 0
- */
-/* LOCALTIME_MIN:
- * This symbol contains the minimum value for the time_t offset that
- * the system function localtime () accepts, and defaults to 0
- */
-#define GMTIME_MAX 2147483647 /**/
-#define GMTIME_MIN 0 /**/
-#define LOCALTIME_MAX 2147483647 /**/
-#define LOCALTIME_MIN 0 /**/
-
-/* USE_64_BIT_INT:
- * This symbol, if defined, indicates that 64-bit integers should
- * be used when available. If not defined, the native integers
- * will be employed (be they 32 or 64 bits). The minimal possible
- * 64-bitness is used, just enough to get 64-bit integers into Perl.
- * This may mean using for example "long longs", while your memory
- * may still be limited to 2 gigabytes.
- */
-/* USE_64_BIT_ALL:
- * This symbol, if defined, indicates that 64-bit integers should
- * be used when available. If not defined, the native integers
- * will be used (be they 32 or 64 bits). The maximal possible
- * 64-bitness is employed: LP64 or ILP64, meaning that you will
- * be able to use more than 2 gigabytes of memory. This mode is
- * even more binary incompatible than USE_64_BIT_INT. You may not
- * be able to run the resulting executable in a 32-bit CPU at all or
- * you may need at least to reboot your OS to 64-bit mode.
- */
-#ifndef USE_64_BIT_INT
-#define USE_64_BIT_INT /**/
-#endif
-#ifndef USE_64_BIT_ALL
-/*#define USE_64_BIT_ALL / **/
-#endif
-
-/* USE_DTRACE:
- * This symbol, if defined, indicates that Perl should
- * be built with support for DTrace.
- */
-/*#define USE_DTRACE / **/
-
-/* USE_FAST_STDIO:
- * This symbol, if defined, indicates that Perl should
- * be built to use 'fast stdio'.
- * Defaults to define in Perls 5.8 and earlier, to undef later.
- */
-#ifndef USE_FAST_STDIO
-/*#define USE_FAST_STDIO / **/
-#endif
-
-/* USE_LARGE_FILES:
- * This symbol, if defined, indicates that large file support
- * should be used when available.
- */
-#ifndef USE_LARGE_FILES
-#define USE_LARGE_FILES /**/
-#endif
-
-/* USE_LONG_DOUBLE:
- * This symbol, if defined, indicates that long doubles should
- * be used when available.
- */
-#ifndef USE_LONG_DOUBLE
-/*#define USE_LONG_DOUBLE / **/
-#endif
-
-/* USE_MORE_BITS:
- * This symbol, if defined, indicates that 64-bit interfaces and
- * long doubles should be used when available.
- */
-#ifndef USE_MORE_BITS
-/*#define USE_MORE_BITS / **/
-#endif
-
-/* MULTIPLICITY:
- * This symbol, if defined, indicates that Perl should
- * be built to use multiplicity.
- */
-#ifndef MULTIPLICITY
-#define MULTIPLICITY /**/
-#endif
-
-/* USE_PERLIO:
- * This symbol, if defined, indicates that the PerlIO abstraction should
- * be used throughout. If not defined, stdio should be
- * used in a fully backward compatible manner.
- */
-#ifndef USE_PERLIO
-#define USE_PERLIO /**/
-#endif
-
-/* USE_SOCKS:
- * This symbol, if defined, indicates that Perl should
- * be built to use socks.
- */
-#ifndef USE_SOCKS
-/*#define USE_SOCKS / **/
-#endif
-
-#endif
Deleted: trunk/contrib/perl/win32/config_H.gc64nox
===================================================================
--- trunk/contrib/perl/win32/config_H.gc64nox 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/win32/config_H.gc64nox 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,4719 +0,0 @@
-/*
- * This file was produced by running the config_h.SH script, which
- * gets its values from undef, which is generally produced by
- * running Configure.
- *
- * Feel free to modify any of this as the need arises. Note, however,
- * that running config_h.SH again will wipe out any changes you've made.
- * For a more permanent change edit undef and rerun config_h.SH.
- *
- * $Id: config_H.gc64nox,v 1.1.1.1 2011-05-19 23:03:36 laffer1 Exp $
- */
-
-/*
- * Package name : perl5
- * Source directory :
- * Configuration time: Sun Jan 10 19:53:56 2010
- * Configured by : Steve
- * Target system :
- */
-
-#ifndef _config_h_
-#define _config_h_
-
-/* LOC_SED:
- * This symbol holds the complete pathname to the sed program.
- */
-#define LOC_SED "" /**/
-
-/* HAS_ALARM:
- * This symbol, if defined, indicates that the alarm routine is
- * available.
- */
-#define HAS_ALARM /**/
-
-/* HAS_BCMP:
- * This symbol is defined if the bcmp() routine is available to
- * compare blocks of memory.
- */
-/*#define HAS_BCMP / **/
-
-/* HAS_BCOPY:
- * This symbol is defined if the bcopy() routine is available to
- * copy blocks of memory.
- */
-/*#define HAS_BCOPY / **/
-
-/* HAS_BZERO:
- * This symbol is defined if the bzero() routine is available to
- * set a memory block to 0.
- */
-/*#define HAS_BZERO / **/
-
-/* HAS_CHOWN:
- * This symbol, if defined, indicates that the chown routine is
- * available.
- */
-/*#define HAS_CHOWN / **/
-
-/* HAS_CHROOT:
- * This symbol, if defined, indicates that the chroot routine is
- * available.
- */
-/*#define HAS_CHROOT / **/
-
-/* HAS_CHSIZE:
- * This symbol, if defined, indicates that the chsize routine is available
- * to truncate files. You might need a -lx to get this routine.
- */
-#define HAS_CHSIZE /**/
-
-/* HAS_CRYPT:
- * This symbol, if defined, indicates that the crypt routine is available
- * to encrypt passwords and the like.
- */
-/*#define HAS_CRYPT / **/
-
-/* HAS_CTERMID:
- * This symbol, if defined, indicates that the ctermid routine is
- * available to generate filename for terminal.
- */
-/*#define HAS_CTERMID / **/
-
-/* HAS_CUSERID:
- * This symbol, if defined, indicates that the cuserid routine is
- * available to get character login names.
- */
-/*#define HAS_CUSERID / **/
-
-/* HAS_DBL_DIG:
- * This symbol, if defined, indicates that this system's <float.h>
- * or <limits.h> defines the symbol DBL_DIG, which is the number
- * of significant digits in a double precision number. If this
- * symbol is not defined, a guess of 15 is usually pretty good.
- */
-#define HAS_DBL_DIG /**/
-
-/* HAS_DIFFTIME:
- * This symbol, if defined, indicates that the difftime routine is
- * available.
- */
-#define HAS_DIFFTIME /**/
-
-/* HAS_DLERROR:
- * This symbol, if defined, indicates that the dlerror routine is
- * available to return a string describing the last error that
- * occurred from a call to dlopen(), dlclose() or dlsym().
- */
-#define HAS_DLERROR /**/
-
-/* HAS_DUP2:
- * This symbol, if defined, indicates that the dup2 routine is
- * available to duplicate file descriptors.
- */
-#define HAS_DUP2 /**/
-
-/* HAS_FCHMOD:
- * This symbol, if defined, indicates that the fchmod routine is available
- * to change mode of opened files. If unavailable, use chmod().
- */
-/*#define HAS_FCHMOD / **/
-
-/* HAS_FCHOWN:
- * This symbol, if defined, indicates that the fchown routine is available
- * to change ownership of opened files. If unavailable, use chown().
- */
-/*#define HAS_FCHOWN / **/
-
-/* HAS_FCNTL:
- * This symbol, if defined, indicates to the C program that
- * the fcntl() function exists.
- */
-/*#define HAS_FCNTL / **/
-
-/* HAS_FGETPOS:
- * This symbol, if defined, indicates that the fgetpos routine is
- * available to get the file position indicator, similar to ftell().
- */
-#define HAS_FGETPOS /**/
-
-/* HAS_FLOCK:
- * This symbol, if defined, indicates that the flock routine is
- * available to do file locking.
- */
-#define HAS_FLOCK /**/
-
-/* HAS_FORK:
- * This symbol, if defined, indicates that the fork routine is
- * available.
- */
-/*#define HAS_FORK / **/
-
-/* HAS_FSETPOS:
- * This symbol, if defined, indicates that the fsetpos routine is
- * available to set the file position indicator, similar to fseek().
- */
-#define HAS_FSETPOS /**/
-
-/* HAS_GETTIMEOFDAY:
- * This symbol, if defined, indicates that the gettimeofday() system
- * call is available for a sub-second accuracy clock. Usually, the file
- * <sys/resource.h> needs to be included (see I_SYS_RESOURCE).
- * The type "Timeval" should be used to refer to "struct timeval".
- */
-#define HAS_GETTIMEOFDAY /**/
-#ifdef HAS_GETTIMEOFDAY
-#define Timeval struct timeval /* Structure used by gettimeofday() */
-#endif
-
-/* HAS_GETGROUPS:
- * This symbol, if defined, indicates that the getgroups() routine is
- * available to get the list of process groups. If unavailable, multiple
- * groups are probably not supported.
- */
-/*#define HAS_GETGROUPS / **/
-
-/* HAS_GETLOGIN:
- * This symbol, if defined, indicates that the getlogin routine is
- * available to get the login name.
- */
-#define HAS_GETLOGIN /**/
-
-/* HAS_GETPGID:
- * This symbol, if defined, indicates to the C program that
- * the getpgid(pid) function is available to get the
- * process group id.
- */
-/*#define HAS_GETPGID / **/
-
-/* HAS_GETPGRP2:
- * This symbol, if defined, indicates that the getpgrp2() (as in DG/UX)
- * routine is available to get the current process group.
- */
-/*#define HAS_GETPGRP2 / **/
-
-/* HAS_GETPPID:
- * This symbol, if defined, indicates that the getppid routine is
- * available to get the parent process ID.
- */
-/*#define HAS_GETPPID / **/
-
-/* HAS_GETPRIORITY:
- * This symbol, if defined, indicates that the getpriority routine is
- * available to get a process's priority.
- */
-/*#define HAS_GETPRIORITY / **/
-
-/* HAS_INET_ATON:
- * This symbol, if defined, indicates to the C program that the
- * inet_aton() function is available to parse IP address "dotted-quad"
- * strings.
- */
-/*#define HAS_INET_ATON / **/
-
-/* HAS_KILLPG:
- * This symbol, if defined, indicates that the killpg routine is available
- * to kill process groups. If unavailable, you probably should use kill
- * with a negative process number.
- */
-#define HAS_KILLPG /**/
-
-/* HAS_LINK:
- * This symbol, if defined, indicates that the link routine is
- * available to create hard links.
- */
-#define HAS_LINK /**/
-
-/* HAS_LOCALECONV:
- * This symbol, if defined, indicates that the localeconv routine is
- * available for numeric and monetary formatting conventions.
- */
-#define HAS_LOCALECONV /**/
-
-/* HAS_LOCKF:
- * This symbol, if defined, indicates that the lockf routine is
- * available to do file locking.
- */
-/*#define HAS_LOCKF / **/
-
-/* HAS_LSTAT:
- * This symbol, if defined, indicates that the lstat routine is
- * available to do file stats on symbolic links.
- */
-/*#define HAS_LSTAT / **/
-
-/* HAS_MBLEN:
- * This symbol, if defined, indicates that the mblen routine is available
- * to find the number of bytes in a multibye character.
- */
-#define HAS_MBLEN /**/
-
-/* HAS_MBSTOWCS:
- * This symbol, if defined, indicates that the mbstowcs routine is
- * available to covert a multibyte string into a wide character string.
- */
-#define HAS_MBSTOWCS /**/
-
-/* HAS_MBTOWC:
- * This symbol, if defined, indicates that the mbtowc routine is available
- * to covert a multibyte to a wide character.
- */
-#define HAS_MBTOWC /**/
-
-/* HAS_MEMCMP:
- * This symbol, if defined, indicates that the memcmp routine is available
- * to compare blocks of memory.
- */
-#define HAS_MEMCMP /**/
-
-/* HAS_MEMCPY:
- * This symbol, if defined, indicates that the memcpy routine is available
- * to copy blocks of memory.
- */
-#define HAS_MEMCPY /**/
-
-/* HAS_MEMMOVE:
- * This symbol, if defined, indicates that the memmove routine is available
- * to copy potentially overlapping blocks of memory. This should be used
- * only when HAS_SAFE_BCOPY is not defined. If neither is there, roll your
- * own version.
- */
-#define HAS_MEMMOVE /**/
-
-/* HAS_MEMSET:
- * This symbol, if defined, indicates that the memset routine is available
- * to set blocks of memory.
- */
-#define HAS_MEMSET /**/
-
-/* HAS_MKDIR:
- * This symbol, if defined, indicates that the mkdir routine is available
- * to create directories. Otherwise you should fork off a new process to
- * exec /bin/mkdir.
- */
-#define HAS_MKDIR /**/
-
-/* HAS_MKFIFO:
- * This symbol, if defined, indicates that the mkfifo routine is
- * available to create FIFOs. Otherwise, mknod should be able to
- * do it for you. However, if mkfifo is there, mknod might require
- * super-user privileges which mkfifo will not.
- */
-/*#define HAS_MKFIFO / **/
-
-/* HAS_MKTIME:
- * This symbol, if defined, indicates that the mktime routine is
- * available.
- */
-#define HAS_MKTIME /**/
-
-/* HAS_MSYNC:
- * This symbol, if defined, indicates that the msync system call is
- * available to synchronize a mapped file.
- */
-/*#define HAS_MSYNC / **/
-
-/* HAS_MUNMAP:
- * This symbol, if defined, indicates that the munmap system call is
- * available to unmap a region, usually mapped by mmap().
- */
-/*#define HAS_MUNMAP / **/
-
-/* HAS_NICE:
- * This symbol, if defined, indicates that the nice routine is
- * available.
- */
-/*#define HAS_NICE / **/
-
-/* HAS_PATHCONF:
- * This symbol, if defined, indicates that pathconf() is available
- * to determine file-system related limits and options associated
- * with a given filename.
- */
-/* HAS_FPATHCONF:
- * This symbol, if defined, indicates that pathconf() is available
- * to determine file-system related limits and options associated
- * with a given open file descriptor.
- */
-/*#define HAS_PATHCONF / **/
-/*#define HAS_FPATHCONF / **/
-
-/* HAS_PAUSE:
- * This symbol, if defined, indicates that the pause routine is
- * available to suspend a process until a signal is received.
- */
-#define HAS_PAUSE /**/
-
-/* HAS_PIPE:
- * This symbol, if defined, indicates that the pipe routine is
- * available to create an inter-process channel.
- */
-#define HAS_PIPE /**/
-
-/* HAS_POLL:
- * This symbol, if defined, indicates that the poll routine is
- * available to poll active file descriptors. Please check I_POLL and
- * I_SYS_POLL to know which header should be included as well.
- */
-/*#define HAS_POLL / **/
-
-/* HAS_READDIR:
- * This symbol, if defined, indicates that the readdir routine is
- * available to read directory entries. You may have to include
- * <dirent.h>. See I_DIRENT.
- */
-#define HAS_READDIR /**/
-
-/* HAS_SEEKDIR:
- * This symbol, if defined, indicates that the seekdir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_SEEKDIR /**/
-
-/* HAS_TELLDIR:
- * This symbol, if defined, indicates that the telldir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_TELLDIR /**/
-
-/* HAS_REWINDDIR:
- * This symbol, if defined, indicates that the rewinddir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_REWINDDIR /**/
-
-/* HAS_READLINK:
- * This symbol, if defined, indicates that the readlink routine is
- * available to read the value of a symbolic link.
- */
-/*#define HAS_READLINK / **/
-
-/* HAS_RENAME:
- * This symbol, if defined, indicates that the rename routine is available
- * to rename files. Otherwise you should do the unlink(), link(), unlink()
- * trick.
- */
-#define HAS_RENAME /**/
-
-/* HAS_RMDIR:
- * This symbol, if defined, indicates that the rmdir routine is
- * available to remove directories. Otherwise you should fork off a
- * new process to exec /bin/rmdir.
- */
-#define HAS_RMDIR /**/
-
-/* HAS_SELECT:
- * This symbol, if defined, indicates that the select routine is
- * available to select active file descriptors. If the timeout field
- * is used, <sys/time.h> may need to be included.
- */
-#define HAS_SELECT /**/
-
-/* HAS_SETEGID:
- * This symbol, if defined, indicates that the setegid routine is available
- * to change the effective gid of the current program.
- */
-/*#define HAS_SETEGID / **/
-
-/* HAS_SETEUID:
- * This symbol, if defined, indicates that the seteuid routine is available
- * to change the effective uid of the current program.
- */
-/*#define HAS_SETEUID / **/
-
-/* HAS_SETGROUPS:
- * This symbol, if defined, indicates that the setgroups() routine is
- * available to set the list of process groups. If unavailable, multiple
- * groups are probably not supported.
- */
-/*#define HAS_SETGROUPS / **/
-
-/* HAS_SETLINEBUF:
- * This symbol, if defined, indicates that the setlinebuf routine is
- * available to change stderr or stdout from block-buffered or unbuffered
- * to a line-buffered mode.
- */
-/*#define HAS_SETLINEBUF / **/
-
-/* HAS_SETLOCALE:
- * This symbol, if defined, indicates that the setlocale routine is
- * available to handle locale-specific ctype implementations.
- */
-#define HAS_SETLOCALE /**/
-
-/* HAS_SETPGID:
- * This symbol, if defined, indicates that the setpgid(pid, gpid)
- * routine is available to set process group ID.
- */
-/*#define HAS_SETPGID / **/
-
-/* HAS_SETPGRP2:
- * This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
- * routine is available to set the current process group.
- */
-/*#define HAS_SETPGRP2 / **/
-
-/* HAS_SETPRIORITY:
- * This symbol, if defined, indicates that the setpriority routine is
- * available to set a process's priority.
- */
-/*#define HAS_SETPRIORITY / **/
-
-/* HAS_SETREGID:
- * This symbol, if defined, indicates that the setregid routine is
- * available to change the real and effective gid of the current
- * process.
- */
-/* HAS_SETRESGID:
- * This symbol, if defined, indicates that the setresgid routine is
- * available to change the real, effective and saved gid of the current
- * process.
- */
-/*#define HAS_SETREGID / **/
-/*#define HAS_SETRESGID / **/
-
-/* HAS_SETREUID:
- * This symbol, if defined, indicates that the setreuid routine is
- * available to change the real and effective uid of the current
- * process.
- */
-/* HAS_SETRESUID:
- * This symbol, if defined, indicates that the setresuid routine is
- * available to change the real, effective and saved uid of the current
- * process.
- */
-/*#define HAS_SETREUID / **/
-/*#define HAS_SETRESUID / **/
-
-/* HAS_SETRGID:
- * This symbol, if defined, indicates that the setrgid routine is available
- * to change the real gid of the current program.
- */
-/*#define HAS_SETRGID / **/
-
-/* HAS_SETRUID:
- * This symbol, if defined, indicates that the setruid routine is available
- * to change the real uid of the current program.
- */
-/*#define HAS_SETRUID / **/
-
-/* HAS_SETSID:
- * This symbol, if defined, indicates that the setsid routine is
- * available to set the process group ID.
- */
-/*#define HAS_SETSID / **/
-
-/* HAS_STRCHR:
- * This symbol is defined to indicate that the strchr()/strrchr()
- * functions are available for string searching. If not, try the
- * index()/rindex() pair.
- */
-/* HAS_INDEX:
- * This symbol is defined to indicate that the index()/rindex()
- * functions are available for string searching.
- */
-#define HAS_STRCHR /**/
-/*#define HAS_INDEX / **/
-
-/* HAS_STRCOLL:
- * This symbol, if defined, indicates that the strcoll routine is
- * available to compare strings using collating information.
- */
-#define HAS_STRCOLL /**/
-
-/* HAS_STRTOD:
- * This symbol, if defined, indicates that the strtod routine is
- * available to provide better numeric string conversion than atof().
- */
-#define HAS_STRTOD /**/
-
-/* HAS_STRTOL:
- * This symbol, if defined, indicates that the strtol routine is available
- * to provide better numeric string conversion than atoi() and friends.
- */
-#define HAS_STRTOL /**/
-
-/* HAS_STRXFRM:
- * This symbol, if defined, indicates that the strxfrm() routine is
- * available to transform strings.
- */
-#define HAS_STRXFRM /**/
-
-/* HAS_SYMLINK:
- * This symbol, if defined, indicates that the symlink routine is available
- * to create symbolic links.
- */
-/*#define HAS_SYMLINK / **/
-
-/* HAS_SYSCALL:
- * This symbol, if defined, indicates that the syscall routine is
- * available to call arbitrary system calls. If undefined, that's tough.
- */
-/*#define HAS_SYSCALL / **/
-
-/* HAS_SYSCONF:
- * This symbol, if defined, indicates that sysconf() is available
- * to determine system related limits and options.
- */
-/*#define HAS_SYSCONF / **/
-
-/* HAS_SYSTEM:
- * This symbol, if defined, indicates that the system routine is
- * available to issue a shell command.
- */
-#define HAS_SYSTEM /**/
-
-/* HAS_TCGETPGRP:
- * This symbol, if defined, indicates that the tcgetpgrp routine is
- * available to get foreground process group ID.
- */
-/*#define HAS_TCGETPGRP / **/
-
-/* HAS_TCSETPGRP:
- * This symbol, if defined, indicates that the tcsetpgrp routine is
- * available to set foreground process group ID.
- */
-/*#define HAS_TCSETPGRP / **/
-
-/* HAS_TRUNCATE:
- * This symbol, if defined, indicates that the truncate routine is
- * available to truncate files.
- */
-/*#define HAS_TRUNCATE / **/
-
-/* HAS_TZNAME:
- * This symbol, if defined, indicates that the tzname[] array is
- * available to access timezone names.
- */
-#define HAS_TZNAME /**/
-
-/* HAS_UMASK:
- * This symbol, if defined, indicates that the umask routine is
- * available to set and get the value of the file creation mask.
- */
-#define HAS_UMASK /**/
-
-/* HAS_USLEEP:
- * This symbol, if defined, indicates that the usleep routine is
- * available to let the process sleep on a sub-second accuracy.
- */
-/*#define HAS_USLEEP / **/
-
-/* HAS_WAIT4:
- * This symbol, if defined, indicates that wait4() exists.
- */
-/*#define HAS_WAIT4 / **/
-
-/* HAS_WAITPID:
- * This symbol, if defined, indicates that the waitpid routine is
- * available to wait for child process.
- */
-#define HAS_WAITPID /**/
-
-/* HAS_WCSTOMBS:
- * This symbol, if defined, indicates that the wcstombs routine is
- * available to convert wide character strings to multibyte strings.
- */
-#define HAS_WCSTOMBS /**/
-
-/* HAS_WCTOMB:
- * This symbol, if defined, indicates that the wctomb routine is available
- * to covert a wide character to a multibyte.
- */
-#define HAS_WCTOMB /**/
-
-/* Groups_t:
- * This symbol holds the type used for the second argument to
- * getgroups() and setgroups(). Usually, this is the same as
- * gidtype (gid_t) , but sometimes it isn't.
- * It can be int, ushort, gid_t, etc...
- * It may be necessary to include <sys/types.h> to get any
- * typedef'ed information. This is only required if you have
- * getgroups() or setgroups()..
- */
-#if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS)
-#define Groups_t gid_t /* Type for 2nd arg to [sg]etgroups() */
-#endif
-
-/* I_ARPA_INET:
- * This symbol, if defined, indicates to the C program that it should
- * include <arpa/inet.h> to get inet_addr and friends declarations.
- */
-#define I_ARPA_INET /**/
-
-/* I_DBM:
- * This symbol, if defined, indicates that <dbm.h> exists and should
- * be included.
- */
-/* I_RPCSVC_DBM:
- * This symbol, if defined, indicates that <rpcsvc/dbm.h> exists and
- * should be included.
- */
-/*#define I_DBM / **/
-#define I_RPCSVC_DBM /**/
-
-/* I_DLFCN:
- * This symbol, if defined, indicates that <dlfcn.h> exists and should
- * be included.
- */
-#define I_DLFCN /**/
-
-/* I_FCNTL:
- * This manifest constant tells the C program to include <fcntl.h>.
- */
-#define I_FCNTL /**/
-
-/* I_FLOAT:
- * This symbol, if defined, indicates to the C program that it should
- * include <float.h> to get definition of symbols like DBL_MAX or
- * DBL_MIN, i.e. machine dependent floating point values.
- */
-#define I_FLOAT /**/
-
-/* I_GDBM:
- * This symbol, if defined, indicates that <gdbm.h> exists and should
- * be included.
- */
-/*#define I_GDBM / **/
-
-/* I_LIMITS:
- * This symbol, if defined, indicates to the C program that it should
- * include <limits.h> to get definition of symbols like WORD_BIT or
- * LONG_MAX, i.e. machine dependant limitations.
- */
-#define I_LIMITS /**/
-
-/* I_LOCALE:
- * This symbol, if defined, indicates to the C program that it should
- * include <locale.h>.
- */
-#define I_LOCALE /**/
-
-/* I_MATH:
- * This symbol, if defined, indicates to the C program that it should
- * include <math.h>.
- */
-#define I_MATH /**/
-
-/* I_MEMORY:
- * This symbol, if defined, indicates to the C program that it should
- * include <memory.h>.
- */
-/*#define I_MEMORY / **/
-
-/* I_NETINET_IN:
- * This symbol, if defined, indicates to the C program that it should
- * include <netinet/in.h>. Otherwise, you may try <sys/in.h>.
- */
-/*#define I_NETINET_IN / **/
-
-/* I_SFIO:
- * This symbol, if defined, indicates to the C program that it should
- * include <sfio.h>.
- */
-/*#define I_SFIO / **/
-
-/* I_STDDEF:
- * This symbol, if defined, indicates that <stddef.h> exists and should
- * be included.
- */
-#define I_STDDEF /**/
-
-/* I_STDLIB:
- * This symbol, if defined, indicates that <stdlib.h> exists and should
- * be included.
- */
-#define I_STDLIB /**/
-
-/* I_STRING:
- * This symbol, if defined, indicates to the C program that it should
- * include <string.h> (USG systems) instead of <strings.h> (BSD systems).
- */
-#define I_STRING /**/
-
-/* I_SYS_DIR:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/dir.h>.
- */
-/*#define I_SYS_DIR / **/
-
-/* I_SYS_FILE:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/file.h> to get definition of R_OK and friends.
- */
-/*#define I_SYS_FILE / **/
-
-/* I_SYS_IOCTL:
- * This symbol, if defined, indicates that <sys/ioctl.h> exists and should
- * be included. Otherwise, include <sgtty.h> or <termio.h>.
- */
-/* I_SYS_SOCKIO:
- * This symbol, if defined, indicates the <sys/sockio.h> should be included
- * to get socket ioctl options, like SIOCATMARK.
- */
-/*#define I_SYS_IOCTL / **/
-/*#define I_SYS_SOCKIO / **/
-
-/* I_SYS_NDIR:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/ndir.h>.
- */
-/*#define I_SYS_NDIR / **/
-
-/* I_SYS_PARAM:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/param.h>.
- */
-/*#define I_SYS_PARAM / **/
-
-/* I_SYS_POLL:
- * This symbol, if defined, indicates that the program may include
- * <sys/poll.h>. When I_POLL is also defined, it's probably safest
- * to only include <poll.h>.
- */
-/*#define I_SYS_POLL / **/
-
-/* I_SYS_RESOURCE:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/resource.h>.
- */
-/*#define I_SYS_RESOURCE / **/
-
-/* I_SYS_SELECT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/select.h> in order to get definition of struct timeval.
- */
-/*#define I_SYS_SELECT / **/
-
-/* I_SYS_STAT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/stat.h>.
- */
-#define I_SYS_STAT /**/
-
-/* I_SYS_TIMES:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/times.h>.
- */
-/*#define I_SYS_TIMES / **/
-
-/* I_SYS_TYPES:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/types.h>.
- */
-#define I_SYS_TYPES /**/
-
-/* I_SYS_UN:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/un.h> to get UNIX domain socket definitions.
- */
-/*#define I_SYS_UN / **/
-
-/* I_SYS_WAIT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/wait.h>.
- */
-/*#define I_SYS_WAIT / **/
-
-/* I_TERMIO:
- * This symbol, if defined, indicates that the program should include
- * <termio.h> rather than <sgtty.h>. There are also differences in
- * the ioctl() calls that depend on the value of this symbol.
- */
-/* I_TERMIOS:
- * This symbol, if defined, indicates that the program should include
- * the POSIX termios.h rather than sgtty.h or termio.h.
- * There are also differences in the ioctl() calls that depend on the
- * value of this symbol.
- */
-/* I_SGTTY:
- * This symbol, if defined, indicates that the program should include
- * <sgtty.h> rather than <termio.h>. There are also differences in
- * the ioctl() calls that depend on the value of this symbol.
- */
-/*#define I_TERMIO / **/
-/*#define I_TERMIOS / **/
-/*#define I_SGTTY / **/
-
-/* I_UNISTD:
- * This symbol, if defined, indicates to the C program that it should
- * include <unistd.h>.
- */
-/*#define I_UNISTD / **/
-
-/* I_UTIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <utime.h>.
- */
-#define I_UTIME /**/
-
-/* I_VALUES:
- * This symbol, if defined, indicates to the C program that it should
- * include <values.h> to get definition of symbols like MINFLOAT or
- * MAXLONG, i.e. machine dependant limitations. Probably, you
- * should use <limits.h> instead, if it is available.
- */
-/*#define I_VALUES / **/
-
-/* I_VFORK:
- * This symbol, if defined, indicates to the C program that it should
- * include vfork.h.
- */
-/*#define I_VFORK / **/
-
-/* CAN_VAPROTO:
- * This variable is defined on systems supporting prototype declaration
- * of functions with a variable number of arguments.
- */
-/* _V:
- * This macro is used to declare function parameters in prototypes for
- * functions with a variable number of parameters. Use double parentheses.
- * For example:
- *
- * int printf _V((char *fmt, ...));
- *
- * Remember to use the plain simple _() macro when declaring a function
- * with no variable number of arguments, since it might be possible to
- * have a non-effect _V() macro and still get prototypes via _().
- */
-/*#define CAN_VAPROTO / **/
-#ifdef CAN_VAPROTO
-#define _V(args) args
-#else
-#define _V(args) ()
-#endif
-
-/* INTSIZE:
- * This symbol contains the value of sizeof(int) so that the C
- * preprocessor can make decisions based on it.
- */
-/* LONGSIZE:
- * This symbol contains the value of sizeof(long) so that the C
- * preprocessor can make decisions based on it.
- */
-/* SHORTSIZE:
- * This symbol contains the value of sizeof(short) so that the C
- * preprocessor can make decisions based on it.
- */
-#define INTSIZE 4 /**/
-#define LONGSIZE 4 /**/
-#define SHORTSIZE 2 /**/
-
-/* MULTIARCH:
- * This symbol, if defined, signifies that the build
- * process will produce some binary files that are going to be
- * used in a cross-platform environment. This is the case for
- * example with the NeXT "fat" binaries that contain executables
- * for several CPUs.
- */
-/*#define MULTIARCH / **/
-
-/* HAS_QUAD:
- * This symbol, if defined, tells that there's a 64-bit integer type,
- * Quad_t, and its unsigned counterpar, Uquad_t. QUADKIND will be one
- * of QUAD_IS_INT, QUAD_IS_LONG, QUAD_IS_LONG_LONG, QUAD_IS_INT64_T,
- * or QUAD_IS___INT64.
- */
-#define HAS_QUAD /**/
-#ifdef HAS_QUAD
-# ifdef _MSC_VER
-# define Quad_t __int64 /**/
-# define Uquad_t unsigned __int64 /**/
-# define QUADKIND 5 /**/
-# else /* gcc presumably */
-# define Quad_t long long /**/
-# define Uquad_t unsigned long long /**/
-# define QUADKIND 3 /**/
-# endif
-# define QUAD_IS_INT 1
-# define QUAD_IS_LONG 2
-# define QUAD_IS_LONG_LONG 3
-# define QUAD_IS_INT64_T 4
-# define QUAD_IS___INT64 5
-#endif
-
-/* OSNAME:
- * This symbol contains the name 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.
- */
-/* 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 "MSWin32" /**/
-#define OSVERS "5.1" /**/
-
-/* ARCHLIB:
- * This variable, if defined, holds the name of the directory in
- * which the user wants to put architecture-dependent public
- * library files for perl5. It is most often a local directory
- * such as /usr/local/lib. Programs using this variable must be
- * prepared to deal with filename expansion. If ARCHLIB is the
- * same as PRIVLIB, it is not defined, since presumably the
- * program already searches PRIVLIB.
- */
-/* ARCHLIB_EXP:
- * This symbol contains the ~name expanded version of ARCHLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define ARCHLIB "c:\\perl\\lib" /**/
-/*#define ARCHLIB_EXP "" / **/
-
-/* ARCHNAME:
- * This symbol holds a string representing the architecture name.
- * It may be used to construct an architecture-dependant pathname
- * where library files may be held under a private library, for
- * instance.
- */
-#define ARCHNAME "MSWin32-x64" /**/
-
-/* BIN:
- * This symbol holds the path of the bin directory where the package will
- * be installed. Program must be prepared to deal with ~name substitution.
- */
-/* BIN_EXP:
- * This symbol is the filename expanded version of the BIN symbol, for
- * programs that do not want to deal with that at run-time.
- */
-/* PERL_RELOCATABLE_INC:
- * This symbol, if defined, indicates that we'd like to relocate entries
- * in @INC at run time based on the location of the perl binary.
- */
-#define BIN "c:\\perl\\bin" /**/
-#define BIN_EXP "c:\\perl\\bin" /**/
-#define PERL_RELOCATABLE_INC "undef" /**/
-
-/* CAT2:
- * This macro concatenates 2 tokens together.
- */
-/* STRINGIFY:
- * This macro surrounds its token with double quotes.
- */
-#if 42 == 1
-#define CAT2(a,b) a/**/b
-#undef STRINGIFY
-#define STRINGIFY(a) "a"
-#endif
-#if 42 == 42
-#define PeRl_CaTiFy(a, b) a ## b
-#define PeRl_StGiFy(a) #a
-#define CAT2(a,b) PeRl_CaTiFy(a,b)
-#define StGiFy(a) PeRl_StGiFy(a)
-#undef STRINGIFY
-#define STRINGIFY(a) PeRl_StGiFy(a)
-#endif
-#if 42 != 1 && 42 != 42
-#include "Bletch: How does this C preprocessor concatenate tokens?"
-#endif
-
-/* CPPSTDIN:
- * This symbol contains the first part of the string which will invoke
- * the C preprocessor on the standard input and produce to standard
- * output. Typical value of "cc -E" or "/lib/cpp", but it can also
- * call a wrapper. See CPPRUN.
- */
-/* CPPMINUS:
- * This symbol contains the second part of the string which will invoke
- * the C preprocessor on the standard input and produce to standard
- * output. This symbol will have the value "-" if CPPSTDIN needs a minus
- * to specify standard input, otherwise the value is "".
- */
-/* CPPRUN:
- * This symbol contains the string which will invoke a C preprocessor on
- * the standard input and produce to standard output. It needs to end
- * with CPPLAST, after all other preprocessor flags have been specified.
- * The main difference with CPPSTDIN is that this program will never be a
- * pointer to a shell wrapper, i.e. it will be empty if no preprocessor is
- * available directly to the user. Note that it may well be different from
- * the preprocessor used to compile the C program.
- */
-/* CPPLAST:
- * This symbol is intended to be used along with CPPRUN in the same manner
- * symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "".
- */
-#ifdef _MSC_VER
-# define CPPSTDIN "cppstdin"
-# define CPPMINUS ""
-# define CPPRUN "cl -nologo -E"
-#else
-# define CPPSTDIN "gcc -E"
-# define CPPMINUS "-"
-# define CPPRUN "gcc -E"
-#endif
-#define CPPLAST ""
-
-/* HAS_ACCESS:
- * This manifest constant lets the C program know that the access()
- * system call is available to check for accessibility using real UID/GID.
- * (always present on UNIX.)
- */
-#define HAS_ACCESS /**/
-
-/* HAS_ACCESSX:
- * This symbol, if defined, indicates that the accessx routine is
- * available to do extended access checks.
- */
-/*#define HAS_ACCESSX / **/
-
-/* HAS_ASCTIME_R:
- * This symbol, if defined, indicates that the asctime_r routine
- * is available to asctime re-entrantly.
- */
-/* ASCTIME_R_PROTO:
- * This symbol encodes the prototype of asctime_r.
- * It is zero if d_asctime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_asctime_r
- * is defined.
- */
-/*#define HAS_ASCTIME_R / **/
-#define ASCTIME_R_PROTO 0 /**/
-
-/* The HASATTRIBUTE_* defines are left undefined here because they vary from
- * one version of GCC to another. Instead, they are defined on the basis of
- * the compiler version in <perl.h>.
- */
-/* HASATTRIBUTE_FORMAT:
- * Can we handle GCC attribute for checking printf-style formats
- */
-/* PRINTF_FORMAT_NULL_OK:
- * Allows __printf__ format to be null when checking printf-style
- */
-/* HASATTRIBUTE_MALLOC:
- * Can we handle GCC attribute for malloc-style functions.
- */
-/* HASATTRIBUTE_NONNULL:
- * Can we handle GCC attribute for nonnull function parms.
- */
-/* HASATTRIBUTE_NORETURN:
- * Can we handle GCC attribute for functions that do not return
- */
-/* HASATTRIBUTE_PURE:
- * Can we handle GCC attribute for pure functions
- */
-/* HASATTRIBUTE_UNUSED:
- * Can we handle GCC attribute for unused variables and arguments
- */
-/* HASATTRIBUTE_DEPRECATED:
- * Can we handle GCC attribute for marking deprecated APIs
- */
-/* HASATTRIBUTE_WARN_UNUSED_RESULT:
- * Can we handle GCC attribute for warning on unused results
- */
-/*#define HASATTRIBUTE_DEPRECATED / **/
-/*#define HASATTRIBUTE_FORMAT / **/
-/*#define PRINTF_FORMAT_NULL_OK / **/
-/*#define HASATTRIBUTE_NORETURN / **/
-/*#define HASATTRIBUTE_MALLOC / **/
-/*#define HASATTRIBUTE_NONNULL / **/
-/*#define HASATTRIBUTE_PURE / **/
-/*#define HASATTRIBUTE_UNUSED / **/
-/*#define HASATTRIBUTE_WARN_UNUSED_RESULT / **/
-
-/* HASCONST:
- * This symbol, if defined, indicates that this C compiler knows about
- * the const type. There is no need to actually test for that symbol
- * within your programs. The mere use of the "const" keyword will
- * trigger the necessary tests.
- */
-#define HASCONST /**/
-#ifndef HASCONST
-#define const
-#endif
-
-/* HAS_CRYPT_R:
- * This symbol, if defined, indicates that the crypt_r routine
- * is available to crypt re-entrantly.
- */
-/* CRYPT_R_PROTO:
- * This symbol encodes the prototype of crypt_r.
- * It is zero if d_crypt_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_crypt_r
- * is defined.
- */
-/*#define HAS_CRYPT_R / **/
-#define CRYPT_R_PROTO 0 /**/
-
-/* HAS_CSH:
- * This symbol, if defined, indicates that the C-shell exists.
- */
-/* CSH:
- * This symbol, if defined, contains the full pathname of csh.
- */
-/*#define HAS_CSH / **/
-#ifdef HAS_CSH
-#define CSH "" /**/
-#endif
-
-/* HAS_CTERMID_R:
- * This symbol, if defined, indicates that the ctermid_r routine
- * is available to ctermid re-entrantly.
- */
-/* CTERMID_R_PROTO:
- * This symbol encodes the prototype of ctermid_r.
- * It is zero if d_ctermid_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ctermid_r
- * is defined.
- */
-/*#define HAS_CTERMID_R / **/
-#define CTERMID_R_PROTO 0 /**/
-
-/* HAS_CTIME_R:
- * This symbol, if defined, indicates that the ctime_r routine
- * is available to ctime re-entrantly.
- */
-/* CTIME_R_PROTO:
- * This symbol encodes the prototype of ctime_r.
- * It is zero if d_ctime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ctime_r
- * is defined.
- */
-/*#define HAS_CTIME_R / **/
-#define CTIME_R_PROTO 0 /**/
-
-/* HAS_DRAND48_R:
- * This symbol, if defined, indicates that the drand48_r routine
- * is available to drand48 re-entrantly.
- */
-/* DRAND48_R_PROTO:
- * This symbol encodes the prototype of drand48_r.
- * It is zero if d_drand48_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_drand48_r
- * is defined.
- */
-/*#define HAS_DRAND48_R / **/
-#define DRAND48_R_PROTO 0 /**/
-
-/* HAS_DRAND48_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the drand48() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern double drand48(void);
- */
-/*#define HAS_DRAND48_PROTO / **/
-
-/* HAS_EACCESS:
- * This symbol, if defined, indicates that the eaccess routine is
- * available to do extended access checks.
- */
-/*#define HAS_EACCESS / **/
-
-/* HAS_ENDGRENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for finalizing sequential access of the group database.
- */
-/*#define HAS_ENDGRENT / **/
-
-/* HAS_ENDGRENT_R:
- * This symbol, if defined, indicates that the endgrent_r routine
- * is available to endgrent re-entrantly.
- */
-/* ENDGRENT_R_PROTO:
- * This symbol encodes the prototype of endgrent_r.
- * It is zero if d_endgrent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endgrent_r
- * is defined.
- */
-/*#define HAS_ENDGRENT_R / **/
-#define ENDGRENT_R_PROTO 0 /**/
-
-/* HAS_ENDHOSTENT:
- * This symbol, if defined, indicates that the endhostent() routine is
- * available to close whatever was being used for host queries.
- */
-/*#define HAS_ENDHOSTENT / **/
-
-/* HAS_ENDHOSTENT_R:
- * This symbol, if defined, indicates that the endhostent_r routine
- * is available to endhostent re-entrantly.
- */
-/* ENDHOSTENT_R_PROTO:
- * This symbol encodes the prototype of endhostent_r.
- * It is zero if d_endhostent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endhostent_r
- * is defined.
- */
-/*#define HAS_ENDHOSTENT_R / **/
-#define ENDHOSTENT_R_PROTO 0 /**/
-
-/* HAS_ENDNETENT:
- * This symbol, if defined, indicates that the endnetent() routine is
- * available to close whatever was being used for network queries.
- */
-/*#define HAS_ENDNETENT / **/
-
-/* HAS_ENDNETENT_R:
- * This symbol, if defined, indicates that the endnetent_r routine
- * is available to endnetent re-entrantly.
- */
-/* ENDNETENT_R_PROTO:
- * This symbol encodes the prototype of endnetent_r.
- * It is zero if d_endnetent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endnetent_r
- * is defined.
- */
-/*#define HAS_ENDNETENT_R / **/
-#define ENDNETENT_R_PROTO 0 /**/
-
-/* HAS_ENDPROTOENT:
- * This symbol, if defined, indicates that the endprotoent() routine is
- * available to close whatever was being used for protocol queries.
- */
-/*#define HAS_ENDPROTOENT / **/
-
-/* HAS_ENDPROTOENT_R:
- * This symbol, if defined, indicates that the endprotoent_r routine
- * is available to endprotoent re-entrantly.
- */
-/* ENDPROTOENT_R_PROTO:
- * This symbol encodes the prototype of endprotoent_r.
- * It is zero if d_endprotoent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endprotoent_r
- * is defined.
- */
-/*#define HAS_ENDPROTOENT_R / **/
-#define ENDPROTOENT_R_PROTO 0 /**/
-
-/* HAS_ENDPWENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for finalizing sequential access of the passwd database.
- */
-/*#define HAS_ENDPWENT / **/
-
-/* HAS_ENDPWENT_R:
- * This symbol, if defined, indicates that the endpwent_r routine
- * is available to endpwent re-entrantly.
- */
-/* ENDPWENT_R_PROTO:
- * This symbol encodes the prototype of endpwent_r.
- * It is zero if d_endpwent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endpwent_r
- * is defined.
- */
-/*#define HAS_ENDPWENT_R / **/
-#define ENDPWENT_R_PROTO 0 /**/
-
-/* HAS_ENDSERVENT:
- * This symbol, if defined, indicates that the endservent() routine is
- * available to close whatever was being used for service queries.
- */
-/*#define HAS_ENDSERVENT / **/
-
-/* HAS_ENDSERVENT_R:
- * This symbol, if defined, indicates that the endservent_r routine
- * is available to endservent re-entrantly.
- */
-/* ENDSERVENT_R_PROTO:
- * This symbol encodes the prototype of endservent_r.
- * It is zero if d_endservent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endservent_r
- * is defined.
- */
-/*#define HAS_ENDSERVENT_R / **/
-#define ENDSERVENT_R_PROTO 0 /**/
-
-/* FLEXFILENAMES:
- * This symbol, if defined, indicates that the system supports filenames
- * longer than 14 characters.
- */
-#define FLEXFILENAMES /**/
-
-/* HAS_GETGRENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for sequential access of the group database.
- */
-/*#define HAS_GETGRENT / **/
-
-/* HAS_GETGRENT_R:
- * This symbol, if defined, indicates that the getgrent_r routine
- * is available to getgrent re-entrantly.
- */
-/* GETGRENT_R_PROTO:
- * This symbol encodes the prototype of getgrent_r.
- * It is zero if d_getgrent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrent_r
- * is defined.
- */
-/*#define HAS_GETGRENT_R / **/
-#define GETGRENT_R_PROTO 0 /**/
-
-/* HAS_GETGRGID_R:
- * This symbol, if defined, indicates that the getgrgid_r routine
- * is available to getgrgid re-entrantly.
- */
-/* GETGRGID_R_PROTO:
- * This symbol encodes the prototype of getgrgid_r.
- * It is zero if d_getgrgid_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrgid_r
- * is defined.
- */
-/*#define HAS_GETGRGID_R / **/
-#define GETGRGID_R_PROTO 0 /**/
-
-/* HAS_GETGRNAM_R:
- * This symbol, if defined, indicates that the getgrnam_r routine
- * is available to getgrnam re-entrantly.
- */
-/* GETGRNAM_R_PROTO:
- * This symbol encodes the prototype of getgrnam_r.
- * It is zero if d_getgrnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrnam_r
- * is defined.
- */
-/*#define HAS_GETGRNAM_R / **/
-#define GETGRNAM_R_PROTO 0 /**/
-
-/* HAS_GETHOSTBYADDR:
- * This symbol, if defined, indicates that the gethostbyaddr() routine is
- * available to look up hosts by their IP addresses.
- */
-#define HAS_GETHOSTBYADDR /**/
-
-/* HAS_GETHOSTBYNAME:
- * This symbol, if defined, indicates that the gethostbyname() routine is
- * available to look up host names in some data base or other.
- */
-#define HAS_GETHOSTBYNAME /**/
-
-/* HAS_GETHOSTENT:
- * This symbol, if defined, indicates that the gethostent() routine is
- * available to look up host names in some data base or another.
- */
-/*#define HAS_GETHOSTENT / **/
-
-/* HAS_GETHOSTNAME:
- * This symbol, if defined, indicates that the C program may use the
- * gethostname() routine to derive the host name. See also HAS_UNAME
- * and PHOSTNAME.
- */
-/* HAS_UNAME:
- * This symbol, if defined, indicates that the C program may use the
- * uname() routine to derive the host name. See also HAS_GETHOSTNAME
- * and PHOSTNAME.
- */
-/* PHOSTNAME:
- * This symbol, if defined, indicates the command to feed to the
- * popen() routine to derive the host name. See also HAS_GETHOSTNAME
- * and HAS_UNAME. Note that the command uses a fully qualified path,
- * so that it is safe even if used by a process with super-user
- * privileges.
- */
-/* HAS_PHOSTNAME:
- * This symbol, if defined, indicates that the C program may use the
- * contents of PHOSTNAME as a command to feed to the popen() routine
- * to derive the host name.
- */
-#define HAS_GETHOSTNAME /**/
-#define HAS_UNAME /**/
-/*#define HAS_PHOSTNAME / **/
-#ifdef HAS_PHOSTNAME
-#define PHOSTNAME "" /* How to get the host name */
-#endif
-
-/* HAS_GETHOSTBYADDR_R:
- * This symbol, if defined, indicates that the gethostbyaddr_r routine
- * is available to gethostbyaddr re-entrantly.
- */
-/* GETHOSTBYADDR_R_PROTO:
- * This symbol encodes the prototype of gethostbyaddr_r.
- * It is zero if d_gethostbyaddr_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gethostbyaddr_r
- * is defined.
- */
-/*#define HAS_GETHOSTBYADDR_R / **/
-#define GETHOSTBYADDR_R_PROTO 0 /**/
-
-/* HAS_GETHOSTBYNAME_R:
- * This symbol, if defined, indicates that the gethostbyname_r routine
- * is available to gethostbyname re-entrantly.
- */
-/* GETHOSTBYNAME_R_PROTO:
- * This symbol encodes the prototype of gethostbyname_r.
- * It is zero if d_gethostbyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gethostbyname_r
- * is defined.
- */
-/*#define HAS_GETHOSTBYNAME_R / **/
-#define GETHOSTBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETHOSTENT_R:
- * This symbol, if defined, indicates that the gethostent_r routine
- * is available to gethostent re-entrantly.
- */
-/* GETHOSTENT_R_PROTO:
- * This symbol encodes the prototype of gethostent_r.
- * It is zero if d_gethostent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gethostent_r
- * is defined.
- */
-/*#define HAS_GETHOSTENT_R / **/
-#define GETHOSTENT_R_PROTO 0 /**/
-
-/* HAS_GETHOST_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for gethostent(), gethostbyname(), and
- * gethostbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETHOST_PROTOS /**/
-
-/* HAS_GETLOGIN_R:
- * This symbol, if defined, indicates that the getlogin_r routine
- * is available to getlogin re-entrantly.
- */
-/* GETLOGIN_R_PROTO:
- * This symbol encodes the prototype of getlogin_r.
- * It is zero if d_getlogin_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getlogin_r
- * is defined.
- */
-/*#define HAS_GETLOGIN_R / **/
-#define GETLOGIN_R_PROTO 0 /**/
-
-/* HAS_GETNETBYADDR:
- * This symbol, if defined, indicates that the getnetbyaddr() routine is
- * available to look up networks by their IP addresses.
- */
-/*#define HAS_GETNETBYADDR / **/
-
-/* HAS_GETNETBYNAME:
- * This symbol, if defined, indicates that the getnetbyname() routine is
- * available to look up networks by their names.
- */
-/*#define HAS_GETNETBYNAME / **/
-
-/* HAS_GETNETENT:
- * This symbol, if defined, indicates that the getnetent() routine is
- * available to look up network names in some data base or another.
- */
-/*#define HAS_GETNETENT / **/
-
-/* HAS_GETNETBYADDR_R:
- * This symbol, if defined, indicates that the getnetbyaddr_r routine
- * is available to getnetbyaddr re-entrantly.
- */
-/* GETNETBYADDR_R_PROTO:
- * This symbol encodes the prototype of getnetbyaddr_r.
- * It is zero if d_getnetbyaddr_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getnetbyaddr_r
- * is defined.
- */
-/*#define HAS_GETNETBYADDR_R / **/
-#define GETNETBYADDR_R_PROTO 0 /**/
-
-/* HAS_GETNETBYNAME_R:
- * This symbol, if defined, indicates that the getnetbyname_r routine
- * is available to getnetbyname re-entrantly.
- */
-/* GETNETBYNAME_R_PROTO:
- * This symbol encodes the prototype of getnetbyname_r.
- * It is zero if d_getnetbyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getnetbyname_r
- * is defined.
- */
-/*#define HAS_GETNETBYNAME_R / **/
-#define GETNETBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETNETENT_R:
- * This symbol, if defined, indicates that the getnetent_r routine
- * is available to getnetent re-entrantly.
- */
-/* GETNETENT_R_PROTO:
- * This symbol encodes the prototype of getnetent_r.
- * It is zero if d_getnetent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getnetent_r
- * is defined.
- */
-/*#define HAS_GETNETENT_R / **/
-#define GETNETENT_R_PROTO 0 /**/
-
-/* HAS_GETNET_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getnetent(), getnetbyname(), and
- * getnetbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-/*#define HAS_GETNET_PROTOS / **/
-
-/* HAS_GETPROTOENT:
- * This symbol, if defined, indicates that the getprotoent() routine is
- * available to look up protocols in some data base or another.
- */
-/*#define HAS_GETPROTOENT / **/
-
-/* HAS_GETPGRP:
- * This symbol, if defined, indicates that the getpgrp routine is
- * available to get the current process group.
- */
-/* USE_BSD_GETPGRP:
- * This symbol, if defined, indicates that getpgrp needs one
- * arguments whereas USG one needs none.
- */
-/*#define HAS_GETPGRP / **/
-/*#define USE_BSD_GETPGRP / **/
-
-/* HAS_GETPROTOBYNAME:
- * This symbol, if defined, indicates that the getprotobyname()
- * routine is available to look up protocols by their name.
- */
-/* HAS_GETPROTOBYNUMBER:
- * This symbol, if defined, indicates that the getprotobynumber()
- * routine is available to look up protocols by their number.
- */
-#define HAS_GETPROTOBYNAME /**/
-#define HAS_GETPROTOBYNUMBER /**/
-
-/* HAS_GETPROTOBYNAME_R:
- * This symbol, if defined, indicates that the getprotobyname_r routine
- * is available to getprotobyname re-entrantly.
- */
-/* GETPROTOBYNAME_R_PROTO:
- * This symbol encodes the prototype of getprotobyname_r.
- * It is zero if d_getprotobyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getprotobyname_r
- * is defined.
- */
-/*#define HAS_GETPROTOBYNAME_R / **/
-#define GETPROTOBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETPROTOBYNUMBER_R:
- * This symbol, if defined, indicates that the getprotobynumber_r routine
- * is available to getprotobynumber re-entrantly.
- */
-/* GETPROTOBYNUMBER_R_PROTO:
- * This symbol encodes the prototype of getprotobynumber_r.
- * It is zero if d_getprotobynumber_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getprotobynumber_r
- * is defined.
- */
-/*#define HAS_GETPROTOBYNUMBER_R / **/
-#define GETPROTOBYNUMBER_R_PROTO 0 /**/
-
-/* HAS_GETPROTOENT_R:
- * This symbol, if defined, indicates that the getprotoent_r routine
- * is available to getprotoent re-entrantly.
- */
-/* GETPROTOENT_R_PROTO:
- * This symbol encodes the prototype of getprotoent_r.
- * It is zero if d_getprotoent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getprotoent_r
- * is defined.
- */
-/*#define HAS_GETPROTOENT_R / **/
-#define GETPROTOENT_R_PROTO 0 /**/
-
-/* HAS_GETPROTO_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getprotoent(), getprotobyname(), and
- * getprotobyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETPROTO_PROTOS /**/
-
-/* HAS_GETPWENT:
- * This symbol, if defined, indicates that the getpwent routine is
- * available for sequential access of the passwd database.
- * If this is not available, the older getpw() function may be available.
- */
-/*#define HAS_GETPWENT / **/
-
-/* HAS_GETPWENT_R:
- * This symbol, if defined, indicates that the getpwent_r routine
- * is available to getpwent re-entrantly.
- */
-/* GETPWENT_R_PROTO:
- * This symbol encodes the prototype of getpwent_r.
- * It is zero if d_getpwent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwent_r
- * is defined.
- */
-/*#define HAS_GETPWENT_R / **/
-#define GETPWENT_R_PROTO 0 /**/
-
-/* HAS_GETPWNAM_R:
- * This symbol, if defined, indicates that the getpwnam_r routine
- * is available to getpwnam re-entrantly.
- */
-/* GETPWNAM_R_PROTO:
- * This symbol encodes the prototype of getpwnam_r.
- * It is zero if d_getpwnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwnam_r
- * is defined.
- */
-/*#define HAS_GETPWNAM_R / **/
-#define GETPWNAM_R_PROTO 0 /**/
-
-/* HAS_GETPWUID_R:
- * This symbol, if defined, indicates that the getpwuid_r routine
- * is available to getpwuid re-entrantly.
- */
-/* GETPWUID_R_PROTO:
- * This symbol encodes the prototype of getpwuid_r.
- * It is zero if d_getpwuid_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwuid_r
- * is defined.
- */
-/*#define HAS_GETPWUID_R / **/
-#define GETPWUID_R_PROTO 0 /**/
-
-/* HAS_GETSERVENT:
- * This symbol, if defined, indicates that the getservent() routine is
- * available to look up network services in some data base or another.
- */
-/*#define HAS_GETSERVENT / **/
-
-/* HAS_GETSERVBYNAME_R:
- * This symbol, if defined, indicates that the getservbyname_r routine
- * is available to getservbyname re-entrantly.
- */
-/* GETSERVBYNAME_R_PROTO:
- * This symbol encodes the prototype of getservbyname_r.
- * It is zero if d_getservbyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservbyname_r
- * is defined.
- */
-/*#define HAS_GETSERVBYNAME_R / **/
-#define GETSERVBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETSERVBYPORT_R:
- * This symbol, if defined, indicates that the getservbyport_r routine
- * is available to getservbyport re-entrantly.
- */
-/* GETSERVBYPORT_R_PROTO:
- * This symbol encodes the prototype of getservbyport_r.
- * It is zero if d_getservbyport_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservbyport_r
- * is defined.
- */
-/*#define HAS_GETSERVBYPORT_R / **/
-#define GETSERVBYPORT_R_PROTO 0 /**/
-
-/* HAS_GETSERVENT_R:
- * This symbol, if defined, indicates that the getservent_r routine
- * is available to getservent re-entrantly.
- */
-/* GETSERVENT_R_PROTO:
- * This symbol encodes the prototype of getservent_r.
- * It is zero if d_getservent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservent_r
- * is defined.
- */
-/*#define HAS_GETSERVENT_R / **/
-#define GETSERVENT_R_PROTO 0 /**/
-
-/* HAS_GETSERV_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getservent(), getservbyname(), and
- * getservbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETSERV_PROTOS /**/
-
-/* HAS_GETSPNAM_R:
- * This symbol, if defined, indicates that the getspnam_r routine
- * is available to getspnam re-entrantly.
- */
-/* GETSPNAM_R_PROTO:
- * This symbol encodes the prototype of getspnam_r.
- * It is zero if d_getspnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getspnam_r
- * is defined.
- */
-/*#define HAS_GETSPNAM_R / **/
-#define GETSPNAM_R_PROTO 0 /**/
-
-/* HAS_GETSERVBYNAME:
- * This symbol, if defined, indicates that the getservbyname()
- * routine is available to look up services by their name.
- */
-/* HAS_GETSERVBYPORT:
- * This symbol, if defined, indicates that the getservbyport()
- * routine is available to look up services by their port.
- */
-#define HAS_GETSERVBYNAME /**/
-#define HAS_GETSERVBYPORT /**/
-
-/* HAS_GMTIME_R:
- * This symbol, if defined, indicates that the gmtime_r routine
- * is available to gmtime re-entrantly.
- */
-/* GMTIME_R_PROTO:
- * This symbol encodes the prototype of gmtime_r.
- * It is zero if d_gmtime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gmtime_r
- * is defined.
- */
-/*#define HAS_GMTIME_R / **/
-#define GMTIME_R_PROTO 0 /**/
-
-/* HAS_HTONL:
- * This symbol, if defined, indicates that the htonl() routine (and
- * friends htons() ntohl() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_HTONS:
- * This symbol, if defined, indicates that the htons() routine (and
- * friends htonl() ntohl() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_NTOHL:
- * This symbol, if defined, indicates that the ntohl() routine (and
- * friends htonl() htons() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_NTOHS:
- * This symbol, if defined, indicates that the ntohs() routine (and
- * friends htonl() htons() ntohl()) are available to do network
- * order byte swapping.
- */
-#define HAS_HTONL /**/
-#define HAS_HTONS /**/
-#define HAS_NTOHL /**/
-#define HAS_NTOHS /**/
-
-/* HAS_LOCALTIME_R:
- * This symbol, if defined, indicates that the localtime_r routine
- * is available to localtime re-entrantly.
- */
-/* LOCALTIME_R_NEEDS_TZSET:
- * Many libc's localtime_r implementations do not call tzset,
- * making them differ from localtime(), and making timezone
- * changes using \undef{TZ} without explicitly calling tzset
- * impossible. This symbol makes us call tzset before localtime_r
- */
-/*#define LOCALTIME_R_NEEDS_TZSET / **/
-#ifdef LOCALTIME_R_NEEDS_TZSET
-#define L_R_TZSET tzset(),
-#else
-#define L_R_TZSET
-#endif
-
-/* LOCALTIME_R_PROTO:
- * This symbol encodes the prototype of localtime_r.
- * It is zero if d_localtime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_localtime_r
- * is defined.
- */
-/*#define HAS_LOCALTIME_R / **/
-#define LOCALTIME_R_PROTO 0 /**/
-
-/* HAS_LONG_DOUBLE:
- * This symbol will be defined if the C compiler supports long
- * doubles.
- */
-/* LONG_DOUBLESIZE:
- * This symbol contains the size of a long double, so that the
- * C preprocessor can make decisions based on it. It is only
- * defined if the system supports long doubles.
- */
-#define HAS_LONG_DOUBLE /**/
-#ifdef HAS_LONG_DOUBLE
-# ifdef _MSC_VER
-# define LONG_DOUBLESIZE 8 /**/
-# else
-# define LONG_DOUBLESIZE 12 /**/
-# endif
-#endif
-
-/* HAS_LONG_LONG:
- * This symbol will be defined if the C compiler supports long long.
- */
-/* LONGLONGSIZE:
- * This symbol contains the size of a long long, so that the
- * C preprocessor can make decisions based on it. It is only
- * defined if the system supports long long.
- */
-#ifdef __GNUC__
-# define HAS_LONG_LONG /**/
-#endif
-#ifdef HAS_LONG_LONG
-#define LONGLONGSIZE 8 /**/
-#endif
-
-/* HAS_LSEEK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the lseek() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern off_t lseek(int, off_t, int);
- */
-#define HAS_LSEEK_PROTO /**/
-
-/* HAS_MEMCHR:
- * This symbol, if defined, indicates that the memchr routine is available
- * to locate characters within a C string.
- */
-#define HAS_MEMCHR /**/
-
-/* HAS_MKSTEMP:
- * This symbol, if defined, indicates that the mkstemp routine is
- * available to exclusively create and open a uniquely named
- * temporary file.
- */
-/*#define HAS_MKSTEMP / **/
-
-/* HAS_MMAP:
- * This symbol, if defined, indicates that the mmap system call is
- * available to map a file into memory.
- */
-/* Mmap_t:
- * This symbol holds the return type of the mmap() system call
- * (and simultaneously the type of the first argument).
- * Usually set to 'void *' or 'caddr_t'.
- */
-/*#define HAS_MMAP / **/
-#define Mmap_t void * /**/
-
-/* HAS_MSG:
- * This symbol, if defined, indicates that the entire msg*(2) library is
- * supported (IPC mechanism based on message queues).
- */
-/*#define HAS_MSG / **/
-
-/* OLD_PTHREAD_CREATE_JOINABLE:
- * This symbol, if defined, indicates how to create pthread
- * in joinable (aka undetached) state. NOTE: not defined
- * if pthread.h already has defined PTHREAD_CREATE_JOINABLE
- * (the new version of the constant).
- * If defined, known values are PTHREAD_CREATE_UNDETACHED
- * and __UNDETACHED.
- */
-/*#define OLD_PTHREAD_CREATE_JOINABLE / **/
-
-/* HAS_PTHREAD_ATFORK:
- * This symbol, if defined, indicates that the pthread_atfork routine
- * is available to setup fork handlers.
- */
-/*#define HAS_PTHREAD_ATFORK / **/
-
-/* HAS_PTHREAD_YIELD:
- * This symbol, if defined, indicates that the pthread_yield
- * routine is available to yield the execution of the current
- * thread. sched_yield is preferable to pthread_yield.
- */
-/* SCHED_YIELD:
- * This symbol defines the way to yield the execution of
- * the current thread. Known ways are sched_yield,
- * pthread_yield, and pthread_yield with NULL.
- */
-/* HAS_SCHED_YIELD:
- * This symbol, if defined, indicates that the sched_yield
- * routine is available to yield the execution of the current
- * thread. sched_yield is preferable to pthread_yield.
- */
-/*#define HAS_PTHREAD_YIELD / **/
-#define SCHED_YIELD /**/
-/*#define HAS_SCHED_YIELD / **/
-
-/* HAS_RANDOM_R:
- * This symbol, if defined, indicates that the random_r routine
- * is available to random re-entrantly.
- */
-/* RANDOM_R_PROTO:
- * This symbol encodes the prototype of random_r.
- * It is zero if d_random_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_random_r
- * is defined.
- */
-/*#define HAS_RANDOM_R / **/
-#define RANDOM_R_PROTO 0 /**/
-
-/* HAS_READDIR64_R:
- * This symbol, if defined, indicates that the readdir64_r routine
- * is available to readdir64 re-entrantly.
- */
-/* READDIR64_R_PROTO:
- * This symbol encodes the prototype of readdir64_r.
- * It is zero if d_readdir64_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_readdir64_r
- * is defined.
- */
-/*#define HAS_READDIR64_R / **/
-#define READDIR64_R_PROTO 0 /**/
-
-/* HAS_READDIR_R:
- * This symbol, if defined, indicates that the readdir_r routine
- * is available to readdir re-entrantly.
- */
-/* READDIR_R_PROTO:
- * This symbol encodes the prototype of readdir_r.
- * It is zero if d_readdir_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_readdir_r
- * is defined.
- */
-/*#define HAS_READDIR_R / **/
-#define READDIR_R_PROTO 0 /**/
-
-/* HAS_SEM:
- * This symbol, if defined, indicates that the entire sem*(2) library is
- * supported.
- */
-/*#define HAS_SEM / **/
-
-/* HAS_SETGRENT:
- * This symbol, if defined, indicates that the setgrent routine is
- * available for initializing sequential access of the group database.
- */
-/*#define HAS_SETGRENT / **/
-
-/* HAS_SETGRENT_R:
- * This symbol, if defined, indicates that the setgrent_r routine
- * is available to setgrent re-entrantly.
- */
-/* SETGRENT_R_PROTO:
- * This symbol encodes the prototype of setgrent_r.
- * It is zero if d_setgrent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setgrent_r
- * is defined.
- */
-/*#define HAS_SETGRENT_R / **/
-#define SETGRENT_R_PROTO 0 /**/
-
-/* HAS_SETHOSTENT:
- * This symbol, if defined, indicates that the sethostent() routine is
- * available.
- */
-/*#define HAS_SETHOSTENT / **/
-
-/* HAS_SETHOSTENT_R:
- * This symbol, if defined, indicates that the sethostent_r routine
- * is available to sethostent re-entrantly.
- */
-/* SETHOSTENT_R_PROTO:
- * This symbol encodes the prototype of sethostent_r.
- * It is zero if d_sethostent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_sethostent_r
- * is defined.
- */
-/*#define HAS_SETHOSTENT_R / **/
-#define SETHOSTENT_R_PROTO 0 /**/
-
-/* HAS_SETLOCALE_R:
- * This symbol, if defined, indicates that the setlocale_r routine
- * is available to setlocale re-entrantly.
- */
-/* SETLOCALE_R_PROTO:
- * This symbol encodes the prototype of setlocale_r.
- * It is zero if d_setlocale_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setlocale_r
- * is defined.
- */
-/*#define HAS_SETLOCALE_R / **/
-#define SETLOCALE_R_PROTO 0 /**/
-
-/* HAS_SETNETENT:
- * This symbol, if defined, indicates that the setnetent() routine is
- * available.
- */
-/*#define HAS_SETNETENT / **/
-
-/* HAS_SETNETENT_R:
- * This symbol, if defined, indicates that the setnetent_r routine
- * is available to setnetent re-entrantly.
- */
-/* SETNETENT_R_PROTO:
- * This symbol encodes the prototype of setnetent_r.
- * It is zero if d_setnetent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setnetent_r
- * is defined.
- */
-/*#define HAS_SETNETENT_R / **/
-#define SETNETENT_R_PROTO 0 /**/
-
-/* HAS_SETPROTOENT:
- * This symbol, if defined, indicates that the setprotoent() routine is
- * available.
- */
-/*#define HAS_SETPROTOENT / **/
-
-/* HAS_SETPGRP:
- * This symbol, if defined, indicates that the setpgrp routine is
- * available to set the current process group.
- */
-/* USE_BSD_SETPGRP:
- * This symbol, if defined, indicates that setpgrp needs two
- * arguments whereas USG one needs none. See also HAS_SETPGID
- * for a POSIX interface.
- */
-/*#define HAS_SETPGRP / **/
-/*#define USE_BSD_SETPGRP / **/
-
-/* HAS_SETPROTOENT_R:
- * This symbol, if defined, indicates that the setprotoent_r routine
- * is available to setprotoent re-entrantly.
- */
-/* SETPROTOENT_R_PROTO:
- * This symbol encodes the prototype of setprotoent_r.
- * It is zero if d_setprotoent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setprotoent_r
- * is defined.
- */
-/*#define HAS_SETPROTOENT_R / **/
-#define SETPROTOENT_R_PROTO 0 /**/
-
-/* HAS_SETPWENT:
- * This symbol, if defined, indicates that the setpwent routine is
- * available for initializing sequential access of the passwd database.
- */
-/*#define HAS_SETPWENT / **/
-
-/* HAS_SETPWENT_R:
- * This symbol, if defined, indicates that the setpwent_r routine
- * is available to setpwent re-entrantly.
- */
-/* SETPWENT_R_PROTO:
- * This symbol encodes the prototype of setpwent_r.
- * It is zero if d_setpwent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setpwent_r
- * is defined.
- */
-/*#define HAS_SETPWENT_R / **/
-#define SETPWENT_R_PROTO 0 /**/
-
-/* HAS_SETSERVENT:
- * This symbol, if defined, indicates that the setservent() routine is
- * available.
- */
-/*#define HAS_SETSERVENT / **/
-
-/* HAS_SETSERVENT_R:
- * This symbol, if defined, indicates that the setservent_r routine
- * is available to setservent re-entrantly.
- */
-/* SETSERVENT_R_PROTO:
- * This symbol encodes the prototype of setservent_r.
- * It is zero if d_setservent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setservent_r
- * is defined.
- */
-/*#define HAS_SETSERVENT_R / **/
-#define SETSERVENT_R_PROTO 0 /**/
-
-/* HAS_SETVBUF:
- * This symbol, if defined, indicates that the setvbuf routine is
- * available to change buffering on an open stdio stream.
- * to a line-buffered mode.
- */
-#define HAS_SETVBUF /**/
-
-/* HAS_SHM:
- * This symbol, if defined, indicates that the entire shm*(2) library is
- * supported.
- */
-/*#define HAS_SHM / **/
-
-/* Shmat_t:
- * This symbol holds the return type of the shmat() system call.
- * Usually set to 'void *' or 'char *'.
- */
-/* HAS_SHMAT_PROTOTYPE:
- * This symbol, if defined, indicates that the sys/shm.h includes
- * a prototype for shmat(). Otherwise, it is up to the program to
- * guess one. Shmat_t shmat(int, Shmat_t, int) is a good guess,
- * but not always right so it should be emitted by the program only
- * when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs.
- */
-#define Shmat_t void * /**/
-/*#define HAS_SHMAT_PROTOTYPE / **/
-
-/* HAS_SOCKET:
- * This symbol, if defined, indicates that the BSD socket interface is
- * supported.
- */
-/* HAS_SOCKETPAIR:
- * This symbol, if defined, indicates that the BSD socketpair() call is
- * supported.
- */
-/* HAS_MSG_CTRUNC:
- * This symbol, if defined, indicates that the MSG_CTRUNC is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_DONTROUTE:
- * This symbol, if defined, indicates that the MSG_DONTROUTE is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_OOB:
- * This symbol, if defined, indicates that the MSG_OOB is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_PEEK:
- * This symbol, if defined, indicates that the MSG_PEEK is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_PROXY:
- * This symbol, if defined, indicates that the MSG_PROXY is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_SCM_RIGHTS:
- * This symbol, if defined, indicates that the SCM_RIGHTS is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-#define HAS_SOCKET /**/
-/*#define HAS_SOCKETPAIR / **/
-/*#define HAS_MSG_CTRUNC / **/
-/*#define HAS_MSG_DONTROUTE / **/
-/*#define HAS_MSG_OOB / **/
-/*#define HAS_MSG_PEEK / **/
-/*#define HAS_MSG_PROXY / **/
-/*#define HAS_SCM_RIGHTS / **/
-
-/* HAS_SRAND48_R:
- * This symbol, if defined, indicates that the srand48_r routine
- * is available to srand48 re-entrantly.
- */
-/* SRAND48_R_PROTO:
- * This symbol encodes the prototype of srand48_r.
- * It is zero if d_srand48_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_srand48_r
- * is defined.
- */
-/*#define HAS_SRAND48_R / **/
-#define SRAND48_R_PROTO 0 /**/
-
-/* HAS_SRANDOM_R:
- * This symbol, if defined, indicates that the srandom_r routine
- * is available to srandom re-entrantly.
- */
-/* SRANDOM_R_PROTO:
- * This symbol encodes the prototype of srandom_r.
- * It is zero if d_srandom_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_srandom_r
- * is defined.
- */
-/*#define HAS_SRANDOM_R / **/
-#define SRANDOM_R_PROTO 0 /**/
-
-/* USE_STAT_BLOCKS:
- * This symbol is defined if this system has a stat structure declaring
- * st_blksize and st_blocks.
- */
-#ifndef USE_STAT_BLOCKS
-/*#define USE_STAT_BLOCKS / **/
-#endif
-
-/* USE_STRUCT_COPY:
- * This symbol, if defined, indicates that this C compiler knows how
- * to copy structures. If undefined, you'll need to use a block copy
- * routine of some sort instead.
- */
-#define USE_STRUCT_COPY /**/
-
-/* HAS_STRERROR:
- * This symbol, if defined, indicates that the strerror routine is
- * available to translate error numbers to strings. See the writeup
- * of Strerror() in this file before you try to define your own.
- */
-/* HAS_SYS_ERRLIST:
- * This symbol, if defined, indicates that the sys_errlist array is
- * available to translate error numbers to strings. The extern int
- * sys_nerr gives the size of that table.
- */
-/* Strerror:
- * This preprocessor symbol is defined as a macro if strerror() is
- * not available to translate error numbers to strings but sys_errlist[]
- * array is there.
- */
-#define HAS_STRERROR /**/
-#define HAS_SYS_ERRLIST /**/
-#define Strerror(e) strerror(e)
-
-/* HAS_STRERROR_R:
- * This symbol, if defined, indicates that the strerror_r routine
- * is available to strerror re-entrantly.
- */
-/* STRERROR_R_PROTO:
- * This symbol encodes the prototype of strerror_r.
- * It is zero if d_strerror_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_strerror_r
- * is defined.
- */
-/*#define HAS_STRERROR_R / **/
-#define STRERROR_R_PROTO 0 /**/
-
-/* HAS_STRTOUL:
- * This symbol, if defined, indicates that the strtoul routine is
- * available to provide conversion of strings to unsigned long.
- */
-#define HAS_STRTOUL /**/
-
-/* HAS_TIME:
- * This symbol, if defined, indicates that the time() routine exists.
- */
-/* Time_t:
- * This symbol holds the type returned by time(). It can be long,
- * or time_t on BSD sites (in which case <sys/types.h> should be
- * included).
- */
-#define HAS_TIME /**/
-#define Time_t time_t /* Time type */
-
-/* HAS_TIMES:
- * This symbol, if defined, indicates that the times() routine exists.
- * Note that this became obsolete on some systems (SUNOS), which now
- * use getrusage(). It may be necessary to include <sys/times.h>.
- */
-#define HAS_TIMES /**/
-
-/* HAS_TMPNAM_R:
- * This symbol, if defined, indicates that the tmpnam_r routine
- * is available to tmpnam re-entrantly.
- */
-/* TMPNAM_R_PROTO:
- * This symbol encodes the prototype of tmpnam_r.
- * It is zero if d_tmpnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_tmpnam_r
- * is defined.
- */
-/*#define HAS_TMPNAM_R / **/
-#define TMPNAM_R_PROTO 0 /**/
-
-/* HAS_TTYNAME_R:
- * This symbol, if defined, indicates that the ttyname_r routine
- * is available to ttyname re-entrantly.
- */
-/* TTYNAME_R_PROTO:
- * This symbol encodes the prototype of ttyname_r.
- * It is zero if d_ttyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ttyname_r
- * is defined.
- */
-/*#define HAS_TTYNAME_R / **/
-#define TTYNAME_R_PROTO 0 /**/
-
-/* HAS_UNION_SEMUN:
- * This symbol, if defined, indicates that the union semun is
- * defined by including <sys/sem.h>. If not, the user code
- * probably needs to define it as:
- * union semun {
- * int val;
- * struct semid_ds *buf;
- * unsigned short *array;
- * }
- */
-/* USE_SEMCTL_SEMUN:
- * This symbol, if defined, indicates that union semun is
- * used for semctl IPC_STAT.
- */
-/* USE_SEMCTL_SEMID_DS:
- * This symbol, if defined, indicates that struct semid_ds * is
- * used for semctl IPC_STAT.
- */
-#define HAS_UNION_SEMUN /**/
-/*#define USE_SEMCTL_SEMUN / **/
-/*#define USE_SEMCTL_SEMID_DS / **/
-
-/* HAS_VFORK:
- * This symbol, if defined, indicates that vfork() exists.
- */
-/*#define HAS_VFORK / **/
-
-/* HAS_PSEUDOFORK:
- * This symbol, if defined, indicates that an emulation of the
- * fork routine is available.
- */
-/*#define HAS_PSEUDOFORK / **/
-
-/* Signal_t:
- * This symbol's value is either "void" or "int", corresponding to the
- * appropriate return type of a signal handler. Thus, you can declare
- * a signal handler using "Signal_t (*handler)()", and define the
- * handler using "Signal_t handler(sig)".
- */
-#define Signal_t void /* Signal handler's return type */
-
-/* HASVOLATILE:
- * This symbol, if defined, indicates that this C compiler knows about
- * the volatile declaration.
- */
-#define HASVOLATILE /**/
-#ifndef HASVOLATILE
-#define volatile
-#endif
-
-/* Fpos_t:
- * This symbol holds the type used to declare file positions in libc.
- * It can be fpos_t, long, uint, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Fpos_t fpos_t /* File position type */
-
-/* Gid_t_f:
- * This symbol defines the format string used for printing a Gid_t.
- */
-#define Gid_t_f "ld" /**/
-
-/* Gid_t_sign:
- * This symbol holds the signedess of a Gid_t.
- * 1 for unsigned, -1 for signed.
- */
-#define Gid_t_sign -1 /* GID sign */
-
-/* Gid_t_size:
- * This symbol holds the size of a Gid_t in bytes.
- */
-#define Gid_t_size 4 /* GID size */
-
-/* Gid_t:
- * This symbol holds the return type of getgid() and the type of
- * argument to setrgid() and related functions. Typically,
- * it is the type of group ids in the kernel. It can be int, ushort,
- * gid_t, etc... It may be necessary to include <sys/types.h> to get
- * any typedef'ed information.
- */
-#define Gid_t gid_t /* Type for getgid(), etc... */
-
-/* I_DIRENT:
- * This symbol, if defined, indicates to the C program that it should
- * include <dirent.h>. Using this symbol also triggers the definition
- * of the Direntry_t define which ends up being 'struct dirent' or
- * 'struct direct' depending on the availability of <dirent.h>.
- */
-/* DIRNAMLEN:
- * This symbol, if defined, indicates to the C program that the length
- * of directory entry names is provided by a d_namlen field. Otherwise
- * you need to do strlen() on the d_name field.
- */
-/* Direntry_t:
- * This symbol is set to 'struct direct' or 'struct dirent' depending on
- * whether dirent is available or not. You should use this pseudo type to
- * portably declare your directory entries.
- */
-#define I_DIRENT /**/
-#define DIRNAMLEN /**/
-#define Direntry_t struct direct
-
-/* I_GRP:
- * This symbol, if defined, indicates to the C program that it should
- * include <grp.h>.
- */
-/* GRPASSWD:
- * This symbol, if defined, indicates to the C program that struct group
- * in <grp.h> contains gr_passwd.
- */
-/*#define I_GRP / **/
-/*#define GRPASSWD / **/
-
-/* I_MACH_CTHREADS:
- * This symbol, if defined, indicates to the C program that it should
- * include <mach/cthreads.h>.
- */
-/*#define I_MACH_CTHREADS / **/
-
-/* I_NDBM:
- * This symbol, if defined, indicates that <ndbm.h> exists and should
- * be included.
- */
-/* I_GDBMNDBM:
- * This symbol, if defined, indicates that <gdbm/ndbm.h> exists and should
- * be included. This was the location of the ndbm.h compatibility file
- * in RedHat 7.1.
- */
-/* I_GDBM_NDBM:
- * This symbol, if defined, indicates that <gdbm-ndbm.h> exists and should
- * be included. This is the location of the ndbm.h compatibility file
- * in Debian 4.0.
- */
-/* NDBM_H_USES_PROTOTYPES:
- * This symbol, if defined, indicates that <ndbm.h> uses real ANSI C
- * prototypes instead of K&R style function declarations without any
- * parameter information. While ANSI C prototypes are supported in C++,
- * K&R style function declarations will yield errors.
- */
-/* GDBMNDBM_H_USES_PROTOTYPES:
- * This symbol, if defined, indicates that <gdbm/ndbm.h> uses real ANSI C
- * prototypes instead of K&R style function declarations without any
- * parameter information. While ANSI C prototypes are supported in C++,
- * K&R style function declarations will yield errors.
- */
-/* GDBM_NDBM_H_USES_PROTOTYPES:
- * This symbol, if defined, indicates that <gdbm-ndbm.h> uses real ANSI C
- * prototypes instead of K&R style function declarations without any
- * parameter information. While ANSI C prototypes are supported in C++,
- * K&R style function declarations will yield errors.
- */
-/*#define I_NDBM / **/
-/*#define I_GDBMNDBM / **/
-/*#define I_GDBM_NDBM / **/
-/*#define NDBM_H_USES_PROTOTYPES / **/
-/*#define GDBMNDBM_H_USES_PROTOTYPES / **/
-/*#define GDBM_NDBM_H_USES_PROTOTYPES / **/
-
-/* I_NETDB:
- * This symbol, if defined, indicates that <netdb.h> exists and
- * should be included.
- */
-/*#define I_NETDB / **/
-
-/* I_NET_ERRNO:
- * This symbol, if defined, indicates that <net/errno.h> exists and
- * should be included.
- */
-/*#define I_NET_ERRNO / **/
-
-/* I_PTHREAD:
- * This symbol, if defined, indicates to the C program that it should
- * include <pthread.h>.
- */
-/*#define I_PTHREAD / **/
-
-/* I_PWD:
- * This symbol, if defined, indicates to the C program that it should
- * include <pwd.h>.
- */
-/* PWQUOTA:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_quota.
- */
-/* PWAGE:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_age.
- */
-/* PWCHANGE:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_change.
- */
-/* PWCLASS:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_class.
- */
-/* PWEXPIRE:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_expire.
- */
-/* PWCOMMENT:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_comment.
- */
-/* PWGECOS:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_gecos.
- */
-/* PWPASSWD:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_passwd.
- */
-/*#define I_PWD / **/
-/*#define PWQUOTA / **/
-/*#define PWAGE / **/
-/*#define PWCHANGE / **/
-/*#define PWCLASS / **/
-/*#define PWEXPIRE / **/
-/*#define PWCOMMENT / **/
-/*#define PWGECOS / **/
-/*#define PWPASSWD / **/
-
-/* I_SYS_ACCESS:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/access.h>.
- */
-/*#define I_SYS_ACCESS / **/
-
-/* I_SYS_SECURITY:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/security.h>.
- */
-/*#define I_SYS_SECURITY / **/
-
-/* I_SYSUIO:
- * This symbol, if defined, indicates that <sys/uio.h> exists and
- * should be included.
- */
-/*#define I_SYSUIO / **/
-
-/* I_STDARG:
- * This symbol, if defined, indicates that <stdarg.h> exists and should
- * be included.
- */
-/* I_VARARGS:
- * This symbol, if defined, indicates to the C program that it should
- * include <varargs.h>.
- */
-#define I_STDARG /**/
-/*#define I_VARARGS / **/
-
-/* PERL_INC_VERSION_LIST:
- * This variable specifies the list of subdirectories in over
- * which perl.c:incpush() and lib/lib.pm will automatically
- * search when adding directories to @INC, in a format suitable
- * for a C initialization string. See the inc_version_list entry
- * in Porting/Glossary for more details.
- */
-/*#define PERL_INC_VERSION_LIST 0 / **/
-
-/* INSTALL_USR_BIN_PERL:
- * This symbol, if defined, indicates that Perl is to be installed
- * also as /usr/bin/perl.
- */
-/*#define INSTALL_USR_BIN_PERL / **/
-
-/* Off_t:
- * This symbol holds the type used to declare offsets in the kernel.
- * It can be int, long, off_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-/* LSEEKSIZE:
- * This symbol holds the number of bytes used by the Off_t.
- */
-/* Off_t_size:
- * This symbol holds the number of bytes used by the Off_t.
- */
-#ifdef _MSC_VER
-# define Off_t __int64 /* <offset> type */
-#else
-# define Off_t long long /* <offset> type */
-#endif
-#define LSEEKSIZE 8 /* <offset> size */
-#define Off_t_size 8 /* <offset> size */
-
-/* Free_t:
- * This variable contains the return type of free(). It is usually
- * void, but occasionally int.
- */
-/* Malloc_t:
- * This symbol is the type of pointer returned by malloc and realloc.
- */
-#define Malloc_t void * /**/
-#define Free_t void /**/
-
-/* PERL_MALLOC_WRAP:
- * This symbol, if defined, indicates that we'd like malloc wrap checks.
- */
-#define PERL_MALLOC_WRAP /**/
-
-/* MYMALLOC:
- * This symbol, if defined, indicates that we're using our own malloc.
- */
-/*#define MYMALLOC / **/
-
-/* Mode_t:
- * This symbol holds the type used to declare file modes
- * for systems calls. It is usually mode_t, but may be
- * int or unsigned short. It may be necessary to include <sys/types.h>
- * to get any typedef'ed information.
- */
-#define Mode_t mode_t /* file mode parameter for system calls */
-
-/* Netdb_host_t:
- * This symbol holds the type used for the 1st argument
- * to gethostbyaddr().
- */
-/* Netdb_hlen_t:
- * This symbol holds the type used for the 2nd argument
- * to gethostbyaddr().
- */
-/* Netdb_name_t:
- * This symbol holds the type used for the argument to
- * gethostbyname().
- */
-/* Netdb_net_t:
- * This symbol holds the type used for the 1st argument to
- * getnetbyaddr().
- */
-#define Netdb_host_t char * /**/
-#define Netdb_hlen_t int /**/
-#define Netdb_name_t char * /**/
-#define Netdb_net_t long /**/
-
-/* PERL_OTHERLIBDIRS:
- * This variable contains a colon-separated set of paths for the perl
- * binary to search for additional library files or modules.
- * These directories will be tacked to the end of @INC.
- * Perl will automatically search below each path for version-
- * and architecture-specific directories. See PERL_INC_VERSION_LIST
- * for more details.
- */
-/*#define PERL_OTHERLIBDIRS "" / **/
-
-/* Pid_t:
- * This symbol holds the type used to declare process ids in the kernel.
- * It can be int, uint, pid_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Pid_t int /* PID type */
-
-/* PRIVLIB:
- * This symbol contains the name of the private library for this package.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world. The program
- * should be prepared to do ~ expansion.
- */
-/* PRIVLIB_EXP:
- * This symbol contains the ~name expanded version of PRIVLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define PRIVLIB "c:\\perl\\lib" /**/
-#define PRIVLIB_EXP (win32_get_privlib(PERL_VERSION_STRING)) /**/
-
-/* CAN_PROTOTYPE:
- * If defined, this macro indicates that the C compiler can handle
- * function prototypes.
- */
-/* _:
- * This macro is used to declare function parameters for folks who want
- * to make declarations with prototypes using a different style than
- * the above macros. Use double parentheses. For example:
- *
- * int main _((int argc, char *argv[]));
- */
-#define CAN_PROTOTYPE /**/
-#ifdef CAN_PROTOTYPE
-#define _(args) args
-#else
-#define _(args) ()
-#endif
-
-/* Select_fd_set_t:
- * This symbol holds the type used for the 2nd, 3rd, and 4th
- * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET
- * is defined, and 'int *' otherwise. This is only useful if you
- * have select(), of course.
- */
-#define Select_fd_set_t Perl_fd_set * /**/
-
-/* SH_PATH:
- * This symbol contains the full pathname to the shell used on this
- * on this system to execute Bourne shell scripts. Usually, this will be
- * /bin/sh, though it's possible that some systems will have /bin/ksh,
- * /bin/pdksh, /bin/ash, /bin/bash, or even something such as
- * D:/bin/sh.exe.
- */
-#define SH_PATH "cmd /x /c" /**/
-
-/* SIG_NAME:
- * This symbol contains a list of signal names in order of
- * signal number. This is intended
- * to be used as a static array initialization, like this:
- * char *sig_name[] = { SIG_NAME };
- * The signals in the list are separated with commas, and each signal
- * is surrounded by double quotes. There is no leading SIG in the signal
- * name, i.e. SIGQUIT is known as "QUIT".
- * Gaps in the signal numbers (up to NSIG) are filled in with NUMnn,
- * etc., where nn is the actual signal number (e.g. NUM37).
- * The signal number for sig_name[i] is stored in sig_num[i].
- * The last element is 0 to terminate the list with a NULL. This
- * corresponds to the 0 at the end of the sig_name_init list.
- * Note that this variable is initialized from the sig_name_init,
- * not from sig_name (which is unused).
- */
-/* SIG_NUM:
- * This symbol contains a list of signal numbers, in the same order as the
- * SIG_NAME list. It is suitable for static array initialization, as in:
- * int sig_num[] = { SIG_NUM };
- * The signals in the list are separated with commas, and the indices
- * within that list and the SIG_NAME list match, so it's easy to compute
- * the signal name from a number or vice versa at the price of a small
- * dynamic linear lookup.
- * Duplicates are allowed, but are moved to the end of the list.
- * The signal number corresponding to sig_name[i] is sig_number[i].
- * if (i < NSIG) then sig_number[i] == i.
- * The last element is 0, corresponding to the 0 at the end of
- * the sig_name_init list.
- * Note that this variable is initialized from the sig_num_init,
- * not from sig_num (which is unused).
- */
-/* SIG_SIZE:
- * This variable contains the number of elements of the SIG_NAME
- * and SIG_NUM arrays, excluding the final NULL entry.
- */
-#define SIG_NAME "ZERO", "HUP", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0 /**/
-#define SIG_NUM 0, 1, 2, 21, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 20, 0 /**/
-#define SIG_SIZE 27 /**/
-
-/* SITEARCH:
- * This symbol contains the name of the private library for this package.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world. The program
- * should be prepared to do ~ expansion.
- * The standard distribution will put nothing in this directory.
- * After perl has been installed, users may install their own local
- * architecture-dependent modules in this directory with
- * MakeMaker Makefile.PL
- * or equivalent. See INSTALL for details.
- */
-/* SITEARCH_EXP:
- * This symbol contains the ~name expanded version of SITEARCH, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define SITEARCH "c:\\perl\\site\\lib" /**/
-/*#define SITEARCH_EXP "" / **/
-
-/* SITELIB:
- * This symbol contains the name of the private library for this package.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world. The program
- * should be prepared to do ~ expansion.
- * The standard distribution will put nothing in this directory.
- * After perl has been installed, users may install their own local
- * architecture-independent modules in this directory with
- * MakeMaker Makefile.PL
- * or equivalent. See INSTALL for details.
- */
-/* SITELIB_EXP:
- * This symbol contains the ~name expanded version of SITELIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/* SITELIB_STEM:
- * This define is SITELIB_EXP with any trailing version-specific component
- * removed. The elements in inc_version_list (inc_version_list.U) can
- * be tacked onto this variable to generate a list of directories to search.
- */
-#define SITELIB "c:\\perl\\site\\lib" /**/
-#define SITELIB_EXP (win32_get_sitelib(PERL_VERSION_STRING)) /**/
-#define SITELIB_STEM "" /**/
-
-/* Size_t_size:
- * This symbol holds the size of a Size_t in bytes.
- */
-#define Size_t_size 8 /**/
-
-/* Size_t:
- * This symbol holds the type used to declare length parameters
- * for string functions. It is usually size_t, but may be
- * unsigned long, int, etc. It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Size_t size_t /* length paramater for string functions */
-
-/* Sock_size_t:
- * This symbol holds the type used for the size argument of
- * various socket calls (just the base type, not the pointer-to).
- */
-#define Sock_size_t int /**/
-
-/* STDCHAR:
- * This symbol is defined to be the type of char used in stdio.h.
- * It has the values "unsigned char" or "char".
- */
-#define STDCHAR char /**/
-
-/* Uid_t_f:
- * This symbol defines the format string used for printing a Uid_t.
- */
-#define Uid_t_f "ld" /**/
-
-/* Uid_t_sign:
- * This symbol holds the signedess of a Uid_t.
- * 1 for unsigned, -1 for signed.
- */
-#define Uid_t_sign -1 /* UID sign */
-
-/* Uid_t_size:
- * This symbol holds the size of a Uid_t in bytes.
- */
-#define Uid_t_size 4 /* UID size */
-
-/* Uid_t:
- * This symbol holds the type used to declare user ids in the kernel.
- * It can be int, ushort, uid_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Uid_t uid_t /* UID type */
-
-/* USE_ITHREADS:
- * This symbol, if defined, indicates that Perl should be built to
- * use the interpreter-based threading implementation.
- */
-/* USE_5005THREADS:
- * This symbol, if defined, indicates that Perl should be built to
- * use the 5.005-based threading implementation.
- * Only valid up to 5.8.x.
- */
-/* OLD_PTHREADS_API:
- * This symbol, if defined, indicates that Perl should
- * be built to use the old draft POSIX threads API.
- */
-/* USE_REENTRANT_API:
- * This symbol, if defined, indicates that Perl should
- * try to use the various _r versions of library functions.
- * This is extremely experimental.
- */
-/*#define USE_5005THREADS / **/
-/*#define USE_ITHREADS / **/
-#if defined(USE_5005THREADS) && !defined(USE_ITHREADS)
-#define USE_THREADS /* until src is revised*/
-#endif
-/*#define OLD_PTHREADS_API / **/
-/*#define USE_REENTRANT_API / **/
-
-/* PERL_VENDORARCH:
- * If defined, this symbol contains the name of a private library.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world.
- * It may have a ~ on the front.
- * The standard distribution will put nothing in this directory.
- * Vendors who distribute perl may wish to place their own
- * architecture-dependent modules and extensions in this directory with
- * MakeMaker Makefile.PL INSTALLDIRS=vendor
- * or equivalent. See INSTALL for details.
- */
-/* PERL_VENDORARCH_EXP:
- * This symbol contains the ~name expanded version of PERL_VENDORARCH, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/*#define PERL_VENDORARCH "" / **/
-/*#define PERL_VENDORARCH_EXP "" / **/
-
-/* PERL_VENDORLIB_EXP:
- * This symbol contains the ~name expanded version of VENDORLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/* PERL_VENDORLIB_STEM:
- * This define is PERL_VENDORLIB_EXP with any trailing version-specific component
- * removed. The elements in inc_version_list (inc_version_list.U) can
- * be tacked onto this variable to generate a list of directories to search.
- */
-/*#define PERL_VENDORLIB_EXP "" / **/
-/*#define PERL_VENDORLIB_STEM "" / **/
-
-/* VOIDFLAGS:
- * This symbol indicates how much support of the void type is given by this
- * compiler. What various bits mean:
- *
- * 1 = supports declaration of void
- * 2 = supports arrays of pointers to functions returning void
- * 4 = supports comparisons between pointers to void functions and
- * addresses of void functions
- * 8 = suports declaration of generic void pointers
- *
- * The package designer should define VOIDUSED to indicate the requirements
- * of the package. This can be done either by #defining VOIDUSED before
- * including config.h, or by defining defvoidused in Myinit.U. If the
- * latter approach is taken, only those flags will be tested. If the
- * level of void support necessary is not present, defines void to int.
- */
-#ifndef VOIDUSED
-#define VOIDUSED 15
-#endif
-#define VOIDFLAGS 15
-#if (VOIDFLAGS & VOIDUSED) != VOIDUSED
-#define void int /* is void to be avoided? */
-#define M_VOID /* Xenix strikes again */
-#endif
-
-/* USE_CROSS_COMPILE:
- * This symbol, if defined, indicates that Perl is being cross-compiled.
- */
-/* PERL_TARGETARCH:
- * This symbol, if defined, indicates the target architecture
- * Perl has been cross-compiled to. Undefined if not a cross-compile.
- */
-#ifndef USE_CROSS_COMPILE
-/*#define USE_CROSS_COMPILE / **/
-#define PERL_TARGETARCH "" /**/
-#endif
-
-/* MEM_ALIGNBYTES:
- * This symbol contains the number of bytes required to align a
- * double, or a long double when applicable. Usual values are 2,
- * 4 and 8. The default is eight, for safety.
- */
-#if defined(USE_CROSS_COMPILE) || defined(MULTIARCH)
-# define MEM_ALIGNBYTES 8
-#else
-#define MEM_ALIGNBYTES 8
-#endif
-
-/* BYTEORDER:
- * This symbol holds the hexadecimal constant defined in byteorder,
- * in a UV, i.e. 0x1234 or 0x4321 or 0x12345678, etc...
- * If the compiler supports cross-compiling or multiple-architecture
- * binaries (eg. on NeXT systems), use compiler-defined macros to
- * determine the byte order.
- * On NeXT 3.2 (and greater), you can build "Fat" Multiple Architecture
- * Binaries (MAB) on either big endian or little endian machines.
- * The endian-ness is available at compile-time. This only matters
- * for perl, where the config.h can be generated and installed on
- * one system, and used by a different architecture to build an
- * extension. Older versions of NeXT that might not have
- * defined either *_ENDIAN__ were all on Motorola 680x0 series,
- * so the default case (for NeXT) is big endian to catch them.
- * This might matter for NeXT 3.0.
- */
-#if defined(USE_CROSS_COMPILE) || defined(MULTIARCH)
-# ifdef __LITTLE_ENDIAN__
-# if LONGSIZE == 4
-# define BYTEORDER 0x1234
-# else
-# if LONGSIZE == 8
-# define BYTEORDER 0x12345678
-# endif
-# endif
-# else
-# ifdef __BIG_ENDIAN__
-# if LONGSIZE == 4
-# define BYTEORDER 0x4321
-# else
-# if LONGSIZE == 8
-# define BYTEORDER 0x87654321
-# endif
-# endif
-# endif
-# endif
-# if !defined(BYTEORDER) && (defined(NeXT) || defined(__NeXT__))
-# define BYTEORDER 0x4321
-# endif
-#else
-#define BYTEORDER 0x1234 /* large digits for MSB */
-#endif /* NeXT */
-
-/* CHARBITS:
- * This symbol contains the size of a char, so that the C preprocessor
- * can make decisions based on it.
- */
-#define CHARBITS 8 /**/
-
-/* CASTI32:
- * This symbol is defined if the C compiler can cast negative
- * or large floating point numbers to 32-bit ints.
- */
-#ifndef _MSC_VER
-# define CASTI32 /**/
-#endif
-
-/* CASTNEGFLOAT:
- * This symbol is defined if the C compiler can cast negative
- * numbers to unsigned longs, ints and shorts.
- */
-/* CASTFLAGS:
- * This symbol contains flags that say what difficulties the compiler
- * has casting odd floating values to unsigned long:
- * 0 = ok
- * 1 = couldn't cast < 0
- * 2 = couldn't cast >= 0x80000000
- * 4 = couldn't cast in argument expression list
- */
-#define CASTNEGFLOAT /**/
-#define CASTFLAGS 0 /**/
-
-/* VOID_CLOSEDIR:
- * This symbol, if defined, indicates that the closedir() routine
- * does not return a value.
- */
-/*#define VOID_CLOSEDIR / **/
-
-/* HAS_FD_SET:
- * This symbol, when defined, indicates presence of the fd_set typedef
- * in <sys/types.h>
- */
-#define HAS_FD_SET /**/
-
-/* Gconvert:
- * This preprocessor macro is defined to convert a floating point
- * number to a string without a trailing decimal point. This
- * emulates the behavior of sprintf("%g"), but is sometimes much more
- * efficient. If gconvert() is not available, but gcvt() drops the
- * trailing decimal point, then gcvt() is used. If all else fails,
- * a macro using sprintf("%g") is used. Arguments for the Gconvert
- * macro are: value, number of digits, whether trailing zeros should
- * be retained, and the output buffer.
- * The usual values are:
- * d_Gconvert='gconvert((x),(n),(t),(b))'
- * d_Gconvert='gcvt((x),(n),(b))'
- * d_Gconvert='sprintf((b),"%.*g",(n),(x))'
- * The last two assume trailing zeros should not be kept.
- */
-#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
-
-/* HAS_GETPAGESIZE:
- * This symbol, if defined, indicates that the getpagesize system call
- * is available to get system page size, which is the granularity of
- * many memory management calls.
- */
-/*#define HAS_GETPAGESIZE / **/
-
-/* HAS_GNULIBC:
- * This symbol, if defined, indicates to the C program that
- * the GNU C library is being used. A better check is to use
- * the __GLIBC__ and __GLIBC_MINOR__ symbols supplied with glibc.
- */
-/*#define HAS_GNULIBC / **/
-#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)
-# define _GNU_SOURCE
-#endif
-
-/* HAS_ISASCII:
- * This manifest constant lets the C program know that isascii
- * is available.
- */
-#define HAS_ISASCII /**/
-
-/* HAS_LCHOWN:
- * This symbol, if defined, indicates that the lchown routine is
- * available to operate on a symbolic link (instead of following the
- * link).
- */
-/*#define HAS_LCHOWN / **/
-
-/* HAS_OPEN3:
- * This manifest constant lets the C program know that the three
- * argument form of open(2) is available.
- */
-/*#define HAS_OPEN3 / **/
-
-/* HAS_SAFE_BCOPY:
- * This symbol, if defined, indicates that the bcopy routine is available
- * to copy potentially overlapping memory blocks. Normally, you should
- * probably use memmove() or memcpy(). If neither is defined, roll your
- * own version.
- */
-/*#define HAS_SAFE_BCOPY / **/
-
-/* HAS_SAFE_MEMCPY:
- * This symbol, if defined, indicates that the memcpy routine is available
- * to copy potentially overlapping memory blocks. If you need to
- * copy overlapping memory blocks, you should check HAS_MEMMOVE and
- * use memmove() instead, if available.
- */
-/*#define HAS_SAFE_MEMCPY / **/
-
-/* HAS_SANE_MEMCMP:
- * This symbol, if defined, indicates that the memcmp routine is available
- * and can be used to compare relative magnitudes of chars with their high
- * bits set. If it is not defined, roll your own version.
- */
-#define HAS_SANE_MEMCMP /**/
-
-/* HAS_SIGACTION:
- * This symbol, if defined, indicates that Vr4's sigaction() routine
- * is available.
- */
-/*#define HAS_SIGACTION / **/
-
-/* HAS_SIGSETJMP:
- * This variable indicates to the C program that the sigsetjmp()
- * routine is available to save the calling process's registers
- * and stack environment for later use by siglongjmp(), and
- * to optionally save the process's signal mask. See
- * Sigjmp_buf, Sigsetjmp, and Siglongjmp.
- */
-/* Sigjmp_buf:
- * This is the buffer type to be used with Sigsetjmp and Siglongjmp.
- */
-/* Sigsetjmp:
- * This macro is used in the same way as sigsetjmp(), but will invoke
- * traditional setjmp() if sigsetjmp isn't available.
- * See HAS_SIGSETJMP.
- */
-/* Siglongjmp:
- * This macro is used in the same way as siglongjmp(), but will invoke
- * traditional longjmp() if siglongjmp isn't available.
- * See HAS_SIGSETJMP.
- */
-/*#define HAS_SIGSETJMP / **/
-#ifdef HAS_SIGSETJMP
-#define Sigjmp_buf sigjmp_buf
-#define Sigsetjmp(buf,save_mask) sigsetjmp((buf),(save_mask))
-#define Siglongjmp(buf,retval) siglongjmp((buf),(retval))
-#else
-#define Sigjmp_buf jmp_buf
-#define Sigsetjmp(buf,save_mask) setjmp((buf))
-#define Siglongjmp(buf,retval) longjmp((buf),(retval))
-#endif
-
-/* HAS_STATIC_INLINE:
- * This symbol, if defined, indicates that the C compiler supports
- * C99-style static inline. That is, the function can't be called
- * from another translation unit.
- */
-/* PERL_STATIC_INLINE:
- * This symbol gives the best-guess incantation to use for static
- * inline functions. If HAS_STATIC_INLINE is defined, this will
- * give C99-style inline. If HAS_STATIC_INLINE is not defined,
- * this will give a plain 'static'. It will always be defined
- * to something that gives static linkage.
- * Possibilities include
- * static inline (c99)
- * static __inline__ (gcc -ansi)
- * static __inline (MSVC)
- * static _inline (older MSVC)
- * static (c89 compilers)
- */
-#ifdef _MSC_VER
-# define HAS_STATIC_INLINE /**/
-# define PERL_STATIC_INLINE static __inline /**/
-#else /* gcc presumably */
-# define HAS_STATIC_INLINE /**/
-# define PERL_STATIC_INLINE static __inline__ /**/
-#endif
-
-/* USE_STDIO_PTR:
- * This symbol is defined if the _ptr and _cnt fields (or similar)
- * of the stdio FILE structure can be used to access the stdio buffer
- * for a file handle. If this is defined, then the FILE_ptr(fp)
- * and FILE_cnt(fp) macros will also be defined and should be used
- * to access these fields.
- */
-/* FILE_ptr:
- * This macro is used to access the _ptr field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_PTR is defined.
- */
-/* STDIO_PTR_LVALUE:
- * This symbol is defined if the FILE_ptr macro can be used as an
- * lvalue.
- */
-/* FILE_cnt:
- * This macro is used to access the _cnt field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_PTR is defined.
- */
-/* STDIO_CNT_LVALUE:
- * This symbol is defined if the FILE_cnt macro can be used as an
- * lvalue.
- */
-/* STDIO_PTR_LVAL_SETS_CNT:
- * This symbol is defined if using the FILE_ptr macro as an lvalue
- * to increase the pointer by n has the side effect of decreasing the
- * value of File_cnt(fp) by n.
- */
-/* STDIO_PTR_LVAL_NOCHANGE_CNT:
- * This symbol is defined if using the FILE_ptr macro as an lvalue
- * to increase the pointer by n leaves File_cnt(fp) unchanged.
- */
-#define USE_STDIO_PTR /**/
-#ifdef USE_STDIO_PTR
-#define FILE_ptr(fp) ((fp)->_ptr)
-#define STDIO_PTR_LVALUE /**/
-#define FILE_cnt(fp) ((fp)->_cnt)
-#define STDIO_CNT_LVALUE /**/
-/*#define STDIO_PTR_LVAL_SETS_CNT / **/
-#define STDIO_PTR_LVAL_NOCHANGE_CNT /**/
-#endif
-
-/* USE_STDIO_BASE:
- * This symbol is defined if the _base field (or similar) of the
- * stdio FILE structure can be used to access the stdio buffer for
- * a file handle. If this is defined, then the FILE_base(fp) macro
- * will also be defined and should be used to access this field.
- * Also, the FILE_bufsiz(fp) macro will be defined and should be used
- * to determine the number of bytes in the buffer. USE_STDIO_BASE
- * will never be defined unless USE_STDIO_PTR is.
- */
-/* FILE_base:
- * This macro is used to access the _base field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_BASE is defined.
- */
-/* FILE_bufsiz:
- * This macro is used to determine the number of bytes in the I/O
- * buffer pointed to by _base field (or equivalent) of the FILE
- * structure pointed to its argument. This macro will always be defined
- * if USE_STDIO_BASE is defined.
- */
-#define USE_STDIO_BASE /**/
-#ifdef USE_STDIO_BASE
-#define FILE_base(fp) ((fp)->_base)
-#define FILE_bufsiz(fp) ((fp)->_cnt + (fp)->_ptr - (fp)->_base)
-#endif
-
-/* HAS_VPRINTF:
- * This symbol, if defined, indicates that the vprintf routine is available
- * to printf with a pointer to an argument list. If unavailable, you
- * may need to write your own, probably in terms of _doprnt().
- */
-/* USE_CHAR_VSPRINTF:
- * This symbol is defined if this system has vsprintf() returning type
- * (char*). The trend seems to be to declare it as "int vsprintf()". It
- * is up to the package author to declare vsprintf correctly based on the
- * symbol.
- */
-#define HAS_VPRINTF /**/
-/*#define USE_CHAR_VSPRINTF / **/
-
-/* DOUBLESIZE:
- * This symbol contains the size of a double, so that the C preprocessor
- * can make decisions based on it.
- */
-#define DOUBLESIZE 8 /**/
-
-/* I_TIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <time.h>.
- */
-/* I_SYS_TIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/time.h>.
- */
-/* I_SYS_TIME_KERNEL:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/time.h> with KERNEL defined.
- */
-/* HAS_TM_TM_ZONE:
- * This symbol, if defined, indicates to the C program that
- * the struct tm has a tm_zone field.
- */
-/* HAS_TM_TM_GMTOFF:
- * This symbol, if defined, indicates to the C program that
- * the struct tm has a tm_gmtoff field.
- */
-#define I_TIME /**/
-/*#define I_SYS_TIME / **/
-/*#define I_SYS_TIME_KERNEL / **/
-/*#define HAS_TM_TM_ZONE / **/
-/*#define HAS_TM_TM_GMTOFF / **/
-
-/* VAL_O_NONBLOCK:
- * This symbol is to be used during open() or fcntl(F_SETFL) to turn on
- * non-blocking I/O for the file descriptor. Note that there is no way
- * back, i.e. you cannot turn it blocking again this way. If you wish to
- * alternatively switch between blocking and non-blocking, use the
- * ioctl(FIOSNBIO) call instead, but that is not supported by all devices.
- */
-/* VAL_EAGAIN:
- * This symbol holds the errno error code set by read() when no data was
- * present on the non-blocking file descriptor.
- */
-/* RD_NODATA:
- * This symbol holds the return code from read() when no data is present
- * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is
- * not defined, then you can't distinguish between no data and EOF by
- * issuing a read(). You'll have to find another way to tell for sure!
- */
-/* EOF_NONBLOCK:
- * This symbol, if defined, indicates to the C program that a read() on
- * a non-blocking file descriptor will return 0 on EOF, and not the value
- * held in RD_NODATA (-1 usually, in that case!).
- */
-#define VAL_O_NONBLOCK O_NONBLOCK
-#define VAL_EAGAIN EAGAIN
-#define RD_NODATA -1
-#define EOF_NONBLOCK
-
-/* PTRSIZE:
- * This symbol contains the size of a pointer, so that the C preprocessor
- * can make decisions based on it. It will be sizeof(void *) if
- * the compiler supports (void *); otherwise it will be
- * sizeof(char *).
- */
-#define PTRSIZE 8 /**/
-
-/* Drand01:
- * This macro is to be used to generate uniformly distributed
- * random numbers over the range [0., 1.[. You may have to supply
- * an 'extern double drand48();' in your program since SunOS 4.1.3
- * doesn't provide you with anything relevant in its headers.
- * See HAS_DRAND48_PROTO.
- */
-/* Rand_seed_t:
- * This symbol defines the type of the argument of the
- * random seed function.
- */
-/* seedDrand01:
- * This symbol defines the macro to be used in seeding the
- * random number generator (see Drand01).
- */
-/* RANDBITS:
- * This symbol indicates how many bits are produced by the
- * function used to generate normalized random numbers.
- * Values include 15, 16, 31, and 48.
- */
-#define Drand01() (rand()/(double)((unsigned)1<<RANDBITS)) /**/
-#define Rand_seed_t unsigned /**/
-#define seedDrand01(x) srand((Rand_seed_t)x) /**/
-#define RANDBITS 15 /**/
-
-/* SSize_t:
- * This symbol holds the type used by functions that return
- * a count of bytes or an error condition. It must be a signed type.
- * It is usually ssize_t, but may be long or int, etc.
- * It may be necessary to include <sys/types.h> or <unistd.h>
- * to get any typedef'ed information.
- * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
- */
-#ifdef _MSC_VER
-# define SSize_t __int64 /* signed count of bytes */
-#else
-# define SSize_t long long /* signed count of bytes */
-#endif
-
-/* EBCDIC:
- * This symbol, if defined, indicates that this system uses
- * EBCDIC encoding.
- */
-/*#define EBCDIC / **/
-
-/* SETUID_SCRIPTS_ARE_SECURE_NOW:
- * This symbol, if defined, indicates that the bug that prevents
- * setuid scripts from being secure is not present in this kernel.
- */
-/* DOSUID:
- * This symbol, if defined, indicates that the C program should
- * check the script that it is executing for setuid/setgid bits, and
- * attempt to emulate setuid/setgid on systems that have disabled
- * setuid #! scripts because the kernel can't do it securely.
- * It is up to the package designer to make sure that this emulation
- * is done securely. Among other things, it should do an fstat on
- * the script it just opened to make sure it really is a setuid/setgid
- * script, it should make sure the arguments passed correspond exactly
- * to the argument on the #! line, and it should not trust any
- * subprocesses to which it must pass the filename rather than the
- * file descriptor of the script to be executed.
- */
-/*#define SETUID_SCRIPTS_ARE_SECURE_NOW / **/
-/*#define DOSUID / **/
-
-/* PERL_USE_DEVEL:
- * This symbol, if defined, indicates that Perl was configured with
- * -Dusedevel, to enable development features. This should not be
- * done for production builds.
- */
-/*#define PERL_USE_DEVEL / **/
-
-/* HAS_ATOLF:
- * This symbol, if defined, indicates that the atolf routine is
- * available to convert strings into long doubles.
- */
-/*#define HAS_ATOLF / **/
-
-/* HAS_ATOLL:
- * This symbol, if defined, indicates that the atoll routine is
- * available to convert strings into long longs.
- */
-#define HAS_ATOLL /**/
-
-/* HAS__FWALK:
- * This symbol, if defined, indicates that the _fwalk system call is
- * available to apply a function to all the file handles.
- */
-/*#define HAS__FWALK / **/
-
-/* HAS_AINTL:
- * This symbol, if defined, indicates that the aintl routine is
- * available. If copysignl is also present we can emulate modfl.
- */
-/*#define HAS_AINTL / **/
-
-/* HAS_BUILTIN_CHOOSE_EXPR:
- * Can we handle GCC builtin for compile-time ternary-like expressions
- */
-/* HAS_BUILTIN_EXPECT:
- * Can we handle GCC builtin for telling that certain values are more
- * likely
- */
-/*#define HAS_BUILTIN_EXPECT / **/
-/*#define HAS_BUILTIN_CHOOSE_EXPR / **/
-
-/* HAS_C99_VARIADIC_MACROS:
- * If defined, the compiler supports C99 variadic macros.
- */
-/*#define HAS_C99_VARIADIC_MACROS / **/
-
-/* HAS_CLASS:
- * This symbol, if defined, indicates that the class routine is
- * available to classify doubles. Available for example in AIX.
- * The returned values are defined in <float.h> and are:
- *
- * FP_PLUS_NORM Positive normalized, nonzero
- * FP_MINUS_NORM Negative normalized, nonzero
- * FP_PLUS_DENORM Positive denormalized, nonzero
- * FP_MINUS_DENORM Negative denormalized, nonzero
- * FP_PLUS_ZERO +0.0
- * FP_MINUS_ZERO -0.0
- * FP_PLUS_INF +INF
- * FP_MINUS_INF -INF
- * FP_NANS Signaling Not a Number (NaNS)
- * FP_NANQ Quiet Not a Number (NaNQ)
- */
-/*#define HAS_CLASS / **/
-
-/* HAS_CLEARENV:
- * This symbol, if defined, indicates that the clearenv () routine is
- * available for use.
- */
-/*#define HAS_CLEARENV / **/
-
-/* HAS_STRUCT_CMSGHDR:
- * This symbol, if defined, indicates that the struct cmsghdr
- * is supported.
- */
-/*#define HAS_STRUCT_CMSGHDR / **/
-
-/* HAS_COPYSIGNL:
- * This symbol, if defined, indicates that the copysignl routine is
- * available. If aintl is also present we can emulate modfl.
- */
-/*#define HAS_COPYSIGNL / **/
-
-/* USE_CPLUSPLUS:
- * This symbol, if defined, indicates that a C++ compiler was
- * used to compiled Perl and will be used to compile extensions.
- */
-/*#define USE_CPLUSPLUS / **/
-
-/* HAS_DBMINIT_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the dbminit() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int dbminit(char *);
- */
-/*#define HAS_DBMINIT_PROTO / **/
-
-/* HAS_DIR_DD_FD:
- * This symbol, if defined, indicates that the the DIR* dirstream
- * structure contains a member variable named dd_fd.
- */
-/*#define HAS_DIR_DD_FD / **/
-
-/* HAS_DIRFD:
- * This manifest constant lets the C program know that dirfd
- * is available.
- */
-/*#define HAS_DIRFD / **/
-
-/* DLSYM_NEEDS_UNDERSCORE:
- * This symbol, if defined, indicates that we need to prepend an
- * underscore to the symbol name before calling dlsym(). This only
- * makes sense if you *have* dlsym, which we will presume is the
- * case if you're using dl_dlopen.xs.
- */
-/*#define DLSYM_NEEDS_UNDERSCORE / **/
-
-/* HAS_FAST_STDIO:
- * This symbol, if defined, indicates that the "fast stdio"
- * is available to manipulate the stdio buffers directly.
- */
-#define HAS_FAST_STDIO /**/
-
-/* HAS_FCHDIR:
- * This symbol, if defined, indicates that the fchdir routine is
- * available to change directory using a file descriptor.
- */
-/*#define HAS_FCHDIR / **/
-
-/* FCNTL_CAN_LOCK:
- * This symbol, if defined, indicates that fcntl() can be used
- * for file locking. Normally on Unix systems this is defined.
- * It may be undefined on VMS.
- */
-/*#define FCNTL_CAN_LOCK / **/
-
-/* HAS_FINITE:
- * This symbol, if defined, indicates that the finite routine is
- * available to check whether a double is finite (non-infinity non-NaN).
- */
-/*#define HAS_FINITE / **/
-
-/* HAS_FINITEL:
- * This symbol, if defined, indicates that the finitel routine is
- * available to check whether a long double is finite
- * (non-infinity non-NaN).
- */
-/*#define HAS_FINITEL / **/
-
-/* HAS_FLOCK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the flock() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int flock(int, int);
- */
-#define HAS_FLOCK_PROTO /**/
-
-/* HAS_FP_CLASS:
- * This symbol, if defined, indicates that the fp_class routine is
- * available to classify doubles. Available for example in Digital UNIX.
- * The returned values are defined in <math.h> and are:
- *
- * FP_SNAN Signaling NaN (Not-a-Number)
- * FP_QNAN Quiet NaN (Not-a-Number)
- * FP_POS_INF +infinity
- * FP_NEG_INF -infinity
- * FP_POS_NORM Positive normalized
- * FP_NEG_NORM Negative normalized
- * FP_POS_DENORM Positive denormalized
- * FP_NEG_DENORM Negative denormalized
- * FP_POS_ZERO +0.0 (positive zero)
- * FP_NEG_ZERO -0.0 (negative zero)
- */
-/*#define HAS_FP_CLASS / **/
-
-/* HAS_FPCLASS:
- * This symbol, if defined, indicates that the fpclass routine is
- * available to classify doubles. Available for example in Solaris/SVR4.
- * The returned values are defined in <ieeefp.h> and are:
- *
- * FP_SNAN signaling NaN
- * FP_QNAN quiet NaN
- * FP_NINF negative infinity
- * FP_PINF positive infinity
- * FP_NDENORM negative denormalized non-zero
- * FP_PDENORM positive denormalized non-zero
- * FP_NZERO negative zero
- * FP_PZERO positive zero
- * FP_NNORM negative normalized non-zero
- * FP_PNORM positive normalized non-zero
- */
-/*#define HAS_FPCLASS / **/
-
-/* HAS_FPCLASSIFY:
- * This symbol, if defined, indicates that the fpclassify routine is
- * available to classify doubles. Available for example in HP-UX.
- * The returned values are defined in <math.h> and are
- *
- * FP_NORMAL Normalized
- * FP_ZERO Zero
- * FP_INFINITE Infinity
- * FP_SUBNORMAL Denormalized
- * FP_NAN NaN
- *
- */
-/*#define HAS_FPCLASSIFY / **/
-
-/* HAS_FPCLASSL:
- * This symbol, if defined, indicates that the fpclassl routine is
- * available to classify long doubles. Available for example in IRIX.
- * The returned values are defined in <ieeefp.h> and are:
- *
- * FP_SNAN signaling NaN
- * FP_QNAN quiet NaN
- * FP_NINF negative infinity
- * FP_PINF positive infinity
- * FP_NDENORM negative denormalized non-zero
- * FP_PDENORM positive denormalized non-zero
- * FP_NZERO negative zero
- * FP_PZERO positive zero
- * FP_NNORM negative normalized non-zero
- * FP_PNORM positive normalized non-zero
- */
-/*#define HAS_FPCLASSL / **/
-
-/* HAS_FPOS64_T:
- * This symbol will be defined if the C compiler supports fpos64_t.
- */
-/*#define HAS_FPOS64_T / **/
-
-/* HAS_FREXPL:
- * This symbol, if defined, indicates that the frexpl routine is
- * available to break a long double floating-point number into
- * a normalized fraction and an integral power of 2.
- */
-/*#define HAS_FREXPL / **/
-
-/* HAS_STRUCT_FS_DATA:
- * This symbol, if defined, indicates that the struct fs_data
- * to do statfs() is supported.
- */
-/*#define HAS_STRUCT_FS_DATA / **/
-
-/* HAS_FSEEKO:
- * This symbol, if defined, indicates that the fseeko routine is
- * available to fseek beyond 32 bits (useful for ILP32 hosts).
- */
-/*#define HAS_FSEEKO / **/
-
-/* HAS_FSTATFS:
- * This symbol, if defined, indicates that the fstatfs routine is
- * available to stat filesystems by file descriptors.
- */
-/*#define HAS_FSTATFS / **/
-
-/* HAS_FSYNC:
- * This symbol, if defined, indicates that the fsync routine is
- * available to write a file's modified data and attributes to
- * permanent storage.
- */
-/*#define HAS_FSYNC / **/
-
-/* HAS_FTELLO:
- * This symbol, if defined, indicates that the ftello routine is
- * available to ftell beyond 32 bits (useful for ILP32 hosts).
- */
-/*#define HAS_FTELLO / **/
-
-/* HAS_FUTIMES:
- * This symbol, if defined, indicates that the futimes routine is
- * available to change file descriptor time stamps with struct timevals.
- */
-/*#define HAS_FUTIMES / **/
-
-/* HAS_GETADDRINFO:
- * This symbol, if defined, indicates that the getaddrinfo() function
- * is available for use.
- */
-/*#define HAS_GETADDRINFO / **/
-
-/* HAS_GETCWD:
- * This symbol, if defined, indicates that the getcwd routine is
- * available to get the current working directory.
- */
-#define HAS_GETCWD /**/
-
-/* HAS_GETESPWNAM:
- * This symbol, if defined, indicates that the getespwnam system call is
- * available to retrieve enchanced (shadow) password entries by name.
- */
-/*#define HAS_GETESPWNAM / **/
-
-/* HAS_GETFSSTAT:
- * This symbol, if defined, indicates that the getfsstat routine is
- * available to stat filesystems in bulk.
- */
-/*#define HAS_GETFSSTAT / **/
-
-/* HAS_GETITIMER:
- * This symbol, if defined, indicates that the getitimer routine is
- * available to return interval timers.
- */
-/*#define HAS_GETITIMER / **/
-
-/* HAS_GETMNT:
- * This symbol, if defined, indicates that the getmnt routine is
- * available to get filesystem mount info by filename.
- */
-/*#define HAS_GETMNT / **/
-
-/* HAS_GETMNTENT:
- * This symbol, if defined, indicates that the getmntent routine is
- * available to iterate through mounted file systems to get their info.
- */
-/*#define HAS_GETMNTENT / **/
-
-/* HAS_GETNAMEINFO:
- * This symbol, if defined, indicates that the getnameinfo() function
- * is available for use.
- */
-/*#define HAS_GETNAMEINFO / **/
-
-/* HAS_GETPRPWNAM:
- * This symbol, if defined, indicates that the getprpwnam system call is
- * available to retrieve protected (shadow) password entries by name.
- */
-/*#define HAS_GETPRPWNAM / **/
-
-/* HAS_GETSPNAM:
- * This symbol, if defined, indicates that the getspnam system call is
- * available to retrieve SysV shadow password entries by name.
- */
-/*#define HAS_GETSPNAM / **/
-
-/* HAS_HASMNTOPT:
- * This symbol, if defined, indicates that the hasmntopt routine is
- * available to query the mount options of file systems.
- */
-/*#define HAS_HASMNTOPT / **/
-
-/* HAS_ILOGBL:
- * This symbol, if defined, indicates that the ilogbl routine is
- * available. If scalbnl is also present we can emulate frexpl.
- */
-/*#define HAS_ILOGBL / **/
-
-/* HAS_INETNTOP:
- * This symbol, if defined, indicates that the inet_ntop() function
- * is available to parse IPv4 and IPv6 strings.
- */
-/*#define HAS_INETNTOP / **/
-
-/* HAS_INETPTON:
- * This symbol, if defined, indicates that the inet_pton() function
- * is available to parse IPv4 and IPv6 strings.
- */
-/*#define HAS_INETPTON / **/
-
-/* HAS_INT64_T:
- * This symbol will defined if the C compiler supports int64_t.
- * Usually the <inttypes.h> needs to be included, but sometimes
- * <sys/types.h> is enough.
- */
-/*#define HAS_INT64_T / **/
-
-/* HAS_ISFINITE:
- * This symbol, if defined, indicates that the isfinite routine is
- * available to check whether a double is finite (non-infinity non-NaN).
- */
-/*#define HAS_ISFINITE / **/
-
-/* HAS_ISINF:
- * This symbol, if defined, indicates that the isinf routine is
- * available to check whether a double is an infinity.
- */
-/*#define HAS_ISINF / **/
-
-/* HAS_ISNAN:
- * This symbol, if defined, indicates that the isnan routine is
- * available to check whether a double is a NaN.
- */
-#define HAS_ISNAN /**/
-
-/* HAS_ISNANL:
- * This symbol, if defined, indicates that the isnanl routine is
- * available to check whether a long double is a NaN.
- */
-/*#define HAS_ISNANL / **/
-
-/* HAS_LDBL_DIG:
- * This symbol, if defined, indicates that this system's <float.h>
- * or <limits.h> defines the symbol LDBL_DIG, which is the number
- * of significant digits in a long double precision number. Unlike
- * for DBL_DIG, there's no good guess for LDBL_DIG if it is undefined.
- */
-#define HAS_LDBL_DIG /**/
-
-/* LIBM_LIB_VERSION:
- * This symbol, if defined, indicates that libm exports _LIB_VERSION
- * and that math.h defines the enum to manipulate it.
- */
-/*#define LIBM_LIB_VERSION / **/
-
-/* HAS_MADVISE:
- * This symbol, if defined, indicates that the madvise system call is
- * available to map a file into memory.
- */
-/*#define HAS_MADVISE / **/
-
-/* HAS_MALLOC_SIZE:
- * This symbol, if defined, indicates that the malloc_size
- * routine is available for use.
- */
-/*#define HAS_MALLOC_SIZE / **/
-
-/* HAS_MALLOC_GOOD_SIZE:
- * This symbol, if defined, indicates that the malloc_good_size
- * routine is available for use.
- */
-/*#define HAS_MALLOC_GOOD_SIZE / **/
-
-/* HAS_MKDTEMP:
- * This symbol, if defined, indicates that the mkdtemp routine is
- * available to exclusively create a uniquely named temporary directory.
- */
-/*#define HAS_MKDTEMP / **/
-
-/* HAS_MKSTEMPS:
- * This symbol, if defined, indicates that the mkstemps routine is
- * available to excluslvely create and open a uniquely named
- * (with a suffix) temporary file.
- */
-/*#define HAS_MKSTEMPS / **/
-
-/* HAS_MODFL:
- * This symbol, if defined, indicates that the modfl routine is
- * available to split a long double x into a fractional part f and
- * an integer part i such that |f| < 1.0 and (f + i) = x.
- */
-/* HAS_MODFL_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the modfl() function. Otherwise, it is up
- * to the program to supply one.
- */
-/* HAS_MODFL_POW32_BUG:
- * This symbol, if defined, indicates that the modfl routine is
- * broken for long doubles >= pow(2, 32).
- * For example from 4294967303.150000 one would get 4294967302.000000
- * and 1.150000. The bug has been seen in certain versions of glibc,
- * release 2.2.2 is known to be okay.
- */
-/*#define HAS_MODFL / **/
-/*#define HAS_MODFL_PROTO / **/
-/*#define HAS_MODFL_POW32_BUG / **/
-
-/* HAS_MPROTECT:
- * This symbol, if defined, indicates that the mprotect system call is
- * available to modify the access protection of a memory mapped file.
- */
-/*#define HAS_MPROTECT / **/
-
-/* HAS_STRUCT_MSGHDR:
- * This symbol, if defined, indicates that the struct msghdr
- * is supported.
- */
-/*#define HAS_STRUCT_MSGHDR / **/
-
-/* HAS_NL_LANGINFO:
- * This symbol, if defined, indicates that the nl_langinfo routine is
- * available to return local data. You will also need <langinfo.h>
- * and therefore I_LANGINFO.
- */
-/*#define HAS_NL_LANGINFO / **/
-
-/* HAS_OFF64_T:
- * This symbol will be defined if the C compiler supports off64_t.
- */
-/*#define HAS_OFF64_T / **/
-
-/* HAS_PROCSELFEXE:
- * This symbol is defined if PROCSELFEXE_PATH is a symlink
- * to the absolute pathname of the executing program.
- */
-/* PROCSELFEXE_PATH:
- * If HAS_PROCSELFEXE is defined this symbol is the filename
- * of the symbolic link pointing to the absolute pathname of
- * the executing program.
- */
-/*#define HAS_PROCSELFEXE / **/
-#if defined(HAS_PROCSELFEXE) && !defined(PROCSELFEXE_PATH)
-#define PROCSELFEXE_PATH /**/
-#endif
-
-/* HAS_PTHREAD_ATTR_SETSCOPE:
- * This symbol, if defined, indicates that the pthread_attr_setscope
- * system call is available to set the contention scope attribute of
- * a thread attribute object.
- */
-/*#define HAS_PTHREAD_ATTR_SETSCOPE / **/
-
-/* HAS_READV:
- * This symbol, if defined, indicates that the readv routine is
- * available to do gather reads. You will also need <sys/uio.h>
- * and there I_SYSUIO.
- */
-/*#define HAS_READV / **/
-
-/* HAS_RECVMSG:
- * This symbol, if defined, indicates that the recvmsg routine is
- * available to send structured socket messages.
- */
-/*#define HAS_RECVMSG / **/
-
-/* HAS_SBRK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the sbrk() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern void* sbrk(int);
- * extern void* sbrk(size_t);
- */
-/*#define HAS_SBRK_PROTO / **/
-
-/* HAS_SCALBNL:
- * This symbol, if defined, indicates that the scalbnl routine is
- * available. If ilogbl is also present we can emulate frexpl.
- */
-/*#define HAS_SCALBNL / **/
-
-/* HAS_SENDMSG:
- * This symbol, if defined, indicates that the sendmsg routine is
- * available to send structured socket messages.
- */
-/*#define HAS_SENDMSG / **/
-
-/* HAS_SETITIMER:
- * This symbol, if defined, indicates that the setitimer routine is
- * available to set interval timers.
- */
-/*#define HAS_SETITIMER / **/
-
-/* HAS_SETPROCTITLE:
- * This symbol, if defined, indicates that the setproctitle routine is
- * available to set process title.
- */
-/*#define HAS_SETPROCTITLE / **/
-
-/* USE_SFIO:
- * This symbol, if defined, indicates that sfio should
- * be used.
- */
-/*#define USE_SFIO / **/
-
-/* HAS_SIGNBIT:
- * This symbol, if defined, indicates that the signbit routine is
- * available to check if the given number has the sign bit set.
- * This should include correct testing of -0.0. This will only be set
- * if the signbit() routine is safe to use with the NV type used internally
- * in perl. Users should call Perl_signbit(), which will be #defined to
- * the system's signbit() function or macro if this symbol is defined.
- */
-/*#define HAS_SIGNBIT / **/
-
-/* HAS_SIGPROCMASK:
- * This symbol, if defined, indicates that the sigprocmask
- * system call is available to examine or change the signal mask
- * of the calling process.
- */
-/*#define HAS_SIGPROCMASK / **/
-
-/* USE_SITECUSTOMIZE:
- * This symbol, if defined, indicates that sitecustomize should
- * be used.
- */
-#ifndef USE_SITECUSTOMIZE
-/*#define USE_SITECUSTOMIZE / **/
-#endif
-
-/* HAS_SNPRINTF:
- * This symbol, if defined, indicates that the snprintf () library
- * function is available for use.
- */
-/* HAS_VSNPRINTF:
- * This symbol, if defined, indicates that the vsnprintf () library
- * function is available for use.
- */
-#define HAS_SNPRINTF /**/
-#define HAS_VSNPRINTF /**/
-
-/* HAS_SOCKATMARK:
- * This symbol, if defined, indicates that the sockatmark routine is
- * available to test whether a socket is at the out-of-band mark.
- */
-/*#define HAS_SOCKATMARK / **/
-
-/* HAS_SOCKATMARK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the sockatmark() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int sockatmark(int);
- */
-/*#define HAS_SOCKATMARK_PROTO / **/
-
-/* HAS_SOCKS5_INIT:
- * This symbol, if defined, indicates that the socks5_init routine is
- * available to initialize SOCKS 5.
- */
-/*#define HAS_SOCKS5_INIT / **/
-
-/* SPRINTF_RETURNS_STRLEN:
- * This variable defines whether sprintf returns the length of the string
- * (as per the ANSI spec). Some C libraries retain compatibility with
- * pre-ANSI C and return a pointer to the passed in buffer; for these
- * this variable will be undef.
- */
-#define SPRINTF_RETURNS_STRLEN /**/
-
-/* HAS_SQRTL:
- * This symbol, if defined, indicates that the sqrtl routine is
- * available to do long double square roots.
- */
-/*#define HAS_SQRTL / **/
-
-/* HAS_SETRESGID_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the setresgid() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern int setresgid(uid_t ruid, uid_t euid, uid_t suid);
- */
-/*#define HAS_SETRESGID_PROTO / **/
-
-/* HAS_SETRESUID_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the setresuid() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern int setresuid(uid_t ruid, uid_t euid, uid_t suid);
- */
-/*#define HAS_SETRESUID_PROTO / **/
-
-/* HAS_STRUCT_STATFS_F_FLAGS:
- * This symbol, if defined, indicates that the struct statfs
- * does have the f_flags member containing the mount flags of
- * the filesystem containing the file.
- * This kind of struct statfs is coming from <sys/mount.h> (BSD 4.3),
- * not from <sys/statfs.h> (SYSV). Older BSDs (like Ultrix) do not
- * have statfs() and struct statfs, they have ustat() and getmnt()
- * with struct ustat and struct fs_data.
- */
-/*#define HAS_STRUCT_STATFS_F_FLAGS / **/
-
-/* HAS_STRUCT_STATFS:
- * This symbol, if defined, indicates that the struct statfs
- * to do statfs() is supported.
- */
-/*#define HAS_STRUCT_STATFS / **/
-
-/* HAS_FSTATVFS:
- * This symbol, if defined, indicates that the fstatvfs routine is
- * available to stat filesystems by file descriptors.
- */
-/*#define HAS_FSTATVFS / **/
-
-/* HAS_STRFTIME:
- * This symbol, if defined, indicates that the strftime routine is
- * available to do time formatting.
- */
-#define HAS_STRFTIME /**/
-
-/* HAS_STRLCAT:
- * This symbol, if defined, indicates that the strlcat () routine is
- * available to do string concatenation.
- */
-/*#define HAS_STRLCAT / **/
-
-/* HAS_STRLCPY:
- * This symbol, if defined, indicates that the strlcpy () routine is
- * available to do string copying.
- */
-/*#define HAS_STRLCPY / **/
-
-/* HAS_STRTOLD:
- * This symbol, if defined, indicates that the strtold routine is
- * available to convert strings to long doubles.
- */
-/*#define HAS_STRTOLD / **/
-
-/* HAS_STRTOLL:
- * This symbol, if defined, indicates that the strtoll routine is
- * available to convert strings to long longs.
- */
-#define HAS_STRTOLL /**/
-
-/* HAS_STRTOQ:
- * This symbol, if defined, indicates that the strtoq routine is
- * available to convert strings to long longs (quads).
- */
-/*#define HAS_STRTOQ / **/
-
-/* HAS_STRTOULL:
- * This symbol, if defined, indicates that the strtoull routine is
- * available to convert strings to unsigned long longs.
- */
-#define HAS_STRTOULL /**/
-
-/* HAS_STRTOUQ:
- * This symbol, if defined, indicates that the strtouq routine is
- * available to convert strings to unsigned long longs (quads).
- */
-/*#define HAS_STRTOUQ / **/
-
-/* HAS_SYSCALL_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the syscall() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern int syscall(int, ...);
- * extern int syscall(long, ...);
- */
-/*#define HAS_SYSCALL_PROTO / **/
-
-/* HAS_TELLDIR_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the telldir() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern long telldir(DIR*);
- */
-#define HAS_TELLDIR_PROTO /**/
-
-/* HAS_CTIME64:
- * This symbol, if defined, indicates that the ctime64 () routine is
- * available to do the 64bit variant of ctime ()
- */
-/* HAS_LOCALTIME64:
- * This symbol, if defined, indicates that the localtime64 () routine is
- * available to do the 64bit variant of localtime ()
- */
-/* HAS_GMTIME64:
- * This symbol, if defined, indicates that the gmtime64 () routine is
- * available to do the 64bit variant of gmtime ()
- */
-/* HAS_MKTIME64:
- * This symbol, if defined, indicates that the mktime64 () routine is
- * available to do the 64bit variant of mktime ()
- */
-/* HAS_DIFFTIME64:
- * This symbol, if defined, indicates that the difftime64 () routine is
- * available to do the 64bit variant of difftime ()
- */
-/* HAS_ASCTIME64:
- * This symbol, if defined, indicates that the asctime64 () routine is
- * available to do the 64bit variant of asctime ()
- */
-/*#define HAS_CTIME64 / **/
-/*#define HAS_LOCALTIME64 / **/
-/*#define HAS_GMTIME64 / **/
-/*#define HAS_MKTIME64 / **/
-/*#define HAS_DIFFTIME64 / **/
-/*#define HAS_ASCTIME64 / **/
-
-/* HAS_TIMEGM:
- * This symbol, if defined, indicates that the timegm routine is
- * available to do the opposite of gmtime ()
- */
-/*#define HAS_TIMEGM / **/
-
-/* U32_ALIGNMENT_REQUIRED:
- * This symbol, if defined, indicates that you must access
- * character data through U32-aligned pointers.
- */
-#ifndef U32_ALIGNMENT_REQUIRED
-#define U32_ALIGNMENT_REQUIRED /**/
-#endif
-
-/* HAS_UALARM:
- * This symbol, if defined, indicates that the ualarm routine is
- * available to do alarms with microsecond granularity.
- */
-/*#define HAS_UALARM / **/
-
-/* HAS_UNORDERED:
- * This symbol, if defined, indicates that the unordered routine is
- * available to check whether two doubles are unordered
- * (effectively: whether either of them is NaN)
- */
-/*#define HAS_UNORDERED / **/
-
-/* HAS_UNSETENV:
- * This symbol, if defined, indicates that the unsetenv () routine is
- * available for use.
- */
-/*#define HAS_UNSETENV / **/
-
-/* HAS_USLEEP_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the usleep() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int usleep(useconds_t);
- */
-/*#define HAS_USLEEP_PROTO / **/
-
-/* HAS_USTAT:
- * This symbol, if defined, indicates that the ustat system call is
- * available to query file system statistics by dev_t.
- */
-/*#define HAS_USTAT / **/
-
-/* HAS_WRITEV:
- * This symbol, if defined, indicates that the writev routine is
- * available to do scatter writes.
- */
-/*#define HAS_WRITEV / **/
-
-/* USE_DYNAMIC_LOADING:
- * This symbol, if defined, indicates that dynamic loading of
- * some sort is available.
- */
-#define USE_DYNAMIC_LOADING /**/
-
-/* FFLUSH_NULL:
- * This symbol, if defined, tells that fflush(NULL) does flush
- * all pending stdio output.
- */
-/* FFLUSH_ALL:
- * This symbol, if defined, tells that to flush
- * all pending stdio output one must loop through all
- * the stdio file handles stored in an array and fflush them.
- * Note that if fflushNULL is defined, fflushall will not
- * even be probed for and will be left undefined.
- */
-#define FFLUSH_NULL /**/
-/*#define FFLUSH_ALL / **/
-
-/* I_ASSERT:
- * This symbol, if defined, indicates that <assert.h> exists and
- * could be included by the C program to get the assert() macro.
- */
-#define I_ASSERT /**/
-
-/* I_CRYPT:
- * This symbol, if defined, indicates that <crypt.h> exists and
- * should be included.
- */
-/*#define I_CRYPT / **/
-
-/* DB_Prefix_t:
- * This symbol contains the type of the prefix structure element
- * in the <db.h> header file. In older versions of DB, it was
- * int, while in newer ones it is u_int32_t.
- */
-/* DB_Hash_t:
- * This symbol contains the type of the prefix structure element
- * in the <db.h> header file. In older versions of DB, it was
- * int, while in newer ones it is size_t.
- */
-/* DB_VERSION_MAJOR_CFG:
- * This symbol, if defined, defines the major version number of
- * Berkeley DB found in the <db.h> header when Perl was configured.
- */
-/* DB_VERSION_MINOR_CFG:
- * This symbol, if defined, defines the minor version number of
- * Berkeley DB found in the <db.h> header when Perl was configured.
- * For DB version 1 this is always 0.
- */
-/* DB_VERSION_PATCH_CFG:
- * This symbol, if defined, defines the patch version number of
- * Berkeley DB found in the <db.h> header when Perl was configured.
- * For DB version 1 this is always 0.
- */
-#define DB_Hash_t int /**/
-#define DB_Prefix_t int /**/
-#define DB_VERSION_MAJOR_CFG 0 /**/
-#define DB_VERSION_MINOR_CFG 0 /**/
-#define DB_VERSION_PATCH_CFG 0 /**/
-
-/* I_FP:
- * This symbol, if defined, indicates that <fp.h> exists and
- * should be included.
- */
-/*#define I_FP / **/
-
-/* I_FP_CLASS:
- * This symbol, if defined, indicates that <fp_class.h> exists and
- * should be included.
- */
-/*#define I_FP_CLASS / **/
-
-/* I_IEEEFP:
- * This symbol, if defined, indicates that <ieeefp.h> exists and
- * should be included.
- */
-/*#define I_IEEEFP / **/
-
-/* I_INTTYPES:
- * This symbol, if defined, indicates to the C program that it should
- * include <inttypes.h>.
- */
-/*#define I_INTTYPES / **/
-
-/* I_LANGINFO:
- * This symbol, if defined, indicates that <langinfo.h> exists and
- * should be included.
- */
-/*#define I_LANGINFO / **/
-
-/* I_LIBUTIL:
- * This symbol, if defined, indicates that <libutil.h> exists and
- * should be included.
- */
-/*#define I_LIBUTIL / **/
-
-/* I_MALLOCMALLOC:
- * This symbol, if defined, indicates to the C program that it should
- * include <malloc/malloc.h>.
- */
-/*#define I_MALLOCMALLOC / **/
-
-/* I_MNTENT:
- * This symbol, if defined, indicates that <mntent.h> exists and
- * should be included.
- */
-/*#define I_MNTENT / **/
-
-/* I_NETINET_TCP:
- * This symbol, if defined, indicates to the C program that it should
- * include <netinet/tcp.h>.
- */
-/*#define I_NETINET_TCP / **/
-
-/* I_POLL:
- * This symbol, if defined, indicates that <poll.h> exists and
- * should be included. (see also HAS_POLL)
- */
-/*#define I_POLL / **/
-
-/* I_PROT:
- * This symbol, if defined, indicates that <prot.h> exists and
- * should be included.
- */
-/*#define I_PROT / **/
-
-/* I_SHADOW:
- * This symbol, if defined, indicates that <shadow.h> exists and
- * should be included.
- */
-/*#define I_SHADOW / **/
-
-/* I_SOCKS:
- * This symbol, if defined, indicates that <socks.h> exists and
- * should be included.
- */
-/*#define I_SOCKS / **/
-
-/* I_SUNMATH:
- * This symbol, if defined, indicates that <sunmath.h> exists and
- * should be included.
- */
-/*#define I_SUNMATH / **/
-
-/* I_SYSLOG:
- * This symbol, if defined, indicates that <syslog.h> exists and
- * should be included.
- */
-/*#define I_SYSLOG / **/
-
-/* I_SYSMODE:
- * This symbol, if defined, indicates that <sys/mode.h> exists and
- * should be included.
- */
-/*#define I_SYSMODE / **/
-
-/* I_SYS_MOUNT:
- * This symbol, if defined, indicates that <sys/mount.h> exists and
- * should be included.
- */
-/*#define I_SYS_MOUNT / **/
-
-/* I_SYS_STATFS:
- * This symbol, if defined, indicates that <sys/statfs.h> exists.
- */
-/*#define I_SYS_STATFS / **/
-
-/* I_SYS_STATVFS:
- * This symbol, if defined, indicates that <sys/statvfs.h> exists and
- * should be included.
- */
-/*#define I_SYS_STATVFS / **/
-
-/* I_SYSUTSNAME:
- * This symbol, if defined, indicates that <sys/utsname.h> exists and
- * should be included.
- */
-/*#define I_SYSUTSNAME / **/
-
-/* I_SYS_VFS:
- * This symbol, if defined, indicates that <sys/vfs.h> exists and
- * should be included.
- */
-/*#define I_SYS_VFS / **/
-
-/* I_USTAT:
- * This symbol, if defined, indicates that <ustat.h> exists and
- * should be included.
- */
-/*#define I_USTAT / **/
-
-/* PERL_PRIfldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'f') for output.
- */
-/* PERL_PRIgldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'g') for output.
- */
-/* PERL_PRIeldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'e') for output.
- */
-/* PERL_SCNfldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'f') for input.
- */
-/*#define PERL_PRIfldbl "f" / **/
-/*#define PERL_PRIgldbl "g" / **/
-/*#define PERL_PRIeldbl "e" / **/
-/*#define PERL_SCNfldbl "f" / **/
-
-/* PERL_MAD:
- * This symbol, if defined, indicates that the Misc Attribution
- * Declaration code should be conditionally compiled.
- */
-/*#define PERL_MAD / **/
-
-/* NEED_VA_COPY:
- * This symbol, if defined, indicates that the system stores
- * the variable argument list datatype, va_list, in a format
- * that cannot be copied by simple assignment, so that some
- * other means must be used when copying is required.
- * As such systems vary in their provision (or non-provision)
- * of copying mechanisms, handy.h defines a platform-
- * independent macro, Perl_va_copy(src, dst), to do the job.
- */
-/*#define NEED_VA_COPY / **/
-
-/* IVTYPE:
- * This symbol defines the C type used for Perl's IV.
- */
-/* UVTYPE:
- * This symbol defines the C type used for Perl's UV.
- */
-/* I8TYPE:
- * This symbol defines the C type used for Perl's I8.
- */
-/* U8TYPE:
- * This symbol defines the C type used for Perl's U8.
- */
-/* I16TYPE:
- * This symbol defines the C type used for Perl's I16.
- */
-/* U16TYPE:
- * This symbol defines the C type used for Perl's U16.
- */
-/* I32TYPE:
- * This symbol defines the C type used for Perl's I32.
- */
-/* U32TYPE:
- * This symbol defines the C type used for Perl's U32.
- */
-/* I64TYPE:
- * This symbol defines the C type used for Perl's I64.
- */
-/* U64TYPE:
- * This symbol defines the C type used for Perl's U64.
- */
-/* NVTYPE:
- * This symbol defines the C type used for Perl's NV.
- */
-/* IVSIZE:
- * This symbol contains the sizeof(IV).
- */
-/* UVSIZE:
- * This symbol contains the sizeof(UV).
- */
-/* I8SIZE:
- * This symbol contains the sizeof(I8).
- */
-/* U8SIZE:
- * This symbol contains the sizeof(U8).
- */
-/* I16SIZE:
- * This symbol contains the sizeof(I16).
- */
-/* U16SIZE:
- * This symbol contains the sizeof(U16).
- */
-/* I32SIZE:
- * This symbol contains the sizeof(I32).
- */
-/* U32SIZE:
- * This symbol contains the sizeof(U32).
- */
-/* I64SIZE:
- * This symbol contains the sizeof(I64).
- */
-/* U64SIZE:
- * This symbol contains the sizeof(U64).
- */
-/* NVSIZE:
- * This symbol contains the sizeof(NV).
- */
-/* NV_PRESERVES_UV:
- * This symbol, if defined, indicates that a variable of type NVTYPE
- * can preserve all the bits of a variable of type UVTYPE.
- */
-/* NV_PRESERVES_UV_BITS:
- * This symbol contains the number of bits a variable of type NVTYPE
- * can preserve of a variable of type UVTYPE.
- */
-/* NV_OVERFLOWS_INTEGERS_AT:
- * This symbol gives the largest integer value that NVs can hold. This
- * value + 1.0 cannot be stored accurately. It is expressed as constant
- * floating point expression to reduce the chance of decimale/binary
- * conversion issues. If it can not be determined, the value 0 is given.
- */
-/* NV_ZERO_IS_ALLBITS_ZERO:
- * This symbol, if defined, indicates that a variable of type NVTYPE
- * stores 0.0 in memory as all bits zero.
- */
-#ifdef _MSC_VER
-# define IVTYPE __int64 /**/
-# define UVTYPE unsigned __int64 /**/
-#else
-# define IVTYPE long long /**/
-# define UVTYPE unsigned long long /**/
-#endif
-#define I8TYPE char /**/
-#define U8TYPE unsigned char /**/
-#define I16TYPE short /**/
-#define U16TYPE unsigned short /**/
-#define I32TYPE long /**/
-#define U32TYPE unsigned long /**/
-#ifdef HAS_QUAD
-# ifdef _MSC_VER
-# define I64TYPE __int64 /**/
-# define U64TYPE unsigned __int64 /**/
-# else
-# define I64TYPE long long /**/
-# define U64TYPE unsigned long long /**/
-# endif
-#endif
-#define NVTYPE double /**/
-#define IVSIZE 8 /**/
-#define UVSIZE 8 /**/
-#define I8SIZE 1 /**/
-#define U8SIZE 1 /**/
-#define I16SIZE 2 /**/
-#define U16SIZE 2 /**/
-#define I32SIZE 4 /**/
-#define U32SIZE 4 /**/
-#ifdef HAS_QUAD
-#define I64SIZE 8 /**/
-#define U64SIZE 8 /**/
-#endif
-#define NVSIZE 8 /**/
-#undef NV_PRESERVES_UV
-#define NV_PRESERVES_UV_BITS 53
-#define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0
-#define NV_ZERO_IS_ALLBITS_ZERO
-#if UVSIZE == 8
-# ifdef BYTEORDER
-# if BYTEORDER == 0x1234
-# undef BYTEORDER
-# define BYTEORDER 0x12345678
-# else
-# if BYTEORDER == 0x4321
-# undef BYTEORDER
-# define BYTEORDER 0x87654321
-# endif
-# endif
-# endif
-#endif
-
-/* IVdf:
- * This symbol defines the format string used for printing a Perl IV
- * as a signed decimal integer.
- */
-/* UVuf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned decimal integer.
- */
-/* UVof:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned octal integer.
- */
-/* UVxf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned hexadecimal integer in lowercase abcdef.
- */
-/* UVXf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned hexadecimal integer in uppercase ABCDEF.
- */
-/* NVef:
- * This symbol defines the format string used for printing a Perl NV
- * using %e-ish floating point format.
- */
-/* NVff:
- * This symbol defines the format string used for printing a Perl NV
- * using %f-ish floating point format.
- */
-/* NVgf:
- * This symbol defines the format string used for printing a Perl NV
- * using %g-ish floating point format.
- */
-#define IVdf "I64d" /**/
-#define UVuf "I64u" /**/
-#define UVof "I64o" /**/
-#define UVxf "I64x" /**/
-#define UVXf "I64X" /**/
-#define NVef "e" /**/
-#define NVff "f" /**/
-#define NVgf "g" /**/
-
-/* SELECT_MIN_BITS:
- * This symbol holds the minimum number of bits operated by select.
- * That is, if you do select(n, ...), how many bits at least will be
- * cleared in the masks if some activity is detected. Usually this
- * is either n or 32*ceil(n/32), especially many little-endians do
- * the latter. This is only useful if you have select(), naturally.
- */
-#define SELECT_MIN_BITS 32 /**/
-
-/* STARTPERL:
- * This variable contains the string to put in front of a perl
- * script to make sure (one hopes) that it runs with perl and not
- * some shell.
- */
-#define STARTPERL "#!perl" /**/
-
-/* HAS_STDIO_STREAM_ARRAY:
- * This symbol, if defined, tells that there is an array
- * holding the stdio streams.
- */
-/* STDIO_STREAM_ARRAY:
- * This symbol tells the name of the array holding the stdio streams.
- * Usual values include _iob, __iob, and __sF.
- */
-/*#define HAS_STDIO_STREAM_ARRAY / **/
-#ifdef HAS_STDIO_STREAM_ARRAY
-#define STDIO_STREAM_ARRAY
-#endif
-
-/* GMTIME_MAX:
- * This symbol contains the maximum value for the time_t offset that
- * the system function gmtime () accepts, and defaults to 0
- */
-/* GMTIME_MIN:
- * This symbol contains the minimum value for the time_t offset that
- * the system function gmtime () accepts, and defaults to 0
- */
-/* LOCALTIME_MAX:
- * This symbol contains the maximum value for the time_t offset that
- * the system function localtime () accepts, and defaults to 0
- */
-/* LOCALTIME_MIN:
- * This symbol contains the minimum value for the time_t offset that
- * the system function localtime () accepts, and defaults to 0
- */
-#define GMTIME_MAX 2147483647 /**/
-#define GMTIME_MIN 0 /**/
-#define LOCALTIME_MAX 2147483647 /**/
-#define LOCALTIME_MIN 0 /**/
-
-/* USE_64_BIT_INT:
- * This symbol, if defined, indicates that 64-bit integers should
- * be used when available. If not defined, the native integers
- * will be employed (be they 32 or 64 bits). The minimal possible
- * 64-bitness is used, just enough to get 64-bit integers into Perl.
- * This may mean using for example "long longs", while your memory
- * may still be limited to 2 gigabytes.
- */
-/* USE_64_BIT_ALL:
- * This symbol, if defined, indicates that 64-bit integers should
- * be used when available. If not defined, the native integers
- * will be used (be they 32 or 64 bits). The maximal possible
- * 64-bitness is employed: LP64 or ILP64, meaning that you will
- * be able to use more than 2 gigabytes of memory. This mode is
- * even more binary incompatible than USE_64_BIT_INT. You may not
- * be able to run the resulting executable in a 32-bit CPU at all or
- * you may need at least to reboot your OS to 64-bit mode.
- */
-#ifndef USE_64_BIT_INT
-#define USE_64_BIT_INT /**/
-#endif
-#ifndef USE_64_BIT_ALL
-/*#define USE_64_BIT_ALL / **/
-#endif
-
-/* USE_DTRACE:
- * This symbol, if defined, indicates that Perl should
- * be built with support for DTrace.
- */
-/*#define USE_DTRACE / **/
-
-/* USE_FAST_STDIO:
- * This symbol, if defined, indicates that Perl should
- * be built to use 'fast stdio'.
- * Defaults to define in Perls 5.8 and earlier, to undef later.
- */
-#ifndef USE_FAST_STDIO
-/*#define USE_FAST_STDIO / **/
-#endif
-
-/* USE_LARGE_FILES:
- * This symbol, if defined, indicates that large file support
- * should be used when available.
- */
-#ifndef USE_LARGE_FILES
-#define USE_LARGE_FILES /**/
-#endif
-
-/* USE_LONG_DOUBLE:
- * This symbol, if defined, indicates that long doubles should
- * be used when available.
- */
-#ifndef USE_LONG_DOUBLE
-/*#define USE_LONG_DOUBLE / **/
-#endif
-
-/* USE_MORE_BITS:
- * This symbol, if defined, indicates that 64-bit interfaces and
- * long doubles should be used when available.
- */
-#ifndef USE_MORE_BITS
-/*#define USE_MORE_BITS / **/
-#endif
-
-/* MULTIPLICITY:
- * This symbol, if defined, indicates that Perl should
- * be built to use multiplicity.
- */
-#ifndef MULTIPLICITY
-#define MULTIPLICITY /**/
-#endif
-
-/* USE_PERLIO:
- * This symbol, if defined, indicates that the PerlIO abstraction should
- * be used throughout. If not defined, stdio should be
- * used in a fully backward compatible manner.
- */
-#ifndef USE_PERLIO
-#define USE_PERLIO /**/
-#endif
-
-/* USE_SOCKS:
- * This symbol, if defined, indicates that Perl should
- * be built to use socks.
- */
-#ifndef USE_SOCKS
-/*#define USE_SOCKS / **/
-#endif
-
-#endif
Deleted: trunk/contrib/perl/win32/config_H.vc64
===================================================================
--- trunk/contrib/perl/win32/config_H.vc64 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/win32/config_H.vc64 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,4675 +0,0 @@
-/*
- * This file was produced by running the config_h.SH script, which
- * gets its values from undef, which is generally produced by
- * running Configure.
- *
- * Feel free to modify any of this as the need arises. Note, however,
- * that running config_h.SH again will wipe out any changes you've made.
- * For a more permanent change edit undef and rerun config_h.SH.
- *
- * $Id: config_H.vc64,v 1.1.1.1 2011-05-19 23:03:36 laffer1 Exp $
- */
-
-/*
- * Package name : perl5
- * Source directory :
- * Configuration time: Sat Jan 9 17:22:03 2010
- * Configured by : Steve
- * Target system :
- */
-
-#ifndef _config_h_
-#define _config_h_
-
-/* LOC_SED:
- * This symbol holds the complete pathname to the sed program.
- */
-#define LOC_SED "" /**/
-
-/* HAS_ALARM:
- * This symbol, if defined, indicates that the alarm routine is
- * available.
- */
-#define HAS_ALARM /**/
-
-/* HAS_BCMP:
- * This symbol is defined if the bcmp() routine is available to
- * compare blocks of memory.
- */
-/*#define HAS_BCMP / **/
-
-/* HAS_BCOPY:
- * This symbol is defined if the bcopy() routine is available to
- * copy blocks of memory.
- */
-/*#define HAS_BCOPY / **/
-
-/* HAS_BZERO:
- * This symbol is defined if the bzero() routine is available to
- * set a memory block to 0.
- */
-/*#define HAS_BZERO / **/
-
-/* HAS_CHOWN:
- * This symbol, if defined, indicates that the chown routine is
- * available.
- */
-/*#define HAS_CHOWN / **/
-
-/* HAS_CHROOT:
- * This symbol, if defined, indicates that the chroot routine is
- * available.
- */
-/*#define HAS_CHROOT / **/
-
-/* HAS_CHSIZE:
- * This symbol, if defined, indicates that the chsize routine is available
- * to truncate files. You might need a -lx to get this routine.
- */
-#define HAS_CHSIZE /**/
-
-/* HAS_CRYPT:
- * This symbol, if defined, indicates that the crypt routine is available
- * to encrypt passwords and the like.
- */
-/*#define HAS_CRYPT / **/
-
-/* HAS_CTERMID:
- * This symbol, if defined, indicates that the ctermid routine is
- * available to generate filename for terminal.
- */
-/*#define HAS_CTERMID / **/
-
-/* HAS_CUSERID:
- * This symbol, if defined, indicates that the cuserid routine is
- * available to get character login names.
- */
-/*#define HAS_CUSERID / **/
-
-/* HAS_DBL_DIG:
- * This symbol, if defined, indicates that this system's <float.h>
- * or <limits.h> defines the symbol DBL_DIG, which is the number
- * of significant digits in a double precision number. If this
- * symbol is not defined, a guess of 15 is usually pretty good.
- */
-#define HAS_DBL_DIG /**/
-
-/* HAS_DIFFTIME:
- * This symbol, if defined, indicates that the difftime routine is
- * available.
- */
-#define HAS_DIFFTIME /**/
-
-/* HAS_DLERROR:
- * This symbol, if defined, indicates that the dlerror routine is
- * available to return a string describing the last error that
- * occurred from a call to dlopen(), dlclose() or dlsym().
- */
-#define HAS_DLERROR /**/
-
-/* HAS_DUP2:
- * This symbol, if defined, indicates that the dup2 routine is
- * available to duplicate file descriptors.
- */
-#define HAS_DUP2 /**/
-
-/* HAS_FCHMOD:
- * This symbol, if defined, indicates that the fchmod routine is available
- * to change mode of opened files. If unavailable, use chmod().
- */
-/*#define HAS_FCHMOD / **/
-
-/* HAS_FCHOWN:
- * This symbol, if defined, indicates that the fchown routine is available
- * to change ownership of opened files. If unavailable, use chown().
- */
-/*#define HAS_FCHOWN / **/
-
-/* HAS_FCNTL:
- * This symbol, if defined, indicates to the C program that
- * the fcntl() function exists.
- */
-/*#define HAS_FCNTL / **/
-
-/* HAS_FGETPOS:
- * This symbol, if defined, indicates that the fgetpos routine is
- * available to get the file position indicator, similar to ftell().
- */
-#define HAS_FGETPOS /**/
-
-/* HAS_FLOCK:
- * This symbol, if defined, indicates that the flock routine is
- * available to do file locking.
- */
-#define HAS_FLOCK /**/
-
-/* HAS_FORK:
- * This symbol, if defined, indicates that the fork routine is
- * available.
- */
-/*#define HAS_FORK / **/
-
-/* HAS_FSETPOS:
- * This symbol, if defined, indicates that the fsetpos routine is
- * available to set the file position indicator, similar to fseek().
- */
-#define HAS_FSETPOS /**/
-
-/* HAS_GETTIMEOFDAY:
- * This symbol, if defined, indicates that the gettimeofday() system
- * call is available for a sub-second accuracy clock. Usually, the file
- * <sys/resource.h> needs to be included (see I_SYS_RESOURCE).
- * The type "Timeval" should be used to refer to "struct timeval".
- */
-#define HAS_GETTIMEOFDAY /**/
-#ifdef HAS_GETTIMEOFDAY
-#define Timeval struct timeval /* Structure used by gettimeofday() */
-#endif
-
-/* HAS_GETGROUPS:
- * This symbol, if defined, indicates that the getgroups() routine is
- * available to get the list of process groups. If unavailable, multiple
- * groups are probably not supported.
- */
-/*#define HAS_GETGROUPS / **/
-
-/* HAS_GETLOGIN:
- * This symbol, if defined, indicates that the getlogin routine is
- * available to get the login name.
- */
-#define HAS_GETLOGIN /**/
-
-/* HAS_GETPGID:
- * This symbol, if defined, indicates to the C program that
- * the getpgid(pid) function is available to get the
- * process group id.
- */
-/*#define HAS_GETPGID / **/
-
-/* HAS_GETPGRP2:
- * This symbol, if defined, indicates that the getpgrp2() (as in DG/UX)
- * routine is available to get the current process group.
- */
-/*#define HAS_GETPGRP2 / **/
-
-/* HAS_GETPPID:
- * This symbol, if defined, indicates that the getppid routine is
- * available to get the parent process ID.
- */
-/*#define HAS_GETPPID / **/
-
-/* HAS_GETPRIORITY:
- * This symbol, if defined, indicates that the getpriority routine is
- * available to get a process's priority.
- */
-/*#define HAS_GETPRIORITY / **/
-
-/* HAS_INET_ATON:
- * This symbol, if defined, indicates to the C program that the
- * inet_aton() function is available to parse IP address "dotted-quad"
- * strings.
- */
-/*#define HAS_INET_ATON / **/
-
-/* HAS_KILLPG:
- * This symbol, if defined, indicates that the killpg routine is available
- * to kill process groups. If unavailable, you probably should use kill
- * with a negative process number.
- */
-#define HAS_KILLPG /**/
-
-/* HAS_LINK:
- * This symbol, if defined, indicates that the link routine is
- * available to create hard links.
- */
-#define HAS_LINK /**/
-
-/* HAS_LOCALECONV:
- * This symbol, if defined, indicates that the localeconv routine is
- * available for numeric and monetary formatting conventions.
- */
-#define HAS_LOCALECONV /**/
-
-/* HAS_LOCKF:
- * This symbol, if defined, indicates that the lockf routine is
- * available to do file locking.
- */
-/*#define HAS_LOCKF / **/
-
-/* HAS_LSTAT:
- * This symbol, if defined, indicates that the lstat routine is
- * available to do file stats on symbolic links.
- */
-/*#define HAS_LSTAT / **/
-
-/* HAS_MBLEN:
- * This symbol, if defined, indicates that the mblen routine is available
- * to find the number of bytes in a multibye character.
- */
-#define HAS_MBLEN /**/
-
-/* HAS_MBSTOWCS:
- * This symbol, if defined, indicates that the mbstowcs routine is
- * available to covert a multibyte string into a wide character string.
- */
-#define HAS_MBSTOWCS /**/
-
-/* HAS_MBTOWC:
- * This symbol, if defined, indicates that the mbtowc routine is available
- * to covert a multibyte to a wide character.
- */
-#define HAS_MBTOWC /**/
-
-/* HAS_MEMCMP:
- * This symbol, if defined, indicates that the memcmp routine is available
- * to compare blocks of memory.
- */
-#define HAS_MEMCMP /**/
-
-/* HAS_MEMCPY:
- * This symbol, if defined, indicates that the memcpy routine is available
- * to copy blocks of memory.
- */
-#define HAS_MEMCPY /**/
-
-/* HAS_MEMMOVE:
- * This symbol, if defined, indicates that the memmove routine is available
- * to copy potentially overlapping blocks of memory. This should be used
- * only when HAS_SAFE_BCOPY is not defined. If neither is there, roll your
- * own version.
- */
-#define HAS_MEMMOVE /**/
-
-/* HAS_MEMSET:
- * This symbol, if defined, indicates that the memset routine is available
- * to set blocks of memory.
- */
-#define HAS_MEMSET /**/
-
-/* HAS_MKDIR:
- * This symbol, if defined, indicates that the mkdir routine is available
- * to create directories. Otherwise you should fork off a new process to
- * exec /bin/mkdir.
- */
-#define HAS_MKDIR /**/
-
-/* HAS_MKFIFO:
- * This symbol, if defined, indicates that the mkfifo routine is
- * available to create FIFOs. Otherwise, mknod should be able to
- * do it for you. However, if mkfifo is there, mknod might require
- * super-user privileges which mkfifo will not.
- */
-/*#define HAS_MKFIFO / **/
-
-/* HAS_MKTIME:
- * This symbol, if defined, indicates that the mktime routine is
- * available.
- */
-#define HAS_MKTIME /**/
-
-/* HAS_MSYNC:
- * This symbol, if defined, indicates that the msync system call is
- * available to synchronize a mapped file.
- */
-/*#define HAS_MSYNC / **/
-
-/* HAS_MUNMAP:
- * This symbol, if defined, indicates that the munmap system call is
- * available to unmap a region, usually mapped by mmap().
- */
-/*#define HAS_MUNMAP / **/
-
-/* HAS_NICE:
- * This symbol, if defined, indicates that the nice routine is
- * available.
- */
-/*#define HAS_NICE / **/
-
-/* HAS_PATHCONF:
- * This symbol, if defined, indicates that pathconf() is available
- * to determine file-system related limits and options associated
- * with a given filename.
- */
-/* HAS_FPATHCONF:
- * This symbol, if defined, indicates that pathconf() is available
- * to determine file-system related limits and options associated
- * with a given open file descriptor.
- */
-/*#define HAS_PATHCONF / **/
-/*#define HAS_FPATHCONF / **/
-
-/* HAS_PAUSE:
- * This symbol, if defined, indicates that the pause routine is
- * available to suspend a process until a signal is received.
- */
-#define HAS_PAUSE /**/
-
-/* HAS_PIPE:
- * This symbol, if defined, indicates that the pipe routine is
- * available to create an inter-process channel.
- */
-#define HAS_PIPE /**/
-
-/* HAS_POLL:
- * This symbol, if defined, indicates that the poll routine is
- * available to poll active file descriptors. Please check I_POLL and
- * I_SYS_POLL to know which header should be included as well.
- */
-/*#define HAS_POLL / **/
-
-/* HAS_READDIR:
- * This symbol, if defined, indicates that the readdir routine is
- * available to read directory entries. You may have to include
- * <dirent.h>. See I_DIRENT.
- */
-#define HAS_READDIR /**/
-
-/* HAS_SEEKDIR:
- * This symbol, if defined, indicates that the seekdir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_SEEKDIR /**/
-
-/* HAS_TELLDIR:
- * This symbol, if defined, indicates that the telldir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_TELLDIR /**/
-
-/* HAS_REWINDDIR:
- * This symbol, if defined, indicates that the rewinddir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_REWINDDIR /**/
-
-/* HAS_READLINK:
- * This symbol, if defined, indicates that the readlink routine is
- * available to read the value of a symbolic link.
- */
-/*#define HAS_READLINK / **/
-
-/* HAS_RENAME:
- * This symbol, if defined, indicates that the rename routine is available
- * to rename files. Otherwise you should do the unlink(), link(), unlink()
- * trick.
- */
-#define HAS_RENAME /**/
-
-/* HAS_RMDIR:
- * This symbol, if defined, indicates that the rmdir routine is
- * available to remove directories. Otherwise you should fork off a
- * new process to exec /bin/rmdir.
- */
-#define HAS_RMDIR /**/
-
-/* HAS_SELECT:
- * This symbol, if defined, indicates that the select routine is
- * available to select active file descriptors. If the timeout field
- * is used, <sys/time.h> may need to be included.
- */
-#define HAS_SELECT /**/
-
-/* HAS_SETEGID:
- * This symbol, if defined, indicates that the setegid routine is available
- * to change the effective gid of the current program.
- */
-/*#define HAS_SETEGID / **/
-
-/* HAS_SETEUID:
- * This symbol, if defined, indicates that the seteuid routine is available
- * to change the effective uid of the current program.
- */
-/*#define HAS_SETEUID / **/
-
-/* HAS_SETGROUPS:
- * This symbol, if defined, indicates that the setgroups() routine is
- * available to set the list of process groups. If unavailable, multiple
- * groups are probably not supported.
- */
-/*#define HAS_SETGROUPS / **/
-
-/* HAS_SETLINEBUF:
- * This symbol, if defined, indicates that the setlinebuf routine is
- * available to change stderr or stdout from block-buffered or unbuffered
- * to a line-buffered mode.
- */
-/*#define HAS_SETLINEBUF / **/
-
-/* HAS_SETLOCALE:
- * This symbol, if defined, indicates that the setlocale routine is
- * available to handle locale-specific ctype implementations.
- */
-#define HAS_SETLOCALE /**/
-
-/* HAS_SETPGID:
- * This symbol, if defined, indicates that the setpgid(pid, gpid)
- * routine is available to set process group ID.
- */
-/*#define HAS_SETPGID / **/
-
-/* HAS_SETPGRP2:
- * This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
- * routine is available to set the current process group.
- */
-/*#define HAS_SETPGRP2 / **/
-
-/* HAS_SETPRIORITY:
- * This symbol, if defined, indicates that the setpriority routine is
- * available to set a process's priority.
- */
-/*#define HAS_SETPRIORITY / **/
-
-/* HAS_SETREGID:
- * This symbol, if defined, indicates that the setregid routine is
- * available to change the real and effective gid of the current
- * process.
- */
-/* HAS_SETRESGID:
- * This symbol, if defined, indicates that the setresgid routine is
- * available to change the real, effective and saved gid of the current
- * process.
- */
-/*#define HAS_SETREGID / **/
-/*#define HAS_SETRESGID / **/
-
-/* HAS_SETREUID:
- * This symbol, if defined, indicates that the setreuid routine is
- * available to change the real and effective uid of the current
- * process.
- */
-/* HAS_SETRESUID:
- * This symbol, if defined, indicates that the setresuid routine is
- * available to change the real, effective and saved uid of the current
- * process.
- */
-/*#define HAS_SETREUID / **/
-/*#define HAS_SETRESUID / **/
-
-/* HAS_SETRGID:
- * This symbol, if defined, indicates that the setrgid routine is available
- * to change the real gid of the current program.
- */
-/*#define HAS_SETRGID / **/
-
-/* HAS_SETRUID:
- * This symbol, if defined, indicates that the setruid routine is available
- * to change the real uid of the current program.
- */
-/*#define HAS_SETRUID / **/
-
-/* HAS_SETSID:
- * This symbol, if defined, indicates that the setsid routine is
- * available to set the process group ID.
- */
-/*#define HAS_SETSID / **/
-
-/* HAS_STRCHR:
- * This symbol is defined to indicate that the strchr()/strrchr()
- * functions are available for string searching. If not, try the
- * index()/rindex() pair.
- */
-/* HAS_INDEX:
- * This symbol is defined to indicate that the index()/rindex()
- * functions are available for string searching.
- */
-#define HAS_STRCHR /**/
-/*#define HAS_INDEX / **/
-
-/* HAS_STRCOLL:
- * This symbol, if defined, indicates that the strcoll routine is
- * available to compare strings using collating information.
- */
-#define HAS_STRCOLL /**/
-
-/* HAS_STRTOD:
- * This symbol, if defined, indicates that the strtod routine is
- * available to provide better numeric string conversion than atof().
- */
-#define HAS_STRTOD /**/
-
-/* HAS_STRTOL:
- * This symbol, if defined, indicates that the strtol routine is available
- * to provide better numeric string conversion than atoi() and friends.
- */
-#define HAS_STRTOL /**/
-
-/* HAS_STRXFRM:
- * This symbol, if defined, indicates that the strxfrm() routine is
- * available to transform strings.
- */
-#define HAS_STRXFRM /**/
-
-/* HAS_SYMLINK:
- * This symbol, if defined, indicates that the symlink routine is available
- * to create symbolic links.
- */
-/*#define HAS_SYMLINK / **/
-
-/* HAS_SYSCALL:
- * This symbol, if defined, indicates that the syscall routine is
- * available to call arbitrary system calls. If undefined, that's tough.
- */
-/*#define HAS_SYSCALL / **/
-
-/* HAS_SYSCONF:
- * This symbol, if defined, indicates that sysconf() is available
- * to determine system related limits and options.
- */
-/*#define HAS_SYSCONF / **/
-
-/* HAS_SYSTEM:
- * This symbol, if defined, indicates that the system routine is
- * available to issue a shell command.
- */
-#define HAS_SYSTEM /**/
-
-/* HAS_TCGETPGRP:
- * This symbol, if defined, indicates that the tcgetpgrp routine is
- * available to get foreground process group ID.
- */
-/*#define HAS_TCGETPGRP / **/
-
-/* HAS_TCSETPGRP:
- * This symbol, if defined, indicates that the tcsetpgrp routine is
- * available to set foreground process group ID.
- */
-/*#define HAS_TCSETPGRP / **/
-
-/* HAS_TRUNCATE:
- * This symbol, if defined, indicates that the truncate routine is
- * available to truncate files.
- */
-/*#define HAS_TRUNCATE / **/
-
-/* HAS_TZNAME:
- * This symbol, if defined, indicates that the tzname[] array is
- * available to access timezone names.
- */
-#define HAS_TZNAME /**/
-
-/* HAS_UMASK:
- * This symbol, if defined, indicates that the umask routine is
- * available to set and get the value of the file creation mask.
- */
-#define HAS_UMASK /**/
-
-/* HAS_USLEEP:
- * This symbol, if defined, indicates that the usleep routine is
- * available to let the process sleep on a sub-second accuracy.
- */
-/*#define HAS_USLEEP / **/
-
-/* HAS_WAIT4:
- * This symbol, if defined, indicates that wait4() exists.
- */
-/*#define HAS_WAIT4 / **/
-
-/* HAS_WAITPID:
- * This symbol, if defined, indicates that the waitpid routine is
- * available to wait for child process.
- */
-#define HAS_WAITPID /**/
-
-/* HAS_WCSTOMBS:
- * This symbol, if defined, indicates that the wcstombs routine is
- * available to convert wide character strings to multibyte strings.
- */
-#define HAS_WCSTOMBS /**/
-
-/* HAS_WCTOMB:
- * This symbol, if defined, indicates that the wctomb routine is available
- * to covert a wide character to a multibyte.
- */
-#define HAS_WCTOMB /**/
-
-/* Groups_t:
- * This symbol holds the type used for the second argument to
- * getgroups() and setgroups(). Usually, this is the same as
- * gidtype (gid_t) , but sometimes it isn't.
- * It can be int, ushort, gid_t, etc...
- * It may be necessary to include <sys/types.h> to get any
- * typedef'ed information. This is only required if you have
- * getgroups() or setgroups()..
- */
-#if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS)
-#define Groups_t gid_t /* Type for 2nd arg to [sg]etgroups() */
-#endif
-
-/* I_ARPA_INET:
- * This symbol, if defined, indicates to the C program that it should
- * include <arpa/inet.h> to get inet_addr and friends declarations.
- */
-#define I_ARPA_INET /**/
-
-/* I_DBM:
- * This symbol, if defined, indicates that <dbm.h> exists and should
- * be included.
- */
-/* I_RPCSVC_DBM:
- * This symbol, if defined, indicates that <rpcsvc/dbm.h> exists and
- * should be included.
- */
-/*#define I_DBM / **/
-#define I_RPCSVC_DBM /**/
-
-/* I_DLFCN:
- * This symbol, if defined, indicates that <dlfcn.h> exists and should
- * be included.
- */
-#define I_DLFCN /**/
-
-/* I_FCNTL:
- * This manifest constant tells the C program to include <fcntl.h>.
- */
-#define I_FCNTL /**/
-
-/* I_FLOAT:
- * This symbol, if defined, indicates to the C program that it should
- * include <float.h> to get definition of symbols like DBL_MAX or
- * DBL_MIN, i.e. machine dependent floating point values.
- */
-#define I_FLOAT /**/
-
-/* I_GDBM:
- * This symbol, if defined, indicates that <gdbm.h> exists and should
- * be included.
- */
-/*#define I_GDBM / **/
-
-/* I_LIMITS:
- * This symbol, if defined, indicates to the C program that it should
- * include <limits.h> to get definition of symbols like WORD_BIT or
- * LONG_MAX, i.e. machine dependant limitations.
- */
-#define I_LIMITS /**/
-
-/* I_LOCALE:
- * This symbol, if defined, indicates to the C program that it should
- * include <locale.h>.
- */
-#define I_LOCALE /**/
-
-/* I_MATH:
- * This symbol, if defined, indicates to the C program that it should
- * include <math.h>.
- */
-#define I_MATH /**/
-
-/* I_MEMORY:
- * This symbol, if defined, indicates to the C program that it should
- * include <memory.h>.
- */
-/*#define I_MEMORY / **/
-
-/* I_NETINET_IN:
- * This symbol, if defined, indicates to the C program that it should
- * include <netinet/in.h>. Otherwise, you may try <sys/in.h>.
- */
-/*#define I_NETINET_IN / **/
-
-/* I_SFIO:
- * This symbol, if defined, indicates to the C program that it should
- * include <sfio.h>.
- */
-/*#define I_SFIO / **/
-
-/* I_STDDEF:
- * This symbol, if defined, indicates that <stddef.h> exists and should
- * be included.
- */
-#define I_STDDEF /**/
-
-/* I_STDLIB:
- * This symbol, if defined, indicates that <stdlib.h> exists and should
- * be included.
- */
-#define I_STDLIB /**/
-
-/* I_STRING:
- * This symbol, if defined, indicates to the C program that it should
- * include <string.h> (USG systems) instead of <strings.h> (BSD systems).
- */
-#define I_STRING /**/
-
-/* I_SYS_DIR:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/dir.h>.
- */
-/*#define I_SYS_DIR / **/
-
-/* I_SYS_FILE:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/file.h> to get definition of R_OK and friends.
- */
-/*#define I_SYS_FILE / **/
-
-/* I_SYS_IOCTL:
- * This symbol, if defined, indicates that <sys/ioctl.h> exists and should
- * be included. Otherwise, include <sgtty.h> or <termio.h>.
- */
-/* I_SYS_SOCKIO:
- * This symbol, if defined, indicates the <sys/sockio.h> should be included
- * to get socket ioctl options, like SIOCATMARK.
- */
-/*#define I_SYS_IOCTL / **/
-/*#define I_SYS_SOCKIO / **/
-
-/* I_SYS_NDIR:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/ndir.h>.
- */
-/*#define I_SYS_NDIR / **/
-
-/* I_SYS_PARAM:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/param.h>.
- */
-/*#define I_SYS_PARAM / **/
-
-/* I_SYS_POLL:
- * This symbol, if defined, indicates that the program may include
- * <sys/poll.h>. When I_POLL is also defined, it's probably safest
- * to only include <poll.h>.
- */
-/*#define I_SYS_POLL / **/
-
-/* I_SYS_RESOURCE:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/resource.h>.
- */
-/*#define I_SYS_RESOURCE / **/
-
-/* I_SYS_SELECT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/select.h> in order to get definition of struct timeval.
- */
-/*#define I_SYS_SELECT / **/
-
-/* I_SYS_STAT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/stat.h>.
- */
-#define I_SYS_STAT /**/
-
-/* I_SYS_TIMES:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/times.h>.
- */
-/*#define I_SYS_TIMES / **/
-
-/* I_SYS_TYPES:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/types.h>.
- */
-#define I_SYS_TYPES /**/
-
-/* I_SYS_UN:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/un.h> to get UNIX domain socket definitions.
- */
-/*#define I_SYS_UN / **/
-
-/* I_SYS_WAIT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/wait.h>.
- */
-/*#define I_SYS_WAIT / **/
-
-/* I_TERMIO:
- * This symbol, if defined, indicates that the program should include
- * <termio.h> rather than <sgtty.h>. There are also differences in
- * the ioctl() calls that depend on the value of this symbol.
- */
-/* I_TERMIOS:
- * This symbol, if defined, indicates that the program should include
- * the POSIX termios.h rather than sgtty.h or termio.h.
- * There are also differences in the ioctl() calls that depend on the
- * value of this symbol.
- */
-/* I_SGTTY:
- * This symbol, if defined, indicates that the program should include
- * <sgtty.h> rather than <termio.h>. There are also differences in
- * the ioctl() calls that depend on the value of this symbol.
- */
-/*#define I_TERMIO / **/
-/*#define I_TERMIOS / **/
-/*#define I_SGTTY / **/
-
-/* I_UNISTD:
- * This symbol, if defined, indicates to the C program that it should
- * include <unistd.h>.
- */
-/*#define I_UNISTD / **/
-
-/* I_UTIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <utime.h>.
- */
-#define I_UTIME /**/
-
-/* I_VALUES:
- * This symbol, if defined, indicates to the C program that it should
- * include <values.h> to get definition of symbols like MINFLOAT or
- * MAXLONG, i.e. machine dependant limitations. Probably, you
- * should use <limits.h> instead, if it is available.
- */
-/*#define I_VALUES / **/
-
-/* I_VFORK:
- * This symbol, if defined, indicates to the C program that it should
- * include vfork.h.
- */
-/*#define I_VFORK / **/
-
-/* CAN_VAPROTO:
- * This variable is defined on systems supporting prototype declaration
- * of functions with a variable number of arguments.
- */
-/* _V:
- * This macro is used to declare function parameters in prototypes for
- * functions with a variable number of parameters. Use double parentheses.
- * For example:
- *
- * int printf _V((char *fmt, ...));
- *
- * Remember to use the plain simple _() macro when declaring a function
- * with no variable number of arguments, since it might be possible to
- * have a non-effect _V() macro and still get prototypes via _().
- */
-/*#define CAN_VAPROTO / **/
-#ifdef CAN_VAPROTO
-#define _V(args) args
-#else
-#define _V(args) ()
-#endif
-
-/* INTSIZE:
- * This symbol contains the value of sizeof(int) so that the C
- * preprocessor can make decisions based on it.
- */
-/* LONGSIZE:
- * This symbol contains the value of sizeof(long) so that the C
- * preprocessor can make decisions based on it.
- */
-/* SHORTSIZE:
- * This symbol contains the value of sizeof(short) so that the C
- * preprocessor can make decisions based on it.
- */
-#define INTSIZE 4 /**/
-#define LONGSIZE 4 /**/
-#define SHORTSIZE 2 /**/
-
-/* MULTIARCH:
- * This symbol, if defined, signifies that the build
- * process will produce some binary files that are going to be
- * used in a cross-platform environment. This is the case for
- * example with the NeXT "fat" binaries that contain executables
- * for several CPUs.
- */
-/*#define MULTIARCH / **/
-
-/* HAS_QUAD:
- * This symbol, if defined, tells that there's a 64-bit integer type,
- * Quad_t, and its unsigned counterpar, Uquad_t. QUADKIND will be one
- * of QUAD_IS_INT, QUAD_IS_LONG, QUAD_IS_LONG_LONG, QUAD_IS_INT64_T
- * or QUAD_IS___INT64.
- */
-#define HAS_QUAD /**/
-#ifdef HAS_QUAD
-# define Quad_t __int64 /**/
-# define Uquad_t unsigned __int64 /**/
-# define QUADKIND 5 /**/
-# define QUAD_IS_INT 1
-# define QUAD_IS_LONG 2
-# define QUAD_IS_LONG_LONG 3
-# define QUAD_IS_INT64_T 4
-# define QUAD_IS___INT64 5
-#endif
-
-/* OSNAME:
- * This symbol contains the name 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.
- */
-/* 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 "MSWin32" /**/
-#define OSVERS "5.1" /**/
-
-/* ARCHLIB:
- * This variable, if defined, holds the name of the directory in
- * which the user wants to put architecture-dependent public
- * library files for perl5. It is most often a local directory
- * such as /usr/local/lib. Programs using this variable must be
- * prepared to deal with filename expansion. If ARCHLIB is the
- * same as PRIVLIB, it is not defined, since presumably the
- * program already searches PRIVLIB.
- */
-/* ARCHLIB_EXP:
- * This symbol contains the ~name expanded version of ARCHLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define ARCHLIB "c:\\perl\\lib" /**/
-/*#define ARCHLIB_EXP "" / **/
-
-/* ARCHNAME:
- * This symbol holds a string representing the architecture name.
- * It may be used to construct an architecture-dependant pathname
- * where library files may be held under a private library, for
- * instance.
- */
-#define ARCHNAME "MSWin32-x86" /**/
-
-/* BIN:
- * This symbol holds the path of the bin directory where the package will
- * be installed. Program must be prepared to deal with ~name substitution.
- */
-/* BIN_EXP:
- * This symbol is the filename expanded version of the BIN symbol, for
- * programs that do not want to deal with that at run-time.
- */
-/* PERL_RELOCATABLE_INC:
- * This symbol, if defined, indicates that we'd like to relocate entries
- * in @INC at run time based on the location of the perl binary.
- */
-#define BIN "c:\\perl\\bin" /**/
-#define BIN_EXP "c:\\perl\\bin" /**/
-#define PERL_RELOCATABLE_INC "undef" /**/
-
-/* CAT2:
- * This macro concatenates 2 tokens together.
- */
-/* STRINGIFY:
- * This macro surrounds its token with double quotes.
- */
-#if 42 == 1
-#define CAT2(a,b) a/**/b
-#define STRINGIFY(a) "a"
-#endif
-#if 42 == 42
-#define PeRl_CaTiFy(a, b) a ## b
-#define PeRl_StGiFy(a) #a
-#define CAT2(a,b) PeRl_CaTiFy(a,b)
-#define StGiFy(a) PeRl_StGiFy(a)
-#define STRINGIFY(a) PeRl_StGiFy(a)
-#endif
-#if 42 != 1 && 42 != 42
-#include "Bletch: How does this C preprocessor concatenate tokens?"
-#endif
-
-/* CPPSTDIN:
- * This symbol contains the first part of the string which will invoke
- * the C preprocessor on the standard input and produce to standard
- * output. Typical value of "cc -E" or "/lib/cpp", but it can also
- * call a wrapper. See CPPRUN.
- */
-/* CPPMINUS:
- * This symbol contains the second part of the string which will invoke
- * the C preprocessor on the standard input and produce to standard
- * output. This symbol will have the value "-" if CPPSTDIN needs a minus
- * to specify standard input, otherwise the value is "".
- */
-/* CPPRUN:
- * This symbol contains the string which will invoke a C preprocessor on
- * the standard input and produce to standard output. It needs to end
- * with CPPLAST, after all other preprocessor flags have been specified.
- * The main difference with CPPSTDIN is that this program will never be a
- * pointer to a shell wrapper, i.e. it will be empty if no preprocessor is
- * available directly to the user. Note that it may well be different from
- * the preprocessor used to compile the C program.
- */
-/* CPPLAST:
- * This symbol is intended to be used along with CPPRUN in the same manner
- * symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "".
- */
-#define CPPSTDIN "cppstdin"
-#define CPPMINUS ""
-#define CPPRUN "cl -nologo -E"
-#define CPPLAST ""
-
-/* HAS_ACCESS:
- * This manifest constant lets the C program know that the access()
- * system call is available to check for accessibility using real UID/GID.
- * (always present on UNIX.)
- */
-#define HAS_ACCESS /**/
-
-/* HAS_ACCESSX:
- * This symbol, if defined, indicates that the accessx routine is
- * available to do extended access checks.
- */
-/*#define HAS_ACCESSX / **/
-
-/* HAS_ASCTIME_R:
- * This symbol, if defined, indicates that the asctime_r routine
- * is available to asctime re-entrantly.
- */
-/* ASCTIME_R_PROTO:
- * This symbol encodes the prototype of asctime_r.
- * It is zero if d_asctime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_asctime_r
- * is defined.
- */
-/*#define HAS_ASCTIME_R / **/
-#define ASCTIME_R_PROTO 0 /**/
-
-/* HASATTRIBUTE_FORMAT:
- * Can we handle GCC attribute for checking printf-style formats
- */
-/* PRINTF_FORMAT_NULL_OK:
- * Allows __printf__ format to be null when checking printf-style
- */
-/* HASATTRIBUTE_MALLOC:
- * Can we handle GCC attribute for malloc-style functions.
- */
-/* HASATTRIBUTE_NONNULL:
- * Can we handle GCC attribute for nonnull function parms.
- */
-/* HASATTRIBUTE_NORETURN:
- * Can we handle GCC attribute for functions that do not return
- */
-/* HASATTRIBUTE_PURE:
- * Can we handle GCC attribute for pure functions
- */
-/* HASATTRIBUTE_UNUSED:
- * Can we handle GCC attribute for unused variables and arguments
- */
-/* HASATTRIBUTE_DEPRECATED:
- * Can we handle GCC attribute for marking deprecated APIs
- */
-/* HASATTRIBUTE_WARN_UNUSED_RESULT:
- * Can we handle GCC attribute for warning on unused results
- */
-/*#define HASATTRIBUTE_DEPRECATED / **/
-/*#define HASATTRIBUTE_FORMAT / **/
-/*#define PRINTF_FORMAT_NULL_OK / **/
-/*#define HASATTRIBUTE_NORETURN / **/
-/*#define HASATTRIBUTE_MALLOC / **/
-/*#define HASATTRIBUTE_NONNULL / **/
-/*#define HASATTRIBUTE_PURE / **/
-/*#define HASATTRIBUTE_UNUSED / **/
-/*#define HASATTRIBUTE_WARN_UNUSED_RESULT / **/
-
-/* HASCONST:
- * This symbol, if defined, indicates that this C compiler knows about
- * the const type. There is no need to actually test for that symbol
- * within your programs. The mere use of the "const" keyword will
- * trigger the necessary tests.
- */
-#define HASCONST /**/
-#ifndef HASCONST
-#define const
-#endif
-
-/* HAS_CRYPT_R:
- * This symbol, if defined, indicates that the crypt_r routine
- * is available to crypt re-entrantly.
- */
-/* CRYPT_R_PROTO:
- * This symbol encodes the prototype of crypt_r.
- * It is zero if d_crypt_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_crypt_r
- * is defined.
- */
-/*#define HAS_CRYPT_R / **/
-#define CRYPT_R_PROTO 0 /**/
-
-/* HAS_CSH:
- * This symbol, if defined, indicates that the C-shell exists.
- */
-/* CSH:
- * This symbol, if defined, contains the full pathname of csh.
- */
-/*#define HAS_CSH / **/
-#ifdef HAS_CSH
-#define CSH "" /**/
-#endif
-
-/* HAS_CTERMID_R:
- * This symbol, if defined, indicates that the ctermid_r routine
- * is available to ctermid re-entrantly.
- */
-/* CTERMID_R_PROTO:
- * This symbol encodes the prototype of ctermid_r.
- * It is zero if d_ctermid_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ctermid_r
- * is defined.
- */
-/*#define HAS_CTERMID_R / **/
-#define CTERMID_R_PROTO 0 /**/
-
-/* HAS_CTIME_R:
- * This symbol, if defined, indicates that the ctime_r routine
- * is available to ctime re-entrantly.
- */
-/* CTIME_R_PROTO:
- * This symbol encodes the prototype of ctime_r.
- * It is zero if d_ctime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ctime_r
- * is defined.
- */
-/*#define HAS_CTIME_R / **/
-#define CTIME_R_PROTO 0 /**/
-
-/* HAS_DRAND48_R:
- * This symbol, if defined, indicates that the drand48_r routine
- * is available to drand48 re-entrantly.
- */
-/* DRAND48_R_PROTO:
- * This symbol encodes the prototype of drand48_r.
- * It is zero if d_drand48_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_drand48_r
- * is defined.
- */
-/*#define HAS_DRAND48_R / **/
-#define DRAND48_R_PROTO 0 /**/
-
-/* HAS_DRAND48_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the drand48() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern double drand48(void);
- */
-/*#define HAS_DRAND48_PROTO / **/
-
-/* HAS_EACCESS:
- * This symbol, if defined, indicates that the eaccess routine is
- * available to do extended access checks.
- */
-/*#define HAS_EACCESS / **/
-
-/* HAS_ENDGRENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for finalizing sequential access of the group database.
- */
-/*#define HAS_ENDGRENT / **/
-
-/* HAS_ENDGRENT_R:
- * This symbol, if defined, indicates that the endgrent_r routine
- * is available to endgrent re-entrantly.
- */
-/* ENDGRENT_R_PROTO:
- * This symbol encodes the prototype of endgrent_r.
- * It is zero if d_endgrent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endgrent_r
- * is defined.
- */
-/*#define HAS_ENDGRENT_R / **/
-#define ENDGRENT_R_PROTO 0 /**/
-
-/* HAS_ENDHOSTENT:
- * This symbol, if defined, indicates that the endhostent() routine is
- * available to close whatever was being used for host queries.
- */
-/*#define HAS_ENDHOSTENT / **/
-
-/* HAS_ENDHOSTENT_R:
- * This symbol, if defined, indicates that the endhostent_r routine
- * is available to endhostent re-entrantly.
- */
-/* ENDHOSTENT_R_PROTO:
- * This symbol encodes the prototype of endhostent_r.
- * It is zero if d_endhostent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endhostent_r
- * is defined.
- */
-/*#define HAS_ENDHOSTENT_R / **/
-#define ENDHOSTENT_R_PROTO 0 /**/
-
-/* HAS_ENDNETENT:
- * This symbol, if defined, indicates that the endnetent() routine is
- * available to close whatever was being used for network queries.
- */
-/*#define HAS_ENDNETENT / **/
-
-/* HAS_ENDNETENT_R:
- * This symbol, if defined, indicates that the endnetent_r routine
- * is available to endnetent re-entrantly.
- */
-/* ENDNETENT_R_PROTO:
- * This symbol encodes the prototype of endnetent_r.
- * It is zero if d_endnetent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endnetent_r
- * is defined.
- */
-/*#define HAS_ENDNETENT_R / **/
-#define ENDNETENT_R_PROTO 0 /**/
-
-/* HAS_ENDPROTOENT:
- * This symbol, if defined, indicates that the endprotoent() routine is
- * available to close whatever was being used for protocol queries.
- */
-/*#define HAS_ENDPROTOENT / **/
-
-/* HAS_ENDPROTOENT_R:
- * This symbol, if defined, indicates that the endprotoent_r routine
- * is available to endprotoent re-entrantly.
- */
-/* ENDPROTOENT_R_PROTO:
- * This symbol encodes the prototype of endprotoent_r.
- * It is zero if d_endprotoent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endprotoent_r
- * is defined.
- */
-/*#define HAS_ENDPROTOENT_R / **/
-#define ENDPROTOENT_R_PROTO 0 /**/
-
-/* HAS_ENDPWENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for finalizing sequential access of the passwd database.
- */
-/*#define HAS_ENDPWENT / **/
-
-/* HAS_ENDPWENT_R:
- * This symbol, if defined, indicates that the endpwent_r routine
- * is available to endpwent re-entrantly.
- */
-/* ENDPWENT_R_PROTO:
- * This symbol encodes the prototype of endpwent_r.
- * It is zero if d_endpwent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endpwent_r
- * is defined.
- */
-/*#define HAS_ENDPWENT_R / **/
-#define ENDPWENT_R_PROTO 0 /**/
-
-/* HAS_ENDSERVENT:
- * This symbol, if defined, indicates that the endservent() routine is
- * available to close whatever was being used for service queries.
- */
-/*#define HAS_ENDSERVENT / **/
-
-/* HAS_ENDSERVENT_R:
- * This symbol, if defined, indicates that the endservent_r routine
- * is available to endservent re-entrantly.
- */
-/* ENDSERVENT_R_PROTO:
- * This symbol encodes the prototype of endservent_r.
- * It is zero if d_endservent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endservent_r
- * is defined.
- */
-/*#define HAS_ENDSERVENT_R / **/
-#define ENDSERVENT_R_PROTO 0 /**/
-
-/* FLEXFILENAMES:
- * This symbol, if defined, indicates that the system supports filenames
- * longer than 14 characters.
- */
-#define FLEXFILENAMES /**/
-
-/* HAS_GETGRENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for sequential access of the group database.
- */
-/*#define HAS_GETGRENT / **/
-
-/* HAS_GETGRENT_R:
- * This symbol, if defined, indicates that the getgrent_r routine
- * is available to getgrent re-entrantly.
- */
-/* GETGRENT_R_PROTO:
- * This symbol encodes the prototype of getgrent_r.
- * It is zero if d_getgrent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrent_r
- * is defined.
- */
-/*#define HAS_GETGRENT_R / **/
-#define GETGRENT_R_PROTO 0 /**/
-
-/* HAS_GETGRGID_R:
- * This symbol, if defined, indicates that the getgrgid_r routine
- * is available to getgrgid re-entrantly.
- */
-/* GETGRGID_R_PROTO:
- * This symbol encodes the prototype of getgrgid_r.
- * It is zero if d_getgrgid_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrgid_r
- * is defined.
- */
-/*#define HAS_GETGRGID_R / **/
-#define GETGRGID_R_PROTO 0 /**/
-
-/* HAS_GETGRNAM_R:
- * This symbol, if defined, indicates that the getgrnam_r routine
- * is available to getgrnam re-entrantly.
- */
-/* GETGRNAM_R_PROTO:
- * This symbol encodes the prototype of getgrnam_r.
- * It is zero if d_getgrnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrnam_r
- * is defined.
- */
-/*#define HAS_GETGRNAM_R / **/
-#define GETGRNAM_R_PROTO 0 /**/
-
-/* HAS_GETHOSTBYADDR:
- * This symbol, if defined, indicates that the gethostbyaddr() routine is
- * available to look up hosts by their IP addresses.
- */
-#define HAS_GETHOSTBYADDR /**/
-
-/* HAS_GETHOSTBYNAME:
- * This symbol, if defined, indicates that the gethostbyname() routine is
- * available to look up host names in some data base or other.
- */
-#define HAS_GETHOSTBYNAME /**/
-
-/* HAS_GETHOSTENT:
- * This symbol, if defined, indicates that the gethostent() routine is
- * available to look up host names in some data base or another.
- */
-/*#define HAS_GETHOSTENT / **/
-
-/* HAS_GETHOSTNAME:
- * This symbol, if defined, indicates that the C program may use the
- * gethostname() routine to derive the host name. See also HAS_UNAME
- * and PHOSTNAME.
- */
-/* HAS_UNAME:
- * This symbol, if defined, indicates that the C program may use the
- * uname() routine to derive the host name. See also HAS_GETHOSTNAME
- * and PHOSTNAME.
- */
-/* PHOSTNAME:
- * This symbol, if defined, indicates the command to feed to the
- * popen() routine to derive the host name. See also HAS_GETHOSTNAME
- * and HAS_UNAME. Note that the command uses a fully qualified path,
- * so that it is safe even if used by a process with super-user
- * privileges.
- */
-/* HAS_PHOSTNAME:
- * This symbol, if defined, indicates that the C program may use the
- * contents of PHOSTNAME as a command to feed to the popen() routine
- * to derive the host name.
- */
-#define HAS_GETHOSTNAME /**/
-#define HAS_UNAME /**/
-/*#define HAS_PHOSTNAME / **/
-#ifdef HAS_PHOSTNAME
-#define PHOSTNAME "" /* How to get the host name */
-#endif
-
-/* HAS_GETHOSTBYADDR_R:
- * This symbol, if defined, indicates that the gethostbyaddr_r routine
- * is available to gethostbyaddr re-entrantly.
- */
-/* GETHOSTBYADDR_R_PROTO:
- * This symbol encodes the prototype of gethostbyaddr_r.
- * It is zero if d_gethostbyaddr_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gethostbyaddr_r
- * is defined.
- */
-/*#define HAS_GETHOSTBYADDR_R / **/
-#define GETHOSTBYADDR_R_PROTO 0 /**/
-
-/* HAS_GETHOSTBYNAME_R:
- * This symbol, if defined, indicates that the gethostbyname_r routine
- * is available to gethostbyname re-entrantly.
- */
-/* GETHOSTBYNAME_R_PROTO:
- * This symbol encodes the prototype of gethostbyname_r.
- * It is zero if d_gethostbyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gethostbyname_r
- * is defined.
- */
-/*#define HAS_GETHOSTBYNAME_R / **/
-#define GETHOSTBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETHOSTENT_R:
- * This symbol, if defined, indicates that the gethostent_r routine
- * is available to gethostent re-entrantly.
- */
-/* GETHOSTENT_R_PROTO:
- * This symbol encodes the prototype of gethostent_r.
- * It is zero if d_gethostent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gethostent_r
- * is defined.
- */
-/*#define HAS_GETHOSTENT_R / **/
-#define GETHOSTENT_R_PROTO 0 /**/
-
-/* HAS_GETHOST_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for gethostent(), gethostbyname(), and
- * gethostbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETHOST_PROTOS /**/
-
-/* HAS_GETLOGIN_R:
- * This symbol, if defined, indicates that the getlogin_r routine
- * is available to getlogin re-entrantly.
- */
-/* GETLOGIN_R_PROTO:
- * This symbol encodes the prototype of getlogin_r.
- * It is zero if d_getlogin_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getlogin_r
- * is defined.
- */
-/*#define HAS_GETLOGIN_R / **/
-#define GETLOGIN_R_PROTO 0 /**/
-
-/* HAS_GETNETBYADDR:
- * This symbol, if defined, indicates that the getnetbyaddr() routine is
- * available to look up networks by their IP addresses.
- */
-/*#define HAS_GETNETBYADDR / **/
-
-/* HAS_GETNETBYNAME:
- * This symbol, if defined, indicates that the getnetbyname() routine is
- * available to look up networks by their names.
- */
-/*#define HAS_GETNETBYNAME / **/
-
-/* HAS_GETNETENT:
- * This symbol, if defined, indicates that the getnetent() routine is
- * available to look up network names in some data base or another.
- */
-/*#define HAS_GETNETENT / **/
-
-/* HAS_GETNETBYADDR_R:
- * This symbol, if defined, indicates that the getnetbyaddr_r routine
- * is available to getnetbyaddr re-entrantly.
- */
-/* GETNETBYADDR_R_PROTO:
- * This symbol encodes the prototype of getnetbyaddr_r.
- * It is zero if d_getnetbyaddr_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getnetbyaddr_r
- * is defined.
- */
-/*#define HAS_GETNETBYADDR_R / **/
-#define GETNETBYADDR_R_PROTO 0 /**/
-
-/* HAS_GETNETBYNAME_R:
- * This symbol, if defined, indicates that the getnetbyname_r routine
- * is available to getnetbyname re-entrantly.
- */
-/* GETNETBYNAME_R_PROTO:
- * This symbol encodes the prototype of getnetbyname_r.
- * It is zero if d_getnetbyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getnetbyname_r
- * is defined.
- */
-/*#define HAS_GETNETBYNAME_R / **/
-#define GETNETBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETNETENT_R:
- * This symbol, if defined, indicates that the getnetent_r routine
- * is available to getnetent re-entrantly.
- */
-/* GETNETENT_R_PROTO:
- * This symbol encodes the prototype of getnetent_r.
- * It is zero if d_getnetent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getnetent_r
- * is defined.
- */
-/*#define HAS_GETNETENT_R / **/
-#define GETNETENT_R_PROTO 0 /**/
-
-/* HAS_GETNET_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getnetent(), getnetbyname(), and
- * getnetbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-/*#define HAS_GETNET_PROTOS / **/
-
-/* HAS_GETPROTOENT:
- * This symbol, if defined, indicates that the getprotoent() routine is
- * available to look up protocols in some data base or another.
- */
-/*#define HAS_GETPROTOENT / **/
-
-/* HAS_GETPGRP:
- * This symbol, if defined, indicates that the getpgrp routine is
- * available to get the current process group.
- */
-/* USE_BSD_GETPGRP:
- * This symbol, if defined, indicates that getpgrp needs one
- * arguments whereas USG one needs none.
- */
-/*#define HAS_GETPGRP / **/
-/*#define USE_BSD_GETPGRP / **/
-
-/* HAS_GETPROTOBYNAME:
- * This symbol, if defined, indicates that the getprotobyname()
- * routine is available to look up protocols by their name.
- */
-/* HAS_GETPROTOBYNUMBER:
- * This symbol, if defined, indicates that the getprotobynumber()
- * routine is available to look up protocols by their number.
- */
-#define HAS_GETPROTOBYNAME /**/
-#define HAS_GETPROTOBYNUMBER /**/
-
-/* HAS_GETPROTOBYNAME_R:
- * This symbol, if defined, indicates that the getprotobyname_r routine
- * is available to getprotobyname re-entrantly.
- */
-/* GETPROTOBYNAME_R_PROTO:
- * This symbol encodes the prototype of getprotobyname_r.
- * It is zero if d_getprotobyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getprotobyname_r
- * is defined.
- */
-/*#define HAS_GETPROTOBYNAME_R / **/
-#define GETPROTOBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETPROTOBYNUMBER_R:
- * This symbol, if defined, indicates that the getprotobynumber_r routine
- * is available to getprotobynumber re-entrantly.
- */
-/* GETPROTOBYNUMBER_R_PROTO:
- * This symbol encodes the prototype of getprotobynumber_r.
- * It is zero if d_getprotobynumber_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getprotobynumber_r
- * is defined.
- */
-/*#define HAS_GETPROTOBYNUMBER_R / **/
-#define GETPROTOBYNUMBER_R_PROTO 0 /**/
-
-/* HAS_GETPROTOENT_R:
- * This symbol, if defined, indicates that the getprotoent_r routine
- * is available to getprotoent re-entrantly.
- */
-/* GETPROTOENT_R_PROTO:
- * This symbol encodes the prototype of getprotoent_r.
- * It is zero if d_getprotoent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getprotoent_r
- * is defined.
- */
-/*#define HAS_GETPROTOENT_R / **/
-#define GETPROTOENT_R_PROTO 0 /**/
-
-/* HAS_GETPROTO_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getprotoent(), getprotobyname(), and
- * getprotobyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETPROTO_PROTOS /**/
-
-/* HAS_GETPWENT:
- * This symbol, if defined, indicates that the getpwent routine is
- * available for sequential access of the passwd database.
- * If this is not available, the older getpw() function may be available.
- */
-/*#define HAS_GETPWENT / **/
-
-/* HAS_GETPWENT_R:
- * This symbol, if defined, indicates that the getpwent_r routine
- * is available to getpwent re-entrantly.
- */
-/* GETPWENT_R_PROTO:
- * This symbol encodes the prototype of getpwent_r.
- * It is zero if d_getpwent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwent_r
- * is defined.
- */
-/*#define HAS_GETPWENT_R / **/
-#define GETPWENT_R_PROTO 0 /**/
-
-/* HAS_GETPWNAM_R:
- * This symbol, if defined, indicates that the getpwnam_r routine
- * is available to getpwnam re-entrantly.
- */
-/* GETPWNAM_R_PROTO:
- * This symbol encodes the prototype of getpwnam_r.
- * It is zero if d_getpwnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwnam_r
- * is defined.
- */
-/*#define HAS_GETPWNAM_R / **/
-#define GETPWNAM_R_PROTO 0 /**/
-
-/* HAS_GETPWUID_R:
- * This symbol, if defined, indicates that the getpwuid_r routine
- * is available to getpwuid re-entrantly.
- */
-/* GETPWUID_R_PROTO:
- * This symbol encodes the prototype of getpwuid_r.
- * It is zero if d_getpwuid_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwuid_r
- * is defined.
- */
-/*#define HAS_GETPWUID_R / **/
-#define GETPWUID_R_PROTO 0 /**/
-
-/* HAS_GETSERVENT:
- * This symbol, if defined, indicates that the getservent() routine is
- * available to look up network services in some data base or another.
- */
-/*#define HAS_GETSERVENT / **/
-
-/* HAS_GETSERVBYNAME_R:
- * This symbol, if defined, indicates that the getservbyname_r routine
- * is available to getservbyname re-entrantly.
- */
-/* GETSERVBYNAME_R_PROTO:
- * This symbol encodes the prototype of getservbyname_r.
- * It is zero if d_getservbyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservbyname_r
- * is defined.
- */
-/*#define HAS_GETSERVBYNAME_R / **/
-#define GETSERVBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETSERVBYPORT_R:
- * This symbol, if defined, indicates that the getservbyport_r routine
- * is available to getservbyport re-entrantly.
- */
-/* GETSERVBYPORT_R_PROTO:
- * This symbol encodes the prototype of getservbyport_r.
- * It is zero if d_getservbyport_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservbyport_r
- * is defined.
- */
-/*#define HAS_GETSERVBYPORT_R / **/
-#define GETSERVBYPORT_R_PROTO 0 /**/
-
-/* HAS_GETSERVENT_R:
- * This symbol, if defined, indicates that the getservent_r routine
- * is available to getservent re-entrantly.
- */
-/* GETSERVENT_R_PROTO:
- * This symbol encodes the prototype of getservent_r.
- * It is zero if d_getservent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservent_r
- * is defined.
- */
-/*#define HAS_GETSERVENT_R / **/
-#define GETSERVENT_R_PROTO 0 /**/
-
-/* HAS_GETSERV_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getservent(), getservbyname(), and
- * getservbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETSERV_PROTOS /**/
-
-/* HAS_GETSPNAM_R:
- * This symbol, if defined, indicates that the getspnam_r routine
- * is available to getspnam re-entrantly.
- */
-/* GETSPNAM_R_PROTO:
- * This symbol encodes the prototype of getspnam_r.
- * It is zero if d_getspnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getspnam_r
- * is defined.
- */
-/*#define HAS_GETSPNAM_R / **/
-#define GETSPNAM_R_PROTO 0 /**/
-
-/* HAS_GETSERVBYNAME:
- * This symbol, if defined, indicates that the getservbyname()
- * routine is available to look up services by their name.
- */
-/* HAS_GETSERVBYPORT:
- * This symbol, if defined, indicates that the getservbyport()
- * routine is available to look up services by their port.
- */
-#define HAS_GETSERVBYNAME /**/
-#define HAS_GETSERVBYPORT /**/
-
-/* HAS_GMTIME_R:
- * This symbol, if defined, indicates that the gmtime_r routine
- * is available to gmtime re-entrantly.
- */
-/* GMTIME_R_PROTO:
- * This symbol encodes the prototype of gmtime_r.
- * It is zero if d_gmtime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gmtime_r
- * is defined.
- */
-/*#define HAS_GMTIME_R / **/
-#define GMTIME_R_PROTO 0 /**/
-
-/* HAS_HTONL:
- * This symbol, if defined, indicates that the htonl() routine (and
- * friends htons() ntohl() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_HTONS:
- * This symbol, if defined, indicates that the htons() routine (and
- * friends htonl() ntohl() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_NTOHL:
- * This symbol, if defined, indicates that the ntohl() routine (and
- * friends htonl() htons() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_NTOHS:
- * This symbol, if defined, indicates that the ntohs() routine (and
- * friends htonl() htons() ntohl()) are available to do network
- * order byte swapping.
- */
-#define HAS_HTONL /**/
-#define HAS_HTONS /**/
-#define HAS_NTOHL /**/
-#define HAS_NTOHS /**/
-
-/* HAS_LOCALTIME_R:
- * This symbol, if defined, indicates that the localtime_r routine
- * is available to localtime re-entrantly.
- */
-/* LOCALTIME_R_NEEDS_TZSET:
- * Many libc's localtime_r implementations do not call tzset,
- * making them differ from localtime(), and making timezone
- * changes using \undef{TZ} without explicitly calling tzset
- * impossible. This symbol makes us call tzset before localtime_r
- */
-/*#define LOCALTIME_R_NEEDS_TZSET / **/
-#ifdef LOCALTIME_R_NEEDS_TZSET
-#define L_R_TZSET tzset(),
-#else
-#define L_R_TZSET
-#endif
-
-/* LOCALTIME_R_PROTO:
- * This symbol encodes the prototype of localtime_r.
- * It is zero if d_localtime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_localtime_r
- * is defined.
- */
-/*#define HAS_LOCALTIME_R / **/
-#define LOCALTIME_R_PROTO 0 /**/
-
-/* HAS_LONG_DOUBLE:
- * This symbol will be defined if the C compiler supports long
- * doubles.
- */
-/* LONG_DOUBLESIZE:
- * This symbol contains the size of a long double, so that the
- * C preprocessor can make decisions based on it. It is only
- * defined if the system supports long doubles.
- */
-#define HAS_LONG_DOUBLE /**/
-#ifdef HAS_LONG_DOUBLE
-#define LONG_DOUBLESIZE 8 /**/
-#endif
-
-/* HAS_LONG_LONG:
- * This symbol will be defined if the C compiler supports long long.
- */
-/* LONGLONGSIZE:
- * This symbol contains the size of a long long, so that the
- * C preprocessor can make decisions based on it. It is only
- * defined if the system supports long long.
- */
-/*#define HAS_LONG_LONG / **/
-#ifdef HAS_LONG_LONG
-#define LONGLONGSIZE 8 /**/
-#endif
-
-/* HAS_LSEEK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the lseek() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern off_t lseek(int, off_t, int);
- */
-#define HAS_LSEEK_PROTO /**/
-
-/* HAS_MEMCHR:
- * This symbol, if defined, indicates that the memchr routine is available
- * to locate characters within a C string.
- */
-#define HAS_MEMCHR /**/
-
-/* HAS_MKSTEMP:
- * This symbol, if defined, indicates that the mkstemp routine is
- * available to exclusively create and open a uniquely named
- * temporary file.
- */
-/*#define HAS_MKSTEMP / **/
-
-/* HAS_MMAP:
- * This symbol, if defined, indicates that the mmap system call is
- * available to map a file into memory.
- */
-/* Mmap_t:
- * This symbol holds the return type of the mmap() system call
- * (and simultaneously the type of the first argument).
- * Usually set to 'void *' or 'caddr_t'.
- */
-/*#define HAS_MMAP / **/
-#define Mmap_t void * /**/
-
-/* HAS_MSG:
- * This symbol, if defined, indicates that the entire msg*(2) library is
- * supported (IPC mechanism based on message queues).
- */
-/*#define HAS_MSG / **/
-
-/* OLD_PTHREAD_CREATE_JOINABLE:
- * This symbol, if defined, indicates how to create pthread
- * in joinable (aka undetached) state. NOTE: not defined
- * if pthread.h already has defined PTHREAD_CREATE_JOINABLE
- * (the new version of the constant).
- * If defined, known values are PTHREAD_CREATE_UNDETACHED
- * and __UNDETACHED.
- */
-/*#define OLD_PTHREAD_CREATE_JOINABLE / **/
-
-/* HAS_PTHREAD_ATFORK:
- * This symbol, if defined, indicates that the pthread_atfork routine
- * is available to setup fork handlers.
- */
-/*#define HAS_PTHREAD_ATFORK / **/
-
-/* HAS_PTHREAD_YIELD:
- * This symbol, if defined, indicates that the pthread_yield
- * routine is available to yield the execution of the current
- * thread. sched_yield is preferable to pthread_yield.
- */
-/* SCHED_YIELD:
- * This symbol defines the way to yield the execution of
- * the current thread. Known ways are sched_yield,
- * pthread_yield, and pthread_yield with NULL.
- */
-/* HAS_SCHED_YIELD:
- * This symbol, if defined, indicates that the sched_yield
- * routine is available to yield the execution of the current
- * thread. sched_yield is preferable to pthread_yield.
- */
-/*#define HAS_PTHREAD_YIELD / **/
-#define SCHED_YIELD /**/
-/*#define HAS_SCHED_YIELD / **/
-
-/* HAS_RANDOM_R:
- * This symbol, if defined, indicates that the random_r routine
- * is available to random re-entrantly.
- */
-/* RANDOM_R_PROTO:
- * This symbol encodes the prototype of random_r.
- * It is zero if d_random_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_random_r
- * is defined.
- */
-/*#define HAS_RANDOM_R / **/
-#define RANDOM_R_PROTO 0 /**/
-
-/* HAS_READDIR64_R:
- * This symbol, if defined, indicates that the readdir64_r routine
- * is available to readdir64 re-entrantly.
- */
-/* READDIR64_R_PROTO:
- * This symbol encodes the prototype of readdir64_r.
- * It is zero if d_readdir64_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_readdir64_r
- * is defined.
- */
-/*#define HAS_READDIR64_R / **/
-#define READDIR64_R_PROTO 0 /**/
-
-/* HAS_READDIR_R:
- * This symbol, if defined, indicates that the readdir_r routine
- * is available to readdir re-entrantly.
- */
-/* READDIR_R_PROTO:
- * This symbol encodes the prototype of readdir_r.
- * It is zero if d_readdir_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_readdir_r
- * is defined.
- */
-/*#define HAS_READDIR_R / **/
-#define READDIR_R_PROTO 0 /**/
-
-/* HAS_SEM:
- * This symbol, if defined, indicates that the entire sem*(2) library is
- * supported.
- */
-/*#define HAS_SEM / **/
-
-/* HAS_SETGRENT:
- * This symbol, if defined, indicates that the setgrent routine is
- * available for initializing sequential access of the group database.
- */
-/*#define HAS_SETGRENT / **/
-
-/* HAS_SETGRENT_R:
- * This symbol, if defined, indicates that the setgrent_r routine
- * is available to setgrent re-entrantly.
- */
-/* SETGRENT_R_PROTO:
- * This symbol encodes the prototype of setgrent_r.
- * It is zero if d_setgrent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setgrent_r
- * is defined.
- */
-/*#define HAS_SETGRENT_R / **/
-#define SETGRENT_R_PROTO 0 /**/
-
-/* HAS_SETHOSTENT:
- * This symbol, if defined, indicates that the sethostent() routine is
- * available.
- */
-/*#define HAS_SETHOSTENT / **/
-
-/* HAS_SETHOSTENT_R:
- * This symbol, if defined, indicates that the sethostent_r routine
- * is available to sethostent re-entrantly.
- */
-/* SETHOSTENT_R_PROTO:
- * This symbol encodes the prototype of sethostent_r.
- * It is zero if d_sethostent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_sethostent_r
- * is defined.
- */
-/*#define HAS_SETHOSTENT_R / **/
-#define SETHOSTENT_R_PROTO 0 /**/
-
-/* HAS_SETLOCALE_R:
- * This symbol, if defined, indicates that the setlocale_r routine
- * is available to setlocale re-entrantly.
- */
-/* SETLOCALE_R_PROTO:
- * This symbol encodes the prototype of setlocale_r.
- * It is zero if d_setlocale_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setlocale_r
- * is defined.
- */
-/*#define HAS_SETLOCALE_R / **/
-#define SETLOCALE_R_PROTO 0 /**/
-
-/* HAS_SETNETENT:
- * This symbol, if defined, indicates that the setnetent() routine is
- * available.
- */
-/*#define HAS_SETNETENT / **/
-
-/* HAS_SETNETENT_R:
- * This symbol, if defined, indicates that the setnetent_r routine
- * is available to setnetent re-entrantly.
- */
-/* SETNETENT_R_PROTO:
- * This symbol encodes the prototype of setnetent_r.
- * It is zero if d_setnetent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setnetent_r
- * is defined.
- */
-/*#define HAS_SETNETENT_R / **/
-#define SETNETENT_R_PROTO 0 /**/
-
-/* HAS_SETPROTOENT:
- * This symbol, if defined, indicates that the setprotoent() routine is
- * available.
- */
-/*#define HAS_SETPROTOENT / **/
-
-/* HAS_SETPGRP:
- * This symbol, if defined, indicates that the setpgrp routine is
- * available to set the current process group.
- */
-/* USE_BSD_SETPGRP:
- * This symbol, if defined, indicates that setpgrp needs two
- * arguments whereas USG one needs none. See also HAS_SETPGID
- * for a POSIX interface.
- */
-/*#define HAS_SETPGRP / **/
-/*#define USE_BSD_SETPGRP / **/
-
-/* HAS_SETPROTOENT_R:
- * This symbol, if defined, indicates that the setprotoent_r routine
- * is available to setprotoent re-entrantly.
- */
-/* SETPROTOENT_R_PROTO:
- * This symbol encodes the prototype of setprotoent_r.
- * It is zero if d_setprotoent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setprotoent_r
- * is defined.
- */
-/*#define HAS_SETPROTOENT_R / **/
-#define SETPROTOENT_R_PROTO 0 /**/
-
-/* HAS_SETPWENT:
- * This symbol, if defined, indicates that the setpwent routine is
- * available for initializing sequential access of the passwd database.
- */
-/*#define HAS_SETPWENT / **/
-
-/* HAS_SETPWENT_R:
- * This symbol, if defined, indicates that the setpwent_r routine
- * is available to setpwent re-entrantly.
- */
-/* SETPWENT_R_PROTO:
- * This symbol encodes the prototype of setpwent_r.
- * It is zero if d_setpwent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setpwent_r
- * is defined.
- */
-/*#define HAS_SETPWENT_R / **/
-#define SETPWENT_R_PROTO 0 /**/
-
-/* HAS_SETSERVENT:
- * This symbol, if defined, indicates that the setservent() routine is
- * available.
- */
-/*#define HAS_SETSERVENT / **/
-
-/* HAS_SETSERVENT_R:
- * This symbol, if defined, indicates that the setservent_r routine
- * is available to setservent re-entrantly.
- */
-/* SETSERVENT_R_PROTO:
- * This symbol encodes the prototype of setservent_r.
- * It is zero if d_setservent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setservent_r
- * is defined.
- */
-/*#define HAS_SETSERVENT_R / **/
-#define SETSERVENT_R_PROTO 0 /**/
-
-/* HAS_SETVBUF:
- * This symbol, if defined, indicates that the setvbuf routine is
- * available to change buffering on an open stdio stream.
- * to a line-buffered mode.
- */
-#define HAS_SETVBUF /**/
-
-/* HAS_SHM:
- * This symbol, if defined, indicates that the entire shm*(2) library is
- * supported.
- */
-/*#define HAS_SHM / **/
-
-/* Shmat_t:
- * This symbol holds the return type of the shmat() system call.
- * Usually set to 'void *' or 'char *'.
- */
-/* HAS_SHMAT_PROTOTYPE:
- * This symbol, if defined, indicates that the sys/shm.h includes
- * a prototype for shmat(). Otherwise, it is up to the program to
- * guess one. Shmat_t shmat(int, Shmat_t, int) is a good guess,
- * but not always right so it should be emitted by the program only
- * when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs.
- */
-#define Shmat_t void * /**/
-/*#define HAS_SHMAT_PROTOTYPE / **/
-
-/* HAS_SOCKET:
- * This symbol, if defined, indicates that the BSD socket interface is
- * supported.
- */
-/* HAS_SOCKETPAIR:
- * This symbol, if defined, indicates that the BSD socketpair() call is
- * supported.
- */
-/* HAS_MSG_CTRUNC:
- * This symbol, if defined, indicates that the MSG_CTRUNC is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_DONTROUTE:
- * This symbol, if defined, indicates that the MSG_DONTROUTE is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_OOB:
- * This symbol, if defined, indicates that the MSG_OOB is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_PEEK:
- * This symbol, if defined, indicates that the MSG_PEEK is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_PROXY:
- * This symbol, if defined, indicates that the MSG_PROXY is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_SCM_RIGHTS:
- * This symbol, if defined, indicates that the SCM_RIGHTS is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-#define HAS_SOCKET /**/
-/*#define HAS_SOCKETPAIR / **/
-/*#define HAS_MSG_CTRUNC / **/
-/*#define HAS_MSG_DONTROUTE / **/
-/*#define HAS_MSG_OOB / **/
-/*#define HAS_MSG_PEEK / **/
-/*#define HAS_MSG_PROXY / **/
-/*#define HAS_SCM_RIGHTS / **/
-
-/* HAS_SRAND48_R:
- * This symbol, if defined, indicates that the srand48_r routine
- * is available to srand48 re-entrantly.
- */
-/* SRAND48_R_PROTO:
- * This symbol encodes the prototype of srand48_r.
- * It is zero if d_srand48_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_srand48_r
- * is defined.
- */
-/*#define HAS_SRAND48_R / **/
-#define SRAND48_R_PROTO 0 /**/
-
-/* HAS_SRANDOM_R:
- * This symbol, if defined, indicates that the srandom_r routine
- * is available to srandom re-entrantly.
- */
-/* SRANDOM_R_PROTO:
- * This symbol encodes the prototype of srandom_r.
- * It is zero if d_srandom_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_srandom_r
- * is defined.
- */
-/*#define HAS_SRANDOM_R / **/
-#define SRANDOM_R_PROTO 0 /**/
-
-/* USE_STAT_BLOCKS:
- * This symbol is defined if this system has a stat structure declaring
- * st_blksize and st_blocks.
- */
-#ifndef USE_STAT_BLOCKS
-/*#define USE_STAT_BLOCKS / **/
-#endif
-
-/* USE_STRUCT_COPY:
- * This symbol, if defined, indicates that this C compiler knows how
- * to copy structures. If undefined, you'll need to use a block copy
- * routine of some sort instead.
- */
-#define USE_STRUCT_COPY /**/
-
-/* HAS_STRERROR:
- * This symbol, if defined, indicates that the strerror routine is
- * available to translate error numbers to strings. See the writeup
- * of Strerror() in this file before you try to define your own.
- */
-/* HAS_SYS_ERRLIST:
- * This symbol, if defined, indicates that the sys_errlist array is
- * available to translate error numbers to strings. The extern int
- * sys_nerr gives the size of that table.
- */
-/* Strerror:
- * This preprocessor symbol is defined as a macro if strerror() is
- * not available to translate error numbers to strings but sys_errlist[]
- * array is there.
- */
-#define HAS_STRERROR /**/
-#define HAS_SYS_ERRLIST /**/
-#define Strerror(e) strerror(e)
-
-/* HAS_STRERROR_R:
- * This symbol, if defined, indicates that the strerror_r routine
- * is available to strerror re-entrantly.
- */
-/* STRERROR_R_PROTO:
- * This symbol encodes the prototype of strerror_r.
- * It is zero if d_strerror_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_strerror_r
- * is defined.
- */
-/*#define HAS_STRERROR_R / **/
-#define STRERROR_R_PROTO 0 /**/
-
-/* HAS_STRTOUL:
- * This symbol, if defined, indicates that the strtoul routine is
- * available to provide conversion of strings to unsigned long.
- */
-#define HAS_STRTOUL /**/
-
-/* HAS_TIME:
- * This symbol, if defined, indicates that the time() routine exists.
- */
-/* Time_t:
- * This symbol holds the type returned by time(). It can be long,
- * or time_t on BSD sites (in which case <sys/types.h> should be
- * included).
- */
-#define HAS_TIME /**/
-#define Time_t time_t /* Time type */
-
-/* HAS_TIMES:
- * This symbol, if defined, indicates that the times() routine exists.
- * Note that this became obsolete on some systems (SUNOS), which now
- * use getrusage(). It may be necessary to include <sys/times.h>.
- */
-#define HAS_TIMES /**/
-
-/* HAS_TMPNAM_R:
- * This symbol, if defined, indicates that the tmpnam_r routine
- * is available to tmpnam re-entrantly.
- */
-/* TMPNAM_R_PROTO:
- * This symbol encodes the prototype of tmpnam_r.
- * It is zero if d_tmpnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_tmpnam_r
- * is defined.
- */
-/*#define HAS_TMPNAM_R / **/
-#define TMPNAM_R_PROTO 0 /**/
-
-/* HAS_TTYNAME_R:
- * This symbol, if defined, indicates that the ttyname_r routine
- * is available to ttyname re-entrantly.
- */
-/* TTYNAME_R_PROTO:
- * This symbol encodes the prototype of ttyname_r.
- * It is zero if d_ttyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ttyname_r
- * is defined.
- */
-/*#define HAS_TTYNAME_R / **/
-#define TTYNAME_R_PROTO 0 /**/
-
-/* HAS_UNION_SEMUN:
- * This symbol, if defined, indicates that the union semun is
- * defined by including <sys/sem.h>. If not, the user code
- * probably needs to define it as:
- * union semun {
- * int val;
- * struct semid_ds *buf;
- * unsigned short *array;
- * }
- */
-/* USE_SEMCTL_SEMUN:
- * This symbol, if defined, indicates that union semun is
- * used for semctl IPC_STAT.
- */
-/* USE_SEMCTL_SEMID_DS:
- * This symbol, if defined, indicates that struct semid_ds * is
- * used for semctl IPC_STAT.
- */
-#define HAS_UNION_SEMUN /**/
-/*#define USE_SEMCTL_SEMUN / **/
-/*#define USE_SEMCTL_SEMID_DS / **/
-
-/* HAS_VFORK:
- * This symbol, if defined, indicates that vfork() exists.
- */
-/*#define HAS_VFORK / **/
-
-/* HAS_PSEUDOFORK:
- * This symbol, if defined, indicates that an emulation of the
- * fork routine is available.
- */
-/*#define HAS_PSEUDOFORK / **/
-
-/* Signal_t:
- * This symbol's value is either "void" or "int", corresponding to the
- * appropriate return type of a signal handler. Thus, you can declare
- * a signal handler using "Signal_t (*handler)()", and define the
- * handler using "Signal_t handler(sig)".
- */
-#define Signal_t void /* Signal handler's return type */
-
-/* HASVOLATILE:
- * This symbol, if defined, indicates that this C compiler knows about
- * the volatile declaration.
- */
-#define HASVOLATILE /**/
-#ifndef HASVOLATILE
-#define volatile
-#endif
-
-/* Fpos_t:
- * This symbol holds the type used to declare file positions in libc.
- * It can be fpos_t, long, uint, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Fpos_t fpos_t /* File position type */
-
-/* Gid_t_f:
- * This symbol defines the format string used for printing a Gid_t.
- */
-#define Gid_t_f "ld" /**/
-
-/* Gid_t_sign:
- * This symbol holds the signedess of a Gid_t.
- * 1 for unsigned, -1 for signed.
- */
-#define Gid_t_sign -1 /* GID sign */
-
-/* Gid_t_size:
- * This symbol holds the size of a Gid_t in bytes.
- */
-#define Gid_t_size 4 /* GID size */
-
-/* Gid_t:
- * This symbol holds the return type of getgid() and the type of
- * argument to setrgid() and related functions. Typically,
- * it is the type of group ids in the kernel. It can be int, ushort,
- * gid_t, etc... It may be necessary to include <sys/types.h> to get
- * any typedef'ed information.
- */
-#define Gid_t gid_t /* Type for getgid(), etc... */
-
-/* I_DIRENT:
- * This symbol, if defined, indicates to the C program that it should
- * include <dirent.h>. Using this symbol also triggers the definition
- * of the Direntry_t define which ends up being 'struct dirent' or
- * 'struct direct' depending on the availability of <dirent.h>.
- */
-/* DIRNAMLEN:
- * This symbol, if defined, indicates to the C program that the length
- * of directory entry names is provided by a d_namlen field. Otherwise
- * you need to do strlen() on the d_name field.
- */
-/* Direntry_t:
- * This symbol is set to 'struct direct' or 'struct dirent' depending on
- * whether dirent is available or not. You should use this pseudo type to
- * portably declare your directory entries.
- */
-#define I_DIRENT /**/
-#define DIRNAMLEN /**/
-#define Direntry_t struct direct
-
-/* I_GRP:
- * This symbol, if defined, indicates to the C program that it should
- * include <grp.h>.
- */
-/* GRPASSWD:
- * This symbol, if defined, indicates to the C program that struct group
- * in <grp.h> contains gr_passwd.
- */
-/*#define I_GRP / **/
-/*#define GRPASSWD / **/
-
-/* I_MACH_CTHREADS:
- * This symbol, if defined, indicates to the C program that it should
- * include <mach/cthreads.h>.
- */
-/*#define I_MACH_CTHREADS / **/
-
-/* I_NDBM:
- * This symbol, if defined, indicates that <ndbm.h> exists and should
- * be included.
- */
-/* I_GDBMNDBM:
- * This symbol, if defined, indicates that <gdbm/ndbm.h> exists and should
- * be included. This was the location of the ndbm.h compatibility file
- * in RedHat 7.1.
- */
-/* I_GDBM_NDBM:
- * This symbol, if defined, indicates that <gdbm-ndbm.h> exists and should
- * be included. This is the location of the ndbm.h compatibility file
- * in Debian 4.0.
- */
-/* NDBM_H_USES_PROTOTYPES:
- * This symbol, if defined, indicates that <ndbm.h> uses real ANSI C
- * prototypes instead of K&R style function declarations without any
- * parameter information. While ANSI C prototypes are supported in C++,
- * K&R style function declarations will yield errors.
- */
-/* GDBMNDBM_H_USES_PROTOTYPES:
- * This symbol, if defined, indicates that <gdbm/ndbm.h> uses real ANSI C
- * prototypes instead of K&R style function declarations without any
- * parameter information. While ANSI C prototypes are supported in C++,
- * K&R style function declarations will yield errors.
- */
-/* GDBM_NDBM_H_USES_PROTOTYPES:
- * This symbol, if defined, indicates that <gdbm-ndbm.h> uses real ANSI C
- * prototypes instead of K&R style function declarations without any
- * parameter information. While ANSI C prototypes are supported in C++,
- * K&R style function declarations will yield errors.
- */
-/*#define I_NDBM / **/
-/*#define I_GDBMNDBM / **/
-/*#define I_GDBM_NDBM / **/
-/*#define NDBM_H_USES_PROTOTYPES / **/
-/*#define GDBMNDBM_H_USES_PROTOTYPES / **/
-/*#define GDBM_NDBM_H_USES_PROTOTYPES / **/
-
-/* I_NETDB:
- * This symbol, if defined, indicates that <netdb.h> exists and
- * should be included.
- */
-/*#define I_NETDB / **/
-
-/* I_NET_ERRNO:
- * This symbol, if defined, indicates that <net/errno.h> exists and
- * should be included.
- */
-/*#define I_NET_ERRNO / **/
-
-/* I_PTHREAD:
- * This symbol, if defined, indicates to the C program that it should
- * include <pthread.h>.
- */
-/*#define I_PTHREAD / **/
-
-/* I_PWD:
- * This symbol, if defined, indicates to the C program that it should
- * include <pwd.h>.
- */
-/* PWQUOTA:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_quota.
- */
-/* PWAGE:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_age.
- */
-/* PWCHANGE:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_change.
- */
-/* PWCLASS:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_class.
- */
-/* PWEXPIRE:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_expire.
- */
-/* PWCOMMENT:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_comment.
- */
-/* PWGECOS:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_gecos.
- */
-/* PWPASSWD:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_passwd.
- */
-/*#define I_PWD / **/
-/*#define PWQUOTA / **/
-/*#define PWAGE / **/
-/*#define PWCHANGE / **/
-/*#define PWCLASS / **/
-/*#define PWEXPIRE / **/
-/*#define PWCOMMENT / **/
-/*#define PWGECOS / **/
-/*#define PWPASSWD / **/
-
-/* I_SYS_ACCESS:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/access.h>.
- */
-/*#define I_SYS_ACCESS / **/
-
-/* I_SYS_SECURITY:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/security.h>.
- */
-/*#define I_SYS_SECURITY / **/
-
-/* I_SYSUIO:
- * This symbol, if defined, indicates that <sys/uio.h> exists and
- * should be included.
- */
-/*#define I_SYSUIO / **/
-
-/* I_STDARG:
- * This symbol, if defined, indicates that <stdarg.h> exists and should
- * be included.
- */
-/* I_VARARGS:
- * This symbol, if defined, indicates to the C program that it should
- * include <varargs.h>.
- */
-#define I_STDARG /**/
-/*#define I_VARARGS / **/
-
-/* PERL_INC_VERSION_LIST:
- * This variable specifies the list of subdirectories in over
- * which perl.c:incpush() and lib/lib.pm will automatically
- * search when adding directories to @INC, in a format suitable
- * for a C initialization string. See the inc_version_list entry
- * in Porting/Glossary for more details.
- */
-/*#define PERL_INC_VERSION_LIST 0 / **/
-
-/* INSTALL_USR_BIN_PERL:
- * This symbol, if defined, indicates that Perl is to be installed
- * also as /usr/bin/perl.
- */
-/*#define INSTALL_USR_BIN_PERL / **/
-
-/* Off_t:
- * This symbol holds the type used to declare offsets in the kernel.
- * It can be int, long, off_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-/* LSEEKSIZE:
- * This symbol holds the number of bytes used by the Off_t.
- */
-/* Off_t_size:
- * This symbol holds the number of bytes used by the Off_t.
- */
-#define Off_t long /* <offset> type */
-#define LSEEKSIZE 4 /* <offset> size */
-#define Off_t_size 4 /* <offset> size */
-
-/* Free_t:
- * This variable contains the return type of free(). It is usually
- * void, but occasionally int.
- */
-/* Malloc_t:
- * This symbol is the type of pointer returned by malloc and realloc.
- */
-#define Malloc_t void * /**/
-#define Free_t void /**/
-
-/* PERL_MALLOC_WRAP:
- * This symbol, if defined, indicates that we'd like malloc wrap checks.
- */
-#define PERL_MALLOC_WRAP /**/
-
-/* MYMALLOC:
- * This symbol, if defined, indicates that we're using our own malloc.
- */
-/*#define MYMALLOC / **/
-
-/* Mode_t:
- * This symbol holds the type used to declare file modes
- * for systems calls. It is usually mode_t, but may be
- * int or unsigned short. It may be necessary to include <sys/types.h>
- * to get any typedef'ed information.
- */
-#define Mode_t mode_t /* file mode parameter for system calls */
-
-/* Netdb_host_t:
- * This symbol holds the type used for the 1st argument
- * to gethostbyaddr().
- */
-/* Netdb_hlen_t:
- * This symbol holds the type used for the 2nd argument
- * to gethostbyaddr().
- */
-/* Netdb_name_t:
- * This symbol holds the type used for the argument to
- * gethostbyname().
- */
-/* Netdb_net_t:
- * This symbol holds the type used for the 1st argument to
- * getnetbyaddr().
- */
-#define Netdb_host_t char * /**/
-#define Netdb_hlen_t int /**/
-#define Netdb_name_t char * /**/
-#define Netdb_net_t long /**/
-
-/* PERL_OTHERLIBDIRS:
- * This variable contains a colon-separated set of paths for the perl
- * binary to search for additional library files or modules.
- * These directories will be tacked to the end of @INC.
- * Perl will automatically search below each path for version-
- * and architecture-specific directories. See PERL_INC_VERSION_LIST
- * for more details.
- */
-/*#define PERL_OTHERLIBDIRS "" / **/
-
-/* Pid_t:
- * This symbol holds the type used to declare process ids in the kernel.
- * It can be int, uint, pid_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Pid_t int /* PID type */
-
-/* PRIVLIB:
- * This symbol contains the name of the private library for this package.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world. The program
- * should be prepared to do ~ expansion.
- */
-/* PRIVLIB_EXP:
- * This symbol contains the ~name expanded version of PRIVLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define PRIVLIB "c:\\perl\\lib" /**/
-#define PRIVLIB_EXP (win32_get_privlib(PERL_VERSION_STRING, NULL)) /**/
-
-/* CAN_PROTOTYPE:
- * If defined, this macro indicates that the C compiler can handle
- * function prototypes.
- */
-/* _:
- * This macro is used to declare function parameters for folks who want
- * to make declarations with prototypes using a different style than
- * the above macros. Use double parentheses. For example:
- *
- * int main _((int argc, char *argv[]));
- */
-#define CAN_PROTOTYPE /**/
-#ifdef CAN_PROTOTYPE
-#define _(args) args
-#else
-#define _(args) ()
-#endif
-
-/* Select_fd_set_t:
- * This symbol holds the type used for the 2nd, 3rd, and 4th
- * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET
- * is defined, and 'int *' otherwise. This is only useful if you
- * have select(), of course.
- */
-#define Select_fd_set_t Perl_fd_set * /**/
-
-/* SH_PATH:
- * This symbol contains the full pathname to the shell used on this
- * on this system to execute Bourne shell scripts. Usually, this will be
- * /bin/sh, though it's possible that some systems will have /bin/ksh,
- * /bin/pdksh, /bin/ash, /bin/bash, or even something such as
- * D:/bin/sh.exe.
- */
-#define SH_PATH "cmd /x /c" /**/
-
-/* SIG_NAME:
- * This symbol contains a list of signal names in order of
- * signal number. This is intended
- * to be used as a static array initialization, like this:
- * char *sig_name[] = { SIG_NAME };
- * The signals in the list are separated with commas, and each signal
- * is surrounded by double quotes. There is no leading SIG in the signal
- * name, i.e. SIGQUIT is known as "QUIT".
- * Gaps in the signal numbers (up to NSIG) are filled in with NUMnn,
- * etc., where nn is the actual signal number (e.g. NUM37).
- * The signal number for sig_name[i] is stored in sig_num[i].
- * The last element is 0 to terminate the list with a NULL. This
- * corresponds to the 0 at the end of the sig_name_init list.
- * Note that this variable is initialized from the sig_name_init,
- * not from sig_name (which is unused).
- */
-/* SIG_NUM:
- * This symbol contains a list of signal numbers, in the same order as the
- * SIG_NAME list. It is suitable for static array initialization, as in:
- * int sig_num[] = { SIG_NUM };
- * The signals in the list are separated with commas, and the indices
- * within that list and the SIG_NAME list match, so it's easy to compute
- * the signal name from a number or vice versa at the price of a small
- * dynamic linear lookup.
- * Duplicates are allowed, but are moved to the end of the list.
- * The signal number corresponding to sig_name[i] is sig_number[i].
- * if (i < NSIG) then sig_number[i] == i.
- * The last element is 0, corresponding to the 0 at the end of
- * the sig_name_init list.
- * Note that this variable is initialized from the sig_num_init,
- * not from sig_num (which is unused).
- */
-/* SIG_SIZE:
- * This variable contains the number of elements of the SIG_NAME
- * and SIG_NUM arrays, excluding the final NULL entry.
- */
-#define SIG_NAME "ZERO", "HUP", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0 /**/
-#define SIG_NUM 0, 1, 2, 21, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 20, 0 /**/
-#define SIG_SIZE 27 /**/
-
-/* SITEARCH:
- * This symbol contains the name of the private library for this package.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world. The program
- * should be prepared to do ~ expansion.
- * The standard distribution will put nothing in this directory.
- * After perl has been installed, users may install their own local
- * architecture-dependent modules in this directory with
- * MakeMaker Makefile.PL
- * or equivalent. See INSTALL for details.
- */
-/* SITEARCH_EXP:
- * This symbol contains the ~name expanded version of SITEARCH, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define SITEARCH "c:\\perl\\site\\lib" /**/
-/*#define SITEARCH_EXP "" / **/
-
-/* SITELIB:
- * This symbol contains the name of the private library for this package.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world. The program
- * should be prepared to do ~ expansion.
- * The standard distribution will put nothing in this directory.
- * After perl has been installed, users may install their own local
- * architecture-independent modules in this directory with
- * MakeMaker Makefile.PL
- * or equivalent. See INSTALL for details.
- */
-/* SITELIB_EXP:
- * This symbol contains the ~name expanded version of SITELIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/* SITELIB_STEM:
- * This define is SITELIB_EXP with any trailing version-specific component
- * removed. The elements in inc_version_list (inc_version_list.U) can
- * be tacked onto this variable to generate a list of directories to search.
- */
-#define SITELIB "c:\\perl\\site\\lib" /**/
-#define SITELIB_EXP (win32_get_sitelib(PERL_VERSION_STRING, NULL)) /**/
-#define SITELIB_STEM "" /**/
-
-/* Size_t_size:
- * This symbol holds the size of a Size_t in bytes.
- */
-#define Size_t_size 8 /**/
-
-/* Size_t:
- * This symbol holds the type used to declare length parameters
- * for string functions. It is usually size_t, but may be
- * unsigned long, int, etc. It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Size_t size_t /* length paramater for string functions */
-
-/* Sock_size_t:
- * This symbol holds the type used for the size argument of
- * various socket calls (just the base type, not the pointer-to).
- */
-#define Sock_size_t int /**/
-
-/* STDCHAR:
- * This symbol is defined to be the type of char used in stdio.h.
- * It has the values "unsigned char" or "char".
- */
-#define STDCHAR char /**/
-
-/* Uid_t_f:
- * This symbol defines the format string used for printing a Uid_t.
- */
-#define Uid_t_f "ld" /**/
-
-/* Uid_t_sign:
- * This symbol holds the signedess of a Uid_t.
- * 1 for unsigned, -1 for signed.
- */
-#define Uid_t_sign -1 /* UID sign */
-
-/* Uid_t_size:
- * This symbol holds the size of a Uid_t in bytes.
- */
-#define Uid_t_size 4 /* UID size */
-
-/* Uid_t:
- * This symbol holds the type used to declare user ids in the kernel.
- * It can be int, ushort, uid_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Uid_t uid_t /* UID type */
-
-/* USE_ITHREADS:
- * This symbol, if defined, indicates that Perl should be built to
- * use the interpreter-based threading implementation.
- */
-/* USE_5005THREADS:
- * This symbol, if defined, indicates that Perl should be built to
- * use the 5.005-based threading implementation.
- * Only valid up to 5.8.x.
- */
-/* OLD_PTHREADS_API:
- * This symbol, if defined, indicates that Perl should
- * be built to use the old draft POSIX threads API.
- */
-/* USE_REENTRANT_API:
- * This symbol, if defined, indicates that Perl should
- * try to use the various _r versions of library functions.
- * This is extremely experimental.
- */
-/*#define USE_5005THREADS / **/
-/*#define USE_ITHREADS / **/
-#if defined(USE_5005THREADS) && !defined(USE_ITHREADS)
-#define USE_THREADS /* until src is revised*/
-#endif
-/*#define OLD_PTHREADS_API / **/
-/*#define USE_REENTRANT_API / **/
-
-/* PERL_VENDORARCH:
- * If defined, this symbol contains the name of a private library.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world.
- * It may have a ~ on the front.
- * The standard distribution will put nothing in this directory.
- * Vendors who distribute perl may wish to place their own
- * architecture-dependent modules and extensions in this directory with
- * MakeMaker Makefile.PL INSTALLDIRS=vendor
- * or equivalent. See INSTALL for details.
- */
-/* PERL_VENDORARCH_EXP:
- * This symbol contains the ~name expanded version of PERL_VENDORARCH, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/*#define PERL_VENDORARCH "" / **/
-/*#define PERL_VENDORARCH_EXP "" / **/
-
-/* PERL_VENDORLIB_EXP:
- * This symbol contains the ~name expanded version of VENDORLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/* PERL_VENDORLIB_STEM:
- * This define is PERL_VENDORLIB_EXP with any trailing version-specific component
- * removed. The elements in inc_version_list (inc_version_list.U) can
- * be tacked onto this variable to generate a list of directories to search.
- */
-/*#define PERL_VENDORLIB_EXP "" / **/
-/*#define PERL_VENDORLIB_STEM "" / **/
-
-/* VOIDFLAGS:
- * This symbol indicates how much support of the void type is given by this
- * compiler. What various bits mean:
- *
- * 1 = supports declaration of void
- * 2 = supports arrays of pointers to functions returning void
- * 4 = supports comparisons between pointers to void functions and
- * addresses of void functions
- * 8 = suports declaration of generic void pointers
- *
- * The package designer should define VOIDUSED to indicate the requirements
- * of the package. This can be done either by #defining VOIDUSED before
- * including config.h, or by defining defvoidused in Myinit.U. If the
- * latter approach is taken, only those flags will be tested. If the
- * level of void support necessary is not present, defines void to int.
- */
-#ifndef VOIDUSED
-#define VOIDUSED 15
-#endif
-#define VOIDFLAGS 15
-#if (VOIDFLAGS & VOIDUSED) != VOIDUSED
-#define void int /* is void to be avoided? */
-#define M_VOID /* Xenix strikes again */
-#endif
-
-/* USE_CROSS_COMPILE:
- * This symbol, if defined, indicates that Perl is being cross-compiled.
- */
-/* PERL_TARGETARCH:
- * This symbol, if defined, indicates the target architecture
- * Perl has been cross-compiled to. Undefined if not a cross-compile.
- */
-#ifndef USE_CROSS_COMPILE
-/*#define USE_CROSS_COMPILE / **/
-#define PERL_TARGETARCH "" /**/
-#endif
-
-/* MEM_ALIGNBYTES:
- * This symbol contains the number of bytes required to align a
- * double, or a long double when applicable. Usual values are 2,
- * 4 and 8. The default is eight, for safety.
- */
-#if defined(USE_CROSS_COMPILE) || defined(MULTIARCH)
-# define MEM_ALIGNBYTES 8
-#else
-#define MEM_ALIGNBYTES 8
-#endif
-
-/* BYTEORDER:
- * This symbol holds the hexadecimal constant defined in byteorder,
- * in a UV, i.e. 0x1234 or 0x4321 or 0x12345678, etc...
- * If the compiler supports cross-compiling or multiple-architecture
- * binaries (eg. on NeXT systems), use compiler-defined macros to
- * determine the byte order.
- * On NeXT 3.2 (and greater), you can build "Fat" Multiple Architecture
- * Binaries (MAB) on either big endian or little endian machines.
- * The endian-ness is available at compile-time. This only matters
- * for perl, where the config.h can be generated and installed on
- * one system, and used by a different architecture to build an
- * extension. Older versions of NeXT that might not have
- * defined either *_ENDIAN__ were all on Motorola 680x0 series,
- * so the default case (for NeXT) is big endian to catch them.
- * This might matter for NeXT 3.0.
- */
-#if defined(USE_CROSS_COMPILE) || defined(MULTIARCH)
-# ifdef __LITTLE_ENDIAN__
-# if LONGSIZE == 4
-# define BYTEORDER 0x1234
-# else
-# if LONGSIZE == 8
-# define BYTEORDER 0x12345678
-# endif
-# endif
-# else
-# ifdef __BIG_ENDIAN__
-# if LONGSIZE == 4
-# define BYTEORDER 0x4321
-# else
-# if LONGSIZE == 8
-# define BYTEORDER 0x87654321
-# endif
-# endif
-# endif
-# endif
-# if !defined(BYTEORDER) && (defined(NeXT) || defined(__NeXT__))
-# define BYTEORDER 0x4321
-# endif
-#else
-#define BYTEORDER 0x1234 /* large digits for MSB */
-#endif /* NeXT */
-
-/* CHARBITS:
- * This symbol contains the size of a char, so that the C preprocessor
- * can make decisions based on it.
- */
-#define CHARBITS 8 /**/
-
-/* CASTI32:
- * This symbol is defined if the C compiler can cast negative
- * or large floating point numbers to 32-bit ints.
- */
-/*#define CASTI32 / **/
-
-/* CASTNEGFLOAT:
- * This symbol is defined if the C compiler can cast negative
- * numbers to unsigned longs, ints and shorts.
- */
-/* CASTFLAGS:
- * This symbol contains flags that say what difficulties the compiler
- * has casting odd floating values to unsigned long:
- * 0 = ok
- * 1 = couldn't cast < 0
- * 2 = couldn't cast >= 0x80000000
- * 4 = couldn't cast in argument expression list
- */
-#define CASTNEGFLOAT /**/
-#define CASTFLAGS 0 /**/
-
-/* VOID_CLOSEDIR:
- * This symbol, if defined, indicates that the closedir() routine
- * does not return a value.
- */
-/*#define VOID_CLOSEDIR / **/
-
-/* HAS_FD_SET:
- * This symbol, when defined, indicates presence of the fd_set typedef
- * in <sys/types.h>
- */
-#define HAS_FD_SET /**/
-
-/* Gconvert:
- * This preprocessor macro is defined to convert a floating point
- * number to a string without a trailing decimal point. This
- * emulates the behavior of sprintf("%g"), but is sometimes much more
- * efficient. If gconvert() is not available, but gcvt() drops the
- * trailing decimal point, then gcvt() is used. If all else fails,
- * a macro using sprintf("%g") is used. Arguments for the Gconvert
- * macro are: value, number of digits, whether trailing zeros should
- * be retained, and the output buffer.
- * The usual values are:
- * d_Gconvert='gconvert((x),(n),(t),(b))'
- * d_Gconvert='gcvt((x),(n),(b))'
- * d_Gconvert='sprintf((b),"%.*g",(n),(x))'
- * The last two assume trailing zeros should not be kept.
- */
-#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
-
-/* HAS_GETPAGESIZE:
- * This symbol, if defined, indicates that the getpagesize system call
- * is available to get system page size, which is the granularity of
- * many memory management calls.
- */
-/*#define HAS_GETPAGESIZE / **/
-
-/* HAS_GNULIBC:
- * This symbol, if defined, indicates to the C program that
- * the GNU C library is being used. A better check is to use
- * the __GLIBC__ and __GLIBC_MINOR__ symbols supplied with glibc.
- */
-/*#define HAS_GNULIBC / **/
-#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)
-# define _GNU_SOURCE
-#endif
-
-/* HAS_ISASCII:
- * This manifest constant lets the C program know that isascii
- * is available.
- */
-#define HAS_ISASCII /**/
-
-/* HAS_LCHOWN:
- * This symbol, if defined, indicates that the lchown routine is
- * available to operate on a symbolic link (instead of following the
- * link).
- */
-/*#define HAS_LCHOWN / **/
-
-/* HAS_OPEN3:
- * This manifest constant lets the C program know that the three
- * argument form of open(2) is available.
- */
-/*#define HAS_OPEN3 / **/
-
-/* HAS_SAFE_BCOPY:
- * This symbol, if defined, indicates that the bcopy routine is available
- * to copy potentially overlapping memory blocks. Normally, you should
- * probably use memmove() or memcpy(). If neither is defined, roll your
- * own version.
- */
-/*#define HAS_SAFE_BCOPY / **/
-
-/* HAS_SAFE_MEMCPY:
- * This symbol, if defined, indicates that the memcpy routine is available
- * to copy potentially overlapping memory blocks. If you need to
- * copy overlapping memory blocks, you should check HAS_MEMMOVE and
- * use memmove() instead, if available.
- */
-/*#define HAS_SAFE_MEMCPY / **/
-
-/* HAS_SANE_MEMCMP:
- * This symbol, if defined, indicates that the memcmp routine is available
- * and can be used to compare relative magnitudes of chars with their high
- * bits set. If it is not defined, roll your own version.
- */
-#define HAS_SANE_MEMCMP /**/
-
-/* HAS_SIGACTION:
- * This symbol, if defined, indicates that Vr4's sigaction() routine
- * is available.
- */
-/*#define HAS_SIGACTION / **/
-
-/* HAS_SIGSETJMP:
- * This variable indicates to the C program that the sigsetjmp()
- * routine is available to save the calling process's registers
- * and stack environment for later use by siglongjmp(), and
- * to optionally save the process's signal mask. See
- * Sigjmp_buf, Sigsetjmp, and Siglongjmp.
- */
-/* Sigjmp_buf:
- * This is the buffer type to be used with Sigsetjmp and Siglongjmp.
- */
-/* Sigsetjmp:
- * This macro is used in the same way as sigsetjmp(), but will invoke
- * traditional setjmp() if sigsetjmp isn't available.
- * See HAS_SIGSETJMP.
- */
-/* Siglongjmp:
- * This macro is used in the same way as siglongjmp(), but will invoke
- * traditional longjmp() if siglongjmp isn't available.
- * See HAS_SIGSETJMP.
- */
-/*#define HAS_SIGSETJMP / **/
-#ifdef HAS_SIGSETJMP
-#define Sigjmp_buf sigjmp_buf
-#define Sigsetjmp(buf,save_mask) sigsetjmp((buf),(save_mask))
-#define Siglongjmp(buf,retval) siglongjmp((buf),(retval))
-#else
-#define Sigjmp_buf jmp_buf
-#define Sigsetjmp(buf,save_mask) setjmp((buf))
-#define Siglongjmp(buf,retval) longjmp((buf),(retval))
-#endif
-
-/* HAS_STATIC_INLINE:
- * This symbol, if defined, indicates that the C compiler supports
- * C99-style static inline. That is, the function can't be called
- * from another translation unit.
- */
-/* PERL_STATIC_INLINE:
- * This symbol gives the best-guess incantation to use for static
- * inline functions. If HAS_STATIC_INLINE is defined, this will
- * give C99-style inline. If HAS_STATIC_INLINE is not defined,
- * this will give a plain 'static'. It will always be defined
- * to something that gives static linkage.
- * Possibilities include
- * static inline (c99)
- * static __inline__ (gcc -ansi)
- * static __inline (MSVC)
- * static _inline (older MSVC)
- * static (c89 compilers)
- */
-#ifdef _MSC_VER
-# define HAS_STATIC_INLINE /**/
-# define PERL_STATIC_INLINE static __inline /**/
-#else /* gcc presumably */
-# define HAS_STATIC_INLINE /**/
-# define PERL_STATIC_INLINE static __inline__ /**/
-#endif
-
-/* USE_STDIO_PTR:
- * This symbol is defined if the _ptr and _cnt fields (or similar)
- * of the stdio FILE structure can be used to access the stdio buffer
- * for a file handle. If this is defined, then the FILE_ptr(fp)
- * and FILE_cnt(fp) macros will also be defined and should be used
- * to access these fields.
- */
-/* FILE_ptr:
- * This macro is used to access the _ptr field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_PTR is defined.
- */
-/* STDIO_PTR_LVALUE:
- * This symbol is defined if the FILE_ptr macro can be used as an
- * lvalue.
- */
-/* FILE_cnt:
- * This macro is used to access the _cnt field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_PTR is defined.
- */
-/* STDIO_CNT_LVALUE:
- * This symbol is defined if the FILE_cnt macro can be used as an
- * lvalue.
- */
-/* STDIO_PTR_LVAL_SETS_CNT:
- * This symbol is defined if using the FILE_ptr macro as an lvalue
- * to increase the pointer by n has the side effect of decreasing the
- * value of File_cnt(fp) by n.
- */
-/* STDIO_PTR_LVAL_NOCHANGE_CNT:
- * This symbol is defined if using the FILE_ptr macro as an lvalue
- * to increase the pointer by n leaves File_cnt(fp) unchanged.
- */
-#define USE_STDIO_PTR /**/
-#ifdef USE_STDIO_PTR
-#define FILE_ptr(fp) ((fp)->_ptr)
-#define STDIO_PTR_LVALUE /**/
-#define FILE_cnt(fp) ((fp)->_cnt)
-#define STDIO_CNT_LVALUE /**/
-/*#define STDIO_PTR_LVAL_SETS_CNT / **/
-#define STDIO_PTR_LVAL_NOCHANGE_CNT /**/
-#endif
-
-/* USE_STDIO_BASE:
- * This symbol is defined if the _base field (or similar) of the
- * stdio FILE structure can be used to access the stdio buffer for
- * a file handle. If this is defined, then the FILE_base(fp) macro
- * will also be defined and should be used to access this field.
- * Also, the FILE_bufsiz(fp) macro will be defined and should be used
- * to determine the number of bytes in the buffer. USE_STDIO_BASE
- * will never be defined unless USE_STDIO_PTR is.
- */
-/* FILE_base:
- * This macro is used to access the _base field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_BASE is defined.
- */
-/* FILE_bufsiz:
- * This macro is used to determine the number of bytes in the I/O
- * buffer pointed to by _base field (or equivalent) of the FILE
- * structure pointed to its argument. This macro will always be defined
- * if USE_STDIO_BASE is defined.
- */
-#define USE_STDIO_BASE /**/
-#ifdef USE_STDIO_BASE
-#define FILE_base(fp) ((fp)->_base)
-#define FILE_bufsiz(fp) ((fp)->_cnt + (fp)->_ptr - (fp)->_base)
-#endif
-
-/* HAS_VPRINTF:
- * This symbol, if defined, indicates that the vprintf routine is available
- * to printf with a pointer to an argument list. If unavailable, you
- * may need to write your own, probably in terms of _doprnt().
- */
-/* USE_CHAR_VSPRINTF:
- * This symbol is defined if this system has vsprintf() returning type
- * (char*). The trend seems to be to declare it as "int vsprintf()". It
- * is up to the package author to declare vsprintf correctly based on the
- * symbol.
- */
-#define HAS_VPRINTF /**/
-/*#define USE_CHAR_VSPRINTF / **/
-
-/* DOUBLESIZE:
- * This symbol contains the size of a double, so that the C preprocessor
- * can make decisions based on it.
- */
-#define DOUBLESIZE 8 /**/
-
-/* I_TIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <time.h>.
- */
-/* I_SYS_TIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/time.h>.
- */
-/* I_SYS_TIME_KERNEL:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/time.h> with KERNEL defined.
- */
-/* HAS_TM_TM_ZONE:
- * This symbol, if defined, indicates to the C program that
- * the struct tm has a tm_zone field.
- */
-/* HAS_TM_TM_GMTOFF:
- * This symbol, if defined, indicates to the C program that
- * the struct tm has a tm_gmtoff field.
- */
-#define I_TIME /**/
-/*#define I_SYS_TIME / **/
-/*#define I_SYS_TIME_KERNEL / **/
-/*#define HAS_TM_TM_ZONE / **/
-/*#define HAS_TM_TM_GMTOFF / **/
-
-/* VAL_O_NONBLOCK:
- * This symbol is to be used during open() or fcntl(F_SETFL) to turn on
- * non-blocking I/O for the file descriptor. Note that there is no way
- * back, i.e. you cannot turn it blocking again this way. If you wish to
- * alternatively switch between blocking and non-blocking, use the
- * ioctl(FIOSNBIO) call instead, but that is not supported by all devices.
- */
-/* VAL_EAGAIN:
- * This symbol holds the errno error code set by read() when no data was
- * present on the non-blocking file descriptor.
- */
-/* RD_NODATA:
- * This symbol holds the return code from read() when no data is present
- * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is
- * not defined, then you can't distinguish between no data and EOF by
- * issuing a read(). You'll have to find another way to tell for sure!
- */
-/* EOF_NONBLOCK:
- * This symbol, if defined, indicates to the C program that a read() on
- * a non-blocking file descriptor will return 0 on EOF, and not the value
- * held in RD_NODATA (-1 usually, in that case!).
- */
-#define VAL_O_NONBLOCK O_NONBLOCK
-#define VAL_EAGAIN EAGAIN
-#define RD_NODATA -1
-#define EOF_NONBLOCK
-
-/* PTRSIZE:
- * This symbol contains the size of a pointer, so that the C preprocessor
- * can make decisions based on it. It will be sizeof(void *) if
- * the compiler supports (void *); otherwise it will be
- * sizeof(char *).
- */
-#define PTRSIZE 8 /**/
-
-/* Drand01:
- * This macro is to be used to generate uniformly distributed
- * random numbers over the range [0., 1.[. You may have to supply
- * an 'extern double drand48();' in your program since SunOS 4.1.3
- * doesn't provide you with anything relevant in its headers.
- * See HAS_DRAND48_PROTO.
- */
-/* Rand_seed_t:
- * This symbol defines the type of the argument of the
- * random seed function.
- */
-/* seedDrand01:
- * This symbol defines the macro to be used in seeding the
- * random number generator (see Drand01).
- */
-/* RANDBITS:
- * This symbol indicates how many bits are produced by the
- * function used to generate normalized random numbers.
- * Values include 15, 16, 31, and 48.
- */
-#define Drand01() (rand()/(double)((unsigned)1<<RANDBITS)) /**/
-#define Rand_seed_t unsigned /**/
-#define seedDrand01(x) srand((Rand_seed_t)x) /**/
-#define RANDBITS 15 /**/
-
-/* SSize_t:
- * This symbol holds the type used by functions that return
- * a count of bytes or an error condition. It must be a signed type.
- * It is usually ssize_t, but may be long or int, etc.
- * It may be necessary to include <sys/types.h> or <unistd.h>
- * to get any typedef'ed information.
- * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
- */
-#define SSize_t __int64 /* signed count of bytes */
-
-/* EBCDIC:
- * This symbol, if defined, indicates that this system uses
- * EBCDIC encoding.
- */
-/*#define EBCDIC / **/
-
-/* SETUID_SCRIPTS_ARE_SECURE_NOW:
- * This symbol, if defined, indicates that the bug that prevents
- * setuid scripts from being secure is not present in this kernel.
- */
-/* DOSUID:
- * This symbol, if defined, indicates that the C program should
- * check the script that it is executing for setuid/setgid bits, and
- * attempt to emulate setuid/setgid on systems that have disabled
- * setuid #! scripts because the kernel can't do it securely.
- * It is up to the package designer to make sure that this emulation
- * is done securely. Among other things, it should do an fstat on
- * the script it just opened to make sure it really is a setuid/setgid
- * script, it should make sure the arguments passed correspond exactly
- * to the argument on the #! line, and it should not trust any
- * subprocesses to which it must pass the filename rather than the
- * file descriptor of the script to be executed.
- */
-/*#define SETUID_SCRIPTS_ARE_SECURE_NOW / **/
-/*#define DOSUID / **/
-
-/* PERL_USE_DEVEL:
- * This symbol, if defined, indicates that Perl was configured with
- * -Dusedevel, to enable development features. This should not be
- * done for production builds.
- */
-/*#define PERL_USE_DEVEL / **/
-
-/* HAS_ATOLF:
- * This symbol, if defined, indicates that the atolf routine is
- * available to convert strings into long doubles.
- */
-/*#define HAS_ATOLF / **/
-
-/* HAS_ATOLL:
- * This symbol, if defined, indicates that the atoll routine is
- * available to convert strings into long longs.
- */
-#define HAS_ATOLL /**/
-
-/* HAS__FWALK:
- * This symbol, if defined, indicates that the _fwalk system call is
- * available to apply a function to all the file handles.
- */
-/*#define HAS__FWALK / **/
-
-/* HAS_AINTL:
- * This symbol, if defined, indicates that the aintl routine is
- * available. If copysignl is also present we can emulate modfl.
- */
-/*#define HAS_AINTL / **/
-
-/* HAS_BUILTIN_CHOOSE_EXPR:
- * Can we handle GCC builtin for compile-time ternary-like expressions
- */
-/* HAS_BUILTIN_EXPECT:
- * Can we handle GCC builtin for telling that certain values are more
- * likely
- */
-/*#define HAS_BUILTIN_EXPECT / **/
-/*#define HAS_BUILTIN_CHOOSE_EXPR / **/
-
-/* HAS_C99_VARIADIC_MACROS:
- * If defined, the compiler supports C99 variadic macros.
- */
-/*#define HAS_C99_VARIADIC_MACROS / **/
-
-/* HAS_CLASS:
- * This symbol, if defined, indicates that the class routine is
- * available to classify doubles. Available for example in AIX.
- * The returned values are defined in <float.h> and are:
- *
- * FP_PLUS_NORM Positive normalized, nonzero
- * FP_MINUS_NORM Negative normalized, nonzero
- * FP_PLUS_DENORM Positive denormalized, nonzero
- * FP_MINUS_DENORM Negative denormalized, nonzero
- * FP_PLUS_ZERO +0.0
- * FP_MINUS_ZERO -0.0
- * FP_PLUS_INF +INF
- * FP_MINUS_INF -INF
- * FP_NANS Signaling Not a Number (NaNS)
- * FP_NANQ Quiet Not a Number (NaNQ)
- */
-/*#define HAS_CLASS / **/
-
-/* HAS_CLEARENV:
- * This symbol, if defined, indicates that the clearenv () routine is
- * available for use.
- */
-/*#define HAS_CLEARENV / **/
-
-/* HAS_STRUCT_CMSGHDR:
- * This symbol, if defined, indicates that the struct cmsghdr
- * is supported.
- */
-/*#define HAS_STRUCT_CMSGHDR / **/
-
-/* HAS_COPYSIGNL:
- * This symbol, if defined, indicates that the copysignl routine is
- * available. If aintl is also present we can emulate modfl.
- */
-/*#define HAS_COPYSIGNL / **/
-
-/* USE_CPLUSPLUS:
- * This symbol, if defined, indicates that a C++ compiler was
- * used to compiled Perl and will be used to compile extensions.
- */
-/*#define USE_CPLUSPLUS / **/
-
-/* HAS_DBMINIT_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the dbminit() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int dbminit(char *);
- */
-/*#define HAS_DBMINIT_PROTO / **/
-
-/* HAS_DIR_DD_FD:
- * This symbol, if defined, indicates that the the DIR* dirstream
- * structure contains a member variable named dd_fd.
- */
-/*#define HAS_DIR_DD_FD / **/
-
-/* HAS_DIRFD:
- * This manifest constant lets the C program know that dirfd
- * is available.
- */
-/*#define HAS_DIRFD / **/
-
-/* DLSYM_NEEDS_UNDERSCORE:
- * This symbol, if defined, indicates that we need to prepend an
- * underscore to the symbol name before calling dlsym(). This only
- * makes sense if you *have* dlsym, which we will presume is the
- * case if you're using dl_dlopen.xs.
- */
-/*#define DLSYM_NEEDS_UNDERSCORE / **/
-
-/* HAS_FAST_STDIO:
- * This symbol, if defined, indicates that the "fast stdio"
- * is available to manipulate the stdio buffers directly.
- */
-#define HAS_FAST_STDIO /**/
-
-/* HAS_FCHDIR:
- * This symbol, if defined, indicates that the fchdir routine is
- * available to change directory using a file descriptor.
- */
-/*#define HAS_FCHDIR / **/
-
-/* FCNTL_CAN_LOCK:
- * This symbol, if defined, indicates that fcntl() can be used
- * for file locking. Normally on Unix systems this is defined.
- * It may be undefined on VMS.
- */
-/*#define FCNTL_CAN_LOCK / **/
-
-/* HAS_FINITE:
- * This symbol, if defined, indicates that the finite routine is
- * available to check whether a double is finite (non-infinity non-NaN).
- */
-/*#define HAS_FINITE / **/
-
-/* HAS_FINITEL:
- * This symbol, if defined, indicates that the finitel routine is
- * available to check whether a long double is finite
- * (non-infinity non-NaN).
- */
-/*#define HAS_FINITEL / **/
-
-/* HAS_FLOCK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the flock() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int flock(int, int);
- */
-#define HAS_FLOCK_PROTO /**/
-
-/* HAS_FP_CLASS:
- * This symbol, if defined, indicates that the fp_class routine is
- * available to classify doubles. Available for example in Digital UNIX.
- * The returned values are defined in <math.h> and are:
- *
- * FP_SNAN Signaling NaN (Not-a-Number)
- * FP_QNAN Quiet NaN (Not-a-Number)
- * FP_POS_INF +infinity
- * FP_NEG_INF -infinity
- * FP_POS_NORM Positive normalized
- * FP_NEG_NORM Negative normalized
- * FP_POS_DENORM Positive denormalized
- * FP_NEG_DENORM Negative denormalized
- * FP_POS_ZERO +0.0 (positive zero)
- * FP_NEG_ZERO -0.0 (negative zero)
- */
-/*#define HAS_FP_CLASS / **/
-
-/* HAS_FPCLASS:
- * This symbol, if defined, indicates that the fpclass routine is
- * available to classify doubles. Available for example in Solaris/SVR4.
- * The returned values are defined in <ieeefp.h> and are:
- *
- * FP_SNAN signaling NaN
- * FP_QNAN quiet NaN
- * FP_NINF negative infinity
- * FP_PINF positive infinity
- * FP_NDENORM negative denormalized non-zero
- * FP_PDENORM positive denormalized non-zero
- * FP_NZERO negative zero
- * FP_PZERO positive zero
- * FP_NNORM negative normalized non-zero
- * FP_PNORM positive normalized non-zero
- */
-/*#define HAS_FPCLASS / **/
-
-/* HAS_FPCLASSIFY:
- * This symbol, if defined, indicates that the fpclassify routine is
- * available to classify doubles. Available for example in HP-UX.
- * The returned values are defined in <math.h> and are
- *
- * FP_NORMAL Normalized
- * FP_ZERO Zero
- * FP_INFINITE Infinity
- * FP_SUBNORMAL Denormalized
- * FP_NAN NaN
- *
- */
-/*#define HAS_FPCLASSIFY / **/
-
-/* HAS_FPCLASSL:
- * This symbol, if defined, indicates that the fpclassl routine is
- * available to classify long doubles. Available for example in IRIX.
- * The returned values are defined in <ieeefp.h> and are:
- *
- * FP_SNAN signaling NaN
- * FP_QNAN quiet NaN
- * FP_NINF negative infinity
- * FP_PINF positive infinity
- * FP_NDENORM negative denormalized non-zero
- * FP_PDENORM positive denormalized non-zero
- * FP_NZERO negative zero
- * FP_PZERO positive zero
- * FP_NNORM negative normalized non-zero
- * FP_PNORM positive normalized non-zero
- */
-/*#define HAS_FPCLASSL / **/
-
-/* HAS_FPOS64_T:
- * This symbol will be defined if the C compiler supports fpos64_t.
- */
-/*#define HAS_FPOS64_T / **/
-
-/* HAS_FREXPL:
- * This symbol, if defined, indicates that the frexpl routine is
- * available to break a long double floating-point number into
- * a normalized fraction and an integral power of 2.
- */
-/*#define HAS_FREXPL / **/
-
-/* HAS_STRUCT_FS_DATA:
- * This symbol, if defined, indicates that the struct fs_data
- * to do statfs() is supported.
- */
-/*#define HAS_STRUCT_FS_DATA / **/
-
-/* HAS_FSEEKO:
- * This symbol, if defined, indicates that the fseeko routine is
- * available to fseek beyond 32 bits (useful for ILP32 hosts).
- */
-/*#define HAS_FSEEKO / **/
-
-/* HAS_FSTATFS:
- * This symbol, if defined, indicates that the fstatfs routine is
- * available to stat filesystems by file descriptors.
- */
-/*#define HAS_FSTATFS / **/
-
-/* HAS_FSYNC:
- * This symbol, if defined, indicates that the fsync routine is
- * available to write a file's modified data and attributes to
- * permanent storage.
- */
-/*#define HAS_FSYNC / **/
-
-/* HAS_FTELLO:
- * This symbol, if defined, indicates that the ftello routine is
- * available to ftell beyond 32 bits (useful for ILP32 hosts).
- */
-/*#define HAS_FTELLO / **/
-
-/* HAS_FUTIMES:
- * This symbol, if defined, indicates that the futimes routine is
- * available to change file descriptor time stamps with struct timevals.
- */
-/*#define HAS_FUTIMES / **/
-
-/* HAS_GETADDRINFO:
- * This symbol, if defined, indicates that the getaddrinfo() function
- * is available for use.
- */
-/*#define HAS_GETADDRINFO / **/
-
-/* HAS_GETCWD:
- * This symbol, if defined, indicates that the getcwd routine is
- * available to get the current working directory.
- */
-#define HAS_GETCWD /**/
-
-/* HAS_GETESPWNAM:
- * This symbol, if defined, indicates that the getespwnam system call is
- * available to retrieve enchanced (shadow) password entries by name.
- */
-/*#define HAS_GETESPWNAM / **/
-
-/* HAS_GETFSSTAT:
- * This symbol, if defined, indicates that the getfsstat routine is
- * available to stat filesystems in bulk.
- */
-/*#define HAS_GETFSSTAT / **/
-
-/* HAS_GETITIMER:
- * This symbol, if defined, indicates that the getitimer routine is
- * available to return interval timers.
- */
-/*#define HAS_GETITIMER / **/
-
-/* HAS_GETMNT:
- * This symbol, if defined, indicates that the getmnt routine is
- * available to get filesystem mount info by filename.
- */
-/*#define HAS_GETMNT / **/
-
-/* HAS_GETMNTENT:
- * This symbol, if defined, indicates that the getmntent routine is
- * available to iterate through mounted file systems to get their info.
- */
-/*#define HAS_GETMNTENT / **/
-
-/* HAS_GETNAMEINFO:
- * This symbol, if defined, indicates that the getnameinfo() function
- * is available for use.
- */
-/*#define HAS_GETNAMEINFO / **/
-
-/* HAS_GETPRPWNAM:
- * This symbol, if defined, indicates that the getprpwnam system call is
- * available to retrieve protected (shadow) password entries by name.
- */
-/*#define HAS_GETPRPWNAM / **/
-
-/* HAS_GETSPNAM:
- * This symbol, if defined, indicates that the getspnam system call is
- * available to retrieve SysV shadow password entries by name.
- */
-/*#define HAS_GETSPNAM / **/
-
-/* HAS_HASMNTOPT:
- * This symbol, if defined, indicates that the hasmntopt routine is
- * available to query the mount options of file systems.
- */
-/*#define HAS_HASMNTOPT / **/
-
-/* HAS_ILOGBL:
- * This symbol, if defined, indicates that the ilogbl routine is
- * available. If scalbnl is also present we can emulate frexpl.
- */
-/*#define HAS_ILOGBL / **/
-
-/* HAS_INETNTOP:
- * This symbol, if defined, indicates that the inet_ntop() function
- * is available to parse IPv4 and IPv6 strings.
- */
-/*#define HAS_INETNTOP / **/
-
-/* HAS_INETPTON:
- * This symbol, if defined, indicates that the inet_pton() function
- * is available to parse IPv4 and IPv6 strings.
- */
-/*#define HAS_INETPTON / **/
-
-/* HAS_INT64_T:
- * This symbol will defined if the C compiler supports int64_t.
- * Usually the <inttypes.h> needs to be included, but sometimes
- * <sys/types.h> is enough.
- */
-/*#define HAS_INT64_T / **/
-
-/* HAS_ISFINITE:
- * This symbol, if defined, indicates that the isfinite routine is
- * available to check whether a double is finite (non-infinity non-NaN).
- */
-/*#define HAS_ISFINITE / **/
-
-/* HAS_ISINF:
- * This symbol, if defined, indicates that the isinf routine is
- * available to check whether a double is an infinity.
- */
-/*#define HAS_ISINF / **/
-
-/* HAS_ISNAN:
- * This symbol, if defined, indicates that the isnan routine is
- * available to check whether a double is a NaN.
- */
-#define HAS_ISNAN /**/
-
-/* HAS_ISNANL:
- * This symbol, if defined, indicates that the isnanl routine is
- * available to check whether a long double is a NaN.
- */
-/*#define HAS_ISNANL / **/
-
-/* HAS_LDBL_DIG:
- * This symbol, if defined, indicates that this system's <float.h>
- * or <limits.h> defines the symbol LDBL_DIG, which is the number
- * of significant digits in a long double precision number. Unlike
- * for DBL_DIG, there's no good guess for LDBL_DIG if it is undefined.
- */
-#define HAS_LDBL_DIG /**/
-
-/* LIBM_LIB_VERSION:
- * This symbol, if defined, indicates that libm exports _LIB_VERSION
- * and that math.h defines the enum to manipulate it.
- */
-/*#define LIBM_LIB_VERSION / **/
-
-/* HAS_MADVISE:
- * This symbol, if defined, indicates that the madvise system call is
- * available to map a file into memory.
- */
-/*#define HAS_MADVISE / **/
-
-/* HAS_MALLOC_SIZE:
- * This symbol, if defined, indicates that the malloc_size
- * routine is available for use.
- */
-/*#define HAS_MALLOC_SIZE / **/
-
-/* HAS_MALLOC_GOOD_SIZE:
- * This symbol, if defined, indicates that the malloc_good_size
- * routine is available for use.
- */
-/*#define HAS_MALLOC_GOOD_SIZE / **/
-
-/* HAS_MKDTEMP:
- * This symbol, if defined, indicates that the mkdtemp routine is
- * available to exclusively create a uniquely named temporary directory.
- */
-/*#define HAS_MKDTEMP / **/
-
-/* HAS_MKSTEMPS:
- * This symbol, if defined, indicates that the mkstemps routine is
- * available to excluslvely create and open a uniquely named
- * (with a suffix) temporary file.
- */
-/*#define HAS_MKSTEMPS / **/
-
-/* HAS_MODFL:
- * This symbol, if defined, indicates that the modfl routine is
- * available to split a long double x into a fractional part f and
- * an integer part i such that |f| < 1.0 and (f + i) = x.
- */
-/* HAS_MODFL_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the modfl() function. Otherwise, it is up
- * to the program to supply one.
- */
-/* HAS_MODFL_POW32_BUG:
- * This symbol, if defined, indicates that the modfl routine is
- * broken for long doubles >= pow(2, 32).
- * For example from 4294967303.150000 one would get 4294967302.000000
- * and 1.150000. The bug has been seen in certain versions of glibc,
- * release 2.2.2 is known to be okay.
- */
-/*#define HAS_MODFL / **/
-/*#define HAS_MODFL_PROTO / **/
-/*#define HAS_MODFL_POW32_BUG / **/
-
-/* HAS_MPROTECT:
- * This symbol, if defined, indicates that the mprotect system call is
- * available to modify the access protection of a memory mapped file.
- */
-/*#define HAS_MPROTECT / **/
-
-/* HAS_STRUCT_MSGHDR:
- * This symbol, if defined, indicates that the struct msghdr
- * is supported.
- */
-/*#define HAS_STRUCT_MSGHDR / **/
-
-/* HAS_NL_LANGINFO:
- * This symbol, if defined, indicates that the nl_langinfo routine is
- * available to return local data. You will also need <langinfo.h>
- * and therefore I_LANGINFO.
- */
-/*#define HAS_NL_LANGINFO / **/
-
-/* HAS_OFF64_T:
- * This symbol will be defined if the C compiler supports off64_t.
- */
-/*#define HAS_OFF64_T / **/
-
-/* HAS_PROCSELFEXE:
- * This symbol is defined if PROCSELFEXE_PATH is a symlink
- * to the absolute pathname of the executing program.
- */
-/* PROCSELFEXE_PATH:
- * If HAS_PROCSELFEXE is defined this symbol is the filename
- * of the symbolic link pointing to the absolute pathname of
- * the executing program.
- */
-/*#define HAS_PROCSELFEXE / **/
-#if defined(HAS_PROCSELFEXE) && !defined(PROCSELFEXE_PATH)
-#define PROCSELFEXE_PATH /**/
-#endif
-
-/* HAS_PTHREAD_ATTR_SETSCOPE:
- * This symbol, if defined, indicates that the pthread_attr_setscope
- * system call is available to set the contention scope attribute of
- * a thread attribute object.
- */
-/*#define HAS_PTHREAD_ATTR_SETSCOPE / **/
-
-/* HAS_READV:
- * This symbol, if defined, indicates that the readv routine is
- * available to do gather reads. You will also need <sys/uio.h>
- * and there I_SYSUIO.
- */
-/*#define HAS_READV / **/
-
-/* HAS_RECVMSG:
- * This symbol, if defined, indicates that the recvmsg routine is
- * available to send structured socket messages.
- */
-/*#define HAS_RECVMSG / **/
-
-/* HAS_SBRK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the sbrk() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern void* sbrk(int);
- * extern void* sbrk(size_t);
- */
-/*#define HAS_SBRK_PROTO / **/
-
-/* HAS_SCALBNL:
- * This symbol, if defined, indicates that the scalbnl routine is
- * available. If ilogbl is also present we can emulate frexpl.
- */
-/*#define HAS_SCALBNL / **/
-
-/* HAS_SENDMSG:
- * This symbol, if defined, indicates that the sendmsg routine is
- * available to send structured socket messages.
- */
-/*#define HAS_SENDMSG / **/
-
-/* HAS_SETITIMER:
- * This symbol, if defined, indicates that the setitimer routine is
- * available to set interval timers.
- */
-/*#define HAS_SETITIMER / **/
-
-/* HAS_SETPROCTITLE:
- * This symbol, if defined, indicates that the setproctitle routine is
- * available to set process title.
- */
-/*#define HAS_SETPROCTITLE / **/
-
-/* USE_SFIO:
- * This symbol, if defined, indicates that sfio should
- * be used.
- */
-/*#define USE_SFIO / **/
-
-/* HAS_SIGNBIT:
- * This symbol, if defined, indicates that the signbit routine is
- * available to check if the given number has the sign bit set.
- * This should include correct testing of -0.0. This will only be set
- * if the signbit() routine is safe to use with the NV type used internally
- * in perl. Users should call Perl_signbit(), which will be #defined to
- * the system's signbit() function or macro if this symbol is defined.
- */
-/*#define HAS_SIGNBIT / **/
-
-/* HAS_SIGPROCMASK:
- * This symbol, if defined, indicates that the sigprocmask
- * system call is available to examine or change the signal mask
- * of the calling process.
- */
-/*#define HAS_SIGPROCMASK / **/
-
-/* USE_SITECUSTOMIZE:
- * This symbol, if defined, indicates that sitecustomize should
- * be used.
- */
-#ifndef USE_SITECUSTOMIZE
-/*#define USE_SITECUSTOMIZE / **/
-#endif
-
-/* HAS_SNPRINTF:
- * This symbol, if defined, indicates that the snprintf () library
- * function is available for use.
- */
-/* HAS_VSNPRINTF:
- * This symbol, if defined, indicates that the vsnprintf () library
- * function is available for use.
- */
-#define HAS_SNPRINTF /**/
-#define HAS_VSNPRINTF /**/
-
-/* HAS_SOCKATMARK:
- * This symbol, if defined, indicates that the sockatmark routine is
- * available to test whether a socket is at the out-of-band mark.
- */
-/*#define HAS_SOCKATMARK / **/
-
-/* HAS_SOCKATMARK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the sockatmark() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int sockatmark(int);
- */
-/*#define HAS_SOCKATMARK_PROTO / **/
-
-/* HAS_SOCKS5_INIT:
- * This symbol, if defined, indicates that the socks5_init routine is
- * available to initialize SOCKS 5.
- */
-/*#define HAS_SOCKS5_INIT / **/
-
-/* SPRINTF_RETURNS_STRLEN:
- * This variable defines whether sprintf returns the length of the string
- * (as per the ANSI spec). Some C libraries retain compatibility with
- * pre-ANSI C and return a pointer to the passed in buffer; for these
- * this variable will be undef.
- */
-#define SPRINTF_RETURNS_STRLEN /**/
-
-/* HAS_SQRTL:
- * This symbol, if defined, indicates that the sqrtl routine is
- * available to do long double square roots.
- */
-/*#define HAS_SQRTL / **/
-
-/* HAS_SETRESGID_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the setresgid() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern int setresgid(uid_t ruid, uid_t euid, uid_t suid);
- */
-/*#define HAS_SETRESGID_PROTO / **/
-
-/* HAS_SETRESUID_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the setresuid() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern int setresuid(uid_t ruid, uid_t euid, uid_t suid);
- */
-/*#define HAS_SETRESUID_PROTO / **/
-
-/* HAS_STRUCT_STATFS_F_FLAGS:
- * This symbol, if defined, indicates that the struct statfs
- * does have the f_flags member containing the mount flags of
- * the filesystem containing the file.
- * This kind of struct statfs is coming from <sys/mount.h> (BSD 4.3),
- * not from <sys/statfs.h> (SYSV). Older BSDs (like Ultrix) do not
- * have statfs() and struct statfs, they have ustat() and getmnt()
- * with struct ustat and struct fs_data.
- */
-/*#define HAS_STRUCT_STATFS_F_FLAGS / **/
-
-/* HAS_STRUCT_STATFS:
- * This symbol, if defined, indicates that the struct statfs
- * to do statfs() is supported.
- */
-/*#define HAS_STRUCT_STATFS / **/
-
-/* HAS_FSTATVFS:
- * This symbol, if defined, indicates that the fstatvfs routine is
- * available to stat filesystems by file descriptors.
- */
-/*#define HAS_FSTATVFS / **/
-
-/* HAS_STRFTIME:
- * This symbol, if defined, indicates that the strftime routine is
- * available to do time formatting.
- */
-#define HAS_STRFTIME /**/
-
-/* HAS_STRLCAT:
- * This symbol, if defined, indicates that the strlcat () routine is
- * available to do string concatenation.
- */
-/*#define HAS_STRLCAT / **/
-
-/* HAS_STRLCPY:
- * This symbol, if defined, indicates that the strlcpy () routine is
- * available to do string copying.
- */
-/*#define HAS_STRLCPY / **/
-
-/* HAS_STRTOLD:
- * This symbol, if defined, indicates that the strtold routine is
- * available to convert strings to long doubles.
- */
-/*#define HAS_STRTOLD / **/
-
-/* HAS_STRTOLL:
- * This symbol, if defined, indicates that the strtoll routine is
- * available to convert strings to long longs.
- */
-#define HAS_STRTOLL /**/
-
-/* HAS_STRTOQ:
- * This symbol, if defined, indicates that the strtoq routine is
- * available to convert strings to long longs (quads).
- */
-/*#define HAS_STRTOQ / **/
-
-/* HAS_STRTOULL:
- * This symbol, if defined, indicates that the strtoull routine is
- * available to convert strings to unsigned long longs.
- */
-#define HAS_STRTOULL /**/
-
-/* HAS_STRTOUQ:
- * This symbol, if defined, indicates that the strtouq routine is
- * available to convert strings to unsigned long longs (quads).
- */
-/*#define HAS_STRTOUQ / **/
-
-/* HAS_SYSCALL_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the syscall() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern int syscall(int, ...);
- * extern int syscall(long, ...);
- */
-/*#define HAS_SYSCALL_PROTO / **/
-
-/* HAS_TELLDIR_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the telldir() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern long telldir(DIR*);
- */
-#define HAS_TELLDIR_PROTO /**/
-
-/* HAS_CTIME64:
- * This symbol, if defined, indicates that the ctime64 () routine is
- * available to do the 64bit variant of ctime ()
- */
-/* HAS_LOCALTIME64:
- * This symbol, if defined, indicates that the localtime64 () routine is
- * available to do the 64bit variant of localtime ()
- */
-/* HAS_GMTIME64:
- * This symbol, if defined, indicates that the gmtime64 () routine is
- * available to do the 64bit variant of gmtime ()
- */
-/* HAS_MKTIME64:
- * This symbol, if defined, indicates that the mktime64 () routine is
- * available to do the 64bit variant of mktime ()
- */
-/* HAS_DIFFTIME64:
- * This symbol, if defined, indicates that the difftime64 () routine is
- * available to do the 64bit variant of difftime ()
- */
-/* HAS_ASCTIME64:
- * This symbol, if defined, indicates that the asctime64 () routine is
- * available to do the 64bit variant of asctime ()
- */
-/*#define HAS_CTIME64 / **/
-/*#define HAS_LOCALTIME64 / **/
-/*#define HAS_GMTIME64 / **/
-/*#define HAS_MKTIME64 / **/
-/*#define HAS_DIFFTIME64 / **/
-/*#define HAS_ASCTIME64 / **/
-
-/* HAS_TIMEGM:
- * This symbol, if defined, indicates that the timegm routine is
- * available to do the opposite of gmtime ()
- */
-/*#define HAS_TIMEGM / **/
-
-/* U32_ALIGNMENT_REQUIRED:
- * This symbol, if defined, indicates that you must access
- * character data through U32-aligned pointers.
- */
-#ifndef U32_ALIGNMENT_REQUIRED
-#define U32_ALIGNMENT_REQUIRED /**/
-#endif
-
-/* HAS_UALARM:
- * This symbol, if defined, indicates that the ualarm routine is
- * available to do alarms with microsecond granularity.
- */
-/*#define HAS_UALARM / **/
-
-/* HAS_UNORDERED:
- * This symbol, if defined, indicates that the unordered routine is
- * available to check whether two doubles are unordered
- * (effectively: whether either of them is NaN)
- */
-/*#define HAS_UNORDERED / **/
-
-/* HAS_UNSETENV:
- * This symbol, if defined, indicates that the unsetenv () routine is
- * available for use.
- */
-/*#define HAS_UNSETENV / **/
-
-/* HAS_USLEEP_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the usleep() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int usleep(useconds_t);
- */
-/*#define HAS_USLEEP_PROTO / **/
-
-/* HAS_USTAT:
- * This symbol, if defined, indicates that the ustat system call is
- * available to query file system statistics by dev_t.
- */
-/*#define HAS_USTAT / **/
-
-/* HAS_WRITEV:
- * This symbol, if defined, indicates that the writev routine is
- * available to do scatter writes.
- */
-/*#define HAS_WRITEV / **/
-
-/* USE_DYNAMIC_LOADING:
- * This symbol, if defined, indicates that dynamic loading of
- * some sort is available.
- */
-#define USE_DYNAMIC_LOADING /**/
-
-/* FFLUSH_NULL:
- * This symbol, if defined, tells that fflush(NULL) does flush
- * all pending stdio output.
- */
-/* FFLUSH_ALL:
- * This symbol, if defined, tells that to flush
- * all pending stdio output one must loop through all
- * the stdio file handles stored in an array and fflush them.
- * Note that if fflushNULL is defined, fflushall will not
- * even be probed for and will be left undefined.
- */
-#define FFLUSH_NULL /**/
-/*#define FFLUSH_ALL / **/
-
-/* I_ASSERT:
- * This symbol, if defined, indicates that <assert.h> exists and
- * could be included by the C program to get the assert() macro.
- */
-#define I_ASSERT /**/
-
-/* I_CRYPT:
- * This symbol, if defined, indicates that <crypt.h> exists and
- * should be included.
- */
-/*#define I_CRYPT / **/
-
-/* DB_Prefix_t:
- * This symbol contains the type of the prefix structure element
- * in the <db.h> header file. In older versions of DB, it was
- * int, while in newer ones it is u_int32_t.
- */
-/* DB_Hash_t:
- * This symbol contains the type of the prefix structure element
- * in the <db.h> header file. In older versions of DB, it was
- * int, while in newer ones it is size_t.
- */
-/* DB_VERSION_MAJOR_CFG:
- * This symbol, if defined, defines the major version number of
- * Berkeley DB found in the <db.h> header when Perl was configured.
- */
-/* DB_VERSION_MINOR_CFG:
- * This symbol, if defined, defines the minor version number of
- * Berkeley DB found in the <db.h> header when Perl was configured.
- * For DB version 1 this is always 0.
- */
-/* DB_VERSION_PATCH_CFG:
- * This symbol, if defined, defines the patch version number of
- * Berkeley DB found in the <db.h> header when Perl was configured.
- * For DB version 1 this is always 0.
- */
-#define DB_Hash_t int /**/
-#define DB_Prefix_t int /**/
-#define DB_VERSION_MAJOR_CFG 0 /**/
-#define DB_VERSION_MINOR_CFG 0 /**/
-#define DB_VERSION_PATCH_CFG 0 /**/
-
-/* I_FP:
- * This symbol, if defined, indicates that <fp.h> exists and
- * should be included.
- */
-/*#define I_FP / **/
-
-/* I_FP_CLASS:
- * This symbol, if defined, indicates that <fp_class.h> exists and
- * should be included.
- */
-/*#define I_FP_CLASS / **/
-
-/* I_IEEEFP:
- * This symbol, if defined, indicates that <ieeefp.h> exists and
- * should be included.
- */
-/*#define I_IEEEFP / **/
-
-/* I_INTTYPES:
- * This symbol, if defined, indicates to the C program that it should
- * include <inttypes.h>.
- */
-/*#define I_INTTYPES / **/
-
-/* I_LANGINFO:
- * This symbol, if defined, indicates that <langinfo.h> exists and
- * should be included.
- */
-/*#define I_LANGINFO / **/
-
-/* I_LIBUTIL:
- * This symbol, if defined, indicates that <libutil.h> exists and
- * should be included.
- */
-/*#define I_LIBUTIL / **/
-
-/* I_MALLOCMALLOC:
- * This symbol, if defined, indicates to the C program that it should
- * include <malloc/malloc.h>.
- */
-/*#define I_MALLOCMALLOC / **/
-
-/* I_MNTENT:
- * This symbol, if defined, indicates that <mntent.h> exists and
- * should be included.
- */
-/*#define I_MNTENT / **/
-
-/* I_NETINET_TCP:
- * This symbol, if defined, indicates to the C program that it should
- * include <netinet/tcp.h>.
- */
-/*#define I_NETINET_TCP / **/
-
-/* I_POLL:
- * This symbol, if defined, indicates that <poll.h> exists and
- * should be included. (see also HAS_POLL)
- */
-/*#define I_POLL / **/
-
-/* I_PROT:
- * This symbol, if defined, indicates that <prot.h> exists and
- * should be included.
- */
-/*#define I_PROT / **/
-
-/* I_SHADOW:
- * This symbol, if defined, indicates that <shadow.h> exists and
- * should be included.
- */
-/*#define I_SHADOW / **/
-
-/* I_SOCKS:
- * This symbol, if defined, indicates that <socks.h> exists and
- * should be included.
- */
-/*#define I_SOCKS / **/
-
-/* I_SUNMATH:
- * This symbol, if defined, indicates that <sunmath.h> exists and
- * should be included.
- */
-/*#define I_SUNMATH / **/
-
-/* I_SYSLOG:
- * This symbol, if defined, indicates that <syslog.h> exists and
- * should be included.
- */
-/*#define I_SYSLOG / **/
-
-/* I_SYSMODE:
- * This symbol, if defined, indicates that <sys/mode.h> exists and
- * should be included.
- */
-/*#define I_SYSMODE / **/
-
-/* I_SYS_MOUNT:
- * This symbol, if defined, indicates that <sys/mount.h> exists and
- * should be included.
- */
-/*#define I_SYS_MOUNT / **/
-
-/* I_SYS_STATFS:
- * This symbol, if defined, indicates that <sys/statfs.h> exists.
- */
-/*#define I_SYS_STATFS / **/
-
-/* I_SYS_STATVFS:
- * This symbol, if defined, indicates that <sys/statvfs.h> exists and
- * should be included.
- */
-/*#define I_SYS_STATVFS / **/
-
-/* I_SYSUTSNAME:
- * This symbol, if defined, indicates that <sys/utsname.h> exists and
- * should be included.
- */
-/*#define I_SYSUTSNAME / **/
-
-/* I_SYS_VFS:
- * This symbol, if defined, indicates that <sys/vfs.h> exists and
- * should be included.
- */
-/*#define I_SYS_VFS / **/
-
-/* I_USTAT:
- * This symbol, if defined, indicates that <ustat.h> exists and
- * should be included.
- */
-/*#define I_USTAT / **/
-
-/* PERL_PRIfldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'f') for output.
- */
-/* PERL_PRIgldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'g') for output.
- */
-/* PERL_PRIeldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'e') for output.
- */
-/* PERL_SCNfldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'f') for input.
- */
-/*#define PERL_PRIfldbl "f" / **/
-/*#define PERL_PRIgldbl "g" / **/
-/*#define PERL_PRIeldbl "e" / **/
-/*#define PERL_SCNfldbl "f" / **/
-
-/* PERL_MAD:
- * This symbol, if defined, indicates that the Misc Attribution
- * Declaration code should be conditionally compiled.
- */
-/*#define PERL_MAD / **/
-
-/* NEED_VA_COPY:
- * This symbol, if defined, indicates that the system stores
- * the variable argument list datatype, va_list, in a format
- * that cannot be copied by simple assignment, so that some
- * other means must be used when copying is required.
- * As such systems vary in their provision (or non-provision)
- * of copying mechanisms, handy.h defines a platform-
- * independent macro, Perl_va_copy(src, dst), to do the job.
- */
-/*#define NEED_VA_COPY / **/
-
-/* IVTYPE:
- * This symbol defines the C type used for Perl's IV.
- */
-/* UVTYPE:
- * This symbol defines the C type used for Perl's UV.
- */
-/* I8TYPE:
- * This symbol defines the C type used for Perl's I8.
- */
-/* U8TYPE:
- * This symbol defines the C type used for Perl's U8.
- */
-/* I16TYPE:
- * This symbol defines the C type used for Perl's I16.
- */
-/* U16TYPE:
- * This symbol defines the C type used for Perl's U16.
- */
-/* I32TYPE:
- * This symbol defines the C type used for Perl's I32.
- */
-/* U32TYPE:
- * This symbol defines the C type used for Perl's U32.
- */
-/* I64TYPE:
- * This symbol defines the C type used for Perl's I64.
- */
-/* U64TYPE:
- * This symbol defines the C type used for Perl's U64.
- */
-/* NVTYPE:
- * This symbol defines the C type used for Perl's NV.
- */
-/* IVSIZE:
- * This symbol contains the sizeof(IV).
- */
-/* UVSIZE:
- * This symbol contains the sizeof(UV).
- */
-/* I8SIZE:
- * This symbol contains the sizeof(I8).
- */
-/* U8SIZE:
- * This symbol contains the sizeof(U8).
- */
-/* I16SIZE:
- * This symbol contains the sizeof(I16).
- */
-/* U16SIZE:
- * This symbol contains the sizeof(U16).
- */
-/* I32SIZE:
- * This symbol contains the sizeof(I32).
- */
-/* U32SIZE:
- * This symbol contains the sizeof(U32).
- */
-/* I64SIZE:
- * This symbol contains the sizeof(I64).
- */
-/* U64SIZE:
- * This symbol contains the sizeof(U64).
- */
-/* NVSIZE:
- * This symbol contains the sizeof(NV).
- */
-/* NV_PRESERVES_UV:
- * This symbol, if defined, indicates that a variable of type NVTYPE
- * can preserve all the bits of a variable of type UVTYPE.
- */
-/* NV_PRESERVES_UV_BITS:
- * This symbol contains the number of bits a variable of type NVTYPE
- * can preserve of a variable of type UVTYPE.
- */
-/* NV_OVERFLOWS_INTEGERS_AT:
- * This symbol gives the largest integer value that NVs can hold. This
- * value + 1.0 cannot be stored accurately. It is expressed as constant
- * floating point expression to reduce the chance of decimale/binary
- * conversion issues. If it can not be determined, the value 0 is given.
- */
-/* NV_ZERO_IS_ALLBITS_ZERO:
- * This symbol, if defined, indicates that a variable of type NVTYPE
- * stores 0.0 in memory as all bits zero.
- */
-#define IVTYPE __int64 /**/
-#define UVTYPE unsigned __int64 /**/
-#define I8TYPE char /**/
-#define U8TYPE unsigned char /**/
-#define I16TYPE short /**/
-#define U16TYPE unsigned short /**/
-#define I32TYPE long /**/
-#define U32TYPE unsigned long /**/
-#ifdef HAS_QUAD
-#define I64TYPE __int64 /**/
-#define U64TYPE unsigned __int64 /**/
-#endif
-#define NVTYPE double /**/
-#define IVSIZE 8 /**/
-#define UVSIZE 8 /**/
-#define I8SIZE 1 /**/
-#define U8SIZE 1 /**/
-#define I16SIZE 2 /**/
-#define U16SIZE 2 /**/
-#define I32SIZE 4 /**/
-#define U32SIZE 4 /**/
-#ifdef HAS_QUAD
-#define I64SIZE 8 /**/
-#define U64SIZE 8 /**/
-#endif
-#define NVSIZE 8 /**/
-#undef NV_PRESERVES_UV
-#define NV_PRESERVES_UV_BITS 53
-#define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0
-#define NV_ZERO_IS_ALLBITS_ZERO
-#if UVSIZE == 8
-# ifdef BYTEORDER
-# if BYTEORDER == 0x1234
-# undef BYTEORDER
-# define BYTEORDER 0x12345678
-# else
-# if BYTEORDER == 0x4321
-# undef BYTEORDER
-# define BYTEORDER 0x87654321
-# endif
-# endif
-# endif
-#endif
-
-/* IVdf:
- * This symbol defines the format string used for printing a Perl IV
- * as a signed decimal integer.
- */
-/* UVuf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned decimal integer.
- */
-/* UVof:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned octal integer.
- */
-/* UVxf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned hexadecimal integer in lowercase abcdef.
- */
-/* UVXf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned hexadecimal integer in uppercase ABCDEF.
- */
-/* NVef:
- * This symbol defines the format string used for printing a Perl NV
- * using %e-ish floating point format.
- */
-/* NVff:
- * This symbol defines the format string used for printing a Perl NV
- * using %f-ish floating point format.
- */
-/* NVgf:
- * This symbol defines the format string used for printing a Perl NV
- * using %g-ish floating point format.
- */
-#define IVdf "I64d" /**/
-#define UVuf "I64u" /**/
-#define UVof "I64o" /**/
-#define UVxf "I64x" /**/
-#define UVXf "I64X" /**/
-#define NVef "e" /**/
-#define NVff "f" /**/
-#define NVgf "g" /**/
-
-/* SELECT_MIN_BITS:
- * This symbol holds the minimum number of bits operated by select.
- * That is, if you do select(n, ...), how many bits at least will be
- * cleared in the masks if some activity is detected. Usually this
- * is either n or 32*ceil(n/32), especially many little-endians do
- * the latter. This is only useful if you have select(), naturally.
- */
-#define SELECT_MIN_BITS 32 /**/
-
-/* STARTPERL:
- * This variable contains the string to put in front of a perl
- * script to make sure (one hopes) that it runs with perl and not
- * some shell.
- */
-#define STARTPERL "#!perl" /**/
-
-/* HAS_STDIO_STREAM_ARRAY:
- * This symbol, if defined, tells that there is an array
- * holding the stdio streams.
- */
-/* STDIO_STREAM_ARRAY:
- * This symbol tells the name of the array holding the stdio streams.
- * Usual values include _iob, __iob, and __sF.
- */
-/*#define HAS_STDIO_STREAM_ARRAY / **/
-#ifdef HAS_STDIO_STREAM_ARRAY
-#define STDIO_STREAM_ARRAY
-#endif
-
-/* GMTIME_MAX:
- * This symbol contains the maximum value for the time_t offset that
- * the system function gmtime () accepts, and defaults to 0
- */
-/* GMTIME_MIN:
- * This symbol contains the minimum value for the time_t offset that
- * the system function gmtime () accepts, and defaults to 0
- */
-/* LOCALTIME_MAX:
- * This symbol contains the maximum value for the time_t offset that
- * the system function localtime () accepts, and defaults to 0
- */
-/* LOCALTIME_MIN:
- * This symbol contains the minimum value for the time_t offset that
- * the system function localtime () accepts, and defaults to 0
- */
-#define GMTIME_MAX 2147483647 /**/
-#define GMTIME_MIN 0 /**/
-#define LOCALTIME_MAX 2147483647 /**/
-#define LOCALTIME_MIN 0 /**/
-
-/* USE_64_BIT_INT:
- * This symbol, if defined, indicates that 64-bit integers should
- * be used when available. If not defined, the native integers
- * will be employed (be they 32 or 64 bits). The minimal possible
- * 64-bitness is used, just enough to get 64-bit integers into Perl.
- * This may mean using for example "long longs", while your memory
- * may still be limited to 2 gigabytes.
- */
-/* USE_64_BIT_ALL:
- * This symbol, if defined, indicates that 64-bit integers should
- * be used when available. If not defined, the native integers
- * will be used (be they 32 or 64 bits). The maximal possible
- * 64-bitness is employed: LP64 or ILP64, meaning that you will
- * be able to use more than 2 gigabytes of memory. This mode is
- * even more binary incompatible than USE_64_BIT_INT. You may not
- * be able to run the resulting executable in a 32-bit CPU at all or
- * you may need at least to reboot your OS to 64-bit mode.
- */
-#ifndef USE_64_BIT_INT
-#define USE_64_BIT_INT /**/
-#endif
-#ifndef USE_64_BIT_ALL
-/*#define USE_64_BIT_ALL / **/
-#endif
-
-/* USE_DTRACE:
- * This symbol, if defined, indicates that Perl should
- * be built with support for DTrace.
- */
-/*#define USE_DTRACE / **/
-
-/* USE_FAST_STDIO:
- * This symbol, if defined, indicates that Perl should
- * be built to use 'fast stdio'.
- * Defaults to define in Perls 5.8 and earlier, to undef later.
- */
-#ifndef USE_FAST_STDIO
-/*#define USE_FAST_STDIO / **/
-#endif
-
-/* USE_LARGE_FILES:
- * This symbol, if defined, indicates that large file support
- * should be used when available.
- */
-#ifndef USE_LARGE_FILES
-/*#define USE_LARGE_FILES / **/
-#endif
-
-/* USE_LONG_DOUBLE:
- * This symbol, if defined, indicates that long doubles should
- * be used when available.
- */
-#ifndef USE_LONG_DOUBLE
-/*#define USE_LONG_DOUBLE / **/
-#endif
-
-/* USE_MORE_BITS:
- * This symbol, if defined, indicates that 64-bit interfaces and
- * long doubles should be used when available.
- */
-#ifndef USE_MORE_BITS
-/*#define USE_MORE_BITS / **/
-#endif
-
-/* MULTIPLICITY:
- * This symbol, if defined, indicates that Perl should
- * be built to use multiplicity.
- */
-#ifndef MULTIPLICITY
-/*#define MULTIPLICITY / **/
-#endif
-
-/* USE_PERLIO:
- * This symbol, if defined, indicates that the PerlIO abstraction should
- * be used throughout. If not defined, stdio should be
- * used in a fully backward compatible manner.
- */
-#ifndef USE_PERLIO
-/*#define USE_PERLIO / **/
-#endif
-
-/* USE_SOCKS:
- * This symbol, if defined, indicates that Perl should
- * be built to use socks.
- */
-#ifndef USE_SOCKS
-/*#define USE_SOCKS / **/
-#endif
-
-#endif
Deleted: trunk/contrib/perl/win32/genmk95.pl
===================================================================
--- trunk/contrib/perl/win32/genmk95.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/win32/genmk95.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,87 +0,0 @@
-# genmk95.pl - uses miniperl to generate a makefile that command.com will
-# understand given one that cmd.exe will understand
-
-# Author: Benjamin K. Stuhl
-# Date: 10-16-1999
-
-# how it works:
-# dmake supports an alternative form for its recipes, called "group
-# recipes", in which all elements of a recipe are run with only one shell.
-# This program converts the standard dmake makefile.mk to one using group
-# recipes. This is done so that lines using && or || (which command.com
-# doesn't understand) may be split into two lines that will still be run
-# with one shell.
-
-my ($filein, $fileout) = @ARGV;
-
-open my $in, $filein or die "Error opening input file: $!\n";
-open my $out, "> $fileout" or die "Error opening output file: $!\n";
-
-print $out <<_EOH_;
-# *** Warning: this file is autogenerated from $filein by $0 ***
-# *** Do not edit this file - edit $filein instead ***
-
-_HOME_DIR := \$(PWD)
-
-_EOH_
-
-my $inrec = 0;
-
-while (<$in>)
-{
- chomp;
- if (/^[^#.\t][^#=]*?:(?:[^=]|$)/)
- {
- if (! $inrec)
- {
- print $out "$_\n";
- while (/\\\s*$/)
- {
- chomp($_ = <$in>);
- print $out "$_\n";
- }
- print $out "@[\n";
- $inrec = 1;
- next;
- }
- else {
- if (!/^\t/) {
- seek ($out, -4, 2); # no recipe, so back up and undo grouping
- # should be -3, but MS has its CR/LF thing...
- $inrec = 0;
- }
- print $out "$_\n";
- next;
- }
- }
- if ((/^\s*$/ || /^[^#.\t][^#=]*?:/) && $inrec)
- {
- print $out "]\n";
- print $out "$_\n";
- $inrec = 0;
- next;
- }
- if (/^(.*?)(&&|\|\|)(.*)$/) # two commands separated by && or ||
- {
- my ($one, $sep, $two) = ($1, $2, $3);
- $one =~ s/^\t(?:-(?!-))?\@?(.*?)$/\t$1/; # no -,@ in group recipes
-LINE_CONT:
- if ($two =~ /\\\s*$/)
- {
- chomp ($two .= "\n" . scalar <$in>);
- goto LINE_CONT;
- }
- s/^\s*// for ($one, $two);
- print $out "\t$one\n\t$two\n" if ($sep eq "&&");
- print $out "\t$one\n\tif errorlevel 1 $two\n" if ($sep eq "||");
- print $out "\tcd \$(_HOME_DIR)\n";
- next;
- }
- # fall through - no need for special handling
- s/^\t(?:-(?!-))?\@?(.*?)$/\t$1/; # no -,@ in group recipes
- print $out "$_\n";
-}
-print $out "]\n" if ($inrec);
-
-close $in or warn "Error closing \$in: $!\n";
-close $out or warn "Error closing \$out: $!\n";
Deleted: trunk/contrib/perl/win32/mdelete.bat
===================================================================
--- trunk/contrib/perl/win32/mdelete.bat 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/win32/mdelete.bat 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,29 +0,0 @@
- at echo off
-rem ! This is a batch file to delete all the files on its
-rem ! command line, to work around command.com's del command's
-rem ! braindeadness
-rem !
-rem ! -- BKS, 11-11-2000
-
-:nextfile
-set file=%1
-shift
-if "%file%"=="" goto end
-del %file%
-goto nextfile
-:end
-
- at echo off
-rem ! This is a batch file to delete all the files on its
-rem ! command line, to work around command.com's del command's
-rem ! braindeadness
-rem !
-rem ! -- BKS, 11-11-2000
-
-:nextfile
-set file=%1
-shift
-if "%file%"=="" goto end
-del %file%
-goto nextfile
-:end
Deleted: trunk/contrib/perl/win32/sync_ext.pl
===================================================================
--- trunk/contrib/perl/win32/sync_ext.pl 2013-12-03 23:53:36 UTC (rev 6451)
+++ trunk/contrib/perl/win32/sync_ext.pl 2013-12-04 00:48:19 UTC (rev 6452)
@@ -1,71 +0,0 @@
-=begin comment
-
-Synchronize filename cases for extensions.
-
-This script could be used to perform following renaming:
-if there exist file, for example, "FiLeNaME.c" and
-filename.obj then it renames "filename.obj" to "FiLeNaME.obj".
-There is a problem when some compilers (e.g.Borland) generate
-such .obj files and then "make" process will not treat them
-as dependant and already maked files.
-
-This script takes two arguments - first and second extensions to
-synchronize filename cases with.
-
-There may be specified following options:
- --verbose <== say everything what is going on
- --recurse <== recurse subdirectories
- --dummy <== do not perform actual renaming
- --say-subdir
-Every such option can be specified with an optional "no" prefix to negate it.
-
-Typically, it is invoked as:
- perl sync_ext.pl c obj --verbose
-
-=cut
-
-use strict;
-
-my ($ext1, $ext2) = map {quotemeta} grep {!/^--/} @ARGV;
-my %opts = (
- #defaults
- 'verbose' => 0,
- 'recurse' => 1,
- 'dummy' => 0,
- 'say-subdir' => 0,
- #options itself
- (map {/^--([\-_\w]+)=(.*)$/} @ARGV), # --opt=smth
- (map {/^no-?(.*)$/i?($1=>0):($_=>1)} map {/^--([\-_\w]+)$/} @ARGV), # --opt --no-opt --noopt
- );
-
-my $sp = '';
-sub xx {
- opendir DIR, '.';
- my @t = readdir DIR;
- my @f = map {/^(.*)\.$ext1$/i} @t;
- my %f = map {lc($_)=>$_} map {/^(.*)\.$ext2$/i} @t;
- for (@f) {
- my $lc = lc($_);
- if (exists $f{$lc} and $f{$lc} ne $_) {
- print STDERR "$sp$f{$lc}.$ext2 <==> $_.$ext1\n" if $opts{verbose};
- if ($opts{dummy}) {
- print STDERR "ren $f{$lc}.$ext2 $_.$ext2\n";
- }
- else {
- system "ren $f{$lc}.$ext2 $_.$ext2";
- }
- }
- }
- if ($opts{recurse}) {
- for (grep {-d&&!/^\.\.?$/} @t) {
- print STDERR "$sp\\$_\n" if $opts{'say-subdir'};
- $sp .= ' ';
- chdir $_ or die;
- xx();
- chdir ".." or die;
- chop $sp;
- }
- }
-}
-
-xx();
More information about the Midnightbsd-cvs
mailing list