summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/lib/pods
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl/lib/pods')
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl.pod87
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5004delta.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5005delta.pod4
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5100delta.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5101delta.pod3
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5110delta.pod1624
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5111delta.pod365
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5112delta.pod348
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5113delta.pod558
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5114delta.pod278
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5115delta.pod327
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5120delta.pod10
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5121delta.pod5
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5122delta.pod3
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5123delta.pod3
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5124delta.pod108
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5130delta.pod133
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl51310delta.pod814
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl51311delta.pod513
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5131delta.pod287
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5132delta.pod409
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5133delta.pod667
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5134delta.pod542
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5135delta.pod592
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5136delta.pod799
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5137delta.pod945
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5138delta.pod912
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5139delta.pod646
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5140delta.pod16
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5142delta.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5143delta.pod291
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5160delta.pod4314
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5161delta.pod198
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl5162delta.pod125
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl561delta.pod7
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl56delta.pod4
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl570delta.pod899
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl571delta.pod1075
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl572delta.pod831
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl573delta.pod246
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl589delta.pod7
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl58delta.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl590delta.pod1015
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl591delta.pod323
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl592delta.pod342
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl593delta.pod551
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl594delta.pod382
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perl595delta.pod587
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlaix.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlapi.pod2168
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlapio.pod3
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlbeos.pod10
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlbook.pod11
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlboot.pod884
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlbot.pod535
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlbs2000.pod4
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlcall.pod5
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlce.pod70
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlcheat.pod118
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlcn.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlcompile.pod293
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlcygwin.pod157
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perldata.pod58
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perldbmfilter.pod1
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perldebguts.pod16
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perldebtut.pod1
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perldebug.pod88
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perldelta.pod207
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perldiag.pod1282
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perldoc.pod66
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perldtrace.pod179
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlebcdic.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlembed.pod16
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlepoc.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlexperiment.pod305
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlfaq.pod239
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlfaq1.pod241
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlfaq2.pod369
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlfaq3.pod688
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlfaq4.pod2102
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlfaq5.pod1082
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlfaq6.pod769
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlfaq7.pod739
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlfaq8.pod962
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlfaq9.pod741
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlfork.pod12
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlform.pod4
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlfreebsd.pod11
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlfunc.pod2051
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlgit.pod260
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlglossary.pod46
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlgpl.pod21
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlguts.pod284
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlhack.pod78
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlhacktips.pod12
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlhaiku.pod12
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlhist.pod40
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlhpux.pod29
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlhurd.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlintern.pod1860
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlinterp.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlintro.pod31
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perliol.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlipc.pod127
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlirix.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlko.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perllexwarn.pod4
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perllinux.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perllocale.pod450
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perllol.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlmacos.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlmacosx.pod16
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlmod.pod79
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlmodinstall.pod17
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlmodlib.pod1109
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlmodstyle.pod43
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlmpeix.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlmroapi.pod6
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlobj.pod1422
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlootut.pod741
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlop.pod627
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlopenbsd.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlos2.pod52
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlos390.pod4
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlos400.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlpacktut.pod3
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlperf.pod4
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlpod.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlpodspec.pod10
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlpodstyle.pod97
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlpolicy.pod62
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlport.pod15
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlpragma.pod24
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlqnx.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlre.pod365
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlreapi.pod14
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlrebackslash.pod39
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlrecharclass.pod291
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlref.pod85
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlreftut.pod4
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlrequick.pod5
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlreref.pod15
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlretut.pod78
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlriscos.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlrun.pod61
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlsec.pod1
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlsolaris.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlsource.pod121
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlsub.pod72
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlsymbian.pod4
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlsyn.pod983
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlthrtut.pod6
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perltie.pod9
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perltoc.pod12090
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perltodo.pod1278
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perltooc.pod1342
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perltoot.pod1836
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perltrap.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perltru64.pod4
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perltw.pod134
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlunicode.pod605
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlunifaq.pod3
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perluniintro.pod89
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perluniprops.pod3294
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlutil.pod25
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlvar.pod1543
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlvmesa.pod4
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlvms.pod3
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlvos.pod2
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlwin32.pod81
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlxs.pod195
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlxstut.pod49
-rw-r--r--Master/tlpkg/tlperl/lib/pods/perlxstypemap.pod699
173 files changed, 29090 insertions, 42654 deletions
diff --git a/Master/tlpkg/tlperl/lib/pods/perl.pod b/Master/tlpkg/tlperl/lib/pods/perl.pod
index 29cabf1fc05..5f154980ee0 100644
--- a/Master/tlpkg/tlperl/lib/pods/perl.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perl.pod
@@ -28,6 +28,24 @@ perldoc> to learn more things you can do with F<perldoc>.
For ease of access, the Perl manual has been split up into several sections.
+=begin buildtoc
+
+# This section is parsed by Porting/pod_lib.pl for use by pod/buildtoc etc
+
+flag =g perluniprops perlmodlib perlapi perlintern
+flag =go perltoc
+flag =ro perlcn perljp perlko perltw
+flag = perlvms
+
+path perlfaq.* cpan/perlfaq/lib/
+path perlglossary cpan/perlfaq/lib/
+path perlxs(?:tut|typemap)? dist/ExtUtils-ParseXS/lib/
+path perldoc cpan/Pod-Perldoc/lib/
+
+aux a2p c2ph h2ph h2xs perlbug pl2pm pod2html pod2man s2p splain xsubpp
+
+=end buildtoc
+
=head2 Overview
perl Perl overview (this section)
@@ -43,10 +61,7 @@ For ease of access, the Perl manual has been split up into several sections.
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
+ perlootut Perl OO tutorial for beginners
perlperf Perl Performance and Optimization Techniques
@@ -120,10 +135,10 @@ For ease of access, the Perl manual has been split up into several sections.
perlutil utilities packaged with the Perl distribution
- perlcompile Perl compiler suite intro
-
perlfilter Perl source filters
+ perldtrace Perl's support for DTrace
+
perlglossary Perl Glossary
=head2 Internals and C Language Interface
@@ -132,6 +147,7 @@ For ease of access, the Perl manual has been split up into several sections.
perldebguts Perl debugging guts and tips
perlxstut Perl XS tutorial
perlxs Perl XS application programming interface
+ perlxstypemap Perl XS C/Perl type conversion tools
perlclib Internal replacements for standard C library functions
perlguts Perl internal functions for those doing extensions
perlcall Perl calling conventions from C
@@ -146,7 +162,7 @@ For ease of access, the Perl manual has been split up into several sections.
perlhack Perl hackers guide
perlsource Guide to the Perl source tree
- perlinterp Overview of the Perl intepreter source and how it works
+ perlinterp Overview of the Perl interpreter 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
@@ -156,44 +172,25 @@ For ease of access, the Perl manual has been split up into several sections.
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
perldelta Perl changes since previous version
+ perl5161delta Perl changes in version 5.16.1
+ perl5160delta Perl changes in version 5.16.0
+ perl5160delta Perl changes in version 5.16.0
+ perl5143delta Perl changes in version 5.14.3
+ 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
+ perl5124delta Perl changes in version 5.12.4
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
@@ -204,20 +201,20 @@ For ease of access, the Perl manual has been split up into several sections.
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
+ perlexperiment A listing of experimental features in Perl
+
perlartistic Perl Artistic License
perlgpl GNU General Public License
=head2 Language-Specific
+=for buildtoc flag +r
+
perlcn Perl for Simplified Chinese (in EUC-CN)
perljp Perl for Japanese (in EUC-JP)
perlko Perl for Korean (in EUC-KR)
@@ -260,6 +257,17 @@ For ease of access, the Perl manual has been split up into several sections.
perlvos Perl notes for Stratus VOS
perlwin32 Perl notes for Windows
+=for buildtoc flag -r
+
+=head2 Stubs for Deleted Documents
+
+ perlboot
+ perlbot
+ perltodo
+ perltooc
+ perltoot
+
+=for buildtoc __END__
On a Unix-like system, these documentation files will usually also be
available as manpages for use with the F<man> program.
@@ -315,8 +323,8 @@ Described in L<perlmod>, L<perlmodlib>, and L<perlmodinstall>.
embeddable and extensible
-Described in L<perlembed>, L<perlxstut>, L<perlxs>, L<perlcall>,
-L<perlguts>, and L<xsubpp>.
+Described in L<perlembed>, L<perlxstut>, L<perlxs>, L<perlxstypemap>,
+L<perlcall>, L<perlguts>, and L<xsubpp>.
=item *
@@ -341,8 +349,7 @@ Described in L<perlreftut>, L<perlref>, L<perldsc>, and L<perllol>.
object-oriented programming
-Described in L<perlobj>, L<perlboot>, L<perltoot>, L<perltooc>,
-and L<perlbot>.
+Described in L<perlobj> and L<perlootut>.
=item *
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5004delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5004delta.pod
index c83f3e6afd4..fc5ae62bb85 100644
--- a/Master/tlpkg/tlperl/lib/pods/perl5004delta.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perl5004delta.pod
@@ -753,7 +753,7 @@ and above) or the Borland C++ compiler (versions 5.02 and above).
The resulting perl can be used under Windows 95 (if it
is installed in the same directory locations as it got installed
in Windows NT). This port includes support for perl extension
-building tools like L<MakeMaker> and L<h2xs>, so that many extensions
+building tools like L<ExtUtils::MakeMaker> and L<h2xs>, so that many extensions
available on the Comprehensive Perl Archive Network (CPAN) can now be
readily built under Windows NT. See http://www.perl.com/ for more
information on CPAN and F<README.win32> in the perl distribution for more
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5005delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5005delta.pod
index cabdf9eb7cb..62661254a21 100644
--- a/Master/tlpkg/tlperl/lib/pods/perl5005delta.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perl5005delta.pod
@@ -523,7 +523,7 @@ encapsulation of Perl. GCC and EGCS are now supported on Win32.
See F<README.win32>, aka L<perlwin32>.
VMS configuration system has been rewritten. See F<README.vms> (installed
-as L<README_vms> on some systems).
+as F<README_vms> on some systems).
The hints files for most Unix platforms have seen incremental improvements.
@@ -722,7 +722,7 @@ imported with the C<use subs> pragma).
To silently interpret it as the Perl operator, use the C<CORE::> prefix
on the operator (e.g. C<CORE::log($x)>) or by declaring the subroutine
-to be an object method (see L<attrs>).
+to be an object method (see L</attrs>).
=item Bad index while coercing array into hash
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5100delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5100delta.pod
index e93c316954a..4e5c6d3a2b6 100644
--- a/Master/tlpkg/tlperl/lib/pods/perl5100delta.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perl5100delta.pod
@@ -844,7 +844,7 @@ of C<CPANPLUS>.
=item *
C<Archive::Extract> is a generic archive extraction mechanism
-for F<.tar> (plain, gziped or bzipped) or F<.zip> files.
+for F<.tar> (plain, gzipped or bzipped) or F<.zip> files.
=item *
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5101delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5101delta.pod
index c6cdef977ae..415ab6be245 100644
--- a/Master/tlpkg/tlperl/lib/pods/perl5101delta.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perl5101delta.pod
@@ -1751,7 +1751,8 @@ 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@perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
+unarchived mailing list, which includes
+all the core committers, who will 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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5110delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5110delta.pod
deleted file mode 100644
index 7ceb174a09c..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl5110delta.pod
+++ /dev/null
@@ -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@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@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
-
-
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5111delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5111delta.pod
deleted file mode 100644
index 4717374803d..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl5111delta.pod
+++ /dev/null
@@ -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@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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5112delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5112delta.pod
deleted file mode 100644
index c53a622c4cc..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl5112delta.pod
+++ /dev/null
@@ -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@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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5113delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5113delta.pod
deleted file mode 100644
index 5c4e1966027..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl5113delta.pod
+++ /dev/null
@@ -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@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@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
-
-
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5114delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5114delta.pod
deleted file mode 100644
index 05a387f2d37..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl5114delta.pod
+++ /dev/null
@@ -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 *
-
-@_ 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@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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5115delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5115delta.pod
deleted file mode 100644
index bb4180220ea..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl5115delta.pod
+++ /dev/null
@@ -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@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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5120delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5120delta.pod
index 08c4285ebe9..f8a1810c861 100644
--- a/Master/tlpkg/tlperl/lib/pods/perl5120delta.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perl5120delta.pod
@@ -456,7 +456,6 @@ have been removed from this distribution.
C<Module::CoreList> no longer contains the C<%:patchlevel> hash.
-
=item *
C<length undef> now returns undef.
@@ -529,7 +528,6 @@ The following items are now deprecated:
C<suidperl> is no longer part of Perl. It used to provide a mechanism to
emulate setuid permission bits on systems that don't support it properly.
-
=item Use of C<:=> to mean an empty attribute list
An accident of Perl's parser meant that these constructions were all
@@ -561,7 +559,6 @@ The method C<< UNIVERSAL->import() >> is now deprecated. Attempting to
pass import arguments to a C<use UNIVERSAL> statement will result in a
deprecation warning.
-
=item Use of "goto" to jump into a construct
Using C<goto> to jump from an outer scope into an inner scope is now
@@ -1433,7 +1430,6 @@ the beginnings of a document on Perl porting policies.
=over
-
=item *
The various large F<Changes*> files (which listed every change made
@@ -1447,7 +1443,6 @@ 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>.
-
=item *
The syntax C<unless (EXPR) BLOCK else BLOCK> is now documented as valid,
@@ -1455,7 +1450,6 @@ 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.
-
=item *
Documented -X overloading.
@@ -2106,7 +2100,6 @@ 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 *
The fatal error C<Malformed UTF-8 returned by \N> is now produced if the
@@ -3176,7 +3169,8 @@ 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@perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
+unarchived mailing list, which includes
+all the core committers, who will 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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5121delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5121delta.pod
index cc2702bcc32..a999f144848 100644
--- a/Master/tlpkg/tlperl/lib/pods/perl5121delta.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perl5121delta.pod
@@ -210,12 +210,10 @@ XSUB.h now correctly redefines fgets under PERL_IMPLICIT_SYS
See also: L<http://rt.cpan.org/Public/Bug/Display.html?id=55049>
-
=item *
utf8::is_utf8 now respects GMAGIC (e.g. $1)
-
=item *
XS code using C<fputc()> or C<fputs()>: on Windows could cause an error
@@ -390,7 +388,8 @@ 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@perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
+unarchived mailing list, which includes
+all the core committers, who will 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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5122delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5122delta.pod
index 445e74dea77..f441a385812 100644
--- a/Master/tlpkg/tlperl/lib/pods/perl5122delta.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perl5122delta.pod
@@ -325,7 +325,8 @@ 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@perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
+unarchived mailing list, which includes
+all the core committers, who will 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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5123delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5123delta.pod
index 35da9af23ca..580af240169 100644
--- a/Master/tlpkg/tlperl/lib/pods/perl5123delta.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perl5123delta.pod
@@ -96,7 +96,8 @@ 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@perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
+unarchived mailing list, which includes
+all the core committers, who will 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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5124delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5124delta.pod
new file mode 100644
index 00000000000..bd3a1db43be
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/pods/perl5124delta.pod
@@ -0,0 +1,108 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5124delta - what is new for perl v5.12.4
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.12.3 release and
+the 5.12.4 release.
+
+If you are upgrading from an earlier release such as 5.12.2, first read
+L<perl5123delta>, which describes differences between 5.12.2
+and 5.12.3. The major changes made in 5.12.0 are described in L<perl5120delta>.
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with 5.12.3. If any
+exist, they are bugs and reports are welcome.
+
+=head1 Selected Bug Fixes
+
+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 be so in strict
+mode only [perl #81750].
+
+C<lc>, C<uc>, C<lcfirst>, and C<ucfirst> no longer return untainted strings
+when the argument is tainted. This has been broken since perl 5.8.9
+[perl #87336].
+
+Fixed a case where it was possible that a freed buffer may have been read
+from when parsing a here document.
+
+=head1 Modules and Pragmata
+
+L<Module::CoreList> has been upgraded from version 2.43 to 2.50.
+
+=head1 Testing
+
+The F<cpan/CGI/t/http.t> test script has been fixed to work when the
+environment has HTTPS_* environment variables, such as HTTPS_PROXY.
+
+=head1 Documentation
+
+Updated the documentation for rand() in L<perlfunc> to note that it is not
+cryptographically secure.
+
+=head1 Platform Specific Notes
+
+=over 4
+
+=item Linux
+
+Support Ubuntu 11.04's new multi-arch library layout.
+
+=back
+
+=head1 Acknowledgements
+
+Perl 5.12.4 represents approximately 5 months of development since
+Perl 5.12.3 and contains approximately 200 lines of changes across
+11 files from 8 authors.
+
+Perl continues to flourish into its third decade thanks to a vibrant
+community of users and developers. The following people are known to
+have contributed the improvements that became Perl 5.12.4:
+
+Andy Dougherty, David Golden, David Leadbeater, Father Chrysostomos,
+Florian Ragwitz, Jesse Vincent, Leon Brocard, Zsbán Ambrus.
+
+=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@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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5130delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5130delta.pod
deleted file mode 100644
index c5d5169b54e..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl5130delta.pod
+++ /dev/null
@@ -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@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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl51310delta.pod b/Master/tlpkg/tlperl/lib/pods/perl51310delta.pod
deleted file mode 100644
index 846e2253f30..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl51310delta.pod
+++ /dev/null
@@ -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@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@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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl51311delta.pod b/Master/tlpkg/tlperl/lib/pods/perl51311delta.pod
deleted file mode 100644
index 8d537e9c8d8..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl51311delta.pod
+++ /dev/null
@@ -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@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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5131delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5131delta.pod
deleted file mode 100644
index 1a372bfd6af..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl5131delta.pod
+++ /dev/null
@@ -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@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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5132delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5132delta.pod
deleted file mode 100644
index 082fa0f69bc..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl5132delta.pod
+++ /dev/null
@@ -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@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@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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5133delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5133delta.pod
deleted file mode 100644
index af03607adf6..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl5133delta.pod
+++ /dev/null
@@ -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@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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5134delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5134delta.pod
deleted file mode 100644
index e90fbffeb9b..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl5134delta.pod
+++ /dev/null
@@ -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@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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5135delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5135delta.pod
deleted file mode 100644
index de76d586bd7..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl5135delta.pod
+++ /dev/null
@@ -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@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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5136delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5136delta.pod
deleted file mode 100644
index f8122572897..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl5136delta.pod
+++ /dev/null
@@ -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@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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5137delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5137delta.pod
deleted file mode 100644
index 0a65b4365a9..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl5137delta.pod
+++ /dev/null
@@ -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@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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5138delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5138delta.pod
deleted file mode 100644
index 1b01b2701c1..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl5138delta.pod
+++ /dev/null
@@ -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@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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5139delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5139delta.pod
deleted file mode 100644
index fb9bf36784b..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl5139delta.pod
+++ /dev/null
@@ -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@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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5140delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5140delta.pod
index 145d08d463f..74c82a8e141 100644
--- a/Master/tlpkg/tlperl/lib/pods/perl5140delta.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perl5140delta.pod
@@ -1108,7 +1108,7 @@ and penalised well-behaved code. It has been removed.
=head2 Freeing weak references
When there are many weak references to an object, freeing that object
-can under some circumstances take O(I<NE<0xB2>>) time to free, where
+can under some circumstances take O(I<N*N>) time to free, where
I<N> is the number of references. The circumstances in which this can happen
have been reduced [perl #75254]
@@ -1547,9 +1547,9 @@ It is now safe to use this module in combination with threads.
L<Digest::SHA> has been upgraded from version 5.47 to 5.61.
-L<shasum> now more closely mimics L<sha1sum(1)>/L<md5sum(1)>.
+C<shasum> now more closely mimics L<sha1sum(1)>/L<md5sum(1)>.
-L<Addfile> accepts all POSIX filenames.
+C<addfile> accepts all POSIX filenames.
New SHA-512/224 and SHA-512/256 transforms (ref. NIST Draft FIPS 180-4
[February 2011])
@@ -2125,7 +2125,7 @@ L<Unicode::UCD> has been upgraded from version 0.27 to 0.32.
A new function, Unicode::UCD::num(), has been added. This function
returns the numeric value of the string passed it or C<undef> if the string
in its entirety has no "safe" numeric value. (For more detail, and for the
-definition of "safe", see L<Unicode::UCD/num>.)
+definition of "safe", see L<Unicode::UCD/num()>.)
This upgrade also includes several bug fixes:
@@ -2888,7 +2888,7 @@ When C<perlio> became the default and C<unix> 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. This prevents
inheriting permissions from RMS defaults and ACLs, so to avoid that problem,
-we now pass C<0777> to open(). In theVMS CRTL, C<0777> has a special
+we now pass C<0777> to 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 (5.12.3).
@@ -4445,8 +4445,8 @@ See also: L<http://rt.perl.org/rt3/Public/Bug/Display.html?id=67694>
=item *
-readline() returns an empty string instead of undef when it is
-interrupted by a signal.
+readline() returns an empty string instead of a cached previous value
+when it is interrupted by a signal
=item *
@@ -4569,7 +4569,7 @@ 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@perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
+unarchived mailing list, which includes all the core committers, who are 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 use this address for
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5142delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5142delta.pod
index 425708fbb46..3d78ba232bd 100644
--- a/Master/tlpkg/tlperl/lib/pods/perl5142delta.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perl5142delta.pod
@@ -2,7 +2,7 @@
=head1 NAME
-perldelta - what is new for perl v5.14.2
+perl5142delta - what is new for perl v5.14.2
=head1 DESCRIPTION
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5143delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5143delta.pod
new file mode 100644
index 00000000000..093b6272dcb
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/pods/perl5143delta.pod
@@ -0,0 +1,291 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5143delta - what is new for perl v5.14.3
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.14.2 release and
+the 5.14.3 release.
+
+If you are upgrading from an earlier release such as 5.12.0, first read
+L<perl5140delta>, which describes differences between 5.12.0 and
+5.14.0.
+
+=head1 Core Enhancements
+
+No changes since 5.14.0.
+
+=head1 Security
+
+=head2 C<Digest> unsafe use of eval (CVE-2011-3597)
+
+The C<Digest-E<gt>new()> function did not properly sanitize input before
+using it in an eval() call, which could lead to the injection of arbitrary
+Perl code.
+
+In order to exploit this flaw, the attacker would need to be able to set
+the algorithm name used, or be able to execute arbitrary Perl code already.
+
+This problem has been fixed.
+
+=head2 Heap buffer overrun in 'x' string repeat operator (CVE-2012-5195)
+
+Poorly written perl code that allows an attacker to specify the count to
+perl's 'x' string repeat operator can already cause a memory exhaustion
+denial-of-service attack. A flaw in versions of perl before 5.15.5 can
+escalate that into a heap buffer overrun; coupled with versions of glibc
+before 2.16, it possibly allows the execution of arbitrary code.
+
+This problem has been fixed.
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with 5.14.0. If any
+exist, they are bugs and reports are welcome.
+
+=head1 Deprecations
+
+There have been no deprecations since 5.14.0.
+
+=head1 Modules and Pragmata
+
+=head2 New Modules and Pragmata
+
+None
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<PerlIO::scalar> was updated to fix a bug in which opening a filehandle to
+a glob copy caused assertion failures (under debugging) or hangs or other
+erratic behaviour without debugging.
+
+=item *
+
+L<ODBM_File> and L<NDBM_File> were updated to allow building on GNU/Hurd.
+
+=item *
+
+L<IPC::Open3> has been updated to fix a regression introduced in perl
+5.12, which broke C<IPC::Open3::open3($in, $out, $err, '-')>.
+[perl #95748]
+
+=item *
+
+L<Digest> has been upgraded from version 1.16 to 1.16_01.
+
+See L</Security>.
+
+=item *
+
+L<Module::CoreList> has been updated to version 2.49_04 to add data for
+this release.
+
+=back
+
+=head2 Removed Modules and Pragmata
+
+None
+
+=head1 Documentation
+
+=head2 New Documentation
+
+None
+
+=head2 Changes to Existing Documentation
+
+=head3 L<perlcheat>
+
+=over 4
+
+=item *
+
+L<perlcheat> was updated to 5.14.
+
+=back
+
+=head1 Configuration and Compilation
+
+=over 4
+
+=item *
+
+h2ph was updated to search correctly gcc include directories on platforms
+such as Debian with multi-architecture support.
+
+=item *
+
+In Configure, the test for procselfexe was refactored into a loop.
+
+=back
+
+=head1 Platform Support
+
+=head2 New Platforms
+
+None
+
+=head2 Discontinued Platforms
+
+None
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item FreeBSD
+
+The FreeBSD hints file was corrected to be compatible with FreeBSD 10.0.
+
+=item Solaris and NetBSD
+
+Configure was updated for "procselfexe" support on Solaris and NetBSD.
+
+=item HP-UX
+
+README.hpux was updated to note the existence of a broken header in
+HP-UX 11.00.
+
+=item Linux
+
+libutil is no longer used when compiling on Linux platforms, which avoids
+warnings being emitted.
+
+The system gcc (rather than any other gcc which might be in the compiling
+user's path) is now used when searching for libraries such as C<-lm>.
+
+=item Mac OS X
+
+The locale tests were updated to reflect the behaviour of locales in
+Mountain Lion.
+
+=item GNU/Hurd
+
+Various build and test fixes were included for GNU/Hurd.
+
+LFS support was enabled in GNU/Hurd.
+
+=item NetBSD
+
+The NetBSD hints file was corrected to be compatible with NetBSD 6.*
+
+=back
+
+=head1 Bug Fixes
+
+=over 4
+
+=item *
+
+A regression has been fixed that was introduced in 5.14, in C</i>
+regular expression matching, in which a match improperly fails if the
+pattern is in UTF-8, the target string is not, and a Latin-1 character
+precedes a character in the string that should match the pattern. [perl
+#101710]
+
+=item *
+
+In case-insensitive regular expression pattern matching, no longer on
+UTF-8 encoded strings does the scan for the start of match only look at
+the first possible position. This caused matches such as
+C<"f\x{FB00}" =~ /ff/i> to fail.
+
+=item *
+
+The sitecustomize support was made relocatableinc aware, so that
+-Dusesitecustomize and -Duserelocatableinc may be used together.
+
+=item *
+
+The smartmatch operator (C<~~>) was changed so that the right-hand side
+takes precedence during C<Any ~~ Object> operations.
+
+=item *
+
+A bug has been fixed in the tainting support, in which an C<index()>
+operation on a tainted constant would cause all other constants to become
+tainted. [perl #64804]
+
+=item *
+
+A regression has been fixed that was introduced in perl 5.12, whereby
+tainting errors were not correctly propagated through C<die()>.
+[perl #111654]
+
+=item *
+
+A regression has been fixed that was introduced in perl 5.14, in which
+C</[[:lower:]]/i> and C</[[:upper:]]/i> no longer matched the opposite case.
+[perl #101970]
+
+=back
+
+=head1 Acknowledgements
+
+Perl 5.14.3 represents approximately 12 months of development since Perl 5.14.2
+and contains approximately 2,300 lines of changes across 64 files from 22
+authors.
+
+Perl continues to flourish into its third decade thanks to a vibrant community
+of users and developers. The following people are known to have contributed the
+improvements that became Perl 5.14.3:
+
+Abigail, Andy Dougherty, Carl Hayter, Chris 'BinGOs' Williams, Dave Rolsky,
+David Mitchell, Dominic Hargreaves, Father Chrysostomos, Florian Ragwitz,
+H.Merijn Brand, Jilles Tjoelker, Karl Williamson, Leon Timmermans, Michael G
+Schwern, Nicholas Clark, Niko Tyni, Pino Toscano, Ricardo Signes, Salvador
+Fandiño, Samuel Thibault, Steve Hay, Tony Cook.
+
+The list above is almost certainly incomplete as it is automatically generated
+from version control history. In particular, it does not include the names of
+the (very much appreciated) contributors who reported issues to the Perl bug
+tracker.
+
+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.
+
+For a more complete list of all of Perl's historical contributors, please see
+the F<AUTHORS> file in the Perl source distribution.
+
+=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@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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5160delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5160delta.pod
new file mode 100644
index 00000000000..9b67d17a243
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/pods/perl5160delta.pod
@@ -0,0 +1,4314 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5160delta - what is new for perl v5.16.0
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.14.0 release and
+the 5.16.0 release.
+
+If you are upgrading from an earlier release such as 5.12.0, first read
+L<perl5140delta>, which describes differences between 5.12.0 and
+5.14.0.
+
+Some bug fixes in this release have been backported to later
+releases of 5.14.x. Those are indicated with the 5.14.x version in
+parentheses.
+
+=head1 Notice
+
+With the release of Perl 5.16.0, the 5.12.x series of releases is now out of
+its support period. There may be future 5.12.x releases, but only in the
+event of a critical security issue. Users of Perl 5.12 or earlier should
+consider upgrading to a more recent release of Perl.
+
+This policy is described in greater detail in
+L<perlpolicy|perlpolicy/MAINTENANCE AND SUPPORT>.
+
+=head1 Core Enhancements
+
+=head2 C<use I<VERSION>>
+
+As of this release, version declarations like C<use v5.16> now disable
+all features before enabling the new feature bundle. This means that
+the following holds true:
+
+ use 5.016;
+ # only 5.16 features enabled here
+ use 5.014;
+ # only 5.14 features enabled here (not 5.16)
+
+C<use v5.12> and higher continue to enable strict, but explicit C<use
+strict> and C<no strict> now override the version declaration, even
+when they come first:
+
+ no strict;
+ use 5.012;
+ # no strict here
+
+There is a new ":default" feature bundle that represents the set of
+features enabled before any version declaration or C<use feature> has
+been seen. Version declarations below 5.10 now enable the ":default"
+feature set. This does not actually change the behavior of C<use
+v5.8>, because features added to the ":default" set are those that were
+traditionally enabled by default, before they could be turned off.
+
+C<< no feature >> now resets to the default feature set. To disable all
+features (which is likely to be a pretty special-purpose request, since
+it presumably won't match any named set of semantics) you can now
+write C<< no feature ':all' >>.
+
+C<$[> is now disabled under C<use v5.16>. It is part of the default
+feature set and can be turned on or off explicitly with C<use feature
+'array_base'>.
+
+=head2 C<__SUB__>
+
+The new C<__SUB__> token, available under the C<current_sub> feature
+(see L<feature>) or C<use v5.16>, returns a reference to the current
+subroutine, making it easier to write recursive closures.
+
+=head2 New and Improved Built-ins
+
+=head3 More consistent C<eval>
+
+The C<eval> operator sometimes treats a string argument as a sequence of
+characters and sometimes as a sequence of bytes, depending on the
+internal encoding. The internal encoding is not supposed to make any
+difference, but there is code that relies on this inconsistency.
+
+The new C<unicode_eval> and C<evalbytes> features (enabled under C<use
+5.16.0>) resolve this. The C<unicode_eval> feature causes C<eval
+$string> to treat the string always as Unicode. The C<evalbytes>
+features provides a function, itself called C<evalbytes>, which
+evaluates its argument always as a string of bytes.
+
+These features also fix oddities with source filters leaking to outer
+dynamic scopes.
+
+See L<feature> for more detail.
+
+=head3 C<substr> lvalue revamp
+
+=for comment Does this belong here, or under Incompatible Changes?
+
+When C<substr> is called in lvalue or potential lvalue context with two
+or three arguments, a special lvalue scalar is returned that modifies
+the original string (the first argument) when assigned to.
+
+Previously, the offsets (the second and third arguments) passed to
+C<substr> would be converted immediately to match the string, negative
+offsets being translated to positive and offsets beyond the end of the
+string being truncated.
+
+Now, the offsets are recorded without modification in the special
+lvalue scalar that is returned, and the original string is not even
+looked at by C<substr> itself, but only when the returned lvalue is
+read or modified.
+
+These changes result in an incompatible change:
+
+If the original string changes length after the call to C<substr> but
+before assignment to its return value, negative offsets will remember
+their position from the end of the string, affecting code like this:
+
+ my $string = "string";
+ my $lvalue = \substr $string, -4, 2;
+ print $$lvalue, "\n"; # prints "ri"
+ $string = "bailing twine";
+ print $$lvalue, "\n"; # prints "wi"; used to print "il"
+
+The same thing happens with an omitted third argument. The returned
+lvalue will always extend to the end of the string, even if the string
+becomes longer.
+
+Since this change also allowed many bugs to be fixed (see
+L</The C<substr> operator>), and since the behavior
+of negative offsets has never been specified, the
+change was deemed acceptable.
+
+=head3 Return value of C<tied>
+
+The value returned by C<tied> on a tied variable is now the actual
+scalar that holds the object to which the variable is tied. This
+lets ties be weakened with C<Scalar::Util::weaken(tied
+$tied_variable)>.
+
+=head2 Unicode Support
+
+=head3 Supports (I<almost>) Unicode 6.1
+
+Besides the addition of whole new scripts, and new characters in
+existing scripts, this new version of Unicode, as always, makes some
+changes to existing characters. One change that may trip up some
+applications is that the General Category of two characters in the
+Latin-1 range, PILCROW SIGN and SECTION SIGN, has been changed from
+Other_Symbol to Other_Punctuation. The same change has been made for
+a character in each of Tibetan, Ethiopic, and Aegean.
+The code points U+3248..U+324F (CIRCLED NUMBER TEN ON BLACK SQUARE
+through CIRCLED NUMBER EIGHTY ON BLACK SQUARE) have had their General
+Category changed from Other_Symbol to Other_Numeric. The Line Break
+property has changes for Hebrew and Japanese; and because of
+other changes in 6.1, the Perl regular expression construct C<\X> now
+works differently for some characters in Thai and Lao.
+
+New aliases (synonyms) have been defined for many property values;
+these, along with the previously existing ones, are all cross-indexed in
+L<perluniprops>.
+
+The return value of C<charnames::viacode()> is affected by other
+changes:
+
+ Code point Old Name New Name
+ U+000A LINE FEED (LF) LINE FEED
+ U+000C FORM FEED (FF) FORM FEED
+ U+000D CARRIAGE RETURN (CR) CARRIAGE RETURN
+ U+0085 NEXT LINE (NEL) NEXT LINE
+ U+008E SINGLE-SHIFT 2 SINGLE-SHIFT-2
+ U+008F SINGLE-SHIFT 3 SINGLE-SHIFT-3
+ U+0091 PRIVATE USE 1 PRIVATE USE-1
+ U+0092 PRIVATE USE 2 PRIVATE USE-2
+ U+2118 SCRIPT CAPITAL P WEIERSTRASS ELLIPTIC FUNCTION
+
+Perl will accept any of these names as input, but
+C<charnames::viacode()> now returns the new name of each pair. The
+change for U+2118 is considered by Unicode to be a correction, that is
+the original name was a mistake (but again, it will remain forever valid
+to use it to refer to U+2118). But most of these changes are the
+fallout of the mistake Unicode 6.0 made in naming a character used in
+Japanese cell phones to be "BELL", which conflicts with the longstanding
+industry use of (and Unicode's recommendation to use) that name
+to mean the ASCII control character at U+0007. Therefore, that name
+has been deprecated in Perl since v5.14, and any use of it will raise a
+warning message (unless turned off). The name "ALERT" is now the
+preferred name for this code point, with "BEL" an acceptable short
+form. The name for the new cell phone character, at code point U+1F514,
+remains undefined in this version of Perl (hence we don't
+implement quite all of Unicode 6.1), but starting in v5.18, BELL will mean
+this character, and not U+0007.
+
+Unicode has taken steps to make sure that this sort of mistake does not
+happen again. The Standard now includes all generally accepted
+names and abbreviations for control characters, whereas previously it
+didn't (though there were recommended names for most of them, which Perl
+used). This means that most of those recommended names are now
+officially in the Standard. Unicode did not recommend names for the
+four code points listed above between U+008E and U+008F, and in
+standardizing them Unicode subtly changed the names that Perl had
+previously given them, by replacing the final blank in each name by a
+hyphen. Unicode also officially accepts names that Perl had deprecated,
+such as FILE SEPARATOR. Now the only deprecated name is BELL.
+Finally, Perl now uses the new official names instead of the old
+(now considered obsolete) names for the first four code points in the
+list above (the ones which have the parentheses in them).
+
+Now that the names have been placed in the Unicode standard, these kinds
+of changes should not happen again, though corrections, such as to
+U+2118, are still possible.
+
+Unicode also added some name abbreviations, which Perl now accepts:
+SP for SPACE;
+TAB for CHARACTER TABULATION;
+NEW LINE, END OF LINE, NL, and EOL for LINE FEED;
+LOCKING-SHIFT ONE for SHIFT OUT;
+LOCKING-SHIFT ZERO for SHIFT IN;
+and ZWNBSP for ZERO WIDTH NO-BREAK SPACE.
+
+More details on this version of Unicode are provided in
+L<http://www.unicode.org/versions/Unicode6.1.0/>.
+
+=head3 C<use charnames> is no longer needed for C<\N{I<name>}>
+
+When C<\N{I<name>}> is encountered, the C<charnames> module is now
+automatically loaded when needed as if the C<:full> and C<:short>
+options had been specified. See L<charnames> for more information.
+
+=head3 C<\N{...}> can now have Unicode loose name matching
+
+This is described in the C<charnames> item in
+L</Updated Modules and Pragmata> below.
+
+=head3 Unicode Symbol Names
+
+Perl now has proper support for Unicode in symbol names. It used to be
+that C<*{$foo}> would ignore the internal UTF8 flag and use the bytes of
+the underlying representation to look up the symbol. That meant that
+C<*{"\x{100}"}> and C<*{"\xc4\x80"}> would return the same thing. All
+these parts of Perl have been fixed to account for Unicode:
+
+=over
+
+=item *
+
+Method names (including those passed to C<use overload>)
+
+=item *
+
+Typeglob names (including names of variables, subroutines, and filehandles)
+
+=item *
+
+Package names
+
+=item *
+
+C<goto>
+
+=item *
+
+Symbolic dereferencing
+
+=item *
+
+Second argument to C<bless()> and C<tie()>
+
+=item *
+
+Return value of C<ref()>
+
+=item *
+
+Subroutine prototypes
+
+=item *
+
+Attributes
+
+=item *
+
+Various warnings and error messages that mention variable names or values,
+methods, etc.
+
+=back
+
+In addition, a parsing bug has been fixed that prevented C<*{é}> from
+implicitly quoting the name, but instead interpreted it as C<*{+é}>, which
+would cause a strict violation.
+
+C<*{"*a::b"}> automatically strips off the * if it is followed by an ASCII
+letter. That has been extended to all Unicode identifier characters.
+
+One-character non-ASCII non-punctuation variables (like C<$é>) are now
+subject to "Used only once" warnings. They used to be exempt, as they
+were treated as punctuation variables.
+
+Also, single-character Unicode punctuation variables (like C<$‰>) are now
+supported [perl #69032].
+
+=head3 Improved ability to mix locales and Unicode, including UTF-8 locales
+
+An optional parameter has been added to C<use locale>
+
+ use locale ':not_characters';
+
+which tells Perl to use all but the C<LC_CTYPE> and C<LC_COLLATE>
+portions of the current locale. Instead, the character set is assumed
+to be Unicode. This lets locales and Unicode be seamlessly mixed,
+including the increasingly frequent UTF-8 locales. When using this
+hybrid form of locales, the C<:locale> layer to the L<open> pragma can
+be used to interface with the file system, and there are CPAN modules
+available for ARGV and environment variable conversions.
+
+Full details are in L<perllocale>.
+
+=head3 New function C<fc> and corresponding escape sequence C<\F> for Unicode foldcase
+
+Unicode foldcase is an extension to lowercase that gives better results
+when comparing two strings case-insensitively. It has long been used
+internally in regular expression C</i> matching. Now it is available
+explicitly through the new C<fc> function call (enabled by
+S<C<"use feature 'fc'">>, or C<use v5.16>, or explicitly callable via
+C<CORE::fc>) or through the new C<\F> sequence in double-quotish
+strings.
+
+Full details are in L<perlfunc/fc>.
+
+=head3 The Unicode C<Script_Extensions> property is now supported.
+
+New in Unicode 6.0, this is an improved C<Script> property. Details
+are in L<perlunicode/Scripts>.
+
+=head2 XS Changes
+
+=head3 Improved typemaps for Some Builtin Types
+
+Most XS authors will know there is a longstanding bug in the
+OUTPUT typemap for T_AVREF (C<AV*>), T_HVREF (C<HV*>), T_CVREF (C<CV*>),
+and T_SVREF (C<SVREF> or C<\$foo>) that requires manually decrementing
+the reference count of the return value instead of the typemap taking
+care of this. For backwards-compatibility, this cannot be changed in the
+default typemaps. But we now provide additional typemaps
+C<T_AVREF_REFCOUNT_FIXED>, etc. that do not exhibit this bug. Using
+them in your extension is as simple as having one line in your
+C<TYPEMAP> section:
+
+ HV* T_HVREF_REFCOUNT_FIXED
+
+=head3 C<is_utf8_char()>
+
+The XS-callable function C<is_utf8_char()>, when presented with
+malformed UTF-8 input, can read up to 12 bytes beyond the end of the
+string. This cannot be fixed without changing its API, and so its
+use is now deprecated. Use C<is_utf8_char_buf()> (described just below)
+instead.
+
+=head3 Added C<is_utf8_char_buf()>
+
+This function is designed to replace the deprecated L</is_utf8_char()>
+function. It includes an extra parameter to make sure it doesn't read
+past the end of the input buffer.
+
+=head3 Other C<is_utf8_foo()> functions, as well as C<utf8_to_foo()>, etc.
+
+Most other XS-callable functions that take UTF-8 encoded input
+implicitly assume that the UTF-8 is valid (not malformed) with respect to
+buffer length. Do not do things such as change a character's case or
+see if it is alphanumeric without first being sure that it is valid
+UTF-8. This can be safely done for a whole string by using one of the
+functions C<is_utf8_string()>, C<is_utf8_string_loc()>, and
+C<is_utf8_string_loclen()>.
+
+=head3 New Pad API
+
+Many new functions have been added to the API for manipulating lexical
+pads. See L<perlapi/Pad Data Structures> for more information.
+
+=head2 Changes to Special Variables
+
+=head3 C<$$> can be assigned to
+
+C<$$> was made read-only in Perl 5.8.0. But only sometimes: C<local $$>
+would make it writable again. Some CPAN modules were using C<local $$> or
+XS code to bypass the read-only check, so there is no reason to keep C<$$>
+read-only. (This change also allowed a bug to be fixed while maintaining
+backward compatibility.)
+
+=head3 C<$^X> converted to an absolute path on FreeBSD, OS X and Solaris
+
+C<$^X> is now converted to an absolute path on OS X, FreeBSD (without
+needing F</proc> mounted) and Solaris 10 and 11. This augments the
+previous approach of using F</proc> on Linux, FreeBSD, and NetBSD
+(in all cases, where mounted).
+
+This makes relocatable perl installations more useful on these platforms.
+(See "Relocatable @INC" in F<INSTALL>)
+
+=head2 Debugger Changes
+
+=head3 Features inside the debugger
+
+The current Perl's L<feature> bundle is now enabled for commands entered
+in the interactive debugger.
+
+=head3 New option for the debugger's B<t> command
+
+The B<t> command in the debugger, which toggles tracing mode, now
+accepts a numeric argument that determines how many levels of subroutine
+calls to trace.
+
+=head3 C<enable> and C<disable>
+
+The debugger now has C<disable> and C<enable> commands for disabling
+existing breakpoints and re-enabling them. See L<perldebug>.
+
+=head3 Breakpoints with file names
+
+The debugger's "b" command for setting breakpoints now lets a line
+number be prefixed with a file name. See
+L<perldebug/"b [file]:[line] [condition]">.
+
+=head2 The C<CORE> Namespace
+
+=head3 The C<CORE::> prefix
+
+The C<CORE::> prefix can now be used on keywords enabled by
+L<feature.pm|feature>, even outside the scope of C<use feature>.
+
+=head3 Subroutines in the C<CORE> namespace
+
+Many Perl keywords are now available as subroutines in the CORE namespace.
+This lets them be aliased:
+
+ BEGIN { *entangle = \&CORE::tie }
+ entangle $variable, $package, @args;
+
+And for prototypes to be bypassed:
+
+ sub mytie(\[%$*@]$@) {
+ my ($ref, $pack, @args) = @_;
+ ... do something ...
+ goto &CORE::tie;
+ }
+
+Some of these cannot be called through references or via C<&foo> syntax,
+but must be called as barewords.
+
+See L<CORE> for details.
+
+=head2 Other Changes
+
+=head3 Anonymous handles
+
+Automatically generated file handles are now named __ANONIO__ when the
+variable name cannot be determined, rather than $__ANONIO__.
+
+=head3 Autoloaded sort Subroutines
+
+Custom sort subroutines can now be autoloaded [perl #30661]:
+
+ sub AUTOLOAD { ... }
+ @sorted = sort foo @list; # uses AUTOLOAD
+
+=head3 C<continue> no longer requires the "switch" feature
+
+The C<continue> keyword has two meanings. It can introduce a C<continue>
+block after a loop, or it can exit the current C<when> block. Up to now,
+the latter meaning was valid only with the "switch" feature enabled, and
+was a syntax error otherwise. Since the main purpose of feature.pm is to
+avoid conflicts with user-defined subroutines, there is no reason for
+C<continue> to depend on it.
+
+=head3 DTrace probes for interpreter phase change
+
+The C<phase-change> probes will fire when the interpreter's phase
+changes, which tracks the C<${^GLOBAL_PHASE}> variable. C<arg0> is
+the new phase name; C<arg1> is the old one. This is useful
+for limiting your instrumentation to one or more of: compile time,
+run time, or destruct time.
+
+=head3 C<__FILE__()> Syntax
+
+The C<__FILE__>, C<__LINE__> and C<__PACKAGE__> tokens can now be written
+with an empty pair of parentheses after them. This makes them parse the
+same way as C<time>, C<fork> and other built-in functions.
+
+=head3 The C<\$> prototype accepts any scalar lvalue
+
+The C<\$> and C<\[$]> subroutine prototypes now accept any scalar lvalue
+argument. Previously they accepted only scalars beginning with C<$> and
+hash and array elements. This change makes them consistent with the way
+the built-in C<read> and C<recv> functions (among others) parse their
+arguments. This means that one can override the built-in functions with
+custom subroutines that parse their arguments the same way.
+
+=head3 C<_> in subroutine prototypes
+
+The C<_> character in subroutine prototypes is now allowed before C<@> or
+C<%>.
+
+=head1 Security
+
+=head2 Use C<is_utf8_char_buf()> and not C<is_utf8_char()>
+
+The latter function is now deprecated because its API is insufficient to
+guarantee that it doesn't read (up to 12 bytes in the worst case) beyond
+the end of its input string. See
+L<is_utf8_char_buf()|/Added is_utf8_char_buf()>.
+
+=head2 Malformed UTF-8 input could cause attempts to read beyond the end of the buffer
+
+Two new XS-accessible functions, C<utf8_to_uvchr_buf()> and
+C<utf8_to_uvuni_buf()> are now available to prevent this, and the Perl
+core has been converted to use them.
+See L</Internal Changes>.
+
+=head2 C<File::Glob::bsd_glob()> memory error with GLOB_ALTDIRFUNC (CVE-2011-2728).
+
+Calling C<File::Glob::bsd_glob> with the unsupported flag
+GLOB_ALTDIRFUNC would cause an access violation / segfault. A Perl
+program that accepts a flags value from an external source could expose
+itself to denial of service or arbitrary code execution attacks. There
+are no known exploits in the wild. The problem has been corrected by
+explicitly disabling all unsupported flags and setting unused function
+pointers to null. Bug reported by Clément Lecigne. (5.14.2)
+
+=head2 Privileges are now set correctly when assigning to C<$(>
+
+A hypothetical bug (probably unexploitable in practice) because the
+incorrect setting of the effective group ID while setting C<$(> has been
+fixed. The bug would have affected only systems that have C<setresgid()>
+but not C<setregid()>, but no such systems are known to exist.
+
+=head1 Deprecations
+
+=head2 Don't read the Unicode data base files in F<lib/unicore>
+
+It is now deprecated to directly read the Unicode data base files.
+These are stored in the F<lib/unicore> directory. Instead, you should
+use the new functions in L<Unicode::UCD>. These provide a stable API,
+and give complete information.
+
+Perl may at some point in the future change or remove these files. The
+file which applications were most likely to have used is
+F<lib/unicore/ToDigit.pl>. L<Unicode::UCD/prop_invmap()> can be used to
+get at its data instead.
+
+=head2 XS functions C<is_utf8_char()>, C<utf8_to_uvchr()> and
+C<utf8_to_uvuni()>
+
+This function is deprecated because it could read beyond the end of the
+input string. Use the new L<is_utf8_char_buf()|/Added is_utf8_char_buf()>,
+C<utf8_to_uvchr_buf()> and C<utf8_to_uvuni_buf()> instead.
+
+=head1 Future Deprecations
+
+This section serves as a notice of features that are I<likely> to be
+removed or L<deprecated|perlpolicy/deprecated> in the next release of
+perl (5.18.0). If your code depends on these features, you should
+contact the Perl 5 Porters via the L<mailing
+list|http://lists.perl.org/list/perl5-porters.html> or L<perlbug> to
+explain your use case and inform the deprecation process.
+
+=head2 Core Modules
+
+These modules may be marked as deprecated I<from the core>. This only
+means that they will no longer be installed by default with the core
+distribution, but will remain available on the CPAN.
+
+=over
+
+=item *
+
+CPANPLUS
+
+=item *
+
+Filter::Simple
+
+=item *
+
+PerlIO::mmap
+
+=item *
+
+Pod::LaTeX
+
+=item *
+
+Pod::Parser
+
+=item *
+
+SelfLoader
+
+=item *
+
+Text::Soundex
+
+=item *
+
+Thread.pm
+
+=back
+
+=head2 Platforms with no supporting programmers:
+
+These platforms will probably have their
+special build support removed during the
+5.17.0 development series.
+
+=over
+
+=item *
+
+BeOS
+
+=item *
+
+djgpp
+
+=item *
+
+dgux
+
+=item *
+
+EPOC
+
+=item *
+
+MPE/iX
+
+=item *
+
+Rhapsody
+
+=item *
+
+UTS
+
+=item *
+
+VM/ESA
+
+=back
+
+=head2 Other Future Deprecations
+
+=over
+
+=item *
+
+Swapping of $< and $>
+
+For more information about this future deprecation, see L<the relevant RT
+ticket|https://rt.perl.org/rt3/Ticket/Display.html?id=96212>.
+
+=item *
+
+sfio, stdio
+
+Perl supports being built without PerlIO proper, using a stdio or sfio
+wrapper instead. A perl build like this will not support IO layers and
+thus Unicode IO, making it rather handicapped.
+
+PerlIO supports a C<stdio> layer if stdio use is desired, and similarly a
+sfio layer could be produced.
+
+=item *
+
+Unescaped literal C<< "{" >> in regular expressions.
+
+Starting with v5.20, it is planned to require a literal C<"{"> to be
+escaped, for example by preceding it with a backslash. In v5.18, a
+deprecated warning message will be emitted for all such uses.
+This affects only patterns that are to match a literal C<"{">. Other
+uses of this character, such as part of a quantifier or sequence as in
+those below, are completely unaffected:
+
+ /foo{3,5}/
+ /\p{Alphabetic}/
+ /\N{DIGIT ZERO}
+
+Removing this will permit extensions to Perl's pattern syntax and better
+error checking for existing syntax. See L<perlre/Quantifiers> for an
+example.
+
+=item *
+
+Revamping C<< "\Q" >> semantics in double-quotish strings when combined with other escapes.
+
+There are several bugs and inconsistencies involving combinations
+of C<\Q> and escapes like C<\x>, C<\L>, etc., within a C<\Q...\E> pair.
+These need to be fixed, and doing so will necessarily change current
+behavior. The changes have not yet been settled.
+
+=back
+
+=head1 Incompatible Changes
+
+=head2 Special blocks called in void context
+
+Special blocks (C<BEGIN>, C<CHECK>, C<INIT>, C<UNITCHECK>, C<END>) are now
+called in void context. This avoids wasteful copying of the result of the
+last statement [perl #108794].
+
+=head2 The C<overloading> pragma and regexp objects
+
+With C<no overloading>, regular expression objects returned by C<qr//> are
+now stringified as "Regexp=REGEXP(0xbe600d)" instead of the regular
+expression itself [perl #108780].
+
+=head2 Two XS typemap Entries removed
+
+Two presumably unused XS typemap entries have been removed from the
+core typemap: T_DATAUNIT and T_CALLBACK. If you are, against all odds,
+a user of these, please see the instructions on how to restore them
+in L<perlxstypemap>.
+
+=head2 Unicode 6.1 has incompatibilities with Unicode 6.0
+
+These are detailed in L</Supports (almost) Unicode 6.1> above.
+You can compile this version of Perl to use Unicode 6.0. See
+L<perlunicode/Hacking Perl to work on earlier Unicode versions (for very serious hackers only)>.
+
+=head2 Borland compiler
+
+All support for the Borland compiler has been dropped. The code had not
+worked for a long time anyway.
+
+=head2 Certain deprecated Unicode properties are no longer supported by default
+
+Perl should never have exposed certain Unicode properties that are used
+by Unicode internally and not meant to be publicly available. Use of
+these has generated deprecated warning messages since Perl 5.12. The
+removed 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.
+
+Perl may be recompiled to include any or all of them; instructions are
+given in
+L<perluniprops/Unicode character properties that are NOT accepted by Perl>.
+
+=head2 Dereferencing IO thingies as typeglobs
+
+The C<*{...}> operator, when passed a reference to an IO thingy (as in
+C<*{*STDIN{IO}}>), creates a new typeglob containing just that IO object.
+Previously, it would stringify as an empty string, but some operators would
+treat it as undefined, producing an "uninitialized" warning.
+Now it stringifies as __ANONIO__ [perl #96326].
+
+=head2 User-defined case-changing operations
+
+This feature was deprecated in Perl 5.14, and has now been removed.
+The CPAN module L<Unicode::Casing> provides better functionality without
+the drawbacks that this feature had, as are detailed in the 5.14
+documentation:
+L<http://perldoc.perl.org/5.14.0/perlunicode.html#User-Defined-Case-Mappings-%28for-serious-hackers-only%29>
+
+=head2 XSUBs are now 'static'
+
+XSUB C functions are now 'static', that is, they are not visible from
+outside the compilation unit. Users can use the new C<XS_EXTERNAL(name)>
+and C<XS_INTERNAL(name)> macros to pick the desired linking behavior.
+The ordinary C<XS(name)> declaration for XSUBs will continue to declare
+non-'static' XSUBs for compatibility, but the XS compiler,
+L<ExtUtils::ParseXS> (C<xsubpp>) will emit 'static' XSUBs by default.
+L<ExtUtils::ParseXS>'s behavior can be reconfigured from XS using the
+C<EXPORT_XSUB_SYMBOLS> keyword. See L<perlxs> for details.
+
+=head2 Weakening read-only references
+
+Weakening read-only references is no longer permitted. It should never
+have worked anyway, and could sometimes result in crashes.
+
+=head2 Tying scalars that hold typeglobs
+
+Attempting to tie a scalar after a typeglob was assigned to it would
+instead tie the handle in the typeglob's IO slot. This meant that it was
+impossible to tie the scalar itself. Similar problems affected C<tied> and
+C<untie>: C<tied $scalar> would return false on a tied scalar if the last
+thing returned was a typeglob, and C<untie $scalar> on such a tied scalar
+would do nothing.
+
+We fixed this problem before Perl 5.14.0, but it caused problems with some
+CPAN modules, so we put in a deprecation cycle instead.
+
+Now the deprecation has been removed and this bug has been fixed. So
+C<tie $scalar> will always tie the scalar, not the handle it holds. To tie
+the handle, use C<tie *$scalar> (with an explicit asterisk). The same
+applies to C<tied *$scalar> and C<untie *$scalar>.
+
+=head2 IPC::Open3 no longer provides C<xfork()>, C<xclose_on_exec()>
+and C<xpipe_anon()>
+
+All three functions were private, undocumented, and unexported. They do
+not appear to be used by any code on CPAN. Two have been inlined and one
+deleted entirely.
+
+=head2 C<$$> no longer caches PID
+
+Previously, if one called fork(3) from C, Perl's
+notion of C<$$> could go out of sync with what getpid() returns. By always
+fetching the value of C<$$> via getpid(), this potential bug is eliminated.
+Code that depends on the caching behavior will break. As described in
+L<Core Enhancements|/C<$$> can be assigned to>,
+C<$$> is now writable, but it will be reset during a
+fork.
+
+=head2 C<$$> and C<getppid()> no longer emulate POSIX semantics under LinuxThreads
+
+The POSIX emulation of C<$$> and C<getppid()> under the obsolete
+LinuxThreads implementation has been removed.
+This only impacts users of Linux 2.4 and
+users of Debian GNU/kFreeBSD up to and including 6.0, not the vast
+majority of Linux installations that use NPTL threads.
+
+This means that C<getppid()>, like C<$$>, is now always guaranteed to
+return the OS's idea of the current state of the process, not perl's
+cached version of it.
+
+See the documentation for L<$$|perlvar/$$> for details.
+
+=head2 C<< $< >>, C<< $> >>, C<$(> and C<$)> are no longer cached
+
+Similarly to the changes to C<$$> and C<getppid()>, the internal
+caching of C<< $< >>, C<< $> >>, C<$(> and C<$)> has been removed.
+
+When we cached these values our idea of what they were would drift out
+of sync with reality if someone (e.g., someone embedding perl) called
+C<sete?[ug]id()> without updating C<PL_e?[ug]id>. Having to deal with
+this complexity wasn't worth it given how cheap the C<gete?[ug]id()>
+system call is.
+
+This change will break a handful of CPAN modules that use the XS-level
+C<PL_uid>, C<PL_gid>, C<PL_euid> or C<PL_egid> variables.
+
+The fix for those breakages is to use C<PerlProc_gete?[ug]id()> to
+retrieve them (e.g., C<PerlProc_getuid()>), and not to assign to
+C<PL_e?[ug]id> if you change the UID/GID/EUID/EGID. There is no longer
+any need to do so since perl will always retrieve the up-to-date
+version of those values from the OS.
+
+=head2 Which Non-ASCII characters get quoted by C<quotemeta> and C<\Q> has changed
+
+This is unlikely to result in a real problem, as Perl does not attach
+special meaning to any non-ASCII character, so it is currently
+irrelevant which are quoted or not. This change fixes bug [perl #77654] and
+brings Perl's behavior more into line with Unicode's recommendations.
+See L<perlfunc/quotemeta>.
+
+=head1 Performance Enhancements
+
+=over
+
+=item *
+
+Improved performance for Unicode properties in regular expressions
+
+=for comment Can this be compacted some? -- rjbs, 2012-02-20
+
+Matching a code point against a Unicode property is now done via a
+binary search instead of linear. This means for example that the worst
+case for a 1000 item property is 10 probes instead of 1000. This
+inefficiency has been compensated for in the past by permanently storing
+in a hash the results of a given probe plus the results for the adjacent
+64 code points, under the theory that near-by code points are likely to
+be searched for. A separate hash was used for each mention of a Unicode
+property in each regular expression. Thus, C<qr/\p{foo}abc\p{foo}/>
+would generate two hashes. Any probes in one instance would be unknown
+to the other, and the hashes could expand separately to be quite large
+if the regular expression were used on many different widely-separated
+code points.
+Now, however, there is just one hash shared by all instances of a given
+property. This means that if C<\p{foo}> is matched against "A" in one
+regular expression in a thread, the result will be known immediately to
+all regular expressions, and the relentless march of using up memory is
+slowed considerably.
+
+=item *
+
+Version declarations with the C<use> keyword (e.g., C<use 5.012>) are now
+faster, as they enable features without loading F<feature.pm>.
+
+=item *
+
+C<local $_> is faster now, as it no longer iterates through magic that it
+is not going to copy anyway.
+
+=item *
+
+Perl 5.12.0 sped up the destruction of objects whose classes define
+empty C<DESTROY> methods (to prevent autoloading), by simply not
+calling such empty methods. This release takes this optimization a
+step further, by not calling any C<DESTROY> method that begins with a
+C<return> statement. This can be useful for destructors that are only
+used for debugging:
+
+ use constant DEBUG => 1;
+ sub DESTROY { return unless DEBUG; ... }
+
+Constant-folding will reduce the first statement to C<return;> if DEBUG
+is set to 0, triggering this optimization.
+
+=item *
+
+Assigning to a variable that holds a typeglob or copy-on-write scalar
+is now much faster. Previously the typeglob would be stringified or
+the copy-on-write scalar would be copied before being clobbered.
+
+=item *
+
+Assignment to C<substr> in void context is now more than twice its
+previous speed. Instead of creating and returning a special lvalue
+scalar that is then assigned to, C<substr> modifies the original string
+itself.
+
+=item *
+
+C<substr> no longer calculates a value to return when called in void
+context.
+
+=item *
+
+Due to changes in L<File::Glob>, Perl's C<glob> function and its C<<
+<...> >> equivalent are now much faster. The splitting of the pattern
+into words has been rewritten in C, resulting in speed-ups of 20% for
+some cases.
+
+This does not affect C<glob> on VMS, as it does not use File::Glob.
+
+=item *
+
+The short-circuiting operators C<&&>, C<||>, and C<//>, when chained
+(such as C<$a || $b || $c>), are now considerably faster to short-circuit,
+due to reduced optree traversal.
+
+=item *
+
+The implementation of C<s///r> makes one fewer copy of the scalar's value.
+
+=item *
+
+Recursive calls to lvalue subroutines in lvalue scalar context use less
+memory.
+
+=back
+
+=head1 Modules and Pragmata
+
+=head2 Deprecated Modules
+
+=over
+
+=item L<Version::Requirements>
+
+Version::Requirements is now DEPRECATED, use L<CPAN::Meta::Requirements>,
+which is a drop-in replacement. It will be deleted from perl.git blead
+in v5.17.0.
+
+=back
+
+=head2 New Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<arybase> -- this new module implements the C<$[> variable.
+
+=item *
+
+L<PerlIO::mmap> 0.010 has been added to the Perl core.
+
+The C<mmap> PerlIO layer is no longer implemented by perl itself, but has
+been moved out into the new L<PerlIO::mmap> module.
+
+=back
+
+=head2 Updated Modules and Pragmata
+
+This is only an overview of selected module updates. For a complete list of
+updates, run:
+
+ $ corelist --diff 5.14.0 5.16.0
+
+You can substitute your favorite version in place of 5.14.0, too.
+
+=over 4
+
+=item *
+
+L<Archive::Extract> has been upgraded from version 0.48 to 0.58.
+
+Includes a fix for FreeBSD to only use C<unzip> if it is located in
+C</usr/local/bin>, as FreeBSD 9.0 will ship with a limited C<unzip> in
+C</usr/bin>.
+
+=item *
+
+L<Archive::Tar> has been upgraded from version 1.76 to 1.82.
+
+Adjustments to handle files >8gb (>0777777777777 octal) and a feature
+to return the MD5SUM of files in the archive.
+
+=item *
+
+L<base> has been upgraded from version 2.16 to 2.18.
+
+C<base> no longer sets a module's C<$VERSION> to "-1" when a module it
+loads does not define a C<$VERSION>. This change has been made because
+"-1" is not a valid version number under the new "lax" criteria used
+internally by C<UNIVERSAL::VERSION>. (See L<version> for more on "lax"
+version criteria.)
+
+C<base> no longer internally skips loading modules it has already loaded
+and instead relies on C<require> to inspect C<%INC>. This fixes a bug
+when C<base> is used with code that clear C<%INC> to force a module to
+be reloaded.
+
+=item *
+
+L<Carp> has been upgraded from version 1.20 to 1.26.
+
+It now includes last read filehandle info and puts a dot after the file
+and line number, just like errors from C<die> [perl #106538].
+
+=item *
+
+L<charnames> has been updated from version 1.18 to 1.30.
+
+C<charnames> can now be invoked with a new option, C<:loose>,
+which is like the existing C<:full> option, but enables Unicode loose
+name matching. Details are in L<charnames/LOOSE MATCHES>.
+
+=item *
+
+L<B::Deparse> has been upgraded from version 1.03 to 1.14. This fixes
+numerous deparsing bugs.
+
+=item *
+
+L<CGI> has been upgraded from version 3.52 to 3.59.
+
+It uses the public and documented FCGI.pm API in CGI::Fast. CGI::Fast was
+using an FCGI API that was deprecated and removed from documentation
+more than ten years ago. Usage of this deprecated API with FCGI E<gt>=
+0.70 or FCGI E<lt>= 0.73 introduces a security issue.
+L<https://rt.cpan.org/Public/Bug/Display.html?id=68380>
+L<http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-2766>
+
+Things that may break your code:
+
+C<url()> was fixed to return C<PATH_INFO> when it is explicitly requested
+with either the C<path=E<gt>1> or C<path_info=E<gt>1> flag.
+
+If your code is running under mod_rewrite (or compatible) and you are
+calling C<self_url()> or you are calling C<url()> and passing
+C<path_info=E<gt>1>, these methods will actually be returning
+C<PATH_INFO> now, as you have explicitly requested or C<self_url()>
+has requested on your behalf.
+
+The C<PATH_INFO> has been omitted in such URLs since the issue was
+introduced in the 3.12 release in December, 2005.
+
+This bug is so old your application may have come to depend on it or
+workaround it. Check for application before upgrading to this release.
+
+Examples of affected method calls:
+
+ $q->url(-absolute => 1, -query => 1, -path_info => 1);
+ $q->url(-path=>1);
+ $q->url(-full=>1,-path=>1);
+ $q->url(-rewrite=>1,-path=>1);
+ $q->self_url();
+
+We no longer read from STDIN when the Content-Length is not set,
+preventing requests with no Content-Length from sometimes freezing.
+This is consistent with the CGI RFC 3875, and is also consistent with
+CGI::Simple. However, the old behavior may have been expected by some
+command-line uses of CGI.pm.
+
+In addition, the DELETE HTTP verb is now supported.
+
+=item *
+
+L<Compress::Zlib> has been upgraded from version 2.035 to 2.048.
+
+IO::Compress::Zip and IO::Uncompress::Unzip now have support for LZMA
+(method 14). There is a fix for a CRC issue in IO::Compress::Unzip and
+it supports Streamed Stored context now. And fixed a Zip64 issue in
+IO::Compress::Zip when the content size was exactly 0xFFFFFFFF.
+
+=item *
+
+L<Digest::SHA> has been upgraded from version 5.61 to 5.71.
+
+Added BITS mode to the addfile method and shasum. This makes
+partial-byte inputs possible via files/STDIN and lets shasum check
+all 8074 NIST Msg vectors, where previously special programming was
+required to do this.
+
+=item *
+
+L<Encode> has been upgraded from version 2.42 to 2.44.
+
+Missing aliases added, a deep recursion error fixed and various
+documentation updates.
+
+Addressed 'decode_xs n-byte heap-overflow' security bug in Unicode.xs
+(CVE-2011-2939). (5.14.2)
+
+=item *
+
+L<ExtUtils::CBuilder> updated from version 0.280203 to 0.280206.
+
+The new version appends CFLAGS and LDFLAGS to their Config.pm
+counterparts.
+
+=item *
+
+L<ExtUtils::ParseXS> has been upgraded from version 2.2210 to 3.16.
+
+Much of L<ExtUtils::ParseXS>, the module behind the XS compiler C<xsubpp>,
+was rewritten and cleaned up. It has been made somewhat more extensible
+and now finally uses strictures.
+
+The typemap logic has been moved into a separate module,
+L<ExtUtils::Typemaps>. See L</New Modules and Pragmata>, above.
+
+For a complete set of changes, please see the ExtUtils::ParseXS
+changelog, available on the CPAN.
+
+=item *
+
+L<File::Glob> has been upgraded from version 1.12 to 1.17.
+
+On Windows, tilde (~) expansion now checks the C<USERPROFILE> environment
+variable, after checking C<HOME>.
+
+It has a new C<:bsd_glob> export tag, intended to replace C<:glob>. Like
+C<:glob> it overrides C<glob> with a function that does not split the glob
+pattern into words, but, unlike C<:glob>, it iterates properly in scalar
+context, instead of returning the last file.
+
+There are other changes affecting Perl's own C<glob> operator (which uses
+File::Glob internally, except on VMS). See L</Performance Enhancements>
+and L</Selected Bug Fixes>.
+
+=item *
+
+L<FindBin> updated from version 1.50 to 1.51.
+
+It no longer returns a wrong result if a script of the same name as the
+current one exists in the path and is executable.
+
+=item *
+
+L<HTTP::Tiny> has been upgraded from version 0.012 to 0.017.
+
+Added support for using C<$ENV{http_proxy}> to set the default proxy host.
+
+Adds additional shorthand methods for all common HTTP verbs,
+a C<post_form()> method for POST-ing x-www-form-urlencoded data and
+a C<www_form_urlencode()> utility method.
+
+=item *
+
+L<IO> has been upgraded from version 1.25_04 to 1.25_06, and L<IO::Handle>
+from version 1.31 to 1.33.
+
+Together, these upgrades fix a problem with IO::Handle's C<getline> and
+C<getlines> methods. When these methods are called on the special ARGV
+handle, the next file is automatically opened, as happens with the built-in
+C<E<lt>E<gt>> and C<readline> functions. But, unlike the built-ins, these
+methods were not respecting the caller's use of the L<open> pragma and
+applying the appropriate I/O layers to the newly-opened file
+[rt.cpan.org #66474].
+
+=item *
+
+L<IPC::Cmd> has been upgraded from version 0.70 to 0.76.
+
+Capturing of command output (both C<STDOUT> and C<STDERR>) is now supported
+using L<IPC::Open3> on MSWin32 without requiring L<IPC::Run>.
+
+=item *
+
+L<IPC::Open3> has been upgraded from version 1.09 to 1.12.
+
+Fixes a bug which prevented use of C<open3> on Windows when C<*STDIN>,
+C<*STDOUT> or C<*STDERR> had been localized.
+
+Fixes a bug which prevented duplicating numeric file descriptors on Windows.
+
+C<open3> with "-" for the program name works once more. This was broken in
+version 1.06 (and hence in Perl 5.14.0) [perl #95748].
+
+=item *
+
+L<Locale::Codes> has been upgraded from version 3.16 to 3.21.
+
+Added Language Extension codes (langext) and Language Variation codes (langvar)
+as defined in the IANA language registry.
+
+Added language codes from ISO 639-5
+
+Added language/script codes from the IANA language subtag registry
+
+Fixed an uninitialized value warning [rt.cpan.org #67438].
+
+Fixed the return value for the all_XXX_codes and all_XXX_names functions
+[rt.cpan.org #69100].
+
+Reorganized modules to move Locale::MODULE to Locale::Codes::MODULE to allow
+for cleaner future additions. The original four modules (Locale::Language,
+Locale::Currency, Locale::Country, Locale::Script) will continue to work, but
+all new sets of codes will be added in the Locale::Codes namespace.
+
+The code2XXX, XXX2code, all_XXX_codes, and all_XXX_names functions now
+support retired codes. All codesets may be specified by a constant or
+by their name now. Previously, they were specified only by a constant.
+
+The alias_code function exists for backward compatibility. It has been
+replaced by rename_country_code. The alias_code function will be
+removed some time after September, 2013.
+
+All work is now done in the central module (Locale::Codes). Previously,
+some was still done in the wrapper modules (Locale::Codes::*). Added
+Language Family codes (langfam) as defined in ISO 639-5.
+
+=item *
+
+L<Math::BigFloat> has been upgraded from version 1.993 to 1.997.
+
+The C<numify> method has been corrected to return a normalized Perl number
+(the result of C<0 + $thing>), instead of a string [rt.cpan.org #66732].
+
+=item *
+
+L<Math::BigInt> has been upgraded from version 1.994 to 1.998.
+
+It provides a new C<bsgn> method that complements the C<babs> method.
+
+It fixes the internal C<objectify> function's handling of "foreign objects"
+so they are converted to the appropriate class (Math::BigInt or
+Math::BigFloat).
+
+=item *
+
+L<Math::BigRat> has been upgraded from version 0.2602 to 0.2603.
+
+C<int()> on a Math::BigRat object containing -1/2 now creates a
+Math::BigInt containing 0, rather than -0. L<Math::BigInt> does not even
+support negative zero, so the resulting object was actually malformed
+[perl #95530].
+
+=item *
+
+L<Math::Complex> has been upgraded from version 1.56 to 1.59
+and L<Math::Trig> from version 1.2 to 1.22.
+
+Fixes include: correct copy constructor usage; fix polarwise formatting with
+numeric format specifier; and more stable C<great_circle_direction> algorithm.
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 2.51 to 2.66.
+
+The C<corelist> utility now understands the C<-r> option for displaying
+Perl release dates and the C<--diff> option to print the set of modlib
+changes between two perl distributions.
+
+=item *
+
+L<Module::Metadata> has been upgraded from version 1.000004 to 1.000009.
+
+Adds C<provides> method to generate a CPAN META provides data structure
+correctly; use of C<package_versions_from_directory> is discouraged.
+
+=item *
+
+L<ODBM_File> has been upgraded from version 1.10 to 1.12.
+
+The XS code is now compiled with C<PERL_NO_GET_CONTEXT>, which will aid
+performance under ithreads.
+
+=item *
+
+L<open> has been upgraded from version 1.08 to 1.10.
+
+It no longer turns off layers on standard handles when invoked without the
+":std" directive. Similarly, when invoked I<with> the ":std" directive, it
+now clears layers on STDERR before applying the new ones, and not just on
+STDIN and STDOUT [perl #92728].
+
+=item *
+
+L<overload> has been upgraded from version 1.13 to 1.18.
+
+C<overload::Overloaded> no longer calls C<can> on the class, but uses
+another means to determine whether the object has overloading. It was
+never correct for it to call C<can>, as overloading does not respect
+AUTOLOAD. So classes that autoload methods and implement C<can> no longer
+have to account for overloading [perl #40333].
+
+A warning is now produced for invalid arguments. See L</New Diagnostics>.
+
+=item *
+
+L<PerlIO::scalar> has been upgraded from version 0.11 to 0.14.
+
+(This is the module that implements C<< open $fh, '>', \$scalar >>.)
+
+It fixes a problem with C<< open my $fh, ">", \$scalar >> not working if
+C<$scalar> is a copy-on-write scalar. (5.14.2)
+
+It also fixes a hang that occurs with C<readline> or C<< <$fh> >> if a
+typeglob has been assigned to $scalar [perl #92258].
+
+It no longer assumes during C<seek> that $scalar is a string internally.
+If it didn't crash, it was close to doing so [perl #92706]. Also, the
+internal print routine no longer assumes that the position set by C<seek>
+is valid, but extends the string to that position, filling the intervening
+bytes (between the old length and the seek position) with nulls
+[perl #78980].
+
+Printing to an in-memory handle now works if the $scalar holds a reference,
+stringifying the reference before modifying it. References used to be
+treated as empty strings.
+
+Printing to an in-memory handle no longer crashes if the $scalar happens to
+hold a number internally, but no string buffer.
+
+Printing to an in-memory handle no longer creates scalars that confuse
+the regular expression engine [perl #108398].
+
+=item *
+
+L<Pod::Functions> has been upgraded from version 1.04 to 1.05.
+
+F<Functions.pm> is now generated at perl build time from annotations in
+F<perlfunc.pod>. This will ensure that L<Pod::Functions> and L<perlfunc>
+remain in synchronisation.
+
+=item *
+
+L<Pod::Html> has been upgraded from version 1.11 to 1.1502.
+
+This is an extensive rewrite of Pod::Html to use L<Pod::Simple> under
+the hood. The output has changed significantly.
+
+=item *
+
+L<Pod::Perldoc> has been upgraded from version 3.15_03 to 3.17.
+
+It corrects the search paths on VMS [perl #90640]. (5.14.1)
+
+The B<-v> option now fetches the right section for C<$0>.
+
+This upgrade has numerous significant fixes. Consult its changelog on
+the CPAN for more information.
+
+=item *
+
+L<POSIX> has been upgraded from version 1.24 to 1.30.
+
+L<POSIX> no longer uses L<AutoLoader>. Any code which was relying on this
+implementation detail was buggy, and may fail because of this change.
+The module's Perl code has been considerably simplified, roughly halving
+the number of lines, with no change in functionality. The XS code has
+been refactored to reduce the size of the shared object by about 12%,
+with no change in functionality. More POSIX functions now have tests.
+
+C<sigsuspend> and C<pause> now run signal handlers before returning, as the
+whole point of these two functions is to wait until a signal has
+arrived, and then return I<after> it has been triggered. Delayed, or
+"safe", signals were preventing that from happening, possibly resulting in
+race conditions [perl #107216].
+
+C<POSIX::sleep> is now a direct call into the underlying OS C<sleep>
+function, instead of being a Perl wrapper on C<CORE::sleep>.
+C<POSIX::dup2> now returns the correct value on Win32 (I<i.e.>, the file
+descriptor). C<POSIX::SigSet> C<sigsuspend> and C<sigpending> and
+C<POSIX::pause> now dispatch safe signals immediately before returning to
+their caller.
+
+C<POSIX::Termios::setattr> now defaults the third argument to C<TCSANOW>,
+instead of 0. On most platforms C<TCSANOW> is defined to be 0, but on some
+0 is not a valid parameter, which caused a call with defaults to fail.
+
+=item *
+
+L<Socket> has been upgraded from version 1.94 to 2.001.
+
+It has new functions and constants for handling IPv6 sockets:
+
+ pack_ipv6_mreq
+ unpack_ipv6_mreq
+ IPV6_ADD_MEMBERSHIP
+ IPV6_DROP_MEMBERSHIP
+ IPV6_MTU
+ IPV6_MTU_DISCOVER
+ IPV6_MULTICAST_HOPS
+ IPV6_MULTICAST_IF
+ IPV6_MULTICAST_LOOP
+ IPV6_UNICAST_HOPS
+ IPV6_V6ONLY
+
+=item *
+
+L<Storable> has been upgraded from version 2.27 to 2.34.
+
+It no longer turns copy-on-write scalars into read-only scalars when
+freezing and thawing.
+
+=item *
+
+L<Sys::Syslog> has been upgraded from version 0.27 to 0.29.
+
+This upgrade closes many outstanding bugs.
+
+=item *
+
+L<Term::ANSIColor> has been upgraded from version 3.00 to 3.01.
+
+Only interpret an initial array reference as a list of colors, not any initial
+reference, allowing the colored function to work properly on objects with
+stringification defined.
+
+=item *
+
+L<Term::ReadLine> has been upgraded from version 1.07 to 1.09.
+
+Term::ReadLine now supports any event loop, including unpublished ones and
+simple L<IO::Select>, loops without the need to rewrite existing code for
+any particular framework [perl #108470].
+
+=item *
+
+L<threads::shared> has been upgraded from version 1.37 to 1.40.
+
+Destructors on shared objects used to be ignored sometimes if the objects
+were referenced only by shared data structures. This has been mostly
+fixed, but destructors may still be ignored if the objects still exist at
+global destruction time [perl #98204].
+
+=item *
+
+L<Unicode::Collate> has been upgraded from version 0.73 to 0.89.
+
+Updated to CLDR 1.9.1
+
+Locales updated to CLDR 2.0: mk, mt, nb, nn, ro, ru, sk, sr, sv, uk,
+zh__pinyin, zh__stroke
+
+Newly supported locales: bn, fa, ml, mr, or, pa, sa, si, si__dictionary,
+sr_Latn, sv__reformed, ta, te, th, ur, wae.
+
+Tailored compatibility ideographs as well as unified ideographs for the
+locales: ja, ko, zh__big5han, zh__gb2312han, zh__pinyin, zh__stroke.
+
+Locale/*.pl files are now searched for in @INC.
+
+=item *
+
+L<Unicode::Normalize> has been upgraded from version 1.10 to 1.14.
+
+Fixes for the removal of F<unicore/CompositionExclusions.txt> from core.
+
+=item *
+
+L<Unicode::UCD> has been upgraded from version 0.32 to 0.43.
+
+This adds four new functions: C<prop_aliases()> and
+C<prop_value_aliases()>, which are used to find all Unicode-approved
+synonyms for property names, or to convert from one name to another;
+C<prop_invlist> which returns all code points matching a given
+Unicode binary property; and C<prop_invmap> which returns the complete
+specification of a given Unicode property.
+
+=item *
+
+L<Win32API::File> has been upgraded from version 0.1101 to 0.1200.
+
+Added SetStdHandle and GetStdHandle functions
+
+=back
+
+=head2 Removed Modules and Pragmata
+
+As promised in Perl 5.14.0's release notes, the following modules have
+been removed from the core distribution, and if needed should be installed
+from CPAN instead.
+
+=over
+
+=item *
+
+L<Devel::DProf> has been removed from the Perl core. Prior version was
+20110228.00.
+
+=item *
+
+L<Shell> has been removed from the Perl core. Prior version was 0.72_01.
+
+=item *
+
+Several old perl4-style libraries which have been deprecated with 5.14
+are now removed:
+
+ abbrev.pl assert.pl bigfloat.pl bigint.pl bigrat.pl cacheout.pl
+ complete.pl ctime.pl dotsh.pl exceptions.pl fastcwd.pl flush.pl
+ getcwd.pl getopt.pl getopts.pl hostname.pl importenv.pl
+ lib/find{,depth}.pl look.pl newgetopt.pl open2.pl open3.pl
+ pwd.pl shellwords.pl stat.pl tainted.pl termcap.pl timelocal.pl
+
+They can be found on CPAN as L<Perl4::CoreLibs>.
+
+=back
+
+=head1 Documentation
+
+=head2 New Documentation
+
+=head3 L<perldtrace>
+
+L<perldtrace> describes Perl's DTrace support, listing the provided probes
+and gives examples of their use.
+
+=head3 L<perlexperiment>
+
+This document is intended to provide a list of experimental features in
+Perl. It is still a work in progress.
+
+=head3 L<perlootut>
+
+This a new OO tutorial. It focuses on basic OO concepts, and then recommends
+that readers choose an OO framework from CPAN.
+
+=head3 L<perlxstypemap>
+
+The new manual describes the XS typemapping mechanism in unprecedented
+detail and combines new documentation with information extracted from
+L<perlxs> and the previously unofficial list of all core typemaps.
+
+=head2 Changes to Existing Documentation
+
+=head3 L<perlapi>
+
+=over 4
+
+=item *
+
+The HV API has long accepted negative lengths to show that the key is
+in UTF8. This is now documented.
+
+=item *
+
+The C<boolSV()> macro is now documented.
+
+=back
+
+=head3 L<perlfunc>
+
+=over 4
+
+=item *
+
+C<dbmopen> treats a 0 mode as a special case, that prevents a nonexistent
+file from being created. This has been the case since Perl 5.000, but was
+never documented anywhere. Now the perlfunc entry mentions it
+[perl #90064].
+
+=item *
+
+As an accident of history, C<open $fh, '<:', ...> applies the default
+layers for the platform (C<:raw> on Unix, C<:crlf> on Windows), ignoring
+whatever is declared by L<open.pm|open>. This seems such a useful feature
+it has been documented in L<perlfunc|perlfunc/open> and L<open>.
+
+=item *
+
+The entry for C<split> has been rewritten. It is now far clearer than
+before.
+
+=back
+
+=head3 L<perlguts>
+
+=over 4
+
+=item *
+
+A new section, L<Autoloading with XSUBs|perlguts/Autoloading with XSUBs>,
+has been added, which explains the two APIs for accessing the name of the
+autoloaded sub.
+
+=item *
+
+Some function descriptions in L<perlguts> were confusing, as it was
+not clear whether they referred to the function above or below the
+description. This has been clarified [perl #91790].
+
+=back
+
+=head3 L<perlobj>
+
+=over 4
+
+=item *
+
+This document has been rewritten from scratch, and its coverage of various OO
+concepts has been expanded.
+
+=back
+
+=head3 L<perlop>
+
+=over 4
+
+=item *
+
+Documentation of the smartmatch operator has been reworked and moved from
+perlsyn to perlop where it belongs.
+
+It has also been corrected for the case of C<undef> on the left-hand
+side. The list of different smart match behaviors had an item in the
+wrong place.
+
+=item *
+
+Documentation of the ellipsis statement (C<...>) has been reworked and
+moved from perlop to perlsyn.
+
+=item *
+
+The explanation of bitwise operators has been expanded to explain how they
+work on Unicode strings (5.14.1).
+
+=item *
+
+More examples for C<m//g> have been added (5.14.1).
+
+=item *
+
+The C<<< <<\FOO >>> here-doc syntax has been documented (5.14.1).
+
+=back
+
+=head3 L<perlpragma>
+
+=over 4
+
+=item *
+
+There is now a standard convention for naming keys in the C<%^H>,
+documented under L<Key naming|perlpragma/Key naming>.
+
+=back
+
+=head3 L<perlsec/Laundering and Detecting Tainted Data>
+
+=over 4
+
+=item *
+
+The example function for checking for taintedness contained a subtle
+error. C<$@> needs to be localized to prevent its changing this
+global's value outside the function. The preferred method to check for
+this remains L<Scalar::Util/tainted>.
+
+=back
+
+=head3 L<perllol>
+
+=over
+
+=item *
+
+L<perllol> has been expanded with examples using the new C<push $scalar>
+syntax introduced in Perl 5.14.0 (5.14.1).
+
+=back
+
+=head3 L<perlmod>
+
+=over
+
+=item *
+
+L<perlmod> now states explicitly that some types of explicit symbol table
+manipulation are not supported. This codifies what was effectively already
+the case [perl #78074].
+
+=back
+
+=head3 L<perlpodstyle>
+
+=over 4
+
+=item *
+
+The tips on which formatting codes to use have been corrected and greatly
+expanded.
+
+=item *
+
+There are now a couple of example one-liners for previewing POD files after
+they have been edited.
+
+=back
+
+=head3 L<perlre>
+
+=over
+
+=item *
+
+The C<(*COMMIT)> directive is now listed in the right section
+(L<Verbs without an argument|perlre/Verbs without an argument>).
+
+=back
+
+=head3 L<perlrun>
+
+=over
+
+=item *
+
+L<perlrun> has undergone a significant clean-up. Most notably, the
+B<-0x...> form of the B<-0> flag has been clarified, and the final section
+on environment variables has been corrected and expanded (5.14.1).
+
+=back
+
+=head3 L<perlsub>
+
+=over
+
+=item *
+
+The ($;) prototype syntax, which has existed for rather a long time, is now
+documented in L<perlsub>. It lets a unary function have the same
+precedence as a list operator.
+
+=back
+
+=head3 L<perltie>
+
+=over
+
+=item *
+
+The required syntax for tying handles has been documented.
+
+=back
+
+=head3 L<perlvar>
+
+=over
+
+=item *
+
+The documentation for L<$!|perlvar/$!> has been corrected and clarified.
+It used to state that $! could be C<undef>, which is not the case. It was
+also unclear whether system calls set C's C<errno> or Perl's C<$!>
+[perl #91614].
+
+=item *
+
+Documentation for L<$$|perlvar/$$> has been amended with additional
+cautions regarding changing the process ID.
+
+=back
+
+=head3 Other Changes
+
+=over 4
+
+=item *
+
+L<perlxs> was extended with documentation on inline typemaps.
+
+=item *
+
+L<perlref> has a new L<Circular References|perlref/Circular References>
+section explaining how circularities may not be freed and how to solve that
+with weak references.
+
+=item *
+
+Parts of L<perlapi> were clarified, and Perl equivalents of some C
+functions have been added as an additional mode of exposition.
+
+=item *
+
+A few parts of L<perlre> and L<perlrecharclass> were clarified.
+
+=back
+
+=head2 Removed Documentation
+
+=head3 Old OO Documentation
+
+The old OO tutorials, perltoot, perltooc, and perlboot, have been
+removed. The perlbot (bag of object tricks) document has been removed
+as well.
+
+=head3 Development Deltas
+
+The perldelta files for development releases are no longer packaged with
+perl. These can still be found in the perl source code repository.
+
+=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
+
+=head3 New Errors
+
+=over 4
+
+=item *
+
+L<Cannot set tied @DB::args|perldiag/"Cannot set tied @DB::args">
+
+This error occurs when C<caller> tries to set C<@DB::args> but finds it
+tied. Before this error was added, it used to crash instead.
+
+=item *
+
+L<Cannot tie unreifiable array|perldiag/"Cannot tie unreifiable array">
+
+This error is part of a safety check that the C<tie> operator does before
+tying a special array like C<@_>. You should never see this message.
+
+=item *
+
+L<&CORE::%s cannot be called directly|perldiag/"&CORE::%s cannot be called directly">
+
+This occurs when a subroutine in the C<CORE::> namespace is called
+with C<&foo> syntax or through a reference. Some subroutines
+in this package cannot yet be called that way, but must be
+called as barewords. See L</Subroutines in the C<CORE> namespace>, above.
+
+=item *
+
+L<Source filters apply only to byte streams|perldiag/"Source filters apply only to byte streams">
+
+This new error occurs when you try to activate a source filter (usually by
+loading a source filter module) within a string passed to C<eval> under the
+C<unicode_eval> feature.
+
+=back
+
+=head3 New Warnings
+
+=over 4
+
+=item *
+
+L<defined(@array) is deprecated|perldiag/"defined(@array) is deprecated">
+
+The long-deprecated C<defined(@array)> now also warns for package variables.
+Previously it issued a warning for lexical variables only.
+
+=item *
+
+L<length() used on %s|perldiag/length() used on %s>
+
+This new warning occurs when C<length> is used on an array or hash, instead
+of C<scalar(@array)> or C<scalar(keys %hash)>.
+
+=item *
+
+L<lvalue attribute %s already-defined subroutine|perldiag/"lvalue attribute %s already-defined subroutine">
+
+L<attributes.pm|attributes> now emits this warning when the :lvalue
+attribute is applied to a Perl subroutine that has already been defined, as
+doing so can have unexpected side-effects.
+
+=item *
+
+L<overload arg '%s' is invalid|perldiag/"overload arg '%s' is invalid">
+
+This warning, in the "overload" category, is produced when the overload
+pragma is given an argument it doesn't recognize, presumably a mistyped
+operator.
+
+=item *
+
+L<$[ used in %s (did you mean $] ?)|perldiag/"$[ used in %s (did you mean $] ?)">
+
+This new warning exists to catch the mistaken use of C<$[> in version
+checks. C<$]>, not C<$[>, contains the version number.
+
+=item *
+
+L<Useless assignment to a temporary|perldiag/"Useless assignment to a temporary">
+
+Assigning to a temporary scalar returned
+from an lvalue subroutine now produces this
+warning [perl #31946].
+
+=item *
+
+L<Useless use of \E|perldiag/"Useless use of \E">
+
+C<\E> does nothing unless preceded by C<\Q>, C<\L> or C<\U>.
+
+=back
+
+=head2 Removed Errors
+
+=over
+
+=item *
+
+"sort is now a reserved word"
+
+This error used to occur when C<sort> was called without arguments,
+followed by C<;> or C<)>. (E.g., C<sort;> would die, but C<{sort}> was
+OK.) This error message was added in Perl 3 to catch code like
+C<close(sort)> which would no longer work. More than two decades later,
+this message is no longer appropriate. Now C<sort> without arguments is
+always allowed, and returns an empty list, as it did in those cases
+where it was already allowed [perl #90030].
+
+=back
+
+=head2 Changes to Existing Diagnostics
+
+=over 4
+
+=item *
+
+The "Applying pattern match..." or similar warning produced when an
+array or hash is on the left-hand side of the C<=~> operator now
+mentions the name of the variable.
+
+=item *
+
+The "Attempt to free non-existent shared string" has had the spelling
+of "non-existent" corrected to "nonexistent". It was already listed
+with the correct spelling in L<perldiag>.
+
+=item *
+
+The error messages for using C<default> and C<when> outside a
+topicalizer have been standardized to match the messages for C<continue>
+and loop controls. They now read 'Can't "default" outside a
+topicalizer' and 'Can't "when" outside a topicalizer'. They both used
+to be 'Can't use when() outside a topicalizer' [perl #91514].
+
+=item *
+
+The message, "Code point 0x%X is not Unicode, no properties match it;
+all inverse properties do" has been changed to "Code point 0x%X is not
+Unicode, all \p{} matches fail; all \P{} matches succeed".
+
+=item *
+
+Redefinition warnings for constant subroutines used to be mandatory,
+even occurring under C<no warnings>. Now they respect the L<warnings>
+pragma.
+
+=item *
+
+The "glob failed" warning message is now suppressible via C<no warnings>
+[perl #111656].
+
+=item *
+
+The L<Invalid version format|perldiag/"Invalid version format (%s)">
+error message now says "negative version number" within the parentheses,
+rather than "non-numeric data", for negative numbers.
+
+=item *
+
+The two warnings
+L<Possible attempt to put comments in qw() list|perldiag/"Possible attempt to put comments in qw() list">
+and
+L<Possible attempt to separate words with commas|perldiag/"Possible attempt to separate words with commas">
+are no longer mutually exclusive: the same C<qw> construct may produce
+both.
+
+=item *
+
+The uninitialized warning for C<y///r> when C<$_> is implicit and
+undefined now mentions the variable name, just like the non-/r variation
+of the operator.
+
+=item *
+
+The 'Use of "foo" without parentheses is ambiguous' warning has been
+extended to apply also to user-defined subroutines with a (;$)
+prototype, and not just to built-in functions.
+
+=item *
+
+Warnings that mention the names of lexical (C<my>) variables with
+Unicode characters in them now respect the presence or absence of the
+C<:utf8> layer on the output handle, instead of outputting UTF8
+regardless. Also, the correct names are included in the strings passed
+to C<$SIG{__WARN__}> handlers, rather than the raw UTF8 bytes.
+
+=back
+
+=head1 Utility Changes
+
+=head3 L<h2ph>
+
+=over 4
+
+=item *
+
+L<h2ph> used to generate code of the form
+
+ unless(defined(&FOO)) {
+ sub FOO () {42;}
+ }
+
+But the subroutine is a compile-time declaration, and is hence unaffected
+by the condition. It has now been corrected to emit a string C<eval>
+around the subroutine [perl #99368].
+
+=back
+
+=head3 L<splain>
+
+=over 4
+
+=item *
+
+F<splain> no longer emits backtraces with the first line number repeated.
+
+This:
+
+ Uncaught exception from user code:
+ Cannot fwiddle the fwuddle at -e line 1.
+ at -e line 1
+ main::baz() called at -e line 1
+ main::bar() called at -e line 1
+ main::foo() called at -e line 1
+
+has become this:
+
+ Uncaught exception from user code:
+ Cannot fwiddle the fwuddle at -e line 1.
+ main::baz() called at -e line 1
+ main::bar() called at -e line 1
+ main::foo() called at -e line 1
+
+=item *
+
+Some error messages consist of multiple lines that are listed as separate
+entries in L<perldiag>. splain has been taught to find the separate
+entries in these cases, instead of simply failing to find the message.
+
+=back
+
+=head3 L<zipdetails>
+
+=over 4
+
+=item *
+
+This is a new utility, included as part of an
+L<IO::Compress::Base> upgrade.
+
+L<zipdetails> displays information about the internal record structure
+of the zip file. It is not concerned with displaying any details of
+the compressed data stored in the zip file.
+
+=back
+
+=head1 Configuration and Compilation
+
+=over 4
+
+=item *
+
+F<regexp.h> has been modified for compatibility with GCC's B<-Werror>
+option, as used by some projects that include perl's header files (5.14.1).
+
+=item *
+
+C<USE_LOCALE{,_COLLATE,_CTYPE,_NUMERIC}> have been added the output of perl -V
+as they have affect the behavior of the interpreter binary (albeit
+in only a small area).
+
+=item *
+
+The code and tests for L<IPC::Open2> have been moved from F<ext/IPC-Open2>
+into F<ext/IPC-Open3>, as C<IPC::Open2::open2()> is implemented as a thin
+wrapper around C<IPC::Open3::_open3()>, and hence is very tightly coupled to
+it.
+
+=item *
+
+The magic types and magic vtables are now generated from data in a new script
+F<regen/mg_vtable.pl>, instead of being maintained by hand. As different
+EBCDIC variants can't agree on the code point for '~', the character to code
+point conversion is done at build time by F<generate_uudmap> to a new generated
+header F<mg_data.h>. C<PL_vtbl_bm> and C<PL_vtbl_fm> are now defined by the
+pre-processor as C<PL_vtbl_regexp>, instead of being distinct C variables.
+C<PL_vtbl_sig> has been removed.
+
+=item *
+
+Building with C<-DPERL_GLOBAL_STRUCT> works again. This configuration is not
+generally used.
+
+=item *
+
+Perl configured with I<MAD> now correctly frees C<MADPROP> structures when
+OPs are freed. C<MADPROP>s are now allocated with C<PerlMemShared_malloc()>
+
+=item *
+
+F<makedef.pl> has been refactored. This should have no noticeable affect on
+any of the platforms that use it as part of their build (AIX, VMS, Win32).
+
+=item *
+
+C<useperlio> can no longer be disabled.
+
+=item *
+
+The file F<global.sym> is no longer needed, and has been removed. It
+contained a list of all exported functions, one of the files generated by
+F<regen/embed.pl> from data in F<embed.fnc> and F<regen/opcodes>. The code
+has been refactored so that the only user of F<global.sym>, F<makedef.pl>,
+now reads F<embed.fnc> and F<regen/opcodes> directly, removing the need to
+store the list of exported functions in an intermediate file.
+
+As F<global.sym> was never installed, this change should not be visible
+outside the build process.
+
+=item *
+
+F<pod/buildtoc>, used by the build process to build L<perltoc>, has been
+refactored and simplified. It now contains only code to build L<perltoc>;
+the code to regenerate Makefiles has been moved to F<Porting/pod_rules.pl>.
+It's a bug if this change has any material effect on the build process.
+
+=item *
+
+F<pod/roffitall> is now built by F<pod/buildtoc>, instead of being
+shipped with the distribution. Its list of manpages is now generated
+(and therefore current). See also RT #103202 for an unresolved related
+issue.
+
+=item *
+
+The man page for C<XS::Typemap> is no longer installed. C<XS::Typemap>
+is a test module which is not installed, hence installing its
+documentation makes no sense.
+
+=item *
+
+The -Dusesitecustomize and -Duserelocatableinc options now work
+together properly.
+
+=back
+
+=head1 Platform Support
+
+=head2 Platform-Specific Notes
+
+=head3 Cygwin
+
+=over 4
+
+=item *
+
+Since version 1.7, Cygwin supports native UTF-8 paths. If Perl is built
+under that environment, directory and filenames will be UTF-8 encoded.
+
+=item *
+
+Cygwin does not initialize all original Win32 environment variables. See
+F<README.cygwin> for a discussion of the newly-added
+C<Cygwin::sync_winenv()> function [perl #110190] and for
+further links.
+
+=back
+
+=head3 HP-UX
+
+=over 4
+
+=item *
+
+HP-UX PA-RISC/64 now supports gcc-4.x
+
+A fix to correct the socketsize now makes the test suite pass on HP-UX
+PA-RISC for 64bitall builds. (5.14.2)
+
+=back
+
+=head3 VMS
+
+=over 4
+
+=item *
+
+Remove unnecessary includes, fix miscellaneous compiler warnings and
+close some unclosed comments on F<vms/vms.c>.
+
+=item *
+
+Remove sockadapt layer from the VMS build.
+
+=item *
+
+Explicit support for VMS versions before v7.0 and DEC C versions
+before v6.0 has been removed.
+
+=item *
+
+Since Perl 5.10.1, the home-grown C<stat> wrapper has been unable to
+distinguish between a directory name containing an underscore and an
+otherwise-identical filename containing a dot in the same position
+(e.g., t/test_pl as a directory and t/test.pl as a file). This problem
+has been corrected.
+
+=item *
+
+The build on VMS now permits names of the resulting symbols in C code for
+Perl longer than 31 characters. Symbols like
+C<Perl__it_was_the_best_of_times_it_was_the_worst_of_times> can now be
+created freely without causing the VMS linker to seize up.
+
+=back
+
+=head3 GNU/Hurd
+
+=over 4
+
+=item *
+
+Numerous build and test failures on GNU/Hurd have been resolved with hints
+for building DBM modules, detection of the library search path, and enabling
+of large file support.
+
+=back
+
+=head3 OpenVOS
+
+=over 4
+
+=item *
+
+Perl is now built with dynamic linking on OpenVOS, the minimum supported
+version of which is now Release 17.1.0.
+
+=back
+
+=head3 SunOS
+
+The CC workshop C++ compiler is now detected and used on systems that ship
+without cc.
+
+=head1 Internal Changes
+
+=over 4
+
+=item *
+
+The compiled representation of formats is now stored via the C<mg_ptr> of
+their C<PERL_MAGIC_fm>. Previously it was stored in the string buffer,
+beyond C<SvLEN()>, the regular end of the string. C<SvCOMPILED()> and
+C<SvCOMPILED_{on,off}()> now exist solely for compatibility for XS code.
+The first is always 0, the other two now no-ops. (5.14.1)
+
+=item *
+
+Some global variables have been marked C<const>, members in the interpreter
+structure have been re-ordered, and the opcodes have been re-ordered. The
+op C<OP_AELEMFAST> has been split into C<OP_AELEMFAST> and C<OP_AELEMFAST_LEX>.
+
+=item *
+
+When empting a hash of its elements (e.g., via undef(%h), or %h=()), HvARRAY
+field is no longer temporarily zeroed. Any destructors called on the freed
+elements see the remaining elements. Thus, %h=() becomes more like
+C<delete $h{$_} for keys %h>.
+
+=item *
+
+Boyer-Moore compiled scalars are now PVMGs, and the Boyer-Moore tables are now
+stored via the mg_ptr of their C<PERL_MAGIC_bm>.
+Previously they were PVGVs, with the tables stored in
+the string buffer, beyond C<SvLEN()>. This eliminates
+the last place where the core stores data beyond C<SvLEN()>.
+
+=item *
+
+Simplified logic in C<Perl_sv_magic()> introduces a small change of
+behavior for error cases involving unknown magic types. Previously, if
+C<Perl_sv_magic()> was passed a magic type unknown to it, it would
+
+=over
+
+=item 1.
+
+Croak "Modification of a read-only value attempted" if read only
+
+=item 2.
+
+Return without error if the SV happened to already have this magic
+
+=item 3.
+
+otherwise croak "Don't know how to handle magic of type \\%o"
+
+=back
+
+Now it will always croak "Don't know how to handle magic of type \\%o", even
+on read-only values, or SVs which already have the unknown magic type.
+
+=item *
+
+The experimental C<fetch_cop_label> function has been renamed to
+C<cop_fetch_label>.
+
+=item *
+
+The C<cop_store_label> function has been added to the API, but is
+experimental.
+
+=item *
+
+F<embedvar.h> has been simplified, and one level of macro indirection for
+PL_* variables has been removed for the default (non-multiplicity)
+configuration. PERLVAR*() macros now directly expand their arguments to
+tokens such as C<PL_defgv>, instead of expanding to C<PL_Idefgv>, with
+F<embedvar.h> defining a macro to map C<PL_Idefgv> to C<PL_defgv>. XS code
+which has unwarranted chumminess with the implementation may need updating.
+
+=item *
+
+An API has been added to explicitly choose whether to export XSUB
+symbols. More detail can be found in the comments for commit e64345f8.
+
+=item *
+
+The C<is_gv_magical_sv> function has been eliminated and merged with
+C<gv_fetchpvn_flags>. It used to be called to determine whether a GV
+should be autovivified in rvalue context. Now it has been replaced with a
+new C<GV_ADDMG> flag (not part of the API).
+
+=item *
+
+The returned code point from the function C<utf8n_to_uvuni()>
+when the input is malformed UTF-8, malformations are allowed, and
+C<utf8> warnings are off is now the Unicode REPLACEMENT CHARACTER
+whenever the malformation is such that no well-defined code point can be
+computed. Previously the returned value was essentially garbage. The
+only malformations that have well-defined values are a zero-length
+string (0 is the return), and overlong UTF-8 sequences.
+
+=item *
+
+Padlists are now marked C<AvREAL>; i.e., reference-counted. They have
+always been reference-counted, but were not marked real, because F<pad.c>
+did its own clean-up, instead of using the usual clean-up code in F<sv.c>.
+That caused problems in thread cloning, so now the C<AvREAL> flag is on,
+but is turned off in F<pad.c> right before the padlist is freed (after
+F<pad.c> has done its custom freeing of the pads).
+
+=item *
+
+All C files that make up the Perl core have been converted to UTF-8.
+
+=item *
+
+These new functions have been added as part of the work on Unicode symbols:
+
+ HvNAMELEN
+ HvNAMEUTF8
+ HvENAMELEN
+ HvENAMEUTF8
+ gv_init_pv
+ gv_init_pvn
+ gv_init_pvsv
+ gv_fetchmeth_pv
+ gv_fetchmeth_pvn
+ gv_fetchmeth_sv
+ gv_fetchmeth_pv_autoload
+ gv_fetchmeth_pvn_autoload
+ gv_fetchmeth_sv_autoload
+ gv_fetchmethod_pv_flags
+ gv_fetchmethod_pvn_flags
+ gv_fetchmethod_sv_flags
+ gv_autoload_pv
+ gv_autoload_pvn
+ gv_autoload_sv
+ newGVgen_flags
+ sv_derived_from_pv
+ sv_derived_from_pvn
+ sv_derived_from_sv
+ sv_does_pv
+ sv_does_pvn
+ sv_does_sv
+ whichsig_pv
+ whichsig_pvn
+ whichsig_sv
+ newCONSTSUB_flags
+
+The gv_fetchmethod_*_flags functions, like gv_fetchmethod_flags, are
+experimental and may change in a future release.
+
+=item *
+
+The following functions were added. These are I<not> part of the API:
+
+ GvNAMEUTF8
+ GvENAMELEN
+ GvENAME_HEK
+ CopSTASH_flags
+ CopSTASH_flags_set
+ PmopSTASH_flags
+ PmopSTASH_flags_set
+ sv_sethek
+ HEKfARG
+
+There is also a C<HEKf> macro corresponding to C<SVf>, for
+interpolating HEKs in formatted strings.
+
+=item *
+
+C<sv_catpvn_flags> takes a couple of new internal-only flags,
+C<SV_CATBYTES> and C<SV_CATUTF8>, which tell it whether the char array to
+be concatenated is UTF8. This allows for more efficient concatenation than
+creating temporary SVs to pass to C<sv_catsv>.
+
+=item *
+
+For XS AUTOLOAD subs, $AUTOLOAD is set once more, as it was in 5.6.0. This
+is in addition to setting C<SvPVX(cv)>, for compatibility with 5.8 to 5.14.
+See L<perlguts/Autoloading with XSUBs>.
+
+=item *
+
+Perl now checks whether the array (the linearized isa) returned by a MRO
+plugin begins with the name of the class itself, for which the array was
+created, instead of assuming that it does. This prevents the first element
+from being skipped during method lookup. It also means that
+C<mro::get_linear_isa> may return an array with one more element than the
+MRO plugin provided [perl #94306].
+
+=item *
+
+C<PL_curstash> is now reference-counted.
+
+=item *
+
+There are now feature bundle hints in C<PL_hints> (C<$^H>) that version
+declarations use, to avoid having to load F<feature.pm>. One setting of
+the hint bits indicates a "custom" feature bundle, which means that the
+entries in C<%^H> still apply. F<feature.pm> uses that.
+
+The C<HINT_FEATURE_MASK> macro is defined in F<perl.h> along with other
+hints. Other macros for setting and testing features and bundles are in
+the new F<feature.h>. C<FEATURE_IS_ENABLED> (which has moved to
+F<feature.h>) is no longer used throughout the codebase, but more specific
+macros, e.g., C<FEATURE_SAY_IS_ENABLED>, that are defined in F<feature.h>.
+
+=item *
+
+F<lib/feature.pm> is now a generated file, created by the new
+F<regen/feature.pl> script, which also generates F<feature.h>.
+
+=item *
+
+Tied arrays are now always C<AvREAL>. If C<@_> or C<DB::args> is tied, it
+is reified first, to make sure this is always the case.
+
+=item *
+
+Two new functions C<utf8_to_uvchr_buf()> and C<utf8_to_uvuni_buf()> have
+been added. These are the same as C<utf8_to_uvchr> and
+C<utf8_to_uvuni> (which are now deprecated), but take an extra parameter
+that is used to guard against reading beyond the end of the input
+string.
+See L<perlapi/utf8_to_uvchr_buf> and L<perlapi/utf8_to_uvuni_buf>.
+
+=item *
+
+The regular expression engine now does TRIE case insensitive matches
+under Unicode. This may change the output of C<< use re 'debug'; >>,
+and will speed up various things.
+
+=item *
+
+There is a new C<wrap_op_checker()> function, which provides a thread-safe
+alternative to writing to C<PL_check> directly.
+
+=back
+
+=head1 Selected Bug Fixes
+
+=head2 Array and hash
+
+=over
+
+=item *
+
+A bug has been fixed that would cause a "Use of freed value in iteration"
+error if the next two hash elements that would be iterated over are
+deleted [perl #85026]. (5.14.1)
+
+=item *
+
+Deleting the current hash iterator (the hash element that would be returned
+by the next call to C<each>) in void context used not to free it
+[perl #85026].
+
+=item *
+
+Deletion of methods via C<delete $Class::{method}> syntax used to update
+method caches if called in void context, but not scalar or list context.
+
+=item *
+
+When hash elements are deleted in void context, the internal hash entry is
+now freed before the value is freed, to prevent destructors called by that
+latter freeing from seeing the hash in an inconsistent state. It was
+possible to cause double-frees if the destructor freed the hash itself
+[perl #100340].
+
+=item *
+
+A C<keys> optimization in Perl 5.12.0 to make it faster on empty hashes
+caused C<each> not to reset the iterator if called after the last element
+was deleted.
+
+=item *
+
+Freeing deeply nested hashes no longer crashes [perl #44225].
+
+=item *
+
+It is possible from XS code to create hashes with elements that have no
+values. The hash element and slice operators used to crash
+when handling these in lvalue context. They now
+produce a "Modification of non-creatable hash value attempted" error
+message.
+
+=item *
+
+If list assignment to a hash or array triggered destructors that freed the
+hash or array itself, a crash would ensue. This is no longer the case
+[perl #107440].
+
+=item *
+
+It used to be possible to free the typeglob of a localized array or hash
+(e.g., C<local @{"x"}; delete $::{x}>), resulting in a crash on scope exit.
+
+=item *
+
+Some core bugs affecting L<Hash::Util> have been fixed: locking a hash
+element that is a glob copy no longer causes the next assignment to it to
+corrupt the glob (5.14.2), and unlocking a hash element that holds a
+copy-on-write scalar no longer causes modifications to that scalar to
+modify other scalars that were sharing the same string buffer.
+
+=back
+
+=head2 C API fixes
+
+=over
+
+=item *
+
+The C<newHVhv> XS function now works on tied hashes, instead of crashing or
+returning an empty hash.
+
+=item *
+
+The C<SvIsCOW> C macro now returns false for read-only copies of typeglobs,
+such as those created by:
+
+ $hash{elem} = *foo;
+ Hash::Util::lock_value %hash, 'elem';
+
+It used to return true.
+
+=item *
+
+The C<SvPVutf8> C function no longer tries to modify its argument,
+resulting in errors [perl #108994].
+
+=item *
+
+C<SvPVutf8> now works properly with magical variables.
+
+=item *
+
+C<SvPVbyte> now works properly non-PVs.
+
+=item *
+
+When presented with malformed UTF-8 input, the XS-callable functions
+C<is_utf8_string()>, C<is_utf8_string_loc()>, and
+C<is_utf8_string_loclen()> could read beyond the end of the input
+string by up to 12 bytes. This no longer happens. [perl #32080].
+However, currently, C<is_utf8_char()> still has this defect, see
+L</is_utf8_char()> above.
+
+=item *
+
+The C-level C<pregcomp> function could become confused about whether the
+pattern was in UTF8 if the pattern was an overloaded, tied, or otherwise
+magical scalar [perl #101940].
+
+=back
+
+=head2 Compile-time hints
+
+=over
+
+=item *
+
+Tying C<%^H> no longer causes perl to crash or ignore the contents of
+C<%^H> when entering a compilation scope [perl #106282].
+
+=item *
+
+C<eval $string> and C<require> used not to
+localize C<%^H> during compilation if it
+was empty at the time the C<eval> call itself was compiled. This could
+lead to scary side effects, like C<use re "/m"> enabling other flags that
+the surrounding code was trying to enable for its caller [perl #68750].
+
+=item *
+
+C<eval $string> and C<require> no longer localize hints (C<$^H> and C<%^H>)
+at run time, but only during compilation of the $string or required file.
+This makes C<BEGIN { $^H{foo}=7 }> equivalent to
+C<BEGIN { eval '$^H{foo}=7' }> [perl #70151].
+
+=item *
+
+Creating a BEGIN block from XS code (via C<newXS> or C<newATTRSUB>) would,
+on completion, make the hints of the current compiling code the current
+hints. This could cause warnings to occur in a non-warning scope.
+
+=back
+
+=head2 Copy-on-write scalars
+
+Copy-on-write or shared hash key scalars
+were introduced in 5.8.0, but most Perl code
+did not encounter them (they were used mostly internally). Perl
+5.10.0 extended them, such that assigning C<__PACKAGE__> or a
+hash key to a scalar would make it copy-on-write. Several parts
+of Perl were not updated to account for them, but have now been fixed.
+
+=over
+
+=item *
+
+C<utf8::decode> had a nasty bug that would modify copy-on-write scalars'
+string buffers in place (i.e., skipping the copy). This could result in
+hashes having two elements with the same key [perl #91834]. (5.14.2)
+
+=item *
+
+Lvalue subroutines were not allowing COW scalars to be returned. This was
+fixed for lvalue scalar context in Perl 5.12.3 and 5.14.0, but list context
+was not fixed until this release.
+
+=item *
+
+Elements of restricted hashes (see the L<fields> pragma) containing
+copy-on-write values couldn't be deleted, nor could such hashes be cleared
+(C<%hash = ()>). (5.14.2)
+
+=item *
+
+Localizing a tied variable used to make it read-only if it contained a
+copy-on-write string. (5.14.2)
+
+=item *
+
+Assigning a copy-on-write string to a stash
+element no longer causes a double free. Regardless of this change, the
+results of such assignments are still undefined.
+
+=item *
+
+Assigning a copy-on-write string to a tied variable no longer stops that
+variable from being tied if it happens to be a PVMG or PVLV internally.
+
+=item *
+
+Doing a substitution on a tied variable returning a copy-on-write
+scalar used to cause an assertion failure or an "Attempt to free
+nonexistent shared string" warning.
+
+=item *
+
+This one is a regression from 5.12: In 5.14.0, the bitwise assignment
+operators C<|=>, C<^=> and C<&=> started leaving the left-hand side
+undefined if it happened to be a copy-on-write string [perl #108480].
+
+=item *
+
+L<Storable>, L<Devel::Peek> and L<PerlIO::scalar> had similar problems.
+See L</Updated Modules and Pragmata>, above.
+
+=back
+
+=head2 The debugger
+
+=over
+
+=item *
+
+F<dumpvar.pl>, and therefore the C<x> command in the debugger, have been
+fixed to handle objects blessed into classes whose names contain "=". The
+contents of such objects used not to be dumped [perl #101814].
+
+=item *
+
+The "R" command for restarting a debugger session has been fixed to work on
+Windows, or any other system lacking a C<POSIX::_SC_OPEN_MAX> constant
+[perl #87740].
+
+=item *
+
+The C<#line 42 foo> directive used not to update the arrays of lines used
+by the debugger if it occurred in a string eval. This was partially fixed
+in 5.14, but it worked only for a single C<#line 42 foo> in each eval. Now
+it works for multiple.
+
+=item *
+
+When subroutine calls are intercepted by the debugger, the name of the
+subroutine or a reference to it is stored in C<$DB::sub>, for the debugger
+to access. Sometimes (such as C<$foo = *bar; undef *bar; &$foo>)
+C<$DB::sub> would be set to a name that could not be used to find the
+subroutine, and so the debugger's attempt to call it would fail. Now the
+check to see whether a reference is needed is more robust, so those
+problems should not happen anymore [rt.cpan.org #69862].
+
+=item *
+
+Every subroutine has a filename associated with it that the debugger uses.
+The one associated with constant subroutines used to be misallocated when
+cloned under threads. Consequently, debugging threaded applications could
+result in memory corruption [perl #96126].
+
+=back
+
+=head2 Dereferencing operators
+
+=over
+
+=item *
+
+C<defined(${"..."})>, C<defined(*{"..."})>, etc., used to
+return true for most, but not all built-in variables, if
+they had not been used yet. This bug affected C<${^GLOBAL_PHASE}> and
+C<${^UTF8CACHE}>, among others. It also used to return false if the
+package name was given as well (C<${"::!"}>) [perl #97978, #97492].
+
+=item *
+
+Perl 5.10.0 introduced a similar bug: C<defined(*{"foo"})> where "foo"
+represents the name of a built-in global variable used to return false if
+the variable had never been used before, but only on the I<first> call.
+This, too, has been fixed.
+
+=item *
+
+Since 5.6.0, C<*{ ... }> has been inconsistent in how it treats undefined
+values. It would die in strict mode or lvalue context for most undefined
+values, but would be treated as the empty string (with a warning) for the
+specific scalar return by C<undef()> (C<&PL_sv_undef> internally). This
+has been corrected. C<undef()> is now treated like other undefined
+scalars, as in Perl 5.005.
+
+=back
+
+=head2 Filehandle, last-accessed
+
+Perl has an internal variable that stores the last filehandle to be
+accessed. It is used by C<$.> and by C<tell> and C<eof> without
+arguments.
+
+=over
+
+=item *
+
+It used to be possible to set this internal variable to a glob copy and
+then modify that glob copy to be something other than a glob, and still
+have the last-accessed filehandle associated with the variable after
+assigning a glob to it again:
+
+ my $foo = *STDOUT; # $foo is a glob copy
+ <$foo>; # $foo is now the last-accessed handle
+ $foo = 3; # no longer a glob
+ $foo = *STDERR; # still the last-accessed handle
+
+Now the C<$foo = 3> assignment unsets that internal variable, so there
+is no last-accessed filehandle, just as if C<< <$foo> >> had never
+happened.
+
+This also prevents some unrelated handle from becoming the last-accessed
+handle if $foo falls out of scope and the same internal SV gets used for
+another handle [perl #97988].
+
+=item *
+
+A regression in 5.14 caused these statements not to set that internal
+variable:
+
+ my $fh = *STDOUT;
+ tell $fh;
+ eof $fh;
+ seek $fh, 0,0;
+ tell *$fh;
+ eof *$fh;
+ seek *$fh, 0,0;
+ readline *$fh;
+
+This is now fixed, but C<tell *{ *$fh }> still has the problem, and it
+is not clear how to fix it [perl #106536].
+
+=back
+
+=head2 Filetests and C<stat>
+
+The term "filetests" refers to the operators that consist of a hyphen
+followed by a single letter: C<-r>, C<-x>, C<-M>, etc. The term "stacked"
+when applied to filetests means followed by another filetest operator
+sharing the same operand, as in C<-r -x -w $fooo>.
+
+=over
+
+=item *
+
+C<stat> produces more consistent warnings. It no longer warns for "_"
+[perl #71002] and no longer skips the warning at times for other unopened
+handles. It no longer warns about an unopened handle when the operating
+system's C<fstat> function fails.
+
+=item *
+
+C<stat> would sometimes return negative numbers for large inode numbers,
+because it was using the wrong internal C type. [perl #84590]
+
+=item *
+
+C<lstat> is documented to fall back to C<stat> (with a warning) when given
+a filehandle. When passed an IO reference, it was actually doing the
+equivalent of S<C<stat _>> and ignoring the handle.
+
+=item *
+
+C<-T _> with no preceding C<stat> used to produce a
+confusing "uninitialized" warning, even though there
+is no visible uninitialized value to speak of.
+
+=item *
+
+C<-T>, C<-B>, C<-l> and C<-t> now work
+when stacked with other filetest operators
+[perl #77388].
+
+=item *
+
+In 5.14.0, filetest ops (C<-r>, C<-x>, etc.) started calling FETCH on a
+tied argument belonging to the previous argument to a list operator, if
+called with a bareword argument or no argument at all. This has been
+fixed, so C<push @foo, $tied, -r> no longer calls FETCH on C<$tied>.
+
+=item *
+
+In Perl 5.6, C<-l> followed by anything other than a bareword would treat
+its argument as a file name. That was changed in 5.8 for glob references
+(C<\*foo>), but not for globs themselves (C<*foo>). C<-l> started
+returning C<undef> for glob references without setting the last
+stat buffer that the "_" handle uses, but only if warnings
+were turned on. With warnings off, it was the same as 5.6.
+In other words, it was simply buggy and inconsistent. Now the 5.6
+behavior has been restored.
+
+=item *
+
+C<-l> followed by a bareword no longer "eats" the previous argument to
+the list operator in whose argument list it resides. Hence,
+C<print "bar", -l foo> now actually prints "bar", because C<-l>
+on longer eats it.
+
+=item *
+
+Perl keeps several internal variables to keep track of the last stat
+buffer, from which file(handle) it originated, what type it was, and
+whether the last stat succeeded.
+
+There were various cases where these could get out of synch, resulting in
+inconsistent or erratic behavior in edge cases (every mention of C<-T>
+applies to C<-B> as well):
+
+=over
+
+=item *
+
+C<-T I<HANDLE>>, even though it does a C<stat>, was not resetting the last
+stat type, so an C<lstat _> following it would merrily return the wrong
+results. Also, it was not setting the success status.
+
+=item *
+
+Freeing the handle last used by C<stat> or a filetest could result in
+S<C<-T _>> using an unrelated handle.
+
+=item *
+
+C<stat> with an IO reference would not reset the stat type or record the
+filehandle for S<C<-T _>> to use.
+
+=item *
+
+Fatal warnings could cause the stat buffer not to be reset
+for a filetest operator on an unopened filehandle or C<-l> on any handle.
+Fatal warnings also stopped C<-T> from setting C<$!>.
+
+=item *
+
+When the last stat was on an unreadable file, C<-T _> is supposed to
+return C<undef>, leaving the last stat buffer unchanged. But it was
+setting the stat type, causing C<lstat _> to stop working.
+
+=item *
+
+C<-T I<FILENAME>> was not resetting the internal stat buffers for
+unreadable files.
+
+=back
+
+These have all been fixed.
+
+=back
+
+=head2 Formats
+
+=over
+
+=item *
+
+Several edge cases have been fixed with formats and C<formline>;
+in particular, where the format itself is potentially variable (such as
+with ties and overloading), and where the format and data differ in their
+encoding. In both these cases, it used to possible for the output to be
+corrupted [perl #91032].
+
+=item *
+
+C<formline> no longer converts its argument into a string in-place. So
+passing a reference to C<formline> no longer destroys the reference
+[perl #79532].
+
+=item *
+
+Assignment to C<$^A> (the format output accumulator) now recalculates
+the number of lines output.
+
+=back
+
+=head2 C<given> and C<when>
+
+=over
+
+=item *
+
+C<given> was not scoping its implicit $_ properly, resulting in memory
+leaks or "Variable is not available" warnings [perl #94682].
+
+=item *
+
+C<given> was not calling set-magic on the implicit lexical C<$_> that it
+uses. This meant, for example, that C<pos> would be remembered from one
+execution of the same C<given> block to the next, even if the input were a
+different variable [perl #84526].
+
+=item *
+
+C<when> blocks are now capable of returning variables declared inside the
+enclosing C<given> block [perl #93548].
+
+=back
+
+=head2 The C<glob> operator
+
+=over
+
+=item *
+
+On OSes other than VMS, Perl's C<glob> operator (and the C<< <...> >> form)
+use L<File::Glob> underneath. L<File::Glob> splits the pattern into words,
+before feeding each word to its C<bsd_glob> function.
+
+There were several inconsistencies in the way the split was done. Now
+quotation marks (' and ") are always treated as shell-style word delimiters
+(that allow whitespace as part of a word) and backslashes are always
+preserved, unless they exist to escape quotation marks. Before, those
+would only sometimes be the case, depending on whether the pattern
+contained whitespace. Also, escaped whitespace at the end of the pattern
+is no longer stripped [perl #40470].
+
+=item *
+
+C<CORE::glob> now works as a way to call the default globbing function. It
+used to respect overrides, despite the C<CORE::> prefix.
+
+=item *
+
+Under miniperl (used to configure modules when perl itself is built),
+C<glob> now clears %ENV before calling csh, since the latter croaks on some
+systems if it does not like the contents of the LS_COLORS environment
+variable [perl #98662].
+
+=back
+
+=head2 Lvalue subroutines
+
+=over
+
+=item *
+
+Explicit return now returns the actual argument passed to return, instead
+of copying it [perl #72724, #72706].
+
+=item *
+
+Lvalue subroutines used to enforce lvalue syntax (i.e., whatever can go on
+the left-hand side of C<=>) for the last statement and the arguments to
+return. Since lvalue subroutines are not always called in lvalue context,
+this restriction has been lifted.
+
+=item *
+
+Lvalue subroutines are less restrictive about what values can be returned.
+It used to croak on values returned by C<shift> and C<delete> and from
+other subroutines, but no longer does so [perl #71172].
+
+=item *
+
+Empty lvalue subroutines (C<sub :lvalue {}>) used to return C<@_> in list
+context. All subroutines used to do this, but regular subs were fixed in
+Perl 5.8.2. Now lvalue subroutines have been likewise fixed.
+
+=item *
+
+Autovivification now works on values returned from lvalue subroutines
+[perl #7946], as does returning C<keys> in lvalue context.
+
+=item *
+
+Lvalue subroutines used to copy their return values in rvalue context. Not
+only was this a waste of CPU cycles, but it also caused bugs. A C<($)>
+prototype would cause an lvalue sub to copy its return value [perl #51408],
+and C<while(lvalue_sub() =~ m/.../g) { ... }> would loop endlessly
+[perl #78680].
+
+=item *
+
+When called in potential lvalue context
+(e.g., subroutine arguments or a list
+passed to C<for>), lvalue subroutines used to copy
+any read-only value that was returned. E.g., C< sub :lvalue { $] } >
+would not return C<$]>, but a copy of it.
+
+=item *
+
+When called in potential lvalue context, an lvalue subroutine returning
+arrays or hashes used to bind the arrays or hashes to scalar variables,
+resulting in bugs. This was fixed in 5.14.0 if an array were the first
+thing returned from the subroutine (but not for C<$scalar, @array> or
+hashes being returned). Now a more general fix has been applied
+[perl #23790].
+
+=item *
+
+Method calls whose arguments were all surrounded with C<my()> or C<our()>
+(as in C<< $object->method(my($a,$b)) >>) used to force lvalue context on
+the subroutine. This would prevent lvalue methods from returning certain
+values.
+
+=item *
+
+Lvalue sub calls that are not determined to be such at compile time
+(C<&$name> or &{"name"}) are no longer exempt from strict refs if they
+occur in the last statement of an lvalue subroutine [perl #102486].
+
+=item *
+
+Sub calls whose subs are not visible at compile time, if
+they occurred in the last statement of an lvalue subroutine,
+would reject non-lvalue subroutines and die with "Can't modify non-lvalue
+subroutine call" [perl #102486].
+
+Non-lvalue sub calls whose subs I<are> visible at compile time exhibited
+the opposite bug. If the call occurred in the last statement of an lvalue
+subroutine, there would be no error when the lvalue sub was called in
+lvalue context. Perl would blindly assign to the temporary value returned
+by the non-lvalue subroutine.
+
+=item *
+
+C<AUTOLOAD> routines used to take precedence over the actual sub being
+called (i.e., when autoloading wasn't needed), for sub calls in lvalue or
+potential lvalue context, if the subroutine was not visible at compile
+time.
+
+=item *
+
+Applying the C<:lvalue> attribute to an XSUB or to an aliased subroutine
+stub with C<< sub foo :lvalue; >> syntax stopped working in Perl 5.12.
+This has been fixed.
+
+=item *
+
+Applying the :lvalue attribute to subroutine that is already defined does
+not work properly, as the attribute changes the way the sub is compiled.
+Hence, Perl 5.12 began warning when an attempt is made to apply the
+attribute to an already defined sub. In such cases, the attribute is
+discarded.
+
+But the change in 5.12 missed the case where custom attributes are also
+present: that case still silently and ineffectively applied the attribute.
+That omission has now been corrected. C<sub foo :lvalue :Whatever> (when
+C<foo> is already defined) now warns about the :lvalue attribute, and does
+not apply it.
+
+=item *
+
+A bug affecting lvalue context propagation through nested lvalue subroutine
+calls has been fixed. Previously, returning a value in nested rvalue
+context would be treated as lvalue context by the inner subroutine call,
+resulting in some values (such as read-only values) being rejected.
+
+=back
+
+=head2 Overloading
+
+=over
+
+=item *
+
+Arithmetic assignment (C<$left += $right>) involving overloaded objects
+that rely on the 'nomethod' override no longer segfault when the left
+operand is not overloaded.
+
+=item *
+
+Errors that occur when methods cannot be found during overloading now
+mention the correct package name, as they did in 5.8.x, instead of
+erroneously mentioning the "overload" package, as they have since 5.10.0.
+
+=item *
+
+Undefining C<%overload::> no longer causes a crash.
+
+=back
+
+=head2 Prototypes of built-in keywords
+
+=over
+
+=item *
+
+The C<prototype> function no longer dies for the C<__FILE__>, C<__LINE__>
+and C<__PACKAGE__> directives. It now returns an empty-string prototype
+for them, because they are syntactically indistinguishable from nullary
+functions like C<time>.
+
+=item *
+
+C<prototype> now returns C<undef> for all overridable infix operators,
+such as C<eq>, which are not callable in any way resembling functions.
+It used to return incorrect prototypes for some and die for others
+[perl #94984].
+
+=item *
+
+The prototypes of several built-in functions--C<getprotobynumber>, C<lock>,
+C<not> and C<select>--have been corrected, or at least are now closer to
+reality than before.
+
+=back
+
+=head2 Regular expressions
+
+=for comment Is it possible to merge some of these items?
+
+=over 4
+
+=item *
+
+C</[[:ascii:]]/> and C</[[:blank:]]/> now use locale rules under
+C<use locale> when the platform supports that. Previously, they used
+the platform's native character set.
+
+=item *
+
+C<m/[[:ascii:]]/i> and C</\p{ASCII}/i> now match identically (when not
+under a differing locale). This fixes a regression introduced in 5.14
+in which the first expression could match characters outside of ASCII,
+such as the KELVIN SIGN.
+
+=item *
+
+C</.*/g> would sometimes refuse to match at the end of a string that ends
+with "\n". This has been fixed [perl #109206].
+
+=item *
+
+Starting with 5.12.0, Perl used to get its internal bookkeeping muddled up
+after assigning C<${ qr// }> to a hash element and locking it with
+L<Hash::Util>. This could result in double frees, crashes, or erratic
+behavior.
+
+=item *
+
+The new (in 5.14.0) regular expression modifier C</a> when repeated like
+C</aa> forbids the characters outside the ASCII range that match
+characters inside that range from matching under C</i>. This did not
+work under some circumstances, all involving alternation, such as:
+
+ "\N{KELVIN SIGN}" =~ /k|foo/iaa;
+
+succeeded inappropriately. This is now fixed.
+
+=item *
+
+5.14.0 introduced some memory leaks in regular expression character
+classes such as C<[\w\s]>, which have now been fixed. (5.14.1)
+
+=item *
+
+An edge case in regular expression matching could potentially loop.
+This happened only under C</i> in bracketed character classes that have
+characters with multi-character folds, and the target string to match
+against includes the first portion of the fold, followed by another
+character that has a multi-character fold that begins with the remaining
+portion of the fold, plus some more.
+
+ "s\N{U+DF}" =~ /[\x{DF}foo]/i
+
+is one such case. C<\xDF> folds to C<"ss">. (5.14.1)
+
+=item *
+
+A few characters in regular expression pattern matches did not
+match correctly in some circumstances, all involving C</i>. The
+affected characters are:
+COMBINING GREEK YPOGEGRAMMENI,
+GREEK CAPITAL LETTER IOTA,
+GREEK CAPITAL LETTER UPSILON,
+GREEK PROSGEGRAMMENI,
+GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA,
+GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS,
+GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA,
+GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS,
+LATIN SMALL LETTER LONG S,
+LATIN SMALL LIGATURE LONG S T,
+and
+LATIN SMALL LIGATURE ST.
+
+=item *
+
+A memory leak regression in regular expression compilation
+under threading has been fixed.
+
+=item *
+
+A regression introduced in 5.14.0 has
+been fixed. This involved an inverted
+bracketed character class in a regular expression that consisted solely
+of a Unicode property. That property wasn't getting inverted outside the
+Latin1 range.
+
+=item *
+
+Three problematic Unicode characters now work better in regex pattern matching under C</i>.
+
+In the past, three Unicode characters:
+LATIN SMALL LETTER SHARP S,
+GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS,
+and
+GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS,
+along with the sequences that they fold to
+(including "ss" for LATIN SMALL LETTER SHARP S),
+did not properly match under C</i>. 5.14.0 fixed some of these cases,
+but introduced others, including a panic when one of the characters or
+sequences was used in the C<(?(DEFINE)> regular expression predicate.
+The known bugs that were introduced in 5.14 have now been fixed; as well
+as some other edge cases that have never worked until now. These all
+involve using the characters and sequences outside bracketed character
+classes under C</i>. This closes [perl #98546].
+
+There remain known problems when using certain characters with
+multi-character folds inside bracketed character classes, including such
+constructs as C<qr/[\N{LATIN SMALL LETTER SHARP}a-z]/i>. These
+remaining bugs are addressed in [perl #89774].
+
+=item *
+
+RT #78266: The regex engine has been leaking memory when accessing
+named captures that weren't matched as part of a regex ever since 5.10
+when they were introduced; e.g., this would consume over a hundred MB of
+memory:
+
+ for (1..10_000_000) {
+ if ("foo" =~ /(foo|(?<capture>bar))?/) {
+ my $capture = $+{capture}
+ }
+ }
+ system "ps -o rss $$"'
+
+=item *
+
+In 5.14, C</[[:lower:]]/i> and C</[[:upper:]]/i> no longer matched the
+opposite case. This has been fixed [perl #101970].
+
+=item *
+
+A regular expression match with an overloaded object on the right-hand side
+would sometimes stringify the object too many times.
+
+=item *
+
+A regression has been fixed that was introduced in 5.14, in C</i>
+regular expression matching, in which a match improperly fails if the
+pattern is in UTF-8, the target string is not, and a Latin-1 character
+precedes a character in the string that should match the pattern.
+[perl #101710]
+
+=item *
+
+In case-insensitive regular expression pattern matching, no longer on
+UTF-8 encoded strings does the scan for the start of match look only at
+the first possible position. This caused matches such as
+C<"f\x{FB00}" =~ /ff/i> to fail.
+
+=item *
+
+The regexp optimizer no longer crashes on debugging builds when merging
+fixed-string nodes with inconvenient contents.
+
+=item *
+
+A panic involving the combination of the regular expression modifiers
+C</aa> and the C<\b> escape sequence introduced in 5.14.0 has been
+fixed [perl #95964]. (5.14.2)
+
+=item *
+
+The combination of the regular expression modifiers C</aa> and the C<\b>
+and C<\B> escape sequences did not work properly on UTF-8 encoded
+strings. All non-ASCII characters under C</aa> should be treated as
+non-word characters, but what was happening was that Unicode rules were
+used to determine wordness/non-wordness for non-ASCII characters. This
+is now fixed [perl #95968].
+
+=item *
+
+C<< (?foo: ...) >> no longer loses passed in character set.
+
+=item *
+
+The trie optimization used to have problems with alternations containing
+an empty C<(?:)>, causing C<< "x" =~ /\A(?>(?:(?:)A|B|C?x))\z/ >> not to
+match, whereas it should [perl #111842].
+
+=item *
+
+Use of lexical (C<my>) variables in code blocks embedded in regular
+expressions will no longer result in memory corruption or crashes.
+
+Nevertheless, these code blocks are still experimental, as there are still
+problems with the wrong variables being closed over (in loops for instance)
+and with abnormal exiting (e.g., C<die>) causing memory corruption.
+
+=item *
+
+The C<\h>, C<\H>, C<\v> and C<\V> regular expression metacharacters used to
+cause a panic error message when trying to match at the end of the
+string [perl #96354].
+
+=item *
+
+The abbreviations for four C1 control characters C<MW> C<PM>, C<RI>, and
+C<ST> were previously unrecognized by C<\N{}>, vianame(), and
+string_vianame().
+
+=item *
+
+Mentioning a variable named "&" other than C<$&> (i.e., C<@&> or C<%&>) no
+longer stops C<$&> from working. The same applies to variables named "'"
+and "`" [perl #24237].
+
+=item *
+
+Creating a C<UNIVERSAL::AUTOLOAD> sub no longer stops C<%+>, C<%-> and
+C<%!> from working some of the time [perl #105024].
+
+=back
+
+=head2 Smartmatching
+
+=over
+
+=item *
+
+C<~~> now correctly handles the precedence of Any~~Object, and is not tricked
+by an overloaded object on the left-hand side.
+
+=item *
+
+In Perl 5.14.0, C<$tainted ~~ @array> stopped working properly. Sometimes
+it would erroneously fail (when C<$tainted> contained a string that occurs
+in the array I<after> the first element) or erroneously succeed (when
+C<undef> occurred after the first element) [perl #93590].
+
+=back
+
+=head2 The C<sort> operator
+
+=over
+
+=item *
+
+C<sort> was not treating C<sub {}> and C<sub {()}> as equivalent when
+such a sub was provided as the comparison routine. It used to croak on
+C<sub {()}>.
+
+=item *
+
+C<sort> now works once more with custom sort routines that are XSUBs. It
+stopped working in 5.10.0.
+
+=item *
+
+C<sort> with a constant for a custom sort routine, although it produces
+unsorted results, no longer crashes. It started crashing in 5.10.0.
+
+=item *
+
+Warnings emitted by C<sort> when a custom comparison routine returns a
+non-numeric value now contain "in sort" and show the line number of the
+C<sort> operator, rather than the last line of the comparison routine. The
+warnings also now occur only if warnings are enabled in the scope where
+C<sort> occurs. Previously the warnings would occur if enabled in the
+comparison routine's scope.
+
+=item *
+
+C<< sort { $a <=> $b } >>, which is optimized internally, now produces
+"uninitialized" warnings for NaNs (not-a-number values), since C<< <=> >>
+returns C<undef> for those. This brings it in line with
+S<C<< sort { 1; $a <=> $b } >>> and other more complex cases, which are not
+optimized [perl #94390].
+
+=back
+
+=head2 The C<substr> operator
+
+=over
+
+=item *
+
+Tied (and otherwise magical) variables are no longer exempt from the
+"Attempt to use reference as lvalue in substr" warning.
+
+=item *
+
+That warning now occurs when the returned lvalue is assigned to, not
+when C<substr> itself is called. This makes a difference only if the
+return value of C<substr> is referenced and later assigned to.
+
+=item *
+
+Passing a substring of a read-only value or a typeglob to a function
+(potential lvalue context) no longer causes an immediate "Can't coerce"
+or "Modification of a read-only value" error. That error occurs only
+if the passed value is assigned to.
+
+The same thing happens with the "substr outside of string" error. If
+the lvalue is only read from, not written to, it is now just a warning, as
+with rvalue C<substr>.
+
+=item *
+
+C<substr> assignments no longer call FETCH twice if the first argument
+is a tied variable, just once.
+
+=back
+
+=head2 Support for embedded nulls
+
+Some parts of Perl did not work correctly with nulls (C<chr 0>) embedded in
+strings. That meant that, for instance, C<< $m = "a\0b"; foo->$m >> would
+call the "a" method, instead of the actual method name contained in $m.
+These parts of perl have been fixed to support nulls:
+
+=over
+
+=item *
+
+Method names
+
+=item *
+
+Typeglob names (including filehandle and subroutine names)
+
+=item *
+
+Package names, including the return value of C<ref()>
+
+=item *
+
+Typeglob elements (C<*foo{"THING\0stuff"}>)
+
+=item *
+
+Signal names
+
+=item *
+
+Various warnings and error messages that mention variable names or values,
+methods, etc.
+
+=back
+
+One side effect of these changes is that blessing into "\0" no longer
+causes C<ref()> to return false.
+
+=head2 Threading bugs
+
+=over
+
+=item *
+
+Typeglobs returned from threads are no longer cloned if the parent thread
+already has a glob with the same name. This means that returned
+subroutines will now assign to the right package variables [perl #107366].
+
+=item *
+
+Some cases of threads crashing due to memory allocation during cloning have
+been fixed [perl #90006].
+
+=item *
+
+Thread joining would sometimes emit "Attempt to free unreferenced scalar"
+warnings if C<caller> had been used from the C<DB> package before thread
+creation [perl #98092].
+
+=item *
+
+Locking a subroutine (via C<lock &sub>) is no longer a compile-time error
+for regular subs. For lvalue subroutines, it no longer tries to return the
+sub as a scalar, resulting in strange side effects like C<ref \$_>
+returning "CODE" in some instances.
+
+C<lock &sub> is now a run-time error if L<threads::shared> is loaded (a
+no-op otherwise), but that may be rectified in a future version.
+
+=back
+
+=head2 Tied variables
+
+=over
+
+=item *
+
+Various cases in which FETCH was being ignored or called too many times
+have been fixed:
+
+=over
+
+=item *
+
+C<PerlIO::get_layers> [perl #97956]
+
+=item *
+
+C<$tied =~ y/a/b/>, C<chop $tied> and C<chomp $tied> when $tied holds a
+reference.
+
+=item *
+
+When calling C<local $_> [perl #105912]
+
+=item *
+
+Four-argument C<select>
+
+=item *
+
+A tied buffer passed to C<sysread>
+
+=item *
+
+C<< $tied .= <> >>
+
+=item *
+
+Three-argument C<open>, the third being a tied file handle
+(as in C<< open $fh, ">&", $tied >>)
+
+=item *
+
+C<sort> with a reference to a tied glob for the comparison routine.
+
+=item *
+
+C<..> and C<...> in list context [perl #53554].
+
+=item *
+
+C<${$tied}>, C<@{$tied}>, C<%{$tied}> and C<*{$tied}> where the tied
+variable returns a string (C<&{}> was unaffected)
+
+=item *
+
+C<defined ${ $tied_variable }>
+
+=item *
+
+Various functions that take a filehandle argument in rvalue context
+(C<close>, C<readline>, etc.) [perl #97482]
+
+=item *
+
+Some cases of dereferencing a complex expression, such as
+C<${ (), $tied } = 1>, used to call C<FETCH> multiple times, but now call
+it once.
+
+=item *
+
+C<$tied-E<gt>method> where $tied returns a package name--even resulting in
+a failure to call the method, due to memory corruption
+
+=item *
+
+Assignments like C<*$tied = \&{"..."}> and C<*glob = $tied>
+
+=item *
+
+C<chdir>, C<chmod>, C<chown>, C<utime>, C<truncate>, C<stat>, C<lstat> and
+the filetest ops (C<-r>, C<-x>, etc.)
+
+=back
+
+=item *
+
+C<caller> sets C<@DB::args> to the subroutine arguments when called from
+the DB package. It used to crash when doing so if C<@DB::args> happened to
+be tied. Now it croaks instead.
+
+=item *
+
+Tying an element of %ENV or C<%^H> and then deleting that element would
+result in a call to the tie object's DELETE method, even though tying the
+element itself is supposed to be equivalent to tying a scalar (the element
+is, of course, a scalar) [perl #67490].
+
+=item *
+
+When Perl autovivifies an element of a tied array or hash (which entails
+calling STORE with a new reference), it now calls FETCH immediately after
+the STORE, instead of assuming that FETCH would have returned the same
+reference. This can make it easier to implement tied objects [perl #35865, #43011].
+
+=item *
+
+Four-argument C<select> no longer produces its "Non-string passed as
+bitmask" warning on tied or tainted variables that are strings.
+
+=item *
+
+Localizing a tied scalar that returns a typeglob no longer stops it from
+being tied till the end of the scope.
+
+=item *
+
+Attempting to C<goto> out of a tied handle method used to cause memory
+corruption or crashes. Now it produces an error message instead
+[perl #8611].
+
+=item *
+
+A bug has been fixed that occurs when a tied variable is used as a
+subroutine reference: if the last thing assigned to or returned from the
+variable was a reference or typeglob, the C<\&$tied> could either crash or
+return the wrong subroutine. The reference case is a regression introduced
+in Perl 5.10.0. For typeglobs, it has probably never worked till now.
+
+=back
+
+=head2 Version objects and vstrings
+
+=over
+
+=item *
+
+The bitwise complement operator (and possibly other operators, too) when
+passed a vstring would leave vstring magic attached to the return value,
+even though the string had changed. This meant that
+C<< version->new(~v1.2.3) >> would create a version looking like "v1.2.3"
+even though the string passed to C<< version->new >> was actually
+"\376\375\374". This also caused L<B::Deparse> to deparse C<~v1.2.3>
+incorrectly, without the C<~> [perl #29070].
+
+=item *
+
+Assigning a vstring to a magic (e.g., tied, C<$!>) variable and then
+assigning something else used to blow away all magic. This meant that
+tied variables would come undone, C<$!> would stop getting updated on
+failed system calls, C<$|> would stop setting autoflush, and other
+mischief would take place. This has been fixed.
+
+=item *
+
+C<< version->new("version") >> and C<printf "%vd", "version"> no longer
+crash [perl #102586].
+
+=item *
+
+Version comparisons, such as those that happen implicitly with C<use
+v5.43>, no longer cause locale settings to change [perl #105784].
+
+=item *
+
+Version objects no longer cause memory leaks in boolean context
+[perl #109762].
+
+=back
+
+=head2 Warnings, redefinition
+
+=over
+
+=item *
+
+Subroutines from the C<autouse> namespace are once more exempt from
+redefinition warnings. This used to work in 5.005, but was broken in
+5.6 for most subroutines. For subs created via XS that redefine
+subroutines from the C<autouse> package, this stopped working in 5.10.
+
+=item *
+
+New XSUBs now produce redefinition warnings if they overwrite existing
+subs, as they did in 5.8.x. (The C<autouse> logic was reversed in
+5.10-14. Only subroutines from the C<autouse> namespace would warn
+when clobbered.)
+
+=item *
+
+C<newCONSTSUB> used to use compile-time warning hints, instead of
+run-time hints. The following code should never produce a redefinition
+warning, but it used to, if C<newCONSTSUB> redefined an existing
+subroutine:
+
+ use warnings;
+ BEGIN {
+ no warnings;
+ some_XS_function_that_calls_new_CONSTSUB();
+ }
+
+=item *
+
+Redefinition warnings for constant subroutines are on by default (what
+are known as severe warnings in L<perldiag>). This occurred only
+when it was a glob assignment or declaration of a Perl subroutine that
+caused the warning. If the creation of XSUBs triggered the warning, it
+was not a default warning. This has been corrected.
+
+=item *
+
+The internal check to see whether a redefinition warning should occur
+used to emit "uninitialized" warnings in cases like this:
+
+ use warnings "uninitialized";
+ use constant {u => undef, v => undef};
+ sub foo(){u}
+ sub foo(){v}
+
+=back
+
+=head2 Warnings, "Uninitialized"
+
+=over
+
+=item *
+
+Various functions that take a filehandle argument in rvalue context
+(C<close>, C<readline>, etc.) used to warn twice for an undefined handle
+[perl #97482].
+
+=item *
+
+C<dbmopen> now only warns once, rather than three times, if the mode
+argument is C<undef> [perl #90064].
+
+=item *
+
+The C<+=> operator does not usually warn when the left-hand side is
+C<undef>, but it was doing so for tied variables. This has been fixed
+[perl #44895].
+
+=item *
+
+A bug fix in Perl 5.14 introduced a new bug, causing "uninitialized"
+warnings to report the wrong variable if the operator in question had
+two operands and one was C<%{...}> or C<@{...}>. This has been fixed
+[perl #103766].
+
+=item *
+
+C<..> and C<...> in list context now mention the name of the variable in
+"uninitialized" warnings for string (as opposed to numeric) ranges.
+
+=back
+
+=head2 Weak references
+
+=over
+
+=item *
+
+Weakening the first argument to an automatically-invoked C<DESTROY> method
+could result in erroneous "DESTROY created new reference" errors or
+crashes. Now it is an error to weaken a read-only reference.
+
+=item *
+
+Weak references to lexical hashes going out of scope were not going stale
+(becoming undefined), but continued to point to the hash.
+
+=item *
+
+Weak references to lexical variables going out of scope are now broken
+before any magical methods (e.g., DESTROY on a tie object) are called.
+This prevents such methods from modifying the variable that will be seen
+the next time the scope is entered.
+
+=item *
+
+Creating a weak reference to an @ISA array or accessing the array index
+(C<$#ISA>) could result in confused internal bookkeeping for elements
+later added to the @ISA array. For instance, creating a weak
+reference to the element itself could push that weak reference on to @ISA;
+and elements added after use of C<$#ISA> would be ignored by method lookup
+[perl #85670].
+
+=back
+
+=head2 Other notable fixes
+
+=over
+
+=item *
+
+C<quotemeta> now quotes consistently the same non-ASCII characters under
+C<use feature 'unicode_strings'>, regardless of whether the string is
+encoded in UTF-8 or not, hence fixing the last vestiges (we hope) of the
+notorious L<perlunicode/The "Unicode Bug">. [perl #77654].
+
+Which of these code points is quoted has changed, based on Unicode's
+recommendations. See L<perlfunc/quotemeta> for details.
+
+=item *
+
+C<study> is now a no-op, presumably fixing all outstanding bugs related to
+study causing regex matches to behave incorrectly!
+
+=item *
+
+When one writes C<open foo || die>, which used to work in Perl 4, a
+"Precedence problem" warning is produced. This warning used erroneously to
+apply to fully-qualified bareword handle names not followed by C<||>. This
+has been corrected.
+
+=item *
+
+After package aliasing (C<*foo:: = *bar::>), C<select> with 0 or 1 argument
+would sometimes return a name that could not be used to refer to the
+filehandle, or sometimes it would return C<undef> even when a filehandle
+was selected. Now it returns a typeglob reference in such cases.
+
+=item *
+
+C<PerlIO::get_layers> no longer ignores some arguments that it thinks are
+numeric, while treating others as filehandle names. It is now consistent
+for flat scalars (i.e., not references).
+
+=item *
+
+Unrecognized switches on C<#!> line
+
+If a switch, such as B<-x>, that cannot occur on the C<#!> line is used
+there, perl dies with "Can't emulate...".
+
+It used to produce the same message for switches that perl did not
+recognize at all, whether on the command line or the C<#!> line.
+
+Now it produces the "Unrecognized switch" error message [perl #104288].
+
+=item *
+
+C<system> now temporarily blocks the SIGCHLD signal handler, to prevent the
+signal handler from stealing the exit status [perl #105700].
+
+=item *
+
+The %n formatting code for C<printf> and C<sprintf>, which causes the number
+of characters to be assigned to the next argument, now actually
+assigns the number of characters, instead of the number of bytes.
+
+It also works now with special lvalue functions like C<substr> and with
+nonexistent hash and array elements [perl #3471, #103492].
+
+=item *
+
+Perl skips copying values returned from a subroutine, for the sake of
+speed, if doing so would make no observable difference. Because of faulty
+logic, this would happen with the
+result of C<delete>, C<shift> or C<splice>, even if the result was
+referenced elsewhere. It also did so with tied variables about to be freed
+[perl #91844, #95548].
+
+=item *
+
+C<utf8::decode> now refuses to modify read-only scalars [perl #91850].
+
+=item *
+
+Freeing $_ inside a C<grep> or C<map> block, a code block embedded in a
+regular expression, or an @INC filter (a subroutine returned by a
+subroutine in @INC) used to result in double frees or crashes
+[perl #91880, #92254, #92256].
+
+=item *
+
+C<eval> returns C<undef> in scalar context or an empty list in list
+context when there is a run-time error. When C<eval> was passed a
+string in list context and a syntax error occurred, it used to return a
+list containing a single undefined element. Now it returns an empty
+list in list context for all errors [perl #80630].
+
+=item *
+
+C<goto &func> no longer crashes, but produces an error message, when
+the unwinding of the current subroutine's scope fires a destructor that
+undefines the subroutine being "goneto" [perl #99850].
+
+=item *
+
+Perl now holds an extra reference count on the package that code is
+currently compiling in. This means that the following code no longer
+crashes [perl #101486]:
+
+ package Foo;
+ BEGIN {*Foo:: = *Bar::}
+ sub foo;
+
+=item *
+
+The C<x> repetition operator no longer crashes on 64-bit builds with large
+repeat counts [perl #94560].
+
+=item *
+
+Calling C<require> on an implicit C<$_> when C<*CORE::GLOBAL::require> has
+been overridden does not segfault anymore, and C<$_> is now passed to the
+overriding subroutine [perl #78260].
+
+=item *
+
+C<use> and C<require> are no longer affected by the I/O layers active in
+the caller's scope (enabled by L<open.pm|open>) [perl #96008].
+
+=item *
+
+C<our $::é; $é> (which is invalid) no longer produces the "Compilation
+error at lib/utf8_heavy.pl..." error message, which it started emitting in
+5.10.0 [perl #99984].
+
+=item *
+
+On 64-bit systems, C<read()> now understands large string offsets beyond
+the 32-bit range.
+
+=item *
+
+Errors that occur when processing subroutine attributes no longer cause the
+subroutine's op tree to leak.
+
+=item *
+
+Passing the same constant subroutine to both C<index> and C<formline> no
+longer causes one or the other to fail [perl #89218]. (5.14.1)
+
+=item *
+
+List assignment to lexical variables declared with attributes in the same
+statement (C<my ($x,@y) : blimp = (72,94)>) stopped working in Perl 5.8.0.
+It has now been fixed.
+
+=item *
+
+Perl 5.10.0 introduced some faulty logic that made "U*" in the middle of
+a pack template equivalent to "U0" if the input string was empty. This has
+been fixed [perl #90160]. (5.14.2)
+
+=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 [perl #36347].
+
+=item *
+
+Fixed a case where it was possible that a freed buffer may have been read
+from when parsing a here document [perl #90128]. (5.14.1)
+
+=item *
+
+C<each(I<ARRAY>)> is now wrapped in C<defined(...)>, like C<each(I<HASH>)>,
+inside a C<while> condition [perl #90888].
+
+=item *
+
+A problem with context propagation when a C<do> block is an argument to
+C<return> has been fixed. It used to cause C<undef> to be returned in
+certain cases of a C<return> inside an C<if> block which itself is followed by
+another C<return>.
+
+=item *
+
+Calling C<index> with a tainted constant no longer causes constants in
+subsequently compiled code to become tainted [perl #64804].
+
+=item *
+
+Infinite loops like C<1 while 1> used to stop C<strict 'subs'> mode from
+working for the rest of the block.
+
+=item *
+
+For list assignments like C<($a,$b) = ($b,$a)>, Perl has to make a copy of
+the items on the right-hand side before assignment them to the left. For
+efficiency's sake, it assigns the values on the right straight to the items
+on the left if no one variable is mentioned on both sides, as in C<($a,$b) =
+($c,$d)>. The logic for determining when it can cheat was faulty, in that
+C<&&> and C<||> on the right-hand side could fool it. So C<($a,$b) =
+$some_true_value && ($b,$a)> would end up assigning the value of C<$b> to
+both scalars.
+
+=item *
+
+Perl no longer tries to apply lvalue context to the string in
+C<("string", $variable) ||= 1> (which used to be an error). Since the
+left-hand side of C<||=> is evaluated in scalar context, that's a scalar
+comma operator, which gives all but the last item void context. There is
+no such thing as void lvalue context, so it was a mistake for Perl to try
+to force it [perl #96942].
+
+=item *
+
+C<caller> no longer leaks memory when called from the DB package if
+C<@DB::args> was assigned to after the first call to C<caller>. L<Carp>
+was triggering this bug [perl #97010]. (5.14.2)
+
+=item *
+
+C<close> and similar filehandle functions, when called on built-in global
+variables (like C<$+>), used to die if the variable happened to hold the
+undefined value, instead of producing the usual "Use of uninitialized
+value" warning.
+
+=item *
+
+When autovivified file handles were introduced in Perl 5.6.0, C<readline>
+was inadvertently made to autovivify when called as C<readline($foo)> (but
+not as C<E<lt>$fooE<gt>>). It has now been fixed never to autovivify.
+
+=item *
+
+Calling an undefined anonymous subroutine (e.g., what $x holds after
+C<undef &{$x = sub{}}>) used to cause a "Not a CODE reference" error, which
+has been corrected to "Undefined subroutine called" [perl #71154].
+
+=item *
+
+Causing C<@DB::args> to be freed between uses of C<caller> no longer
+results in a crash [perl #93320].
+
+=item *
+
+C<setpgrp($foo)> used to be equivalent to C<($foo, setpgrp)>, because
+C<setpgrp> was ignoring its argument if there was just one. Now it is
+equivalent to C<setpgrp($foo,0)>.
+
+=item *
+
+C<shmread> was not setting the scalar flags correctly when reading from
+shared memory, causing the existing cached numeric representation in the
+scalar to persist [perl #98480].
+
+=item *
+
+C<++> and C<--> now work on copies of globs, instead of dying.
+
+=item *
+
+C<splice()> doesn't warn when truncating
+
+You can now limit the size of an array using C<splice(@a,MAX_LEN)> without
+worrying about warnings.
+
+=item *
+
+C<< $$ >> is no longer tainted. Since this value comes directly from
+C<< getpid() >>, it is always safe.
+
+=item *
+
+The parser no longer leaks a filehandle if STDIN was closed before parsing
+started [perl #37033].
+
+=item *
+
+C<< die; >> with a non-reference, non-string, or magical (e.g., tainted)
+value in $@ now properly propagates that value [perl #111654].
+
+=back
+
+=head1 Known Problems
+
+=over 4
+
+=item *
+
+On Solaris, we have two kinds of failure.
+
+If F<make> is Sun's F<make>, we get an error about a badly formed macro
+assignment in the F<Makefile>. That happens when F<./Configure> tries to
+make depends. F<Configure> then exits 0, but further F<make>-ing fails.
+
+If F<make> is F<gmake>, F<Configure> completes, then we get errors related
+to F</usr/include/stdbool.h>
+
+=item *
+
+On Win32, a number of tests hang unless STDERR is redirected. The cause of
+this is still under investigation.
+
+=item *
+
+When building as root with a umask that prevents files from being
+other-readable, F<t/op/filetest.t> will fail. This is a test bug, not a
+bug in perl's behavior.
+
+=item *
+
+Configuring with a recent gcc and link-time-optimization, such as
+C<Configure -Doptimize='-O2 -flto'> fails
+because the optimizer optimizes away some of Configure's tests. A
+workaround is to omit the C<-flto> flag when running Configure, but add
+it back in while actually building, something like
+
+ sh Configure -Doptimize=-O2
+ make OPTIMIZE='-O2 -flto'
+
+=item *
+
+The following CPAN modules have test failures with perl 5.16. Patches have
+been submitted for all of these, so hopefully there will be new releases
+soon:
+
+=over
+
+=item *
+
+L<Date::Pcalc> version 6.1
+
+=item *
+
+L<Module::CPANTS::Analyse> version 0.85
+
+This fails due to problems in L<Module::Find> 0.10 and L<File::MMagic>
+1.27.
+
+=item *
+
+L<PerlIO::Util> version 0.72
+
+=back
+
+=back
+
+=head1 Acknowledgements
+
+Perl 5.16.0 represents approximately 12 months of development since Perl
+5.14.0 and contains approximately 590,000 lines of changes across 2,500
+files from 139 authors.
+
+Perl continues to flourish into its third decade thanks to a vibrant
+community of users and developers. The following people are known to
+have contributed the improvements that became Perl 5.16.0:
+
+Aaron Crane, Abhijit Menon-Sen, Abigail, Alan Haggai Alavi, Alberto
+Simões, Alexandr Ciornii, Andreas König, Andy Dougherty, Aristotle
+Pagaltzis, Bo Johansson, Bo Lindbergh, Breno G. de Oliveira, brian d
+foy, Brian Fraser, Brian Greenfield, Carl Hayter, Chas. Owens,
+Chia-liang Kao, Chip Salzenberg, Chris 'BinGOs' Williams, Christian
+Hansen, Christopher J. Madsen, chromatic, Claes Jacobsson, Claudio
+Ramirez, Craig A. Berry, Damian Conway, Daniel Kahn Gillmor, Darin
+McBride, Dave Rolsky, David Cantrell, David Golden, David Leadbeater,
+David Mitchell, Dee Newcum, Dennis Kaarsemaker, Dominic Hargreaves,
+Douglas Christopher Wilson, Eric Brine, Father Chrysostomos, Florian
+Ragwitz, Frederic Briere, George Greer, Gerard Goossen, Gisle Aas,
+H.Merijn Brand, Hojung Youn, Ian Goodacre, James E Keenan, Jan Dubois,
+Jerry D. Hedden, Jesse Luehrs, Jesse Vincent, Jilles Tjoelker, Jim
+Cromie, Jim Meyering, Joel Berger, Johan Vromans, Johannes Plunien, John
+Hawkinson, John P. Linderman, John Peacock, Joshua ben Jore, Juerd
+Waalboer, Karl Williamson, Karthik Rajagopalan, Keith Thompson, Kevin J.
+Woolley, Kevin Ryde, Laurent Dami, Leo Lapworth, Leon Brocard, Leon
+Timmermans, Louis Strous, Lukas Mai, Marc Green, Marcel Grünauer, Mark
+A. Stratman, Mark Dootson, Mark Jason Dominus, Martin Hasch, Matthew
+Horsfall, Max Maischein, Michael G Schwern, Michael Witten, Mike
+Sheldrake, Moritz Lenz, Nicholas Clark, Niko Tyni, Nuno Carvalho, Pau
+Amma, Paul Evans, Paul Green, Paul Johnson, Perlover, Peter John Acklam,
+Peter Martini, Peter Scott, Phil Monsen, Pino Toscano, Rafael
+Garcia-Suarez, Rainer Tammer, Reini Urban, Ricardo Signes, Robin Barker,
+Rodolfo Carvalho, Salvador Fandiño, Sam Kimbrel, Samuel Thibault, Shawn
+M Moore, Shigeya Suzuki, Shirakata Kentaro, Shlomi Fish, Sisyphus,
+Slaven Rezic, Spiros Denaxas, Steffen Müller, Steffen Schwigon, Stephen
+Bennett, Stephen Oberholtzer, Stevan Little, Steve Hay, Steve Peters,
+Thomas Sibley, Thorsten Glaser, Timothe Litt, Todd Rinaldo, Tom
+Christiansen, Tom Hukins, Tony Cook, Vadim Konovalov, Vincent Pit,
+Vladimir Timofeev, Walt Mankowski, Yves Orton, Zefram, Zsbán Ambrus,
+Ævar Arnfjörð Bjarmason.
+
+The list above is almost certainly incomplete as it is automatically
+generated from version control history. In particular, it does not
+include the names of the (very much appreciated) contributors who
+reported issues to the Perl bug tracker.
+
+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.
+
+For a more complete list of all of Perl's historical contributors,
+please see the F<AUTHORS> file in the Perl source distribution.
+
+=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 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@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@perl.org. This points to a closed
+subscription unarchived mailing list, which includes all core
+committers, who will 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 use this address only 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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5161delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5161delta.pod
new file mode 100644
index 00000000000..406e1cc3e2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/pods/perl5161delta.pod
@@ -0,0 +1,198 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5161delta - what is new for perl v5.16.1
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.16.0 release and
+the 5.16.1 release.
+
+If you are upgrading from an earlier release such as 5.14.0, first read
+L<perl5160delta>, which describes differences between 5.14.0 and
+5.16.0.
+
+=head1 Security
+
+=head2 an off-by-two error in Scalar-List-Util has been fixed
+
+The bugfix was in Scalar-List-Util 1.23_04, and perl 5.16.1 includes
+Scalar-List-Util 1.25.
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with 5.16.0 If any
+exist, they are bugs, and we request that you submit a report. See
+L</Reporting Bugs> below.
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Scalar::Util> and L<List::Util> have been upgraded from version 1.23 to
+version 1.25.
+
+=item *
+
+L<B::Deparse> has been updated from version 1.14 to 1.14_01. An
+"uninitialized" warning emitted by B::Deparse has been squashed
+[perl #113464].
+
+=back
+
+=head1 Configuration and Compilation
+
+=over
+
+=item *
+
+Building perl with some Windows compilers used to fail due to a problem
+with miniperl's C<glob> operator (which uses the C<perlglob> program)
+deleting the PATH environment variable [perl #113798].
+
+=back
+
+=head1 Platform Support
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item VMS
+
+All C header files from the top-level directory of the distribution are now
+installed on VMS, providing consistency with a long-standing practice on other
+platforms. Previously only a subset were installed, which broke non-core extension
+builds for extensions that depended on the missing include files.
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item *
+
+A regression introduced in Perl v5.16.0 involving
+C<tr/I<SEARCHLIST>/I<REPLACEMENTLIST>/> has been fixed. Only the first
+instance is supposed to be meaningful if a character appears more than
+once in C<I<SEARCHLIST>>. Under some circumstances, the final instance
+was overriding all earlier ones. [perl #113584]
+
+=item *
+
+C<B::COP::stashlen> has been added. This provides access to an internal
+field added in perl 5.16 under threaded builds. It was broken at the last
+minute before 5.16 was released [perl #113034].
+
+=item *
+
+The L<re> pragma will no longer clobber C<$_>. [perl #113750]
+
+=item *
+
+Unicode 6.1 published an incorrect alias for one of the
+Canonical_Combining_Class property's values (which range between 0 and
+254). The alias C<CCC133> should have been C<CCC132>. Perl now
+overrides the data file furnished by Unicode to give the correct value.
+
+=item *
+
+Duplicating scalar filehandles works again. [perl #113764]
+
+=item *
+
+Under threaded perls, a runtime code block in a regular expression could
+corrupt the package name stored in the op tree, resulting in bad reads
+in C<caller>, and possibly crashes [perl #113060].
+
+=item *
+
+For efficiency's sake, many operators and built-in functions return the
+same scalar each time. Lvalue subroutines and subroutines in the CORE::
+namespace were allowing this implementation detail to leak through.
+C<print &CORE::uc("a"), &CORE::uc("b")> used to print "BB". The same thing
+would happen with an lvalue subroutine returning the return value of C<uc>.
+Now the value is copied in such cases [perl #113044].
+
+=item *
+
+C<__SUB__> now works in special blocks (C<BEGIN>, C<END>, etc.).
+
+=item *
+
+Formats that reference lexical variables from outside no longer result
+in crashes.
+
+=back
+
+=head1 Known Problems
+
+There are no new known problems, but consult L<perl5160delta/Known
+Problems> to see those identified in the 5.16.0 release.
+
+=head1 Acknowledgements
+
+Perl 5.16.1 represents approximately 2 months of development since Perl
+5.16.0 and contains approximately 14,000 lines of changes across 96
+files from 8 authors.
+
+Perl continues to flourish into its third decade thanks to a vibrant
+community of users and developers. The following people are known to
+have contributed the improvements that became Perl 5.16.1:
+
+Chris 'BinGOs' Williams, Craig A. Berry, Father Chrysostomos, Karl
+Williamson, Paul Johnson, Reini Urban, Ricardo Signes, Tony Cook.
+
+The list above is almost certainly incomplete as it is automatically
+generated from version control history. In particular, it does not
+include the names of the (very much appreciated) contributors who
+reported issues to the Perl bug tracker.
+
+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.
+
+For a more complete list of all of Perl's historical contributors,
+please see the F<AUTHORS> file in the Perl source distribution.
+
+=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@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@perl.org. This points to a closed
+subscription unarchived mailing list, which includes all the core
+committers, who will 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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5162delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5162delta.pod
new file mode 100644
index 00000000000..d41e3b5cfe3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/pods/perl5162delta.pod
@@ -0,0 +1,125 @@
+=encoding utf8
+
+=head1 NAME
+
+perldelta - what is new for perl v5.16.2
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.16.1 release and
+the 5.16.2 release.
+
+If you are upgrading from an earlier release such as 5.16.0, first read
+L<perl5161delta>, which describes differences between 5.16.0 and
+5.16.1.
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with 5.16.0
+If any exist, they are bugs, and we request that you submit a
+report. See L</Reporting Bugs> below.
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 2.70 to version 2.76.
+
+=back
+
+=head1 Configuration and Compilation
+
+=over 4
+
+=item * configuration should no longer be confused by ls colorization
+
+=back
+
+=head1 Platform Support
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item AIX
+
+Configure now always adds -qlanglvl=extc99 to the CC flags on AIX when
+using xlC. This will make it easier to compile a number of XS-based modules
+that assume C99 [perl #113778].
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item * fix /\h/ equivalence with /[\h]/
+
+see [perl #114220]
+
+=back
+
+=head1 Known Problems
+
+There are no new known problems.
+
+=head1 Acknowledgements
+
+Perl 5.16.2 represents approximately 2 months of development since Perl
+5.16.1 and contains approximately 740 lines of changes across 20 files
+from 9 authors.
+
+Perl continues to flourish into its third decade thanks to a vibrant
+community of users and developers. The following people are known to
+have contributed the improvements that became Perl 5.16.2:
+
+Andy Dougherty, Craig A. Berry, Darin McBride, Dominic Hargreaves, Karen
+Etheridge, Karl Williamson, Peter Martini, Ricardo Signes, Tony Cook.
+
+The list above is almost certainly incomplete as it is automatically
+generated from version control history. In particular, it does not
+include the names of the (very much appreciated) contributors who
+reported issues to the Perl bug tracker.
+
+For a more complete list of all of Perl's historical contributors,
+please see the F<AUTHORS> file in the Perl source distribution.
+
+=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@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@perl.org. This points to a closed
+subscription unarchived mailing list, which includes all the core
+committers, who will 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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl561delta.pod b/Master/tlpkg/tlperl/lib/pods/perl561delta.pod
index 72c38f15a9b..49ff54f8983 100644
--- a/Master/tlpkg/tlperl/lib/pods/perl561delta.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perl561delta.pod
@@ -1,6 +1,6 @@
=head1 NAME
-perl561delta - what's new for perl v5.6.x
+perl561delta - what's new for perl v5.6.1
=head1 DESCRIPTION
@@ -2977,7 +2977,6 @@ You should use the new declaration syntax instead.
The C<use attrs> pragma is now obsolete, and is only provided for
backward-compatibility. See L<perlsub/"Subroutine Attributes">.
-
=item Premature end of script headers
See Server error.
@@ -3364,8 +3363,8 @@ Note that the above issue is not relevant to the default build of
Perl, whose interfaces continue to match those of prior versions
(but subject to the other options described here).
-See L<perlguts/"The Perl API"> for detailed information on the
-ramifications of building Perl with this option.
+See L<perlguts/Background and PERL_IMPLICIT_CONTEXT> for detailed information
+on the ramifications of building Perl with this option.
NOTE: PERL_IMPLICIT_CONTEXT is automatically enabled whenever Perl is built
with one of -Dusethreads, -Dusemultiplicity, or both. It is not
diff --git a/Master/tlpkg/tlperl/lib/pods/perl56delta.pod b/Master/tlpkg/tlperl/lib/pods/perl56delta.pod
index 91b4aede499..24c2072c253 100644
--- a/Master/tlpkg/tlperl/lib/pods/perl56delta.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perl56delta.pod
@@ -2372,7 +2372,6 @@ You should use the new declaration syntax instead.
The C<use attrs> pragma is now obsolete, and is only provided for
backward-compatibility. See L<perlsub/"Subroutine Attributes">.
-
=item Premature end of script headers
See Server error.
@@ -2759,7 +2758,8 @@ Note that the above issue is not relevant to the default build of
Perl, whose interfaces continue to match those of prior versions
(but subject to the other options described here).
-See L<perlguts/"The Perl API"> for detailed information on the
+
+See L<perlguts/Background and PERL_IMPLICIT_CONTEXT> for detailed information on the
ramifications of building Perl with this option.
NOTE: PERL_IMPLICIT_CONTEXT is automatically enabled whenever Perl is built
diff --git a/Master/tlpkg/tlperl/lib/pods/perl570delta.pod b/Master/tlpkg/tlperl/lib/pods/perl570delta.pod
deleted file mode 100644
index dcc2f0f1889..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl570delta.pod
+++ /dev/null
@@ -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@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@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@iki.fi>>, with many contributions
-from The Perl Porters and Perl Users submitting feedback and patches.
-
-Send omissions or corrections to <F<perlbug@perl.org>>.
-
-=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perl571delta.pod b/Master/tlpkg/tlperl/lib/pods/perl571delta.pod
deleted file mode 100644
index be36e044066..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl571delta.pod
+++ /dev/null
@@ -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@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@iki.fi>>, with many contributions
-from The Perl Porters and Perl Users submitting feedback and patches.
-
-Send omissions or corrections to <F<perlbug@perl.org>>.
-
-=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perl572delta.pod b/Master/tlpkg/tlperl/lib/pods/perl572delta.pod
deleted file mode 100644
index 67d091262e9..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl572delta.pod
+++ /dev/null
@@ -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@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@iki.fi>>, with many contributions
-from The Perl Porters and Perl Users submitting feedback and patches.
-
-Send omissions or corrections to <F<perlbug@perl.org>>.
-
-=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perl573delta.pod b/Master/tlpkg/tlperl/lib/pods/perl573delta.pod
deleted file mode 100644
index 00e73fed8bf..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl573delta.pod
+++ /dev/null
@@ -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-@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@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@iki.fi>>, with many contributions
-from The Perl Porters and Perl Users submitting feedback and patches.
-
-Send omissions or corrections to <F<perlbug@perl.org>>.
-
-=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perl589delta.pod b/Master/tlpkg/tlperl/lib/pods/perl589delta.pod
index 8cd1cf67348..f10099ccfa4 100644
--- a/Master/tlpkg/tlperl/lib/pods/perl589delta.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perl589delta.pod
@@ -1228,7 +1228,7 @@ Hanssen).
=item *
-L<reverse> function documentation received scalar context examples.
+C<reverse> function documentation received scalar context examples.
=back
@@ -1259,7 +1259,7 @@ L<perlsub> example is updated to use a lexical variable for C<opendir> syntax.
L<perlvar> fixes confusion about real GID C<$(> and effective GID C<$)>.
Perl thread tutorial example is fixed in section
-L<perlthrtut/Queues: Passing Data Around> and L<perlothrtut>.
+L<perlthrtut/Queues: Passing Data Around> and L<perlthrtut>.
L<perlhack> documentation extensively improved by Jarkko Hietaniemi and others.
@@ -2317,7 +2317,8 @@ the Perl 5 bugs at http://bugs.perl.org/
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@perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who be able
+unarchived mailing list, which includes
+all the core committers, who will 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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl58delta.pod b/Master/tlpkg/tlperl/lib/pods/perl58delta.pod
index f3a86798292..0612ca6bae9 100644
--- a/Master/tlpkg/tlperl/lib/pods/perl58delta.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perl58delta.pod
@@ -730,7 +730,7 @@ for details. [561]
=item *
-L<utime> now supports C<utime undef, undef, @files> to change the
+L<perlfunc/utime> now supports C<utime undef, undef, @files> to change the
file timestamps to the current time.
=item *
diff --git a/Master/tlpkg/tlperl/lib/pods/perl590delta.pod b/Master/tlpkg/tlperl/lib/pods/perl590delta.pod
deleted file mode 100644
index a19bf7a0768..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl590delta.pod
+++ /dev/null
@@ -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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl591delta.pod b/Master/tlpkg/tlperl/lib/pods/perl591delta.pod
deleted file mode 100644
index 349c49a40f2..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl591delta.pod
+++ /dev/null
@@ -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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl592delta.pod b/Master/tlpkg/tlperl/lib/pods/perl592delta.pod
deleted file mode 100644
index db8be417d2b..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl592delta.pod
+++ /dev/null
@@ -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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl593delta.pod b/Master/tlpkg/tlperl/lib/pods/perl593delta.pod
deleted file mode 100644
index 11f53ab0885..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl593delta.pod
+++ /dev/null
@@ -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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl594delta.pod b/Master/tlpkg/tlperl/lib/pods/perl594delta.pod
deleted file mode 100644
index aa4358bc504..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl594delta.pod
+++ /dev/null
@@ -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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perl595delta.pod b/Master/tlpkg/tlperl/lib/pods/perl595delta.pod
deleted file mode 100644
index 246b2cc7478..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perl595delta.pod
+++ /dev/null
@@ -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@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
diff --git a/Master/tlpkg/tlperl/lib/pods/perlaix.pod b/Master/tlpkg/tlperl/lib/pods/perlaix.pod
index 6437f51d5fa..97e94abcf25 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlaix.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlaix.pod
@@ -4,7 +4,7 @@ designed to be readable as is.
=head1 NAME
-README.aix - Perl version 5 on IBM AIX (UNIX) systems
+perlaix - Perl version 5 on IBM AIX (UNIX) systems
=head1 DESCRIPTION
diff --git a/Master/tlpkg/tlperl/lib/pods/perlapi.pod b/Master/tlpkg/tlperl/lib/pods/perlapi.pod
index 5c7a2b98bfd..57ddb06f97f 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlapi.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlapi.pod
@@ -12,7 +12,7 @@ perlapi - autogenerated documentation for the perl public API
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
+F<embed.pl>, specifically a listing of functions, macros, flags, and variables
that may be used by extension writers. L<At the end|/Undocumented functions>
is a list of functions which have yet to be documented. The interfaces of
those are subject to change without notice. Any functions not listed here are
@@ -151,8 +151,11 @@ 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. Perl equivalent: C<@myarray = ();>.
+Clears an array, making it empty. Does not free the memory the av uses to
+store its list of scalars. If any destructors are triggered as a result,
+the av itself may be freed when this function returns.
+
+Perl equivalent: C<@myarray = ();>.
void av_clear(AV *av)
@@ -168,7 +171,8 @@ 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)
+ void av_create_and_push(AV **const avp,
+ SV *const val)
=for hackers
Found in file av.c
@@ -183,7 +187,8 @@ 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)
+ SV** av_create_and_unshift_one(AV **const avp,
+ SV *const val)
=for hackers
Found in file av.c
@@ -240,6 +245,7 @@ See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for
more information on how to use this function on tied arrays.
The rough perl equivalent is C<$myarray[$idx]>.
+
SV** av_fetch(AV *av, I32 key, I32 lval)
=for hackers
@@ -295,6 +301,8 @@ X<av_pop>
Pops an SV off the end of the array. Returns C<&PL_sv_undef> if the array
is empty.
+Perl equivalent: C<pop(@myarray);>
+
SV* av_pop(AV *av)
=for hackers
@@ -304,7 +312,9 @@ Found in file av.c
X<av_push>
Pushes an SV onto the end of the array. The array will grow automatically
-to accommodate the addition. This takes ownership of one reference count.
+to accommodate the addition. This takes ownership of one reference count.
+
+Perl equivalent: C<push @myarray, $elem;>.
void av_push(AV *av, SV *val)
@@ -314,9 +324,12 @@ Found in file av.c
=item av_shift
X<av_shift>
-Shifts an SV off the beginning of the array. Returns C<&PL_sv_undef> if the
+Shifts an SV off the beginning of the
+array. Returns C<&PL_sv_undef> if the
array is empty.
+Perl equivalent: C<shift(@myarray);>
+
SV* av_shift(AV *av)
=for hackers
@@ -328,11 +341,16 @@ 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
+arrays). Otherwise, it can be dereferenced
+to get the C<SV*> that was stored
+there (= C<val>)).
+
+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.
+Approximate Perl equivalent: C<$myarray[$key] = $val;>.
+
See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for
more information on how to use this function on tied arrays.
@@ -344,7 +362,9 @@ Found in file av.c
=item av_undef
X<av_undef>
-Undefines the array. Frees the memory used by the array itself.
+Undefines the array. Frees the memory used by the av to store its list of
+scalars. If any destructors are triggered as a result, the av itself may
+be freed.
void av_undef(AV *av)
@@ -358,6 +378,8 @@ 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.
+Perl equivalent: C<unshift @myarray, ( (undef) x $n );>
+
void av_unshift(AV *av, I32 num)
=for hackers
@@ -366,11 +388,14 @@ Found in file av.c
=item get_av
X<get_av>
-Returns the AV of the specified Perl array. C<flags> are passed to
-C<gv_fetchpv>. If C<GV_ADD> is set and the
+Returns the AV of the specified Perl global or package array with the given
+name (so it won't work on lexical variables). C<flags> are passed
+to C<gv_fetchpv>. If C<GV_ADD> is set and the
Perl variable does not exist then it will be created. If C<flags> is zero
and the variable does not exist then NULL is returned.
+Perl equivalent: C<@{"$name"}>.
+
NOTE: the perl_ form of this function is deprecated.
AV* get_av(const char *name, I32 flags)
@@ -383,6 +408,8 @@ X<newAV>
Creates a new AV. The reference count is set to 1.
+Perl equivalent: C<my @array;>.
+
AV* newAV()
=for hackers
@@ -398,7 +425,8 @@ Sort an array. Here is an example:
Currently this always uses mergesort. See sortsv_flags for a more
flexible routine.
- void sortsv(SV** array, size_t num_elts, SVCOMPARE_t cmp)
+ void sortsv(SV** array, size_t num_elts,
+ SVCOMPARE_t cmp)
=for hackers
Found in file pp_sort.c
@@ -408,7 +436,8 @@ X<sortsv_flags>
Sort an array, with various options.
- void sortsv_flags(SV** array, size_t num_elts, SVCOMPARE_t cmp, U32 flags)
+ void sortsv_flags(SV** array, size_t num_elts,
+ SVCOMPARE_t cmp, U32 flags)
=for hackers
Found in file pp_sort.c
@@ -423,11 +452,15 @@ Found in file pp_sort.c
=item call_argv
X<call_argv>
-Performs a callback to the specified Perl sub. See L<perlcall>.
+Performs a callback to the specified named and package-scoped Perl subroutine
+with C<argv> (a NULL-terminated array of strings) as arguments. See L<perlcall>.
+
+Approximate Perl equivalent: C<&{"$sub_name"}(@$argv)>.
NOTE: the perl_ form of this function is deprecated.
- I32 call_argv(const char* sub_name, I32 flags, char** argv)
+ I32 call_argv(const char* sub_name, I32 flags,
+ char** argv)
=for hackers
Found in file perl.c
@@ -575,7 +608,7 @@ There are three variants for all the functions in this section. The base ones
operate using the character set of the platform Perl is running on. The ones
with an C<_A> suffix operate on the ASCII character set, and the ones with an
C<_L1> suffix operate on the full Latin1 character set. All are unaffected by
-locale
+locale and by C<use bytes>.
For ASCII platforms, the base function with no suffix and the one with the
C<_A> suffix are identical. The function with the C<_L1> suffix imposes the
@@ -734,19 +767,19 @@ 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
+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
+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
+code is in threads.xs create.
-CLONEf_CLONE_HOST
+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,
@@ -754,7 +787,10 @@ 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 *proto_perl, UV flags)
+ PerlInterpreter* perl_clone(
+ PerlInterpreter *proto_perl,
+ UV flags
+ )
=for hackers
Found in file sv.c
@@ -872,7 +908,9 @@ a string/length pair.
NOTE: this function is experimental and may change or be
removed without notice.
- COPHH * cophh_delete_pv(const COPHH *cophh, const char *key, U32 hash, U32 flags)
+ COPHH * cophh_delete_pv(const COPHH *cophh,
+ const char *key, U32 hash,
+ U32 flags)
=for hackers
Found in file cop.h
@@ -894,7 +932,10 @@ hash of the key string, or zero if it has not been precomputed.
NOTE: this function is experimental and may change or be
removed without notice.
- COPHH * cophh_delete_pvn(COPHH *cophh, const char *keypv, STRLEN keylen, U32 hash, U32 flags)
+ COPHH * cophh_delete_pvn(COPHH *cophh,
+ const char *keypv,
+ STRLEN keylen, U32 hash,
+ U32 flags)
=for hackers
Found in file cop.h
@@ -908,7 +949,8 @@ string/length pair, and no precomputed hash.
NOTE: this function is experimental and may change or be
removed without notice.
- COPHH * cophh_delete_pvs(const COPHH *cophh, const char *key, U32 flags)
+ COPHH * cophh_delete_pvs(const COPHH *cophh,
+ const char *key, U32 flags)
=for hackers
Found in file cop.h
@@ -922,7 +964,8 @@ string/length pair.
NOTE: this function is experimental and may change or be
removed without notice.
- COPHH * cophh_delete_sv(const COPHH *cophh, SV *key, U32 hash, U32 flags)
+ COPHH * cophh_delete_sv(const COPHH *cophh, SV *key,
+ U32 hash, U32 flags)
=for hackers
Found in file cop.h
@@ -936,7 +979,9 @@ a string/length pair.
NOTE: this function is experimental and may change or be
removed without notice.
- SV * cophh_fetch_pv(const COPHH *cophh, const char *key, U32 hash, U32 flags)
+ SV * cophh_fetch_pv(const COPHH *cophh,
+ const char *key, U32 hash,
+ U32 flags)
=for hackers
Found in file cop.h
@@ -955,7 +1000,10 @@ associated with the key.
NOTE: this function is experimental and may change or be
removed without notice.
- SV * cophh_fetch_pvn(const COPHH *cophh, const char *keypv, STRLEN keylen, U32 hash, U32 flags)
+ SV * cophh_fetch_pvn(const COPHH *cophh,
+ const char *keypv,
+ STRLEN keylen, U32 hash,
+ U32 flags)
=for hackers
Found in file cop.h
@@ -969,7 +1017,8 @@ string/length pair, and no precomputed hash.
NOTE: this function is experimental and may change or be
removed without notice.
- SV * cophh_fetch_pvs(const COPHH *cophh, const char *key, U32 flags)
+ SV * cophh_fetch_pvs(const COPHH *cophh,
+ const char *key, U32 flags)
=for hackers
Found in file cop.h
@@ -983,7 +1032,8 @@ string/length pair.
NOTE: this function is experimental and may change or be
removed without notice.
- SV * cophh_fetch_sv(const COPHH *cophh, SV *key, U32 hash, U32 flags)
+ SV * cophh_fetch_sv(const COPHH *cophh, SV *key,
+ U32 hash, U32 flags)
=for hackers
Found in file cop.h
@@ -1024,7 +1074,9 @@ a string/length pair.
NOTE: this function is experimental and may change or be
removed without notice.
- COPHH * cophh_store_pv(const COPHH *cophh, const char *key, U32 hash, SV *value, U32 flags)
+ COPHH * cophh_store_pv(const COPHH *cophh,
+ const char *key, U32 hash,
+ SV *value, U32 flags)
=for hackers
Found in file cop.h
@@ -1052,7 +1104,9 @@ be stored with referential integrity, but will be coerced to strings.
NOTE: this function is experimental and may change or be
removed without notice.
- COPHH * cophh_store_pvn(COPHH *cophh, const char *keypv, STRLEN keylen, U32 hash, SV *value, U32 flags)
+ COPHH * cophh_store_pvn(COPHH *cophh, const char *keypv,
+ STRLEN keylen, U32 hash,
+ SV *value, U32 flags)
=for hackers
Found in file cop.h
@@ -1066,7 +1120,9 @@ string/length pair, and no precomputed hash.
NOTE: this function is experimental and may change or be
removed without notice.
- COPHH * cophh_store_pvs(const COPHH *cophh, const char *key, SV *value, U32 flags)
+ COPHH * cophh_store_pvs(const COPHH *cophh,
+ const char *key, SV *value,
+ U32 flags)
=for hackers
Found in file cop.h
@@ -1080,7 +1136,8 @@ string/length pair.
NOTE: this function is experimental and may change or be
removed without notice.
- COPHH * cophh_store_sv(const COPHH *cophh, SV *key, U32 hash, SV *value, U32 flags)
+ COPHH * cophh_store_sv(const COPHH *cophh, SV *key,
+ U32 hash, SV *value, U32 flags)
=for hackers
Found in file cop.h
@@ -1110,7 +1167,9 @@ X<cop_hints_fetch_pv>
Like L</cop_hints_fetch_pvn>, but takes a nul-terminated string instead
of a string/length pair.
- SV * cop_hints_fetch_pv(const COP *cop, const char *key, U32 hash, U32 flags)
+ SV * cop_hints_fetch_pv(const COP *cop,
+ const char *key, U32 hash,
+ U32 flags)
=for hackers
Found in file cop.h
@@ -1126,7 +1185,10 @@ it has not been precomputed. Returns a mortal scalar copy of the value
associated with the key, or C<&PL_sv_placeholder> if there is no value
associated with the key.
- SV * cop_hints_fetch_pvn(const COP *cop, const char *keypv, STRLEN keylen, U32 hash, U32 flags)
+ SV * cop_hints_fetch_pvn(const COP *cop,
+ const char *keypv,
+ STRLEN keylen, U32 hash,
+ U32 flags)
=for hackers
Found in file cop.h
@@ -1137,7 +1199,8 @@ X<cop_hints_fetch_pvs>
Like L</cop_hints_fetch_pvn>, but takes a literal string instead of a
string/length pair, and no precomputed hash.
- SV * cop_hints_fetch_pvs(const COP *cop, const char *key, U32 flags)
+ SV * cop_hints_fetch_pvs(const COP *cop,
+ const char *key, U32 flags)
=for hackers
Found in file cop.h
@@ -1148,7 +1211,8 @@ X<cop_hints_fetch_sv>
Like L</cop_hints_fetch_pvn>, but takes a Perl scalar instead of a
string/length pair.
- SV * cop_hints_fetch_sv(const COP *cop, SV *key, U32 hash, U32 flags)
+ SV * cop_hints_fetch_sv(const COP *cop, SV *key,
+ U32 hash, U32 flags)
=for hackers
Found in file cop.h
@@ -1167,7 +1231,9 @@ Register a custom op. See L<perlguts/"Custom Operators">.
NOTE: this function must be explicitly called as Perl_custom_op_register with an aTHX_ parameter.
- void Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop)
+ void Perl_custom_op_register(pTHX_
+ Perl_ppaddr_t ppaddr,
+ const XOP *xop)
=for hackers
Found in file op.c
@@ -1180,7 +1246,7 @@ considered internal to OP_NAME and the other access macros: use them instead.
NOTE: this function must be explicitly called as Perl_custom_op_xop with an aTHX_ parameter.
- const XOP * Perl_custom_op_xop(pTHX_ const OP *o)
+ const XOP * Perl_custom_op_xop(pTHX_ const OP *o)
=for hackers
Found in file op.c
@@ -1249,7 +1315,12 @@ Found in file op.h
=item CvSTASH
X<CvSTASH>
-Returns the stash of the CV.
+Returns the stash of the CV. A stash is the symbol table hash, containing
+the package-scoped variables in the package where the subroutine was defined.
+For more information, see L<perlguts>.
+
+This also has a special use with XS AUTOLOAD subs.
+See L<perlguts/Autoloading with XSUBs>.
HV* CvSTASH(CV* cv)
@@ -1279,7 +1350,8 @@ then NULL is returned.
NOTE: the perl_ form of this function is deprecated.
- CV* get_cvn_flags(const char* name, STRLEN len, I32 flags)
+ CV* get_cvn_flags(const char* name, STRLEN len,
+ I32 flags)
=for hackers
Found in file perl.c
@@ -1291,6 +1363,20 @@ Found in file perl.c
=over 8
+=item cv_clone
+X<cv_clone>
+
+Clone a CV, making a lexical closure. I<proto> supplies the prototype
+of the function: its code, pad structure, and other attributes.
+The prototype is combined with a capture of outer lexicals to which the
+code refers, which are taken from the currently-executing instance of
+the immediately surrounding code.
+
+ CV * cv_clone(CV *proto)
+
+=for hackers
+Found in file pad.c
+
=item cv_undef
X<cv_undef>
@@ -1304,6 +1390,34 @@ children can still follow the full lexical scope chain.
=for hackers
Found in file pad.c
+=item find_rundefsv
+X<find_rundefsv>
+
+Find and return the variable that is named C<$_> in the lexical scope
+of the currently-executing function. This may be a lexical C<$_>,
+or will otherwise be the global one.
+
+ SV * find_rundefsv()
+
+=for hackers
+Found in file pad.c
+
+=item find_rundefsvoffset
+X<find_rundefsvoffset>
+
+Find the position of the lexical C<$_> in the pad of the
+currently-executing function. Returns the offset in the current pad,
+or C<NOT_IN_PAD> if there is no lexical C<$_> in scope (in which case
+the global one should be used instead).
+L</find_rundefsv> is likely to be more convenient.
+
+NOTE: the perl_ form of this function is deprecated.
+
+ PADOFFSET find_rundefsvoffset()
+
+=for hackers
+Found in file pad.c
+
=item load_module
X<load_module>
@@ -1311,7 +1425,7 @@ 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
+(or 0 for no flags). ver, if specified and not NULL, 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>. They must be
@@ -1320,6 +1434,8 @@ be omitted when the PERL_LOADMOD_NOIMPORT flag has been used.
Otherwise at least a single NULL pointer to designate the default
import list is required.
+The reference count for each specified C<SV*> parameter is decremented.
+
void load_module(U32 flags, SV* name, SV* ver, ...)
=for hackers
@@ -1336,19 +1452,156 @@ no threads.
=for hackers
Found in file perl.c
-=item pad_findmy
-X<pad_findmy>
+=item pad_add_anon
+X<pad_add_anon>
+
+Allocates a place in the currently-compiling pad (via L</pad_alloc>)
+for an anonymous function that is lexically scoped inside the
+currently-compiling function.
+The function I<func> is linked into the pad, and its C<CvOUTSIDE> link
+to the outer scope is weakened to avoid a reference loop.
+
+I<optype> should be an opcode indicating the type of operation that the
+pad entry is to support. This doesn't affect operational semantics,
+but is used for debugging.
+
+ PADOFFSET pad_add_anon(CV *func, I32 optype)
+
+=for hackers
+Found in file pad.c
+
+=item pad_add_name_pv
+X<pad_add_name_pv>
+
+Exactly like L</pad_add_name_pvn>, but takes a nul-terminated string
+instead of a string/length pair.
+
+ PADOFFSET pad_add_name_pv(const char *name, U32 flags,
+ HV *typestash, HV *ourstash)
+
+=for hackers
+Found in file pad.c
+
+=item pad_add_name_pvn
+X<pad_add_name_pvn>
+
+Allocates a place in the currently-compiling pad for a named lexical
+variable. Stores the name and other metadata in the name part of the
+pad, and makes preparations to manage the variable's lexical scoping.
+Returns the offset of the allocated pad slot.
+
+I<namepv>/I<namelen> specify the variable's name, including leading sigil.
+If I<typestash> is non-null, the name is for a typed lexical, and this
+identifies the type. If I<ourstash> is non-null, it's a lexical reference
+to a package variable, and this identifies the package. The following
+flags can be OR'ed together:
+
+ padadd_OUR redundantly specifies if it's a package var
+ padadd_STATE variable will retain value persistently
+ padadd_NO_DUP_CHECK skip check for lexical shadowing
+
+ PADOFFSET pad_add_name_pvn(const char *namepv,
+ STRLEN namelen, U32 flags,
+ HV *typestash, HV *ourstash)
+
+=for hackers
+Found in file pad.c
+
+=item pad_add_name_sv
+X<pad_add_name_sv>
+
+Exactly like L</pad_add_name_pvn>, but takes the name string in the form
+of an SV instead of a string/length pair.
-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_add_name_sv(SV *name, U32 flags,
+ HV *typestash, HV *ourstash)
+
+=for hackers
+Found in file pad.c
+
+=item pad_alloc
+X<pad_alloc>
+
+Allocates a place in the currently-compiling pad,
+returning the offset of the allocated pad slot.
+No name is initially attached to the pad slot.
+I<tmptype> is a set of flags indicating the kind of pad entry required,
+which will be set in the value SV for the allocated pad entry:
+
+ SVs_PADMY named lexical variable ("my", "our", "state")
+ SVs_PADTMP unnamed temporary store
+
+I<optype> should be an opcode indicating the type of operation that the
+pad entry is to support. This doesn't affect operational semantics,
+but is used for debugging.
NOTE: this function is experimental and may change or be
removed without notice.
- PADOFFSET pad_findmy(const char* name, STRLEN len, U32 flags)
+ PADOFFSET pad_alloc(I32 optype, U32 tmptype)
+
+=for hackers
+Found in file pad.c
+
+=item pad_compname_type
+X<pad_compname_type>
+
+Looks up the type of the lexical variable at position I<po> in the
+currently-compiling pad. If the variable is typed, the stash of the
+class to which it is typed is returned. If not, C<NULL> is returned.
+
+ HV * pad_compname_type(PADOFFSET po)
+
+=for hackers
+Found in file pad.c
+
+=item pad_findmy_pv
+X<pad_findmy_pv>
+
+Exactly like L</pad_findmy_pvn>, but takes a nul-terminated string
+instead of a string/length pair.
+
+ PADOFFSET pad_findmy_pv(const char *name, U32 flags)
+
+=for hackers
+Found in file pad.c
+
+=item pad_findmy_pvn
+X<pad_findmy_pvn>
+
+Given the name of a lexical variable, find its position in the
+currently-compiling pad.
+I<namepv>/I<namelen> specify the variable's name, including leading sigil.
+I<flags> is reserved and must be zero.
+If it is not in the current pad but appears in the pad of any lexically
+enclosing scope, then a pseudo-entry for it is added in the current pad.
+Returns the offset in the current pad,
+or C<NOT_IN_PAD> if no such lexical is in scope.
+
+ PADOFFSET pad_findmy_pvn(const char *namepv,
+ STRLEN namelen, U32 flags)
+
+=for hackers
+Found in file pad.c
+
+=item pad_findmy_sv
+X<pad_findmy_sv>
+
+Exactly like L</pad_findmy_pvn>, but takes the name string in the form
+of an SV instead of a string/length pair.
+
+ PADOFFSET pad_findmy_sv(SV *name, U32 flags)
+
+=for hackers
+Found in file pad.c
+
+=item pad_setsv
+X<pad_setsv>
+
+Set the value at offset I<po> in the current (compiling or executing) pad.
+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
@@ -1356,10 +1609,30 @@ Found in file pad.c
=item pad_sv
X<pad_sv>
-Get the value at offset po in the current pad.
+Get the value at offset I<po> in the current (compiling or executing) pad.
Use macro PAD_SV instead of calling this function directly.
- SV* pad_sv(PADOFFSET po)
+ SV * pad_sv(PADOFFSET po)
+
+=for hackers
+Found in file pad.c
+
+=item pad_tidy
+X<pad_tidy>
+
+Tidy up a pad at the end of compilation of the code to which it belongs.
+Jobs performed here are: remove most stuff from the pads of anonsub
+prototypes; give it a @_; mark temporaries as such. I<type> indicates
+the kind of subroutine:
+
+ padtidy_SUB ordinary subroutine
+ padtidy_SUBCLONE prototype for lexical closure
+ padtidy_FORMAT format
+
+NOTE: this function is experimental and may change or be
+removed without notice.
+
+ void pad_tidy(padtidy_type type)
=for hackers
Found in file pad.c
@@ -1369,7 +1642,7 @@ X<perl_alloc>
Allocates a new Perl interpreter. See L<perlembed>.
- PerlInterpreter* perl_alloc()
+ PerlInterpreter* perl_alloc()
=for hackers
Found in file perl.c
@@ -1409,7 +1682,9 @@ X<perl_parse>
Tells a Perl interpreter to parse a Perl script. See L<perlembed>.
- int perl_parse(PerlInterpreter *my_perl, XSINIT_t xsinit, int argc, char** argv, char** env)
+ int perl_parse(PerlInterpreter *my_perl,
+ XSINIT_t xsinit, int argc,
+ char** argv, char** env)
=for hackers
Found in file perl.c
@@ -1458,7 +1733,8 @@ 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)
+ char* pv_display(SV *dsv, const char *pv, STRLEN cur,
+ STRLEN len, STRLEN pvlim)
=for hackers
Found in file dump.c
@@ -1500,7 +1776,10 @@ sequences, whereas '%' is not a particularly common character in patterns.
Returns a pointer to the escaped text as held by dsv.
- char* pv_escape(SV *dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags)
+ 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
@@ -1527,7 +1806,11 @@ any quotes or ellipses.
Returns a pointer to the prettified text as held by dsv.
- 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)
+ 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
@@ -1547,7 +1830,7 @@ Return the description of a given custom op. This was once used by the
OP_DESC macro, but is no longer: it has only been kept for
compatibility, and should not be used.
- const char * custom_op_desc(const OP *o)
+ const char * custom_op_desc(const OP *o)
=for hackers
Found in file mathoms.c
@@ -1559,7 +1842,7 @@ Return the name for a given custom op. This was once used by the OP_NAME
macro, but is no longer: it has only been kept for compatibility, and
should not be used.
- const char * custom_op_name(const OP *o)
+ const char * custom_op_name(const OP *o)
=for hackers
Found in file mathoms.c
@@ -1567,7 +1850,7 @@ Found in file mathoms.c
=item gv_fetchmethod
X<gv_fetchmethod>
-See L<gv_fetchmethod_autoload>.
+See L</gv_fetchmethod_autoload>.
GV* gv_fetchmethod(HV* stash, const char* name)
@@ -1580,7 +1863,10 @@ 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)
+ 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
@@ -1616,6 +1902,7 @@ 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
@@ -1626,7 +1913,8 @@ X<sv_catpvn_mg>
Like C<sv_catpvn>, but also handles 'set' magic.
- void sv_catpvn_mg(SV *sv, const char *ptr, STRLEN len)
+ void sv_catpvn_mg(SV *sv, const char *ptr,
+ STRLEN len)
=for hackers
Found in file mathoms.c
@@ -1772,6 +2060,7 @@ Found in file mathoms.c
X<sv_taint>
Taint an SV. Use C<SvTAINTED_on> instead.
+
void sv_taint(SV* sv)
=for hackers
@@ -1829,7 +2118,10 @@ 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)
+ 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
@@ -1882,7 +2174,8 @@ Provides system-specific tune up of the C runtime environment necessary to
run Perl interpreters. This should be called only once, before creating
any Perl interpreters.
- void PERL_SYS_INIT3(int argc, char** argv, char** env)
+ void PERL_SYS_INIT3(int argc, char** argv,
+ char** env)
=for hackers
Found in file perl.h
@@ -1923,7 +2216,10 @@ C<DB::sub>, since that has the correct line number/etc. for the call
site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
frame for the sub call itself.
- const PERL_CONTEXT * caller_cx(I32 level, const PERL_CONTEXT **dbcxp)
+ const PERL_CONTEXT * caller_cx(
+ I32 level,
+ const PERL_CONTEXT **dbcxp
+ )
=for hackers
Found in file pp_ctl.c
@@ -1955,7 +2251,9 @@ X<packlist>
The engine implementing pack() Perl function.
- void packlist(SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist)
+ void packlist(SV *cat, const char *pat,
+ const char *patend, SV **beglist,
+ SV **endlist)
=for hackers
Found in file pp_pack.c
@@ -1967,7 +2265,9 @@ 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)
+ I32 unpackstring(const char *pat,
+ const char *patend, const char *s,
+ const char *strend, U32 flags)
=for hackers
Found in file pp_pack.c
@@ -2006,7 +2306,9 @@ X<ibcmp_utf8>
This is a synonym for (! foldEQ_utf8())
- I32 ibcmp_utf8(const char *s1, char **pe1, UV l1, bool u1, const char *s2, char **pe2, UV l2, bool u2)
+ I32 ibcmp_utf8(const char *s1, char **pe1, UV l1,
+ bool u1, const char *s2, char **pe2,
+ UV l2, bool u2)
=for hackers
Found in file utf8.h
@@ -2034,7 +2336,8 @@ X<ibcmp_locale>
This is a synonym for (! foldEQ_locale())
- I32 ibcmp_locale(const char* a, const char* b, I32 len)
+ I32 ibcmp_locale(const char* a, const char* b,
+ I32 len)
=for hackers
Found in file util.h
@@ -2046,6 +2349,38 @@ Found in file util.h
=over 8
+=item PL_check
+X<PL_check>
+
+Array, indexed by opcode, of functions that will be called for the "check"
+phase of optree building during compilation of Perl code. For most (but
+not all) types of op, once the op has been initially built and populated
+with child ops it will be filtered through the check function referenced
+by the appropriate element of this array. The new op is passed in as the
+sole argument to the check function, and the check function returns the
+completed op. The check function may (as the name suggests) check the op
+for validity and signal errors. It may also initialise or modify parts of
+the ops, or perform more radical surgery such as adding or removing child
+ops, or even throw the op away and return a different op in its place.
+
+This array of function pointers is a convenient place to hook into the
+compilation process. An XS module can put its own custom check function
+in place of any of the standard ones, to influence the compilation of a
+particular type of op. However, a custom check function must never fully
+replace a standard check function (or even a custom check function from
+another module). A module modifying checking must instead B<wrap> the
+preexisting check function. A custom check function must be selective
+about when to apply its custom behaviour. In the usual case where
+it decides not to do anything special with an op, it must chain the
+preexisting op function. Check functions are thus linked in a chain,
+with the core's base checker at the end.
+
+For thread safety, modules should not write directly to this array.
+Instead, use the function L</wrap_op_checker>.
+
+=for hackers
+Found in file perlvars.h
+
=item PL_keyword_plugin
X<PL_keyword_plugin>
@@ -2135,22 +2470,10 @@ 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::.
+Like L</gv_fetchmeth_pvn>, but lacks a flags parameter.
-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)
+ GV* gv_fetchmeth(HV* stash, const char* name,
+ STRLEN len, I32 level)
=for hackers
Found in file gv.c
@@ -2180,7 +2503,9 @@ 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)
+ GV* gv_fetchmethod_autoload(HV* stash,
+ const char* name,
+ I32 autoload)
=for hackers
Found in file gv.c
@@ -2188,14 +2513,175 @@ Found in file gv.c
=item gv_fetchmeth_autoload
X<gv_fetchmeth_autoload>
-Same as gv_fetchmeth(), but looks for autoloaded subroutines too.
+This is the old form of L</gv_fetchmeth_pvn_autoload>, which has no flags
+parameter.
+
+ GV* gv_fetchmeth_autoload(HV* stash,
+ const char* name,
+ STRLEN len, I32 level)
+
+=for hackers
+Found in file gv.c
+
+=item gv_fetchmeth_pv
+X<gv_fetchmeth_pv>
+
+Exactly like L</gv_fetchmeth_pvn>, but takes a nul-terminated string
+instead of a string/length pair.
+
+ GV* gv_fetchmeth_pv(HV* stash, const char* name,
+ I32 level, U32 flags)
+
+=for hackers
+Found in file gv.c
+
+=item gv_fetchmeth_pvn
+X<gv_fetchmeth_pvn>
+
+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.
+
+Currently, the only significant value for C<flags> is SVf_UTF8.
+
+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_pvn(HV* stash, const char* name,
+ STRLEN len, I32 level,
+ U32 flags)
+
+=for hackers
+Found in file gv.c
+
+=item gv_fetchmeth_pvn_autoload
+X<gv_fetchmeth_pvn_autoload>
+
+Same as gv_fetchmeth_pvn(), 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)
+Currently, the only significant value for C<flags> is SVf_UTF8.
+
+ GV* gv_fetchmeth_pvn_autoload(HV* stash,
+ const char* name,
+ STRLEN len, I32 level,
+ U32 flags)
+
+=for hackers
+Found in file gv.c
+
+=item gv_fetchmeth_pv_autoload
+X<gv_fetchmeth_pv_autoload>
+
+Exactly like L</gv_fetchmeth_pvn_autoload>, but takes a nul-terminated string
+instead of a string/length pair.
+
+ GV* gv_fetchmeth_pv_autoload(HV* stash,
+ const char* name,
+ I32 level, U32 flags)
+
+=for hackers
+Found in file gv.c
+
+=item gv_fetchmeth_sv
+X<gv_fetchmeth_sv>
+
+Exactly like L</gv_fetchmeth_pvn>, but takes the name string in the form
+of an SV instead of a string/length pair.
+
+ GV* gv_fetchmeth_sv(HV* stash, SV* namesv,
+ I32 level, U32 flags)
+
+=for hackers
+Found in file gv.c
+
+=item gv_fetchmeth_sv_autoload
+X<gv_fetchmeth_sv_autoload>
+
+Exactly like L</gv_fetchmeth_pvn_autoload>, but takes the name string in the form
+of an SV instead of a string/length pair.
+
+ GV* gv_fetchmeth_sv_autoload(HV* stash, SV* namesv,
+ I32 level, U32 flags)
+
+=for hackers
+Found in file gv.c
+
+=item gv_init
+X<gv_init>
+
+The old form of gv_init_pvn(). It does not work with UTF8 strings, as it
+has no flags parameter. If the C<multi> parameter is set, the
+GV_ADDMULTI flag will be passed to gv_init_pvn().
+
+ void gv_init(GV* gv, HV* stash, const char* name,
+ STRLEN len, int multi)
+
+=for hackers
+Found in file gv.c
+
+=item gv_init_pv
+X<gv_init_pv>
+
+Same as gv_init_pvn(), but takes a nul-terminated string for the name
+instead of separate char * and length parameters.
+
+ void gv_init_pv(GV* gv, HV* stash, const char* name,
+ U32 flags)
+
+=for hackers
+Found in file gv.c
+
+=item gv_init_pvn
+X<gv_init_pvn>
+
+Converts a scalar into a typeglob. This is an incoercible typeglob;
+assigning a reference to it will assign to one of its slots, instead of
+overwriting it as happens with typeglobs created by SvSetSV. Converting
+any scalar that is SvOK() may produce unpredictable results and is reserved
+for perl's internal use.
+
+C<gv> is the scalar to be converted.
+
+C<stash> is the parent stash/package, if any.
+
+C<name> and C<len> give the name. The name must be unqualified;
+that is, it must not include the package name. If C<gv> is a
+stash element, it is the caller's responsibility to ensure that the name
+passed to this function matches the name of the element. If it does not
+match, perl's internal bookkeeping will get out of sync.
+
+C<flags> can be set to SVf_UTF8 if C<name> is a UTF8 string, or
+the return value of SvUTF8(sv). It can also take the
+GV_ADDMULTI flag, which means to pretend that the GV has been
+seen before (i.e., suppress "Used once" warnings).
+
+ void gv_init_pvn(GV* gv, HV* stash, const char* name,
+ STRLEN len, U32 flags)
+
+=for hackers
+Found in file gv.c
+
+=item gv_init_sv
+X<gv_init_sv>
+
+Same as gv_init_pvn(), but takes an SV * for the name instead of separate
+char * and length parameters. C<flags> is currently unused.
+
+ void gv_init_sv(GV* gv, HV* stash, SV* namesv,
+ U32 flags)
=for hackers
Found in file gv.c
@@ -2222,7 +2708,8 @@ 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)
+ HV* gv_stashpvn(const char* name, U32 namelen,
+ I32 flags)
=for hackers
Found in file gv.c
@@ -2307,6 +2794,37 @@ Found in file handy.h
=over 8
+=item cop_fetch_label
+X<cop_fetch_label>
+
+Returns the label attached to a cop.
+The flags pointer may be set to C<SVf_UTF8> or 0.
+
+NOTE: this function is experimental and may change or be
+removed without notice.
+
+ const char * cop_fetch_label(COP *const cop,
+ STRLEN *len, U32 *flags)
+
+=for hackers
+Found in file hv.c
+
+=item cop_store_label
+X<cop_store_label>
+
+Save a label into a C<cop_hints_hash>. You need to set flags to C<SVf_UTF8>
+for a utf-8 label.
+
+NOTE: this function is experimental and may change or be
+removed without notice.
+
+ void cop_store_label(COP *const cop,
+ const char *label, STRLEN len,
+ U32 flags)
+
+=for hackers
+Found in file hv.c
+
=item get_hv
X<get_hv>
@@ -2463,6 +2981,26 @@ caches.
=for hackers
Found in file hv.h
+=item HvENAMELEN
+X<HvENAMELEN>
+
+Returns the length of the stash's effective name.
+
+ STRLEN HvENAMELEN(HV *stash)
+
+=for hackers
+Found in file hv.h
+
+=item HvENAMEUTF8
+X<HvENAMEUTF8>
+
+Returns true if the effective name is in UTF8 encoding.
+
+ unsigned char HvENAMEUTF8(HV *stash)
+
+=for hackers
+Found in file hv.h
+
=item HvNAME
X<HvNAME>
@@ -2474,6 +3012,26 @@ See C<SvSTASH>, C<CvSTASH>.
=for hackers
Found in file hv.h
+=item HvNAMELEN
+X<HvNAMELEN>
+
+Returns the length of the stash's name.
+
+ STRLEN HvNAMELEN(HV *stash)
+
+=for hackers
+Found in file hv.h
+
+=item HvNAMEUTF8
+X<HvNAMEUTF8>
+
+Returns true if the name is in UTF8 encoding.
+
+ unsigned char HvNAMEUTF8(HV *stash)
+
+=for hackers
+Found in file hv.h
+
=item hv_assert
X<hv_assert>
@@ -2487,7 +3045,11 @@ Found in file hv.c
=item hv_clear
X<hv_clear>
-Clears a hash, making it empty.
+Frees the all the elements of a hash, leaving it empty.
+The XS equivalent of C<%hash = ()>. See also L</hv_undef>.
+
+If any destructors are triggered as a result, the hv itself may
+be freed.
void hv_clear(HV *hv)
@@ -2527,12 +3089,15 @@ Found in file hv.c
=item hv_delete
X<hv_delete>
-Deletes a key/value pair in the hash. The value's SV is removed from the
-hash, made mortal, 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. NULL will also be returned if the key is not found.
+Deletes a key/value pair in the hash. The value's SV is removed from
+the hash, made mortal, and returned to the caller. The absolute
+value of C<klen> is the length of the key. If C<klen> is negative the
+key is assumed to be in UTF-8-encoded Unicode. The C<flags> value
+will normally be zero; if set to G_DISCARD then NULL will be returned.
+NULL will also be returned if the key is not found.
- SV* hv_delete(HV *hv, const char *key, I32 klen, I32 flags)
+ SV* hv_delete(HV *hv, const char *key, I32 klen,
+ I32 flags)
=for hackers
Found in file hv.c
@@ -2546,7 +3111,8 @@ zero; if set to G_DISCARD then NULL will be returned. NULL will also be
returned if the key is not found. C<hash> can be a valid precomputed hash
value, or 0 to ask for it to be computed.
- SV* hv_delete_ent(HV *hv, SV *keysv, I32 flags, U32 hash)
+ SV* hv_delete_ent(HV *hv, SV *keysv, I32 flags,
+ U32 hash)
=for hackers
Found in file hv.c
@@ -2555,7 +3121,8 @@ Found in file hv.c
X<hv_exists>
Returns a boolean indicating whether the specified hash key exists. The
-C<klen> is the length of the key.
+absolute value of C<klen> is the length of the key. If C<klen> is
+negative the key is assumed to be in UTF-8-encoded Unicode.
bool hv_exists(HV *hv, const char *key, I32 klen)
@@ -2565,7 +3132,8 @@ 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>
+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.
@@ -2577,15 +3145,17 @@ 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*>.
+Returns the SV which corresponds to the specified key in the hash.
+The absolute value of C<klen> is the length of the key. If C<klen> is
+negative the key is assumed to be in UTF-8-encoded Unicode. 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 *hv, const char *key, I32 klen, I32 lval)
+ SV** hv_fetch(HV *hv, const char *key, I32 klen,
+ I32 lval)
=for hackers
Found in file hv.c
@@ -2614,7 +3184,8 @@ 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 *hv, SV *keysv, I32 lval, U32 hash)
+ HE* hv_fetch_ent(HV *hv, SV *keysv, I32 lval,
+ U32 hash)
=for hackers
Found in file hv.c
@@ -2637,7 +3208,7 @@ Found in file hv.c
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(hv)>). The return value is
+keys in the hash (i.e. the same as C<HvUSEDKEYS(hv)>). 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
@@ -2710,7 +3281,7 @@ 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
+C<&PL_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.
@@ -2756,9 +3327,13 @@ 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
+Stores an SV in a hash. The hash key is specified as C<key> and the
+absolute value of C<klen> is the length of the key. If C<klen> is
+negative the key is assumed to be in UTF-8-encoded Unicode. 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
@@ -2776,7 +3351,8 @@ 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 *hv, const char *key, I32 klen, SV *val, U32 hash)
+ SV** hv_store(HV *hv, const char *key, I32 klen,
+ SV *val, U32 hash)
=for hackers
Found in file hv.c
@@ -2787,7 +3363,8 @@ 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)
+ SV** hv_stores(HV* tb, const char* key,
+ NULLOK SV* val)
=for hackers
Found in file handy.h
@@ -2826,7 +3403,15 @@ Found in file hv.c
=item hv_undef
X<hv_undef>
-Undefines the hash.
+Undefines the hash. The XS equivalent of C<undef(%hash)>.
+
+As well as freeing all the elements of the hash (like hv_clear()), this
+also frees any auxiliary data and storage associated with the hash.
+
+If any destructors are triggered as a result, the hv itself may
+be freed.
+
+See also L</hv_clear>.
void hv_undef(HV *hv)
@@ -2846,6 +3431,57 @@ Found in file hv.h
=back
+=head1 Hook manipulation
+
+=over 8
+
+=item wrap_op_checker
+X<wrap_op_checker>
+
+Puts a C function into the chain of check functions for a specified op
+type. This is the preferred way to manipulate the L</PL_check> array.
+I<opcode> specifies which type of op is to be affected. I<new_checker>
+is a pointer to the C function that is to be added to that opcode's
+check chain, and I<old_checker_p> points to the storage location where a
+pointer to the next function in the chain will be stored. The value of
+I<new_pointer> is written into the L</PL_check> array, while the value
+previously stored there is written to I<*old_checker_p>.
+
+L</PL_check> is global to an entire process, and a module wishing to
+hook op checking may find itself invoked more than once per process,
+typically in different threads. To handle that situation, this function
+is idempotent. The location I<*old_checker_p> must initially (once
+per process) contain a null pointer. A C variable of static duration
+(declared at file scope, typically also marked C<static> to give
+it internal linkage) will be implicitly initialised appropriately,
+if it does not have an explicit initialiser. This function will only
+actually modify the check chain if it finds I<*old_checker_p> to be null.
+This function is also thread safe on the small scale. It uses appropriate
+locking to avoid race conditions in accessing L</PL_check>.
+
+When this function is called, the function referenced by I<new_checker>
+must be ready to be called, except for I<*old_checker_p> being unfilled.
+In a threading situation, I<new_checker> may be called immediately,
+even before this function has returned. I<*old_checker_p> will always
+be appropriately set before I<new_checker> is called. If I<new_checker>
+decides not to do anything special with an op that it is given (which
+is the usual case for most uses of op check hooking), it must chain the
+check function referenced by I<*old_checker_p>.
+
+If you want to influence compilation of calls to a specific subroutine,
+then use L</cv_set_call_checker> rather than hooking checking of all
+C<entersub> ops.
+
+ void wrap_op_checker(Optype opcode,
+ Perl_check_t new_checker,
+ Perl_check_t *old_checker_p)
+
+=for hackers
+Found in file op.c
+
+
+=back
+
=head1 Lexer interface
=over 8
@@ -3063,9 +3699,8 @@ from which code will be read to be parsed. If both are non-null, the
code in I<line> comes first and must consist of complete lines of input,
and I<rsfp> supplies the remainder of the source.
-The I<flags> parameter is reserved for future use, and must always
-be zero, except for one flag that is currently reserved for perl's internal
-use.
+The I<flags> parameter is reserved for future use. Currently it is only
+used by perl internally, so extensions should always pass zero.
NOTE: this function is experimental and may change or be
removed without notice.
@@ -3124,7 +3759,8 @@ function is more convenient.
NOTE: this function is experimental and may change or be
removed without notice.
- void lex_stuff_pvn(const char *pv, STRLEN len, U32 flags)
+ void lex_stuff_pvn(const char *pv, STRLEN len,
+ U32 flags)
=for hackers
Found in file toke.c
@@ -3593,7 +4229,8 @@ 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)
+ int mg_copy(SV *sv, SV *nsv, const char *key,
+ I32 klen)
=for hackers
Found in file mg.c
@@ -3614,7 +4251,8 @@ X<mg_findext>
Finds the magic pointer of C<type> with the given C<vtbl> for the C<SV>. See
C<sv_magicext>.
- MAGIC* mg_findext(const SV* sv, int type, const MGVTBL *vtbl)
+ MAGIC* mg_findext(const SV* sv, int type,
+ const MGVTBL *vtbl)
=for hackers
Found in file mg.c
@@ -3642,7 +4280,7 @@ 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>.
+Do magic before a value is retrieved from the SV. See C<sv_magic>.
int mg_get(SV* sv)
@@ -3747,7 +4385,7 @@ Found in file sv.h
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.
+ssv. May evaluate arguments more than once.
void SvSetSV_nosteal(SV* dsv, SV* ssv)
@@ -3837,7 +4475,7 @@ 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
+PERL_MEM_LOG (see L<perlhacktips/PERL_MEM_LOG>). The older API is still
there for use in XS modules supporting older perls.
void Newx(void* ptr, int nitems, type)
@@ -3903,7 +4541,8 @@ 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)
+ void PoisonWith(void* dest, int nitems, type,
+ U8 byte)
=for hackers
Found in file handy.h
@@ -3993,7 +4632,8 @@ 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)
+ char* savesharedpvn(const char *const pv,
+ const STRLEN len)
=for hackers
Found in file util.c
@@ -4089,7 +4729,9 @@ 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* littlestr, U32 flags)
+ char* fbm_instr(unsigned char* big,
+ unsigned char* bigend, SV* littlestr,
+ U32 flags)
=for hackers
Found in file util.c
@@ -4113,7 +4755,8 @@ X<foldEQ_locale>
Returns true if the leading len bytes of the strings s1 and s2 are the same
case-insensitively in the current locale; false otherwise.
- I32 foldEQ_locale(const char* a, const char* b, I32 len)
+ I32 foldEQ_locale(const char* a, const char* b,
+ I32 len)
=for hackers
Found in file util.c
@@ -4202,7 +4845,8 @@ 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, ...)
+ int my_snprintf(char *buffer, const Size_t len,
+ const char *format, ...)
=for hackers
Found in file util.c
@@ -4228,7 +4872,8 @@ 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)
+ int my_vsnprintf(char *buffer, const Size_t len,
+ const char *format, va_list ap)
=for hackers
Found in file util.c
@@ -4256,7 +4901,11 @@ actually perform the parsing. Can use either strict or lax validation rules.
Can optionally set a number of hint variables to save the parsing code
some time when tokenizing.
- const char* prescan_version(const char *s, bool strict, const char** errstr, bool *sqv, int *ssaw_decimal, int *swidth, bool *salpha)
+ const char* prescan_version(const char *s, bool strict,
+ const char** errstr,
+ bool *sqv,
+ int *ssaw_decimal,
+ int *swidth, bool *salpha)
=for hackers
Found in file util.c
@@ -4280,7 +4929,7 @@ 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 *s, SV *rv, bool qv)
+ const char* scan_version(const char *s, SV *rv, bool qv)
=for hackers
Found in file util.c
@@ -4523,10 +5172,9 @@ Found in file util.c
=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
+Returns the mro linearisation for the given stash. By default, this
+will be whatever C<mro_get_linear_isa_dfs> returns unless some
+other MRO is in effect for the stash. The return value is a
read-only AV*.
You are responsible for C<SvREFCNT_inc()> on the
@@ -4548,7 +5196,7 @@ 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
+perl source outside of F<mro.c> should be
replaced by calls to this.
Perl automatically handles most of the common
@@ -4573,6 +5221,16 @@ via, C<mro::method_changed_in(classname)>.
=for hackers
Found in file mro.c
+=item mro_register
+X<mro_register>
+
+Registers a custom mro plugin. See L<perlmroapi> for details.
+
+ void mro_register(const struct mro_alg *mro)
+
+=for hackers
+Found in file mro.c
+
=back
@@ -4583,7 +5241,7 @@ Found in file mro.c
=item dMULTICALL
X<dMULTICALL>
-Declare local variables for a multicall. See L<perlcall/Lightweight Callbacks>.
+Declare local variables for a multicall. See L<perlcall/LIGHTWEIGHT CALLBACKS>.
dMULTICALL;
@@ -4593,7 +5251,7 @@ Found in file cop.h
=item MULTICALL
X<MULTICALL>
-Make a lightweight callback. See L<perlcall/Lightweight Callbacks>.
+Make a lightweight callback. See L<perlcall/LIGHTWEIGHT CALLBACKS>.
MULTICALL;
@@ -4604,7 +5262,7 @@ Found in file cop.h
X<POP_MULTICALL>
Closing bracket for a lightweight callback.
-See L<perlcall/Lightweight Callbacks>.
+See L<perlcall/LIGHTWEIGHT CALLBACKS>.
POP_MULTICALL;
@@ -4615,7 +5273,7 @@ Found in file cop.h
X<PUSH_MULTICALL>
Opening bracket for a lightweight callback.
-See L<perlcall/Lightweight Callbacks>.
+See L<perlcall/LIGHTWEIGHT CALLBACKS>.
PUSH_MULTICALL;
@@ -4653,7 +5311,8 @@ 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)
+ UV grok_bin(const char* start, STRLEN* len_p,
+ I32* flags, NV *result)
=for hackers
Found in file numeric.c
@@ -4682,7 +5341,8 @@ 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)
+ UV grok_hex(const char* start, STRLEN* len_p,
+ I32* flags, NV *result)
=for hackers
Found in file numeric.c
@@ -4708,7 +5368,8 @@ 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)
+ int grok_number(const char *pv, STRLEN len,
+ UV *valuep)
=for hackers
Found in file numeric.c
@@ -4718,7 +5379,8 @@ X<grok_numeric_radix>
Scan and skip for a numeric decimal separator (radix).
- bool grok_numeric_radix(const char **sp, const char *send)
+ bool grok_numeric_radix(const char **sp,
+ const char *send)
=for hackers
Found in file numeric.c
@@ -4745,7 +5407,8 @@ 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)
+ UV grok_oct(const char* start, STRLEN* len_p,
+ I32* flags, NV *result)
=for hackers
Found in file numeric.c
@@ -4786,7 +5449,8 @@ X<scan_bin>
For backwards compatibility. Use C<grok_bin> instead.
- NV scan_bin(const char* start, STRLEN len, STRLEN* retlen)
+ NV scan_bin(const char* start, STRLEN len,
+ STRLEN* retlen)
=for hackers
Found in file numeric.c
@@ -4796,7 +5460,8 @@ X<scan_hex>
For backwards compatibility. Use C<grok_hex> instead.
- NV scan_hex(const char* start, STRLEN len, STRLEN* retlen)
+ NV scan_hex(const char* start, STRLEN len,
+ STRLEN* retlen)
=for hackers
Found in file numeric.c
@@ -4806,7 +5471,8 @@ X<scan_oct>
For backwards compatibility. Use C<grok_oct> instead.
- NV scan_oct(const char* start, STRLEN len, STRLEN* retlen)
+ NV scan_oct(const char* start, STRLEN len,
+ STRLEN* retlen)
=for hackers
Found in file numeric.c
@@ -4838,7 +5504,8 @@ will be set automatically, and, shifted up eight bits, the eight bits
of C<op_private>, except that the bit with value 1 or 2 is automatically
set as required.
- OP * newASSIGNOP(I32 flags, OP *left, I32 optype, OP *right)
+ OP * newASSIGNOP(I32 flags, OP *left, I32 optype,
+ OP *right)
=for hackers
Found in file op.c
@@ -4854,7 +5521,8 @@ the eight bits of C<op_private>, except that the bit with value 1 or
two ops to be the direct children of the binary op; they are consumed
by this function and become part of the constructed op tree.
- OP * newBINOP(I32 type, I32 flags, OP *first, OP *last)
+ OP * newBINOP(I32 type, I32 flags, OP *first,
+ OP *last)
=for hackers
Found in file op.c
@@ -4870,7 +5538,8 @@ I<first> supplies the expression selecting between the two branches,
and I<trueop> and I<falseop> supply the branches; they are consumed by
this function and become part of the constructed op tree.
- OP * newCONDOP(I32 flags, OP *first, OP *trueop, OP *falseop)
+ OP * newCONDOP(I32 flags, OP *first, OP *trueop,
+ OP *falseop)
=for hackers
Found in file op.c
@@ -4895,7 +5564,8 @@ op and, shifted up eight bits, the eight bits of C<op_private> for
the C<leaveloop> op, except that (in both cases) some bits will be set
automatically.
- OP * newFOROP(I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
+ OP * newFOROP(I32 flags, OP *sv, OP *expr, OP *block,
+ OP *cont)
=for hackers
Found in file op.c
@@ -4910,7 +5580,8 @@ are consumed by this function and become part of the constructed op tree.
I<defsv_off> is the pad offset of the scalar lexical variable that will
be affected.
- OP * newGIVENOP(OP *cond, OP *block, PADOFFSET defsv_off)
+ OP * newGIVENOP(OP *cond, OP *block,
+ PADOFFSET defsv_off)
=for hackers
Found in file op.c
@@ -4938,7 +5609,8 @@ C<OPf_KIDS> will be set automatically if required. I<first> and I<last>
supply up to two ops to be direct children of the list op; they are
consumed by this function and become part of the constructed op tree.
- OP * newLISTOP(I32 type, I32 flags, OP *first, OP *last)
+ OP * newLISTOP(I32 type, I32 flags, OP *first,
+ OP *last)
=for hackers
Found in file op.c
@@ -4954,7 +5626,8 @@ automatically set. I<first> supplies the expression controlling the
flow, and I<other> supplies the side (alternate) chain of ops; they are
consumed by this function and become part of the constructed op tree.
- OP * newLOGOP(I32 type, I32 flags, OP *first, OP *other)
+ OP * newLOGOP(I32 type, I32 flags, OP *first,
+ OP *other)
=for hackers
Found in file op.c
@@ -4985,7 +5658,8 @@ supplies the body of the loop; they are consumed by this function and
become part of the constructed op tree. I<debuggable> is currently
unused and should always be 1.
- OP * newLOOPOP(I32 flags, I32 debuggable, OP *expr, OP *block)
+ OP * newLOOPOP(I32 flags, I32 debuggable, OP *expr,
+ OP *block)
=for hackers
Found in file op.c
@@ -5083,7 +5757,8 @@ set as required. I<listval> and I<subscript> supply the parameters of
the slice; they are consumed by this function and become part of the
constructed op tree.
- OP * newSLICEOP(I32 flags, OP *subscript, OP *listval)
+ OP * newSLICEOP(I32 flags, OP *subscript,
+ OP *listval)
=for hackers
Found in file op.c
@@ -5173,7 +5848,9 @@ automatically. I<debuggable> is currently unused and should always be 1.
I<has_my> can be supplied as true to force the
loop body to be enclosed in its own scope.
- OP * newWHILEOP(I32 flags, I32 debuggable, LOOP *loop, OP *expr, OP *block, OP *cont, I32 has_my)
+ OP * newWHILEOP(I32 flags, I32 debuggable,
+ LOOP *loop, OP *expr, OP *block,
+ OP *cont, I32 has_my)
=for hackers
Found in file op.c
@@ -5225,7 +5902,8 @@ exception at the top level of parsing which covers all the compilation
errors that occurred. In the error message, the callee is referred to
by the name defined by the I<namegv> parameter.
- OP * ck_entersub_args_proto(OP *entersubop, GV *namegv, SV *protosv)
+ OP * ck_entersub_args_proto(OP *entersubop,
+ GV *namegv, SV *protosv)
=for hackers
Found in file op.c
@@ -5254,7 +5932,9 @@ exception at the top level of parsing which covers all the compilation
errors that occurred. In the error message, the callee is referred to
by the name defined by the I<namegv> parameter.
- OP * ck_entersub_args_proto_or_list(OP *entersubop, GV *namegv, SV *protosv)
+ OP * ck_entersub_args_proto_or_list(OP *entersubop,
+ GV *namegv,
+ SV *protosv)
=for hackers
Found in file op.c
@@ -5300,7 +5980,9 @@ and the SV parameter is I<cv> itself. This implements standard
prototype processing. It can be changed, for a particular subroutine,
by L</cv_set_call_checker>.
- void cv_get_call_checker(CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p)
+ void cv_get_call_checker(CV *cv,
+ Perl_call_checker *ckfun_p,
+ SV **ckobj_p)
=for hackers
Found in file op.c
@@ -5329,7 +6011,9 @@ such as to a call to a different subroutine or to a method call.
The current setting for a particular CV can be retrieved by
L</cv_get_call_checker>.
- void cv_set_call_checker(CV *cv, Perl_call_checker ckfun, SV *ckobj)
+ void cv_set_call_checker(CV *cv,
+ Perl_call_checker ckfun,
+ SV *ckobj)
=for hackers
Found in file op.c
@@ -5351,15 +6035,28 @@ Found in file op.h
=item newCONSTSUB
X<newCONSTSUB>
+See L</newCONSTSUB_flags>.
+
+ CV* newCONSTSUB(HV* stash, const char* name, SV* sv)
+
+=for hackers
+Found in file op.c
+
+=item newCONSTSUB_flags
+X<newCONSTSUB_flags>
+
Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
eligible for inlining at compile-time.
+Currently, the only useful value for C<flags> is SVf_UTF8.
+
Passing NULL for SV creates a constant sub equivalent to C<sub BAR () {}>,
which won't be called if used as a destructor, but will suppress the overhead
of a call to C<AUTOLOAD>. (This form, however, isn't eligible for inlining at
compile time.)
- CV* newCONSTSUB(HV* stash, const char* name, SV* sv)
+ CV* newCONSTSUB_flags(HV* stash, const char* name,
+ STRLEN len, U32 flags, SV* sv)
=for hackers
Found in file op.c
@@ -5423,7 +6120,7 @@ X<OP_DESC>
Return a short description of the provided OP.
- const char * OP_DESC(OP *o)
+ const char * OP_DESC(OP *o)
=for hackers
Found in file op.h
@@ -5469,7 +6166,7 @@ X<OP_NAME>
Return the name of the provided OP. For core ops this looks up the name
from the op_type; for custom ops from the op_ppaddr.
- const char * OP_NAME(OP *o)
+ const char * OP_NAME(OP *o)
=for hackers
Found in file op.h
@@ -5552,6 +6249,183 @@ Found in file op.c
=back
+=head1 Pad Data Structures
+
+=over 8
+
+=item CvPADLIST
+X<CvPADLIST>
+
+CV's can have CvPADLIST(cv) set to point to an AV. This is the CV's
+scratchpad, which stores lexical variables and opcode temporary and
+per-thread values.
+
+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 the REFCNT of its component items managed "manually"
+(mostly in pad.c) rather than by normal av.c rules. So we turn off AvREAL
+just before freeing it, to let av.c know not to touch the entries.
+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.
+
+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 (accessed through the macros COP_SEQ_RANGE_LOW and
+_HIGH). During compilation, these fields may hold the special value
+PERL_PADSEQ_INTRO to indicate various stages:
+
+ COP_SEQ_RANGE_LOW _HIGH
+ ----------------- -----
+ PERL_PADSEQ_INTRO 0 variable not yet introduced: { my ($x
+ valid-seq# PERL_PADSEQ_INTRO variable in scope: { my ($x)
+ valid-seq# valid-seq# compilation of scope complete: { my ($x) }
+
+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 SVs_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();
+
+For state vars, SVs_PADSTALE is overloaded to mean 'not yet initialised'
+
+NOTE: this function is experimental and may change or be
+removed without notice.
+
+ PADLIST * CvPADLIST(CV *cv)
+
+=for hackers
+Found in file pad.c
+
+=item pad_add_name_pvs
+X<pad_add_name_pvs>
+
+Exactly like L</pad_add_name_pvn>, but takes a literal string instead
+of a string/length pair.
+
+ PADOFFSET pad_add_name_pvs(const char *name, U32 flags,
+ HV *typestash, HV *ourstash)
+
+=for hackers
+Found in file pad.h
+
+=item pad_findmy_pvs
+X<pad_findmy_pvs>
+
+Exactly like L</pad_findmy_pvn>, but takes a literal string instead
+of a string/length pair.
+
+ PADOFFSET pad_findmy_pvs(const char *name, U32 flags)
+
+=for hackers
+Found in file pad.h
+
+=item pad_new
+X<pad_new>
+
+Create a new padlist, updating the global variables for the
+currently-compiling padlist to point to the new padlist. The following
+flags can be OR'ed together:
+
+ padnew_CLONE this pad is for a cloned CV
+ padnew_SAVE save old globals on the save stack
+ padnew_SAVESUB also save extra stuff for start of sub
+
+ PADLIST * pad_new(int flags)
+
+=for hackers
+Found in file pad.c
+
+=item PL_comppad
+X<PL_comppad>
+
+During compilation, this points to the array containing the values
+part of the pad for the currently-compiling code. (At runtime a CV may
+have many such value arrays; at compile time just one is constructed.)
+At runtime, this points to the array containing the currently-relevant
+values for the pad for the currently-executing code.
+
+NOTE: this function is experimental and may change or be
+removed without notice.
+
+=for hackers
+Found in file pad.c
+
+=item PL_comppad_name
+X<PL_comppad_name>
+
+During compilation, this points to the array containing the names part
+of the pad for the currently-compiling code.
+
+NOTE: this function is experimental and may change or be
+removed without notice.
+
+=for hackers
+Found in file pad.c
+
+=item PL_curpad
+X<PL_curpad>
+
+Points directly to the body of the L</PL_comppad> array.
+(I.e., this is C<AvARRAY(PL_comppad)>.)
+
+NOTE: this function is experimental and may change or be
+removed without notice.
+
+=for hackers
+Found in file pad.c
+
+
+=back
+
=head1 Per-Interpreter Variables
=over 8
@@ -5698,7 +6572,7 @@ equivalent to the following snippet:
NULL will be returned if a REGEXP* is not found.
- REGEXP * SvRX(SV *sv)
+ REGEXP * SvRX(SV *sv)
=for hackers
Found in file regexp.h
@@ -6451,6 +7325,18 @@ Found in file sv.h
=over 8
+=item boolSV
+X<boolSV>
+
+Returns a true SV if C<b> is a true value, or a false SV if C<b> is 0.
+
+See also C<PL_sv_yes> and C<PL_sv_no>.
+
+ SV * boolSV(bool b)
+
+=for hackers
+Found in file sv.h
+
=item croak_xs_usage
X<croak_xs_usage>
@@ -6461,9 +7347,10 @@ A specialised variant of C<croak()> for emitting the usage message for xsubs
works out the package name and subroutine name from C<cv>, and then calls
C<croak()>. Hence if C<cv> is C<&ouch::awk>, it would call C<croak> as:
- Perl_croak(aTHX_ "Usage: %s::%s(%s)", "ouch" "awk", "eee_yow");
+ Perl_croak(aTHX_ "Usage: %"SVf"::%"SVf"(%s)", "ouch" "awk", "eee_yow");
- void croak_xs_usage(const CV *const cv, const char *const params)
+ void croak_xs_usage(const CV *const cv,
+ const char *const params)
=for hackers
Found in file universal.c
@@ -6500,7 +7387,8 @@ X<newSVpvn_utf8>
Creates a new SV and copies a string into it. If utf8 is true, calls
C<SvUTF8_on> on the new SV. Implemented as a wrapper around C<newSVpvn_flags>.
- SV* newSVpvn_utf8(NULLOK const char* s, STRLEN len, U32 utf8)
+ SV* newSVpvn_utf8(NULLOK const char* s, STRLEN len,
+ U32 utf8)
=for hackers
Found in file sv.h
@@ -6529,9 +7417,14 @@ Found in file sv.h
=item SvEND
X<SvEND>
-Returns a pointer to the last character in the string which is in the SV.
+Returns a pointer to the spot just after the last character in
+the string which is in the SV, where there is usually a trailing
+null (even though Perl scalars do not strictly require it).
See C<SvCUR>. Access the character as *(SvEND(sv)).
+Warning: If C<SvCUR> is equal to C<SvLEN>, then C<SvEND> points to
+unallocated memory.
+
char* SvEND(SV* sv)
=for hackers
@@ -6540,10 +7433,12 @@ Found in file sv.h
=item SvGAMAGIC
X<SvGAMAGIC>
-Returns true if the SV has get magic or overloading. If either is true then
+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
+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.
U32 SvGAMAGIC(SV* sv)
@@ -6648,9 +7543,9 @@ Found in file sv.h
=item SvIsCOW
X<SvIsCOW>
-Returns a boolean indicating whether the SV is Copy-On-Write. (either shared
+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)
+COW).
bool SvIsCOW(SV* sv)
@@ -6671,7 +7566,7 @@ Found in file sv.h
=item SvIV
X<SvIV>
-Coerces the given SV to an integer and returns it. See C<SvIVx> for a
+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)
@@ -6683,7 +7578,7 @@ Found in file sv.h
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()>.
+Only use when you are sure SvIOK is true. See also C<SvIV()>.
IV SvIVX(SV* sv)
@@ -6693,8 +7588,9 @@ 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,
+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)
@@ -6842,7 +7738,7 @@ 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
+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)
@@ -6854,7 +7750,7 @@ Found in file sv.h
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()>.
+Only use when you are sure SvNOK is true. See also C<SvNV()>.
NV SvNVX(SV* sv)
@@ -6864,8 +7760,9 @@ 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,
+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)
@@ -6924,9 +7821,9 @@ X<SvOOK_offset>
Reads into I<len> the offset from SvPVX back to the true start of the
allocated buffer, which will be non-zero if C<sv_chop> has been used to
-efficiently remove characters from start of the buffer. Implemented as a
+efficiently remove characters from start of the buffer. Implemented as a
macro, which takes the address of I<len>, which must be of type C<STRLEN>.
-Evaluates I<sv> more than once. Sets I<len> to 0 if C<SvOOK(sv)> is false.
+Evaluates I<sv> more than once. Sets I<len> to 0 if C<SvOOK(sv)> is false.
void SvOOK_offset(NN SV*sv, STRLEN len)
@@ -7002,7 +7899,7 @@ 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
+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)
@@ -7124,6 +8021,9 @@ X<SvPVX>
Returns a pointer to the physical string in the SV. The SV must contain a
string.
+This is also used to store the name of an autoloaded subroutine in an XS
+AUTOLOAD routine. See L<perlguts/Autoloading with XSUBs>.
+
char* SvPVX(SV* sv)
=for hackers
@@ -7134,7 +8034,7 @@ 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>.
+more efficient C<SvPV>.
char* SvPVx(SV* sv, STRLEN len)
@@ -7158,7 +8058,7 @@ 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.
+directly. Doesn't process magic.
char* SvPV_force_nomg(SV* sv, STRLEN len)
@@ -7396,7 +8296,11 @@ Found in file sv.h
=item SvTAINT
X<SvTAINT>
-Taints an SV if tainting is enabled.
+Taints an SV if tainting is enabled, and if some input to the current
+expression is tainted--usually a variable, but possibly also implicit
+inputs such as locale settings. C<SvTAINT> propagates that taintedness to
+the outputs of an expression in a pessimistic fashion; i.e., without paying
+attention to precisely which outputs are influenced by which inputs.
void SvTAINT(SV* sv)
@@ -7406,7 +8310,7 @@ Found in file sv.h
=item SvTAINTED
X<SvTAINTED>
-Checks to see if an SV is tainted. Returns TRUE if it is, FALSE if
+Checks to see if an SV is tainted. Returns TRUE if it is, FALSE if
not.
bool SvTAINTED(SV* sv)
@@ -7417,8 +8321,8 @@ 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
+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
@@ -7497,7 +8401,8 @@ Found in file sv.h
=item SvUTF8
X<SvUTF8>
-Returns a U32 value indicating whether the SV contains UTF-8 encoded data.
+Returns a U32 value indicating the UTF-8 status of an SV. If things are set-up
+properly, this indicates whether or not the SV contains UTF-8 encoded data.
Call this after SvPV() in case any call to string overloading updates the
internal flag.
@@ -7509,7 +8414,8 @@ Found in file sv.h
=item SvUTF8_off
X<SvUTF8_off>
-Unsets the UTF-8 status of an SV.
+Unsets the UTF-8 status of an SV (the data is not changed, just the flag).
+Do not use frivolously.
void SvUTF8_off(SV *sv)
@@ -7542,7 +8448,7 @@ Found in file sv.h
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()>.
+Only use when you are sure SvIOK is true. See also C<SvUV()>.
UV SvUVX(SV* sv)
@@ -7552,8 +8458,9 @@ 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,
+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)
@@ -7596,7 +8503,8 @@ X<sv_catpvn_nomg>
Like C<sv_catpvn> but doesn't process magic.
- void sv_catpvn_nomg(SV* sv, const char* ptr, STRLEN len)
+ void sv_catpvn_nomg(SV* sv, const char* ptr,
+ STRLEN len)
=for hackers
Found in file sv.h
@@ -7624,11 +8532,50 @@ Found in file sv.h
=item sv_derived_from
X<sv_derived_from>
+Exactly like L</sv_derived_from_pv>, but doesn't take a C<flags> parameter.
+
+ bool sv_derived_from(SV* sv, const char *const name)
+
+=for hackers
+Found in file universal.c
+
+=item sv_derived_from_pv
+X<sv_derived_from_pv>
+
+Exactly like L</sv_derived_from_pvn>, but takes a nul-terminated string
+instead of a string/length pair.
+
+ bool sv_derived_from_pv(SV* sv,
+ const char *const name,
+ U32 flags)
+
+=for hackers
+Found in file universal.c
+
+=item sv_derived_from_pvn
+X<sv_derived_from_pvn>
+
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 *const name)
+Currently, the only significant value for C<flags> is SVf_UTF8.
+
+ bool sv_derived_from_pvn(SV* sv,
+ const char *const name,
+ const STRLEN len, U32 flags)
+
+=for hackers
+Found in file universal.c
+
+=item sv_derived_from_sv
+X<sv_derived_from_sv>
+
+Exactly like L</sv_derived_from_pvn>, but takes the name string in the form
+of an SV instead of a string/length pair.
+
+ bool sv_derived_from_sv(SV* sv, SV *namesv,
+ U32 flags)
=for hackers
Found in file universal.c
@@ -7636,10 +8583,42 @@ Found in file universal.c
=item sv_does
X<sv_does>
+Like L</sv_does_pv>, but doesn't take a C<flags> parameter.
+
+ bool sv_does(SV* sv, const char *const name)
+
+=for hackers
+Found in file universal.c
+
+=item sv_does_pv
+X<sv_does_pv>
+
+Like L</sv_does_sv>, but takes a nul-terminated string instead of an SV.
+
+ bool sv_does_pv(SV* sv, const char *const name,
+ U32 flags)
+
+=for hackers
+Found in file universal.c
+
+=item sv_does_pvn
+X<sv_does_pvn>
+
+Like L</sv_does_sv>, but takes a string/length pair instead of an SV.
+
+ bool sv_does_pvn(SV* sv, const char *const name,
+ const STRLEN len, U32 flags)
+
+=for hackers
+Found in file universal.c
+
+=item sv_does_sv
+X<sv_does_sv>
+
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 *const name)
+ bool sv_does_sv(SV* sv, SV* namesv, U32 flags)
=for hackers
Found in file universal.c
@@ -7647,7 +8626,7 @@ Found in file universal.c
=item sv_report_used
X<sv_report_used>
-Dump the contents of all SVs not yet freed. (Debugging aid).
+Dump the contents of all SVs not yet freed (debugging aid).
void sv_report_used()
@@ -7667,7 +8646,7 @@ Found in file sv.h
=item sv_utf8_upgrade_nomg
X<sv_utf8_upgrade_nomg>
-Like sv_utf8_upgrade, but doesn't do magic on C<sv>
+Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
STRLEN sv_utf8_upgrade_nomg(NN SV *sv)
@@ -7686,7 +8665,8 @@ 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.
+non-numeric warning), even if your atof() doesn't grok them. Get-magic is
+ignored.
I32 looks_like_number(SV *const sv)
@@ -7715,7 +8695,7 @@ 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
+L<perlhacktips/PERL_MEM_LOG>). The older API is still there for use in XS
modules supporting older perls.
SV* newSV(const STRLEN len)
@@ -7727,7 +8707,7 @@ Found in file sv.c
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)
+point to the shared string table where possible. Returns a new (undefined)
SV if the hek is NULL.
SV* newSVhek(const HEK *const hek)
@@ -7783,10 +8763,12 @@ 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.
+Creates a new SV and copies a buffer into it, which may contain NUL characters
+(C<\0>) and other binary data. The reference count for the SV is set to 1.
+Note that if C<len> is zero, Perl will create a zero length (Perl) string. You
+are responsible for ensuring that the source buffer is at least
+C<len> bytes long. If the C<buffer> argument is NULL the new SV will be
+undefined.
SV* newSVpvn(const char *const s, const STRLEN len)
@@ -7802,14 +8784,17 @@ 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.
Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
-returning. If C<SVf_UTF8> is set, C<s> is considered to be in UTF-8 and the
+returning. If C<SVf_UTF8> is set, C<s>
+is considered to be in UTF-8 and the
C<SVf_UTF8> flag will be set on the new SV.
C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
#define newSVpvn_utf8(s, len, u) \
newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
- SV* newSVpvn_flags(const char *const s, const STRLEN len, const U32 flags)
+ SV* newSVpvn_flags(const char *const s,
+ const STRLEN len,
+ const U32 flags)
=for hackers
Found in file sv.c
@@ -7818,10 +8803,11 @@ Found in file sv.c
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
+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 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.
@@ -7881,7 +8867,8 @@ 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 *const rv, const char *const classname)
+ SV* newSVrv(SV *const rv,
+ const char *const classname)
=for hackers
Found in file sv.c
@@ -7890,7 +8877,7 @@ Found in file sv.c
X<newSVsv>
Creates a new SV which is an exact duplicate of the original SV.
-(Uses C<sv_setsv>).
+(Uses C<sv_setsv>.)
SV* newSVsv(SV *const old)
@@ -7935,7 +8922,7 @@ Found in file sv.c
X<sv_2bool_flags>
This function is only used by sv_true() and friends, and only if
-the latter's argument is neither SvPOK, SvIOK nor SvNOK. If the flags
+the latter's argument is neither SvPOK, SvIOK nor SvNOK. If the flags
contain SV_GMAGIC, then it does an mg_get() first.
@@ -7951,7 +8938,8 @@ 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 gv_fetchsv.
- CV* sv_2cv(SV* sv, HV **const st, GV **const gvp, const I32 lref)
+ CV* sv_2cv(SV* sv, HV **const st, GV **const gvp,
+ const I32 lref)
=for hackers
Found in file sv.c
@@ -7963,6 +8951,9 @@ 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.
+'Get' magic is ignored on the sv passed in, but will be called on
+C<SvRV(sv)> if sv is an RV.
+
IO* sv_2io(SV *const sv)
=for hackers
@@ -7986,7 +8977,7 @@ 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>
+string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
and C<sv_mortalcopy>.
SV* sv_2mortal(SV *const sv)
@@ -7998,7 +8989,7 @@ Found in file sv.c
X<sv_2nv_flags>
Return the num value of an SV, doing any necessary string or integer
-conversion. If flags includes SV_GMAGIC, does an mg_get() first.
+conversion. If flags includes SV_GMAGIC, does an mg_get() first.
Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
NV sv_2nv_flags(SV *const sv, const I32 flags)
@@ -8015,7 +9006,7 @@ side-effect.
Usually accessed via the C<SvPVbyte> macro.
- char* sv_2pvbyte(SV *const sv, STRLEN *const lp)
+ char* sv_2pvbyte(SV *sv, STRLEN *const lp)
=for hackers
Found in file sv.c
@@ -8028,7 +9019,7 @@ 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 *const sv, STRLEN *const lp)
+ char* sv_2pvutf8(SV *sv, STRLEN *const lp)
=for hackers
Found in file sv.c
@@ -8037,12 +9028,12 @@ Found in file sv.c
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.
+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 *const sv, STRLEN *const lp, const I32 flags)
+ char* sv_2pv_flags(SV *const sv, STRLEN *const lp,
+ const I32 flags)
=for hackers
Found in file sv.c
@@ -8062,7 +9053,7 @@ Found in file sv.c
=item sv_backoff
X<sv_backoff>
-Remove any string offset. You should normally use the C<SvOOK_off> macro
+Remove any string offset. You should normally use the C<SvOOK_off> macro
wrapper instead.
int sv_backoff(SV *const sv)
@@ -8102,10 +9093,11 @@ 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
+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 *const sv, const char *const pat, ...)
+ void sv_catpvf(SV *const sv, const char *const pat,
+ ...)
=for hackers
Found in file sv.c
@@ -8115,7 +9107,8 @@ X<sv_catpvf_mg>
Like C<sv_catpvf>, but also handles 'set' magic.
- void sv_catpvf_mg(SV *const sv, const char *const pat, ...)
+ void sv_catpvf_mg(SV *const sv,
+ const char *const pat, ...)
=for hackers
Found in file sv.c
@@ -8139,11 +9132,15 @@ 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
+If C<flags> has the C<SV_SMAGIC> bit set, will
+C<mg_set> on C<dsv> afterwards if appropriate.
+C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
in terms of this function.
- void sv_catpvn_flags(SV *const dstr, const char *sstr, const STRLEN len, const I32 flags)
+ void sv_catpvn_flags(SV *const dstr,
+ const char *sstr,
+ const STRLEN len,
+ const I32 flags)
=for hackers
Found in file sv.c
@@ -8164,7 +9161,8 @@ X<sv_catpvs_flags>
Like C<sv_catpvn_flags>, but takes a literal string instead of a
string/length pair.
- void sv_catpvs_flags(SV* sv, const char* s, I32 flags)
+ void sv_catpvs_flags(SV* sv, const char* s,
+ I32 flags)
=for hackers
Found in file handy.h
@@ -8196,10 +9194,11 @@ X<sv_catpv_flags>
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. If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get>
-on the SVs if appropriate, else not.
+be valid UTF-8. If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
+on the modified SV if appropriate.
- void sv_catpv_flags(SV *dstr, const char *sstr, const I32 flags)
+ void sv_catpv_flags(SV *dstr, const char *sstr,
+ const I32 flags)
=for hackers
Found in file sv.c
@@ -8231,10 +9230,13 @@ 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>
+bit set, will C<mg_get> on the C<ssv>, if appropriate, before
+reading it. If the C<flags> contain C<SV_SMAGIC>, C<mg_set> will be
+called on the modified SV afterward, if appropriate. C<sv_catsv>
and C<sv_catsv_nomg> are implemented in terms of this function.
- void sv_catsv_flags(SV *const dsv, SV *const ssv, const I32 flags)
+ void sv_catsv_flags(SV *const dsv, SV *const ssv,
+ const I32 flags)
=for hackers
Found in file sv.c
@@ -8245,10 +9247,15 @@ 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".
+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.
+The unfortunate similarity of this function's name to that of Perl's C<chop>
+operator is strictly coincidental. This function works from the left;
+C<chop> works from the right.
+
void sv_chop(SV *const sv, const char *const ptr)
=for hackers
@@ -8258,10 +9265,10 @@ Found in file sv.c
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
+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
+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.
@@ -8275,7 +9282,7 @@ 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
+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 *const sv1, SV *const sv2)
@@ -8288,11 +9295,12 @@ X<sv_cmp_flags>
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 and will coerce its args to strings
-if necessary. If the flags include SV_GMAGIC, it handles get magic. See
+C<sv2>. Is UTF-8 and 'use bytes' aware and will coerce its args to strings
+if necessary. If the flags include SV_GMAGIC, it handles get magic. See
also C<sv_cmp_locale_flags>.
- I32 sv_cmp_flags(SV *const sv1, SV *const sv2, const U32 flags)
+ I32 sv_cmp_flags(SV *const sv1, SV *const sv2,
+ const U32 flags)
=for hackers
Found in file sv.c
@@ -8300,7 +9308,7 @@ 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
+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>.
@@ -8312,11 +9320,13 @@ Found in file sv.c
=item sv_cmp_locale_flags
X<sv_cmp_locale_flags>
-Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
-'use bytes' aware and will coerce its args to strings if necessary. If the
-flags contain SV_GMAGIC, it handles get magic. See also C<sv_cmp_flags>.
+Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
+'use bytes' aware and will coerce its args to strings if necessary. If the
+flags contain SV_GMAGIC, it handles get magic. See also C<sv_cmp_flags>.
- I32 sv_cmp_locale_flags(SV *const sv1, SV *const sv2, const U32 flags)
+ I32 sv_cmp_locale_flags(SV *const sv1,
+ SV *const sv2,
+ const U32 flags)
=for hackers
Found in file sv.c
@@ -8324,7 +9334,7 @@ Found in file sv.c
=item sv_collxfrm
X<sv_collxfrm>
-This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag. See
+This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag. See
C<sv_collxfrm_flags>.
char* sv_collxfrm(SV *const sv, STRLEN *const nxp)
@@ -8335,7 +9345,7 @@ Found in file sv.c
=item sv_collxfrm_flags
X<sv_collxfrm_flags>
-Add Collate Transform magic to an SV if it doesn't already have it. If the
+Add Collate Transform magic to an SV if it doesn't already have it. If the
flags contain SV_GMAGIC, it handles get-magic.
Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
@@ -8343,7 +9353,9 @@ 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_flags(SV *const sv, STRLEN *const nxp, I32 const flags)
+ char* sv_collxfrm_flags(SV *const sv,
+ STRLEN *const nxp,
+ I32 const flags)
=for hackers
Found in file sv.c
@@ -8368,7 +9380,7 @@ Found in file sv.c
X<sv_dec>
Auto-decrement of the value in the SV, doing string to numeric conversion
-if necessary. Handles 'get' magic and operator overloading.
+if necessary. Handles 'get' magic and operator overloading.
void sv_dec(SV *const sv)
@@ -8379,7 +9391,7 @@ Found in file sv.c
X<sv_dec_nomg>
Auto-decrement of the value in the SV, doing string to numeric conversion
-if necessary. Handles operator overloading. Skips handling 'get' magic.
+if necessary. Handles operator overloading. Skips handling 'get' magic.
void sv_dec_nomg(SV *const sv)
@@ -8390,7 +9402,7 @@ Found in file sv.c
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
+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)
@@ -8402,8 +9414,8 @@ Found in file sv.c
X<sv_eq_flags>
Returns a boolean indicating whether the strings in the two SVs are
-identical. Is UTF-8 and 'use bytes' aware and coerces its args to strings
-if necessary. If the flags include SV_GMAGIC, it handles get-magic, too.
+identical. Is UTF-8 and 'use bytes' aware and coerces its args to strings
+if necessary. If the flags include SV_GMAGIC, it handles get-magic, too.
I32 sv_eq_flags(SV* sv1, SV* sv2, const U32 flags)
@@ -8416,14 +9428,16 @@ 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
+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 unreffing. C<sv_force_normal> calls this function
+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 unreffing. C<sv_force_normal> calls this function
with flags set to 0.
- void sv_force_normal_flags(SV *const sv, const U32 flags)
+ void sv_force_normal_flags(SV *const sv,
+ const U32 flags)
=for hackers
Found in file sv.c
@@ -8447,7 +9461,8 @@ 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 *const sv, PerlIO *const fp, I32 append)
+ char* sv_gets(SV *const sv, PerlIO *const fp,
+ I32 append)
=for hackers
Found in file sv.c
@@ -8468,7 +9483,7 @@ Found in file sv.c
X<sv_inc>
Auto-increment of the value in the SV, doing string to numeric conversion
-if necessary. Handles 'get' magic and operator overloading.
+if necessary. Handles 'get' magic and operator overloading.
void sv_inc(SV *const sv)
@@ -8479,7 +9494,7 @@ Found in file sv.c
X<sv_inc_nomg>
Auto-increment of the value in the SV, doing string to numeric conversion
-if necessary. Handles operator overloading. Skips handling 'get' magic.
+if necessary. Handles operator overloading. Skips handling 'get' magic.
void sv_inc_nomg(SV *const sv)
@@ -8489,10 +9504,13 @@ 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. Handles get magic.
+Inserts a string at the specified offset/length within the SV. Similar to
+the Perl substr() function. Handles get magic.
- void sv_insert(SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen)
+ void sv_insert(SV *const bigstr, const STRLEN offset,
+ const STRLEN len,
+ const char *const little,
+ const STRLEN littlelen)
=for hackers
Found in file sv.c
@@ -8500,9 +9518,15 @@ Found in file sv.c
=item sv_insert_flags
X<sv_insert_flags>
-Same as C<sv_insert>, but the extra C<flags> are passed the C<SvPV_force_flags> that applies to C<bigstr>.
+Same as C<sv_insert>, but the extra C<flags> are passed to the
+C<SvPV_force_flags> that applies to C<bigstr>.
- void sv_insert_flags(SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
+ void sv_insert_flags(SV *const bigstr,
+ const STRLEN offset,
+ const STRLEN len,
+ const char *const little,
+ const STRLEN littlelen,
+ const U32 flags)
=for hackers
Found in file sv.c
@@ -8534,7 +9558,7 @@ Found in file sv.c
=item sv_len
X<sv_len>
-Returns the length of the string in the SV. Handles magic and type
+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 *const sv)
@@ -8546,7 +9570,7 @@ Found in file sv.c
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.
+UTF-8 bytes as a single character. Handles magic and type coercion.
STRLEN sv_len_utf8(SV *const sv)
@@ -8556,8 +9580,9 @@ 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.
+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.
@@ -8565,7 +9590,9 @@ 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 *const sv, SV *const obj, const int how, const char *const name, const I32 namlen)
+ void sv_magic(SV *const sv, SV *const obj,
+ const int how, const char *const name,
+ const I32 namlen)
=for hackers
Found in file sv.c
@@ -8573,7 +9600,7 @@ Found in file sv.c
=item sv_magicext
X<sv_magicext>
-Adds magic to an SV, upgrading it if necessary. Applies the
+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.
@@ -8587,7 +9614,11 @@ 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 *const sv, SV *const obj, const int how, const MGVTBL *const vtbl, const char *const name, const I32 namlen)
+ MAGIC * sv_magicext(SV *const sv, SV *const obj,
+ const int how,
+ const MGVTBL *const vtbl,
+ const char *const name,
+ const I32 namlen)
=for hackers
Found in file sv.c
@@ -8596,7 +9627,7 @@ Found in file sv.c
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
+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>.
@@ -8609,7 +9640,7 @@ Found in file sv.c
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
+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>.
@@ -8621,7 +9652,7 @@ Found in file sv.c
=item sv_newref
X<sv_newref>
-Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
+Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
instead.
SV* sv_newref(SV *const sv)
@@ -8647,13 +9678,14 @@ 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
+the offset, rather than from the start of the string. Handles magic and
type coercion.
Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
than 2Gb.
- void sv_pos_u2b(SV *const sv, I32 *const offsetp, I32 *const lenp)
+ void sv_pos_u2b(SV *const sv, I32 *const offsetp,
+ I32 *const lenp)
=for hackers
Found in file sv.c
@@ -8664,11 +9696,13 @@ X<sv_pos_u2b_flags>
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 type coercion.
+the offset, rather than from the start
+of the string. Handles type coercion.
I<flags> is passed to C<SvPV_flags>, and usually should be
C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
- STRLEN sv_pos_u2b_flags(SV *const sv, STRLEN uoffset, STRLEN *const lenp, U32 flags)
+ STRLEN sv_pos_u2b_flags(SV *const sv, STRLEN uoffset,
+ STRLEN *const lenp, U32 flags)
=for hackers
Found in file sv.c
@@ -8676,7 +9710,8 @@ 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.
+The backend for the C<SvPVbytex_force> macro. Always use the macro
+instead.
char* sv_pvbyten_force(SV *const sv, STRLEN *const lp)
@@ -8688,7 +9723,7 @@ 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.
+can't cope with complex macro expressions. Always use the macro instead.
char* sv_pvn_force(SV* sv, STRLEN* lp)
@@ -8700,12 +9735,14 @@ 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
+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 *const sv, STRLEN *const lp, const I32 flags)
+ char* sv_pvn_force_flags(SV *const sv,
+ STRLEN *const lp,
+ const I32 flags)
=for hackers
Found in file sv.c
@@ -8713,7 +9750,8 @@ 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.
+The backend for the C<SvPVutf8x_force> macro. Always use the macro
+instead.
char* sv_pvutf8n_force(SV *const sv, STRLEN *const lp)
@@ -8725,7 +9763,7 @@ X<sv_reftype>
Returns a string describing what the SV is a reference to.
- const char* sv_reftype(const SV *const sv, const int ob)
+ const char* sv_reftype(const SV *const sv, const int ob)
=for hackers
Found in file sv.c
@@ -8762,7 +9800,7 @@ 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
+associated with that magic. If the RV is magical, set magic will be
called after the RV is cleared.
SV* sv_rvweaken(SV *const sv)
@@ -8829,7 +9867,8 @@ 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 *const sv, const char *const pat, ...)
+ void sv_setpvf(SV *const sv, const char *const pat,
+ ...)
=for hackers
Found in file sv.c
@@ -8839,7 +9878,8 @@ X<sv_setpvf_mg>
Like C<sv_setpvf>, but also handles 'set' magic.
- void sv_setpvf_mg(SV *const sv, const char *const pat, ...)
+ void sv_setpvf_mg(SV *const sv,
+ const char *const pat, ...)
=for hackers
Found in file sv.c
@@ -8872,7 +9912,8 @@ 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 *const sv, const char *const ptr, const STRLEN len)
+ void sv_setpvn(SV *const sv, const char *const ptr,
+ const STRLEN len)
=for hackers
Found in file sv.c
@@ -8882,7 +9923,9 @@ X<sv_setpvn_mg>
Like C<sv_setpvn>, but also handles 'set' magic.
- void sv_setpvn_mg(SV *const sv, const char *const ptr, const STRLEN len)
+ void sv_setpvn_mg(SV *const sv,
+ const char *const ptr,
+ const STRLEN len)
=for hackers
Found in file sv.c
@@ -8927,7 +9970,9 @@ 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 *const rv, const char *const classname, const IV iv)
+ SV* sv_setref_iv(SV *const rv,
+ const char *const classname,
+ const IV iv)
=for hackers
Found in file sv.c
@@ -8941,7 +9986,9 @@ 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 *const rv, const char *const classname, const NV nv)
+ SV* sv_setref_nv(SV *const rv,
+ const char *const classname,
+ const NV nv)
=for hackers
Found in file sv.c
@@ -8961,7 +10008,9 @@ 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 *const rv, const char *const classname, void *const pv)
+ SV* sv_setref_pv(SV *const rv,
+ const char *const classname,
+ void *const pv)
=for hackers
Found in file sv.c
@@ -8978,7 +10027,10 @@ 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 *const rv, const char *const classname, const char *const pv, const STRLEN n)
+ SV* sv_setref_pvn(SV *const rv,
+ const char *const classname,
+ const char *const pv,
+ const STRLEN n)
=for hackers
Found in file sv.c
@@ -9003,7 +10055,9 @@ 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 *const rv, const char *const classname, const UV uv)
+ SV* sv_setref_uv(SV *const rv,
+ const char *const classname,
+ const UV uv)
=for hackers
Found in file sv.c
@@ -9013,7 +10067,7 @@ 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.
+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.
@@ -9031,12 +10085,13 @@ 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.
+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>
+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
@@ -9046,7 +10101,8 @@ 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 *dstr, SV *sstr, const I32 flags)
+ void sv_setsv_flags(SV *dstr, SV *sstr,
+ const I32 flags)
=for hackers
Found in file sv.c
@@ -9085,7 +10141,8 @@ Found in file sv.c
=item sv_tainted
X<sv_tainted>
-Test an SV for taintedness. Use C<SvTAINTED> instead.
+Test an SV for taintedness. Use C<SvTAINTED> instead.
+
bool sv_tainted(SV *const sv)
=for hackers
@@ -9118,7 +10175,8 @@ X<sv_unmagicext>
Removes all magic of type C<type> with the specified C<vtbl> from an SV.
- int sv_unmagicext(SV *const sv, const int type, MGVTBL *vtbl)
+ int sv_unmagicext(SV *const sv, const int type,
+ MGVTBL *vtbl)
=for hackers
Found in file sv.c
@@ -9142,7 +10200,8 @@ Found in file sv.c
=item sv_untaint
X<sv_untaint>
-Untaint an SV. Use C<SvTAINTED_off> instead.
+Untaint an SV. Use C<SvTAINTED_off> instead.
+
void sv_untaint(SV *const sv)
=for hackers
@@ -9153,7 +10212,10 @@ 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>.
+It croaks if the SV is already in a more complex form than requested. You
+generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
+before calling C<sv_upgrade>, and hence does not croak. See also
+C<svtype>.
void sv_upgrade(SV *const sv, svtype new_type)
@@ -9166,18 +10228,22 @@ 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
+by C<malloc>. It must be the start of a mallocked block
+of memory, and not a pointer to the middle of it. 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> &
+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>)
+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 *const sv, char* ptr, const STRLEN len, const U32 flags)
+ void sv_usepvn_flags(SV *const sv, char* ptr,
+ const STRLEN len,
+ const U32 flags)
=for hackers
Found in file sv.c
@@ -9187,8 +10253,8 @@ 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.
+so that it looks like a character. If the PV contains only single-byte
+characters, the C<SvUTF8> flag stays 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
@@ -9214,7 +10280,8 @@ use the Encode extension for that.
NOTE: this function is experimental and may change or be
removed without notice.
- bool sv_utf8_downgrade(SV *const sv, const bool fail_ok)
+ bool sv_utf8_downgrade(SV *const sv,
+ const bool fail_ok)
=for hackers
Found in file sv.c
@@ -9254,7 +10321,8 @@ 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 are invariant in UTF-8. If C<flags> has C<SV_GMAGIC> bit set,
+if all the bytes are invariant in UTF-8.
+If C<flags> has C<SV_GMAGIC> bit set,
will C<mg_get> on C<sv> if appropriate, else not.
Returns the number of bytes in the converted string
C<sv_utf8_upgrade> and
@@ -9263,7 +10331,8 @@ 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 *const sv, const I32 flags)
+ STRLEN sv_utf8_upgrade_flags(SV *const sv,
+ const I32 flags)
=for hackers
Found in file sv.c
@@ -9271,7 +10340,7 @@ Found in file sv.c
=item sv_utf8_upgrade_nomg
X<sv_utf8_upgrade_nomg>
-Like sv_utf8_upgrade, but doesn't do magic on C<sv>
+Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
STRLEN sv_utf8_upgrade_nomg(SV *sv)
@@ -9286,7 +10355,8 @@ 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 *const sv, const char *const pat, va_list *const args)
+ void sv_vcatpvf(SV *const sv, const char *const pat,
+ va_list *const args)
=for hackers
Found in file sv.c
@@ -9302,7 +10372,11 @@ locales).
Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
- void sv_vcatpvfn(SV *const sv, const char *const pat, const STRLEN patlen, va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
+ void sv_vcatpvfn(SV *const sv, const char *const pat,
+ const STRLEN patlen,
+ va_list *const args,
+ SV **const svargs, const I32 svmax,
+ bool *const maybe_tainted)
=for hackers
Found in file sv.c
@@ -9314,7 +10388,9 @@ Like C<sv_vcatpvf>, but also handles 'set' magic.
Usually used via its frontend C<sv_catpvf_mg>.
- void sv_vcatpvf_mg(SV *const sv, const char *const pat, va_list *const args)
+ void sv_vcatpvf_mg(SV *const sv,
+ const char *const pat,
+ va_list *const args)
=for hackers
Found in file sv.c
@@ -9327,7 +10403,8 @@ appending it. Does not handle 'set' magic. See C<sv_vsetpvf_mg>.
Usually used via its frontend C<sv_setpvf>.
- void sv_vsetpvf(SV *const sv, const char *const pat, va_list *const args)
+ void sv_vsetpvf(SV *const sv, const char *const pat,
+ va_list *const args)
=for hackers
Found in file sv.c
@@ -9340,7 +10417,11 @@ appending it.
Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
- void sv_vsetpvfn(SV *const sv, const char *const pat, const STRLEN patlen, va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
+ void sv_vsetpvfn(SV *const sv, const char *const pat,
+ const STRLEN patlen,
+ va_list *const args,
+ SV **const svargs, const I32 svmax,
+ bool *const maybe_tainted)
=for hackers
Found in file sv.c
@@ -9352,7 +10433,9 @@ Like C<sv_vsetpvf>, but also handles 'set' magic.
Usually used via its frontend C<sv_setpvf_mg>.
- void sv_vsetpvf_mg(SV *const sv, const char *const pat, va_list *const args)
+ void sv_vsetpvf_mg(SV *const sv,
+ const char *const pat,
+ va_list *const args)
=for hackers
Found in file sv.c
@@ -9367,8 +10450,8 @@ Found in file sv.c
=item bytes_cmp_utf8
X<bytes_cmp_utf8>
-Compares the sequence of characters (stored as octets) in b, blen with the
-sequence of characters (stored as UTF-8) in u, ulen. Returns 0 if they are
+Compares the sequence of characters (stored as octets) in C<b>, C<blen> with the
+sequence of characters (stored as UTF-8) in C<u>, C<ulen>. Returns 0 if they are
equal, -1 or -2 if the first string is less than the second string, +1 or +2
if the first string is greater than the second string.
@@ -9376,7 +10459,8 @@ if the first string is greater than the second string.
longer string. -2 or +2 is returned if the was a difference between characters
within the strings.
- int bytes_cmp_utf8(const U8 *b, STRLEN blen, const U8 *u, STRLEN ulen)
+ int bytes_cmp_utf8(const U8 *b, STRLEN blen,
+ const U8 *u, STRLEN ulen)
=for hackers
Found in file utf8.c
@@ -9385,7 +10469,7 @@ Found in file utf8.c
X<bytes_from_utf8>
Converts a string C<s> of length C<len> from UTF-8 into native byte encoding.
-Unlike C<utf8_to_bytes> but like C<bytes_to_utf8>, returns a pointer to
+Unlike L</utf8_to_bytes> but like L</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
@@ -9395,7 +10479,8 @@ in utf8 (i.e., US-ASCII on non-EBCDIC machines).
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)
+ U8* bytes_from_utf8(const U8 *s, STRLEN *len,
+ bool *is_utf8)
=for hackers
Found in file utf8.c
@@ -9412,7 +10497,7 @@ A NUL character will be written after the end of the string.
If you want to convert to UTF-8 from encodings other than
the native (Latin1 or EBCDIC),
-see sv_recode_to_utf8().
+see L</sv_recode_to_utf8>().
NOTE: this function is experimental and may change or be
removed without notice.
@@ -9425,42 +10510,46 @@ Found in file utf8.c
=item foldEQ_utf8
X<foldEQ_utf8>
-Returns true if the leading portions of the strings s1 and s2 (either or both
+Returns true if the leading portions of the strings C<s1> and C<s2> (either or both
of which may be in UTF-8) are the same case-insensitively; false otherwise.
How far into the strings to compare is determined by other input parameters.
-If u1 is true, the string s1 is assumed to be in UTF-8-encoded Unicode;
-otherwise it is assumed to be in native 8-bit encoding. Correspondingly for u2
-with respect to s2.
+If C<u1> is true, the string C<s1> is assumed to be in UTF-8-encoded Unicode;
+otherwise it is assumed to be in native 8-bit encoding. Correspondingly for C<u2>
+with respect to C<s2>.
-If the byte length l1 is non-zero, it says how far into s1 to check for fold
-equality. In other words, s1+l1 will be used as a goal to reach. The
+If the byte length C<l1> is non-zero, it says how far into C<s1> to check for fold
+equality. In other words, C<s1>+C<l1> will be used as a goal to reach. The
scan will not be considered to be a match unless the goal is reached, and
-scanning won't continue past that goal. Correspondingly for l2 with respect to
-s2.
-
-If pe1 is non-NULL and the pointer it points to is not NULL, that pointer is
-considered an end pointer beyond which scanning of s1 will not continue under
-any circumstances. This means that if both l1 and pe1 are specified, and pe1
-is less than s1+l1, the match will never be successful because it can never
+scanning won't continue past that goal. Correspondingly for C<l2> with respect to
+C<s2>.
+
+If C<pe1> is non-NULL and the pointer it points to is not NULL, that pointer is
+considered an end pointer beyond which scanning of C<s1> will not continue under
+any circumstances. This means that if both C<l1> and C<pe1> are specified, and
+C<pe1>
+is less than C<s1>+C<l1>, the match will never be successful because it can
+never
get as far as its goal (and in fact is asserted against). Correspondingly for
-pe2 with respect to s2.
+C<pe2> with respect to C<s2>.
-At least one of s1 and s2 must have a goal (at least one of l1 and l2 must be
-non-zero), and if both do, both have to be
+At least one of C<s1> and C<s2> must have a goal (at least one of C<l1> and
+C<l2> must be non-zero), and if both do, both have to be
reached for a successful match. Also, if the fold of a character is multiple
characters, all of them must be matched (see tr21 reference below for
'folding').
-Upon a successful match, if pe1 is non-NULL,
-it will be set to point to the beginning of the I<next> character of s1 beyond
-what was matched. Correspondingly for pe2 and s2.
+Upon a successful match, if C<pe1> is non-NULL,
+it will be set to point to the beginning of the I<next> character of C<s1>
+beyond what was matched. Correspondingly for C<pe2> and C<s2>.
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).
+L<http://www.unicode.org/unicode/reports/tr21/> (Case Mappings).
- I32 foldEQ_utf8(const char *s1, char **pe1, UV l1, bool u1, const char *s2, char **pe2, UV l2, bool u2)
+ I32 foldEQ_utf8(const char *s1, char **pe1, UV l1,
+ bool u1, const char *s2, char **pe2,
+ UV l2, bool u2)
=for hackers
Found in file utf8.c
@@ -9468,14 +10557,14 @@ Found in file utf8.c
=item is_ascii_string
X<is_ascii_string>
-Returns true if the first C<len> bytes of the given string are the same whether
+Returns true if the first C<len> bytes of the string C<s> are the same whether
or not the string is encoded in UTF-8 (or UTF-EBCDIC on EBCDIC machines). That
is, if they are invariant. On ASCII-ish machines, only ASCII characters
fit this definition, hence the function's name.
If C<len> is 0, it will be calculated using C<strlen(s)>.
-See also is_utf8_string(), is_utf8_string_loclen(), and is_utf8_string_loc().
+See also L</is_utf8_string>(), L</is_utf8_string_loclen>(), and L</is_utf8_string_loc>().
bool is_ascii_string(const U8 *s, STRLEN len)
@@ -9485,26 +10574,49 @@ Found in file utf8.c
=item is_utf8_char
X<is_utf8_char>
+DEPRECATED!
+
Tests if some arbitrary number of bytes begins in a valid UTF-8
character. Note that an INVARIANT (i.e. ASCII on non-EBCDIC machines)
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.
+This function is deprecated due to the possibility that malformed input could
+cause reading beyond the end of the input buffer. Use L</is_utf8_char_buf>
+instead.
+
STRLEN is_utf8_char(const U8 *s)
=for hackers
Found in file utf8.c
+=item is_utf8_char_buf
+X<is_utf8_char_buf>
+
+Returns the number of bytes that comprise the first UTF-8 encoded character in
+buffer C<buf>. C<buf_end> should point to one position beyond the end of the
+buffer. 0 is returned if C<buf> does not point to a complete, valid UTF-8
+encoded character.
+
+Note that an INVARIANT character (i.e. ASCII on non-EBCDIC
+machines) is a valid UTF-8 character.
+
+ STRLEN is_utf8_char_buf(const U8 *buf,
+ const U8 *buf_end)
+
+=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
+Returns true if the first C<len> bytes of string C<s> form a valid
UTF-8 string, false otherwise. If C<len> is 0, it will be calculated
-using C<strlen(s)>. 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.
+using C<strlen(s)> (which means if you use this option, that C<s> has to have a
+terminating NUL byte). Note that all characters being ASCII constitute 'a
+valid UTF-8 string'.
-See also is_ascii_string(), is_utf8_string_loclen(), and is_utf8_string_loc().
+See also L</is_ascii_string>(), L</is_utf8_string_loclen>(), and L</is_utf8_string_loc>().
bool is_utf8_string(const U8 *s, STRLEN len)
@@ -9514,13 +10626,14 @@ 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
+Like L</is_utf8_string> but stores the location of the failure (in the
+case of "utf8ness failure") or the location C<s>+C<len> (in the case of
"utf8ness success") in the C<ep>.
-See also is_utf8_string_loclen() and is_utf8_string().
+See also L</is_utf8_string_loclen>() and L</is_utf8_string>().
- bool is_utf8_string_loc(const U8 *s, STRLEN len, const U8 **p)
+ bool is_utf8_string_loc(const U8 *s, STRLEN len,
+ const U8 **p)
=for hackers
Found in file utf8.c
@@ -9528,14 +10641,15 @@ 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
+Like L</is_utf8_string>() but stores the location of the failure (in the
+case of "utf8ness failure") or the location C<s>+C<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().
+See also L</is_utf8_string_loc>() and L</is_utf8_string>().
- bool is_utf8_string_loclen(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el)
+ bool is_utf8_string_loclen(const U8 *s, STRLEN len,
+ const U8 **ep, STRLEN *el)
=for hackers
Found in file utf8.c
@@ -9543,20 +10657,22 @@ 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
+Build to the scalar C<dsv> a displayable version of the string C<spv>,
+length C<len>, the displayable version being at most C<pvlim> bytes long
(if longer, the rest is truncated and "..." will be appended).
-The flags argument can have UNI_DISPLAY_ISPRINT set to display
+The C<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.
+The pointer to the PV of the C<dsv> is returned.
- char* pv_uni_display(SV *dsv, const U8 *spv, STRLEN len, STRLEN pvlim, UV flags)
+ char* pv_uni_display(SV *dsv, const U8 *spv,
+ STRLEN len, STRLEN pvlim,
+ UV flags)
=for hackers
Found in file utf8.c
@@ -9569,12 +10685,13 @@ 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
+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)
+ bool sv_cat_decode(SV* dsv, SV *encoding, SV *ssv,
+ int *offset, char* tstr, int tlen)
=for hackers
Found in file sv.c
@@ -9589,7 +10706,7 @@ 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>).
+(See F<lib/encoding.pm> and L<Encode>.)
The PV of the sv is returned.
@@ -9601,15 +10718,16 @@ 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
+Build to the scalar C<dsv> a displayable version of the scalar C<sv>,
+the displayable version being at most C<pvlim> bytes long
(if longer, the rest is truncated and "..." will be appended).
-The flags argument is as in pv_uni_display().
+The C<flags> argument is as in L</pv_uni_display>().
-The pointer to the PV of the dsv is returned.
+The pointer to the PV of the C<dsv> is returned.
- char* sv_uni_display(SV *dsv, SV *ssv, STRLEN pvlim, UV flags)
+ char* sv_uni_display(SV *dsv, SV *ssv, STRLEN pvlim,
+ UV flags)
=for hackers
Found in file utf8.c
@@ -9617,27 +10735,31 @@ 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 C<p> contains the pointer to the UTF-8 string encoding
+the character that is being converted. This routine assumes that the character
+at C<p> is well-formed.
-The "ustrp" is a pointer to the character buffer to put the
-conversion result to. The "lenp" is a pointer to the length
+The C<ustrp> is a pointer to the character buffer to put the
+conversion result to. The C<lenp> is a pointer to the length
of the result.
-The "swashp" is a pointer to the swash to use.
+The C<swashp> is a pointer to the swash to use.
-Both the special and normal mappings are stored in lib/unicore/To/Foo.pl,
-and loaded by SWASHNEW, using lib/utf8_heavy.pl. The special (usually,
+Both the special and normal mappings are stored in F<lib/unicore/To/Foo.pl>,
+and loaded by SWASHNEW, using F<lib/utf8_heavy.pl>. The C<special> (usually,
but not always, a multicharacter mapping), is tried first.
-The "special" is a string like "utf8::ToSpecLower", which means the
+The C<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
+The C<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)
+ 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
@@ -9645,16 +10767,19 @@ 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
+Convert the UTF-8 encoded character at C<p> to its foldcase version and
+store that in UTF-8 in C<ustrp> and its length in bytes in C<lenp>. Note
+that the C<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)
+The character at C<p> is assumed by this routine to be well-formed.
+
+ UV to_utf8_fold(const U8 *p, U8* ustrp,
+ STRLEN *lenp)
=for hackers
Found in file utf8.c
@@ -9662,15 +10787,18 @@ 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
+Convert the UTF-8 encoded character at C<p> to its lowercase version and
+store that in UTF-8 in ustrp and its length in bytes in C<lenp>. Note
+that the C<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)
+The character at C<p> is assumed by this routine to be well-formed.
+
+ UV to_utf8_lower(const U8 *p, U8* ustrp,
+ STRLEN *lenp)
=for hackers
Found in file utf8.c
@@ -9678,15 +10806,18 @@ 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
+Convert the UTF-8 encoded character at C<p> to its titlecase version and
+store that in UTF-8 in C<ustrp> and its length in bytes in C<lenp>. Note
+that the C<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)
+The character at C<p> is assumed by this routine to be well-formed.
+
+ UV to_utf8_title(const U8 *p, U8* ustrp,
+ STRLEN *lenp)
=for hackers
Found in file utf8.c
@@ -9694,15 +10825,18 @@ 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
+Convert the UTF-8 encoded character at C<p> to its uppercase version and
+store that in UTF-8 in C<ustrp> and its length in bytes in C<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)
+The character at C<p> is assumed by this routine to be well-formed.
+
+ UV to_utf8_upper(const U8 *p, U8* ustrp,
+ STRLEN *lenp)
=for hackers
Found in file utf8.c
@@ -9715,9 +10849,10 @@ C<s>
which is assumed to be in UTF-8 encoding; C<retlen> will be set to the
length, in bytes, of that character.
-length and flags are the same as utf8n_to_uvuni().
+C<length> and C<flags> are the same as L</utf8n_to_uvuni>().
- UV utf8n_to_uvchr(const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
+ UV utf8n_to_uvchr(const U8 *s, STRLEN curlen,
+ STRLEN *retlen, U32 flags)
=for hackers
Found in file utf8.c
@@ -9726,16 +10861,16 @@ Found in file utf8.c
X<utf8n_to_uvuni>
Bottom level UTF-8 decode routine.
-Returns the code point value of the first character in the string C<s>
-which is assumed to be in UTF-8 (or UTF-EBCDIC) encoding and no longer than
-C<curlen> bytes; C<retlen> will be set to the length, in bytes, of that
-character.
+Returns the code point value of the first character in the string C<s>,
+which is assumed to be in UTF-8 (or UTF-EBCDIC) encoding, and no longer than
+C<curlen> bytes; C<*retlen> (if C<retlen> isn't NULL) will be set to
+the length, in bytes, of that character.
The value of C<flags> determines the behavior when C<s> does not point to a
well-formed UTF-8 character. If C<flags> is 0, when a malformation is found,
-C<retlen> is set to the expected length of the UTF-8 character in bytes, zero
-is returned, and if UTF-8 warnings haven't been lexically disabled, a warning
-is raised.
+zero is returned and C<*retlen> is set so that (S<C<s> + C<*retlen>>) is the
+next possible position in C<s> that could begin a non-malformed character.
+Also, if UTF-8 warnings haven't been lexically disabled, a warning is raised.
Various ALLOW flags can be set in C<flags> to allow (and not warn on)
individual types of malformations, such as the sequence being overlong (that
@@ -9743,8 +10878,10 @@ is, when there is a shorter sequence that can express the same code point;
overlong sequences are expressly forbidden in the UTF-8 standard due to
potential security issues). Another malformation example is the first byte of
a character not being a legal first byte. See F<utf8.h> for the list of such
-flags. Of course, the value returned by this function under such conditions is
-not reliable.
+flags. For allowed 0 length strings, this function returns 0; for allowed
+overlong sequences, the computed code point is returned; for all other allowed
+malformations, the Unicode REPLACEMENT CHARACTER is returned, as these have no
+determinable reasonable value.
The UTF8_CHECK_ONLY flag overrides the behavior when a non-allowed (by other
flags) malformation is found. If this flag is set, the routine assumes that
@@ -9752,9 +10889,9 @@ the caller will raise a warning, and this function will silently just set
C<retlen> to C<-1> and return zero.
Certain code points are considered problematic. These are Unicode surrogates,
-Unicode non-characters, and code points above the Unicode maximum of 0x10FFF.
+Unicode non-characters, and code points above the Unicode maximum of 0x10FFFF.
By default these are considered regular code points, but certain situations
-warrant special handling for them. if C<flags> contains
+warrant special handling for them. If C<flags> contains
UTF8_DISALLOW_ILLEGAL_INTERCHANGE, all three classes are treated as
malformations and handled as such. The flags UTF8_DISALLOW_SURROGATE,
UTF8_DISALLOW_NONCHAR, and UTF8_DISALLOW_SUPER (meaning above the legal Unicode
@@ -9770,22 +10907,27 @@ UTF8_CHECK_ONLY is also specified.)
Very large code points (above 0x7FFF_FFFF) are considered more problematic than
the others that are above the Unicode legal maximum. There are several
-reasons, one of which is that the original UTF-8 specification never went above
-this number (the current 0x10FFF limit was imposed later). The UTF-8 encoding
-on ASCII platforms for these large code point begins with a byte containing
-0xFE or 0xFF. The UTF8_DISALLOW_FE_FF flag will cause them to be treated as
-malformations, while allowing smaller above-Unicode code points. (Of course
-UTF8_DISALLOW_SUPER will treat all above-Unicode code points, including these,
-as malformations.) Similarly, UTF8_WARN_FE_FF acts just like the other WARN
-flags, but applies just to these code points.
+reasons: they requre at least 32 bits to represent them on ASCII platforms, are
+not representable at all on EBCDIC platforms, and the original UTF-8
+specification never went above this number (the current 0x10FFFF limit was
+imposed later). (The smaller ones, those that fit into 32 bits, are
+representable by a UV on ASCII platforms, but not by an IV, which means that
+the number of operations that can be performed on them is quite restricted.)
+The UTF-8 encoding on ASCII platforms for these large code points begins with a
+byte containing 0xFE or 0xFF. The UTF8_DISALLOW_FE_FF flag will cause them to
+be treated as malformations, while allowing smaller above-Unicode code points.
+(Of course UTF8_DISALLOW_SUPER will treat all above-Unicode code points,
+including these, as malformations.) Similarly, UTF8_WARN_FE_FF acts just like
+the other WARN flags, but applies just to these code points.
All other code points corresponding to Unicode characters, including private
use and those yet to be assigned, are never considered malformed and never
warn.
-Most code should use utf8_to_uvchr() rather than call this directly.
+Most code should use L</utf8_to_uvchr_buf>() rather than call this directly.
- UV utf8n_to_uvuni(const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
+ UV utf8n_to_uvuni(const U8 *s, STRLEN curlen,
+ STRLEN *retlen, U32 flags)
=for hackers
Found in file utf8.c
@@ -9835,11 +10977,11 @@ Found in file utf8.c
X<utf8_to_bytes>
Converts a string C<s> of length C<len> from UTF-8 into native byte encoding.
-Unlike C<bytes_to_utf8>, this over-writes the original string, and
-updates len to contain the new length.
+Unlike L</bytes_to_utf8>, this over-writes the original string, and
+updates C<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>.
+If you need a copy of the string, see L</bytes_from_utf8>.
NOTE: this function is experimental and may change or be
removed without notice.
@@ -9852,21 +10994,55 @@ Found in file utf8.c
=item utf8_to_uvchr
X<utf8_to_uvchr>
+DEPRECATED!
+
Returns the native 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.
-If C<s> does not point to a well-formed UTF-8 character, zero is
-returned and retlen is set, if possible, to -1.
+Some, but not all, UTF-8 malformations are detected, and in fact, some
+malformed input could cause reading beyond the end of the input buffer, which
+is why this function is deprecated. Use L</utf8_to_uvchr_buf> instead.
+
+If C<s> points to one of the detected malformations, and UTF8 warnings are
+enabled, zero is returned and C<*retlen> is set (if C<retlen> isn't
+NULL) to -1. If those warnings are off, the computed value if well-defined (or
+the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
+is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
+next possible position in C<s> that could begin a non-malformed character.
+See L</utf8n_to_uvuni> for details on when the REPLACEMENT CHARACTER is returned.
UV utf8_to_uvchr(const U8 *s, STRLEN *retlen)
=for hackers
Found in file utf8.c
+=item utf8_to_uvchr_buf
+X<utf8_to_uvchr_buf>
+
+Returns the native code point of the first character in the string C<s> which
+is assumed to be in UTF-8 encoding; C<send> points to 1 beyond the end of C<s>.
+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 and UTF8 warnings are
+enabled, zero is returned and C<*retlen> is set (if C<retlen> isn't
+NULL) to -1. If those warnings are off, the computed value if well-defined (or
+the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
+is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
+next possible position in C<s> that could begin a non-malformed character.
+See L</utf8n_to_uvuni> for details on when the REPLACEMENT CHARACTER is returned.
+
+ UV utf8_to_uvchr_buf(const U8 *s, const U8 *send,
+ STRLEN *retlen)
+
+=for hackers
+Found in file utf8.c
+
=item utf8_to_uvuni
X<utf8_to_uvuni>
+DEPRECATED!
+
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.
@@ -9874,19 +11050,52 @@ length, in bytes, of that character.
This function should only be used when the 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.
+Some, but not all, UTF-8 malformations are detected, and in fact, some
+malformed input could cause reading beyond the end of the input buffer, which
+is why this function is deprecated. Use L</utf8_to_uvuni_buf> instead.
+
+If C<s> points to one of the detected malformations, and UTF8 warnings are
+enabled, zero is returned and C<*retlen> is set (if C<retlen> doesn't point to
+NULL) to -1. If those warnings are off, the computed value if well-defined (or
+the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
+is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
+next possible position in C<s> that could begin a non-malformed character.
+See L</utf8n_to_uvuni> for details on when the REPLACEMENT CHARACTER is returned.
UV utf8_to_uvuni(const U8 *s, STRLEN *retlen)
=for hackers
Found in file utf8.c
+=item utf8_to_uvuni_buf
+X<utf8_to_uvuni_buf>
+
+Returns the Unicode code point of the first character in the string C<s> which
+is assumed to be in UTF-8 encoding; C<send> points to 1 beyond the end of C<s>.
+C<retlen> will be set to the length, in bytes, of that character.
+
+This function should only be used when the 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 and UTF8 warnings are
+enabled, zero is returned and C<*retlen> is set (if C<retlen> isn't
+NULL) to -1. If those warnings are off, the computed value if well-defined (or
+the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
+is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
+next possible position in C<s> that could begin a non-malformed character.
+See L</utf8n_to_uvuni> for details on when the REPLACEMENT CHARACTER is returned.
+
+ UV utf8_to_uvuni_buf(const U8 *s, const U8 *send,
+ 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 code point C<uv> to the end
-of the string C<d>; C<d> should be have at least C<UTF8_MAXBYTES+1> free
+of the string C<d>; C<d> should 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,
@@ -9925,7 +11134,8 @@ This is the recommended Unicode-aware way of saying
This function will convert to UTF-8 (and not warn) even code points that aren't
legal Unicode or are problematic, unless C<flags> contains one or more of the
-following flags.
+following flags:
+
If C<uv> is a Unicode surrogate code point and UNICODE_WARN_SURROGATE is set,
the function will raise a warning, provided UTF8 warnings are enabled. If instead
UNICODE_DISALLOW_SURROGATE is set, the function will fail and return NULL.
@@ -10125,7 +11335,7 @@ Found in file XSUB.h
X<XS>
Macro to declare an XSUB and its C parameter list. This is handled by
-C<xsubpp>.
+C<xsubpp>. It is the same as using the more explicit XS_EXTERNAL macro.
=for hackers
Found in file XSUB.h
@@ -10141,6 +11351,24 @@ matches the api version of the perl interpreter it's being loaded into.
=for hackers
Found in file XSUB.h
+=item XS_EXTERNAL
+X<XS_EXTERNAL>
+
+Macro to declare an XSUB and its C parameter list explicitly exporting the symbols.
+
+=for hackers
+Found in file XSUB.h
+
+=item XS_INTERNAL
+X<XS_INTERNAL>
+
+Macro to declare an XSUB and its C parameter list without exporting the symbols.
+This is handled by C<xsubpp> and generally preferable over exporting the XSUB
+symbols unnecessarily.
+
+=for hackers
+Found in file XSUB.h
+
=item XS_VERSION
X<XS_VERSION>
@@ -10439,11 +11667,8 @@ X<Slab_Alloc>
=item Slab_Free
X<Slab_Free>
-=item _to_uni_fold_flags
-X<_to_uni_fold_flags>
-
-=item _to_utf8_fold_flags
-X<_to_utf8_fold_flags>
+=item _is_utf8_quotemeta
+X<_is_utf8_quotemeta>
=item amagic_call
X<amagic_call>
@@ -10454,9 +11679,6 @@ X<amagic_deref_call>
=item any_dup
X<any_dup>
-=item apply_attrs_string
-X<apply_attrs_string>
-
=item atfork_lock
X<atfork_lock>
@@ -10646,9 +11868,6 @@ X<dump_sub>
=item dump_vindent
X<dump_vindent>
-=item fetch_cop_label
-X<fetch_cop_label>
-
=item filter_add
X<filter_add>
@@ -10658,18 +11877,9 @@ X<filter_del>
=item filter_read
X<filter_read>
-=item find_rundefsv
-X<find_rundefsv>
-
-=item find_rundefsvoffset
-X<find_rundefsvoffset>
-
=item foldEQ_latin1
X<foldEQ_latin1>
-=item foldEQ_utf8_flags
-X<foldEQ_utf8_flags>
-
=item form_nocontext
X<form_nocontext>
@@ -10730,6 +11940,15 @@ X<gv_add_by_type>
=item gv_autoload4
X<gv_autoload4>
+=item gv_autoload_pv
+X<gv_autoload_pv>
+
+=item gv_autoload_pvn
+X<gv_autoload_pvn>
+
+=item gv_autoload_sv
+X<gv_autoload_sv>
+
=item gv_check
X<gv_check>
@@ -10751,9 +11970,6 @@ X<gv_fetchfile>
=item gv_fetchfile_flags
X<gv_fetchfile_flags>
-=item gv_fetchmethod_flags
-X<gv_fetchmethod_flags>
-
=item gv_fetchpv
X<gv_fetchpv>
@@ -10775,9 +11991,6 @@ X<gv_fullname4>
=item gv_handler
X<gv_handler>
-=item gv_init
-X<gv_init>
-
=item gv_name_set
X<gv_name_set>
@@ -10826,9 +12039,6 @@ X<hv_riter_p>
=item hv_riter_set
X<hv_riter_set>
-=item hv_store_flags
-X<hv_store_flags>
-
=item init_global_struct
X<init_global_struct>
@@ -11027,9 +12237,6 @@ X<mro_get_from_name>
=item mro_get_private_data
X<mro_get_private_data>
-=item mro_register
-X<mro_register>
-
=item mro_set_mro
X<mro_set_mro>
@@ -11147,6 +12354,9 @@ X<newGVREF>
=item newGVgen
X<newGVgen>
+=item newGVgen_flags
+X<newGVgen_flags>
+
=item newHVREF
X<newHVREF>
@@ -11174,9 +12384,6 @@ X<newSVREF>
=item newSVpvf_nocontext
X<newSVpvf_nocontext>
-=item newXS_flags
-X<newXS_flags>
-
=item new_collate
X<new_collate>
@@ -11690,6 +12897,15 @@ X<warner_nocontext>
=item whichsig
X<whichsig>
+=item whichsig_pv
+X<whichsig_pv>
+
+=item whichsig_pvn
+X<whichsig_pvn>
+
+=item whichsig_sv
+X<whichsig_sv>
+
=back
diff --git a/Master/tlpkg/tlperl/lib/pods/perlapio.pod b/Master/tlpkg/tlperl/lib/pods/perlapio.pod
index 1c57f9a9a89..bb7115f8e8c 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlapio.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlapio.pod
@@ -390,8 +390,7 @@ vary from handle to handle.
PerlIO_fast_gets(f) = PerlIO_has_cntptr(f) && \
PerlIO_canset_cnt(f) && \
- `Can set pointer into buffer'
-
+ 'Can set pointer into buffer'
=item B<PerlIO_has_cntptr(f)>
diff --git a/Master/tlpkg/tlperl/lib/pods/perlbeos.pod b/Master/tlpkg/tlperl/lib/pods/perlbeos.pod
index 0a01f50b9ee..c72c2293a07 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlbeos.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlbeos.pod
@@ -4,7 +4,7 @@ designed to be readable as is.
=head1 NAME
-README.beos - Perl version 5.8+ on BeOS
+perlbeos - Perl version 5.8+ on BeOS
=head1 DESCRIPTION
@@ -19,7 +19,7 @@ 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
+recognition of whether it is a BONE system or not in F<hints/beos.sh>. Now
network socket support should remain enabled on BONE systems. This might
as well break the build, though.
@@ -81,21 +81,21 @@ 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
+The LFS (large file support) tests (F<t/op/lfs> and F<xt/Fcntl/t/syslfs>) are
disabled as seeking beyond 2 GB is broken according to jhi@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
+The F<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
+The F<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.
diff --git a/Master/tlpkg/tlperl/lib/pods/perlbook.pod b/Master/tlpkg/tlperl/lib/pods/perlbook.pod
index f780c9bb6ac..5ed6b328748 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlbook.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlbook.pod
@@ -105,7 +105,7 @@ You might want to keep these desktop references close by your keyboard:
by James Lee
ISBN 1-59059-391-X [3rd edition April 2010]
- http://www.apress.com/book/view/1430227931
+ http://www.apress.com/9781430227939
=item I<Learning Perl>
@@ -142,7 +142,7 @@ You might want to keep these desktop references close by your keyboard:
by Sam Tregar
ISBN 1-59059-018-X [1st edition August 2002]
- http://www.apress.com/book/view/159059018X
+ http://www.apress.com/9781590590188
=item I<The Perl Cookbook>
@@ -151,7 +151,6 @@ You might want to keep these desktop references close by your keyboard:
ISBN 1-56592-243-3 [2nd edition August 2003]
http://oreilly.com/catalog/9780596003135
-
=item I<Automating System Administration with Perl>
by David N. Blank-Edelman
@@ -162,7 +161,7 @@ You might want to keep these desktop references close by your keyboard:
by Linchi Shea
ISBN 1-59059-097-X [1st edition July 2003]
- http://www.apress.com/book/view/159059097X
+ http://www.apress.com/9781590590973
=back
@@ -241,7 +240,7 @@ You might want to keep these desktop references close by your keyboard:
by Richard Foley with Andy Lester
ISBN 1-59059-454-1 [1st edition July 2005]
- http://www.apress.com/book/view/1590594541
+ http://www.apress.com/9781590594544
=back
@@ -251,8 +250,6 @@ Some of these books are available as free downloads.
I<Higher-Order Perl>: http://hop.perl.plover.com/
-I<Writing Perl Modules for CPAN>: http://www.apress.com/resource/freeebook/9781590590188
-
=head2 Other interesting, non-Perl books
You might notice several familiar Perl concepts in this collection of
diff --git a/Master/tlpkg/tlperl/lib/pods/perlboot.pod b/Master/tlpkg/tlperl/lib/pods/perlboot.pod
index 5aa61795759..15b7117823a 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlboot.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlboot.pod
@@ -1,884 +1,12 @@
+=encoding utf8
+
=head1 NAME
-perlboot - Beginner's Object-Oriented Tutorial
+perlboot - This document has been deleted
=head1 DESCRIPTION
-If you're not familiar with objects from other languages, some of the
-other Perl object documentation may be a little daunting, such as
-L<perlobj>, a basic reference in using objects, and L<perltoot>, which
-introduces readers to the peculiarities of Perl's object system in a
-tutorial way.
-
-So, let's take a different approach, presuming no prior object
-experience. It helps if you know about subroutines (L<perlsub>),
-references (L<perlref> et. seq.), and packages (L<perlmod>), so become
-familiar with those first if you haven't already.
-
-=head2 If we could talk to the animals...
-
-Let's let the animals talk for a moment:
-
- sub Cow::speak {
- print "a Cow goes moooo!\n";
- }
- sub Horse::speak {
- print "a Horse goes neigh!\n";
- }
- sub Sheep::speak {
- print "a Sheep goes baaaah!\n";
- }
-
- Cow::speak;
- Horse::speak;
- Sheep::speak;
-
-This results in:
-
- a Cow goes moooo!
- a Horse goes neigh!
- a Sheep goes baaaah!
-
-Nothing spectacular here. Simple subroutines, albeit from separate
-packages, and called using the full package name. So let's create
-an entire pasture:
-
- # Cow::speak, Horse::speak, Sheep::speak as before
- @pasture = qw(Cow Cow Horse Sheep Sheep);
- foreach $animal (@pasture) {
- &{$animal."::speak"};
- }
-
-This results in:
-
- a Cow goes moooo!
- a Cow goes moooo!
- a Horse goes neigh!
- a Sheep goes baaaah!
- a Sheep goes baaaah!
-
-Wow. That symbolic coderef de-referencing there is pretty nasty.
-We're counting on C<no strict refs> mode, certainly not recommended
-for larger programs. And why was that necessary? Because the name of
-the package seems to be inseparable from the name of the subroutine we
-want to invoke within that package.
-
-Or is it?
-
-=head2 Introducing the method invocation arrow
-
-For now, let's say that C<< Class->method >> invokes subroutine
-C<method> in package C<Class>. (Here, "Class" is used in its
-"category" meaning, not its "scholastic" meaning.) That's not
-completely accurate, but we'll do this one step at a time. Now let's
-use it like so:
-
- # Cow::speak, Horse::speak, Sheep::speak as before
- Cow->speak;
- Horse->speak;
- Sheep->speak;
-
-And once again, this results in:
-
- a Cow goes moooo!
- a Horse goes neigh!
- a Sheep goes baaaah!
-
-That's not fun yet. Same number of characters, all constant, no
-variables. But yet, the parts are separable now. Watch:
-
- $a = "Cow";
- $a->speak; # invokes Cow->speak
-
-Ahh! Now that the package name has been parted from the subroutine
-name, we can use a variable package name. And this time, we've got
-something that works even when C<use strict refs> is enabled.
-
-=head2 Invoking a barnyard
-
-Let's take that new arrow invocation and put it back in the barnyard
-example:
-
- sub Cow::speak {
- print "a Cow goes moooo!\n";
- }
- sub Horse::speak {
- print "a Horse goes neigh!\n";
- }
- sub Sheep::speak {
- print "a Sheep goes baaaah!\n";
- }
-
- @pasture = qw(Cow Cow Horse Sheep Sheep);
- foreach $animal (@pasture) {
- $animal->speak;
- }
-
-There! Now we have the animals all talking, and safely at that,
-without the use of symbolic coderefs.
-
-But look at all that common code. Each of the C<speak> routines has a
-similar structure: a C<print> operator and a string that contains
-common text, except for two of the words. It'd be nice if we could
-factor out the commonality, in case we decide later to change it all
-to C<says> instead of C<goes>.
-
-And we actually have a way of doing that without much fuss, but we
-have to hear a bit more about what the method invocation arrow is
-actually doing for us.
-
-=head2 The extra parameter of method invocation
-
-The invocation of:
-
- Class->method(@args)
-
-attempts to invoke subroutine C<Class::method> as:
-
- Class::method("Class", @args);
-
-(If the subroutine can't be found, "inheritance" kicks in, but we'll
-get to that later.) This means that we get the class name as the
-first parameter (the only parameter, if no arguments are given). So
-we can rewrite the C<Sheep> speaking subroutine as:
-
- sub Sheep::speak {
- my $class = shift;
- print "a $class goes baaaah!\n";
- }
-
-And the other two animals come out similarly:
-
- sub Cow::speak {
- my $class = shift;
- print "a $class goes moooo!\n";
- }
- sub Horse::speak {
- my $class = shift;
- print "a $class goes neigh!\n";
- }
-
-In each case, C<$class> will get the value appropriate for that
-subroutine. But once again, we have a lot of similar structure. Can
-we factor that out even further? Yes, by calling another method in
-the same class.
-
-=head2 Calling a second method to simplify things
-
-Let's call out from C<speak> to a helper method called C<sound>.
-This method provides the constant text for the sound itself.
-
- { package Cow;
- sub sound { "moooo" }
- sub speak {
- my $class = shift;
- print "a $class goes ", $class->sound, "!\n";
- }
- }
-
-Now, when we call C<< Cow->speak >>, we get a C<$class> of C<Cow> in
-C<speak>. This in turn selects the C<< Cow->sound >> method, which
-returns C<moooo>. But how different would this be for the C<Horse>?
-
- { package Horse;
- sub sound { "neigh" }
- sub speak {
- my $class = shift;
- print "a $class goes ", $class->sound, "!\n";
- }
- }
-
-Only the name of the package and the specific sound change. So can we
-somehow share the definition for C<speak> between the Cow and the
-Horse? Yes, with inheritance!
-
-=head2 Inheriting the windpipes
-
-We'll define a common subroutine package called C<Animal>, with the
-definition for C<speak>:
-
- { package Animal;
- sub speak {
- my $class = shift;
- print "a $class goes ", $class->sound, "!\n";
- }
- }
-
-Then, for each animal, we say it "inherits" from C<Animal>, along
-with the animal-specific sound:
-
- { package Cow;
- @ISA = qw(Animal);
- sub sound { "moooo" }
- }
-
-Note the added C<@ISA> array (pronounced "is a"). We'll get to that in a minute.
-
-But what happens when we invoke C<< Cow->speak >> now?
-
-First, Perl constructs the argument list. In this case, it's just
-C<Cow>. Then Perl looks for C<Cow::speak>. But that's not there, so
-Perl checks for the inheritance array C<@Cow::ISA>. It's there,
-and contains the single name C<Animal>.
-
-Perl next checks for C<speak> inside C<Animal> instead, as in
-C<Animal::speak>. And that's found, so Perl invokes that subroutine
-with the already frozen argument list.
-
-Inside the C<Animal::speak> subroutine, C<$class> becomes C<Cow> (the
-first argument). So when we get to the step of invoking
-C<< $class->sound >>, it'll be looking for C<< Cow->sound >>, which
-gets it on the first try without looking at C<@ISA>. Success!
-
-=head2 A few notes about @ISA
-
-This magical C<@ISA> variable has declared that C<Cow> "is a" C<Animal>.
-Note that it's an array, not a simple single value, because on rare
-occasions, it makes sense to have more than one parent class searched
-for the missing methods.
-
-If C<Animal> also had an C<@ISA>, then we'd check there too. The
-search is recursive, depth-first, left-to-right in each C<@ISA> by
-default (see L<mro> for alternatives). Typically, each C<@ISA> has
-only one element (multiple elements means multiple inheritance and
-multiple headaches), so we get a nice tree of inheritance.
-
-When we turn on C<use strict>, we'll get complaints on C<@ISA>, since
-it's not a variable containing an explicit package name, nor is it a
-lexical ("my") variable. We can't make it a lexical variable though
-(it has to belong to the package to be found by the inheritance mechanism),
-so there's a couple of straightforward ways to handle that.
-
-The easiest is to just spell the package name out:
-
- @Cow::ISA = qw(Animal);
-
-Or declare it as a package global variable:
-
- package Cow;
- our @ISA = qw(Animal);
-
-Or allow it as an implicitly named package variable:
-
- package Cow;
- use vars qw(@ISA);
- @ISA = qw(Animal);
-
-If the C<Animal> class comes from another (object-oriented) module, then
-just employ C<use base> to specify that C<Animal> should serve as the basis
-for the C<Cow> class:
-
- package Cow;
- use base qw(Animal);
-
-Now that's pretty darn simple!
-
-=head2 Overriding the methods
-
-Let's add a mouse, which can barely be heard:
-
- # Animal package from before
- { package Mouse;
- @ISA = qw(Animal);
- sub sound { "squeak" }
- sub speak {
- my $class = shift;
- print "a $class goes ", $class->sound, "!\n";
- print "[but you can barely hear it!]\n";
- }
- }
-
- Mouse->speak;
-
-which results in:
-
- a Mouse goes squeak!
- [but you can barely hear it!]
-
-Here, C<Mouse> has its own speaking routine, so C<< Mouse->speak >>
-doesn't immediately invoke C<< Animal->speak >>. This is known as
-"overriding". In fact, we don't even need to say that a C<Mouse> is
-an C<Animal> at all, because all of the methods needed for C<speak> are
-completely defined for C<Mouse>; this is known as "duck typing":
-"If it walks like a duck and quacks like a duck, I would call it a duck"
-(James Whitcomb). However, it would probably be beneficial to allow a
-closer examination to conclude that a C<Mouse> is indeed an C<Animal>,
-so it is actually better to define C<Mouse> with C<Animal> as its base
-(that is, it is better to "derive C<Mouse> from C<Animal>").
-
-Moreover, this duplication of code could become a maintenance headache
-(though code-reuse is not actually a good reason for inheritance; good
-design practices dictate that a derived class should be usable wherever
-its base class is usable, which might not be the outcome if code-reuse
-is the sole criterion for inheritance. Just remember that a C<Mouse>
-should always act like an C<Animal>).
-
-So, let's make C<Mouse> an C<Animal>!
-
-The obvious solution is to invoke C<Animal::speak> directly:
-
- # Animal package from before
- { package Mouse;
- @ISA = qw(Animal);
- sub sound { "squeak" }
- sub speak {
- my $class = shift;
- Animal::speak($class);
- print "[but you can barely hear it!]\n";
- }
- }
-
-Note that we're using C<Animal::speak>. If we were to invoke
-C<< Animal->speak >> instead, the first parameter to C<Animal::speak>
-would automatically be C<"Animal"> rather than C<"Mouse">, so that
-the call to C<< $class->sound >> in C<Animal::speak> would become
-C<< Animal->sound >> rather than C<< Mouse->sound >>.
-
-Also, without the method arrow C<< -> >>, it becomes necessary to specify
-the first parameter to C<Animal::speak> ourselves, which is why C<$class>
-is explicitly passed: C<Animal::speak($class)>.
-
-However, invoking C<Animal::speak> directly is a mess: Firstly, it assumes
-that the C<speak> method is a member of the C<Animal> class; what if C<Animal>
-actually inherits C<speak> from its own base? Because we are no longer using
-C<< -> >> to access C<speak>, the special method look up mechanism wouldn't be
-used, so C<speak> wouldn't even be found!
-
-The second problem is more subtle: C<Animal> is now hardwired into the subroutine
-selection. Let's assume that C<Animal::speak> does exist. What happens when,
-at a later time, someone expands the class hierarchy by having C<Mouse>
-inherit from C<Mus> instead of C<Animal>. Unless the invocation of C<Animal::speak>
-is also changed to an invocation of C<Mus::speak>, centuries worth of taxonomical
-classification could be obliterated!
-
-What we have here is a fragile or leaky abstraction; it is the beginning of a
-maintenance nightmare. What we need is the ability to search for the right
-method wih as few assumptions as possible.
-
-=head2 Starting the search from a different place
-
-A I<better> solution is to tell Perl where in the inheritance chain to begin searching
-for C<speak>. This can be achieved with a modified version of the method arrow C<< -> >>:
-
- ClassName->FirstPlaceToLook::method
-
-So, the improved C<Mouse> class is:
-
- # same Animal as before
- { package Mouse;
- # same @ISA, &sound as before
- sub speak {
- my $class = shift;
- $class->Animal::speak;
- print "[but you can barely hear it!]\n";
- }
- }
-
-Using this syntax, we start with C<Animal> to find C<speak>, and then
-use all of C<Animal>'s inheritance chain if it is not found immediately.
-As usual, the first parameter to C<speak> would be C<$class>, so we no
-longer need to pass C<$class> explicitly to C<speak>.
-
-But what about the second problem? We're still hardwiring C<Animal> into
-the method lookup.
-
-=head2 The SUPER way of doing things
-
-If C<Animal> is replaced with the special placeholder C<SUPER> in that
-invocation, then the contents of C<Mouse>'s C<@ISA> are used for the
-search, beginning with C<$ISA[0]>. So, all of the problems can be fixed
-as follows:
-
- # same Animal as before
- { package Mouse;
- # same @ISA, &sound as before
- sub speak {
- my $class = shift;
- $class->SUPER::speak;
- print "[but you can barely hear it!]\n";
- }
- }
-
-In general, C<SUPER::speak> means look in the current package's C<@ISA>
-for a class that implements C<speak>, and invoke the first one found.
-The placeholder is called C<SUPER>, because many other languages refer
-to base classes as "I<super>classes", and Perl likes to be eclectic.
-
-Note that a call such as
-
- $class->SUPER::method;
-
-does I<not> look in the C<@ISA> of C<$class> unless C<$class> happens to
-be the current package.
-
-=head2 Let's review...
-
-So far, we've seen the method arrow syntax:
-
- Class->method(@args);
-
-or the equivalent:
-
- $a = "Class";
- $a->method(@args);
-
-which constructs an argument list of:
-
- ("Class", @args)
-
-and attempts to invoke:
-
- Class::method("Class", @args);
-
-However, if C<Class::method> is not found, then C<@Class::ISA> is examined
-(recursively) to locate a class (a package) that does indeed contain C<method>,
-and that subroutine is invoked instead.
-
-Using this simple syntax, we have class methods, (multiple) inheritance,
-overriding, and extending. Using just what we've seen so far, we've
-been able to factor out common code (though that's never a good reason
-for inheritance!), and provide a nice way to reuse implementations with
-variations.
-
-Now, what about data?
-
-=head2 A horse is a horse, of course of course, or is it?
-
-Let's start with the code for the C<Animal> class
-and the C<Horse> class:
-
- { package Animal;
- sub speak {
- my $class = shift;
- print "a $class goes ", $class->sound, "!\n";
- }
- }
- { package Horse;
- @ISA = qw(Animal);
- sub sound { "neigh" }
- }
-
-This lets us invoke C<< Horse->speak >> to ripple upward to
-C<Animal::speak>, calling back to C<Horse::sound> to get the specific
-sound, and the output of:
-
- a Horse goes neigh!
-
-But all of our Horse objects would have to be absolutely identical.
-If we add a subroutine, all horses automatically share it. That's
-great for making horses the same, but how do we capture the
-distinctions of an individual horse? For example, suppose we want
-to give our first horse a name. There's got to be a way to keep its
-name separate from the other horses.
-
-That is to say, we want particular instances of C<Horse> to have
-different names.
-
-In Perl, any reference can be an "instance", so let's start with the
-simplest reference that can hold a horse's name: a scalar reference.
-
- my $name = "Mr. Ed";
- my $horse = \$name;
-
-So, now C<$horse> is a reference to what will be the instance-specific
-data (the name). The final step is to turn this reference into a real
-instance of a C<Horse> by using the special operator C<bless>:
-
- bless $horse, Horse;
-
-This operator stores information about the package named C<Horse> into
-the thing pointed at by the reference. At this point, we say
-C<$horse> is an instance of C<Horse>. That is, it's a specific
-horse. The reference is otherwise unchanged, and can still be used
-with traditional dereferencing operators.
-
-=head2 Invoking an instance method
-
-The method arrow can be used on instances, as well as classes (the names
-of packages). So, let's get the sound that C<$horse> makes:
-
- my $noise = $horse->sound("some", "unnecessary", "args");
-
-To invoke C<sound>, Perl first notes that C<$horse> is a blessed
-reference (and thus an instance). It then constructs an argument
-list, as per usual.
-
-Now for the fun part: Perl takes the class in which the instance was
-blessed, in this case C<Horse>, and uses that class to locate the
-subroutine. In this case, C<Horse::sound> is found directly (without
-using inheritance). In the end, it is as though our initial line were
-written as follows:
-
- my $noise = Horse::sound($horse, "some", "unnecessary", "args");
-
-Note that the first parameter here is still the instance, not the name
-of the class as before. We'll get C<neigh> as the return value, and
-that'll end up as the C<$noise> variable above.
-
-If Horse::sound had not been found, we'd be wandering up the C<@Horse::ISA>
-array, trying to find the method in one of the superclasses. The only
-difference between a class method and an instance method is whether the
-first parameter is an instance (a blessed reference) or a class name (a
-string).
-
-=head2 Accessing the instance data
-
-Because we get the instance as the first parameter, we can now access
-the instance-specific data. In this case, let's add a way to get at
-the name:
-
- { package Horse;
- @ISA = qw(Animal);
- sub sound { "neigh" }
- sub name {
- my $self = shift;
- $$self;
- }
- }
-
-Inside C<Horse::name>, the C<@_> array contains:
-
- ($horse, "some", "unnecessary", "args")
-
-so the C<shift> stores C<$horse> into C<$self>. Then, C<$self> gets
-de-referenced with C<$$self> as normal, yielding C<"Mr. Ed">.
-
-It's traditional to C<shift> the first parameter into a variable named
-C<$self> for instance methods and into a variable named C<$class> for
-class methods.
-
-Then, the following line:
-
- print $horse->name, " says ", $horse->sound, "\n";
-
-outputs:
-
- Mr. Ed says neigh.
-
-=head2 How to build a horse
-
-Of course, if we constructed all of our horses by hand, we'd most
-likely make mistakes from time to time. We're also violating one of
-the properties of object-oriented programming, in that the "inside
-guts" of a Horse are visible. That's good if you're a veterinarian,
-but not if you just like to own horses. So, let's have the Horse
-class handle the details inside a class method:
-
- { package Horse;
- @ISA = qw(Animal);
- sub sound { "neigh" }
- sub name {
- my $self = shift; # instance method, so use $self
- $$self;
- }
- sub named {
- my $class = shift; # class method, so use $class
- my $name = shift;
- bless \$name, $class;
- }
- }
-
-Now with the new C<named> method, we can build a horse as follows:
-
- my $horse = Horse->named("Mr. Ed");
-
-Notice we're back to a class method, so the two arguments to
-C<Horse::named> are C<Horse> and C<Mr. Ed>. The C<bless> operator
-not only blesses C<\$name>, it also returns that reference.
-
-This C<Horse::named> method is called a "constructor".
-
-We've called the constructor C<named> here, so that it quickly denotes
-the constructor's argument as the name for this particular C<Horse>.
-You can use different constructors with different names for different
-ways of "giving birth" to the object (like maybe recording its
-pedigree or date of birth). However, you'll find that most people
-coming to Perl from more limited languages use a single constructor
-named C<new>, with various ways of interpreting the arguments to
-C<new>. Either style is fine, as long as you document your particular
-way of giving birth to an object. (And you I<were> going to do that,
-right?)
-
-=head2 Inheriting the constructor
-
-But was there anything specific to C<Horse> in that method? No. Therefore,
-it's also the same recipe for building anything else that inherited from
-C<Animal>, so let's put C<name> and C<named> there:
-
- { package Animal;
- sub speak {
- my $class = shift;
- print "a $class goes ", $class->sound, "!\n";
- }
- sub name {
- my $self = shift;
- $$self;
- }
- sub named {
- my $class = shift;
- my $name = shift;
- bless \$name, $class;
- }
- }
- { package Horse;
- @ISA = qw(Animal);
- sub sound { "neigh" }
- }
-
-Ahh, but what happens if we invoke C<speak> on an instance?
-
- my $horse = Horse->named("Mr. Ed");
- $horse->speak;
-
-We get a debugging value:
-
- a Horse=SCALAR(0xaca42ac) goes neigh!
-
-Why? Because the C<Animal::speak> routine is expecting a classname as
-its first parameter, not an instance. When the instance is passed in,
-we'll end up using a blessed scalar reference as a string, and that
-shows up as we saw it just now.
-
-=head2 Making a method work with either classes or instances
-
-All we need is for a method to detect if it is being called on a class
-or called on an instance. The most straightforward way is with the
-C<ref> operator. This returns a string (the classname) when used on a
-blessed reference, and an empty string when used on a string (like a
-classname). Let's modify the C<name> method first to notice the change:
-
- sub name {
- my $either = shift;
- ref $either ? $$either : "Any $either";
- }
-
-Here, the C<?:> operator comes in handy to select either the
-dereference or a derived string. Now we can use this with either an
-instance or a class. Note that I've changed the first parameter
-holder to C<$either> to show that this is intended:
-
- my $horse = Horse->named("Mr. Ed");
- print Horse->name, "\n"; # prints "Any Horse\n"
- print $horse->name, "\n"; # prints "Mr Ed.\n"
-
-and now we'll fix C<speak> to use this:
-
- sub speak {
- my $either = shift;
- print $either->name, " goes ", $either->sound, "\n";
- }
-
-And since C<sound> already worked with either a class or an instance,
-we're done!
-
-=head2 Adding parameters to a method
-
-Let's train our animals to eat:
-
- { package Animal;
- sub named {
- my $class = shift;
- my $name = shift;
- bless \$name, $class;
- }
- sub name {
- my $either = shift;
- ref $either ? $$either : "Any $either";
- }
- sub speak {
- my $either = shift;
- print $either->name, " goes ", $either->sound, "\n";
- }
- sub eat {
- my $either = shift;
- my $food = shift;
- print $either->name, " eats $food.\n";
- }
- }
- { package Horse;
- @ISA = qw(Animal);
- sub sound { "neigh" }
- }
- { package Sheep;
- @ISA = qw(Animal);
- sub sound { "baaaah" }
- }
-
-And now try it out:
-
- my $horse = Horse->named("Mr. Ed");
- $horse->eat("hay");
- Sheep->eat("grass");
-
-which prints:
-
- Mr. Ed eats hay.
- Any Sheep eats grass.
-
-An instance method with parameters gets invoked with the instance,
-and then the list of parameters. So that first invocation is like:
-
- Animal::eat($horse, "hay");
-
-=head2 More interesting instances
-
-What if an instance needs more data? Most interesting instances are
-made of many items, each of which can in turn be a reference or even
-another object. The easiest way to store these is often in a hash.
-The keys of the hash serve as the names of parts of the object (often
-called "instance variables" or "member variables"), and the
-corresponding values are, well, the values.
-
-But how do we turn the horse into a hash? Recall that an object was
-any blessed reference. We can just as easily make it a blessed hash
-reference as a blessed scalar reference, as long as everything that
-looks at the reference is changed accordingly.
-
-Let's make a sheep that has a name and a color:
-
- my $bad = bless { Name => "Evil", Color => "black" }, Sheep;
-
-so C<< $bad->{Name} >> has C<Evil>, and C<< $bad->{Color} >> has
-C<black>. But we want to make C<< $bad->name >> access the name, and
-that's now messed up because it's expecting a scalar reference. Not
-to worry, because that's pretty easy to fix up.
-
-One solution is to override C<Animal::name> and C<Animal::named> by
-defining them anew in C<Sheep>, but then any methods added later to
-C<Animal> might still mess up, and we'd have to override all of those
-too. Therefore, it's never a good idea to define the data layout in a
-way that's different from the data layout of the base classes. In fact,
-it's a good idea to use blessed hash references in all cases. Also, this
-is why it's important to have constructors do the low-level work. So,
-let's redefine C<Animal>:
-
- ## in Animal
- sub name {
- my $either = shift;
- ref $either ? $either->{Name} : "Any $either";
- }
- sub named {
- my $class = shift;
- my $name = shift;
- my $self = { Name => $name };
- bless $self, $class;
- }
-
-Of course, we still need to override C<named> in order to handle
-constructing a C<Sheep> with a certain color:
-
- ## in Sheep
- sub named {
- my ($class, $name) = @_;
- my $self = $class->SUPER::named(@_);
- $$self{Color} = $class->default_color;
- $self
- }
-
-(Note that C<@_> contains the parameters to C<named>.)
-
-What's this C<default_color>? Well, if C<named> has only the name,
-we still need to set a color, so we'll have a class-specific default color.
-For a sheep, we might define it as white:
-
- ## in Sheep
- sub default_color { "white" }
-
-Now:
-
- my $sheep = Sheep->named("Bad");
- print $sheep->{Color}, "\n";
-
-outputs:
-
- white
-
-Now, there's nothing particularly specific to C<Sheep> when it comes
-to color, so let's remove C<Sheep::named> and implement C<Animal::named>
-to handle color instead:
-
- ## in Animal
- sub named {
- my ($class, $name) = @_;
- my $self = { Name => $name, Color => $class->default_color };
- bless $self, $class;
- }
-
-And then to keep from having to define C<default_color> for each additional
-class, we'll define a method that serves as the "default default" directly
-in C<Animal>:
-
- ## in Animal
- sub default_color { "brown" }
-
-Of course, because C<name> and C<named> were the only methods that
-referenced the "structure" of the object, the rest of the methods can
-remain the same, so C<speak> still works as before.
-
-=head2 A horse of a different color
-
-But having all our horses be brown would be boring. So let's add a
-method or two to get and set the color.
-
- ## in Animal
- sub color {
- $_[0]->{Color}
- }
- sub set_color {
- $_[0]->{Color} = $_[1];
- }
-
-Note the alternate way of accessing the arguments: C<$_[0]> is used
-in-place, rather than with a C<shift>. (This saves us a bit of time
-for something that may be invoked frequently.) And now we can fix
-that color for Mr. Ed:
-
- my $horse = Horse->named("Mr. Ed");
- $horse->set_color("black-and-white");
- print $horse->name, " is colored ", $horse->color, "\n";
-
-which results in:
-
- Mr. Ed is colored black-and-white
-
-=head2 Summary
-
-So, now we have class methods, constructors, instance methods, instance
-data, and even accessors. But that's still just the beginning of what
-Perl has to offer. We haven't even begun to talk about accessors that
-double as getters and setters, destructors, indirect object notation,
-overloading, "isa" and "can" tests, the C<UNIVERSAL> class, and so on.
-That's for the rest of the Perl documentation to cover. Hopefully, this
-gets you started, though.
-
-=head1 SEE ALSO
-
-For more information, see L<perlobj> (for all the gritty details about
-Perl objects, now that you've seen the basics), L<perltoot> (the
-tutorial for those who already know objects), L<perltooc> (dealing
-with class data), L<perlbot> (for some more tricks), and books such as
-Damian Conway's excellent I<Object Oriented Perl>.
-
-Some modules which might prove interesting are Class::Accessor,
-Class::Class, Class::Contract, Class::Data::Inheritable,
-Class::MethodMaker and Tie::SecureHash
-
-=head1 COPYRIGHT
-
-Copyright (c) 1999, 2000 by Randal L. Schwartz and Stonehenge
-Consulting Services, Inc.
-
-Copyright (c) 2009 by Michael F. Witten.
-
-Permission is hereby granted to distribute this document intact with
-the Perl distribution, and in accordance with the licenses of the Perl
-distribution; derived documents must include this copyright notice
-intact.
-
-Portions of this text have been derived from Perl Training materials
-originally appearing in the I<Packages, References, Objects, and
-Modules> course taught by instructors for Stonehenge Consulting
-Services, Inc. and used with permission.
+For information on OO programming with Perl, please see L<perlootut>
+and L<perlobj>.
-Portions of this text have been derived from materials originally
-appearing in I<Linux Magazine> and used with permission.
+=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perlbot.pod b/Master/tlpkg/tlperl/lib/pods/perlbot.pod
index 305a6951b7f..2e8c68021c3 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlbot.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlbot.pod
@@ -1,535 +1,12 @@
+=encoding utf8
+
=head1 NAME
-perlbot - Bag o' Object Tricks (the BOT)
+perlbot - This document has been deleted
=head1 DESCRIPTION
-The following collection of tricks and hints is intended to whet curious
-appetites about such things as the use of instance variables and the
-mechanics of object and class relationships. The reader is encouraged to
-consult relevant textbooks for discussion of Object Oriented definitions and
-methodology. This is not intended as a tutorial for object-oriented
-programming or as a comprehensive guide to Perl's object oriented features,
-nor should it be construed as a style guide. If you're looking for tutorials,
-be sure to read L<perlboot>, L<perltoot>, and L<perltooc>.
-
-The Perl motto still holds: There's more than one way to do it.
-
-=head1 OO SCALING TIPS
-
-=over 5
-
-=item 1
-
-Do not attempt to verify the type of $self. That'll break if the class is
-inherited, when the type of $self is valid but its package isn't what you
-expect. See rule 5.
-
-=item 2
-
-If an object-oriented (OO) or indirect-object (IO) syntax was used, then the
-object is probably the correct type and there's no need to become paranoid
-about it. Perl isn't a paranoid language anyway. If people subvert the OO
-or IO syntax then they probably know what they're doing and you should let
-them do it. See rule 1.
-
-=item 3
-
-Use the two-argument form of bless(). Let a subclass use your constructor.
-See L<INHERITING A CONSTRUCTOR>.
-
-=item 4
-
-The subclass is allowed to know things about its immediate superclass, the
-superclass is allowed to know nothing about a subclass.
-
-=item 5
-
-Don't be trigger happy with inheritance. A "using", "containing", or
-"delegation" relationship (some sort of aggregation, at least) is often more
-appropriate. See L<OBJECT RELATIONSHIPS>, L<USING RELATIONSHIP WITH SDBM>,
-and L<"DELEGATION">.
-
-=item 6
-
-The object is the namespace. Make package globals accessible via the
-object. This will remove the guess work about the symbol's home package.
-See L<CLASS CONTEXT AND THE OBJECT>.
-
-=item 7
-
-IO syntax is certainly less noisy, but it is also prone to ambiguities that
-can cause difficult-to-find bugs. Allow people to use the sure-thing OO
-syntax, even if you don't like it.
-
-=item 8
-
-Do not use function-call syntax on a method. You're going to be bitten
-someday. Someone might move that method into a superclass and your code
-will be broken. On top of that you're feeding the paranoia in rule 2.
-
-=item 9
-
-Don't assume you know the home package of a method. You're making it
-difficult for someone to override that method. See L<THINKING OF CODE REUSE>.
-
-=back
-
-=head1 INSTANCE VARIABLES
-
-An anonymous array or anonymous hash can be used to hold instance
-variables. Named parameters are also demonstrated.
-
- package Foo;
-
- sub new {
- my $type = shift;
- my %params = @_;
- my $self = {};
- $self->{'High'} = $params{'High'};
- $self->{'Low'} = $params{'Low'};
- bless $self, $type;
- }
-
-
- package Bar;
-
- sub new {
- my $type = shift;
- my %params = @_;
- my $self = [];
- $self->[0] = $params{'Left'};
- $self->[1] = $params{'Right'};
- bless $self, $type;
- }
-
- package main;
-
- $a = Foo->new( 'High' => 42, 'Low' => 11 );
- print "High=$a->{'High'}\n";
- print "Low=$a->{'Low'}\n";
-
- $b = Bar->new( 'Left' => 78, 'Right' => 40 );
- print "Left=$b->[0]\n";
- print "Right=$b->[1]\n";
-
-=head1 SCALAR INSTANCE VARIABLES
-
-An anonymous scalar can be used when only one instance variable is needed.
-
- package Foo;
-
- sub new {
- my $type = shift;
- my $self;
- $self = shift;
- bless \$self, $type;
- }
-
- package main;
-
- $a = Foo->new( 42 );
- print "a=$$a\n";
-
-
-=head1 INSTANCE VARIABLE INHERITANCE
-
-This example demonstrates how one might inherit instance variables from a
-superclass for inclusion in the new class. This requires calling the
-superclass's constructor and adding one's own instance variables to the new
-object.
-
- package Bar;
-
- sub new {
- my $type = shift;
- my $self = {};
- $self->{'buz'} = 42;
- bless $self, $type;
- }
-
- package Foo;
- @ISA = qw( Bar );
-
- sub new {
- my $type = shift;
- my $self = Bar->new;
- $self->{'biz'} = 11;
- bless $self, $type;
- }
-
- package main;
-
- $a = Foo->new;
- print "buz = ", $a->{'buz'}, "\n";
- print "biz = ", $a->{'biz'}, "\n";
-
-
-
-=head1 OBJECT RELATIONSHIPS
-
-The following demonstrates how one might implement "containing" and "using"
-relationships between objects.
-
- package Bar;
-
- sub new {
- my $type = shift;
- my $self = {};
- $self->{'buz'} = 42;
- bless $self, $type;
- }
-
- package Foo;
-
- sub new {
- my $type = shift;
- my $self = {};
- $self->{'Bar'} = Bar->new;
- $self->{'biz'} = 11;
- bless $self, $type;
- }
-
- package main;
-
- $a = Foo->new;
- print "buz = ", $a->{'Bar'}->{'buz'}, "\n";
- print "biz = ", $a->{'biz'}, "\n";
-
-
-
-=head1 OVERRIDING SUPERCLASS METHODS
-
-The following example demonstrates how to override a superclass method and
-then call the overridden method. The B<SUPER> pseudo-class allows the
-programmer to call an overridden superclass method without actually knowing
-where that method is defined.
-
- package Buz;
- sub goo { print "here's the goo\n" }
-
- package Bar; @ISA = qw( Buz );
- sub google { print "google here\n" }
-
- package Baz;
- sub mumble { print "mumbling\n" }
-
- package Foo;
- @ISA = qw( Bar Baz );
-
- sub new {
- my $type = shift;
- bless [], $type;
- }
- sub grr { print "grumble\n" }
- sub goo {
- my $self = shift;
- $self->SUPER::goo();
- }
- sub mumble {
- my $self = shift;
- $self->SUPER::mumble();
- }
- sub google {
- my $self = shift;
- $self->SUPER::google();
- }
-
- package main;
-
- $foo = Foo->new;
- $foo->mumble;
- $foo->grr;
- $foo->goo;
- $foo->google;
-
-Note that C<SUPER> refers to the superclasses of the current package
-(C<Foo>), not to the superclasses of C<$self>.
-
-
-=head1 USING RELATIONSHIP WITH SDBM
-
-This example demonstrates an interface for the SDBM class. This creates a
-"using" relationship between the SDBM class and the new class Mydbm.
-
- package Mydbm;
-
- require SDBM_File;
- require Tie::Hash;
- @ISA = qw( Tie::Hash );
-
- sub TIEHASH {
- my $type = shift;
- my $ref = SDBM_File->new(@_);
- bless {'dbm' => $ref}, $type;
- }
- sub FETCH {
- my $self = shift;
- my $ref = $self->{'dbm'};
- $ref->FETCH(@_);
- }
- sub STORE {
- my $self = shift;
- if (defined $_[0]){
- my $ref = $self->{'dbm'};
- $ref->STORE(@_);
- } else {
- die "Cannot STORE an undefined key in Mydbm\n";
- }
- }
-
- package main;
- use Fcntl qw( O_RDWR O_CREAT );
-
- tie %foo, "Mydbm", "Sdbm", O_RDWR|O_CREAT, 0640;
- $foo{'bar'} = 123;
- print "foo-bar = $foo{'bar'}\n";
-
- tie %bar, "Mydbm", "Sdbm2", O_RDWR|O_CREAT, 0640;
- $bar{'Cathy'} = 456;
- print "bar-Cathy = $bar{'Cathy'}\n";
-
-=head1 THINKING OF CODE REUSE
-
-One strength of Object-Oriented languages is the ease with which old code
-can use new code. The following examples will demonstrate first how one can
-hinder code reuse and then how one can promote code reuse.
-
-This first example illustrates a class which uses a fully-qualified method
-call to access the "private" method BAZ(). The second example will show
-that it is impossible to override the BAZ() method.
-
- package FOO;
-
- sub new {
- my $type = shift;
- bless {}, $type;
- }
- sub bar {
- my $self = shift;
- $self->FOO::private::BAZ;
- }
-
- package FOO::private;
-
- sub BAZ {
- print "in BAZ\n";
- }
-
- package main;
-
- $a = FOO->new;
- $a->bar;
-
-Now we try to override the BAZ() method. We would like FOO::bar() to call
-GOOP::BAZ(), but this cannot happen because FOO::bar() explicitly calls
-FOO::private::BAZ().
-
- package FOO;
-
- sub new {
- my $type = shift;
- bless {}, $type;
- }
- sub bar {
- my $self = shift;
- $self->FOO::private::BAZ;
- }
-
- package FOO::private;
-
- sub BAZ {
- print "in BAZ\n";
- }
-
- package GOOP;
- @ISA = qw( FOO );
- sub new {
- my $type = shift;
- bless {}, $type;
- }
-
- sub BAZ {
- print "in GOOP::BAZ\n";
- }
-
- package main;
-
- $a = GOOP->new;
- $a->bar;
-
-To create reusable code we must modify class FOO, flattening class
-FOO::private. The next example shows a reusable class FOO which allows the
-method GOOP::BAZ() to be used in place of FOO::BAZ().
-
- package FOO;
-
- sub new {
- my $type = shift;
- bless {}, $type;
- }
- sub bar {
- my $self = shift;
- $self->BAZ;
- }
-
- sub BAZ {
- print "in BAZ\n";
- }
-
- package GOOP;
- @ISA = qw( FOO );
-
- sub new {
- my $type = shift;
- bless {}, $type;
- }
- sub BAZ {
- print "in GOOP::BAZ\n";
- }
-
- package main;
-
- $a = GOOP->new;
- $a->bar;
-
-=head1 CLASS CONTEXT AND THE OBJECT
-
-Use the object to solve package and class context problems. Everything a
-method needs should be available via the object or should be passed as a
-parameter to the method.
-
-A class will sometimes have static or global data to be used by the
-methods. A subclass may want to override that data and replace it with new
-data. When this happens the superclass may not know how to find the new
-copy of the data.
-
-This problem can be solved by using the object to define the context of the
-method. Let the method look in the object for a reference to the data. The
-alternative is to force the method to go hunting for the data ("Is it in my
-class, or in a subclass? Which subclass?"), and this can be inconvenient
-and will lead to hackery. It is better just to let the object tell the
-method where that data is located.
-
- package Bar;
-
- %fizzle = ( 'Password' => 'XYZZY' );
-
- sub new {
- my $type = shift;
- my $self = {};
- $self->{'fizzle'} = \%fizzle;
- bless $self, $type;
- }
-
- sub enter {
- my $self = shift;
-
- # Don't try to guess if we should use %Bar::fizzle
- # or %Foo::fizzle. The object already knows which
- # we should use, so just ask it.
- #
- my $fizzle = $self->{'fizzle'};
-
- print "The word is ", $fizzle->{'Password'}, "\n";
- }
-
- package Foo;
- @ISA = qw( Bar );
-
- %fizzle = ( 'Password' => 'Rumple' );
-
- sub new {
- my $type = shift;
- my $self = Bar->new;
- $self->{'fizzle'} = \%fizzle;
- bless $self, $type;
- }
-
- package main;
-
- $a = Bar->new;
- $b = Foo->new;
- $a->enter;
- $b->enter;
-
-=head1 INHERITING A CONSTRUCTOR
-
-An inheritable constructor should use the second form of bless() which allows
-blessing directly into a specified class. Notice in this example that the
-object will be a BAR not a FOO, even though the constructor is in class FOO.
-
- package FOO;
-
- sub new {
- my $type = shift;
- my $self = {};
- bless $self, $type;
- }
-
- sub baz {
- print "in FOO::baz()\n";
- }
-
- package BAR;
- @ISA = qw(FOO);
-
- sub baz {
- print "in BAR::baz()\n";
- }
-
- package main;
-
- $a = BAR->new;
- $a->baz;
-
-=head1 DELEGATION
-
-Some classes, such as SDBM_File, cannot be effectively subclassed because
-they create foreign objects. Such a class can be extended with some sort of
-aggregation technique such as the "using" relationship mentioned earlier or
-by delegation.
-
-The following example demonstrates delegation using an AUTOLOAD() function to
-perform message-forwarding. This will allow the Mydbm object to behave
-exactly like an SDBM_File object. The Mydbm class could now extend the
-behavior by adding custom FETCH() and STORE() methods, if this is desired.
-
- package Mydbm;
-
- require SDBM_File;
- require Tie::Hash;
- @ISA = qw(Tie::Hash);
-
- sub TIEHASH {
- my $type = shift;
- my $ref = SDBM_File->new(@_);
- bless {'delegate' => $ref};
- }
-
- sub AUTOLOAD {
- my $self = shift;
-
- # The Perl interpreter places the name of the
- # message in a variable called $AUTOLOAD.
-
- # DESTROY messages should never be propagated.
- return if $AUTOLOAD =~ /::DESTROY$/;
-
- # Remove the package name.
- $AUTOLOAD =~ s/^Mydbm:://;
-
- # Pass the message to the delegate.
- $self->{'delegate'}->$AUTOLOAD(@_);
- }
-
- package main;
- use Fcntl qw( O_RDWR O_CREAT );
-
- tie %foo, "Mydbm", "adbm", O_RDWR|O_CREAT, 0640;
- $foo{'bar'} = 123;
- print "foo-bar = $foo{'bar'}\n";
-
-=head1 SEE ALSO
+For information on OO programming with Perl, please see L<perlootut>
+and L<perlobj>.
-L<perlboot>, L<perltoot>, L<perltooc>.
+=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perlbs2000.pod b/Master/tlpkg/tlperl/lib/pods/perlbs2000.pod
index b13d9840d27..6868557d021 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlbs2000.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlbs2000.pod
@@ -5,7 +5,7 @@ about pod in pod/perlpod.pod or the short summary in the INSTALL file.
=head1 NAME
-README.BS2000 - building and installing Perl for BS2000.
+perlbs2000 - building and installing Perl for BS2000.
=head1 SYNOPSIS
@@ -224,7 +224,7 @@ To subscribe, send an empty message to perl-mvs-subscribe@perl.org.
See also:
- http://lists.perl.org/showlist.cgi?name=perl-mvs
+ http://lists.perl.org/list/perl-mvs.html
There are web archives of the mailing list at:
diff --git a/Master/tlpkg/tlperl/lib/pods/perlcall.pod b/Master/tlpkg/tlperl/lib/pods/perlcall.pod
index df03ed6f200..4c7ffc9fb2a 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlcall.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlcall.pod
@@ -28,7 +28,7 @@ called instead.
=item * An Event-Driven Program
The classic example of where callbacks are used is when writing an
-event driven program, such as for an X windows application. In this case
+event driven program, such as for an X11 application. In this case
you register functions to be called whenever specific events occur,
e.g., a mouse button is pressed, the cursor moves into a window or a
menu item is selected.
@@ -203,7 +203,6 @@ As with G_SCALAR, this flag has 2 effects:
It indicates to the subroutine being called that it is executing in a
list context (if it executes I<wantarray> the result will be true).
-
=item 2.
It ensures that all items returned from the subroutine will be
@@ -1901,7 +1900,7 @@ The pattern of macro calls is like this:
dMULTICALL; /* Declare local variables */
I32 gimme = G_SCALAR; /* context of the call: G_SCALAR,
- * G_LIST, or G_VOID */
+ * G_ARRAY, or G_VOID */
PUSH_MULTICALL(cv); /* Set up the context for calling cv,
and set local vars appropriately */
diff --git a/Master/tlpkg/tlperl/lib/pods/perlce.pod b/Master/tlpkg/tlperl/lib/pods/perlce.pod
index 2ca2bf0ae60..7481badd4a0 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlce.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlce.pod
@@ -20,38 +20,38 @@ software is distributed.
=item *
-C<miniperl> is built. This is a single executable (without DLL), intended
+F<miniperl> is built. This is a single executable (without DLL), intended
to run on Win32, and it will facilitate remaining build process; all binaries
built after it are foreign and should not run locally.
-C<miniperl> is built using C<./win32/Makefile>; this is part of normal
+F<miniperl> is built using F<./win32/Makefile>; this is part of normal
build process invoked as dependency from wince/Makefile.ce
=item *
-After C<miniperl> is built, C<configpm> is invoked to create right C<Config.pm>
+After F<miniperl> is built, F<configpm> is invoked to create right F<Config.pm>
in right place and its corresponding Cross.pm.
-Unlike Win32 build, miniperl will not have C<Config.pm> of host within reach;
-it rather will use C<Config.pm> from within cross-compilation directories.
+Unlike Win32 build, miniperl will not have F<Config.pm> of host within reach;
+it rather will use F<Config.pm> from within cross-compilation directories.
-File C<Cross.pm> is dead simple: for given cross-architecture places in @INC
-a path where perl modules are, and right C<Config.pm> in that place.
+File F<Cross.pm> is dead simple: for given cross-architecture places in @INC
+a path where perl modules are, and right F<Config.pm> in that place.
That said, C<miniperl -Ilib -MConfig -we 1> should report an error, because
-it can not find C<Config.pm>. If it does not give an error -- wrong C<Config.pm>
+it can not find F<Config.pm>. If it does not give an error -- wrong F<Config.pm>
is substituted, and resulting binaries will be a mess.
C<miniperl -MCross -MConfig -we 1> should run okay, and it will provide right
-C<Config.pm> for further compilations.
+F<Config.pm> for further compilations.
=item *
-During extensions build phase, a script C<./win32/buldext.pl> is invoked,
-which in turn steps in C<./ext> subdirectories and performs a build of
+During extensions build phase, a script F<./win32/buldext.pl> is invoked,
+which in turn steps in F<./ext> subdirectories and performs a build of
each extension in turn.
-All invokes of C<Makefile.PL> are provided with C<-MCross> so to enable cross-
+All invokes of F<Makefile.PL> are provided with C<-MCross> so to enable cross-
compile.
=back
@@ -79,14 +79,14 @@ For compiling, you need following:
=back
Needed source files can be downloaded at
-L<http://www.rainer-keuchel.de/wince/dirlist.html>
+L<http://perlce.sourceforge.net>
=head3 Make
-Normally you only need to edit C<./win32/ce-helpers/compile.bat>
+Normally you only need to edit F<./win32/ce-helpers/compile.bat>
to reflect your system and run it.
-File C<./win32/ce-helpers/compile.bat> is actually a wrapper to call
+File F<./win32/ce-helpers/compile.bat> is actually a wrapper to call
C<nmake -f makefile.ce> with appropriate parameters and it accepts extra
parameters and forwards them to C<nmake> command as additional
arguments. You should pass target this way.
@@ -95,9 +95,9 @@ To prepare distribution you need to do following:
=over 4
-=item * go to C<./win32> subdirectory
+=item * go to F<./win32> subdirectory
-=item * edit file C<./win32/ce-helpers/compile.bat>
+=item * edit file F<./win32/ce-helpers/compile.bat>
=item * run
compile.bat
@@ -107,7 +107,7 @@ To prepare distribution you need to do following:
=back
-C<Makefile.ce> has C<CROSS_NAME> macro, and it is used further to refer to
+F<Makefile.ce> has C<CROSS_NAME> macro, and it is used further to refer to
your cross-compilation scheme. You could assign a name to it, but this
is not necessary, because by default it is assigned after your machine
configuration name, such as "wince-sh3-hpc-wce211", and this is enough
@@ -115,7 +115,7 @@ to distinguish different builds at the same time. This option could be
handy for several different builds on same platform to perform, say,
threaded build. In a following example we assume that all required
environment variables are set properly for C cross-compiler (a special
-*.bat file could fit perfectly to this purpose) and your C<compile.bat>
+*.bat file could fit perfectly to this purpose) and your F<compile.bat>
has proper "MACHINE" parameter set, to, say, C<wince-mips-pocket-wce300>.
compile.bat
@@ -130,10 +130,10 @@ Target C<dist> prepares distribution file set. Target C<zipdist> performs
same as C<dist> but additionally compresses distribution files into zip
archive.
-NOTE: during a build there could be created a number (or one) of C<Config.pm>
-for cross-compilation ("foreign" C<Config.pm>) and those are hidden inside
-C<../xlib/$(CROSS_NAME)> with other auxiliary files, but, and this is important to
-note, there should be B<no> C<Config.pm> for host miniperl.
+NOTE: during a build there could be created a number (or one) of F<Config.pm>
+for cross-compilation ("foreign" F<Config.pm>) and those are hidden inside
+F<../xlib/$(CROSS_NAME)> with other auxiliary files, but, and this is important to
+note, there should be B<no> F<Config.pm> for host miniperl.
If you'll get an error that perl could not find Config.pm somewhere in building
process this means something went wrong. Most probably you forgot to
specify a cross-compilation when invoking miniperl.exe to Makefile.PL
@@ -158,16 +158,16 @@ F<perlce-user@lists.sourceforge.net> mailing list.
PerlCE is currently linked with a simple console window, so it also
works on non-hpc devices.
-The simple stdio implementation creates the files C<stdin.txt>,
-C<stdout.txt> and C<stderr.txt>, so you might examine them if your
+The simple stdio implementation creates the files F<stdin.txt>,
+F<stdout.txt> and F<stderr.txt>, so you might examine them if your
console has only a limited number of cols.
When exitcode is non-zero, a message box appears, otherwise the
console closes, so you might have to catch an exit with
status 0 in your program to see any output.
-stdout/stderr now go into the files C</perl-stdout.txt> and
-C</perl-stderr.txt.>
+stdout/stderr now go into the files F</perl-stdout.txt> and
+F</perl-stderr.txt.>
PerlIDE is handy to deal with perlce.
@@ -196,7 +196,7 @@ Semi-list for executables.
=item UNIXROOTPATH
-- Root for accessing some special files, i.e. C</dev/null>, C</etc/services>.
+- Root for accessing some special files, i.e. F</dev/null>, F</etc/services>.
=item ROWS/COLS
@@ -218,7 +218,7 @@ or via the PerlIDE.
=head2 REGISTRY
To start perl by clicking on a perl source file, you have
-to make the according entries in HKCR (see C<ce-helpers/wince-reg.bat>).
+to make the according entries in HKCR (see F<ce-helpers/wince-reg.bat>).
cereg.exe (which must be executed on a desktop pc with
ActiveSync) is reported not to work on some devices.
You have to create the registry entries by hand using a
@@ -271,21 +271,21 @@ The port for Win32 was used as a reference.
=item 5.6.0
Initial port of perl to WinCE. It was performed in separate directory
-named C<wince>. This port was based on contents of C<./win32> directory.
-C<miniperl> was not built, user must have HOST perl and properly edit
-C<makefile.ce> to reflect this.
+named F<wince>. This port was based on contents of F<./win32> directory.
+F<miniperl> was not built, user must have HOST perl and properly edit
+F<makefile.ce> to reflect this.
=item 5.8.0
-wince port was kept in the same C<./wince> directory, and C<wince/Makefile.ce>
+wince port was kept in the same F<./wince> directory, and F<wince/Makefile.ce>
was used to invoke native compiler to create HOST miniperl, which then
facilitates cross-compiling process.
Extension building support was added.
=item 5.9.4
-Two directories C<./win32> and C<./wince> were merged, so perlce build
-process comes in C<./win32> directory.
+Two directories F<./win32> and F<./wince> were merged, so perlce build
+process comes in F<./win32> directory.
=back
diff --git a/Master/tlpkg/tlperl/lib/pods/perlcheat.pod b/Master/tlpkg/tlperl/lib/pods/perlcheat.pod
index d210fa0a90b..deee2fecdfb 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlcheat.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlcheat.pod
@@ -10,68 +10,70 @@ already be overwhelming.
=head2 The sheet
- CONTEXTS SIGILS ARRAYS HASHES
- void $scalar whole: @array %hash
- scalar @array slice: @array[0, 2] @hash{'a', 'b'}
- list %hash element: $array[0] $hash{'a'}
- &sub
- *glob SCALAR VALUES
- number, string, reference, glob, undef
+ CONTEXTS SIGILS ref ARRAYS HASHES
+ void $scalar SCALAR @array %hash
+ scalar @array ARRAY @array[0, 2] @hash{'a', 'b'}
+ list %hash HASH $array[0] $hash{'a'}
+ &sub CODE
+ *glob GLOB SCALAR VALUES
+ FORMAT number, string, ref, glob, undef
REFERENCES
- \ references $$foo[1] aka $foo->[1]
- $@%&* dereference $$foo{bar} aka $foo->{bar}
- [] anon. arrayref ${$$foo[1]}[2] aka $foo->[1]->[2]
- {} anon. hashref ${$$foo[1]}[2] aka $foo->[1][2]
- \() list of refs
- NUMBERS vs STRINGS LINKS
- OPERATOR PRECEDENCE = = perl.plover.com
- -> + . search.cpan.org
- ++ -- == != eq ne cpan.org
- ** < > <= >= lt gt le ge pm.org
- ! ~ \ u+ u- <=> cmp tpj.com
- =~ !~ perldoc.com
- * / % x SYNTAX
- + - . for (LIST) { }, for (a;b;c) { }
- << >> while ( ) { }, until ( ) { }
- named uops if ( ) { } elsif ( ) { } else { }
- < > <= >= lt gt le ge unless ( ) { } elsif ( ) { } else { }
- == != <=> eq ne cmp ~~ for equals foreach (ALWAYS)
+ \ reference $$foo[1] aka $foo->[1]
+ $@%&* dereference $$foo{bar} aka $foo->{bar}
+ [] anon. arrayref ${$$foo[1]}[2] aka $foo->[1]->[2]
+ {} anon. hashref ${$$foo[1]}[2] aka $foo->[1][2]
+ \() list of refs
+ NUMBERS vs STRINGS LINKS
+ OPERATOR PRECEDENCE = = perldoc.perl.org
+ -> + . search.cpan.org
+ ++ -- == != eq ne cpan.org
+ ** < > <= >= lt gt le ge pm.org
+ ! ~ \ u+ u- <=> cmp p3rl.org
+ =~ !~ perlmonks.org
+ * / % x SYNTAX
+ + - . foreach (LIST) { } for (a;b;c) { }
+ << >> while (e) { } until (e) { }
+ named uops if (e) { } elsif (e) { } else { }
+ < > <= >= lt gt le ge unless (e) { } elsif (e) { } else { }
+ == != <=> eq ne cmp ~~ given (e) { when (e) {} default {} }
&
- | ^ REGEX METACHARS REGEX MODIFIERS
- && ^ string begin /i case insens.
- || // $ str. end (before \n) /m line based ^$
- .. ... + one or more /s . includes \n
- ?: * zero or more /x ign. wh.space
- = += -= *= etc. ? zero or one /g global
- , => {3,7} repeat in range /o cmpl pat. once
- list ops () capture
- not (?:) no capture REGEX CHARCLASSES
- and [] character class . == [^\n]
- or xor | alternation \s == whitespace
- \b word boundary \w == word characters
- \z string end \d == digits
- DO \S, \W and \D negate
- use strict; DON'T
- use warnings; "$foo" LINKS
- my $var; $$variable_name perl.com
- open() or die $!; `$userinput` use.perl.org
- use Modules; /$userinput/ perl.apache.org
-
+ | ^ REGEX METACHARS REGEX MODIFIERS
+ && ^ string begin /i case insensitive
+ || // $ str end (bfr \n) /m line based ^$
+ .. ... + one or more /s . includes \n
+ ?: * zero or more /x ignore wh.space
+ = += -= *= etc ? zero or one /p preserve
+ , => {3,7} repeat in range /a ASCII /aa safe
+ list ops | alternation /l locale /d dual
+ not [] character class /u Unicode
+ and \b word boundary /e evaluate /ee rpts
+ or xor \z string end /g global
+ () capture /o compile pat once
+ DEBUG (?:p) no capture
+ -MO=Deparse (?#t) comment REGEX CHARCLASSES
+ -MO=Terse (?=p) ZW pos ahead . [^\n]
+ -D## (?!p) ZW neg ahead \s whitespace
+ -d:Trace (?<=p) ZW pos behind \K \w word chars
+ (?<!p) ZW neg behind \d digits
+ CONFIGURATION (?>p) no backtrack \pP named property
+ perl -V:ivsize (?|p|p)branch reset \h horiz.wh.space
+ (?&NM) cap to name \R linebreak
+ \S \W \D \H negate
FUNCTION RETURN LISTS
stat localtime caller SPECIAL VARIABLES
- 0 dev 0 second 0 package $_ default variable
- 1 ino 1 minute 1 filename $0 program name
- 2 mode 2 hour 2 line $/ input separator
- 3 nlink 3 day 3 subroutine $\ output separator
- 4 uid 4 month-1 4 hasargs $| autoflush
- 5 gid 5 year-1900 5 wantarray $! sys/libcall error
- 6 rdev 6 weekday 6 evaltext $@ eval error
- 7 size 7 yearday 7 is_require $$ process ID
- 8 atime 8 is_dst 8 hints $. line number
- 9 mtime 9 bitmask @ARGV command line args
- 10 ctime just use @INC include paths
- 11 blksz POSIX:: 3..9 only @_ subroutine args
- 12 blcks strftime! with EXPR %ENV environment
+ 0 dev 0 second 0 package $_ default variable
+ 1 ino 1 minute 1 filename $0 program name
+ 2 mode 2 hour 2 line $/ input separator
+ 3 nlink 3 day 3 subroutine $\ output separator
+ 4 uid 4 month-1 4 hasargs $| autoflush
+ 5 gid 5 year-1900 5 wantarray $! sys/libcall error
+ 6 rdev 6 weekday 6 evaltext $@ eval error
+ 7 size 7 yearday 7 is_require $$ process ID
+ 8 atime 8 is_dst 8 hints $. line number
+ 9 mtime 9 bitmask @ARGV command line args
+ 10 ctime 10 hinthash @INC include paths
+ 11 blksz 3..10 only @_ subroutine args
+ 12 blcks with EXPR %ENV environment
=head1 ACKNOWLEDGEMENTS
diff --git a/Master/tlpkg/tlperl/lib/pods/perlcn.pod b/Master/tlpkg/tlperl/lib/pods/perlcn.pod
index eeb6403d451..e45ebff2e70 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlcn.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlcn.pod
@@ -107,7 +107,7 @@ Perl ÓʵÝÂÛ̳һÀÀ
=over 4
-=item L<http://www.oreilly.com.cn/indexcat.php?c=perl>
+=item L<http://www.oreilly.com.cn/index.php?func=booklist&cat=68>
¼òÌåÖÐÎÄ°æµÄÅ·À³Àñ Perl Êé½å
diff --git a/Master/tlpkg/tlperl/lib/pods/perlcompile.pod b/Master/tlpkg/tlperl/lib/pods/perlcompile.pod
deleted file mode 100644
index dc829f45efd..00000000000
--- a/Master/tlpkg/tlperl/lib/pods/perlcompile.pod
+++ /dev/null
@@ -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@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@perl.org>.
-
-=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perlcygwin.pod b/Master/tlpkg/tlperl/lib/pods/perlcygwin.pod
index 713c2206793..4e3e6f57ff8 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlcygwin.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlcygwin.pod
@@ -1,10 +1,10 @@
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
+see. It is written in the POD format (see F<pod/perlpod.pod>) which is
specially designed to be readable as is.
=head1 NAME
-README.cygwin - Perl for Cygwin
+perlcygwin - Perl for Cygwin
=head1 SYNOPSIS
@@ -31,7 +31,7 @@ L<http://www.cygwin.com/>
A recent net or commercial release of Cygwin is required.
-At the time this document was last updated, Cygwin 1.5.24 was current.
+At the time this document was last updated, Cygwin 1.7.10 was current.
=head2 Cygwin Configuration
@@ -41,8 +41,8 @@ that Perl builds cleanly. These changes are B<not> required for normal
Perl usage.
B<NOTE:> The binaries that are built will run on all Win32 versions.
-They do not depend on your host system (Win9x/WinME, WinNT/Win2K)
-or your Cygwin configuration (I<ntea>, I<ntsec>, binary/text mounts).
+They do not depend on your host system (WinXP/Win2K/Win7) or your
+Cygwin configuration (binary/text mounts, cvgserver).
The only dependencies come from hard-coded pathnames like C</usr/local>.
However, your host system and Cygwin configuration will affect Perl's
runtime behavior (see L</"TEST">).
@@ -52,7 +52,7 @@ runtime behavior (see L</"TEST">).
=item * C<PATH>
Set the C<PATH> environment variable so that Configure finds the Cygwin
-versions of programs. Any Windows directories should be removed or
+versions of programs. Any not-needed Windows directories should be removed or
moved to the end of your C<PATH>.
=item * I<nroff>
@@ -60,28 +60,13 @@ moved to the end of your C<PATH>.
If you do not have I<nroff> (which is part of the I<groff> package),
Configure will B<not> prompt you to install I<man> pages.
-=item * Permissions
-
-On WinNT with either the I<ntea> or I<ntsec> C<CYGWIN> settings, directory
-and file permissions may not be set correctly. Since the build process
-creates directories and files, to be safe you may want to run a
-C<chmod -R +w *> on the entire Perl source tree.
-
-Also, it is a well known WinNT "feature" that files created by a login
-that is a member of the I<Administrators> group will be owned by the
-I<Administrators> group. Depending on your umask, you may find that you
-can not write to files that you just created (because you are no longer
-the owner). When using the I<ntsec> C<CYGWIN> setting, this is not an
-issue because it "corrects" the ownership to what you would expect on
-a UNIX system.
-
=back
=head1 CONFIGURE PERL ON CYGWIN
The default options gathered by Configure with the assistance of
F<hints/cygwin.sh> will build a Perl that supports dynamic loading
-(which requires a shared F<libperl.dll>).
+(which requires a shared F<cygperl5_16.dll>).
This will run Configure and keep a record:
@@ -122,17 +107,6 @@ DES crypt port by Corinna Vinschen.
Alternatively, the crypt libraries in GNU libc have been ported to Cygwin.
-The DES based Ultra Fast Crypt port was done by Alexey Truhan:
-
- ftp://ftp.franken.de/pub/win32/develop/gnuwin32/cygwin/porters/Okhapkin_Sergey/cw32crypt-dist-0.tgz
-
-NOTE: There are various export restrictions on DES implementations,
-see the glibc README for more details.
-
-The MD5 port was done by Andy Piper:
-
- ftp://ftp.franken.de/pub/win32/develop/gnuwin32/cygwin/porters/Okhapkin_Sergey/libcrypt.tgz
-
=item * C<-lgdbm_compat> (C<use GDBM_File>)
GDBM is available for Cygwin.
@@ -143,8 +117,7 @@ NOTE: The GDBM library only works on NTFS partitions.
BerkeleyDB is available for Cygwin.
-NOTE: The BerkeleyDB library only completely works on NTFS partitions
-and db-4.3 is flawed.
+NOTE: The BerkeleyDB library only completely works on NTFS partitions.
=item * C<cygserver> (C<use IPC::SysV>)
@@ -177,10 +150,11 @@ prompts you or you can define (undefine) symbols on the command line.
Undefining this symbol forces Perl to be compiled statically.
-=item * C<-Uusemymalloc>
+=item * C<-Dusemymalloc>
-By default Perl uses the C<malloc()> included with the Perl source. If you
-want to force Perl to build with the system C<malloc()> undefine this symbol.
+By default Perl does not use the C<malloc()> included with the Perl source,
+because it was slower and not entirely thread-safe. If you want to force
+Perl to build with the old -Dusemymalloc define this.
=item * C<-Uuseperlio>
@@ -190,12 +164,13 @@ default; it is not recommended to disable PerlIO.
=item * C<-Dusemultiplicity>
Multiplicity is required when embedding Perl in a C program and using
-more than one interpreter instance. This works with the Cygwin port.
+more than one interpreter instance. This is only required when you build
+a not-threaded perl with C<-Uuseithreads>.
-=item * C<-Duse64bitint>
+=item * C<-Uuse64bitint>
-By default Perl uses 32 bit integers. If you want to use larger 64
-bit integers, define this symbol.
+By default Perl uses 64 bit integers. If you want to use smaller 32 bit
+integers, define this symbol.
=item * C<-Duselongdouble>
@@ -203,12 +178,11 @@ I<gcc> supports long doubles (12 bytes). However, several additional
long double math functions are necessary to use them within Perl
(I<{atan2, cos, exp, floor, fmod, frexp, isnan, log, modf, pow, sin, sqrt}l,
strtold>).
-These are B<not> yet available with Cygwin.
+These are B<not> yet available with newlib, the Cygwin libc.
-=item * C<-Dusethreads>
+=item * C<-Uuseithreads>
-POSIX threads are implemented in Cygwin, define this symbol if you want
-a threaded perl.
+Define this symbol if you want not-threaded faster perl.
=item * C<-Duselargefiles>
@@ -217,9 +191,9 @@ this will be correctly detected and defined by Configure.
=item * C<-Dmksymlinks>
-Use this to build perl outside of the source tree. This works with Cygwin.
-Details can be found in the F<INSTALL> document. This is the recommended
-way to build perl from sources.
+Use this to build perl outside of the source tree. Details can be
+found in the F<INSTALL> document. This is the recommended way to
+build perl from sources.
=back
@@ -334,7 +308,7 @@ A C<fork()> failure may result in the following tests failing:
ext/IO/lib/IO/t/io_sock.t
ext/IO/lib/IO/t/io_unix.t
-See comment on fork in L<Miscellaneous> below.
+See comment on fork in L</Miscellaneous> below.
=head1 Specific features of the Cygwin port
@@ -349,33 +323,29 @@ to portability, more information can be found in the Cygwin documentation.
=item * Pathnames
-Cygwin pathnames can be separated by forward (F</>) or backward (F<\\>)
-slashes. They may also begin with drive letters (F<C:>) or Universal
-Naming Codes (F<//UNC>). DOS device names (F<aux>, F<con>, F<prn>,
-F<com*>, F<lpt?>, F<nul>) are invalid as base filenames. However, they
-can be used in extensions (e.g., F<hello.aux>). Names may contain all
-printable characters except these:
-
- : * ? " < > |
+Cygwin pathnames are separated by forward (F</>) slashes, Universal
+Naming Codes (F<//UNC>) are also supported Since cygwin-1.7 non-POSIX
+pathnames are disencouraged. Names may contain all printable
+characters.
File names are case insensitive, but case preserving. A pathname that
-contains a backslash or drive letter is a Win32 pathname (and not subject
-to the translations applied to POSIX style pathnames).
+contains a backslash or drive letter is a Win32 pathname, and not
+subject to the translations applied to POSIX style pathnames, but
+cygwin will warn you, so better convert them to POSIX.
For conversion we have C<Cygwin::win_to_posix_path()> and
C<Cygwin::posix_to_win_path()>.
-Pathnames may not contain Unicode characters. C<Cygwin> still uses the
-ANSI API calls and no Unicode calls because of newlib deficiencies.
-There's an unofficial unicode patch for cygwin at
-L<http://www.okisoft.co.jp/esc/utf8-cygwin/>
+Since cygwin-1.7 pathnames are UTF-8 encoded.
=item * Text/Binary
+Since cywgin-1.7 textmounts are deprecated and stronlgy discouraged.
+
When a file is opened it is in either text or binary mode. In text mode
a file is subject to CR/LF/Ctrl-Z translations. With Cygwin, the default
mode for an C<open()> is determined by the mode of the mount that underlies
-the file. See C<Cygwin::is_binmount()>. Perl provides a C<binmode()> function
+the file. See L</Cygwin::is_binmount>(). Perl provides a C<binmode()> function
to set binary mode on files that otherwise would be treated as text.
C<sysopen()> with the C<O_TEXT> flag sets text mode on files that otherwise
would be treated as binary:
@@ -411,8 +381,8 @@ extension transparent by looking for F<foo.exe> when you ask for F<foo>
(unless a F<foo> also exists). Cygwin does not require a F<.exe>
extension, but I<gcc> adds it automatically when building a program.
However, when accessing an executable as a normal file (e.g., I<cp>
-in a makefile) the F<.exe> is not transparent. The I<install> included
-with Cygwin automatically appends a F<.exe> when necessary.
+in a makefile) the F<.exe> is not transparent. The I<install> program
+included with Cygwin automatically appends a F<.exe> when necessary.
=item * Cygwin vs. Windows process ids
@@ -428,6 +398,32 @@ to translate between them.
Under Cygwin, $^E is the same as $!. When using L<Win32 API Functions|Win32>,
use C<Win32::GetLastError()> to get the last Windows error.
+=item * rebase errors on fork or system
+
+Using C<fork()> or C<system()> out to another perl after loading multiple dlls
+may result on a DLL baseaddress conflict. The internal cygwin error
+looks like like the following:
+
+ 0 [main] perl 8916 child_info_fork::abort: data segment start: parent
+ (0xC1A000) != child(0xA6A000)
+
+or:
+
+ 183 [main] perl 3588 C:\cygwin\bin\perl.exe: *** fatal error - unable to remap C:\cygwin\bin\cygsvn_subr-1-0.dll to same address as parent(0x6FB30000) != 0x6FE60000
+ 46 [main] perl 3488 fork: child 3588 - died waiting for dll loading, errno11
+
+See L<http://cygwin.com/faq/faq-nochunks.html#faq.using.fixing-fork-failures>
+It helps if not too many DLLs are loaded in memory so the available address space is larger,
+e.g. stopping the MS Internet Explorer might help.
+
+Use the perlrebase or rebase utilities to resolve the conflicting dll addresses.
+The rebase package is included in the Cygwin setup. Use F<setup.exe>
+from L<http://www.cygwin.com/setup.exe> to install it.
+
+1. kill all perl processes and run C<perlrebase> or
+
+2. kill all cygwin processes and services, start dash from cmd.exe and run C<rebaseall>.
+
=item * C<chown()>
On WinNT C<chown()> can change a file's user and group IDs. On Win9x C<chown()>
@@ -448,18 +444,6 @@ of the file being edited C<perl -i.bak> because of windowish restrictions,
therefore Perl adds the suffix C<.bak> automatically if you use C<perl -i>
without specifying a backup extension.
-Using C<fork()> after loading multiple dlls may fail with an internal cygwin
-error like the following:
-
- C:\CYGWIN\BIN\PERL.EXE: *** couldn't allocate memory 0x10000(4128768) for 'C:\CYGWIN\LIB\PERL5\5.6.1\CYGWIN-MULTI\AUTO\SOCKET\SOCKET.DLL' alignment, Win32 error 8
-
- 200 [main] perl 377147 sync_with_child: child -395691(0xB8) died before initialization with status code 0x1
- 1370 [main] perl 377147 sync_with_child: *** child state child loading dlls
-
-Use the rebase utility to resolve the conflicting dll addresses. The
-rebase package is included in the Cygwin netrelease. Use setup.exe from
-L<http://www.cygwin.com/setup.exe> to install it and run rebaseall.
-
=back
=head2 Prebuilt methods:
@@ -529,6 +513,17 @@ User mounts override system mounts.
Returns true if the given cygwin path is binary mounted, false if the
path is mounted in textmode.
+=item C<Cygwin::sync_winenv>
+
+Cygwin does not initialize all original Win32 environment variables.
+See the bottom of this page L<http://cygwin.com/cygwin-ug-net/setup-env.html>
+for "Restricted Win32 environment".
+
+Certain Win32 programs called from cygwin programs might need some environment
+variable, such as e.g. ADODB needs %COMMONPROGRAMFILES%.
+Call Cygwin::sync_winenv() to copy all Win32 environment variables to your
+process and note that cygwin will warn on every encounter of non-POSIX paths.
+
=back
=head1 INSTALL PERL ON CYGWIN
@@ -563,7 +558,7 @@ be kept as clean as possible.
pod/perl561delta.pod pod/perl570delta.pod pod/perl572delta.pod
pod/perl573delta.pod pod/perl58delta.pod pod/perl581delta.pod
pod/perl590delta.pod pod/perlhist.pod pod/perlmodlib.pod
- pod/perltoc.pod pod.lst Porting/Glossary pod/perlgit.pod
+ pod/perltoc.pod Porting/Glossary pod/perlgit.pod
Porting/checkAUTHORS.pl
dist/Cwd/Changes ext/Compress-Raw-Zlib/Changes
ext/Compress-Raw-Zlib/README ext/Compress-Zlib/Changes
@@ -781,4 +776,4 @@ Jerry D. Hedden <jdhedden@cpan.org>.
=head1 HISTORY
-Last updated: 2007-09-25
+Last updated: 2012-02-08
diff --git a/Master/tlpkg/tlperl/lib/pods/perldata.pod b/Master/tlpkg/tlperl/lib/pods/perldata.pod
index 1b1cbf4564b..876382d29fe 100644
--- a/Master/tlpkg/tlperl/lib/pods/perldata.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perldata.pod
@@ -179,8 +179,9 @@ are considered pretty much the same thing for nearly all purposes,
references are strongly-typed, uncastable pointers with builtin
reference-counting and destructor invocation.
-A scalar value is interpreted as TRUE in the Boolean sense if it is not
-the null string or the number 0 (or its string equivalent, "0"). The
+A scalar value is interpreted as FALSE in the Boolean sense
+if it is undefined, the null string or the number 0 (or its
+string equivalent, "0"), and TRUE if it is anything else. The
Boolean context is just a special kind of scalar context where no
conversion to a string or a number is ever performed.
X<boolean> X<bool> X<true> X<false> X<truth>
@@ -251,14 +252,6 @@ which return whatever they feel like returning.) The following is
always true:
X<array, length>
- scalar(@whatever) == $#whatever - $[ + 1;
-
-Version 5 of Perl changed the semantics of C<$[>: files that don't set
-the value of C<$[> no longer need to worry about whether another
-file changed its value. (In other words, use of C<$[> is deprecated.)
-So in general you can assume that
-X<$[>
-
scalar(@whatever) == $#whatever + 1;
Some programmers choose to use an explicit conversion so as to
@@ -302,7 +295,9 @@ integer formats:
0b011011 # binary
You are allowed to use underscores (underbars) in numeric literals
-between digits for legibility. You could, for example, group binary
+between digits for legibility (but not multiple underscores in a row:
+C<23__500> is not legal; C<23_500> is).
+You could, for example, group binary
digits by threes (as for a Unix-style mode argument such as 0b110_100_100)
or by fours (to represent nibbles, as in 0b1010_0110) or in other groups.
X<number, literal>
@@ -403,12 +398,16 @@ X<end> X<data> X<^D> X<^Z>
The special literals __FILE__, __LINE__, and __PACKAGE__
represent the current filename, line number, and package name at that
-point in your program. They may be used only as separate tokens; they
+point in your program. __SUB__ gives a reference to the current
+subroutine. They may be used only as separate tokens; they
will not be interpolated into strings. If there is no current package
(due to an empty C<package;> directive), __PACKAGE__ is the undefined
value. (But the empty C<package;> is no longer supported, as of version
-5.10.)
-X<__FILE__> X<__LINE__> X<__PACKAGE__> X<line> X<file> X<package>
+5.10.) Outside of a subroutine, __SUB__ is the undefined value. __SUB__
+is only available in 5.16 or higher, and only with a C<use v5.16> or
+C<use feature "current_sub"> declaration.
+X<__FILE__> X<__LINE__> X<__PACKAGE__> X<__SUB__>
+X<line> X<file> X<package>
The two control characters ^D and ^Z, and the tokens __END__ and __DATA__
may be used to indicate the logical end of the script before the actual
@@ -417,12 +416,13 @@ end of file. Any following text is ignored.
Text after __DATA__ may be read via the filehandle C<PACKNAME::DATA>,
where C<PACKNAME> is the package that was current when the __DATA__
token was encountered. The filehandle is left open pointing to the
-contents after __DATA__. It is the program's responsibility to
-C<close DATA> when it is done reading from it. For compatibility with
-older scripts written before __DATA__ was introduced, __END__ behaves
-like __DATA__ in the top level script (but not in files loaded with
-C<require> or C<do>) and leaves the remaining contents of the
-file accessible via C<main::DATA>.
+line after __DATA__. The program should C<close DATA> when it is done
+reading from it. (Leaving it open leaks filehandles if the module is
+reloaded for any reason, so it's a safer practice to close it.) For
+compatibility with older scripts written before __DATA__ was
+introduced, __END__ behaves like __DATA__ in the top level script (but
+not in files loaded with C<require> or C<do>) and leaves the remaining
+contents of the file accessible via C<main::DATA>.
See L<SelfLoader> for more description of __DATA__, and
an example of its use. Note that you cannot read from the DATA
@@ -697,6 +697,20 @@ You can also subscript a list to get a single element from it:
$dir = (getpwnam("daemon"))[7];
+=head2 Multi-dimensional array emulation
+
+Multidimensional arrays may be emulated by subscripting a hash with a
+list. The elements of the list are joined with the subscript separator
+(see L<perlvar/$;>).
+
+ $foo{$a,$b,$c}
+
+is equivalent to
+
+ $foo{join($;, $a, $b, $c)}
+
+The default subscript separator is "\034", the same as SUBSEP in B<awk>.
+
=head2 Slices
X<slice> X<array, slice> X<hash, slice>
@@ -862,8 +876,8 @@ C<use strict 'refs'> forbids such practice.
Another way to create anonymous filehandles is with the Symbol
module or with the IO::Handle module and its ilk. These modules
have the advantage of not hiding different types of the same name
-during the local(). See the bottom of L<perlfunc/"open FILEHANDLE">
-for an example.
+during the local(). See the bottom of L<perlfunc/open> for an
+example.
=head1 SEE ALSO
diff --git a/Master/tlpkg/tlperl/lib/pods/perldbmfilter.pod b/Master/tlpkg/tlperl/lib/pods/perldbmfilter.pod
index 2a4c2399558..0413bf95f8c 100644
--- a/Master/tlpkg/tlperl/lib/pods/perldbmfilter.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perldbmfilter.pod
@@ -35,7 +35,6 @@ every time you write a key to a DBM database.
If a filter has been installed with this method, it will be invoked
every time you write a value to a DBM database.
-
=item B<filter_fetch_key>
If a filter has been installed with this method, it will be invoked
diff --git a/Master/tlpkg/tlperl/lib/pods/perldebguts.pod b/Master/tlpkg/tlperl/lib/pods/perldebguts.pod
index 9bc0b63de46..8ae6e7baa96 100644
--- a/Master/tlpkg/tlperl/lib/pods/perldebguts.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perldebguts.pod
@@ -227,7 +227,7 @@ information. For example, contrast this expression trace:
Loading DB routines from perl5db.pl patch level 0.94
Emacs support available.
- Enter h or `h h' for help.
+ Enter h or 'h h' for help.
main::(-e:1): 0
DB<1> sub foo { 14 }
@@ -412,7 +412,7 @@ scoped.
The debugging output at compile time looks like this:
- Compiling REx `[bc]d(ef*g)+h[ij]k$'
+ Compiling REx '[bc]d(ef*g)+h[ij]k$'
size 45 Got 364 bytes for offset annotations.
first at 1
rarest char g at 0
@@ -433,8 +433,8 @@ The debugging output at compile time looks like this:
42: EXACT <k>(44)
44: EOL(45)
45: END(0)
- anchored `de' at 1 floating `gh' at 3..2147483647 (checking floating)
- stclass `ANYOF[bc]' minlen 7
+ anchored 'de' at 1 floating 'gh' at 3..2147483647 (checking floating)
+ stclass 'ANYOF[bc]' minlen 7
Offsets: [45]
1[4] 0[0] 0[0] 0[0] 0[0] 0[0] 0[0] 0[0] 0[0] 0[0] 0[0] 5[1]
0[0] 12[1] 0[0] 6[1] 0[0] 7[1] 0[0] 9[1] 8[1] 0[0] 10[1] 0[0]
@@ -450,8 +450,8 @@ label I<id> of the first node that does a match.
The
- anchored `de' at 1 floating `gh' at 3..2147483647 (checking floating)
- stclass `ANYOF[bc]' minlen 7
+ anchored 'de' at 1 floating 'gh' at 3..2147483647 (checking floating)
+ stclass 'ANYOF[bc]' minlen 7
line (split into two lines above) contains optimizer
information. In the example shown, the optimizer found that the match
@@ -520,7 +520,7 @@ being C<BOL>, C<MBOL>, or C<GPOS>. See the table below.
=back
If a substring is known to match at end-of-line only, it may be
-followed by C<$>, as in C<floating `k'$>.
+followed by C<$>, as in C<floating 'k'$>.
The optimizer-specific information is used to avoid entering (a slow) regex
engine on strings that will not definitely match. If the C<isall> flag
@@ -805,7 +805,7 @@ entered and that all of the job was therefore done by the optimizer.
If the regex engine was entered, the output may look like this:
- Matching `[bc]d(ef*g)+h[ij]k$' against `abcdefg__gh__'
+ Matching '[bc]d(ef*g)+h[ij]k$' against 'abcdefg__gh__'
Setting an EVAL scope, savestack=3
2 <ab> <cdefg__gh_> | 1: ANYOF
3 <abc> <defg__gh_> | 11: EXACT <d>
diff --git a/Master/tlpkg/tlperl/lib/pods/perldebtut.pod b/Master/tlpkg/tlperl/lib/pods/perldebtut.pod
index 77b86905351..cc4f5051e17 100644
--- a/Master/tlpkg/tlperl/lib/pods/perldebtut.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perldebtut.pod
@@ -702,7 +702,6 @@ place to go), and of course, experiment.
L<perldebug>,
L<perldebguts>,
L<perldiag>,
-L<dprofpp>,
L<perlrun>
diff --git a/Master/tlpkg/tlperl/lib/pods/perldebug.pod b/Master/tlpkg/tlperl/lib/pods/perldebug.pod
index 8fbb2312ad4..4a2f07e8e72 100644
--- a/Master/tlpkg/tlperl/lib/pods/perldebug.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perldebug.pod
@@ -105,7 +105,6 @@ that it's run through your pager, as in
You may change the pager which is used via C<o pager=...> command.
-
=item p expr
X<debugger command, p>
@@ -270,15 +269,19 @@ X<debugger command, S>
List subroutine names [not] matching the regex.
-=item t
+=item t [n]
X<debugger command, t>
Toggle trace mode (see also the C<AutoTrace> option).
+Optional argument is the maximum number of levels to trace below
+the current one; anything deeper than that will be silent.
-=item t expr
+=item t [n] expr
X<debugger command, t>
Trace through execution of C<expr>.
+Optional first argument is the maximum number of levels to trace below
+the current one; anything deeper than that will be silent.
See L<perldebguts/"Frame Listing Output Examples"> for examples.
=item b
@@ -301,6 +304,22 @@ don't use C<if>:
b 237 ++$count237 < 11
b 33 /pattern/i
+If the line number is C<.>, sets a breakpoint on the current line:
+
+ b . $n > 100
+
+=item b [file]:[line] [condition]
+X<breakpoint>
+X<debugger command, b>
+
+Set a breakpoint before the given line in a (possibly different) file. If a
+condition is specified, it's evaluated each time the statement is reached: a
+breakpoint is taken only if the condition is true. Breakpoints may only be set
+on lines that begin an executable statement. Conditions don't use C<if>:
+
+ b lib/MyModule.pm:237 $x > 30
+ b /usr/lib/perl5/site_perl/CGI.pm:100 ++$count100 < 11
+
=item b subname [condition]
X<breakpoint>
X<debugger command, b>
@@ -341,6 +360,42 @@ X<debugger command, B>
Delete all installed breakpoints.
+=item disable [file]:[line]
+X<breakpoint>
+X<debugger command, disable>
+X<disable>
+
+Disable the breakpoint so it won't stop the execution of the program.
+Breakpoints are enabled by default and can be re-enabled using the C<enable>
+command.
+
+=item disable [line]
+X<breakpoint>
+X<debugger command, disable>
+X<disable>
+
+Disable the breakpoint so it won't stop the execution of the program.
+Breakpoints are enabled by default and can be re-enabled using the C<enable>
+command.
+
+This is done for a breakpoint in the current file.
+
+=item enable [file]:[line]
+X<breakpoint>
+X<debugger command, disable>
+X<disable>
+
+Enable the breakpoint so it will stop the execution of the program.
+
+=item enable [line]
+X<breakpoint>
+X<debugger command, disable>
+X<disable>
+
+Enable the breakpoint so it will stop the execution of the program.
+
+This is done for a breakpoint in the current file.
+
=item a [line] command
X<debugger command, a>
@@ -591,7 +646,6 @@ X<debugger command, M>
Display all loaded modules and their versions.
-
=item man [manpage]
X<debugger command, man>
@@ -923,9 +977,9 @@ X<backtrace> X<stack, backtrace>
Here's an example of what a stack backtrace via C<T> command might
look like:
- $ = main::infested called from file `Ambulation.pm' line 10
- @ = Ambulation::legs(1, 2, 3, 4) called from file `camel_flea' line 7
- $ = main::pests('bactrian', 4) called from file `camel_flea' line 4
+ $ = main::infested called from file 'Ambulation.pm' line 10
+ @ = Ambulation::legs(1, 2, 3, 4) called from file 'camel_flea' line 7
+ $ = main::pests('bactrian', 4) called from file 'camel_flea' line 4
The left-hand character up there indicates the context in which the
function was called, with C<$> and C<@> meaning scalar or list
@@ -998,7 +1052,7 @@ Another way to debug compile-time code is to start the debugger, set a
breakpoint on the I<load> of some module:
DB<7> b load f:/perllib/lib/Carp.pm
- Will stop on load of `f:/perllib/lib/Carp.pm'.
+ Will stop on load of 'f:/perllib/lib/Carp.pm'.
and then restart the debugger using the C<R> command (if possible). One can use C<b
compile subname> for the same purpose.
@@ -1104,19 +1158,16 @@ X<profile> X<profiling> X<profiler>
If you wish to supply an alternative debugger for Perl to run,
invoke your script with a colon and a package argument given to the
-B<-d> flag. Perl's alternative debuggers include the Perl profiler,
-L<Devel::DProf>, which is included with the standard Perl
+B<-d> flag. Perl's alternative debuggers include a Perl profiler,
+L<Devel::NYTProf>, which is available separately as a CPAN
distribution. To profile your Perl program in the file F<mycode.pl>,
just type:
- $ perl -d:DProf mycode.pl
+ $ perl -d:NYTProf mycode.pl
-When the script terminates the profiler will dump the profile
-information to a file called F<tmon.out>. A tool like B<dprofpp>,
-also supplied with the standard Perl distribution, can be used to
-interpret the information in that profile. More powerful profilers,
-such as C<Devel::NYTProf> are available from the CPAN: see L<perlperf>
-for details.
+When the script terminates the profiler will create a database of the
+profile information that you can turn into reports using the profiler's
+tools. See <perlperf> for details.
=head1 Debugging Regular Expressions
X<regular expression, debugging>
@@ -1146,8 +1197,7 @@ L<perldebtut>,
L<perldebguts>,
L<re>,
L<DB>,
-L<Devel::DProf>,
-L<dprofpp>,
+L<Devel::NYTProf>,
L<Dumpvalue>,
and
L<perlrun>.
diff --git a/Master/tlpkg/tlperl/lib/pods/perldelta.pod b/Master/tlpkg/tlperl/lib/pods/perldelta.pod
index 425708fbb46..d41e3b5cfe3 100644
--- a/Master/tlpkg/tlperl/lib/pods/perldelta.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perldelta.pod
@@ -2,208 +2,91 @@
=head1 NAME
-perldelta - what is new for perl v5.14.2
+perldelta - what is new for perl v5.16.2
=head1 DESCRIPTION
-This document describes differences between the 5.14.1 release and
-the 5.14.2 release.
+This document describes differences between the 5.16.1 release and
+the 5.16.2 release.
-If you are upgrading from an earlier release such as 5.14.0, first read
-L<perl5141delta>, which describes differences between 5.14.0 and
-5.14.1.
-
-=head1 Core Enhancements
-
-No changes since 5.14.0.
-
-=head1 Security
-
-=head2 C<File::Glob::bsd_glob()> memory error with GLOB_ALTDIRFUNC (CVE-2011-2728).
-
-Calling C<File::Glob::bsd_glob> with the unsupported flag GLOB_ALTDIRFUNC would
-cause an access violation / segfault. A Perl program that accepts a flags value from
-an external source could expose itself to denial of service or arbitrary code
-execution attacks. There are no known exploits in the wild. The problem has been
-corrected by explicitly disabling all unsupported flags and setting unused function
-pointers to null. Bug reported by Clément Lecigne.
-
-=head2 C<Encode> decode_xs n-byte heap-overflow (CVE-2011-2939)
-
-A bug in C<Encode> could, on certain inputs, cause the heap to overflow.
-This problem has been corrected. Bug reported by Robert Zacek.
+If you are upgrading from an earlier release such as 5.16.0, first read
+L<perl5161delta>, which describes differences between 5.16.0 and
+5.16.1.
=head1 Incompatible Changes
-There are no changes intentionally incompatible with 5.14.0. If any
-exist, they are bugs and reports are welcome.
-
-=head1 Deprecations
-
-There have been no deprecations since 5.14.0.
+There are no changes intentionally incompatible with 5.16.0
+If any exist, they are bugs, and we request that you submit a
+report. See L</Reporting Bugs> below.
=head1 Modules and Pragmata
-=head2 New Modules and Pragmata
-
-None
-
=head2 Updated Modules and Pragmata
=over 4
=item *
-L<CPAN> has been upgraded from version 1.9600 to version 1.9600_01.
-
-L<CPAN::Distribution> has been upgraded from version 1.9602 to 1.9602_01.
-
-Backported bugfixes from CPAN version 1.9800. Ensures proper
-detection of C<configure_requires> prerequisites from CPAN Meta files
-in the case where C<dynamic_config> is true. [rt.cpan.org #68835]
-
-Also ensures that C<configure_requires> is only checked in META files,
-not MYMETA files, so protect against MYMETA generation that drops
-C<configure_requires>.
-
-=item *
-
-L<Encode> has been upgraded from version 2.42 to 2.42_01.
+L<Module::CoreList> has been upgraded from version 2.70 to version 2.76.
-See L</Security>.
-
-=item *
-
-L<File::Glob> has been upgraded from version 1.12 to version 1.13.
-
-See L</Security>.
+=back
-=item *
+=head1 Configuration and Compilation
-L<PerlIO::scalar> has been upgraded from version 0.11 to 0.11_01.
+=over 4
-It fixes a problem with C<< open my $fh, ">", \$scalar >> not working if
-C<$scalar> is a copy-on-write scalar.
+=item * configuration should no longer be confused by ls colorization
=back
-=head2 Removed Modules and Pragmata
-
-None
-
=head1 Platform Support
-=head2 New Platforms
-
-None
-
-=head2 Discontinued Platforms
-
-None
-
=head2 Platform-Specific Notes
=over 4
-=item HP-UX PA-RISC/64 now supports gcc-4.x
-
-A fix to correct the socketsize now makes the test suite pass on HP-UX
-PA-RISC for 64bitall builds.
+=item AIX
-=item Building on OS X 10.7 Lion and Xcode 4 works again
-
-The build system has been updated to work with the build tools under Mac OS X
-10.7.
+Configure now always adds -qlanglvl=extc99 to the CC flags on AIX when
+using xlC. This will make it easier to compile a number of XS-based modules
+that assume C99 [perl #113778].
=back
-=head1 Bug Fixes
+=head1 Selected Bug Fixes
=over 4
-=item *
-
-In @INC filters (subroutines returned by subroutines in @INC), $_ used to
-misbehave: If returned from a subroutine, it would not be copied, but the
-variable itself would be returned; and freeing $_ (e.g., with C<undef *_>)
-would cause perl to crash. This has been fixed [perl #91880].
-
-=item *
-
-Perl 5.10.0 introduced some faulty logic that made "U*" in the middle of
-a pack template equivalent to "U0" if the input string was empty. This has
-been fixed [perl #90160].
-
-=item *
-
-C<caller> no longer leaks memory when called from the DB package if
-C<@DB::args> was assigned to after the first call to C<caller>. L<Carp>
-was triggering this bug [perl #97010].
-
-=item *
+=item * fix /\h/ equivalence with /[\h]/
-C<utf8::decode> had a nasty bug that would modify copy-on-write scalars'
-string buffers in place (i.e., skipping the copy). This could result in
-hashes having two elements with the same key [perl #91834].
-
-=item *
-
-Localising a tied variable used to make it read-only if it contained a
-copy-on-write string.
-
-=item *
-
-Elements of restricted hashes (see the L<fields> pragma) containing
-copy-on-write values couldn't be deleted, nor could such hashes be cleared
-(C<%hash = ()>).
-
-=item *
-
-Locking a hash element that is a glob copy no longer causes subsequent
-assignment to it to corrupt the glob.
-
-=item *
-
-A panic involving the combination of the regular expression modifiers
-C</aa> introduced in 5.14.0 and the C<\b> escape sequence has been
-fixed [perl #95964].
+see [perl #114220]
=back
=head1 Known Problems
-This is a list of some significant unfixed bugs, which are regressions
-from 5.12.0.
-
-=over 4
-
-=item *
-
-C<PERL_GLOBAL_STRUCT> is broken.
-
-Since perl 5.14.0, building with C<-DPERL_GLOBAL_STRUCT> hasn't been
-possible. This means that perl currently doesn't work on any platforms that
-require it to be built this way, including Symbian.
-
-While C<PERL_GLOBAL_STRUCT> now works again on recent development versions of
-perl, it actually working on Symbian again hasn't been verified.
-
-We'd be very interested in hearing from anyone working with Perl on Symbian.
-
-=back
+There are no new known problems.
=head1 Acknowledgements
-Perl 5.14.2 represents approximately three months of development since
-Perl 5.14.1 and contains approximately 1200 lines of changes
-across 61 files from 9 authors.
+Perl 5.16.2 represents approximately 2 months of development since Perl
+5.16.1 and contains approximately 740 lines of changes across 20 files
+from 9 authors.
Perl continues to flourish into its third decade thanks to a vibrant
-community of users and developers. The following people are known to
-have contributed the improvements that became Perl 5.14.2:
+community of users and developers. The following people are known to
+have contributed the improvements that became Perl 5.16.2:
+
+Andy Dougherty, Craig A. Berry, Darin McBride, Dominic Hargreaves, Karen
+Etheridge, Karl Williamson, Peter Martini, Ricardo Signes, Tony Cook.
+
+The list above is almost certainly incomplete as it is automatically
+generated from version control history. In particular, it does not
+include the names of the (very much appreciated) contributors who
+reported issues to the Perl bug tracker.
-Craig A. Berry, David Golden, Father Chrysostomos, Florian Ragwitz, H.Merijn
-Brand, Karl Williamson, Nicholas Clark, Pau Amma and Ricardo Signes.
+For a more complete list of all of Perl's historical contributors,
+please see the F<AUTHORS> file in the Perl source distribution.
=head1 Reporting Bugs
@@ -219,14 +102,14 @@ output of C<perl -V>, will be sent off to perlbug@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@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.
+inappropriate to send to a publicly archived mailing list, then please
+send it to perl5-security-report@perl.org. This points to a closed
+subscription unarchived mailing list, which includes all the core
+committers, who will 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
diff --git a/Master/tlpkg/tlperl/lib/pods/perldiag.pod b/Master/tlpkg/tlperl/lib/pods/perldiag.pod
index 8f2ad2913f2..9a8c9347a88 100644
--- a/Master/tlpkg/tlperl/lib/pods/perldiag.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perldiag.pod
@@ -23,7 +23,7 @@ category is included with the classification letter in the description
below.
Optional warnings are enabled by using the C<warnings> pragma or the B<-w>
-and B<-W> switches. Warnings may be captured by setting C<$SIG{__WARN__}>
+and B<-W> switches. Warnings may be captured by setting C<$SIG{__WARN__}>
to a reference to a routine that will be called on each warning instead
of printing it. See L<perlvar>.
@@ -104,7 +104,7 @@ really meant to multiply a glob by the result of calling a function.
(W ambiguous) You wrote something like C<@{foo}>, which might be
asking for the variable C<@foo>, or it might be calling a function
named foo, and dereferencing it as an array reference. If you wanted
-the varable, you can just write C<@foo>. If you wanted to call the
+the variable, you can just write C<@foo>. If you wanted to call the
function, write C<@{foo()}> ... or you could just not have a variable
and a function with the same name, and save yourself a lot of trouble.
@@ -112,21 +112,21 @@ and a function with the same name, and save yourself a lot of trouble.
=item Ambiguous use of %c{%s{...}} resolved to %c%s{...}
-(W ambiguous) You wrote something like C<${foo[2]}> (where foo
-represents the name of a Perl keyword), which might be looking for
-element number 2 of the array named C<@foo>, in which case please write
-C<$foo[2]>, or you might have meant to pass an anonymous arrayref to
-the function named foo, and then do a scalar deref on the value it
-returns. If you meant that, write C<${foo([2])}>.
+(W ambiguous) You wrote something like C<${foo[2]}> (where foo represents
+the name of a Perl keyword), which might be looking for element number
+2 of the array named C<@foo>, in which case please write C<$foo[2]>, or you
+might have meant to pass an anonymous arrayref to the function named
+foo, and then do a scalar deref on the value it returns. If you meant
+that, write C<${foo([2])}>.
In regular expressions, the C<${foo[2]}> syntax is sometimes necessary
to disambiguate between array subscripts and character classes.
-C</$length[2345]/>, for instance, will be interpreted as C<$length>
-followed by the character class C<[2345]>. If an array subscript is what
-you want, you can avoid the warning by changing C</${length[2345]}/>
-to the unsightly C</${\$length[2345]}/>, by renaming your array to
-something that does not coincide with a built-in keyword, or by
-simply turning off warnings with C<no warnings 'ambiguous';>.
+C</$length[2345]/>, for instance, will be interpreted as C<$length> followed
+by the character class C<[2345]>. If an array subscript is what you
+want, you can avoid the warning by changing C</${length[2345]}/> to the
+unsightly C</${\$length[2345]}/>, by renaming your array to something
+that does not coincide with a built-in keyword, or by simply turning
+off warnings with C<no warnings 'ambiguous';>.
=item Ambiguous use of -%s resolved as -&%s()
@@ -135,17 +135,19 @@ string C<"-foo">, or a call to the function C<foo>, negated. If you meant
the string, just write C<"-foo">. If you meant the function call,
write C<-foo()>.
-=item Ambiguous use of 's//le...' resolved as 's// le...'; Rewrite as 's//el' if you meant 'use locale rules and evaluate rhs as an expression'. In Perl 5.16, it will be resolved the other way
+=item Ambiguous use of 's//le...' resolved as 's// le...'; Rewrite as 's//el' if you meant 'use locale rules and evaluate rhs as an expression'. In Perl 5.18, it will be resolved the other way
-(W deprecated, ambiguous) You wrote a pattern match with substitution
-immediately followed by "le". In Perl 5.14 and earlier, this is
+(W deprecated, ambiguous) You wrote a pattern match with substitution
+immediately followed by "le". In Perl 5.16 and earlier, this is
resolved as meaning to take the result of the substitution, and see if
it is stringwise less-than-or-equal-to what follows in the expression.
Having the "le" immediately following a pattern is deprecated behavior,
-so in Perl 5.16, this expression will be resolved as meaning to do the
+so in Perl 5.18, this expression will 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 simply write "el" instead.
+rhs as an expression when doing the substitution. In 5.14, and 5.16 if
+you want the latter interpretation, you can simply write "el" instead.
+But note that the C</l> modifier should not be used explicitly anyway;
+you should use C<use locale> instead. See L<perllocale>.
=item '|' and '<' may not both be specified on command line
@@ -218,12 +220,13 @@ will identify which operator was so unfortunate.
=item Argument list not closed for PerlIO layer "%s"
-(W layer) When pushing a layer with arguments onto the Perl I/O system you
-forgot the ) that closes the argument list. (Layers take care of transforming
-data between external and internal representations.) Perl stopped parsing
-the layer list at this point and did not attempt to push this layer.
-If your program didn't explicitly request the failing operation, it may be
-the result of the value of the environment variable PERLIO.
+(W layer) When pushing a layer with arguments onto the Perl I/O
+system you forgot the ) that closes the argument list. (Layers
+take care of transforming data between external and internal
+representations.) Perl stopped parsing the layer list at this
+point and did not attempt to push this layer. If your program
+didn't explicitly request the failing operation, it may be the
+result of the value of the environment variable PERLIO.
=item Array @%s missing the @ in argument %d of %s()
@@ -232,11 +235,16 @@ spots. This is now heavily deprecated.
=item assertion botched: %s
-(P) The malloc package that comes with Perl had an internal failure.
+(X) The malloc package that comes with Perl had an internal failure.
=item Assertion failed: file "%s"
-(P) A general assertion failed. The file in question must be examined.
+(X) A general assertion failed. The file in question must be examined.
+
+=item Assigning non-zero to $[ is no longer possible
+
+(F) When the "array_base" feature is disabled (e.g., under C<use v5.16;>)
+the special variable C<$[>, which is deprecated, is now a fixed zero value.
=item Assignment to both a list and a scalar
@@ -246,8 +254,8 @@ know which context to supply to the right side.
=item A thread exited while %d threads were running
-(W threads)(S) When using threaded Perl, a thread (not necessarily the main
-thread) exited while there were still other threads running.
+(W threads)(S) When using threaded Perl, a thread (not necessarily
+the main thread) exited while there were still other threads running.
Usually it's a good idea first to collect the return values of the
created threads by joining them, and only then to exit from the main
thread. See L<threads>.
@@ -260,7 +268,7 @@ the current set of allowed keys of a restricted hash.
=item Attempt to bless into a reference
(F) The CLASSNAME argument to the bless() operator is expected to be
-the name of the package to bless the resulting object into. You've
+the name of the package to bless the resulting object into. You've
supplied instead a reference to something: perhaps you wrote
bless $self, $proto;
@@ -275,6 +283,13 @@ example by:
bless $self, "$proto";
+=item Attempt to clear deleted array
+
+(S debugging) An array was assigned to when it was being freed.
+Freed values are not supposed to be visible to Perl code. This
+can also happen if XS code calls C<av_clear> from a custom magic
+callback on the array.
+
=item Attempt to delete disallowed key '%s' from a restricted hash
(F) The failing code attempted to delete from a restricted hash a key
@@ -287,20 +302,20 @@ declared readonly from a restricted hash.
=item Attempt to free non-arena SV: 0x%x
-(P internal) All SV objects are supposed to be allocated from arenas
+(S internal) All SV objects are supposed to be allocated from arenas
that will be garbage collected on exit. An SV was discovered to be
outside any of those arenas.
-=item Attempt to free nonexistent shared string
+=item Attempt to free nonexistent shared string '%s'%s
-(P internal) Perl maintains a reference-counted internal table of
+(S internal) Perl maintains a reference-counted internal table of
strings to optimize the storage and access of hash keys and other
strings. This indicates someone tried to decrement the reference count
of a string that can no longer be found in the table.
-=item Attempt to free temp prematurely
+=item Attempt to free temp prematurely: SV 0x%x
-(W debugging) Mortalized values are supposed to be freed by the
+(S debugging) Mortalized values are supposed to be freed by the
free_tmps() routine. This indicates that something else is freeing the
SV before the free_tmps() routine gets a chance, which means that the
free_tmps() routine will be freeing an unreferenced scalar when it does
@@ -308,9 +323,9 @@ try to free it.
=item Attempt to free unreferenced glob pointers
-(P internal) The reference counts got screwed up on symbol aliases.
+(S internal) The reference counts got screwed up on symbol aliases.
-=item Attempt to free unreferenced scalar
+=item Attempt to free unreferenced scalar: SV 0x%x
(W internal) Perl went to decrement the reference count of a scalar to
see if it would go to 0, and discovered that it had already gone to 0
@@ -346,7 +361,7 @@ L<perlvar/%INC>.
(W) You tried to set the length of an array which has been freed. You
can do this by storing a reference to the scalar representing the last index
-of an array and later assigning through that reference. For example
+of an array and later assigning through that reference. For example
$r = do {my @a; \$#a};
$$r = 503
@@ -359,17 +374,22 @@ dereference it first. See L<perlfunc/substr>.
=item Attribute "locked" is deprecated
-(D deprecated) You have used the attributes pragma to modify the "locked"
-attribute on a code reference. The :locked attribute is obsolete, has had no
-effect since 5005 threads were removed, and will be removed in a future
-release of Perl 5.
+(D deprecated) You have used the attributes pragma to modify the
+"locked" attribute on a code reference. The :locked attribute is
+obsolete, has had no effect since 5005 threads were removed, and
+will be removed in a future release of Perl 5.
=item Attribute "unique" is deprecated
-(D deprecated) You have used the attributes pragma to modify the "unique"
-attribute on an array, hash or scalar reference. The :unique attribute has
-had no effect since Perl 5.8.8, and will be removed in a future release
-of Perl 5.
+(D deprecated) You have used the attributes pragma to modify
+the "unique" attribute on an array, hash or scalar reference.
+The :unique attribute has had no effect since Perl 5.8.8, and
+will be removed in a future release of Perl 5.
+
+=item av_reify called on tied array
+
+(S debugging) This indicates that something went wrong and Perl got I<very>
+confused about C<@_> or C<@DB::args> being tied.
=item Bad arg length for %s, is %u, should be %d
@@ -393,11 +413,11 @@ open(), or did it in another package.
=item Bad free() ignored
(S malloc) An internal routine called free() on something that had never
-been malloc()ed in the first place. Mandatory, but can be disabled by
+been malloc()ed in the first place. Mandatory, but can be disabled by
setting environment variable C<PERL_BADFREE> to 0.
This message can be seen quite often with DB_File on systems with "hard"
-dynamic linking, like C<AIX> and C<OS/2>. It is a bug of C<Berkeley DB>
+dynamic linking, like C<AIX> and C<OS/2>. It is a bug of C<Berkeley DB>
which is left unnoticed if C<DB> uses I<forgiving> system malloc().
=item Bad hash
@@ -410,7 +430,7 @@ which is left unnoticed if C<DB> uses I<forgiving> system malloc().
of Perl. Check the #! line, or manually feed your script into
Perl yourself.
-=item Bad name after %s::
+=item Bad name after %s
(F) You started to name a symbol by using a package prefix, and then
didn't finish the symbol. In particular, you can't interpolate outside
@@ -431,9 +451,9 @@ plugin API.
=item Bad realloc() ignored
-(S malloc) An internal routine called realloc() on something that had
-never been malloc()ed in the first place. Mandatory, but can be disabled
-by setting the environment variable C<PERL_BADFREE> to 1.
+(S malloc) An internal routine called realloc() on something that
+had never been malloc()ed in the first place. Mandatory, but can
+be disabled by setting the environment variable C<PERL_BADFREE> to 1.
=item Bad symbol for array
@@ -445,7 +465,6 @@ wasn't a symbol table entry.
(P) An internal request asked to add a dirhandle entry to something
that wasn't a symbol table entry.
-
=item Bad symbol for filehandle
(P) An internal request asked to add a filehandle entry to something
@@ -534,7 +553,7 @@ itself in a future release.
(W portable) Using bit vector sizes larger than 32 is non-portable.
-=item Bizarre copy of %s in %s
+=item Bizarre copy of %s
(P) Perl detected an attempt to copy an internal value that is not
copiable.
@@ -545,6 +564,11 @@ copiable.
iterate over %ENV, it encountered a logical name or symbol definition
which was too long, so it was truncated to the string shown.
+=item Bizarre SvTYPE [%d]
+
+(P) When starting a new thread or return values from a thread, Perl
+encountered an invalid data type.
+
=item Callback called exit
(F) A subroutine invoked from an external package via call_sv()
@@ -575,12 +599,12 @@ format can only be used with positive integers. See L<perlfunc/pack>.
=item Cannot convert a reference to %s to typeglob
-(F) You manipulated Perl's symbol table directly, stored a reference in it,
-then tried to access that symbol via conventional Perl syntax. The access
-triggers Perl to autovivify that typeglob, but it there is no legal conversion
-from that type of reference to a typeglob.
+(F) You manipulated Perl's symbol table directly, stored a reference
+in it, then tried to access that symbol via conventional Perl syntax.
+The access triggers Perl to autovivify that typeglob, but it there is
+no legal conversion from that type of reference to a typeglob.
-=item Cannot copy to %s in %s
+=item Cannot copy to %s
(P) Perl detected an attempt to copy a value to an internal type that cannot
be directly assigned to.
@@ -590,6 +614,18 @@ be directly assigned to.
(S io) You tried to apply an encoding that did not exist to a filehandle,
either with open() or binmode().
+=item Cannot set tied @DB::args
+
+(F) C<caller> tried to set C<@DB::args>, but found it tied. Tying C<@DB::args>
+is not supported. (Before this error was added, it used to crash.)
+
+=item Cannot tie unreifiable array
+
+(P) You somehow managed to call C<tie> on an array that does not
+keep a reference count on its arguments and cannot be made to
+do so. Such arrays are not even supposed to be accessible to
+Perl code, but are only used internally.
+
=item Can only compress unsigned integers in pack
(F) An argument to pack("w",...) was not an integer. The BER compressed
@@ -604,7 +640,7 @@ encapsulation of objects. See L<perlobj>.
=item Can't "break" in a loop topicalizer
(F) You called C<break>, but you're in a C<foreach> block rather than
-a C<given> block. You probably meant to use C<next> or C<last>.
+a C<given> block. You probably meant to use C<next> or C<last>.
=item Can't "break" outside a given block
@@ -678,6 +714,13 @@ quotas or other plumbing problems.
(F) Only scalar, array, and hash variables may be declared as "my", "our" or
"state" variables. They must have ordinary identifiers as names.
+=item Can't "default" outside a topicalizer
+
+(F) You have used a C<default> block that is neither inside a
+C<foreach> loop nor a C<given> block. (Note that this error is
+issued on exit from the C<default> block, so you won't get the
+error if you use an explicit C<continue>.)
+
=item Can't do inplace edit: %s is not a regular file
(S inplace) You tried to use the B<-i> switch on a special file, such as
@@ -702,9 +745,10 @@ inplace editing with the B<-i> switch. The file was ignored.
=item Can't do {n,m} with n > m in regex; marked by <-- HERE in m/%s/
-(F) Minima must be less than or equal to maxima. If you really want your
-regexp to match something 0 times, just put {0}. The <-- HERE shows in the
-regular expression about where the problem was discovered. See L<perlre>.
+(F) Minima must be less than or equal to maxima. If you really
+want your regexp to match something 0 times, just put {0}. The
+<-- HERE shows in the regular expression about where the problem
+was discovered. See L<perlre>.
=item Can't do waitpid with flags
@@ -753,7 +797,7 @@ is no builtin with the name C<word>.
=item Can't find %s character property "%s"
(F) You used C<\p{}> or C<\P{}> but the character property by that name
-could not be found. Maybe you misspelled the name of the property?
+could not be found. Maybe you misspelled the name of the property?
See L<perluniprops/Properties accessible through \p{} and \P{}>
for a complete list of available properties.
@@ -791,11 +835,11 @@ L<perlop> for the full details on here-documents.
(F) You may have tried to use C<\p> which means a Unicode
property (for example C<\p{Lu}> matches all uppercase
-letters). If you did mean to use a Unicode property, see
+letters). If you did mean to use a Unicode property, see
L<perluniprops/Properties accessible through \p{} and \P{}>
-for a complete list of available properties. If you didn't
-mean to use a Unicode property, escape the C<\p>, either by C<\\p>
-(just the C<\p>) or by C<\Q\p> (the rest of the string, or
+for a complete list of available properties. If you didn't
+mean to use a Unicode property, escape the C<\p>, either by
+C<\\p> (just the C<\p>) or by C<\Q\p> (the rest of the string, or
until C<\E>).
=item Can't fork: %s
@@ -898,20 +942,20 @@ package, but failed because the package stash has no name.
=item Can't load '%s' for module %s
-(F) The module you tried to load failed to load a dynamic extension. This
-may either mean that you upgraded your version of perl to one that is
-incompatible with your old dynamic extensions (which is known to happen
-between major versions of perl), or (more likely) that your dynamic
-extension was built against an older version of the library that is
-installed on your system. You may need to rebuild your old dynamic
-extensions.
+(F) The module you tried to load failed to load a dynamic extension.
+This may either mean that you upgraded your version of perl to one
+that is incompatible with your old dynamic extensions (which is known
+to happen between major versions of perl), or (more likely) that your
+dynamic extension was built against an older version of the library
+that is installed on your system. You may need to rebuild your old
+dynamic extensions.
=item Can't localize lexical variable %s
(F) You used local on a variable name that was previously declared as a
-lexical variable using "my" or "state". This is not allowed. If you want to
-localize a package variable of the same name, qualify it with the
-package name.
+lexical variable using "my" or "state". This is not allowed. If you
+want to localize a package variable of the same name, qualify it with
+the package name.
=item Can't localize through a reference
@@ -922,11 +966,11 @@ that $ref will still be a reference.
=item Can't locate %s
-(F) You said to C<do> (or C<require>, or C<use>) a file that couldn't be
-found. Perl looks for the file in all the locations mentioned in @INC,
-unless the file name included the full path to the file. Perhaps you
-need to set the PERL5LIB or PERL5OPT environment variable to say where
-the extra library is, or maybe the script needs to add the library name
+(F) You said to C<do> (or C<require>, or C<use>) a file that couldn't be found.
+Perl looks for the file in all the locations mentioned in @INC, unless
+the file name included the full path to the file. Perhaps you need
+to set the PERL5LIB or PERL5OPT environment variable to say where the
+extra library is, or maybe the script needs to add the library name
to @INC. Or maybe you just misspelled the name of the file. See
L<perlfunc/require> and L<lib>.
@@ -940,7 +984,7 @@ the file, say, by doing C<make install>.
=item Can't locate loadable object for module %s in @INC
(F) The module you loaded is trying to load an external library, like
-for example, C<foo.so> or C<bar.dll>, but the L<DynaLoader> module was
+for example, F<foo.so> or F<bar.dll>, but the L<DynaLoader> module was
unable to locate this library. See L<DynaLoader>.
=item Can't locate object method "%s" via package "%s"
@@ -959,7 +1003,7 @@ doesn't seem to exist.
(F) You tried to use in open() a PerlIO layer that does not exist,
e.g. open(FH, ">:nosuchlayer", "somefile").
-=item Can't make list assignment to \%ENV on this system
+=item Can't make list assignment to %ENV on this system
(F) List assignment to %ENV is not supported on some systems, notably
VMS.
@@ -993,13 +1037,22 @@ grep(). You can usually double the curlies to get the same effect
though, because the inner curlies will be considered a block that loops
once. See L<perlfunc/next>.
+=item Can't open %s
+
+(F) You tried to run a perl built with MAD support with
+the PERL_XMLDUMP environment variable set, but the file
+named by that variable could not be opened.
+
=item Can't open %s: %s
(S inplace) The implicit opening of a file through use of the C<< <> >>
filehandle, either implicitly under the C<-n> or C<-p> command-line
-switches, or explicitly, failed for the indicated reason. Usually this
-is because you don't have read permission for a file which you named on
-the command line.
+switches, or explicitly, failed for the indicated reason. Usually
+this is because you don't have read permission for a file which
+you named on the command line.
+
+(F) You tried to call perl with the B<-e> switch, but F</dev/null> (or
+your operating system's equivalent) could not be opened.
=item Can't open a reference
@@ -1042,7 +1095,7 @@ the command line for writing.
redirection, and couldn't open the pipe into which to send data destined
for stdout.
-=item Can't open perl script%s
+=item Can't open perl script "%s": %s
(F) The script you specified can't be opened for the indicated reason.
@@ -1083,11 +1136,18 @@ probably because you don't have write permission to the directory.
(P) An error peculiar to VMS. Perl thought stdin was a pipe, and tried
to reopen it to accept binary data. Alas, it failed.
+=item Can't reset %ENV on this system
+
+(F) You called C<reset('E')> or similar, which tried to reset
+all variables in the current package beginning with "E". In
+the main package, that includes %ENV. Resetting %ENV is not
+supported on some systems, notably VMS.
+
=item Can't resolve method "%s" overloading "%s" in package "%s"
-(F|P) Error resolving overloading specified by a method name (as opposed
-to a subroutine reference): no such method callable via the package. If
-the method name is C<???>, this is an internal error.
+(F)(P) Error resolving overloading specified by a method name (as
+opposed to a subroutine reference): no such method callable via the
+package. If the method name is C<???>, this is an internal error.
=item Can't return %s from lvalue subroutine
@@ -1102,11 +1162,11 @@ there was no subroutine call to return out of. See L<perlsub>.
=item Can't return %s to lvalue scalar context
-(F) You tried to return a complete array or hash from an lvalue subroutine,
-but you called the subroutine in a way that made Perl think you meant
-to return only one value. You probably meant to write parentheses around
-the call to the subroutine, which tell Perl that the call should be in
-list context.
+(F) You tried to return a complete array or hash from an lvalue
+subroutine, but you called the subroutine in a way that made Perl
+think you meant to return only one value. You probably meant to
+write parentheses around the call to the subroutine, which tell
+Perl that the call should be in list context.
=item Can't stat script "%s"
@@ -1116,7 +1176,7 @@ open already. Bizarre.
=item Can't take log of %g
(F) For ordinary real numbers, you can't take the logarithm of a
-negative number or zero. There's a Math::Complex package that comes
+negative number or zero. There's a Math::Complex package that comes
standard with Perl, though, if you really want to do that for the
negative numbers.
@@ -1139,6 +1199,11 @@ into a more specialized kind of SV. The top several SV types are so
specialized, however, that they cannot be interconverted. This message
indicates that such a conversion was attempted.
+=item Can't use '%c' after -mname
+
+(F) You tried to call perl with the B<-m> switch, but you put something
+other than "=" after the module name.
+
=item Can't use anonymous symbol table for method lookup
(F) The internal routine that does method lookup was handed a symbol
@@ -1157,8 +1222,8 @@ references are disallowed. See L<perlref>.
=item Can't use %! because Errno.pm is not available
-(F) The first time the %! hash is used, perl automatically loads the
-Errno.pm module. The Errno module is expected to tie the %! hash to
+(F) The first time the C<%!> hash is used, perl automatically loads the
+Errno.pm module. The Errno module is expected to tie the %! hash to
provide symbolic names for C<$!> errno values.
=item Can't use both '<' and '>' after type '%c' in %s
@@ -1221,18 +1286,18 @@ expression pattern. Trying to do this in ordinary Perl code produces a
value that prints out looking like SCALAR(0xdecaf). Use the $1 form
instead.
-=item Can't use "when" outside a topicalizer
-
-(F) You have used a when() block that is neither inside a C<foreach>
-loop nor a C<given> block. (Note that this error is issued on exit
-from the C<when> block, so you won't get the error if the match fails,
-or if you use an explicit C<continue>.)
-
=item Can't weaken a nonreference
(F) You attempted to weaken something that was not a reference. Only
references can be weakened.
+=item Can't "when" outside a topicalizer
+
+(F) You have used a when() block that is neither inside a C<foreach>
+loop nor a C<given> block. (Note that this error is issued on exit
+from the C<when> block, so you won't get the error if the match fails,
+or if you use an explicit C<continue>.)
+
=item Can't x= to read-only value
(F) You tried to repeat a constant value (often the undefined value)
@@ -1241,8 +1306,8 @@ Perhaps you need to copy the value to a temporary, and repeat that.
=item Character following "\c" must be ASCII
-(F|W deprecated, syntax) In C<\cI<X>>, I<X> must be an ASCII character.
-It is planned to make this fatal in all instances in Perl 5.16. In the
+(F)(W deprecated, syntax) In C<\cI<X>>, I<X> must be an ASCII character.
+It is planned to make this fatal in all instances in Perl 5.18. In the
cases where it isn't fatal, the character this evaluates to is
derived by exclusive or'ing the code point of this character with 0x40.
@@ -1269,9 +1334,9 @@ instead.
pack("U0W", $x)
-where $x is either less than 0 or more than 255. However, C<U0>-mode expects
-all values to fall in the interval [0, 255], so Perl behaved as if you
-meant:
+where $x is either less than 0 or more than 255. However, C<U0>-mode
+expects all values to fall in the interval [0, 255], so Perl behaved
+as if you meant:
pack("U0W", $x & 255)
@@ -1297,8 +1362,8 @@ instead.
unpack("H", "\x{2a1}")
where the format expects to process a byte (a character with a value
-below 256), but a higher value was provided instead. Perl uses the value
-modulus 256 instead, as if you had provided:
+below 256), but a higher value was provided instead. Perl uses the
+value modulus 256 instead, as if you had provided:
unpack("H", "\x{a1}")
@@ -1309,7 +1374,7 @@ modulus 256 instead, as if you had provided:
pack("u", "\x{1f3}b")
where the format expects to process a sequence of bytes (character with a
-value below 256), but some of the characters had a higher value. Perl
+value below 256), but some of the characters had a higher value. Perl
uses the character values modulus 256 instead, as if you had provided:
pack("u", "\x{f3}b")
@@ -1321,7 +1386,7 @@ uses the character values modulus 256 instead, as if you had provided:
unpack("s", "\x{1f3}b")
where the format expects to process a sequence of bytes (character with a
-value below 256), but some of the characters had a higher value. Perl
+value below 256), but some of the characters had a higher value. Perl
uses the character values modulus 256 instead, as if you had provided:
unpack("s", "\x{f3}b")
@@ -1331,7 +1396,7 @@ uses the character values modulus 256 instead, as if you had provided:
(D deprecated, syntax) The C<\cI<X>> construct is intended to be a way
to specify non-printable characters. You used it with a "{" which
evaluates to ";", which is printable. It is planned to remove the
-ability to specify a semi-colon this way in Perl 5.16. Just use a
+ability to specify a semi-colon this way in Perl 5.18. Just use a
semi-colon or a backslash-semi-colon without the "\c".
=item "\c%c" is more clearly written simply as "%s"
@@ -1341,6 +1406,10 @@ non-printable characters. You used it for a printable one, which is better
written as simply itself, perhaps preceded by a backslash for non-word
characters.
+=item Cloning substitution context is unimplemented
+
+(F) Creating a new thread inside the C<s///> operator is not supported.
+
=item close() on unopened filehandle %s
(W unopened) You tried to close a filehandle that was never opened.
@@ -1358,21 +1427,22 @@ This subroutine cannot be called.
=item Code missing after '/'
-(F) You had a (sub-)template that ends with a '/'. There must be another
-template code following the slash. See L<perlfunc/pack>.
+(F) You had a (sub-)template that ends with a '/'. There must be
+another template code following the slash. See L<perlfunc/pack>.
=item Code point 0x%X is not Unicode, may not be portable
-=item Code point 0x%X is not Unicode, no properties match it; all inverse properties do
+=item Code point 0x%X is not Unicode, all \p{} matches fail; all \P{} matches succeed
-(W utf8, non_unicode) You had a code point above the Unicode maximum of U+10FFFF.
+(W utf8, non_unicode) You had a code point above the Unicode maximum
+of U+10FFFF.
-Perl allows strings to contain a superset of Unicode code
-points, up to the limit of what is storable in an unsigned integer on
-your system, but these may not be accepted by other languages/systems.
-At one time, it was legal in some standards to have code points up to
-0x7FFF_FFFF, but not higher. Code points above 0xFFFF_FFFF require
-larger than a 32 bit word.
+Perl allows strings to contain a superset of Unicode code points, up
+to the limit of what is storable in an unsigned integer on your system,
+but these may not be accepted by other languages/systems. At one time,
+it was legal in some standards to have code points up to 0x7FFF_FFFF,
+but not higher. Code points above 0xFFFF_FFFF require larger than a
+32 bit word.
None of the Unicode or Perl-defined properties will match a non-Unicode
code point. For example,
@@ -1385,10 +1455,23 @@ will not match, because the code point is not in Unicode. But
will match.
+This may be counterintuitive at times, as both these fail:
+
+ chr(0x110000) =~ \p{ASCII_Hex_Digit=True} # Fails.
+ chr(0x110000) =~ \p{ASCII_Hex_Digit=False} # Also fails!
+
+and both these succeed:
+
+ chr(0x110000) =~ \P{ASCII_Hex_Digit=True} # Succeeds.
+ chr(0x110000) =~ \P{ASCII_Hex_Digit=False} # Also succeeds!
+
=item %s: Command not found
-(A) You've accidentally run your script through B<csh> instead of Perl.
-Check the #! line, or manually feed your script into Perl yourself.
+(A) You've accidentally run your script through B<csh> or another shell
+shell instead of Perl. Check the #! line, or manually feed your script
+into Perl yourself. The #! line at the top of your file could look like
+
+ #!/usr/bin/perl -w
=item Compilation failed in require
@@ -1410,25 +1493,25 @@ on I<Mastering Regular Expressions>.)
=item cond_broadcast() called on unlocked variable
-(W threads) Within a thread-enabled program, you tried to call
-cond_broadcast() on a variable which wasn't locked. The cond_broadcast()
-function is used to wake up another thread that is waiting in a
-cond_wait(). To ensure that the signal isn't sent before the other thread
-has a chance to enter the wait, it is usual for the signaling thread
-first to wait for a lock on variable. This lock attempt will only succeed
-after the other thread has entered cond_wait() and thus relinquished the
-lock.
+(W threads) Within a thread-enabled program, you tried to
+call cond_broadcast() on a variable which wasn't locked.
+The cond_broadcast() function is used to wake up another thread
+that is waiting in a cond_wait(). To ensure that the signal isn't
+sent before the other thread has a chance to enter the wait, it
+is usual for the signaling thread first to wait for a lock on
+variable. This lock attempt will only succeed after the other
+thread has entered cond_wait() and thus relinquished the lock.
=item cond_signal() called on unlocked variable
-(W threads) Within a thread-enabled program, you tried to call
-cond_signal() on a variable which wasn't locked. The cond_signal()
-function is used to wake up another thread that is waiting in a
-cond_wait(). To ensure that the signal isn't sent before the other thread
-has a chance to enter the wait, it is usual for the signaling thread
-first to wait for a lock on variable. This lock attempt will only succeed
-after the other thread has entered cond_wait() and thus relinquished the
-lock.
+(W threads) Within a thread-enabled program, you tried to
+call cond_signal() on a variable which wasn't locked. The
+cond_signal() function is used to wake up another thread that
+is waiting in a cond_wait(). To ensure that the signal isn't
+sent before the other thread has a chance to enter the wait, it
+is usual for the signaling thread first to wait for a lock on
+variable. This lock attempt will only succeed after the other
+thread has entered cond_wait() and thus relinquished the lock.
=item connect() on closed socket %s
@@ -1441,30 +1524,26 @@ L<perlfunc/connect>.
(F) The parser found inconsistencies either while attempting to define
an overloaded constant, or when trying to find the character name
specified in the C<\N{...}> escape. Perhaps you forgot to load the
-corresponding C<overload> or C<charnames> pragma? See L<charnames> and
-L<overload>.
+corresponding L<overload> pragma?.
=item Constant(%s)%s: %s in regex; marked by <-- HERE in m/%s/
(F) The parser found inconsistencies while attempting to find
-the character name specified in the C<\N{...}> escape. Perhaps you
-forgot to load the corresponding C<charnames> pragma?
-See L<charnames>.
-
+the character name specified in the C<\N{...}> escape.
=item Constant is not %s reference
(F) A constant value (perhaps declared using the C<use constant> pragma)
is being dereferenced, but it amounts to the wrong type of reference.
-The message indicates the type of reference that was expected. This
+The message indicates the type of reference that was expected. This
usually indicates a syntax error in dereferencing the constant value.
See L<perlsub/"Constant Functions"> and L<constant>.
=item Constant subroutine %s redefined
-(S) You redefined a subroutine which had previously been
-eligible for inlining. See L<perlsub/"Constant Functions"> for
-commentary and workarounds.
+(W redefine)(S) You redefined a subroutine which had previously
+been eligible for inlining. See L<perlsub/"Constant Functions">
+for commentary and workarounds.
=item Constant subroutine %s undefined
@@ -1474,9 +1553,19 @@ workarounds.
=item Copy method did not return a reference
-(F) The method which overloads "=" is buggy. See
+(F) The method which overloads "=" is buggy. See
L<overload/Copy Constructor>.
+=item &CORE::%s cannot be called directly
+
+(F) You tried to call a subroutine in the C<CORE::> namespace
+with C<&foo> syntax or through a reference. Some subroutines
+in this package cannot yet be called that way, but must be
+called as barewords. Something like this will work:
+
+ BEGIN { *shove = \&CORE::push; }
+ shove @array, 1,2,3; # pushes on to @array
+
=item CORE::%s is not a keyword
(F) The CORE:: namespace is reserved for Perl keywords.
@@ -1501,6 +1590,8 @@ valid magic number.
you have also specified an explicit size for the string. See
L<perlfunc/pack>.
+=item Deep recursion on anonymous subroutine
+
=item Deep recursion on subroutine "%s"
(W recursion) This subroutine has called itself (directly or indirectly)
@@ -1519,13 +1610,30 @@ array is empty, just use C<if (@array) { # not empty }> for example.
=item defined(%hash) is deprecated
-(D deprecated) defined() is not usually useful on hashes because it
-checks for an undefined I<scalar> value. If you want to see if the hash
-is empty, just use C<if (%hash) { # not empty }> for example.
+(D deprecated) C<defined()> is not usually right on hashes and has been
+discouraged since 5.004.
+
+Although C<defined %hash> is false on a plain not-yet-used hash, it
+becomes true in several non-obvious circumstances, including iterators,
+weak references, stash names, even remaining true after C<undef %hash>.
+These things make C<defined %hash> fairly useless in practice.
+
+If a check for non-empty is what you wanted then just put it in boolean
+context (see L<perldata/Scalar values>):
+
+ if (%hash) {
+ # not empty
+ }
+
+If you had C<defined %Foo::Bar::QUUX> to check whether such a package
+variable exists then that's never really been reliable, and isn't
+a good way to enquire about the features of a package, or whether
+it's loaded, etc.
+
=item (?(DEFINE)....) does not allow branches in regex; marked by <-- HERE in m/%s/
-(F) You used something like C<(?(DEFINE)...|..)> which is illegal. The
+(F) You used something like C<(?(DEFINE)...|..)> which is illegal. The
most likely cause of this error is that you left out a parenthesis inside
of the C<....> part.
@@ -1553,12 +1661,12 @@ parentheses or colons.
=item Deprecated use of my() in false conditional
-(D deprecated) You used a declaration similar to C<my $x if 0>.
-There has been a long-standing bug in Perl that causes a lexical variable
+(D deprecated) You used a declaration similar to C<my $x if 0>. There
+has been a long-standing bug in Perl that causes a lexical variable
not to be cleared at scope exit when its declaration includes a false
-conditional. Some people have exploited this bug to achieve a kind of
-static variable. Since we intend to fix this bug, we don't want people
-relying on this behavior. You can achieve a similar static effect by
+conditional. Some people have exploited this bug to achieve a kind of
+static variable. Since we intend to fix this bug, we don't want people
+relying on this behavior. You can achieve a similar static effect by
declaring the variable in a separate block outside the function, eg
sub f { my $x if 0; return $x++ }
@@ -1567,16 +1675,16 @@ becomes
{ my $x; sub f { return $x++ } }
-Beginning with perl 5.9.4, you can also use C<state> variables to
-have lexicals that are initialized only once (see L<feature>):
+Beginning with perl 5.9.4, you can also use C<state> variables to have
+lexicals that are initialized only once (see L<feature>):
sub f { state $x; return $x++ }
=item DESTROY created new reference to dead object '%s'
(F) A DESTROY() method created a new reference to the object which is
-just being DESTROYed. Perl is confused, and prefers to abort rather than
-to create a dangling reference.
+just being DESTROYed. Perl is confused, and prefers to abort rather
+than to create a dangling reference.
=item Did not produce a valid header
@@ -1665,15 +1773,15 @@ in a pack template. See L<perlfunc/pack>.
=item elseif should be elsif
-(S syntax) There is no keyword "elseif" in Perl because Larry thinks it's
-ugly. Your code will be interpreted as an attempt to call a method named
-"elseif" for the class returned by the following block. This is
+(S syntax) There is no keyword "elseif" in Perl because Larry thinks
+it's ugly. Your code will be interpreted as an attempt to call a method
+named "elseif" for the class returned by the following block. This is
unlikely to be what you want.
=item Empty %s
(F) C<\p> and C<\P> are used to introduce a named Unicode property, as
-described in L<perlunicode> and L<perlre>. You used C<\p> or C<\P> in
+described in L<perlunicode> and L<perlre>. You used C<\p> or C<\P> in
a regular expression without specifying the property name.
=item entering effective %s failed
@@ -1685,7 +1793,7 @@ effective uids or gids failed.
(F) You're running under taint mode, and the C<%ENV> variable has been
aliased to another hash, so it doesn't reflect anymore the state of the
-program's environment. This is potentially insecure.
+program's environment. This is potentially insecure.
=item Error converting file specification %s
@@ -1720,7 +1828,7 @@ pragma is in effect. See L<perlre/(?{ code })>.
=item EVAL without pos change exceeded limit in regex; marked by <-- HERE in m/%s/
(F) You used a pattern that nested too many EVAL calls without consuming
-any text. Restructure the pattern so that text is consumed.
+any text. Restructure the pattern so that text is consumed.
The <-- HERE shows in the regular expression about where the problem was
discovered.
@@ -1735,7 +1843,7 @@ variable and glob that.
=item exec? I'm not *that* kind of operating system
(F) The C<exec> function is not implemented on some systems, e.g., Symbian
-OS. See L<perlport>.
+OS. See L<perlport>.
=item Execution of %s aborted due to compilation errors.
@@ -1813,8 +1921,8 @@ is not possible.
=item Field too wide in 'u' format in pack
(W pack) Each line in an uuencoded string start with a length indicator
-which can't encode values above 63. So there is no point in asking for
-a line length bigger than that. Perl will behave as if you specified
+which can't encode values above 63. So there is no point in asking for
+a line length bigger than that. Perl will behave as if you specified
C<u63> as the format.
=item Filehandle %s opened only for input
@@ -1836,13 +1944,13 @@ output (maybe you closed STDIN earlier?).
=item Filehandle %s reopened as %s only for input
(W io) You opened for reading a filehandle that got the same filehandle id
-as STDOUT or STDERR. This occurred because you closed STDOUT or STDERR
+as STDOUT or STDERR. This occurred because you closed STDOUT or STDERR
previously.
=item Filehandle STDIN reopened as %s only for output
(W io) You opened for writing a filehandle that got the same filehandle id
-as STDIN. This occurred because you closed STDIN previously.
+as STDIN. This occurred because you closed STDIN previously.
=item Final $ should be \$ or $name
@@ -1926,15 +2034,15 @@ which package the global variable is in (using "::").
=item glob failed (%s)
-(W glob) Something went wrong with the external program(s) used for
-C<glob> and C<< <*.c> >>. Usually, this means that you supplied a
-C<glob> pattern that caused the external program to fail and exit with a
+(S glob) Something went wrong with the external program(s) used
+for C<glob> and C<< <*.c> >>. Usually, this means that you supplied a C<glob>
+pattern that caused the external program to fail and exit with a
nonzero status. If the message indicates that the abnormal exit
-resulted in a coredump, this may also mean that your csh (C shell) is
-broken. If so, you should change all of the csh-related variables in
-config.sh: If you have tcsh, make the variables refer to it as if it
-were csh (e.g. C<full_csh='/usr/bin/tcsh'>); otherwise, make them all
-empty (except that C<d_csh> should be C<'undef'>) so that Perl will
+resulted in a coredump, this may also mean that your csh (C shell)
+is broken. If so, you should change all of the csh-related variables
+in config.sh: If you have tcsh, make the variables refer to it as
+if it were csh (e.g. C<full_csh='/usr/bin/tcsh'>); otherwise, make them
+all empty (except that C<d_csh> should be C<'undef'>) so that Perl will
think csh is missing. In either case, after editing config.sh, run
C<./Configure -S> and rebuild Perl.
@@ -1949,15 +2057,13 @@ earlier in the line, and you really meant a "less than".
(W overflow) You called C<gmtime> with a number that was larger than
it can reliably handle and C<gmtime> probably returned the wrong
-date. This warning is also triggered with nan (the special
+date. This warning is also triggered with NaN (the special
not-a-number value).
=item gmtime(%f) too small
(W overflow) You called C<gmtime> with a number that was smaller than
-it can reliably handle and C<gmtime> probably returned the wrong
-date. This warning is also triggered with nan (the special
-not-a-number value).
+it can reliably handle and C<gmtime> probably returned the wrong date.
=item Got an error from DosAllocMem
@@ -1969,6 +2075,12 @@ version of Perl, and this should not happen anyway.
(F) Unlike with "next" or "last", you're not allowed to goto an
unspecified destination. See L<perlfunc/goto>.
+=item Goto undefined subroutine%s
+
+(F) You tried to call a subroutine with C<goto &sub> syntax, but
+the indicated subroutine hasn't been defined, or if it was, it
+has since been undefined.
+
=item ()-group starts with a count
(F) A ()-group started with a count. A count is supposed to follow
@@ -1998,17 +2110,18 @@ Further error messages would likely be uninformative.
(D syntax)
-You had a word that isn't a regex modifier immediately following a
-pattern without an intervening space. If you are trying to use the C</le>
-flags on a substitution, use C</el> instead. Otherwise, add white space
-between the pattern and following word to eliminate the warning. As an
-example of the latter, the two constructs:
+You had a word that isn't a regex modifier immediately following
+a pattern without an intervening space. If you are trying to use
+the C</le> flags on a substitution, use C</el> instead. Otherwise, add
+white space between the pattern and following word to eliminate
+the warning. As an example of the latter, the two constructs:
+
$a =~ m/$foo/sand $bar
$a =~ m/$foo/s and $bar
-both currently mean the same thing, but it is planned to disallow the first
-form in Perl 5.16. And,
+both currently mean the same thing, but it is planned to disallow
+the first form in Perl 5.18. And,
$a =~ m/$foo/and $bar
@@ -2029,9 +2142,9 @@ of Perl are likely to eliminate these arbitrary limitations.
=item Ignoring zero length \N{} in character class
-(W) Named Unicode character escapes (\N{...}) may return a
-zero length sequence. When such an escape is used in a character class
-its behaviour is not well defined. Check that the correct escape has
+(W) Named Unicode character escapes C<(\N{...})> may return a zero-length
+sequence. When such an escape is used in a character class its
+behaviour is not well defined. Check that the correct escape has
been used, and the correct charname handler is in scope.
=item Illegal binary digit %s
@@ -2044,6 +2157,11 @@ been used, and the correct charname handler is in scope.
binary number. Interpretation of the binary number stopped before the
offending digit.
+=item Illegal character after '_' in prototype for %s : %s
+
+(W illegalproto) An illegal character was found in a prototype declaration.
+Legal characters in prototypes are $, @, %, *, ;, [, ], &, \, and +.
+
=item Illegal character \%o (carriage return)
(F) Perl normally treats carriage returns in the program text as it
@@ -2060,11 +2178,11 @@ Legal characters in prototypes are $, @, %, *, ;, [, ], &, \, and +.
=item Illegal declaration of anonymous subroutine
(F) When using the C<sub> keyword to construct an anonymous subroutine,
-you must always specify a block of code. See L<perlsub>.
+you must always specify a block of code. See L<perlsub>.
=item Illegal declaration of subroutine %s
-(F) A subroutine was not declared correctly. See L<perlsub>.
+(F) A subroutine was not declared correctly. See L<perlsub>.
=item Illegal division by zero
@@ -2141,7 +2259,7 @@ encoding is limited to code points no larger than 2147483647 (0x7FFFFFFF).
=item Infinite recursion in regex; marked by <-- HERE in m/%s/
(F) You used a pattern that references itself without consuming any input
-text. You should check the pattern to ensure that recursive patterns
+text. You should check the pattern to ensure that recursive patterns
either consume text or fail.
The <-- HERE shows in the regular expression about where the problem was
@@ -2149,10 +2267,11 @@ discovered.
=item Initialization of state variables in list context currently forbidden
-(F) Currently the implementation of "state" only permits the initialization
-of scalar variables in scalar context. Re-write C<state ($a) = 42> as
-C<state $a = 42> to change from list to scalar context. Constructions such
-as C<state (@a) = foo()> will be supported in a future perl release.
+(F) Currently the implementation of "state" only permits the
+initialization of scalar variables in scalar context. Re-write
+C<state ($a) = 42> as C<state $a = 42> to change from list to scalar
+context. Constructions such as C<state (@a) = foo()> will be
+supported in a future perl release.
=item Insecure dependency in %s
@@ -2186,7 +2305,6 @@ 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>.
-
=item Integer overflow in format string for %s
(F) The indexes and widths specified in the format string of C<printf()>
@@ -2231,7 +2349,7 @@ terminate the Perl script and execute the specified command.
=item Internal urp in regex; marked by <-- HERE in m/%s/
-(P) Something went badly awry in the regular expression parser. The
+(P) Something went badly awry in the regular expression parser. The
<-- HERE shows in the regular expression about where the problem was
discovered.
@@ -2272,6 +2390,13 @@ escape was discovered.
number. Either it is empty, or you tried to use a character other than
0 - 9 or A - F, a - f in a hexadecimal number.
+=item Invalid module name %s with -%c option: contains single ':'
+
+(F) The module argument to perl's B<-m> and B<-M> command-line options
+cannot contain single colons in the module name, but only in the
+arguments after "=". In other words, B<-MFoo::Bar=:baz> is ok, but
+B<-MFoo:Bar=baz> is not.
+
=item Invalid mro name: '%s'
(F) You tried to C<mro::set_mro("classname", "foo")> or C<use mro 'foo'>,
@@ -2279,6 +2404,12 @@ where C<foo> is not a valid method resolution order (MRO). Currently,
the only valid ones supported are C<dfs> and C<c3>, unless you have loaded
a module that is a MRO plugin. See L<mro> and L<perlmroapi>.
+=item invalid option -D%c, use -D'' to see choices
+
+(F) Perl was called with invalid debugger flags. Call perl with
+the B<-D> option with no flags to see the list of acceptable values.
+See also L<< perlrun/B<-D>I<letters> >>.
+
=item Invalid [] range "%s" in regex; marked by <-- HERE in m/%s/
(F) The range specified in a character class had a minimum character
@@ -2308,7 +2439,7 @@ list was terminated too soon.
=item Invalid strict version format (%s)
-(F) A version number did not meet the "strict" criteria for versions.
+(F) A version number did not meet the "strict" criteria for versions.
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.
@@ -2319,27 +2450,28 @@ See the L<version> module for more details on allowed version formats.
(F) The given character is not a valid pack or unpack type.
See L<perlfunc/pack>.
+
(W) The given character is not a valid pack or unpack type but used to be
silently ignored.
=item Invalid version format (%s)
-(F) A version number did not meet the "lax" criteria for versions.
+(F) A version number did not meet the "lax" criteria for versions.
A "lax" version number is a positive decimal number (integer or
decimal-fraction) without exponentiation or else a dotted-decimal
-v-string. If the v-string has fewer than three components, it must
-have a leading 'v' character. Otherwise, the leading 'v' is optional.
-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 parenthesized text indicates which
-criteria were not met. See the L<version> module for more details on
-allowed version formats.
+v-string. If the v-string has fewer than three components, it
+must have a leading 'v' character. Otherwise, the leading 'v' is
+optional. 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 parenthesized
+text indicates which criteria were not met. See the L<version> module
+for more details on allowed version formats.
=item Invalid version object
-(F) The internal structure of the version object was invalid. Perhaps
-the internals were modified directly in some way or an arbitrary reference
-was blessed into the "version" class.
+(F) The internal structure of the version object was invalid.
+Perhaps the internals were modified directly in some way or
+an arbitrary reference was blessed into the "version" class.
=item ioctl is not implemented
@@ -2365,28 +2497,28 @@ neither as a system call nor an ioctl call (SIOCATMARK).
=item $* is no longer supported
(D deprecated, syntax) The special variable C<$*>, deprecated in older
-perls, has been removed as of 5.9.0 and is no longer supported. In
+perls, has been removed as of 5.9.0 and is no longer supported. In
previous versions of perl the use of C<$*> enabled or disabled multi-line
matching within a string.
Instead of using C<$*> you should use the C</m> (and maybe C</s>) regexp
-modifiers. You can enable C</m> for a lexical scope (even a whole file)
-with C<use re '/m'>. (In older versions: when C<$*> was set to a true value
+modifiers. You can enable C</m> for a lexical scope (even a whole file)
+with C<use re '/m'>. (In older versions: when C<$*> was set to a true value
then all regular expressions behaved as if they were written using C</m>.)
=item $# is no longer supported
(D deprecated, syntax) The special variable C<$#>, deprecated in older
-perls, has been removed as of 5.9.3 and is no longer supported. You
+perls, has been removed as of 5.9.3 and is no longer supported. You
should use the printf/sprintf functions instead.
-=item `%s' is not a code reference
+=item '%s' is not a code reference
-(W overload) The second (fourth, sixth, ...) argument of overload::constant
-needs to be a code reference. Either an anonymous subroutine, or a reference
-to a subroutine.
+(W overload) The second (fourth, sixth, ...) argument of
+overload::constant needs to be a code reference. Either
+an anonymous subroutine, or a reference to a subroutine.
-=item `%s' is not an overloadable type
+=item '%s' is not an overloadable type
(W overload) You tried to overload a constant type the overload package is
unaware of.
@@ -2421,16 +2553,29 @@ effective uids or gids failed.
=item length/code after end of string in unpack
(F) While unpacking, the string buffer was already used up when an unpack
-length/code combination tried to obtain more data. This results in
-an undefined value for the length. See L<perlfunc/pack>.
+length/code combination tried to obtain more data. This results in
+an undefined value for the length. See L<perlfunc/pack>.
+
+=item length() used on %s
+
+(W syntax) You used length() on either an array or a hash when you
+probably wanted a count of the items.
+
+Array size can be obtained by doing:
+
+ scalar(@array);
+
+The number of items in a hash can be obtained by doing:
+
+ scalar(keys %hash);
=item Lexing code attempted to stuff non-Latin-1 character into Latin-1 input
(F) An extension is attempting to insert text into the current parse
-(using L<lex_stuff_pvn|perlapi/lex_stuff_pvn> or similar), but tried to insert a character
-that couldn't be part of the current input. This is an inherent pitfall
-of the stuffing mechanism, and one of the reasons to avoid it. Where it
-is necessary to stuff, stuffing only plain ASCII is recommended.
+(using L<lex_stuff_pvn|perlapi/lex_stuff_pvn> or similar), but tried to insert a character that
+couldn't be part of the current input. This is an inherent pitfall
+of the stuffing mechanism, and one of the reasons to avoid it. Where
+it is necessary to stuff, stuffing only plain ASCII is recommended.
=item Lexing code internal error (%s)
@@ -2443,53 +2588,63 @@ detectable way.
to check the return value of your socket() call? See
L<perlfunc/listen>.
+=item List form of piped open not implemented
+
+(F) On some platforms, notably Windows, the three-or-more-arguments
+form of C<open> does not support pipes, such as C<open($pipe, '|-', @args)>.
+Use the two-argument C<open($pipe, '|prog arg1 arg2...')> form instead.
+
=item localtime(%f) too large
(W overflow) You called C<localtime> with a number that was larger
than it can reliably handle and C<localtime> probably returned the
-wrong date. This warning is also triggered with nan (the special
+wrong date. This warning is also triggered with NaN (the special
not-a-number value).
=item localtime(%f) too small
(W overflow) You called C<localtime> with a number that was smaller
than it can reliably handle and C<localtime> probably returned the
-wrong date. This warning is also triggered with nan (the special
-not-a-number value).
+wrong date.
=item Lookbehind longer than %d not implemented in regex m/%s/
(F) There is currently a limit on the length of string which lookbehind can
-handle. This restriction may be eased in a future release.
+handle. This restriction may be eased in a future release.
=item Lost precision when %s %f by 1
(W) The value you attempted to increment or decrement by one is too large
for the underlying floating point representation to store accurately,
-hence the target of C<++> or C<--> is unchanged. Perl issues this warning
+hence the target of C<++> or C<--> is unchanged. Perl issues this warning
because it has already switched from integers to floating point when values
are too large for integers, and now even floating point is insufficient.
You may wish to switch to using L<Math::BigInt> explicitly.
-=item lstat() on filehandle %s
+=item lstat() on filehandle%s
(W io) You tried to do an lstat on a filehandle. What did you mean
by that? lstat() makes sense only on filenames. (Perl did a fstat()
instead on the filehandle.)
-=item lvalue attribute ignored after the subroutine has been defined
+=item lvalue attribute %s already-defined subroutine
-(W misc) Making a subroutine an lvalue subroutine after it has been defined
-by declaring the subroutine with an lvalue attribute is not
-possible. To make the subroutine an lvalue subroutine add the
-lvalue attribute to the definition, or put the declaration before
-the definition.
+(W misc) Although L<attributes.pm|attributes> allows this, turning the lvalue
+attribute on or off on a Perl subroutine that is already defined
+does not always work properly. It may or may not do what you
+want, depending on what code is inside the subroutine, with exact
+details subject to change between Perl versions. Only do this
+if you really know what you are doing.
-=item Lvalue subs returning %s not implemented yet
+=item lvalue attribute ignored after the subroutine has been defined
+
+(W misc) Using the C<:lvalue> declarative syntax to make a Perl
+subroutine an lvalue subroutine after it has been defined is
+not permitted. To make the subroutine an lvalue subroutine,
+add the lvalue attribute to the definition, or put the C<sub
+foo :lvalue;> declaration before the definition.
-(F) Due to limitations in the current implementation, array and hash
-values cannot be returned in subroutines used in lvalue context. See
-L<perlsub/"Lvalue subroutines">.
+See also L<attributes.pm|attributes>.
=item Malformed integer in [] in pack
@@ -2524,12 +2679,12 @@ when the function is called.
=item Malformed UTF-8 character (%s)
-(S utf8) (F) Perl detected a string that didn't comply with UTF-8
+(S utf8)(F) Perl detected a string that didn't comply with UTF-8
encoding rules, even though it had the UTF8 flag on.
One possible cause is that you set the UTF8 flag yourself for data that
you thought to be in UTF-8 but it wasn't (it was for example legacy
-8-bit data). To guard against this, you can use Encode::decode_utf8.
+8-bit data). To guard against this, you can use Encode::decode_utf8.
If you use the C<:encoding(UTF-8)> PerlIO layer for input, invalid byte
sequences are handled gracefully, but if you use C<:utf8>, the flag is
@@ -2571,11 +2726,11 @@ See L<perlre>.
=item Maximal count of pending signals (%u) exceeded
-(F) Perl aborted due to too high a number of signals pending. This
+(F) Perl aborted due to too high a number of signals pending. This
usually indicates that your operating system tried to deliver signals
too fast (with a very high priority), starving the perl process from
resources it would need to reach a point where it can process signals
-safely. (See L<perlipc/"Deferred Signals (Safe Signals)">.)
+safely. (See L<perlipc/"Deferred Signals (Safe Signals)">.)
=item "%s" may clash with future reserved word
@@ -2583,7 +2738,7 @@ safely. (See L<perlipc/"Deferred Signals (Safe Signals)">.)
interpreter, especially if the word that is being warned about is
"use" or "my".
-=item % may not be used in pack
+=item '%' may not be used in pack
(F) You can't pack a string by supplying a checksum, because the
checksumming process loses information, and you can't go the other way.
@@ -2673,7 +2828,7 @@ can vary from one line to the next.
The traditional one has it followed by a name enclosed in braces,
meaning the character (or sequence of characters) given by that
-name. Thus C<\N{ASTERISK}> is another way of writing C<*>, valid in both
+name. Thus C<\N{ASTERISK}> is another way of writing C<*>, valid in both
double-quoted strings and regular expression patterns. In patterns,
it doesn't have the meaning an unescaped C<*> does.
@@ -2719,10 +2874,10 @@ Another way is to assign to a substr() that's off the end of the string.
Yet another way is to assign to a C<foreach> loop I<VAR> when I<VAR>
is aliased to a constant in the look I<LIST>:
- $x = 1;
- foreach my $n ($x, 2) {
- $n *= 2; # modifies the $x, but fails on attempt to modify the 2
- }
+ $x = 1;
+ foreach my $n ($x, 2) {
+ $n *= 2; # modifies the $x, but fails on attempt to
+ } # modify the 2
=item Modification of non-creatable array value attempted, %s
@@ -2747,7 +2902,7 @@ about C<-M> and C<-m>.
=item More than one argument to '%s' open
-(F) The C<open> function has been asked to open multiple files. This
+(F) The C<open> function has been asked to open multiple files. This
can happen if you are trying to open a pipe to a command that takes a
list of arguments, but have forgotten to specify a piped open mode.
See L<perlfunc/open> for details.
@@ -2845,9 +3000,9 @@ greater than or equal to zero.
=item Nested quantifiers in regex; marked by <-- HERE in m/%s/
-(F) You can't quantify a quantifier without intervening parentheses. So
-things like ** or +* or ?* are illegal. The <-- HERE shows in the regular
-expression about where the problem was discovered.
+(F) You can't quantify a quantifier without intervening parentheses.
+So things like ** or +* or ?* are illegal. The <-- HERE shows in the
+regular expression about where the problem was discovered.
Note that the minimal matching quantifiers, C<*?>, C<+?>, and
C<??> appear to be nested quantifiers, but aren't. See L<perlre>.
@@ -2870,23 +3025,33 @@ setgid script to even be allowed to attempt. Generally speaking there
will be another way to do what you want that is, if not secure, at least
securable. See L<perlsec>.
+=item No code specified for -%c
+
+(F) Perl's B<-e> and B<-E> command-line options require an argument. If
+you want to run an empty program, pass the empty string as a separate
+argument or run a program consisting of a single 0 or 1:
+
+ perl -e ""
+ perl -e0
+ perl -e1
+
=item No comma allowed after %s
-(F) A list operator that has a filehandle or "indirect object" is not
-allowed to have a comma between that and the following arguments.
+(F) A list operator that has a filehandle or "indirect object" is
+not allowed to have a comma between that and the following arguments.
Otherwise it'd be just another one of the arguments.
-One possible cause for this is that you expected to have imported a
-constant to your name space with B<use> or B<import> while no such
-importing took place, it may for example be that your operating system
-does not support that particular constant. Hopefully you did use an
-explicit import list for the constants you expect to see; please see
-L<perlfunc/use> and L<perlfunc/import>. While an explicit import list
-would probably have caught this error earlier it naturally does not
-remedy the fact that your operating system still does not support that
-constant. Maybe you have a typo in the constants of the symbol import
-list of B<use> or B<import> or in the constant name at the line where
-this error was triggered?
+One possible cause for this is that you expected to have imported
+a constant to your name space with B<use> or B<import> while no such
+importing took place, it may for example be that your operating
+system does not support that particular constant. Hopefully you did
+use an explicit import list for the constants you expect to see;
+please see L<perlfunc/use> and L<perlfunc/import>. While an
+explicit import list would probably have caught this error earlier
+it naturally does not remedy the fact that your operating system
+still does not support that constant. Maybe you have a typo in
+the constants of the symbol import list of B<use> or B<import> or in the
+constant name at the line where this error was triggered?
=item No command into which to pipe on command line
@@ -2913,6 +3078,11 @@ for some reason the current debugger (e.g. F<perl5db.pl> or a C<Devel::>
module) didn't define a C<DB::sub> routine to be called at the beginning
of each ordinary subroutine call.
+=item No directory specified for -I
+
+(F) The B<-I> command-line switch requires a directory name as part of the
+I<same> argument. Use B<-Ilib>, for instance. B<-I lib> won't work.
+
=item No error file after 2> or 2>> on command line
(F) An error peculiar to VMS. Perl handles its own command line
@@ -2922,7 +3092,7 @@ find the name of the file to which to write data destined for stderr.
=item No group ending character '%c' found in template
(F) A pack or unpack template has an opening '(' or '[' without its
-matching counterpart. See L<perlfunc/pack>.
+matching counterpart. See L<perlfunc/pack>.
=item No input file after < on command line
@@ -2935,7 +3105,7 @@ name of the file from which to read data for stdin.
(F) C<next::method> found no further instances of this method name
in the remaining packages of the MRO of this class. If you don't want
it throwing an exception, use C<maybe::next::method>
-or C<next::can>. See L<mro>.
+or C<next::can>. See L<mro>.
=item "no" not allowed in expression
@@ -2975,16 +3145,12 @@ your system.
(F) Configure didn't find anything resembling the setreuid() call for
your system.
-=item No %s specified for -%c
-
-(F) The indicated command line switch needs a mandatory argument, but
-you haven't specified one.
-
=item No such class field "%s" in variable %s of type %s
-(F) You tried to access a key from a hash through the indicated typed variable
-but that key is not allowed by the package of the same type. The indicated
-package has restricted the set of allowed keys using the L<fields> pragma.
+(F) You tried to access a key from a hash through the indicated typed
+variable but that key is not allowed by the package of the same type.
+The indicated package has restricted the set of allowed keys using the
+L<fields> pragma.
=item No such class %s
@@ -3088,15 +3254,15 @@ need to be added to UTC to get local time.
=item Non-octal character '%c'. Resolved as "%s"
-(W digit) In parsing an octal numeric constant, a character was
-unexpectedly encountered that isn't octal. The resulting value is as
-indicated.
+(W digit) In parsing an octal numeric constant, a character was
+unexpectedly encountered that isn't octal. The resulting value
+is as indicated.
=item Non-string passed as bitmask
(W misc) A number has been passed as a bitmask argument to select().
Use the vec() function to construct the file descriptor bitmasks for
-select. See L<perlfunc/select>.
+select. See L<perlfunc/select>.
=item Null filename used
@@ -3105,7 +3271,7 @@ machines that means the current directory! See L<perlfunc/require>.
=item NULL OP IN RUN
-(P debugging) Some internal routine called run() with a null opcode
+(S debugging) Some internal routine called run() with a null opcode
pointer.
=item Null picture in formline
@@ -3137,15 +3303,9 @@ the meantime, try using scientific notation (e.g. "1e6" instead of
=item Number with no digits
(F) Perl was looking for a number but found nothing that looked like
-a number. This happens, for example with C<\o{}>, with no number between
+a number. This happens, for example with C<\o{}>, with no number between
the braces.
-=item Octal number in vector unsupported
-
-(F) Numbers with a leading C<0> are not currently allowed in vectors.
-The octal number interpretation of such numbers may be supported in a
-future version.
-
=item Octal number > 037777777777 non-portable
(W portable) The octal number you specified is larger than 2**32-1
@@ -3155,7 +3315,7 @@ L<perlport> for more on portability concerns.
=item Odd number of arguments for overload::constant
(W overload) The call to overload::constant contained an odd number of
-arguments. The arguments should come in pairs.
+arguments. The arguments should come in pairs.
=item Odd number of elements in anonymous hash
@@ -3169,7 +3329,7 @@ which is odd, because hashes come in key/value pairs.
=item Offset outside string
-(F|W layer) You tried to do a read/write/send/recv/seek operation
+(F)(W layer) You tried to do a read/write/send/recv/seek operation
with an offset pointing outside the buffer. This is difficult to
imagine. The sole exceptions to this are that zero padding will
take place when going past the end of the string when either
@@ -3220,9 +3380,8 @@ the C<fallback> overloading key is specified to be true. See L<overload>.
=item Operation "%s" returns its argument for non-Unicode code point 0x%X
(W utf8, non_unicode) You performed an operation requiring Unicode
-semantics on a code
-point that is not in Unicode, so what it should do is not defined. Perl
-has chosen to have it do nothing, and warn you.
+semantics on a code point that is not in Unicode, so what it should do
+is not defined. Perl has chosen to have it do nothing, and warn you.
If the operation shown is "ToFold", it means that case-insensitive
matching in a regular expression was done on the code point.
@@ -3233,11 +3392,11 @@ C<no warnings 'non_unicode';>.
=item Operation "%s" returns its argument for UTF-16 surrogate U+%X
(W utf8, surrogate) You performed an operation requiring Unicode
-semantics on a Unicode
-surrogate. Unicode frowns upon the use of surrogates for anything but
-storing strings in UTF-16, but semantics are (reluctantly) defined for
-the surrogates, and they are to do nothing for this operation. Because
-the use of surrogates can be dangerous, Perl warns.
+semantics on a Unicode surrogate. Unicode frowns upon the use of
+surrogates for anything but storing strings in UTF-16, but semantics
+are (reluctantly) defined for the surrogates, and they are to do
+nothing for this operation. Because the use of surrogates can be
+dangerous, Perl warns.
If the operation shown is "ToFold", it means that case-insensitive
matching in a regular expression was done on the code point.
@@ -3278,13 +3437,13 @@ the largest possible memory allocation.
=item Out of memory during "large" request for %s
(F) The malloc() function returned 0, indicating there was insufficient
-remaining memory (or virtual memory) to satisfy the request. However,
+remaining memory (or virtual memory) to satisfy the request. However,
the request was judged large enough (compile-time default is 64K), so a
possibility to shut down by trapping this error is granted.
=item Out of memory during request for %s
-(X|F) The malloc() function returned 0, indicating there was
+(X)(F) The malloc() function returned 0, indicating there was
insufficient remaining memory (or virtual memory) to satisfy the
request.
@@ -3320,19 +3479,24 @@ the string being unpacked. See L<perlfunc/pack>.
=item '@' outside of string with malformed UTF-8 in unpack
(F) You had a template that specified an absolute position outside
-the string being unpacked. The string being unpacked was also invalid
-UTF-8. See L<perlfunc/pack>.
+the string being unpacked. The string being unpacked was also invalid
+UTF-8. See L<perlfunc/pack>.
+
+=item overload arg '%s' is invalid
+
+(W overload) The L<overload> pragma was passed an argument it did not
+recognize. Did you mistype an operator?
=item Overloaded dereference did not return a reference
(F) An object with an overloaded dereference operator was dereferenced,
-but the overloaded operation did not return a reference. See
+but the overloaded operation did not return a reference. See
L<overload>.
=item Overloaded qr did not return a REGEXP
(F) An object with a C<qr> overload was used as part of a match, but the
-overloaded operation didn't return a compiled regexp. See L<overload>.
+overloaded operation didn't return a compiled regexp. See L<overload>.
=item %s package attribute may clash with future reserved word: %s
@@ -3362,15 +3526,15 @@ an ACL related-function, but that function is not available on this
platform. Earlier checks mean that it should not be possible to
enter this branch on this platform.
-=item panic: ck_grep
+=item panic: ck_grep, type=%u
(P) Failed an internal consistency check trying to compile a grep.
-=item panic: ck_split
+=item panic: ck_split, type=%u
(P) Failed an internal consistency check trying to compile a split.
-=item panic: corrupt saved stack index
+=item panic: corrupt saved stack index %ld
(P) The savestack was requested to restore more localized values than
there are in the savestack.
@@ -3380,13 +3544,6 @@ there are in the savestack.
(P) Failed an internal consistency check while trying to reset a weak
reference.
-=item panic: Devel::DProf inconsistent subroutine return
-
-(P) Devel::DProf called a subroutine that exited using goto(LABEL),
-last(LABEL) or next(LABEL). Leaving that way a subroutine called from
-an XSUB will lead very probably to a crash of the interpreter. This is
-a bug that will hopefully one day get fixed.
-
=item panic: die %s
(P) We popped the context stack to an eval context, and then discovered
@@ -3411,7 +3568,7 @@ failure was caught.
(P) The library function frexp() failed, making printf("%f") impossible.
-=item panic: goto
+=item panic: goto, type=%u, ix=%ld
(P) We popped the context stack to a context with the specified label,
and then discovered it wasn't a context we know how to do a goto in.
@@ -3419,22 +3576,15 @@ and then discovered it wasn't a context we know how to do a goto in.
=item panic: gp_free failed to free glob pointer
(P) The internal routine used to clear a typeglob's entries tried
-repeatedly, but each time something re-created entries in the glob. Most
-likely the glob contains an object with a reference back to the glob and a
-destructor that adds a new object to the glob.
-
-=item panic: hfreeentries failed to free hash
-
-(P) The internal routine used to clear a hash's entries tried repeatedly,
-but each time something added more entries to the hash. Most likely the hash
-contains an object with a reference back to the hash and a destructor that
-adds a new object to the hash.
+repeatedly, but each time something re-created entries in the glob.
+Most likely the glob contains an object with a reference back to
+the glob and a destructor that adds a new object to the glob.
-=item panic: INTERPCASEMOD
+=item panic: INTERPCASEMOD, %s
(P) The lexer got into a bad state at a case modifier.
-=item panic: INTERPCONCAT
+=item panic: INTERPCONCAT, %s
(P) The lexer got into a bad state parsing a string with brackets.
@@ -3442,7 +3592,7 @@ adds a new object to the hash.
(F) forked child returned an incomprehensible message about its errno.
-=item panic: last
+=item panic: last, type=%u
(P) We popped the context stack to a block context, and then discovered
it wasn't a block context.
@@ -3452,7 +3602,7 @@ it wasn't a block context.
(P) A writable lexical variable became read-only somehow within the
scope.
-=item panic: leave_scope inconsistency
+=item panic: leave_scope inconsistency %u
(P) The savestack probably got out of sync. At least, there was an
invalid enum on the top of it.
@@ -3462,7 +3612,7 @@ invalid enum on the top of it.
(P) Failed an internal consistency check while trying to reset all weak
references to an object.
-=item panic: malloc
+=item panic: malloc, %s
(P) Something requested a negative number of bytes of malloc.
@@ -3470,12 +3620,12 @@ references to an object.
(P) Something tried to allocate more memory than possible.
-=item panic: pad_alloc
+=item panic: pad_alloc, %p!=%p
(P) The compiler got confused about which scratch pad it was allocating
and freeing temporaries and lexicals from.
-=item panic: pad_free curpad
+=item panic: pad_free curpad, %p!=%p
(P) The compiler got confused about which scratch pad it was allocating
and freeing temporaries and lexicals from.
@@ -3484,7 +3634,7 @@ and freeing temporaries and lexicals from.
(P) An invalid scratch pad offset was detected internally.
-=item panic: pad_reset curpad
+=item panic: pad_reset curpad, %p!=%p
(P) The compiler got confused about which scratch pad it was allocating
and freeing temporaries and lexicals from.
@@ -3493,7 +3643,7 @@ and freeing temporaries and lexicals from.
(P) An invalid scratch pad offset was detected internally.
-=item panic: pad_swipe curpad
+=item panic: pad_swipe curpad, %p!=%p
(P) The compiler got confused about which scratch pad it was allocating
and freeing temporaries and lexicals from.
@@ -3502,7 +3652,7 @@ and freeing temporaries and lexicals from.
(P) An invalid scratch pad offset was detected internally.
-=item panic: pp_iter
+=item panic: pp_iter, type=%u
(P) The foreach iterator got called in a non-loop context frame.
@@ -3511,25 +3661,30 @@ and freeing temporaries and lexicals from.
(P) The internal pp_match() routine was called with invalid operational
data.
-=item panic: pp_split
+=item panic: pp_split, pm=%p, s=%p
(P) Something terrible went wrong in setting up for the split.
-=item panic: realloc
+=item panic: realloc, %s
(P) Something requested a negative number of bytes of realloc.
-=item panic: restartop
+=item panic: reference miscount on nsv in sv_replace() (%d != 1)
+
+(P) The internal sv_replace() function was handed a new SV with a
+reference count other than 1.
+
+=item panic: restartop in %s
(P) Some internal routine requested a goto (or something like it), and
didn't supply the destination.
-=item panic: return
+=item panic: return, type=%u
(P) We popped the context stack to a subroutine or eval context, and
then discovered it wasn't a subroutine or eval context.
-=item panic: scan_num
+=item panic: scan_num, %s
(P) scan_num() got called on something that wasn't a number.
@@ -3538,11 +3693,17 @@ then discovered it wasn't a subroutine or eval context.
(P) The sv_chop() routine was passed a position that is not within the
scalar's string buffer.
-=item panic: sv_insert
+=item panic: sv_insert, midend=%p, bigend=%p
(P) The sv_insert() routine was told to remove more string than there
was string.
+=item panic: strxfrm() gets absurd - a => %u, ab => %u
+
+(P) The interpreter's sanity check of the C function strxfrm() failed.
+In your current locale the returned transformation of the string "ab" is
+shorter than that of the string "a", which makes no sense.
+
=item panic: top_env
(P) The compiler attempted to do a goto, or something weird like that.
@@ -3562,7 +3723,7 @@ to even) byte length.
(P) Something tried to call utf16_to_utf8_reversed with an odd (as opposed
to even) byte length.
-=item panic: yylex
+=item panic: yylex, %s
(P) The lexer got into a bad state while processing a case modifier.
@@ -3574,8 +3735,8 @@ a detectable way.
=item Pattern subroutine nesting without pos change exceeded limit in regex; marked by <-- HERE in m/%s/
(F) You used a pattern that uses too many nested subpattern calls without
-consuming any text. Restructure the pattern so text is consumed before the
-nesting limit is exceeded.
+consuming any text. Restructure the pattern so text is consumed before
+the nesting limit is exceeded.
The <-- HERE shows in the regular expression about where the problem was
discovered.
@@ -3620,6 +3781,15 @@ so it was not possible to set up some or all fixed-width byte-order
conversion functions. This is only a problem when you're using the
'<' or '>' modifiers in (un)pack templates. See L<perlfunc/pack>.
+=item Perl %s required (did you mean %s?)--this is only %s, stopped
+
+(F) The code you are trying to run has asked for a newer version of
+Perl than you are running. Perhaps C<use 5.10> was written instead
+of C<use 5.010> or C<use v5.10>. Without the leading C<v>, the number is
+interpreted as a decimal, with every three digits after the
+decimal point representing a part of the version number. So 5.10
+is equivalent to v5.100.
+
=item Perl %s required--this is only version %s, stopped
(F) The module in question uses features of a version of Perl more
@@ -3628,13 +3798,20 @@ you upgraded, anyway? See L<perlfunc/require>.
=item PERL_SH_DIR too long
-(F) An error peculiar to OS/2. PERL_SH_DIR is the directory to find the
+(F) An error peculiar to OS/2. PERL_SH_DIR is the directory to find the
C<sh>-shell in. See "PERL_SH_DIR" in L<perlos2>.
=item PERL_SIGNALS illegal: "%s"
See L<perlrun/PERL_SIGNALS> for legal values.
+=item Perls since %s too modern--this is %s, stopped
+
+(F) The code you are trying to run claims it will not run
+on the version of Perl you are using because it is too new.
+Maybe the code needs to be updated, or maybe it is simply
+wrong and the version check should just be removed.
+
=item perl: warning: Setting locale failed.
(S) The whole warning message will look something like:
@@ -3767,7 +3944,7 @@ with a numeric comparison operator, like this :
if ($x & $y == 0) { ... }
This expression is actually equivalent to C<$x & ($y == 0)>, due to the
-higher precedence of C<==>. This is probably not what you want. (If you
+higher precedence of C<==>. This is probably not what you want. (If you
really meant to write this, disable the warning, or, better, put the
parentheses explicitly and write C<$x & ($y == 0)>).
@@ -3787,8 +3964,8 @@ C<m/$(?)\/> (for example: C<m/foo$(?)\s+bar/>).
=item Possible unintended interpolation of %s in string
-(W ambiguous) You said something like `@foo' in a double-quoted string
-but there was no array C<@foo> in scope at the time. If you wanted a
+(W ambiguous) You said something like '@foo' in a double-quoted string
+but there was no array C<@foo> in scope at the time. If you wanted a
literal @foo, then write it as \@foo; otherwise find out what happened
to the array you apparently lost track of.
@@ -3831,8 +4008,8 @@ in L<perlos2>.
=item Prototype after '%c' for %s : %s
-(W illegalproto) A character follows % or @ in a prototype. This is useless,
-since % and @ gobble the rest of the subroutine arguments.
+(W illegalproto) A character follows % or @ in a prototype. This is
+useless, since % and @ gobble the rest of the subroutine arguments.
=item Prototype mismatch: %s vs %s
@@ -3870,15 +4047,15 @@ change when upper cased.
=item Quantifier follows nothing in regex; marked by <-- HERE in m/%s/
-(F) You started a regular expression with a quantifier. Backslash it if you
-meant it literally. The <-- HERE shows in the regular expression about
-where the problem was discovered. See L<perlre>.
+(F) You started a regular expression with a quantifier. Backslash it if
+you meant it literally. The <-- HERE shows in the regular expression
+about where the problem was discovered. See L<perlre>.
=item Quantifier in {,} bigger than %d in regex; marked by <-- HERE in m/%s/
-(F) There is currently a limit to the size of the min and max values of the
-{min,max} construct. The <-- HERE shows in the regular expression about where
-the problem was discovered. See L<perlre>.
+(F) There is currently a limit to the size of the min and max values of
+the {min,max} construct. The <-- HERE shows in the regular expression
+about where the problem was discovered. See L<perlre>.
=item Quantifier unexpected on zero-length expression; marked by <-- HERE in m/%s/
@@ -3931,6 +4108,13 @@ already been freed.
the desired output is compiled into Perl, which entails some overhead,
which is why it's currently left out of your copy.
+=item Recursive call to Perl_load_module in PerlIO_find_layer
+
+(P) It is currently not permitted to load modules when creating
+a filehandle inside an %INC hook. This can happen with C<open my
+$fh, '<', \$scalar>, which implicitly loads PerlIO::scalar. Try
+loading PerlIO::scalar explicitly first.
+
=item Recursive inheritance detected in package '%s'
(F) While calculating the method resolution order (MRO) of a package, Perl
@@ -3943,15 +4127,15 @@ crude check that bails out after 100 levels of C<@ISA> depth.
=item refcnt_inc: fd %d%s
-(P) Perl's I/O implementation failed an internal consistency check. If
+(P) Perl's I/O implementation failed an internal consistency check. If
you see this message, something is very wrong.
=item Reference found where even-sized list expected
(W misc) You gave a single reference where Perl was expecting a list
-with an even number of elements (for assignment to a hash). This usually
-means that you used the anon hash constructor when you meant to use
-parens. In any case, a hash requires key/value B<pairs>.
+with an even number of elements (for assignment to a hash). This
+usually means that you used the anon hash constructor when you meant
+to use parens. In any case, a hash requires key/value B<pairs>.
%hash = { one => 1, two => 2, }; # WRONG
%hash = [ qw/ an anon array / ]; # WRONG
@@ -3963,22 +4147,17 @@ parens. In any case, a hash requires key/value B<pairs>.
(W misc) You have attempted to weaken a reference that is already weak.
Doing so has no effect.
-=item Reference miscount in sv_replace()
-
-(W internal) The internal sv_replace() function was handed a new SV with
-a reference count other than 1.
-
=item Reference to invalid group 0
-(F) You used C<\g0> or similar in a regular expression. You may refer to
-capturing parentheses only with strictly positive integers (normal
-backreferences) or with strictly negative integers (relative
-backreferences). Using 0 does not make sense.
+(F) You used C<\g0> or similar in a regular expression. You may refer
+to capturing parentheses only with strictly positive integers
+(normal backreferences) or with strictly negative integers (relative
+backreferences). Using 0 does not make sense.
=item Reference to nonexistent group in regex; marked by <-- HERE in m/%s/
(F) You used something like C<\7> in your regular expression, but there are
-not at least seven sets of capturing parentheses in the expression. If
+not at least seven sets of capturing parentheses in the expression. If
you wanted to have the character with ordinal 7 inserted into the regular
expression, prepend zeroes to make it three digits long: C<\007>
@@ -3989,7 +4168,7 @@ discovered.
(F) You used something like C<\k'NAME'> or C<< \k<NAME> >> in your regular
expression, but there is no corresponding named capturing parentheses
-such as C<(?'NAME'...)> or C<< (?<NAME>...) >>. Check if the name has been
+such as C<(?'NAME'...)> or C<< (?<NAME>...) >>. Check if the name has been
spelled correctly both in the backreference and the declaration.
The <-- HERE shows in the regular expression about where the problem was
@@ -4038,12 +4217,12 @@ earlier.
(F) Your format contains the ~~ repeat-until-blank sequence and a
numeric field that will never go blank so that the repetition never
-terminates. You might use ^# instead. See L<perlform>.
+terminates. You might use ^# instead. See L<perlform>.
=item Replacement list is longer than search list
(W misc) You have used a replacement list that is longer than the
-search list. So the additional elements in the replacement list
+search list. So the additional elements in the replacement list
are meaningless.
=item Reversed %s= operator
@@ -4111,7 +4290,7 @@ construct.
The question mark is also used as part of the ternary operator (as in
C<foo ? 0 : 1>) leading to some ambiguous constructions being wrongly
-parsed. One way to disambiguate the parsing is to put parentheses around
+parsed. One way to disambiguate the parsing is to put parentheses around
the conditional expression, i.e. C<(foo) ? 0 : 1>.
=item seekdir() attempted on invalid dirhandle %s
@@ -4154,15 +4333,15 @@ before now. Check your control flow.
=item Sequence (? incomplete in regex; marked by <-- HERE in m/%s/
-(F) A regular expression ended with an incomplete extension (?. The <-- HERE
-shows in the regular expression about where the problem was discovered. See
-L<perlre>.
+(F) A regular expression ended with an incomplete extension (?. The
+<-- HERE shows in the regular expression about where the problem was
+discovered. See L<perlre>.
=item Sequence (?%s...) not implemented in regex; marked by <-- HERE in m/%s/
-(F) A proposed regular expression extension has the character reserved but
-has not yet been written. The <-- HERE shows in the regular expression about
-where the problem was discovered. See L<perlre>.
+(F) A proposed regular expression extension has the character reserved
+but has not yet been written. The <-- HERE shows in the regular
+expression about where the problem was discovered. See L<perlre>.
=item Sequence (?%s...) not recognized in regex; marked by <-- HERE in m/%s/
@@ -4182,15 +4361,15 @@ sequence and this has been omitted or incorrectly written.
(F) A regular expression comment must be terminated by a closing
parenthesis. Embedded parentheses aren't allowed. The <-- HERE shows in
-the regular expression about where the problem was discovered. See
+the regular expression about where the problem was discovered. See
L<perlre>.
=item Sequence (?{...}) not terminated or not {}-balanced in regex; marked by <-- HERE in m/%s/
-(F) If the contents of a (?{...}) clause contain braces, they must balance
-for Perl to detect the end of the clause properly. The <-- HERE shows in
-the regular expression about where the problem was discovered. See
-L<perlre>.
+(F) If the contents of a (?{...}) clause contain braces, they
+must balance for Perl to detect the end of the clause properly.
+The <-- HERE shows in the regular expression about where the
+problem was discovered. See L<perlre>.
=item Z<>500 Server error
@@ -4198,21 +4377,21 @@ See Server error.
=item Server error
-(A) This is the error message generally seen in a browser window when trying
-to run a CGI program (including SSI) over the web. The actual error text
-varies widely from server to server. The most frequently-seen variants
-are "500 Server error", "Method (something) not permitted", "Document
-contains no data", "Premature end of script headers", and "Did not
-produce a valid header".
+(A) This is the error message generally seen in a browser window
+when trying to run a CGI program (including SSI) over the web. The
+actual error text varies widely from server to server. The most
+frequently-seen variants are "500 Server error", "Method (something)
+not permitted", "Document contains no data", "Premature end of script
+headers", and "Did not produce a valid header".
B<This is a CGI error, not a Perl error>.
-You need to make sure your script is executable, is accessible by the
-user CGI is running the script under (which is probably not the user
-account you tested it under), does not rely on any environment variables
-(like PATH) from the user it isn't running under, and isn't in a
-location where the CGI server can't find it, basically, more or less.
-Please see the following for more information:
+You need to make sure your script is executable, is accessible by
+the user CGI is running the script under (which is probably not the
+user account you tested it under), does not rely on any environment
+variables (like PATH) from the user it isn't running under, and isn't
+in a location where the CGI server can't find it, basically, more or
+less. Please see the following for more information:
http://www.perl.org/CGI_MetaFAQ.html
http://www.htmlhelp.org/faq/cgifaq.html
@@ -4304,19 +4483,26 @@ But before sort was a keyword, people sometimes used it as a filehandle.
(F) A sort comparison subroutine may not return a list value with more
or less than one element. See L<perlfunc/sort>.
+=item Source filters apply only to byte streams
+
+(F) You tried to activate a source filter (usually by loading a
+source filter module) within a string passed to C<eval>. This is
+not permitted under the C<unicode_eval> feature. Consider using
+C<evalbytes> instead. See L<feature>.
+
=item splice() offset past end of array
(W misc) You attempted to specify an offset that was past the end of
-the array passed to splice(). Splicing will instead commence at the end
-of the array, rather than past it. If this isn't what you want, try
-explicitly pre-extending the array by assigning $#array = $offset. See
-L<perlfunc/splice>.
+the array passed to splice(). Splicing will instead commence at the
+end of the array, rather than past it. If this isn't what you want,
+try explicitly pre-extending the array by assigning $#array = $offset.
+See L<perlfunc/splice>.
=item Split loop
(P) The split was looping infinitely. (Obviously, a split shouldn't
iterate more times than there are characters of input, which is what
-happened.) See L<perlfunc/split>.
+happened.) See L<perlfunc/split>.
=item Statement unlikely to be reached
@@ -4373,7 +4559,7 @@ Missing the leading C<$> from variable C<$s> may cause this error.
=item substr outside of string
-(W substr),(F) You tried to reference a substr() that pointed outside of
+(W substr)(F) You tried to reference a substr() that pointed outside of
a string. That is, the absolute value of the offset was larger than the
length of the string. See L<perlfunc/substr>. This warning is fatal if
substr is used in an lvalue context (as the left hand side of an
@@ -4386,21 +4572,21 @@ inferior to its current type.
=item Switch (?(condition)... contains too many branches in regex; marked by <-- HERE in m/%s/
-(F) A (?(condition)if-clause|else-clause) construct can have at most two
-branches (the if-clause and the else-clause). If you want one or both to
-contain alternation, such as using C<this|that|other>, enclose it in
-clustering parentheses:
+(F) A (?(condition)if-clause|else-clause) construct can have at most
+two branches (the if-clause and the else-clause). If you want one or
+both to contain alternation, such as using C<this|that|other>, enclose
+it in clustering parentheses:
(?(condition)(?:this|that|other)|else-clause)
-The <-- HERE shows in the regular expression about where the problem was
-discovered. See L<perlre>.
+The <-- HERE shows in the regular expression about where the problem
+was discovered. See L<perlre>.
=item Switch condition not recognized in regex; marked by <-- HERE in m/%s/
(F) If the argument to the (?(...)if-clause|else-clause) construct is
-a number, it can be only a number. The <-- HERE shows in the regular
-expression about where the problem was discovered. See L<perlre>.
+a number, it can be only a number. The <-- HERE shows in the regular
+expression about where the problem was discovered. See L<perlre>.
=item switching effective %s is not implemented
@@ -4430,10 +4616,9 @@ before this, because Perl is good at understanding random input.
Occasionally the line number may be misleading, and once in a blue moon
the only way to figure out what's triggering the error is to call
C<perl -c> repeatedly, chopping away half the program each time to see
-if the error went away. Sort of the cybernetic version of S<20
-questions>.
+if the error went away. Sort of the cybernetic version of S<20 questions>.
-=item syntax error at line %d: `%s' unexpected
+=item syntax error at line %d: '%s' unexpected
(A) You've accidentally run your script through the Bourne shell instead
of Perl. Check the #! line, or manually feed your script into Perl
@@ -4498,7 +4683,7 @@ as a compiler directive. You may say only one of
...
This is to prevent the problem of one module changing the array base out
-from under another module inadvertently. See L<perlvar/$[>.
+from under another module inadvertently. See L<perlvar/$[> and L<arybase>.
=item The crypt() function is unimplemented due to excessive paranoia
@@ -4547,16 +4732,16 @@ suspect you're not running on Unix.
=item "-T" is on the #! line, it must also be used on the command line
-(X) The #! line (or local equivalent) in a Perl script contains the
-B<-T> option (or the B<-t> option), but Perl was not invoked with B<-T> in its command line.
-This is an error because, by the time Perl discovers a B<-T> in a
-script, it's too late to properly taint everything from the environment.
-So Perl gives up.
+(X) The #! line (or local equivalent) in a Perl script contains
+the B<-T> option (or the B<-t> option), but Perl was not invoked with
+B<-T> in its command line. This is an error because, by the time
+Perl discovers a B<-T> in a script, it's too late to properly taint
+everything from the environment. So Perl gives up.
If the Perl script is being executed as a command using the #!
-mechanism (or its local equivalent), this error can usually be fixed by
-editing the #! line so that the B<-%c> option is a part of Perl's first
-argument: e.g. change C<perl -n -%c> to C<perl -%c -n>.
+mechanism (or its local equivalent), this error can usually be
+fixed by editing the #! line so that the B<-%c> option is a part of
+Perl's first argument: e.g. change C<perl -n -%c> to C<perl -%c -n>.
If the Perl script is being executed as C<perl scriptname>, then the
B<-%c> option must appear on the command line: C<perl -%c scriptname>.
@@ -4582,13 +4767,14 @@ system call to call, silly dilly.
(X) The #! line (or local equivalent) in a Perl script contains the
B<-M>, B<-m> or B<-C> option.
-In the case of B<-M> and B<-m>, this is an error because those options are
-not intended for use inside scripts. Use the C<use> pragma instead.
+In the case of B<-M> and B<-m>, this is an error because those options
+are not intended for use inside scripts. Use the C<use> pragma instead.
-The B<-C> option only works if it is specified on the command line as well
-(with the same sequence of letters or numbers following). Either specify
-this option on the command line, or, if your system supports it, make your
-script executable and run it directly instead of passing it to perl.
+The B<-C> option only works if it is specified on the command line as
+well (with the same sequence of letters or numbers following). Either
+specify this option on the command line, or, if your system supports
+it, make your script executable and run it directly instead of passing
+it to perl.
=item Too late to run %s block
@@ -4635,13 +4821,20 @@ y/// or y[][] construct.
=item '%s' trapped by operation mask
(F) You tried to use an operator from a Safe compartment in which it's
-disallowed. See L<Safe>.
+disallowed. See L<Safe>.
=item truncate not implemented
(F) Your machine doesn't implement a file truncation mechanism that
Configure knows about.
+=item Type of arg %d to &CORE::%s must be %s
+
+(F) The subroutine in question in the CORE package requires its argument
+to be a hard reference to data of the specified type. Overloading is
+ignored, so a reference to an object that is not the specified type, but
+nonetheless has overloading to handle it, will still not be accepted.
+
=item Type of arg %d to %s must be %s (not %s)
(F) This function requires the argument in that position to be of a
@@ -4678,6 +4871,12 @@ many values were temporarily localized.
(W internal) The exit code detected an internal inconsistency in how
many blocks were entered and left.
+=item Unbalanced string table refcount: (%d) for "%s"
+
+(W internal) On exit, Perl found some strings remaining in the shared
+string table used for copy on write and for hash keys. The entries
+should have been freed, so this indicates a bug somewhere.
+
=item Unbalanced tmps: %d more allocs than frees
(W internal) The exit code detected an internal inconsistency in how
@@ -4729,14 +4928,18 @@ Check the #! line, or manually feed your script into Perl yourself.
(F) The unexec() routine failed for some reason. See your local FSF
representative, who probably put it there in the first place.
+=item Unexpected constant lvalue entersub entry via type/targ %d:%d
+
+(P) When compiling a subroutine call in lvalue context, Perl failed an
+internal consistency check. It encountered a malformed op tree.
+
=item Unicode non-character U+%X is illegal for open interchange
(W utf8, nonchar) Certain codepoints, such as U+FFFE and U+FFFF, are
-defined by the
-Unicode standard to be non-characters. Those are legal codepoints, but are
-reserved for internal use; so, applications shouldn't attempt to exchange
-them. If you know what you are doing you can turn
-off this warning by C<no warnings 'nonchar';>.
+defined by the Unicode standard to be non-characters. Those are
+legal codepoints, but are reserved for internal use; so, applications
+shouldn't attempt to exchange them. If you know what you are doing
+you can turn off this warning by C<no warnings 'nonchar';>.
=item Unicode surrogate U+%X is illegal in UTF-8
@@ -4754,6 +4957,11 @@ off this warning by C<no warnings 'surrogate';>.
(F) There are no byte-swapping functions for a machine with this byte
order.
+=item Unknown error
+
+(P) Perl was about to print an error message in C<$@>, but the C<$@> variable
+did not exist, even after an attempt to create it.
+
=item Unknown open() mode '%s'
(F) The second argument of 3-argument open() is not among the list
@@ -4783,17 +4991,17 @@ subvert Perl's population of %ENV for nefarious purposes.
=item Unknown switch condition (?(%s in regex; marked by <-- HERE in m/%s/
(F) The condition part of a (?(condition)if-clause|else-clause) construct
-is not known. The condition must be one of the following:
-
- (1) (2) ... true if 1st, 2nd, etc., capture matched
- (<NAME>) ('NAME') true if named capture matched
- (?=...) (?<=...) true if subpattern matches
- (?!...) (?<!...) true if subpattern fails to match
- (?{ CODE }) true if code returns a true value
- (R) true if evaluating inside recursion
- (R1) (R2) ... true if directly inside capture group 1, 2, etc.
- (R&NAME) true if directly inside named capture
- (DEFINE) always false; for defining named subpatterns
+is not known. The condition must be one of the following:
+
+ (1) (2) ... true if 1st, 2nd, etc., capture matched
+ (<NAME>) ('NAME') true if named capture matched
+ (?=...) (?<=...) true if subpattern matches
+ (?!...) (?<!...) true if subpattern fails to match
+ (?{ CODE }) true if code returns a true value
+ (R) true if evaluating inside recursion
+ (R1) (R2) ... true if directly inside capture group 1, 2, etc.
+ (R&NAME) true if directly inside named capture
+ (DEFINE) always false; for defining named subpatterns
The <-- HERE shows in the regular expression about where the problem was
discovered. See L<perlre>.
@@ -4816,7 +5024,7 @@ L<perlre> for details on legal verb patterns.
=item Unknown warnings category '%s'
-(F) An error issued by the C<warnings> pragma. You specified a warnings
+(F) An error issued by the C<warnings> pragma. You specified a warnings
category that is unknown to perl at this point.
Note that if you want to enable a warnings category registered by a
@@ -4825,17 +5033,17 @@ module first.
=item unmatched [ in regex; marked by <-- HERE in m/%s/
-(F) The brackets around a character class must match. If you wish to
+(F) The brackets around a character class must match. If you wish to
include a closing bracket in a character class, backslash it or put it
-first. The <-- HERE shows in the regular expression about where the problem
-was discovered. See L<perlre>.
+first. The <-- HERE shows in the regular expression about where the
+problem was discovered. See L<perlre>.
=item unmatched ( in regex; marked by <-- HERE in m/%s/
(F) Unbackslashed parentheses must always be balanced in regular
-expressions. If you're a vi user, the % key is valuable for finding the
-matching parenthesis. The <-- HERE shows in the regular expression about
-where the problem was discovered. See L<perlre>.
+expressions. If you're a vi user, the % key is valuable for finding
+the matching parenthesis. The <-- HERE shows in the regular expression
+about where the problem was discovered. See L<perlre>.
=item Unmatched right %s bracket
@@ -4874,10 +5082,9 @@ change in a future version of Perl.
=item Unrecognized escape \%s passed through in regex; marked by <-- HERE in m/%s/
(W regexp) You used a backslash-character combination which is not
-recognized by Perl. The character(s) were understood literally, but this may
-change in a future version of Perl.
-The <-- HERE shows in the regular expression about where the
-escape was discovered.
+recognized by Perl. The character(s) were understood literally, but
+this may change in a future version of Perl. The <-- HERE shows in
+the regular expression about where the escape was discovered.
=item Unrecognized signal name "%s"
@@ -4911,7 +5118,7 @@ At least, Configure doesn't think so.
(F) Your version of executable does not support forking.
Note that under some systems, like OS/2, there may be different flavors
-of Perl executables, some of which may support fork, some not. Try
+of Perl executables, some of which may support fork, some not. Try
changing the name you call Perl by to C<perl_>, C<perl__>, and so on.
=item Unsupported script encoding %s
@@ -4947,7 +5154,7 @@ See L<perlfunc/pack>.
=item Unterminated \g{...} pattern in regex; marked by <-- HERE in m/%s/
(F) You missed a close brace on a \g{..} pattern (group reference) in
-a regular expression. Fix the pattern and retry.
+a regular expression. Fix the pattern and retry.
=item Unterminated <> operator
@@ -4959,12 +5166,12 @@ earlier in the line, and you really meant a "less than".
=item Unterminated verb pattern argument in regex; marked by <-- HERE in m/%s/
(F) You used a pattern of the form C<(*VERB:ARG)> but did not terminate
-the pattern with a C<)>. Fix the pattern and retry.
+the pattern with a C<)>. Fix the pattern and retry.
=item Unterminated verb pattern in regex; marked by <-- HERE in m/%s/
(F) You used a pattern of the form C<(*VERB)> but did not terminate
-the pattern with a C<)>. Fix the pattern and retry.
+the pattern with a C<)>. Fix the pattern and retry.
=item untie attempted while %d inner references still exist
@@ -4981,6 +5188,23 @@ See L<POSIX/FUNCTIONS> for more information.
(F) You called a Win32 function with incorrect arguments.
See L<Win32> for more information.
+=item $[ used in %s (did you mean $] ?)
+
+(W syntax) You used C<$[> in a comparison, such as:
+
+ if ($[ > 5.006) {
+ ...
+ }
+
+You probably meant to use C<$]> instead. C<$[> is the base for indexing
+arrays. C<$]> is the Perl version number in decimal.
+
+=item Useless assignment to a temporary
+
+(W misc) You assigned to an lvalue subroutine, but what
+the subroutine returned was a temporary scalar about to
+be discarded, so the assignment had no effect.
+
=item Useless (?-%s) - don't use /%s modifier in regex; marked by <-- HERE in m/%s/
(W regexp) You have used an internal modifier such as (?-o) that has no
@@ -4993,12 +5217,12 @@ must be written as
if ($string =~ /$pattern/) { ... }
The <-- HERE shows in the regular expression about
-where the problem was discovered. See L<perlre>.
+where the problem was discovered. See L<perlre>.
=item Useless localization of %s
-(W syntax) The localization of lvalues such as C<local($x=10)> is
-legal, but in fact the local() currently has no effect. This may change at
+(W syntax) The localization of lvalues such as C<local($x=10)> is legal,
+but in fact the local() currently has no effect. This may change at
some point in the future, but in the meantime such code is discouraged.
=item Useless (?%s) - use /%s modifier in regex; marked by <-- HERE in m/%s/
@@ -5013,14 +5237,19 @@ must be written as
if ($string =~ /$pattern/o) { ... }
The <-- HERE shows in the regular expression about
-where the problem was discovered. See L<perlre>.
+where the problem was discovered. See L<perlre>.
=item Useless use of /d modifier in transliteration operator
(W misc) You have used the /d modifier where the searchlist has the
-same length as the replacelist. See L<perlop> for more information
+same length as the replacelist. See L<perlop> for more information
about the /d modifier.
+=item Useless use of \E
+
+(W misc) You have a \E in a double-quotish string without a C<\U>,
+C<\L> or C<\Q> preceding it.
+
=item Useless use of %s in void context
(W void) You did something without a side effect in a context that does
@@ -5063,7 +5292,7 @@ about.
=item Useless use of "re" pragma
-(W) You did C<use re;> without any arguments. That isn't very useful.
+(W) You did C<use re;> without any arguments. That isn't very useful.
=item Useless use of sort in scalar context
@@ -5076,10 +5305,10 @@ This is not very useful, and perl currently optimizes this away.
=item Useless use of %s with no values
(W syntax) You used the push() or unshift() function with no arguments
-apart from the array, like C<push(@x)> or C<unshift(@foo)>. That won't
-usually have any effect on the array, so is completely useless. It's
+apart from the array, like C<push(@x)> or C<unshift(@foo)>. That won't
+usually have any effect on the array, so is completely useless. It's
possible in principle that push(@tied_array) could have some effect
-if the array is tied to a class which implements a PUSH method. If so,
+if the array is tied to a class which implements a PUSH method. If so,
you can write it as C<push(@tied_array,())> to avoid this warning.
=item "use" not allowed in expression
@@ -5090,7 +5319,7 @@ returns no useful value. See L<perlmod>.
=item Use of assignment to $[ is deprecated
(D deprecated) The C<$[> variable (index of the first element in an array)
-is deprecated. See L<perlvar/"$[">.
+is deprecated. See L<perlvar/"$[">.
=item Use of bare << to mean <<"" is deprecated
@@ -5205,15 +5434,14 @@ The operation returned C<undef>. Use a filename instead.
=item Use of %s on a handle without * is deprecated
-(D deprecated) You used C<tie>, C<tied> or C<untie> on a scalar but that
-scalar happens to hold a typeglob, which means its filehandle will
-be tied. If you mean to tie a handle, use an explicit * as in
-C<tie *$handle>.
+(D deprecated) You used C<tie>, C<tied> or C<untie> on a scalar but that scalar
+happens to hold a typeglob, which means its filehandle will be tied. If
+you mean to tie a handle, use an explicit * as in C<tie *$handle>.
-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 was a long-standing bug that was removed in Perl 5.16, as there was
+no way to tie the scalar itself when it held a typeglob, and no way to
+untie a scalar that had had a typeglob assigned to it. If you see this
+message, you must be using an older version.
=item Use of ?PATTERN? without explicit operator is deprecated
@@ -5268,28 +5496,29 @@ arguments. See L<perlsec>.
defined. It was interpreted as a "" or a 0, but maybe it was a mistake.
To suppress this warning assign a defined value to your variables.
-To help you figure out what was undefined, perl will try to tell you the
-name of the variable (if any) that was undefined. In some cases it cannot
-do this, so it also tells you what operation you used the undefined value
-in. Note, however, that perl optimizes your program and the operation
-displayed in the warning may not necessarily appear literally in your
-program. For example, C<"that $foo"> is usually optimized into C<"that "
-. $foo>, and the warning will refer to the C<concatenation (.)> operator,
-even though there is no C<.> in your program.
+To help you figure out what was undefined, perl will try to tell you
+the name of the variable (if any) that was undefined. In some cases
+it cannot do this, so it also tells you what operation you used the
+undefined value in. Note, however, that perl optimizes your program
+anid the operation displayed in the warning may not necessarily appear
+literally in your program. For example, C<"that $foo"> is usually
+optimized into C<"that " . $foo>, and the warning will refer to the
+C<concatenation (.)> operator, even though there is no C<.> in
+your program.
=item Using a hash as a reference is deprecated
(D deprecated) You tried to use a hash as a reference, as in
C<< %foo->{"bar"} >> or C<< %$ref->{"hello"} >>. Versions of perl <= 5.6.1
-used to allow this syntax, but shouldn't have. It is now deprecated, and will
-be removed in a future version.
+used to allow this syntax, but shouldn't have. It is now
+deprecated, and will be removed in a future version.
=item Using an array as a reference is deprecated
(D deprecated) You tried to use an array as a reference, as in
C<< @foo->[23] >> or C<< @$ref->[99] >>. Versions of perl <= 5.6.1 used to
-allow this syntax, but shouldn't have. It is now deprecated, and will be
-removed in a future version.
+allow this syntax, but shouldn't have. It is now deprecated,
+and will be removed in a future version.
=item Using just the first character returned by \N{} in character class
@@ -5301,18 +5530,9 @@ expression pattern bracketed character class.
(F) Using the C<!~> operator with C<s///r>, C<tr///r> or C<y///r> is
currently reserved for future use, as the exact behaviour has not
-been decided. (Simply returning the boolean opposite of the
+been decided. (Simply returning the boolean opposite of the
modified string is usually not particularly useful.)
-=item User-defined case-mapping '%s' is deprecated
-
-(W deprecated) You defined a function, such as C<ToLower> that overrides
-the standard case mapping, such as C<lc()> gives. 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.
-
=item UTF-16 surrogate U+%X
(W utf8, surrogate) You had a UTF-16 surrogate in a context where they are
@@ -5344,15 +5564,15 @@ longer than 1024 characters. The return value has been truncated to
(W closure) During compilation, an inner named subroutine or eval is
attempting to capture an outer lexical that is not currently available.
-This can happen for one of two reasons. First, the outer lexical may be
+This can happen for one of two reasons. First, the outer lexical may be
declared in an outer anonymous subroutine that has not yet been created.
(Remember that named subs are created at compile time, while anonymous
-subs are created at run-time.) For example,
+subs are created at run-time.) For example,
sub { my $a; sub f { $a } }
At the time that f is created, it can't capture the current value of $a,
-since the anonymous subroutine hasn't been created yet. Conversely,
+since the anonymous subroutine hasn't been created yet. Conversely,
the following won't give a warning since the anonymous subroutine has by
now been created and is live:
@@ -5414,14 +5634,19 @@ anonymous, using the C<sub {}> syntax. When inner anonymous subs that
reference variables in outer subroutines are created, they
are automatically rebound to the current values of such variables.
+=item vector argument not supported with alpha versions
+
+(W internal) The %vd (s)printf format does not support version objects
+with alpha parts.
+
=item Verb pattern '%s' has a mandatory argument in regex; marked by <-- HERE in m/%s/
-(F) You used a verb pattern that requires an argument. Supply an argument
-or check that you are using the right verb.
+(F) You used a verb pattern that requires an argument. Supply an
+argument or check that you are using the right verb.
=item Verb pattern '%s' may not have an argument in regex; marked by <-- HERE in m/%s/
-(F) You used a verb pattern that is not allowed an argument. Remove the
+(F) You used a verb pattern that is not allowed an argument. Remove the
argument or check that you are using the right verb.
=item Version number must be a constant number
@@ -5477,10 +5702,11 @@ filehandle with an encoding, see L<open> and L<perlfunc/binmode>.
=item Within []-length '%c' not allowed
-(F) The count in the (un)pack template may be replaced by C<[TEMPLATE]> only if
-C<TEMPLATE> always matches the same amount of packed bytes that can be
-determined from the template alone. This is not possible if it contains any
-of the codes @, /, U, u, w or a *-length. Redesign the template.
+(F) The count in the (un)pack template may be replaced by C<[TEMPLATE]>
+only if C<TEMPLATE> always matches the same amount of packed bytes that
+can be determined from the template alone. This is not possible if
+it contains any of the codes @, /, U, u, w or a *-length. Redesign
+the template.
=item write() on closed filehandle %s
@@ -5532,6 +5758,6 @@ Something Very Wrong.
=head1 SEE ALSO
-L<warnings>, L<perllexwarn>.
+L<warnings>, L<perllexwarn>, L<diagnostics>.
=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perldoc.pod b/Master/tlpkg/tlperl/lib/pods/perldoc.pod
index 7a609590349..42a9eab4cdb 100644
--- a/Master/tlpkg/tlperl/lib/pods/perldoc.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perldoc.pod
@@ -5,34 +5,36 @@ 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<-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|URL
-B<perldoc> B<-f> BuiltinFunction
+Examples:
+
+ B<perldoc> B<-f> BuiltinFunction
-B<perldoc> B<-L> it B<-f> BuiltinFunction
+ B<perldoc> B<-L> it B<-f> BuiltinFunction
-B<perldoc> B<-q> FAQ Keyword
+ B<perldoc> B<-q> FAQ Keyword
-B<perldoc> B<-L> fr B<-q> FAQ Keyword
+ B<perldoc> B<-L> fr B<-q> FAQ Keyword
-B<perldoc> B<-v> PerlVariable
+ 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,
+B<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<groff -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.
@@ -146,7 +148,7 @@ 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>
+=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
@@ -174,17 +176,18 @@ qualified filenames, one per line.
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.
+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>
+=item B<PageName|ModuleName|ProgramName|URL>
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>.
+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 URLs, HTTP and
+HTTPS are the only kind currently supported.
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.
@@ -192,7 +195,7 @@ So "perldoc intro" is enough to find/render "perlintro.pod".
=item B<-n> I<some-formatter>
-Specify replacement for nroff
+Specify replacement for groff
=item B<-r>
@@ -208,15 +211,13 @@ 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.
+its privileges, it will not run.
=head1 ENVIRONMENT
@@ -258,13 +259,14 @@ L<perlpod>, L<Pod::Perldoc>
=head1 AUTHOR
-Current maintainer: Adriano R. Ferreira <ferreira@cpan.org>
+Current maintainer: Mark Allen C<< <mallen@cpan.org> >>
Past contributors are:
-Sean M. Burke <sburke@cpan.org>,
-Kenneth Albanowski <kjahds@kjahds.com>,
-Andy Dougherty <doughera@lafcol.lafayette.edu>,
+brian d foy C<< <bdfoy@cpan.org> >>
+Adriano R. Ferreira C<< <ferreira@cpan.org> >>,
+Sean M. Burke C<< <sburke@cpan.org> >>,
+Kenneth Albanowski C<< <kjahds@kjahds.com> >>,
+Andy Dougherty C<< <doughera@lafcol.lafayette.edu> >>,
and many others.
=cut
-
diff --git a/Master/tlpkg/tlperl/lib/pods/perldtrace.pod b/Master/tlpkg/tlperl/lib/pods/perldtrace.pod
new file mode 100644
index 00000000000..39551e17490
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/pods/perldtrace.pod
@@ -0,0 +1,179 @@
+=head1 NAME
+
+perldtrace - Perl's support for DTrace
+
+=head1 SYNOPSIS
+
+ # dtrace -Zn 'perl::sub-entry, perl::sub-return { trace(copyinstr(arg0)) }'
+ dtrace: description 'perl::sub-entry, perl::sub-return ' matched 10 probes
+
+ # perl -E 'sub outer { inner(@_) } sub inner { say shift } outer("hello")'
+ hello
+
+ (dtrace output)
+ CPU ID FUNCTION:NAME
+ 0 75915 Perl_pp_entersub:sub-entry BEGIN
+ 0 75915 Perl_pp_entersub:sub-entry import
+ 0 75922 Perl_pp_leavesub:sub-return import
+ 0 75922 Perl_pp_leavesub:sub-return BEGIN
+ 0 75915 Perl_pp_entersub:sub-entry outer
+ 0 75915 Perl_pp_entersub:sub-entry inner
+ 0 75922 Perl_pp_leavesub:sub-return inner
+ 0 75922 Perl_pp_leavesub:sub-return outer
+
+=head1 DESCRIPTION
+
+DTrace is a framework for comprehensive system- and application-level
+tracing. Perl is a DTrace I<provider>, meaning it exposes several
+I<probes> for instrumentation. You can use these in conjunction
+with kernel-level probes, as well as probes from other providers
+such as MySQL, in order to diagnose software defects, or even just
+your application's bottlenecks.
+
+Perl must be compiled with the C<-Dusedtrace> option in order to
+make use of the provided probes. While DTrace aims to have no
+overhead when its instrumentation is not active, Perl's support
+itself cannot uphold that guarantee, so it is built without DTrace
+probes under most systems. One notable exception is that Mac OS X
+ships a F</usr/bin/perl> with DTrace support enabled.
+
+=head1 HISTORY
+
+=over 4
+
+=item 5.10.1
+
+Perl's initial DTrace support was added, providing C<sub-entry> and
+C<sub-return> probes.
+
+=item 5.14.0
+
+The C<sub-entry> and C<sub-return> probes gain a fourth argument: the
+package name of the function.
+
+=item 5.16.0
+
+The C<phase-change> probe was added.
+
+=back
+
+=head1 PROBES
+
+=over 4
+
+=item sub-entry(SUBNAME, FILE, LINE, PACKAGE)
+
+Traces the entry of any subroutine. Note that all of the variables
+refer to the subroutine that is being invoked; there is currently
+no way to get ahold of any information about the subroutine's
+I<caller> from a DTrace action.
+
+ :*perl*::sub-entry {
+ printf("%s::%s entered at %s line %d\n",
+ copyinstr(arg3), copyinstr(arg0), copyinstr(arg1), arg0);
+ }
+
+=item sub-return(SUBNAME, FILE, LINE, PACKAGE)
+
+Traces the exit of any subroutine. Note that all of the variables
+refer to the subroutine that is returning; there is currently no
+way to get ahold of any information about the subroutine's I<caller>
+from a DTrace action.
+
+ :*perl*::sub-return {
+ printf("%s::%s returned at %s line %d\n",
+ copyinstr(arg3), copyinstr(arg0), copyinstr(arg1), arg0);
+ }
+
+=item phase-change(NEWPHASE, OLDPHASE)
+
+Traces changes to Perl's interpreter state. You can internalize this
+as tracing changes to Perl's C<${^GLOBAL_PHASE}> variable, especially
+since the values for C<NEWPHASE> and C<OLDPHASE> are the strings that
+C<${^GLOBAL_PHASE}> reports.
+
+ :*perl*::phase-change {
+ printf("Phase changed from %s to %s\n",
+ copyinstr(arg1), copyinstr(arg0));
+ }
+
+=back
+
+=head1 EXAMPLES
+
+=over 4
+
+=item Most frequently called functions
+
+ # dtrace -qZn 'sub-entry { @[strjoin(strjoin(copyinstr(arg3),"::"),copyinstr(arg0))] = count() } END {trunc(@, 10)}'
+
+ Class::MOP::Attribute::slots 400
+ Try::Tiny::catch 411
+ Try::Tiny::try 411
+ Class::MOP::Instance::inline_slot_access 451
+ Class::MOP::Class::Immutable::Trait:::around 472
+ Class::MOP::Mixin::AttributeCore::has_initializer 496
+ Class::MOP::Method::Wrapped::__ANON__ 544
+ Class::MOP::Package::_package_stash 737
+ Class::MOP::Class::initialize 1128
+ Class::MOP::get_metaclass_by_name 1204
+
+=item Trace function calls
+
+ # dtrace -qFZn 'sub-entry, sub-return { trace(copyinstr(arg0)) }'
+
+ 0 -> Perl_pp_entersub BEGIN
+ 0 <- Perl_pp_leavesub BEGIN
+ 0 -> Perl_pp_entersub BEGIN
+ 0 -> Perl_pp_entersub import
+ 0 <- Perl_pp_leavesub import
+ 0 <- Perl_pp_leavesub BEGIN
+ 0 -> Perl_pp_entersub BEGIN
+ 0 -> Perl_pp_entersub dress
+ 0 <- Perl_pp_leavesub dress
+ 0 -> Perl_pp_entersub dirty
+ 0 <- Perl_pp_leavesub dirty
+ 0 -> Perl_pp_entersub whiten
+ 0 <- Perl_pp_leavesub whiten
+ 0 <- Perl_dounwind BEGIN
+
+=item Function calls during interpreter cleanup
+
+ # dtrace -Zn 'phase-change /copyinstr(arg0) == "END"/ { self->ending = 1 } sub-entry /self->ending/ { trace(copyinstr(arg0)) }'
+
+ CPU ID FUNCTION:NAME
+ 1 77214 Perl_pp_entersub:sub-entry END
+ 1 77214 Perl_pp_entersub:sub-entry END
+ 1 77214 Perl_pp_entersub:sub-entry cleanup
+ 1 77214 Perl_pp_entersub:sub-entry _force_writable
+ 1 77214 Perl_pp_entersub:sub-entry _force_writable
+
+=item System calls at compile time
+
+ # dtrace -qZn 'phase-change /copyinstr(arg0) == "START"/ { self->interesting = 1 } phase-change /copyinstr(arg0) == "RUN"/ { self->interesting = 0 } syscall::: /self->interesting/ { @[probefunc] = count() } END { trunc(@, 3) }'
+
+ lseek 310
+ read 374
+ stat64 1056
+
+=back
+
+=head1 REFERENCES
+
+=over 4
+
+=item DTrace User Guide
+
+L<http://download.oracle.com/docs/cd/E19082-01/819-3620/index.html>
+
+=item DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD
+
+L<http://www.amazon.com/DTrace-Dynamic-Tracing-Solaris-FreeBSD/dp/0132091518/>
+
+=back
+
+=head1 AUTHORS
+
+Shawn M Moore C<sartak@gmail.com>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perlebcdic.pod b/Master/tlpkg/tlperl/lib/pods/perlebcdic.pod
index 6affdd7b8aa..ecd0676415f 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlebcdic.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlebcdic.pod
@@ -1348,7 +1348,7 @@ Perl runs under Unix Systems Services or USS.
=item chcp
B<chcp> is supported as a shell utility for displaying and changing
-one's code page. See also L<chcp>.
+one's code page. See also L<chcp(1)>.
=item dataset access
diff --git a/Master/tlpkg/tlperl/lib/pods/perlembed.pod b/Master/tlpkg/tlperl/lib/pods/perlembed.pod
index 1b2e0c1bbcd..e40035eb71a 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlembed.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlembed.pod
@@ -1114,18 +1114,4 @@ Server Perl plugins.
Copyright (C) 1995, 1996, 1997, 1998 Doug MacEachern and Jon Orwant. All
Rights Reserved.
-Permission is granted to make and distribute verbatim copies of this
-documentation provided the copyright notice and this permission notice are
-preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-documentation under the conditions for verbatim copying, provided also
-that they are marked clearly as modified versions, that the authors'
-names and title are unchanged (though subtitles and additional
-authors' names may be added), and that the entire resulting derived
-work is distributed under the terms of a permission notice identical
-to this one.
-
-Permission is granted to copy and distribute translations of this
-documentation into another language, under the above conditions for
-modified versions.
+This document may be distributed under the same terms as Perl itself.
diff --git a/Master/tlpkg/tlperl/lib/pods/perlepoc.pod b/Master/tlpkg/tlperl/lib/pods/perlepoc.pod
index 419e2e77121..f5773506ff4 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlepoc.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlepoc.pod
@@ -4,7 +4,7 @@ specially designed to be readable as is.
=head1 NAME
-README.epoc - Perl for EPOC
+perlepoc - Perl for EPOC
=head1 SYNOPSIS
diff --git a/Master/tlpkg/tlperl/lib/pods/perlexperiment.pod b/Master/tlpkg/tlperl/lib/pods/perlexperiment.pod
new file mode 100644
index 00000000000..f304120bc66
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/pods/perlexperiment.pod
@@ -0,0 +1,305 @@
+=head1 NAME
+
+perlexperiment - A listing of experimental features in Perl
+
+=head1 DESCRIPTION
+
+This document lists the current and past experimental features in the perl
+core. Although all of these are documented with their appropriate topics,
+this succinct listing gives you an overview and basic facts about their
+status.
+
+So far I've merely tried to find and list the experimental features and infer
+their inception, versions, etc. There's a lot of speculation here.
+
+=head2 Current experiments
+
+=over 8
+
+=item fork() emulation
+
+Introduced in Perl 5.6.1
+
+See also L<perlfork>
+
+=item Weak references
+
+Introduced in Perl 5.6.0
+
+=item Internal file glob
+
+Introduced in Perl 5.6.0
+
+Accepted in XXX
+
+=item 64-bit support
+
+Introduced in Perl 5.005
+
+Accepted in XXX
+
+=item die accepts a reference
+
+Introduced in Perl 5.005
+
+Accepted in Perl XXX
+
+=item Unicode support
+
+Introduced in Perl 5.6.0
+
+Accepted in Perl 5.8.0 XXX
+
+=item -Dusemultiplicity -Dusethreads
+
+Introduced in Perl 5.6.0
+
+=item Long Doubles Still Don't Work In Solaris
+
+Introduced in Perl 5.7.0
+
+=item GetOpt::Long Options can now take multiple values at once (experimental)
+
+C<Getopt::Long> upgraded to version 2.35
+
+Removed in Perl 5.8.8
+
+=item 5.005-style threading
+
+Introduced in Perl 5.005
+
+Removed in Perl 5.10 XXX
+
+=item Test::Harness::Straps
+
+Removed in Perl 5.10.1
+
+=item perlcc
+
+Introduced in Perl 5.005
+
+Removed in Perl 5.9.0
+
+=item C<our> can now have an experimental optional attribute C<unique>
+
+Introduced in Perl 5.8.0
+
+Deprecated in Perl 5.10.0
+
+=item Assertions
+
+The C<-A> command line switch
+
+Introduced in Perl 5.9.0
+
+Removed in Perl 5.9.5
+
+=item Linux abstract Unix domain sockets
+
+Introduced in Perl 5.9.2
+
+See also L<Socket>
+
+=item L<Pod::HTML2Pod|Pod::HTML2Pod>
+
+=item L<Pod::PXML|Pod::PXML>
+
+=item threads
+
+=item The <:pop> IO pseudolayer
+
+See also L<perlrun>
+
+=item The <:win32> IO pseudolayer
+
+See also L<perlrun>
+
+=item MLDBM
+
+See also L<perldsc>
+
+=item internal functions with M flag
+
+See also L<perlguts>
+
+=item lex_start API
+
+Introduced in Perl 5.13.7
+
+=item internal API for C<%H>
+
+Introduced in Perl 5.13.7
+
+See also C<cophh_> in L<perlapi>.
+
+=item av_create_and_push
+
+=item av_create_and_unshift_one
+
+=item av_create_and_unshift_one
+
+=item PL_keyword_plugin
+
+=item hv_iternext_flags
+
+=item lex_bufutf8
+
+=item lex_discard_to
+
+=item lex_grow_linestr
+
+=item lex_next_chunk
+
+=item lex_peek_unichar
+
+=item lex_read_space
+
+=item lex_read_to
+
+=item lex_read_unichar
+
+=item lex_stuff_pv
+
+=item lex_stuff_pvn
+
+=item lex_stuff_pvs
+
+=item lex_stuff_sv
+
+=item lex_unstuff
+
+=item parse_fullstmt
+
+=item parse_stmtseq
+
+=item PL_parser-E<gt>bufend
+
+=item PL_parser-E<gt>bufptr
+
+=item PL_parser-E<gt>linestart
+
+=item PL_parser-E<gt>linestr
+
+=item Perl_signbit
+
+=item pad_findmy
+
+=item sv_utf8_decode
+
+=item sv_utf8_downgrade
+
+=item bytes_from_utf8
+
+=item bytes_to_utf8
+
+=item utf8_to_bytes
+
+=item DB module
+
+Introduced in Perl 5.6.0
+
+See also L<perldebug>, L<perldebtut>
+
+=item The pseudo-hash data type
+
+Introduced in Perl 5.6.0
+
+=item Lvalue subroutines
+
+Introduced in Perl 5.6.0
+
+See also L<perlsub>
+
+=item There is an C<installhtml> target in the Makefile.
+
+=item Unicode in Perl on EBCDIC
+
+=item C<(?{code})>
+
+See also L<perlre>
+
+=item C<(??{ code })>
+
+See also L<perlre>
+
+=item Backtracking control verbs
+
+C<(*ACCEPT)>
+
+Introduced in: Perl 5.10
+
+See also: L<perlre/"Special Backtracking Control Verbs">
+
+=item Code expressions, conditional expressions, and independent expressions in regexes
+
+=item The C<\N> regex character class
+
+The C<\N> character class, not to be confused with the named character
+sequence C<\N{NAME}>, denotes any non-newline character in a regular
+expression.
+
+Introduced in: Perl 5.12
+
+See also:
+
+=item gv_try_downgrade
+
+See also L<perlintern>
+
+=item Experimental Support for Sun Studio Compilers for Linux OS
+
+See also L<perllinux>
+
+=item Pluggable keywords
+
+See L<perlapi/PL_keyword_plugin> for the mechanism.
+
+Introduced in: Perl 5.11.2
+
+=back
+
+=head2 Accepted features
+
+These features were so wildly successful and played so well with others that
+we decided to remove their experimental status and admit them as full, stable
+features in the world of Perl, lavishing all the benefits and luxuries thereof.
+They are also awarded +5 Stability and +3 Charisma.
+
+=over 8
+
+=item (none yet identified)
+
+=back
+
+=head2 Removed features
+
+These features are no longer considered experimental and their functionality
+has disappeared. It's your own fault if you wrote production programs using
+these features after we explicitly told you not to (see L<perlpolicy>).
+
+=over 8
+
+=item C<legacy>
+
+The experimental C<legacy> pragma was swallowed by the C<feature> pragma.
+
+Introduced in: 5.11.2
+
+Removed in: 5.11.3
+
+=back
+
+=head1 AUTHORS
+
+brian d foy C<< <brian.d.foy@gmail.com> >>
+
+=head1 COPYRIGHT
+
+Copyright 2010, brian d foy C<< <brian.d.foy@gmail.com> >>
+
+=head1 LICENSE
+
+You can use and redistribute this document under the same terms as Perl
+itself.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perlfaq.pod b/Master/tlpkg/tlperl/lib/pods/perlfaq.pod
index 614ff564a93..449c0a2de84 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlfaq.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlfaq.pod
@@ -8,81 +8,41 @@ 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
+=head2 Where to find 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>:
+The perlfaq is an evolving document. Read the latest version at
+L<http://learn.perl.org/faq/>. It is also included in the standard Perl
+distribution.
- $ perldoc perlfaq
+=head2 How to use the perlfaq
-Besides your local system, you can find the perlfaq on the web, including
-at http://perldoc.perl.org/ .
+The C<perldoc> command line tool is part of the standard Perl distribution. To
+read the perlfaq:
-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.
+ $ perldoc perlfaq
-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.
+To search the perlfaq question headings:
-=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?
+ $ perldoc -q open
-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
+=head2 How to contribute to the perlfaq
-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.
+Review L<https://github.com/perl-doc-cats/perlfaq/wiki>. If you don't find
+your suggestion create an issue or pull request against
+L<https://github.com/perl-doc-cats/perlfaq>.
-=head1 AUTHOR AND COPYRIGHT
+Once approved, changes are merged into L<https://github.com/tpf/perlfaq>, the
+repository which drives L<http://learn.perl.org/faq/>, and they are
+distributed with the next Perl 5 release.
-Tom Christiansen wrote the original version of this document.
-brian d foy C<< <bdfoy@cpan.org> >> wrote this version. See the
-individual perlfaq documents for additional copyright information.
+=head2 What if my question isn't answered in the FAQ?
-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).
+Try the resources in L<perlfaq2>.
-=head1 Table of Contents
+=head1 TABLE OF CONTENTS
=over 4
-=item perlfaq - this document
-
=item perlfaq1 - General Questions About Perl
=item perlfaq2 - Obtaining and Learning about Perl
@@ -99,15 +59,15 @@ them as you see fit (and at your own risk with no warranty from anyone).
=item perlfaq8 - System Interaction
-=item perlfaq9 - Networking
+=item perlfaq9 - Web, Email and Networking
=back
-=head1 The Questions
+=head1 THE QUESTIONS
=head2 L<perlfaq1>: General Questions About Perl
-Very general, high-level questions about Perl.
+This section of the FAQ answers very general, high-level questions about Perl.
=over 4
@@ -129,10 +89,6 @@ What are Perl 4, Perl 5, or Perl 6?
=item *
-What was Ponie?
-
-=item *
-
What is Perl 6?
=item *
@@ -161,18 +117,10 @@ 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
@@ -180,17 +128,17 @@ How can I convince others to use Perl?
=head2 L<perlfaq2>: Obtaining and Learning about Perl
-Where to find source and documentation for Perl, support, and related matters.
+This section of the FAQ answers questions about where to find source and documentation for Perl, support, and related matters.
=over 4
=item *
-What machines support perl? Where do I get it?
+What machines support Perl? Where do I get it?
=item *
-How can I get a binary version of perl?
+How can I get a binary version of Perl?
=item *
@@ -198,19 +146,15 @@ 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?
+I copied the Perl binary from one machine to another, but scripts don't work.
=item *
-What modules and extensions are available for Perl? What is CPAN? What does CPAN/src/... mean?
+I grabbed the sources and tried to compile but gdbm/dynamic loading/malloc/linking/... failed. How do I make it work?
=item *
-Is there an ISO or ANSI certified version of Perl?
+What modules and extensions are available for Perl? What is CPAN?
=item *
@@ -218,11 +162,11 @@ Where can I get information on Perl?
=item *
-What are the Perl newsgroups on Usenet? Where do I post questions?
+What is perl.com? Perl Mongers? pm.org? perl.org? cpan.org?
=item *
-Where should I post source code?
+Where can I post questions?
=item *
@@ -234,30 +178,26 @@ Which magazines have Perl content?
=item *
-What mailing lists are there for Perl?
+Which Perl blogs should I read?
=item *
-Where are the archives for comp.lang.perl.misc?
+What mailing lists are there for Perl?
=item *
-Where can I buy a commercial version of perl?
+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.
+This section of the FAQ answers questions related to programmer tools and programming support.
=over 4
@@ -271,10 +211,6 @@ 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 *
@@ -295,10 +231,6 @@ 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 *
@@ -386,7 +318,7 @@ What's MakeMaker?
=head2 L<perlfaq4>: Data Manipulation
-Manipulating numbers, dates, strings, arrays, hashes, and miscellaneous data issues.
+This section of the FAQ answers questions related to manipulating numbers, dates, strings, arrays, hashes, and miscellaneous data issues.
=over 4
@@ -404,7 +336,7 @@ Why isn't my octal data interpreted correctly?
=item *
-Does Perl have a round() function? What about ceil() and floor()? Trig functions?
+Does Perl have a round() function? What about ceil() and floor()? Trig functions?
=item *
@@ -560,7 +492,7 @@ 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?
+How do I compute the difference of two arrays? How do I compute the intersection of two arrays?
=item *
@@ -676,6 +608,10 @@ How can I check if a key exists in a multilevel hash?
=item *
+How can I prevent addition of unwanted keys into a hash?
+
+=item *
+
How do I handle binary data correctly?
=item *
@@ -707,13 +643,13 @@ How do I pack arrays of doubles or floats for XS code?
=head2 L<perlfaq5>: Files and Formats
-I/O and the "f" issues: filehandles, flushing, formats, and footers.
+This section deals with 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?
+How do I flush/unbuffer an output filehandle? Why must I do this?
=item *
@@ -745,7 +681,7 @@ 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?
+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 *
@@ -781,11 +717,7 @@ 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?
+How can I open a file with a leading "E<gt>" or trailing blanks?
=item *
@@ -833,7 +765,7 @@ How can I read in a file by paragraphs?
=item *
-How can I read a single character from a file? From the keyboard?
+How can I read a single character from a file? From the keyboard?
=item *
@@ -853,7 +785,7 @@ 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?
+Why can't I use "C:\temp\foo" in DOS paths? Why doesn't `C:\temp\foo.exe` work?
=item *
@@ -861,7 +793,7 @@ 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?
+Why does Perl let me delete read-only files? Why does C<-i> clobber protected files? Isn't this a bug in Perl?
=item *
@@ -888,7 +820,7 @@ How do I copy an entire directory?
=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).
+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 can be handled with regular expressions, but those answers are found elsewhere in this document (in perlfaq9 : "How do I decode or create those %-encodings on the web" and perlfaq4 : "How do I determine whether a scalar is a number/whole/integer/float", to be precise).
=over 4
@@ -922,7 +854,7 @@ How can I make C<\w> match national character sets?
=item *
-How can I match a locale-smart version of C</[a-zA-Z]/>?
+How can I match a locale-smart version of C</[a-zA-Z]/> ?
=item *
@@ -993,7 +925,7 @@ How do I match a regular expression that's in a variable?
=head2 L<perlfaq7>: General Perl Language Issues
-General Perl language issues that don't clearly fit into any of the other sections.
+This section deals with general Perl language issues that don't clearly fit into any of the other sections.
=over 4
@@ -1063,7 +995,7 @@ How do I create a static variable?
=item *
-What's the difference between dynamic and lexical (static) scoping? Between local() and my()?
+What's the difference between dynamic and lexical (static) scoping? Between local() and my()?
=item *
@@ -1075,7 +1007,7 @@ What's the difference between deep and shallow binding?
=item *
-Why doesn't "my($foo) = E<lt>FILEE<gt>;" work right?
+Why doesn't "my($foo) = E<lt>$fhE<gt>;" work right?
=item *
@@ -1122,7 +1054,7 @@ What does "bad interpreter" mean?
=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.
+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.
=over 4
@@ -1200,7 +1132,7 @@ 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?
+Why doesn't my sockets program work under System V (Solaris)? What does the error message "Protocol not supported" mean?
=item *
@@ -1260,7 +1192,7 @@ 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?
+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 *
@@ -1329,23 +1261,23 @@ What is socket.ph and where do I get it?
=back
-=head2 L<perlfaq9>: Networking
+=head2 L<perlfaq9>: Web, Email and Networking
-Networking, the internet, and a few on the web.
+This section deals with questions related to running web sites, sending and receiving email as well as general networking.
=over 4
=item *
-What is the correct form of response from a CGI script?
+Should I use a web framework?
=item *
-My CGI script runs from the command line but not the browser. (500 Server Error)
+Which web framework should I use?
=item *
-How can I get better error messages from a CGI program?
+What is Plack and PSGI?
=item *
@@ -1357,14 +1289,6 @@ 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 *
@@ -1385,11 +1309,7 @@ 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?
+How do I make sure users can't enter values into a form that causes my CGI script to do bad things?
=item *
@@ -1397,10 +1317,6 @@ 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 *
@@ -1409,11 +1325,11 @@ How do I decode a MIME/BASE64 string?
=item *
-How do I return the user's mail address?
+How do I find the user's mail address?
=item *
-How do I send mail?
+How do I send email?
=item *
@@ -1421,7 +1337,7 @@ How do I use MIME to make an attachment to a mail message?
=item *
-How do I read mail?
+How do I read email?
=item *
@@ -1429,11 +1345,7 @@ 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?
+How do I fetch/put an (S)FTP file?
=item *
@@ -1442,3 +1354,20 @@ How can I do RPC in Perl?
=back
+
+=head1 CREDITS
+
+Tom Christiansen wrote the original perlfaq then expanded it with the
+help of Nat Torkington. brian d foy substantialy edited and expanded
+the perlfaq. perlfaq-workers and others have also supplied feedback,
+patches and corrections over the years.
+
+=head1 AUTHOR AND COPYRIGHT
+
+Tom Christiansen wrote the original version of this document.
+brian d foy C<< <bdfoy@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).
diff --git a/Master/tlpkg/tlperl/lib/pods/perlfaq1.pod b/Master/tlpkg/tlperl/lib/pods/perlfaq1.pod
index ba70a822602..a02fae6a707 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlfaq1.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlfaq1.pod
@@ -2,7 +2,7 @@
perlfaq1 - General Questions About Perl
-=head1 DESCRIPTION
+=head1 DESCRIPTION
This section of the FAQ answers very general, high-level questions
about Perl.
@@ -10,37 +10,35 @@ 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.
+written by Larry Wall and a cast of thousands.
+
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.
+graphical programming, networking, and web programming.
+
+Perl derives from the ubiquitous C programming language and to a
+lesser extent from sed, awk, the Unix shell, and many other tools
+and languages.
+
+These strengths make it especially popular with web developers
+and system administrators. Mathematicians, geneticists, journalists,
+managers and many other people also use Perl.
=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
+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.
+documentation you're reading now were all written by volunteers.
-In particular, the core development team (known as the Perl Porters)
-are a rag-tag band of highly altruistic individuals committed to
+The core development team (known as the Perl Porters)
+are a group 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 ,
+money. You may snoop on pending developments via the
+L<archives|http://www.nntp.perl.org/group/perl.perl5.porters/>
+or read the L<faq|http://dev.perl.org/perl5/docs/p5p-faq.html>,
or you can subscribe to the mailing list by sending
perl5-porters-subscribe@perl.org a subscription request
(an empty message with no subject is fine).
@@ -52,7 +50,7 @@ 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.
+"Where can I buy a commercial version of Perl?" for more information.
=head2 Which version of Perl should I use?
@@ -86,7 +84,7 @@ so you'll have an easier time finding help for those.
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 ).
+L<http://www.cert.org/advisories/CA-1997-17.html> ).
=item *
@@ -107,11 +105,9 @@ 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.
+The current leading implementation of Perl 6, Rakudo, released a "useful,
+usable, 'early adopter'" distribution of Perl 6 (called Rakudo Star) in July of
+2010. Please see L<http://rakudo.org/> for more information.
=item *
@@ -124,65 +120,46 @@ 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.
+In short, Perl 4 is the parent to both Perl 5 and Perl 6. Perl 5 is the older
+sibling, and though they are different languages, someone who knows one will
+spot many similarities in the other.
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
+The current major release of Perl is Perl 5, 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 ).
+(March 1991), but has significant differences.
-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 ).
+Perl 6 is a reinvention of Perl, it is a language in the same lineage but
+not compatible. The two are complementary, not mutually exclusive. Perl 6 is
+not meant to replace Perl 5, and vice versa. See L</"What is Perl 6?"> below
+to find out more.
-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.
+See L<perlhist> for a history of Perl revisions.
=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.
+Perl 6 was I<originally> described as the community's rewrite of Perl 5.
+Development started in 2002; syntax and design work continue to this day.
+As the language has evolved, it has become clear that it is a separate
+language, incompatible with Perl 5 but in the same language family.
+
+Contrary to popular belief, Perl 6 and Perl 5 peacefully coexist with one
+another. Perl 6 has proven to be a fascinating source of ideas for those
+using Perl 5 (the L<Moose> object system is a well-known example). There is
+overlap in the communities, and this overlap fosters the tradition of sharing
+and borrowing that have been instrumental to Perl's success. The current
+leading implementation of Perl 6 is Rakudo, and you can learn more about
+it at L<http://rakudo.org>.
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.
+page at L<http://www.perl6.org/> and get involved.
"We're really serious about reinventing everything that needs reinventing."
--Larry Wall
@@ -191,18 +168,15 @@ you need to do.
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.
+averaged about one production release per year.
-Larry and the Perl development team occasionally make changes to the
+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).
+backward compatibility.
=head2 Is Perl difficult to learn?
-No, Perl is easy to start learning--and easy to keep learning. It looks
+No, Perl is easy to start L<learning|http://learn.perl.org/> --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.
@@ -224,26 +198,30 @@ 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
+They're discussed in Part 3 of this FAQ, along with L<CPAN|http://www.cpan.org/>, 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.
+Perl can be used for almost any coding problem, even ones which require
+integrating specialist C code for extra speed. As with any tool it can
+be used well or badly. Perl has many strengths, and a few weaknesses,
+precisely which areas are good and bad is often a personal choice.
-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.
+When choosing a language you should also be influenced by the
+L<resources|http://www.cpan.org/>, L<testing culture|http://www.cpantesters.org/>
+and L<community|http://www.perl.org/community.html> which surrounds it.
-Some comparison documents can be found at http://www.perl.com/doc/FMTEYEWTK/versus/
-if you really can't stop yourself.
+For comparisons to a specific language it is often best to create
+a small project in both languages and compare the results, make sure
+to use all the L<resources|http://www.cpan.org/> of each language,
+as a language is far more than just it's syntax.
=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
@@ -265,69 +243,23 @@ 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
+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. :-)
+If you find that you need to speed up a specific part of a Perl
+application (not something you often need) you may want to use C,
+but you can access this from your Perl code with L<perlxs>.
=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.
+"Perl" is the name of the language. Only the "P" is capitalized.
+The name of the interpreter (the program which runs the Perl script)
+is "perl" with a lowercase "p".
+
+You may or may not choose to follow this usage. But never write "PERL",
+because perl is not an acronym.
=head2 What is a JAPH?
@@ -338,27 +270,14 @@ 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,";
+ 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 .
+CPAN has several JAPH programs at L<http://www.cpan.org/misc/japh>.
=head2 How can I convince others to use Perl?
@@ -378,8 +297,8 @@ 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
+support in places such as Perlmonks ( L<http://www.perlmonks.com> )
+and the various Perl mailing lists ( L<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
@@ -392,9 +311,9 @@ You might find these links useful:
=over 4
-=item * http://perltraining.com.au/whyperl.html
+=item * L<http://www.perl.org/about.html>
-=item * http://www.perl.org/advocacy/whyperl.html
+=item * L<http://perltraining.com.au/whyperl.html>
=back
diff --git a/Master/tlpkg/tlperl/lib/pods/perlfaq2.pod b/Master/tlpkg/tlperl/lib/pods/perlfaq2.pod
index 4e891a6865a..e890cc34a1a 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlfaq2.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlfaq2.pod
@@ -8,11 +8,11 @@ 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?
+=head2 What machines support Perl? Where do I get it?
-The standard release of perl (the one maintained by the perl
+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 .
+can find the latest releases at L<http://www.cpan.org/src/>.
Perl builds and runs on a bewildering number of platforms. Virtually
all known and current Unix derivatives are supported (perl's native
@@ -20,7 +20,7 @@ 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
+L<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
@@ -29,47 +29,22 @@ 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?
+=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/
+See L<CPAN Ports|http://www.cpan.org/ports/>
=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 Windows, use a binary version of Perl,
+L<Strawberry Perl|http://strawberryperl.com/> and
+L<ActivePerl|http://www.activestate.com/activeperl> come with a
+bundled C compiler.
-For Sun systems, SunFreeware.com provides binaries of most popular
-applications, including compilers and Perl.
+Otherwise if you really do want to build Perl, you need to get a
+binary version of C<gcc> for your system first. Use a search
+engine to find out how to do this for your operating system.
-=head2 I copied the perl binary from one machine to another, but scripts don't work.
+=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
@@ -98,209 +73,134 @@ 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?
+=head2 What modules and extensions are available for Perl? What is CPAN?
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.
+contains tens of thousands of modules and extensions, source code
+and documentation, designed for I<everything> from commercial
+database interfaces to keyboard/screen control and running large web sites.
+
+You can search CPAN on L<http://metacpan.org> or
+L<http://search.cpan.org/>.
+
+The master web site for CPAN is L<http://www.cpan.org/>,
+L<http://www.cpan.org/SITES.html> lists all mirrors.
+
+See the CPAN FAQ at L<http://www.cpan.org/misc/cpan-faq.html> for answers
+to the most frequently asked questions about CPAN.
+
+The L<Task::Kensho> module has a list of recommended modules which
+you should review as a good starting point.
=head2 Where can I get information on Perl?
+=over 4
+
+=item * L<http://www.perl.org/>
+
+=item * L<http://perldoc.perl.org/>
+
+=item * L<http://learn.perl.org/>
+
+=back
+
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.
+installed as well: type C<perldoc perl> in a terminal or
+L<view online|http://perldoc.perl.org/perl.html>.
-If all else fails, consult http://perldoc.perl.org/ which has the
-complete documentation in HTML and PDF format.
+(Some operating system distributions may ship the documentation in a different
+package; for instance, on Debian, you need to install the C<perl-doc> package.)
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 What is perl.com? Perl Mongers? pm.org? perl.org? cpan.org?
-=head2 Perl Books
+L<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
+L<The Perl Foundation|http://www.perlfoundation.org/>.
+
+The Perl Foundation is an advocacy organization for the Perl language
+which maintains the web site L<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 and jobs in Perl,
+such as:
-There are many good books on Perl. See the L<perlbook> documentation or
-( http://books.perl.org ).
+=over 4
-=head2 Which magazines have Perl content?
+=item * L<http://www.perl.org/>
-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 ).
+=item * L<http://learn.perl.org/>
-=head2 What mailing lists are there for Perl?
+=item * L<http://jobs.perl.org/>
-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.
+=item * L<http://lists.perl.org/>
-A comprehensive list of Perl-related mailing lists can be found at:
+=back
- http://lists.perl.org/
+L<Perl Mongers|http://www.pm.org/> uses the pm.org domain for services
+related to local Perl user groups, including the hosting of mailing lists
+and web sites. See the L<Perl Mongers web site|http://www.pm.org/> for more
+information about joining, starting, or requesting services for a
+Perl user group.
-=head2 Where are the archives for comp.lang.perl.misc?
+CPAN, or the Comprehensive Perl Archive Network L<http://www.cpan.org/>,
+is a replicated, worldwide repository of Perl software.
+See L<What is CPAN?|/"What modules and extensions are available for Perl? What is CPAN? What does CPANE<sol>srcE<sol>... mean?">.
-The Google search engine now carries archived and searchable newsgroup
-content.
+=head2 Where can I post questions?
-http://groups.google.com/group/comp.lang.perl.misc/topics
+There are many Perl L<mailing lists|lists.perl.org> for various
+topics, specifically the L<beginners list|http://lists.perl.org/list/beginners.html>
+may be of use.
-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.
+Other places to ask questions are on the
+L<PerlMonks site|http://www.perlmonks.org/> or
+L<stackoverflow|http://stackoverflow.com/questions/tagged/perl>.
-=head2 Where can I buy a commercial version of perl?
+=head2 Perl Books
+
+There are many good L<books on Perl|http://www.perl.org/books/library.html>.
+
+=head2 Which magazines have Perl content?
+
+There's also I<$foo Magazin>, a German magazine dedicated to Perl, at
+( L<http://www.foo-magazin.de> ). The I<Perl-Zeitung> is another
+German-speaking magazine for Perl beginners (see
+L<http://perl-zeitung.at.tf> ).
+
+Several unix/linux releated magazines frequently includes articles on Perl.
+
+=head2 Which Perl blogs should I read?
+
+L<Perl News|http://perlnews.org/> covers some of the major events in the Perl
+world, L<Perl Weekly|http://perlweekly.com/> is a weekly e-mail
+(and RSS feed) of hand-picked Perl articles.
+
+L<http://blogs.perl.org/> hosts many Perl blogs, there are also
+several blog aggregators: L<Perlsphere|http://perlsphere.net/> and
+L<IronMan|http://ironman.enlightenedperl.org/> are two of them.
+
+=head2 What mailing lists are there for Perl?
-In a real sense, perl already I<is> commercial software: it has a license
+A comprehensive list of Perl-related mailing lists can be found at
+L<http://lists.perl.org/>
+
+=head2 Where can I buy a commercial version of Perl?
+
+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.
+and supportive user community and an extensive literature.
+
+If you still need commercial support
+L<ActiveState|http://www.activestate.com/activeperl> offers
+this.
=head2 Where do I send bug reports?
@@ -316,52 +216,21 @@ 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 .
+install and use the L<Module::CoreList> module. It has the information
+about the modules (with their versions) included with each release
+of Perl.
-Every CPAN module has a bug tracker set up in RT, http://rt.cpan.org .
+Every CPAN module has a bug tracker set up in RT, L<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
+wanted to report a bug in L<Business::ISBN>, you could send a message to
bug-Business-ISBN@rt.cpan.org .
Some modules might have special reporting requirements, such as a
-Sourceforge or Google Code tracking system, so you should check the
+Github 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
diff --git a/Master/tlpkg/tlperl/lib/pods/perlfaq3.pod b/Master/tlpkg/tlperl/lib/pods/perlfaq3.pod
index 3093d36afa7..9e9ae8d906f 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlfaq3.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlfaq3.pod
@@ -9,122 +9,222 @@ and programming support.
=head2 How do I do (anything)?
-Have you looked at CPAN (see L<perlfaq2>)? The chances are that
+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)
+Have you read the appropriate manpages? Here's a brief index:
+
+=over 4
+
+=item Basics
+
+=over 4
+
+=item L<perldata> - Perl data types
+
+=item L<perlvar> - Perl pre-defined variables
+
+=item L<perlsyn> - Perl syntax
+
+=item L<perlop> - Perl operators and precedence
+
+=item L<perlsub> - Perl subroutines
+
+=back
+
+
+=item Execution
+
+=over 4
+
+=item L<perlrun> - how to execute the Perl interpreter
+
+=item L<perldebug> - Perl debugging
+
+=back
+
+
+=item Functions
+
+=over 4
+
+=item L<perlfunc> - Perl builtin functions
+
+=back
+
+=item Objects
+
+=over 4
+
+=item L<perlref> - Perl references and nested data structures
+
+=item L<perlmod> - Perl modules (packages and symbol tables)
+
+=item L<perlobj> - Perl objects
+
+=item L<perltie> - how to hide an object class in a simple variable
+
+=back
+
+
+=item Data Structures
+
+=over 4
+
+=item L<perlref> - Perl references and nested data structures
+
+=item L<perllol> - Manipulating arrays of arrays in Perl
+
+=item L<perldsc> - Perl Data Structures Cookbook
+
+=back
+
+=item Modules
+
+=over 4
+
+=item L<perlmod> - Perl modules (packages and symbol tables)
+
+=item L<perlmodlib> - constructing new Perl modules and finding existing ones
+
+=back
+
+
+=item Regexes
+
+=over 4
+
+=item L<perlre> - Perl regular expressions
+
+=item L<perlfunc> - Perl builtin functions>
+
+=item L<perlop> - Perl operators and precedence
+
+=item L<perllocale> - Perl locale handling (internationalization and localization)
+
+=back
+
+
+=item Moving to perl5
+
+=over 4
+
+=item L<perltrap> - Perl traps for the unwary
+
+=item L<perl>
+
+=back
+
+
+=item Linking with C
+
+=over 4
+
+=item L<perlxstut> - Tutorial for writing XSUBs
+
+=item L<perlxs> - XS language reference manual
+
+=item L<perlcall> - Perl calling conventions from C
+
+=item L<perlguts> - Introduction to the Perl API
+
+=item L<perlembed> - how to embed perl in your C program
+
+=back
+
+=item Various
+
+L<http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz>
+(not a man-page but still useful, a collection of various essays on
+Perl techniques)
+
+=back
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:
+L<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
+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.
+You can also use L<Devel::REPL> which is an interactive shell for Perl,
+commonly known as a REPL - Read, Evaluate, Print, Loop. It provides
+various handy features.
=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
+ $ 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
+ $ cpan -a
-Inside a Perl program, you can use the C<ExtUtils::Installed> module to
+Inside a Perl program, you can use the L<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>).
+its magic. The standard library which comes with Perl just shows up
+as "Perl" (although you can get those with L<Module::CoreList>).
- use ExtUtils::Installed;
+ use ExtUtils::Installed;
- my $inst = ExtUtils::Installed->new();
- my @modules = $inst->modules();
+ 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>:
+can use L<File::Find::Rule>:
- use File::Find::Rule;
+ use File::Find::Rule;
- my @files = File::Find::Rule->
- extras({follow => 1})->
- file()->
- name( '*.pm' )->
- in( @INC )
- ;
+ 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:
+with L<File::Find> which is part of the standard library:
- use File::Find;
- my @files;
+ 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
- );
+ find(
+ {
+ wanted => sub {
+ push @files, $File::Find::fullname
+ if -f $File::Find::fullname && /\.pm$/
+ },
+ follow => 1,
+ follow_skip => 2,
+ },
+ @INC
+ );
- print join "\n", @files;
+ 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
+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
+ $ 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
+ $ perl -MModule::Name -e1
+
+(If you don't receive a "Can't locate ... in @INC" error message, then Perl
+found the module name you asked for.)
=head2 How do I debug my Perl programs?
@@ -136,28 +236,28 @@ 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;
+ #!/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";
+ print STDERR "The value is [$value]\n";
-The C<Data::Dumper> module can pretty-print Perl data structures:
+The L<Data::Dumper> module can pretty-print Perl data structures:
- use Data::Dumper qw( Dumper );
- print STDERR "The hash is " . Dumper( \%hash ) . "\n";
+ 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
+If you'd like a graphical user interface and you have L<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>)
+Brocard's L<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).
@@ -169,37 +269,21 @@ from Activestate (Windows and Mac OS X), or EPIC (most platforms).
(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>:
+profile your Perl programs.
- dprofpp -p program.pl
-
-The C<Devel::NYTProf> (New York Times Profiler) does both statement
+The L<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
+ 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:
+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 L<Devel::Cover> report:
- nytprofhtml
+ 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
+You might also be interested in using the L<Benchmark> to
measure and compare code snippets.
You can read more about profiling in I<Programming Perl>, chapter 20,
@@ -208,76 +292,59 @@ 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 .
+L<http://www.ddj.com/184404522> , and "Profiling in Perl"
+L<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
+by Simon Cozens, L<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 .
+L<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
+L<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 .
+L<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
+The L<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 .
+L<Perl::Tidy> comes with a perl script L<perltidy> 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, or spend much time reading
+Perl, you will probably find it useful.
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
+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
+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
+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
+it were. A more complete example, with comments, can be found at
+L<http://www.cpan.org/authors/id/TOMC/scripts/toms.exrc.gz>
=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
+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.
+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):
@@ -286,14 +353,14 @@ order of preference):
=item Eclipse
-http://e-p-i-c.sf.net/
+L<http://e-p-i-c.sf.net/>
The Eclipse Perl Integration Project integrates Perl
editing/debugging with Eclipse.
=item Enginsite
-http://www.enginsite.com/
+L<http://www.enginsite.com/>
Perl Editor by EngInSite is a complete integrated development
environment (IDE) for creating, testing, and debugging Perl scripts;
@@ -301,7 +368,7 @@ the tool runs on Windows 9x/NT/2000/XP or later.
=item Komodo
-http://www.ActiveState.com/Products/Komodo/
+L<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
@@ -309,11 +376,11 @@ debugger and remote debugging.
=item Notepad++
-http://notepad-plus.sourceforge.net/
+L<http://notepad-plus.sourceforge.net/>
=item Open Perl IDE
-http://open-perl-ide.sourceforge.net/
+L<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
@@ -321,40 +388,41 @@ under Windows 95/98/NT/2000.
=item OptiPerl
-http://www.optiperl.com/
+L<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/
+L<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.
+a native look and feel. It's open source under the Artistic License. It
+is one of the newer Perl IDEs.
=item PerlBuilder
-http://www.solutionsoft.com/perl.htm
+L<http://www.solutionsoft.com/perl.htm>
PerlBuilder is an integrated development environment for Windows that
supports Perl development.
=item visiPerl+
-http://helpconsulting.net/visiperl/
+L<http://helpconsulting.net/visiperl/index.html>
From Help Consulting, for Windows.
=item Visual Perl
-http://www.activestate.com/Products/Visual_Perl/
+L<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
+L<http://www.zeusedit.com/lookmain.html>
Zeus for Window is another Win32 multi-language editor/IDE
that comes with support for Perl.
@@ -372,32 +440,32 @@ 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/ ),
+L<http://www.textpad.com/> ) and UltraEdit ( L<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
+BBEdit ( L<http://www.bbedit.com/> ) or Alpha (
+L<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
+L<http://www.gnu.org/software/emacs/windows/ntemacs.html>
=item MicroEMACS
-http://www.microemacs.de/
+L<http://www.microemacs.de/>
=item XEmacs
-http://www.xemacs.org/Download/index.html
+L<http://www.xemacs.org/Download/index.html>
=item Jed
-http://space.mit.edu/~davis/jed/
+L<http://space.mit.edu/~davis/jed/>
=back
@@ -405,89 +473,73 @@ or a vi clone such as
=over 4
-=item Elvis
+=item Vim
-ftp://ftp.cs.pdx.edu/pub/elvis/ http://www.fh-wedel.de/elvis/
+L<http://www.vim.org/>
=item Vile
-http://dickey.his.com/vile/vile.html
-
-=item Vim
-
-http://www.vim.org/
+L<http://dickey.his.com/vile/vile.html>
=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/
+L<http://www.borland.com/codewright/>
=item MultiEdit
-http://www.MultiEdit.com/
+L<http://www.MultiEdit.com/>
=item SlickEdit
-http://www.slickedit.com/
+L<http://www.slickedit.com/>
=item ConTEXT
-http://www.contexteditor.org/
+L<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
+that is distributed with the Tk module on CPAN. The ptkdb
+( L<http://ptkdb.sourceforge.net/> ) is a Perl/Tk-based debugger that
+acts as a development environment of sorts. Perl Composer
+( L<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
+powerful shell environment for Win32. Your options include
=over 4
=item Bash
-from the Cygwin package ( http://sources.redhat.com/cygwin/ )
+from the Cygwin package ( L<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/ )
+from the MKS Toolkit ( L<http://www.mkssoftware.com/> ), or the Bourne shell of
+the U/WIN environment ( L<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/
+L<ftp://ftp.astron.com/pub/tcsh/> , see also
+L<http://www.primate.wisc.edu/software/csh-tcsh-book/>
=item Zsh
-http://www.zsh.org/
+L<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,
+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.
@@ -496,7 +548,7 @@ 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
+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).
@@ -505,48 +557,48 @@ no 32k limit).
=item Affrus
is a full Perl development environment with full debugger support
-( http://www.latenightsw.com ).
+( L<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 ).
+including Perl and HTML ( L<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/ ).
+( L<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,
+see L<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/ .
+with an embedded Perl interpreter--see L<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
+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
+(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
+For CPerlMode, see L<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 ;
+module interface to a curses library. A small demo can be found at the
+directory L<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>.
@@ -571,7 +623,7 @@ 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,
+( L<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++
@@ -579,7 +631,7 @@ documentation.
=item Gtk and Gtk2
-These are Perl bindings for the Gtk toolkit ( http://www.gtk.org ). The
+These are Perl bindings for the Gtk toolkit ( L<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
@@ -598,7 +650,7 @@ require familiarity with the C Win32 APIs, or reference to MSDN.
=item CamelBones
-CamelBones ( http://camelbones.sourceforge.net ) is a Perl interface to
+CamelBones ( L<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
@@ -620,59 +672,59 @@ again it appears not to be much used nowadays.
=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
+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
+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
+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
+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. 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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
@@ -681,46 +733,46 @@ toward this:
=over 4
-=item * Don't slurp!
+=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>) {
- # ...
- }
+ #
+ # Good Idea
+ #
+ while (my $line = <$file_handle>) {
+ # ...
+ }
instead of this:
- #
- # Bad Idea
- #
- @data = <FILE>;
- foreach (@data) {
- # ...
- }
+ #
+ # Bad Idea
+ #
+ my @data = <$file_handle>;
+ 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
+=item Use map and grep selectively
Remember that both map and grep expect a LIST argument, so doing this:
- @wanted = grep {/pattern/} <FILE>;
+ @wanted = grep {/pattern/} <$file_handle>;
will cause the entire file to be slurped. For large files, it's better
to loop:
- while (<FILE>) {
+ while (<$file_handle>) {
push(@wanted, $_) if /pattern/;
}
-=item * Avoid unnecessary quotes and stringification
+=item Avoid unnecessary quotes and stringification
Don't quote large strings unless absolutely necessary:
@@ -735,24 +787,24 @@ only makes one copy.
Ditto for stringifying large arrays:
- {
- local $, = "\n";
- print @big_array;
- }
+ {
+ local $, = "\n";
+ print @big_array;
+ }
is much more memory-efficient than either
- print join "\n", @big_array;
+ print join "\n", @big_array;
or
- {
- local $" = "\n";
- print "@big_array";
- }
+ {
+ local $" = "\n";
+ print "@big_array";
+ }
-=item * Pass by reference
+=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
@@ -761,7 +813,7 @@ 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
+=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
@@ -776,8 +828,8 @@ Yes. Perl's garbage collection system takes care of this so
everything works out right.
sub makeone {
- my @a = ( 1 .. 10 );
- return \@a;
+ my @a = ( 1 .. 10 );
+ return \@a;
}
for ( 1 .. 10 ) {
@@ -813,35 +865,41 @@ 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
+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
+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
+There are three 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
+L<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
+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/
+anything a module written in C can. For more on mod_perl, see
+L<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
+module (available from L<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.
+Finally, L<Plack> is a Perl module and toolkit that contains PSGI middleware,
+helpers and adapters to web servers, allowing you to easily deploy scripts which
+can continue running, and provides flexibility with regards to which web server
+you use. It can allow existing CGI scripts to enjoy this flexibility and
+performance with minimal changes, or can be used along with modern Perl web
+frameworks to make writing and deploying web services with Perl a breeze.
+
+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/ .
+L<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?
@@ -850,38 +908,38 @@ 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
+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
+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
+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
+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
+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
+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
+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
+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
+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
@@ -891,27 +949,27 @@ you want to be sure your license's wording will stand up in court.
(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
+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/ ).
+The Perl Archive Toolkit ( L<http://par.perl.org/> ) is Perl's
+analog to Java's JAR. It's freely available and on CPAN (
+L<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/ )
+The Perl Dev Kit ( L<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
+Perl2Exe ( L<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,...]?
@@ -921,32 +979,32 @@ 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
+"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
+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
+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/ .
+Sanchez' DropScript utility: L<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.
+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.
+Yes. Read L<perlrun> for more information. Some examples follow.
(These assume standard Unix shell quoting rules.)
# sum first and last fields
@@ -966,7 +1024,7 @@ Yes. Read L<perlrun> for more information. Some examples follow.
# display reasonable manpath
echo $PATH | perl -nl -072 -e '
- s![^/+]*$!man!&&-d&&!$s{$_}++&&push@m,$_;END{print"@m"}'
+ s![^/+]*$!man!&&-d&&!$s{$_}++&&push@m,$_;END{print"@m"}'
OK, the last one was actually an Obfuscated Perl Contest entry. :-)
@@ -974,9 +1032,9 @@ OK, the last one was actually an Obfuscated Perl Contest entry. :-)
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
+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 %%.
+or Plan9 systems. You might also have to change a single % to a %%.
For example:
@@ -997,13 +1055,13 @@ For example:
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,
+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
+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.
@@ -1011,20 +1069,24 @@ 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.
+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,
+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
+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
+ L<http://www.perl.org/CGI_MetaFAQ.html>
+
+Looking in to L<Plack> and modern Perl web frameworks is highly recommended,
+though; web programming in Perl has evolved a long way from the old days of
+simple CGI scripts.
=head2 Where can I learn about object-oriented Perl programming?
@@ -1038,9 +1100,9 @@ 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
+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
+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.
@@ -1052,8 +1114,8 @@ 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
+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>.
@@ -1078,7 +1140,7 @@ or
(contributed by brian d foy)
-The C<ExtUtils::MakeMaker> module, better known simply as "MakeMaker",
+The L<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.
@@ -1092,7 +1154,7 @@ 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
+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
+see fit. A simple comment in the code giving credit to the FAQ would
be courteous but is not required.
diff --git a/Master/tlpkg/tlperl/lib/pods/perlfaq4.pod b/Master/tlpkg/tlperl/lib/pods/perlfaq4.pod
index eb18743f822..e5de15385a5 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlfaq4.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlfaq4.pod
@@ -17,7 +17,7 @@ Scientist Should Know About Floating-Point Arithmetic"
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
+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.
@@ -25,16 +25,16 @@ 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.
+C<printf> or C<sprintf> function. See
+L<perlop/"Floating-point Arithmetic"> for more details.
- printf "%.2f", 10/3;
+ printf "%.2f", 10/3;
- my $number = sprintf "%.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
+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
@@ -43,11 +43,11 @@ First, see the answer to "Why am I getting long decimals
For example, this
- print int(0.6/0.2-2), "\n";
+ 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
+numbers. What you think in the above as 'three' is really more like
2.9999999999999995559.
=head2 Why isn't my octal data interpreted correctly?
@@ -59,64 +59,64 @@ 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';
+ my $string = '0644';
- print $string + 0; # prints 644
+ print $string + 0; # prints 644
- print $string + 44; # prints 688, certainly not octal!
+ 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
+ %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
+ chmod( 0644, $filename ); # right, has leading zero
+ chmod( oct(644), $filename ); # 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( $ARGV[0], $filename ); # wrong, even if "0644"
- chmod( oct($ARGV[0]), $file ); # correct, treat string as octal
+ chmod( oct($ARGV[0]), $filename ); # 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;
+ printf "0%o %d", $number, $number;
-=head2 Does Perl have a round() function? What about ceil() and floor()? Trig functions?
+=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
+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
+ printf("%.3f", 3.1415926535); # prints 3.142
-The C<POSIX> module (part of the standard Perl distribution)
+The L<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
+ use POSIX;
+ my $ceil = ceil(3.5); # 4
+ my $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
+In 5.000 to 5.003 perls, trigonometry was done in the L<Math::Complex>
+module. With 5.004, the L<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
+uses the L<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
+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.
@@ -124,25 +124,25 @@ 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}
+ for (my $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
+ 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
+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
+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
+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
+Some of the examples later in L<perlfaq4> use the L<Bit::Vector>
+module from CPAN. The reason you might choose L<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.
@@ -153,119 +153,119 @@ some programmers the notation might be familiar.
Using perl's built in conversion of C<0x> notation:
- $dec = 0xDEADBEEF;
+ my $dec = 0xDEADBEEF;
Using the C<hex> function:
- $dec = hex("DEADBEEF");
+ my $dec = hex("DEADBEEF");
Using C<pack>:
- $dec = unpack("N", pack("H8", substr("0" x 8 . "DEADBEEF", -8)));
+ my $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();
+ use Bit::Vector;
+ my $vec = Bit::Vector->new_Hex(32, "DEADBEEF");
+ my $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
+ my $hex = sprintf("%X", 3735928559); # upper case A-F
+ my $hex = sprintf("%x", 3735928559); # lower case a-f
Using C<unpack>:
- $hex = unpack("H*", pack("N", 3735928559));
+ my $hex = unpack("H*", pack("N", 3735928559));
-Using C<Bit::Vector>:
+Using L<Bit::Vector>:
- use Bit::Vector;
- $vec = Bit::Vector->new_Dec(32, -559038737);
- $hex = $vec->to_Hex();
+ use Bit::Vector;
+ my $vec = Bit::Vector->new_Dec(32, -559038737);
+ my $hex = $vec->to_Hex();
-And C<Bit::Vector> supports odd bit counts:
+And L<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();
+ use Bit::Vector;
+ my $vec = Bit::Vector->new_Dec(33, 3735928559);
+ $vec->Resize(32); # suppress leading 0 if unwanted
+ my $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!
+ my $dec = 033653337357; # note the leading 0!
Using the C<oct> function:
- $dec = oct("33653337357");
+ my $dec = oct("33653337357");
-Using C<Bit::Vector>:
+Using L<Bit::Vector>:
- use Bit::Vector;
- $vec = Bit::Vector->new(32);
- $vec->Chunk_List_Store(3, split(//, reverse "33653337357"));
- $dec = $vec->to_Dec();
+ use Bit::Vector;
+ my $vec = Bit::Vector->new(32);
+ $vec->Chunk_List_Store(3, split(//, reverse "33653337357"));
+ my $dec = $vec->to_Dec();
=item How do I convert from decimal to octal
Using C<sprintf>:
- $oct = sprintf("%o", 3735928559);
+ my $oct = sprintf("%o", 3735928559);
-Using C<Bit::Vector>:
+Using L<Bit::Vector>:
- use Bit::Vector;
- $vec = Bit::Vector->new_Dec(32, -559038737);
- $oct = reverse join('', $vec->Chunk_List_Read(3));
+ use Bit::Vector;
+ my $vec = Bit::Vector->new_Dec(32, -559038737);
+ my $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;
+ my $number = 0b10110110;
Using C<oct>:
- my $input = "10110110";
- $decimal = oct( "0b$input" );
+ my $input = "10110110";
+ my $decimal = oct( "0b$input" );
Using C<pack> and C<ord>:
- $decimal = ord(pack('B8', '10110110'));
+ my $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);
+ my $int = unpack("N", pack("B32",
+ substr("0" x 32 . "11110101011011011111011101111", -32)));
+ my $dec = sprintf("%d", $int);
- # substr() is used to left-pad a 32-character string with zeros.
+ # substr() is used to left-pad a 32-character string with zeros.
-Using C<Bit::Vector>:
+Using L<Bit::Vector>:
- $vec = Bit::Vector->new_Bin(32, "11011110101011011011111011101111");
- $dec = $vec->to_Dec();
+ my $vec = Bit::Vector->new_Bin(32, "11011110101011011011111011101111");
+ my $dec = $vec->to_Dec();
=item How do I convert from decimal to binary
Using C<sprintf> (perl 5.6+):
- $bin = sprintf("%b", 3735928559);
+ my $bin = sprintf("%b", 3735928559);
Using C<unpack>:
- $bin = unpack("B*", pack("N", 3735928559));
+ my $bin = unpack("B*", pack("N", 3735928559));
-Using C<Bit::Vector>:
+Using L<Bit::Vector>:
- use Bit::Vector;
- $vec = Bit::Vector->new_Dec(32, -559038737);
- $bin = $vec->to_Bin();
+ use Bit::Vector;
+ my $vec = Bit::Vector->new_Dec(32, -559038737);
+ my $bin = $vec->to_Bin();
The remaining transformations (e.g. hex -> oct, bin -> hex, etc.)
are left as an exercise to the inclined reader.
@@ -275,76 +275,76 @@ are left as an exercise to the inclined reader.
=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
+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
+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
+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,
+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") {
- # ...
- }
+ 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:
+& "\101\101">) is not a false value in Perl. You need:
- if ( ("\020\020" & "\101\101") !~ /[^\000]/) {
- # ...
- }
+ 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).
+Use the L<Math::Matrix> or L<Math::MatrixReal> modules (available from CPAN)
+or the L<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;
+ my @results = map { my_func($_) } @array;
For example:
- @triple = map { 3 * $_ } @single;
+ my @triple = map { 3 * $_ } @single;
To call a function on each element of an array, but ignore the
results:
- foreach $iterator (@array) {
- some_func($iterator);
- }
+ foreach my $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);
+ my @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:
+but you should be aware that in this form, the C<..> operator
+creates a list of all integers in the range, which can take a lot of
+memory for large ranges. However, the problem does not occur when
+using C<..> within a C<for> loop, because in that case the range
+operator is optimized to I<iterate> over the range, without creating
+the entire list. So
- @results = ();
- for ($i=5; $i <= 500_005; $i++) {
- push(@results, some_func($i));
- }
+ my @results = ();
+ for my $i (5 .. 500_005) {
+ 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.
+or even
- for my $i (5 .. 500_005) {
- push(@results, some_func($i));
- }
+ push(@results, some_func($_)) for 5 .. 500_005;
-will not create a list of 500,000 integers.
+will not create an intermediate list of 500,000 integers.
=head2 How can I output Roman numerals?
@@ -355,26 +355,31 @@ Get the L<http://www.cpan.org/modules/by-module/Roman> module.
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 }
+ BEGIN { srand() if $] < 5.004 }
-5.004 and later automatically call C<srand> at the beginning. Don't
+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
+(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
+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/>.
+Perl relies on the underlying system for the implementation of
+C<rand> and C<srand>; on some systems, the generated numbers are
+not random enough (especially on Windows : see
+L<http://www.perlmonks.org/?node_id=803632>).
+Several CPAN modules in the C<Math> namespace implement better
+pseudorandom generators; see for example
+L<Math::Random::MT> ("Mersenne Twister", fast), or
+L<Math::TrulyRandom> (uses the imperfections in the system's
+timer to generate random numbers, which is rather slow).
+More algorithms for random numbers are described in
+"Numerical Recipes in C" at L<http://www.nr.com/>
=head2 How do I get a random number between X and Y?
@@ -389,19 +394,19 @@ 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 )
+ 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);
- }
+ 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
@@ -411,48 +416,48 @@ 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];
+ my $day_of_year = (localtime)[7];
-The C<POSIX> module can also format a date as the day of the year or
+The L<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;
+ 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
+To get the day of year for any date, use L<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 ) );
+ 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
+You can also use L<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;
+ 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:
+The L<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 );
+ 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_century {
+ return int((((localtime(shift || time))[5] + 1999))/100);
+ }
- sub get_millennium {
- return 1+int((((localtime(shift || time))[5] + 1899))/1000);
- }
+ 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
+On some systems, the L<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
@@ -464,73 +469,73 @@ millennium.
(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.
+Life isn't always that simple though.
-The C<Time::Piece> module, which comes with Perl, replaces C<localtime>
+The L<Time::Piece> module, which comes with Perl, replaces L<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";
- }
+ use Time::Piece;
+ my $date1 = localtime( $some_time );
+ my $date2 = localtime( $some_other_time );
-You can also get differences with a subtraction, which returns a
-C<Time::Seconds> object:
+ if( $date1 < $date2 ) {
+ print "The date was in the past\n";
+ }
+
+You can also get differences with a subtraction, which returns a
+L<Time::Seconds> object:
- my $diff = $date1 - $date2;
- print "The difference is ", $date_diff->days, " days\n";
+ 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.
+If you want to work with formatted dates, the L<Date::Manip>,
+L<Date::Calc>, or L<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.
+L<Time::Local> module. Otherwise, you should look into the L<Date::Calc>,
+L<Date::Parse>, and L<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,
+You can use the L<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
+ $ perl -MTime::Piece -le 'print localtime->julian_day'
+ 2455607.7959375
Or the modified Julian Day:
- $ perl -MTime::Piece -le 'print localtime->mjd'
- 55607.2961226851
+ $ 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
+ $ perl -MTime::Piece -le 'print localtime->yday'
+ 45
-You can also do the same things with the C<DateTime> module:
+You can also do the same things with the L<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
+ $ 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
+You can use the L<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
+different ideas about Julian days (see L<http://www.hermetic.ch/cal_stud/jdn.htm>
for instance):
- $ perl -MTime::JulianDay -le 'print local_julian_day( time )'
- 55608
+ $ 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>
@@ -540,56 +545,56 @@ 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
+work with calendars instead of times. The L<DateTime> module makes it
simple, and give you the same time of day, only the day before,
despite daylight saving time changes:
- use DateTime;
+ use DateTime;
- my $yesterday = DateTime->now->subtract( days => 1 );
+ my $yesterday = DateTime->now->subtract( days => 1 );
- print "Yesterday was $yesterday\n";
+ print "Yesterday was $yesterday\n";
-You can also use the C<Date::Calc> module using its C<Today_and_Now>
+You can also use the L<Date::Calc> module using its C<Today_and_Now>
function.
- use Date::Calc qw( Today_and_Now Add_Delta_DHMS );
+ use Date::Calc qw( Today_and_Now Add_Delta_DHMS );
- my @date_time = Add_Delta_DHMS( Today_and_Now(), -1, 0, 0, 0 );
+ my @date_time = Add_Delta_DHMS( Today_and_Now(), -1, 0, 0, 0 );
- print "@date_time\n";
+ 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
+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
+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
+Starting with Perl 5.10, L<Time::Piece> and L<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";
+ 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
+The L<Time::Piece> module exports a new C<localtime> that returns an
+object, and L<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
+You have the same problem with L<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;
+ # 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?
@@ -603,15 +608,15 @@ 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
+ % 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
+ % 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.
@@ -625,19 +630,19 @@ though.
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>.
+in their names, along with other modules such as L<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>.
+as L<Business::ISBN>, L<Business::CreditCard>, L<Email::Valid>,
+and L<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<\>)
+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;
+ s/\\(.)/$1/g;
This won't expand C<"\n"> or C<"\t"> or any other special escapes.
@@ -652,7 +657,7 @@ 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;
+ 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
@@ -663,8 +668,8 @@ 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
+ 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?
@@ -676,7 +681,7 @@ 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";
+ 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
@@ -685,106 +690,84 @@ 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 ${\(scalar localtime)}.\n"
- print "The time is ${ my $x = localtime; \$x }.\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 }
+ sub timestamp { my $t = localtime; \$t }
- print "The time is ${ timestamp() }.\n";
+ 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";
+ 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";
+ 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
+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] );
+C</alpha(.*?)omega/> would be needed. For nested patterns
+and/or balanced expressions, see the so-called
+L<< (?PARNO)|perlre/C<(?PARNO)> C<(?-PARNO)> C<(?+PARNO)> C<(?R)> C<(?0)> >>
+construct (available since perl 5.10).
+The CPAN module L<Regexp::Common> can help to build such
+regular expressions (see in particular
+L<Regexp::Common::balanced> and L<Regexp::Common::delimited>).
+
+More complex cases will require to write a parser, probably
+using a parsing module from CPAN, like
+L<Regexp::Grammars>, L<Parse::RecDescent>, L<Parse::Yapp>,
+L<Text::Balanced>, or L<Marpa::XS>.
=head2 How do I reverse a string?
Use C<reverse()> in scalar context, as documented in
L<perlfunc/reverse>.
- $reversed = reverse $string;
+ my $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;
+ 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
+Or you can just use the L<Text::Tabs> module (part of the standard Perl
distribution).
- use Text::Tabs;
- @expanded_lines = expand(@lines_with_tabs);
+ use Text::Tabs;
+ my @expanded_lines = expand(@lines_with_tabs);
=head2 How do I reformat a paragraph?
-Use C<Text::Wrap> (part of the standard Perl distribution):
+Use L<Text::Wrap> (part of the standard Perl distribution):
- use Text::Wrap;
- print wrap("\t", ' ', @paragraphs);
+ 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).
+The paragraphs you give to L<Text::Wrap> should not contain embedded
+newlines. L<Text::Wrap> doesn't justify the lines (flush-right).
-Or use the CPAN module C<Text::Autoformat>. Formatting files can be
+Or use the CPAN module L<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}' $*"
+ alias fmt="perl -i -MText::Autoformat -n0777 \
+ -e 'print autoformat $_, {all=>1}' $*"
-See the documentation for C<Text::Autoformat> to appreciate its many
+See the documentation for L<Text::Autoformat> to appreciate its many
capabilities.
=head2 How can I access or change N characters of a string?
@@ -794,73 +777,74 @@ 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'
+ my $string = "Just another Perl Hacker";
+ my $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" );
+ substr( $string, 13, 4, "Perl 5.8.0" );
You can also use substr() as an lvalue.
- substr( $string, 13, 4 ) = "Perl 5.8.0";
+ 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
+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
+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;
+ $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";
- }
- }
+ $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;
+ /(?:\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
+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";
+ my $string = "ThisXlineXhasXsomeXx'sXinXit";
+ my $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,
+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
+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";
+ my $string = "-9 55 48 -2 23 -76 4 14 -44";
+ my $count = 0;
+ 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;
+ my $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>
@@ -870,20 +854,20 @@ X<Text::Autoformat> X<capitalize> X<case, title> X<case, sentence>
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";
+ 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";
- }
+ 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
+ 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
@@ -891,52 +875,57 @@ 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) #at the beginning of the line
+ | # or
+ (\s\w) #preceded by whitespace
+ )
+ /\U$1/xg;
- $string =~ s/([\w']+)/\u\L$1/g;
+ $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.
+Several modules can handle this sort of parsing--L<Text::Balanced>,
+L<Text::CSV>, L<Text::CSV_XS>, and L<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
+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"
+ 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
+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 ',';
+ my @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
+Alternatively, the L<Text::ParseWords> module (part of the standard
Perl distribution) lets you say:
- use Text::ParseWords;
- @new = quotewords(",", 0, $text);
+ use Text::ParseWords;
+ @new = quotewords(",", 0, $text);
+
+For parsing or generating CSV, though, using L<Text::CSV> rather than
+implementing it yourself is highly recommended; you'll save yourself odd bugs
+popping up later by just using code which has already been tried and tested in
+production for years.
=head2 How do I strip blank space from the beginning/end of a string?
@@ -946,14 +935,14 @@ 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+$//;
+ 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;
+ 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
@@ -965,10 +954,10 @@ 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";
- }
+ 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
@@ -976,7 +965,7 @@ logical line in the string by adding the C</m> flag (for
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;
+ $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
@@ -984,7 +973,7 @@ 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;
+ $string =~ s/^[\t\f ]+|[\t\f ]+$//mg;
=head2 How do I pad a string with blanks or pad a number with zeroes?
@@ -1001,35 +990,35 @@ 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
+ # Left padding a string with blanks (no truncation):
+ my $padded = sprintf("%${pad_len}s", $text);
+ my $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
+ # Right padding a string with blanks (no truncation):
+ my $padded = sprintf("%-${pad_len}s", $text);
+ my $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
+ # Left padding a number with 0 (no truncation):
+ my $padded = sprintf("%0${pad_len}d", $num);
+ my $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);
+ # Right padding a string with blanks using pack (will truncate):
+ my $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
+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 ) );
+ my $padded = $pad_char x ( $pad_len - length( $text ) ) . $text;
+ my $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 ) );
+ 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?
@@ -1038,31 +1027,31 @@ Left and right padding with any character, modifying C<$text> directly:
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 );
+ 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 /\s+/, $line;
+ # ( '', 'fred', 'barney', 'betty' );
- my $line = 'fred||barney||betty';
- my @columns = split /\|/, $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>.
+handle that format, such as L<Text::CSV>, L<Text::CSV_XS>, or
+L<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" );
+ 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.
@@ -1071,36 +1060,36 @@ spaces. If you have space separated data, you may want C<split> instead.
(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.
+You can use the C<Text::Soundex> module. If you want to do fuzzy or close
+matching, you might also try the L<String::Approx>, and
+L<Text::Metaphone>, and L<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
+such as L<Text::Template> or L<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;
+ 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';
+ 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
+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'
+ $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
@@ -1115,49 +1104,49 @@ 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 $string = 'This has $foo and $bar';
- my %Replacements = (
- foo => 'Fred',
- );
+ my %Replacements = (
+ foo => 'Fred',
+ );
- # $string =~ s/\$(\w+)/$Replacements{$1}/g;
- $string =~ s/\$(\w+)/
- exists $Replacements{$1} ? $Replacements{$1} : '???'
- /eg;
+ # $string =~ s/\$(\w+)/$Replacements{$1}/g;
+ $string =~ s/\$(\w+)/
+ exists $Replacements{$1} ? $Replacements{$1} : '???'
+ /eg;
- print $string;
+ 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
+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
+ print "$var"; # BAD
+ my $new = "$old"; # BAD
+ somefunc("$var"); # BAD
-You'll be in trouble. Those should (in 99.8% of the cases) be
+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);
+ print $var;
+ my $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
- }
+ 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
@@ -1166,9 +1155,9 @@ syscall() function.
Stringification also destroys arrays.
- @lines = `command`;
- print "@lines"; # WRONG - extra blanks
- print @lines; # right
+ my @lines = `command`;
+ print "@lines"; # WRONG - extra blanks
+ print @lines; # right
=head2 Why don't my E<lt>E<lt>HERE documents work?
@@ -1190,7 +1179,7 @@ If you want to indent the text in the here document, you
can do this:
# all in one
- ($VAR = <<HERE_TARGET) =~ s/^\s+//gm;
+ (my $VAR = <<HERE_TARGET) =~ s/^\s+//gm;
your text
goes here
HERE_TARGET
@@ -1199,18 +1188,18 @@ 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;
+ (my $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
+ 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.
+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
+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.
@@ -1228,29 +1217,29 @@ subsequent line.
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
+ my $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;
+ my $poem = fix<<EVER_ON_AND_ON;
Now far ahead the Road has gone,
- And I must follow, if I can,
+ And I must follow, if I can,
Pursuing it with eager feet,
- Until it joins some larger way
+ 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
+ And whither then? I cannot say.
+ --Bilbo in /usr/src/perl/pp_ctl.c
+ EVER_ON_AND_ON
=head1 Data: Arrays
@@ -1262,20 +1251,20 @@ 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];
+ # slices
+ ( 'dog', 'cat', 'bird' )[2,3];
+ @animals[2,3];
- # iteration
- foreach ( qw( dog cat bird ) ) { ... }
- foreach ( @animals ) { ... }
+ # iteration
+ foreach ( qw( dog cat bird ) ) { ... }
+ foreach ( @animals ) { ... }
- my @three = grep { length == 3 } qw( dog cat bird );
- my @three = grep { length == 3 } @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 );
+ # 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
@@ -1284,21 +1273,21 @@ 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
+ $#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!
+ $animals[0] = 'Rottweiler';
+ qw( dog cat bird )[0] = 'Rottweiler'; # syntax error!
- foreach ( @animals ) {
- s/^d/fr/; # works fine
- }
+ foreach ( @animals ) {
+ s/^d/fr/; # works fine
+ }
- foreach ( qw( dog cat bird ) ) {
- s/^d/fr/; # Error! Modification of read only value!
- }
+ 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
@@ -1310,14 +1299,14 @@ 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
+ 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
+ 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
@@ -1327,7 +1316,7 @@ 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
+ my $scalar = ( 1, 2, 3 ); # $scalar gets 3, accidentally
=head2 What is the difference between $array[1] and @array[1]?
@@ -1355,13 +1344,13 @@ 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>;
+ $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
+ @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.
@@ -1378,21 +1367,21 @@ 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 %hash = map { $_, 1 } @array;
+ # or a hash slice: @hash{ @array } = ();
+ # or a foreach: $hash{$_} = 1 foreach ( @array );
- my @unique = keys %hash;
+ 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,
+L<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);
+ 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
+ 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
@@ -1404,216 +1393,217 @@ 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 = ();
+ my @unique = ();
+ my %seen = ();
- foreach my $elem ( @array )
- {
- next if $seen{ $elem }++;
- push @unique, $elem;
- }
+ 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;
+ 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.
+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
+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;
+ use 5.010;
- if( $item ~~ @array )
- {
- say "The array contains $item"
- }
+ if( $item ~~ @array ) {
+ say "The array contains $item"
+ }
- if( $item ~~ %hash )
- {
- say "The hash 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 }
+ my @blues = qw/azure cerulean teal turquoise lapis-lazuli/;
+ my %is_blue = ();
+ for (@blues) { $is_blue{$_} = 1 }
-Now you can check whether C<$is_blue{$some_color}>. It might have
+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:
+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;
+ my @primes = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31);
+ my @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 }
+ my @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
+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
+If you are testing only once, the standard module L<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;
- }
+ 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;
+ 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;
+ 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?
+=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
+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;
- }
+ my (@union, @intersection, @difference);
+ my %count = ();
+ foreach my $element (@array1, @array2) { $count{$element}++ }
+ foreach my $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.
+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;
+ use 5.010;
- if( @array1 ~~ @array2 )
- {
- say "The arrays are the same";
- }
+ if( @array1 ~~ @array2 ) {
+ say "The arrays are the same";
+ }
- if( %hash1 ~~ %hash2 ) # doesn't check values!
- {
- say "The hash keys 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
+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.
+undefined empty strings. Modify if you have other needs.
- $are_equal = compare_arrays(\@frogs, \@toads);
+ $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;
- }
+ 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>:
+like this one. It uses the CPAN module L<FreezeThaw>:
- use FreezeThaw qw(cmpStr);
- @a = @b = ( "this", "that", [ "more", "stuff" ] );
+ use FreezeThaw qw(cmpStr);
+ my @a = my @b = ( "this", "that", [ "more", "stuff" ] );
- printf "a and b contain %s arrays\n",
- cmpStr(\@a, \@b) == 0
- ? "the same"
- : "different";
+ 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
+This approach also works for comparing hashes. Here we'll demonstrate
two different answers:
- use FreezeThaw qw(cmpStr cmpStrHard);
+ use FreezeThaw qw(cmpStr cmpStrHard);
- %a = %b = ( "this" => "that", "extra" => [ "more", "stuff" ] );
- $a{EXTRA} = \%b;
- $b{EXTRA} = \%a;
+ my %a = my %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",
+ cmpStr(\%a, \%b) == 0 ? "the same" : "different";
- printf "a and b contain %s hashes\n",
- cmpStrHard(\%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
+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
+use the C<first()> function in the L<List::Util> module, which comes
with Perl 5.8. This example finds the first element that contains
"Perl".
- use List::Util qw(first);
+ use List::Util qw(first);
- my $element = first { /Perl/ } @array;
+ my $element = first { /Perl/ } @array;
+
+If you cannot use L<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 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.
+If you want the array index, use the C<firstidx()> function from
+C<List::MoreUtils>:
- my $found;
- foreach ( @array ) {
- if( /Perl/ ) { $found = $_; last }
- }
+ use List::MoreUtils qw(firstidx);
+ my $index = firstidx { /Perl/ } @array;
-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.
+Or write it yourself, iterating through the indices
+and checking 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;
- }
- }
+ 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?
@@ -1632,8 +1622,8 @@ 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.
+Linked Lists" ( L<http://www.slideshare.net/lembark/perly-linked-lists> ),
+although you can just use his L<LinkedList::Single> module.
=head2 How do I handle circular lists?
X<circular> X<array> X<Tie::Cycle> X<Array::Iterator::Circular>
@@ -1644,65 +1634,65 @@ X<cycle> X<modulus>
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;
+ my @array = qw( a b c );
+ my $i = 0;
- while( 1 ) {
- print $array[ $i++ % @array ], "\n";
- last if $i > 20;
- }
+ 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
+You can also use L<Tie::Cycle> to use a scalar that always has the
next element of the circular array:
- use Tie::Cycle;
+ use Tie::Cycle;
- tie my $cycle, 'Tie::Cycle', [ qw( FFFFFF 000000 FFFF00 ) ];
+ tie my $cycle, 'Tie::Cycle', [ qw( FFFFFF 000000 FFFF00 ) ];
- print $cycle; # FFFFFF
- print $cycle; # 000000
- print $cycle; # FFFF00
+ print $cycle; # FFFFFF
+ print $cycle; # 000000
+ print $cycle; # FFFF00
-The C<Array::Iterator::Circular> creates an iterator object for
+The L<Array::Iterator::Circular> creates an iterator object for
circular arrays:
- use Array::Iterator::Circular;
+ use Array::Iterator::Circular;
- my $color_iterator = Array::Iterator::Circular->new(
- qw(red green blue orange)
- );
+ my $color_iterator = Array::Iterator::Circular->new(
+ qw(red green blue orange)
+ );
- foreach ( 1 .. 20 ) {
- print $color_iterator->next, "\n";
- }
+ 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';
+ use List::Util 'shuffle';
- @shuffled = shuffle(@list);
+ @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!
+ 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];
- }
- }
+ 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;
+ # 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
@@ -1711,12 +1701,12 @@ 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));
- }
+ 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).
@@ -1727,31 +1717,32 @@ won't notice this until you have rather largish arrays.
Use C<for>/C<foreach>:
- for (@lines) {
- s/foo/bar/; # change that word
- tr/XZ/ZX/; # swap those letters
- }
+ 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
- }
+ my @volumes = @radii;
+ for (@volumes) { # @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;
+ my @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
+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;
- }
+ for my $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
@@ -1762,64 +1753,64 @@ the hash is to be modified.
Use the C<rand()> function (see L<perlfunc/rand>):
- $index = rand @array;
- $element = $array[$index];
+ my $index = rand @array;
+ my $element = $array[$index];
Or, simply:
- my $element = $array[ rand @array ];
+ 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
+Use the L<List::Permutor> module on CPAN. If the list is actually an
+array, try the L<Algorithm::Permute> module (also on CPAN). It's
written in XS code and is very efficient:
- use Algorithm::Permute;
+ use Algorithm::Permute;
- my @array = 'a'..'d';
- my $p_iterator = Algorithm::Permute->new ( \@array );
+ my @array = 'a'..'d';
+ my $p_iterator = Algorithm::Permute->new ( \@array );
- while (my @perm = $p_iterator->next) {
- print "next permutation: (@perm)\n";
- }
+ while (my @perm = $p_iterator->next) {
+ print "next permutation: (@perm)\n";
+ }
For even faster execution, you could do:
- use Algorithm::Permute;
+ use Algorithm::Permute;
- my @array = 'a'..'d';
+ my @array = 'a'..'d';
- Algorithm::Permute::permute {
- print "next permutation: (@array)\n";
- } @array;
+ 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
+ #!/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 L<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,
@@ -1829,7 +1820,7 @@ 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);
+ use Algorithm::Loops qw(NextPermuteNum);
my @list= 0..9;
do { print "@list\n" } while NextPermuteNum @list;
@@ -1838,46 +1829,47 @@ you can enumerate all the permutations of C<0..9> like this:
Supply a comparison function to sort() (described in L<perlfunc/sort>):
- @list = sort { $a <=> $b } @list;
+ @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
+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
+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
+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 ];
+ my @idx;
+ for (@data) {
+ my $item;
+ ($item) = /\d+\s*(\S+)/;
+ push @idx, uc($item);
+ }
+ my @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;
+ my @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;
+ my @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
+To Know" collection in L<http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz> for
more about this approach.
See also the question later in L<perlfaq4> on sorting hashes.
@@ -1892,11 +1884,11 @@ For example, you don't have to store individual bits in an array
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[$_];
- }
+ my @ints = (...); # array of bits, e.g. ( 1, 0, 0, 1, 1, 0 ... )
+ my $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
@@ -1905,37 +1897,37 @@ 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;
- }
+ 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.)
@@ -1943,66 +1935,66 @@ This method gets faster the more sparse the bit vector is.
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;
- }
+ while($vec =~ /[^\0]+/g ) {
+ push @ints, grep vec($vec, $_, 1), $-[0] * 8 .. $+[0] * 8;
+ }
-Or use the CPAN module C<Bit::Vector>:
+Or use the CPAN module L<Bit::Vector>:
- $vector = Bit::Vector->new($num_of_bits);
- $vector->Index_List_Store(@ints);
- @ints = $vector->Index_List_Read();
+ my $vector = Bit::Vector->new($num_of_bits);
+ $vector->Index_List_Store(@ints);
+ my @ints = $vector->Index_List_Read();
-C<Bit::Vector> provides efficient methods for bit vector, sets of
+L<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";
- }
+ # vec demo
+ my $vector = "\xff\x0f\xef\xfe";
+ print "Ilya's string \\xff\\x0f\\xef\\xfe represents the number ",
+ unpack("N", $vector), "\n";
+ my $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>
+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)
@@ -2019,36 +2011,36 @@ 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}
- ...
- }
+ 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}
- ...
- }
+ 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}
- ...
- }
+ 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 ) ) {
- ...
- }
+ 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.
@@ -2057,8 +2049,8 @@ 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
+you mix C<keys>, C<values>, or C<each> on the same hash, you risk resetting
+the iterator and messing up your processing. See the C<each> entry in
L<perlfunc> for more details.
=head2 How do I merge two hashes?
@@ -2076,46 +2068,40 @@ to a new hash (C<%new_hash>), then add the keys from the other hash
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};
- }
- }
+ 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};
- }
- }
+ 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;
+ @hash1{ keys %hash2 } = values %hash2;
=head2 What happens if I add or remove keys from a hash while iterating over it?
@@ -2124,32 +2110,32 @@ from C<%hash2> replace values from C<%hash1> when they have keys in common:
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
+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
+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};
+ my %by_value = reverse %by_key;
+ my $key = $by_value{$value};
-That's not particularly efficient. It would be more space-efficient
+That's not particularly efficient. It would be more space-efficient
to use:
- while (($key, $value) = each %by_key) {
- $by_value{$value} = $key;
- }
+ while (my ($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
+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;
- }
+ while (my ($key, $value) = each %by_key) {
+ push @{$key_list_by_value{$value}}, $key;
+ }
=head2 How can I know how many entries are in a hash?
@@ -2161,23 +2147,23 @@ 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!
+ 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;
+ 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;
+ 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;
+ 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
@@ -2193,23 +2179,20 @@ 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;
+ my @keys = sort { $a cmp $b } keys %hash;
- foreach my $key ( @keys )
- {
- printf "%-20s %6d\n", $key, $hash{$key};
- }
+ 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.
+C<lc> to lowercase the keys before comparing them:
- my @keys = sort { "\L$a" cmp "\L$b" } keys %hash;
+ my @keys = sort { lc $a cmp lc $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
@@ -2219,23 +2202,23 @@ 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;
+ 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;
+ 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
+Databases">. The L<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? :)
@@ -2243,81 +2226,81 @@ 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,
+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
+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>)
+will return true. This corresponds to (C<$key>, C<undef>)
being in the hash.
-Pictures help... Here's the C<%hash> table:
+Pictures help... Here's the C<%hash> table:
- keys values
- +------+------+
- | a | 3 |
- | x | 7 |
- | d | 0 |
- | e | 2 |
- +------+------+
+ 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
+ $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'}
+ undef $hash{'a'}
your table now reads:
- keys values
- +------+------+
- | a | undef|
- | x | 7 |
- | d | 0 |
- | e | 2 |
- +------+------+
+ 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
+ $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'}
+ delete $hash{'a'}
your table now reads:
- keys values
- +------+------+
- | x | 7 |
- | d | 0 |
- | e | 2 |
- +------+------+
+ 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
+ $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!
@@ -2337,36 +2320,36 @@ 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.
+ 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:
+the "removing duplicates" problem described above. For example:
- %seen = ();
- for $element (keys(%foo), keys(%bar)) {
- $seen{$element}++;
- }
- @uniq = keys %seen;
+ my %seen = ();
+ for my $element (keys(%foo), keys(%bar)) {
+ $seen{$element}++;
+ }
+ my @uniq = keys %seen;
Or more succinctly:
- @uniq = keys %{{%foo,%bar}};
+ my @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;
+ my %seen = ();
+ while (defined ($key = each %foo)) {
+ $seen{$key}++;
+ }
+ while (defined ($key = each %bar)) {
+ $seen{$key}++;
+ }
+ my @uniq = keys %seen;
=head2 How can I store a multidimensional array in a DBM file?
@@ -2377,18 +2360,18 @@ 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 the L<Tie::IxHash> from CPAN.
- use Tie::IxHash;
+ use Tie::IxHash;
- tie my %myhash, 'Tie::IxHash';
+ tie my %myhash, 'Tie::IxHash';
- for (my $i=0; $i<20; $i++) {
- $myhash{$i} = 2*$i;
- }
+ for (my $i=0; $i<20; $i++) {
+ $myhash{$i} = 2*$i;
+ }
- my @keys = keys %myhash;
- # @keys = (0,1,2,3,...)
+ my @keys = keys %myhash;
+ # @keys = (0,1,2,3,...)
=head2 Why does passing a subroutine an undefined element in a hash create it?
@@ -2399,54 +2382,54 @@ 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' };
+ 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' };
+ 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;
- }
+ 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' };
+ print "This will print, even after 5.004\n" if exists $hash{ 'foo' };
- sub my_sub {
- $_[0] = 'bar';
- }
+ 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/ } );
+ 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"],
- };
+ $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
+L<perllol>. Examples of structures and object-oriented classes are
in L<perltoot>.
=head2 How can I use a reference as a hash key?
@@ -2481,69 +2464,75 @@ required work for you.
(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:
+The trick to this problem is avoiding accidental autovivification. If
+you want to check three keys deep, you might naE<0xEF>vely try this:
- my %hash;
- if( exists $hash{key1}{key2}{key3} ) {
- ...;
- }
+ my %hash;
+ if( exists $hash{key1}{key2}{key3} ) {
+ ...;
+ }
-Even though you started with a completely empty hash, after that call to
+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' => {}
- }
- );
+ %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} ) {
- ...;
- }
- }
+ {
+ 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>
+The L<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);
-
+ 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;
- }
+L<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;
+ }
+
+=head2 How can I prevent addition of unwanted keys into a hash?
+
+Since version 5.8.0, hashes can be I<restricted> to a fixed number
+of given keys. Methods for creating and dealing with restricted hashes
+are exported by the L<Hash::Util> module.
=head1 Data: Misc
@@ -2558,36 +2547,36 @@ 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.
+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" }
- }
+ 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. Thirdly, there is L<Regexp::Common> which has regular
expressions to match various types of numbers. Those three modules are
available from the CPAN.
@@ -2599,22 +2588,22 @@ 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]) }
+ 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.
@@ -2622,34 +2611,34 @@ 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>
+See L<AnyDBM_File>. More generically, you should consult the L<FreezeThaw>
+or L<Storable> modules from CPAN. Starting from Perl 5.8, L<Storable> is part
+of the standard distribution. Here's one example using L<Storable>'s C<store>
and C<retrieve> functions:
- use Storable;
- store(\%hash, "filename");
+ use Storable;
+ store(\%hash, "filename");
- # later on...
- $href = retrieve("filename"); # by ref
- %hash = %{ retrieve("filename") }; # direct to hash
+ # 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
+The L<Data::Dumper> module on CPAN (or the 5.005 release of Perl) is great
+for printing out data structures. The L<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);
+ 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,
+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) };
+ %newhash = %{ dclone(\%oldhash) };
=head2 How do I define methods for every class/object?
@@ -2664,16 +2653,17 @@ Moose that supports roles.
=head2 How do I verify a credit card checksum?
-Get the C<Business::CreditCard> module from CPAN.
+Get the L<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.
+The arrays.h/arrays.c code in the L<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.
+the L<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
@@ -2683,7 +2673,7 @@ 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
+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
+or for profit as you see fit. A simple comment in the code giving
credit would be courteous but is not required.
diff --git a/Master/tlpkg/tlperl/lib/pods/perlfaq5.pod b/Master/tlpkg/tlperl/lib/pods/perlfaq5.pod
index 76b6d3e0e2e..60bd08306d5 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlfaq5.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlfaq5.pod
@@ -7,13 +7,13 @@ perlfaq5 - Files and Formats
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?
+=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 .
+at L<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.
@@ -22,76 +22,75 @@ 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;
+ # long wait, then row of dots all at once
+ while( <> ) {
+ print ".";
+ print "\n" unless ++$count % 50;
- #... expensive line processing operations
- }
+ #... 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;
+ # dot shown immediately
+ while( <> ) {
+ print ".";
+ print "\n" unless ++$count % 50;
- #... expensive line processing operations
- }
+ #... 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;
- }
+ {
+ 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" );
+ binmode( STDOUT, ":unix" );
- while( 1 ) {
- sleep 1;
- print ".";
- print "\n" unless ++$count % 50;
- }
+ 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.
+and L<open> in L<perlfunc>, and the L<PerlIO> module documentation.
-If you are using C<IO::Handle> or one of its subclasses, you can
+If you are using L<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);
+ 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 L<IO::Handle> objects also have a C<flush> method. You can flush
the buffer any time you want without auto-buffering
- $io_fh->flush;
+ $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>
@@ -103,20 +102,19 @@ 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.
+such as L<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: $!";
+ 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 $_;
- }
+ while( <$in> ) {
+ print $out $_;
+ }
- close $out;
+ close $out;
Within that basic form, add the parts that you need to insert, change,
or delete lines.
@@ -124,91 +122,85 @@ 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: $!";
+ 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
+ print $out "# Add this line to the top\n"; # <--- HERE'S THE MAGIC
- while( <$in> )
- {
- print $out $_;
- }
+ while( <$in> ) {
+ print $out $_;
+ }
- close $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: $!";
+ 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";
+ print $out "# Add this line to the top\n";
- while( <$in> )
- {
- s/\b(perl)\b/Perl/g;
- print $out $_;
- }
+ while( <$in> ) {
+ s/\b(perl)\b/Perl/g;
+ print $out $_;
+ }
- close $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
- }
+ 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;
+ my $line = <$in>;
+ $line =~ s/\b(perl)\b/Perl/g;
+ print $out $line;
- while( <$in> ) # print the rest of the lines
- {
- print $out $_;
- }
+ 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 $_;
- }
+ 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 $_;
- }
+ 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: $!";
+ 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!
+ my @lines = do { local $/; <$in> }; # slurp!
- # do your magic here
+ # do your magic here
- print $out @lines;
+ print $out @lines;
-Modules such as C<File::Slurp> and C<Tie::File> can help with that
+Modules such as L<File::Slurp> and L<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.
@@ -221,42 +213,38 @@ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ perl -ni -e 'print if /d/' inFile.txt
=head2 How do I count the number of lines in a file?
X<file, counting lines> X<lines> X<line>
@@ -266,58 +254,58 @@ X<file, counting lines> X<lines> X<line>
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++; }
+ 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 = $.;
+ 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 '} print $.; {' file
- % perl -lne 'END { 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;
+ 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;
+ 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
+ #!perl -T
- $ENV{PATH} = undef;
+ $ENV{PATH} = undef;
- my $lines;
- if( $filename =~ /^([0-9a-z_.]+)\z/ ) {
- $lines = `/usr/bin/wc -l $1`
- chomp $lines;
- }
+ 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>
@@ -333,34 +321,33 @@ 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
+One trick is to use L<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;
+ use File::ReadBackwards;
- my $filename = 'test.txt';
- my $Lines_to_truncate = 2;
+ my $filename = 'test.txt';
+ my $Lines_to_truncate = 2;
- my $bw = File::ReadBackwards->new( $filename )
- or die "Could not read backwards in [$filename]: $!";
+ 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++;
- }
+ 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 );
+ truncate( $filename, $bw->tell );
-The C<File::ReadBackwards> module also has the advantage of setting
+The L<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
+You can also use the L<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>.
@@ -373,19 +360,19 @@ 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
+ # ...
+ {
+ 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
@@ -396,15 +383,15 @@ 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
+Use the L<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;
+ use File::Copy;
- copy( $original, $new_copy ) or die "Copy failed: $!";
+ copy( $original, $new_copy ) or die "Copy failed: $!";
-If you can't use C<File::Copy>, you'll have to do the work yourself:
+If you can't use L<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.
@@ -416,55 +403,54 @@ 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 $!;
+ open my $tmp, '+>', undef or die $!;
Otherwise, you can use the File::Temp module.
- use File::Temp qw/ tempfile tempdir /;
+ use File::Temp qw/ tempfile tempdir /;
- my $dir = tempdir( CLEANUP => 1 );
- ($fh, $filename) = tempfile( DIR => $dir );
+ my $dir = tempdir( CLEANUP => 1 );
+ ($fh, $filename) = tempfile( DIR => $dir );
- # or if you don't need to know the filename
+ # or if you don't need to know the filename
- my $fh = tempfile( DIR => $dir );
+ 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: $!";
+ 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 ();
- }
- }
-
- }
+ 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>
@@ -478,27 +464,27 @@ 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";
- }
+ # 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?
+=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
@@ -506,13 +492,13 @@ 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 my $fh, $file_name;
- open local $fh, $file_name;
+ open local $fh, $file_name;
- print $fh "Hello World!\n";
+ print $fh "Hello World!\n";
- process_file( $fh );
+ 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
@@ -520,21 +506,21 @@ 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 );
+ my @fhs = ( $fh1, $fh2, $fh3 );
- for( $i = 0; $i <= $#fhs; $i++ ) {
- print {$fhs[$i]} "just another Perl answer, \n";
- }
+ 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 );
+ 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!" }
+ 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.
@@ -546,17 +532,17 @@ 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
+ $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();
+ 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
@@ -565,32 +551,32 @@ 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";
+ ($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";
- }
+ 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";
- }
+ 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);
+ 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
@@ -599,24 +585,24 @@ 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
+ 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.
+ 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";
+ 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
@@ -627,7 +613,7 @@ 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]);
+ $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.
@@ -648,8 +634,8 @@ X<write, into a string>
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 );
+ 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
@@ -658,34 +644,34 @@ 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;
+ open my($fh), '>', \my $string;
- { # set per-filehandle variables
- my $old_fh = select( $fh );
- $~ = 'ANIMAL';
- $^ = 'ANIMAL_TOP';
- select( $old_fh );
- }
+ { # set per-filehandle variables
+ my $old_fh = select( $fh );
+ $~ = 'ANIMAL';
+ $^ = 'ANIMAL_TOP';
+ select( $old_fh );
+ }
- format ANIMAL_TOP =
- ID Type Name
- .
+ format ANIMAL_TOP =
+ ID Type Name
+ .
- format ANIMAL =
- @## @<<< @<<<<<<<<<<<<<<
- $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 );
- }
+ {
+ local( $id, $type, $name ) = qw( 12 cat Buster );
+ write( $fh );
+ }
- print $string;
+ 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
@@ -701,14 +687,14 @@ 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 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"
+ 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
+With older versions of Perl, the L<IO::String> module provides similar
functionality.
=head2 How can I output my numbers with commas added?
@@ -723,29 +709,29 @@ really).
This subroutine will add commas to your number:
- sub commify {
- local $_ = shift;
- 1 while s/^([-+]?\d+)(\d{3})/$1,$2/;
- return $_;
- }
+ 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;
+ 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;
+ 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>
@@ -753,22 +739,22 @@ 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
+built in. The L<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;
+ $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>
@@ -776,66 +762,66 @@ 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)
+ 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
+ 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>:
+all assume that you've pulled in the constants from L<Fcntl>:
- use Fcntl;
+ use Fcntl;
To open file for reading:
- open my $fh, '<', $path or die $!;
- sysopen my $fh, $path, O_RDONLY or die $!;
+ 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 $!;
+ 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 $!;
+ 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 $!;
+ 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 $!;
+ 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 $!;
+ 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 $!;
+ 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 $!;
+ 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: $!":
+ 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
@@ -855,18 +841,9 @@ 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,
+yourself with readdir() and patterns, or use a module like L<File::Glob>,
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>
@@ -881,8 +858,8 @@ 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"
+ 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>
@@ -890,9 +867,9 @@ 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);
+ rename($old, $new) or system("mv", $old, $new);
-It may be more portable to use the C<File::Copy> module instead.
+It may be more portable to use the L<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
@@ -951,15 +928,15 @@ 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
+ 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: $!";
+ 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.
@@ -976,18 +953,18 @@ 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: $!";
+ 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) );
+ $hits = int( (time() - 850_000_000) / rand(1_000) );
If the count doesn't impress your friends, then the code might. :-)
@@ -1028,20 +1005,20 @@ 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
+ 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;
+ my $RECSIZE = 220; # size of record, in bytes
+ my $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.
@@ -1061,18 +1038,18 @@ 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);
+ 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";
+ # 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>
@@ -1086,12 +1063,12 @@ 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;
+ 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.
@@ -1108,12 +1085,12 @@ the filesystems, not of utime().
X<print, to multiple files>
To connect one filehandle to several output filehandles,
-you can use the IO::Tee or Tie::FileHandle::Multiplex modules.
+you can use the L<IO::Tee> or L<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" }
+ 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>
@@ -1121,70 +1098,70 @@ 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: $!";
+ 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>;
+ 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
+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);
+ use File::Map qw(map_file);
- map_file my $string, $filename;
+ 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
+fun to use the standard L<Tie::File> module, or the L<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>
+If you want to load the entire file, you can use the L<File::Slurp>
module to do it in one one simple and efficient step:
- use File::Slurp;
+ use File::Slurp;
- my $all_of_it = read_file($filename); # entire file in scalar
- my @all_lines = read_file($filename); # one line per element
+ 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>;
- }
+ 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> };
+ my $var = do { local $/; <$fh> };
You can also use a localized C<@ARGV> to eliminate the C<open>:
- my $var = do { local( @ARGV, $/ ) = $file; <> };
+ my $var = do { local( @ARGV, $/ ) = $file; <> };
For ordinary files you can also use the C<read> function.
- read( $fh, $var, -s $fh );
+ 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>.
@@ -1200,7 +1177,7 @@ 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?
+=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
@@ -1212,65 +1189,64 @@ 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";
- }
+ #!/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);
+ BEGIN {
+ use POSIX qw(:termios_h);
- my $fd_stdin = fileno(STDIN);
+ my ($term, $oterm, $echo, $noecho, $fd_stdin);
- $term = POSIX::Termios->new();
- $term->getattr($fd_stdin);
- $oterm = $term->getlflag();
+ my $fd_stdin = fileno(STDIN);
- $echo = ECHO | ECHOK | ICANON;
- $noecho = $oterm & ~$echo;
+ $term = POSIX::Termios->new();
+ $term->getattr($fd_stdin);
+ $oterm = $term->getlflag();
- sub cbreak {
- $term->setlflag($noecho);
- $term->setcc(VTIME, 1);
- $term->setattr($fd_stdin, TCSANOW);
- }
+ $echo = ECHO | ECHOK | ICANON;
+ $noecho = $oterm & ~$echo;
- sub cooked {
- $term->setlflag($oterm);
- $term->setcc(VTIME, 0);
- $term->setattr($fd_stdin, TCSANOW);
- }
+ sub cbreak {
+ $term->setlflag($noecho);
+ $term->setcc(VTIME, 1);
+ $term->setattr($fd_stdin, TCSANOW);
+ }
- sub getone {
- my $key = '';
- cbreak();
- sysread(STDIN, $key, 1);
- cooked();
- return $key;
- }
+ 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() }
+ 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;
+ 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?
@@ -1284,11 +1260,11 @@ 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);
- }
+ 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
@@ -1296,37 +1272,37 @@ 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';
+ require 'sys/ioctl.ph';
- $size = pack("L", 0);
- ioctl(FH, FIONREAD(), $size) or die "Couldn't call ioctl: $!\n";
- $size = unpack("L", $size);
+ $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
+ % 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
+ % 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
+ $FIONREAD = 0x4004667f; # XXX: opsys dependent
- $size = pack("L", 0);
- ioctl(FH, $FIONREAD, $size) or die "Couldn't call ioctl: $!\n";
- $size = unpack("L", $size);
+ $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.
@@ -1336,28 +1312,28 @@ X<tail> X<IO::Handle> X<File::Tail> X<clearerr>
First try
- seek(GWFILE, 0, 1);
+ seek($gw_fh, 0, 1);
-The statement C<seek(GWFILE, 0, 1)> doesn't change the current position,
+The statement C<seek($gw_fh, 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.
+next C<< <$gw_fh> >> 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
- }
+ for (;;) {
+ for ($curpos = tell($gw_fh); <$gw_fh>; $curpos =tell($gw_fh)) {
+ # search for some stuff and put it into files
+ }
+ # sleep for a while
+ seek($gw_fh, $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
+from L<IO::Handle>, which resets the error and end-of-file states
on the handle.
-There's also a C<File::Tail> module from CPAN.
+There's also a L<File::Tail> module from CPAN.
=head2 How do I dup() a filehandle in Perl?
X<dup>
@@ -1365,13 +1341,13 @@ 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';
+ 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)
+ 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
@@ -1385,29 +1361,29 @@ 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:
+C<close()> function from the L<POSIX> module:
- use POSIX ();
+ use POSIX ();
- POSIX::close( $fd );
+ 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;
+ 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;
- }
+ {
+ 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?
+=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!
@@ -1433,11 +1409,11 @@ 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?
+=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 .
+Know" collection in L<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.
@@ -1455,20 +1431,20 @@ 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 <>;
+ 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
+You can use the L<File::Random> module which provides a function
for that algorithm:
- use File::Random qw/random_line/;
- my $line = random_line($filename);
+ 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
+Another way is to use the L<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?
@@ -1479,82 +1455,82 @@ 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";
+ 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
+ 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";
+ 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
+ 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
+ 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;
+ 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
+The L<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;
+ use File::Find;
- find( \&wanted, @directories );
+ find( \&wanted, @directories );
- sub wanted {
- # full path in $File::Find::name
- # just filename in $_
- ... do whatever you want to do ...
- }
+ 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 L<File::Find::Closures>, which you can download from CPAN, provides
+many ready-to-use subroutines that you can use with L<File::Find>.
-The C<File::Finder>, which you can download from CPAN, can help you
+The L<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;
+ use File::Find;
+ use File::Finder;
- my $deep_dirs = File::Finder->depth->type('d')->ls->exec('rmdir','{}');
+ my $deep_dirs = File::Finder->depth->type('d')->ls->exec('rmdir','{}');
- find( $deep_dirs->as_options, @places );
+ find( $deep_dirs->as_options, @places );
-The C<File::Find::Rule> module, which you can download from CPAN, has
+The L<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;
+ use File::Find::Rule;
- my @files = File::Find::Rule->file()
- ->name( '*.pm' )
- ->in( @INC );
+ my @files = File::Find::Rule->file()
+ ->name( '*.pm' )
+ ->in( @INC );
=head2 How do I delete a directory tree?
@@ -1565,14 +1541,14 @@ 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>
+The L<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);
+ use File::Path qw(remove_tree);
- remove_tree( @directories );
+ remove_tree( @directories );
-The C<File::Path> module also has a legacy interface to the older
+The L<File::Path> module also has a legacy interface to the older
C<rmtree> subroutine.
=head2 How do I copy an entire directory?
diff --git a/Master/tlpkg/tlperl/lib/pods/perlfaq6.pod b/Master/tlpkg/tlperl/lib/pods/perlfaq6.pod
index 3066187fa60..40c2b07c3dc 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlfaq6.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlfaq6.pod
@@ -6,7 +6,7 @@ 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
+decoding a URL and checking whether something is a number can be 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
@@ -26,9 +26,9 @@ understandable.
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;
+ # 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
@@ -39,20 +39,20 @@ help a lot.
C</x> lets you turn this:
- s{<(?:[^>'"]*|".*?"|'.*?')+>}{}gs;
+ 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
+ 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.
@@ -65,8 +65,12 @@ 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
+ s/\/usr\/local/\/usr\/share/g; # bad delimiter choice
+ s#/usr/local#/usr/share#g; # better
+
+Using logically paired delimiters can be even more readable:
+
+ s{/usr/local/}{/usr/share}g; # better still
=back
@@ -91,37 +95,37 @@ 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 cross line boundaries. Neither do we need C</m> because we don't
+want 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";
- }
- }
+ $/ = ''; # 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
+Here's some 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";
- }
- }
+ $/ = ''; # 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";
- }
- }
+ 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<..>
@@ -129,11 +133,11 @@ X<..>
You can use Perl's somewhat exotic C<..> operator (documented in
L<perlop>):
- perl -ne 'print if /START/ .. /END/' file1 file2 ...
+ 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 ...
+ 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
@@ -141,54 +145,24 @@ 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 $.
- }
+ while (<>) {
+ my $in_header = 1 .. /^$/;
+ my $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!
+Do not use regexes. Use a module and forget about the
+regular expressions. The L<XML::LibXML>, L<HTML::TokeParser> and
+L<HTML::TreeBuilder> 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 ( L<http://metacpan.org/> )
+and wonder at all the work people have done for you already! :)
=head2 I put a regular expression into $/ but it didn't work. What's wrong?
X<$/, regexes in> X<$INPUT_RECORD_SEPARATOR, regexes in>
@@ -197,16 +171,16 @@ 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.
+If you have L<File::Stream>, this is easy.
- use File::Stream;
+ use File::Stream;
- my $stream = File::Stream->new(
- $filehandle,
- separator => qr/\s*,\s*/,
- );
+ my $stream = File::Stream->new(
+ $filehandle,
+ separator => qr/\s*,\s*/,
+ );
- print "$_\n" while <$stream>;
+ print "$_\n" while <$stream>;
If you don't have File::Stream, you have to do a little more work.
@@ -214,25 +188,25 @@ 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.
- }
- }
+ 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;
- }
+ 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?
@@ -242,49 +216,49 @@ 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";
+ $_= "this is a TEsT case";
- $old = 'test';
- $new = 'success';
+ $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;
+ s{(\Q$old\E)}
+ { uc $new | (uc $1 ^ $1) .
+ (uc(substr $1, -1) ^ substr $1, -1) x
+ (length($new) - length $1)
+ }egi;
- print;
+ print;
And here it is as a subroutine, modeled after the above:
- sub preserve_case($$) {
- my ($old, $new) = @_;
- my $mask = uc $old ^ $old;
+ sub preserve_case($$) {
+ my ($old, $new) = @_;
+ my $mask = uc $old ^ $old;
- uc $new | $mask .
- substr($mask, -1) x (length($new) - length($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";
+ $string = "this is a TEsT case";
+ $string =~ s/(test)/preserve_case($1, "success")/egi;
+ print "$string\n";
This prints:
- this is a SUcCESS case
+ 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, @_;
+ sub preserve_case {
+ my ($from, $to) = @_;
+ my ($lf, $lt) = map length, @_;
- if ($lt < $lf) { $from = substr $from, 0, $lt }
- else { $from .= substr $to, $lf }
+ if ($lt < $lf) { $from = substr $from, 0, $lt }
+ else { $from .= substr $to, $lf }
- return uc $to | ($from ^ uc $from);
- }
+ return uc $to | ($from ^ uc $from);
+ }
This changes the sentence to "this is a SUcCess case."
@@ -295,36 +269,36 @@ substitution have the same case, letter by letter, as the original.
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;
- }
+ # 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>
@@ -356,11 +330,11 @@ 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 = "Placido P. Octopus";
+ $regex = "P.";
- $string =~ s/$regex/Polyp/;
- # $string is now "Polypacido P. Octopus"
+ $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
@@ -368,11 +342,11 @@ original string.
To escape the special meaning of C<.>, we use C<\Q>:
- $string = "Placido P. Octopus";
- $regex = "P.";
+ $string = "Placido P. Octopus";
+ $regex = "P.";
- $string =~ s/\Q$regex/Polyp/;
- # $string is now "Placido Polyp Octopus"
+ $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.
@@ -396,22 +370,22 @@ details.
This example takes a regular expression from the argument list and
prints the lines of input that match it:
- my $pattern = shift @ARGV;
+ my $pattern = shift @ARGV;
- while( <> ) {
- print if m/$pattern/;
- }
+ 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;
+ my $pattern = shift @ARGV;
- while( <> ) {
- print if m/$pattern/o; # useful for Perl < 5.6
- }
+ 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>
@@ -427,31 +401,31 @@ 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';
+ 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/;
- }
+ my $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
+ 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;
+ $/ = 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.
@@ -505,9 +479,9 @@ 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
+Your first try should probably be the L<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
+functions to deal with tricky text. The L<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
@@ -520,9 +494,9 @@ 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.
+ 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>
@@ -543,34 +517,34 @@ 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@groups\n";
+ #!/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@groups\n";
The output shows that Perl found the two major groups:
- Found:
- <brackets in <nested brackets> >
- <another group <nested once <nested twice> > >
+ 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
@@ -578,53 +552,52 @@ 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
+ #!/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 @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;
+ 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";
+ $" = "\n\t";
- while( @queue )
- {
- my $string = shift @queue;
+ while( @queue ) {
+ my $string = shift @queue;
- my @groups = $string =~ m/$regex/g;
- print "Found:\n\t@groups\n\n" if @groups;
+ my @groups = $string =~ m/$regex/g;
+ print "Found:\n\t@groups\n\n" if @groups;
- unshift @queue, map { s/^<//; s/>$//; $_ } @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:
+ <brackets in <nested brackets> >
+ <another group <nested once <nested twice> > >
- Found:
- <nested brackets>
+ Found:
+ <nested brackets>
- Found:
- <nested once <nested twice> >
+ Found:
+ <nested once <nested twice> >
- Found:
- <nested twice>
+ Found:
+ <nested twice>
=head2 What does it mean that regexes are greedy? How can I get around it?
X<greedy> X<greediness>
@@ -637,9 +610,9 @@ 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
+ my $s1 = my $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
@@ -652,11 +625,11 @@ X<word>
Use the split function:
- while (<>) {
- foreach $word ( split ) {
- # do something with $word here
- }
- }
+ while (<>) {
+ foreach my $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.
@@ -664,11 +637,11 @@ 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
- }
- }
+ while (<>) {
+ foreach $word (m/(\w+)/g) {
+ # do something with $word here
+ }
+ }
=head2 How can I print out a word-frequency or line-frequency summary?
@@ -677,26 +650,29 @@ 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}++;
- }
- }
+ my (%seen);
+ while (<>) {
+ while ( /(\b[^\W_\d][\w'-]+\b)/g ) { # misses "`sheep'"
+ $seen{$1}++;
+ }
+ }
- while ( ($word, $count) = each %seen ) {
- print "$count $word\n";
- }
+ while ( my ($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{$_}++;
- }
+ my (%seen);
- while ( ($line, $count) = each %seen ) {
- print "$count $line";
- }
+ while (<>) {
+ $seen{$_}++;
+ }
+
+ while ( my ($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)?".
@@ -704,7 +680,7 @@ 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.
+See the module L<String::Approx> available from CPAN.
=head2 How do I efficiently match many regular expressions at once?
X<regex, efficiency> X<regexp, efficiency>
@@ -715,11 +691,11 @@ X<regular expression, efficiency>
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 ) {
- ...
- };
+ 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.
@@ -730,16 +706,16 @@ 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 );
+ my @patterns = qw( foo bar baz );
- LINE: while( <DATA> ) {
- foreach $pattern ( @patterns ) {
- if( /\b$pattern\b/i ) {
- print;
- next LINE;
- }
- }
- }
+ 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
@@ -747,31 +723,30 @@ 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 );
+ my @patterns = map { qr/\b$_\b/i } qw( foo bar baz );
- LINE: while( <> ) {
- foreach $pattern ( @patterns ) {
- if( /$pattern/ )
- {
- print;
- next LINE;
- }
- }
- }
+ 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 );
+ my $regex = join '|', qw( foo bar baz );
- LINE: while( <> ) {
- print if /\b(?:$regex)\b/i;
- }
+ 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
+Regular Expressions> by Jeffrey Friedl. He explains how the regular
+expressions engine works and why some patterns are surprisingly
inefficient. Once you understand how perl applies regular expressions,
you can tune them for individual situations.
@@ -797,26 +772,26 @@ 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"
+ "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
+ "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"
+ "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 '
+ "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.
@@ -824,13 +799,13 @@ 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
+ "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
+ "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?
@@ -881,8 +856,8 @@ 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 )
+ $_ = "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
@@ -890,28 +865,26 @@ 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 )
+ $_ = "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";
- }
+ $_ = "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";
- }
+ $_ = "1122a44";
+ while( m/\G(\d\d)/g ) {
+ print "Found $1\n";
+ }
- print "Found $1 after while" if m/(\d\d)/g; # finds "11"
+ 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
@@ -921,28 +894,27 @@ 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";
- }
+ $_ = "1122a44";
+ while( m/\G(\d\d)/gc ) {
+ print "Found $1\n";
+ }
- print "Found $1 after while" if m/(\d\d)/g; # finds "44"
+ 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; };
- }
- }
+ 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
@@ -991,8 +963,8 @@ 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
+L<Unicode::String> module, and character conversions using the
+L<Unicode::Map8> and L<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
@@ -1016,34 +988,37 @@ looks like it is because "SG" is next to "XX", but there's no real
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;
+ # Make sure adjacent "martian" bytes are no longer adjacent.
+ $martian =~ s/([A-Z][A-Z])/ $1 /g;
- print "found GX!\n" if $martian =~ /GX/;
+ 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';
- }
+ my @chars = $martian =~ m/([A-Z][A-Z]|[^A-Z])/g;
+ # above is conceptually similar to: my @chars = $text =~ m/(.)/g;
+ #
+ foreach my $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';
- }
+ while ($martian =~ m/\G([A-Z][A-Z]|.)/gs) { # \G probably unneeded
+ if ($1 eq 'GX') {
+ print "found GX!\n";
+ last;
+ }
+ }
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;
+ 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
@@ -1054,7 +1029,7 @@ 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//>
+X<\E, regex> X<qr//>
(contributed by brian d foy)
@@ -1068,71 +1043,71 @@ 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> );
+ chomp( my $regex = <STDIN> );
- if( $string =~ m/$regex/ ) { ... }
+ 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";
+ my $regex = "Unmatched ( paren";
- "Two parens to bind them all" =~ m/$regex/;
+ "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.
+ 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 );
+ chomp( my $regex = <STDIN> );
+ $regex = quotemeta( $regex );
- if( $string =~ m/$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> );
+ chomp( my $regex = <STDIN> );
- if( $string =~ m/\Q$regex\E/ ) { ... }
+ 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> );
+ chomp( my $input = <STDIN> );
- my $regex = qr/$input/is;
+ my $regex = qr/$input/is;
- $string =~ m/$regex/ # same as m/$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> );
+ chomp( my $input = <STDIN> );
- eval {
- if( $string =~ m/\Q$input\E/ ) { ... }
- };
- warn $@ if $@;
+ eval {
+ if( $string =~ m/\Q$input\E/ ) { ... }
+ };
+ warn $@ if $@;
Or...
- my $regex = eval { qr/$input/is };
- if( defined $regex ) {
- $string =~ m/$regex/;
- }
- else {
- warn $@;
- }
+ my $regex = eval { qr/$input/is };
+ if( defined $regex ) {
+ $string =~ m/$regex/;
+ }
+ else {
+ warn $@;
+ }
=head1 AUTHOR AND COPYRIGHT
diff --git a/Master/tlpkg/tlperl/lib/pods/perlfaq7.pod b/Master/tlpkg/tlperl/lib/pods/perlfaq7.pod
index fcf270d9ce8..35c9330f2dc 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlfaq7.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlfaq7.pod
@@ -10,7 +10,7 @@ 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
+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.
@@ -22,201 +22,193 @@ and mirrors."
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.
+ $ 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.
+ <> 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
+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
+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,
+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
+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
+ 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
+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 }
+ my @nums = (1, 2, 3);
- if ($whoops) {
- exit 1;
- }
+ if ($whoops) {
+ exit 1;
+ }
- @lines = (
- "There Beren came from mountains cold",
- "And lost he wandered under leaves",
- );
+ my @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];
+ $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);
+ ($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];
+ ($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.
+allows fine control of what warnings are produced.
See L<perllexwarn> for more details.
- {
- no warnings; # temporarily turn off warnings
- $a = $b + $c; # I know these might be undef
- }
+ {
+ no warnings; # temporarily turn off warnings
+ $x = $y + $z; # 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
+get other categories of warnings. See L<perllexwarn> for the
complete details, including the category names and hierarchy.
- {
- no warnings 'uninitialized';
- $a = $b + $c;
- }
+ {
+ no warnings 'uninitialized';
+ $x = $y + $z;
+ }
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
- }
+ {
+ local $^W = 0; # temporarily turn off warnings
+ $x = $y + $z; # 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
+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
+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
+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";
+ unlink $file || die "snafu";
This gets interpreted as:
- unlink ($file || die "snafu");
+ 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";
+ (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
+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
+negative four and not a positive one. 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
+produces an lvalue. This assigns $x to either $if_true or $if_false, depending
on the trueness of $maybe:
- ($maybe ? $a : $b) = $x;
+ ($maybe ? $if_true : $if_false) = $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.
+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"
+ $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.
+L<perlnewmod> is a good place to start, ignore the bits
+about uploading to CPAN if you don't want to make your
+module publicly available.
-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.
+L<ExtUtils::ModuleMaker> and L<Module::Starter> are also
+good places to start. Many CPAN authors now use L<Dist::Zilla>
+to automate as much as possible.
-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.
+Detailed documentation about modules can be found at:
+L<perlmod>, L<perlmodlib>, L<perlmodstyle>.
-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.
+If you need to include C code or C library interfaces
+use h2xs. h2xs will create the module distribution structure
+and the initial interface files.
+L<perlxs> and L<perlxstut> explain the details.
=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.
+Ask the current maintainer to 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@perl.org can help. The PAUSE admins
-treat each case individually.
+If you can not reach the author for some reason contact
+the PAUSE admins at modules@perl.org who may be able to help,
+but each case it treated seperatly.
=over 4
=item *
Get a login for the Perl Authors Upload Server (PAUSE) if you don't
-already have one: http://pause.perl.org
+already have one: L<http://pause.perl.org>
=item *
@@ -274,47 +266,47 @@ 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
+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() };
- }
+ sub add_function_generator {
+ return sub { shift() + shift() };
+ }
- $add_sub = add_function_generator();
- $sum = $add_sub->(4,5); # $sum is 9 now.
+ my $add_sub = add_function_generator();
+ my $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
+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
+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 };
- }
+ sub make_adder {
+ my $addpiece = shift;
+ return sub { shift() + $addpiece };
+ }
- $f1 = make_adder(20);
- $f2 = make_adder(555);
+ my $f1 = make_adder(20);
+ my $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
+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
+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> } );
+ 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
@@ -328,10 +320,10 @@ 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 }
- }
+ 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>.
@@ -342,41 +334,41 @@ 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()
+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:
+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" }
- }
+ my $f = 'foo';
+ sub T {
+ while ($i++ < 3) { my $f = $f; $f .= "bar"; print $f, "\n" }
+ }
- T;
- print "Finally $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:
+doesn't pick up a fresh copy of the C<$f> whose value is C<'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
+ 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
+ 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
+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.
@@ -387,30 +379,30 @@ information on references.
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_scalar );
- func( \@some_array );
- func( [ 1 .. 10 ] );
+ func( \@some_array );
+ func( [ 1 .. 10 ] );
- func( \%some_hash );
- func( { this => 10, that => 20 } );
+ func( \%some_hash );
+ func( { this => 10, that => 20 } );
- func( \&some_func );
- func( sub { $_[0] ** $_[1] } );
+ 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 );
+ open my $fh, $filename or die "Cannot open $filename! $!";
+ func( $fh );
- sub func {
- my $passed_fh = shift;
+ sub func {
+ my $passed_fh = shift;
- my $line = <$passed_fh>;
- }
+ 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">
@@ -422,34 +414,34 @@ 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);
+ 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();
- }
- }
+ 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();
- }
+ 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).
@@ -464,7 +456,7 @@ 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++ }
+ sub counter { state $count = 1; $count++ }
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
@@ -480,16 +472,16 @@ 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++ }
- }
+ BEGIN {
+ my $count = 1;
+ sub counter { $count++ }
+ }
- my $start = counter();
+ my $start = counter();
- .... # code that calls counter();
+ .... # code that calls counter();
- my $end = counter();
+ my $end = counter();
In the previous example, you created a function-private variable
because only one function remembered its reference. You could define
@@ -502,11 +494,11 @@ 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 }
- }
+ 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
@@ -517,47 +509,47 @@ 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()?
+=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
+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
+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 visible {
+ print "var has value $var\n";
+ }
- sub dynamic {
- local $var = 'local'; # new temporary value for the still-global
- visible(); # variable called $var
- }
+ 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)
- }
+ sub lexical {
+ my $var = 'private'; # new private variable, $var
+ visible(); # (invisible outside of sub scope)
+ }
- $var = 'global';
+ $var = 'global';
- visible(); # prints global
- dynamic(); # prints local
- lexical(); # prints global
+ visible(); # prints global
+ dynamic(); # prints local
+ lexical(); # prints global
-Notice how at no point does the value "private" get printed. That's
+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
+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
@@ -570,46 +562,46 @@ $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";
+ use vars '$var';
+ local $var = "global";
+ my $var = "lexical";
- print "lexical is $var\n";
- print "global is $main::var\n";
+ 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';
+ require 5.006; # our() did not exist before 5.6
+ use vars '$var';
- local $var = "global";
- my $var = "lexical";
+ local $var = "global";
+ my $var = "lexical";
- print "lexical is $var\n";
+ print "lexical is $var\n";
- {
- our $var;
- print "global 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
+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?">.
+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?
+=head2 Why doesn't "my($foo) = E<lt>$fhE<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
+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.
+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
@@ -618,15 +610,15 @@ 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
+ local($foo) = <$fh>; # WRONG
+ local($foo) = scalar(<$fh>); # ok
+ local $foo = <$fh>; # right
You should probably be using lexical variables anyway, although the
issue is the same here:
- my($foo) = <FILE>; # WRONG
- my $foo = <FILE>; # right
+ my($foo) = <$fh>; # WRONG
+ my $foo = <$fh>; # right
=head2 How do I redefine a builtin function, operator, or method?
@@ -634,7 +626,7 @@ 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">.
+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
@@ -652,29 +644,29 @@ 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 bar { &foo }
- sub foo { print "Args in foo are: @_\n" }
+ sub foo { print "Args in foo are: @_\n" }
- bar( qw( a b c ) );
+ 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
+ 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 bar { &foo() }
- sub foo { print "Args in foo are: @_\n" }
+ sub foo { print "Args in foo are: @_\n" }
- bar( qw( a b c ) );
+ bar( qw( a b c ) );
Now the output shows that C<foo> doesn't get the C<@_> from its caller.
- Args in foo are:
+ 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
@@ -684,24 +676,24 @@ details, see L<perlsub>.
In Perl 5.10, use the C<given-when> construct described in L<perlsyn>:
- use 5.010;
+ 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!" }
- };
+ 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
- }
+ 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.
@@ -710,31 +702,31 @@ in $whatchamacallit:
SWITCH: for (ref $whatchamacallit) {
- /^$/ && die "not a reference";
+ /^$/ && die "not a reference";
- /SCALAR/ && do {
- print_scalar($$ref);
- last SWITCH;
- };
+ /SCALAR/ && do {
+ print_scalar($$ref);
+ last SWITCH;
+ };
- /ARRAY/ && do {
- print_array(@$ref);
- last SWITCH;
- };
+ /ARRAY/ && do {
+ print_array(@$ref);
+ last SWITCH;
+ };
- /HASH/ && do {
- print_hash(%$ref);
- last SWITCH;
- };
+ /HASH/ && do {
+ print_hash(%$ref);
+ last SWITCH;
+ };
- /CODE/ && do {
- warn "can't print function ref";
- last SWITCH;
- };
+ /CODE/ && do {
+ warn "can't print function ref";
+ last SWITCH;
+ };
- # DEFAULT
+ # DEFAULT
- warn "User defined type skipped";
+ warn "User defined type skipped";
}
@@ -748,29 +740,29 @@ 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" }
+ 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";
- }
+ 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
@@ -787,23 +779,23 @@ 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);
+ 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
+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
+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
+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
@@ -818,39 +810,39 @@ 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";
+ 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:
+diagnostics as L<Carp> does, use the C<caller> built-in:
- sub foo {
- my @args = ...;
- my( $package, $filename, $line ) = caller;
+ sub foo {
+ my @args = ...;
+ my( $package, $filename, $line ) = caller;
- print "I was called from package $package\n";
- );
+ 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:
+from L<Scalar::Util>, part of the Standard Library since Perl 5.8:
- use Scalar::Util qw(blessed);
- my $object_package = blessed( $object );
+ 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
+ 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
+ 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).
@@ -861,18 +853,18 @@ You can safely replace C<isa> with C<DOES> (although the converse is not true).
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 #
+expects a new statement (so not in the middle of statements like the C<#>
comments). You end the comment with C<=cut>, ending the Pod section:
- =pod
+ =pod
- my $object = NotGonnaHappen->new();
+ my $object = NotGonnaHappen->new();
- ignored_sub();
+ ignored_sub();
- $wont_be_assigned = 37;
+ $wont_be_assigned = 37;
- =cut
+ =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,
@@ -885,17 +877,17 @@ 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
+ =begin comment
- my $object = NotGonnaHappen->new();
+ my $object = NotGonnaHappen->new();
- ignored_sub();
+ ignored_sub();
- $wont_be_assigned = 37;
+ $wont_be_assigned = 37;
- =end comment
+ =end comment
- =cut
+ =cut
For more information on Pod, check out L<perlpod> and L<perlpodspec>.
@@ -903,23 +895,23 @@ For more information on Pod, check out L<perlpod> and L<perlpodspec>.
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;
- }
- }
+ 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.
@@ -929,17 +921,17 @@ just use the Symbol::delete_package() function instead.
Beginners often think they want to have a variable contain the name
of a variable.
- $fred = 23;
- $varname = "fred";
- ++$$varname; # $fred now 24
+ $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
+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
+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.
@@ -948,78 +940,78 @@ 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
+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
+(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++
+ $USER_VARS{"fred"} = 23;
+ my $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
+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
+ $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
+ $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
+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
+ $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
+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 = "fred";
+ $$name{WIFE} = "wilma"; # set %fred
- $name = "barney";
- $$name{WIFE} = "betty"; # set %barney
+ $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:
+problems enumerated above. It would be far better to write:
- $folks{"fred"}{WIFE} = "wilma";
- $folks{"barney"}{WIFE} = "betty";
+ $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
+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:
+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>" };
- }
+ @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
+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.
@@ -1028,7 +1020,7 @@ you probably only want to use hard references.
(contributed by brian d foy)
-The "bad interpreter" message comes from the shell, not perl. The
+The "bad interpreter" message comes from the shell, not perl. The
actual message may vary depending on your platform, shell, and locale
settings.
@@ -1048,7 +1040,7 @@ script executable.
In either case, you should still be able to run the scripts with perl
explicitly:
- % perl script.pl
+ % 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
@@ -1063,8 +1055,7 @@ 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
+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
+or for profit as you see fit. A simple comment in the code giving
credit would be courteous but is not required.
-
diff --git a/Master/tlpkg/tlperl/lib/pods/perlfaq8.pod b/Master/tlpkg/tlperl/lib/pods/perlfaq8.pod
index b64e8d038b7..1c7793e3558 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlfaq8.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlfaq8.pod
@@ -5,12 +5,12 @@ perlfaq8 - System Interaction
=head1 DESCRIPTION
This section of the Perl FAQ covers questions involving operating
-system interaction. Topics include interprocess communication (IPC),
+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
+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?
@@ -34,27 +34,30 @@ 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:
+("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
+ 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
+ Term::Cap Standard perl distribution
+ Curses CPAN
+ Term::ANSIColor CPAN
=item Mouse
- Tk CPAN
+ Tk CPAN
+ Wx CPAN
+ Gtk2 CPAN
+ Qt4 kdebindings4 package
=back
@@ -64,19 +67,19 @@ 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
+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:
+color, you can use the L<Term::ANSIColor> module from CPAN:
- use Term::ANSIColor;
- print color("red"), "Stop!\n", color("reset");
- print color("green"), "Go!\n", color("reset");
+ 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;
+ 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?
@@ -85,92 +88,94 @@ 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";
+ 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
+The L<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');
+ 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
+and can use it to build and install a CPAN module. Here's a solution
+using the standard L<POSIX> module, which is already on your system
(assuming your system supports POSIX).
- use HotKey;
- $key = readkey();
+ 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;
+ # HotKey.pm
+ package HotKey;
- @ISA = qw(Exporter);
- @EXPORT = qw(cbreak cooked readkey);
+ use strict;
+ use warnings;
- use strict;
- use POSIX qw(:termios_h);
- my ($term, $oterm, $echo, $noecho, $fd_stdin);
+ use parent 'Exporter';
+ our @EXPORT = qw(cbreak cooked readkey);
- $fd_stdin = fileno(STDIN);
- $term = POSIX::Termios->new();
- $term->getattr($fd_stdin);
- $oterm = $term->getlflag();
+ use POSIX qw(:termios_h);
+ my ($term, $oterm, $echo, $noecho, $fd_stdin);
- $echo = ECHO | ECHOK | ICANON;
- $noecho = $oterm & ~$echo;
+ $fd_stdin = fileno(STDIN);
+ $term = POSIX::Termios->new();
+ $term->getattr($fd_stdin);
+ $oterm = $term->getlflag();
- sub cbreak {
- $term->setlflag($noecho); # ok, so i don't want echo either
- $term->setcc(VTIME, 1);
- $term->setattr($fd_stdin, TCSANOW);
- }
+ $echo = ECHO | ECHOK | ICANON;
+ $noecho = $oterm & ~$echo;
- sub cooked {
- $term->setlflag($oterm);
- $term->setcc(VTIME, 0);
- $term->setattr($fd_stdin, TCSANOW);
- }
+ sub cbreak {
+ $term->setlflag($noecho); # ok, so i don't want echo either
+ $term->setcc(VTIME, 1);
+ $term->setattr($fd_stdin, TCSANOW);
+ }
- sub readkey {
- my $key = '';
- cbreak();
- sysread(STDIN, $key, 1);
- cooked();
- return $key;
- }
+ sub cooked {
+ $term->setlflag($oterm);
+ $term->setcc(VTIME, 0);
+ $term->setattr($fd_stdin, TCSANOW);
+ }
- END { cooked() }
+ sub readkey {
+ my $key = '';
+ cbreak();
+ sysread(STDIN, $key, 1);
+ cooked();
+ return $key;
+ }
- 1;
+ 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
+L<Term::ReadKey> module from CPAN, passing it an argument of -1 to indicate
not to block:
- use Term::ReadKey;
+ use Term::ReadKey;
- ReadMode('cbreak');
+ ReadMode('cbreak');
- if (defined ($char = ReadKey(-1)) ) {
- # input was waiting and it was $char
- } else {
- # no input was waiting
- }
+ if (defined (my $char = ReadKey(-1)) ) {
+ # input was waiting and it was $char
+ } else {
+ # no input was waiting
+ }
- ReadMode('normal'); # restore normal tty settings
+ ReadMode('normal'); # restore normal tty settings
=head2 How do I clear the screen?
@@ -180,91 +185,91 @@ 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
+You can use the L<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();
+ use Term::ANSIScreen qw(cls);
+ my $clear_screen = cls();
- print $clear_screen;
+ print $clear_screen;
-The C<Term::Cap> module can also get the special sequence if you want
+The L<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;
+ use Term::Cap;
- $terminal = Term::Cap->Tgetent( { OSPEED => 9600 } );
- $clear_string = $terminal->Tputs('cl');
+ my $terminal = Term::Cap->Tgetent( { OSPEED => 9600 } );
+ my $clear_string = $terminal->Tputs('cl');
- print $clear_screen;
+ print $clear_screen;
-On Windows, you can use the C<Win32::Console> module. After creating
+On Windows, you can use the L<Win32::Console> module. After creating
an object for the output filehandle you want to affect, call the
C<Cls> method:
- Win32::Console;
+ Win32::Console;
- $OUT = Win32::Console->new(STD_OUTPUT_HANDLE);
- my $clear_string = $OUT->Cls;
+ my $OUT = Win32::Console->new(STD_OUTPUT_HANDLE);
+ my $clear_string = $OUT->Cls;
- print $clear_screen;
+ 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`;
+ my $clear_string = `clear`;
- print $clear_string;
+ print $clear_string;
=head2 How do I get the screen size?
-If you have C<Term::ReadKey> module installed from CPAN,
+If you have L<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();
+ use Term::ReadKey;
+ my ($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";
+ require 'sys/ioctl.ph';
+ die "no TIOCGWINSZ " unless defined &TIOCGWINSZ;
+ open(my $tty_fh, "+</dev/tty") or die "No tty: $!";
+ unless (ioctl($tty_fh, &TIOCGWINSZ, $winsize='')) {
+ die sprintf "$0: ioctl TIOCGWINSZ (%08x: $!)\n", &TIOCGWINSZ;
+ }
+ my ($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
+(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
+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
+You can also do this for most systems using the L<Term::ReadKey> module
from CPAN, which is easier to use and in theory more portable.
- use Term::ReadKey;
+ use Term::ReadKey;
- ReadMode('noecho');
- $password = ReadLine(0);
+ ReadMode('noecho');
+ my $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
+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.
+C</dev>; on other systems, device names will doubtless differ.
Several problem areas common to all device interaction are the
following:
@@ -272,29 +277,29 @@ following:
=item lockfiles
-Your system may use lockfiles to control multiple access. Make sure
-you follow the correct protocol. Unpredictable behavior can result
+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
+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<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
+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
+ 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
@@ -306,34 +311,34 @@ 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()>
+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?"):
+output filehandle? Why must I do this?"):
- $oldh = select(DEV);
- $| = 1;
- select($oldh);
+ my $old_handle = select($dev_fh);
+ $| = 1;
+ select($old_handle);
You'll also see code that does this without a temporary variable, as in
- select((select(DEV), $| = 1)[0]);
+ select((select($deb_handle), $| = 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);
+ use IO::Handle;
+ $dev_fh->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
+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
+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">.
@@ -346,19 +351,19 @@ 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";
- }
- }
+ 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?
@@ -366,15 +371,15 @@ 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
+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).
+L<passwd(1)>, for example).
=head2 How do I start a process in the background?
@@ -383,18 +388,18 @@ passwd(1), for example).
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>.
+and many of the techniques are covered 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
+Several CPAN modules may be able to help, including L<IPC::Open2> or
+L<IPC::Open3>, L<IPC::Run>, L<Parallel::Jobs>,
+L<Parallel::ForkManager>, L<POE>, L<Proc::Background>, and
+L<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 &")
+ 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).
@@ -404,40 +409,40 @@ this is the same thing that many of the modules will do for you).
=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
+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
+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
+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} = sub { wait };
- $SIG{CHLD} = 'IGNORE';
+ $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);
+ 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 &")>.
@@ -446,32 +451,32 @@ Zombies are not an issue with C<system("prog &")>.
=head2 How do I trap control characters/signals?
-You don't actually "trap" a control character. Instead, that character
+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>
+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
+ # as an anonymous subroutine
- $SIG{INT} = sub { syswrite(STDERR, "ouch\n", 5 ) };
+ $SIG{INT} = sub { syswrite(STDERR, "ouch\n", 5 ) };
- # or a reference to a function
+ # or a reference to a function
- $SIG{INT} = \&ouch;
+ $SIG{INT} = \&ouch;
- # or the name of the function as a string
+ # or the name of the function as a string
- $SIG{INT} = "ouch";
+ $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
+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.
@@ -481,43 +486,43 @@ Previous versions of this answer were incorrect.
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).
+file. To change the file, make a new shadow password file (the format
+varies from system to system--see L<passwd(1)> for specifics) and use
+C<pwd_mkdb(8)> to install it (see L<pwd_mkdb(8)> 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
+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";
+ $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).
+documented in L<perlfunc/"select">. Try the L<Time::HiRes> and
+the L<BSD::Itimer> modules (available from CPAN, and starting from
+Perl 5.8 L<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
+The L<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
+L<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>.
@@ -530,36 +535,36 @@ 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: $!";
- }
+ 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);
+ use sigtrap qw(die normal-signals);
-Perl's exception-handling mechanism is its C<eval()> operator. You
+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>.
+many CPAN modules that handle exceptions, such as L<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?
+=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
+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.
+values are different. Go figure.
=head2 How can I call my system's unique C functions from Perl?
@@ -571,14 +576,14 @@ 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
+Windows, try L<Win32::API>. On Macs, try L<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>.
+Perl source with L<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
+Historically, these would be generated by the L<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.
@@ -586,149 +591,149 @@ 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
+ 1. Become the 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>.
+sanity you probably ought to use L<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 L<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
+ought to use L<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
+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
+The L<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
+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
+You may also use the L<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>).
+arguments from L<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()>
+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
+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`;
+ my $exit_status = system("mail-users");
+ my $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()
+ system $cmd; # using system()
+ my $output = `$cmd`; # using backticks (``)
+ open (my $pipe_fh, "$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
+You can also use the C<open3()> function from L<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);
+ 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);
+ 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);
+ 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> ) {}
+ 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> ) {}
+ 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");
+ 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 |");
+ $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 |");
+ $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
+ 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
+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).
@@ -736,59 +741,59 @@ 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
+Know" collection in L<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
+ $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
+ $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
+ $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
+ $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");
+ system("program args 1>program.stdout 2>program.stderr");
-Ordering is important in all these examples. That's because the shell
+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");
+ 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
+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
+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
+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.
+L<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
@@ -796,10 +801,10 @@ 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
+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
@@ -808,17 +813,17 @@ Why send a clear message that isn't true?
Consider this line:
- `cat /etc/termcap`;
+ `cat /etc/termcap`;
You forgot to check C<$?> to see whether the program even ran
-correctly. Even if you wrote
+correctly. Even if you wrote
- print `cat /etc/termcap`;
+ print `cat /etc/termcap`;
this code could and probably should be written as
- system("cat /etc/termcap") == 0
- or die "cat program failed!";
+ 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
@@ -829,47 +834,47 @@ 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
+This is a bit tricky. You can't simply write the command
like this:
- @ok = `grep @opts '$search_string' @filenames`;
+ @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;
+ 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;
- }
+ 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
+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:
+eof flags that you may need to clear. The L<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
@@ -877,8 +882,8 @@ do it. Here are some less reliable workarounds:
Try keeping around the seekpointer and go there, like this:
- $where = tell(LOG);
- seek(LOG, $where, 0);
+ my $where = tell($log_fh);
+ seek($log_fh, $where, 0);
=item 2
@@ -898,72 +903,72 @@ If that doesn't work, give up on your stdio package and use sysread.
=head2 How can I convert my shell script to perl?
-Learn Perl and rewrite it. Seriously, there's no simple converter.
+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
+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
+Try the L<Net::FTP>, L<TCP::Client>, and L<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
+L<http://www.cpan.org/scripts/netstuff/telnet.emul.shar> will also help
+for emulating the telnet protocol, but L<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;
+ use IO::Socket; # new in 5.004
+ my $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>.
+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 L<Expect> module available from CPAN, which also requires two
+other modules from CPAN, L<IO::Pty> and L<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
+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
+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]";
+ $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?
+=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
+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
+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.
@@ -972,22 +977,22 @@ comp.unix.questions FAQ for details.
=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
+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
+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()>
+Open /dev/tty and use the TIOCNOTTY ioctl on it. See L<tty(1)>
+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 *
@@ -1003,11 +1008,11 @@ tty.
Background yourself like this:
- fork && exit;
+ fork && exit;
=back
-The C<Proc::Daemon> module, available from CPAN, provides a function to
+The L<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?
@@ -1021,24 +1026,24 @@ 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";
- }
+ 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
+real person on the other side. With the L<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
+The L<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;
+ use IO::Interactive;
- print { is_interactive } "I might go to standard output!\n";
+ 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.
@@ -1047,16 +1052,16 @@ 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";
- }
+ 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.
+"Signals" in the Camel. You may instead use the more flexible
+L<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.
@@ -1066,19 +1071,19 @@ X<BSD::Resource> X<limit> X<CPU>
(contributed by Xho)
-Use the C<BSD::Resource> module from CPAN. As an example:
+Use the L<BSD::Resource> module from CPAN. As an example:
- use BSD::Resource;
- setrlimit(RLIMIT_CPU,10,20) or die $!;
+ 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, 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
+See the L<BSD::Resource> and your systems documentation for the gory
details.
=head2 How do I avoid zombies on a Unix system?
@@ -1089,24 +1094,24 @@ 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
+The L<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 .
+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: L<http://www.cpan.org/modules/by-module/DBD/> .
+You can read more about DBI on L<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 .
+Other modules provide more specific access: L<Win32::ODBC>, L<Alzabo>,
+C<iodbc>, and others found on CPAN Search: L<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
+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:
+passes the signal on to the subprocess. Or you can check for it:
- $rc = system($cmd);
- if ($rc & 127) { die "signal death" }
+ $rc = system($cmd);
+ if ($rc & 127) { die "signal death" }
=head2 How do I open a file without blocking?
@@ -1115,17 +1120,17 @@ 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: $!":
+ use Fcntl;
+ sysopen(my $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
+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
@@ -1133,56 +1138,56 @@ 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
+ #!/usr/locl/bin/perl
- print "Hello World\n";
+ 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,
+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
+ $ ./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
+ #!/usr/bin/perl -w
- BEGIN {
- $SIG{__WARN__} = sub{ print STDERR "Perl: ", @_; };
- $SIG{__DIE__} = sub{ print STDERR "Perl: ", @_; exit 1};
- }
+ BEGIN {
+ $SIG{__WARN__} = sub{ print STDERR "Perl: ", @_; };
+ $SIG{__DIE__} = sub{ print STDERR "Perl: ", @_; exit 1};
+ }
- $a = 1 + undef;
- $x / 0;
- __END__
+ $a = 1 + undef;
+ $x / 0;
+ __END__
-The perl message comes out with "Perl" in front. The C<BEGIN> block
+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.
+ 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
+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
+for you. Use the diagnostics pragma with turns perl's normal messages
into longer discussions on the topic.
- use diagnostics;
+ use diagnostics;
If you don't get a paragraph or two of expanded discussion, it
might not be perl's message.
@@ -1195,16 +1200,16 @@ 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
+ $ cpan IO::Interactive Getopt::Whatever
If you prefer C<CPANPLUS>, it's just as easy:
- $ cpanp i IO::Interactive Getopt::Whatever
+ $ 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 .
+ $ cpan .
See the documentation for either of those commands to see what else
you can do.
@@ -1215,14 +1220,14 @@ paths.
For distributions that use I<Makefile.PL>:
- $ perl Makefile.PL
- $ make test install
+ $ perl Makefile.PL
+ $ make test install
For distributions that use I<Build.PL>:
- $ perl Build.PL
- $ ./Build test
- $ ./Build install
+ $ 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.
@@ -1237,27 +1242,27 @@ 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);
+ use MODULE qw(import list);
- BEGIN {
- require MODULE;
- MODULE->import(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 ();
+ use MODULE ();
- BEGIN {
- require 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!
+ require "$ENV{HOME}/lib/Foo.pm"; # no @INC searching!
See the entry for C<use> in L<perlfunc> for more details.
@@ -1266,7 +1271,7 @@ See the entry for C<use> in L<perlfunc> for more details.
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
+be L<local::lib>, which you can download from CPAN. It sets various
installation settings for you, and uses those same settings within
your programs.
@@ -1276,38 +1281,38 @@ 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
+ 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
+ % 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
+ 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
+ % 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
+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
+L<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.
+settings. See the L<ExtUtils::Makemaker> documentation for more details.
=head2 How do I add the directory my program lives in to the module/library search path?
@@ -1317,46 +1322,46 @@ 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;
+ 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;
- }
+ BEGIN {
+ use Cwd;
+ our $directory = cwd;
+ }
- use lib $directory;
+ 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);
+ BEGIN {
+ use File::Spec::Functions qw(rel2abs);
+ use File::Basename qw(dirname);
- my $path = rel2abs( $0 );
- our $directory = dirname( $path );
- }
+ my $path = rel2abs( $0 );
+ our $directory = dirname( $path );
+ }
- use lib $directory;
+ use lib $directory;
-The C<FindBin> module, which comes with Perl, might work. It finds the
+The L<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);
+ 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
+You can also use L<local::lib> to do much of the same thing. Install
+modules using L<local::lib>'s settings then use the module in your
program:
- use local::lib; # sets up a local lib at ~/perl5
+ use local::lib; # sets up a local lib at ~/perl5
-See the C<local::lib> documentation for more details.
+See the L<local::lib> documentation for more details.
=head2 How do I add a directory to my include path (@INC) at runtime?
@@ -1367,39 +1372,40 @@ environment variables, run-time switches, and in-code statements:
=item the C<PERLLIB> environment variable
- $ export PERLLIB=/path/to/my/dir
- $ perl program.pl
+ $ export PERLLIB=/path/to/my/dir
+ $ perl program.pl
=item the C<PERL5LIB> environment variable
- $ export PERL5LIB=/path/to/my/dir
- $ perl program.pl
+ $ 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
+ $ perl -I/path/to/my/dir program.pl
=item the C<lib> pragma:
- use lib "$ENV{HOME}/myown_perllib";
+ use lib "$ENV{HOME}/myown_perllib";
-=item the C<local::lib> module:
+=item the L<local::lib> module:
- use local::lib;
+ use local::lib;
- use local::lib "~/myown_perllib";
+ 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
+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.
+constants. Sometimes it is built using L<h2ph> when Perl is installed,
+but other times it is not. Modern programs should use C<use Socket;>
+instead.
=head1 AUTHOR AND COPYRIGHT
@@ -1410,7 +1416,7 @@ 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
+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
+or for profit as you see fit. A simple comment in the code giving
credit would be courteous but is not required.
diff --git a/Master/tlpkg/tlperl/lib/pods/perlfaq9.pod b/Master/tlpkg/tlperl/lib/pods/perlfaq9.pod
index d00d918deb2..b42755efe0a 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlfaq9.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlfaq9.pod
@@ -1,355 +1,207 @@
=head1 NAME
-perlfaq9 - Networking
+perlfaq9 - Web, Email and Networking
=head1 DESCRIPTION
-This section deals with questions related to networking, the internet,
-and a few on the web.
+This section deals with questions related to running web sites,
+sending and receiving email as well as general networking.
-=head2 What is the correct form of response from a CGI script?
+=head2 Should I use a web framework?
-(Alan Flavell <flavell+www@a5.ph.gla.ac.uk> answers...)
+Yes. If you are building a web site with any level of interactivity
+(forms / users / databases), you
+will want to use a framework to make handling requests
+and responses easier.
-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
+If there is no interactivity then you may still want
+to look at using something like L<Template Toolkit|https://metacpan.org/module/Template>
+or L<Plack::Middleware::TemplateToolkit>
+so maintenance of your HTML files (and other assets) is easier.
-The CGI specification is outlined in an informational RFC:
-http://www.ietf.org/rfc/rfc3875
+=head2 Which web framework should I use?
+X<framework> X<CGI.pm> X<CGI> X<Catalyst> X<Dancer>
-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.
+There is no simple answer to this question. Perl frameworks can run everything
+from basic file servers and small scale intranets to massive multinational
+multilingual websites that are the core to international businesses.
-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.
+Below is a list of a few frameworks with comments which might help you in
+making a decision, depending on your specific requirements. Start by reading
+the docs, then ask questions on the relevant mailing list or IRC channel.
-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.
+=over 4
-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.
+=item L<Catalyst>
-=head2 My CGI script runs from the command line but not the browser. (500 Server Error)
+Strongly object-oriented and fully-featured with a long development history and
+a large community and addon ecosystem. It is excellent for large and complex
+applications, where you have full control over the server.
-(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.
+=item L<Dancer>
- use CGI::Carp qw(fatalsToBrowser);
- die "Bad error here";
+Young and free of legacy weight, providing a lightweight and easy to learn API.
+Has a growing addon ecosystem. It is best used for smaller projects and
+very easy to learn for beginners.
-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.
+=item L<Mojolicious>
-=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<&lt;> for example.
-
-Here's one "simple-minded" approach, that works for most files:
-
- #!/usr/bin/perl -p0777
- s/<(?:[^>'"]*|(['"]).*?\g1)*>//gs
+Fairly young with a focus on HTML5 and real-time web technologies such as
+WebSockets.
-If you want a more complete solution, see the 3-stage striphtml
-program in
-http://www.cpan.org/authors/Tom_Christiansen/scripts/striphtml.gz
-.
+=item L<Web::Simple>
-Here are some tricky cases that you should think about when picking
-a solution:
+Currently experimental, strongly object-oriented, built for speed and intended
+as a toolkit for building micro web apps, custom frameworks or for tieing
+together existing Plack-compatible web applications with one central dispatcher.
- <IMG SRC = "foo.gif" ALT = "A > B">
+=back
- <IMG SRC = "foo.gif"
- ALT = "A > B">
+All of these interact with or use L<Plack> which is worth understanding
+the basics of when building a website in Perl (there is a lot of useful
+L<Plack::Middleware|https://metacpan.org/search?q=plack%3A%3Amiddleware>).
- <!-- <A comment> -->
+=head2 What is Plack and PSGI?
- <script>if (a<b && a>c)</script>
+L<PSGI> is the Perl Web Server Gateway Interface Specification, it is
+a standard that many Perl web frameworks use, you should not need to
+understand it to build a web site, the part you might want to use is L<Plack>.
- <# Just data #>
+L<Plack> is a set of tools for using the PSGI stack. It contains
+L<middleware|https://metacpan.org/search?q=plack%3A%3Amiddleware>
+components, a reference server and utilities for Web application frameworks.
+Plack is like Ruby's Rack or Python's Paste for WSGI.
- <![INCLUDE CDATA [ >>>>>>>>>>>> ]]>
+You could build a web site using L<Plack> and your own code,
+but for anything other than a very basic web site, using a web framework
+(that uses L<Plack>) is a better option.
-If HTML comments include other tags, those solutions would also break
-on text like this:
+=head2 How do I remove HTML from a string?
- <!-- This section commented out.
- <B>You can't see me!</B>
- -->
+Use L<HTML::Strip>, or L<HTML::FormatText> which not only removes HTML
+but also attempts to do a little simple formatting of the resulting
+plain text.
=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
+L<HTML::SimpleLinkExtor> will extract URLs from HTML, it 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
+L<HTML::LinkExtor> or L<HTML::Parser>. You might even use
+L<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@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;
+You can use L<URI::Find> to extract URLs from an arbitrary text document.
=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
+Use the libwww-perl distribution. The L<LWP::Simple> module can fetch web
resources and give their content back to you as a string:
- use LWP::Simple qw(get);
+ use LWP::Simple qw(get);
- my $html = get( "http://www.example.com/index.html" );
+ my $html = get( "http://www.example.com/index.html" );
It can also store the resource directly in a file:
- use LWP::Simple qw(getstore);
+ use LWP::Simple qw(getstore);
- getstore( "http://www.example.com/index.html", "foo.html" );
+ 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)
+L<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.
+browser, you can use the L<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
+and forms or a web site, you can use L<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;
+ 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);
+ my $url = url('L<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;
+ 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;
+ my $ua = LWP::UserAgent->new();
+ my $req = POST 'L<http://www.perl.com/cgi-bin/cpan_mod'>,
+ [ module => 'DB_File', readme => 1 ];
+ my $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>
+X<URI> 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.
+Most of the time you should not need to do this as
+your web framework, or if you are making a request,
+the L<LWP> or other module would handle it for you.
-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:
+To encode a string yourself, use the L<URI::Escape> module. The C<uri_escape>
+function returns the escaped string:
- my $original = "Colon : Hash # Percent %";
+ my $original = "Colon : Hash # Percent %";
- my $escaped = uri_escape( $original );
+ my $escaped = uri_escape( $original );
- print "$escaped\n"; # 'Colon%20%3A%20Hash%20%23%20Percent%20%25'
+ 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:
+ my $unescaped = uri_unescape( $escaped );
- # encode
- $string =~ s/([^^A-Za-z0-9\-_.!~*'()])/ sprintf "%%%0x", ord $1 /eg;
+ print $unescaped; # back to original
- #decode
- $string =~ s/%([A-Fa-f\d]{2})/chr hex $1/eg;
+Remember not to encode a full URI, you need to escape each
+component separately and then join them together.
=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.
+Most Perl Web Frameworks will have a mechanism for doing this,
+using the L<Catalyst> framework it would be:
- my $url = '/CPAN/index.html';
- print redirect($url);
+ $c->res->redirect($url);
+ $c->detach();
-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
+If you are using Plack (which most frameworks do), then
+L<Plack::Middleware::Rewrite> is worth looking at if you
+are migrating from Apache or have URL's you want to always
+redirect.
=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:
+See if the web framework you are using has an
+authentication system and if that fits your needs.
- use HTTPD::UserAdmin ();
- HTTPD::UserAdmin
- ->new(DB => "/foo/.htpasswd")
- ->add($username => $password);
+Alternativly look at L<Plack::Middleware::Auth::Basic>,
+or one of the other L<Plack authentication|https://metacpan.org/search?q=plack+auth>
+options.
-=head2 How do I make sure users can't enter values into a form that cause my CGI script to do bad things?
+=head2 How do I make sure users can't enter values into a form that causes 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
+L<LWP> to submit to your web site. 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 using the L<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
@@ -357,62 +209,29 @@ 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.
+Use the L<Email::MIME> module. It's well-tested and supports all the
+craziness that you'll see in the real world (comment-folding whitespace,
+encodings, comments, etc.).
-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 Email::MIME;
- use CGI qw(:standard);
+ my $message = Email::MIME->new($rfc2822);
+ my $subject = $message->header('Subject');
+ my $from = $message->header('From');
- my $total = param( 'price' ) + param( 'shipping' );
+If you've already got some other kind of email object, consider passing
+it to L<Email::Abstract> and then using its cast method to get an
+L<Email::MIME> object:
- 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>.
+ my $mail_message_object = read_message();
+ my $abstract = Email::Abstract->new($mail_message_object);
+ my $email_mime_object = $abstract->cast('Email::MIME');
=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:
+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?
@@ -420,32 +239,8 @@ 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.
+the L<Email::Valid> module will do both part I<a> and part I<b> as far
+as you can in real-time.
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
@@ -455,165 +250,117 @@ 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.
+(personal ID number). Record the address and PIN (best that it be a
+random one) for later processing. In the mail you send, include a link to
+your site with the PIN included. If the mail bounces, you know it's not
+valid. If they don't click on the link, either they forged the address or
+(assuming they got the message) following through wasn't important so you
+don't need to worry about it.
=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:
+The L<MIME::Base64> package handles this as well as the MIME/QP encoding.
+Decoding base 64 becomes as simple as:
+
+ use MIME::Base64;
+ my $decoded = decode_base64($encoded);
+
+The L<Email::MIME> module can decode base 64-encoded email message parts
+transparently so the developer doesn't need to worry about it.
- use MIME::Base64;
- $decoded = decode_base64($encoded);
+=head2 How do I find the user's mail address?
-The C<MIME-Tools> package (available from CPAN) supports extraction with
-decoding of BASE64 encoded attachments and content directly from email
-messages.
+Ask them for it. There are so many email providers available that it's
+unlikely the local system has any idea how to determine a user's email address.
-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:
+The exception is for organization-specific email (e.g. foo@yourcompany.com)
+where policy can be codified in your program. In that case, you could look at
+$ENV{USER}, $ENV{LOGNAME}, and getpwuid($<) in scalar context, like so:
- 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
+ my $user_name = getpwuid($<)
-=head2 How do I return the user's mail address?
+But you still cannot make assumptions about whether this is correct, unless
+your policy says it is. You really are best off asking the user.
-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:
+=head2 How do I send email?
- use Sys::Hostname;
- $address = sprintf('%s@%s', scalar getpwuid($<), hostname);
+Use the L<Email::MIME> and L<Email::Sender::Simple> modules, like so:
-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.
+ # first, create your message
+ my $message = Email::MIME->create(
+ header_str => [
+ From => 'you@example.com',
+ To => 'friend@example.com',
+ Subject => 'Happy birthday!',
+ ],
+ attributes => {
+ encoding => 'quoted-printable',
+ charset => 'ISO-8859-1',
+ },
+ body_str => "Happy birthday to you!\n",
+ );
-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.
+ use Email::Sender::Simple qw(sendmail);
+ sendmail($message);
-=head2 How do I send mail?
+By default, L<Email::Sender::Simple> will try `sendmail` first, if it exists
+in your $PATH. This generally isn't the case. If there's a remote mail
+server you use to send mail, consider investigating one of the Transport
+classes. At time of writing, the available transports include:
-Use the C<sendmail> program directly:
+=over 4
- 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
+=item L<Email::Sender::Transport::Sendmail>
- 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";
+This is the default. If you can use the L<mail(1)> or L<mailx(1)>
+program to send mail from the machine where your code runs, you should
+be able to use this.
-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.
+=item L<Email::Sender::Transport::SMTP>
-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>.
+This transport contacts a remote SMTP server over TCP. It optionally
+uses SSL and can authenticate to the server via SASL.
-Or you might be able use the CPAN module C<Mail::Mailer>:
+=item L<Email::Sender::Transport::SMTP::TLS>
- use Mail::Mailer;
+This is like the SMTP transport, but uses TLS security. You can
+authenticate with this module as well, using any mechanisms your server
+supports after STARTTLS.
- $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();
+=back
-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.
+Telling L<Email::Sender::Simple> to use your transport is straightforward.
+
+ sendmail(
+ $message,
+ {
+ transport => $email_sender_transport_object,
+ }
+ );
=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@myhost.com',
- To =>'you@yourhost.com',
- Cc =>'some@other.com, some@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) ] }
+L<Email::MIME> directly supports multipart messages. L<Email::MIME>
+objects themselves are parts and can be attached to other L<Email::MIME>
+objects. Consult the L<Email::MIME> documentation for more information,
+including all of the supported methods and examples of their use.
+
+=head2 How do I read email?
+
+Use the L<Email::Folder> module, like so:
+
+ use Email::Folder;
+
+ my $folder = Email::Folder->new('/path/to/email/folder');
+ while(my $message = $folder->next_message) {
+ # next_message returns Email::Simple objects, but we want
+ # Email::MIME objects as they're more robust
+ my $mime = Email::MIME->new($message->as_string);
+ }
+
+There are different classes in the L<Email::Folder> namespace for
+supporting various mailbox types. Note that these modules are generally
+rather limited and only support B<reading> rather than writing.
=head2 How do I find out my hostname, domainname, or IP address?
X<hostname, domainname, IP address, host, domain, hostfqdn, inet_ntoa,
@@ -621,62 +368,48 @@ 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
+The L<Net::Domain> module, which is part of the Standard Library starting
+in Perl 5.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;
+ use Net::Domain qw(hostname hostfqdn hostdomain);
- $host = hostname();
+ my $host = hostfqdn();
-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.
+The L<Sys::Hostname> module, part of the Standard Library, can also get the
+hostname:
- use Socket;
+ use Sys::Hostname;
- my $address = inet_ntoa(
- scalar gethostbyname( $host || 'localhost' )
- );
+ $host = hostname();
-=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
+The L<Sys::Hostname::Long> module takes a different approach and tries
+harder to return the fully qualified hostname:
- perl -MNews::NNTPClient
- -e 'print News::NNTPClient->new->list("newsgroups")'
+ use Sys::Hostname::Long 'hostname_long';
-=head2 How do I fetch/put an FTP file?
+ my $hostname = hostname_long();
-(contributed by brian d foy)
+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 L<Socket> module, which also comes with perl.
-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 Socket;
- use LWP::Simple;
+ my $address = inet_ntoa(
+ scalar gethostbyname( $host || 'localhost' )
+ );
- my $data = get( 'ftp://some.ftp.site/some/file.txt' );
+=head2 How do I fetch/put an (S)FTP file?
-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.
+L<Net::FTP>, and L<Net::SFTP> allow you to interact with FTP and SFTP (Secure
+FTP) servers.
=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 ).
+Use one of the RPC modules( L<https://metacpan.org/search?q=RPC> ).
=head1 AUTHOR AND COPYRIGHT
@@ -687,7 +420,7 @@ 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
+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
+or for profit as you see fit. A simple comment in the code giving
credit would be courteous but is not required.
diff --git a/Master/tlpkg/tlperl/lib/pods/perlfork.pod b/Master/tlpkg/tlperl/lib/pods/perlfork.pod
index 709d053d28e..7729444c40b 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlfork.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlfork.pod
@@ -78,10 +78,12 @@ and return its status.
=item kill()
C<kill('KILL', ...)> can be used to terminate a pseudo-process by
-passing it the ID returned by fork(). This should not be used except
+passing it the ID returned by fork(). The outcome of kill on a pseudo-process
+is unpredictable and it should not be used except
under dire circumstances, because the operating system may not
guarantee integrity of the process resources when a running thread is
-terminated. Note that using C<kill('KILL', ...)> on a
+terminated. The process which implements the pseudo-processes can be blocked
+and the Perl interpreter hangs. Note that using C<kill('KILL', ...)> on a
pseudo-process() may typically cause memory leaks, because the thread
that implements the pseudo-process does not get a chance to clean up
its resources.
@@ -307,6 +309,12 @@ are expected to be fixed for thread-safety.
=back
+=head1 PORTABILITY CAVEATS
+
+In portable Perl code, C<kill(9, $child)> must not be used on forked processes.
+Killing a forked process is unsafe and has unpredictable results.
+See L</kill()>, above.
+
=head1 BUGS
=over 8
diff --git a/Master/tlpkg/tlperl/lib/pods/perlform.pod b/Master/tlpkg/tlperl/lib/pods/perlform.pod
index a2aa6588b76..b00d394296e 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlform.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlform.pod
@@ -393,7 +393,7 @@ by checking $FORMAT_LINES_LEFT before each write() and print the footer
yourself if necessary.
Here's another strategy: Open a pipe to yourself, using C<open(MYSELF, "|-")>
-(see L<perlfunc/"open FILEHANDLE">) and always write() to MYSELF instead of STDOUT.
+(see L<perlfunc/open>) and always write() to MYSELF instead of STDOUT.
Have your child process massage its STDIN to rearrange headers and footers
however you like. Not very convenient, but doable.
@@ -409,7 +409,7 @@ For example:
@<<< @||| @>>>
END
- print "Wow, I just stored `$^A' in the accumulator!\n";
+ print "Wow, I just stored '$^A' in the accumulator!\n";
Or to make an swrite() subroutine, which is to write() what sprintf()
is to printf(), do this:
diff --git a/Master/tlpkg/tlperl/lib/pods/perlfreebsd.pod b/Master/tlpkg/tlperl/lib/pods/perlfreebsd.pod
index 00a40593a36..4bfe9741373 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlfreebsd.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlfreebsd.pod
@@ -4,7 +4,7 @@ specifically designed to be readable as is.
=head1 NAME
-README.freebsd - Perl version 5 on FreeBSD systems
+perlfreebsd - Perl version 5 on FreeBSD systems
=head1 DESCRIPTION
@@ -22,10 +22,11 @@ which has been integrated into FreeBSD 4.6.
=head2 $^X doesn't always contain a full path in FreeBSD
-perl 5.8.0 sets C<$^X> where possible to a full path by asking the operating
-system. On FreeBSD the full path of the perl interpreter is found by reading
-the symlink F</proc/curproc/file>. FreeBSD has a bug where reading this
-symlink sometimes returns an incorrect value
+perl sets C<$^X> where possible to a full path by asking the operating
+system. On FreeBSD the full path of the perl interpreter is found by using
+C<sysctl> with C<KERN_PROC_PATHNAME> if that is supported, else by reading
+the symlink F</proc/curproc/file>. FreeBSD 7 and earlier has a bug where
+either approach sometimes returns an incorrect value
(see http://www.freebsd.org/cgi/query-pr.cgi?pr=35703 ).
In these cases perl will fall back to the old behaviour of using C's
argv[0] value for C<$^X>.
diff --git a/Master/tlpkg/tlperl/lib/pods/perlfunc.pod b/Master/tlpkg/tlperl/lib/pods/perlfunc.pod
index 2ee3637c121..c9307f342fc 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlfunc.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlfunc.pod
@@ -107,52 +107,80 @@ than one place.
=item Functions for SCALARs or strings
X<scalar> X<string> X<character>
-C<chomp>, C<chop>, C<chr>, C<crypt>, C<hex>, C<index>, C<lc>, C<lcfirst>,
-C<length>, C<oct>, C<ord>, C<pack>, C<q//>, C<qq//>, C<reverse>,
+=for Pod::Functions =String
+
+C<chomp>, C<chop>, C<chr>, C<crypt>, C<fc>, C<hex>, C<index>, C<lc>,
+C<lcfirst>, C<length>, C<oct>, C<ord>, C<pack>, C<q//>, C<qq//>, C<reverse>,
C<rindex>, C<sprintf>, C<substr>, C<tr///>, C<uc>, C<ucfirst>, C<y///>
+C<fc> is available only if the C<"fc"> feature is enabled or if it is
+prefixed with C<CORE::>. The C<"fc"> feature is enabled automatically
+with a C<use v5.16> (or higher) declaration in the current scope.
+
+
=item Regular expressions and pattern matching
X<regular expression> X<regex> X<regexp>
-C<m//>, C<pos>, C<quotemeta>, C<s///>, C<split>, C<study>, C<qr//>
+=for Pod::Functions =Regexp
+
+C<m//>, C<pos>, C<qr//>, C<quotemeta>, C<s///>, C<split>, C<study>
=item Numeric functions
X<numeric> X<number> X<trigonometric> X<trigonometry>
+=for Pod::Functions =Math
+
C<abs>, C<atan2>, C<cos>, C<exp>, C<hex>, C<int>, C<log>, C<oct>, C<rand>,
C<sin>, C<sqrt>, C<srand>
=item Functions for real @ARRAYs
X<array>
+=for Pod::Functions =ARRAY
+
C<each>, C<keys>, C<pop>, C<push>, C<shift>, C<splice>, C<unshift>, C<values>
=item Functions for list data
X<list>
+=for Pod::Functions =LIST
+
C<grep>, C<join>, C<map>, C<qw//>, C<reverse>, C<sort>, C<unpack>
=item Functions for real %HASHes
X<hash>
+=for Pod::Functions =HASH
+
C<delete>, C<each>, C<exists>, C<keys>, C<values>
=item Input and output functions
X<I/O> X<input> X<output> X<dbm>
+=for Pod::Functions =I/O
+
C<binmode>, C<close>, C<closedir>, C<dbmclose>, C<dbmopen>, C<die>, C<eof>,
C<fileno>, C<flock>, C<format>, C<getc>, C<print>, C<printf>, C<read>,
-C<readdir>, C<rewinddir>, C<say>, C<seek>, C<seekdir>, C<select>, C<syscall>,
-C<sysread>, C<sysseek>, C<syswrite>, C<tell>, C<telldir>, C<truncate>,
-C<warn>, C<write>
+C<readdir>, C<readline> C<rewinddir>, C<say>, C<seek>, C<seekdir>, C<select>,
+C<syscall>, C<sysread>, C<sysseek>, C<syswrite>, C<tell>, C<telldir>,
+C<truncate>, C<warn>, C<write>
+
+C<say> is available only if the C<"say"> feature is enabled or if it is
+prefixed with C<CORE::>. The C<"say"> feature is enabled automatically
+with a C<use v5.10> (or higher) declaration in the current scope.
=item Functions for fixed-length data or records
-C<pack>, C<read>, C<syscall>, C<sysread>, C<syswrite>, C<unpack>, C<vec>
+=for Pod::Functions =Binary
+
+C<pack>, C<read>, C<syscall>, C<sysread>, C<sysseek>, C<syswrite>, C<unpack>,
+C<vec>
=item Functions for filehandles, files, or directories
X<file> X<filehandle> X<directory> X<pipe> X<link> X<symlink>
+=for Pod::Functions =File
+
C<-I<X>>, C<chdir>, C<chmod>, C<chown>, C<chroot>, C<fcntl>, C<glob>,
C<ioctl>, C<link>, C<lstat>, C<mkdir>, C<open>, C<opendir>,
C<readlink>, C<rename>, C<rmdir>, C<stat>, C<symlink>, C<sysopen>,
@@ -161,50 +189,73 @@ C<umask>, C<unlink>, C<utime>
=item Keywords related to the control flow of your Perl program
X<control flow>
-C<caller>, C<continue>, C<die>, C<do>, C<dump>, C<eval>, C<exit>,
-C<goto>, C<last>, C<next>, C<redo>, C<return>, C<sub>, C<wantarray>
+=for Pod::Functions =Flow
-=item Keywords related to the switch feature
+C<break>, C<caller>, C<continue>, C<die>, C<do>,
+C<dump>, C<eval>, C<evalbytes> C<exit>,
+C<__FILE__>, C<goto>, C<last>, C<__LINE__>, C<next>, C<__PACKAGE__>,
+C<redo>, C<return>, C<sub>, C<__SUB__>, C<wantarray>
-C<break>, C<continue>, C<default, >C<given>, C<when>
+C<break> is available only if you enable the experimental C<"switch">
+feature or use the C<CORE::> prefix. The C<"switch"> feature also enables
+the C<default>, C<given> and C<when> statements, which are documented in
+L<perlsyn/"Switch Statements">. The C<"switch"> feature is enabled
+automatically with a C<use v5.10> (or higher) declaration in the current
+scope. In Perl v5.14 and earlier, C<continue> required the C<"switch">
+feature, like the other keywords.
-These are available only if you enable the C<"switch"> feature.
-See L<feature> and L<perlsyn/"Switch statements">.
-Alternately, include a C<use v5.10> or later to the current scope.
+C<evalbytes> is only available with with the C<"evalbytes"> feature (see
+L<feature>) or if prefixed with C<CORE::>. C<__SUB__> is only available
+with with the C<"current_sub"> feature or if prefixed with C<CORE::>. Both
+the C<"evalbytes"> and C<"current_sub"> features are enabled automatically
+with a C<use v5.16> (or higher) declaration in the current scope.
=item Keywords related to scoping
+=for Pod::Functions =Namespace
+
C<caller>, C<import>, C<local>, C<my>, C<our>, C<package>, C<state>, C<use>
-C<state> is available only if the C<"state"> feature is enabled. See
-L<feature>. Alternately, include a C<use v5.10> or later to the current scope.
+C<state> is available only if the C<"state"> feature is enabled or if it is
+prefixed with C<CORE::>. The C<"state"> feature is enabled automatically
+with a C<use v5.10> (or higher) declaration in the current scope.
=item Miscellaneous functions
-C<defined>, C<dump>, C<eval>, C<formline>, C<local>, C<my>, C<our>,
-C<reset>, C<scalar>, C<state>, C<undef>, C<wantarray>
+=for Pod::Functions =Misc
+
+C<defined>, C<formline>, C<lock>, C<prototype>, C<reset>, C<scalar>, C<undef>
=item Functions for processes and process groups
X<process> X<pid> X<process id>
+=for Pod::Functions =Process
+
C<alarm>, C<exec>, C<fork>, C<getpgrp>, C<getppid>, C<getpriority>, C<kill>,
-C<pipe>, C<qx//>, C<setpgrp>, C<setpriority>, C<sleep>, C<system>,
+C<pipe>, C<qx//>, C<readpipe>, C<setpgrp>,
+C<setpriority>, C<sleep>, C<system>,
C<times>, C<wait>, C<waitpid>
=item Keywords related to Perl modules
X<module>
+=for Pod::Functions =Modules
+
C<do>, C<import>, C<no>, C<package>, C<require>, C<use>
=item Keywords related to classes and object-orientation
X<object> X<class> X<package>
+=for Pod::Functions =Objects
+
C<bless>, C<dbmclose>, C<dbmopen>, C<package>, C<ref>, C<tie>, C<tied>,
C<untie>, C<use>
=item Low-level socket functions
X<socket> X<sock>
+=for Pod::Functions =Socket
+
C<accept>, C<bind>, C<connect>, C<getpeername>, C<getsockname>,
C<getsockopt>, C<listen>, C<recv>, C<send>, C<setsockopt>, C<shutdown>,
C<socket>, C<socketpair>
@@ -212,12 +263,16 @@ C<socket>, C<socketpair>
=item System V interprocess communication functions
X<IPC> X<System V> X<semaphore> X<shared memory> X<memory> X<message>
+=for Pod::Functions =SysV
+
C<msgctl>, C<msgget>, C<msgrcv>, C<msgsnd>, C<semctl>, C<semget>, C<semop>,
C<shmctl>, C<shmget>, C<shmread>, C<shmwrite>
=item Fetching user and group info
X<user> X<group> X<password> X<uid> X<gid> X<passwd> X</etc/passwd>
+=for Pod::Functions =User
+
C<endgrent>, C<endhostent>, C<endnetent>, C<endpwent>, C<getgrent>,
C<getgrgid>, C<getgrnam>, C<getlogin>, C<getpwent>, C<getpwnam>,
C<getpwuid>, C<setgrent>, C<setpwent>
@@ -225,6 +280,8 @@ C<getpwuid>, C<setgrent>, C<setpwent>
=item Fetching network info
X<network> X<protocol> X<host> X<hostname> X<IP> X<address> X<service>
+=for Pod::Functions =Network
+
C<endprotoent>, C<endservent>, C<gethostbyaddr>, C<gethostbyname>,
C<gethostent>, C<getnetbyaddr>, C<getnetbyname>, C<getnetent>,
C<getprotobyname>, C<getprotobynumber>, C<getprotoent>,
@@ -234,23 +291,19 @@ C<setnetent>, C<setprotoent>, C<setservent>
=item Time-related functions
X<time> X<date>
-C<gmtime>, C<localtime>, C<time>, C<times>
-
-=item Functions new in perl5
-X<perl5>
+=for Pod::Functions =Time
-C<abs>, C<bless>, C<break>, C<chomp>, C<chr>, C<continue>, C<default>,
-C<exists>, C<formline>, C<given>, C<glob>, C<import>, C<lc>, C<lcfirst>,
-C<lock>, C<map>, C<my>, C<no>, C<our>, C<prototype>, C<qr//>, C<qw//>, C<qx//>,
-C<readline>, C<readpipe>, C<ref>, C<sub>*, C<sysopen>, C<tie>, C<tied>, C<uc>,
-C<ucfirst>, C<untie>, C<use>, C<when>
+C<gmtime>, C<localtime>, C<time>, C<times>
-* C<sub> was a keyword in Perl 4, but in Perl 5 it is an
-operator, which can be used in expressions.
+=item Non-function keywords
-=item Functions obsoleted in perl5
+=for Pod::Functions =!Non-functions
-C<dbmclose>, C<dbmopen>
+C<and>, C<AUTOLOAD>, C<BEGIN>, C<CHECK>, C<cmp>, C<CORE>, C<__DATA__>,
+C<default>, C<DESTROY>, C<else>, C<elseif>, C<elsif>, C<END>, C<__END__>,
+C<eq>, C<for>, C<foreach>, C<ge>, C<given>, C<gt>, C<if>, C<INIT>, C<le>,
+C<lt>, C<ne>, C<not>, C<or>, C<UNITCHECK>, C<unless>, C<until>, C<when>,
+C<while>, C<x>, C<xor>
=back
@@ -298,6 +351,8 @@ X<-S>X<-b>X<-c>X<-t>X<-u>X<-g>X<-k>X<-T>X<-B>X<-M>X<-A>X<-C>
=item -X
+=for Pod::Functions a file test (-r, -x, etc)
+
A file test, where X is one of the letters listed below. This unary
operator takes one argument, either a filename, a filehandle, or a dirhandle,
and tests the associated file to see if something is true about it. If the
@@ -354,8 +409,8 @@ C<-exp($foo)> still works as expected, however: only single letters
following a minus are interpreted as file tests.
These operators are exempt from the "looks like a function rule" described
-above. That is, an opening parenthesis after the operator does not affect
-how much of the following code constitutes the argument. Put the opening
+above. That is, an opening parenthesis after the operator does not affect
+how much of the following code constitutes the argument. Put the opening
parentheses before the operator to separate it from code that follows (this
applies only to operators with higher precedence than unary operators, of
course):
@@ -386,7 +441,7 @@ test whether the permission can(not) be granted using the
access(2) family of system calls. Also note that the C<-x> and C<-X> may
under this pragma return true even if there are no execute permission
bits set (nor any extra execute permission ACLs). This strangeness is
-due to the underlying system calls' definitions. Note also that, due to
+due to the underlying system calls' definitions. Note also that, due to
the implementation of C<use filetest 'access'>, the C<_> special
filehandle won't cache the results of the file tests when this pragma is
in effect. Read the documentation for the C<filetest> pragma for more
@@ -426,21 +481,32 @@ Example:
As of Perl 5.9.1, as a form of purely syntactic sugar, you can stack file
test operators, in a way that C<-f -w -x $file> is equivalent to
-C<-x $file && -w _ && -f _>. (This is only fancy fancy: if you use
+C<-x $file && -w _ && -f _>. (This is only fancy fancy: if you use
the return value of C<-f $file> as an argument to another filetest
operator, no special magic will happen.)
+Portability issues: L<perlport/-X>.
+
+To avoid confusing would-be users of your code with mysterious
+syntax errors, put something like this at the top of your script:
+
+ use 5.010; # so filetest ops can stack
+
=item abs VALUE
X<abs> X<absolute>
=item abs
+=for Pod::Functions absolute value function
+
Returns the absolute value of its argument.
If VALUE is omitted, uses C<$_>.
=item accept NEWSOCKET,GENERICSOCKET
X<accept>
+=for Pod::Functions accept an incoming socket connect
+
Accepts an incoming socket connect, just as accept(2)
does. Returns the packed address if it succeeded, false otherwise.
See the example in L<perlipc/"Sockets: Client/Server Communication">.
@@ -456,9 +522,11 @@ X<timer>
=item alarm
+=for Pod::Functions schedule a SIGALRM
+
Arranges to have a SIGALRM delivered to this process after the
specified number of wallclock seconds has elapsed. If SECONDS is not
-specified, the value stored in C<$_> is used. (On some machines,
+specified, the value stored in C<$_> is used. (On some machines,
unfortunately, the elapsed time may be up to one second less or more
than you specified because of how seconds are counted, and process
scheduling may delay the delivery of the signal even further.)
@@ -473,7 +541,7 @@ For delays of finer granularity than one second, the Time::HiRes module
distribution) provides ualarm(). You may also use Perl's four-argument
version of select() leaving the first three arguments undefined, or you
might be able to use the C<syscall> interface to access setitimer(2) if
-your system supports it. See L<perlfaq8> for details.
+your system supports it. See L<perlfaq8> for details.
It is usually a mistake to intermix C<alarm> and C<sleep> calls, because
C<sleep> may be internally implemented on your system with C<alarm>.
@@ -500,9 +568,13 @@ modulo the caveats given in L<perlipc/"Signals">.
For more information see L<perlipc>.
+Portability issues: L<perlport/alarm>.
+
=item atan2 Y,X
X<atan2> X<arctangent> X<tan> X<tangent>
+=for Pod::Functions arctangent of Y/X in the range -PI to PI
+
Returns the arctangent of Y/X in the range -PI to PI.
For the tangent operation, you may use the C<Math::Trig::tan>
@@ -513,9 +585,13 @@ function, or use the familiar relation:
The return value for C<atan2(0,0)> is implementation-defined; consult
your atan2(3) manpage for more information.
+Portability issues: L<perlport/atan2>.
+
=item bind SOCKET,NAME
X<bind>
+=for Pod::Functions binds an address to a socket
+
Binds a network address to a socket, just as bind(2)
does. Returns true if it succeeded, false otherwise. NAME should be a
packed address of the appropriate type for the socket. See the examples in
@@ -526,6 +602,8 @@ X<binmode> X<binary> X<text> X<DOS> X<Windows>
=item binmode FILEHANDLE
+=for Pod::Functions prepare binary files for I/O
+
Arranges for FILEHANDLE to be read or written in "binary" or "text"
mode on systems where the run-time libraries distinguish between
binary and text files. If FILEHANDLE is an expression, the value is
@@ -542,16 +620,16 @@ In other words: regardless of platform, use binmode() on binary data,
like images, for example.
If LAYER is present it is a single string, but may contain multiple
-directives. The directives alter the behaviour of the filehandle.
+directives. The directives alter the behaviour of the filehandle.
When LAYER is present, using binmode on a text file makes sense.
If LAYER is omitted or specified as C<:raw> the filehandle is made
-suitable for passing binary data. This includes turning off possible CRLF
+suitable for passing binary data. This includes turning off possible CRLF
translation and marking it as bytes (as opposed to Unicode characters).
Note that, despite what may be implied in I<"Programming Perl"> (the
Camel, 3rd edition) or elsewhere, C<:raw> is I<not> simply the inverse of C<:crlf>.
Other layers that would affect the binary nature of the stream are
-I<also> disabled. See L<PerlIO>, L<perlrun>, and the discussion about the
+I<also> disabled. See L<PerlIO>, L<perlrun>, and the discussion about the
PERLIO environment variable.
The C<:bytes>, C<:crlf>, C<:utf8>, and any other directives of the
@@ -568,7 +646,7 @@ of this version of Perl therefore refers to "layers" rather than to
To mark FILEHANDLE as UTF-8, use C<:utf8> or C<:encoding(UTF-8)>.
C<:utf8> just marks the data as UTF-8 without further checking,
while C<:encoding(UTF-8)> checks the data for actually being valid
-UTF-8. More details can be found in L<PerlIO::encoding>.
+UTF-8. More details can be found in L<PerlIO::encoding>.
In general, binmode() should be called after open() but before any I/O
is done on the filehandle. Calling binmode() normally flushes any
@@ -591,7 +669,7 @@ one character.
All variants of Unix, Mac OS (old and new), and Stream_LF files on VMS use
a single character to end each line in the external representation of text
(even though that single character is CARRIAGE RETURN on old, pre-Darwin
-flavors of Mac OS, and is LINE FEED on Unix and most VMS files). In other
+flavors of Mac OS, and is LINE FEED on Unix and most VMS files). In other
systems like OS/2, DOS, and the various flavors of MS-Windows, your program
sees a C<\n> as a simple C<\cJ>, but what's stored in text files are the
two characters C<\cM\cJ>. That means that if you don't use binmode() on
@@ -612,22 +690,25 @@ but also when using read(), seek(), sysread(), syswrite() and tell()
in L<perlvar> for how to manually set your input and output
line-termination sequences.
+Portability issues: L<perlport/binmode>.
+
=item bless REF,CLASSNAME
X<bless>
=item bless REF
+=for Pod::Functions create an object
+
This function tells the thingy referenced by REF that it is now an object
in the CLASSNAME package. If CLASSNAME is omitted, the current package
is used. Because a C<bless> is often the last thing in a constructor,
it returns the reference for convenience. Always use the two-argument
version if a derived class might inherit the function doing the blessing.
-See L<perltoot> and L<perlobj> for more about the blessing (and blessings)
-of objects.
+SeeL<perlobj> for more about the blessing (and blessings) of objects.
Consider always blessing objects in CLASSNAMEs that are mixed case.
Namespaces with all lowercase names are considered reserved for
-Perl pragmata. Builtin types have all uppercase names. To prevent
+Perl pragmata. Builtin types have all uppercase names. To prevent
confusion, you may wish to avoid such package names as well. Make sure
that CLASSNAME is a true value.
@@ -635,10 +716,13 @@ See L<perlmod/"Perl Modules">.
=item break
+=for Pod::Functions +switch break out of a C<given> block
+
Break out of a C<given()> block.
This keyword is enabled by the C<"switch"> feature: see
-L<feature> for more information. Alternately, include a C<use
+L<feature> for more information. You can also access it by
+prefixing it with C<CORE::>. Alternately, include a C<use
v5.10> or later to the current scope.
=item caller EXPR
@@ -646,6 +730,8 @@ X<caller> X<call stack> X<stack> X<stack trace>
=item caller
+=for Pod::Functions get context of the current subroutine call
+
Returns the context of the current subroutine call. In scalar context,
returns the caller's package name if there I<is> a caller (that is, if
we're in a subroutine or C<eval> or C<require>) and the undefined value
@@ -680,10 +766,11 @@ compiled with. The C<$hints> and C<$bitmask> values are subject to change
between versions of Perl, and are not meant for external use.
C<$hinthash> is a reference to a hash containing the value of C<%^H> when the
-caller was compiled, or C<undef> if C<%^H> was empty. Do not modify the values
+caller was compiled, or C<undef> if C<%^H> was empty. Do not modify the values
of this hash, as they are the actual values stored in the optree.
-Furthermore, when called from within the DB package, caller returns more
+Furthermore, when called from within the DB package in
+list context, and with an argument, caller returns more
detailed information: it sets the list variable C<@DB::args> to be the
arguments with which the subroutine was invoked.
@@ -694,18 +781,18 @@ C<< N > 1 >>. In particular, C<@DB::args> might have information from the
previous time C<caller> was called.
Be aware that setting C<@DB::args> is I<best effort>, intended for
-debugging or generating backtraces, and should not be relied upon. In
+debugging or generating backtraces, and should not be relied upon. In
particular, as C<@_> contains aliases to the caller's arguments, Perl does
not take a copy of C<@_>, so C<@DB::args> will contain modifications the
subroutine makes to C<@_> or its contents, not the original values at call
-time. C<@DB::args>, like C<@_>, does not hold explicit references to its
+time. C<@DB::args>, like C<@_>, does not hold explicit references to its
elements, so under certain cases its elements may have become freed and
-reallocated for other variables or temporary values. Finally, a side effect
+reallocated for other variables or temporary values. Finally, a side effect
of the current implementation is that the effects of C<shift @_> can
I<normally> be undone (but not C<pop @_> or other splicing, I<and> not if a
reference to C<@_> has been taken, I<and> subject to the caveat about reallocated
elements), so C<@DB::args> is actually a hybrid of the current state and
-initial state of C<@_>. Buyer beware.
+initial state of C<@_>. Buyer beware.
=item chdir EXPR
X<chdir>
@@ -718,12 +805,14 @@ X<directory, change>
=item chdir
-Changes the working directory to EXPR, if possible. If EXPR is omitted,
+=for Pod::Functions change your current working directory
+
+Changes the working directory to EXPR, if possible. If EXPR is omitted,
changes to the directory specified by C<$ENV{HOME}>, if set; if not,
-changes to the directory specified by C<$ENV{LOGDIR}>. (Under VMS, the
-variable C<$ENV{SYS$LOGIN}> is also checked, and used if it is set.) If
-neither is set, C<chdir> does nothing. It returns true on success,
-false otherwise. See the example under C<die>.
+changes to the directory specified by C<$ENV{LOGDIR}>. (Under VMS, the
+variable C<$ENV{SYS$LOGIN}> is also checked, and used if it is set.) If
+neither is set, C<chdir> does nothing. It returns true on success,
+false otherwise. See the example under C<die>.
On systems that support fchdir(2), you may pass a filehandle or
directory handle as the argument. On systems that don't support fchdir(2),
@@ -732,6 +821,8 @@ passing handles raises an exception.
=item chmod LIST
X<chmod> X<permission> X<mode>
+=for Pod::Functions changes the permissions on a list of files
+
Changes the permissions of a list of files. The first element of the
list must be the numeric mode, which should probably be an octal
number, and which definitely should I<not> be a string of octal digits:
@@ -761,6 +852,8 @@ module:
chmod S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH, @executables;
# Identical to the chmod 0755 of the example above.
+Portability issues: L<perlport/chmod>.
+
=item chomp VARIABLE
X<chomp> X<INPUT_RECORD_SEPARATOR> X<$/> X<newline> X<eol>
@@ -768,6 +861,8 @@ X<chomp> X<INPUT_RECORD_SEPARATOR> X<$/> X<newline> X<eol>
=item chomp
+=for Pod::Functions remove a trailing record separator from a string
+
This safer version of L</chop> removes any trailing string
that corresponds to the current value of C<$/> (also known as
$INPUT_RECORD_SEPARATOR in the C<English> module). It returns the total
@@ -810,6 +905,8 @@ X<chop>
=item chop
+=for Pod::Functions remove the last character from a string
+
Chops off the last character of a string and returns the character
chopped. It is much more efficient than C<s/.$//s> because it neither
scans nor copies the string. If VARIABLE is omitted, chops C<$_>.
@@ -828,6 +925,8 @@ See also L</chomp>.
=item chown LIST
X<chown> X<owner> X<user> X<group>
+=for Pod::Functions change the ownership on a list of files
+
Changes the owner (and group) of a list of files. The first two
elements of the list must be the I<numeric> uid and gid, in that
order. A value of -1 in either position is interpreted by most
@@ -864,11 +963,15 @@ On POSIX systems, you can detect this condition this way:
use POSIX qw(sysconf _PC_CHOWN_RESTRICTED);
$can_chown_giveaway = not sysconf(_PC_CHOWN_RESTRICTED);
+Portability issues: L<perlport/chmod>.
+
=item chr NUMBER
X<chr> X<character> X<ASCII> X<Unicode>
=item chr
+=for Pod::Functions get character this number represents
+
Returns the character represented by that NUMBER in the character set.
For example, C<chr(65)> is C<"A"> in either ASCII or Unicode, and
chr(0x263a) is a Unicode smiley face.
@@ -891,6 +994,8 @@ X<chroot> X<root>
=item chroot
+=for Pod::Functions make directory new root for path lookups
+
This function works like the system call by the same name: it makes the
named directory the new root directory for all further pathnames that
begin with a C</> by your process and all its children. (It doesn't
@@ -898,11 +1003,15 @@ change your current working directory, which is unaffected.) For security
reasons, this call is restricted to the superuser. If FILENAME is
omitted, does a C<chroot> to C<$_>.
+Portability issues: L<perlport/chroot>.
+
=item close FILEHANDLE
X<close>
=item close
+=for Pod::Functions close file (or pipe or socket) handle
+
Closes the file or pipe associated with the filehandle, flushes the IO
buffers, and closes the system file descriptor. Returns true if those
operations succeed and if no error was reported by any PerlIO
@@ -911,7 +1020,7 @@ omitted.
You don't have to close FILEHANDLE if you are immediately going to do
another C<open> on it, because C<open> closes it for you. (See
-C<open>.) However, an explicit C<close> on an input file resets the line
+L<open|/open FILEHANDLE>.) However, an explicit C<close> on an input file resets the line
counter (C<$.>), while the implicit close done by C<open> does not.
If the filehandle came from a piped open, C<close> returns false if one of
@@ -948,12 +1057,16 @@ filehandle, usually the real filehandle name or an autovivified handle.
=item closedir DIRHANDLE
X<closedir>
+=for Pod::Functions close directory handle
+
Closes a directory opened by C<opendir> and returns the success of that
system call.
=item connect SOCKET,NAME
X<connect>
+=for Pod::Functions connect to a remote socket
+
Attempts to connect to a remote socket, just like connect(2).
Returns true if it succeeded, false otherwise. NAME should be a
packed address of the appropriate type for the socket. See the examples in
@@ -964,7 +1077,10 @@ X<continue>
=item continue
-C<continue> is actually a flow control statement rather than a function. If
+=for Pod::Functions optional trailing block in a while or foreach
+
+When followed by a BLOCK, C<continue> is actually a
+flow control statement rather than a function. If
there is a C<continue> BLOCK attached to a BLOCK (typically in a C<while> or
C<foreach>), it is always executed just before the conditional is about to
be evaluated again, just like the third part of a C<for> loop in C. Thus
@@ -991,10 +1107,12 @@ Omitting the C<continue> section is equivalent to using an
empty one, logically enough, so C<next> goes directly back
to check the condition at the top of the loop.
-If the C<"switch"> feature is enabled, C<continue> is also a function that
+When there is no BLOCK, C<continue> is a function that
falls through the current C<when> or C<default> block instead of iterating
a dynamically enclosing C<foreach> or exiting a lexically enclosing C<given>.
-See L<feature> and L<perlsyn/"Switch statements"> for more
+In Perl 5.14 and earlier, this form of C<continue> was
+only available when the C<"switch"> feature was enabled.
+See L<feature> and L<perlsyn/"Switch Statements"> for more
information.
=item cos EXPR
@@ -1002,6 +1120,8 @@ X<cos> X<cosine> X<acos> X<arccosine>
=item cos
+=for Pod::Functions cosine function
+
Returns the cosine of EXPR (expressed in radians). If EXPR is omitted,
takes the cosine of C<$_>.
@@ -1014,6 +1134,8 @@ function, or use this relation:
X<crypt> X<digest> X<hash> X<salt> X<plaintext> X<password>
X<decrypt> X<cryptography> X<passwd> X<encrypt>
+=for Pod::Functions one-way passwd-style encryption
+
Creates a digest string exactly like the crypt(3) function in the C
library (assuming that you actually have a version there that has not
been extirpated as a potential munition).
@@ -1046,7 +1168,7 @@ of SALT may matter.
Traditionally the result is a string of 13 bytes: two first bytes of
the salt, followed by 11 bytes from the set C<[./0-9A-Za-z]>, and only
-the first eight bytes of PLAINTEXT mattered. But alternative
+the first eight bytes of PLAINTEXT mattered. But alternative
hashing schemes (like MD5), higher level security schemes (like C2),
and implementations on non-Unix platforms may produce different
strings.
@@ -1089,24 +1211,36 @@ the string back to an eight-bit byte string before calling crypt()
(on that copy). If that works, good. If not, crypt() dies with
C<Wide character in crypt>.
+Portability issues: L<perlport/crypt>.
+
=item dbmclose HASH
X<dbmclose>
+=for Pod::Functions breaks binding on a tied dbm file
+
[This function has been largely superseded by the C<untie> function.]
Breaks the binding between a DBM file and a hash.
+Portability issues: L<perlport/dbmclose>.
+
=item dbmopen HASH,DBNAME,MASK
X<dbmopen> X<dbm> X<ndbm> X<sdbm> X<gdbm>
-[This function has been largely superseded by the C<tie> function.]
+=for Pod::Functions create binding on a tied dbm file
+
+[This function has been largely superseded by the
+L<tie|/tie VARIABLE,CLASSNAME,LIST> function.]
This binds a dbm(3), ndbm(3), sdbm(3), gdbm(3), or Berkeley DB file to a
hash. HASH is the name of the hash. (Unlike normal C<open>, the first
argument is I<not> a filehandle, even though it looks like one). DBNAME
is the name of the database (without the F<.dir> or F<.pag> extension if
any). If the database does not exist, it is created with protection
-specified by MASK (as modified by the C<umask>). If your system supports
+specified by MASK (as modified by the C<umask>). To prevent creation of
+the database if it doesn't exist, you may specify a MODE
+of 0, and the function will return a false value if it
+can't find an existing database. If your system supports
only the older DBM functions, you may make only one C<dbmopen> call in your
program. In older versions of Perl, if your system had neither DBM nor
ndbm, calling C<dbmopen> produced a fatal error; it now falls back to
@@ -1139,17 +1273,15 @@ before you call dbmopen():
dbmopen(%NS_Hist, "$ENV{HOME}/.netscape/history.db")
or die "Can't open netscape history file: $!";
-=item default BLOCK
-
-Within a C<foreach> or a C<given>, a C<default> BLOCK acts like a C<when>
-that's always true. Only available after Perl 5.10, and only if the
-C<switch> feature has been requested. See L</when>.
+Portability issues: L<perlport/dbmopen>.
=item defined EXPR
X<defined> X<undef> X<undefined>
=item defined
+=for Pod::Functions test whether a value, variable, or function is defined
+
Returns a Boolean value telling whether EXPR has a value other than
the undefined value C<undef>. If EXPR is not present, C<$_> is
checked.
@@ -1212,6 +1344,8 @@ See also L</undef>, L</exists>, L</ref>.
=item delete EXPR
X<delete>
+=for Pod::Functions deletes a value from a hash
+
Given an expression that specifies an element or slice of a hash, C<delete>
deletes the specified elements from that hash so that exists() on that element
no longer returns true. Setting a hash element to the undefined value does
@@ -1285,10 +1419,12 @@ final operation is an element or slice of an aggregate:
=item die LIST
X<die> X<throw> X<exception> X<raise> X<$@> X<abort>
-C<die> raises an exception. Inside an C<eval> the error message is stuffed
+=for Pod::Functions raise an exception or bail out
+
+C<die> raises an exception. Inside an C<eval> the error message is stuffed
into C<$@> and the C<eval> is terminated with the undefined value.
If the exception is outside of all enclosing C<eval>s, then the uncaught
-exception prints LIST to C<STDERR> and exits with a non-zero value. If you
+exception prints LIST to C<STDERR> and exits with a non-zero value. If you
need to exit the process with a specific exit code, see L</exit>.
Equivalent examples:
@@ -1338,7 +1474,8 @@ determined from the values of C<$!> and C<$?> with this pseudocode:
exit 255; # last resort
The intent is to squeeze as much possible information about the likely cause
-into the limited space of the system exit code. However, as C<$!> is the value
+into the limited space of the system exit
+code. However, as C<$!> is the value
of C's C<errno>, which can be set by any system call, this means that the value
of the exit code used by C<die> can be non-predictable, so should not be relied
upon, other than to be non-zero.
@@ -1391,10 +1528,12 @@ See also exit(), warn(), and the Carp module.
=item do BLOCK
X<do> X<block>
+=for Pod::Functions turn a BLOCK into a TERM
+
Not really a function. Returns the value of the last command in the
sequence of commands indicated by BLOCK. When modified by the C<while> or
C<until> loop modifier, executes the BLOCK once before testing the loop
-condition. (On other statements the loop modifiers test the conditional
+condition. (On other statements the loop modifiers test the conditional
first.)
C<do BLOCK> does I<not> count as a loop, so the loop control statements
@@ -1456,6 +1595,8 @@ X<dump> X<core> X<undump>
=item dump
+=for Pod::Functions create an immediate core dump
+
This function causes an immediate core dump. See also the B<-u>
command-line switch in L<perlrun>, which does the same thing.
Primarily this is so that you can use the B<undump> program (not
@@ -1471,10 +1612,12 @@ be open any more when the program is reincarnated, with possible
resulting confusion by Perl.
This function is now largely obsolete, mostly because it's very hard to
-convert a core file into an executable. That's why you should now invoke
+convert a core file into an executable. That's why you should now invoke
it as C<CORE::dump()>, if you don't want to be warned against a possible
typo.
+Portability issues: L<perlport/dump>.
+
=item each HASH
X<each> X<hash, iterator>
@@ -1483,11 +1626,14 @@ X<array, iterator>
=item each EXPR
-When called in list context, returns a 2-element list consisting of the key
-and value for the next element of a hash, or the index and value for the
-next element of an array, so that you can iterate over it. When called in
-scalar context, returns only the key (not the value) in a hash, or the index
-in an array.
+=for Pod::Functions retrieve the next key/value pair from a hash
+
+When called on a hash in list context, returns a 2-element list
+consisting of the key and value for the next element of a hash. In Perl
+5.12 and later only, it will also return the index and value for the next
+element of an array so that you can iterate over it; older Perls consider
+this a syntax error. When called in scalar context, returns only the key
+(not the value) in a hash, or the index in an array.
Hash entries are returned in an apparently random order. The actual random
order is subject to change in future versions of Perl, but it is
@@ -1498,14 +1644,15 @@ for security reasons (see L<perlsec/"Algorithmic Complexity Attacks">).
After C<each> has returned all entries from the hash or array, the next
call to C<each> returns the empty list in list context and C<undef> in
-scalar context. The next call following that one restarts iteration. Each
-hash or array has its own internal iterator, accessed by C<each>, C<keys>,
-and C<values>. The iterator is implicitly reset when C<each> has reached
-the end as just described; it can be explicitly reset by calling C<keys> or
-C<values> on the hash or array. If you add or delete a hash's elements
-while iterating over it, entries may be skipped or duplicated--so don't do
-that. Exception: It is always safe to delete the item most recently
-returned by C<each()>, so the following code works properly:
+scalar context; the next call following I<that> one restarts iteration.
+Each hash or array has its own internal iterator, accessed by C<each>,
+C<keys>, and C<values>. The iterator is implicitly reset when C<each> has
+reached the end as just described; it can be explicitly reset by calling
+C<keys> or C<values> on the hash or array. If you add or delete a hash's
+elements while iterating over it, entries may be skipped or duplicated--so
+don't do that. Exception: In the current implementation, it is always safe
+to delete the item most recently returned by C<each()>, so the following
+code works properly:
while (($key, $value) = each %hash) {
print $key, "\n";
@@ -1526,6 +1673,14 @@ The exact behaviour may change in a future version of Perl.
while (($key,$value) = each $hashref) { ... }
+To avoid confusing would-be users of your code who are running earlier
+versions of Perl with mysterious syntax errors, put this sort of thing at
+the top of your file to signal that your code will work I<only> on Perls of
+a recent vintage:
+
+ use 5.012; # so keys/values/each work on arrays
+ use 5.014; # so keys/values/each work on scalars (experimental)
+
See also C<keys>, C<values>, and C<sort>.
=item eof FILEHANDLE
@@ -1537,6 +1692,8 @@ X<end-of-file>
=item eof
+=for Pod::Functions test a filehandle for its end
+
Returns 1 if the next read on FILEHANDLE will return end of file I<or> if
FILEHANDLE is not open. FILEHANDLE may be an expression whose value
gives the real filehandle. (Note that this function actually
@@ -1574,7 +1731,7 @@ of the very last file only. Examples:
print "--------------\n";
}
print;
- last if eof(); # needed if we're reading from a terminal
+ last if eof(); # needed if we're reading from a terminal
}
Practical hint: you almost never need to use C<eof> in Perl, because the
@@ -1589,15 +1746,31 @@ X<error, handling> X<exception, handling>
=item eval
+=for Pod::Functions catch exceptions or compile and run code
+
In the first form, the return value of EXPR is parsed and executed as if it
were a little Perl program. The value of the expression (which is itself
determined within scalar context) is first parsed, and if there were no
-errors, executed in the lexical context of the current Perl program, so
-that any variable settings or subroutine and format definitions remain
-afterwards. Note that the value is parsed every time the C<eval> executes.
+errors, executed as a block within the lexical context of the current Perl
+program. This means, that in particular, any outer lexical variables are
+visible to it, and any package variable settings or subroutine and format
+definitions remain afterwards.
+
+Note that the value is parsed every time the C<eval> executes.
If EXPR is omitted, evaluates C<$_>. This form is typically used to
delay parsing and subsequent execution of the text of EXPR until run time.
+If the C<unicode_eval> feature is enabled (which is the default under a
+C<use 5.16> or higher declaration), EXPR or C<$_> is treated as a string of
+characters, so C<use utf8> declarations have no effect, and source filters
+are forbidden. In the absence of the C<unicode_eval> feature, the string
+will sometimes be treated as characters and sometimes as bytes, depending
+on the internal encoding, and source filters activated within the C<eval>
+exhibit the erratic, but historical, behaviour of affecting some outer file
+scope that is still compiling. See also the L</evalbytes> keyword, which
+always treats its input as a byte stream and works properly with source
+filters, and the L<feature> pragma.
+
In the second form, the code within the BLOCK is parsed only once--at the
same time the code surrounding the C<eval> itself was parsed--and executed
within the context of the current Perl program. This form is typically
@@ -1617,12 +1790,12 @@ determined.
If there is a syntax error or runtime error, or a C<die> statement is
executed, C<eval> returns C<undef> in scalar context
-or an empty list--or, for syntax errors, a list containing a single
-undefined value--in list context, and C<$@> is set to the error
-message. The discrepancy in the return values in list context is
-considered a bug by some, and will probably be fixed in a future
-release. If there was no error, C<$@> is guaranteed to be the empty
-string. Beware that using C<eval> neither silences Perl from printing
+or an empty list in list context, and C<$@> is set to the error
+message. (Prior to 5.16, a bug caused C<undef> to be returned
+in list context for syntax errors, but not for runtime errors.)
+If there was no error, C<$@> is set to the empty string. A
+control flow operator like C<last> or C<goto> can bypass the setting of
+C<$@>. Beware that using C<eval> neither silences Perl from printing
warnings to STDERR, nor does it stuff the text of warning messages into C<$@>.
To do either of those, you have to use the C<$SIG{__WARN__}> facility, or
turn off warnings inside the BLOCK or EXPR using S<C<no warnings 'all'>>.
@@ -1635,7 +1808,7 @@ the die operator is used to raise exceptions.
If you want to trap errors when loading an XS module, some problems with
the binary interface (such as Perl version skew) may be fatal even with
-C<eval> unless C<$ENV{PERL_DL_NONLAZY}> is set. See L<perlrun>.
+C<eval> unless C<$ENV{PERL_DL_NONLAZY}> is set. See L<perlrun>.
If the code to be executed doesn't vary, you may use the eval-BLOCK
form to trap run-time errors without incurring the penalty of
@@ -1702,7 +1875,7 @@ particular situation, you can just use symbolic references instead, as
in case 6.
Before Perl 5.14, the assignment to C<$@> occurred before restoration
-of localised variables, which means that for your code to run on older
+of localized variables, which means that for your code to run on older
versions, a temporary is required if you want to mask some but not all
errors:
@@ -1723,24 +1896,43 @@ C<next>, C<last>, or C<redo> cannot be used to leave or restart the block.
An C<eval ''> executed within the C<DB> package doesn't see the usual
surrounding lexical scope, but rather the scope of the first non-DB piece
-of code that called it. You don't normally need to worry about this unless
+of code that called it. You don't normally need to worry about this unless
you are writing a Perl debugger.
+=item evalbytes EXPR
+X<evalbytes>
+
+=item evalbytes
+
+=for Pod::Functions +evalbytes similar to string eval, but intend to parse a bytestream
+
+This function is like L</eval> with a string argument, except it always
+parses its argument, or C<$_> if EXPR is omitted, as a string of bytes. A
+string containing characters whose ordinal value exceeds 255 results in an
+error. Source filters activated within the evaluated code apply to the
+code itself.
+
+This function is only available under the C<evalbytes> feature, a
+C<use v5.16> (or higher) declaration, or with a C<CORE::> prefix. See
+L<feature> for more information.
+
=item exec LIST
X<exec> X<execute>
=item exec PROGRAM LIST
+=for Pod::Functions abandon this program to run another
+
The C<exec> function executes a system command I<and never returns>;
use C<system> instead of C<exec> if you want it to return. It fails and
returns false only if the command does not exist I<and> it is executed
directly instead of via your system's command shell (see below).
Since it's a common mistake to use C<exec> instead of C<system>, Perl
-warns you if there is a following statement that isn't C<die>, C<warn>,
-or C<exit> (if C<-w> is set--but you always do that, right?). If you
-I<really> want to follow an C<exec> with some other statement, you
-can use one of these styles to avoid the warning:
+warns you if C<exec> is called in void context and if there is a following
+statement that isn't C<die>, C<warn>, or C<exit> (if C<-w> is set--but
+you always do that, right?). If you I<really> want to follow an C<exec>
+with some other statement, you can use one of these styles to avoid the warning:
exec ('foo') or print STDERR "couldn't exec foo: $!";
{ exec ('foo') }; print STDERR "couldn't exec foo: $!";
@@ -1802,9 +1994,13 @@ open handles to avoid lost output.
Note that C<exec> will not call your C<END> blocks, nor will it invoke
C<DESTROY> methods on your objects.
+Portability issues: L<perlport/exec>.
+
=item exists EXPR
X<exists> X<autovivification>
+=for Pod::Functions test whether a hash key is present
+
Given an expression that specifies an element of a hash, returns true if the
specified element in the hash has ever been initialized, even if the
corresponding value is undefined.
@@ -1847,7 +2043,7 @@ operation is a hash or array key lookup or subroutine name:
if (exists &{$ref->{A}{B}{$key}}) { }
-Although the mostly deeply nested array or hash will not spring into
+Although the most deeply nested array or hash element will not spring into
existence just because its existence was tested, any intervening ones will.
Thus C<< $ref->{"A"} >> and C<< $ref->{"A"}->{"B"} >> will spring
into existence due to the existence test for the $key element above.
@@ -1872,6 +2068,8 @@ X<exit> X<terminate> X<abort>
=item exit
+=for Pod::Functions terminate this program
+
Evaluates EXPR and exits immediately with that value. Example:
$ans = <STDIN>;
@@ -1892,21 +2090,77 @@ The exit() function does not always exit immediately. It calls any
defined C<END> routines first, but these C<END> routines may not
themselves abort the exit. Likewise any object destructors that need to
be called are called before the real exit. C<END> routines and destructors
-can change the exit status by modifying C<$?>. If this is a problem, you
-can call C<POSIX:_exit($status)> to avoid END and destructor processing.
+can change the exit status by modifying C<$?>. If this is a problem, you
+can call C<POSIX::_exit($status)> to avoid END and destructor processing.
See L<perlmod> for details.
+Portability issues: L<perlport/exit>.
+
=item exp EXPR
X<exp> X<exponential> X<antilog> X<antilogarithm> X<e>
=item exp
+=for Pod::Functions raise I<e> to a power
+
Returns I<e> (the natural logarithm base) to the power of EXPR.
If EXPR is omitted, gives C<exp($_)>.
+=item fc EXPR
+X<fc> X<foldcase> X<casefold> X<fold-case> X<case-fold>
+
+=item fc
+
+=for Pod::Functions +fc return casefolded version of a string
+
+Returns the casefolded version of EXPR. This is the internal function
+implementing the C<\F> escape in double-quoted strings.
+
+Casefolding is the process of mapping strings to a form where case
+differences are erased; comparing two strings in their casefolded
+form is effectively a way of asking if two strings are equal,
+regardless of case.
+
+Roughly, if you ever found yourself writing this
+
+ lc($this) eq lc($that) # Wrong!
+ # or
+ uc($this) eq uc($that) # Also wrong!
+ # or
+ $this =~ /\Q$that/i # Right!
+
+Now you can write
+
+ fc($this) eq fc($that)
+
+And get the correct results.
+
+Perl only implements the full form of casefolding.
+For further information on casefolding, refer to
+the Unicode Standard, specifically sections 3.13 C<Default Case Operations>,
+4.2 C<Case-Normative>, and 5.18 C<Case Mappings>,
+available at L<http://www.unicode.org/versions/latest/>, as well as the
+Case Charts available at L<http://www.unicode.org/charts/case/>.
+
+If EXPR is omitted, uses C<$_>.
+
+This function behaves the same way under various pragma, such as in a locale,
+as L</lc> does.
+
+While the Unicode Standard defines two additional forms of casefolding,
+one for Turkic languages and one that never maps one character into multiple
+characters, these are not provided by the Perl core; However, the CPAN module
+C<Unicode::Casing> may be used to provide an implementation.
+
+This keyword is available only when the C<"fc"> feature is enabled,
+or when prefixed with C<CORE::>; See L<feature>. Alternately,
+include a C<use v5.16> or later to the current scope.
+
=item fcntl FILEHANDLE,FUNCTION,SCALAR
X<fcntl>
+=for Pod::Functions file control system call
+
Implements the fcntl(2) function. You'll probably have to say
use Fcntl;
@@ -1941,9 +2195,20 @@ on your own, though.
$flags = fcntl(REMOTE, F_SETFL, $flags | O_NONBLOCK)
or die "Can't set flags for the socket: $!\n";
+Portability issues: L<perlport/fcntl>.
+
+=item __FILE__
+X<__FILE__>
+
+=for Pod::Functions the name of the current source file
+
+A special token that returns the name of the file in which it occurs.
+
=item fileno FILEHANDLE
X<fileno>
+=for Pod::Functions return file descriptor from filehandle
+
Returns the file descriptor for a filehandle, or undefined if the
filehandle is not open. If there is no real file descriptor at the OS
level, as can happen with filehandles connected to memory objects via
@@ -1964,6 +2229,8 @@ same underlying descriptor:
=item flock FILEHANDLE,OPERATION
X<flock> X<lock> X<locking>
+=for Pod::Functions lock an entire file with an advisory lock
+
Calls flock(2), or an emulation of it, on FILEHANDLE. Returns true
for success, false on failure. Produces a fatal error if used on a
machine that doesn't implement flock(2), fcntl(2) locking, or lockf(3).
@@ -2041,9 +2308,13 @@ function lose their locks, making it seriously harder to write servers.
See also L<DB_File> for other flock() examples.
+Portability issues: L<perlport/flock>.
+
=item fork
X<fork> X<child> X<parent>
+=for Pod::Functions create a new process just like this one
+
Does a fork(2) system call to create a new process running the
same program at the same point. It returns the child pid to the
parent process, C<0> to the child process, or C<undef> if the fork is
@@ -2070,9 +2341,20 @@ if you exit, then the remote server (such as, say, a CGI script or a
backgrounded job launched from a remote shell) won't think you're done.
You should reopen those to F</dev/null> if it's any issue.
+On some platforms such as Windows, where the fork() system call is not available,
+Perl can be built to emulate fork() in the Perl interpreter.
+The emulation is designed, at the level of the Perl program,
+to be as compatible as possible with the "Unix" fork().
+However it has limitations that have to be considered in code intended to be portable.
+See L<perlfork> for more details.
+
+Portability issues: L<perlport/fork>.
+
=item format
X<format>
+=for Pod::Functions declare a picture format with use by the write() function
+
Declare a picture format for use by the C<write> function. For
example:
@@ -2091,6 +2373,8 @@ See L<perlform> for many details and examples.
=item formline PICTURE,LIST
X<formline>
+=for Pod::Functions internal function used for formats
+
This is an internal function used by C<format>s, though you may call it,
too. It formats (see L<perlform>) a list of values according to the
contents of PICTURE, placing the output into the format output
@@ -2117,6 +2401,8 @@ X<getc> X<getchar> X<character> X<file, read>
=item getc
+=for Pod::Functions get the next character from the filehandle
+
Returns the next character from the input file attached to FILEHANDLE,
or the undefined value at end of file or if there was an error (in
the latter case C<$!> is set). If FILEHANDLE is omitted, reads from
@@ -2152,6 +2438,8 @@ L<perlmodlib/CPAN>.
=item getlogin
X<getlogin> X<login>
+=for Pod::Functions return who logged in at this tty
+
This implements the C library function of the same name, which on most
systems returns the current login from F</etc/utmp>, if any. If it
returns the empty string, use C<getpwuid>.
@@ -2161,9 +2449,13 @@ returns the empty string, use C<getpwuid>.
Do not consider C<getlogin> for authentication: it is not as
secure as C<getpwuid>.
+Portability issues: L<perlport/getlogin>.
+
=item getpeername SOCKET
X<getpeername> X<peer>
+=for Pod::Functions find the other end of a socket connection
+
Returns the packed sockaddr address of the other end of the SOCKET
connection.
@@ -2176,6 +2468,8 @@ connection.
=item getpgrp PID
X<getpgrp> X<group>
+=for Pod::Functions get process group
+
Returns the current process group for the specified PID. Use
a PID of C<0> to get the current process group for the
current process. Will raise an exception if used on a machine that
@@ -2183,25 +2477,34 @@ doesn't implement getpgrp(2). If PID is omitted, returns the process
group of the current process. Note that the POSIX version of C<getpgrp>
does not accept a PID argument, so only C<PID==0> is truly portable.
+Portability issues: L<perlport/getpgrp>.
+
=item getppid
X<getppid> X<parent> X<pid>
+=for Pod::Functions get parent process ID
+
Returns the process id of the parent process.
-Note for Linux users: on Linux, the C functions C<getpid()> and
-C<getppid()> return different values from different threads. In order to
-be portable, this behavior is not reflected by the Perl-level function
-C<getppid()>, that returns a consistent value across threads. If you want
-to call the underlying C<getppid()>, you may use the CPAN module
-C<Linux::Pid>.
+Note for Linux users: Between v5.8.1 and v5.16.0 Perl would work
+around non-POSIX thread semantics the minority of Linux systems (and
+Debian GNU/kFreeBSD systems) that used LinuxThreads, this emulation
+has since been removed. See the documentation for L<$$|perlvar/$$> for
+details.
+
+Portability issues: L<perlport/getppid>.
=item getpriority WHICH,WHO
X<getpriority> X<priority> X<nice>
+=for Pod::Functions get current nice value
+
Returns the current priority for a process, a process group, or a user.
-(See C<getpriority(2)>.) Will raise a fatal exception if used on a
+(See L<getpriority(2)>.) Will raise a fatal exception if used on a
machine that doesn't implement getpriority(2).
+Portability issues: L<perlport/getpriority>.
+
=item getpwnam NAME
X<getpwnam> X<getgrnam> X<gethostbyname> X<getnetbyname> X<getprotobyname>
X<getpwuid> X<getgrgid> X<getservbyname> X<gethostbyaddr> X<getnetbyaddr>
@@ -2210,64 +2513,124 @@ 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>
+=for Pod::Functions get passwd record given user login name
+
=item getgrnam NAME
+=for Pod::Functions get group record given group name
+
=item gethostbyname NAME
+=for Pod::Functions get host record given name
+
=item getnetbyname NAME
+=for Pod::Functions get networks record given name
+
=item getprotobyname NAME
+=for Pod::Functions get protocol record given name
+
=item getpwuid UID
+=for Pod::Functions get passwd record given user ID
+
=item getgrgid GID
+=for Pod::Functions get group record given group user ID
+
=item getservbyname NAME,PROTO
+=for Pod::Functions get services record given its name
+
=item gethostbyaddr ADDR,ADDRTYPE
+=for Pod::Functions get host record given its address
+
=item getnetbyaddr ADDR,ADDRTYPE
+=for Pod::Functions get network record given its address
+
=item getprotobynumber NUMBER
+=for Pod::Functions get protocol record numeric protocol
+
=item getservbyport PORT,PROTO
+=for Pod::Functions get services record given numeric port
+
=item getpwent
+=for Pod::Functions get next passwd record
+
=item getgrent
+=for Pod::Functions get next group record
+
=item gethostent
+=for Pod::Functions get next hosts record
+
=item getnetent
+=for Pod::Functions get next networks record
+
=item getprotoent
+=for Pod::Functions get next protocols record
+
=item getservent
+=for Pod::Functions get next services record
+
=item setpwent
+=for Pod::Functions prepare passwd file for use
+
=item setgrent
+=for Pod::Functions prepare group file for use
+
=item sethostent STAYOPEN
+=for Pod::Functions prepare hosts file for use
+
=item setnetent STAYOPEN
+=for Pod::Functions prepare networks file for use
+
=item setprotoent STAYOPEN
+=for Pod::Functions prepare protocols file for use
+
=item setservent STAYOPEN
+=for Pod::Functions prepare services file for use
+
=item endpwent
+=for Pod::Functions be done using passwd file
+
=item endgrent
+=for Pod::Functions be done using group file
+
=item endhostent
+=for Pod::Functions be done using hosts file
+
=item endnetent
+=for Pod::Functions be done using networks file
+
=item endprotoent
+=for Pod::Functions be done using protocols file
+
=item endservent
+=for Pod::Functions be done using services file
+
These routines are the same as their counterparts in the
system C library. In list context, the return values from the
various get routines are as follows:
@@ -2354,9 +2717,16 @@ you can write this:
$ip_address = inet_ntoa($packed_ip);
}
-Make sure <gethostbyname()> is called in SCALAR context and that
+Make sure C<gethostbyname()> is called in SCALAR context and that
its return value is checked for definedness.
+The C<getprotobynumber> function, even though it only takes one argument,
+has the precedence of a list operator, so beware:
+
+ getprotobynumber $number eq 'icmp' # WRONG
+ getprotobynumber($number eq 'icmp') # actually means this
+ getprotobynumber($number) eq 'icmp' # better this way
+
If you get tired of remembering which element of the return list
contains which return value, by-name interfaces are provided
in standard modules: C<File::stat>, C<Net::hostent>, C<Net::netent>,
@@ -2373,9 +2743,13 @@ Even though it looks as though they're the same method calls (uid),
they aren't, because a C<File::stat> object is different from
a C<User::pwent> object.
+Portability issues: L<perlport/getpwnam> to L<perlport/endservent>.
+
=item getsockname SOCKET
X<getsockname>
+=for Pod::Functions retrieve the sockaddr for a given socket
+
Returns the packed sockaddr address of this end of the SOCKET connection,
in case you don't know the address because you have several different
IPs that the connection might have come in on.
@@ -2390,18 +2764,20 @@ IPs that the connection might have come in on.
=item getsockopt SOCKET,LEVEL,OPTNAME
X<getsockopt>
+=for Pod::Functions get socket options on a given socket
+
Queries the option named OPTNAME associated with SOCKET at a given LEVEL.
Options may exist at multiple protocol levels depending on the socket
type, but at least the uppermost socket level SOL_SOCKET (defined in the
-C<Socket> module) will exist. To query options at another level the
+C<Socket> module) will exist. To query options at another level the
protocol number of the appropriate protocol controlling the option
-should be supplied. For example, to indicate that an option is to be
+should be supplied. For example, to indicate that an option is to be
interpreted by the TCP protocol, LEVEL should be set to the protocol
number of TCP, which you can get using C<getprotobyname>.
The function returns a packed string representing the requested socket
option, or C<undef> on error, with the reason for the error placed in
-C<$!>. Just what is in the packed string depends on LEVEL and OPTNAME;
+C<$!>. Just what is in the packed string depends on LEVEL and OPTNAME;
consult getsockopt(2) for details. A common case is that the option is an
integer, in which case the result is a packed integer, which you can decode
using C<unpack> with the C<i> (or C<I>) format.
@@ -2418,41 +2794,20 @@ Here's an example to test whether Nagle's algorithm is enabled on a socket:
my $nodelay = unpack("I", $packed);
print "Nagle's algorithm is turned ", $nodelay ? "off\n" : "on\n";
-
-=item given EXPR BLOCK
-X<given>
-
-=item given BLOCK
-
-C<given> is analogous to the C<switch> keyword in other languages. C<given>
-and C<when> are used in Perl to implement C<switch>/C<case> like statements.
-Only available after Perl 5.10. For example:
-
- use v5.10;
- given ($fruit) {
- when (/apples?/) {
- print "I like apples."
- }
- when (/oranges?/) {
- print "I don't like oranges."
- }
- default {
- print "I don't like anything"
- }
- }
-
-See L<perlsyn/"Switch statements"> for detailed information.
+Portability issues: L<perlport/getsockopt>.
=item glob EXPR
X<glob> X<wildcard> X<filename, expansion> X<expand>
=item glob
+=for Pod::Functions expand filenames using wildcards
+
In list context, returns a (possibly empty) list of filename expansions on
-the value of EXPR such as the standard Unix shell F</bin/csh> would do. In
+the value of EXPR such as the standard Unix shell F</bin/csh> would do. In
scalar context, glob iterates through such filename expansions, returning
-undef when the list is exhausted. This is the internal function
-implementing the C<< <*.c> >> operator, but you can use it directly. If
+undef when the list is exhausted. This is the internal function
+implementing the C<< <*.c> >> operator, but you can use it directly. If
EXPR is omitted, C<$_> is used. The C<< <*.c> >> operator is discussed in
more detail in L<perlop/"I/O Operators">.
@@ -2460,6 +2815,19 @@ Note that C<glob> splits its arguments on whitespace and treats
each segment as separate pattern. As such, C<glob("*.c *.h")>
matches all files with a F<.c> or F<.h> extension. The expression
C<glob(".* *")> matches all files in the current working directory.
+If you want to glob filenames that might contain whitespace, you'll
+have to use extra quotes around the spacey filename to protect it.
+For example, to glob filenames that have an C<e> followed by a space
+followed by an C<f>, use either of:
+
+ @spacies = <"*e f*">;
+ @spacies = glob '"*e f*"';
+ @spacies = glob q("*e f*");
+
+If you had to get a variable through, you could do this:
+
+ @spacies = glob "'*${var}e f*'";
+ @spacies = glob qq("*${var}e f*");
If non-empty braces are the only wildcard characters used in the
C<glob>, no filenames are matched, but potentially many strings
@@ -2472,19 +2840,23 @@ Beginning with v5.6.0, this operator is implemented using the standard
C<File::Glob> extension. See L<File::Glob> for details, including
C<bsd_glob> which does not treat whitespace as a pattern separator.
+Portability issues: L<perlport/glob>.
+
=item gmtime EXPR
X<gmtime> X<UTC> X<Greenwich>
=item gmtime
-Works just like L<localtime> but the returned values are
+=for Pod::Functions convert UNIX time into record or string using Greenwich time
+
+Works just like L</localtime> but the returned values are
localized for the standard Greenwich time zone.
Note: When called in list context, $isdst, the last value
returned by gmtime, is always C<0>. There is no
Daylight Saving Time in GMT.
-See L<perlport/gmtime> for portability concerns.
+Portability issues: L<perlport/gmtime>.
=item goto LABEL
X<goto> X<jump> X<jmp>
@@ -2493,8 +2865,10 @@ X<goto> X<jump> X<jmp>
=item goto &NAME
+=for Pod::Functions create spaghetti code
+
The C<goto-LABEL> form finds the statement labeled with LABEL and
-resumes execution there. It can't be used to get out of a block or
+resumes execution there. It can't be used to get out of a block or
subroutine given to C<sort>. It can be used to go almost anywhere
else within the dynamic scope, including out of subroutines, but it's
usually better to use some other construct such as C<last> or C<die>.
@@ -2510,8 +2884,8 @@ necessarily recommended if you're optimizing for maintainability:
goto ("FOO", "BAR", "GLARCH")[$i];
As shown in this example, C<goto-EXPR> is exempt from the "looks like a
-function" rule. A pair of parentheses following it does not (necessarily)
-delimit its argument. C<goto("NE")."XT"> is equivalent to C<goto NEXT>.
+function" rule. A pair of parentheses following it does not (necessarily)
+delimit its argument. C<goto("NE")."XT"> is equivalent to C<goto NEXT>.
Use of C<goto-LABEL> or C<goto-EXPR> to jump into a construct is
deprecated and will issue a warning. Even then, it may not be used to
@@ -2540,6 +2914,8 @@ X<grep>
=item grep EXPR,LIST
+=for Pod::Functions locate elements in a list test true against a given criterion
+
This is similar in spirit to, but not the same as, grep(1) and its
relatives. In particular, it is not limited to using regular expressions.
@@ -2575,6 +2951,8 @@ X<hex> X<hexadecimal>
=item hex
+=for Pod::Functions convert a string to a hexadecimal number
+
Interprets EXPR as a hex string and returns the corresponding value.
(To convert strings that might start with either C<0>, C<0x>, or C<0b>, see
L</oct>.) If EXPR is omitted, uses C<$_>.
@@ -2584,12 +2962,14 @@ L</oct>.) If EXPR is omitted, uses C<$_>.
Hex strings may only represent integers. Strings that would cause
integer overflow trigger a warning. Leading whitespace is not stripped,
-unlike oct(). To present something as hex, look into L</printf>,
+unlike oct(). To present something as hex, look into L</printf>,
L</sprintf>, and L</unpack>.
=item import LIST
X<import>
+=for Pod::Functions patch a module's namespace into your own
+
There is no builtin C<import> function. It is just an ordinary
method (subroutine) defined (or inherited) by modules that wish to export
names to another module. The C<use> function calls the C<import> method
@@ -2600,21 +2980,24 @@ X<index> X<indexOf> X<InStr>
=item index STR,SUBSTR
+=for Pod::Functions find a substring within a string
+
The index function searches for one string within another, but without
the wildcard-like behavior of a full regular-expression pattern match.
It returns the position of the first occurrence of SUBSTR in STR at
or after POSITION. If POSITION is omitted, starts searching from the
beginning of the string. POSITION before the beginning of the string
or after its end is treated as if it were the beginning or the end,
-respectively. POSITION and the return value are based at C<0> (or whatever
-you've set the C<$[> variable to--but don't do that). If the substring
-is not found, C<index> returns one less than the base, ordinarily C<-1>.
+respectively. POSITION and the return value are based at zero.
+If the substring is not found, C<index> returns -1.
=item int EXPR
X<int> X<integer> X<truncate> X<trunc> X<floor>
=item int
+=for Pod::Functions get the integer portion of a number
+
Returns the integer portion of EXPR. If EXPR is omitted, uses C<$_>.
You should not use this function for rounding: one because it truncates
towards C<0>, and two because machine representations of floating-point
@@ -2627,6 +3010,8 @@ functions will serve you better than will int().
=item ioctl FILEHANDLE,FUNCTION,SCALAR
X<ioctl>
+=for Pod::Functions system-dependent device control system call
+
Implements the ioctl(2) function. You'll probably first have to say
require "sys/ioctl.ph"; # probably in $Config{archlib}/sys/ioctl.ph
@@ -2661,9 +3046,13 @@ system:
The special string C<"0 but true"> is exempt from B<-w> complaints
about improper numeric conversions.
+Portability issues: L<perlport/ioctl>.
+
=item join EXPR,LIST
X<join>
+=for Pod::Functions join a list into a string using a separator
+
Joins the separate strings of LIST into a single string with fields
separated by the value of EXPR, and returns that new string. Example:
@@ -2679,8 +3068,12 @@ X<keys> X<key>
=item keys EXPR
-Returns a list consisting of all the keys of the named hash, or the indices
-of an array. (In scalar context, returns the number of keys or indices.)
+=for Pod::Functions retrieve list of indices from a hash
+
+Called in list context, returns a list consisting of all the keys of the
+named hash, or in Perl 5.12 or later only, the indices of an array. Perl
+releases prior to 5.12 will produce a syntax error if you try to use an
+array argument. In scalar context, returns the number of keys or indices.
The keys of a hash are returned in an apparently random order. The actual
random order is subject to change in future versions of Perl, but it
@@ -2731,7 +3124,7 @@ buckets will be retained even if you do C<%hash = ()>, use C<undef
%hash> if you want to free the storage while C<%hash> is still in scope.
You can't shrink the number of buckets allocated for the hash using
C<keys> in this way (but you needn't worry about doing this by accident,
-as trying has no effect). C<keys @array> in an lvalue context is a syntax
+as trying has no effect). C<keys @array> in an lvalue context is a syntax
error.
Starting with Perl 5.14, C<keys> can take a scalar EXPR, which must contain
@@ -2742,11 +3135,23 @@ experimental. The exact behaviour may change in a future version of Perl.
for (keys $hashref) { ... }
for (keys $obj->get_arrayref) { ... }
+To avoid confusing would-be users of your code who are running earlier
+versions of Perl with mysterious syntax errors, put this sort of thing at
+the top of your file to signal that your code will work I<only> on Perls of
+a recent vintage:
+
+ use 5.012; # so keys/values/each work on arrays
+ use 5.014; # so keys/values/each work on scalars (experimental)
+
See also C<each>, C<values>, and C<sort>.
=item kill SIGNAL, LIST
+
+=item kill SIGNAL
X<kill> X<signal>
+=for Pod::Functions send a signal to a process or process group
+
Sends a signal to a list of processes. Returns the number of
processes successfully signaled (which is not necessarily the
same as the number actually killed).
@@ -2762,7 +3167,8 @@ alive (even if only as a zombie) and hasn't changed its UID. See
L<perlport> for notes on the portability of this construct.
Unlike in the shell, if SIGNAL is negative, it kills process groups instead
-of processes. That means you usually want to use positive not negative signals.
+of processes. That means you usually
+want to use positive not negative signals.
You may also use a signal name in quotes.
The behavior of kill when a I<PROCESS> number is zero or negative depends on
@@ -2771,11 +3177,27 @@ signal the current process group and -1 will signal all processes.
See L<perlipc/"Signals"> for more details.
+On some platforms such as Windows where the fork() system call is not available.
+Perl can be built to emulate fork() at the interpreter level.
+This emulation has limitations related to kill that have to be considered,
+for code running on Windows and in code intended to be portable.
+
+See L<perlfork> for more details.
+
+If there is no I<LIST> of processes, no signal is sent, and the return
+value is 0. This form is sometimes used, however, because it causes
+tainting checks to be run. But see
+L<perlsec/Laundering and Detecting Tainted Data>.
+
+Portability issues: L<perlport/kill>.
+
=item last LABEL
X<last> X<break>
=item last
+=for Pod::Functions exit a block prematurely
+
The C<last> command is like the C<break> statement in C (as used in
loops); it immediately exits the loop in question. If the LABEL is
omitted, the command refers to the innermost enclosing loop. The
@@ -2802,6 +3224,8 @@ X<lc> X<lowercase>
=item lc
+=for Pod::Functions return lower-case version of a string
+
Returns a lowercased version of EXPR. This is the internal function
implementing the C<\L> escape in double-quoted strings.
@@ -2826,21 +3250,29 @@ respectively.
=back
-=item Otherwise, If EXPR has the UTF8 flag set
+=item Otherwise, if C<use locale> (but not C<use locale ':not_characters'>) is in effect:
-If the current package has a subroutine named C<ToLower>, it will be used to
-change the case
-(See L<perlunicode/"User-Defined Case Mappings (for serious hackers only)">.)
-Otherwise Unicode semantics are used for the case change.
+Respects current LC_CTYPE locale for code points < 256; and uses Unicode
+semantics for the remaining code points (this last can only happen if
+the UTF8 flag is also set). See L<perllocale>.
-=item Otherwise, if C<use locale> is in effect
+A deficiency in this is that case changes that cross the 255/256
+boundary are not well-defined. For example, the lower case of LATIN CAPITAL
+LETTER SHARP S (U+1E9E) in Unicode semantics is U+00DF (on ASCII
+platforms). But under C<use locale>, the lower case of U+1E9E is
+itself, because 0xDF may not be LATIN SMALL LETTER SHARP S 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. Perl returns
+the input character unchanged, for all instances (and there aren't
+many) where the 255/256 boundary would otherwise be crossed.
-Respects current LC_CTYPE locale. See L<perllocale>.
+=item Otherwise, If EXPR has the UTF8 flag set:
-=item Otherwise, if C<use feature 'unicode_strings'> is in effect:
+Unicode semantics are used for the case change.
-Unicode semantics are used for the case change. Any subroutine named
-C<ToLower> will be ignored.
+=item Otherwise, if C<use feature 'unicode_strings'> or C<use locale ':not_characters'>) is in effect:
+
+Unicode semantics are used for the case change.
=item Otherwise:
@@ -2864,6 +3296,8 @@ X<lcfirst> X<lowercase>
=item lcfirst
+=for Pod::Functions return a string with just the next letter in lower case
+
Returns the value of EXPR with the first character lowercased. This
is the internal function implementing the C<\l> escape in
double-quoted strings.
@@ -2878,6 +3312,8 @@ X<length> X<size>
=item length
+=for Pod::Functions return the number of bytes in a string
+
Returns the length in I<characters> of the value of EXPR. If EXPR is
omitted, returns the length of C<$_>. If EXPR is undefined, returns
C<undef>.
@@ -2891,15 +3327,28 @@ characters, not physical bytes. For how many bytes a string encoded as
UTF-8 would take up, use C<length(Encode::encode_utf8(EXPR))> (you'll have
to C<use Encode> first). See L<Encode> and L<perlunicode>.
+=item __LINE__
+X<__LINE__>
+
+=for Pod::Functions the current source line number
+
+A special token that compiles to the current line number.
+
=item link OLDFILE,NEWFILE
X<link>
+=for Pod::Functions create a hard link in the filesystem
+
Creates a new filename linked to the old filename. Returns true for
success, false otherwise.
+Portability issues: L<perlport/link>.
+
=item listen SOCKET,QUEUESIZE
X<listen>
+=for Pod::Functions register your socket as a server
+
Does the same thing that the listen(2) system call does. Returns true if
it succeeded, false otherwise. See the example in
L<perlipc/"Sockets: Client/Server Communication">.
@@ -2907,6 +3356,8 @@ L<perlipc/"Sockets: Client/Server Communication">.
=item local EXPR
X<local>
+=for Pod::Functions create a temporary value for a global variable (dynamic scoping)
+
You really probably want to be using C<my> instead, because C<local> isn't
what most people think of as "local". See
L<perlsub/"Private Variables via my()"> for details.
@@ -2925,6 +3376,8 @@ X<localtime> X<ctime>
=item localtime
+=for Pod::Functions convert UNIX time into record or string using local time
+
Converts a time as returned by the time function to a 9-element list
with the time analyzed for the local time zone. Typically used as
follows:
@@ -2945,15 +3398,11 @@ This makes it easy to get a month name from a list:
print "$abbr[$mon] $mday";
# $mon=9, $mday=18 gives "Oct 18"
-C<$year> is the number of years since 1900, B<not> just the last two digits
-of the year. That is, C<$year> is C<123> in year 2023. The proper way
-to get a 4-digit year is simply:
+C<$year> contains the number of years since 1900. To get a 4-digit
+year write:
$year += 1900;
-Otherwise you create non-Y2K-compliant programs--and you wouldn't want
-to do that, would you?
-
To get the last two digits of the year (e.g., "01" in 2001) do:
$year = sprintf("%02d", $year % 100);
@@ -2972,8 +3421,9 @@ In scalar context, C<localtime()> returns the ctime(3) value:
$now_string = localtime; # e.g., "Thu Oct 13 04:54:34 1994"
-This scalar value is B<not> locale-dependent but is a Perl builtin. For GMT
-instead of local time use the L</gmtime> builtin. See also the
+The format of this scalar value is B<not> locale-dependent
+but built into Perl. For GMT instead of local
+time use the L</gmtime> builtin. See also the
C<Time::Local> module (for converting seconds, minutes, hours, and such back to
the integer value returned by time()), and the L<POSIX> module's strftime(3)
and mktime(3) functions.
@@ -2990,8 +3440,6 @@ try for example:
Note that the C<%a> and C<%b>, the short forms of the day of the week
and the month of the year, may not necessarily be three characters wide.
-See L<perlport/localtime> for portability concerns.
-
The L<Time::gmtime> and L<Time::localtime> modules provide a convenient,
by-name access mechanism to the gmtime() and localtime() functions,
respectively.
@@ -2999,12 +3447,19 @@ respectively.
For a comprehensive date and time representation look at the
L<DateTime> module on CPAN.
+Portability issues: L<perlport/localtime>.
+
=item lock THING
X<lock>
+=for Pod::Functions +5.005 get a thread lock on a variable, subroutine, or method
+
This function places an advisory lock on a shared variable or referenced
object contained in I<THING> until the lock goes out of scope.
+The value returned is the scalar itself, if the argument is a scalar, or a
+reference, if the argument is a hash, array or subroutine.
+
lock() is a "weak keyword" : this means that if you've defined a function
by this name (before any calls to it), that function will be called
instead. If you are not under C<use threads::shared> this does nothing.
@@ -3015,6 +3470,8 @@ X<log> X<logarithm> X<e> X<ln> X<base>
=item log
+=for Pod::Functions retrieve the natural logarithm for a number
+
Returns the natural logarithm (base I<e>) of EXPR. If EXPR is omitted,
returns the log of C<$_>. To get the
log of another base, use basic algebra:
@@ -3028,11 +3485,17 @@ divided by the natural log of N. For example:
See also L</exp> for the inverse operation.
-=item lstat EXPR
+=item lstat FILEHANDLE
X<lstat>
+=item lstat EXPR
+
+=item lstat DIRHANDLE
+
=item lstat
+=for Pod::Functions stat a symbolic link
+
Does the same thing as the C<stat> function (including setting the
special C<_> filehandle) but stats a symbolic link instead of the file
the symbolic link points to. If symbolic links are unimplemented on
@@ -3041,8 +3504,12 @@ information, please see the documentation for C<stat>.
If EXPR is omitted, stats C<$_>.
+Portability issues: L<perlport/lstat>.
+
=item m//
+=for Pod::Functions match a string with a regular expression pattern
+
The match operator. See L<perlop/"Regexp Quote-Like Operators">.
=item map BLOCK LIST
@@ -3050,6 +3517,8 @@ X<map>
=item map EXPR,LIST
+=for Pod::Functions apply a change to a list to get back a new list with the changes
+
Evaluates the BLOCK or EXPR for each element of LIST (locally setting
C<$_> to each element) and returns the list value composed of the
results of each such evaluation. In scalar context, returns the
@@ -3068,7 +3537,7 @@ translates a list of numbers to their squared values.
my @squares = map { $_ > 5 ? ($_ * $_) : () } @numbers;
shows that number of returned elements can differ from the number of
-input elements. To omit an element, return an empty list ().
+input elements. To omit an element, return an empty list ().
This could also be achieved by writing
my @squares = map { $_ * $_ } grep { $_ > 5 } @numbers;
@@ -3077,7 +3546,7 @@ which makes the intention more clear.
Map always returns a list, which can be
assigned to a hash such that the elements
-become key/value pairs. See L<perldata> for more details.
+become key/value pairs. See L<perldata> for more details.
%hash = map { get_a_key_for($_) => $_ } @array;
@@ -3101,11 +3570,12 @@ the list elements, C<$_> keeps being lexical inside the block; that is, it
can't be seen from the outside, avoiding any potential side-effects.
C<{> starts both hash references and blocks, so C<map { ...> could be either
-the start of map BLOCK LIST or map EXPR, LIST. Because Perl doesn't look
+the start of map BLOCK LIST or map EXPR, LIST. Because Perl doesn't look
ahead for the closing C<}> it has to take a guess at which it's dealing with
-based on what it finds just after the C<{>. Usually it gets it right, but if it
+based on what it finds just after the
+C<{>. Usually it gets it right, but if it
doesn't it won't realize something is wrong until it gets to the C<}> and
-encounters the missing (or unexpected) comma. The syntax error will be
+encounters the missing (or unexpected) comma. The syntax error will be
reported close to the C<}>, but you'll need to change something near the C<{>
such as using a unary C<+> to give Perl some help:
@@ -3130,6 +3600,8 @@ X<mkdir> X<md> X<directory, create>
=item mkdir
+=for Pod::Functions create a directory
+
Creates the directory specified by FILENAME, with permissions
specified by MASK (as modified by C<umask>). If it succeeds it
returns true; otherwise it returns false and sets C<$!> (errno).
@@ -3154,6 +3626,8 @@ the C<mkpath> function of the L<File::Path> module.
=item msgctl ID,CMD,ARG
X<msgctl>
+=for Pod::Functions SysV IPC message control operations
+
Calls the System V IPC function msgctl(2). You'll probably have to say
use IPC::SysV;
@@ -3165,17 +3639,25 @@ C<"0 but true"> for zero, or the actual return value otherwise. See also
L<perlipc/"SysV IPC"> and the documentation for C<IPC::SysV> and
C<IPC::Semaphore>.
+Portability issues: L<perlport/msgctl>.
+
=item msgget KEY,FLAGS
X<msgget>
+=for Pod::Functions get SysV IPC message queue
+
Calls the System V IPC function msgget(2). Returns the message queue
id, or C<undef> on error. See also
L<perlipc/"SysV IPC"> and the documentation for C<IPC::SysV> and
C<IPC::Msg>.
+Portability issues: L<perlport/msgget>.
+
=item msgrcv ID,VAR,SIZE,TYPE,FLAGS
X<msgrcv>
+=for Pod::Functions receive a SysV IPC message from a message queue
+
Calls the System V IPC function msgrcv to receive a message from
message queue ID into variable VAR with a maximum message size of
SIZE. Note that when a message is received, the message type as a
@@ -3185,9 +3667,13 @@ Taints the variable. Returns true if successful, false
on error. See also L<perlipc/"SysV IPC"> and the documentation for
C<IPC::SysV> and C<IPC::SysV::Msg>.
+Portability issues: L<perlport/msgrcv>.
+
=item msgsnd ID,MSG,FLAGS
X<msgsnd>
+=for Pod::Functions send a SysV IPC message to a message queue
+
Calls the System V IPC function msgsnd to send the message MSG to the
message queue ID. MSG must begin with the native long integer message
type, be followed by the length of the actual message, and then finally
@@ -3196,6 +3682,8 @@ C<pack("l! a*", $type, $message)>. Returns true if successful,
false on error. See also the C<IPC::SysV>
and C<IPC::SysV::Msg> documentation.
+Portability issues: L<perlport/msgsnd>.
+
=item my EXPR
X<my>
@@ -3205,6 +3693,8 @@ X<my>
=item my TYPE EXPR : ATTRS
+=for Pod::Functions declare and assign a local variable (lexical scoping)
+
A C<my> declares the listed variables to be local (lexically) to the
enclosing block, file, or C<eval>. If more than one value is listed,
the list must be placed in parentheses.
@@ -3221,6 +3711,8 @@ X<next> X<continue>
=item next
+=for Pod::Functions iterate a block prematurely
+
The C<next> command is like the C<continue> statement in C; it starts
the next iteration of the loop:
@@ -3255,6 +3747,8 @@ X<unimporting>
=item no VERSION
+=for Pod::Functions unimport some module symbols or semantics at compile time
+
See the C<use> function, of which C<no> is the opposite.
=item oct EXPR
@@ -3262,6 +3756,8 @@ X<oct> X<octal> X<hex> X<hexadecimal> X<binary> X<bin>
=item oct
+=for Pod::Functions convert a string to an octal number
+
Interprets EXPR as an octal string and returns the corresponding
value. (If EXPR happens to start off with C<0x>, interprets it as a
hex string. If EXPR starts off with C<0b>, it is interpreted as a
@@ -3297,6 +3793,8 @@ X<open> X<pipe> X<file, open> X<fopen>
=item open FILEHANDLE
+=for Pod::Functions open a file, pipe, or descriptor
+
Opens the file whose filename is given by EXPR, and associates it with
FILEHANDLE.
@@ -3337,7 +3835,7 @@ created if necessary.
You can put a C<+> in front of the C<< > >> or C<< < >> to
indicate that you want both read and write access to the file; thus
C<< +< >> is almost always preferred for read/write updates--the
-C<< +> >> mode would clobber the file first. You cant usually use
+C<< +> >> mode would clobber the file first. You can't usually use
either read-write mode for updating textfiles, since they have
variable-length records. See the B<-i> switch in L<perlrun> for a
better approach. The file is created with permissions of C<0666>
@@ -3376,15 +3874,18 @@ or C<-> opens STDIN and opening C<< >- >> opens STDOUT.
You may (and usually should) use the three-argument form of open to specify
I/O layers (sometimes referred to as "disciplines") to apply to the handle
that affect how the input and output are processed (see L<open> and
-L<PerlIO> for more details). For example:
+L<PerlIO> for more details). For example:
open(my $fh, "<:encoding(UTF-8)", "filename")
|| die "can't open UTF-8 encoded filename: $!";
opens the UTF8-encoded file containing Unicode characters;
-see L<perluniintro>. Note that if layers are specified in the
+see L<perluniintro>. Note that if layers are specified in the
three-argument form, then default layers stored in ${^OPEN} (see L<perlvar>;
usually set by the B<open> pragma or the switch B<-CioD>) are ignored.
+Those layers will also be ignored if you specifying a colon with no name
+following it. In that case the default layer for the operating system
+(:raw on Unix, :crlf on Windows) is used.
Open returns nonzero on success, the undefined value otherwise. If
the C<open> involved a pipe, the return value happens to be the pid of
@@ -3489,7 +3990,8 @@ duped (as C<dup(2)>) and opened. You may use C<&> after C<< > >>,
C<<< >> >>>, C<< < >>, C<< +> >>, C<<< +>> >>>, and C<< +< >>.
The mode you specify should match the mode of the original filehandle.
(Duping a filehandle does not take into account any existing contents
-of IO buffers.) If you use the three-argument form, then you can pass either a
+of IO buffers.) If you use the three-argument
+form, then you can pass either a
number, the name of a filehandle, or the normal "reference to a glob".
Here is a script that saves, redirects, and restores C<STDOUT> and
@@ -3561,7 +4063,7 @@ Use C<defined($pid)> or C<//> to determine whether the open was successful.
For example, use either
- $child_pid = open(FROM_KID, "|-") // die "can't fork: $!";
+ $child_pid = open(FROM_KID, "-|") // die "can't fork: $!";
or
$child_pid = open(TO_KID, "|-") // die "can't fork: $!";
@@ -3661,7 +4163,7 @@ but will not work on a filename that happens to have a trailing space, while
will have exactly the opposite restrictions.
-If you want a "real" C C<open> (see C<open(2)> on your system), then you
+If you want a "real" C C<open> (see L<open(2)> on your system), then you
should use the C<sysopen> function, which involves no such magic (but may
use subtly different filemodes than Perl open(), which is mapped to C
fopen()). This is another way to protect your filenames from
@@ -3705,9 +4207,13 @@ yourself and inspect the return value.
See L</seek> for some details about mixing reading and writing.
+Portability issues: L<perlport/open>.
+
=item opendir DIRHANDLE,EXPR
X<opendir>
+=for Pod::Functions open a directory
+
Opens a directory named EXPR for processing by C<readdir>, C<telldir>,
C<seekdir>, C<rewinddir>, and C<closedir>. Returns true if successful.
DIRHANDLE may be an expression whose value can be used as an indirect
@@ -3723,8 +4229,9 @@ X<ord> X<encoding>
=item ord
-Returns the numeric (the native 8-bit encoding, like ASCII or EBCDIC,
-or Unicode) value of the first character of EXPR.
+=for Pod::Functions find a character's numeric representation
+
+Returns the numeric value of the first character of EXPR.
If EXPR is an empty string, returns 0. If EXPR is omitted, uses C<$_>.
(Note I<character>, not byte.)
@@ -3740,6 +4247,8 @@ X<our> X<global>
=item our TYPE EXPR : ATTRS
+=for Pod::Functions +5.6.0 declare and assign a package variable (lexical scoping)
+
C<our> associates a simple name with a package variable in the current
package for use within the current scope. When C<use strict 'vars'> is in
effect, C<our> lets you use declared global variables without qualifying
@@ -3796,15 +4305,17 @@ An C<our> declaration may also have a list of attributes associated
with it.
The exact semantics and interface of TYPE and ATTRS are still
-evolving. TYPE is currently bound to the use of C<fields> pragma,
-and attributes are handled using the C<attributes> pragma, or starting
-from Perl 5.8.0 also via the C<Attribute::Handlers> module. See
+evolving. TYPE is currently bound to the use of the C<fields> pragma,
+and attributes are handled using the C<attributes> pragma, or, starting
+from Perl 5.8.0, also via the C<Attribute::Handlers> module. See
L<perlsub/"Private Variables via my()"> for details, and L<fields>,
L<attributes>, and L<Attribute::Handlers>.
=item pack TEMPLATE,LIST
X<pack>
+=for Pod::Functions convert a list into a binary representation
+
Takes a LIST of values and converts it into a string using the rules
given by the TEMPLATE. The resulting string is the concatenation of
the converted values. Typically, each converted value looks
@@ -3821,7 +4332,8 @@ of values, as follows:
A A text (ASCII) string, will be space padded.
Z A null-terminated (ASCIZ) string, will be null padded.
- b A bit string (ascending bit order inside each byte, like vec()).
+ b A bit string (ascending bit order inside each byte,
+ like vec()).
B A bit string (descending bit order inside each byte).
h A hex string (low nybble first).
H A hex string (high nybble first).
@@ -3838,49 +4350,52 @@ of values, as follows:
q A signed quad (64-bit) value.
Q An unsigned quad value.
- (Quads are available only if your system supports 64-bit
- integer values _and_ if Perl has been compiled to support those.
- Raises an exception otherwise.)
+ (Quads are available only if your system supports 64-bit
+ integer values _and_ if Perl has been compiled to support
+ those. Raises an exception otherwise.)
i A signed integer value.
I A unsigned integer value.
- (This 'integer' is _at_least_ 32 bits wide. Its exact
- size depends on what a local C compiler calls 'int'.)
+ (This 'integer' is _at_least_ 32 bits wide. Its exact
+ size depends on what a local C compiler calls 'int'.)
n An unsigned short (16-bit) in "network" (big-endian) order.
N An unsigned long (32-bit) in "network" (big-endian) order.
v An unsigned short (16-bit) in "VAX" (little-endian) order.
V An unsigned long (32-bit) in "VAX" (little-endian) order.
- j A Perl internal signed integer value (IV).
- J A Perl internal unsigned integer value (UV).
+ j A Perl internal signed integer value (IV).
+ J A Perl internal unsigned integer value (UV).
f A single-precision float in native format.
d A double-precision float in native format.
F A Perl internal floating-point value (NV) in native format
D A float of long-double precision in native format.
- (Long doubles are available only if your system supports long
- double values _and_ if Perl has been compiled to support those.
- Raises an exception otherwise.)
+ (Long doubles are available only if your system supports
+ long double values _and_ if Perl has been compiled to
+ support those. Raises an exception otherwise.)
p A pointer to a null-terminated string.
P A pointer to a structure (fixed-length string).
u A uuencoded string.
- U A Unicode character number. Encodes to a character in character mode
- and UTF-8 (or UTF-EBCDIC in EBCDIC platforms) in byte mode.
+ U A Unicode character number. Encodes to a character in char-
+ acter mode and UTF-8 (or UTF-EBCDIC in EBCDIC platforms) in
+ byte mode.
- w A BER compressed integer (not an ASN.1 BER, see perlpacktut for
- details). Its bytes represent an unsigned integer in base 128,
- most significant digit first, with as few digits as possible. Bit
- eight (the high bit) is set on each byte except the last.
+ w A BER compressed integer (not an ASN.1 BER, see perlpacktut
+ for details). Its bytes represent an unsigned integer in
+ base 128, most significant digit first, with as few digits
+ as possible. Bit eight (the high bit) is set on each byte
+ except the last.
x A null byte (a.k.a ASCII NUL, "\000", chr(0))
X Back up a byte.
@ Null-fill or truncate to absolute position, counted from the
start of the innermost ()-group.
- . Null-fill or truncate to absolute position specified by the value.
+ . Null-fill or truncate to absolute position specified by
+ the value.
( Start of a ()-group.
One or more modifiers below may optionally follow certain letters in the
@@ -3894,8 +4409,8 @@ TEMPLATE (the second column lists letters for which the modifier is valid):
nNvV Treat integers as signed instead of unsigned.
@. Specify position as byte offset in the internal
- representation of the packed string. Efficient but
- dangerous.
+ representation of the packed string. Efficient
+ but dangerous.
> sSiIlLqQ Force big-endian byte-order on the type.
jJfFdDpP (The "big end" touches the construct.)
@@ -3918,7 +4433,7 @@ count. A numeric repeat count may optionally be enclosed in brackets, as
in C<pack("C[80]", @arr)>. The repeat count gobbles that many values from
the LIST when used with all format types other than C<a>, C<A>, C<Z>, C<b>,
C<B>, C<h>, C<H>, C<@>, C<.>, C<x>, C<X>, and C<P>, where it means
-something else, dscribed below. Supplying a C<*> for the repeat count
+something else, described below. Supplying a C<*> for the repeat count
instead of a number means to use however many items are left, except for:
=over
@@ -3977,7 +4492,7 @@ bigger then the group level.
=back
The repeat count for C<u> is interpreted as the maximal number of bytes
-to encode per line of output, with 0, 1 and 2 replaced by 45. The repeat
+to encode per line of output, with 0, 1 and 2 replaced by 45. The repeat
count should not be more than 65.
=item *
@@ -4070,18 +4585,18 @@ unpacking has encoded the sizes or repeat counts for some of its fields
within the structure itself as separate fields.
For C<pack>, you write I<length-item>C</>I<sequence-item>, and the
-I<length-item> describes how the length value is packed. Formats likely
+I<length-item> describes how the length value is packed. Formats likely
to be of most use are integer-packing ones like C<n> for Java strings,
C<w> for ASN.1 or SNMP, and C<N> for Sun XDR.
For C<pack>, I<sequence-item> may have a repeat count, in which case
the minimum of that and the number of available items is used as the argument
-for I<length-item>. If it has no repeat count or uses a '*', the number
+for I<length-item>. If it has no repeat count or uses a '*', the number
of available items is used.
For C<unpack>, an internal stack of integer arguments unpacked so far is
-used. You write C</>I<sequence-item> and the repeat count is obtained by
-popping off the last element from the stack. The I<sequence-item> must not
+used. You write C</>I<sequence-item> and the repeat count is obtained by
+popping off the last element from the stack. The I<sequence-item> must not
have a repeat count.
If I<sequence-item> refers to a string type (C<"A">, C<"a">, or C<"Z">),
@@ -4089,12 +4604,14 @@ the I<length-item> is the string length, not the number of strings. With
an explicit repeat count for pack, the packed string is adjusted to that
length. For example:
- unpack("W/a", "\004Gurusamy") gives ("Guru")
- unpack("a3/A A*", "007 Bond J ") gives (" Bond", "J")
- unpack("a3 x2 /A A*", "007: Bond, J.") gives ("Bond, J", ".")
+ This code: gives this result:
+
+ unpack("W/a", "\004Gurusamy") ("Guru")
+ unpack("a3/A A*", "007 Bond J ") (" Bond", "J")
+ unpack("a3 x2 /A A*", "007: Bond, J.") ("Bond, J", ".")
- pack("n/a* w/a","hello,","world") gives "\000\006hello,\005world"
- pack("a/W2", ord("a") .. ord("z")) gives "2ab"
+ pack("n/a* w/a","hello,","world") "\000\006hello,\005world"
+ pack("a/W2", ord("a") .. ord("z")) "2ab"
The I<length-item> is not returned explicitly from C<unpack>.
@@ -4259,8 +4776,9 @@ will not in general equal $foo.
Pack and unpack can operate in two modes: character mode (C<C0> mode) where
the packed string is processed per character, and UTF-8 mode (C<U0> mode)
where the packed string is processed in its UTF-8-encoded Unicode form on
-a byte-by-byte basis. Character mode is the default unless the format string
-starts with C<U>. You can always switch mode mid-format with an explicit
+a byte-by-byte basis. Character mode is the default
+unless the format string starts with C<U>. You
+can always switch mode mid-format with an explicit
C<C0> or C<U0> in the format. This mode remains in effect until the next
mode change, or until the end of the C<()> group it (directly) applies to.
@@ -4296,7 +4814,7 @@ handle their output and input as flat sequences of characters.
A C<()> group is a sub-TEMPLATE enclosed in parentheses. A group may
take a repeat count either as postfix, or for unpack(), also via the C</>
template character. Within each repetition of a group, positioning with
-C<@> starts over at 0. Therefore, the result of
+C<@> starts over at 0. Therefore, the result of
pack("@1A((@2A)@3A)", qw[X Y Z])
@@ -4306,7 +4824,7 @@ is the string C<"\0X\0\0YZ">.
C<x> and C<X> accept the C<!> modifier to act as alignment commands: they
jump forward or back to the closest position aligned at a multiple of C<count>
-characters. For example, to pack() or unpack() a C structure like
+characters. For example, to pack() or unpack() a C structure like
struct {
char c; /* one signed, 8-bit character */
@@ -4354,12 +4872,14 @@ Examples:
$foo = pack("W4",0x24b6,0x24b7,0x24b8,0x24b9);
# same thing with Unicode circled letters.
$foo = pack("U4",0x24b6,0x24b7,0x24b8,0x24b9);
- # same thing with Unicode circled letters. You don't get the UTF-8
- # bytes because the U at the start of the format caused a switch to
- # U0-mode, so the UTF-8 bytes get joined into characters
+ # same thing with Unicode circled letters. You don't get the
+ # UTF-8 bytes because the U at the start of the format caused
+ # a switch to U0-mode, so the UTF-8 bytes get joined into
+ # characters
$foo = pack("C0U4",0x24b6,0x24b7,0x24b8,0x24b9);
# foo eq "\xe2\x92\xb6\xe2\x92\xb7\xe2\x92\xb8\xe2\x92\xb9"
- # This is the UTF-8 encoding of the string in the previous example
+ # This is the UTF-8 encoding of the string in the
+ # previous example
$foo = pack("ccxxcc",65,66,67,68);
# foo eq "AB\0\0CD"
@@ -4425,6 +4945,8 @@ X<package> X<module> X<namespace> X<version>
=item package NAMESPACE VERSION BLOCK
X<package> X<module> X<namespace> X<version>
+=for Pod::Functions declare a separate global namespace
+
Declares the BLOCK or the rest of the compilation unit as being in the
given namespace. The scope of the package declaration is either the
supplied code BLOCK or, in the absence of a BLOCK, from the declaration
@@ -4459,9 +4981,18 @@ components. You should set C<$VERSION> only once per package.
See L<perlmod/"Packages"> for more information about packages, modules,
and classes. See L<perlsub> for other scoping issues.
+=item __PACKAGE__
+X<__PACKAGE__>
+
+=for Pod::Functions +5.004 the current package
+
+A special token that returns the name of the package in which it occurs.
+
=item pipe READHANDLE,WRITEHANDLE
X<pipe>
+=for Pod::Functions open a pair of connected filehandles
+
Opens a pair of connected pipes like the corresponding system call.
Note that if you set up a loop of piped processes, deadlock can occur
unless you are very careful. In addition, note that Perl's pipes use
@@ -4483,6 +5014,8 @@ X<pop> X<stack>
=item pop
+=for Pod::Functions remove the last element from an array and return it
+
Pops and returns the last value of the array, shortening the array by
one element.
@@ -4495,21 +5028,30 @@ reference to an unblessed array. The argument will be dereferenced
automatically. This aspect of C<pop> is considered highly experimental.
The exact behaviour may change in a future version of Perl.
+To avoid confusing would-be users of your code who are running earlier
+versions of Perl with mysterious syntax errors, put this sort of thing at
+the top of your file to signal that your code will work I<only> on Perls of
+a recent vintage:
+
+ use 5.014; # so push/pop/etc work on scalars (experimental)
+
=item pos SCALAR
X<pos> X<match, position>
=item pos
+=for Pod::Functions find or set the offset for the last/next m//g search
+
Returns the offset of where the last C<m//g> search left off for the
variable in question (C<$_> is used when the variable is not
-specified). Note that 0 is a valid match offset. C<undef> indicates
+specified). Note that 0 is a valid match offset. C<undef> indicates
that the search position is reset (usually due to match failure, but
can also be because no match has yet been run on the scalar).
C<pos> directly accesses the location used by the regexp engine to
store the offset, so assigning to C<pos> will change that offset, and
so will also influence the C<\G> zero-width assertion in regular
-expressions. Both of these effects take place for the next match, so
+expressions. Both of these effects take place for the next match, so
you can't affect the position with C<pos> during the current match,
such as in C<(?{pos() = 5})> or C<s//pos() = 5/e>.
@@ -4529,12 +5071,14 @@ X<print>
=item print
+=for Pod::Functions output a list to a filehandle
+
Prints a string or a list of strings. Returns true if successful.
FILEHANDLE may be a scalar variable containing the name of or a reference
to the filehandle, thus introducing one level of indirection. (NOTE: If
FILEHANDLE is a variable and the next token is a term, it may be
misinterpreted as an operator unless you interpose a C<+> or put
-parentheses around the arguments.) If FILEHANDLE is omitted, prints to the
+parentheses around the arguments.) If FILEHANDLE is omitted, prints to the
last selected (see L</select>) output handle. If LIST is omitted, prints
C<$_> to the currently selected output handle. To use FILEHANDLE alone to
print the content of C<$_> to it, you must use a real filehandle like
@@ -4571,12 +5115,16 @@ X<printf>
=item printf
+=for Pod::Functions output a formatted list to a filehandle
+
Equivalent to C<print FILEHANDLE sprintf(FORMAT, LIST)>, except that C<$\>
(the output record separator) is not appended. The first argument of the
-list will be interpreted as the C<printf> format. See C<sprintf> for an
-explanation of the format argument. If you omit the LIST, C<$_> is used;
+list will be interpreted as the C<printf> format. See
+L<sprintf|/sprintf FORMAT, LIST> for an
+explanation of the format argument. If you omit the LIST, C<$_> is used;
to use FILEHANDLE without a LIST, you must use a real filehandle like
-C<FH>, not an indirect one like C<$fh>. If C<use locale> is in effect and
+C<FH>, not an indirect one like C<$fh>. If C<use locale> (including
+C<use locale ':not_characters'>) is in effect and
POSIX::setlocale() has been called, the character used for the decimal
separator in formatted floating-point numbers is affected by the LC_NUMERIC
locale setting. See L<perllocale> and L<POSIX>.
@@ -4588,6 +5136,8 @@ error prone.
=item prototype FUNCTION
X<prototype>
+=for Pod::Functions +5.002 get the prototype (if any) of a subroutine
+
Returns the prototype of a function as a string (or C<undef> if the
function has no prototype). FUNCTION is a reference to, or the name of,
the function whose prototype you want to retrieve.
@@ -4604,6 +5154,8 @@ X<push> X<stack>
=item push EXPR,LIST
+=for Pod::Functions append one or more elements to an array
+
Treats ARRAY as a stack by appending the values of LIST to the end of
ARRAY. The length of ARRAY increases by the length of LIST. Has the same
effect as
@@ -4620,18 +5172,35 @@ reference to an unblessed array. The argument will be dereferenced
automatically. This aspect of C<push> is considered highly experimental.
The exact behaviour may change in a future version of Perl.
+To avoid confusing would-be users of your code who are running earlier
+versions of Perl with mysterious syntax errors, put this sort of thing at
+the top of your file to signal that your code will work I<only> on Perls of
+a recent vintage:
+
+ use 5.014; # so push/pop/etc work on scalars (experimental)
+
=item q/STRING/
+=for Pod::Functions singly quote a string
+
=item qq/STRING/
-=item qx/STRING/
+=for Pod::Functions doubly quote a string
=item qw/STRING/
+=for Pod::Functions quote a list of words
+
+=item qx/STRING/
+
+=for Pod::Functions backquote quote a string
+
Generalized quotes. See L<perlop/"Quote-Like Operators">.
=item qr/STRING/
+=for Pod::Functions +5.005 compile pattern
+
Regexp-like quote. See L<perlop/"Regexp Quote-Like Operators">.
=item quotemeta EXPR
@@ -4639,18 +5208,21 @@ X<quotemeta> X<metacharacter>
=item quotemeta
-Returns the value of EXPR with all non-"word"
-characters backslashed. (That is, all characters not matching
+=for Pod::Functions quote regular expression magic characters
+
+Returns the value of EXPR with all the ASCII non-"word"
+characters backslashed. (That is, all ASCII characters not matching
C</[A-Za-z_0-9]/> will be preceded by a backslash in the
returned string, regardless of any locale settings.)
This is the internal function implementing
the C<\Q> escape in double-quoted strings.
+(See below for the behavior on non-ASCII code points.)
If EXPR is omitted, uses C<$_>.
quotemeta (and C<\Q> ... C<\E>) are useful when interpolating strings into
regular expressions, because by default an interpolated variable will be
-considered a mini-regular expression. For example:
+considered a mini-regular expression. For example:
my $sentence = 'The quick brown fox jumped over the lazy dog';
my $substring = 'quick.*?fox';
@@ -4671,19 +5243,72 @@ Or:
my $quoted_substring = quotemeta($substring);
$sentence =~ s{$quoted_substring}{big bad wolf};
-Will both leave the sentence as is. Normally, when accepting literal string
+Will both leave the sentence as is.
+Normally, when accepting literal string
input from the user, quotemeta() or C<\Q> must be used.
-In Perl 5.14, all characters whose code points are above 127 are not
-quoted in UTF8-encoded strings, but all are quoted in UTF-8 strings.
-It is planned to change this behavior in 5.16, but the exact rules
-haven't been determined yet.
+In Perl v5.14, all non-ASCII characters are quoted in non-UTF-8-encoded
+strings, but not quoted in UTF-8 strings.
+
+Starting in Perl v5.16, Perl adopted a Unicode-defined strategy for
+quoting non-ASCII characters; the quoting of ASCII characters is
+unchanged.
+
+Also unchanged is the quoting of non-UTF-8 strings when outside the
+scope of a C<use feature 'unicode_strings'>, which is to quote all
+characters in the upper Latin1 range. This provides complete backwards
+compatibility for old programs which do not use Unicode. (Note that
+C<unicode_strings> is automatically enabled within the scope of a
+S<C<use v5.12>> or greater.)
+
+Within the scope of C<use locale>, all non-ASCII Latin1 code points
+are quoted whether the string is encoded as UTF-8 or not. As mentioned
+above, locale does not affect the quoting of ASCII-range characters.
+This protects against those locales where characters such as C<"|"> are
+considered to be word characters.
+
+Otherwise, Perl quotes non-ASCII characters using an adaptation from
+Unicode (see L<http://www.unicode.org/reports/tr31/>.)
+The only code points that are quoted are those that have any of the
+Unicode properties: Pattern_Syntax, Pattern_White_Space, White_Space,
+Default_Ignorable_Code_Point, or General_Category=Control.
+
+Of these properties, the two important ones are Pattern_Syntax and
+Pattern_White_Space. They have been set up by Unicode for exactly this
+purpose of deciding which characters in a regular expression pattern
+should be quoted. No character that can be in an identifier has these
+properties.
+
+Perl promises, that if we ever add regular expression pattern
+metacharacters to the dozen already defined
+(C<\ E<verbar> ( ) [ { ^ $ * + ? .>), that we will only use ones that have the
+Pattern_Syntax property. Perl also promises, that if we ever add
+characters that are considered to be white space in regular expressions
+(currently mostly affected by C</x>), they will all have the
+Pattern_White_Space property.
+
+Unicode promises that the set of code points that have these two
+properties will never change, so something that is not quoted in v5.16
+will never need to be quoted in any future Perl release. (Not all the
+code points that match Pattern_Syntax have actually had characters
+assigned to them; so there is room to grow, but they are quoted
+whether assigned or not. Perl, of course, would never use an
+unassigned code point as an actual metacharacter.)
+
+Quoting characters that have the other 3 properties is done to enhance
+the readability of the regular expression and not because they actually
+need to be quoted for regular expression purposes (characters with the
+White_Space property are likely to be indistinguishable on the page or
+screen from those with the Pattern_White_Space property; and the other
+two properties contain non-printing characters).
=item rand EXPR
X<rand> X<random>
=item rand
+=for Pod::Functions retrieve the next pseudorandom number
+
Returns a random fractional number greater than or equal to C<0> and less
than the value of EXPR. (EXPR should be positive.) If EXPR is
omitted, the value C<1> is used. Currently EXPR with the value C<0> is
@@ -4706,14 +5331,16 @@ B<C<rand()> is not cryptographically secure. You should not rely
on it in security-sensitive situations.> As of this writing, a
number of third-party CPAN modules offer random number generators
intended by their authors to be cryptographically secure,
-including: L<Math::Random::Secure>, L<Math::Random::MT::Perl>, and
-L<Math::TrulyRandom>.
+including: L<Data::Entropy>, L<Crypt::Random>, L<Math::Random::Secure>,
+and L<Math::TrulyRandom>.
=item read FILEHANDLE,SCALAR,LENGTH,OFFSET
X<read> X<file, read>
=item read FILEHANDLE,SCALAR,LENGTH
+=for Pod::Functions fixed-length buffered input from a filehandle
+
Attempts to read LENGTH I<characters> of data into variable SCALAR
from the specified FILEHANDLE. Returns the number of characters
actually read, C<0> at end of file, or undef if there was an error (in
@@ -4729,7 +5356,8 @@ results in the string being padded to the required size with C<"\0">
bytes before the result of the read is appended.
The call is implemented in terms of either Perl's or your system's native
-fread(3) library function. To get a true read(2) system call, see C<sysread>.
+fread(3) library function. To get a true read(2) system call, see
+L<sysread|/sysread FILEHANDLE,SCALAR,LENGTH,OFFSET>.
Note the I<characters>: depending on the status of the filehandle,
either (8-bit) bytes or characters are read. By default, all
@@ -4742,6 +5370,8 @@ in that case pretty much any characters can be read.
=item readdir DIRHANDLE
X<readdir>
+=for Pod::Functions get a directory from a directory handle
+
Returns the next directory entry for a directory opened by C<opendir>.
If used in list context, returns all the rest of the entries in the
directory. If there are no more entries, returns the undefined value in
@@ -4764,11 +5394,20 @@ which will set C<$_> on every iteration.
}
closedir $dh;
+To avoid confusing would-be users of your code who are running earlier
+versions of Perl with mysterious failures, put this sort of thing at the
+top of your file to signal that your code will work I<only> on Perls of a
+recent vintage:
+
+ use 5.012; # so readdir assigns to $_ in a lone while test
+
=item readline EXPR
=item readline
X<readline> X<gets> X<fgets>
+=for Pod::Functions fetch a record from a file
+
Reads from the filehandle whose typeglob is contained in EXPR (or from
C<*ARGV> if EXPR is not provided). In scalar context, each call reads and
returns the next line until end-of-file is reached, whereupon the
@@ -4800,7 +5439,7 @@ C<readline> and dies if the result is not defined.
}
Note that you have can't handle C<readline> errors that way with the
-C<ARGV> filehandle. In that case, you have to open each element of
+C<ARGV> filehandle. In that case, you have to open each element of
C<@ARGV> yourself since C<eof> handles C<ARGV> differently.
foreach my $arg (@ARGV) {
@@ -4818,16 +5457,22 @@ X<readlink>
=item readlink
+=for Pod::Functions determine where a symbolic link is pointing
+
Returns the value of a symbolic link, if symbolic links are
implemented. If not, raises an exception. If there is a system
error, returns the undefined value and sets C<$!> (errno). If EXPR is
omitted, uses C<$_>.
+Portability issues: L<perlport/readlink>.
+
=item readpipe EXPR
=item readpipe
X<readpipe>
+=for Pod::Functions execute a system command and collect standard output
+
EXPR is executed as a system command.
The collected standard output of the command is returned.
In scalar context, it comes back as a single (potentially
@@ -4841,6 +5486,8 @@ If EXPR is omitted, uses C<$_>.
=item recv SOCKET,SCALAR,LENGTH,FLAGS
X<recv>
+=for Pod::Functions receive a message over a Socket
+
Receives a message on a socket. Attempts to receive LENGTH characters
of data into variable SCALAR from the specified SOCKET filehandle.
SCALAR will be grown or shrunk to the length actually read. Takes the
@@ -4863,6 +5510,8 @@ X<redo>
=item redo
+=for Pod::Functions start this loop iteration over again
+
The C<redo> command restarts the loop block without evaluating the
conditional again. The C<continue> block, if any, is not executed. If
the LABEL is omitted, the command refers to the innermost enclosing
@@ -4902,8 +5551,10 @@ X<ref> X<reference>
=item ref
+=for Pod::Functions find out the type of thing being referenced
+
Returns a non-empty string if EXPR is a reference, the empty
-string otherwise. If EXPR
+string otherwise. If EXPR
is not specified, C<$_> will be used. The value returned depends on the
type of thing the reference is a reference to.
Builtin types include:
@@ -4931,8 +5582,8 @@ name is returned instead. You can think of C<ref> as a C<typeof> operator.
}
The return value C<LVALUE> indicates a reference to an lvalue that is not
-a variable. You get this from taking the reference of function calls like
-C<pos()> or C<substr()>. C<VSTRING> is returned if the reference points
+a variable. You get this from taking the reference of function calls like
+C<pos()> or C<substr()>. C<VSTRING> is returned if the reference points
to a L<version string|perldata/"Version Strings">.
The result C<Regexp> indicates that the argument is a regular expression
@@ -4943,6 +5594,8 @@ See also L<perlref>.
=item rename OLDNAME,NEWNAME
X<rename> X<move> X<mv> X<ren>
+=for Pod::Functions change a filename
+
Changes the name of a file; an existing file NEWNAME will be
clobbered. Returns true for success, false otherwise.
@@ -4956,6 +5609,8 @@ rename(2) manpage or equivalent system documentation for details.
For a platform independent C<move> function look at the L<File::Copy>
module.
+Portability issues: L<perlport/rename>.
+
=item require VERSION
X<require>
@@ -4963,6 +5618,8 @@ X<require>
=item require
+=for Pod::Functions load in external functions from a library at runtime
+
Demands a version of Perl specified by VERSION, or demands some semantics
specified by EXPR or by C<$_> if EXPR is not supplied.
@@ -5052,7 +5709,7 @@ will complain about not finding "F<Foo::Bar>" there. In this case you can do:
Now that you understand how C<require> looks for files with a
bareword argument, there is a little extra functionality going on behind
the scenes. Before C<require> looks for a "F<.pm>" extension, it will
-first look for a similar filename with a "F<.pmc>" extension. If this file
+first look for a similar filename with a "F<.pmc>" extension. If this file
is found, it will be loaded in place of any file ending in a "F<.pm>"
extension.
@@ -5075,7 +5732,7 @@ A filehandle, from which the file will be read.
=item 2
-A reference to a subroutine. If there is no filehandle (previous item),
+A reference to a subroutine. If there is no filehandle (previous item),
then this subroutine is expected to generate one line of source code per
call, writing the line into C<$_> and returning 1, then finally at end of
file returning 0. If there is a filehandle, then the subroutine will be
@@ -5085,7 +5742,7 @@ returned.
=item 3
-Optional state for the subroutine. The state is passed in as C<$_[1]>. A
+Optional state for the subroutine. The state is passed in as C<$_[1]>. A
reference to the subroutine itself is passed in as C<$_[0]>.
=back
@@ -5136,7 +5793,7 @@ into package C<main>.) Here is a typical code layout:
push @INC, Foo->new(...);
These hooks are also permitted to set the %INC entry
-corresponding to the files they have loaded. See L<perlvar/%INC>.
+corresponding to the files they have loaded. See L<perlvar/%INC>.
For a yet-more-powerful import facility, see L</use> and L<perlmod>.
@@ -5145,6 +5802,8 @@ X<reset>
=item reset
+=for Pod::Functions clear all variables of a given name
+
Generally used in a C<continue> block at the end of a loop to clear
variables and reset C<??> searches so that they work again. The
expression is interpreted as a list of single characters (hyphens
@@ -5169,10 +5828,12 @@ X<return>
=item return
+=for Pod::Functions get out of a function early
+
Returns from a subroutine, C<eval>, or C<do FILE> with the value
given in EXPR. Evaluation of EXPR may be in list, scalar, or void
context, depending on how the return value will be used, and the context
-may vary from one execution to the next (see C<wantarray>). If no EXPR
+may vary from one execution to the next (see L</wantarray>). If no EXPR
is given, returns an empty list in list context, the undefined value in
scalar context, and (of course) nothing at all in void context.
@@ -5183,6 +5844,8 @@ evaluated.)
=item reverse LIST
X<reverse> X<rev> X<invert>
+=for Pod::Functions flip a string or a list
+
In list context, returns a list value consisting of the elements
of LIST in the opposite order. In scalar context, concatenates the
elements of LIST and returns a string value with all characters
@@ -5213,14 +5876,20 @@ on a large hash, such as from a DBM file.
=item rewinddir DIRHANDLE
X<rewinddir>
+=for Pod::Functions reset directory handle
+
Sets the current position to the beginning of the directory for the
C<readdir> routine on DIRHANDLE.
+Portability issues: L<perlport/rewinddir>.
+
=item rindex STR,SUBSTR,POSITION
X<rindex>
=item rindex STR,SUBSTR
+=for Pod::Functions right-to-left substring search
+
Works just like index() except that it returns the position of the I<last>
occurrence of SUBSTR in STR. If POSITION is specified, returns the
last occurrence beginning at or before that position.
@@ -5230,6 +5899,8 @@ X<rmdir> X<rd> X<directory, remove>
=item rmdir
+=for Pod::Functions remove a directory
+
Deletes the directory specified by FILENAME if that directory is
empty. If it succeeds it returns true; otherwise it returns false and
sets C<$!> (errno). If FILENAME is omitted, uses C<$_>.
@@ -5239,6 +5910,8 @@ the C<rmtree> function of the L<File::Path> module.
=item s///
+=for Pod::Functions replace a pattern with a string
+
The substitution operator. See L<perlop/"Regexp Quote-Like Operators">.
=item say FILEHANDLE LIST
@@ -5250,18 +5923,23 @@ X<say>
=item say
+=for Pod::Functions +say output a list to a filehandle, appending a newline
+
Just like C<print>, but implicitly appends a newline. C<say LIST> is
simply an abbreviation for C<{ local $\ = "\n"; print LIST }>. To use
FILEHANDLE without a LIST to print the contents of C<$_> to it, you must
use a real filehandle like C<FH>, not an indirect one like C<$fh>.
-This keyword is available only when the C<"say"> feature is enabled; see
+This keyword is available only when the C<"say"> feature
+is enabled, or when prefixed with C<CORE::>; see
L<feature>. Alternately, include a C<use v5.10> or later to the current
scope.
=item scalar EXPR
X<scalar> X<context>
+=for Pod::Functions force a scalar context
+
Forces EXPR to be interpreted in scalar context and returns the value
of EXPR.
@@ -5292,6 +5970,8 @@ See L<perlop> for more details on unary operators and the comma operator.
=item seek FILEHANDLE,POSITION,WHENCE
X<seek> X<fseek> X<filehandle, position>
+=for Pod::Functions reposition file pointer for random-access I/O
+
Sets FILEHANDLE's position, just like the C<fseek> call of C<stdio>.
FILEHANDLE may be an expression whose value gives the name of the
filehandle. The values for WHENCE are C<0> to set the new position
@@ -5339,6 +6019,8 @@ cantankerous), you might need something like this:
=item seekdir DIRHANDLE,POS
X<seekdir>
+=for Pod::Functions reposition directory pointer
+
Sets the current position for the C<readdir> routine on DIRHANDLE. POS
must be a value returned by C<telldir>. C<seekdir> also has the same caveats
about possible directory compaction as the corresponding system library
@@ -5349,6 +6031,8 @@ X<select> X<filehandle, default>
=item select
+=for Pod::Functions reset default output or do I/O multiplexing
+
Returns the currently selected filehandle. If FILEHANDLE is supplied,
sets the new current default filehandle for output. This has two
effects: first, a C<write> or a C<print> without a filehandle
@@ -5374,6 +6058,8 @@ methods, preferring to write the last example as:
use IO::Handle;
STDERR->autoflush(1);
+Portability issues: L<perlport/select>.
+
=item select RBITS,WBITS,EBITS,TIMEOUT
X<select>
@@ -5381,22 +6067,22 @@ This calls the select(2) syscall with the bit masks specified, which
can be constructed using C<fileno> and C<vec>, along these lines:
$rin = $win = $ein = '';
- vec($rin,fileno(STDIN),1) = 1;
- vec($win,fileno(STDOUT),1) = 1;
+ vec($rin, fileno(STDIN), 1) = 1;
+ vec($win, fileno(STDOUT), 1) = 1;
$ein = $rin | $win;
If you want to select on many filehandles, you may wish to write a
subroutine like this:
sub fhbits {
- my(@fhlist) = split(' ',$_[0]);
- my($bits);
- for (@fhlist) {
- vec($bits,fileno($_),1) = 1;
+ my @fhlist = @_;
+ my $bits = "";
+ for my $fh (@fhlist) {
+ vec($bits, fileno($fh), 1) = 1;
}
- $bits;
+ return $bits;
}
- $rin = fhbits('STDIN TTY SOCK');
+ $rin = fhbits(*STDIN, *TTY, *MYSOCK);
The usual idiom is:
@@ -5423,21 +6109,28 @@ Note that whether C<select> gets restarted after signals (say, SIGALRM)
is implementation-dependent. See also L<perlport> for notes on the
portability of C<select>.
-On error, C<select> behaves like select(2): it returns
+On error, C<select> behaves just like select(2): it returns
-1 and sets C<$!>.
On some Unixes, select(2) may report a socket file descriptor as "ready for
reading" even when no data is available, and thus any subsequent C<read>
-would block. This can be avoided if you always use O_NONBLOCK on the
-socket. See select(2) and fcntl(2) for further details.
+would block. This can be avoided if you always use O_NONBLOCK on the
+socket. See select(2) and fcntl(2) for further details.
+
+The standard C<IO::Select> module provides a user-friendlier interface
+to C<select>, mostly because it does all the bit-mask work for you.
B<WARNING>: One should not attempt to mix buffered I/O (like C<read>
or <FH>) with C<select>, except as permitted by POSIX, and even
then only on POSIX systems. You have to use C<sysread> instead.
+Portability issues: L<perlport/select>.
+
=item semctl ID,SEMNUM,CMD,ARG
X<semctl>
+=for Pod::Functions SysV semaphore control operations
+
Calls the System V IPC function semctl(2). You'll probably have to say
use IPC::SysV;
@@ -5451,17 +6144,25 @@ short integers, which may be created with C<pack("s!",(0)x$nsem)>.
See also L<perlipc/"SysV IPC">, C<IPC::SysV>, C<IPC::Semaphore>
documentation.
+Portability issues: L<perlport/semctl>.
+
=item semget KEY,NSEMS,FLAGS
X<semget>
+=for Pod::Functions get set of SysV semaphores
+
Calls the System V IPC function semget(2). Returns the semaphore id, or
the undefined value on error. See also
L<perlipc/"SysV IPC">, C<IPC::SysV>, C<IPC::SysV::Semaphore>
documentation.
+Portability issues: L<perlport/semget>.
+
=item semop KEY,OPSTRING
X<semop>
+=for Pod::Functions SysV semaphore operations
+
Calls the System V IPC function semop(2) for semaphore operations
such as signalling and waiting. OPSTRING must be a packed array of
semop structures. Each semop structure can be generated with
@@ -5477,11 +6178,15 @@ To signal the semaphore, replace C<-1> with C<1>. See also
L<perlipc/"SysV IPC">, C<IPC::SysV>, and C<IPC::SysV::Semaphore>
documentation.
+Portability issues: L<perlport/semop>.
+
=item send SOCKET,MSG,FLAGS,TO
X<send>
=item send SOCKET,MSG,FLAGS
+=for Pod::Functions send a message over a socket
+
Sends a message on a socket. Attempts to send the scalar MSG to the SOCKET
filehandle. Takes the same flags as the system call of the same name. On
unconnected sockets, you must specify a destination to I<send to>, in which
@@ -5500,6 +6205,8 @@ pragma: in that case pretty much any characters can be sent.
=item setpgrp PID,PGRP
X<setpgrp> X<group>
+=for Pod::Functions set the process group of a process
+
Sets the current process group for the specified PID, C<0> for the current
process. Raises an exception when used on a machine that doesn't
implement POSIX setpgid(2) or BSD setpgrp(2). If the arguments are omitted,
@@ -5507,16 +6214,24 @@ it defaults to C<0,0>. Note that the BSD 4.2 version of C<setpgrp> does not
accept any arguments, so only C<setpgrp(0,0)> is portable. See also
C<POSIX::setsid()>.
+Portability issues: L<perlport/setpgrp>.
+
=item setpriority WHICH,WHO,PRIORITY
X<setpriority> X<priority> X<nice> X<renice>
+=for Pod::Functions set a process's nice value
+
Sets the current priority for a process, a process group, or a user.
(See setpriority(2).) Raises an exception when used on a machine
that doesn't implement setpriority(2).
+Portability issues: L<perlport/setpriority>.
+
=item setsockopt SOCKET,LEVEL,OPTNAME,OPTVAL
X<setsockopt>
+=for Pod::Functions set some socket options
+
Sets the socket option requested. Returns C<undef> on error.
Use integer constants provided by the C<Socket> module for
LEVEL and OPNAME. Values for LEVEL can also be obtained from
@@ -5528,6 +6243,8 @@ An example disabling Nagle's algorithm on a socket:
use Socket qw(IPPROTO_TCP TCP_NODELAY);
setsockopt($socket, IPPROTO_TCP, TCP_NODELAY, 1);
+Portability issues: L<perlport/setsockopt>.
+
=item shift ARRAY
X<shift>
@@ -5535,6 +6252,8 @@ X<shift>
=item shift
+=for Pod::Functions remove the first element of an array, and return it
+
Shifts the first value of the array off and returns it, shortening the
array by 1 and moving everything down. If there are no elements in the
array, returns the undefined value. If ARRAY is omitted, shifts the
@@ -5548,6 +6267,13 @@ reference to an unblessed array. The argument will be dereferenced
automatically. This aspect of C<shift> is considered highly experimental.
The exact behaviour may change in a future version of Perl.
+To avoid confusing would-be users of your code who are running earlier
+versions of Perl with mysterious syntax errors, put this sort of thing at
+the top of your file to signal that your code will work I<only> on Perls of
+a recent vintage:
+
+ use 5.014; # so push/pop/etc work on scalars (experimental)
+
See also C<unshift>, C<push>, and C<pop>. C<shift> and C<unshift> do the
same thing to the left end of an array that C<pop> and C<push> do to the
right end.
@@ -5555,6 +6281,8 @@ right end.
=item shmctl ID,CMD,ARG
X<shmctl>
+=for Pod::Functions SysV shared memory operations
+
Calls the System V IPC function shmctl. You'll probably have to say
use IPC::SysV;
@@ -5565,31 +6293,45 @@ structure. Returns like ioctl: C<undef> for error; "C<0> but
true" for zero; and the actual return value otherwise.
See also L<perlipc/"SysV IPC"> and C<IPC::SysV> documentation.
+Portability issues: L<perlport/shmctl>.
+
=item shmget KEY,SIZE,FLAGS
X<shmget>
+=for Pod::Functions get SysV shared memory segment identifier
+
Calls the System V IPC function shmget. Returns the shared memory
segment id, or C<undef> on error.
See also L<perlipc/"SysV IPC"> and C<IPC::SysV> documentation.
+Portability issues: L<perlport/shmget>.
+
=item shmread ID,VAR,POS,SIZE
X<shmread>
X<shmwrite>
+=for Pod::Functions read SysV shared memory
+
=item shmwrite ID,STRING,POS,SIZE
+=for Pod::Functions write SysV shared memory
+
Reads or writes the System V shared memory segment ID starting at
position POS for size SIZE by attaching to it, copying in/out, and
detaching from it. When reading, VAR must be a variable that will
hold the data read. When writing, if STRING is too long, only SIZE
bytes are used; if STRING is too short, nulls are written to fill out
SIZE bytes. Return true if successful, false on error.
-shmread() taints the variable. See also L<perlipc/"SysV IPC">,
+shmread() taints the variable. See also L<perlipc/"SysV IPC">,
C<IPC::SysV>, and the C<IPC::Shareable> module from CPAN.
+Portability issues: L<perlport/shmread> and L<perlport/shmwrite>.
+
=item shutdown SOCKET,HOW
X<shutdown>
+=for Pod::Functions close down just half of a socket connection
+
Shuts down a socket connection in the manner indicated by HOW, which
has the same interpretation as in the syscall of the same name.
@@ -5612,6 +6354,8 @@ X<sin> X<sine> X<asin> X<arcsine>
=item sin
+=for Pod::Functions return the sine of a number
+
Returns the sine of EXPR (expressed in radians). If EXPR is omitted,
returns sine of C<$_>.
@@ -5625,6 +6369,8 @@ X<sleep> X<pause>
=item sleep
+=for Pod::Functions block for some number of seconds
+
Causes the script to sleep for (integer) EXPR seconds, or forever if no
argument is given. Returns the integer number of seconds actually slept.
@@ -5650,13 +6396,15 @@ For delays of finer granularity than one second, the Time::HiRes module
distribution) provides usleep(). You may also use Perl's four-argument
version of select() leaving the first three arguments undefined, or you
might be able to use the C<syscall> interface to access setitimer(2) if
-your system supports it. See L<perlfaq8> for details.
+your system supports it. See L<perlfaq8> for details.
See also the POSIX module's C<pause> function.
=item socket SOCKET,DOMAIN,TYPE,PROTOCOL
X<socket>
+=for Pod::Functions create a socket
+
Opens a socket of the specified kind and attaches it to filehandle
SOCKET. DOMAIN, TYPE, and PROTOCOL are specified the same as for
the syscall of the same name. You should C<use Socket> first
@@ -5670,6 +6418,8 @@ value of $^F. See L<perlvar/$^F>.
=item socketpair SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL
X<socketpair>
+=for Pod::Functions create a pair of sockets
+
Creates an unnamed pair of sockets in the specified domain, of the
specified type. DOMAIN, TYPE, and PROTOCOL are specified the same as
for the syscall of the same name. If unimplemented, raises an exception.
@@ -5691,6 +6441,8 @@ See L<perlipc> for an example of socketpair use. Perl 5.8 and later will
emulate socketpair using IP sockets to localhost if your system implements
sockets but not socketpair.
+Portability issues: L<perlport/socketpair>.
+
=item sort SUBNAME LIST
X<sort> X<qsort> X<quicksort> X<mergesort>
@@ -5698,6 +6450,8 @@ X<sort> X<qsort> X<quicksort> X<mergesort>
=item sort LIST
+=for Pod::Functions sort a list of values
+
In list context, this sorts the LIST and returns the sorted list value.
In scalar context, the behaviour of C<sort()> is undefined.
@@ -5718,13 +6472,18 @@ into the subroutine as the package global variables $a and $b (see example
below). Note that in the latter case, it is usually highly counter-productive
to declare $a and $b as lexicals.
+If the subroutine is an XSUB, the elements to be compared are pushed on to
+the stack, the way arguments are usually passed to XSUBs. $a and $b are
+not set.
+
The values to be compared are always passed by reference and should not
be modified.
You also cannot exit out of the sort block or subroutine using any of the
loop control operators described in L<perlsyn> or with C<goto>.
-When C<use locale> is in effect, C<sort LIST> sorts LIST according to the
+When C<use locale> (but not C<use locale 'not_characters'>) is in
+effect, C<sort LIST> sorts LIST according to the
current collation locale. See L<perllocale>.
sort() returns aliases into the original list, much as a for loop's index
@@ -5756,7 +6515,7 @@ Examples:
@articles = sort {$a cmp $b} @files;
# now case-insensitively
- @articles = sort {uc($a) cmp uc($b)} @files;
+ @articles = sort {fc($a) cmp fc($b)} @files;
# same thing in reversed order
@articles = sort {$b cmp $a} @files;
@@ -5773,7 +6532,7 @@ Examples:
# sort using explicit subroutine name
sub byage {
- $age{$a} <=> $age{$b}; # presuming numeric
+ $age{$a} <=> $age{$b}; # presuming numeric
}
@sortedclass = sort byage @class;
@@ -5793,8 +6552,8 @@ Examples:
my @new = sort {
($b =~ /=(\d+)/)[0] <=> ($a =~ /=(\d+)/)[0]
- ||
- uc($a) cmp uc($b)
+ ||
+ fc($a) cmp fc($b)
} @old;
# same thing, but much more efficiently;
@@ -5803,22 +6562,22 @@ Examples:
my @nums = @caps = ();
for (@old) {
push @nums, ( /=(\d+)/ ? $1 : undef );
- push @caps, uc($_);
+ push @caps, fc($_);
}
my @new = @old[ sort {
- $nums[$b] <=> $nums[$a]
- ||
- $caps[$a] cmp $caps[$b]
- } 0..$#old
- ];
+ $nums[$b] <=> $nums[$a]
+ ||
+ $caps[$a] cmp $caps[$b]
+ } 0..$#old
+ ];
# same thing, but without any temps
@new = map { $_->[0] }
sort { $b->[1] <=> $a->[1]
- ||
- $a->[2] cmp $b->[2]
- } map { [$_, /=(\d+)/, uc($_)] } @old;
+ ||
+ $a->[2] cmp $b->[2]
+ } map { [$_, /=(\d+)/, fc($_)] } @old;
# using a prototype allows you to use any comparison subroutine
# as a sort subroutine (including other package's subroutines)
@@ -5837,7 +6596,7 @@ Examples:
@new = sort { substr($a, 3, 5) cmp substr($b, 3, 5) } @old;
Warning: syntactical care is required when sorting the list returned from
-a function. If you want to sort the list returned by the function call
+a function. If you want to sort the list returned by the function call
C<find_records(@key)>, you can use:
@contact = sort { $a cmp $b } find_records @key;
@@ -5870,8 +6629,7 @@ sometimes saying the opposite, for example) the results are not
well-defined.
Because C<< <=> >> returns C<undef> when either operand is C<NaN>
-(not-a-number), and laso because C<sort> raises an exception unless the
-result of a comparison is defined, be careful when sorting with a
+(not-a-number), be careful when sorting with a
comparison function like C<< $a <=> $b >> any lists that might contain a
C<NaN>. The following example takes advantage that C<NaN != NaN> to
eliminate any C<NaN>s from the input list.
@@ -5887,6 +6645,8 @@ X<splice>
=item splice ARRAY or EXPR
+=for Pod::Functions add or remove elements anywhere in an array
+
Removes the elements designated by OFFSET and LENGTH from an array, and
replaces them with the elements of LIST, if any. In list context,
returns the elements removed from the array. In scalar context,
@@ -5896,11 +6656,11 @@ If OFFSET is negative then it starts that far from the end of the array.
If LENGTH is omitted, removes everything from OFFSET onward.
If LENGTH is negative, removes the elements from OFFSET onward
except for -LENGTH elements at the end of the array.
-If both OFFSET and LENGTH are omitted, removes everything. If OFFSET is
+If both OFFSET and LENGTH are omitted, removes everything. If OFFSET is
past the end of the array, Perl issues a warning, and splices at the
end of the array.
-The following equivalences hold (assuming C<< $[ == 0 and $#a >= $i >> )
+The following equivalences hold (assuming C<< $#a >= $i >> )
push(@a,$x,$y) splice(@a,@a,0,$x,$y)
pop(@a) splice(@a,-1)
@@ -5926,6 +6686,13 @@ reference to an unblessed array. The argument will be dereferenced
automatically. This aspect of C<splice> is considered highly experimental.
The exact behaviour may change in a future version of Perl.
+To avoid confusing would-be users of your code who are running earlier
+versions of Perl with mysterious syntax errors, put this sort of thing at
+the top of your file to signal that your code will work I<only> on Perls of
+a recent vintage:
+
+ use 5.014; # so push/pop/etc work on scalars (experimental)
+
=item split /PATTERN/,EXPR,LIMIT
X<split>
@@ -5935,124 +6702,162 @@ X<split>
=item split
-Splits the string EXPR into a list of strings and returns that list. By
-default, empty leading fields are preserved, and empty trailing ones are
-deleted. (If all fields are empty, they are considered to be trailing.)
+=for Pod::Functions split up a string using a regexp delimiter
+
+Splits the string EXPR into a list of strings and returns the
+list in list context, or the size of the list in scalar context.
+
+If only PATTERN is given, EXPR defaults to C<$_>.
+
+Anything in EXPR that matches PATTERN is taken to be a separator
+that separates the EXPR into substrings (called "I<fields>") that
+do B<not> include the separator. Note that a separator may be
+longer than one character or even have no characters at all (the
+empty string, which is a zero-width match).
+
+The PATTERN need not be constant; an expression may be used
+to specify a pattern that varies at runtime.
+
+If PATTERN matches the empty string, the EXPR is split at the match
+position (between characters). As an example, the following:
+
+ print join(':', split('b', 'abc')), "\n";
+
+uses the 'b' in 'abc' as a separator to produce the output 'a:c'.
+However, this:
+
+ print join(':', split('', 'abc')), "\n";
-In scalar context, returns the number of fields found.
+uses empty string matches as separators to produce the output
+'a:b:c'; thus, the empty string may be used to split EXPR into a
+list of its component characters.
-If EXPR is omitted, splits the C<$_> string. If PATTERN is also omitted,
-splits on whitespace (after skipping any leading whitespace). Anything
-matching PATTERN is taken to be a delimiter separating the fields. (Note
-that the delimiter may be longer than one character.)
+As a special case for C<split>, the empty pattern given in
+L<match operator|perlop/"m/PATTERN/msixpodualgc"> syntax (C<//>) specifically matches the empty string, which is contrary to its usual
+interpretation as the last successful match.
+
+If PATTERN is C</^/>, then it is treated as if it used the
+L<multiline modifier|perlreref/OPERATORS> (C</^/m>), since it
+isn't much use otherwise.
+
+As another special case, C<split> emulates the default behavior of the
+command line tool B<awk> when the PATTERN is either omitted or a I<literal
+string> composed of a single space character (such as S<C<' '>> or
+S<C<"\x20">>, but not e.g. S<C</ />>). In this case, any leading
+whitespace in EXPR is removed before splitting occurs, and the PATTERN is
+instead treated as if it were C</\s+/>; in particular, this means that
+I<any> contiguous whitespace (not just a single space character) is used as
+a separator. However, this special treatment can be avoided by specifying
+the pattern S<C</ />> instead of the string S<C<" ">>, thereby allowing
+only a single space character to be a separator.
+
+If omitted, PATTERN defaults to a single space, S<C<" ">>, triggering
+the previously described I<awk> emulation.
If LIMIT is specified and positive, it represents the maximum number
-of fields the EXPR will be split into, though the actual number of
-fields returned depends on the number of times PATTERN matches within
-EXPR. If LIMIT is unspecified or zero, trailing null fields are
-stripped (which potential users of C<pop> would do well to remember).
-If LIMIT is negative, it is treated as if an arbitrarily large LIMIT
-had been specified. Note that splitting an EXPR that evaluates to the
-empty string always returns the empty list, regardless of the LIMIT
-specified.
+of fields into which the EXPR may be split; in other words, LIMIT is
+one greater than the maximum number of times EXPR may be split. Thus,
+the LIMIT value C<1> means that EXPR may be split a maximum of zero
+times, producing a maximum of one field (namely, the entire value of
+EXPR). For instance:
-A pattern matching the empty string (not to be confused with
-an empty pattern C<//>, which is just one member of the set of patterns
-matching the epmty string), splits EXPR into individual
-characters. For example:
+ print join(':', split(//, 'abc', 1)), "\n";
- print join(':', split(/ */, 'hi there')), "\n";
+produces the output 'abc', and this:
-produces the output 'h:i:t:h:e:r:e'.
+ print join(':', split(//, 'abc', 2)), "\n";
-As a special case for C<split>, the empty pattern C<//> specifically
-matches the empty string; this is not be confused with the normal use
-of an empty pattern to mean the last successful match. So to split
-a string into individual characters, the following:
+produces the output 'a:bc', and each of these:
- print join(':', split(//, 'hi there')), "\n";
+ print join(':', split(//, 'abc', 3)), "\n";
+ print join(':', split(//, 'abc', 4)), "\n";
-produces the output 'h:i: :t:h:e:r:e'.
+produces the output 'a:b:c'.
-Empty leading fields are produced when there are positive-width matches at
-the beginning of the string; a zero-width match at the beginning of
-the string does not produce an empty field. For example:
+If LIMIT is negative, it is treated as if it were instead arbitrarily
+large; as many fields as possible are produced.
- print join(':', split(/(?=\w)/, 'hi there!'));
+If LIMIT is omitted (or, equivalently, zero), then it is usually
+treated as if it were instead negative but with the exception that
+trailing empty fields are stripped (empty leading fields are always
+preserved); if all fields are empty, then all fields are considered to
+be trailing (and are thus stripped in this case). Thus, the following:
-produces the output 'h:i :t:h:e:r:e!'. Empty trailing fields, on the other
-hand, are produced when there is a match at the end of the string (and
-when LIMIT is given and is not 0), regardless of the length of the match.
-For example:
+ print join(':', split(',', 'a,b,c,,,')), "\n";
- print join(':', split(//, 'hi there!', -1)), "\n";
- print join(':', split(/\W/, 'hi there!', -1)), "\n";
+produces the output 'a:b:c', but the following:
-produce the output 'h:i: :t:h:e:r:e:!:' and 'hi:there:', respectively,
-both with an empty trailing field.
+ print join(':', split(',', 'a,b,c,,,', -1)), "\n";
-The LIMIT parameter can be used to split a line partially
+produces the output 'a:b:c:::'.
- ($login, $passwd, $remainder) = split(/:/, $_, 3);
+In time-critical applications, it is worthwhile to avoid splitting
+into more fields than necessary. Thus, when assigning to a list,
+if LIMIT is omitted (or zero), then LIMIT is treated as though it
+were one larger than the number of variables in the list; for the
+following, LIMIT is implicitly 4:
-When assigning to a list, if LIMIT is omitted, or zero, Perl supplies
-a LIMIT one larger than the number of variables in the list, to avoid
-unnecessary work. For the list above LIMIT would have been 4 by
-default. In time critical applications it behooves you not to split
-into more fields than you really need.
+ ($login, $passwd, $remainder) = split(/:/);
-If the PATTERN contains parentheses, additional list elements are
-created from each matching substring in the delimiter.
+Note that splitting an EXPR that evaluates to the empty string always
+produces zero fields, regardless of the LIMIT specified.
- split(/([,-])/, "1-10,20", 3);
+An empty leading field is produced when there is a positive-width
+match at the beginning of EXPR. For instance:
-produces the list value
+ print join(':', split(/ /, ' abc')), "\n";
- (1, '-', 10, ',', 20)
+produces the output ':abc'. However, a zero-width match at the
+beginning of EXPR never produces an empty field, so that:
-If you had the entire header of a normal Unix email message in $header,
-you could split it up into fields and their values this way:
+ print join(':', split(//, ' abc'));
- $header =~ s/\n(?=\s)//g; # fix continuation lines
- %hdrs = (UNIX_FROM => split /^(\S*?):\s*/m, $header);
+produces the output S<' :a:b:c'> (rather than S<': :a:b:c'>).
-The pattern C</PATTERN/> may be replaced with an expression to specify
-patterns that vary at runtime. (To do runtime compilation only once,
-use C</$variable/o>.)
+An empty trailing field, on the other hand, is produced when there is a
+match at the end of EXPR, regardless of the length of the match
+(of course, unless a non-zero LIMIT is given explicitly, such fields are
+removed, as in the last example). Thus:
-As a special case, specifying a PATTERN of space (S<C<' '>>) will split on
-white space just as C<split> with no arguments does. Thus, S<C<split(' ')>> can
-be used to emulate B<awk>'s default behavior, whereas S<C<split(/ /)>>
-will give you as many initial null fields (empty string) as there are leading spaces.
-A C<split> on C</\s+/> is like a S<C<split(' ')>> except that any leading
-whitespace produces a null first field. A C<split> with no arguments
-really does a S<C<split(' ', $_)>> internally.
+ print join(':', split(//, ' abc', -1)), "\n";
-A PATTERN of C</^/> is treated as if it were C</^/m>, since it isn't
-much use otherwise.
+produces the output S<' :a:b:c:'>.
-Example:
+If the PATTERN contains
+L<capturing groups|perlretut/Grouping things and hierarchical matching>,
+then for each separator, an additional field is produced for each substring
+captured by a group (in the order in which the groups are specified,
+as per L<backreferences|perlretut/Backreferences>); if any group does not
+match, then it captures the C<undef> value instead of a substring. Also,
+note that any such additional field is produced whenever there is a
+separator (that is, whenever a split occurs), and such an additional field
+does B<not> count towards the LIMIT. Consider the following expressions
+evaluated in list context (each returned list is provided in the associated
+comment):
- open(PASSWD, '/etc/passwd');
- while (<PASSWD>) {
- chomp;
- ($login, $passwd, $uid, $gid,
- $gcos, $home, $shell) = split(/:/);
- #...
- }
+ split(/-|,/, "1-10,20", 3)
+ # ('1', '10', '20')
-As with regular pattern matching, any capturing parentheses that are not
-matched in a C<split()> will be set to C<undef> when returned:
+ split(/(-|,)/, "1-10,20", 3)
+ # ('1', '-', '10', ',', '20')
- @fields = split /(A)|B/, "1A2B3";
- # @fields is (1, 'A', 2, undef, 3)
+ split(/-|(,)/, "1-10,20", 3)
+ # ('1', undef, '10', ',', '20')
+
+ split(/(-)|,/, "1-10,20", 3)
+ # ('1', '-', '10', undef, '20')
+
+ split(/(-)|(,)/, "1-10,20", 3)
+ # ('1', '-', undef, '10', undef, ',', '20')
=item sprintf FORMAT, LIST
X<sprintf>
+=for Pod::Functions formatted print into a string
+
Returns a string formatted by the usual C<printf> conventions of the C
library function C<sprintf>. See below for more details
-and see C<sprintf(3)> or C<printf(3)> on your system for an explanation of
+and see L<sprintf(3)> or L<printf(3)> on your system for an explanation of
the general principles.
For example:
@@ -6070,7 +6875,8 @@ Non-standard extensions in your local sprintf(3) are
therefore unavailable from Perl.
Unlike C<printf>, C<sprintf> does not do what you probably mean when you
-pass it an array as your first argument. The array is given scalar context,
+pass it an array as your first argument.
+The array is given scalar context,
and instead of using the 0th element of the array as the format, Perl will
use the count of elements in the array as the format, which is almost never
useful.
@@ -6097,7 +6903,7 @@ In addition, Perl permits the following widely-supported conversions:
%B like %b, but using an upper-case "B" with the # flag
%p a pointer (outputs the Perl value's address in hexadecimal)
%n special: *stores* the number of characters output so far
- into the next variable in the parameter list
+ into the next argument in the parameter list
Finally, for backward (and we do mean "backward") compatibility, Perl
permits these unnecessary but widely-supported conversions:
@@ -6122,7 +6928,7 @@ In order, these are:
=item format parameter index
-An explicit format parameter index, such as C<2$>. By default sprintf
+An explicit format parameter index, such as C<2$>. By default sprintf
will format the next unused argument in the list, but this allows you
to take the arguments out of order:
@@ -6170,9 +6976,9 @@ the precision is incremented if it's necessary for the leading "0".
=item vector flag
This flag tells Perl to interpret the supplied string as a vector of
-integers, one for each character in the string. Perl applies the format to
+integers, one for each character in the string. Perl applies the format to
each integer in turn, then joins the resulting strings with a separator (a
-dot C<.> by default). This can be useful for displaying ordinal values of
+dot C<.> by default). This can be useful for displaying ordinal values of
characters in arbitrary strings:
printf "%vd", "AB\x{100}"; # prints "65.66.256"
@@ -6192,7 +6998,7 @@ the join string using something like C<*2$v>; for example:
=item (minimum) width
Arguments are usually formatted to be only as wide as required to
-display the given value. You can override the width by putting
+display the given value. You can override the width by putting
a number here, or get the width from the next argument (with C<*>)
or from a specified argument (e.g., with C<*2$>):
@@ -6222,7 +7028,7 @@ For example:
printf '<%.1e>', 10; # prints "<1.0e+01>"
For "g" and "G", this specifies the maximum number of digits to show,
-including thoe prior to the decimal point and those after it; for
+including those prior to the decimal point and those after it; for
example:
# These examples are subject to system-specific variation.
@@ -6284,7 +7090,7 @@ example using C<.*2$>:
=item size
For numeric conversions, you can specify the size to interpret the
-number as using C<l>, C<h>, C<V>, C<q>, C<L>, or C<ll>. For integer
+number as using C<l>, C<h>, C<V>, C<q>, C<L>, or C<ll>. For integer
conversions (C<d u o x X b i D U O>), numbers are usually assumed to be
whatever the default integer size is on your platform (usually 32 or 64
bits), but you can override this to use instead one of the standard C types,
@@ -6293,13 +7099,13 @@ as supported by the compiler used to build Perl:
hh interpret integer as C type "char" or "unsigned char"
on Perl 5.14 or later
h interpret integer as C type "short" or "unsigned short"
- j intepret integer as C type "intmax_t" on Perl 5.14
+ j interpret integer as C type "intmax_t" on Perl 5.14
or later, and only with a C99 compiler (unportable)
l interpret integer as C type "long" or "unsigned long"
q, L, or ll interpret integer as C type "long long", "unsigned long long",
or "quad" (typically 64-bit integers)
- t intepret integer as C type "ptrdiff_t" on Perl 5.14 or later
- z intepret integer as C type "size_t" on Perl 5.14 or later
+ t interpret integer as C type "ptrdiff_t" on Perl 5.14 or later
+ z interpret integer as C type "size_t" on Perl 5.14 or later
As of 5.14, none of these raises an exception if they are not supported on
your platform. However, if warnings are enabled, a warning of the
@@ -6323,7 +7129,7 @@ You can find out whether your Perl supports quads via L<Config>:
For floating-point conversions (C<e f g E F G>), numbers are usually assumed
to be the default floating-point size on your platform (double or long double),
but you can force "long double" with C<q>, C<L>, or C<ll> if your
-platform supports them. You can find out whether your Perl supports long
+platform supports them. You can find out whether your Perl supports long
doubles via L<Config>:
use Config;
@@ -6350,7 +7156,7 @@ integer or floating-point number", which is the default.
=item order of arguments
Normally, sprintf() takes the next unused argument as the value to
-format for each format specification. If the format specification
+format for each format specification. If the format specification
uses C<*> to require additional arguments, these are consumed from
the argument list in the order they appear in the format
specification I<before> the value to format. Where an argument is
@@ -6380,7 +7186,8 @@ index, the C<$> may need escaping:
=back
-If C<use locale> is in effect and POSIX::setlocale() has been called,
+If C<use locale> (including C<use locale 'not_characters'>) is in effect
+and POSIX::setlocale() has been called,
the character used for the decimal separator in formatted floating-point
numbers is affected by the LC_NUMERIC locale. See L<perllocale>
and L<POSIX>.
@@ -6390,6 +7197,8 @@ X<sqrt> X<root> X<square root>
=item sqrt
+=for Pod::Functions square root function
+
Return the positive square root of EXPR. If EXPR is omitted, uses
C<$_>. Works only for non-negative operands unless you've
loaded the C<Math::Complex> module.
@@ -6402,13 +7211,18 @@ X<srand> X<seed> X<randseed>
=item srand
+=for Pod::Functions seed the random number generator
+
Sets and returns the random number seed for the C<rand> operator.
-The point of the function is to "seed" the C<rand> function so that
-C<rand> can produce a different sequence each time you run your
-program. When called with a parameter, C<srand> uses that for the seed;
-otherwise it (semi-)randomly chooses a seed. In either case, starting with
-Perl 5.14, it returns the seed.
+The point of the function is to "seed" the C<rand> function so that C<rand>
+can produce a different sequence each time you run your program. When
+called with a parameter, C<srand> uses that for the seed; otherwise it
+(semi-)randomly chooses a seed. In either case, starting with Perl 5.14,
+it returns the seed. To signal that your code will work I<only> on Perls
+of a recent vintage:
+
+ use 5.014; # so srand returns the seed
If C<srand()> is not called explicitly, it is called implicitly without a
parameter at the first use of the C<rand> operator. However, this was not true
@@ -6419,10 +7233,7 @@ C<srand()> at all.
But there are a few situations in recent Perls where programs are likely to
want to call C<srand>. One is for generating predictable results generally for
testing or debugging. There, you use C<srand($seed)>, with the same C<$seed>
-each time. Another other case is where you need a cryptographically-strong
-starting point rather than the generally acceptable default, which is based on
-time of day, process ID, and memory allocation, or the F</dev/urandom> device
-if available. And still another case is that you may want to call C<srand()>
+each time. Another case is that you may want to call C<srand()>
after a C<fork()> to avoid child processes sharing the same seed value as the
parent (and consequently each other).
@@ -6441,16 +7252,6 @@ current C<time>. This isn't a particularly good seed, so many old
programs supply their own seed value (often C<time ^ $$> or C<time ^
($$ + ($$ << 15))>), but that isn't necessary any more.
-For cryptographic purposes, however, you need something much more random
-than the default seed. Checksumming the compressed output of one or more
-rapidly changing operating system status programs is the usual method. For
-example:
-
- srand (time ^ $$ ^ unpack "%L*", `ps axww | gzip -f`);
-
-If you're particularly concerned with this, search the CPAN for
-random number generator modules instead of rolling out your own.
-
Frequently called programs (like CGI scripts) that simply use
time ^ $$
@@ -6466,6 +7267,13 @@ 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 same results.
+B<C<rand()> is not cryptographically secure. You should not rely
+on it in security-sensitive situations.> As of this writing, a
+number of third-party CPAN modules offer random number generators
+intended by their authors to be cryptographically secure,
+including: L<Data::Entropy>, L<Crypt::Random>, L<Math::Random::Secure>,
+and L<Math::TrulyRandom>.
+
=item stat FILEHANDLE
X<stat> X<file, status> X<ctime>
@@ -6475,6 +7283,8 @@ X<stat> X<file, status> X<ctime>
=item stat
+=for Pod::Functions get a file's status information
+
Returns a 13-element list giving the status info for a file, either
the file opened via FILEHANDLE or DIRHANDLE, or named by EXPR. If EXPR is
omitted, it stats C<$_> (not C<_>!). Returns the empty list if C<stat> fails. Typically
@@ -6503,7 +7313,7 @@ meanings of the fields:
(The epoch was at 00:00 January 1, 1970 GMT.)
-(*) Not all fields are supported on all filesystem types. Notably, the
+(*) Not all fields are supported on all filesystem types. Notably, the
ctime field is non-portable. In particular, you cannot expect it to be a
"creation time"; see L<perlport/"Files and Filesystems"> for details.
@@ -6563,26 +7373,29 @@ Commonly available C<S_IF*> constants are:
S_IRWXO S_IROTH S_IWOTH S_IXOTH
# Setuid/Setgid/Stickiness/SaveText.
- # Note that the exact meaning of these is system dependent.
+ # Note that the exact meaning of these is system-dependent.
S_ISUID S_ISGID S_ISVTX S_ISTXT
- # File types. Not necessarily all are available on your system.
+ # File types. Not all are necessarily available on
+ # your system.
- S_IFREG S_IFDIR S_IFLNK S_IFBLK S_IFCHR S_IFIFO S_IFSOCK S_IFWHT S_ENFMT
+ S_IFREG S_IFDIR S_IFLNK S_IFBLK S_IFCHR
+ S_IFIFO S_IFSOCK S_IFWHT S_ENFMT
- # The following are compatibility aliases for S_IRUSR, S_IWUSR, S_IXUSR.
+ # The following are compatibility aliases for S_IRUSR,
+ # S_IWUSR, and S_IXUSR.
S_IREAD S_IWRITE S_IEXEC
and the C<S_IF*> functions are
- S_IMODE($mode) the part of $mode containing the permission bits
- and the setuid/setgid/sticky bits
+ S_IMODE($mode) the part of $mode containing the permission
+ bits and the setuid/setgid/sticky bits
- S_IFMT($mode) the part of $mode containing the file type
- which can be bit-anded with (for example) S_IFREG
- or with the following functions
+ S_IFMT($mode) the part of $mode containing the file type
+ which can be bit-anded with (for example)
+ S_IFREG or with the following functions
# The operators -f, -d, -l, -b, -c, -p, and -S.
@@ -6599,6 +7412,8 @@ See your native chmod(2) and stat(2) documentation for more details
about the C<S_*> constants. To get status info for a symbolic link
instead of the target file behind the link, use the C<lstat> function.
+Portability issues: L<perlport/stat>.
+
=item state EXPR
X<state>
@@ -6608,19 +7423,25 @@ X<state>
=item state TYPE EXPR : ATTRS
-C<state> declares a lexically scoped variable, just like C<my> does.
+=for Pod::Functions +state declare and assign a persistent lexical variable
+
+C<state> declares a lexically scoped variable, just like C<my>.
However, those variables will never be reinitialized, contrary to
lexical variables that are reinitialized each time their enclosing block
is entered.
+See L<perlsub/"Persistent Private Variables"> for details.
C<state> variables are enabled only when the C<use feature "state"> pragma
-is in effect. See L<feature>.
+is in effect, unless the keyword is written as C<CORE::state>.
+See also L<feature>.
=item study SCALAR
X<study>
=item study
+=for Pod::Functions optimize input data for repeated searches
+
Takes extra time to study SCALAR (C<$_> if unspecified) in anticipation of
doing many pattern matches on the string before it is next modified.
This may or may not save time, depending on the nature and number of
@@ -6628,9 +7449,8 @@ patterns you are searching and the distribution of character
frequencies in the string to be searched; you probably want to compare
run times with and without it to see which is faster. Those loops
that scan for many short constant strings (including the constant
-parts of more complex patterns) will benefit most. You may have only
-one C<study> active at a time: if you study a different scalar the first
-is "unstudied". (The way C<study> works is this: a linked list of every
+parts of more complex patterns) will benefit most.
+(The way C<study> works is this: a linked list of every
character in the string to be searched is made, so we know, for
example, where all the C<'k'> characters are. From each search string,
the rarest character is selected, based on some static frequency tables
@@ -6685,6 +7505,8 @@ X<sub>
=item sub NAME (PROTO) : ATTRS BLOCK
+=for Pod::Functions declare a subroutine, possibly anonymously
+
This is subroutine definition, not a real function I<per se>. Without a
BLOCK it's just a forward declaration. Without a NAME, it's an anonymous
function declaration, so does return a value: the CODE ref of the closure
@@ -6694,6 +7516,17 @@ See L<perlsub> and L<perlref> for details about subroutines and
references; see L<attributes> and L<Attribute::Handlers> for more
information about attributes.
+=item __SUB__
+X<__SUB__>
+
+=for Pod::Functions +current_sub the current subroutine, or C<undef> if not in a subroutine
+
+A special token that returns the a reference to the current subroutine, or
+C<undef> outside of a subroutine.
+
+This token is only available under C<use v5.16> or the "current_sub"
+feature. See L<feature>.
+
=item substr EXPR,OFFSET,LENGTH,REPLACEMENT
X<substr> X<substring> X<mid> X<left> X<right>
@@ -6701,9 +7534,10 @@ X<substr> X<substring> X<mid> X<left> X<right>
=item substr EXPR,OFFSET
+=for Pod::Functions get or alter a portion of a string
+
Extracts a substring out of EXPR and returns it. First character is at
-offset C<0> (or whatever you've set C<$[> to (but B<<don't do that>)).
-If OFFSET is negative (or more precisely, less than C<$[>), starts
+offset zero. If OFFSET is negative, starts
that far back from the end of the string. If LENGTH is omitted, returns
everything through the end of the string. If LENGTH is negative, leaves that
many characters off the end of the string.
@@ -6755,12 +7589,25 @@ of the original string is being modified; for example:
$_ = 'pq'; print $x,"\n"; # prints 5pq9
}
-Prior to Perl version 5.9.1, the result of using an lvalue multiple times was
+With negative offsets, it remembers its position from the end of the string
+when the target string is modified:
+
+ $x = '1234';
+ for (substr($x, -3, 2)) {
+ $_ = 'a'; print $x,"\n"; # prints 1a4, as above
+ $x = 'abcdefg';
+ print $_,"\n"; # prints f
+ }
+
+Prior to Perl version 5.10, the result of using an lvalue multiple times was
+unspecified. Prior to 5.16, the result with negative offsets was
unspecified.
=item symlink OLDFILE,NEWFILE
X<symlink> X<link> X<symbolic link> X<link, symbolic>
+=for Pod::Functions create a symbolic link to a file
+
Creates a new filename symbolically linked to the old filename.
Returns C<1> for success, C<0> otherwise. On systems that don't support
symbolic links, raises an exception. To check for that,
@@ -6768,9 +7615,13 @@ use eval:
$symlink_exists = eval { symlink("",""); 1 };
+Portability issues: L<perlport/symlink>.
+
=item syscall NUMBER, LIST
X<syscall> X<system call>
+=for Pod::Functions execute an arbitrary system call
+
Calls the system call specified as the first element of the list,
passing the remaining elements as arguments to the system call. If
unimplemented, raises an exception. The arguments are interpreted
@@ -6803,14 +7654,18 @@ number of the read end of the pipe it creates, but there is no way
to retrieve the file number of the other end. You can avoid this
problem by using C<pipe> instead.
+Portability issues: L<perlport/syscall>.
+
=item sysopen FILEHANDLE,FILENAME,MODE
X<sysopen>
=item sysopen FILEHANDLE,FILENAME,MODE,PERMS
+=for Pod::Functions +5.002 open a file, pipe, or descriptor
+
Opens the file whose filename is given by FILENAME, and associates it with
FILEHANDLE. If FILEHANDLE is an expression, its value is used as the real
-filehandle wanted; an undefined scalar will be suitably autovivified. This
+filehandle wanted; an undefined scalar will be suitably autovivified. This
function calls the underlying operating system's I<open>(2) function with the
parameters FILENAME, MODE, and PERMS.
@@ -6860,17 +7715,21 @@ on this.
Note that C<sysopen> depends on the fdopen() C library function.
On many Unix systems, fdopen() is known to fail when file descriptors
-exceed a certain value, typically 255. If you need more file
+exceed a certain value, typically 255. If you need more file
descriptors than that, consider rebuilding Perl to use the C<sfio>
library, or perhaps using the POSIX::open() function.
See L<perlopentut> for a kinder, gentler explanation of opening files.
+Portability issues: L<perlport/sysopen>.
+
=item sysread FILEHANDLE,SCALAR,LENGTH,OFFSET
X<sysread>
=item sysread FILEHANDLE,SCALAR,LENGTH
+=for Pod::Functions fixed-length unbuffered input from a filehandle
+
Attempts to read LENGTH bytes of data into variable SCALAR from the
specified FILEHANDLE, using the read(2). It bypasses
buffered IO, so mixing this with other kinds of reads, C<print>,
@@ -6901,6 +7760,8 @@ See L</binmode>, L</open>, and the C<open> pragma, L<open>.
=item sysseek FILEHANDLE,POSITION,WHENCE
X<sysseek> X<lseek>
+=for Pod::Functions +5.004 position I/O pointer on handle used with sysread and syswrite
+
Sets FILEHANDLE's system position in bytes using lseek(2). FILEHANDLE may
be an expression whose value gives the name of the filehandle. The values
for WHENCE are C<0> to set the new position to POSITION; C<1> to set the it
@@ -6934,6 +7795,8 @@ X<system> X<shell>
=item system PROGRAM LIST
+=for Pod::Functions run a separate program
+
Does exactly the same thing as C<exec LIST>, except that a fork is
done first and the parent process waits for the child process to
exit. Note that argument processing varies depending on the
@@ -6956,7 +7819,7 @@ of C<IO::Handle> on any open handles.
The return value is the exit status of the program as returned by the
C<wait> call. To get the actual exit value, shift right by eight (see
-below). See also L</exec>. This is I<not> what you want to use to capture
+below). See also L</exec>. This is I<not> what you want to use to capture
the output from a command; for that you should use merely backticks or
C<qx//>, as described in L<perlop/"`STRING`">. Return value of -1
indicates a failure to start the program or an error of the wait(2) system
@@ -6999,7 +7862,9 @@ results and return codes are subject to its quirks.
See L<perlop/"`STRING`"> and L</exec> for details.
Since C<system> does a C<fork> and C<wait> it may affect a C<SIGCHLD>
-handler. See L<perlipc> for details.
+handler. See L<perlipc> for details.
+
+Portability issues: L<perlport/system>.
=item syswrite FILEHANDLE,SCALAR,LENGTH,OFFSET
X<syswrite>
@@ -7008,6 +7873,8 @@ X<syswrite>
=item syswrite FILEHANDLE,SCALAR
+=for Pod::Functions fixed-length unbuffered output to a filehandle
+
Attempts to write LENGTH bytes of data from variable SCALAR to the
specified FILEHANDLE, using write(2). If LENGTH is
not specified, writes whole SCALAR. It bypasses buffered IO, so
@@ -7037,6 +7904,8 @@ X<tell>
=item tell
+=for Pod::Functions get current seekpointer on a filehandle
+
Returns the current position I<in bytes> for FILEHANDLE, or -1 on
error. FILEHANDLE may be an expression whose value gives the name of
the actual filehandle. If FILEHANDLE is omitted, assumes the file
@@ -7060,6 +7929,8 @@ Those functions ignore the buffering, while tell() does not.
=item telldir DIRHANDLE
X<telldir>
+=for Pod::Functions get current seekpointer on a directory handle
+
Returns the current position of the C<readdir> routines on DIRHANDLE.
Value may be given to C<seekdir> to access a particular location in a
directory. C<telldir> has the same caveats about possible directory
@@ -7068,6 +7939,8 @@ compaction as the corresponding system library routine.
=item tie VARIABLE,CLASSNAME,LIST
X<tie>
+=for Pod::Functions +5.002 bind a variable to an object class
+
This function binds a variable to a package class that will provide the
implementation for the variable. VARIABLE is the name of the variable
to be enchanted. CLASSNAME is the name of a class implementing objects
@@ -7160,6 +8033,8 @@ For further details see L<perltie>, L<"tied VARIABLE">.
=item tied VARIABLE
X<tied>
+=for Pod::Functions get a reference to the object underlying a tied variable
+
Returns a reference to the object underlying VARIABLE (the same value
that was originally returned by the C<tie> call that bound the variable
to a package.) Returns the undefined value if VARIABLE isn't tied to a
@@ -7168,9 +8043,11 @@ package.
=item time
X<time> X<epoch>
+=for Pod::Functions return number of seconds since 1970
+
Returns the number of non-leap seconds since whatever time the system
considers to be the epoch, suitable for feeding to C<gmtime> and
-C<localtime>. On most systems the epoch is 00:00:00 UTC, January 1, 1970;
+C<localtime>. On most systems the epoch is 00:00:00 UTC, January 1, 1970;
a prominent exception being Mac OS Classic which uses 00:00:00, January 1,
1904 in the current local time zone for its epoch.
@@ -7186,6 +8063,8 @@ L<DateTime> module.
=item times
X<times>
+=for Pod::Functions return elapsed time for self and child processes
+
Returns a four-element list giving the user and system times in
seconds for this process and any exited children of this process.
@@ -7195,8 +8074,12 @@ In scalar context, C<times> returns C<$user>.
Children's times are only included for terminated children.
+Portability issues: L<perlport/times>.
+
=item tr///
+=for Pod::Functions transliterate a string
+
The transliteration operator. Same as C<y///>. See
L<perlop/"Quote and Quote-like Operators">.
@@ -7205,6 +8088,8 @@ X<truncate>
=item truncate EXPR,LENGTH
+=for Pod::Functions shorten a file
+
Truncates the file opened on FILEHANDLE, or named by EXPR, to the
specified length. Raises an exception if truncate isn't implemented
on your system. Returns true if successful, C<undef> on error.
@@ -7215,11 +8100,15 @@ file.
The position in the file of FILEHANDLE is left unchanged. You may want to
call L<seek|/"seek FILEHANDLE,POSITION,WHENCE"> before writing to the file.
+Portability issues: L<perlport/truncate>.
+
=item uc EXPR
X<uc> X<uppercase> X<toupper>
=item uc
+=for Pod::Functions return upper-case version of a string
+
Returns an uppercased version of EXPR. This is the internal function
implementing the C<\U> escape in double-quoted strings.
It does not attempt to do titlecase mapping on initial letters. See
@@ -7235,6 +8124,8 @@ X<ucfirst> X<uppercase>
=item ucfirst
+=for Pod::Functions return a string with just the next letter in upper case
+
Returns the value of EXPR with the first character in uppercase
(titlecase in Unicode). This is the internal function implementing
the C<\u> escape in double-quoted strings.
@@ -7249,6 +8140,8 @@ X<umask>
=item umask
+=for Pod::Functions set file creation mode mask
+
Sets the umask for the process to EXPR and returns the previous value.
If EXPR is omitted, merely returns the current umask.
@@ -7282,16 +8175,20 @@ not trying to restrict access for yourself, returns C<undef>.
Remember that a umask is a number, usually given in octal; it is I<not> a
string of octal digits. See also L</oct>, if all you have is a string.
+Portability issues: L<perlport/umask>.
+
=item undef EXPR
X<undef> X<undefine>
=item undef
+=for Pod::Functions remove a variable or function definition
+
Undefines the value of EXPR, which must be an lvalue. Use only on a
scalar value, an array (using C<@>), a hash (using C<%>), a subroutine
(using C<&>), or a typeglob (using C<*>). Saying C<undef $hash{$key}>
will probably not do what you expect on most predefined variables or
-DBM list values, so don't do that; see L<delete>. Always returns the
+DBM list values, so don't do that; see L</delete>. Always returns the
undefined value. You can omit the EXPR, in which case nothing is
undefined, but you still get an undefined value that you could, for
instance, return from a subroutine, assign to a variable, or pass as a
@@ -7314,8 +8211,10 @@ X<unlink> X<delete> X<remove> X<rm> X<del>
=item unlink
-Deletes a list of files. On success, it returns the number of files
-it successfully deleted. On failure, it returns false and sets C<$!>
+=for Pod::Functions remove one link to a file
+
+Deletes a list of files. On success, it returns the number of files
+it successfully deleted. On failure, it returns false and sets C<$!>
(errno):
my $unlinked = unlink 'a', 'b', 'c';
@@ -7331,7 +8230,7 @@ at a time:
}
Note: C<unlink> will not attempt to delete directories unless you are
-superuser and the B<-U> flag is supplied to Perl. Even if these
+superuser and the B<-U> flag is supplied to Perl. Even if these
conditions are met, be warned that unlinking a directory can inflict
damage on your filesystem. Finally, using C<unlink> on directories is
not supported on many operating systems. Use C<rmdir> instead.
@@ -7343,6 +8242,8 @@ X<unpack>
=item unpack TEMPLATE
+=for Pod::Functions convert binary structure into normal perl variables
+
C<unpack> does the reverse of C<pack>: it takes a string
and expands it out into a list of values.
(In scalar context, it returns merely the first value produced.)
@@ -7400,17 +8301,13 @@ the remainder of that input string is ignored.
See L</pack> for more examples and notes.
-=item untie VARIABLE
-X<untie>
-
-Breaks the binding between a variable and a package. (See C<tie>.)
-Has no effect if the variable is not tied.
-
=item unshift ARRAY,LIST
X<unshift>
=item unshift EXPR,LIST
+=for Pod::Functions prepend more elements to the beginning of a list
+
Does the opposite of a C<shift>. Or the opposite of a C<push>,
depending on how you look at it. Prepends list to the front of the
array and returns the new number of elements in the array.
@@ -7426,6 +8323,22 @@ a reference to an unblessed array. The argument will be dereferenced
automatically. This aspect of C<unshift> is considered highly
experimental. The exact behaviour may change in a future version of Perl.
+To avoid confusing would-be users of your code who are running earlier
+versions of Perl with mysterious syntax errors, put this sort of thing at
+the top of your file to signal that your code will work I<only> on Perls of
+a recent vintage:
+
+ use 5.014; # so push/pop/etc work on scalars (experimental)
+
+=item untie VARIABLE
+X<untie>
+
+=for Pod::Functions break a tie binding to a variable
+
+Breaks the binding between a variable and a package.
+(See L<tie|/tie VARIABLE,CLASSNAME,LIST>.)
+Has no effect if the variable is not tied.
+
=item use Module VERSION LIST
X<use> X<module> X<import>
@@ -7437,6 +8350,8 @@ X<use> X<module> X<import>
=item use VERSION
+=for Pod::Functions load in a module at compile time and import its namespace
+
Imports some semantics into the current package from the named module,
generally by aliasing certain subroutine or variable names into your
package. It is exactly equivalent to
@@ -7468,12 +8383,15 @@ This is often useful if you need to check the current Perl version before
C<use>ing library modules that won't work with older versions of Perl.
(We try not to do this more than we have to.)
-Also, if the specified Perl version is greater than or equal to 5.9.5,
-C<use VERSION> will also load the C<feature> pragma and enable all
-features available in the requested version. See L<feature>.
+C<use VERSION> also enables all features available in the requested
+version as defined by the C<feature> pragma, disabling any features
+not in the requested version's feature bundle. See L<feature>.
Similarly, if the specified Perl version is greater than or equal to
-5.11.0, strictures are enabled lexically as with C<use strict> (except
-that the F<strict.pm> file is not actually loaded).
+5.11.0, strictures are enabled lexically as
+with C<use strict>. Any explicit use of
+C<use strict> or C<no strict> overrides C<use VERSION>, even if it comes
+before it. In both cases, the F<feature.pm> and F<strict.pm> files are
+not actually loaded.
The C<BEGIN> forces the C<require> and C<import> to happen at compile time. The
C<require> makes sure the module is loaded into memory if it hasn't been
@@ -7552,6 +8470,8 @@ functionality from the command-line.
=item utime LIST
X<utime>
+=for Pod::Functions set a file's last access and modify times
+
Changes the access and modification times on each file of a list of
files. The first two elements of the list must be the NUMERIC access
and modification times, in that order. Returns the number of files
@@ -7566,7 +8486,7 @@ the user running the program:
Since Perl 5.7.2, if the first two elements of the list are C<undef>,
the utime(2) syscall from your C library is called with a null second
-argument. On most systems, this will set the file's access and
+argument. On most systems, this will set the file's access and
modification times to the current time (i.e., equivalent to the example
above) and will work even on files you don't own provided you have write
permission:
@@ -7592,6 +8512,8 @@ files. On systems that don't support futimes(2), passing filehandles raises
an exception. Filehandles must be passed as globs or glob references to be
recognized; barewords are considered filenames.
+Portability issues: L<perlport/utime>.
+
=item values HASH
X<values>
@@ -7599,24 +8521,27 @@ X<values>
=item values EXPR
-Returns a list consisting of all the values of the named hash, or the values
-of an array. (In scalar context, returns the number of values.)
+=for Pod::Functions return a list of the values in a hash
-The values are returned in an apparently random order. The actual
-random order is subject to change in future versions of Perl, but it
-is guaranteed to be the same order as either the C<keys> or C<each>
-function would produce on the same (unmodified) hash. Since Perl
-5.8.1 the ordering is different even between different runs of Perl
-for security reasons (see L<perlsec/"Algorithmic Complexity Attacks">).
+In list context, returns a list consisting of all the values of the named
+hash. In Perl 5.12 or later only, will also return a list of the values of
+an array; prior to that release, attempting to use an array argument will
+produce a syntax error. In scalar context, returns the number of values.
+
+When called on a hash, the values are returned in an apparently random
+order. The actual random order is subject to change in future versions of
+Perl, but it is guaranteed to be the same order as either the C<keys> or
+C<each> function would produce on the same (unmodified) hash. Since Perl
+5.8.1 the ordering is different even between different runs of Perl for
+security reasons (see L<perlsec/"Algorithmic Complexity Attacks">).
As a side effect, calling values() resets the HASH or ARRAY's internal
-iterator;
-see L</each>. (In particular, calling values() in void context resets
-the iterator with no other overhead. Apart from resetting the iterator,
-C<values @array> in list context is the same as plain C<@array>.
-We recommend that you use void context C<keys @array> for this, but reasoned
-that it taking C<values @array> out would require more documentation than
-leaving it in.)
+iterator, see L</each>. (In particular, calling values() in void context
+resets the iterator with no other overhead. Apart from resetting the
+iterator, C<values @array> in list context is the same as plain C<@array>.
+(We recommend that you use void context C<keys @array> for this, but
+reasoned that taking C<values @array> out would require more
+documentation than leaving it in.)
Note that the values are not copied, which means modifying them will
modify the contents of the hash:
@@ -7632,11 +8557,21 @@ experimental. The exact behaviour may change in a future version of Perl.
for (values $hashref) { ... }
for (values $obj->get_arrayref) { ... }
+To avoid confusing would-be users of your code who are running earlier
+versions of Perl with mysterious syntax errors, put this sort of thing at
+the top of your file to signal that your code will work I<only> on Perls of
+a recent vintage:
+
+ use 5.012; # so keys/values/each work on arrays
+ use 5.014; # so keys/values/each work on scalars (experimental)
+
See also C<keys>, C<each>, and C<sort>.
=item vec EXPR,OFFSET,BITS
X<vec> X<bit> X<bit vector>
+=for Pod::Functions test or set particular bits in a string
+
Treats the string in EXPR as a bit vector made up of elements of
width BITS and returns the value of the element specified by OFFSET
as an unsigned integer. BITS therefore specifies the number of bits
@@ -7875,6 +8810,8 @@ example above should print the following table:
=item wait
X<wait>
+=for Pod::Functions wait for any child process to die
+
Behaves like wait(2) on your system: it waits for a child
process to terminate and returns the pid of the deceased process, or
C<-1> if there are no child processes. The status is returned in C<$?>
@@ -7883,11 +8820,15 @@ Note that a return value of C<-1> could mean that child processes are
being automatically reaped, as described in L<perlipc>.
If you use wait in your handler for $SIG{CHLD} it may accidentally for the
-child created by qx() or system(). See L<perlipc> for details.
+child created by qx() or system(). See L<perlipc> for details.
+
+Portability issues: L<perlport/wait>.
=item waitpid PID,FLAGS
X<waitpid>
+=for Pod::Functions wait for a particular child process to die
+
Waits for a particular child process to terminate and returns the pid of
the deceased process, or C<-1> if there is no such child process. On some
systems, a value of 0 indicates that there are processes still running.
@@ -7910,9 +8851,13 @@ Note that on some systems, a return value of C<-1> could mean that child
processes are being automatically reaped. See L<perlipc> for details,
and for other examples.
+Portability issues: L<perlport/waitpid>.
+
=item wantarray
X<wantarray> X<context>
+=for Pod::Functions get void vs scalar vs list context of current subroutine call
+
Returns true if the context of the currently executing subroutine or
C<eval> is looking for a list value. Returns false if the context is
looking for a scalar. Returns the undefined value if the context is
@@ -7931,6 +8876,8 @@ This function should have been named wantlist() instead.
=item warn LIST
X<warn> X<warning> X<STDERR>
+=for Pod::Functions print debugging info
+
Prints the value of LIST to STDERR. If the last element of LIST does
not end in a newline, it appends the same file/line number text as C<die>
does.
@@ -7973,53 +8920,6 @@ See L<perlvar> for details on setting C<%SIG> entries and for more
examples. See the Carp module for other kinds of warnings using its
carp() and cluck() functions.
-=item when EXPR BLOCK
-X<when>
-
-=item when BLOCK
-
-C<when> is analogous to the C<case> keyword in other languages. Used with a
-C<foreach> loop or the experimental C<given> block, C<when> can be used in
-Perl to implement C<switch>/C<case> like statements. Available as a
-statement after Perl 5.10 and as a statement modifier after 5.14.
-Here are three examples:
-
- use v5.10;
- foreach (@fruits) {
- when (/apples?/) {
- say "I like apples."
- }
- when (/oranges?/) {
- say "I don't like oranges."
- }
- default {
- say "I don't like anything"
- }
- }
-
- # require 5.14 for when as statement modifier
- use v5.14;
- foreach (@fruits) {
- say "I like apples." when /apples?/;
- say "I don't like oranges." when /oranges?;
- default { say "I don't like anything" }
- }
-
- use v5.10;
- given ($fruit) {
- when (/apples?/) {
- say "I like apples."
- }
- when (/oranges?/) {
- say "I don't like oranges."
- }
- default {
- say "I don't like anything"
- }
- }
-
-See L<perlsyn/"Switch statements"> for detailed information.
-
=item write FILEHANDLE
X<write>
@@ -8027,6 +8927,8 @@ X<write>
=item write
+=for Pod::Functions print a picture record
+
Writes a formatted record (possibly multi-line) to the specified FILEHANDLE,
using the format associated with that file. By default the format for
a file is the one having the same name as the filehandle, but the
@@ -8037,7 +8939,7 @@ Top of form processing is handled automatically: if there is insufficient
room on the current page for the formatted record, the page is advanced by
writing a form feed, a special top-of-page format is used to format the new
page header before the record is written. By default, the top-of-page
-format is the name of the filehandle with "_TOP" appended. This would be a
+format is the name of the filehandle with "_TOP" appended. This would be a
problem with autovivified filehandles, but it may be dynamically set to the
format of your choice by assigning the name to the C<$^> variable while
that filehandle is selected. The number of lines remaining on the current
@@ -8053,9 +8955,134 @@ Note that write is I<not> the opposite of C<read>. Unfortunately.
=item y///
+=for Pod::Functions transliterate a string
+
The transliteration operator. Same as C<tr///>. See
L<perlop/"Quote and Quote-like Operators">.
=back
+=head2 Non-function Keywords by Cross-reference
+
+=head3 perldata
+
+=over
+
+=item __DATA__
+
+=item __END__
+
+These keywords are documented in L<perldata/"Special Literals">.
+
+=back
+
+=head3 perlmod
+
+=over
+
+=item BEGIN
+
+=item CHECK
+
+=item END
+
+=item INIT
+
+=item UNITCHECK
+
+These compile phase keywords are documented in L<perlmod/"BEGIN, UNITCHECK, CHECK, INIT and END">.
+
+=back
+
+=head3 perlobj
+
+=over
+
+=item DESTROY
+
+This method keyword is documented in L<perlobj/"Destructors">.
+
+=back
+
+=head3 perlop
+
+=over
+
+=item and
+
+=item cmp
+
+=item eq
+
+=item ge
+
+=item gt
+
+=item if
+
+=item le
+
+=item lt
+
+=item ne
+
+=item not
+
+=item or
+
+=item x
+
+=item xor
+
+These operators are documented in L<perlop>.
+
+=back
+
+=head3 perlsub
+
+=over
+
+=item AUTOLOAD
+
+This keyword is documented in L<perlsub/"Autoloading">.
+
+=back
+
+=head3 perlsyn
+
+=over
+
+=item else
+
+=item elseif
+
+=item elsif
+
+=item for
+
+=item foreach
+
+=item unless
+
+=item until
+
+=item while
+
+These flow-control keywords are documented in L<perlsyn/"Compound Statements">.
+
+=back
+
+=over
+
+=item default
+
+=item given
+
+=item when
+
+These flow-control keywords related to the experimental switch feature are
+documented in L<perlsyn/"Switch Statements"> .
+
+=back
+
=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perlgit.pod b/Master/tlpkg/tlperl/lib/pods/perlgit.pod
index eac7bb84b5e..1d2df2ed5e9 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlgit.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlgit.pod
@@ -51,7 +51,7 @@ branches in the repository:
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
+remote will be exactly tracked by these 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
@@ -258,7 +258,7 @@ Now you should create a patch file for all your local changes:
% git format-patch -M origin..
0001-Rename-Leon-Brocard-to-Orange-Brocard.patch
-You should now send an email to to
+You should now send an email to
L<perlbug@perl.org|mailto:perlbug@perl.org> with a description of your
changes, and include this patch file as an attachment. In addition to
being tracked by RT, mail to perlbug will automatically be forwarded to
@@ -385,45 +385,59 @@ If you want to cancel one or several commits, you can use C<git reset>.
=head2 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. You
-need an helper script that automates building C<perl> and running the
-testcase:
-
- % cat ~/run
- #!/bin/sh
- git clean -dxf
-
- # If you get './makedepend: 1: Syntax error: Unterminated quoted
- # string' when bisecting versions of perl older than 5.9.5 this hack
- # will work around the bug in makedepend.SH which was fixed in
- # version 96a8704c. Make sure to comment out `git checkout makedepend.SH'
- # below too.
- git show blead:makedepend.SH > makedepend.SH
-
- # If you can use ccache, add -Dcc=ccache\ gcc -Dld=gcc to the Configure line
- # if Encode is not needed for the test, you can speed up the bisect by
- # excluding it from the runs with -Dnoextensions=Encode
- 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 test_prep
- [ -x ./perl ] || exit 125
- ./perl -Ilib ~/testcase.pl
- ret=$?
- [ $ret -gt 127 ] && ret=127
- # git checkout makedepend.SH
- 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>.
+C<git> provides a built-in way to determine which commit should be blamed
+for introducing a given bug. C<git bisect> performs a binary search of
+history to locate the first failing commit. It is fast, powerful and
+flexible, but requires some setup and to automate the process an auxiliary
+shell script is needed.
+
+The core provides a wrapper program, F<Porting/bisect.pl>, which attempts to
+simplify as much as possible, making bisecting as simple as running a Perl
+one-liner. For example, if you want to know when this became an error:
+
+ perl -e 'my $a := 2'
+
+you simply run this:
+
+ .../Porting/bisect.pl -e 'my $a := 2;'
+
+Using C<bisect.pl>, with one command (and no other files) it's easy to find
+out
+
+=over 4
+
+=item *
+
+Which commit caused this example code to break?
+
+=item *
+
+Which commit caused this example code to start working?
+
+=item *
+
+Which commit added the first file to match this regex?
+
+=item *
+
+Which commit removed the last file to match this regex?
+
+=back
+
+usually without needing to know which versions of perl to use as start and
+end revisions, as F<bisect.pl> automatically searches to find the earliest
+stable version for which the test case passes. Run
+C<Porting/bisect.pl --help> for the full documentation, including how to
+set the C<Configure> and build time options.
+
+If you require more flexibility than F<Porting/bisect.pl> has to offer, you'll
+need to run C<git bisect> yourself. It's most useful to use C<git bisect run>
+to automate the building and testing of perl revisions. For this you'll need
+a shell script for C<git> to call to test a particular revision. An example
+script is F<Porting/bisect-example.sh>, which you should copy B<outside> of
+the repository, as the bisect process will reset the state to a clean checkout
+as it runs. The instructions below assume that you copied it as F<~/run> and
+then edited it as appropriate.
You first enter in bisect mode with:
@@ -466,6 +480,7 @@ 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 Topic branches and rewriting history
Individual committers should create topic branches under
@@ -543,7 +558,7 @@ deleted or modified. Think long and hard about whether you want to push
a local tag to perl.git before doing so. (Pushing unannotated tags is
not allowed.)
-=head3 Grafts
+=head2 Grafts
The perl history contains one mistake which was not caught in the
conversion: a merge was recorded in the history between blead and
@@ -557,83 +572,6 @@ C<.git/info/grafts> file:
It is particularly important to have this graft line if any bisecting
is done in the area of the "merge" in question.
-=head2 Topic branches and rewriting history
-
-Individual committers should create topic branches under
-B<yourname>/B<some_descriptive_name>. Other committers should check
-with a topic branch's creator before making any change to it.
-
-The simplest way to create a remote topic branch that works on all
-versions of git is to push the current head as a new branch on the
-remote, then check it out locally:
-
- $ branch="$yourname/$some_descriptive_name"
- $ git push origin HEAD:$branch
- $ git checkout -b $branch origin/$branch
-
-Users of git 1.7 or newer can do it in a more obvious manner:
-
- $ branch="$yourname/$some_descriptive_name"
- $ git checkout -b $branch
- $ git push origin -u $branch
-
-If you are not the creator of B<yourname>/B<some_descriptive_name>, you
-might sometimes find that the original author has edited the branch's
-history. There are lots of good reasons for this. Sometimes, an author
-might simply be rebasing the branch onto a newer source point.
-Sometimes, an author might have found an error in an early commit which
-they wanted to fix before merging the branch to blead.
-
-Currently the master repository is configured to forbid
-non-fast-forward merges. This means that the branches within can not be
-rebased and pushed as a single step.
-
-The only way you will ever be allowed to rebase or modify the history
-of a pushed branch is to delete it and push it as a new branch under
-the same name. Please think carefully about doing this. It may be
-better to sequentially rename your branches so that it is easier for
-others working with you to cherry-pick their local changes onto the new
-version. (XXX: needs explanation).
-
-If you want to rebase a personal topic branch, you will have to delete
-your existing topic branch and push as a new version of it. You can do
-this via the following formula (see the explanation about C<refspec>'s
-in the git push documentation for details) after you have rebased your
-branch:
-
- # first rebase
- $ git checkout $user/$topic
- $ git fetch
- $ git rebase origin/blead
-
- # then "delete-and-push"
- $ git push origin :$user/$topic
- $ git push origin $user/$topic
-
-B<NOTE:> it is forbidden at the repository level to delete any of the
-"primary" branches. That is any branch matching
-C<m!^(blead|maint|perl)!>. Any attempt to do so will result in git
-producing an error like this:
-
- $ git push origin :blead
- *** It is forbidden to delete blead/maint branches in this repository
- error: hooks/update exited with error code 1
- error: hook declined to update refs/heads/blead
- To ssh://perl5.git.perl.org/perl
- ! [remote rejected] blead (hook declined)
- error: failed to push some refs to 'ssh://perl5.git.perl.org/perl'
-
-As a matter of policy we do B<not> edit the history of the blead and
-maint-* branches. If a typo (or worse) sneaks into a commit to blead or
-maint-*, we'll fix it in another commit. The only types of updates
-allowed on these branches are "fast-forward's", where all history is
-preserved.
-
-Annotated tags in the canonical perl.git repository will never be
-deleted or modified. Think long and hard about whether you want to push
-a local tag to perl.git before doing so. (Pushing unannotated tags is
-not allowed.)
-
=head1 WRITE ACCESS TO THE GIT REPOSITORY
Once you have write access, you will need to modify the URL for the
@@ -667,6 +605,7 @@ to push your changes back with the C<camel> remote:
The C<fetch> command just updates the C<camel> refs, as the objects
themselves should have been fetched when pulling from C<origin>.
+
=head1 Accepting a patch
If you have received a patch file generated using the above section,
@@ -763,12 +702,79 @@ look in F<t/porting>.
=item *
If you make any changes that affect miniperl or core routines that have
-different code paths for miniperl, be sure to run C<make minitest>.
+different code paths for miniperl, be sure to run C<make minitest>.
This will catch problems that even the full test suite will not catch
because it runs a subset of tests under miniperl rather than perl.
=back
+=head3 On merging and rebasing
+
+Simple, one-off commits pushed to the 'blead' branch should be simple
+commits that apply cleanly. In other words, you should make sure your
+work is committed against the current position of blead, so that you can
+push back to the master repository without merging.
+
+Sometimes, blead will move while you're building or testing your
+changes. When this happens, your push will be rejected with a message
+like this:
+
+ To ssh://perl5.git.perl.org/perl.git
+ ! [rejected] blead -> blead (non-fast-forward)
+ error: failed to push some refs to 'ssh://perl5.git.perl.org/perl.git'
+ To prevent you from losing history, non-fast-forward updates were rejected
+ Merge the remote changes (e.g. 'git pull') before pushing again. See the
+ 'Note about fast-forwards' section of 'git push --help' for details.
+
+When this happens, you can just I<rebase> your work against the new
+position of blead, like this (assuming your remote for the master
+repository is "p5p"):
+
+ $ git fetch p5p
+ $ git rebase p5p/blead
+
+You will see your commits being re-applied, and you will then be able to
+push safely. More information about rebasing can be found in the
+documentation for the git-rebase(1) command.
+
+For larger sets of commits that only make sense together, or that would
+benefit from a summary of the set's purpose, you should use a merge
+commit. You should perform your work on a L<topic branch|/Topic
+branches and rewriting history>, which you should regularly rebase
+against blead to ensure that your code is not broken by blead moving.
+When you have finished your work, please perform a final rebase and
+test. Linear history is something that gets lost with every
+commit on blead, but a final rebase makes the history linear
+again, making it easier for future maintainers to see what has
+happened. Rebase as follows (assuming your work was on the
+branch C<< committer/somework >>):
+
+ $ git checkout committer/somework
+ $ git rebase blead
+
+Then you can merge it into master like this:
+
+ $ git checkout blead
+ $ git merge --no-ff --no-commit committer/somework
+ $ git commit -a
+
+The switches above deserve explanation. C<--no-ff> indicates that even
+if all your work can be applied linearly against blead, a merge commit
+should still be prepared. This ensures that all your work will be shown
+as a side branch, with all its commits merged into the mainstream blead
+by the merge commit.
+
+C<--no-commit> means that the merge commit will be I<prepared> but not
+I<committed>. The commit is then actually performed when you run the
+next command, which will bring up your editor to describe the commit.
+Without C<--no-commit>, the commit would be made with nearly no useful
+message, which would greatly diminish the value of the merge commit as a
+placeholder for the work's description.
+
+When describing the merge commit, explain the purpose of the branch, and
+keep in mind that this description will probably be used by the
+eventual release engineer when reviewing the next perldelta document.
+
=head2 Committing to maintenance versions
Maintenance versions should only be altered to add critical bug fixes,
@@ -791,20 +797,6 @@ original commit in the new commit message.
Before pushing any change to a maint version, make sure you've
satisfied the steps in L</Committing to blead> above.
-=head2 Grafts
-
-The perl history contains one mistake which was not caught in the
-conversion: a merge was recorded in the history between blead and
-maint-5.10 where no merge actually occurred. Due to the nature of git,
-this is now impossible to fix in the public repository. You can remove
-this mis-merge locally by adding the following line to your
-C<.git/info/grafts> file:
-
- 296f12bbbbaa06de9be9d09d3dcf8f4528898a49 434946e0cb7a32589ed92d18008aaa1d88515930
-
-It is particularly important to have this graft line if any bisecting
-is done in the area of the "merge" in question.
-
=head2 Merging from a branch via GitHub
While we don't encourage the submission of patches via GitHub, that
diff --git a/Master/tlpkg/tlperl/lib/pods/perlglossary.pod b/Master/tlpkg/tlperl/lib/pods/perlglossary.pod
index 639ce3349f8..5adef04b397 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlglossary.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlglossary.pod
@@ -6,7 +6,7 @@ perlglossary - Perl Glossary
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://foldoc.org/>, the Jargon File
L<http://catb.org/~esr/jargon/>, and Wikipedia L<http://www.wikipedia.org/>.
=head2 A
@@ -507,7 +507,7 @@ 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
+A L</method> whose L</invocant> is a L</package> name, not an
L</object> reference. A method associated with the class as a whole.
=item client
@@ -699,7 +699,7 @@ 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?>).
+The Comprehensive Perl Archive Network. (See L<perlfaq2/What modules and extensions are available for Perl? What is CPAN?>).
=item cracker
@@ -950,6 +950,10 @@ 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 list
+
+See </null list>.
+
=item empty subclass test
The notion that an empty L</derived class> should behave exactly like
@@ -1067,7 +1071,8 @@ such as multithreading.
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.
+undefined values are false (including the L</null list>), but not all
+false values are undefined.
=item FAQ
@@ -1357,7 +1362,8 @@ 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.
+good reason for simply calling it a "hash" instead. A hash can optionally
+be L<restricted|/restricted hash> to a fixed set of keys.
=item hash table
@@ -1470,7 +1476,7 @@ 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:
+invocant between the method and its arguments:
$gollum = new Pathetic::Creature "Smeagol";
give $gollum "Fisssssh!";
@@ -1548,11 +1554,11 @@ 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
+=item invocant
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.
+method, the invocant is a package name. In an L</instance> method,
+the invocant is an object reference.
=item invocation
@@ -1938,7 +1944,7 @@ a big language, it turns out small. Go figure.
=item mode
-In the context of the L<stat> syscall, refers to the field holding
+In the context of the L<stat(2)> syscall, refers to the field holding
the L</permission bits> and the type of the L</file>.
=item modifier
@@ -2023,7 +2029,9 @@ strings, but Perl allows strings to contain a null.
=item null list
-A L</list value> with zero elements, represented in Perl by C<()>.
+A valueless value represented in Perl by C<()>. It is not really a
+L</LIST>, but an expression that yields C<undef> in L</scalar context> and
+a L</list value> with zero elements in L</list context>.
=item null string
@@ -2520,6 +2528,10 @@ 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 restricted hash
+
+A L</hash> with a closed set of allowed keys. See L<Hash::Util>.
+
=item return value
The L</value> produced by a L</subroutine> or L</expression> when
@@ -2986,7 +2998,7 @@ 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">.
+See L<perlsyn/Basic BLOCKs>.
=item symbol
@@ -3378,11 +3390,11 @@ in the three-argument form of L<open|perlfunc/open>.
=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.
+A language to extend Perl with L<C> and C++. 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.
+See L<perlxs> for the exact explanation or read the L<perlxstut>
+tutorial.
=item XSUB
diff --git a/Master/tlpkg/tlperl/lib/pods/perlgpl.pod b/Master/tlpkg/tlperl/lib/pods/perlgpl.pod
index de1791a95a8..82a8f5a9dd1 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlgpl.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlgpl.pod
@@ -37,7 +37,8 @@ For the Perl Artistic License, see L<perlartistic>.
Version 1, February 1989
Copyright (C) 1989 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@@ -250,8 +251,10 @@ For the Perl Artistic License, see L<perlartistic>.
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
+ 02110-1301 USA
+
Also add information on how to contact you by electronic and paper mail.
@@ -259,13 +262,13 @@ For the Perl Artistic License, see L<perlartistic>.
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19xx name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
+ under certain conditions; type 'show c' for details.
- The hypothetical commands `show w' and `show c' should show the
+ The hypothetical commands 'show w' and 'show c' should show the
appropriate parts of the General Public License. Of course, the
- commands you use may be called something other than `show w' and `show
+ commands you use may be called something other than 'show w' and 'show
c'; they could even be mouse-clicks or menu items--whatever suits your
program.
@@ -274,7 +277,7 @@ For the Perl Artistic License, see L<perlartistic>.
necessary. Here a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
- program `Gnomovision' (a program to direct compilers to make passes
+ program 'Gnomovision' (a program to direct compilers to make passes
at assemblers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
@@ -283,5 +286,3 @@ For the Perl Artistic License, see L<perlartistic>.
That's all there is to it!
=cut
-
-
diff --git a/Master/tlpkg/tlperl/lib/pods/perlguts.pod b/Master/tlpkg/tlperl/lib/pods/perlguts.pod
index fcf436b7a0c..908fa1f0bd3 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlguts.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlguts.pod
@@ -56,10 +56,11 @@ In the unlikely case of a SV requiring more complex initialisation, you
can create an empty SV with newSV(len). If C<len> is 0 an empty SV of
type NULL is returned, else an SV of type PV is returned with len + 1 (for
the NUL) bytes of storage allocated, accessible via SvPVX. In both cases
-the SV has value undef.
+the SV has the undef value.
SV *sv = newSV(0); /* no storage allocated */
- SV *sv = newSV(10); /* 10 (+1) bytes of uninitialised storage allocated */
+ SV *sv = newSV(10); /* 10 (+1) bytes of uninitialised storage
+ * allocated */
To change the value of an I<already-existing> SV, there are eight routines:
@@ -69,7 +70,8 @@ To change the value of an I<already-existing> SV, there are eight routines:
void sv_setpv(SV*, const char*);
void sv_setpvn(SV*, const char*, STRLEN)
void sv_setpvf(SV*, const char*, ...);
- void sv_vsetpvfn(SV*, const char*, STRLEN, va_list *, SV **, I32, bool *);
+ void sv_vsetpvfn(SV*, const char*, STRLEN, va_list *,
+ SV **, I32, bool *);
void sv_setsv(SV*, SV*);
Notice that you can choose to specify the length of the string to be
@@ -77,7 +79,8 @@ assigned by using C<sv_setpvn>, C<newSVpvn>, or C<newSVpv>, or you may
allow Perl to calculate the length by using C<sv_setpv> or by specifying
0 as the second argument to C<newSVpv>. Be warned, though, that Perl will
determine the string's length by using C<strlen>, which depends on the
-string terminating with a NUL character.
+string terminating with a NUL character, and not otherwise containing
+NULs.
The arguments of C<sv_setpvf> are processed like C<sprintf>, and the
formatted output becomes the value.
@@ -128,7 +131,7 @@ Break this sort of statement up into separate assignments:
SV *s;
STRLEN len;
- char * ptr;
+ char *ptr;
ptr = SvPV(s, len);
foo(ptr, len);
@@ -144,7 +147,7 @@ Perl to allocate more memory for your SV, you can use the macro
which will determine if more memory needs to be allocated. If so, it will
call the function C<sv_grow>. Note that C<SvGROW> can only increase, not
decrease, the allocated memory of an SV and that it does not automatically
-add a byte for the a trailing NUL (perl's own string functions typically do
+add space for the trailing NUL byte (perl's own string functions typically do
C<SvGROW(sv, len + 1)>).
If you have an SV and want to know what kind of data Perl thinks is stored
@@ -173,7 +176,8 @@ you can use the following functions:
void sv_catpv(SV*, const char*);
void sv_catpvn(SV*, const char*, STRLEN);
void sv_catpvf(SV*, const char*, ...);
- void sv_vcatpvfn(SV*, const char*, STRLEN, va_list *, SV **, I32, bool);
+ void sv_vcatpvfn(SV*, const char*, STRLEN, va_list *, SV **,
+ I32, bool);
void sv_catsv(SV*, SV*);
The first function calculates the length of the string to be appended by
@@ -300,7 +304,7 @@ pointer in an SV, you can use the following three macros instead:
These will tell you if you truly have an integer, double, or string pointer
stored in your SV. The "p" stands for private.
-The are various ways in which the private and public flags may differ.
+There are various ways in which the private and public flags may differ.
For example, a tied SV may have a valid underlying value in the IV slot
(so SvIOKp is true), but the data should be accessed via the FETCH
routine rather than directly, so SvIOK is false. Another is when
@@ -324,7 +328,7 @@ The second method both creates the AV and initially populates it with SVs:
The second argument points to an array containing C<num> C<SV*>'s. Once the
AV has been created, the SVs can be destroyed, if so desired.
-Once the AV has been created, the following operations are possible on AVs:
+Once the AV has been created, the following operations are possible on it:
void av_push(AV*, SV*);
SV* av_pop(AV*);
@@ -342,7 +346,7 @@ Here are some other functions:
SV** av_fetch(AV*, I32 key, I32 lval);
SV** av_store(AV*, I32 key, SV* val);
-The C<av_len> function returns the highest index value in array (just
+The C<av_len> function returns the highest index value in an array (just
like $#array in Perl). If the array is empty, -1 is returned. The
C<av_fetch> function returns the value at index C<key>, but if C<lval>
is non-zero, then C<av_fetch> will store an undef value at that index.
@@ -353,6 +357,8 @@ have to decrement the reference count to avoid a memory leak. Note that
C<av_fetch> and C<av_store> both return C<SV**>'s, not C<SV*>'s as their
return value.
+A few more:
+
void av_clear(AV*);
void av_undef(AV*);
void av_extend(AV*, I32 key);
@@ -380,7 +386,7 @@ To create an HV, you use the following routine:
HV* newHV();
-Once the HV has been created, the following operations are possible on HVs:
+Once the HV has been created, the following operations are possible on it:
SV** hv_store(HV*, const char* key, U32 klen, SV* val, U32 hash);
SV** hv_fetch(HV*, const char* key, U32 klen, I32 lval);
@@ -399,7 +405,8 @@ C<SV*>. To access the scalar value, you must first dereference the return
value. However, you should check to make sure that the return value is
not NULL before dereferencing it.
-These two functions check if a hash table entry exists, and deletes it.
+The first of these two functions checks if a hash table entry exists, and the
+second deletes it.
bool hv_exists(HV*, const char* key, U32 klen);
SV* hv_delete(HV*, const char* key, U32 klen, I32 flags);
@@ -416,7 +423,7 @@ Like their AV counterparts, C<hv_clear> deletes all the entries in the hash
table but does not actually delete the hash table. The C<hv_undef> deletes
both the entries and the hash table itself.
-Perl keeps the actual data in linked list of structures with a typedef of HE.
+Perl keeps the actual data in a linked list of structures with a typedef of HE.
These contain the actual key and value pointers (plus extra administrative
overhead). The key is a string pointer; the value is an C<SV*>. However,
once you have an C<HE*>, to get the actual key and value, use the routines
@@ -559,7 +566,7 @@ new undefined value using the C<newSV> function, for example:
=head2 References
References are a special type of scalar that point to other data types
-(including references).
+(including other references).
To create a reference, use either of the following functions:
@@ -597,7 +604,7 @@ The most useful types that will be returned are:
SVt_PVAV Array
SVt_PVHV Hash
SVt_PVCV Code
- SVt_PVGV Glob (possible a file handle)
+ SVt_PVGV Glob (possibly a file handle)
SVt_PVMG Blessed or Magical Scalar
See the F<sv.h> header file for more details.
@@ -619,41 +626,46 @@ L<Stashes and Globs> for information on converting class names into stashes.
/* Still under construction */
-Upgrades rv to reference if not already one. Creates new SV for rv to
-point to. If C<classname> is non-null, the SV is blessed into the specified
-class. SV is returned.
+The following function upgrades rv to reference if not already one.
+Creates a new SV for rv to point to. If C<classname> is non-null, the SV
+is blessed into the specified class. SV is returned.
SV* newSVrv(SV* rv, const char* classname);
-Copies integer, unsigned integer or double into an SV whose reference is C<rv>. SV is blessed
-if C<classname> is non-null.
+The following three functions copy integer, unsigned integer or double
+into an SV whose reference is C<rv>. SV is blessed if C<classname> is
+non-null.
SV* sv_setref_iv(SV* rv, const char* classname, IV iv);
SV* sv_setref_uv(SV* rv, const char* classname, UV uv);
SV* sv_setref_nv(SV* rv, const char* classname, NV iv);
-Copies the pointer value (I<the address, not the string!>) into an SV whose
-reference is rv. SV is blessed if C<classname> is non-null.
+The following function copies the pointer value (I<the address, not the
+string!>) into an SV whose reference is rv. SV is blessed if C<classname>
+is non-null.
- SV* sv_setref_pv(SV* rv, const char* classname, PV iv);
+ SV* sv_setref_pv(SV* rv, const char* classname, void* pv);
-Copies string into an SV whose reference is C<rv>. Set length to 0 to let
-Perl calculate the string length. SV is blessed if C<classname> is non-null.
+The following function copies a string into an SV whose reference is C<rv>.
+Set length to 0 to let Perl calculate the string length. SV is blessed if
+C<classname> is non-null.
- SV* sv_setref_pvn(SV* rv, const char* classname, PV iv, STRLEN length);
+ SV* sv_setref_pvn(SV* rv, const char* classname, char* pv,
+ STRLEN length);
-Tests whether the SV is blessed into the specified class. It does not
-check inheritance relationships.
+The following function tests whether the SV is blessed into the specified
+class. It does not check inheritance relationships.
int sv_isa(SV* sv, const char* name);
-Tests whether the SV is a reference to a blessed object.
+The following function tests whether the SV is a reference to a blessed object.
int sv_isobject(SV* sv);
-Tests whether the SV is derived from the specified class. SV can be either
-a reference to a blessed object or a string containing a class name. This
-is the function implementing the C<UNIVERSAL::isa> functionality.
+The following function tests whether the SV is derived from the specified
+class. SV can be either a reference to a blessed object or a string
+containing a class name. This is the function implementing the
+C<UNIVERSAL::isa> functionality.
bool sv_derived_from(SV* sv, const char* name);
@@ -766,7 +778,7 @@ To create a mortal variable, use the functions:
The first call creates a mortal SV (with no value), the second converts an existing
SV to a mortal SV (and thus defers a call to C<SvREFCNT_dec>), and the
third creates a mortal copy of an existing SV.
-Because C<sv_newmortal> gives the new SV no value,it must normally be given one
+Because C<sv_newmortal> gives the new SV no value, it must normally be given one
via C<sv_setpv>, C<sv_setiv>, etc. :
SV *tmp = sv_newmortal();
@@ -781,7 +793,7 @@ You should be careful about creating mortal variables. Strange things
can happen if you make the same value mortal within multiple contexts,
or if you make a variable mortal multiple times. Thinking of "Mortalization"
as deferred C<SvREFCNT_dec> should help to minimize such problems.
-For example if you are passing an SV which you I<know> has high enough REFCNT
+For example if you are passing an SV which you I<know> has a high enough REFCNT
to survive its use on the stack you need not do any mortalization.
If you are not sure then doing an C<SvREFCNT_inc> and C<sv_2mortal>, or
making a C<sv_mortalcopy> is safer.
@@ -912,7 +924,7 @@ Note this is current as of patchlevel 0, and could change at any time.
Perl adds magic to an SV using the sv_magic function:
- void sv_magic(SV* sv, SV* obj, int how, const char* name, I32 namlen);
+ void sv_magic(SV* sv, SV* obj, int how, const char* name, I32 namlen);
The C<sv> argument is a pointer to the SV that is to acquire a new magical
feature.
@@ -985,7 +997,8 @@ routine types:
int (*svt_clear)(SV* sv, MAGIC* mg);
int (*svt_free)(SV* sv, MAGIC* mg);
- int (*svt_copy)(SV *sv, MAGIC* mg, SV *nsv, const char *name, I32 namlen);
+ int (*svt_copy)(SV *sv, MAGIC* mg, SV *nsv,
+ const char *name, I32 namlen);
int (*svt_dup)(MAGIC *mg, CLONE_PARAMS *param);
int (*svt_local)(SV *nsv, MAGIC *mg);
@@ -995,17 +1008,18 @@ currently 32 types. These different structures contain pointers to various
routines that perform additional actions depending on which function is
being called.
- Function pointer Action taken
- ---------------- ------------
- svt_get Do something before the value of the SV is retrieved.
- svt_set Do something after the SV is assigned a value.
- svt_len Report on the SV's length.
- svt_clear Clear something the SV represents.
- svt_free Free any extra storage associated with the SV.
+ Function pointer Action taken
+ ---------------- ------------
+ svt_get Do something before the value of the SV is
+ retrieved.
+ svt_set Do something after the SV is assigned a value.
+ svt_len Report on the SV's length.
+ svt_clear Clear something the SV represents.
+ svt_free Free any extra storage associated with the SV.
- svt_copy copy tied variable magic to a tied element
- svt_dup duplicate a magic structure during thread cloning
- svt_local copy magic to local value during 'local'
+ svt_copy copy tied variable magic to a tied element
+ svt_dup duplicate a magic structure during thread cloning
+ svt_local copy magic to local value during 'local'
For instance, the MGVTBL structure called C<vtbl_sv> (which corresponds
to an C<mg_type> of C<PERL_MAGIC_sv>) contains:
@@ -1027,54 +1041,76 @@ to change.
The current kinds of Magic Virtual Tables are:
- mg_type
- (old-style char and macro) MGVTBL Type of magic
- -------------------------- ------ -------------
- \0 PERL_MAGIC_sv vtbl_sv Special scalar variable
- A PERL_MAGIC_overload vtbl_amagic %OVERLOAD hash
- a PERL_MAGIC_overload_elem vtbl_amagicelem %OVERLOAD hash element
- c PERL_MAGIC_overload_table (none) Holds overload table (AMT)
- on stash
- B PERL_MAGIC_bm vtbl_bm Boyer-Moore (fast string search)
- D PERL_MAGIC_regdata vtbl_regdata Regex match position data
- (@+ and @- vars)
- d PERL_MAGIC_regdatum vtbl_regdatum Regex match position data
- element
- E PERL_MAGIC_env vtbl_env %ENV hash
- e PERL_MAGIC_envelem vtbl_envelem %ENV hash element
- f PERL_MAGIC_fm vtbl_fm Formline ('compiled' format)
- g PERL_MAGIC_regex_global vtbl_mglob m//g target / study()ed string
- H PERL_MAGIC_hints vtbl_hints %^H hash
- h PERL_MAGIC_hintselem vtbl_hintselem %^H hash element
- I PERL_MAGIC_isa vtbl_isa @ISA array
- i PERL_MAGIC_isaelem vtbl_isaelem @ISA array element
- k PERL_MAGIC_nkeys vtbl_nkeys scalar(keys()) lvalue
- L PERL_MAGIC_dbfile (none) Debugger %_<filename
- l PERL_MAGIC_dbline vtbl_dbline Debugger %_<filename element
- o PERL_MAGIC_collxfrm vtbl_collxfrm Locale collate transformation
- P PERL_MAGIC_tied vtbl_pack Tied array or hash
- p PERL_MAGIC_tiedelem vtbl_packelem Tied array or hash element
- q PERL_MAGIC_tiedscalar vtbl_packelem Tied scalar or handle
- r PERL_MAGIC_qr vtbl_qr precompiled qr// regex
- S PERL_MAGIC_sig vtbl_sig %SIG hash
- s PERL_MAGIC_sigelem vtbl_sigelem %SIG hash element
- t PERL_MAGIC_taint vtbl_taint Taintedness
- U PERL_MAGIC_uvar vtbl_uvar Available for use by extensions
- v PERL_MAGIC_vec vtbl_vec vec() lvalue
- V PERL_MAGIC_vstring (none) v-string scalars
- w PERL_MAGIC_utf8 vtbl_utf8 UTF-8 length+offset cache
- x PERL_MAGIC_substr vtbl_substr substr() lvalue
- y PERL_MAGIC_defelem vtbl_defelem Shadow "foreach" iterator
- variable / smart parameter
- vivification
- # PERL_MAGIC_arylen vtbl_arylen Array length ($#ary)
- . PERL_MAGIC_pos vtbl_pos pos() lvalue
- < PERL_MAGIC_backref vtbl_backref back pointer to a weak ref
- ~ PERL_MAGIC_ext (none) Available for use by extensions
- : PERL_MAGIC_symtab (none) hash used as symbol table
- % PERL_MAGIC_rhash (none) hash used as restricted hash
- @ PERL_MAGIC_arylen_p vtbl_arylen_p pointer to $#a from @a
-
+=for comment
+This table is generated by regen/mg_vtable.pl. Any changes made here
+will be lost.
+
+=for mg_vtable.pl begin
+
+ mg_type
+ (old-style char and macro) MGVTBL Type of magic
+ -------------------------- ------ -------------
+ \0 PERL_MAGIC_sv vtbl_sv Special scalar variable
+ # PERL_MAGIC_arylen vtbl_arylen Array length ($#ary)
+ % PERL_MAGIC_rhash (none) extra data for restricted
+ hashes
+ . PERL_MAGIC_pos vtbl_pos pos() lvalue
+ : PERL_MAGIC_symtab (none) extra data for symbol
+ tables
+ < PERL_MAGIC_backref vtbl_backref for weak ref data
+ @ PERL_MAGIC_arylen_p (none) to move arylen out of
+ XPVAV
+ A PERL_MAGIC_overload vtbl_amagic %OVERLOAD hash
+ a PERL_MAGIC_overload_elem vtbl_amagicelem %OVERLOAD hash element
+ B PERL_MAGIC_bm vtbl_regexp Boyer-Moore
+ (fast string search)
+ c PERL_MAGIC_overload_table vtbl_ovrld Holds overload table
+ (AMT) on stash
+ D PERL_MAGIC_regdata vtbl_regdata Regex match position data
+ (@+ and @- vars)
+ d PERL_MAGIC_regdatum vtbl_regdatum Regex match position data
+ element
+ E PERL_MAGIC_env vtbl_env %ENV hash
+ e PERL_MAGIC_envelem vtbl_envelem %ENV hash element
+ f PERL_MAGIC_fm vtbl_regdata Formline
+ ('compiled' format)
+ G PERL_MAGIC_study vtbl_regexp study()ed string
+ g PERL_MAGIC_regex_global vtbl_mglob m//g target
+ H PERL_MAGIC_hints vtbl_hints %^H hash
+ h PERL_MAGIC_hintselem vtbl_hintselem %^H hash element
+ I PERL_MAGIC_isa vtbl_isa @ISA array
+ i PERL_MAGIC_isaelem vtbl_isaelem @ISA array element
+ k PERL_MAGIC_nkeys vtbl_nkeys scalar(keys()) lvalue
+ L PERL_MAGIC_dbfile (none) Debugger %_<filename
+ l PERL_MAGIC_dbline vtbl_dbline Debugger %_<filename
+ element
+ N PERL_MAGIC_shared (none) Shared between threads
+ n PERL_MAGIC_shared_scalar (none) Shared between threads
+ o PERL_MAGIC_collxfrm vtbl_collxfrm Locale transformation
+ P PERL_MAGIC_tied vtbl_pack Tied array or hash
+ p PERL_MAGIC_tiedelem vtbl_packelem Tied array or hash element
+ q PERL_MAGIC_tiedscalar vtbl_packelem Tied scalar or handle
+ r PERL_MAGIC_qr vtbl_regexp precompiled qr// regex
+ S PERL_MAGIC_sig (none) %SIG hash
+ s PERL_MAGIC_sigelem vtbl_sigelem %SIG hash element
+ t PERL_MAGIC_taint vtbl_taint Taintedness
+ U PERL_MAGIC_uvar vtbl_uvar Available for use by
+ extensions
+ u PERL_MAGIC_uvar_elem (none) Reserved for use by
+ extensions
+ V PERL_MAGIC_vstring vtbl_vstring SV was vstring literal
+ v PERL_MAGIC_vec vtbl_vec vec() lvalue
+ w PERL_MAGIC_utf8 vtbl_utf8 Cached UTF-8 information
+ x PERL_MAGIC_substr vtbl_substr substr() lvalue
+ y PERL_MAGIC_defelem vtbl_defelem Shadow "foreach" iterator
+ variable / smart parameter
+ vivification
+ ] PERL_MAGIC_checkcall (none) inlining/mutation of call
+ to this CV
+ ~ PERL_MAGIC_ext (none) Available for use by
+ extensions
+
+=for mg_vtable.pl end
When an uppercase and lowercase letter both exist in the table, then the
uppercase letter is typically used to represent some kind of composite type
@@ -1125,7 +1161,7 @@ is activated whenever the hash is accessed with a key specified as
an C<SV> through the functions C<hv_store_ent>, C<hv_fetch_ent>,
C<hv_delete_ent>, and C<hv_exists_ent>. Accessing the key as a string
through the functions without the C<..._ent> suffix circumvents the
-hook. See L<Hash::Util::Fieldhash/Guts> for a detailed description.
+hook. See L<Hash::Util::FieldHash/GUTS> for a detailed description.
Note that because multiple extensions may be using C<PERL_MAGIC_ext>
or C<PERL_MAGIC_uvar> magic, it is important for extensions to take
@@ -1160,13 +1196,14 @@ since their implementation handles 'get' magic.
=head2 Finding Magic
- MAGIC *mg_find(SV *sv, int type); /* Finds the magic pointer of that type */
+ MAGIC *mg_find(SV *sv, int type); /* Finds the magic pointer of that
+ * type */
This routine returns a pointer to a C<MAGIC> structure stored in the SV.
If the SV does not have that magical feature, C<NULL> is returned. If the
SV has multiple instances of that magical feature, the first one will be
returned. C<mg_findext> can be used to find a C<MAGIC> structure of an SV
-based on both it's magic type and it's magic virtual table:
+based on both its magic type and its magic virtual table:
MAGIC *mg_findext(SV *sv, int type, MGVTBL *vtbl);
@@ -1463,7 +1500,8 @@ L</Reference Counts and Mortality>):
PUSHs(sv_2mortal(newSVuv(an_unsigned_integer)))
PUSHs(sv_2mortal(newSVnv(a_double)))
PUSHs(sv_2mortal(newSVpv("Some String",0)))
- /* Although the last example is better written as the more efficient: */
+ /* Although the last example is better written as the more
+ * efficient: */
PUSHs(newSVpvs_flags("Some String", SVs_TEMP))
And now the Perl program calling C<tzname>, the two values will be assigned
@@ -1476,7 +1514,7 @@ to use the macro:
XPUSHs(SV*)
-This macro automatically adjust the stack for you, if needed. Thus, you
+This macro automatically adjusts the stack for you, if needed. Thus, you
do not need to call C<EXTEND> to extend the stack.
Despite their suggestions in earlier versions of this document the macros
@@ -1486,6 +1524,28 @@ C<m(X)PUSH[iunp]> macros instead; see L</Putting a C value on Perl stack>.
For more information, consult L<perlxs> and L<perlxstut>.
+=head2 Autoloading with XSUBs
+
+If an AUTOLOAD routine is an XSUB, as with Perl subroutines, Perl puts the
+fully-qualified name of the autoloaded subroutine in the $AUTOLOAD variable
+of the XSUB's package.
+
+But it also puts the same information in certain fields of the XSUB itself:
+
+ HV *stash = CvSTASH(cv);
+ const char *subname = SvPVX(cv);
+ STRLEN name_length = SvCUR(cv); /* in bytes */
+ U32 is_utf8 = SvUTF8(cv);
+
+C<SvPVX(cv)> contains just the sub name itself, not including the package.
+For an AUTOLOAD routine in UNIVERSAL or one of its superclasses,
+C<CvSTASH(cv)> returns NULL during a method call on a nonexistent package.
+
+B<Note>: Setting $AUTOLOAD stopped working in 5.6.1, which did not support
+XS AUTOLOAD subs at all. Perl 5.8.0 introduced the use of fields in the
+XSUB itself. Perl 5.16.0 restored the setting of $AUTOLOAD. If you need
+to support 5.8-5.14, use the XSUB's fields.
+
=head2 Calling Perl Routines from within C Programs
There are four routines that can be used to call a Perl subroutine from
@@ -1586,7 +1646,7 @@ function).
=head2 PerlIO
-The most recent development releases of Perl has been experimenting with
+The most recent development releases of Perl have been experimenting with
removing Perl's dependency on the "normal" standard I/O suite and allowing
other stdio implementations to be used. This involves creating a new
abstraction layer that then calls whichever implementation of stdio Perl
@@ -2079,7 +2139,7 @@ function used within the Perl guts:
S_incline(pTHX_ char *s)
STATIC becomes "static" in C, and may be #define'd to nothing in some
-configurations in future.
+configurations in the future.
A public function (i.e. part of the internal API, but not necessarily
sanctioned for use in extensions) begins like this:
@@ -2171,7 +2231,7 @@ or to this otherwise:
Perl_sv_setiv(sv, num);
-You have to do nothing new in your extension to get this; since
+You don't have to do anything new in your extension to get this; since
the Perl library provides Perl_get_context(), it will all just
work.
@@ -2359,9 +2419,9 @@ usually called within the sources as C<whatever(...)>.
=item n
-This does not need a interpreter context, so the definition has no
+This does not need an interpreter context, so the definition has no
C<pTHX>, and it follows that callers don't use C<aTHX>. (See
-L<perlguts/Background and PERL_IMPLICIT_CONTEXT>.)
+L</Background and PERL_IMPLICIT_CONTEXT>.)
=item r
@@ -2610,22 +2670,24 @@ character like this (the UTF8_IS_INVARIANT() is a macro that tests
whether the byte can be encoded as a single byte even in UTF-8):
U8 *utf;
+ U8 *utf_end; /* 1 beyond buffer pointed to by utf */
UV uv; /* Note: a UV, not a U8, not a char */
+ STRLEN len; /* length of character in bytes */
if (!UTF8_IS_INVARIANT(*utf))
/* Must treat this as UTF-8 */
- uv = utf8_to_uv(utf);
+ uv = utf8_to_uvchr_buf(utf, utf_end, &len);
else
/* OK to treat this character as a byte */
uv = *utf;
-You can also see in that example that we use C<utf8_to_uv> to get the
-value of the character; the inverse function C<uv_to_utf8> is available
+You can also see in that example that we use C<utf8_to_uvchr_buf> to get the
+value of the character; the inverse function C<uvchr_to_utf8> is available
for putting a UV into UTF-8:
if (!UTF8_IS_INVARIANT(uv))
/* Must treat this as UTF8 */
- utf8 = uv_to_utf8(utf8, uv);
+ utf8 = uvchr_to_utf8(utf8, uv);
else
/* OK to treat this character as a byte */
*utf8++ = uv;
@@ -2725,19 +2787,19 @@ Not really. Just remember these things:
=item *
There's no way to tell if a string is UTF-8 or not. You can tell if an SV
-is UTF-8 by looking at is C<SvUTF8> flag. Don't forget to set the flag if
+is UTF-8 by looking at its C<SvUTF8> flag. Don't forget to set the flag if
something should be UTF-8. Treat the flag as part of the PV, even though
it's not - if you pass on the PV to somewhere, pass on the flag too.
=item *
-If a string is UTF-8, B<always> use C<utf8_to_uv> to get at the value,
+If a string is UTF-8, B<always> use C<utf8_to_uvchr_buf> to get at the value,
unless C<UTF8_IS_INVARIANT(*s)> in which case you can use C<*s>.
=item *
When writing a character C<uv> to a UTF-8 string, B<always> use
-C<uv_to_utf8>, unless C<UTF8_IS_INVARIANT(uv))> in which case
+C<uvchr_to_utf8>, unless C<UTF8_IS_INVARIANT(uv))> in which case
you can use C<*s = uv>.
=item *
diff --git a/Master/tlpkg/tlperl/lib/pods/perlhack.pod b/Master/tlpkg/tlperl/lib/pods/perlhack.pod
index dbb020f09a7..63df5d5dfc3 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlhack.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlhack.pod
@@ -56,15 +56,16 @@ sentence. For example, "Fixed spelling errors in perlhack.pod".
The next step is to submit your patch to the Perl core ticket system
via email.
-Assuming your patch consists of a single git commit, you can send it to
-perlbug with this command line:
+Assuming your patch consists of a single git commit, the following
+writes the file as a MIME attachment, and sends it with a meaningful
+subject:
- % git format-patch HEAD^1..HEAD
- % perlbug -s '[PATCH] `git log --pretty=format:%s HEAD^1..HEAD`' -f 0001-*.patch
+ % git format-patch -1 --attach
+ % perlbug -s "[PATCH] $(git log -1 --oneline HEAD)" -f 0001-*.patch
The perlbug program will ask you a few questions about your email
-address and the patch you're submitting. Once you've answered them you
-can submit your patch.
+address and the patch you're submitting. Once you've answered them it
+will submit your patch via email.
=item * Thank you
@@ -75,9 +76,9 @@ Thank you!
=head1 BUG REPORTING
-If you want to report a bug in Perl, you must use the F<perlbug> command
-line tool. This tool will ensure that your bug report includes all the
-relevant system and configuration information.
+If you want to report a bug in Perl, you must use the F<perlbug>
+command line tool. This tool will ensure that your bug report includes
+all the relevant system and configuration information.
To browse existing Perl bugs and patches, you can use the web interface
at L<http://rt.perl.org/>.
@@ -94,7 +95,8 @@ please add it. This will help the porters fix the bug.
The perl5-porters (p5p) mailing list is where the Perl standard
distribution is maintained and developed. The people who maintain Perl
-are also referred to as the "Perl 5 Porters", or just the "porters".
+are also referred to as the "Perl 5 Porters", "p5p" or just the
+"porters".
A searchable archive of the list is available at
L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/>. There is
@@ -108,6 +110,12 @@ submitted to the maintenance and development branches of the perl
repository. See L<http://lists.perl.org/list/perl5-changes.html> for
subscription and archive information.
+=head2 #p5p on IRC
+
+Many porters are also active on the L<irc://irc.perl.org/#p5p> channel.
+Feel free to join the channel and ask questions about hacking on the
+Perl core.
+
=head1 GETTING THE PERL SOURCE
All of Perl's source code is kept centrally in a Git repository at
@@ -215,7 +223,7 @@ C<format-patch> command produces one patch file for each commit you
made. If you prefer to send a single patch for all commits, you can use
C<git diff>.
- % git co blead
+ % git checkout blead
% git pull
% git diff blead my-branch-name
@@ -464,14 +472,19 @@ Don't forget the exceptional, pathological cases.
This works just like patching anything else, with one extra
consideration.
-Some core modules also live on CPAN and are maintained outside of the
-Perl core. When the author updates the module, the updates are simply
-copied into the core.
-
Modules in the F<cpan/> directory of the source tree are maintained
-outside of the Perl core. See that module's listing on documentation or
-its listing on L<http://search.cpan.org/> for more information on
-reporting bugs and submitting patches.
+outside of the Perl core. When the author updates the module, the
+updates are simply copied into the core. See that module's
+documentation or its listing on L<http://search.cpan.org/> for more
+information on reporting bugs and submitting patches.
+
+In most cases, patches to modules in F<cpan/> should be sent upstream
+and should not be applied to the Perl core individually. If a patch to
+a file in F<cpan/> absolutely cannot wait for the fix to be made
+upstream, released to CPAN and copied to blead, you must add (or
+update) a C<CUSTOMIZED> entry in the F<"Porting/Maintainers.pl"> file
+to flag that a local modification has been made. See
+F<"Porting/Maintainers.pl"> for more details.
In contrast, modules in the F<dist/> directory are maintained in the
core.
@@ -684,7 +697,8 @@ The F<t/test.pl> library provides some of the features of
L<Test::More>, but avoids loading most modules and uses as few core
features as possible.
-If you write your own test, use the L<Test Anything Protocol|TAP>.
+If you write your own test, use the L<Test Anything
+Protocol|http://testanything.org>.
=over 4
@@ -766,8 +780,8 @@ F<testname.valgrind>.
=item * test.torture torturetest
-Run all the usual tests and some extra tests. As of Perl 5.8.0, the only
-extra tests are Abigail's JAPHs, F<t/japh/abigail.t>.
+Run all the usual tests and some extra tests. As of Perl 5.8.0, the
+only extra tests are Abigail's JAPHs, F<t/japh/abigail.t>.
You can also run the torture test with F<t/harness> by giving
C<-torture> argument to F<t/harness>.
@@ -827,14 +841,14 @@ 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.
+Note that currently some test scripts may fail when run in parallel
+(most notably F<ext/IO/t/io_dir.t>). If necessary, run just the failing
+scripts again sequentially and see if the failures go away.
=head2 Running tests by hand
-You can run part of the test suite by hand by using one of the following
-commands from the F<t/> directory:
+You can run part of the test suite by hand by using one of the
+following commands from the F<t/> directory:
./perl -I../lib TEST list-of-.t-files
@@ -846,9 +860,9 @@ or
=head2 Using F<t/harness> for testing
-If you use C<harness> for testing, you have several command line options
-available to you. The arguments are as follows, and are in the order
-that they must appear if used together.
+If you use C<harness> for testing, you have several command line
+options available to you. The arguments are as follows, and are in the
+order that they must appear if used together.
harness -v -torture -re=pattern LIST OF FILES TO TEST
harness -v -torture -re LIST OF PATTERNS TO MATCH
@@ -1074,9 +1088,9 @@ each file's purpose. Perl instead begins each with a literary allusion
to that file's purpose.
Like chapters in many books, all top-level Perl source files (along
-with a few others here and there) begin with an epigramic inscription
-that alludes, indirectly and metaphorically, to the material you're
-about to read.
+with a few others here and there) begin with an epigrammatic
+inscription that alludes, indirectly and metaphorically, to the
+material you're about to read.
Quotations are taken from writings of J.R.R. Tolkien pertaining to his
Legendarium, almost always from I<The Lord of the Rings>. Chapters and
diff --git a/Master/tlpkg/tlperl/lib/pods/perlhacktips.pod b/Master/tlpkg/tlperl/lib/pods/perlhacktips.pod
index 943ad4631b8..bb995f33005 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlhacktips.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlhacktips.pod
@@ -1,3 +1,4 @@
+
=encoding utf8
=for comment
@@ -203,7 +204,7 @@ Assuming one can dereference any type of pointer for any type of data
long pony = *p; /* BAD */
Many platforms, quite rightly so, will give you a core dump instead of
-a pony if the p happens not be correctly aligned.
+a pony if the p happens not to be correctly aligned.
=item *
@@ -1138,9 +1139,10 @@ finally report any memory problems.
The excellent valgrind tool can be used to find out both memory leaks
and illegal memory accesses. As of version 3.3.0, Valgrind only
-supports Linux on x86, x86-64 and PowerPC. The special "test.valgrind"
-target can be used to run the tests under valgrind. Found errors and
-memory leaks are logged in files named F<testfile.valgrind>.
+supports Linux on x86, x86-64 and PowerPC and Darwin (OS X) on x86 and
+x86-64). The special "test.valgrind" target can be used to run the
+tests under valgrind. Found errors and memory leaks are logged in
+files named F<testfile.valgrind>.
Valgrind also provides a cachegrind tool, invoked on perl as:
@@ -1153,7 +1155,7 @@ of them. Some additional suppressions are defined in F<t/perl.supp>.
To get valgrind and for more information see
- http://developer.kde.org/~sewardj/
+ http://valgrind.org/
=head1 PROFILING
diff --git a/Master/tlpkg/tlperl/lib/pods/perlhaiku.pod b/Master/tlpkg/tlperl/lib/pods/perlhaiku.pod
index 43215cde720..fa22d96d2e8 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlhaiku.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlhaiku.pod
@@ -4,7 +4,7 @@ designed to be readable as is.
=head1 NAME
-README.haiku - Perl version 5.10+ on Haiku
+perlhaiku - Perl version 5.10+ on Haiku
=head1 DESCRIPTION
@@ -22,9 +22,9 @@ The build procedure is completely standard:
Make perl executable and create a symlink for libperl:
chmod a+x /boot/common/bin/perl
- cd /boot/common/lib; ln -s perl5/5.14.2/BePC-haiku/CORE/libperl.so .
+ cd /boot/common/lib; ln -s perl5/5.16.2/BePC-haiku/CORE/libperl.so .
-Replace C<5.14.2> with your respective version of Perl.
+Replace C<5.16.2> with your respective version of Perl.
=head1 KNOWN PROBLEMS
@@ -38,18 +38,18 @@ Perl cannot be compiled with threading support ATM.
=item *
-The C<ext/Socket/t/socketpair.t> test fails. More precisely: the subtests
+The F<ext/Socket/t/socketpair.t> test fails. More precisely: the subtests
using datagram sockets fail. Unix datagram sockets aren't implemented in
Haiku yet.
=item *
-A subtest of the C<ext/Sys/Syslog/t/syslog.t> test fails. This is due to Haiku
+A subtest of the F<ext/Sys/Syslog/t/syslog.t> test fails. This is due to Haiku
not implementing C</dev/log> support yet.
=item *
-The tests C<lib/Net/Ping/t/450_service.t> and C<lib/Net/Ping/t/510_ping_udp.t>
+The tests F<lib/Net/Ping/t/450_service.t> and F<lib/Net/Ping/t/510_ping_udp.t>
fail. This is due to bugs in Haiku's network stack implementation.
=back
diff --git a/Master/tlpkg/tlperl/lib/pods/perlhist.pod b/Master/tlpkg/tlperl/lib/pods/perlhist.pod
index c694cc1c254..fbd4d2d64c4 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlhist.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlhist.pod
@@ -30,12 +30,16 @@ Sarathy, Graham Barr, Jarkko Hietaniemi, Hugo van der Sanden,
Michael Schwern, Rafael Garcia-Suarez, Nicholas Clark, Richard Clamp,
Leon Brocard, Dave Mitchell, Jesse Vincent, Ricardo Signes, Steve Hay,
Matt S Trout, David Golden, Florian Ragwitz, Tatsuhiko Miyagawa,
-Chris C<BinGOs> Williams, Zefram and Ævar Arnfjörð Bjarmason.
+Chris C<BinGOs> Williams, Zefram, Ævar Arnfjörð Bjarmason, Stevan
+Little, Dave Rolsky, Max Maischein, Abigail, Jesse Luehrs and Tony
+Cook.
=head2 PUMPKIN?
[from Porting/pumpkin.pod in the Perl source code distribution]
+=for disclaimer orking cows is hazardous, and not legal in all jurisdictions
+
Chip Salzenberg gets credit for that, with a nod to his cow orker,
David Croy. We had passed around various names (baton, token, hot
potato) but none caught on. Then, Chip asked:
@@ -44,7 +48,7 @@ potato) but none caught on. Then, Chip asked:
Who has the patch pumpkin?
-To explain: David Croy once told me once that at a previous job,
+To explain: David Croy once told me that at a previous job,
there was one tape drive and multiple systems that used it for backups.
But instead of some high-tech exclusion software, they used a low-tech
method to prevent multiple simultaneous backups: a stuffed pumpkin.
@@ -431,13 +435,15 @@ the strings?).
Jesse 5.12.1-RC2 2010-May-13 The 5.12 maintenance track
5.12.1-RC1 2010-May-09
- 5.12.1 2010-May-16
+ 5.12.1 2010-May-16
5.12.2-RC2 2010-Aug-31
5.12.2 2010-Sep-06
Ricardo 5.12.3-RC1 2011-Jan-09
Ricardo 5.12.3-RC2 2011-Jan-14
Ricardo 5.12.3-RC3 2011-Jan-17
Ricardo 5.12.3 2011-Jan-21
+ Leon 5.12.4-RC1 2011-Jun-08
+ Leon 5.12.4 2011-Jun-20
Leon 5.13.0 2010-Apr-20 The 5.13 development track
Ricardo 5.13.1 2010-May-20
@@ -460,6 +466,28 @@ the strings?).
Florian 5.14.2-RC1 2011-Sep-19
5.14.2 2011-Sep-26
+ David G 5.15.0 2011-Jun-20 The 5.15 development track
+ Zefram 5.15.1 2011-Jul-20
+ Ricardo 5.15.2 2011-Aug-20
+ Stevan 5.15.3 2011-Sep-20
+ Florian 5.15.4 2011-Oct-20
+ Steve 5.15.5 2011-Nov-20
+ Dave R 5.15.6 2011-Dec-20
+ BinGOs 5.15.7 2012-Jan-20
+ Max M 5.15.8 2012-Feb-20
+ Abigail 5.15.9 2012-Mar-20
+ Ricardo 5.16.0-RC0 2012-May-10
+ Ricardo 5.16.0-RC1 2012-May-14
+ Ricardo 5.16.0-RC2 2012-May-15
+
+ Ricardo 5.16.0 2012-May-20 The 5.16 maintenance track
+ Ricardo 5.16.1-RC1 2012-Aug-03
+ Ricardo 5.16.1 2012-Aug-08
+ Ricardo 5.16.2 2012-Nov-01
+
+ Zefram 5.17.0 2012-May-26 The 5.17 development track
+ Jesse L 5.17.1 2012-Jun-20
+ TonyC 5.17.2 2012-Jul-20
=head2 SELECTED RELEASE SIZES
@@ -647,7 +675,7 @@ the Perl source distribution for somewhat more selected releases.
apollo - - - - - - - - 0 1
beos 1 1 1 1 1 1 1 1 1 1
Configure 256 1 256 1 264 1 264 1 270 1
- cygwin32 24 5 24 5 24 5 24 5 24 5
+ cygwin32 24 5 24 5 24 5 24 5 24 5
djgpp 14 5 14 5 14 5 14 5 15 5
eg 86 65 86 65 86 65 86 65 86 65
emacs 262 2 262 2 262 2 262 2 274 2
@@ -910,7 +938,7 @@ context diff output format.
In more modern times, named releases don't come as often, and as progress
can be followed (nearly) instantly (with rsync, and since late 2008, git)
patches between versions are no longer provided. However, that doesn't
-keep us from calculating how large a patch could have been. Which is
+keep us from calculating how large a patch could have been. Which is
shown in the table below. Unless noted otherwise, the size mentioned is
the patch to bring version x.y.z to x.y.z+1.
@@ -944,7 +972,7 @@ the patch to bring version x.y.z to x.y.z+1.
Jarkko Hietaniemi <F<jhi@iki.fi>>.
Thanks to the collective memory of the Perlfolk. In addition to the
-Keepers of the Pumpkin also Alan Champion, Mark Dominus,
+Keepers of the Pumpkin also Alan Champion, Mark Dominus,
Andreas KE<0xf6>nig, John Macdonald, Matthias Neeracher, Jeff Okamoto,
Michael Peppler, Randal Schwartz, and Paul D. Smith sent corrections
and additions. Abigail added file and patch size data for the 5.6.0 - 5.10
diff --git a/Master/tlpkg/tlperl/lib/pods/perlhpux.pod b/Master/tlpkg/tlperl/lib/pods/perlhpux.pod
index a1b59dec8d1..7bd4b93299d 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlhpux.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlhpux.pod
@@ -4,7 +4,7 @@ designed to be readable as is.
=head1 NAME
-README.hpux - Perl version 5 on Hewlett-Packard Unix (HP-UX) systems
+perlhpux - Perl version 5 on Hewlett-Packard Unix (HP-UX) systems
=head1 DESCRIPTION
@@ -402,7 +402,7 @@ for updates/patches. Enter "ANSI" as keyword.
When you are going to use the GNU C compiler (gcc), and you don't have
gcc yet, you can either build it yourself from the sources (available
-from e.g. L<http://www.gnu.ai.mit.edu/software/gcc/releases.html>) or fetch
+from e.g. L<http://gcc.gnu.org/mirrors.html>) or fetch
a prebuilt binary from the HP porting center. gcc prebuilds can be
fetched from
L<http://h21007.www2.hp.com/dspp/tech/tech_TechSoftwareDetailPage_IDX/1,1703,547,00.html>
@@ -634,6 +634,27 @@ bug seems to be to create add to the file F</etc/nsswitch.conf>
Whether you are using NIS does not matter. Amazingly enough,
the same bug also affects Solaris.
+=head1 error: pasting ")" and "l" does not give a valid preprocessing token
+
+There seems to be a broken system header file in HP-UX 11.00 that
+breaks perl building in 32bit mode with GNU gcc-4.x causing this
+error. The same file for HP-UX 11.11 (even though the file is older)
+does not show this failure, and has the correct definition, so the
+best fix is to patch the header to match:
+
+ --- /usr/include/inttypes.h 2001-04-20 18:42:14 +0200
+ +++ /usr/include/inttypes.h 2000-11-14 09:00:00 +0200
+ @@ -72,7 +72,7 @@
+ #define UINT32_C(__c) __CONCAT_U__(__c)
+ #else /* __LP64 */
+ #define INT32_C(__c) __CONCAT__(__c,l)
+ -#define UINT32_C(__c) __CONCAT__(__CONCAT_U__(__c),l)
+ +#define UINT32_C(__c) __CONCAT__(__c,ul)
+ #endif /* __LP64 */
+
+ #define INT64_C(__c) __CONCAT_L__(__c,l)
+
+
=head1 Miscellaneous
HP-UX 11 Y2K patch "Y2K-1100 B.11.00.B0125 HP-UX Core OS Year 2000
@@ -650,8 +671,4 @@ Jeff Okamoto <okamoto@corp.hp.com>
With much assistance regarding shared libraries from Marc Sabatella.
-=head1 DATE
-
-Version 0.8.3: 2008-06-24
-
=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perlhurd.pod b/Master/tlpkg/tlperl/lib/pods/perlhurd.pod
index 251249cbc15..7f9b4a98868 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlhurd.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlhurd.pod
@@ -4,7 +4,7 @@ designed to be readable as is.
=head1 NAME
-README.hurd - Perl version 5 on Hurd
+perlhurd - Perl version 5 on Hurd
=head1 DESCRIPTION
diff --git a/Master/tlpkg/tlperl/lib/pods/perlintern.pod b/Master/tlpkg/tlperl/lib/pods/perlintern.pod
index 5f09dcdc6d0..3d7c86639ec 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlintern.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlintern.pod
@@ -134,24 +134,12 @@ Found in file cv.h
=over 8
-=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)
+ void cv_dump(CV *cv, const char *title)
=for hackers
Found in file pad.c
@@ -161,7 +149,8 @@ X<do_dump_pad>
Dump the contents of a padlist
- void do_dump_pad(I32 level, PerlIO *file, PADLIST *padlist, int full)
+ void do_dump_pad(I32 level, PerlIO *file,
+ PADLIST *padlist, int full)
=for hackers
Found in file pad.c
@@ -176,44 +165,30 @@ X<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
+=item padlist_dup
+X<padlist_dup>
-If fake, it means we're cloning an existing entry
+Duplicates a pad.
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- PADOFFSET pad_add_name(const char *name, const STRLEN len, const U32 flags, HV *typestash, HV *ourstash)
+ AV * padlist_dup(AV *srcpad, CLONE_PARAMS *param)
=for hackers
Found in file pad.c
-=item pad_alloc
-X<pad_alloc>
+=item pad_alloc_name
+X<pad_alloc_name>
-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.
+Allocates a place in the currently-compiling
+pad (via L<perlapi/pad_alloc>) and
+then stores a name for that entry. I<namesv> is adopted and becomes the
+name entry; it must already contain the name string and be sufficiently
+upgraded. I<typestash> and I<ourstash> and the C<padadd_STATE> flag get
+added to I<namesv>. None of the other
+processing of L<perlapi/pad_add_name_pvn>
+is done. Returns the offset of the allocated pad slot.
- PADOFFSET pad_alloc(I32 optype, U32 tmptype)
+ PADOFFSET pad_alloc_name(SV *namesv, U32 flags,
+ HV *typestash, HV *ourstash)
=for hackers
Found in file pad.c
@@ -232,12 +207,15 @@ Found in file pad.c
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
+ * 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(SV *name, const U32 flags, const HV *ourstash)
+ void pad_check_dup(SV *name, U32 flags,
+ const HV *ourstash)
=for hackers
Found in file pad.c
@@ -262,7 +240,11 @@ 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)
+ PADOFFSET pad_findlex(const char *namepv,
+ STRLEN namelen, U32 flags,
+ const CV* cv, U32 seq, int warn,
+ SV** out_capture,
+ SV** out_name_sv, int *out_flags)
=for hackers
Found in file pad.c
@@ -274,7 +256,8 @@ 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)
+ void pad_fixup_inner_anons(PADLIST *padlist,
+ CV *old_cv, CV *new_cv)
=for hackers
Found in file pad.c
@@ -322,17 +305,6 @@ Mark all the current temporaries for reuse
=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>
@@ -344,268 +316,27 @@ new one.
=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
-
=back
-=head1 Functions in file pad.h
-
+=head1 Functions in file op.c
=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 the state variables associated with running and compiling pads.
-
- void PAD_CLONE_VARS(PerlInterpreter *proto_perl, CLONE_PARAMS* param)
-
-=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>
+=item core_prototype
+X<core_prototype>
-Save a pad slot (used to restore after an iteration)
+This function assigns the prototype of the named core function to C<sv>, or
+to a new mortal SV if C<sv> is NULL. It returns the modified C<sv>, or
+NULL if the core function has no prototype. C<code> is a code as returned
+by C<keyword()>. It must be negative and unequal to -KEY_CORE.
-XXX DAPM it would make more sense to make the arg a PADOFFSET
- void SAVEPADSV(PADOFFSET po)
+ SV * core_prototype(SV *sv, const char *name,
+ const int code,
+ int * const opnum)
=for hackers
-Found in file pad.h
+Found in file op.c
=back
@@ -664,26 +395,6 @@ removed without notice.
=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.
-
-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_sv(SV *const name_sv, U32 flags)
-
-=for hackers
-Found in file gv.c
-
=back
@@ -694,13 +405,14 @@ Found in file gv.c
=item hv_ename_add
X<hv_ename_add>
-Adds a name to a stash's internal list of effective names. See
+Adds a name to a stash's internal list of effective names. See
C<hv_ename_delete>.
This is called when a stash is assigned to a new location in the symbol
table.
- void hv_ename_add(HV *hv, const char *name, U32 len, U32 flags)
+ void hv_ename_add(HV *hv, const char *name, U32 len,
+ U32 flags)
=for hackers
Found in file hv.c
@@ -708,13 +420,14 @@ Found in file hv.c
=item hv_ename_delete
X<hv_ename_delete>
-Removes a name from a stash's internal list of effective names. If this is
+Removes a name from a stash's internal list of effective names. If this is
the name returned by C<HvENAME>, then another name in the list will take
its place (C<HvENAME> will use it).
This is called when a stash is deleted from the symbol table.
- void hv_ename_delete(HV *hv, const char *name, U32 len, U32 flags)
+ void hv_ename_delete(HV *hv, const char *name,
+ U32 len, U32 flags)
=for hackers
Found in file hv.c
@@ -726,7 +439,9 @@ Generates and returns a C<HV *> representing the content of a
C<refcounted_he> chain.
I<flags> is currently unused and must be zero.
- HV * refcounted_he_chain_2hv(const struct refcounted_he *c, U32 flags)
+ HV * refcounted_he_chain_2hv(
+ const struct refcounted_he *c, U32 flags
+ )
=for hackers
Found in file hv.c
@@ -737,7 +452,10 @@ X<refcounted_he_fetch_pv>
Like L</refcounted_he_fetch_pvn>, but takes a nul-terminated string
instead of a string/length pair.
- SV * refcounted_he_fetch_pv(const struct refcounted_he *chain, const char *key, U32 hash, U32 flags)
+ SV * refcounted_he_fetch_pv(
+ const struct refcounted_he *chain,
+ const char *key, U32 hash, U32 flags
+ )
=for hackers
Found in file hv.c
@@ -753,7 +471,11 @@ string, or zero if it has not been precomputed. Returns a mortal scalar
representing the value associated with the key, or C<&PL_sv_placeholder>
if there is no value associated with the key.
- SV * refcounted_he_fetch_pvn(const struct refcounted_he *chain, const char *keypv, STRLEN keylen, U32 hash, U32 flags)
+ SV * refcounted_he_fetch_pvn(
+ const struct refcounted_he *chain,
+ const char *keypv, STRLEN keylen, U32 hash,
+ U32 flags
+ )
=for hackers
Found in file hv.c
@@ -764,7 +486,10 @@ X<refcounted_he_fetch_pvs>
Like L</refcounted_he_fetch_pvn>, but takes a literal string instead of
a string/length pair, and no precomputed hash.
- SV * refcounted_he_fetch_pvs(const struct refcounted_he *chain, const char *key, U32 flags)
+ SV * refcounted_he_fetch_pvs(
+ const struct refcounted_he *chain,
+ const char *key, U32 flags
+ )
=for hackers
Found in file hv.h
@@ -775,7 +500,10 @@ X<refcounted_he_fetch_sv>
Like L</refcounted_he_fetch_pvn>, but takes a Perl scalar instead of a
string/length pair.
- SV * refcounted_he_fetch_sv(const struct refcounted_he *chain, SV *key, U32 hash, U32 flags)
+ SV * refcounted_he_fetch_sv(
+ const struct refcounted_he *chain, SV *key,
+ U32 hash, U32 flags
+ )
=for hackers
Found in file hv.c
@@ -801,7 +529,9 @@ Increment the reference count of a C<refcounted_he>. The pointer to the
C<refcounted_he> is also returned. It is safe to pass a null pointer
to this function: no action occurs and a null pointer is returned.
- struct refcounted_he * refcounted_he_inc(struct refcounted_he *he)
+ struct refcounted_he * refcounted_he_inc(
+ struct refcounted_he *he
+ )
=for hackers
Found in file hv.c
@@ -812,7 +542,11 @@ X<refcounted_he_new_pv>
Like L</refcounted_he_new_pvn>, but takes a nul-terminated string instead
of a string/length pair.
- struct refcounted_he * refcounted_he_new_pv(struct refcounted_he *parent, const char *key, U32 hash, SV *value, U32 flags)
+ struct refcounted_he * refcounted_he_new_pv(
+ struct refcounted_he *parent,
+ const char *key, U32 hash,
+ SV *value, U32 flags
+ )
=for hackers
Found in file hv.c
@@ -847,7 +581,12 @@ attached to the new C<refcounted_he>. This function takes ownership
of one reference to I<parent>, and returns one reference to the new
C<refcounted_he>.
- struct refcounted_he * refcounted_he_new_pvn(struct refcounted_he *parent, const char *keypv, STRLEN keylen, U32 hash, SV *value, U32 flags)
+ struct refcounted_he * refcounted_he_new_pvn(
+ struct refcounted_he *parent,
+ const char *keypv,
+ STRLEN keylen, U32 hash,
+ SV *value, U32 flags
+ )
=for hackers
Found in file hv.c
@@ -858,7 +597,11 @@ X<refcounted_he_new_pvs>
Like L</refcounted_he_new_pvn>, but takes a literal string instead of
a string/length pair, and no precomputed hash.
- struct refcounted_he * refcounted_he_new_pvs(struct refcounted_he *parent, const char *key, SV *value, U32 flags)
+ struct refcounted_he * refcounted_he_new_pvs(
+ struct refcounted_he *parent,
+ const char *key, SV *value,
+ U32 flags
+ )
=for hackers
Found in file hv.h
@@ -869,7 +612,11 @@ X<refcounted_he_new_sv>
Like L</refcounted_he_new_pvn>, but takes a Perl scalar instead of a
string/length pair.
- struct refcounted_he * refcounted_he_new_sv(struct refcounted_he *parent, SV *key, U32 hash, SV *value, U32 flags)
+ struct refcounted_he * refcounted_he_new_sv(
+ struct refcounted_he *parent,
+ SV *key, U32 hash, SV *value,
+ U32 flags
+ )
=for hackers
Found in file hv.c
@@ -930,18 +677,27 @@ X<magic_methcall>
Invoke a magic method (like FETCH).
-* sv and mg are the tied thingy and the tie magic;
-* meth is the name of the method to call;
-* argc is the number of args (in addition to $self) to pass to the method;
- the args themselves are any values following the argc argument.
-* flags:
- G_DISCARD: invoke method with G_DISCARD flag and don't return a value
- G_UNDEF_FILL: fill the stack with argc pointers to PL_sv_undef.
+C<sv> and C<mg> are the tied thingy and the tie magic.
+
+C<meth> is the name of the method to call.
+
+C<argc> is the number of args (in addition to $self) to pass to the method.
+
+The C<flags> can be:
+
+ G_DISCARD invoke method with G_DISCARD flag and don't
+ return a value
+ G_UNDEF_FILL fill the stack with argc pointers to
+ PL_sv_undef
+
+The arguments themselves are any values following the C<flags> argument.
Returns the SV (if any) returned by the method, or NULL on failure.
- SV* magic_methcall(SV *sv, const MAGIC *mg, const char *meth, U32 flags, U32 argc, ...)
+ SV* magic_methcall(SV *sv, const MAGIC *mg,
+ const char *meth, U32 flags,
+ U32 argc, ...)
=for hackers
Found in file mg.c
@@ -1017,8 +773,8 @@ Found in file mro.c
X<mro_package_moved>
Call this function to signal to a stash that it has been assigned to
-another spot in the stash hierarchy. C<stash> is the stash that has been
-assigned. C<oldstash> is the stash it replaces, if any. C<gv> is the glob
+another spot in the stash hierarchy. C<stash> is the stash that has been
+assigned. C<oldstash> is the stash it replaces, if any. C<gv> is the glob
that is actually being assigned to.
This can also be called with a null first argument to
@@ -1032,9 +788,12 @@ It also sets the effective names (C<HvENAME>) on all the stashes as
appropriate.
If the C<gv> is present and is not in the symbol table, then this function
-simply returns. This checked will be skipped if C<flags & 1>.
+simply returns. This checked will be skipped if C<flags & 1>.
- void mro_package_moved(HV * const stash, HV * const oldstash, const GV * const gv, U32 flags)
+ void mro_package_moved(HV * const stash,
+ HV * const oldstash,
+ const GV * const gv,
+ U32 flags)
=for hackers
Found in file mro.c
@@ -1042,120 +801,279 @@ Found in file mro.c
=back
+=head1 Optree Manipulation Functions
+
+=over 8
+
+=item finalize_optree
+X<finalize_optree>
+
+This function finalizes the optree. Should be called directly after
+the complete optree is built. It does some additional
+checking which can't be done in the normal ck_xxx functions and makes
+the tree thread-safe.
+
+ void finalize_optree(OP* o)
+
+=for hackers
+Found in file op.c
+
+
+=back
+
=head1 Pad Data Structures
=over 8
-=item CvPADLIST
-X<CvPADLIST>
+=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 the state variables associated with running and compiling pads.
+
+ void PAD_CLONE_VARS(PerlInterpreter *proto_perl,
+ CLONE_PARAMS* param)
-CV's can have CvPADLIST(cv) set to point to an AV.
+=for hackers
+Found in file pad.h
-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.
+=item PAD_COMPNAME_FLAGS
+X<PAD_COMPNAME_FLAGS>
-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).
+Return the flags for the current compiling pad name
+at offset C<po>. Assumes a valid slot entry.
-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:
+ U32 PAD_COMPNAME_FLAGS(PADOFFSET po)
-0'th Entry of the CvPADLIST is an AV which represents the "names" or rather
-the "static type information" for lexicals.
+=for hackers
+Found in file pad.h
-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.
+=item PAD_COMPNAME_GEN
+X<PAD_COMPNAME_GEN>
-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)).
+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.
-During execution, C<PL_comppad> and C<PL_curpad> refer to the live
-frame of the currently executing sub.
+ STRLEN PAD_COMPNAME_GEN(PADOFFSET po)
-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()).
+=for hackers
+Found in file pad.h
-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.
+=item PAD_COMPNAME_GEN_set
+X<PAD_COMPNAME_GEN_set>
-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 (accessed through the macros COP_SEQ_RANGE_LOW and
-_HIGH). During compilation, these fields may hold the special value
-PERL_PADSEQ_INTRO to indicate various stages:
+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.
- COP_SEQ_RANGE_LOW _HIGH
- ----------------- -----
- PERL_PADSEQ_INTRO 0 variable not yet introduced: { my ($x
- valid-seq# PERL_PADSEQ_INTRO variable in scope: { my ($x)
- valid-seq# valid-seq# compilation of scope complete: { my ($x) }
+ STRLEN PAD_COMPNAME_GEN_set(PADOFFSET po, int gen)
-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.
+=for hackers
+Found in file pad.h
-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.
+=item PAD_COMPNAME_OURSTASH
+X<PAD_COMPNAME_OURSTASH>
-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.)
+Return the stash associated with an C<our> variable.
+Assumes the slot entry is a valid C<our> lexical.
-Note that formats are treated as anon subs, and are cloned each time
-write is called (if necessary).
+ HV * PAD_COMPNAME_OURSTASH(PADOFFSET po)
-The flag SVs_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
+=for hackers
+Found in file pad.h
- { my $x = 1; sub f { eval '$x'} } f();
+=item PAD_COMPNAME_PV
+X<PAD_COMPNAME_PV>
-For state vars, SVs_PADSTALE is overloaded to mean 'not yet initialised'
+Return the name of the current compiling pad name
+at offset C<po>. Assumes a valid slot entry.
- AV * CvPADLIST(CV *cv)
+ char * PAD_COMPNAME_PV(PADOFFSET po)
=for hackers
-Found in file pad.c
+Found in file pad.h
+
+=item PAD_COMPNAME_TYPE
+X<PAD_COMPNAME_TYPE>
-=item pad_new
-X<pad_new>
+Return the type (stash) of the current compiling pad name at offset
+C<po>. Must be a valid name. Returns null if not typed.
-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:
+ HV * PAD_COMPNAME_TYPE(PADOFFSET po)
- padnew_CLONE this pad is for a cloned CV
- padnew_SAVE save old globals
- padnew_SAVESUB also save extra stuff for start of sub
+=for hackers
+Found in file pad.h
+
+=item pad_peg
+X<pad_peg>
+
+When PERL_MAD is enabled, this is a small no-op function that gets called
+at the start of each pad-related function. It can be breakpointed to
+track all pad operations. The parameter is a string indicating the type
+of pad operation being performed.
+
+NOTE: this function is experimental and may change or be
+removed without notice.
- PADLIST* pad_new(int flags)
+ void pad_peg(const char *s)
=for hackers
Found in file pad.c
+=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
@@ -1283,7 +1201,8 @@ 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 *const ptr, const U32 size, const U32 flags)
+ void sv_add_arena(char *const ptr, const U32 size,
+ const U32 flags)
=for hackers
Found in file sv.c
@@ -1292,7 +1211,7 @@ Found in file sv.c
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
+cleanup. This function may have to be called multiple times to free
SVs which are in complex self-referential hierarchies.
I32 sv_clean_all()
@@ -1303,7 +1222,7 @@ Found in file sv.c
=item sv_clean_objs
X<sv_clean_objs>
-Attempt to destroy all objects not yet freed
+Attempt to destroy all objects not yet freed.
void sv_clean_objs()
@@ -1313,7 +1232,7 @@ 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
+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()
@@ -1343,6 +1262,17 @@ removed without notice.
=for hackers
Found in file sv.c
+=item sv_ref
+X<sv_ref>
+
+Returns a SV describing what the SV passed in is a reference to.
+
+ SV* sv_ref(SV *dst, const SV *const sv,
+ const int ob)
+
+=for hackers
+Found in file sv.c
+
=back
@@ -1353,12 +1283,12 @@ Found in file sv.c
=item find_uninit_var
X<find_uninit_var>
-Find the name of the undefined variable (if any) that caused the operator o
+Find the name of the undefined variable (if any) that caused the operator
to issue a "Use of uninitialized value" warning.
-If match is true, only return a name if it's value matches uninit_sv.
+If match is true, only return a name if its 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
+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.
@@ -1370,7 +1300,9 @@ PL_comppad/PL_curpad points to the currently executing pad.
NOTE: this function is experimental and may change or be
removed without notice.
- SV* find_uninit_var(const OP *const obase, const SV *const uninit_sv, bool top)
+ SV* find_uninit_var(const OP *const obase,
+ const SV *const uninit_sv,
+ bool top)
=for hackers
Found in file sv.c
@@ -1378,7 +1310,7 @@ Found in file sv.c
=item report_uninit
X<report_uninit>
-Print appropriate "Use of uninitialized variable" warning
+Print appropriate "Use of uninitialized variable" warning.
void report_uninit(const SV *uninit_sv)
@@ -1390,24 +1322,50 @@ Found in file sv.c
=head1 Undocumented functions
-The following functions have been flagged as part of the public API,
-but are currently undocumented. Use them at your own risk, as the
-interfaces are subject to change.
-
-If you use one of them, you may wish to consider creating and submitting
-documentation for it. If your patch is accepted, this will indicate that
-the interface is stable (unless it is explicitly marked otherwise).
+The following functions are currently undocumented. If you use one of
+them, you may wish to consider creating and submitting documentation for
+it.
=over
-=item F0convert
-X<F0convert>
+=item _add_range_to_invlist
+X<_add_range_to_invlist>
+
+=item _core_swash_init
+X<_core_swash_init>
+
+=item _invlist_array_init
+X<_invlist_array_init>
+
+=item _invlist_contents
+X<_invlist_contents>
+
+=item _invlist_intersection
+X<_invlist_intersection>
+
+=item _invlist_intersection_maybe_complement_2nd
+X<_invlist_intersection_maybe_complement_2nd>
+
+=item _invlist_invert
+X<_invlist_invert>
+
+=item _invlist_invert_prop
+X<_invlist_invert_prop>
+
+=item _invlist_populate_swatch
+X<_invlist_populate_swatch>
+
+=item _invlist_subtract
+X<_invlist_subtract>
+
+=item _invlist_union
+X<_invlist_union>
-=item Slab_to_rw
-X<Slab_to_rw>
+=item _invlist_union_maybe_complement_2nd
+X<_invlist_union_maybe_complement_2nd>
-=item _append_range_to_invlist
-X<_append_range_to_invlist>
+=item _is_utf8__perl_idstart
+X<_is_utf8__perl_idstart>
=item _new_invlist
X<_new_invlist>
@@ -1418,20 +1376,17 @@ X<_swash_inversion_hash>
=item _swash_to_invlist
X<_swash_to_invlist>
-=item add_alternate
-X<add_alternate>
+=item _to_fold_latin1
+X<_to_fold_latin1>
-=item add_cp_to_invlist
-X<add_cp_to_invlist>
+=item _to_upper_title_latin1
+X<_to_upper_title_latin1>
-=item add_data
-X<add_data>
+=item aassign_common_vars
+X<aassign_common_vars>
-=item add_range_to_invlist
-X<add_range_to_invlist>
-
-=item add_utf16_textfilter
-X<add_utf16_textfilter>
+=item add_cp_to_invlist
+X<add_cp_to_invlist>
=item addmad
X<addmad>
@@ -1439,23 +1394,8 @@ X<addmad>
=item allocmy
X<allocmy>
-=item amagic_cmp
-X<amagic_cmp>
-
-=item amagic_cmp_locale
-X<amagic_cmp_locale>
-
-=item amagic_i_ncmp
-X<amagic_i_ncmp>
-
-=item amagic_ncmp
-X<amagic_ncmp>
-
-=item anonymise_cv_maybe
-X<anonymise_cv_maybe>
-
-=item ao
-X<ao>
+=item amagic_is_enabled
+X<amagic_is_enabled>
=item append_madprops
X<append_madprops>
@@ -1463,21 +1403,9 @@ X<append_madprops>
=item apply
X<apply>
-=item apply_attrs
-X<apply_attrs>
-
-=item apply_attrs_my
-X<apply_attrs_my>
-
-=item assert_uft8_cache_coherent
-X<assert_uft8_cache_coherent>
-
=item av_reify
X<av_reify>
-=item bad_type
-X<bad_type>
-
=item bind_match
X<bind_match>
@@ -1496,71 +1424,26 @@ X<boot_core_UNIVERSAL>
=item boot_core_mro
X<boot_core_mro>
-=item bytes_to_uni
-X<bytes_to_uni>
-
=item cando
X<cando>
-=item check_type_and_open
-X<check_type_and_open>
-
-=item check_uni
-X<check_uni>
-
=item check_utf8_print
X<check_utf8_print>
-=item checkcomma
-X<checkcomma>
-
-=item checkposixcc
-X<checkposixcc>
-
-=item ckwarn_common
-X<ckwarn_common>
-
-=item cl_and
-X<cl_and>
-
-=item cl_anything
-X<cl_anything>
-
-=item cl_init
-X<cl_init>
-
-=item cl_is_anything
-X<cl_is_anything>
-
-=item cl_or
-X<cl_or>
-
-=item clear_placeholders
-X<clear_placeholders>
-
-=item closest_cop
-X<closest_cop>
+=item ck_entersub_args_core
+X<ck_entersub_args_core>
=item convert
X<convert>
-=item cop_free
-X<cop_free>
-
-=item cr_textfilter
-X<cr_textfilter>
+=item coresub_op
+X<coresub_op>
=item create_eval_scope
X<create_eval_scope>
-=item curmad
-X<curmad>
-
-=item curse
-X<curse>
-
-=item cv_ckproto_len
-X<cv_ckproto_len>
+=item cv_ckproto_len_flags
+X<cv_ckproto_len_flags>
=item cvgv_set
X<cvgv_set>
@@ -1568,51 +1451,21 @@ X<cvgv_set>
=item cvstash_set
X<cvstash_set>
-=item deb_curcv
-X<deb_curcv>
-
=item deb_stack_all
X<deb_stack_all>
-=item deb_stack_n
-X<deb_stack_n>
-
-=item debprof
-X<debprof>
-
-=item debug_start_match
-X<debug_start_match>
-
-=item del_sv
-X<del_sv>
-
=item delete_eval_scope
X<delete_eval_scope>
-=item deprecate_commaless_var_list
-X<deprecate_commaless_var_list>
-
-=item destroy_matcher
-X<destroy_matcher>
-
=item die_unwind
X<die_unwind>
-=item div128
-X<div128>
-
=item do_aexec
X<do_aexec>
=item do_aexec5
X<do_aexec5>
-=item do_chomp
-X<do_chomp>
-
-=item do_delete_local
-X<do_delete_local>
-
=item do_eof
X<do_eof>
@@ -1637,8 +1490,8 @@ X<do_msgrcv>
=item do_msgsnd
X<do_msgsnd>
-=item do_oddball
-X<do_oddball>
+=item do_ncmp
+X<do_ncmp>
=item do_op_xmldump
X<do_op_xmldump>
@@ -1661,9 +1514,6 @@ X<do_semop>
=item do_shmio
X<do_shmio>
-=item do_smartmatch
-X<do_smartmatch>
-
=item do_sysseek
X<do_sysseek>
@@ -1673,24 +1523,6 @@ X<do_tell>
=item do_trans
X<do_trans>
-=item do_trans_complex
-X<do_trans_complex>
-
-=item do_trans_complex_utf8
-X<do_trans_complex_utf8>
-
-=item do_trans_count
-X<do_trans_count>
-
-=item do_trans_count_utf8
-X<do_trans_count_utf8>
-
-=item do_trans_simple
-X<do_trans_simple>
-
-=item do_trans_simple_utf8
-X<do_trans_simple_utf8>
-
=item do_vecget
X<do_vecget>
@@ -1700,51 +1532,12 @@ X<do_vecset>
=item do_vop
X<do_vop>
-=item doeval
-X<doeval>
-
=item dofile
X<dofile>
-=item dofindlabel
-X<dofindlabel>
-
-=item doform
-X<doform>
-
-=item dooneliner
-X<dooneliner>
-
-=item doopen_pm
-X<doopen_pm>
-
-=item doparseform
-X<doparseform>
-
-=item dopoptoeval
-X<dopoptoeval>
-
-=item dopoptogiven
-X<dopoptogiven>
-
-=item dopoptolabel
-X<dopoptolabel>
-
-=item dopoptoloop
-X<dopoptoloop>
-
-=item dopoptosub_at
-X<dopoptosub_at>
-
-=item dopoptowhen
-X<dopoptowhen>
-
=item dump_all_perl
X<dump_all_perl>
-=item dump_exec_pos
-X<dump_exec_pos>
-
=item dump_packsubs_perl
X<dump_packsubs_perl>
@@ -1754,96 +1547,21 @@ X<dump_sub_perl>
=item dump_sv_child
X<dump_sv_child>
-=item dump_trie
-X<dump_trie>
-
-=item dump_trie_interim_list
-X<dump_trie_interim_list>
-
-=item dump_trie_interim_table
-X<dump_trie_interim_table>
-
-=item dumpuntil
-X<dumpuntil>
-
-=item dup_attrlist
-X<dup_attrlist>
-
=item emulate_cop_io
X<emulate_cop_io>
-=item exec_failed
-X<exec_failed>
-
-=item expect_number
-X<expect_number>
-
=item feature_is_enabled
X<feature_is_enabled>
-=item filter_gets
-X<filter_gets>
-
-=item find_and_forget_pmops
-X<find_and_forget_pmops>
-
-=item find_array_subscript
-X<find_array_subscript>
-
-=item find_beginning
-X<find_beginning>
-
-=item find_byclass
-X<find_byclass>
-
-=item find_hash_subscript
-X<find_hash_subscript>
-
-=item find_in_my_stash
-X<find_in_my_stash>
+=item find_rundefsv2
+X<find_rundefsv2>
=item find_script
X<find_script>
-=item first_symbol
-X<first_symbol>
-
-=item fold_constants
-X<fold_constants>
-
-=item forbid_setid
-X<forbid_setid>
-
-=item force_ident
-X<force_ident>
-
-=item force_list
-X<force_list>
-
-=item force_next
-X<force_next>
-
-=item force_strict_version
-X<force_strict_version>
-
-=item force_version
-X<force_version>
-
-=item force_word
-X<force_word>
-
-=item forget_pmop
-X<forget_pmop>
-
=item free_tied_hv_pool
X<free_tied_hv_pool>
-=item gen_constant_list
-X<gen_constant_list>
-
-=item get_aux_mg
-X<get_aux_mg>
-
=item get_db_sub
X<get_db_sub>
@@ -1853,12 +1571,21 @@ X<get_debug_opts>
=item get_hash_seed
X<get_hash_seed>
+=item get_invlist_iter_addr
+X<get_invlist_iter_addr>
+
+=item get_invlist_len_addr
+X<get_invlist_len_addr>
+
+=item get_invlist_version_id_addr
+X<get_invlist_version_id_addr>
+
+=item get_invlist_zero_addr
+X<get_invlist_zero_addr>
+
=item get_no_modify
X<get_no_modify>
-=item get_num
-X<get_num>
-
=item get_opargs
X<get_opargs>
@@ -1868,81 +1595,18 @@ X<get_re_arg>
=item getenv_len
X<getenv_len>
-=item glob_2number
-X<glob_2number>
-
-=item glob_assign_glob
-X<glob_assign_glob>
-
-=item glob_assign_ref
-X<glob_assign_ref>
-
-=item grok_bslash_c
-X<grok_bslash_c>
-
-=item grok_bslash_o
-X<grok_bslash_o>
-
-=item group_end
-X<group_end>
-
-=item gv_ename
-X<gv_ename>
-
-=item gv_get_super_pkg
-X<gv_get_super_pkg>
-
-=item gv_init_sv
-X<gv_init_sv>
-
-=item gv_magicalize_isa
-X<gv_magicalize_isa>
-
-=item gv_magicalize_overload
-X<gv_magicalize_overload>
-
-=item hfreeentries
-X<hfreeentries>
-
-=item hsplit
-X<hsplit>
-
-=item hv_auxinit
-X<hv_auxinit>
+=item hfree_next_entry
+X<hfree_next_entry>
=item hv_backreferences_p
X<hv_backreferences_p>
-=item hv_delete_common
-X<hv_delete_common>
-
=item hv_kill_backrefs
X<hv_kill_backrefs>
-=item hv_magic_check
-X<hv_magic_check>
-
-=item hv_notallowed
-X<hv_notallowed>
-
=item hv_undef_flags
X<hv_undef_flags>
-=item incline
-X<incline>
-
-=item incpush
-X<incpush>
-
-=item incpush_if_exists
-X<incpush_if_exists>
-
-=item incpush_use_sep
-X<incpush_use_sep>
-
-=item ingroup
-X<ingroup>
-
=item init_argv_symbols
X<init_argv_symbols>
@@ -1952,44 +1616,17 @@ X<init_dbargs>
=item init_debugger
X<init_debugger>
-=item init_ids
-X<init_ids>
-
-=item init_interp
-X<init_interp>
-
-=item init_main_stash
-X<init_main_stash>
-
-=item init_perllib
-X<init_perllib>
-
-=item init_postdump_symbols
-X<init_postdump_symbols>
-
-=item init_predump_symbols
-X<init_predump_symbols>
-
-=item intuit_method
-X<intuit_method>
-
-=item intuit_more
-X<intuit_more>
-
=item invert
X<invert>
=item invlist_array
X<invlist_array>
-=item invlist_destroy
-X<invlist_destroy>
-
-=item invlist_extend
-X<invlist_extend>
+=item invlist_clone
+X<invlist_clone>
-=item invlist_intersection
-X<invlist_intersection>
+=item invlist_iterinit
+X<invlist_iterinit>
=item invlist_len
X<invlist_len>
@@ -2000,33 +1637,12 @@ X<invlist_max>
=item invlist_set_len
X<invlist_set_len>
-=item invlist_set_max
-X<invlist_set_max>
-
=item invlist_trim
X<invlist_trim>
-=item invlist_union
-X<invlist_union>
-
-=item invoke_exception_hook
-X<invoke_exception_hook>
-
=item io_close
X<io_close>
-=item is_an_int
-X<is_an_int>
-
-=item is_handle_constructor
-X<is_handle_constructor>
-
-=item is_inplace_av
-X<is_inplace_av>
-
-=item is_list_assignment
-X<is_list_assignment>
-
=item is_utf8_X_L
X<is_utf8_X_L>
@@ -2057,21 +1673,9 @@ X<is_utf8_X_non_hangul>
=item is_utf8_X_prepend
X<is_utf8_X_prepend>
-=item is_utf8_char_slow
-X<is_utf8_char_slow>
-
-=item is_utf8_common
-X<is_utf8_common>
-
-=item isa_lookup
-X<isa_lookup>
-
=item jmaybe
X<jmaybe>
-=item join_exact
-X<join_exact>
-
=item keyword
X<keyword>
@@ -2081,18 +1685,9 @@ X<keyword_plugin_standard>
=item list
X<list>
-=item listkids
-X<listkids>
-
=item localize
X<localize>
-=item looks_like_bool
-X<looks_like_bool>
-
-=item lop
-X<lop>
-
=item mad_free
X<mad_free>
@@ -2165,12 +1760,6 @@ X<magic_killbackrefs>
=item magic_len
X<magic_len>
-=item magic_methcall1
-X<magic_methcall1>
-
-=item magic_methpack
-X<magic_methpack>
-
=item magic_nextpack
X<magic_nextpack>
@@ -2246,81 +1835,36 @@ X<magic_setuvar>
=item magic_setvec
X<magic_setvec>
+=item magic_setvstring
+X<magic_setvstring>
+
=item magic_sizepack
X<magic_sizepack>
=item magic_wipepack
X<magic_wipepack>
-=item make_matcher
-X<make_matcher>
-
-=item make_trie
-X<make_trie>
-
-=item make_trie_failtable
-X<make_trie_failtable>
-
=item malloc_good_size
X<malloc_good_size>
=item malloced_size
X<malloced_size>
-=item matcher_matches_sv
-X<matcher_matches_sv>
-
-=item measure_struct
-X<measure_struct>
-
=item mem_collxfrm
X<mem_collxfrm>
-=item mem_log_common
-X<mem_log_common>
-
-=item mess_alloc
-X<mess_alloc>
-
-=item method_common
-X<method_common>
-
-=item missingterm
-X<missingterm>
-
-=item mod
-X<mod>
-
=item mode_from_discipline
X<mode_from_discipline>
-=item modkids
-X<modkids>
-
=item more_bodies
X<more_bodies>
-=item more_sv
-X<more_sv>
-
-=item mro_clean_isarev
-X<mro_clean_isarev>
-
-=item mro_gather_and_rename
-X<mro_gather_and_rename>
-
=item mro_meta_dup
X<mro_meta_dup>
=item mro_meta_init
X<mro_meta_init>
-=item mul128
-X<mul128>
-
-=item mulexp10
-X<mulexp10>
-
=item munge_qwlist_to_paren_list
X<munge_qwlist_to_paren_list>
@@ -2348,9 +1892,6 @@ X<my_betohs>
=item my_clearenv
X<my_clearenv>
-=item my_exit_jump
-X<my_exit_jump>
-
=item my_htobe16
X<my_htobe16>
@@ -2387,9 +1928,6 @@ X<my_htolel>
=item my_htoles
X<my_htoles>
-=item my_kid
-X<my_kid>
-
=item my_letoh16
X<my_letoh16>
@@ -2420,14 +1958,8 @@ X<my_swabn>
=item my_unexec
X<my_unexec>
-=item need_utf8
-X<need_utf8>
-
-=item newDEFSVOP
-X<newDEFSVOP>
-
-=item newGIVWHENOP
-X<newGIVWHENOP>
+=item newATTRSUB_flags
+X<newATTRSUB_flags>
=item newGP
X<newGP>
@@ -2441,45 +1973,15 @@ X<newMADsv>
=item newTOKEN
X<newTOKEN>
-=item new_constant
-X<new_constant>
-
-=item new_he
-X<new_he>
-
-=item new_logop
-X<new_logop>
+=item newXS_len_flags
+X<newXS_len_flags>
=item new_warnings_bitfield
X<new_warnings_bitfield>
-=item next_symbol
-X<next_symbol>
-
=item nextargv
X<nextargv>
-=item nextchar
-X<nextchar>
-
-=item no_bareword_allowed
-X<no_bareword_allowed>
-
-=item no_fh_allowed
-X<no_fh_allowed>
-
-=item no_op
-X<no_op>
-
-=item not_a_number
-X<not_a_number>
-
-=item nuke_stacks
-X<nuke_stacks>
-
-=item num_overflow
-X<num_overflow>
-
=item oopsAV
X<oopsAV>
@@ -2498,135 +2000,63 @@ X<op_getmad>
=item op_getmad_weak
X<op_getmad_weak>
+=item op_integerize
+X<op_integerize>
+
+=item op_lvalue_flags
+X<op_lvalue_flags>
+
=item op_refcnt_dec
X<op_refcnt_dec>
=item op_refcnt_inc
X<op_refcnt_inc>
+=item op_std_init
+X<op_std_init>
+
=item op_xmldump
X<op_xmldump>
-=item open_script
-X<open_script>
-
-=item opt_scalarhv
-X<opt_scalarhv>
-
-=item pack_rec
-X<pack_rec>
-
=item package
X<package>
=item package_version
X<package_version>
-=item pad_add_name_sv
-X<pad_add_name_sv>
-
-=item pad_compname_type
-X<pad_compname_type>
-
-=item pad_peg
-X<pad_peg>
-
-=item padlist_dup
-X<padlist_dup>
-
-=item parse_body
-X<parse_body>
-
=item parse_unicode_opts
X<parse_unicode_opts>
=item parser_free
X<parser_free>
-=item path_is_absolute
-X<path_is_absolute>
-
=item peep
X<peep>
=item pending_Slabs_to_ro
X<pending_Slabs_to_ro>
-=item pidgone
-X<pidgone>
-
-=item pm_description
-X<pm_description>
-
=item pmop_xmldump
X<pmop_xmldump>
=item pmruntime
X<pmruntime>
-=item pmtrans
-X<pmtrans>
-
=item populate_isa
X<populate_isa>
=item prepend_madprops
X<prepend_madprops>
-=item printbuf
-X<printbuf>
-
-=item process_special_blocks
-X<process_special_blocks>
-
-=item ptr_table_find
-X<ptr_table_find>
-
-=item put_byte
-X<put_byte>
-
=item qerror
X<qerror>
-=item qsortsvu
-X<qsortsvu>
-
-=item re_croak2
-X<re_croak2>
-
-=item readpipe_override
-X<readpipe_override>
-
-=item ref_array_or_hash
-X<ref_array_or_hash>
-
-=item refcounted_he_value
-X<refcounted_he_value>
-
-=item refkids
-X<refkids>
-
-=item refto
-X<refto>
-
-=item reg
-X<reg>
-
-=item reg_check_named_buff_matched
-X<reg_check_named_buff_matched>
-
=item reg_named_buff
X<reg_named_buff>
=item reg_named_buff_iter
X<reg_named_buff_iter>
-=item reg_namedseq
-X<reg_namedseq>
-
-=item reg_node
-X<reg_node>
-
=item reg_numbered_buff_fetch
X<reg_numbered_buff_fetch>
@@ -2639,99 +2069,24 @@ X<reg_numbered_buff_store>
=item reg_qr_package
X<reg_qr_package>
-=item reg_recode
-X<reg_recode>
-
-=item reg_scan_name
-X<reg_scan_name>
-
-=item reg_skipcomment
-X<reg_skipcomment>
-
=item reg_temp_copy
X<reg_temp_copy>
-=item reganode
-X<reganode>
-
-=item regatom
-X<regatom>
-
-=item regbranch
-X<regbranch>
-
-=item regclass
-X<regclass>
-
-=item regcppop
-X<regcppop>
-
-=item regcppush
-X<regcppush>
-
=item regcurly
X<regcurly>
-=item regdump_extflags
-X<regdump_extflags>
-
-=item reghop3
-X<reghop3>
-
-=item reghop4
-X<reghop4>
-
-=item reghopmaybe3
-X<reghopmaybe3>
-
-=item reginclass
-X<reginclass>
-
-=item reginsert
-X<reginsert>
-
-=item regmatch
-X<regmatch>
-
-=item regpiece
-X<regpiece>
-
-=item regpposixcc
-X<regpposixcc>
-
=item regprop
X<regprop>
-=item regrepeat
-X<regrepeat>
-
-=item regtail
-X<regtail>
-
-=item regtail_study
-X<regtail_study>
-
-=item regtry
-X<regtry>
-
-=item reguni
-X<reguni>
-
-=item regwhite
-X<regwhite>
-
=item report_evil_fh
X<report_evil_fh>
+=item report_redefined_cv
+X<report_redefined_cv>
+
=item report_wrongway_fh
X<report_wrongway_fh>
-=item require_tie_mod
-X<require_tie_mod>
-
-=item restore_magic
-X<restore_magic>
-
=item rpeep
X<rpeep>
@@ -2741,180 +2096,33 @@ X<rsignal_restore>
=item rsignal_save
X<rsignal_save>
-=item run_body
-X<run_body>
-
-=item run_user_filter
-X<run_user_filter>
-
-=item rxres_free
-X<rxres_free>
-
-=item rxres_restore
-X<rxres_restore>
-
=item rxres_save
X<rxres_save>
=item same_dirent
X<same_dirent>
-=item save_hek_flags
-X<save_hek_flags>
-
-=item save_lines
-X<save_lines>
-
-=item save_magic
-X<save_magic>
-
-=item save_pushptri32ptr
-X<save_pushptri32ptr>
-
-=item save_scalar_at
-X<save_scalar_at>
-
=item sawparens
X<sawparens>
=item scalar
X<scalar>
-=item scalar_mod_type
-X<scalar_mod_type>
-
-=item scalarboolean
-X<scalarboolean>
-
-=item scalarkids
-X<scalarkids>
-
-=item scalarseq
-X<scalarseq>
-
=item scalarvoid
X<scalarvoid>
-=item scan_commit
-X<scan_commit>
-
-=item scan_const
-X<scan_const>
-
-=item scan_formline
-X<scan_formline>
-
-=item scan_heredoc
-X<scan_heredoc>
-
-=item scan_ident
-X<scan_ident>
-
-=item scan_inputsymbol
-X<scan_inputsymbol>
-
-=item scan_pat
-X<scan_pat>
-
-=item scan_str
-X<scan_str>
-
-=item scan_subst
-X<scan_subst>
-
-=item scan_trans
-X<scan_trans>
-
-=item scan_word
-X<scan_word>
-
-=item search_const
-X<search_const>
-
-=item sequence
-X<sequence>
-
-=item sequence_num
-X<sequence_num>
-
-=item sequence_tail
-X<sequence_tail>
-
=item set_regclass_bit
X<set_regclass_bit>
-=item set_regclass_bit_fold
-X<set_regclass_bit_fold>
-
-=item share_hek_flags
-X<share_hek_flags>
-
=item sighandler
X<sighandler>
-=item simplify_sort
-X<simplify_sort>
-
-=item skipspace
-X<skipspace>
-
-=item skipspace0
-X<skipspace0>
-
-=item skipspace1
-X<skipspace1>
-
-=item skipspace2
-X<skipspace2>
-
=item softref2xv
X<softref2xv>
-=item sortcv
-X<sortcv>
-
-=item sortcv_stacked
-X<sortcv_stacked>
-
-=item sortcv_xsub
-X<sortcv_xsub>
-
-=item space_join_names_mortal
-X<space_join_names_mortal>
-
-=item start_force
-X<start_force>
-
-=item stdize_locale
-X<stdize_locale>
-
-=item store_cop_label
-X<store_cop_label>
-
-=item strip_return
-X<strip_return>
-
-=item study_chunk
-X<study_chunk>
-
=item sub_crush_depth
X<sub_crush_depth>
-=item sublex_done
-X<sublex_done>
-
-=item sublex_push
-X<sublex_push>
-
-=item sublex_start
-X<sublex_start>
-
-=item sv_2iuv_common
-X<sv_2iuv_common>
-
-=item sv_2iuv_non_preserve
-X<sv_2iuv_non_preserve>
-
=item sv_add_backref
X<sv_add_backref>
@@ -2933,41 +2141,14 @@ X<sv_compile_2op_is_broken>
=item sv_del_backref
X<sv_del_backref>
-=item sv_dup_common
-X<sv_dup_common>
-
-=item sv_dup_inc_multiple
-X<sv_dup_inc_multiple>
-
-=item sv_exp_grow
-X<sv_exp_grow>
-
=item sv_free2
X<sv_free2>
-=item sv_i_ncmp
-X<sv_i_ncmp>
-
=item sv_kill_backrefs
X<sv_kill_backrefs>
-=item sv_ncmp
-X<sv_ncmp>
-
-=item sv_pos_b2u_midway
-X<sv_pos_b2u_midway>
-
-=item sv_pos_u2b_cached
-X<sv_pos_u2b_cached>
-
-=item sv_pos_u2b_forwards
-X<sv_pos_u2b_forwards>
-
-=item sv_pos_u2b_midway
-X<sv_pos_u2b_midway>
-
-=item sv_release_COW
-X<sv_release_COW>
+=item sv_sethek
+X<sv_sethek>
=item sv_setsv_cow
X<sv_setsv_cow>
@@ -2978,41 +2159,17 @@ X<sv_unglob>
=item sv_xmlpeek
X<sv_xmlpeek>
-=item swallow_bom
-X<swallow_bom>
-
-=item swash_get
-X<swash_get>
-
=item tied_method
X<tied_method>
-=item to_byte_substr
-X<to_byte_substr>
-
-=item to_utf8_substr
-X<to_utf8_substr>
-
=item token_free
X<token_free>
=item token_getmad
X<token_getmad>
-=item tokenize_use
-X<tokenize_use>
-
-=item tokeq
-X<tokeq>
-
-=item tokereport
-X<tokereport>
-
-=item too_few_arguments
-X<too_few_arguments>
-
-=item too_many_arguments
-X<too_many_arguments>
+=item translate_substr_offsets
+X<translate_substr_offsets>
=item try_amagic_bin
X<try_amagic_bin>
@@ -3020,51 +2177,15 @@ X<try_amagic_bin>
=item try_amagic_un
X<try_amagic_un>
-=item uiv_2buf
-X<uiv_2buf>
-
-=item unpack_rec
-X<unpack_rec>
-
-=item unreferenced_to_tmp_stack
-X<unreferenced_to_tmp_stack>
-
=item unshare_hek
X<unshare_hek>
-=item unshare_hek_or_pvn
-X<unshare_hek_or_pvn>
-
-=item unwind_handler_stack
-X<unwind_handler_stack>
-
-=item update_debugger_info
-X<update_debugger_info>
-
-=item usage
-X<usage>
-
-=item utf16_textfilter
-X<utf16_textfilter>
-
-=item utf8_mg_len_cache_update
-X<utf8_mg_len_cache_update>
-
-=item utf8_mg_pos_cache_update
-X<utf8_mg_pos_cache_update>
-
=item utilize
X<utilize>
-=item validate_suid
-X<validate_suid>
-
=item varname
X<varname>
-=item visit
-X<visit>
-
=item vivify_defelem
X<vivify_defelem>
@@ -3074,15 +2195,12 @@ X<vivify_ref>
=item wait4pid
X<wait4pid>
+=item was_lvalue_sub
+X<was_lvalue_sub>
+
=item watch
X<watch>
-=item with_queued_errors
-X<with_queued_errors>
-
-=item write_no_mem
-X<write_no_mem>
-
=item write_to_stderr
X<write_to_stderr>
@@ -3092,9 +2210,6 @@ X<xmldump_all>
=item xmldump_all_perl
X<xmldump_all_perl>
-=item xmldump_attr
-X<xmldump_attr>
-
=item xmldump_eval
X<xmldump_eval>
@@ -3128,6 +2243,12 @@ X<xs_version_bootcheck>
=item yyerror
X<yyerror>
+=item yyerror_pv
+X<yyerror_pv>
+
+=item yyerror_pvn
+X<yyerror_pvn>
+
=item yylex
X<yylex>
@@ -3137,9 +2258,6 @@ X<yyparse>
=item yyunlex
X<yyunlex>
-=item yywarn
-X<yywarn>
-
=back
diff --git a/Master/tlpkg/tlperl/lib/pods/perlinterp.pod b/Master/tlpkg/tlperl/lib/pods/perlinterp.pod
index 74a5e4eb968..c7f21209de5 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlinterp.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlinterp.pod
@@ -696,7 +696,7 @@ stack implements the C equivalent of, for example:
...
}
-See L<perlguts/"Localizing Changes"> for how to use the save stack.
+See L<perlguts/"Localizing changes"> for how to use the save stack.
=head1 MILLIONS OF MACROS
diff --git a/Master/tlpkg/tlperl/lib/pods/perlintro.pod b/Master/tlpkg/tlperl/lib/pods/perlintro.pod
index 2d0076a029d..afce360a2ac 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlintro.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlintro.pod
@@ -35,10 +35,10 @@ already been declared, even if those declarations have been omitted
to make the example easier to read.
Do note that the examples have been written by many different authors over
-a period of several decades. Styles and techniques will therefore differ,
+a period of several decades. Styles and techniques will therefore differ,
although some effort has been made to not vary styles too widely in the
-same sections. Do not consider one style to be better than others - "There
-Is More Than One Way Of Doing It" is one Perl's mottos. After all, in your
+same sections. Do not consider one style to be better than others - "There's
+More Than One Way To Do It" is one of Perl's mottos. After all, in your
journey as a programmer, you are likely to encounter different styles.
=head2 What is Perl?
@@ -73,7 +73,7 @@ Alternatively, put this as the first line of your script:
... and run the script as C</path/to/script.pl>. Of course, it'll need
to be executable first, so C<chmod 755 script.pl> (under Unix).
-(This start line assumes you have the B<env> program. You can also put
+(This start line assumes you have the B<env> program. You can also put
directly the path to your perl executable, like in C<#!/usr/bin/perl>).
For more information, including instructions for other platforms such as
@@ -81,7 +81,7 @@ Windows and Mac OS, read L<perlrun>.
=head2 Safety net
-Perl by default is very forgiving. In order to make it more robust
+Perl by default is very forgiving. In order to make it more robust
it is recommended to start every program with the following lines:
#!/usr/bin/perl
@@ -89,7 +89,7 @@ it is recommended to start every program with the following lines:
use warnings;
The two additional lines request from perl to catch various common
-problems in your code. They check different things so you need both. A
+problems in your code. They check different things so you need both. A
potential problem caught by C<use strict;> will cause your code to stop
immediately when it is encountered, while C<use warnings;> will merely
give a warning (like the command-line switch B<-w>) and let your code run.
@@ -163,7 +163,7 @@ A scalar represents a single value:
Scalar values can be strings, integers or floating point numbers, and Perl
will automatically convert between them as required. There is no need
to pre-declare your variable types, but you have to declare them using
-the C<my> keyword the first time you use them. (This is one of the
+the C<my> keyword the first time you use them. (This is one of the
requirements of C<use strict;>.)
Scalar values can be used in various ways:
@@ -267,9 +267,9 @@ More complex data types can be constructed using references, which allow
you to build lists and hashes within lists and hashes.
A reference is a scalar value and can refer to any other Perl data
-type. So by storing a reference as the value of an array or hash
+type. So by storing a reference as the value of an array or hash
element, you can easily create lists and hashes within lists and
-hashes. The following example shows a 2 level hash of hash
+hashes. The following example shows a 2 level hash of hash
structure using anonymous hash references.
my $variables = {
@@ -328,7 +328,7 @@ running the program. Using C<strict> is highly recommended.
Perl has most of the usual conditional and looping constructs. As of Perl
5.10, it even has a case/switch statement (spelled C<given>/C<when>). See
-L<perlsyn/"Switch statements"> for more details.
+L<perlsyn/"Switch Statements"> for more details.
The conditions can be any Perl expression. See the list of operators in
the next section for information on comparison and boolean logic operators,
@@ -407,6 +407,9 @@ the more friendly list scanning C<foreach> loop.
print "The value of $key is $hash{$key}\n";
}
+The C<foreach> keyword is actually a synonym for the C<for>
+keyword. See C<L<perlsyn/"Foreach Loops">>.
+
=back
For more detail on looping constructs (and some that weren't mentioned in
@@ -461,7 +464,7 @@ before 99).
! not
(C<and>, C<or> and C<not> aren't just in the above table as descriptions
-of the operators. They're also supported as operators in their own
+of the operators. They're also supported as operators in their own
right. They're more readable than the C-style operators, but have
different precedence to C<&&> and friends. Check L<perlop> for more
detail.)
@@ -499,8 +502,8 @@ the list:
my $line = <$in>;
my @lines = <$in>;
-Reading in the whole file at one time is called slurping. It can
-be useful but it may be a memory hog. Most text file processing
+Reading in the whole file at one time is called slurping. It can
+be useful but it may be a memory hog. Most text file processing
can be done a line at a time with Perl's looping constructs.
The C<< <> >> operator is most often seen in a C<while> loop:
@@ -660,7 +663,7 @@ For more information on writing subroutines, see L<perlsub>.
OO Perl is relatively simple and is implemented using references which
know what sort of object they are based on Perl's concept of packages.
However, OO Perl is largely beyond the scope of this document.
-Read L<perlboot>, L<perltoot>, L<perltooc> and L<perlobj>.
+Read L<perlootut> and L<perlobj>.
As a beginning Perl programmer, your most common use of OO Perl will be
in using third-party modules, which are documented below.
diff --git a/Master/tlpkg/tlperl/lib/pods/perliol.pod b/Master/tlpkg/tlperl/lib/pods/perliol.pod
index 0f71b93078f..767fabdd7ff 100644
--- a/Master/tlpkg/tlperl/lib/pods/perliol.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perliol.pod
@@ -923,7 +923,7 @@ which do not need to do anything special for a particular method.
=head2 Extension Layers
-Layers can made available by extension modules. When an unknown layer
+Layers can be made available by extension modules. When an unknown layer
is encountered the PerlIO code will perform the equivalent of :
use PerlIO 'layer';
diff --git a/Master/tlpkg/tlperl/lib/pods/perlipc.pod b/Master/tlpkg/tlperl/lib/pods/perlipc.pod
index 3009913147c..76508388fee 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlipc.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlipc.pod
@@ -40,24 +40,7 @@ handler could in theory trigger a memory fault and subsequent core
dump - see L</Deferred Signals (Safe Signals)> below.
The names of the signals are the ones listed out by C<kill -l> on your
-system, or you can retrieve them from the Config module. Set up an
-@signame list indexed by number to get the name and a %signo hash table
-indexed by name to get the number:
-
- use Config;
- defined($Config{sig_name}) || die "No sigs?";
- foreach $name (split(" ", $Config{sig_name})) {
- $signo{$name} = $i;
- $signame[$i] = $name;
- $i++;
- }
-
-So to check whether signal 17 and SIGALRM were the same, do just this:
-
- print "signal #17 = $signame[17]\n";
- if ($signo{ALRM}) {
- print "SIGALRM is $signo{ALRM}\n";
- }
+system, or you can retrieve them using the CPAN module L<IPC::Signal>.
You may also choose to assign the strings C<"IGNORE"> or C<"DEFAULT"> as
the handler, in which case Perl will try to discard the signal or do the
@@ -72,19 +55,9 @@ Calling C<wait()> with C<$SIG{CHLD}> set to C<"IGNORE"> usually returns
C<-1> on such platforms.
Some signals can be neither trapped nor ignored, such as the KILL and STOP
-(but not the TSTP) signals. One strategy for temporarily ignoring signals
-is to use a local() on that hash element, automatically restoring a
-previous value once your block is exited. Remember that values created by
-the dynamically-scoped local() are "inherited" by functions called from
-within their caller's scope.
-
- sub precious {
- local $SIG{INT} = "IGNORE";
- more_functions();
- }
- sub more_functions {
- # interrupts still ignored, for now...
- }
+(but not the TSTP) signals. Note that ignoring signals makes them disappear.
+If you only want them blocked temporarily without them getting lost you'll
+have to use POSIX' sigprocmask.
Sending a signal to a negative process ID means that you send the signal
to the entire Unix process group. This code sends a hang-up signal to all
@@ -100,16 +73,17 @@ so it doesn't kill itself:
Another interesting signal to send is signal number zero. This doesn't
actually affect a child process, but instead checks whether it's alive
-or has changed its UID.
+or has changed its UIDs.
unless (kill 0 => $kid_pid) {
warn "something wicked happened to $kid_pid";
}
-When directed at a process whose UID is not identical to that
-of the sending process, signal number zero may fail because
-you lack permission to send the signal, even though the process is alive.
-You may be able to determine the cause of failure using C<%!>.
+Signal number zero may fail because you lack permission to send the
+signal when directed at a process whose real or saved UID is not
+identical to the real or effective UID of the sending process, even
+though the process is alive. You may be able to determine the cause of
+failure using C<$!> or C<%!>.
unless (kill(0 => $pid) || $!{EPERM}) {
warn "$pid looks dead";
@@ -120,45 +94,25 @@ handlers:
$SIG{INT} = sub { die "\nOutta here!\n" };
-But that will be problematic for the more complicated handlers that need
-to reinstall themselves. Because Perl's signal mechanism is currently
-based on the signal(3) function from the C library, you may sometimes be so
-unfortunate as to run on systems where that function is "broken"; that
-is, it behaves in the old unreliable SysV way rather than the newer, more
-reasonable BSD and POSIX fashion. So you'll see defensive people writing
-signal handlers like this:
-
- sub REAPER {
- $waitedpid = wait;
- # loathe SysV: it makes us not only reinstate
- # the handler, but place it after the wait
- $SIG{CHLD} = \&REAPER;
- }
- $SIG{CHLD} = \&REAPER;
- # now do something that forks...
-
-or better still:
+SIGCHLD handlers require some special care. If a second child dies
+while in the signal handler caused by the first death, we won't get
+another signal. So must loop here else we will leave the unreaped child
+as a zombie. And the next time two children die we get another zombie.
+And so on.
use POSIX ":sys_wait_h";
- sub REAPER {
- my $child;
- # If a second child dies while in the signal handler caused by the
- # first death, we won't get another signal. So must loop here else
- # we will leave the unreaped child as a zombie. And the next time
- # two children die we get another zombie. And so on.
- while (($child = waitpid(-1, WNOHANG)) > 0) {
+ $SIG{CHLD} = sub {
+ while ((my $child = waitpid(-1, WNOHANG)) > 0) {
$Kid_Status{$child} = $?;
}
- $SIG{CHLD} = \&REAPER; # still loathe SysV
- }
- $SIG{CHLD} = \&REAPER;
+ };
# do something that forks...
Be careful: qx(), system(), and some modules for calling external commands
do a fork(), then wait() for the result. Thus, your signal handler
-(C<&REAPER> in the example) will be called. Because wait() was already
-called by system() or qx(), the wait() in the signal handler will see no
-more zombies and will therefore block.
+will be called. Because wait() was already called by system() or qx(),
+the wait() in the signal handler will see no more zombies and will
+therefore block.
The best way to prevent this issue is to use waitpid(), as in the following
example:
@@ -196,8 +150,7 @@ protected within an C<eval{}> block, you set a signal handler to trap
alarm signals and then schedule to have one delivered to you in some
number of seconds. Then try your blocking operation, clearing the alarm
when it's done but not before you've exited your C<eval{}> block. If it
-goes off, you'll use die() to jump out of the block, much as you might
-using longjmp() or throw() in other languages.
+goes off, you'll use die() to jump out of the block.
Here's an example:
@@ -231,12 +184,6 @@ the process. Many daemons provide this mechanism using a C<SIGHUP>
signal handler. When you want to tell the daemon to reread the file,
simply send it the C<SIGHUP> signal.
-Not all platforms automatically reinstall their (native) signal
-handlers after a signal delivery. This means that the handler works
-the first time the signal is sent, only. The solution to this problem
-is to use C<POSIX> signal handlers if available; their behavior
-is well-defined.
-
The following example implements a simple daemon, which restarts
itself every time the C<SIGHUP> signal is received. The actual code is
located in the subroutine C<code()>, which just prints some debugging
@@ -257,16 +204,10 @@ info to show that it works; it should be replaced with the real code.
my $SELF = catfile($FindBin::Bin, $script);
# POSIX unmasks the sigprocmask properly
- my $sigset = POSIX::SigSet->new();
- my $action = POSIX::SigAction->new("sigHUP_handler",
- $sigset,
- &POSIX::SA_NODEFER);
- POSIX::sigaction(&POSIX::SIGHUP, $action);
-
- sub sigHUP_handler {
+ $SIG{HUP} = sub {
print "got SIGHUP\n";
exec($SELF, @ARGV) || die "$0: couldn't restart: $!";
- }
+ };
code();
@@ -310,7 +251,8 @@ Then at strategic "safe" points in the Perl interpreter (e.g. when it is
about to execute a new opcode) the flags are checked and the Perl level
handler from %SIG is executed. The "deferred" scheme allows much more
flexibility in the coding of signal handlers as we know the Perl
-interpreter is in a safe state, and that we are not in a system library function when the handler is called. However the implementation does
+interpreter is in a safe state, and that we are not in a system library
+function when the handler is called. However the implementation does
differ from previous Perls in the following ways:
=over 4
@@ -372,10 +314,9 @@ Instead of setting C<$SIG{ALRM}>:
try something like the following:
- use POSIX qw(SIGALRM);
- POSIX::sigaction(SIGALRM,
- POSIX::SigAction->new(sub { die "alarm" }))
- || die "Error setting SIGALRM handler: $!\n";
+ use POSIX qw(SIGALRM);
+ POSIX::sigaction(SIGALRM, POSIX::SigAction->new(sub { die "alarm" }))
+ || die "Error setting SIGALRM handler: $!\n";
Another way to disable the safe signal behavior locally is to use
the C<Perl::Unsafe::Signals> module from CPAN, which affects
@@ -399,7 +340,7 @@ C<waitpid> calls will always be retried.
Certain signals like SEGV, ILL, and BUS are generated by virtual memory
addressing errors and similar "faults". These are normally fatal: there is
-little a Perl-level handler can do with them. So Perl now delivers them
+little a Perl-level handler can do with them. So Perl delivers them
immediately rather than attempting to defer them.
=item Signals triggered by operating system state
@@ -885,7 +826,7 @@ reopen the appropriate handles to STDIN and STDOUT and call other processes.
close PARENT_WTR;
print CHILD_WTR "Parent Pid $$ is sending this\n";
chomp($line = <CHILD_RDR>);
- print "Parent Pid $$ just read this: `$line'\n";
+ print "Parent Pid $$ just read this: '$line'\n";
close CHILD_RDR; close CHILD_WTR;
waitpid($pid, 0);
} else {
@@ -893,7 +834,7 @@ reopen the appropriate handles to STDIN and STDOUT and call other processes.
close CHILD_RDR;
close CHILD_WTR;
chomp($line = <PARENT_RDR>);
- print "Child Pid $$ just read this: `$line'\n";
+ print "Child Pid $$ just read this: '$line'\n";
print PARENT_WTR "Child Pid $$ is sending this\n";
close PARENT_RDR;
close PARENT_WTR;
@@ -923,7 +864,7 @@ have the socketpair() system call, it will do this all for you.
close PARENT;
print CHILD "Parent Pid $$ is sending this\n";
chomp($line = <CHILD>);
- print "Parent Pid $$ just read this: `$line'\n";
+ print "Parent Pid $$ just read this: '$line'\n";
close CHILD;
waitpid($pid, 0);
} else {
@@ -1746,7 +1687,7 @@ Here's a small example showing shared memory usage.
print "read : '$buff'\n";
# the buffer of shmread is zero-character end-padded.
- substr($buff, index($buff, "\0")) = "":
+ substr($buff, index($buff, "\0")) = "";
print "un" unless $buff eq $message;
print "swell\n";
diff --git a/Master/tlpkg/tlperl/lib/pods/perlirix.pod b/Master/tlpkg/tlperl/lib/pods/perlirix.pod
index 911a2514b3a..23cc17bd79f 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlirix.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlirix.pod
@@ -4,7 +4,7 @@ specifically designed to be readable as is.
=head1 NAME
-README.irix - Perl version 5 on Irix systems
+perlirix - Perl version 5 on Irix systems
=head1 DESCRIPTION
diff --git a/Master/tlpkg/tlperl/lib/pods/perlko.pod b/Master/tlpkg/tlperl/lib/pods/perlko.pod
index 5e9c4760192..4f23ea9a14c 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlko.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlko.pod
@@ -157,7 +157,7 @@ Perl Àü¹Ý »Ó ¾Æ´Ï¶ó À¯´ÏÄÚµå Áö¿ø, EncodeÀÇ »ç¿ë¹ý µî¿¡ ¸¹Àº °ÍÀ»
Çѱ¹¾î Perl ´º½º ±×·ì
-=item L<http://www.hanb.co.kr/search/searchResult.php?keyword=perl>
+=item L<http://www.hanb.co.kr/search/searchResult.html?keyword=perl>
O'Reilly¿¡¼­ ³ª¿Â Çѱ¹¾î Perl ¼­Àû ¸ñ·Ï
diff --git a/Master/tlpkg/tlperl/lib/pods/perllexwarn.pod b/Master/tlpkg/tlperl/lib/pods/perllexwarn.pod
index accbfdf7923..e63135915b9 100644
--- a/Master/tlpkg/tlperl/lib/pods/perllexwarn.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perllexwarn.pod
@@ -158,7 +158,7 @@ Does the exact opposite to the B<-W> flag, i.e. it disables all warnings.
=head2 Backward Compatibility
-If you are used with working with a version of Perl prior to the
+If you are used to working with a version of Perl prior to the
introduction of lexically scoped warnings, or have code that uses both
lexical warnings and C<$^W>, this section will describe how they interact.
@@ -169,7 +169,7 @@ How Lexical Warnings interact with B<-w>/C<$^W>:
=item 1.
If none of the three command line flags (B<-w>, B<-W> or B<-X>) that
-control warnings is used and neither C<$^W> or the C<warnings> pragma
+control warnings is used and neither C<$^W> nor the C<warnings> pragma
are used, then default warnings will be enabled and optional warnings
disabled.
This means that legacy code that doesn't attempt to control the warnings
diff --git a/Master/tlpkg/tlperl/lib/pods/perllinux.pod b/Master/tlpkg/tlperl/lib/pods/perllinux.pod
index 2f9943c2240..a191c520592 100644
--- a/Master/tlpkg/tlperl/lib/pods/perllinux.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perllinux.pod
@@ -4,7 +4,7 @@ specifically designed to be readable as is.
=head1 NAME
-README.linux - Perl version 5 on Linux systems
+perllinux - Perl version 5 on Linux systems
=head1 DESCRIPTION
diff --git a/Master/tlpkg/tlperl/lib/pods/perllocale.pod b/Master/tlpkg/tlperl/lib/pods/perllocale.pod
index 8926d8bc813..90543efa582 100644
--- a/Master/tlpkg/tlperl/lib/pods/perllocale.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perllocale.pod
@@ -1,40 +1,101 @@
+=encoding utf8
+
=head1 NAME
perllocale - Perl locale handling (internationalization and localization)
=head1 DESCRIPTION
-Locales these days have been mostly been supplanted by Unicode, but Perl
-continues to support them. See L</Unicode and UTF-8> below.
-
-Perl supports language-specific notions of data such as "is this
-a letter", "what is the uppercase equivalent of this letter", and
-"which of these letters comes first". These are important issues,
-especially for languages other than English--but also for English: it
-would be naE<iuml>ve to imagine that C<A-Za-z> defines all the "letters"
-needed to write correct English. Perl is also aware that some character other
-than "." may be preferred as a decimal point, and that output date
-representations may be language-specific. The process of making an
-application take account of its users' preferences in such matters is
-called B<internationalization> (often abbreviated as B<i18n>); telling
-such an application about a particular set of preferences is known as
-B<localization> (B<l10n>).
-
-Perl can understand language-specific data via the standardized (ISO C,
-XPG4, POSIX 1.c) method called "the locale system". The locale system is
-controlled per application using one pragma, one function call, and
-several environment variables.
-
-B<NOTE>: This feature is new in Perl 5.004, and does not apply unless an
-application specifically requests it--see L<Backward compatibility>.
-The one exception is that write() now B<always> uses the current locale
-- see L<"NOTES">.
+In the beginning there was ASCII, the "American Standard Code for
+Information Interchange", which works quite well for Americans with
+their English alphabet and dollar-denominated currency. But it doesn't
+work so well even for other English speakers, who may use different
+currencies, such as the pound sterling (as the symbol for that currency
+is not in ASCII); and it's hopelessly inadequate for many of the
+thousands of the world's other languages.
+
+To address these deficiencies, the concept of locales was invented
+(formally the ISO C, XPG4, POSIX 1.c "locale system"). And applications
+were and are being written that use the locale mechanism. The process of
+making such an application take account of its users' preferences in
+these kinds of matters is called B<internationalization> (often
+abbreviated as B<i18n>); telling such an application about a particular
+set of preferences is known as B<localization> (B<l10n>).
+
+Perl was extended, starting in 5.004, to support the locale system. This
+is controlled per application by using one pragma, one function call,
+and several environment variables.
+
+Unfortunately, there are quite a few deficiencies with the design (and
+often, the implementations) of locales, and their use for character sets
+has mostly been supplanted by Unicode (see L<perlunitut> for an
+introduction to that, and keep on reading here for how Unicode interacts
+with locales in Perl).
+
+Perl continues to support the old locale system, and starting in v5.16,
+provides a hybrid way to use the Unicode character set, along with the
+other portions of locales that may not be so problematic.
+(Unicode is also creating C<CLDR>, the "Common Locale Data Repository",
+L<http://cldr.unicode.org/> which includes more types of information than
+are available in the POSIX locale system. At the time of this writing,
+there was no CPAN module that provides access to this XML-encoded data.
+However, many of its locales have the POSIX-only data extracted, and are
+available at L<http://unicode.org/Public/cldr/latest/>.)
+
+=head1 WHAT IS A LOCALE
+
+A locale is a set of data that describes various aspects of how various
+communities in the world categorize their world. These categories are
+broken down into the following types (some of which include a brief
+note here):
+
+=over
+
+=item Category LC_NUMERIC: Numeric formatting
+
+This indicates how numbers should be formatted for human readability,
+for example the character used as the decimal point.
+
+=item Category LC_MONETARY: Formatting of monetary amounts
+
+=for comment
+The nbsp below makes this look better
+
+E<160>
+
+=item Category LC_TIME: Date/Time formatting
+
+=for comment
+The nbsp below makes this look better
+
+E<160>
+
+=item Category LC_MESSAGES: Error and other messages
+
+This for the most part is beyond the scope of Perl
+
+=item Category LC_COLLATE: Collation
+
+This indicates the ordering of letters for comparision and sorting.
+In Latin alphabets, for example, "b", generally follows "a".
+
+=item Category LC_CTYPE: Character Types
+
+This indicates, for example if a character is an uppercase letter.
+
+=back
+
+More details on the categories are given below in L</LOCALE CATEGORIES>.
+
+Together, these categories go a long way towards being able to customize
+a single program to run in many different locations. But there are
+deficiencies, so keep reading.
=head1 PREPARING TO USE LOCALES
-If Perl applications are to understand and present your data
-correctly according a locale of your choice, B<all> of the following
-must be true:
+Perl will not use locales unless specifically requested to (see L</NOTES> below
+for the partial exception of C<write()>). But even if there is such a
+request, B<all> of the following must be true for it to work properly:
=over 4
@@ -74,9 +135,9 @@ appropriate, and B<at least one> of the following must be true:
=item 1
-B<The locale-determining environment variables (see L<"ENVIRONMENT">)
+B<The locale-determining environment variables (see L</"ENVIRONMENT">)
must be correctly set up> at the time the application is started, either
-by yourself or by whoever set up your system account; or
+by yourself or by whomever set up your system account; or
=item 2
@@ -90,13 +151,25 @@ L<The setlocale function>.
=head2 The use locale pragma
By default, Perl ignores the current locale. The S<C<use locale>>
-pragma and the C</l> regular expression modifier tell Perl to use the
-current locale for some operations (C</l> for just pattern matching).
+pragma tells Perl to use the current locale for some operations.
+Starting in v5.16, there is an optional parameter to this pragma:
+
+ use locale ':not_characters';
+
+This parameter allows better mixing of locales and Unicode, and is
+described fully in L</Unicode and UTF-8>, but briefly, it tells Perl to
+not use the character portions of the locale definition, that is
+the C<LC_CTYPE> and C<LC_COLLATE> categories. Instead it will use the
+native (extended by Unicode) character set. When using this parameter,
+you are responsible for getting the external character set translated
+into the native/Unicode one (which it already will be if it is one of
+the increasingly popular UTF-8 locales). There are convenient ways of
+doing this, as described in L</Unicode and UTF-8>.
The current locale is set at execution time by
L<setlocale()|/The setlocale function> described below. If that function
hasn't yet been called in the course of the program's execution, the
-current locale is that which was determined by the L<"ENVIRONMENT"> in
+current locale is that which was determined by the L</"ENVIRONMENT"> in
effect at the start of the program, except that
C<L<LC_NUMERIC|/Category LC_NUMERIC: Numeric Formatting>> is always
initialized to the C locale (mentioned under L<Finding locales>).
@@ -107,6 +180,31 @@ The operations that are affected by locale are:
=over 4
+=item B<Under C<use locale ':not_characters';>>
+
+=over 4
+
+=item *
+
+B<Format declarations> (format()) use C<LC_NUMERIC>
+
+=item *
+
+B<The POSIX date formatting function> (strftime()) uses C<LC_TIME>.
+
+=back
+
+=for comment
+The nbsp below makes this look better
+
+E<160>
+
+=item B<Under just plain C<use locale;>>
+
+The above operations are affected, as well as the following:
+
+=over 4
+
=item *
B<The comparison operators> (C<lt>, C<le>, C<cmp>, C<ge>, and C<gt>) and
@@ -129,21 +227,15 @@ L<Category LC_COLLATE: Collation>.
B<Regular expressions and case-modification functions> (uc(), lc(),
ucfirst(), and lcfirst()) use C<LC_CTYPE>
-=item *
-
-B<Format declarations> (format()) use C<LC_NUMERIC>
-
-=item *
-
-B<The POSIX date formatting function> (strftime()) uses C<LC_TIME>.
-
=back
-C<LC_COLLATE>, C<LC_CTYPE>, and so on, are discussed further in
-L<LOCALE CATEGORIES>.
+=back
The default behavior is restored with the S<C<no locale>> pragma, or
-upon reaching the end of block enclosing C<use locale>.
+upon reaching the end of the block enclosing C<use locale>.
+Note that C<use locale> and C<use locale ':not_characters'> may be
+nested, and that what is in effect within an inner scope will revert to
+the outer scope's rules at the end of the inner scope.
The string result of any operation that uses locale
information is tainted, as it is possible for a locale to be
@@ -178,7 +270,7 @@ POSIX::setlocale() function:
The first argument of setlocale() gives the B<category>, the second the
B<locale>. The category tells in what aspect of data processing you
want to apply locale-specific rules. Category names are discussed in
-L<LOCALE CATEGORIES> and L<"ENVIRONMENT">. The locale is the name of a
+L</LOCALE CATEGORIES> and L</"ENVIRONMENT">. The locale is the name of a
collection of customization information corresponding to a particular
combination of language, country or territory, and codeset. Read on for
hints on the naming of locales: not all systems name locales as in the
@@ -212,6 +304,9 @@ be noticed, depending on your system's C library.
If the second argument does not correspond to a valid locale, the locale
for the category is not changed, and the function returns I<undef>.
+Note that Perl ignores the current C<LC_CTYPE> and C<LC_COLLATE> locales
+within the scope of a C<use locale ':not_characters'>.
+
For further information about the categories, consult setlocale(3).
=head2 Finding locales
@@ -308,7 +403,7 @@ Perl. In particular, external programs run from within Perl will see
these changes. If you make the new settings permanent (read on), all
programs you run see the changes. See L<"ENVIRONMENT"> for
the full list of relevant environment variables and L<USING LOCALES>
-for their effects in Perl. Effects in other programs are
+for their effects in Perl. Effects in other programs are
easily deducible. For example, the variable LC_COLLATE may well affect
your B<sort> program (or whatever the program that arranges "records"
alphabetically in your system is called).
@@ -369,7 +464,7 @@ commands. You may see things like "en_US.ISO8859-1", but that isn't
the same. In this case, try running under a locale
that you can list and which somehow matches what you tried. The
rules for matching locale names are a bit vague because
-standardization is weak in this area. See again the
+standardization is weak in this area. See again the
L<Finding locales> about general rules.
=head2 Fixing system locale configuration
@@ -411,42 +506,42 @@ current locale.
Here's a simple-minded example program that rewrites its command-line
parameters as integers correctly formatted in the current locale:
- # See comments in previous example
- require 5.004;
- use POSIX qw(locale_h);
-
- # Get some of locale's numeric formatting parameters
- my ($thousands_sep, $grouping) =
- @{localeconv()}{'thousands_sep', 'grouping'};
-
- # Apply defaults if values are missing
- $thousands_sep = ',' unless $thousands_sep;
-
- # grouping and mon_grouping are packed lists
- # of small integers (characters) telling the
- # grouping (thousand_seps and mon_thousand_seps
- # being the group dividers) of numbers and
- # monetary quantities. The integers' meanings:
- # 255 means no more grouping, 0 means repeat
- # the previous grouping, 1-254 means use that
- # as the current grouping. Grouping goes from
- # right to left (low to high digits). In the
- # below we cheat slightly by never using anything
- # else than the first grouping (whatever that is).
- if ($grouping) {
- @grouping = unpack("C*", $grouping);
- } else {
- @grouping = (3);
- }
-
- # Format command line params for current locale
- for (@ARGV) {
- $_ = int; # Chop non-integer part
- 1 while
- s/(\d)(\d{$grouping[0]}($|$thousands_sep))/$1$thousands_sep$2/;
- print "$_";
- }
- print "\n";
+ # See comments in previous example
+ require 5.004;
+ use POSIX qw(locale_h);
+
+ # Get some of locale's numeric formatting parameters
+ my ($thousands_sep, $grouping) =
+ @{localeconv()}{'thousands_sep', 'grouping'};
+
+ # Apply defaults if values are missing
+ $thousands_sep = ',' unless $thousands_sep;
+
+ # grouping and mon_grouping are packed lists
+ # of small integers (characters) telling the
+ # grouping (thousand_seps and mon_thousand_seps
+ # being the group dividers) of numbers and
+ # monetary quantities. The integers' meanings:
+ # 255 means no more grouping, 0 means repeat
+ # the previous grouping, 1-254 means use that
+ # as the current grouping. Grouping goes from
+ # right to left (low to high digits). In the
+ # below we cheat slightly by never using anything
+ # else than the first grouping (whatever that is).
+ if ($grouping) {
+ @grouping = unpack("C*", $grouping);
+ } else {
+ @grouping = (3);
+ }
+
+ # Format command line params for current locale
+ for (@ARGV) {
+ $_ = int; # Chop non-integer part
+ 1 while
+ s/(\d)(\d{$grouping[0]}($|$thousands_sep))/$1$thousands_sep$2/;
+ print "$_";
+ }
+ print "\n";
=head2 I18N::Langinfo
@@ -462,14 +557,15 @@ answers for a yes/no question in the current locale.
use I18N::Langinfo qw(langinfo ABDAY_1 YESSTR NOSTR);
- my ($abday_1, $yesstr, $nostr) = map { langinfo } qw(ABDAY_1 YESSTR NOSTR);
+ my ($abday_1, $yesstr, $nostr)
+ = map { langinfo } qw(ABDAY_1 YESSTR NOSTR);
print "$abday_1? [$yesstr/$nostr] ";
In other words, in the "C" (or English) locale the above will probably
print something like:
- Sun? [yes/no]
+ Sun? [yes/no]
See L<I18N::Langinfo> for more information.
@@ -481,7 +577,8 @@ basic category at a time. See L<"ENVIRONMENT"> for a discussion of these.
=head2 Category LC_COLLATE: Collation
-In the scope of S<C<use locale>>, Perl looks to the C<LC_COLLATE>
+In the scope of S<C<use locale>> (but not a
+C<use locale ':not_characters'>), Perl looks to the C<LC_COLLATE>
environment variable to determine the application's notions on collation
(ordering) of characters. For example, "b" follows "a" in Latin
alphabets, but where do "E<aacute>" and "E<aring>" belong? And while
@@ -561,7 +658,8 @@ results, and so always obey the current C<LC_COLLATE> locale.
=head2 Category LC_CTYPE: Character Types
-In the scope of S<C<use locale>>, Perl obeys the C<LC_CTYPE> locale
+In the scope of S<C<use locale>> (but not a
+C<use locale ':not_characters'>), Perl obeys the C<LC_CTYPE> locale
setting. This controls the application's notion of which characters are
alphabetic. This affects Perl's C<\w> regular expression metanotation,
which stands for alphanumeric characters--that is, alphabetic,
@@ -582,6 +680,8 @@ Finally, C<LC_CTYPE> affects the POSIX character-class test
functions--isalpha(), islower(), and so on. For example, if you move
from the "C" locale to a 7-bit Scandinavian one, you may find--possibly
to your surprise--that "|" moves from the ispunct() class to isalpha().
+Unfortunately, this creates big problems for regular expressions. "|" still
+means alternation even though it matches C<\w>.
B<Note:> A broken or malicious C<LC_CTYPE> locale definition may result
in clearly ineligible characters being considered to be alphanumeric by
@@ -628,11 +728,11 @@ The C standard defines the C<LC_MONETARY> category, but not a function
that is affected by its contents. (Those with experience of standards
committees will recognize that the working group decided to punt on the
issue.) Consequently, Perl takes no notice of it. If you really want
-to use C<LC_MONETARY>, you can query its contents--see
-L<The localeconv function>--and use the information that it returns in your
-application's own formatting of currency amounts. However, you may well
-find that the information, voluminous and complex though it may be, still
-does not quite meet your requirements: currency formatting is a hard nut
+to use C<LC_MONETARY>, you can query its contents--see
+L<The localeconv function>--and use the information that it returns in your
+application's own formatting of currency amounts. However, you may well
+find that the information, voluminous and complex though it may be, still
+does not quite meet your requirements: currency formatting is a hard nut
to crack.
See also L<I18N::Langinfo> and C<CRNCYSTR>.
@@ -742,7 +842,7 @@ Scalar true/false (or less/equal/greater) result is never tainted.
B<Case-mapping interpolation> (with C<\l>, C<\L>, C<\u> or C<\U>)
Result string containing interpolated material is tainted if
-C<use locale> is in effect.
+C<use locale> (but not S<C<use locale ':not_characters'>>) is in effect.
=item *
@@ -751,7 +851,8 @@ B<Matching operator> (C<m//>):
Scalar true/false result never tainted.
Subpatterns, either delivered as a list-context result or as $1 etc.
-are tainted if C<use locale> is in effect, and the subpattern regular
+are tainted if C<use locale> (but not S<C<use locale ':not_characters'>>)
+is in effect, and the subpattern regular
expression contains C<\w> (to match an alphanumeric character), C<\W>
(non-alphanumeric character), C<\s> (whitespace character), or C<\S>
(non whitespace character). The matched-pattern variable, $&, $`
@@ -764,8 +865,9 @@ C<\W>, C<\s>, or C<\S>.
B<Substitution operator> (C<s///>):
Has the same behavior as the match operator. Also, the left
-operand of C<=~> becomes tainted when C<use locale> in effect
-if modified as a result of a substitution based on a regular
+operand of C<=~> becomes tainted when C<use locale>
+(but not S<C<use locale ':not_characters'>>) is in effect if modified as
+a result of a substitution based on a regular
expression match involving C<\w>, C<\W>, C<\s>, or C<\S>; or of
case-mapping with C<\l>, C<\L>,C<\u> or C<\U>.
@@ -781,7 +883,8 @@ effect.
B<Case-mapping functions> (lc(), lcfirst(), uc(), ucfirst()):
-Results are tainted if C<use locale> is in effect.
+Results are tainted if C<use locale> (but not
+S<C<use locale ':not_characters'>>) is in effect.
=item *
@@ -930,18 +1033,18 @@ category-specific C<LC_...>.
The LC_NUMERIC controls the numeric output:
- use locale;
- use POSIX qw(locale_h); # Imports setlocale() and the LC_ constants.
- setlocale(LC_NUMERIC, "fr_FR") or die "Pardon";
- printf "%g\n", 1.23; # If the "fr_FR" succeeded, probably shows 1,23.
+ use locale;
+ use POSIX qw(locale_h); # Imports setlocale() and the LC_ constants.
+ setlocale(LC_NUMERIC, "fr_FR") or die "Pardon";
+ printf "%g\n", 1.23; # If the "fr_FR" succeeded, probably shows 1,23.
and also how strings are parsed by POSIX::strtod() as numbers:
- use locale;
- use POSIX qw(locale_h strtod);
- setlocale(LC_NUMERIC, "de_DE") or die "Entschuldigung";
- my $x = strtod("2,34") + 5;
- print $x, "\n"; # Probably shows 7,34.
+ use locale;
+ use POSIX qw(locale_h strtod);
+ setlocale(LC_NUMERIC, "de_DE") or die "Entschuldigung";
+ my $x = strtod("2,34") + 5;
+ print $x, "\n"; # Probably shows 7,34.
=head1 NOTES
@@ -953,7 +1056,8 @@ always in force, even if the program environment suggested otherwise
(see L<The setlocale function>). By default, Perl still behaves this
way for backward compatibility. If you want a Perl application to pay
attention to locale information, you B<must> use the S<C<use locale>>
-pragma (see L<The use locale pragma>) or for just pattern matching, the
+pragma (see L<The use locale pragma>) or, in the unlikely event
+that you want to do so for just pattern matching, the
C</l> regular expression modifier (see L<perlre/Character set
modifiers>) to instruct it to do so.
@@ -994,6 +1098,11 @@ is called.
=head2 Freely available locale definitions
+The Unicode CLDR project extracts the POSIX portion of many of its
+locales, available at
+
+ http://unicode.org/Public/cldr/latest/
+
There is a large collection of locale definitions at:
http://std.dkuug.dk/i18n/WG15-collection/locales/
@@ -1023,25 +1132,65 @@ into bankers, bikers, gamers, and so on.
=head1 Unicode and UTF-8
-The support of Unicode is new starting from Perl version 5.6, and more fully
-implemented in version 5.8 and later. See L<perluniintro>. Perl tries to
-work with both Unicode and locales--but of course, there are problems.
-
-Perl does not handle multi-byte locales, such as have been used for various
-Asian languages, such as Big5 or Shift JIS. However, the increasingly common
-multi-byte UTF-8 locales, if properly implemented, tend to work
-reasonably well in Perl, simply because both they and Perl store
-characters that take up multiple bytes the same way.
+The support of Unicode is new starting from Perl version v5.6, and more fully
+implemented in version v5.8 and later. See L<perluniintro>. It is
+strongly recommended that when combining Unicode and locale (starting in
+v5.16), you use
+
+ use locale ':not_characters';
+
+When this form of the pragma is used, only the non-character portions of
+locales are used by Perl, for example C<LC_NUMERIC>. Perl assumes that
+you have translated all the characters it is to operate on into Unicode
+(actually the platform's native character set (ASCII or EBCDIC) plus
+Unicode). For data in files, this can conveniently be done by also
+specifying
+
+ use open ':locale';
+
+This pragma arranges for all inputs from files to be translated into
+Unicode from the current locale as specified in the environment (see
+L</ENVIRONMENT>), and all outputs to files to be translated back
+into the locale. (See L<open>). On a per-filehandle basis, you can
+instead use the L<PerlIO::locale> module, or the L<Encode::Locale>
+module, both available from CPAN. The latter module also has methods to
+ease the handling of C<ARGV> and environment variables, and can be used
+on individual strings. Also, if you know that all your locales will be
+UTF-8, as many are these days, you can use the L<B<-C>|perlrun/-C>
+command line switch.
+
+This form of the pragma allows essentially seamless handling of locales
+with Unicode. The collation order will be Unicode's. It is strongly
+recommended that when you need to order and sort strings that you use
+the standard module L<Unicode::Collate> which gives much better results
+in many instances than you can get with the old-style locale handling.
+
+For pre-v5.16 Perls, or if you use the locale pragma without the
+C<:not_characters> parameter, Perl tries to work with both Unicode and
+locales--but there are problems.
+
+Perl does not handle multi-byte locales in this case, such as have been
+used for various
+Asian languages, such as Big5 or Shift JIS. However, the increasingly
+common multi-byte UTF-8 locales, if properly implemented, may work
+reasonably well (depending on your C library implementation) in this
+form of the locale pragma, simply because both
+they and Perl store characters that take up multiple bytes the same way.
+However, some, if not most, C library implementations may not process
+the characters in the upper half of the Latin-1 range (128 - 255)
+properly under LC_CTYPE. To see if a character is a particular type
+under a locale, Perl uses the functions like C<isalnum()>. Your C
+library may not work for UTF-8 locales with those functions, instead
+only working under the newer wide library functions like C<iswalnum()>.
Perl generally takes the tack to use locale rules on code points that can fit
-in a single byte, and Unicode rules for those that can't (though this wasn't
-uniformly applied prior to Perl 5.14). This prevents many problems in locales
-that aren't UTF-8. Suppose the locale is ISO8859-7, Greek. The character at
-0xD7 there is a capital Chi. But in the ISO8859-1 locale, Latin1, it is a
-multiplication sign. The POSIX regular expression character class
-C<[[:alpha:]]> will magically match 0xD7 in the Greek locale but not in the
-Latin one, even if the string is encoded in UTF-8, which would normally imply
-Unicode semantics. (The "U" in UTF-8 stands for Unicode.)
+in a single byte, and Unicode rules for those that can't (though this
+isn't uniformly applied, see the note at the end of this section). This
+prevents many problems in locales that aren't UTF-8. Suppose the locale
+is ISO8859-7, Greek. The character at 0xD7 there is a capital Chi. But
+in the ISO8859-1 locale, Latin1, it is a multiplication sign. The POSIX
+regular expression character class C<[[:alpha:]]> will magically match
+0xD7 in the Greek locale but not in the Latin one.
However, there are places where this breaks down. Certain constructs are
for Unicode only, such as C<\p{Alpha}>. They assume that 0xD7 always has its
@@ -1049,11 +1198,20 @@ Unicode meaning (or the equivalent on EBCDIC platforms). Since Latin1 is a
subset of Unicode and 0xD7 is the multiplication sign in both Latin1 and
Unicode, C<\p{Alpha}> will never match it, regardless of locale. A similar
issue occurs with C<\N{...}>. It is therefore a bad idea to use C<\p{}> or
-C<\N{}> under C<use locale>--I<unless> you can guarantee that the locale will
-be a ISO8859-1 or UTF-8 one. Use POSIX character classes instead.
-
-
-The same problem ensues if you enable automatic UTF-8-ification of your
+C<\N{}> under plain C<use locale>--I<unless> you can guarantee that the
+locale will be a ISO8859-1. Use POSIX character classes instead.
+
+Another problem with this approach is that operations that cross the
+single byte/multiple byte boundary are not well-defined, and so are
+disallowed. (This boundary is between the codepoints at 255/256.).
+For example, lower casing LATIN CAPITAL LETTER Y WITH DIAERESIS (U+0178)
+should return LATIN SMALL LETTER Y WITH DIAERESIS (U+00FF). But in the
+Greek locale, for example, there is no character at 0xFF, and Perl
+has no way of knowing what the character at 0xFF is really supposed to
+represent. Thus it disallows the operation. In this mode, the
+lowercase of U+0178 is itself.
+
+The same problems ensue if you enable automatic UTF-8-ification of your
standard file handles, default C<open()> layer, and C<@ARGV> on non-ISO8859-1,
non-UTF-8 locales (by using either the B<-C> command line switch or the
C<PERL_UNICODE> environment variable; see L<perlrun>).
@@ -1061,19 +1219,37 @@ Things are read in as UTF-8, which would normally imply a Unicode
interpretation, but the presence of a locale causes them to be interpreted
in that locale instead. For example, a 0xD7 code point in the Unicode
input, which should mean the multiplication sign, won't be interpreted by
-Perl that way under the Greek locale. Again, this is not a problem
+Perl that way under the Greek locale. This is not a problem
I<provided> you make certain that all locales will always and only be either
-an ISO8859-1 or a UTF-8 locale.
+an ISO8859-1, or, if you don't have a deficient C library, a UTF-8 locale.
Vendor locales are notoriously buggy, and it is difficult for Perl to test
its locale-handling code because this interacts with code that Perl has no
control over; therefore the locale-handling code in Perl may be buggy as
-well. But if you I<do> have locales that work, using them may be
-worthwhile for certain specific purposes, as long as you keep in mind the
-gotchas already mentioned. For example, collation runs faster under
-locales than under L<Unicode::Collate> (albeit with less flexibility), and
-you gain access to such things as the local currency symbol and the names
-of the months and days of the week.
+well. (However, the Unicode-supplied locales should be better, and
+there is a feed back mechanism to correct any problems. See
+L</Freely available locale definitions>.)
+
+If you have Perl v5.16, the problems mentioned above go away if you use
+the C<:not_characters> parameter to the locale pragma (except for vendor
+bugs in the non-character portions). If you don't have v5.16, and you
+I<do> have locales that work, using them may be worthwhile for certain
+specific purposes, as long as you keep in mind the gotchas already
+mentioned. For example, if the collation for your locales works, it
+runs faster under locales than under L<Unicode::Collate>; and you gain
+access to such things as the local currency symbol and the names of the
+months and days of the week. (But to hammer home the point, in v5.16,
+you get this access without the downsides of locales by using the
+C<:not_characters> form of the pragma.)
+
+Note: The policy of using locale rules for code points that can fit in a
+byte, and Unicode rules for those that can't is not uniformly applied.
+Pre-v5.12, it was somewhat haphazard; in v5.12 it was applied fairly
+consistently to regular expression matching except for bracketed
+character classes; in v5.14 it was extended to all regex matches; and in
+v5.16 to the casing operations such as C<"\L"> and C<uc()>. For
+collation, in all releases, the system's C<strxfrm()> function is called,
+and whatever it does is what you get.
=head1 BUGS
diff --git a/Master/tlpkg/tlperl/lib/pods/perllol.pod b/Master/tlpkg/tlperl/lib/pods/perllol.pod
index 8c6c0563f89..b35a0febb31 100644
--- a/Master/tlpkg/tlperl/lib/pods/perllol.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perllol.pod
@@ -174,7 +174,7 @@ Prior to Perl 5.14, this wouldn't even compile:
push $AoA[0], "wilma", "betty"; # implicit deref
-How come? Because once upon a time, the argument to push() had to be be a
+How come? Because once upon a time, the argument to push() had to be a
real array, not just a reference to one. That's no longer true. In fact,
the line marked "implicit deref" above works just fine--in this
instance--to do what the one that says explicit deref did.
diff --git a/Master/tlpkg/tlperl/lib/pods/perlmacos.pod b/Master/tlpkg/tlperl/lib/pods/perlmacos.pod
index ba7d78a2784..3482800691b 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlmacos.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlmacos.pod
@@ -4,7 +4,7 @@ designed to be readable as is.
=head1 NAME
-README.macos - Perl under Mac OS (Classic)
+perlmacos - Perl under Mac OS (Classic)
=head1 SYNOPSIS
diff --git a/Master/tlpkg/tlperl/lib/pods/perlmacosx.pod b/Master/tlpkg/tlperl/lib/pods/perlmacosx.pod
index 2ba5b1becdb..0501b1ff649 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlmacosx.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlmacosx.pod
@@ -4,14 +4,14 @@ designed to be readable as is.
=head1 NAME
-README.macosx - Perl under Mac OS X
+perlmacosx - Perl under Mac OS X
=head1 SYNOPSIS
This document briefly describes Perl under Mac OS X.
- curl http://www.cpan.org/src/perl-5.12.3.tar.gz > perl-5.12.3.tar.gz
- tar -xzf perl-5.12.3.tar.gz
+ curl http://www.cpan.org/src/perl-5.12.3.tar.gz > perl-5.12.3.tar.gz
+ tar -xzf perl-5.12.3.tar.gz
cd perl-5.12.3
./Configure -des -Dprefix=/usr/local/
make
@@ -21,11 +21,11 @@ This document briefly describes Perl under Mac OS X.
=head1 DESCRIPTION
The latest Perl release (5.12.3 as of this writing) builds without changes
-under all versions of Mac OS X from 10.3 "Panther" onwards.
+under all versions of Mac OS X from 10.3 "Panther" onwards.
In order to build your own version of Perl you will need 'make'
this is part of the Apples developer tools (you only need the 'unix tools'),
-usually supplied with Mac OS install DVDs. You do not need the latest
+usually supplied with Mac OS install DVDs. You do not need the latest
version of Xcode (which is now charged for) in order to install make.
Earlier Mac OS X releases (10.2 "Jaguar" and older) did not include a
@@ -136,7 +136,7 @@ need to go to a great deal of effort to obtain the information needed
for pre-binding.
You can override the default and build a shared libperl if you wish
-(S<Configure ... -Duseshrlib>), but the load time on pre-10.4 OS
+(S<Configure ... -Duseshrplib>), but the load time on pre-10.4 OS
releases will be greater than either the static library, or Apple's
pre-bound dynamic library.
@@ -190,7 +190,7 @@ but remember that there's a startup cost to pay in that case (see above
Starting with Tiger (Mac OS X 10.4), Apple shipped broken locale files for
the eu_ES locale (Basque-Spain). In previous releases of Perl, this resulted in
-failures in the C<lib/locale> test. These failures have been suppressed
+failures in the F<lib/locale> test. These failures have been suppressed
in the current release of Perl by making the test ignore the broken locale.
If you need to use the eu_ES locale, you should contact Apple support.
@@ -235,7 +235,7 @@ You can find them for example by
After this you can either copy Perl from your operating system media
(you will need at least the /System/Library/Perl and /usr/bin/perl),
or rebuild Perl from the source code with C<Configure -Dprefix=/usr
--Dusershrplib> NOTE: the C<-Dprefix=/usr> to replace the system Perl
+-Duseshrplib> NOTE: the C<-Dprefix=/usr> to replace the system Perl
works much better with Perl 5.8.1 and later, in Perl 5.8.0 the
settings were not quite right.
diff --git a/Master/tlpkg/tlperl/lib/pods/perlmod.pod b/Master/tlpkg/tlperl/lib/pods/perlmod.pod
index 5266f199df0..33f098d0228 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlmod.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlmod.pod
@@ -102,6 +102,10 @@ You can use this to print out all the variables in a package, for
instance. The standard but antiquated F<dumpvar.pl> library and
the CPAN module Devel::Symdump make use of this.
+The results of creating new symbol table entries directly or modifying any
+entries that are not already typeglobs are undefined and subject to change
+between releases of perl.
+
Assignment to a typeglob performs an aliasing operation, i.e.,
*dick = *richard;
@@ -377,7 +381,7 @@ package may also derive some of its methods from another class (package)
by listing the other package name(s) in its global @ISA array (which
must be a package global, not a lexical).
-For more on this, see L<perltoot> and L<perlobj>.
+For more on this, see L<perlootut> and L<perlobj>.
=head2 Perl Modules
X<module>
@@ -400,65 +404,50 @@ create a file called F<Some/Module.pm> and start with this template:
use warnings;
BEGIN {
- use Exporter ();
- our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
+ require Exporter;
# set the version for version checking
- $VERSION = 1.00;
- # if using RCS/CVS, this may be preferred
- $VERSION = sprintf "%d.%03d", q$Revision: 1.1 $ =~ /(\d+)/g;
+ our $VERSION = 1.00;
+
+ # Inherit from Exporter to export functions and variables
+ our @ISA = qw(Exporter);
- @ISA = qw(Exporter);
- @EXPORT = qw(&func1 &func2 &func4);
- %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ],
+ # Functions and variables which are exported by default
+ our @EXPORT = qw(func1 func2);
- # your exported package globals go here,
- # as well as any optionally exported functions
- @EXPORT_OK = qw($Var1 %Hashit &func3);
+ # Functions and variables which can be optionally exported
+ our @EXPORT_OK = qw($Var1 %Hashit func3);
}
- our @EXPORT_OK;
# exported package globals go here
- our $Var1;
- our %Hashit;
+ our $Var1 = '';
+ our %Hashit = ();
# non-exported package globals go here
- our @more;
- our $stuff;
-
- # initialize package globals, first exported ones
- $Var1 = '';
- %Hashit = ();
+ # (they are still accessible as $Some::Module::stuff)
+ our @more = ();
+ our $stuff = '';
- # then the others (which are still accessible as $Some::Module::stuff)
- $stuff = '';
- @more = ();
-
- # all file-scoped lexicals must be created before
- # the functions below that use them.
-
- # file-private lexicals go here
+ # file-private lexicals go here, before any functions which use them
my $priv_var = '';
my %secret_hash = ();
# here's a file-private function as a closure,
- # callable as &$priv_func; it cannot be prototyped.
+ # callable as $priv_func->();
my $priv_func = sub {
- # stuff goes here.
+ ...
};
# make all your functions, whether exported or not;
# remember to put something interesting in the {} stubs
- sub func1 {} # no prototype
- sub func2() {} # proto'd void
- sub func3($$) {} # proto'd to 2 scalars
-
- # this one isn't exported, but could be called!
- sub func4(\%) {} # proto'd to 1 hash ref
+ sub func1 { ... }
+ sub func2 { ... }
- END { } # module clean-up code here (global destructor)
+ # this one isn't exported, but could be called directly
+ # as Some::Module::func3()
+ sub func3 { ... }
- ## YOUR CODE GOES HERE
+ END { ... } # module clean-up code here (global destructor)
1; # don't forget to return a true value from the file
@@ -476,11 +465,11 @@ or
This is exactly equivalent to
- BEGIN { require Module; import Module; }
+ BEGIN { require 'Module.pm'; 'Module'->import; }
or
- BEGIN { require Module; import Module LIST; }
+ BEGIN { require 'Module.pm'; 'Module'->import( LIST ); }
As a special case
@@ -488,7 +477,7 @@ As a special case
is exactly equivalent to
- BEGIN { require Module; }
+ BEGIN { require 'Module.pm'; }
All Perl module files have the extension F<.pm>. The C<use> operator
assumes this so you don't have to spell out "F<Module.pm>" in quotes.
@@ -571,7 +560,7 @@ like for example handle the cloning of non-Perl data, if necessary.
C<CLONE> will be called once as a class method for every package that has it
defined (or inherits it). It will be called in the context of the new thread,
so all modifications are made in the new area. Currently CLONE is called with
-no parameters other than the invocand package name, but code should not assume
+no parameters other than the invocant package name, but code should not assume
that this will remain unchanged, as it is likely that in future extra parameters
will be passed in to give more information about the state of cloning.
@@ -593,7 +582,7 @@ to make use of the objects, then a more sophisticated approach is
needed.
Like C<CLONE>, C<CLONE_SKIP> is currently called with no parameters other
-than the invocand package name, although that may change. Similarly, to
+than the invocant package name, although that may change. Similarly, to
allow for future expansion, the return value should be a single C<0> or
C<1> value.
@@ -602,7 +591,7 @@ C<1> value.
See L<perlmodlib> for general style issues related to building Perl
modules and classes, as well as descriptions of the standard library
and CPAN, L<Exporter> for how Perl's standard import/export mechanism
-works, L<perltoot> and L<perltooc> for an in-depth tutorial on
+works, L<perlootut> and L<perlobj> for in-depth information on
creating classes, L<perlobj> for a hard-core reference document on
objects, L<perlsub> for an explanation of functions and scoping,
and L<perlxstut> and L<perlguts> for more information on writing
diff --git a/Master/tlpkg/tlperl/lib/pods/perlmodinstall.pod b/Master/tlpkg/tlperl/lib/pods/perlmodinstall.pod
index a7b74be9df4..f4694cc9a76 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlmodinstall.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlmodinstall.pod
@@ -436,19 +436,4 @@ First version July 22, 1998; last revised November 21, 2001.
Copyright (C) 1998, 2002, 2003 Jon Orwant. All Rights Reserved.
-Permission is granted to make and distribute verbatim copies of this
-documentation provided the copyright notice and this permission notice are
-preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-documentation under the conditions for verbatim copying, provided also
-that they are marked clearly as modified versions, that the authors'
-names and title are unchanged (though subtitles and additional
-authors' names may be added), and that the entire resulting derived
-work is distributed under the terms of a permission notice identical
-to this one.
-
-Permission is granted to copy and distribute translations of this
-documentation into another language, under the above conditions for
-modified versions.
-
+This document may be distributed under the same terms as Perl itself.
diff --git a/Master/tlpkg/tlperl/lib/pods/perlmodlib.pod b/Master/tlpkg/tlperl/lib/pods/perlmodlib.pod
index c7148c0550d..ce94dc46060 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlmodlib.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlmodlib.pod
@@ -47,6 +47,10 @@ The following pragmas are defined (and have their own documentation).
=over 12
+=item arybase
+
+Set indexing base via $[
+
=item attributes
Get/set subroutine or variable attributes
@@ -153,7 +157,7 @@ Manipulate @INC at compile time
=item locale
-Use and avoid POSIX locales for built-in operations
+Use or avoid POSIX locales for built-in operations
=item mro
@@ -179,6 +183,78 @@ Lexically control overloading
Establish an ISA relationship with base classes at compile time
+=item perldoc
+
+Look up Perl documentation in Pod format.
+
+=item perlfaq
+
+Frequently asked questions about Perl
+
+=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
+
+Web, Email and Networking
+
+=item perlfunc
+
+Perl builtin functions
+
+=item perlglossary
+
+Perl Glossary
+
+=item perlpodspeccopy
+
+Plain Old Documentation: format specification and notes
+
+=item perlvarcopy
+
+Perl predefined variables
+
+=item perlxs
+
+XS language reference manual
+
+=item perlxstut
+
+Tutorial for writing XSUBs
+
+=item perlxstypemap
+
+Perl XS C/Perl type mapping
+
=item re
Alter regular expression behaviour
@@ -231,6 +307,7 @@ Control optional warnings
Warnings import function
+
=back
=head2 Standard Modules
@@ -333,6 +410,10 @@ Generates cross reference reports for Perl programs
Benchmark running times of Perl code
+=item C<Socket>
+
+Networking constants and support functions
+
=item CGI
Handle Common Gateway Interface requests and responses
@@ -371,7 +452,7 @@ Internal utilities used by CGI module
=item CORE
-Pseudo-namespace for Perl's core routines
+Namespace for Perl's core routines
=item CPAN
@@ -413,6 +494,10 @@ History of CPAN Meta Spec changes
A set of distribution prerequisites by phase and type
+=item CPAN::Meta::Requirements
+
+A set of version requirements for a CPAN dist
+
=item CPAN::Meta::Spec
Specification for CPAN distribution metadata
@@ -437,6 +522,30 @@ Utility functions to compare CPAN versions
API & CLI access to the CPAN mirrors
+=item CPANPLUS::Backend
+
+Programmer's interface to CPANPLUS
+
+=item CPANPLUS::Backend::RV
+
+Return value objects
+
+=item CPANPLUS::Config
+
+Configuration defaults and heuristics for CPANPLUS
+
+=item CPANPLUS::Configure
+
+Configuration for CPANPLUS
+
+=item CPANPLUS::Dist
+
+Base class for plugins
+
+=item CPANPLUS::Dist::Autobundle
+
+Distribution class for installation snapshots
+
=item CPANPLUS::Dist::Base
Base class for custom distribution classes
@@ -449,10 +558,50 @@ CPANPLUS plugin to install packages that use Build.PL
Constants for CPANPLUS::Dist::Build
+=item CPANPLUS::Dist::MM
+
+Distribution class for MakeMaker related modules
+
=item CPANPLUS::Dist::Sample
Sample code to create your own Dist::* plugin
+=item CPANPLUS::Error
+
+Error handling for CPANPLUS
+
+=item CPANPLUS::FAQ
+
+CPANPLUS Frequently Asked Questions
+
+=item CPANPLUS::Hacking
+
+Developing CPANPLUS
+
+=item CPANPLUS::Internals
+
+CPANPLUS internals
+
+=item CPANPLUS::Internals::Extract
+
+Internals for archive extraction
+
+=item CPANPLUS::Internals::Fetch
+
+Internals for fetching files
+
+=item CPANPLUS::Internals::Report
+
+Internals for sending test reports
+
+=item CPANPLUS::Internals::Search
+
+Internals for searching for modules
+
+=item CPANPLUS::Internals::Source
+
+Internals for updating source files
+
=item CPANPLUS::Internals::Source::Memory
In memory implementation
@@ -461,14 +610,62 @@ In memory implementation
SQLite implementation
+=item CPANPLUS::Internals::Utils
+
+Convenience functions for CPANPLUS
+
+=item CPANPLUS::Module
+
+CPAN module objects for CPANPLUS
+
+=item CPANPLUS::Module::Author
+
+CPAN author object for CPANPLUS
+
+=item CPANPLUS::Module::Author::Fake
+
+Dummy author object for CPANPLUS
+
+=item CPANPLUS::Module::Checksums
+
+Checking the checksum of a distribution
+
+=item CPANPLUS::Module::Fake
+
+Fake module object for internal use
+
+=item CPANPLUS::Selfupdate
+
+Self-updating for CPANPLUS
+
+=item CPANPLUS::Shell
+
+Base class for CPANPLUS shells
+
=item CPANPLUS::Shell::Classic
CPAN.pm emulation for CPANPLUS
+=item CPANPLUS::Shell::Default
+
+The default CPANPLUS shell
+
+=item CPANPLUS::Shell::Default::Plugins::CustomSource
+
+Add custom sources to CPANPLUS
+
=item CPANPLUS::Shell::Default::Plugins::HOWTO
Documentation on how to write your own plugins
+=item CPANPLUS::Shell::Default::Plugins::Remote
+
+Connect to a remote CPANPLUS
+
+=item CPANPLUS::Shell::Default::Plugins::Source
+
+Read in CPANPLUS commands
+
=item Carp
Alternative warn and die for modules
@@ -481,18 +678,10 @@ Declare struct-like datatypes as Perl classes
Low-Level Interface to bzip2 compression library
-=item Compress::Raw::Bzip2::FAQ
-
-Frequently Asked Questions about Compress::Raw::Bzip2
-
=item Compress::Raw::Zlib
Low-Level Interface to zlib compression library
-=item Compress::Raw::Zlib::FAQ
-
-Frequently Asked Questions about Compress::Raw::Zlib
-
=item Compress::Zlib
Interface to zlib compression library
@@ -541,10 +730,6 @@ Perl5 access to Berkeley DB version 1.x
Stringified perl data structures, suitable for both printing and C<eval>
-=item Devel::DProf
-
-A B<DEPRECATED> Perl code profiler
-
=item Devel::InnerPackage
Find all the inner packages of a package
@@ -595,7 +780,7 @@ Dynamically load C libraries into Perl code
=item Encode
-Character encodings
+Character encodings in Perl
=item Encode::Alias
@@ -849,10 +1034,6 @@ Frequently Asked Questions About MakeMaker
Writing a module with MakeMaker
-=item ExtUtils::MakeMaker::YAML
-
-Clone of YAML::Tiny
-
=item ExtUtils::Manifest
Utilities to write and check a MANIFEST file
@@ -873,6 +1054,34 @@ Manage .packlist files
Converts Perl XS code into C code
+=item ExtUtils::ParseXS::Constants
+
+Initialization values for some globals
+
+=item ExtUtils::ParseXS::Utilities
+
+Subroutines used with ExtUtils::ParseXS
+
+=item ExtUtils::Typemaps
+
+Read/Write/Modify Perl/XS typemap files
+
+=item ExtUtils::Typemaps::Cmd
+
+Quick commands for handling typemaps
+
+=item ExtUtils::Typemaps::InputMap
+
+Entry in the INPUT section of a typemap
+
+=item ExtUtils::Typemaps::OutputMap
+
+Entry in the OUTPUT section of a typemap
+
+=item ExtUtils::Typemaps::Type
+
+Entry in the TYPEMAP section of a typemap
+
=item ExtUtils::XSSymSet
Keep sets of symbol names palatable to the VMS linker
@@ -1193,29 +1402,101 @@ Indicate if List::Util was compiled with a C compiler
A distribution of modules to handle locale codes
+=item Locale::Codes::API
+
+A description of the callable function in each module
+
=item Locale::Codes::Changes
-Details important changes after 2.07
+Details changes to Locale::Codes
+
+=item Locale::Codes::Constants
+
+Constants for Locale codes
=item Locale::Codes::Country
-Country codes for the Locale::Country module
+Standard codes for country identification
+
+=item Locale::Codes::Country_Codes
+
+Country codes for the Locale::Codes::Country module
+
+=item Locale::Codes::Country_Retired
+
+Retired country codes for the Locale::Codes::Country module
=item Locale::Codes::Currency
-Currency codes for the Locale::Currency module
+Standard codes for currency identification
+
+=item Locale::Codes::Currency_Codes
+
+Currency codes for the Locale::Codes::Currency module
+
+=item Locale::Codes::Currency_Retired
+
+Retired currency codes for the Locale::Codes::Currency module
+
+=item Locale::Codes::LangExt
+
+Standard codes for language extension identification
+
+=item Locale::Codes::LangExt_Codes
+
+Langext codes for the Locale::Codes::LangExt module
+
+=item Locale::Codes::LangExt_Retired
+
+Retired langext codes for the Locale::Codes::LangExt module
+
+=item Locale::Codes::LangFam
+
+Standard codes for language extension identification
+
+=item Locale::Codes::LangFam_Codes
+
+Langfam codes for the Locale::Codes::LangFam module
+
+=item Locale::Codes::LangFam_Retired
+
+Retired langfam codes for the Locale::Codes::LangFam module
+
+=item Locale::Codes::LangVar
+
+Standard codes for language variation identification
+
+=item Locale::Codes::LangVar_Codes
+
+Langvar codes for the Locale::Codes::LangVar module
+
+=item Locale::Codes::LangVar_Retired
+
+Retired langvar codes for the Locale::Codes::LangVar module
=item Locale::Codes::Language
-Language codes for the Locale::Language module
+Standard codes for language identification
+
+=item Locale::Codes::Language_Codes
+
+Language codes for the Locale::Codes::Language module
+
+=item Locale::Codes::Language_Retired
+
+Retired language codes for the Locale::Codes::Language module
=item Locale::Codes::Script
-Script codes for the Locale::Script module
+Standard codes for script identification
-=item Locale::Constants
+=item Locale::Codes::Script_Codes
-Constants for Locale codes
+Script codes for the Locale::Codes::Script module
+
+=item Locale::Codes::Script_Retired
+
+Retired script codes for the Locale::Codes::Script module
=item Locale::Country
@@ -1597,6 +1878,10 @@ On demand loader for PerlIO layers and root of PerlIO::* name space
Encoding layer
+=item PerlIO::mmap
+
+Memory mapped IO
+
=item PerlIO::scalar
In-memory IO, scalar IO
@@ -1665,6 +1950,10 @@ Base for Pod::Perldoc formatters
Customized option parser for Pod::Perldoc
+=item Pod::Perldoc::ToANSI
+
+Render Pod with ANSI color escapes
+
=item Pod::Perldoc::ToChecker
Let Perldoc check Pod for errors
@@ -1685,6 +1974,10 @@ Let Perldoc render Pod as ... Pod!
Let Perldoc render Pod as RTF
+=item Pod::Perldoc::ToTerm
+
+Render Pod with terminal escapes
+
=item Pod::Perldoc::ToText
Let Perldoc render Pod as plaintext
@@ -1823,7 +2116,7 @@ A selection of general-utility scalar subroutines
=item Search::Dict
-Search for key in dictionary file
+Look - search for key in dictionary file
=item SelectSaver
@@ -1833,14 +2126,6 @@ Save and restore selected file handle
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
@@ -2053,6 +2338,10 @@ Perl interface to various C<readline> packages.
Term::ReadLine UI made easy
+=item Term::UI::History
+
+History function
+
=item Test
Provides a simple framework for writing test scripts
@@ -2091,7 +2380,7 @@ A tutorial about writing really basic tests
=item Text::Abbrev
-Create an abbreviation table from a list
+Abbrev - create an abbreviation table from a list
=item Text::Balanced
@@ -2285,6 +2574,7 @@ Dynamically load C libraries into Perl code
Perl extension for Version Objects
+
=back
To find out I<all> modules installed on your system, including
@@ -2442,17 +2732,20 @@ European and the South American sites.
Registered CPAN sites
+=for maintainers
+Generated by Porting/make_modlib_cpan.pl
+
=head2 Africa
=over 4
=item South Africa
- http://cpan.mirror.ac.za/
- ftp://cpan.mirror.ac.za/
- http://mirror.is.co.za/pub/cpan/
- ftp://ftp.is.co.za/pub/cpan/
- ftp://ftp.saix.net/pub/CPAN/
+ http://cpan.mirror.ac.za/
+ ftp://cpan.mirror.ac.za/
+ http://mirror.is.co.za/pub/cpan/
+ ftp://ftp.is.co.za/pub/cpan/
+ ftp://ftp.saix.net/pub/CPAN/
=back
@@ -2460,97 +2753,92 @@ Registered CPAN sites
=over 4
+=item China
+
+ http://cpan.wenzk.com/
+
=item Hong Kong
- http://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/
- ftp://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/
- http://mirrors.geoexpat.com/cpan/
+ http://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/
+ ftp://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/
+ http://mirrors.geoexpat.com/cpan/
=item India
- http://perlmirror.indialinks.com/
+ http://perlmirror.indialinks.com/
=item Indonesia
- http://cpan.biz.net.id/
- http://komo.vlsm.org/CPAN/
- ftp://komo.vlsm.org/CPAN/
- http://cpan.pesat.net.id/
- http://mirror.unej.ac.id/cpan/
- ftp://mirror.unej.ac.id/cpan/
+ http://cpan.biz.net.id/
+ http://komo.vlsm.org/CPAN/
+ ftp://komo.vlsm.org/CPAN/
+ http://cpan.cermin.lipi.go.id/
+ ftp://cermin.lipi.go.id/pub/CPAN/
+ http://cpan.pesat.net.id/
=item Japan
- ftp://ftp.u-aizu.ac.jp/pub/CPAN
- ftp://ftp.kddilabs.jp/CPAN/
- http://ftp.nara.wide.ad.jp/pub/CPAN/
- ftp://ftp.nara.wide.ad.jp/pub/CPAN/
- http://ftp.jaist.ac.jp/pub/CPAN/
- ftp://ftp.jaist.ac.jp/pub/CPAN/
- ftp://ftp.dti.ad.jp/pub/lang/CPAN/
- ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
- http://ftp.riken.jp/lang/CPAN/
- ftp://ftp.riken.jp/lang/CPAN/
- http://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/
- ftp://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/
-
-=item Kazakhstan
-
- http://mirror.linuxiso.kz/CPAN/
+ ftp://ftp.u-aizu.ac.jp/pub/CPAN
+ ftp://ftp.kddilabs.jp/CPAN/
+ http://ftp.nara.wide.ad.jp/pub/CPAN/
+ ftp://ftp.nara.wide.ad.jp/pub/CPAN/
+ http://ftp.jaist.ac.jp/pub/CPAN/
+ ftp://ftp.jaist.ac.jp/pub/CPAN/
+ ftp://ftp.dti.ad.jp/pub/lang/CPAN/
+ ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
+ http://ftp.riken.jp/lang/CPAN/
+ ftp://ftp.riken.jp/lang/CPAN/
+ http://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/
+ ftp://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/
=item Republic of Korea
- http://ftp.kaist.ac.kr/pub/CPAN
- ftp://ftp.kaist.ac.kr/pub/CPAN
- http://cpan.mirror.cdnetworks.com/
- ftp://cpan.mirror.cdnetworks.com/CPAN/
- http://cpan.sarang.net/
- ftp://cpan.sarang.net/CPAN/
+ http://ftp.kaist.ac.kr/pub/CPAN
+ ftp://ftp.kaist.ac.kr/pub/CPAN
+ http://cpan.mirror.cdnetworks.com/
+ ftp://cpan.mirror.cdnetworks.com/CPAN/
+ http://cpan.sarang.net/
+ ftp://cpan.sarang.net/CPAN/
=item Russia
- http://cpan.tomsk.ru/
- ftp://cpan.tomsk.ru/
+ http://cpan.tomsk.ru/
+ ftp://cpan.tomsk.ru/
=item Singapore
- http://mirror.averse.net/pub/CPAN
- ftp://mirror.averse.net/pub/CPAN
- http://cpan.mirror.choon.net/
- http://cpan.oss.eznetsols.org
- ftp://ftp.oss.eznetsols.org/cpan
+ http://mirror.averse.net/pub/CPAN
+ ftp://mirror.averse.net/pub/CPAN
+ http://cpan.mirror.choon.net/
+ http://cpan.oss.eznetsols.org
+ ftp://ftp.oss.eznetsols.org/cpan
=item Taiwan
- http://ftp.cse.yzu.edu.tw/pub/CPAN/
- ftp://ftp.cse.yzu.edu.tw/pub/CPAN/
- http://cpan.nctu.edu.tw/
- ftp://cpan.nctu.edu.tw/
- ftp://ftp.ncu.edu.tw/CPAN/
- http://cpan.cdpa.nsysu.edu.tw/
- ftp://cpan.cdpa.nsysu.edu.tw/Unix/Lang/CPAN/
- http://cpan.stu.edu.tw
- ftp://ftp.stu.edu.tw/CPAN
- http://ftp.stu.edu.tw/CPAN
- ftp://ftp.stu.edu.tw/pub/CPAN
- http://cpan.cs.pu.edu.tw/
- ftp://cpan.cs.pu.edu.tw/pub/CPAN
+ http://ftp.cse.yzu.edu.tw/pub/CPAN/
+ ftp://ftp.cse.yzu.edu.tw/pub/CPAN/
+ http://cpan.nctu.edu.tw/
+ ftp://cpan.nctu.edu.tw/
+ ftp://ftp.ncu.edu.tw/CPAN/
+ http://cpan.cdpa.nsysu.edu.tw/
+ ftp://cpan.cdpa.nsysu.edu.tw/Unix/Lang/CPAN/
+ http://cpan.stu.edu.tw
+ ftp://ftp.stu.edu.tw/CPAN
+ http://ftp.stu.edu.tw/CPAN
+ ftp://ftp.stu.edu.tw/pub/CPAN
+ http://cpan.cs.pu.edu.tw/
+ ftp://cpan.cs.pu.edu.tw/pub/CPAN
=item Thailand
- http://mirrors.issp.co.th/cpan/
- ftp://mirrors.issp.co.th/cpan/
+ http://mirrors.issp.co.th/cpan/
+ ftp://mirrors.issp.co.th/cpan/
+ http://mirror.yourconnect.com/CPAN/
+ ftp://mirror.yourconnect.com/CPAN/
=item Turkey
- http://cpan.gazi.edu.tr/
- http://cpan.ulak.net.tr
- ftp://ftp.ulak.net.tr/pub/CPAN
-
-=item Viet Nam
-
- http://mirror-fpt-telecom.fpt.net/cpan/
- ftp://mirror-fpt-telecom.fpt.net/cpan/
+ http://cpan.gazi.edu.tr/
=back
@@ -2560,8 +2848,8 @@ Registered CPAN sites
=item Costa Rica
- http://mirrors.ucr.ac.cr/CPAN/
- ftp://mirrors.ucr.ac.cr/CPAN/
+ http://mirrors.ucr.ac.cr/CPAN/
+ ftp://mirrors.ucr.ac.cr/CPAN/
=back
@@ -2571,284 +2859,274 @@ Registered CPAN sites
=item Austria
- http://cpan.inode.at/
- ftp://cpan.inode.at
- http://gd.tuwien.ac.at/languages/perl/CPAN/
- ftp://gd.tuwien.ac.at/pub/CPAN/
+ http://cpan.inode.at/
+ ftp://cpan.inode.at
+ http://gd.tuwien.ac.at/languages/perl/CPAN/
+ ftp://gd.tuwien.ac.at/pub/CPAN/
=item Belgium
- http://ftp.belnet.be/mirror/ftp.cpan.org/
- ftp://ftp.belnet.be/mirror/ftp.cpan.org/
- http://ftp.easynet.be/pub/CPAN/
- http://cpan.weepee.org/
- http://cpan.fluoline.net/
+ http://ftp.belnet.be/mirror/ftp.cpan.org/
+ ftp://ftp.belnet.be/mirror/ftp.cpan.org/
+ http://ftp.easynet.be/pub/CPAN/
+ http://cpan.weepee.org/
=item Bosnia and Herzegovina
- http://cpan.blic.net/
+ http://cpan.blic.net/
=item Bulgaria
- http://cpan.cbox.biz/
- ftp://cpan.cbox.biz/cpan/
- http://cpan.digsys.bg/
- ftp://ftp.digsys.bg/pub/CPAN
+ http://cpan.cbox.biz/
+ ftp://cpan.cbox.biz/cpan/
+ http://cpan.digsys.bg/
+ ftp://ftp.digsys.bg/pub/CPAN
=item Croatia
- http://ftp.carnet.hr/pub/CPAN/
- ftp://ftp.carnet.hr/pub/CPAN/
+ http://ftp.carnet.hr/pub/CPAN/
+ ftp://ftp.carnet.hr/pub/CPAN/
=item Czech Republic
- ftp://ftp.fi.muni.cz/pub/CPAN/
- http://archive.cpan.cz/
+ ftp://ftp.fi.muni.cz/pub/CPAN/
+ http://archive.cpan.cz/
=item Denmark
- http://mirrors.dotsrc.org/cpan
- ftp://mirrors.dotsrc.org/cpan/
- http://www.cpan.dk/
- http://mirror.uni-c.dk/pub/CPAN/
+ http://mirrors.dotsrc.org/cpan
+ ftp://mirrors.dotsrc.org/cpan/
+ http://www.cpan.dk/
+ http://mirror.uni-c.dk/pub/CPAN/
=item Finland
- ftp://ftp.funet.fi/pub/languages/perl/CPAN/
- http://mirror.eunet.fi/CPAN
+ ftp://ftp.funet.fi/pub/languages/perl/CPAN/
+ http://mirror.eunet.fi/CPAN
=item France
- http://cpan.enstimac.fr/
- ftp://ftp.inria.fr/pub/CPAN/
- http://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/cpan/
- ftp://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/cpan/
- ftp://ftp.lip6.fr/pub/perl/CPAN/
- http://mir2.ovh.net/ftp.cpan.org
- ftp://mir1.ovh.net/ftp.cpan.org
- http://cpan.miroir-francais.fr/
- ftp://miroir-francais.fr/pub/cpan/
- ftp://ftp.oleane.net/pub/CPAN/
- 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
- http://cpan.cict.fr/
- ftp://cpan.cict.fr/pub/CPAN/
+ http://cpan.enstimac.fr/
+ ftp://ftp.inria.fr/pub/CPAN/
+ http://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/cpan/
+ ftp://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/cpan/
+ ftp://ftp.lip6.fr/pub/perl/CPAN/
+ http://mir2.ovh.net/ftp.cpan.org
+ ftp://mir1.ovh.net/ftp.cpan.org
+ ftp://ftp.oleane.net/pub/CPAN/
+ 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
+ http://cpan.cict.fr/
+ ftp://cpan.cict.fr/pub/CPAN/
=item Germany
- ftp://ftp.fu-berlin.de/unix/languages/perl/
- http://mirrors.softliste.de/cpan/
- ftp://ftp.rub.de/pub/CPAN/
- http://www.planet-elektronik.de/CPAN/
- http://ftp.hosteurope.de/pub/CPAN/
- ftp://ftp.hosteurope.de/pub/CPAN/
- http://www.mirrorspace.org/cpan/
- http://mirror.netcologne.de/cpan/
- ftp://mirror.netcologne.de/cpan/
- ftp://ftp.freenet.de/pub/ftp.cpan.org/pub/CPAN/
- http://ftp-stud.hs-esslingen.de/pub/Mirrors/CPAN/
- ftp://ftp-stud.hs-esslingen.de/pub/Mirrors/CPAN/
- http://mirrors.zerg.biz/cpan/
- http://ftp.gwdg.de/pub/languages/perl/CPAN/
- ftp://ftp.gwdg.de/pub/languages/perl/CPAN/
- http://dl.ambiweb.de/mirrors/ftp.cpan.org/
- http://cpan.mirror.clusters.kg/
- http://cpan.mirror.iphh.net/
- ftp://cpan.mirror.iphh.net/pub/CPAN/
- http://cpan.mirroring.de/
- http://mirror.informatik.uni-mannheim.de/pub/mirrors/CPAN/
- ftp://mirror.informatik.uni-mannheim.de/pub/mirrors/CPAN/
- http://ftp.cw.net/pub/CPAN/
- ftp://ftp.cw.net/pub/CPAN/
- http://cpan.cpantesters.org/
- ftp://cpan.cpantesters.org/CPAN/
- http://cpan.mirrored.de/
- ftp://mirror.petamem.com/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/
+ ftp://ftp.fu-berlin.de/unix/languages/perl/
+ http://mirrors.softliste.de/cpan/
+ ftp://ftp.rub.de/pub/CPAN/
+ http://www.planet-elektronik.de/CPAN/
+ http://ftp.hosteurope.de/pub/CPAN/
+ ftp://ftp.hosteurope.de/pub/CPAN/
+ http://www.mirrorspace.org/cpan/
+ http://mirror.netcologne.de/cpan/
+ ftp://mirror.netcologne.de/cpan/
+ ftp://ftp.freenet.de/pub/ftp.cpan.org/pub/CPAN/
+ http://ftp-stud.hs-esslingen.de/pub/Mirrors/CPAN/
+ ftp://ftp-stud.hs-esslingen.de/pub/Mirrors/CPAN/
+ http://mirrors.zerg.biz/cpan/
+ http://ftp.gwdg.de/pub/languages/perl/CPAN/
+ ftp://ftp.gwdg.de/pub/languages/perl/CPAN/
+ http://dl.ambiweb.de/mirrors/ftp.cpan.org/
+ http://cpan.mirror.clusters.kg/
+ http://cpan.mirror.iphh.net/
+ ftp://cpan.mirror.iphh.net/pub/CPAN/
+ http://cpan.mirroring.de/
+ http://mirror.informatik.uni-mannheim.de/pub/mirrors/CPAN/
+ ftp://mirror.informatik.uni-mannheim.de/pub/mirrors/CPAN/
+ http://www.chemmedia.de/mirrors/CPAN/
+ http://ftp.cw.net/pub/CPAN/
+ ftp://ftp.cw.net/pub/CPAN/
+ http://cpan.cpantesters.org/
+ ftp://cpan.cpantesters.org/CPAN/
+ http://cpan.mirrored.de/
+ ftp://mirror.petamem.com/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.forthnet.gr/pub/languages/perl/CPAN
- ftp://ftp.ntua.gr/pub/lang/perl/
- http://cpan.cc.uoc.gr/
- ftp://ftp.cc.uoc.gr/mirrors/CPAN/
+ ftp://ftp.forthnet.gr/pub/languages/perl/CPAN
+ ftp://ftp.ntua.gr/pub/lang/perl/
+ http://cpan.cc.uoc.gr/
+ ftp://ftp.cc.uoc.gr/mirrors/CPAN/
=item Hungary
- http://cpan.mirrors.enexis.hu/
- ftp://cpan.mirrors.enexis.hu/mirrors/cpan/
- http://cpan.hu/
+ http://cpan.mirrors.enexis.hu/
+ ftp://cpan.mirrors.enexis.hu/mirrors/cpan/
+ http://cpan.hu/
=item Iceland
- http://ftp.rhnet.is/pub/CPAN/
- ftp://ftp.rhnet.is/pub/CPAN/
+ http://ftp.rhnet.is/pub/CPAN/
+ ftp://ftp.rhnet.is/pub/CPAN/
=item Ireland
- http://ftp.esat.net/pub/languages/perl/CPAN/
- ftp://ftp.esat.net/pub/languages/perl/CPAN/
- http://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN
- ftp://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN
+ http://ftp.esat.net/pub/languages/perl/CPAN/
+ ftp://ftp.esat.net/pub/languages/perl/CPAN/
+ http://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN
+ ftp://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN
=item Italy
- http://bo.mirror.garr.it/mirrors/CPAN/
- http://cpan.panu.it/
- ftp://ftp.panu.it/pub/mirrors/perl/CPAN/
- http://cpan.fastbull.org/
+ http://bo.mirror.garr.it/mirrors/CPAN/
+ http://cpan.panu.it/
+ ftp://ftp.panu.it/pub/mirrors/perl/CPAN/
=item Latvia
- http://kvin.lv/pub/CPAN/
+ http://kvin.lv/pub/CPAN/
=item Lithuania
- http://ftp.litnet.lt/pub/CPAN/
- ftp://ftp.litnet.lt/pub/CPAN/
+ http://ftp.litnet.lt/pub/CPAN/
+ ftp://ftp.litnet.lt/pub/CPAN/
=item Malta
- http://cpan.waldonet.net.mt/
+ http://cpan.waldonet.net.mt/
=item Netherlands
- ftp://ftp.quicknet.nl/pub/CPAN/
- http://mirror.hostfuss.com/CPAN/
- ftp://mirror.hostfuss.com/CPAN/
- http://mirrors3.kernel.org/cpan/
- ftp://mirrors3.kernel.org/pub/CPAN/
- http://cpan.osmirror.nl/
- ftp://ftp.osmirror.nl/pub/cpan/
- http://cpan.mirror.versatel.nl/
- ftp://ftp.mirror.versatel.nl/cpan/
- ftp://download.xs4all.nl/pub/mirror/CPAN/
- http://mirror.leaseweb.com/CPAN/
- ftp://mirror.leaseweb.com/CPAN/
- ftp://ftp.cpan.nl/pub/CPAN/
- http://archive.cs.uu.nl/mirror/CPAN/
- ftp://ftp.cs.uu.nl/mirror/CPAN/
- http://https://luxitude.net/cpan/
+ ftp://ftp.quicknet.nl/pub/CPAN/
+ http://mirror.hostfuss.com/CPAN/
+ ftp://mirror.hostfuss.com/CPAN/
+ http://mirrors3.kernel.org/cpan/
+ ftp://mirrors3.kernel.org/pub/CPAN/
+ http://cpan.mirror.versatel.nl/
+ ftp://ftp.mirror.versatel.nl/cpan/
+ ftp://download.xs4all.nl/pub/mirror/CPAN/
+ http://mirror.leaseweb.com/CPAN/
+ ftp://mirror.leaseweb.com/CPAN/
+ ftp://ftp.cpan.nl/pub/CPAN/
+ http://archive.cs.uu.nl/mirror/CPAN/
+ ftp://ftp.cs.uu.nl/mirror/CPAN/
+ http://luxitude.net/cpan/
=item Norway
- ftp://ftp.uninett.no/pub/languages/perl/CPAN
- ftp://ftp.uit.no/pub/languages/perl/cpan/
+ ftp://ftp.uninett.no/pub/languages/perl/CPAN
+ ftp://ftp.uit.no/pub/languages/perl/cpan/
=item Poland
- http://mirror.icis.pcz.pl/CPAN/
- ftp://mirror.icis.pcz.pl/CPAN/
- http://piotrkosoft.net/pub/mirrors/CPAN/
- ftp://ftp.piotrkosoft.net/pub/mirrors/CPAN/
- http://ftp.man.poznan.pl/pub/CPAN
- ftp://ftp.man.poznan.pl/pub/CPAN
- ftp://sunsite.icm.edu.pl/pub/CPAN/
- ftp://ftp.tpnet.pl/d4/CPAN/
+ http://piotrkosoft.net/pub/mirrors/CPAN/
+ ftp://ftp.piotrkosoft.net/pub/mirrors/CPAN/
+ http://ftp.man.poznan.pl/pub/CPAN
+ ftp://ftp.man.poznan.pl/pub/CPAN
+ ftp://ftp.ps.pl/pub/CPAN/
+ ftp://sunsite.icm.edu.pl/pub/CPAN/
+ ftp://ftp.tpnet.pl/d4/CPAN/
=item Portugal
- http://cpan.dei.uc.pt/
- ftp://ftp.dei.uc.pt/pub/CPAN
- ftp://ftp.ist.utl.pt/pub/CPAN/
- http://cpan.perl.pt/
- http://cpan.ip.pt/
- ftp://cpan.ip.pt/pub/cpan/
- http://mirrors.nfsi.pt/CPAN/
- ftp://mirrors.nfsi.pt/pub/CPAN/
- http://cpan.dcc.fc.up.pt/
+ http://cpan.dei.uc.pt/
+ ftp://ftp.dei.uc.pt/pub/CPAN
+ ftp://ftp.ist.utl.pt/pub/CPAN/
+ http://cpan.perl.pt/
+ http://cpan.ip.pt/
+ ftp://cpan.ip.pt/pub/cpan/
+ http://mirrors.nfsi.pt/CPAN/
+ ftp://mirrors.nfsi.pt/pub/CPAN/
+ http://cpan.dcc.fc.up.pt/
=item Romania
- http://ftp.astral.ro/pub/CPAN/
- ftp://ftp.astral.ro/pub/CPAN/
- ftp://ftp.lug.ro/CPAN
- http://mirrors.xservers.ro/CPAN/
- http://mirrors.hostingromania.ro/ftp.cpan.org/
- ftp://ftp.hostingromania.ro/mirrors/ftp.cpan.org/
- ftp://ftp.iasi.roedu.net/pub/mirrors/ftp.cpan.org/
- ftp://ftp.ambra.ro/pub/CPAN
+ http://ftp.astral.ro/pub/CPAN/
+ ftp://ftp.astral.ro/pub/CPAN/
+ ftp://ftp.lug.ro/CPAN
+ http://mirrors.xservers.ro/CPAN/
+ http://mirrors.hostingromania.ro/ftp.cpan.org/
+ ftp://ftp.hostingromania.ro/mirrors/ftp.cpan.org/
+ ftp://ftp.iasi.roedu.net/pub/mirrors/ftp.cpan.org/
=item Russia
- ftp://ftp.aha.ru/CPAN/
- http://cpan.rinet.ru/
- ftp://cpan.rinet.ru/pub/mirror/CPAN/
- ftp://ftp.SpringDaemons.com/pub/CPAN/
- http://cpan.nx1.ru/
- ftp://cpan.nx1.ru/
- http://mirror.rol.ru/CPAN/
- http://ftp.silvernet.ru/CPAN/
- http://ftp.spbu.ru/CPAN/
- ftp://ftp.spbu.ru/CPAN/
+ ftp://ftp.aha.ru/CPAN/
+ http://cpan.rinet.ru/
+ ftp://cpan.rinet.ru/pub/mirror/CPAN/
+ ftp://ftp.SpringDaemons.com/pub/CPAN/
+ http://mirror.rol.ru/CPAN/
+ http://ftp.silvernet.ru/CPAN/
+ http://ftp.spbu.ru/CPAN/
+ ftp://ftp.spbu.ru/CPAN/
=item Slovakia
- http://cpan.fyxm.net/
+ http://cpan.fyxm.net/
=item Slovenia
- http://www.klevze.si/cpan
+ http://www.klevze.si/cpan
=item Spain
- http://osl.ugr.es/CPAN/
- ftp://ftp.rediris.es/mirror/CPAN/
- http://ftp.gui.uva.es/sites/cpan.org/
- ftp://ftp.gui.uva.es/sites/cpan.org/
+ http://osl.ugr.es/CPAN/
+ ftp://ftp.rediris.es/mirror/CPAN/
+ http://ftp.gui.uva.es/sites/cpan.org/
+ ftp://ftp.gui.uva.es/sites/cpan.org/
=item Sweden
- http://mirrors4.kernel.org/cpan/
- ftp://mirrors4.kernel.org/pub/CPAN/
+ http://mirrors4.kernel.org/cpan/
+ ftp://mirrors4.kernel.org/pub/CPAN/
=item Switzerland
- http://cpan.mirror.solnet.ch/
- ftp://ftp.solnet.ch/mirror/CPAN/
- http://mirror.switch.ch/ftp/mirror/CPAN/
- ftp://mirror.switch.ch/mirror/CPAN/
+ http://cpan.mirror.solnet.ch/
+ ftp://ftp.solnet.ch/mirror/CPAN/
+ ftp://ftp.adwired.ch/CPAN/
+ http://mirror.switch.ch/ftp/mirror/CPAN/
+ ftp://mirror.switch.ch/mirror/CPAN/
=item Ukraine
- http://cpan.makeperl.org/
- ftp://cpan.makeperl.org/pub/CPAN
- http://cpan.org.ua/
- http://no-more.kiev.ua/CPAN/
- ftp://no-more.kiev.ua/pub/CPAN/
- http://cpan.gafol.net/
- ftp://ftp.gafol.net/pub/cpan/
+ http://cpan.makeperl.org/
+ ftp://cpan.makeperl.org/pub/CPAN
+ http://cpan.org.ua/
+ http://cpan.gafol.net/
+ ftp://ftp.gafol.net/pub/cpan/
=item United Kingdom
- http://www.mirrorservice.org/sites/ftp.funet.fi/pub/languages/perl/CPAN/
- ftp://ftp.mirrorservice.org/sites/ftp.funet.fi/pub/languages/perl/CPAN/
- http://mirror.tje.me.uk/pub/mirrors/ftp.cpan.org/
- ftp://mirror.tje.me.uk/pub/mirrors/ftp.cpan.org/
- http://www.mirror.8086.net/sites/CPAN/
- ftp://ftp.mirror.8086.net/sites/CPAN/
- http://cpan.mirror.anlx.net/
- ftp://ftp.mirror.anlx.net/CPAN/
- http://mirror.bytemark.co.uk/CPAN/
- ftp://mirror.bytemark.co.uk/CPAN/
- http://cpan.etla.org/
- ftp://cpan.etla.org/pub/CPAN
- ftp://ftp.demon.co.uk/pub/CPAN/
- http://mirror.sov.uk.goscomb.net/CPAN/
- ftp://mirror.sov.uk.goscomb.net/pub/CPAN/
- http://ftp.plig.net/pub/CPAN/
- ftp://ftp.plig.net/pub/CPAN/
- http://ftp.ticklers.org/pub/CPAN/
- ftp://ftp.ticklers.org/pub/CPAN/
- http://cpan.mirrors.uk2.net/
- ftp://mirrors.uk2.net/pub/CPAN/
- http://mirror.ox.ac.uk/sites/www.cpan.org/
- ftp://mirror.ox.ac.uk/sites/www.cpan.org/
+ http://www.mirrorservice.org/sites/ftp.funet.fi/pub/languages/perl/CPAN/
+ ftp://ftp.mirrorservice.org/sites/ftp.funet.fi/pub/languages/perl/CPAN/
+ http://mirror.tje.me.uk/pub/mirrors/ftp.cpan.org/
+ ftp://mirror.tje.me.uk/pub/mirrors/ftp.cpan.org/
+ http://www.mirror.8086.net/sites/CPAN/
+ ftp://ftp.mirror.8086.net/sites/CPAN/
+ http://cpan.mirror.anlx.net/
+ ftp://ftp.mirror.anlx.net/CPAN/
+ http://mirror.bytemark.co.uk/CPAN/
+ ftp://mirror.bytemark.co.uk/CPAN/
+ http://cpan.etla.org/
+ ftp://cpan.etla.org/pub/CPAN
+ ftp://ftp.demon.co.uk/pub/CPAN/
+ http://mirror.sov.uk.goscomb.net/CPAN/
+ ftp://mirror.sov.uk.goscomb.net/pub/CPAN/
+ http://ftp.plig.net/pub/CPAN/
+ ftp://ftp.plig.net/pub/CPAN/
+ http://ftp.ticklers.org/pub/CPAN/
+ ftp://ftp.ticklers.org/pub/CPAN/
+ http://cpan.mirrors.uk2.net/
+ ftp://mirrors.uk2.net/pub/CPAN/
+ http://mirror.ox.ac.uk/sites/www.cpan.org/
+ ftp://mirror.ox.ac.uk/sites/www.cpan.org/
=back
@@ -2858,30 +3136,28 @@ Registered CPAN sites
=item Bahamas
- http://www.securehost.com/mirror/CPAN/
+ http://www.securehost.com/mirror/CPAN/
=item Canada
- http://cpan.justanotherperlhacker.com/pub/CPAN/
- ftp://cpan.justanotherperlhacker.com/pub/CPAN/
- http://cpan.arcticnetwork.ca
- ftp://mirror.arcticnetwork.ca/pub/CPAN
- http://cpan.sunsite.ualberta.ca/
- ftp://cpan.sunsite.ualberta.ca/pub/CPAN/
- http://theoryx5.uwinnipeg.ca/pub/CPAN/
- ftp://theoryx5.uwinnipeg.ca/pub/CPAN/
- http://arwen.cs.dal.ca/mirror/CPAN/
- ftp://arwen.cs.dal.ca/pub/mirror/CPAN/
- http://CPAN.mirror.rafal.ca/
- ftp://CPAN.mirror.rafal.ca/pub/CPAN/
- ftp://ftp.nrc.ca/pub/CPAN/
- http://mirror.csclub.uwaterloo.ca/pub/CPAN/
- ftp://mirror.csclub.uwaterloo.ca/pub/CPAN/
+ http://cpan.arcticnetwork.ca
+ ftp://mirror.arcticnetwork.ca/pub/CPAN
+ http://cpan.sunsite.ualberta.ca/
+ ftp://cpan.sunsite.ualberta.ca/pub/CPAN/
+ http://theoryx5.uwinnipeg.ca/pub/CPAN/
+ ftp://theoryx5.uwinnipeg.ca/pub/CPAN/
+ http://arwen.cs.dal.ca/mirror/CPAN/
+ ftp://arwen.cs.dal.ca/pub/mirror/CPAN/
+ http://CPAN.mirror.rafal.ca/
+ ftp://CPAN.mirror.rafal.ca/pub/CPAN/
+ ftp://ftp.nrc.ca/pub/CPAN/
+ http://mirror.csclub.uwaterloo.ca/pub/CPAN/
+ ftp://mirror.csclub.uwaterloo.ca/pub/CPAN/
=item Mexico
- http://www.msg.com.mx/CPAN/
- ftp://ftp.msg.com.mx/pub/CPAN/
+ http://www.msg.com.mx/CPAN/
+ ftp://ftp.msg.com.mx/pub/CPAN/
=item United States
@@ -2889,150 +3165,145 @@ Registered CPAN sites
=item Alabama
- http://mirror.hiwaay.net/CPAN/
- ftp://mirror.hiwaay.net/CPAN/
+ http://mirror.hiwaay.net/CPAN/
+ ftp://mirror.hiwaay.net/CPAN/
+
+=item Arizona
+
+ http://cpan.ezarticleinformation.com/
=item California
- http://cpan.knowledgematters.net/
- http://cpan.binkerton.com/
- http://cpan.develooper.com/
- http://mirrors.gossamer-threads.com/CPAN
- http://cpan.schatt.com/
- http://mirrors.kernel.org/cpan/
- ftp://mirrors.kernel.org/pub/CPAN
- http://mirrors2.kernel.org/cpan/
- ftp://mirrors2.kernel.org/pub/CPAN/
- http://cpan.mirrors.redwire.net/
- http://cpan.mirror.facebook.net/
- http://mirrors1.kernel.org/cpan/
- ftp://mirrors1.kernel.org/pub/CPAN/
- http://cpan-sj.viaverio.com/
- ftp://cpan-sj.viaverio.com/pub/CPAN/
- http://www.perl.com/CPAN/
- http://cpan.yahoo.com/
+ http://cpan.knowledgematters.net/
+ http://cpan.binkerton.com/
+ http://cpan.develooper.com/
+ http://mirrors.gossamer-threads.com/CPAN
+ http://cpan.schatt.com/
+ http://mirrors.kernel.org/cpan/
+ ftp://mirrors.kernel.org/pub/CPAN
+ http://mirrors2.kernel.org/cpan/
+ ftp://mirrors2.kernel.org/pub/CPAN/
+ http://cpan.mirror.facebook.net/
+ http://mirrors1.kernel.org/cpan/
+ ftp://mirrors1.kernel.org/pub/CPAN/
+ http://cpan-sj.viaverio.com/
+ ftp://cpan-sj.viaverio.com/pub/CPAN/
+ http://www.perl.com/CPAN/
=item Florida
- ftp://ftp.cise.ufl.edu/pub/mirrors/CPAN/
- http://mirror.atlantic.net/pub/CPAN/
- ftp://mirror.atlantic.net/pub/CPAN/
- http://mirror.candidhosting.com/pub/CPAN
- ftp://mirror.candidhosting.com/pub/CPAN
+ ftp://ftp.cise.ufl.edu/pub/mirrors/CPAN/
+ http://mirror.atlantic.net/pub/CPAN/
+ ftp://mirror.atlantic.net/pub/CPAN/
=item Idaho
- http://mirror.its.uidaho.edu/pub/cpan/
- ftp://mirror.its.uidaho.edu/cpan/
+ http://mirror.its.uidaho.edu/pub/cpan/
+ ftp://mirror.its.uidaho.edu/cpan/
=item Illinois
- http://cpan.mirrors.hoobly.com/
- http://cpan.uchicago.edu/pub/CPAN/
- ftp://cpan.uchicago.edu/pub/CPAN/
- http://mirrors.servercentral.net/CPAN/
- http://www.stathy.com/CPAN/
- ftp://www.stathy.com/CPAN/
+ http://cpan.mirrors.hoobly.com/
+ http://cpan.uchicago.edu/pub/CPAN/
+ ftp://cpan.uchicago.edu/pub/CPAN/
+ http://mirrors.servercentral.net/CPAN/
+ http://www.stathy.com/CPAN/
+ ftp://www.stathy.com/CPAN/
=item Indiana
- ftp://ftp.uwsg.iu.edu/pub/perl/CPAN/
- http://cpan.netnitco.net/
- ftp://cpan.netnitco.net/pub/mirrors/CPAN/
- http://ftp.ndlug.nd.edu/pub/perl/
- ftp://ftp.ndlug.nd.edu/pub/perl/
- http://fx.saintjoe.edu/pub/CPAN
+ ftp://ftp.uwsg.iu.edu/pub/perl/CPAN/
+ http://cpan.netnitco.net/
+ ftp://cpan.netnitco.net/pub/mirrors/CPAN/
+ http://ftp.ndlug.nd.edu/pub/perl/
+ ftp://ftp.ndlug.nd.edu/pub/perl/
=item Massachusetts
- ftp://ftp.ccs.neu.edu/net/mirrors/ftp.funet.fi/pub/languages/perl/CPAN/
+ http://mirrors.ccs.neu.edu/CPAN/
=item Michigan
- http://ftp.wayne.edu/cpan/
- ftp://ftp.wayne.edu/cpan/
+ http://ftp.wayne.edu/cpan/
+ ftp://ftp.wayne.edu/cpan/
=item Minnesota
- http://cpan.msi.umn.edu/
+ http://cpan.msi.umn.edu/
=item New Jersey
- http://mirror.datapipe.net/CPAN/
- ftp://mirror.datapipe.net/pub/CPAN/
+ http://mirror.datapipe.net/CPAN/
+ ftp://mirror.datapipe.net/pub/CPAN/
=item New York
- http://mirrors.24-7-solutions.net/pub/CPAN/
- ftp://mirrors.24-7-solutions.net/pub/CPAN/
- http://mirror.cc.columbia.edu/pub/software/cpan/
- ftp://mirror.cc.columbia.edu/pub/software/cpan/
- http://cpan.belfry.net/
- http://cpan.erlbaum.net/
- ftp://cpan.erlbaum.net/CPAN/
- http://cpan.hexten.net/
- ftp://cpan.hexten.net/
- http://ftp.fxcorporate.com/CPAN/
- ftp://ftp.fxcorporate.com/pub/CPAN/
- ftp://mirror.nyi.net/CPAN/
- http://mirror.rit.edu/CPAN/
- ftp://mirror.rit.edu/CPAN/
+ http://mirrors.24-7-solutions.net/pub/CPAN/
+ ftp://mirrors.24-7-solutions.net/pub/CPAN/
+ http://mirror.cc.columbia.edu/pub/software/cpan/
+ ftp://mirror.cc.columbia.edu/pub/software/cpan/
+ http://cpan.belfry.net/
+ http://cpan.erlbaum.net/
+ ftp://cpan.erlbaum.net/CPAN/
+ http://cpan.hexten.net/
+ ftp://cpan.hexten.net/
+ ftp://mirror.nyi.net/CPAN/
+ http://mirror.rit.edu/CPAN/
+ ftp://mirror.rit.edu/CPAN/
=item North Carolina
- http://www.ibiblio.org/pub/mirrors/CPAN
- ftp://ftp.ncsu.edu/pub/mirror/CPAN/
+ http://www.ibiblio.org/pub/mirrors/CPAN
+ ftp://ftp.ncsu.edu/pub/mirror/CPAN/
=item Oregon
- http://ftp.osuosl.org/pub/CPAN/
- ftp://ftp.osuosl.org/pub/CPAN/
+ http://ftp.osuosl.org/pub/CPAN/
+ ftp://ftp.osuosl.org/pub/CPAN/
=item Pennsylvania
- http://ftp.epix.net/CPAN/
- ftp://ftp.epix.net/pub/languages/perl/
- http://cpan.pair.com/
- ftp://cpan.pair.com/pub/CPAN/
+ http://ftp.epix.net/CPAN/
+ ftp://ftp.epix.net/pub/languages/perl/
+ http://cpan.pair.com/
+ ftp://cpan.pair.com/pub/CPAN/
=item South Carolina
- http://cpan.mirror.clemson.edu/
+ http://cpan.mirror.clemson.edu/
=item Tennessee
- http://mira.sunsite.utk.edu/CPAN/
+ http://mira.sunsite.utk.edu/CPAN/
=item Texas
- http://mirror.uta.edu/CPAN
+ http://mirror.uta.edu/CPAN
=item Utah
- http://cpan.cs.utah.edu
- ftp://cpan.cs.utah.edu/pub/CPAN/
- ftp://mirror.xmission.com/CPAN/
+ ftp://mirror.xmission.com/CPAN/
=item Virginia
- http://cpan-du.viaverio.com/
- ftp://cpan-du.viaverio.com/pub/CPAN/
- http://perl.secsup.org/
- ftp://perl.secsup.org/pub/perl/
- ftp://mirror.cogentco.com/pub/CPAN/
+ http://cpan-du.viaverio.com/
+ ftp://cpan-du.viaverio.com/pub/CPAN/
+ http://perl.secsup.org/
+ ftp://perl.secsup.org/pub/perl/
+ ftp://mirror.cogentco.com/pub/CPAN/
=item Washington
- http://cpan.llarian.net/
- ftp://cpan.llarian.net/pub/CPAN/
- ftp://ftp-mirror.internap.com/pub/CPAN/
+ http://cpan.llarian.net/
+ ftp://cpan.llarian.net/pub/CPAN/
+ ftp://ftp-mirror.internap.com/pub/CPAN/
=item Wisconsin
- http://cpan.mirrors.tds.net
- ftp://cpan.mirrors.tds.net/pub/CPAN
- http://mirror.sit.wisc.edu/pub/CPAN/
- ftp://mirror.sit.wisc.edu/pub/CPAN/
+ http://cpan.mirrors.tds.net
+ ftp://cpan.mirrors.tds.net/pub/CPAN
+ http://mirror.sit.wisc.edu/pub/CPAN/
+ ftp://mirror.sit.wisc.edu/pub/CPAN/
=back
@@ -3044,19 +3315,19 @@ Registered CPAN sites
=item Australia
- http://mirror.internode.on.net/pub/cpan/
- ftp://mirror.internode.on.net/pub/cpan/
- http://cpan.mirror.aussiehq.net.au/
- http://mirror.as24220.net/cpan/
- ftp://mirror.as24220.net/cpan/
+ http://mirror.internode.on.net/pub/cpan/
+ ftp://mirror.internode.on.net/pub/cpan/
+ http://cpan.mirror.aussiehq.net.au/
+ http://mirror.as24220.net/cpan/
+ ftp://mirror.as24220.net/cpan/
=item New Zealand
- ftp://ftp.auckland.ac.nz/pub/perl/CPAN/
- http://cpan.inspire.net.nz
- ftp://cpan.inspire.net.nz/cpan
- http://cpan.catalyst.net.nz/CPAN/
- ftp://cpan.catalyst.net.nz/pub/CPAN/
+ ftp://ftp.auckland.ac.nz/pub/perl/CPAN/
+ http://cpan.inspire.net.nz
+ ftp://cpan.inspire.net.nz/cpan
+ http://cpan.catalyst.net.nz/CPAN/
+ ftp://cpan.catalyst.net.nz/pub/CPAN/
=back
@@ -3066,26 +3337,25 @@ Registered CPAN sites
=item Argentina
- http://cpan.patan.com.ar/
- http://cpan.localhost.net.ar
- ftp://mirrors.localhost.net.ar/pub/mirrors/CPAN
+ http://cpan.patan.com.ar/
+ http://cpan.localhost.net.ar
+ ftp://mirrors.localhost.net.ar/pub/mirrors/CPAN
=item Brazil
- ftp://cpan.pop-mg.com.br/pub/CPAN/
- http://ftp.pucpr.br/CPAN
- ftp://ftp.pucpr.br/CPAN
- http://cpan.kinghost.net/
- ftp://ftp.linorg.usp.br/CPAN
+ ftp://cpan.pop-mg.com.br/pub/CPAN/
+ http://ftp.pucpr.br/CPAN
+ ftp://ftp.pucpr.br/CPAN
+ http://cpan.kinghost.net/
=item Chile
- http://cpan.dcc.uchile.cl/
- ftp://cpan.dcc.uchile.cl/pub/lang/cpan/
+ http://cpan.dcc.uchile.cl/
+ ftp://cpan.dcc.uchile.cl/pub/lang/cpan/
=item Colombia
- http://www.laqee.unal.edu.co/CPAN/
+ http://www.laqee.unal.edu.co/CPAN/
=back
@@ -3188,7 +3458,7 @@ 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
+exist. See L<perlsub>, L<perlobj>, and L<AutoLoader> for details about
the AUTOLOAD mechanism.
=head2 Guidelines for Module Creation
@@ -3248,7 +3518,7 @@ 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).
+C<< $r->func() >> would work.
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
@@ -3472,7 +3742,7 @@ 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
+variable called $VERSION. This should be a positive 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.
@@ -3647,3 +3917,4 @@ 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.
+
diff --git a/Master/tlpkg/tlperl/lib/pods/perlmodstyle.pod b/Master/tlpkg/tlperl/lib/pods/perlmodstyle.pod
index dfe5662f942..df813a0f3dd 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlmodstyle.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlmodstyle.pod
@@ -254,55 +254,58 @@ Your module may be object oriented (OO) or not, or it may have both kinds
of interfaces available. There are pros and cons of each technique, which
should be considered when you design your API.
-According to Damian Conway, you should consider using OO:
+In I<Perl Best Practices> (copyright 2004, Published by O'Reilly Media, Inc.),
+Damian Conway provides a list of criteria to use when deciding if OO is the
+right fit for your problem:
=over 4
-=item *
+=item *
-When the system is large or likely to become so
+The system being designed is large, or is likely to become large.
-=item *
+=item *
-When the data is aggregated in obvious structures that will become objects
+The data can be aggregated into obvious structures, especially if
+there's a large amount of data in each aggregate.
-=item *
+=item *
-When the types of data form a natural hierarchy that can make use of inheritance
+The various types of data aggregate form a natural hierarchy that
+facilitates the use of inheritance and polymorphism.
=item *
-When operations on data vary according to data type (making
-polymorphic invocation of methods feasible)
+You have a piece of data on which many different operations are
+applied.
=item *
-When it is likely that new data types may be later introduced
-into the system, and will need to be handled by existing code
+You need to perform the same general operations on related types of
+data, but with slight variations depending on the specific type of data
+the operations are applied to.
=item *
-When interactions between data are best represented by
-overloaded operators
+It's likely you'll have to add new data types later.
=item *
-When the implementation of system components is likely to
-change over time (and hence should be encapsulated)
+The typical interactions between pieces of data are best represented by
+operators.
=item *
-When the system design is itself object-oriented
+The implementation of individual components of the system is likely to
+change over time.
=item *
-When large amounts of client code will use the software (and
-should be insulated from changes in its implementation)
+The system design is already object-oriented.
=item *
-When many separate operations will need to be applied to the
-same set of data
+Large numbers of other programmers will be using your code modules.
=back
diff --git a/Master/tlpkg/tlperl/lib/pods/perlmpeix.pod b/Master/tlpkg/tlperl/lib/pods/perlmpeix.pod
index 44dea99e10b..c382c466920 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlmpeix.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlmpeix.pod
@@ -4,7 +4,7 @@ specially designed to be readable as is.
=head1 NAME
-README.mpeix - Perl/iX for HP e3000 MPE
+perlmpeix - Perl/iX for HP e3000 MPE
=head1 SYNOPSIS
diff --git a/Master/tlpkg/tlperl/lib/pods/perlmroapi.pod b/Master/tlpkg/tlperl/lib/pods/perlmroapi.pod
index 74bd9b2a77d..54da7dded25 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlmroapi.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlmroapi.pod
@@ -9,7 +9,7 @@ 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.
-Each plugin should register itself with C<Perl_mro_register> by providing
+Each plugin should register itself by providing
the following structure
struct mro_alg {
@@ -20,6 +20,10 @@ the following structure
U32 hash;
};
+and calling C<Perl_mro_register>:
+
+ Perl_mro_register(aTHX_ &my_mro_alg);
+
=over 4
=item resolve
diff --git a/Master/tlpkg/tlperl/lib/pods/perlobj.pod b/Master/tlpkg/tlperl/lib/pods/perlobj.pod
index 850225f64a9..015b1c966c0 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlobj.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlobj.pod
@@ -1,595 +1,1049 @@
+=encoding utf8
+
+=for comment
+Consistent formatting of this file is achieved with:
+ perl ./Porting/podtidy pod/perlobj.pod
+
=head1 NAME
X<object> X<OOP>
-perlobj - Perl objects
+perlobj - Perl object reference
=head1 DESCRIPTION
-First you need to understand what references are in Perl.
-See L<perlref> for that. Second, if you still find the following
-reference work too complicated, a tutorial on object-oriented programming
-in Perl can be found in L<perltoot> and L<perltooc>.
+This document provides a reference for Perl's object orientation
+features. If you're looking for an introduction to object-oriented
+programming in Perl, please see L<perlootut>.
+
+In order to understand Perl objects, you first need to understand
+references in Perl. See L<perlref> for details.
+
+This document describes all of Perl's object-oriented (OO) features
+from the ground up. If you're just looking to write some
+object-oriented code of your own, you are probably better served by
+using one of the object systems from CPAN described in L<perlootut>.
-If you're still with us, then
-here are three very simple definitions that you should find reassuring.
+If you're looking to write your own object system, or you need to
+maintain code which implements objects from scratch then this document
+will help you understand exactly how Perl does object orientation.
+
+There are a few basic principles which define object oriented Perl:
=over 4
=item 1.
-An object is simply a reference that happens to know which class it
-belongs to.
+An object is simply a data structure that knows to which class it
+belongs.
=item 2.
-A class is simply a package that happens to provide methods to deal
-with object references.
+A class is simply a package. A class provides methods that expect to
+operate on objects.
=item 3.
-A method is simply a subroutine that expects an object reference (or
-a package name, for class methods) as the first argument.
+A method is simply a subroutine that expects a reference to an object
+(or a package name, for class methods) as the first argument.
=back
-We'll cover these points now in more depth.
+Let's look at each of these principles in depth.
-=head2 An Object is Simply a Reference
+=head2 An Object is Simply a Data Structure
X<object> X<bless> X<constructor> X<new>
-Unlike say C++, Perl doesn't provide any special syntax for
-constructors. A constructor is merely a subroutine that returns a
-reference to something "blessed" into a class, generally the
-class that the subroutine is defined in. Here is a typical
-constructor:
-
- package Critter;
- sub new { bless {} }
-
-That word C<new> isn't special. You could have written
-a construct this way, too:
-
- package Critter;
- sub spawn { bless {} }
-
-This might even be preferable, because the C++ programmers won't
-be tricked into thinking that C<new> works in Perl as it does in C++.
-It doesn't. We recommend that you name your constructors whatever
-makes sense in the context of the problem you're solving. For example,
-constructors in the Tk extension to Perl are named after the widgets
-they create.
-
-One thing that's different about Perl constructors compared with those in
-C++ is that in Perl, they have to allocate their own memory. (The other
-things is that they don't automatically call overridden base-class
-constructors.) The C<{}> allocates an anonymous hash containing no
-key/value pairs, and returns it The bless() takes that reference and
-tells the object it references that it's now a Critter, and returns
-the reference. This is for convenience, because the referenced object
-itself knows that it has been blessed, and the reference to it could
-have been returned directly, like this:
-
- sub new {
- my $self = {};
- bless $self;
- return $self;
- }
-
-You often see such a thing in more complicated constructors
-that wish to call methods in the class as part of the construction:
-
- sub new {
- my $self = {};
- bless $self;
- $self->initialize();
- return $self;
- }
-
-If you care about inheritance (and you should; see
-L<perlmodlib/"Modules: Creation, Use, and Abuse">),
-then you want to use the two-arg form of bless
-so that your constructors may be inherited:
-
- sub new {
- my $class = shift;
- my $self = {};
- bless $self, $class;
- $self->initialize();
- return $self;
- }
-
-Or if you expect people to call not just C<< CLASS->new() >> but also
-C<< $obj->new() >>, then use something like the following. (Note that using
-this to call new() on an instance does not automatically perform any
-copying. If you want a shallow or deep copy of an object, you'll have to
-specifically allow for that.) The initialize() method used will be of
-whatever $class we blessed the object into:
-
- sub new {
- my $this = shift;
- my $class = ref($this) || $this;
- my $self = {};
- bless $self, $class;
- $self->initialize();
- return $self;
- }
-
-Within the class package, the methods will typically deal with the
-reference as an ordinary reference. Outside the class package,
-the reference is generally treated as an opaque value that may
-be accessed only through the class's methods.
-
-Although a constructor can in theory re-bless a referenced object
-currently belonging to another class, this is almost certainly going
-to get you into trouble. The new class is responsible for all
-cleanup later. The previous blessing is forgotten, as an object
-may belong to only one class at a time. (Although of course it's
-free to inherit methods from many classes.) If you find yourself
-having to do this, the parent class is probably misbehaving, though.
-
-A clarification: Perl objects are blessed. References are not. Objects
-know which package they belong to. References do not. The bless()
-function uses the reference to find the object. Consider
-the following example:
-
- $a = {};
- $b = $a;
- bless $a, BLAH;
- print "\$b is a ", ref($b), "\n";
-
-This reports $b as being a BLAH, so obviously bless()
-operated on the object and not on the reference.
+Unlike many other languages which support object orientation, Perl does
+not provide any special syntax for constructing an object. Objects are
+merely Perl data structures (hashes, arrays, scalars, filehandles,
+etc.) that have been explicitly associated with a particular class.
-=head2 A Class is Simply a Package
-X<class> X<package> X<@ISA> X<inheritance>
+That explicit association is created by the built-in C<bless> function,
+which is typically used within the I<constructor> subroutine of the
+class.
-Unlike say C++, Perl doesn't provide any special syntax for class
-definitions. You use a package as a class by putting method
-definitions into the class.
-
-There is a special array within each package called @ISA, which says
-where else to look for a method if you can't find it in the current
-package. This is how Perl implements inheritance. Each element of the
-@ISA array is just the name of another package that happens to be a
-class package. The classes are searched for missing methods in
-depth-first, left-to-right order by default (see L<mro> for alternative
-search order and other in-depth information). The classes accessible
-through @ISA are known as base classes of the current class.
-
-All classes implicitly inherit from class C<UNIVERSAL> as their
-last base class. Several commonly used methods are automatically
-supplied in the UNIVERSAL class; see L<"Default UNIVERSAL methods"> or
-L<UNIVERSAL|UNIVERSAL> for more details.
-X<UNIVERSAL> X<base class> X<class, base>
-
-If a missing method is found in a base class, it is cached
-in the current class for efficiency. Changing @ISA or defining new
-subroutines invalidates the cache and causes Perl to do the lookup again.
-
-If neither the current class, its named base classes, nor the UNIVERSAL
-class contains the requested method, these three places are searched
-all over again, this time looking for a method named AUTOLOAD(). If an
-AUTOLOAD is found, this method is called on behalf of the missing method,
-setting the package global $AUTOLOAD to be the fully qualified name of
-the method that was intended to be called.
-X<AUTOLOAD>
+Here is a simple constructor:
-If none of that works, Perl finally gives up and complains.
+ package File;
-If you want to stop the AUTOLOAD inheritance say simply
-X<AUTOLOAD>
+ sub new {
+ my $class = shift;
+
+ return bless {}, $class;
+ }
+
+The name C<new> isn't special. We could name our constructor something
+else:
+
+ package File;
+
+ sub load {
+ my $class = shift;
+
+ return bless {}, $class;
+ }
+
+The modern convention for OO modules is to always use C<new> as the
+name for the constructor, but there is no requirement to do so. Any
+subroutine that blesses a data structure into a class is a valid
+constructor in Perl.
+
+In the previous examples, the C<{}> code creates a reference to an
+empty anonymous hash. The C<bless> function then takes that reference
+and associates the hash with the class in C<$class>. In the simplest
+case, the C<$class> variable will end up containing the string "File".
+
+We can also use a variable to store a reference to the data structure
+that is being blessed as our object:
+
+ sub new {
+ my $class = shift;
+
+ my $self = {};
+ bless $self, $class;
+
+ return $self;
+ }
+
+Once we've blessed the hash referred to by C<$self> we can start
+calling methods on it. This is useful if you want to put object
+initialization in its own separate method:
+
+ sub new {
+ my $class = shift;
+
+ my $self = {};
+ bless $self, $class;
+
+ $self->_initialize();
+
+ return $self;
+ }
+
+Since the object is also a hash, you can treat it as one, using it to
+store data associated with the object. Typically, code inside the class
+can treat the hash as an accessible data structure, while code outside
+the class should always treat the object as opaque. This is called
+B<encapsulation>. Encapsulation means that the user of an object does
+not have to know how it is implemented. The user simply calls
+documented methods on the object.
+
+Note, however, that (unlike most other OO languages) Perl does not
+ensure or enforce encapsulation in any way. If you want objects to
+actually I<be> opaque you need to arrange for that yourself. This can
+be done in a varierty of ways, including using L<"Inside-Out objects">
+or modules from CPAN.
+
+=head3 Objects Are Blessed; Variables Are Not
+
+When we bless something, we are not blessing the variable which
+contains a reference to that thing, nor are we blessing the reference
+that the variable stores; we are blessing the thing that the variable
+refers to (sometimes known as the I<referent>). This is best
+demonstrated with this code:
- sub AUTOLOAD;
+ use Scalar::Util 'blessed';
-and the call will die using the name of the sub being called.
+ my $foo = {};
+ my $bar = $foo;
-Perl classes do method inheritance only. Data inheritance is left up
-to the class itself. By and large, this is not a problem in Perl,
-because most classes model the attributes of their object using an
-anonymous hash, which serves as its own little namespace to be carved up
-by the various classes that might want to do something with the object.
-The only problem with this is that you can't sure that you aren't using
-a piece of the hash that isn't already used. A reasonable workaround
-is to prepend your fieldname in the hash with the package name.
-X<inheritance, method> X<inheritance, data>
+ bless $foo, 'Class';
+ print blessed( $bar ); # prints "Class"
- sub bump {
- my $self = shift;
- $self->{ __PACKAGE__ . ".count"}++;
- }
+ $bar = "some other value";
+ print blessed( $bar ); # prints undef
+
+When we call C<bless> on a variable, we are actually blessing the
+underlying data structure that the variable refers to. We are not
+blessing the reference itself, nor the variable that contains that
+reference. That's why the second call to C<blessed( $bar )> returns
+false. At that point C<$bar> is no longer storing a reference to an
+object.
+
+You will sometimes see older books or documentation mention "blessing a
+reference" or describe an object as a "blessed reference", but this is
+incorrect. It isn't the reference that is blessed as an object; it's
+the thing the reference refers to (i.e. the referent).
+
+=head2 A Class is Simply a Package
+X<class> X<package> X<@ISA> X<inheritance>
+
+Perl does not provide any special syntax for class definitions. A
+package is simply a namespace containing variables and subroutines. The
+only difference is that in a class, the subroutines may expect a
+reference to an object or the name of a class as the first argument.
+This is purely a matter of convention, so a class may contain both
+methods and subroutines which I<don't> operate on an object or class.
+
+Each package contains a special array called C<@ISA>. The C<@ISA> array
+contains a list of that class's parent classes, if any. This array is
+examined when Perl does method resolution, which we will cover later.
+
+It is possible to manually set C<@ISA>, and you may see this in older
+Perl code. Much older code also uses the L<base> pragma. For new code,
+we recommend that you use the L<parent> pragma to declare your parents.
+This pragma will take care of setting C<@ISA>. It will also load the
+parent classes and make sure that the package doesn't inherit from
+itself.
+
+However the parent classes are set, the package's C<@ISA> variable will
+contain a list of those parents. This is simply a list of scalars, each
+of which is a string that corresponds to a package name.
+
+All classes inherit from the L<UNIVERSAL> class implicitly. The
+L<UNIVERSAL> class is implemented by the Perl core, and provides
+several default methods, such as C<isa()>, C<can()>, and C<VERSION()>.
+The C<UNIVERSAL> class will I<never> appear in a package's C<@ISA>
+variable.
+
+Perl I<only> provides method inheritance as a built-in feature.
+Attribute inheritance is left up the class to implement. See the
+L</Writing Accessors> section for details.
=head2 A Method is Simply a Subroutine
X<method>
-Unlike say C++, Perl doesn't provide any special syntax for method
-definition. (It does provide a little syntax for method invocation
-though. More on that later.) A method expects its first argument
-to be the object (reference) or package (string) it is being invoked
-on. There are two ways of calling methods, which we'll call class
-methods and instance methods.
-
-A class method expects a class name as the first argument. It
-provides functionality for the class as a whole, not for any
-individual object belonging to the class. Constructors are often
-class methods, but see L<perltoot> and L<perltooc> for alternatives.
-Many class methods simply ignore their first argument, because they
-already know what package they're in and don't care what package
-they were invoked via. (These aren't necessarily the same, because
-class methods follow the inheritance tree just like ordinary instance
-methods.) Another typical use for class methods is to look up an
-object by name:
-
- sub find {
- my ($class, $name) = @_;
- $objtable{$name};
- }
-
-An instance method expects an object reference as its first argument.
-Typically it shifts the first argument into a "self" or "this" variable,
-and then uses that as an ordinary reference.
-
- sub display {
- my $self = shift;
- my @keys = @_ ? @_ : sort keys %$self;
- foreach $key (@keys) {
- print "\t$key => $self->{$key}\n";
- }
- }
+Perl does not provide any special syntax for defining a method. A
+method is simply a regular subroutine, and is declared with C<sub>.
+What makes a method special is that it expects to receive either an
+object or a class name as its first argument.
+
+Perl I<does> provide special syntax for method invocation, the C<< ->
+>> operator. We will cover this in more detail later.
+
+Most methods you write will expect to operate on objects:
+
+ sub save {
+ my $self = shift;
+
+ open my $fh, '>', $self->path() or die $!;
+ print {$fh} $self->data() or die $!;
+ close $fh or die $!;
+ }
=head2 Method Invocation
X<invocation> X<method> X<arrow> X<< -> >>
-For various historical and other reasons, Perl offers two equivalent
-ways to write a method call. The simpler and more common way is to use
-the arrow notation:
+Calling a method on an object is written as C<< $object->method >>.
- my $fred = Critter->find("Fred");
- $fred->display("Height", "Weight");
+The left hand side of the method invocation (or arrow) operator is the
+object (or class name), and the right hand side is the method name.
-You should already be familiar with the use of the C<< -> >> operator with
-references. In fact, since C<$fred> above is a reference to an object,
-you could think of the method call as just another form of
-dereferencing.
+ my $pod = File->new( 'perlobj.pod', $data );
+ $pod->save();
-Whatever is on the left side of the arrow, whether a reference or a
-class name, is passed to the method subroutine as its first argument.
-So the above code is mostly equivalent to:
+The C<< -> >> syntax is also used when dereferencing a reference. It
+looks like the same operator, but these are two different operations.
- my $fred = Critter::find("Critter", "Fred");
- Critter::display($fred, "Height", "Weight");
+When you call a method, the thing on the left side of the arrow is
+passed as the first argument to the method. That means when we call C<<
+Critter->new() >>, the C<new()> method receives the string C<"Critter">
+as its first argument. When we call C<< $fred->speak() >>, the C<$fred>
+variable is passed as the first argument to C<speak()>.
-How does Perl know which package the subroutine is in? By looking at
-the left side of the arrow, which must be either a package name or a
-reference to an object, i.e. something that has been blessed to a
-package. Either way, that's the package where Perl starts looking. If
-that package has no subroutine with that name, Perl starts looking for
-it in any base classes of that package, and so on.
+Just as with any Perl subroutine, all of the arguments passed in C<@_>
+are aliases to the original argument. This includes the object itself.
+If you assign directly to C<$_[0]> you will change the contents of the
+variable that holds the reference to the object. We recommend that you
+don't do this unless you know exactly what you're doing.
-If you need to, you I<can> force Perl to start looking in some other package:
+Perl knows what package the method is in by looking at the left side of
+the arrow. If the left hand side is a package name, it looks for the
+method in that package. If the left hand side is an object, then Perl
+looks for the method in the package that the object has been blessed
+into.
- my $barney = MyCritter->Critter::find("Barney");
- $barney->Critter::display("Height", "Weight");
+If the left hand side is neither a package name nor an object, then the
+method call will cause an error, but see the section on L</Method Call
+Variations> for more nuances.
-Here C<MyCritter> is presumably a subclass of C<Critter> that defines
-its own versions of find() and display(). We haven't specified what
-those methods do, but that doesn't matter above since we've forced Perl
-to start looking for the subroutines in C<Critter>.
+=head2 Inheritance
+X<inheritance>
-As a special case of the above, you may use the C<SUPER> pseudo-class to
-tell Perl to start looking for the method in the packages named in the
-current class's C<@ISA> list.
-X<SUPER>
+We already talked about the special C<@ISA> array and the L<parent>
+pragma.
+
+When a class inherits from another class, any methods defined in the
+parent class are available to the child class. If you attempt to call a
+method on an object that isn't defined in its own class, Perl will also
+look for that method in any parent classes it may have.
+
+ package File::MP3;
+ use parent 'File'; # sets @File::MP3::ISA = ('File');
+
+ my $mp3 = File::MP3->new( 'Andvari.mp3', $data );
+ $mp3->save();
- package MyCritter;
- use base 'Critter'; # sets @MyCritter::ISA = ('Critter');
+Since we didn't define a C<save()> method in the C<File::MP3> class,
+Perl will look at the C<File::MP3> class's parent classes to find the
+C<save()> method. If Perl cannot find a C<save()> method anywhere in
+the inheritance hierarchy, it will die.
- sub display {
- my ($self, @args) = @_;
- $self->SUPER::display("Name", @args);
- }
+In this case, it finds a C<save()> method in the C<File> class. Note
+that the object passed to C<save()> in this case is still a
+C<File::MP3> object, even though the method is found in the C<File>
+class.
-It is important to note that C<SUPER> refers to the superclass(es) of the
-I<current package> and not to the superclass(es) of the object. Also, the
-C<SUPER> pseudo-class can only currently be used as a modifier to a method
-name, but not in any of the other ways that class names are normally used,
-eg:
+We can override a parent's method in a child class. When we do so, we
+can still call the parent class's method with the C<SUPER>
+pseudo-class.
+
+ sub save {
+ my $self = shift;
+
+ say 'Prepare to rock';
+ $self->SUPER::save();
+ }
+
+The C<SUPER> modifier can I<only> be used for method calls. You can't
+use it for regular subroutine calls or class methods:
+
+ SUPER::save($thing); # FAIL: looks for save() sub in package SUPER
+
+ SUPER->save($thing); # FAIL: looks for save() method in class
+ # SUPER
+
+ $thing->SUPER::save(); # Okay: looks for save() method in parent
+ # classes
+
+
+=head3 How SUPER is Resolved
X<SUPER>
- something->SUPER::method(...); # OK
- SUPER::method(...); # WRONG
- SUPER->method(...); # WRONG
+The C<SUPER> pseudo-class is resolved from the package where the call
+is made. It is I<not> resolved based on the object's class. This is
+important, because it lets methods at different levels within a deep
+inheritance hierarchy each correctly call their respective parent
+methods.
+
+ package A;
+
+ sub new {
+ return bless {}, shift;
+ }
+
+ sub speak {
+ my $self = shift;
+
+ $self->SUPER::speak();
+
+ say 'A';
+ }
+
+ package B;
-Instead of a class name or an object reference, you can also use any
-expression that returns either of those on the left side of the arrow.
-So the following statement is valid:
+ use parent 'A';
- Critter->find("Fred")->display("Height", "Weight");
+ sub speak {
+ my $self = shift;
-and so is the following:
+ $self->SUPER::speak();
- my $fred = (reverse "rettirC")->find(reverse "derF");
+ say 'B';
+ }
-The right side of the arrow typically is the method name, but a simple
-scalar variable containing either the method name or a subroutine
-reference can also be used.
+ package C;
-If the right side of the arrow is a scalar containing a reference
-to a subroutine, then this is equivalent to calling the referenced
-subroutine directly with the class name or object on the left side
-of the arrow as its first argument. No lookup is done and there is
-no requirement that the subroutine be defined in any package related
-to the class name or object on the left side of the arrow.
+ use parent 'B';
-For example, the following calls to $display are equivalent:
+ sub speak {
+ my $self = shift;
- my $display = sub { my $self = shift; ... };
- $fred->$display("Height", "Weight");
- $display->($fred, "Height", "Weight");
+ $self->SUPER::speak();
-=head2 Indirect Object Syntax
-X<indirect object syntax> X<invocation, indirect> X<indirect>
+ say 'C';
+ }
-The other way to invoke a method is by using the so-called "indirect
-object" notation. This syntax was available in Perl 4 long before
-objects were introduced, and is still used with filehandles like this:
+ my $c = C->new();
+ $c->speak();
- print STDERR "help!!!\n";
+In this example, we will get the following output:
-The same syntax can be used to call either object or class methods.
+ A
+ B
+ C
- my $fred = find Critter "Fred";
- display $fred "Height", "Weight";
+This demonstrates how C<SUPER> is resolved. Even though the object is
+blessed into the C<C> class, the C<speak()> method in the C<B> class
+can still call C<SUPER::speak()> and expect it to correctly look in the
+parent class of C<B> (i.e the class the method call is in), not in the
+parent class of C<C> (i.e. the class the object belongs to).
-Notice that there is no comma between the object or class name and the
-parameters. This is how Perl can tell you want an indirect method call
-instead of an ordinary subroutine call.
+There are rare cases where this package-based resolution can be a
+problem. If you copy a subroutine from one package to another, C<SUPER>
+resolution will be done based on the original package.
-But what if there are no arguments? In that case, Perl must guess what
-you want. Even worse, it must make that guess I<at compile time>.
-Usually Perl gets it right, but when it doesn't you get a function
-call compiled as a method, or vice versa. This can introduce subtle bugs
-that are hard to detect.
+=head3 Multiple Inheritance
+X<multiple inheritance>
+
+Multiple inheritance often indicates a design problem, but Perl always
+gives you enough rope to hang yourself with if you ask for it.
+
+To declare multiple parents, you simply need to pass multiple class
+names to C<use parent>:
+
+ package MultiChild;
+
+ use parent 'Parent1', 'Parent2';
+
+=head3 Method Resolution Order
+X<method resolution order> X<mro>
+
+Method resolution order only matters in the case of multiple
+inheritance. In the case of single inheritance, Perl simply looks up
+the inheritance chain to find a method:
+
+ Grandparent
+ |
+ Parent
+ |
+ Child
+
+If we call a method on a C<Child> object and that method is not defined
+in the C<Child> class, Perl will look for that method in the C<Parent>
+class and then, if necessary, in the C<Grandparent> class.
+
+If Perl cannot find the method in any of these classes, it will die
+with an error message.
+
+When a class has multiple parents, the method lookup order becomes more
+complicated.
+
+By default, Perl does a depth-first left-to-right search for a method.
+That means it starts with the first parent in the C<@ISA> array, and
+then searches all of its parents, grandparents, etc. If it fails to
+find the method, it then goes to the next parent in the original
+class's C<@ISA> array and searches from there.
+
+ SharedGreatGrandParent
+ / \
+ PaternalGrandparent MaternalGrandparent
+ \ /
+ Father Mother
+ \ /
+ Child
+
+So given the diagram above, Perl will search C<Child>, C<Father>,
+C<PaternalGrandparent>, C<SharedGreatGrandParent>, C<Mother>, and
+finally C<MaternalGrandparent>. This may be a problem because now we're
+looking in C<SharedGreatGrandParent> I<before> we've checked all its
+derived classes (i.e. before we tried C<Mother> and
+C<MaternalGrandparent>).
+
+It is possible to ask for a different method resolution order with the
+L<mro> pragma.
+
+ package Child;
+
+ use mro 'c3';
+ use parent 'Father', 'Mother';
+
+This pragma lets you switch to the "C3" resolution order. In simple
+terms, "C3" order ensures that shared parent classes are never searched
+before child classes, so Perl will now search: C<Child>, C<Father>,
+C<PaternalGrandparent>, C<Mother> C<MaternalGrandparent>, and finally
+C<SharedGreatGrandParent>. Note however that this is not
+"breadth-first" searching: All the C<Father> ancestors (except the
+common ancestor) are searched before any of the C<Mother> ancestors are
+considered.
+
+The C3 order also lets you call methods in sibling classes with the
+C<next> pseudo-class. See the L<mro> documentation for more details on
+this feature.
+
+=head3 Method Resolution Caching
+
+When Perl searches for a method, it caches the lookup so that future
+calls to the method do not need to search for it again. Changing a
+class's parent class or adding subroutines to a class will invalidate
+the cache for that class.
+
+The L<mro> pragma provides some functions for manipulating the method
+cache directly.
+
+=head2 Writing Constructors
+X<constructor>
+
+As we mentioned earlier, Perl provides no special constructor syntax.
+This means that a class must implement its own constructor. A
+constructor is simply a class method that returns a reference to a new
+object.
+
+The constructor can also accept additional parameters that define the
+object. Let's write a real constructor for the C<File> class we used
+earlier:
+
+ package File;
+
+ sub new {
+ my $class = shift;
+ my ( $path, $data ) = @_;
+
+ my $self = bless {
+ path => $path,
+ data => $data,
+ }, $class;
+
+ return $self;
+ }
+
+As you can see, we've stored the path and file data in the object
+itself. Remember, under the hood, this object is still just a hash.
+Later, we'll write accessors to manipulate this data.
+
+For our File::MP3 class, we can check to make sure that the path we're
+given ends with ".mp3":
+
+ package File::MP3;
+
+ sub new {
+ my $class = shift;
+ my ( $path, $data ) = @_;
+
+ die "You cannot create a File::MP3 without an mp3 extension\n"
+ unless $path =~ /\.mp3\z/;
+
+ return $class->SUPER::new(@_);
+ }
+
+This constructor lets its parent class do the actual object
+construction.
+
+=head2 Attributes
+X<attribute>
+
+An attribute is a piece of data belonging to a particular object.
+Unlike most object-oriented languages, Perl provides no special syntax
+or support for declaring and manipulating attributes.
+
+Attributes are often stored in the object itself. For example, if the
+object is an anonymous hash, we can store the attribute values in the
+hash using the attribute name as the key.
+
+While it's possible to refer directly to these hash keys outside of the
+class, it's considered a best practice to wrap all access to the
+attribute with accessor methods.
+
+This has several advantages. Accessors make it easier to change the
+implementation of an object later while still preserving the original
+API.
+
+An accessor lets you add additional code around attribute access. For
+example, you could apply a default to an attribute that wasn't set in
+the constructor, or you could validate that a new value for the
+attribute is acceptable.
+
+Finally, using accessors makes inheritance much simpler. Subclasses can
+use the accessors rather than having to know how a parent class is
+implemented internally.
+
+=head3 Writing Accessors
+X<accessor>
+
+As with constructors, Perl provides no special accessor declaration
+syntax, so classes must provide explicitly written accessor methods.
+There are two common types of accessors, read-only and read-write.
+
+A simple read-only accessor simply gets the value of a single
+attribute:
+
+ sub path {
+ my $self = shift;
+
+ return $self->{path};
+ }
+
+A read-write accessor will allow the caller to set the value as well as
+get it:
+
+ sub path {
+ my $self = shift;
+
+ if (@_) {
+ $self->{path} = shift;
+ }
+
+ return $self->{path};
+ }
+
+=head2 An Aside About Smarter and Safer Code
+
+Our constructor and accessors are not very smart. They don't check that
+a C<$path> is defined, nor do they check that a C<$path> is a valid
+filesystem path.
+
+Doing these checks by hand can quickly become tedious. Writing a bunch
+of accessors by hand is also incredibly tedious. There are a lot of
+modules on CPAN that can help you write safer and more concise code,
+including the modules we recommend in L<perlootut>.
+
+=head2 Method Call Variations
+X<method>
-For example, a call to a method C<new> in indirect notation (as C++
-programmers are wont to make) can be miscompiled into a subroutine
-call if there's already a C<new> function in scope. You'd end up
-calling the current package's C<new> as a subroutine, rather than the
-desired class's method. The compiler tries to cheat by remembering
-bareword C<require>s, but the grief when it messes up just isn't worth the
-years of debugging it will take you to track down such subtle bugs.
+Perl supports several other ways to call methods besides the C<<
+$object->method() >> usage we've seen so far.
-There is another problem with this syntax: the indirect object is
-limited to a name, a scalar variable, or a block, because it would have
-to do too much lookahead otherwise, just like any other postfix
-dereference in the language. (These are the same quirky rules as are
-used for the filehandle slot in functions like C<print> and C<printf>.)
-This can lead to horribly confusing precedence problems, as in these
-next two lines:
+=head3 Method Names as Strings
- move $obj->{FIELD}; # probably wrong!
- move $ary[$i]; # probably wrong!
+Perl lets you use a scalar variable containing a string as a method
+name:
-Those actually parse as the very surprising:
+ my $file = File->new( $path, $data );
- $obj->move->{FIELD}; # Well, lookee here
- $ary->move([$i]); # Didn't expect this one, eh?
+ my $method = 'save';
+ $file->$method();
-Rather than what you might have expected:
+This works exactly like calling C<< $file->save() >>. This can be very
+useful for writing dynamic code. For example, it allows you to pass a
+method name to be called as a parameter to another method.
- $obj->{FIELD}->move(); # You should be so lucky.
- $ary[$i]->move; # Yeah, sure.
+=head3 Class Names as Strings
-To get the correct behavior with indirect object syntax, you would have
-to use a block around the indirect object:
+Perl also lets you use a scalar containing a string as a class name:
- move {$obj->{FIELD}};
- move {$ary[$i]};
+ my $class = 'File';
-Even then, you still have the same potential problem if there happens to
-be a function named C<move> in the current package. B<The C<< -> >>
-notation suffers from neither of these disturbing ambiguities, so we
-recommend you use it exclusively.> However, you may still end up having
-to read code using the indirect object notation, so it's important to be
-familiar with it.
+ my $file = $class->new( $path, $data );
-=head2 Default UNIVERSAL methods
+Again, this allows for very dynamic code.
+
+=head3 Subroutine References as Methods
+
+You can also use a subroutine reference as a method:
+
+ my $sub = sub {
+ my $self = shift;
+
+ $self->save();
+ };
+
+ $file->$sub();
+
+This is exactly equivalent to writing C<< $sub->($file) >>. You may see
+this idiom in the wild combined with a call to C<can>:
+
+ if ( my $meth = $object->can('foo') ) {
+ $object->$meth();
+ }
+
+=head3 Deferencing Method Call
+
+Perl also lets you use a dereferenced scalar reference in a method
+call. That's a mouthful, so let's look at some code:
+
+ $file->${ \'save' };
+ $file->${ returns_scalar_ref() };
+ $file->${ \( returns_scalar() ) };
+ $file->${ returns_sub_ref() };
+
+This works if the dereference produces a string I<or> a subroutine
+reference.
+
+=head3 Method Calls on Filehandles
+
+Under the hood, Perl filehandles are instances of the C<IO::Handle> or
+C<IO::File> class. Once you have an open filehandle, you can call
+methods on it. Additionally, you can call methods on the C<STDIN>,
+C<STDOUT>, and C<STDERR> filehandles.
+
+ open my $fh, '>', 'path/to/file';
+ $fh->autoflush();
+ $fh->print('content');
+
+ STDOUT->autoflush();
+
+=head2 Invoking Class Methods
+X<invocation>
+
+Because Perl allows you to use barewords for package names and
+subroutine names, it sometimes interprets a bareword's meaning
+incorrectly. For example, the construct C<< Class->new() >> can be
+interpreted as either C<< 'Class'->new() >> or C<< Class()->new() >>.
+In English, that second interpretation reads as "call a subroutine
+named Class(), then call new() as a method on the return value of
+Class()". If there is a subroutine named C<Class()> in the current
+namespace, Perl will always interpret C<< Class->new() >> as the second
+alternative: a call to C<new()> on the object returned by a call to
+C<Class()>
+
+You can force Perl to use the first interpretation (i.e. as a method
+call on the class named "Class") in two ways. First, you can append a
+C<::> to the class name:
+
+ Class::->new()
+
+Perl will always interpret this as a method call.
+
+Alternatively, you can quote the class name:
+
+ 'Class'->new()
+
+Of course, if the class name is in a scalar Perl will do the right
+thing as well:
+
+ my $class = 'Class';
+ $class->new();
+
+=head3 Indirect Object Syntax
+X<indirect object>
+
+B<Outside of the file handle case, use of this syntax is discouraged,
+as it can confuse the Perl interpreter. See below for more details.>
+
+Perl suports another method invocation syntax called "indirect object"
+notation. This syntax is called "indirect" because the method comes
+before the object it is being invoked on.
+
+This syntax can be used with any class or object method:
+
+ my $file = new File $path, $data;
+ save $file;
+
+We recommend that you avoid this syntax, for several reasons.
+
+First, it can be confusing to read. In the above example, it's not
+clear if C<save> is a method provided by the C<File> class or simply a
+subroutine that expects a file object as its first argument.
+
+When used with class methods, the problem is even worse. Because Perl
+allows subroutine names to be written as barewords, Perl has to guess
+whether the bareword after the method is a class name or subroutine
+name. In other words, Perl can resolve the syntax as either C<<
+File->new( $path, $data ) >> B<or> C<< new( File( $path, $data ) ) >>.
+
+To parse this code, Perl uses a heuristic based on what package names
+it has seen, what subroutines exist in the current package, what
+barewords it has previously seen, and other input. Needless to say,
+heuristics can produce very surprising results!
+
+Older documentation (and some CPAN modules) encouraged this syntax,
+particularly for constructors, so you may still find it in the wild.
+However, we encourage you to avoid using it in new code.
+
+You can force Perl to interpret the bareword as a class name by
+appending "::" to it, like we saw earlier:
+
+ my $file = new File:: $path, $data;
+
+=head2 C<bless>, C<blessed>, and C<ref>
+
+As we saw earlier, an object is simply a data structure that has been
+blessed into a class via the C<bless> function. The C<bless> function
+can take either one or two arguments:
+
+ my $object = bless {}, $class;
+ my $object = bless {};
+
+In the first form, the anonymous hash is being blessed into the class
+in C<$class>. In the second form, the anonymous hash is blessed into
+the current package.
+
+The second form is strongly discouraged, because it breaks the ability
+of a subclass to reuse the parent's constructor, but you may still run
+across it in existing code.
+
+If you want to know whether a particular scalar refers to an object,
+you can use the C<blessed> function exported by L<Scalar::Util>, which
+is shipped with the Perl core.
+
+ use Scalar::Util 'blessed';
+
+ if ( defined blessed($thing) ) { ... }
+
+If C<$thing> refers to an object, then this function returns the name
+of the package the object has been blessed into. If C<$thing> doesn't
+contain a reference to a blessed object, the C<blessed> function
+returns C<undef>.
+
+Note that C<blessed($thing)> will also return false if C<$thing> has
+been blessed into a class named "0". This is a possible, but quite
+pathological. Don't create a class named "0" unless you know what
+you're doing.
+
+Similarly, Perl's built-in C<ref> function treats a reference to a
+blessed object specially. If you call C<ref($thing)> and C<$thing>
+holds a reference to an object, it will return the name of the class
+that the object has been blessed into.
+
+If you simply want to check that a variable contains an object
+reference, we recommend that you use C<defined blessed($object)>, since
+C<ref> returns true values for all references, not just objects.
+
+=head2 The UNIVERSAL Class
X<UNIVERSAL>
-The C<UNIVERSAL> package automatically contains the following methods that
-are inherited by all other classes:
+All classes automatically inherit from the L<UNIVERSAL> class, which is
+built-in to the Perl core. This class provides a number of methods, all
+of which can be called on either a class or an object. You can also
+choose to override some of these methods in your class. If you do so,
+we recommend that you follow the built-in semantics described below.
=over 4
-=item isa(CLASS)
+=item isa($class)
X<isa>
-C<isa> returns I<true> if its object is blessed into a subclass of C<CLASS>
+The C<isa> method returns I<true> if the object is a member of the
+class in C<$class>, or a member of a subclass of C<$class>.
-=item DOES(ROLE)
+If you override this method, it should never throw an exception.
+
+=item DOES($role)
X<DOES>
-C<DOES> returns I<true> if its object claims to perform the role C<ROLE>. By
-default, this is equivalent to C<isa>.
+The C<DOES> method returns I<true> if its object claims to perform the
+role C<$role>. By default, this is equivalent to C<isa>. This method is
+provided for use by object system extensions that implement roles, like
+C<Moose> and C<Role::Tiny>.
+
+You can also override C<DOES> directly in your own classes. If you
+override this method, it should never throw an exception.
-=item can(METHOD)
+=item can($method)
X<can>
-C<can> checks to see if its object has a method called C<METHOD>,
-if it does then a reference to the sub is returned, if it does not then
-C<undef> is returned.
+The C<can> method checks to see if the class or object it was called on
+has a method named C<$method>. This checks for the method in the class
+and all of its parents. If the method exists, then a reference to the
+subroutine is returned. If it does not then C<undef> is returned.
+
+If your class responds to method calls via C<AUTOLOAD>, you may want to
+overload C<can> to return a subroutine reference for methods which your
+C<AUTOLOAD> method handles.
+
+If you override this method, it should never throw an exception.
-=item VERSION( [NEED] )
+=item VERSION($need)
X<VERSION>
-C<VERSION> returns the version number of the class (package). If the
-NEED argument is given then it will check that the current version (as
-defined by the $VERSION variable in the given package) not less than
-NEED; it will die if this is not the case. This method is called automatically
-by the C<VERSION> form of C<use>.
+The C<VERSION> method returns the version number of the class
+(package).
+
+If the C<$need> argument is given then it will check that the current
+version (as defined by the $VERSION variable in the package) is greater
+than or equal to C<$need>; it will die if this is not the case. This
+method is called automatically by the C<VERSION> form of C<use>.
use Package 1.2 qw(some imported subs);
# implies:
Package->VERSION(1.2);
+We recommend that you use this method to access another package's
+version, rather than looking directly at C<$Package::VERSION>. The
+package you are looking at could have overridden the C<VERSION> method.
+
+We also recommend using this method to check whether a module has a
+sufficient version. The internal implementation uses the L<version>
+module to make sure that different types of version numbers are
+compared correctly.
+
=back
+=head2 AUTOLOAD
+X<AUTOLOAD>
+
+If you call a method that doesn't exist in a class, Perl will throw an
+error. However, if that class or any of its parent classes defines an
+C<AUTOLOAD> method, that C<AUTOLOAD> method is called instead.
+
+C<AUTOLOAD> is called as a regular method, and the caller will not know
+the difference. Whatever value your C<AUTOLOAD> method returns is
+returned to the caller.
+
+The fully qualified method name that was called is available in the
+C<$AUTOLOAD> package global for your class. Since this is a global, if
+you want to refer to do it without a package name prefix under C<strict
+'vars'>, you need to declare it.
+
+ # XXX - this is a terrible way to implement accessors, but it makes
+ # for a simple example.
+ our $AUTOLOAD;
+ sub AUTOLOAD {
+ my $self = shift;
+
+ # Remove qualifier from original method name...
+ my $called = $AUTOLOAD =~ s/.*:://r;
+
+ # Is there an attribute of that name?
+ die "No such attribute: $called"
+ unless exists $self->{$called};
+
+ # If so, return it...
+ return $self->{$called};
+ }
+
+ sub DESTROY { } # see below
+
+Without the C<our $AUTOLOAD> declaration, this code will not compile
+under the L<strict> pragma.
+
+As the comment says, this is not a good way to implement accessors.
+It's slow and too clever by far. However, you may see this as a way to
+provide accessors in older Perl code. See L<perlootut> for
+recommendations on OO coding in Perl.
+
+If your class does have an C<AUTOLOAD> method, we strongly recommend
+that you override C<can> in your class as well. Your overridden C<can>
+method should return a subroutine reference for any method that your
+C<AUTOLOAD> responds to.
+
=head2 Destructors
X<destructor> X<DESTROY>
When the last reference to an object goes away, the object is
-automatically destroyed. (This may even be after you exit, if you've
-stored references in global variables.) If you want to capture control
-just before the object is freed, you may define a DESTROY method in
-your class. It will automatically be called at the appropriate moment,
-and you can do any extra cleanup you need to do. Perl passes a reference
-to the object under destruction as the first (and only) argument. Beware
-that the reference is a read-only value, and cannot be modified by
-manipulating C<$_[0]> within the destructor. The object itself (i.e.
-the thingy the reference points to, namely C<${$_[0]}>, C<@{$_[0]}>,
-C<%{$_[0]}> etc.) is not similarly constrained.
-
-Since DESTROY methods can be called at unpredictable times, it is
-important that you localise any global variables that the method may
-update. In particular, localise C<$@> if you use C<eval {}> and
-localise C<$?> if you use C<system> or backticks.
-
-If you arrange to re-bless the reference before the destructor returns,
-perl will again call the DESTROY method for the re-blessed object after
-the current one returns. This can be used for clean delegation of
-object destruction, or for ensuring that destructors in the base classes
-of your choosing get called. Explicitly calling DESTROY is also possible,
-but is usually never needed.
-
-DESTROY is subject to AUTOLOAD lookup, just like any other method. Hence, if
-your class has an AUTOLOAD method, but does not need any DESTROY actions,
-you probably want to provide a DESTROY method anyway, to prevent an
-expensive call to AUTOLOAD each time an object is freed. As this technique
-makes empty DESTROY methods common, the implementation is optimised so that
-a DESTROY method that is an empty or constant subroutine, and hence could
-have no side effects anyway, is not actually called.
-X<AUTOLOAD> X<DESTROY>
-
-Do not confuse the previous discussion with how objects I<CONTAINED> in the current
-one are destroyed. Such objects will be freed and destroyed automatically
-when the current object is freed, provided no other references to them exist
-elsewhere.
-
-=head2 Summary
-
-That's about all there is to it. Now you need just to go off and buy a
-book about object-oriented design methodology, and bang your forehead
-with it for the next six months or so.
-
-=head2 Two-Phased Garbage Collection
-X<garbage collection> X<GC> X<circular reference>
-X<reference, circular> X<DESTROY> X<destructor>
-
-For most purposes, Perl uses a fast and simple, reference-based
-garbage collection system. That means there's an extra
-dereference going on at some level, so if you haven't built
-your Perl executable using your C compiler's C<-O> flag, performance
-will suffer. If you I<have> built Perl with C<cc -O>, then this
-probably won't matter.
-
-A more serious concern is that unreachable memory with a non-zero
-reference count will not normally get freed. Therefore, this is a bad
-idea:
-
- {
- my $a;
- $a = \$a;
- }
-
-Even thought $a I<should> go away, it can't. When building recursive data
-structures, you'll have to break the self-reference yourself explicitly
-if you don't care to leak. For example, here's a self-referential
-node such as one might use in a sophisticated tree structure:
-
- sub new_node {
- my $class = shift;
- my $node = {};
- $node->{LEFT} = $node->{RIGHT} = $node;
- $node->{DATA} = [ @_ ];
- return bless $node => $class;
- }
-
-If you create nodes like that, they (currently) won't go away unless you
-break their self reference yourself. (In other words, this is not to be
-construed as a feature, and you shouldn't depend on it.)
-
-Almost.
-
-When an interpreter thread finally shuts down (usually when your program
-exits), then a rather costly but complete mark-and-sweep style of garbage
-collection is performed, and everything allocated by that thread gets
-destroyed. This is essential to support Perl as an embedded or a
-multithreadable language. For example, this program demonstrates Perl's
-two-phased garbage collection:
-
- #!/usr/bin/perl
- package Subtle;
-
- sub new {
- my $test;
- $test = \$test;
- warn "CREATING " . \$test;
- return bless \$test;
- }
-
- sub DESTROY {
- my $self = shift;
- warn "DESTROYING $self";
- }
-
- package main;
-
- warn "starting program";
- {
- my $a = Subtle->new;
- my $b = Subtle->new;
- $$a = 0; # break selfref
- warn "leaving block";
- }
-
- warn "just exited block";
- warn "time to die...";
- exit;
-
-When run as F</foo/test>, the following output is produced:
-
- starting program at /foo/test line 18.
- CREATING SCALAR(0x8e5b8) at /foo/test line 7.
- CREATING SCALAR(0x8e57c) at /foo/test line 7.
- leaving block at /foo/test line 23.
- DESTROYING Subtle=SCALAR(0x8e5b8) at /foo/test line 13.
- just exited block at /foo/test line 26.
- time to die... at /foo/test line 27.
- DESTROYING Subtle=SCALAR(0x8e57c) during global destruction.
-
-Notice that "global destruction" bit there? That's the thread
-garbage collector reaching the unreachable.
-
-Objects are always destructed, even when regular refs aren't. Objects
-are destructed in a separate pass before ordinary refs just to
-prevent object destructors from using refs that have been themselves
-destructed. Plain refs are only garbage-collected if the destruct level
-is greater than 0. You can test the higher levels of global destruction
-by setting the PERL_DESTRUCT_LEVEL environment variable, presuming
-C<-DDEBUGGING> was enabled during perl build time.
-See L<perlhacktips/PERL_DESTRUCT_LEVEL> for more information.
-
-A more complete garbage collection strategy will be implemented
-at a future date.
-
-In the meantime, the best solution is to create a non-recursive container
-class that holds a pointer to the self-referential data structure.
-Define a DESTROY method for the containing object's class that manually
-breaks the circularities in the self-referential structure.
+destroyed. If you only have one reference to an object stored in a
+lexical scalar, the object is destroyed when that scalar goes out of
+scope. If you store the object in a package global, that object may not
+go out of scope until the program exits.
+
+If you want to do something when the object is destroyed, you can
+define a C<DESTROY> method in your class. This method will always be
+called by Perl at the appropriate time, unless the method is empty.
+
+This is called just like any other method, with the object as the first
+argument. It does not receive any additional arguments. However, the
+C<$_[0]> variable will be read-only in the destructor, so you cannot
+assign a value to it.
+
+If your C<DESTROY> method throws an error, this error will be ignored.
+It will not be sent to C<STDERR> and it will not cause the program to
+die. However, if your destructor is running inside an C<eval {}> block,
+then the error will change the value of C<$@>.
+
+Because C<DESTROY> methods can be called at any time, you should
+localize any global variables you might update in your C<DESTROY>. In
+particular, if you use C<eval {}> you should localize C<$@>, and if you
+use C<system> or backticks, you should localize C<$?>.
+
+If you define an C<AUTOLOAD> in your class, then Perl will call your
+C<AUTOLOAD> to handle the C<DESTROY> method. You can prevent this by
+defining an empty C<DESTROY>, like we did in the autoloading example.
+You can also check the value of C<$AUTOLOAD> and return without doing
+anything when called to handle C<DESTROY>.
+
+=head3 Global Destruction
+
+The order in which objects are destroyed during the global destruction
+before the program exits is unpredictable. This means that any objects
+contained by your object may already have been destroyed. You should
+check that a contained object is defined before calling a method on it:
+
+ sub DESTROY {
+ my $self = shift;
+
+ $self->{handle}->close() if $self->{handle};
+ }
+
+You can use the C<${^GLOBAL_PHASE}> variable to detect if you are
+currently in the global destruction phase:
+
+ sub DESTROY {
+ my $self = shift;
+
+ return if ${^GLOBAL_PHASE} eq 'DESTRUCT';
+
+ $self->{handle}->close();
+ }
+
+Note that this variable was added in Perl 5.14.0. If you want to detect
+the global destruction phase on older versions of Perl, you can use the
+C<Devel::GlobalDestruction> module on CPAN.
+
+If your C<DESTROY> method issues a warning during global destruction,
+the Perl interpreter will append the string " during global
+destruction" the warning.
+
+During global destruction, Perl will always garbage collect objects
+before unblessed references. See L<perlhacktips/PERL_DESTRUCT_LEVEL>
+for more information about global destruction.
+
+=head2 Non-Hash Objects
+
+All the examples so far have shown objects based on a blessed hash.
+However, it's possible to bless any type of data structure or referent,
+including scalars, globs, and subroutines. You may see this sort of
+thing when looking at code in the wild.
+
+Here's an example of a module as a blessed scalar:
+
+ package Time;
+
+ use strict;
+ use warnings;
+
+ sub new {
+ my $class = shift;
+
+ my $time = time;
+ return bless \$time, $class;
+ }
+
+ sub epoch {
+ my $self = shift;
+ return ${ $self };
+ }
+
+ my $time = Time->new();
+ print $time->epoch();
+
+=head2 Inside-Out objects
+
+In the past, the Perl community experimented with a technique called
+"inside-out objects". An inside-out object stores its data outside of
+the object's reference, indexed on a unique property of the object,
+such as its memory address, rather than in the object itself. This has
+the advantage of enforcing the encapsulation of object attributes,
+since their data is not stored in the object itself.
+
+This technique was popular for a while (and was recommended in Damian
+Conway's I<Perl Best Practices>), but never achieved universal
+adoption. The L<Object::InsideOut> module on CPAN provides a
+comprehensive implementation of this technique, and you may see it or
+other inside-out modules in the wild.
+
+Here is a simple example of the technique, using the
+L<Hash::Util::FieldHash> core module. This module was added to the core
+to support inside-out object implementations.
+
+ package Time;
+
+ use strict;
+ use warnings;
+
+ use Hash::Util::FieldHash 'fieldhash';
+
+ fieldhash my %time_for;
+
+ sub new {
+ my $class = shift;
+
+ my $self = bless \( my $object ), $class;
+
+ $time_for{$self} = time;
+
+ return $self;
+ }
+
+ sub epoch {
+ my $self = shift;
+
+ return $time_for{$self};
+ }
+
+ my $time = Time->new;
+ print $time->epoch;
+
+=head2 Pseudo-hashes
+
+The pseudo-hash feature was an experimental feature introduced in
+earlier versions of Perl and removed in 5.10.0. A pseudo-hash is an
+array reference which can be accessed using named keys like a hash. You
+may run in to some code in the wild which uses it. See the L<fields>
+pragma for more information.
=head1 SEE ALSO
A kinder, gentler tutorial on object-oriented programming in Perl can
-be found in L<perltoot>, L<perlboot> and L<perltooc>. You should
-also check out L<perlbot> for other object tricks, traps, and tips, as
-well as L<perlmodlib> for some style guides on constructing both
-modules and classes.
+be found in L<perlootut>. You should also check out L<perlmodlib> for
+some style guides on constructing both modules and classes.
+
diff --git a/Master/tlpkg/tlperl/lib/pods/perlootut.pod b/Master/tlpkg/tlperl/lib/pods/perlootut.pod
new file mode 100644
index 00000000000..b2e3500b358
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/pods/perlootut.pod
@@ -0,0 +1,741 @@
+=encoding utf8
+
+=for comment
+Consistent formatting of this file is achieved with:
+ perl ./Porting/podtidy pod/perlootut.pod
+
+=head1 NAME
+
+perlootut - Object-Oriented Programming in Perl Tutorial
+
+=head1 DATE
+
+This document was created in February, 2011.
+
+=head1 DESCRIPTION
+
+This document provides an introduction to object-oriented programming
+in Perl. It begins with a brief overview of the concepts behind object
+oriented design. Then it introduces several different OO systems from
+L<CPAN|http://search.cpan.org> which build on top of what Perl
+provides.
+
+By default, Perl's built-in OO system is very minimal, leaving you to
+do most of the work. This minimalism made a lot of sense in 1994, but
+in the years since Perl 5.0 we've seen a number of common patterns
+emerge in Perl OO. Fortunately, Perl's flexibility has allowed a rich
+ecosystem of Perl OO systems to flourish.
+
+If you want to know how Perl OO works under the hood, the L<perlobj>
+document explains the nitty gritty details.
+
+This document assumes that you already understand the basics of Perl
+syntax, variable types, operators, and subroutine calls. If you don't
+understand these concepts yet, please read L<perlintro> first. You
+should also read the L<perlsyn>, L<perlop>, and L<perlsub> documents.
+
+=head1 OBJECT-ORIENTED FUNDAMENTALS
+
+Most object systems share a number of common concepts. You've probably
+heard terms like "class", "object, "method", and "attribute" before.
+Understanding the concepts will make it much easier to read and write
+object-oriented code. If you're already familiar with these terms, you
+should still skim this section, since it explains each concept in terms
+of Perl's OO implementation.
+
+Perl's OO system is class-based. Class-based OO is fairly common. It's
+used by Java, C++, C#, Python, Ruby, and many other languages. There
+are other object orientation paradigms as well. JavaScript is the most
+popular language to use another paradigm. JavaScript's OO system is
+prototype-based.
+
+=head2 Object
+
+An B<object> is a data structure that bundles together data and
+subroutines which operate on that data. An object's data is called
+B<attributes>, and its subroutines are called B<methods>. An object can
+be thought of as a noun (a person, a web service, a computer).
+
+An object represents a single discrete thing. For example, an object
+might represent a file. The attributes for a file object might include
+its path, content, and last modification time. If we created an object
+to represent F</etc/hostname> on a machine named "foo.example.com",
+that object's path would be "/etc/hostname", its content would be
+"foo\n", and it's last modification time would be 1304974868 seconds
+since the beginning of the epoch.
+
+The methods associated with a file might include C<rename()> and
+C<write()>.
+
+In Perl most objects are hashes, but the OO systems we recommend keep
+you from having to worry about this. In practice, it's best to consider
+an object's internal data structure opaque.
+
+=head2 Class
+
+A B<class> defines the behavior of a category of objects. A class is a
+name for a category (like "File"), and a class also defines the
+behavior of objects in that category.
+
+All objects belong to a specific class. For example, our
+F</etc/hostname> object belongs to the C<File> class. When we want to
+create a specific object, we start with its class, and B<construct> or
+B<instantiate> an object. A specific object is often referred to as an
+B<instance> of a class.
+
+In Perl, any package can be a class. The difference between a package
+which is a class and one which isn't is based on how the package is
+used. Here's our "class declaration" for the C<File> class:
+
+ package File;
+
+In Perl, there is no special keyword for constructing an object.
+However, most OO modules on CPAN use a method named C<new()> to
+construct a new object:
+
+ my $hostname = File->new(
+ path => '/etc/hostname',
+ content => "foo\n",
+ last_mod_time => 1304974868,
+ );
+
+(Don't worry about that C<< -> >> operator, it will be explained
+later.)
+
+=head3 Blessing
+
+As we said earlier, most Perl objects are hashes, but an object can be
+an instance of any Perl data type (scalar, array, etc.). Turning a
+plain data structure into an object is done by B<blessing> that data
+structure using Perl's C<bless> function.
+
+While we strongly suggest you don't build your objects from scratch,
+you should know the term B<bless>. A B<blessed> data structure (aka "a
+referent") is an object. We sometimes say that an object has been
+"blessed into a class".
+
+Once a referent has been blessed, the C<blessed> function from the
+L<Scalar::Util> core module can tell us its class name. This subroutine
+returns an object's class when passed an object, and false otherwise.
+
+ use Scalar::Util 'blessed';
+
+ print blessed($hash); # undef
+ print blessed($hostname); # File
+
+=head3 Constructor
+
+A B<constructor> creates a new object. In Perl, a class's constructor
+is just another method, unlike some other languages, which provide
+syntax for constructors. Most Perl classes use C<new> as the name for
+their constructor:
+
+ my $file = File->new(...);
+
+=head2 Methods
+
+You already learned that a B<method> is a subroutine that operates on
+an object. You can think of a method as the things that an object can
+I<do>. If an object is a noun, then methods are its verbs (save, print,
+open).
+
+In Perl, methods are simply subroutines that live in a class's package.
+Methods are always written to receive the object as their first
+argument:
+
+ sub print_info {
+ my $self = shift;
+
+ print "This file is at ", $self->path, "\n";
+ }
+
+ $file->print_info;
+ # The file is at /etc/hostname
+
+What makes a method special is I<how it's called>. The arrow operator
+(C<< -> >>) tells Perl that we are calling a method.
+
+When we make a method call, Perl arranges for the method's B<invocant>
+to be passed as the first argument. B<Invocant> is a fancy name for the
+thing on the left side of the arrow. The invocant can either be a class
+name or an object. We can also pass additional arguments to the method:
+
+ sub print_info {
+ my $self = shift;
+ my $prefix = shift // "This file is at ";
+
+ print $prefix, ", ", $self->path, "\n";
+ }
+
+ $file->print_info("The file is located at ");
+ # The file is located at /etc/hostname
+
+=head2 Attributes
+
+Each class can define its B<attributes>. When we instantiate an object,
+we assign values to those attributes. For example, every C<File> object
+has a path. Attributes are sometimes called B<properties>.
+
+Perl has no special syntax for attributes. Under the hood, attributes
+are often stored as keys in the object's underlying hash, but don't
+worry about this.
+
+We recommend that you only access attributes via B<accessor> methods.
+These are methods that can get or set the value of each attribute. We
+saw this earlier in the C<print_info()> example, which calls C<<
+$self->path >>.
+
+You might also see the terms B<getter> and B<setter>. These are two
+types of accessors. A getter gets the attribute's value, while a setter
+sets it. Another term for a setter is B<mutator>
+
+Attributes are typically defined as read-only or read-write. Read-only
+attributes can only be set when the object is first created, while
+read-write attributes can be altered at any time.
+
+The value of an attribute may itself be another object. For example,
+instead of returning its last mod time as a number, the C<File> class
+could return a L<DateTime> object representing that value.
+
+It's possible to have a class that does not expose any publicly
+settable attributes. Not every class has attributes and methods.
+
+=head2 Polymorphism
+
+B<Polymorphism> is a fancy way of saying that objects from two
+different classes share an API. For example, we could have C<File> and
+C<WebPage> classes which both have a C<print_content()> method. This
+method might produce different output for each class, but they share a
+common interface.
+
+While the two classes may differ in many ways, when it comes to the
+C<print_content()> method, they are the same. This means that we can
+try to call the C<print_content()> method on an object of either class,
+and B<we don't have to know what class the object belongs to!>
+
+Polymorphism is one of the key concepts of object-oriented design.
+
+=head2 Inheritance
+
+B<Inheritance> lets you create a specialized version of an existing
+class. Inheritance lets the new class to reuse the methods and
+attributes of another class.
+
+For example, we could create an C<File::MP3> class which B<inherits>
+from C<File>. An C<File::MP3> B<is-a> I<more specific> type of C<File>.
+All mp3 files are files, but not all files are mp3 files.
+
+We often refer to inheritance relationships as B<parent-child> or
+C<superclass/subclass> relationships. Sometimes we say that the child
+has an B<is-a> relationship with its parent class.
+
+C<File> is a B<superclass> of C<File::MP3>, and C<File::MP3> is a
+B<subclass> of C<File>.
+
+ package File::MP3;
+
+ use parent 'File';
+
+The L<parent> module is one of several ways that Perl lets you define
+inheritance relationships.
+
+Perl allows multiple inheritance, which means that a class can inherit
+from multiple parents. While this is possible, we strongly recommend
+against it. Generally, you can use B<roles> to do everything you can do
+with multiple inheritance, but in a cleaner way.
+
+Note that there's nothing wrong with defining multiple subclasses of a
+given class. This is both common and safe. For example, we might define
+C<File::MP3::FixedBitrate> and C<File::MP3::VariableBitrate> classes to
+distinguish between different types of mp3 file.
+
+=head3 Overriding methods and method resolution
+
+Inheritance allows two classes to share code. By default, every method
+in the parent class is also available in the child. The child can
+explicitly B<override> a parent's method to provide its own
+implementation. For example, if we have an C<File::MP3> object, it has
+the C<print_info()> method from C<File>:
+
+ my $cage = File::MP3->new(
+ path => 'mp3s/My-Body-Is-a-Cage.mp3',
+ content => $mp3_data,
+ last_mod_time => 1304974868,
+ title => 'My Body Is a Cage',
+ );
+
+ $cage->print_info;
+ # The file is at mp3s/My-Body-Is-a-Cage.mp3
+
+If we wanted to include the mp3's title in the greeting, we could
+override the method:
+
+ package File::MP3;
+
+ use parent 'File';
+
+ sub print_info {
+ my $self = shift;
+
+ print "This file is at ", $self->path, "\n";
+ print "Its title is ", $self->title, "\n";
+ }
+
+ $cage->print_info;
+ # The file is at mp3s/My-Body-Is-a-Cage.mp3
+ # Its title is My Body Is a Cage
+
+The process of determining what method should be used is called
+B<method resolution>. What Perl does is look at the object's class
+first (C<File::MP3> in this case). If that class defines the method,
+then that class's version of the method is called. If not, Perl looks
+at each parent class in turn. For C<File::MP3>, its only parent is
+C<File>. If C<File::MP3> does not define the method, but C<File> does,
+then Perl calls the method in C<File>.
+
+If C<File> inherited from C<DataSource>, which inherited from C<Thing>,
+then Perl would keep looking "up the chain" if necessary.
+
+It is possible to explicitly call a parent method from a child:
+
+ package File::MP3;
+
+ use parent 'File';
+
+ sub print_info {
+ my $self = shift;
+
+ $self->SUPER::print_info();
+ print "Its title is ", $self->title, "\n";
+ }
+
+The C<SUPER::> bit tells Perl to look for the C<print_info()> in the
+C<File::MP3> class's inheritance chain. When it finds the parent class
+that implements this method, the method is called.
+
+We mentioned multiple inheritance earlier. The main problem with
+multiple inheritance is that it greatly complicates method resolution.
+See L<perlobj> for more details.
+
+=head2 Encapsulation
+
+B<Encapsulation> is the idea that an object is opaque. When another
+developer uses your class, they don't need to know I<how> it is
+implemented, they just need to know I<what> it does.
+
+Encapsulation is important for several reasons. First, it allows you to
+separate the public API from the private implementation. This means you
+can change that implementation without breaking the API.
+
+Second, when classes are well encapsulated, they become easier to
+subclass. Ideally, a subclass uses the same APIs to access object data
+that its parent class uses. In reality, subclassing sometimes involves
+violating encapsulation, but a good API can minimize the need to do
+this.
+
+We mentioned earlier that most Perl objects are implemented as hashes
+under the hood. The principle of encapsulation tells us that we should
+not rely on this. Instead, we should use accessor methods to access the
+data in that hash. The object systems that we recommend below all
+automate the generation of accessor methods. If you use one of them,
+you should never have to access the object as a hash directly.
+
+=head2 Composition
+
+In object-oriented code, we often find that one object references
+another object. This is called B<composition>, or a B<has-a>
+relationship.
+
+Earlier, we mentioned that the C<File> class's C<last_mod_time>
+accessor could return a L<DateTime> object. This is a perfect example
+of composition. We could go even further, and make the C<path> and
+C<content> accessors return objects as well. The C<File> class would
+then be B<composed> of several other objects.
+
+=head2 Roles
+
+B<Roles> are something that a class I<does>, rather than something that
+it I<is>. Roles are relatively new to Perl, but have become rather
+popular. Roles are B<applied> to classes. Sometimes we say that classes
+B<consume> roles.
+
+Roles are an alternative to inheritance for providing polymorphism.
+Let's assume we have two classes, C<Radio> and C<Computer>. Both of
+these things have on/off switches. We want to model that in our class
+definitions.
+
+We could have both classes inherit from a common parent, like
+C<Machine>, but not all machines have on/off switches. We could create
+a parent class called C<HasOnOffSwitch>, but that is very artificial.
+Radios and computers are not specializations of this parent. This
+parent is really a rather ridiculous creation.
+
+This is where roles come in. It makes a lot of sense to create a
+C<HasOnOffSwitch> role and apply it to both classes. This role would
+define a known API like providing C<turn_on()> and C<turn_off()>
+methods.
+
+Perl does not have any built-in way to express roles. In the past,
+people just bit the bullet and used multiple inheritance. Nowadays,
+there are several good choices on CPAN for using roles.
+
+=head2 When to Use OO
+
+Object Orientation is not the best solution to every problem. In I<Perl
+Best Practices> (copyright 2004, Published by O'Reilly Media, Inc.),
+Damian Conway provides a list of criteria to use when deciding if OO is
+the right fit for your problem:
+
+=over 4
+
+=item *
+
+The system being designed is large, or is likely to become large.
+
+=item *
+
+The data can be aggregated into obvious structures, especially if
+there's a large amount of data in each aggregate.
+
+=item *
+
+The various types of data aggregate form a natural hierarchy that
+facilitates the use of inheritance and polymorphism.
+
+=item *
+
+You have a piece of data on which many different operations are
+applied.
+
+=item *
+
+You need to perform the same general operations on related types of
+data, but with slight variations depending on the specific type of data
+the operations are applied to.
+
+=item *
+
+It's likely you'll have to add new data types later.
+
+=item *
+
+The typical interactions between pieces of data are best represented by
+operators.
+
+=item *
+
+The implementation of individual components of the system is likely to
+change over time.
+
+=item *
+
+The system design is already object-oriented.
+
+=item *
+
+Large numbers of other programmers will be using your code modules.
+
+=back
+
+=head1 PERL OO SYSTEMS
+
+As we mentioned before, Perl's built-in OO system is very minimal, but
+also quite flexible. Over the years, many people have developed systems
+which build on top of Perl's built-in system to provide more features
+and convenience.
+
+We strongly recommend that you use one of these systems. Even the most
+minimal of them eliminates a lot of repetitive boilerplate. There's
+really no good reason to write your classes from scratch in Perl.
+
+If you are interested in the guts underlying these systems, check out
+L<perlobj>.
+
+=head2 Moose
+
+L<Moose> bills itself as a "postmodern object system for Perl 5". Don't
+be scared, the "postmodern" label is a callback to Larry's description
+of Perl as "the first postmodern computer language".
+
+C<Moose> provides a complete, modern OO system. Its biggest influence
+is the Common Lisp Object System, but it also borrows ideas from
+Smalltalk and several other languages. C<Moose> was created by Stevan
+Little, and draws heavily from his work on the Perl 6 OO design.
+
+Here is our C<File> class using C<Moose>:
+
+ package File;
+ use Moose;
+
+ has path => ( is => 'ro' );
+ has content => ( is => 'ro' );
+ has last_mod_time => ( is => 'ro' );
+
+ sub print_info {
+ my $self = shift;
+
+ print "This file is at ", $self->path, "\n";
+ }
+
+C<Moose> provides a number of features:
+
+=over 4
+
+=item * Declarative sugar
+
+C<Moose> provides a layer of declarative "sugar" for defining classes.
+That sugar is just a set of exported functions that make declaring how
+your class works simpler and more palatable. This lets you describe
+I<what> your class is, rather than having to tell Perl I<how> to
+implement your class.
+
+The C<has()> subroutine declares an attribute, and C<Moose>
+automatically creates accessors for these attributes. It also takes
+care of creating a C<new()> method for you. This constructor knows
+about the attributes you declared, so you can set them when creating a
+new C<File>.
+
+=item * Roles built-in
+
+C<Moose> lets you define roles the same way you define classes:
+
+ package HasOnOfSwitch;
+ use Moose::Role;
+
+ has is_on => (
+ is => 'rw',
+ isa => 'Bool',
+ );
+
+ sub turn_on {
+ my $self = shift;
+ $self->is_on(1);
+ }
+
+ sub turn_off {
+ my $self = shift;
+ $self->is_on(0);
+ }
+
+=item * A miniature type system
+
+In the example above, you can see that we passed C<< isa => 'Bool' >>
+to C<has()> when creating our C<is_on> attribute. This tells C<Moose>
+that this attribute must be a boolean value. If we try to set it to an
+invalid value, our code will throw an error.
+
+=item * Full introspection and manipulation
+
+Perl's built-in introspection features are fairly minimal. C<Moose>
+builds on top of them and creates a full introspection layer for your
+classes. This lets you ask questions like "what methods does the File
+class implement?" It also lets you modify your classes
+programmatically.
+
+=item * Self-hosted and extensible
+
+C<Moose> describes itself using its own introspection API. Besides
+being a cool trick, this means that you can extend C<Moose> using
+C<Moose> itself.
+
+=item * Rich ecosystem
+
+There is a rich ecosystem of C<Moose> extensions on CPAN under the
+L<MooseX|http://search.cpan.org/search?query=MooseX&mode=dist>
+namespace. In addition, many modules on CPAN already use C<Moose>,
+providing you with lots of examples to learn from.
+
+=item * Many more features
+
+C<Moose> is a very powerful tool, and we can't cover all of its
+features here. We encourage you to learn more by reading the C<Moose>
+documentation, starting with
+L<Moose::Manual|http://search.cpan.org/perldoc?Moose::Manual>.
+
+=back
+
+Of course, C<Moose> isn't perfect.
+
+C<Moose> can make your code slower to load. C<Moose> itself is not
+small, and it does a I<lot> of code generation when you define your
+class. This code generation means that your runtime code is as fast as
+it can be, but you pay for this when your modules are first loaded.
+
+This load time hit can be a problem when startup speed is important,
+such as with a command-line script or a "plain vanilla" CGI script that
+must be loaded each time it is executed.
+
+Before you panic, know that many people do use C<Moose> for
+command-line tools and other startup-sensitive code. We encourage you
+to try C<Moose> out first before worrying about startup speed.
+
+C<Moose> also has several dependencies on other modules. Most of these
+are small stand-alone modules, a number of which have been spun off
+from C<Moose>. C<Moose> itself, and some of its dependencies, require a
+compiler. If you need to install your software on a system without a
+compiler, or if having I<any> dependencies is a problem, then C<Moose>
+may not be right for you.
+
+=head3 Mouse
+
+If you try C<Moose> and find that one of these issues is preventing you
+from using C<Moose>, we encourage you to consider L<Mouse> next.
+C<Mouse> implements a subset of C<Moose>'s functionality in a simpler
+package. For all features that it does implement, the end-user API is
+I<identical> to C<Moose>, meaning you can switch from C<Mouse> to
+C<Moose> quite easily.
+
+C<Mouse> does not implement most of C<Moose>'s introspection API, so
+it's often faster when loading your modules. Additionally, all of its
+I<required> dependencies ship with the Perl core, and it can run
+without a compiler. If you do have a compiler, C<Mouse> will use it to
+compile some of its code for a speed boost.
+
+Finally, it ships with a C<Mouse::Tiny> module that takes most of
+C<Mouse>'s features and bundles them up in a single module file. You
+can copy this module file into your application's library directory for
+easy bundling.
+
+The C<Moose> authors hope that one day C<Mouse> can be made obsolete by
+improving C<Moose> enough, but for now it provides a worthwhile
+alternative to C<Moose>.
+
+=head2 Class::Accessor
+
+L<Class::Accessor> is the polar opposite of C<Moose>. It provides very
+few features, nor is it self-hosting.
+
+It is, however, very simple, pure Perl, and it has no non-core
+dependencies. It also provides a "Moose-like" API on demand for the
+features it supports.
+
+Even though it doesn't do much, it is still preferable to writing your
+own classes from scratch.
+
+Here's our C<File> class with C<Class::Accessor>:
+
+ package File;
+ use Class::Accessor 'antlers';
+
+ has path => ( is => 'ro' );
+ has content => ( is => 'ro' );
+ has last_mod_time => ( is => 'ro' );
+
+ sub print_info {
+ my $self = shift;
+
+ print "This file is at ", $self->path, "\n";
+ }
+
+The C<antlers> import flag tells C<Class::Accessor> that you want to
+define your attributes using C<Moose>-like syntax. The only parameter
+that you can pass to C<has> is C<is>. We recommend that you use this
+Moose-like syntax if you choose C<Class::Accessor> since it means you
+will have a smoother upgrade path if you later decide to move to
+C<Moose>.
+
+Like C<Moose>, C<Class::Accessor> generates accessor methods and a
+constructor for your class.
+
+=head2 Object::Tiny
+
+Finally, we have L<Object::Tiny>. This module truly lives up to its
+name. It has an incredibly minimal API and absolutely no dependencies
+(core or not). Still, we think it's a lot easier to use than writing
+your own OO code from scratch.
+
+Here's our C<File> class once more:
+
+ package File;
+ use Object::Tiny qw( path content last_mod_time );
+
+ sub print_info {
+ my $self = shift;
+
+ print "This file is at ", $self->path, "\n";
+ }
+
+That's it!
+
+With C<Object::Tiny>, all accessors are read-only. It generates a
+constructor for you, as well as the accessors you define.
+
+=head2 Role::Tiny
+
+As we mentioned before, roles provide an alternative to inheritance,
+but Perl does not have any built-in role support. If you choose to use
+Moose, it comes with a full-fledged role implementation. However, if
+you use one of our other recommended OO modules, you can still use
+roles with L<Role::Tiny>
+
+C<Role::Tiny> provides some of the same features as Moose's role
+system, but in a much smaller package. Most notably, it doesn't support
+any sort of attribute declaration, so you have to do that by hand.
+Still, it's useful, and works well with C<Class::Accessor> and
+C<Object::Tiny>
+
+=head2 OO System Summary
+
+Here's a brief recap of the options we covered:
+
+=over 4
+
+=item * L<Moose>
+
+C<Moose> is the maximal option. It has a lot of features, a big
+ecosystem, and a thriving user base. We also covered L<Mouse> briefly.
+C<Mouse> is C<Moose> lite, and a reasonable alternative when Moose
+doesn't work for your application.
+
+=item * L<Class::Accessor>
+
+C<Class::Accessor> does a lot less than C<Moose>, and is a nice
+alternative if you find C<Moose> overwhelming. It's been around a long
+time and is well battle-tested. It also has a minimal C<Moose>
+compatibility mode which makes moving from C<Class::Accessor> to
+C<Moose> easy.
+
+=item * L<Object::Tiny>
+
+C<Object::Tiny> is the absolute minimal option. It has no dependencies,
+and almost no syntax to learn. It's a good option for a super minimal
+environment and for throwing something together quickly without having
+to worry about details.
+
+=item * L<Role::Tiny>
+
+Use C<Role::Tiny> with C<Class::Accessor> or C<Object::Tiny> if you
+find yourself considering multiple inheritance. If you go with
+C<Moose>, it comes with its own role implementation.
+
+=back
+
+=head2 Other OO Systems
+
+There are literally dozens of other OO-related modules on CPAN besides
+those covered here, and you're likely to run across one or more of them
+if you work with other people's code.
+
+In addition, plenty of code in the wild does all of its OO "by hand",
+using just the Perl built-in OO features. If you need to maintain such
+code, you should read L<perlobj> to understand exactly how Perl's
+built-in OO works.
+
+=head1 CONCLUSION
+
+As we said before, Perl's minimal OO system has led to a profusion of
+OO systems on CPAN. While you can still drop down to the bare metal and
+write your classes by hand, there's really no reason to do that with
+modern Perl.
+
+For small systems, L<Object::Tiny> and L<Class::Accessor> both provide
+minimal object systems that take care of basic boilerplate for you.
+
+For bigger projects, L<Moose> provides a rich set of features that will
+let you focus on implementing your business logic.
+
+We encourage you to play with and evaluate L<Moose>,
+L<Class::Accessor>, and L<Object::Tiny> to see which OO system is right
+for you.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perlop.pod b/Master/tlpkg/tlperl/lib/pods/perlop.pod
index 665a6b58aba..7b2d0a3acd0 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlop.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlop.pod
@@ -190,7 +190,7 @@ internally.)
=head2 Symbolic Unary Operators
X<unary operator> X<operator, unary>
-Unary "!" performs logical negation, i.e., "not". See also C<not> for a lower
+Unary "!" performs logical negation, that is, "not". See also C<not> for a lower
precedence version of this.
X<!>
@@ -207,7 +207,7 @@ string cannot be cleanly converted to a numeric, Perl will give the warning
B<Argument "the string" isn't numeric in negation (-) at ...>.
X<-> X<negation, arithmetic>
-Unary "~" performs bitwise negation, i.e., 1's complement. For
+Unary "~" performs bitwise negation, that is, 1's complement. For
example, C<0666 & ~027> is 0640. (See also L<Integer Arithmetic> and
L<Bitwise String Operators>.) Note that the width of the result is
platform-dependent: ~0 is 32 bits wide on a 32-bit platform, but 64
@@ -253,7 +253,7 @@ If the right argument is an expression rather than a search pattern,
substitution, or transliteration, it is interpreted as a search pattern at run
time. Note that this means that its contents will be interpolated twice, so
- '\\' =~ q'\\';
+ '\\' =~ q'\\';
is not ok, as the regex engine will end up trying to compile the
pattern C<\>, which it will consider a syntax error.
@@ -279,7 +279,7 @@ Given integer
operands C<$a> and C<$b>: If C<$b> is positive, then C<$a % $b> is
C<$a> minus the largest multiple of C<$b> less than or equal to
C<$a>. If C<$b> is negative, then C<$a % $b> is C<$a> minus the
-smallest multiple of C<$b> that is not less than C<$a> (i.e. the
+smallest multiple of C<$b> that is not less than C<$a> (that is, the
result will be less than or equal to zero). If the operands
C<$a> and C<$b> are floating point values and the absolute value of
C<$b> (that is C<abs($b)>) is less than C<(UV_MAX + 1)>, only
@@ -317,13 +317,13 @@ X<x>
=head2 Additive Operators
X<operator, additive>
-Binary "+" returns the sum of two numbers.
+Binary C<+> returns the sum of two numbers.
X<+>
-Binary "-" returns the difference of two numbers.
+Binary C<-> returns the difference of two numbers.
X<->
-Binary "." concatenates two strings.
+Binary C<.> concatenates two strings.
X<string, concatenation> X<concatenation>
X<cat> X<concat> X<concatenate> X<.>
@@ -332,16 +332,16 @@ 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>
-Binary "<<" returns the value of its left argument shifted left by the
+Binary C<<< << >>> returns the value of its left argument shifted left by the
number of bits specified by the right argument. Arguments should be
integers. (See also L<Integer Arithmetic>.)
-Binary ">>" returns the value of its left argument shifted right by
+Binary C<<< >> >>> returns the value of its left argument shifted right by
the number of bits specified by the right argument. Arguments should
be integers. (See also L<Integer Arithmetic>.)
-Note that both "<<" and ">>" in Perl are implemented directly using
-"<<" and ">>" in C. If C<use integer> (see L<Integer Arithmetic>) is
+Note that both C<<< << >>> and C<<< >> >>> in Perl are implemented directly using
+C<<< << >>> and C<<< >> >>> in C. If C<use integer> (see L<Integer Arithmetic>) is
in force then signed C integers are used, else unsigned C integers are
used. Either way, the implementation isn't going to generate results
larger than the size of the integer type Perl was built with (32 bits
@@ -352,6 +352,15 @@ because it is undefined also in C. In other words, using 32-bit
integers, C<< 1 << 32 >> is undefined. Shifting by a negative number
of bits is also undefined.
+If you get tired of being subject to your platform's native integers,
+the C<use bigint> pragma neatly sidesteps the issue altogether:
+
+ print 20 << 20; # 20971520
+ print 20 << 40; # 5120 on 32-bit machines,
+ # 21990232555520 on 64-bit machines
+ use bigint;
+ print 20 << 100; # 25353012004564588029934064107520
+
=head2 Named Unary Operators
X<operator, named unary>
@@ -362,7 +371,7 @@ If any list operator (print(), etc.) or any unary operator (chdir(), etc.)
is followed by a left parenthesis as the next token, the operator and
arguments within parentheses are taken to be of highest precedence,
just like a normal function call. For example,
-because named unary operators are higher precedence than ||:
+because named unary operators are higher precedence than C<||>:
chdir $foo || die; # (chdir $foo) || die
chdir($foo) || die; # (chdir $foo) || die
@@ -392,6 +401,13 @@ See also L<"Terms and List Operators (Leftward)">.
=head2 Relational Operators
X<relational operator> X<operator, relational>
+Perl operators that return true or false generally return values
+that can be safely used as numbers. For example, the relational
+operators in this section and the equality operators in the next
+one return C<1> for true and a special version of the defined empty
+string, C<"">, which counts as a zero but is exempt from warnings
+about improper numeric conversions, just as C<"0 but true"> is.
+
Binary "<" returns true if the left argument is numerically less than
the right argument.
X<< < >>
@@ -444,8 +460,11 @@ returns true, as does NaN != anything else. If your platform doesn't
support NaNs then NaN is just a string with numeric value 0.
X<< <=> >> X<spaceship>
- perl -le '$a = "NaN"; print "No NaN support here" if $a == $a'
- perl -le '$a = "NaN"; print "NaN support here" if $a != $a'
+ $ perl -le '$a = "NaN"; print "No NaN support here" if $a == $a'
+ $ perl -le '$a = "NaN"; print "NaN support here" if $a != $a'
+
+(Note that the L<bigint>, L<bigrat>, and L<bignum> pragmas all
+support "NaN".)
Binary "eq" returns true if the left argument is stringwise equal to
the right argument.
@@ -460,12 +479,307 @@ argument is stringwise less than, equal to, or greater than the right
argument.
X<cmp>
-Binary "~~" does a smart match between its arguments. Smart matching
-is described in L<perlsyn/"Smart matching in detail">.
+Binary "~~" does a smartmatch between its arguments. Smart matching
+is described in the next section.
X<~~>
"lt", "le", "ge", "gt" and "cmp" use the collation (sort) order specified
-by the current locale if C<use locale> is in effect. See L<perllocale>.
+by the current locale if a legacy C<use locale> (but not
+C<use locale ':not_characters'>) is in effect. See
+L<perllocale>. Do not mix these with Unicode, only with legacy binary
+encodings. The standard L<Unicode::Collate> and
+L<Unicode::Collate::Locale> modules offer much more powerful solutions to
+collation issues.
+
+=head2 Smartmatch Operator
+
+First available in Perl 5.10.1 (the 5.10.0 version behaved differently),
+binary C<~~> does a "smartmatch" between its arguments. This is mostly
+used implicitly in the C<when> construct described in L<perlsyn>, although
+not all C<when> clauses call the smartmatch operator. Unique among all of
+Perl's operators, the smartmatch operator can recurse.
+
+It is also unique in that all other Perl operators impose a context
+(usually string or numeric context) on their operands, autoconverting
+those operands to those imposed contexts. In contrast, smartmatch
+I<infers> contexts from the actual types of its operands and uses that
+type information to select a suitable comparison mechanism.
+
+The C<~~> operator compares its operands "polymorphically", determining how
+to compare them according to their actual types (numeric, string, array,
+hash, etc.) Like the equality operators with which it shares the same
+precedence, C<~~> returns 1 for true and C<""> for false. It is often best
+read aloud as "in", "inside of", or "is contained in", because the left
+operand is often looked for I<inside> the right operand. That makes the
+order of the operands to the smartmatch operand often opposite that of
+the regular match operator. In other words, the "smaller" thing is usually
+placed in the left operand and the larger one in the right.
+
+The behavior of a smartmatch depends on what type of things its arguments
+are, as determined by the following table. The first row of the table
+whose types apply determines the smartmatch behavior. Because what
+actually happens is mostly determined by the type of the second operand,
+the table is sorted on the right operand instead of on the left.
+
+ Left Right Description and pseudocode
+ ===============================================================
+ Any undef check whether Any is undefined
+ like: !defined Any
+
+ Any Object invoke ~~ overloading on Object, or die
+
+ Right operand is an ARRAY:
+
+ Left Right Description and pseudocode
+ ===============================================================
+ ARRAY1 ARRAY2 recurse on paired elements of ARRAY1 and ARRAY2[2]
+ like: (ARRAY1[0] ~~ ARRAY2[0])
+ && (ARRAY1[1] ~~ ARRAY2[1]) && ...
+ HASH ARRAY any ARRAY elements exist as HASH keys
+ like: grep { exists HASH->{$_} } ARRAY
+ Regexp ARRAY any ARRAY elements pattern match Regexp
+ like: grep { /Regexp/ } ARRAY
+ undef ARRAY undef in ARRAY
+ like: grep { !defined } ARRAY
+ Any ARRAY smartmatch each ARRAY element[3]
+ like: grep { Any ~~ $_ } ARRAY
+
+ Right operand is a HASH:
+
+ Left Right Description and pseudocode
+ ===============================================================
+ HASH1 HASH2 all same keys in both HASHes
+ like: keys HASH1 ==
+ grep { exists HASH2->{$_} } keys HASH1
+ ARRAY HASH any ARRAY elements exist as HASH keys
+ like: grep { exists HASH->{$_} } ARRAY
+ Regexp HASH any HASH keys pattern match Regexp
+ like: grep { /Regexp/ } keys HASH
+ undef HASH always false (undef can't be a key)
+ like: 0 == 1
+ Any HASH HASH key existence
+ like: exists HASH->{Any}
+
+ Right operand is CODE:
+
+ Left Right Description and pseudocode
+ ===============================================================
+ ARRAY CODE sub returns true on all ARRAY elements[1]
+ like: !grep { !CODE->($_) } ARRAY
+ HASH CODE sub returns true on all HASH keys[1]
+ like: !grep { !CODE->($_) } keys HASH
+ Any CODE sub passed Any returns true
+ like: CODE->(Any)
+
+Right operand is a Regexp:
+
+ Left Right Description and pseudocode
+ ===============================================================
+ ARRAY Regexp any ARRAY elements match Regexp
+ like: grep { /Regexp/ } ARRAY
+ HASH Regexp any HASH keys match Regexp
+ like: grep { /Regexp/ } keys HASH
+ Any Regexp pattern match
+ like: Any =~ /Regexp/
+
+ Other:
+
+ Left Right Description and pseudocode
+ ===============================================================
+ Object Any invoke ~~ overloading on Object,
+ or fall back to...
+
+ Any Num numeric equality
+ like: Any == Num
+ Num nummy[4] numeric equality
+ like: Num == nummy
+ undef Any check whether undefined
+ like: !defined(Any)
+ Any Any string equality
+ like: Any eq Any
+
+
+Notes:
+
+=over
+
+=item 1.
+Empty hashes or arrays match.
+
+=item 2.
+That is, each element smartmatches the element of the same index in the other array.[3]
+
+=item 3.
+If a circular reference is found, fall back to referential equality.
+
+=item 4.
+Either an actual number, or a string that looks like one.
+
+=back
+
+The smartmatch implicitly dereferences any non-blessed hash or array
+reference, so the C<I<HASH>> and C<I<ARRAY>> entries apply in those cases.
+For blessed references, the C<I<Object>> entries apply. Smartmatches
+involving hashes only consider hash keys, never hash values.
+
+The "like" code entry is not always an exact rendition. For example, the
+smartmatch operator short-circuits whenever possible, but C<grep> does
+not. Also, C<grep> in scalar context returns the number of matches, but
+C<~~> returns only true or false.
+
+Unlike most operators, the smartmatch operator knows to treat C<undef>
+specially:
+
+ use v5.10.1;
+ @array = (1, 2, 3, undef, 4, 5);
+ say "some elements undefined" if undef ~~ @array;
+
+Each operand is considered in a modified scalar context, the modification
+being that array and hash variables are passed by reference to the
+operator, which implicitly dereferences them. Both elements
+of each pair are the same:
+
+ use v5.10.1;
+
+ my %hash = (red => 1, blue => 2, green => 3,
+ orange => 4, yellow => 5, purple => 6,
+ black => 7, grey => 8, white => 9);
+
+ my @array = qw(red blue green);
+
+ say "some array elements in hash keys" if @array ~~ %hash;
+ say "some array elements in hash keys" if \@array ~~ \%hash;
+
+ say "red in array" if "red" ~~ @array;
+ say "red in array" if "red" ~~ \@array;
+
+ say "some keys end in e" if /e$/ ~~ %hash;
+ say "some keys end in e" if /e$/ ~~ \%hash;
+
+Two arrays smartmatch if each element in the first array smartmatches
+(that is, is "in") the corresponding element in the second array,
+recursively.
+
+ use v5.10.1;
+ my @little = qw(red blue green);
+ my @bigger = ("red", "blue", [ "orange", "green" ] );
+ if (@little ~~ @bigger) { # true!
+ say "little is contained in bigger";
+ }
+
+Because the smartmatch operator recurses on nested arrays, this
+will still report that "red" is in the array.
+
+ use v5.10.1;
+ my @array = qw(red blue green);
+ my $nested_array = [[[[[[[ @array ]]]]]]];
+ say "red in array" if "red" ~~ $nested_array;
+
+If two arrays smartmatch each other, then they are deep
+copies of each others' values, as this example reports:
+
+ use v5.12.0;
+ my @a = (0, 1, 2, [3, [4, 5], 6], 7);
+ my @b = (0, 1, 2, [3, [4, 5], 6], 7);
+
+ if (@a ~~ @b && @b ~~ @a) {
+ say "a and b are deep copies of each other";
+ }
+ elsif (@a ~~ @b) {
+ say "a smartmatches in b";
+ }
+ elsif (@b ~~ @a) {
+ say "b smartmatches in a";
+ }
+ else {
+ say "a and b don't smartmatch each other at all";
+ }
+
+
+If you were to set C<$b[3] = 4>, then instead of reporting that "a and b
+are deep copies of each other", it now reports that "b smartmatches in a".
+That because the corresponding position in C<@a> contains an array that
+(eventually) has a 4 in it.
+
+Smartmatching one hash against another reports whether both contain the
+same keys, no more and no less. This could be used to see whether two
+records have the same field names, without caring what values those fields
+might have. For example:
+
+ use v5.10.1;
+ sub make_dogtag {
+ state $REQUIRED_FIELDS = { name=>1, rank=>1, serial_num=>1 };
+
+ my ($class, $init_fields) = @_;
+
+ die "Must supply (only) name, rank, and serial number"
+ unless $init_fields ~~ $REQUIRED_FIELDS;
+
+ ...
+ }
+
+or, if other non-required fields are allowed, use ARRAY ~~ HASH:
+
+ use v5.10.1;
+ sub make_dogtag {
+ state $REQUIRED_FIELDS = { name=>1, rank=>1, serial_num=>1 };
+
+ my ($class, $init_fields) = @_;
+
+ die "Must supply (at least) name, rank, and serial number"
+ unless [keys %{$init_fields}] ~~ $REQUIRED_FIELDS;
+
+ ...
+ }
+
+The smartmatch operator is most often used as the implicit operator of a
+C<when> clause. See the section on "Switch Statements" in L<perlsyn>.
+
+=head3 Smartmatching of Objects
+
+To avoid relying on an object's underlying representation, if the
+smartmatch's right operand is an object that doesn't overload C<~~>,
+it raises the exception "C<Smartmatching a non-overloaded object
+breaks encapsulation>". That's because one has no business digging
+around to see whether something is "in" an object. These are all
+illegal on objects without a C<~~> overload:
+
+ %hash ~~ $object
+ 42 ~~ $object
+ "fred" ~~ $object
+
+However, you can change the way an object is smartmatched by overloading
+the C<~~> operator. This is allowed to extend the usual smartmatch semantics.
+For objects that do have an C<~~> overload, see L<overload>.
+
+Using an object as the left operand is allowed, although not very useful.
+Smartmatching rules take precedence over overloading, so even if the
+object in the left operand has smartmatch overloading, this will be
+ignored. A left operand that is a non-overloaded object falls back on a
+string or numeric comparison of whatever the C<ref> operator returns. That
+means that
+
+ $object ~~ X
+
+does I<not> invoke the overload method with C<I<X>> as an argument.
+Instead the above table is consulted as normal, and based on the type of
+C<I<X>>, overloading may or may not be invoked. For simple strings or
+numbers, in becomes equivalent to this:
+
+ $object ~~ $number ref($object) == $number
+ $object ~~ $string ref($object) eq $string
+
+For example, this reports that the handle smells IOish
+(but please don't really do this!):
+
+ use IO::Handle;
+ my $fh = IO::Handle->new();
+ if ($fh ~~ /\bIO\b/) {
+ say "handle smells IOish";
+ }
+
+That's because it treats C<$fh> as a string like
+C<"IO::Handle=GLOB(0x8039e0)">, then pattern matches against that.
=head2 Bitwise And
X<operator, bitwise, and> X<bitwise and> X<&>
@@ -474,9 +788,9 @@ Binary "&" returns its operands ANDed together bit by bit.
(See also L<Integer Arithmetic> and L<Bitwise String Operators>.)
Note that "&" has lower priority than relational operators, so for example
-the brackets are essential in a test like
+the parentheses are essential in a test like
- print "Even\n" if ($x & 1) == 0;
+ print "Even\n" if ($x & 1) == 0;
=head2 Bitwise Or and Exclusive Or
X<operator, bitwise, or> X<bitwise or> X<|> X<operator, bitwise, xor>
@@ -491,7 +805,7 @@ Binary "^" returns its operands XORed together bit by bit.
Note that "|" and "^" have lower priority than relational operators, so
for example the brackets are essential in a test like
- print "false\n" if (8 | 2) != 10;
+ print "false\n" if (8 | 2) != 10;
=head2 C-style Logical And
X<&&> X<logical and> X<operator, logical, and>
@@ -509,16 +823,18 @@ if the left operand is true, the right operand is not even evaluated.
Scalar or list context propagates down to the right operand if it
is evaluated.
-=head2 C-style Logical Defined-Or
+=head2 Logical Defined-Or
X<//> X<operator, logical, defined-or>
Although it has no direct equivalent in C, Perl's C<//> operator is related
to its C-style or. In fact, it's exactly the same as C<||>, except that it
-tests the left hand side's definedness instead of its truth. Thus, C<$a // $b>
-is similar to C<defined($a) || $b> (except that it returns the value of C<$a>
-rather than the value of C<defined($a)>) and yields the same result as
-C<defined($a) ? $a : $b> (except that the ternary-operator form can be
-used as a lvalue, while C<$a // $b> cannot). This is very useful for
+tests the left hand side's definedness instead of its truth. Thus,
+C<< EXPR1 // EXPR2 >> returns the value of C<< EXPR1 >> if it's defined,
+otherwise, the value of C<< EXPR2 >> is returned. (C<< EXPR1 >> is evaluated
+in scalar context, C<< EXPR2 >> in the context of C<< // >> itself). Usually,
+this is the same result as C<< defined(EXPR1) ? EXPR1 : EXPR2 >> (except that
+the ternary-operator form can be used as a lvalue, while C<< EXPR1 // EXPR2 >>
+cannot). This is very useful for
providing default values for variables. If you actually want to test if
at least one of C<$a> and C<$b> is defined, use C<defined($a // $b)>.
@@ -538,7 +854,7 @@ for selecting between two aggregates for assignment:
@a = scalar(@b) || @c; # really meant this
@a = @b ? @b : @c; # this works fine, though
-As more readable alternatives to C<&&> and C<||> when used for
+As alternatives to C<&&> and C<||> when used for
control flow, Perl provides the C<and> and C<or> operators (see below).
The short-circuit behavior is identical. The precedence of "and"
and "or" is much lower, however, so that you can safely use them after a
@@ -552,6 +868,13 @@ With the C-style operators that would have been written like this:
unlink("alpha", "beta", "gamma")
|| (gripe(), next LINE);
+It would be even more readable to write that this way:
+
+ unless(unlink("alpha", "beta", "gamma")) {
+ gripe();
+ next LINE;
+ }
+
Using "or" for assignment is unlikely to do what you want; see below.
=head2 Range Operators
@@ -659,9 +982,9 @@ the range operator is changed to C<...>, it will also print the
And now some examples as a list operator:
- for (101 .. 200) { print; } # print $_ 100 times
- @foo = @foo[0 .. $#foo]; # an expensive no-op
- @foo = @foo[$#foo-4 .. $#foo]; # slice last 5 items
+ for (101 .. 200) { print } # print $_ 100 times
+ @foo = @foo[0 .. $#foo]; # an expensive no-op
+ @foo = @foo[$#foo-4 .. $#foo]; # slice last 5 items
The range operator (in list context) makes use of the magical
auto-increment algorithm if the operands are strings. You
@@ -675,7 +998,8 @@ to get all normal letters of the English alphabet, or
to get a hexadecimal digit, or
- @z2 = ("01" .. "31"); print $z2[$mday];
+ @z2 = ("01" .. "31");
+ print $z2[$mday];
to get dates with leading zeros.
@@ -695,8 +1019,10 @@ To get the 25 traditional lowercase Greek letters, including both sigmas,
you could use this instead:
use charnames "greek";
- my @greek_small = map { chr }
- ord "\N{alpha}" .. ord "\N{omega}";
+ my @greek_small = map { chr } ( ord("\N{alpha}")
+ ..
+ ord("\N{omega}")
+ );
However, because there are I<many> other lowercase Greek characters than
just those, to match lowercase Greek characters in a regular expression,
@@ -779,7 +1105,12 @@ Modifying an assignment is equivalent to doing the assignment and
then modifying the variable that was assigned to. This is useful
for modifying a copy of something, like this:
- ($tmp = $global) =~ tr [0-9] [a-j];
+ ($tmp = $global) =~ tr/13579/24680/;
+
+Although as of 5.14, that can be also be accomplished this way:
+
+ use v5.14;
+ $tmp = ($global =~ tr/13579/24680/r);
Likewise,
@@ -795,72 +1126,6 @@ lvalues assigned to, and a list assignment in scalar context returns
the number of elements produced by the expression on the right hand
side of the assignment.
-=head2 The Triple-Dot Operator
-X<...> X<... operator> X<yada-yada operator> X<whatever operator>
-X<triple-dot operator>
-
-The triple-dot operator, C<...>, sometimes called the "whatever operator", the
-"yada-yada operator", or the "I<et cetera>" operator, is a placeholder for
-code. Perl parses it without error, but when you try to execute a whatever,
-it throws an exception with the text C<Unimplemented>:
-
- sub unimplemented { ... }
-
- eval { unimplemented() };
- if ($@ eq "Unimplemented" ) {
- say "Oh look, an exception--whatever.";
- }
-
-You can only use the triple-dot operator to stand in for a complete statement.
-These examples of the triple-dot work:
-
- { ... }
-
- sub foo { ... }
-
- ...;
-
- eval { ... };
-
- sub foo {
- my ($self) = shift;
- ...;
- }
-
- do {
- my $variable;
- ...;
- say "Hurrah!";
- } while $cheering;
-
-The yada-yada--or whatever--cannot stand in for an expression that is
-part of a larger statement since the C<...> is also the three-dot version
-of the binary range operator (see L<Range Operators>). These examples of
-the whatever operator are still syntax errors:
-
- print ...;
-
- open(PASSWD, ">", "/dev/passwd") or ...;
-
- if ($condition && ...) { say "Hello" }
-
-There are some cases where Perl can't immediately tell the difference
-between an expression and a statement. For instance, the syntax for a
-block and an anonymous hash reference constructor look the same unless
-there's something in the braces that give Perl a hint. The whatever
-is a syntax error if Perl doesn't guess that the C<{ ... }> is a
-block. In that case, it doesn't think the C<...> is the whatever
-because it's expecting an expression instead of a statement:
-
- my @transformed = map { ... } @input; # syntax error
-
-You can use a C<;> inside your block to denote that the C<{ ... }> is
-a block and not a hash reference constructor. Now the whatever works:
-
- my @transformed = map {; ... } @input; # ; disambiguates
-
- my @transformed = map { ...; } @input; # ; disambiguates
-
=head2 Comma Operator
X<comma> X<operator, comma> X<,>
@@ -872,8 +1137,8 @@ In list context, it's just the list argument separator, and inserts
both its arguments into the list. These arguments are also evaluated
from left to right.
-The C<< => >> operator is a synonym for the comma except that it causes
-its left operand to be interpreted as a string if it begins with a letter
+The C<< => >> operator is a synonym for the comma except that it causes a
+word on its left to be interpreted as a string if it begins with a letter
or underscore and is composed only of letters, digits and underscores.
This includes operands that might otherwise be interpreted as operators,
constants, single number v-strings or function calls. If in doubt about
@@ -899,8 +1164,17 @@ It is I<NOT>:
The C<< => >> operator is helpful in documenting the correspondence
between keys and values in hashes, and other paired elements in lists.
- %hash = ( $key => $value );
- login( $username => $password );
+ %hash = ( $key => $value );
+ login( $username => $password );
+
+The special quoting behavior ignores precedence, and hence may apply to
+I<part> of the left operand:
+
+ print time.shift => "bbb";
+
+That example prints something like "1314363215shiftbbb", because the
+C<< => >> implicitly quotes the C<shift> immediately on its left, ignoring
+the fact that C<time.shift> is the entire left operand.
=head2 List Operators (Rightward)
X<operator, list, rightward> X<list operator>
@@ -909,10 +1183,18 @@ On the right side of a list operator, the comma has very low precedence,
such that it controls all comma-separated expressions found there.
The only operators with lower precedence are the logical operators
"and", "or", and "not", which may be used to evaluate calls to list
-operators without the need for extra parentheses:
+operators without the need for parentheses:
+
+ open HANDLE, "< :utf8", "filename" or die "Can't open: $!\n";
+
+However, some people find that code harder to read than writing
+it with parentheses:
- open HANDLE, "< $file"
- or die "Can't open $file: $!\n";
+ open(HANDLE, "< :utf8", "filename") or die "Can't open: $!\n";
+
+in which case you might as well just use the more customary "||" operator:
+
+ open(HANDLE, "< :utf8", "filename") || die "Can't open: $!\n";
See also discussion of list operators in L<Terms and List Operators (Leftward)>.
@@ -930,9 +1212,9 @@ expressions. It's equivalent to C<&&> except for the very low
precedence. This means that it short-circuits: the right
expression is evaluated only if the left expression is true.
-=head2 Logical or, Defined or, and Exclusive Or
+=head2 Logical or and Exclusive Or
X<operator, logical, or> X<operator, logical, xor>
-X<operator, logical, defined or> X<operator, logical, exclusive or>
+X<operator, logical, exclusive or>
X<or> X<xor>
Binary "or" returns the logical disjunction of the two surrounding
@@ -959,9 +1241,11 @@ takes higher precedence.
Then again, you could always use parentheses.
-Binary "xor" returns the exclusive-OR of the two surrounding expressions.
+Binary C<xor> returns the exclusive-OR of the two surrounding expressions.
It cannot short-circuit (of course).
+There is no low precedence operator for defined-OR.
+
=head2 C Operators Missing From Perl
X<operator, missing from perl> X<&> X<*>
X<typecasting> X<(TYPE)>
@@ -1123,6 +1407,10 @@ table:
\c^ chr(30)
\c? chr(127)
+In other words, it's the character whose code point has had 64 xor'd with
+its uppercase. C<\c?> is DELETE because C<ord("@") ^ 64> is 127, and
+C<\c@> is NULL because the ord of "@" is 64, so xor'ing 64 itself produces 0.
+
Also, C<\c\I<X>> yields C< chr(28) . "I<X>"> for any I<X>, but cannot come at the
end of a string, because the backslash would be parsed as escaping the end
quote.
@@ -1134,9 +1422,9 @@ sequences mean on both ASCII and EBCDIC platforms.
Use of any other character following the "c" besides those listed above is
discouraged, and some are deprecated with the intention of removing
-those in Perl 5.16. What happens for any of these
-other characters currently though, is that the value is derived by inverting
-the 7th bit (0x40).
+those in a later Perl version. What happens for any of these
+other characters currently though, is that the value is derived by xor'ing
+with the seventh bit, which is 64.
To get platform independent controls, you can use C<\N{...}>.
@@ -1158,18 +1446,19 @@ L</[8]> below for details on which character.
Some contexts allow 2 or even 1 digit, but any usage without exactly
three digits, the first being a zero, may give unintended results. (For
-example, see L<perlrebackslash/Octal escapes>.) Starting in Perl 5.14, you may
+example, in a regular expression it may be confused with a backreference;
+see L<perlrebackslash/Octal escapes>.) Starting in Perl 5.14, you may
use C<\o{}> instead, which avoids all these problems. Otherwise, it is best to
use this construct only for ordinals C<\077> and below, remembering to pad to
the left with zeros to make three digits. For larger ordinals, either use
-C<\o{}> , or convert to something else, such as to hex and use C<\x{}>
+C<\o{}>, or convert to something else, such as to hex and use C<\x{}>
instead.
Having fewer than 3 digits may lead to a misleading warning message that says
that what follows is ignored. For example, C<"\128"> in the ASCII character set
is equivalent to the two characters C<"\n8">, but the warning C<Illegal octal
-digit '8' ignored> will be thrown. To avoid this warning, make sure to pad
-your octal number with C<0>'s: C<"\0128">.
+digit '8' ignored> will be thrown. If C<"\n8"> is what you want, you can
+avoid this warning by padding your octal number with C<0>'s: C<"\0128">.
=item [8]
@@ -1187,10 +1476,10 @@ character set encoding. In ASCII the character in the 80th position (indexed
from 0) is the letter "P", and in EBCDIC it is the ampersand symbol "&".
C<\x{100}> and C<\o{400}> are both 256 in decimal, so the number is interpreted
as a Unicode code point no matter what the native encoding is. The name of the
-character in the 100th position (indexed by 0) in Unicode is
+character in the 256th position (indexed by 0) in Unicode is
C<LATIN CAPITAL LETTER A WITH MACRON>.
-There are a couple of exceptions to the above rule. C<\N{U+I<hex number>}> is
+There are a couple of exceptions to the above rule. S<C<\N{U+I<hex number>}>> is
always interpreted as a Unicode code point, so that C<\N{U+0050}> is "P" even
on EBCDIC platforms. And if L<C<S<use encoding>>|encoding> is in effect, the
number is considered to be in that encoding, and is translated from that into
@@ -1205,28 +1494,35 @@ does have meaning in regular expression patterns in Perl, see L<perlre>.)
The following escape sequences are available in constructs that interpolate,
but not in transliterations.
-X<\l> X<\u> X<\L> X<\U> X<\E> X<\Q>
+X<\l> X<\u> X<\L> X<\U> X<\E> X<\Q> X<\F>
\l lowercase next character only
\u titlecase (not uppercase!) next character only
- \L lowercase all characters till \E seen
- \U uppercase all characters till \E seen
- \Q quote non-word characters till \E
+ \L lowercase all characters till \E or end of string
+ \U uppercase all characters till \E or end of string
+ \F foldcase all characters till \E or end of string
+ \Q quote (disable) pattern metacharacters till \E or
+ end of string
\E end either case modification or quoted section
(whichever was last seen)
-C<\L>, C<\U>, and C<\Q> can stack, in which case you need one
+See L<perlfunc/quotemeta> for the exact definition of characters that
+are quoted by C<\Q>.
+
+C<\L>, C<\U>, C<\F>, and C<\Q> can stack, in which case you need one
C<\E> for each. For example:
- say "This \Qquoting \ubusiness \Uhere isn't quite\E done yet,\E is it?";
- This quoting\ Business\ HERE\ ISN\'T\ QUITE\ done\ yet\, is it?
+ say"This \Qquoting \ubusiness \Uhere isn't quite\E done yet,\E is it?";
+ This quoting\ Business\ HERE\ ISN\'T\ QUITE\ done\ yet\, is it?
-If C<use locale> is in effect, the case map used by C<\l>, C<\L>,
+If C<use locale> is in effect (but not C<use locale ':not_characters'>),
+the case map used by C<\l>, C<\L>,
C<\u>, and C<\U> is taken from the current locale. See L<perllocale>.
If Unicode (for example, C<\N{}> or code points of 0x100 or
beyond) is being used, the case map used by C<\l>, C<\L>, C<\u>, and
C<\U> is as defined by Unicode. That means that case-mapping
a single character can sometimes produce several characters.
+Under C<use locale>, C<\F> produces the same results as C<\L>.
All systems use the virtual C<"\n"> to represent a line terminator,
called a "newline". There is no such thing as an unvarying, physical
@@ -1304,8 +1600,10 @@ in C<m/PATTERN/>. If "'" is used as the delimiter, no interpolation
is done. Returns a Perl value which may be used instead of the
corresponding C</STRING/msixpodual> expression. The returned value is a
normalized version of the original pattern. It magically differs from
-a string containing the same characters: C<ref(qr/x/)> returns "Regexp",
-even though dereferencing the result returns undef.
+a string containing the same characters: C<ref(qr/x/)> returns "Regexp";
+however, dereferencing it is not well defined (you currently get the
+normalized version of the original pattern, but this may change).
+
For example,
@@ -1355,11 +1653,11 @@ Options (specified by the following modifiers) are:
p When matching preserve a copy of the matched string so
that ${^PREMATCH}, ${^MATCH}, ${^POSTMATCH} will be defined.
o Compile pattern only once.
+ a ASCII-restrict: Use ASCII for \d, \s, \w; specifying two a's
+ further restricts /i matching so that no ASCII character will
+ match a non-ASCII one
l Use the locale
u Use Unicode rules
- a Use ASCII for \d, \s, \w; specifying two a's further restricts
- /i matching so that no ASCII character will match a non-ASCII
- one
d Use Unicode or native charset, as in 5.12 and earlier
If a precompiled pattern is embedded in a larger pattern then the effect
@@ -1368,12 +1666,14 @@ modifier has is not propagated, being restricted to those patterns
explicitly using it.
The last four modifiers listed above, added in Perl 5.14,
-control the character set semantics.
+control the character set semantics, but C</a> is the only one you are likely
+to want to specify explicitly; the other three are selected
+automatically by various pragmas.
See L<perlre> for additional information on valid syntax for STRING, and
for a detailed look at the semantics of regular expressions. In
-particular, all the modifiers execpt C</o> are further explained in
-L<perlre/Modifiers>. C</o> is described in the next section.
+particular, all modifiers except the largely obsolete C</o> are further
+explained in L<perlre/Modifiers>. C</o> is described in the next section.
=item m/PATTERN/msixpodualgc
X<m> X<operator, match>
@@ -1425,7 +1725,7 @@ The variables are thousands of characters long and you know that they
don't change, and you need to wring out the last little bit of speed by
having Perl skip testing for that. (There is a maintenance penalty for
doing this, as mentioning C</o> constitutes a promise that you won't
-change the variables in the pattern. If you change them, Perl won't
+change the variables in the pattern. If you do change them, Perl won't
even notice.)
=item 2
@@ -1436,6 +1736,8 @@ of accomplishing this than using C</o>.)
=back
+The bottom line is that using C</o> is almost never a good idea.
+
=item The empty pattern //
If the PATTERN evaluates to the empty string, the last
@@ -1458,7 +1760,7 @@ regex with an C<m> (so C<//> becomes C<m//>).
If the C</g> option is not used, C<m//> in list context returns a
list consisting of the subexpressions matched by the parentheses in the
-pattern, i.e., (C<$1>, C<$2>, C<$3>...). (Note that here C<$1> etc. are
+pattern, that is, (C<$1>, C<$2>, C<$3>...). (Note that here C<$1> etc. are
also set, and that this differs from Perl 4's behavior.) When there are
no parentheses in the pattern, the return value is the list C<(1)> for
success. With or without parentheses, an empty list is returned upon
@@ -1466,7 +1768,7 @@ failure.
Examples:
- open(TTY, "+>/dev/tty")
+ open(TTY, "+</dev/tty")
|| die "can't access /dev/tty: $!";
<TTY> =~ /^y/i && foo(); # do foo if desired
@@ -1501,7 +1803,7 @@ returning true if it matches, and false if there is no further match.
The position after the last match can be read or set using the C<pos()>
function; see L<perlfunc/pos>. A failed match normally resets the
search position to the beginning of the string, but you can avoid that
-by adding the C</c> modifier (e.g. C<m//gc>). Modifying the target
+by adding the C</c> modifier (for example, C<m//gc>). Modifying the target
string also resets the search position.
=item \G assertion
@@ -1685,7 +1987,7 @@ are used, no interpretation is done on the replacement string (the C</e>
modifier overrides this, however). Unlike Perl 4, Perl 5 treats backticks
as normal delimiters; the replacement text is not evaluated as a command.
If the PATTERN is delimited by bracketing quotes, the REPLACEMENT has
-its own pair of quotes, which may or may not be bracketing quotes, e.g.,
+its own pair of quotes, which may or may not be bracketing quotes, for example,
C<s(foo)(bar)> or C<< s<foo>/bar/ >>. A C</e> will cause the
replacement portion to be treated as a full-fledged Perl expression
and evaluated right then and there. It is, however, syntax checked at
@@ -1872,8 +2174,8 @@ On some platforms (notably DOS-like ones), the shell may not be
capable of dealing with multiline commands, so putting newlines in
the string may not get you what you want. You may be able to evaluate
multiple commands in a single line by separating them with the command
-separator character, if your shell supports that (e.g. C<;> on many Unix
-shells; C<&> on the Windows NT C<cmd> shell).
+separator character, if your shell supports that (for example, C<;> on
+many Unix shells and C<&> on the Windows NT C<cmd> shell).
Beginning with v5.6.0, Perl will attempt to flush all files opened for
output before starting the child process, but this may not be supported
@@ -2235,15 +2537,16 @@ Therefore a C</> terminates a C<qq//> construct, while a C<]> terminates
C<qq[]> and C<qq]]> constructs.
When searching for single-character delimiters, escaped delimiters
-and C<\\> are skipped. For example, while searching for terminating C</>,
+and C<\\> are skipped. For example, while searching for terminating C</>,
combinations of C<\\> and C<\/> are skipped. If the delimiters are
bracketing, nested pairs are also skipped. For example, while searching
for closing C<]> paired with the opening C<[>, combinations of C<\\>, C<\]>,
and C<\[> are all skipped, and nested C<[> and C<]> are skipped as well.
However, when backslashes are used as the delimiters (like C<qq\\> and
C<tr\\\>), nothing is skipped.
-During the search for the end, backslashes that escape delimiters
-are removed (exactly speaking, they are not copied to the safe location).
+During the search for the end, backslashes that escape delimiters or
+backslashes are removed (exactly speaking, they are not copied to the
+safe location).
For constructs with three-part delimiters (C<s///>, C<y///>, and
C<tr///>), the search is repeated once more.
@@ -2317,7 +2620,7 @@ as a literal C<->.
=item C<"">, C<``>, C<qq//>, C<qx//>, C<< <file*glob> >>, C<<<"EOF">
-C<\Q>, C<\U>, C<\u>, C<\L>, C<\l> (possibly paired with C<\E>) are
+C<\Q>, C<\U>, C<\u>, C<\L>, C<\l>, C<\F> (possibly paired with C<\E>) are
converted to corresponding Perl constructs. Thus, C<"$foo\Qbaz$bar">
is converted to C<$foo . (quotemeta("baz" . $bar))> internally.
The other escape sequences such as C<\200> and C<\t> and backslashed
@@ -2368,7 +2671,7 @@ Fortunately, it's usually correct for ambiguous cases.
=item the replacement of C<s///>
-Processing of C<\Q>, C<\U>, C<\u>, C<\L>, C<\l>, and interpolation
+Processing of C<\Q>, C<\U>, C<\u>, C<\L>, C<\l>, C<\F> and interpolation
happens as with C<qq//> constructs.
It is at this step that C<\1> is begrudgingly converted to C<$1> in
@@ -2379,7 +2682,7 @@ is emitted if the C<use warnings> pragma or the B<-w> command-line flag
=item C<RE> in C<?RE?>, C</RE/>, C<m/RE/>, C<s/RE/foo/>,
-Processing of C<\Q>, C<\U>, C<\u>, C<\L>, C<\l>, C<\E>,
+Processing of C<\Q>, C<\U>, C<\u>, C<\L>, C<\l>, C<\F>, C<\E>,
and interpolation happens (almost) as with C<qq//> constructs.
Processing of C<\N{...}> is also done here, and compiled into an intermediate
@@ -2535,21 +2838,22 @@ The following lines are equivalent:
print while ($_ = <STDIN>);
print while <STDIN>;
-This also behaves similarly, but avoids $_ :
+This also behaves similarly, but assigns to a lexical variable
+instead of to C<$_>:
while (my $line = <STDIN>) { print $line }
In these loop constructs, the assigned value (whether assignment
is automatic or explicit) is then tested to see whether it is
-defined. The defined test avoids problems where line has a string
-value that would be treated as false by Perl, for example a "" or
+defined. The defined test avoids problems where the line has a string
+value that would be treated as false by Perl; for example a "" or
a "0" with no trailing newline. If you really mean for such values
to terminate the loop, they should be tested for explicitly:
while (($_ = <STDIN>) ne '0') { ... }
while (<STDIN>) { last unless $_; ... }
-In other boolean contexts, C<< <filehandle> >> without an
+In other boolean contexts, C<< <FILEHANDLE> >> without an
explicit C<defined> test or comparison elicits a warning if the
C<use warnings> pragma or the B<-w>
command-line switch (the C<$^W> variable) is in effect.
@@ -2571,7 +2875,9 @@ way, so use with care.
See L<perlfunc/readline>.
The null filehandle <> is special: it can be used to emulate the
-behavior of B<sed> and B<awk>. Input from <> comes either from
+behavior of B<sed> and B<awk>, and any other Unix filter program
+that takes a list of filenames, doing the same to each line
+of input from all of them. Input from <> comes either from
standard input, or from each file listed on the command line. Here's
how it works: the first time <> is evaluated, the @ARGV array is
checked, and if it is empty, C<$ARGV[0]> is set to "-", which when opened
@@ -2645,7 +2951,7 @@ The <> symbol will return C<undef> for end-of-file only once.
If you call it again after this, it will assume you are processing another
@ARGV list, and if you haven't set @ARGV, will read input from STDIN.
-If what the angle brackets contain is a simple scalar variable (e.g.,
+If what the angle brackets contain is a simple scalar variable (for example,
<$foo>), then that variable contains the name of the
filehandle to input from, or its typeglob, or a reference to the
same. For example:
@@ -2696,7 +3002,8 @@ get them all anyway. However, in scalar context the operator returns
the next value each time it's called, or C<undef> when the list has
run out. As with filehandle reads, an automatic C<defined> is
generated when the glob occurs in the test part of a C<while>,
-because legal glob returns (e.g. a file called F<0>) would otherwise
+because legal glob returns (for example,
+a file called F<0>) would otherwise
terminate the loop. Again, C<undef> is returned only once. So if
you're expecting a single value from a glob, it is much better to
say
@@ -2727,8 +3034,9 @@ concatenation happens at compile time between literals that don't do
variable substitution. Backslash interpolation also happens at
compile time. You can say
- 'Now is the time for all' . "\n" .
- 'good men to come to.'
+ 'Now is the time for all'
+ . "\n"
+ . 'good men to come to.'
and this all reduces to one string internally. Likewise, if
you say
@@ -2737,14 +3045,14 @@ you say
if (-s $file > 5 + 100 * 2**16) { }
}
-the compiler will precompute the number which that expression
+the compiler precomputes the number which that expression
represents so that the interpreter won't have to.
=head2 No-ops
X<no-op> X<nop>
Perl doesn't officially have a no-op operator, but the bare constants
-C<0> and C<1> are special-cased to not produce a warning in a void
+C<0> and C<1> are special-cased not to produce a warning in void
context, so you can for example safely do
1 while foo();
@@ -2814,6 +3122,7 @@ integral value. However, C<use integer; ~0> is C<-1> on two's-complement
machines.
=head2 Floating-point Arithmetic
+
X<floating-point> X<floating point> X<float> X<real>
While C<use integer> provides integer-only arithmetic, there is no
diff --git a/Master/tlpkg/tlperl/lib/pods/perlopenbsd.pod b/Master/tlpkg/tlperl/lib/pods/perlopenbsd.pod
index 0c9b3c4f365..8126ce3eb71 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlopenbsd.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlopenbsd.pod
@@ -4,7 +4,7 @@ specifically designed to be readable as is.
=head1 NAME
-README.openbsd - Perl version 5 on OpenBSD systems
+perlopenbsd - Perl version 5 on OpenBSD systems
=head1 DESCRIPTION
diff --git a/Master/tlpkg/tlperl/lib/pods/perlos2.pod b/Master/tlpkg/tlperl/lib/pods/perlos2.pod
index e7d6cca342f..7fc9b63d2cd 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlos2.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlos2.pod
@@ -151,7 +151,7 @@ versions of EMX.
=item *
-You need a separate perl executable F<perl__.exe> (see L<perl__.exe>)
+You need a separate perl executable F<perl__.exe> (see L</perl__.exe>)
if you want to use PM code in your application (as Perl/Tk or OpenGL
Perl modules do) without having a text-mode window present.
@@ -162,7 +162,7 @@ Using F<perl__.exe> avoids such a degradation.
=item *
There is no simple way to access WPS objects. The only way I know
-is via C<OS2::REXX> and C<SOM> extensions (see L<OS2::REXX>, L<Som>).
+is via C<OS2::REXX> and C<SOM> extensions (see L<OS2::REXX>, L<SOM>).
However, we do not have access to
convenience methods of Object-REXX. (Is it possible at all? I know
of no Object-REXX API.) The C<SOM> extension (currently in alpha-text)
@@ -186,7 +186,7 @@ Note that not all features of Perl are available under these
environments. This depends on the features the I<extender> - most
probably RSX - decided to implement.
-Cf. L<Prerequisites>.
+Cf. L</Prerequisites>.
=head2 Prerequisites
@@ -196,7 +196,7 @@ Cf. L<Prerequisites>.
EMX runtime is required (may be substituted by RSX). Note that
it is possible to make F<perl_.exe> to run under DOS without any
-external support by binding F<emx.exe>/F<rsx.exe> to it, see L<emxbind>. Note
+external support by binding F<emx.exe>/F<rsx.exe> to it, see C<emxbind>. Note
that under DOS for best results one should use RSX runtime, which
has much more functions working (like C<fork>, C<popen> and so on). In
fact RSX is required if there is no VCPI present. Note the
@@ -264,7 +264,7 @@ either in the wired-in-during-compile locations (usually F<F:/bin>),
or in configurable location (see L<"PERL_SH_DIR">).
For best results use EMX pdksh. The standard binary (5.2.14 or later) runs
-under DOS (with L<RSX>) as well, see
+under DOS (with L</RSX>) as well, see
http://www.ilyaz.org/software/os2/
@@ -315,7 +315,7 @@ or whatever method you prefer.
There are also endless possibilities to use I<executable extensions> of
4os2, I<associations> of WPS and so on... However, if you use
*nixish shell (like F<sh.exe> supplied in the binary distribution),
-you need to follow the syntax specified in L<perlrun/"Switches">.
+you need to follow the syntax specified in L<perlrun/"Command Switches">.
Note that B<-S> switch supports scripts with additional extensions
F<.cmd>, F<.btm>, F<.bat>, F<.pl> as well.
@@ -435,7 +435,7 @@ managed to goof. C<;-)>
=item *
Did you run your programs with C<-w> switch? See
-L<Starting OS/2 (and DOS) programs under Perl>.
+L<Starting OSE<sol>2 (and DOS) programs under Perl>.
=item *
@@ -475,10 +475,10 @@ should be done "correctly".
=head2 C<``> and pipe-C<open> do not work under DOS.
This may a variant of just L<"I cannot run external programs">, or a
-deeper problem. Basically: you I<need> RSX (see L<"Prerequisites">)
+deeper problem. Basically: you I<need> RSX (see L</Prerequisites>)
for these commands to work, and you may need a port of F<sh.exe> which
understands command arguments. One of such ports is listed in
-L<"Prerequisites"> under RSX. Do not forget to set variable
+L</Prerequisites> under RSX. Do not forget to set variable
C<L<"PERL_SH_DIR">> as well.
DPMI is required for RSX.
@@ -557,7 +557,7 @@ of this file.
B<NOTE>. Because of a typo the binary installer of 5.00305
would install a variable C<PERL_SHPATH> into F<Config.sys>. Please
-remove this variable and put C<L<PERL_SH_DIR>> instead.
+remove this variable and put C<L</PERL_SH_DIR>> instead.
=head2 Manual binary installation
@@ -618,7 +618,7 @@ C<set PERLLIB_PREFIX> in F<Config.sys>, see L<"PERLLIB_PREFIX">.
=item Additional Perl modules
- unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.14.2/
+ unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.16.2/
Same remark as above applies. Additionally, if this directory is not
one of directories on @INC (and @INC is influenced by C<PERLLIB_PREFIX>), you
@@ -1061,7 +1061,7 @@ Run
to convert perl utilities to F<.cmd> files and put them on
PATH. You need to put F<.EXE>-utilities on path manually. They are
installed in C<$prefix/bin>, here C<$prefix> is what you gave to
-F<Configure>, see L<Making>.
+F<Configure>, see L</Making>.
If you use C<man>, either move the installed F<*/man/> directories to
your C<MANPATH>, or modify C<MANPATH> to match the location. (One
@@ -1111,7 +1111,7 @@ named accordingly.
Fully build and test the Perl distribution. Make sure that no tests are
failing with C<test> and C<aout_test> targets; fix the bugs in Perl and
the Perl test suite detected by these tests. Make sure that C<all_test>
-make target runs as clean as possible. Check that C<os2/perlrexx.cmd>
+make target runs as clean as possible. Check that F<os2/perlrexx.cmd>
runs fine.
=item 2.
@@ -1264,7 +1264,7 @@ redirect the new version of Perl to a new location, and copy the installed
files to this new location. Redo the tests to make sure that the versions of
modules inherited from older versions of Perl are not needed.
-Actually, the log output of L<pod2ipf> during the step 6 gives a very detailed
+Actually, the log output of L<pod2ipf(1)> during the step 6 gives a very detailed
info about which modules are loaded from which place; so you may use it as
an additional verification tool.
@@ -1461,7 +1461,7 @@ Here is the sample C file:
if (_execname(buf, sizeof(buf) - 13) != 0)
die_with("Can't find full path: ", strerror(errno), "", "");
- /* XXXX Fill `me' with new value */
+ /* XXXX Fill 'me' with new value */
l = strlen(buf);
while (l && buf[l-1] != '/' && buf[l-1] != '\\')
l--;
@@ -1521,11 +1521,11 @@ Here is the sample C file:
=head2 Some C</> became C<\> in pdksh.
-You have a very old pdksh. See L<Prerequisites>.
+You have a very old pdksh. See L</Prerequisites>.
=head2 C<'errno'> - unresolved external
-You do not have MT-safe F<db.lib>. See L<Prerequisites>.
+You do not have MT-safe F<db.lib>. See L</Prerequisites>.
=head2 Problems with tr or sed
@@ -1538,11 +1538,11 @@ broke the build of extensions.
=head2 Library ... not found
-You did not run C<omflibs>. See L<Prerequisites>.
+You did not run C<omflibs>. See L</Prerequisites>.
=head2 Segfault in make
-You use an old version of GNU make. See L<Prerequisites>.
+You use an old version of GNU make. See L</Prerequisites>.
=head2 op/sprintf test failure
@@ -2217,8 +2217,7 @@ It is a VIO application.
=head2 Why strange names?
Since Perl processes the C<#!>-line (cf.
-L<perlrun/DESCRIPTION>, L<perlrun/Switches>,
-L<perldiag/"Not a perl script">,
+L<perlrun/DESCRIPTION>, L<perlrun/Command Switches>,
L<perldiag/"No Perl script found in input">), it should know when a
program I<is a Perl>. There is some naming convention which allows
Perl to distinguish correct lines from wrong ones. The above names are
@@ -2548,8 +2547,9 @@ it has the same effect.)
B<REMARK>. C<LIBPATHSTRICT>, C<BEGINLIBPATH> and C<ENDLIBPATH> are
not environment variables, although F<cmd.exe> emulates them on C<SET
-...> lines. From Perl they may be accessed by L<Cwd::extLibpath> and
-L<Cwd::extLibpath_set>.
+...> lines. From Perl they may be accessed by
+L<Cwd::extLibpath|/Cwd::extLibpath([type])> and
+L<Cwd::extLibpath_set|/Cwd::extLibpath_set( path [, type ] )>.
=head2 DLL forwarder generation
@@ -2604,7 +2604,7 @@ are F<cmd.exe> and F<sh.exe>. Having perl build itself would be impossible
with F<cmd.exe> as a shell, thus I picked up C<sh.exe>. This assures almost
100% compatibility with the scripts coming from *nix. As an added benefit
this works as well under DOS if you use DOS-enabled port of pdksh
-(see L<"Prerequisites">).
+(see L</Prerequisites>).
B<Disadvantages:> currently F<sh.exe> of pdksh calls external programs
via fork()/exec(), and there is I<no> functioning exec() on
@@ -2637,7 +2637,7 @@ I will include it into distribution. I have no need for such a module, so
cannot test it.
For the details of the current situation with calling external programs,
-see L<Starting OS/2 (and DOS) programs under Perl>. Set us mention a couple
+see L<Starting OSE<sol>2 (and DOS) programs under Perl>. Set us mention a couple
of features:
=over 4
@@ -2699,7 +2699,7 @@ have a low probability of affecting small programs.
=head1 BUGS
This description is not updated often (since 5.6.1?), see F<./os2/Changes>
-(L<perlos2delta>) for more info.
+for more info.
=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perlos390.pod b/Master/tlpkg/tlperl/lib/pods/perlos390.pod
index 93459346c37..6e2d49e7317 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlos390.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlos390.pod
@@ -5,7 +5,7 @@ about pod in pod/perlpod.pod or the short summary in the INSTALL file.
=head1 NAME
-README.os390 - building and installing Perl for OS/390 and z/OS
+perlos390 - building and installing Perl for OS/390 and z/OS
=head1 SYNOPSIS
@@ -416,7 +416,7 @@ To subscribe, send an empty message to perl-mvs-subscribe@perl.org.
See also:
- http://lists.perl.org/showlist.cgi?name=perl-mvs
+ http://lists.perl.org/list/perl-mvs.html
There are web archives of the mailing list at:
diff --git a/Master/tlpkg/tlperl/lib/pods/perlos400.pod b/Master/tlpkg/tlperl/lib/pods/perlos400.pod
index 0dcee2e4290..e720f2d6e1a 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlos400.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlos400.pod
@@ -4,7 +4,7 @@ designed to be readable as is.
=head1 NAME
-README.os400 - Perl version 5 on OS/400
+perlos400 - Perl version 5 on OS/400
=head1 DESCRIPTION
diff --git a/Master/tlpkg/tlperl/lib/pods/perlpacktut.pod b/Master/tlpkg/tlperl/lib/pods/perlpacktut.pod
index 7d2126a0eaa..2ce56622b75 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlpacktut.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlpacktut.pod
@@ -73,14 +73,13 @@ remains.
The inverse operation - packing byte contents from a string of hexadecimal
digits - is just as easily written. For instance:
- my $s = pack( 'H2' x 10, map { "3$_" } ( 0..9 ) );
+ my $s = pack( 'H2' x 10, 30..39 );
print "$s\n";
Since we feed a list of ten 2-digit hexadecimal strings to C<pack>, the
pack template should contain ten pack codes. If this is run on a computer
with ASCII character coding, it will print C<0123456789>.
-
=head1 Packing Text
Let's suppose you've got to read in a data file like this:
diff --git a/Master/tlpkg/tlperl/lib/pods/perlperf.pod b/Master/tlpkg/tlperl/lib/pods/perlperf.pod
index cac6eee6655..007a02bc876 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlperf.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlperf.pod
@@ -30,7 +30,7 @@ optimization process.
Firstly, you need to establish a baseline time for the existing code, which
timing needs to be reliable and repeatable. You'll probably want to use the
-C<Benchmark> or C<Devel::DProf> modules, or something similar, for this step,
+C<Benchmark> or C<Devel::NYTProf> modules, or something similar, for this step,
or perhaps the Unix system C<time> utility, whichever is appropriate. See the
base of this document for a longer list of benchmarking and profiling modules,
and recommended further reading.
@@ -597,7 +597,7 @@ the code.
C<NYTProf> will generate a report database into the file F<nytprof.out> by
default. Human readable reports can be generated from here by using the
supplied C<nytprofhtml> (HTML output) and C<nytprofcsv> (CSV output) programs.
-We've used the Unix sytem C<html2text> utility to convert the
+We've used the Unix system C<html2text> utility to convert the
F<nytprof/index.html> file for convenience here.
$> html2text nytprof/index.html
diff --git a/Master/tlpkg/tlperl/lib/pods/perlpod.pod b/Master/tlpkg/tlperl/lib/pods/perlpod.pod
index 068afe4177d..0491dec1b7b 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlpod.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlpod.pod
@@ -238,7 +238,7 @@ region.
That is, with "=for", you can have only one paragraph's worth
of text (i.e., the text in "=foo targetname text..."), but with
"=begin targetname" ... "=end targetname", you can have any amount
-of stuff inbetween. (Note that there still must be a blank line
+of stuff in between. (Note that there still must be a blank line
after the "=begin" command and a blank line before the "=end"
command.
diff --git a/Master/tlpkg/tlperl/lib/pods/perlpodspec.pod b/Master/tlpkg/tlperl/lib/pods/perlpodspec.pod
index dbe05391dff..89fd9ba6f81 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlpodspec.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlpodspec.pod
@@ -305,7 +305,7 @@ or data paragraphs. This is discussed in detail in the section
L</About Data Paragraphs and "=beginE<sol>=end" Regions>.
It is advised that formatnames match the regexp
-C<m/\A:?[−a−zA−Z0−9_]+\z/>. Everything following whitespace after the
+C<m/\A:?[-a-zA-Z0-9_]+\z/>. Everything following whitespace after the
formatname is a parameter that may be used by the formatter when dealing
with this region. This parameter must not be repeated in the "=end"
paragraph. Implementors should anticipate future expansion in the
@@ -1301,14 +1301,6 @@ browsers to decide.
=item *
-Authors wanting to link to a particular (absolute) URL, must do so
-only with "LE<lt>scheme:...>" codes (like
-LE<lt>http://www.perl.org>), and must not attempt "LE<lt>Some Site
-Name|scheme:...>" codes. This restriction avoids many problems
-in parsing and rendering LE<lt>...> codes.
-
-=item *
-
In a C<LE<lt>text|...E<gt>> code, text may contain formatting codes
for formatting or for EE<lt>...> escapes, as in:
diff --git a/Master/tlpkg/tlperl/lib/pods/perlpodstyle.pod b/Master/tlpkg/tlperl/lib/pods/perlpodstyle.pod
index 6c4cfa04afc..850f38dc8d9 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlpodstyle.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlpodstyle.pod
@@ -5,37 +5,70 @@ perlpodstyle - Perl POD style guide
=head1 DESCRIPTION
These are general guidelines for how to write POD documentation for Perl
-scripts and modules, based on general guidelines for writing good UNIX man
+scripts and modules, based on general guidelines for writing good Unix man
pages. All of these guidelines are, of course, optional, but following
them will make your documentation more consistent with other documentation
on the system.
-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>). Function names are
+Here are some simple guidelines for markup; see L<perlpod> for details.
+
+=over
+
+=item bold (BE<lt>E<gt>)
+
+B<NOTE: Use extremely rarely.> Do I<not> use bold for emphasis; that's
+what italics are for. Restrict bold for notices like B<NOTE:> and
+B<WARNING:>. However, program arguments and options--but I<not> their
+names!--are written in bold (using BE<lt>E<gt>) to distinguish the B<-f>
+command-line option from the C<-f> filetest operator.
+
+=item italic (IE<lt>E<gt>)
+
+Use italic to emphasize text, like I<this>. Function names 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)> or C<LE<lt>manpage(section)E<gt>>, and Pod::Man will
-automatically format those appropriately. The second form, with
-LE<lt>E<gt>, is used to request that a POD formatter make a link to the
-man page if possible. As an exception, one normally omits the section
-when referring to module documentation since it's not clear what section
-module documentation will be in; use C<LE<lt>Module::NameE<gt>> for module
-references instead.
+Pod::Man will take care of this for you. Names of programs, including the
+name of the program being documented, are conventionally written in italics
+(using IE<lt>E<gt>) wherever they occur in normal roman text.
+
+=item code (CE<lt>E<gt>)
+
+Literal code should be in CE<lt>E<gt>. However metasyntactic placeholders
+should furthermore be nested in "italics" (actually, oblique) like
+CE<lt>IE<lt>E<gt>E<gt>. That way
+CE<lt>accept(IE<lt>NEWSOCKETE<gt>, E<lt>GENERICSOCKETE<gt>)E<gt>
+renders as C<accept(I<NEWSOCKET>, I<GENERICSOCKET>)>.
+
+=item files (FE<lt>E<gt>)
+
+Filenames, whether absolute or relative, are specified with the FE<lt>E<gt>
+markup. This will render as italics, but has other semantic connotations.
+
+=back
+
+References to other man pages should be in the form "manpage(section)" or
+"C<LE<lt>manpage(section)E<gt>>", and Pod::Man will automatically format
+those appropriately. Both will render as I<manpage>(section). The second
+form, with LE<lt>E<gt>, is used to request that a POD formatter make a link
+to the man page if possible. As an exception, one normally omits the
+section when referring to module documentation because not all systems
+place it in section 3, although that is the default. You may use
+C<LE<lt>Module::NameE<gt>> for module references instead, but this is
+optional because the translators are supposed to recognize module
+references in pod, just as they do variable references like $foo and such.
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. References to other
programs that are not given as man page references should be enclosed in
-BE<lt>E<gt>.
+italics via IE<lt>E<gt>.
-The major headers should be set out using a C<=head1> directive, and are
-historically written in the rather startling ALL UPPER CASE format; this
-is not mandatory, but it's strongly recommended so that sections have
-consistent naming across different software packages. Minor headers may
-be included using C<=head2>, and are typically in mixed case.
+Major headers should be set out using a C<=head1> directive, and are
+historically written in the rather startling ALL UPPER CASE format; this is
+not mandatory, but it's strongly recommended so that sections have
+consistent naming across different software packages. The translators are
+supposed to translate all caps into small caps. Minor headers may be
+included using C<=head2>, and are typically in mixed case.
The standard sections of a manual page are:
@@ -54,7 +87,7 @@ function documented by this POD page should be listed, separated by a
comma and a space. For a Perl module, just give the module name. A
single dash, and only a single dash, should separate the list of programs
or functions from the description. Do not use any markup such as
-CE<lt>E<gt> or BE<lt>E<gt> anywhere in this line. Functions should not be
+CE<lt>E<gt> or IE<lt>E<gt> anywhere in this line. 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.
@@ -196,7 +229,7 @@ Miscellaneous commentary.
=item AUTHOR
Who wrote it (use AUTHORS for multiple people). It's a good idea to
-include your current e-mail address (or some e-mail address to which bug
+include your current email address (or some email address to which bug
reports should be sent) or some other contact information so that users
have a way of contacting you. Remember that program documentation tends
to roam the wild for far longer than you expect and pick a contact method
@@ -261,12 +294,22 @@ handlers. These headings are primarily useful when documenting parts of a
C library.
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 will do the wrong thing with e-mail addresses when wrapped in
-LE<lt>E<gt>, so don't do that.
+As documented here and in L<Pod::Man>, you can safely leave Perl variables,
+module names, function names, man page references, and the like unadorned
+by markup, and the POD translators will figure it all out for you. This
+makes it much easier to later edit the documentation. Note that many
+existing translators will do the wrong thing with email addresses when
+wrapped in LE<lt>E<gt>, so don't do that.
+
+You can check whether your documentation looks right by running
+
+ % pod2text -o something.pod | less
+
+If you have I<groff> installed, you can get an even better look this way:
+
+ % pod2man something.pod | groff -Tps -mandoc > something.ps
+
+Now view the resulting Postscript file to see whether everything checks out.
=head1 SEE ALSO
diff --git a/Master/tlpkg/tlperl/lib/pods/perlpolicy.pod b/Master/tlpkg/tlperl/lib/pods/perlpolicy.pod
index 2341414cc48..7e713b4920a 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlpolicy.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlpolicy.pod
@@ -8,6 +8,57 @@ This document is the master document which records all written
policies about how the Perl 5 Porters collectively develop and maintain
the Perl core.
+=head1 GOVERNANCE
+
+=head2 Perl 5 Porters
+
+Subscribers to perl5-porters (the porters themselves) come in several flavours.
+Some are quiet curious lurkers, who rarely pitch in and instead watch
+the ongoing development to ensure they're forewarned of new changes or
+features in Perl. Some are representatives of vendors, who are there
+to make sure that Perl continues to compile and work on their
+platforms. Some patch any reported bug that they know how to fix,
+some are actively patching their pet area (threads, Win32, the regexp
+-engine), while others seem to do nothing but complain. In other
+words, it's your usual mix of technical people.
+
+Over this group of porters presides Larry Wall. He has the final word
+in what does and does not change in any of the Perl programming languages.
+These days, Larry spends most of his time on Perl 6, while Perl 5 is
+shepherded by a "pumpking", a porter responsible for deciding what
+goes into each release and ensuring that releases happen on a regular
+basis.
+
+Larry sees Perl development along the lines of the US government:
+there's the Legislature (the porters), the Executive branch (the
+-pumpking), and the Supreme Court (Larry). The legislature can
+discuss and submit patches to the executive branch all they like, but
+the executive branch is free to veto them. Rarely, the Supreme Court
+will side with the executive branch over the legislature, or the
+legislature over the executive branch. Mostly, however, the
+legislature and the executive branch are supposed to get along and
+work out their differences without impeachment or court cases.
+
+You might sometimes see reference to Rule 1 and Rule 2. Larry's power
+as Supreme Court is expressed in The Rules:
+
+=over 4
+
+=item 1
+
+Larry is always by definition right about how Perl should behave.
+This means he has final veto power on the core functionality.
+
+=item 2
+
+Larry is allowed to change his mind about any matter at a later date,
+regardless of whether he previously invoked Rule 1.
+
+=back
+
+Got that? Larry is always right, even when he was wrong. It's rare
+to see either Rule exercised, but they are often alluded to.
+
=head1 MAINTENANCE AND SUPPORT
Perl 5 is developed by a community, not a corporate entity. Every change
@@ -31,9 +82,9 @@ the Perl community should expect from Perl's developers:
=item *
-We "officially" support the two most recent stable release
-series. As of the release of 5.14.0, we will "officially"
-end support for Perl 5.10, other than providing security
+We "officially" support the two most recent stable release series. 5.12.x
+and earlier are now out of support. As of the release of 5.18.0, we will
+"officially" end support for Perl 5.14.x, other than providing security
updates as described below.
=item *
@@ -220,6 +271,11 @@ rather than applied directly.
=item *
+Patches that fix regressions in perl's behavior relative to previous
+releases are acceptable.
+
+=item *
+
Updates to dual-life modules should consist of minimal patches to
fix crashing or security issues (as above).
diff --git a/Master/tlpkg/tlperl/lib/pods/perlport.pod b/Master/tlpkg/tlperl/lib/pods/perlport.pod
index 0193dc852ca..867b66e2915 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlport.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlport.pod
@@ -622,7 +622,7 @@ format.
Don't assume that the epoch starts at 00:00:00, January 1, 1970,
because that is OS- and implementation-specific. It is better to
store a date in an unambiguous representation. The ISO 8601 standard
-defines YYYY-MM-DD as the date format, or YYYY-MM-DDTHH-MM-SS
+defines YYYY-MM-DD as the date format, or YYYY-MM-DDTHH:MM:SS
(that's a literal "T" separating the date from the time).
Please do use the ISO 8601 instead of making us guess what
date 02/03/04 might be. ISO 8601 even sorts nicely as-is.
@@ -689,10 +689,6 @@ If your code is destined for systems with severely constrained (or
missing!) virtual memory systems then you want to be I<especially> mindful
of avoiding wasteful constructs such as:
- # NOTE: this is no longer "bad" in perl5.005
- for (0..10000000) {} # bad
- for (my $x = 0; $x <= 10000000; ++$x) {} # good
-
my @lines = <$very_large_file>; # bad
while (<$fh>) {$file .= $_} # sometimes bad
@@ -904,6 +900,8 @@ DOSish perls are as follows:
Windows Vista MSWin32 MSWin32-x86 2 6 00
Windows 7 MSWin32 MSWin32-x86 2 6 01
Windows 7 MSWin32 MSWin32-x64 2 6 01
+ Windows 2008 MSWin32 MSWin32-x86 2 6 01
+ Windows 2008 MSWin32 MSWin32-x64 2 6 01
Windows CE MSWin32 ? 3
Cygwin cygwin cygwin
@@ -1394,8 +1392,8 @@ subdirectories named after the suffix. Hence files are translated:
The Unix emulation library's translation of filenames to native assumes
that this sort of translation is required, and it allows a user-defined list
of known suffixes that it will transpose in this fashion. This may
-seem transparent, but consider that with these rules C<foo/bar/baz.h>
-and C<foo/bar/h/baz> both map to C<foo.bar.h.baz>, and that C<readdir> and
+seem transparent, but consider that with these rules F<foo/bar/baz.h>
+and F<foo/bar/h/baz> both map to F<foo.bar.h.baz>, and that C<readdir> and
C<glob> cannot and do not attempt to emulate the reverse mapping. Other
C<.>'s in filenames are translated to C</>.
@@ -2141,7 +2139,6 @@ Caveats:
=back
-
=item Symbian (Series 60 v3, 3.2 and 5 - what else?)
=item Stratus VOS / OpenVOS
@@ -2315,7 +2312,7 @@ L<http://www.cpan.org/ports/index.html> for binary distributions.
=head1 SEE ALSO
-L<perlaix>, L<perlamiga>, L<perlapollo>, L<perlbeos>, L<perlbs2000>,
+L<perlaix>, L<perlamiga>, L<perlbeos>, L<perlbs2000>,
L<perlce>, L<perlcygwin>, L<perldgux>, L<perldos>, L<perlepoc>,
L<perlebcdic>, L<perlfreebsd>, L<perlhurd>, L<perlhpux>, L<perlirix>,
L<perlmacos>, L<perlmacosx>, L<perlmpeix>,
diff --git a/Master/tlpkg/tlperl/lib/pods/perlpragma.pod b/Master/tlpkg/tlperl/lib/pods/perlpragma.pod
index 856014438e5..604387d9f97 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlpragma.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlpragma.pod
@@ -82,17 +82,17 @@ The interaction with the Perl compilation happens inside package C<myint>:
use warnings;
sub import {
- $^H{myint} = 1;
+ $^H{"myint/in_effect"} = 1;
}
sub unimport {
- $^H{myint} = 0;
+ $^H{"myint/in_effect"} = 0;
}
sub in_effect {
my $level = shift // 0;
my $hinthash = (caller($level))[10];
- return $hinthash->{myint};
+ return $hinthash->{"myint/in_effect"};
}
1;
@@ -122,10 +122,26 @@ at index 10 of the list of returned results. In the example pragma, retrieval
is encapsulated into the routine C<in_effect()>, which takes as parameter
the number of call frames to go up to find the value of the pragma in the
user's script. This uses C<caller()> to determine the value of
-C<$^H{myint}> when each line of the user's script was called, and
+C<$^H{"myint/in_effect"}> when each line of the user's script was called, and
therefore provide the correct semantics in the subroutine implementing the
overloaded addition.
+=head1 Key naming
+
+There is only a single C<%^H>, but arbitrarily many modules that want
+to use its scoping semantics. To avoid stepping on each other's toes,
+they need to be sure to use different keys in the hash. It is therefore
+conventional for a module to use only keys that begin with the module's
+name (the name of its main package) and a "/" character. After this
+module-identifying prefix, the rest of the key is entirely up to the
+module: it may include any characters whatsoever. For example, a module
+C<Foo::Bar> should use keys such as C<Foo::Bar/baz> and C<Foo::Bar/$%/_!>.
+Modules following this convention all play nicely with each other.
+
+The Perl core uses a handful of keys in C<%^H> which do not follow this
+convention, because they predate it. Keys that follow the convention
+won't conflict with the core's historical keys.
+
=head1 Implementation details
The optree is shared between threads. This means there is a possibility that
diff --git a/Master/tlpkg/tlperl/lib/pods/perlqnx.pod b/Master/tlpkg/tlperl/lib/pods/perlqnx.pod
index cf9dc1fd958..a1c2e92226d 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlqnx.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlqnx.pod
@@ -4,7 +4,7 @@ designed to be readable as is.
=head1 NAME
-README.qnx - Perl version 5 on QNX
+perlqnx - Perl version 5 on QNX
=head1 DESCRIPTION
diff --git a/Master/tlpkg/tlperl/lib/pods/perlre.pod b/Master/tlpkg/tlperl/lib/pods/perlre.pod
index c4ec417a1d2..b69c359006d 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlre.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlre.pod
@@ -76,6 +76,18 @@ Perl doesn't match multiple characters in an inverted bracketed
character class, which otherwise could be highly confusing. See
L<perlrecharclass/Negation>.
+Another bug involves character classes that match both a sequence of
+multiple characters, and an initial sub-string of that sequence. For
+example,
+
+ /[s\xDF]/i
+
+should match both a single and a double "s", since C<\xDF> (on ASCII
+platforms) matches "ss". However, this bug
+(L<[perl #89774]|https://rt.perl.org/rt3/Ticket/Display.html?id=89774>)
+causes it to only match a single "s", even if the final larger match
+fails, and matching the double "ss" would have succeeded.
+
Also, Perl matching doesn't fully conform to the current Unicode C</i>
recommendations, which ask that the matching be made upon the NFD
(Normalization Form Decomposed) of the text. However, Unicode is
@@ -105,20 +117,18 @@ of the g and c modifiers.
=item a, d, l and u
X</a> X</d> X</l> X</u>
-These modifiers, new in 5.14, affect which character-set semantics
-(Unicode, ASCII, etc.) are used, as described below in
+These modifiers, all new in 5.14, affect which character-set semantics
+(Unicode, etc.) are used, as described below in
L</Character set modifiers>.
=back
-These are usually written as "the C</x> modifier", even though the delimiter
+Regular expression modifiers are usually written in documentation
+as e.g., "the C</x> modifier", even though the delimiter
in question might not really be a slash. The modifiers C</imsxadlup>
may also be embedded within the regular expression itself using
the C<(?...)> construct, see L</Extended Patterns> below.
-The C</x>, C</l>, C</u>, C</a> and C</d> modifiers need a little more
-explanation.
-
=head3 /x
C</x> tells
@@ -154,21 +164,63 @@ C</d>, C</u>, C</a>, and C</l>, available starting in 5.14, are called
the character set modifiers; they affect the character set semantics
used for the regular expression.
-At any given time, exactly one of these modifiers is in effect. Once
-compiled, the behavior doesn't change regardless of what rules are in
-effect when the regular expression is executed. And if a regular
-expression is interpolated into a larger one, the original's rules
-continue to apply to it, and only it.
+The C</d>, C</u>, and C</l> modifiers are not likely to be of much use
+to you, and so you need not worry about them very much. They exist for
+Perl's internal use, so that complex regular expression data structures
+can be automatically serialized and later exactly reconstituted,
+including all their nuances. But, since Perl can't keep a secret, and
+there may be rare instances where they are useful, they are documented
+here.
+
+The C</a> modifier, on the other hand, may be useful. Its purpose is to
+allow code that is to work mostly on ASCII data to not have to concern
+itself with Unicode.
+
+Briefly, C</l> sets the character set to that of whatever B<L>ocale is in
+effect at the time of the execution of the pattern match.
+
+C</u> sets the character set to B<U>nicode.
+
+C</a> also sets the character set to Unicode, BUT adds several
+restrictions for B<A>SCII-safe matching.
+
+C</d> is the old, problematic, pre-5.14 B<D>efault character set
+behavior. Its only use is to force that old behavior.
+
+At any given time, exactly one of these modifiers is in effect. Their
+existence allows Perl to keep the originally compiled behavior of a
+regular expression, regardless of what rules are in effect when it is
+actually executed. And if it is interpolated into a larger regex, the
+original's rules continue to apply to it, and only it.
+
+The C</l> and C</u> modifiers are automatically selected for
+regular expressions compiled within the scope of various pragmas,
+and we recommend that in general, you use those pragmas instead of
+specifying these modifiers explicitly. For one thing, the modifiers
+affect only pattern matching, and do not extend to even any replacement
+done, whereas using the pragmas give consistent results for all
+appropriate operations within their scopes. For example,
+
+ s/foo/\Ubar/il
-Note that the modifiers affect only pattern matching, and do not extend
-to any replacement done. For example,
+will match "foo" using the locale's rules for case-insensitive matching,
+but the C</l> does not affect how the C<\U> operates. Most likely you
+want both of them to use locale rules. To do this, instead compile the
+regular expression within the scope of C<use locale>. This both
+implicitly adds the C</l> and applies locale rules to the C<\U>. The
+lesson is to C<use locale> and not C</l> explicitly.
- s/foo/\Ubar/l
+Similarly, it would be better to use C<use feature 'unicode_strings'>
+instead of,
-will uppercase "bar", but the C</l> does not affect how the C<\U>
-operates. If C<use locale> is in effect, the C<\U> will use locale
-rules; if C<use feature 'unicode_strings'> is in effect, it will
-use Unicode rules, etc.
+ s/foo/\Lbar/iu
+
+to get Unicode rules, as the C<\L> in the former (but not necessarily
+the latter) would also use Unicode rules.
+
+More detail on each of the modifiers follows. Most likely you don't
+need to know this detail for C</l>, C</u>, and C</d>, and can skip ahead
+to L<E<sol>a|/E<sol>a (and E<sol>aa)>.
=head4 /l
@@ -185,11 +237,11 @@ Perl only supports single-byte locales. This means that code points
above 255 are treated as Unicode no matter what locale is in effect.
Under Unicode rules, there are a few case-insensitive matches that cross
the 255/256 boundary. These are disallowed under C</l>. For example,
-0xFF does not caselessly match the character at 0x178, C<LATIN CAPITAL
-LETTER Y WITH DIAERESIS>, because 0xFF may not be C<LATIN SMALL LETTER Y
-WITH DIAERESIS> 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.
+0xFF (on ASCII platforms) does not caselessly match the character at
+0x178, C<LATIN CAPITAL LETTER Y WITH DIAERESIS>, because 0xFF may not be
+C<LATIN SMALL LETTER Y WITH DIAERESIS> 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.
This modifier may be specified to be the default by C<use locale>, but
see L</Which character set modifier is in effect?>.
@@ -199,13 +251,15 @@ X</l>
means to use Unicode rules when pattern matching. On ASCII platforms,
this means that the code points between 128 and 255 take on their
-Latin-1 (ISO-8859-1) meanings (which are the same as Unicode's), whereas
-in strict ASCII their meanings are undefined. Thus the platform
-effectively becomes a Unicode platform, hence, for example, C<\w> will
-match any of the more than 100_000 word characters in Unicode.
+Latin-1 (ISO-8859-1) meanings (which are the same as Unicode's).
+(Otherwise Perl considers their meanings to be undefined.) Thus,
+under this modifier, the ASCII platform effectively becomes a Unicode
+platform; and hence, for example, C<\w> will match any of the more than
+100_000 word characters in Unicode.
Unlike most locales, which are specific to a language and country pair,
-Unicode classifies all the characters that are letters I<somewhere> as
+Unicode classifies all the characters that are letters I<somewhere> in
+the world as
C<\w>. For example, your locale might not think that C<LATIN SMALL
LETTER ETH> is a letter (unless you happen to speak Icelandic), but
Unicode does. Similarly, all the characters that are decimal digits
@@ -216,9 +270,12 @@ a number is a different quantity than it really is. For example,
C<BENGALI DIGIT FOUR> (U+09EA) looks very much like an
C<ASCII DIGIT EIGHT> (U+0038). And, C<\d+>, may match strings of digits
that are a mixture from different writing systems, creating a security
-issue. L<Unicode::UCD/num()> can be used to sort this out.
+issue. L<Unicode::UCD/num()> can be used to sort
+this out. Or the C</a> modifier can be used to force C<\d> to match
+just the ASCII 0 through 9.
-Also, case-insensitive matching works on the full set of Unicode
+Also, under this modifier, case-insensitive matching works on the full
+set of Unicode
characters. The C<KELVIN SIGN>, for example matches the letters "k" and
"K"; and C<LATIN SMALL LIGATURE FF> matches the sequence "ff", which,
if you're not prepared, might make it look like a hexadecimal constant,
@@ -235,52 +292,11 @@ the C<LATIN CAPITAL LETTER SHARP S> will match any of C<SS>, C<Ss>,
C<sS>, and C<ss>, otherwise not.
This modifier may be specified to be the default by C<use feature
-'unicode_strings>, but see
-L</Which character set modifier is in effect?>.
+'unicode_strings>, C<use locale ':not_characters'>, or
+C<L<use 5.012|perlfunc/use VERSION>> (or higher),
+but see L</Which character set modifier is in effect?>.
X</u>
-=head4 /a
-
-is the same as C</u>, except that C<\d>, C<\s>, C<\w>, and the
-Posix character classes are restricted to matching in the ASCII range
-only. That is, with this modifier, C<\d> always means precisely the
-digits C<"0"> to C<"9">; C<\s> means the five characters C<[ \f\n\r\t]>;
-C<\w> means the 63 characters C<[A-Za-z0-9_]>; and likewise, all the
-Posix classes such as C<[[:print:]]> match only the appropriate
-ASCII-range characters.
-
-This modifier is useful for people who only incidentally use Unicode.
-With it, one can write C<\d> with confidence that it will only match
-ASCII characters, and should the need arise to match beyond ASCII, you
-can use C<\p{Digit}>, or C<\p{Word}> for C<\w>. There are similar
-C<\p{...}> constructs that can match white space and Posix classes
-beyond ASCII. See L<perlrecharclass/POSIX Character Classes>.
-
-As you would expect, this modifier causes, for example, C<\D> to mean
-the same thing as C<[^0-9]>; in fact, all non-ASCII characters match
-C<\D>, C<\S>, and C<\W>. C<\b> still means to match at the boundary
-between C<\w> and C<\W>, using the C</a> definitions of them (similarly
-for C<\B>).
-
-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 rules when it
-comes to case-insensitive matching.
-
-To forbid ASCII/non-ASCII matches (like "k" with C<\N{KELVIN SIGN}>),
-specify the "a" twice, for example C</aai> or C</aia>
-
-To reiterate, this modifier provides protection for applications that
-don't wish to be exposed to all of Unicode. Specifying it twice
-gives added protection.
-
-This modifier may be specified to be the default by C<use re '/a'>
-or C<use re '/aa'>, but see
-L</Which character set modifier is in effect?>.
-X</a>
-X</aa>
-
=head4 /d
This modifier means to use the "Default" native rules of the platform
@@ -313,7 +329,9 @@ the pattern uses a Unicode property (C<\p{...}>)
Another mnemonic for this modifier is "Depends", as the rules actually
used depend on various things, and as a result you can get unexpected
-results. See L<perlunicode/The "Unicode Bug">.
+results. See L<perlunicode/The "Unicode Bug">. The Unicode Bug has
+become rather infamous, leading to yet another (printable) name for this
+modifier, "Dodgy".
On ASCII platforms, the native rules are ASCII, and on EBCDIC platforms
(at least the ones that Perl handles), they are Latin-1.
@@ -327,26 +345,98 @@ Here are some examples of how that works on an ASCII platform:
chop $str;
$str =~ /^\w/; # Still a match! $str remains in UTF-8 format.
+This modifier is automatically selected by default when none of the
+others are, so yet another name for it is "Default".
+
+Because of the unexpected behaviors associated with this modifier, you
+probably should only use it to maintain weird backward compatibilities.
+
+=head4 /a (and /aa)
+
+This modifier stands for ASCII-restrict (or ASCII-safe). This modifier,
+unlike the others, may be doubled-up to increase its effect.
+
+When it appears singly, it causes the sequences C<\d>, C<\s>, C<\w>, and
+the Posix character classes to match only in the ASCII range. They thus
+revert to their pre-5.6, pre-Unicode meanings. Under C</a>, C<\d>
+always means precisely the digits C<"0"> to C<"9">; C<\s> means the five
+characters C<[ \f\n\r\t]>; C<\w> means the 63 characters
+C<[A-Za-z0-9_]>; and likewise, all the Posix classes such as
+C<[[:print:]]> match only the appropriate ASCII-range characters.
+
+This modifier is useful for people who only incidentally use Unicode,
+and who do not wish to be burdened with its complexities and security
+concerns.
+
+With C</a>, one can write C<\d> with confidence that it will only match
+ASCII characters, and should the need arise to match beyond ASCII, you
+can instead use C<\p{Digit}> (or C<\p{Word}> for C<\w>). There are
+similar C<\p{...}> constructs that can match beyond ASCII both white
+space (see L<perlrecharclass/Whitespace>), and Posix classes (see
+L<perlrecharclass/POSIX Character Classes>). Thus, this modifier
+doesn't mean you can't use Unicode, it means that to get Unicode
+matching you must explicitly use a construct (C<\p{}>, C<\P{}>) that
+signals Unicode.
+
+As you would expect, this modifier causes, for example, C<\D> to mean
+the same thing as C<[^0-9]>; in fact, all non-ASCII characters match
+C<\D>, C<\S>, and C<\W>. C<\b> still means to match at the boundary
+between C<\w> and C<\W>, using the C</a> definitions of them (similarly
+for C<\B>).
+
+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 rules when it
+comes to case-insensitive matching.
+
+To forbid ASCII/non-ASCII matches (like "k" with C<\N{KELVIN SIGN}>),
+specify the "a" twice, for example C</aai> or C</aia>. (The first
+occurrence of "a" restricts the C<\d>, etc., and the second occurrence
+adds the C</i> restrictions.) But, note that code points outside the
+ASCII range will use Unicode rules for C</i> matching, so the modifier
+doesn't really restrict things to just ASCII; it just forbids the
+intermixing of ASCII and non-ASCII.
+
+To summarize, this modifier provides protection for applications that
+don't wish to be exposed to all of Unicode. Specifying it twice
+gives added protection.
+
+This modifier may be specified to be the default by C<use re '/a'>
+or C<use re '/aa'>. If you do so, you may actually have occasion to use
+the C</u> modifier explictly if there are a few regular expressions
+where you do want full Unicode rules (but even here, it's best if
+everything were under feature C<"unicode_strings">, along with the
+C<use re '/aa'>). Also see L</Which character set modifier is in
+effect?>.
+X</a>
+X</aa>
+
=head4 Which character set modifier is in effect?
Which of these modifiers is in effect at any given point in a regular
-expression depends on a fairly complex set of interactions. As
+expression depends on a fairly complex set of interactions. These have
+been designed so that in general you don't have to worry about it, but
+this section gives the gory details. As
explained below in L</Extended Patterns> it is possible to explicitly
specify modifiers that apply only to portions of a regular expression.
The innermost always has priority over any outer ones, and one applying
to the whole expression has priority over any of the default settings that are
described in the remainder of this section.
-The C<L<use re 'E<sol>foo'|re/'E<sol>flags' mode">> pragma can be used to set
+The C<L<use re 'E<sol>foo'|re/"'/flags' mode">> pragma can be used to set
default modifiers (including these) for regular expressions compiled
within its scope. This pragma has precedence over the other pragmas
-listed below that change the defaults.
+listed below that also change the defaults.
Otherwise, C<L<use locale|perllocale>> sets the default modifier to C</l>;
-and C<L<use feature 'unicode_strings|feature>> or
+and C<L<use feature 'unicode_strings|feature>>, or
C<L<use 5.012|perlfunc/use VERSION>> (or higher) set the default to
C</u> when not in the same scope as either C<L<use locale|perllocale>>
-or C<L<use bytes|bytes>>. Unlike the mechanisms mentioned above, these
+or C<L<use bytes|bytes>>.
+(C<L<use locale ':not_characters'|perllocale/Unicode and UTF-8>> also
+sets the default to C</u>, overriding any plain C<use locale>.)
+Unlike the mechanisms mentioned above, these
affect operations besides regular expressions pattern matching, and so
give more consistent results with other operators, including using
C<\U>, C<\l>, etc. in substitution replacements.
@@ -423,8 +513,23 @@ X<metacharacter> X<quantifier> X<*> X<+> X<?> X<{n}> X<{n,}> X<{n,m}>
(If a curly bracket occurs in any other context and does not form part of
a backslashed sequence like C<\x{...}>, it is treated
-as a regular character. In particular, the lower bound
-is not optional.) The "*" quantifier is equivalent to C<{0,}>, the "+"
+as a regular character. In particular, the lower quantifier bound
+is not optional. However, in Perl v5.18, it is planned to issue a
+deprecation warning for all such occurrences, and in Perl v5.20 to
+require literal uses of a curly bracket to be escaped, say by preceding
+them with a backslash or enclosing them within square brackets, (C<"\{">
+or C<"[{]">). This change will allow for future syntax extensions (like
+making the lower bound of a quantifier optional), and better error
+checking of quantifiers. Now, a typo in a quantifier silently causes
+it to be treated as the literal characters. For example,
+
+ /o{4,3}/
+
+looks like a quantifier that matches 0 times, since 4 is greater than 3,
+but it really means to match the sequence of six characters
+S<C<"o { 4 , 3 }">>.)
+
+The "*" quantifier is equivalent to C<{0,}>, the "+"
quantifier to C<{1,}>, and the "?" quantifier to C<{0,1}>. n and m are limited
to non-negative integral values less than a preset limit defined when perl is built.
This is usually 32766 on the most common platforms. The actual limit can
@@ -830,6 +935,8 @@ backslash interpolation may lead to confusing results. If you
I<need> to use literal backslashes within C<\Q...\E>,
consult L<perlop/"Gory details of parsing quoted constructs">.
+C<quotemeta()> and C<\Q> are fully described in L<perlfunc/quotemeta>.
+
=head2 Extended Patterns
Perl also defines a consistent extension syntax for features not
@@ -850,7 +957,7 @@ construct because 1) question marks are rare in older regular
expressions, and 2) whenever you see one, you should stop and
"question" exactly what is going on. That's psychology....
-=over 10
+=over 4
=item C<(?#text)>
X<(?#)>
@@ -892,7 +999,7 @@ repetition of the previous word, assuming the C</x> modifier, and no C</i>
modifier outside this group.
These modifiers do not carry over into named subpatterns called in the
-enclosing group. In other words, a pattern such as C<((?i)(&NAME))> does not
+enclosing group. In other words, a pattern such as C<((?i)(?&NAME))> does not
change the case-sensitivity of the "NAME" pattern.
Any of these modifiers can be set to apply globally to all regular
@@ -1168,16 +1275,17 @@ C<local>ization are undone, so that
$_ = 'a' x 8;
m<
- (?{ $cnt = 0 }) # Initialize $cnt.
+ (?{ $cnt = 0 }) # Initialize $cnt.
(
a
(?{
- local $cnt = $cnt + 1; # Update $cnt, backtracking-safe.
+ local $cnt = $cnt + 1; # Update $cnt,
+ # backtracking-safe.
})
)*
aaaa
- (?{ $res = $cnt }) # On success copy to
- # non-localized location.
+ (?{ $res = $cnt }) # On success copy to
+ # non-localized location.
>x;
will set C<$res = 4>. Note that after the match, C<$cnt> returns to the globally
@@ -1241,8 +1349,9 @@ of evaluation is considered a regular expression and matched as
if it were inserted instead of this construct. Note that this means
that the contents of capture groups defined inside an eval'ed pattern
are not available outside of the pattern, and vice versa, there is no
-way for the inner pattern to refer to a capture group defined outside.
-Thus,
+way for the inner pattern returned from the code block to refer to a
+capture group defined outside. (The code block itself can use C<$1>, etc.,
+to refer to the enclosing pattern's capture groups.) Thus,
('a' x 100)=~/(??{'(.)' x 100})/
@@ -1253,15 +1362,15 @@ where the C<code> ends are currently somewhat convoluted.
The following pattern matches a parenthesized group:
- $re = qr{
- \(
- (?:
- (?> [^()]+ ) # Non-parens without backtracking
- |
- (??{ $re }) # Group with matching parens
- )*
- \)
- }x;
+ $re = qr{
+ \(
+ (?:
+ (?> [^()]+ ) # Non-parens without backtracking
+ |
+ (??{ $re }) # Group with matching parens
+ )*
+ \)
+ }x;
See also C<(?PARNO)> for a different, more efficient way to accomplish
the same task.
@@ -1305,15 +1414,15 @@ included.
The following pattern matches a function foo() which may contain
balanced parentheses as the argument.
- $re = qr{ ( # paren group 1 (full function)
+ $re = qr{ ( # paren group 1 (full function)
foo
- ( # paren group 2 (parens)
+ ( # paren group 2 (parens)
\(
- ( # paren group 3 (contents of parens)
+ ( # paren group 3 (contents of parens)
(?:
- (?> [^()]+ ) # Non-parens without backtracking
+ (?> [^()]+ ) # Non-parens without backtracking
|
- (?2) # Recurse to start of paren group 2
+ (?2) # Recurse to start of paren group 2
)*
)
\)
@@ -1473,6 +1582,19 @@ after the recursion returns, so the extra layer of capturing groups is
necessary. Thus C<$+{NAME_PAT}> would not be defined even though
C<$+{NAME}> would be.
+Finally, keep in mind that subpatterns created inside a DEFINE block
+count towards the absolute and relative number of captures, so this:
+
+ my @captures = "a" =~ /(.) # First capture
+ (?(DEFINE)
+ (?<EXAMPLE> 1 ) # Second capture
+ )/x;
+ say scalar @captures;
+
+Will output 2, not 1. This is particularly important if you intend to
+compile the definitions with the C<qr//> operator, and later
+interpolate them in another pattern.
+
=item C<< (?>pattern) >>
X<backtrack> X<backtracking> X<atomic> X<possessive>
@@ -1618,7 +1740,7 @@ Use C<local> to localize changes to them to a specific scope if necessary.
If a pattern does not contain a special backtracking verb that allows an
argument, then C<$REGERROR> and C<$REGMARK> are not touched at all.
-=over 4
+=over 3
=item Verbs that take an argument
@@ -1675,7 +1797,6 @@ replaced with a C<< (?>pattern) >> with no functional difference; however,
C<(*PRUNE)> can be used to handle cases that cannot be expressed using a
C<< (?>pattern) >> alone.
-
=item C<(*SKIP)> C<(*SKIP:NAME)>
X<(*SKIP)>
@@ -1696,8 +1817,8 @@ executing the (*SKIP) pattern.
Compare the following to the examples in C<(*PRUNE)>; note the string
is twice as long:
- 'aaabaaab' =~ /a+b?(*SKIP)(?{print "$&\n"; $count++})(*FAIL)/;
- print "Count=$count\n";
+ 'aaabaaab' =~ /a+b?(*SKIP)(?{print "$&\n"; $count++})(*FAIL)/;
+ print "Count=$count\n";
outputs
@@ -1710,7 +1831,7 @@ executed, the next starting point will be where the cursor was when the
C<(*SKIP)> was executed.
=item C<(*MARK:NAME)> C<(*:NAME)>
-X<(*MARK)> C<(*MARK:NAME)> C<(*:NAME)>
+X<(*MARK)> X<(*MARK:NAME)> X<(*:NAME)>
This zero-width pattern can be used to mark the point reached in a string
when a certain part of the pattern has been successfully matched. This
@@ -1738,16 +1859,18 @@ failing the match and has provided its own name to use, the C<$REGERROR>
variable will be set to the name of the most recently executed
C<(*MARK:NAME)>.
-See C<(*SKIP)> for more details.
+See L</(*SKIP)> for more details.
As a shortcut C<(*MARK:NAME)> can be written C<(*:NAME)>.
=item C<(*THEN)> C<(*THEN:NAME)>
-This is similar to the "cut group" operator C<::> from Perl 6. Like
+This is similar to the "cut group" operator C<::> from Perl 6. Like
C<(*PRUNE)>, this verb always matches, and when backtracked into on
failure, it causes the regex engine to try the next alternation in the
-innermost enclosing group (capturing or otherwise).
+innermost enclosing group (capturing or otherwise) that has alternations.
+The two branches of a C<(?(condition)yes-pattern|no-pattern)> do not
+count as an alternation, as far as C<(*THEN)> is concerned.
Its name comes from the observation that this operation combined with the
alternation operator (C<|>) can be used to create what is essentially a
@@ -1775,6 +1898,12 @@ is not the same as
as after matching the A but failing on the B the C<(*THEN)> verb will
backtrack and try C; but the C<(*PRUNE)> verb will simply fail.
+=back
+
+=item Verbs without an argument
+
+=over 4
+
=item C<(*COMMIT)>
X<(*COMMIT)>
@@ -1784,8 +1913,8 @@ into on failure it causes the match to fail outright. No further attempts
to find a valid match by advancing the start pointer will occur again.
For example,
- 'aaabaaab' =~ /a+b?(*COMMIT)(?{print "$&\n"; $count++})(*FAIL)/;
- print "Count=$count\n";
+ 'aaabaaab' =~ /a+b?(*COMMIT)(?{print "$&\n"; $count++})(*FAIL)/;
+ print "Count=$count\n";
outputs
@@ -1796,12 +1925,6 @@ In other words, once the C<(*COMMIT)> has been entered, and if the pattern
does not match, the regex engine will not try any further matching on the
rest of the string.
-=back
-
-=item Verbs without an argument
-
-=over 4
-
=item C<(*FAIL)> C<(*F)>
X<(*FAIL)> X<(*F)>
@@ -2181,7 +2304,7 @@ However, long experience has shown that many programming tasks may
be significantly simplified by using repeated subexpressions that
may match zero-length substrings. Here's a simple example being:
- @chars = split //, $string; # // is not magic in split
+ @chars = split //, $string; # // is not magic in split
($whitewashed = $string) =~ s/()/ /g; # parens avoid magic s// /
Thus Perl allows such constructs, by I<forcefully breaking
diff --git a/Master/tlpkg/tlperl/lib/pods/perlreapi.pod b/Master/tlpkg/tlperl/lib/pods/perlreapi.pod
index 1c694a72318..5e456208684 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlreapi.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlreapi.pod
@@ -120,6 +120,8 @@ TODO: Document those cases.
=item C</p> - RXf_PMf_KEEPCOPY
+TODO: Document this
+
=item Character set
The character set semantics are determined by an enum that is contained
@@ -127,11 +129,11 @@ in this field. This is still experimental and subject to change, but
the current interface returns the rules by use of the in-line function
C<get_regex_charset(const U32 flags)>. The only currently documented
value returned from it is REGEX_LOCALE_CHARSET, which is set if
-C<use locale> is in effect. If present in C<< rx->extflags >>
-C<split> will use the locale dependent definition of whitespace under
-when RXf_SKIPWHITE or RXf_WHITE are in effect. Under ASCII whitespace
+C<use locale> is in effect. If present in C<< rx->extflags >>,
+C<split> will use the locale dependent definition of whitespace
+when RXf_SKIPWHITE or RXf_WHITE is in effect. ASCII whitespace
is defined as per L<isSPACE|perlapi/isSPACE>, and by the internal
-macros C<is_utf8_space> under UTF-8 and C<isSPACE_LC> under C<use
+macros C<is_utf8_space> under UTF-8, and C<isSPACE_LC> under C<use
locale>.
=back
@@ -287,7 +289,7 @@ sure this is used as the new value (or reject it).
Example:
if ("ook" =~ /(o*)/) {
- # `paren' will be `1' and `value' will be `ee'
+ # 'paren' will be '1' and 'value' will be 'ee'
$1 =~ tr/o/e/;
}
@@ -584,7 +586,7 @@ Substring data about strings that must appear in the final match. This
is currently only used internally by perl's engine for but might be
used in the future for all engines for optimisations.
-=head2 C<nparens>, C<lasparen>, and C<lastcloseparen>
+=head2 C<nparens>, C<lastparen>, and C<lastcloseparen>
These fields are used to keep track of how many paren groups could be matched
in the pattern, which was the last open paren to be entered, and which was
diff --git a/Master/tlpkg/tlperl/lib/pods/perlrebackslash.pod b/Master/tlpkg/tlperl/lib/pods/perlrebackslash.pod
index 8f2490d78ee..f81af0c6dd7 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlrebackslash.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlrebackslash.pod
@@ -75,6 +75,7 @@ as C<Not in [].>
\e Escape character.
\E Turn off \Q, \L and \U processing. Not in [].
\f Form feed.
+ \F Foldcase till \E. Not in [].
\g{}, \g1 Named, absolute or relative backreference. Not in []
\G Pos assertion. Not in [].
\h Character class for horizontal whitespace.
@@ -89,7 +90,8 @@ as C<Not in [].>
\o{} Octal escape sequence.
\p{}, \pP Character with the given Unicode property.
\P{}, \PP Character without the given Unicode property.
- \Q Quotemeta till \E. Not in [].
+ \Q Quote (disable) pattern metacharacters till \E. Not
+ in [].
\r Return character.
\R Generic new line. Not in [].
\s Character class for whitespace.
@@ -173,8 +175,7 @@ C<\N{}> construct to specify a character by either of these values.
Certain sequences of characters also have names.
To specify by name, the name of the character or character sequence goes
-between the curly braces. In this case, you have to C<use charnames> to
-load the Unicode names of the characters; otherwise Perl will complain.
+between the curly braces.
To specify a character by Unicode code point, use the form C<\N{U+I<code
point>}>, where I<code point> is a number in hexadecimal that gives the
@@ -201,7 +202,6 @@ meaning by the regex engine, and will match "as is".
=head4 Example
- use charnames ':full'; # Loads the Unicode names.
$str =~ /\N{THAI CHARACTER SO SO}/; # Matches the Thai SO SO character
use charnames 'Cyrillic'; # Loads Cyrillic names.
@@ -332,13 +332,20 @@ them, until either the end of the pattern or the next occurrence of
C<\E>, whichever comes first. They provide functionality similar to what
the functions C<lc> and C<uc> provide.
-C<\Q> is used to escape all characters following, up to the next C<\E>
-or the end of the pattern. C<\Q> adds a backslash to any character that
-isn't a letter, digit, or underscore. This ensures that any character
-between C<\Q> and C<\E> shall be matched literally, not interpreted
-as a metacharacter by the regex engine.
+C<\Q> is used to quote (disable) pattern metacharacters, up to the next
+C<\E> or the end of the pattern. C<\Q> adds a backslash to any character
+that could have special meaning to Perl. In the ASCII range, it quotes
+every character that isn't a letter, digit, or underscore. See
+L<perlfunc/quotemeta> for details on what gets quoted for non-ASCII
+code points. Using this ensures that any character between C<\Q> and
+C<\E> will be matched literally, not interpreted as a metacharacter by
+the regex engine.
-Mnemonic: I<L>owercase, I<U>ppercase, I<Q>uotemeta, I<E>nd.
+C<\F> can be used to casefold all characters following, up to the next C<\E>
+or the end of the pattern. It provides the functionality similar to
+the C<fc> function.
+
+Mnemonic: I<L>owercase, I<U>ppercase, I<F>old-case, I<Q>uotemeta, I<E>nd.
=head4 Examples
@@ -603,11 +610,21 @@ linebreak sequence by Unicode. This includes all characters matched by
C<\v> (vertical whitespace), and the multi character sequence C<"\x0D\x0A">
(carriage return followed by a line feed, sometimes called the network
newline; it's the end of line sequence used in Microsoft text files opened
-in binary mode). C<\R> is equivalent to C<< (?>\x0D\x0A)|\v) >>. Since
+in binary mode). C<\R> is equivalent to C<< (?>\x0D\x0A|\v) >>. (The
+reason it doesn't backtrack is that the sequence is considered
+inseparable. That means that
+
+ "\x0D\x0A" =~ /^\R\x0A$/ # No match
+
+fails, because the C<\R> matches the entire string, and won't backtrack
+to match just the C<"\x0D">.) Since
C<\R> can match a sequence of more than one character, it cannot be put
inside a bracketed character class; C</[\R]/> is an error; use C<\v>
instead. C<\R> was introduced in perl 5.10.0.
+Note that this does not respect any locale that might be in effect; it
+matches according to the platform's native character set.
+
Mnemonic: none really. C<\R> was picked because PCRE already uses C<\R>,
and more importantly because Unicode recommends such a regular expression
metacharacter, and suggests C<\R> as its notation.
diff --git a/Master/tlpkg/tlperl/lib/pods/perlrecharclass.pod b/Master/tlpkg/tlperl/lib/pods/perlrecharclass.pod
index b7526b45fae..06d206b2f8b 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlrecharclass.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlrecharclass.pod
@@ -26,7 +26,7 @@ to mean just the bracketed form. Certainly, most Perl documentation does that.
The dot (or period), C<.> is probably the most used, and certainly
the most well-known character class. By default, a dot matches any
-character, except for the newline. The default can be changed to
+character, except for the newline. That default can be changed to
add matching the newline by using the I<single line> modifier: either
for the entire regular expression with the C</s> modifier, or
locally with C<(?s)>. (The experimental C<\N> backslash sequence, described
@@ -72,10 +72,25 @@ character classes, see L<perlrebackslash>.)
\pP, \p{Prop} Match a character that has the given Unicode property.
\PP, \P{Prop} Match a character that doesn't have the Unicode property
+=head3 \N
+
+C<\N> is new in 5.12, and is experimental. It, like the dot, matches any
+character that is not a newline. The difference is that C<\N> is not influenced
+by the I<single line> regular expression modifier (see L</The dot> above). Note
+that the form C<\N{...}> may mean something completely different. When the
+C<{...}> is a L<quantifier|perlre/Quantifiers>, it means to match a non-newline
+character that many times. For example, C<\N{3}> means to match 3
+non-newlines; C<\N{5,}> means to match 5 or more non-newlines. But if C<{...}>
+is not a legal quantifier, it is presumed to be a named character. See
+L<charnames> for those. For example, none of C<\N{COLON}>, C<\N{4F}>, and
+C<\N{F4}> contain legal quantifiers, so Perl will try to find characters whose
+names are respectively C<COLON>, C<4F>, and C<F4>.
+
=head3 Digits
C<\d> matches a single character considered to be a decimal I<digit>.
-If the C</a> modifier in effect, it matches [0-9]. Otherwise, it
+If the C</a> regular expression modifier is in effect, it matches [0-9].
+Otherwise, it
matches anything that is matched by C<\p{Digit}>, which includes [0-9].
(An unlikely possible exception is that under locale matching rules, the
current locale might not have [0-9] matched by C<\d>, and/or might match
@@ -94,7 +109,8 @@ very much like an ASCII DIGIT EIGHT (U+0038). An application that
is expecting only the ASCII digits might be misled, or if the match is
C<\d+>, the matched string might contain a mixture of digits from
different writing systems that look like they signify a number different
-than they actually do. L<Unicode::UCD/num()> can be used to safely
+than they actually do. L<Unicode::UCD/num()> can
+be used to safely
calculate the value, returning C<undef> if the input string contains
such a mixture.
@@ -114,7 +130,7 @@ plus three 'ones'. This positional notation does not necessarily apply
to characters that match the other type of "digit",
C<\p{Numeric_Type=Digit}>, and so C<\d> doesn't match them.
-In Unicode 5.2, the Tamil digits (U+0BE6 - U+0BEF) can also legally be
+The Tamil digits (U+0BE6 - U+0BEF) can also legally be
used in old-style Tamil numbers in which they would appear no more than
one in a row, separated by characters that mean "times 10", "times 100",
etc. (See L<http://www.unicode.org/notes/tn21>.)
@@ -178,8 +194,9 @@ characters. See L<http://unicode.org/reports/tr36>.
Also, for a somewhat finer-grained set of characters that are in programming
language identifiers beyond the ASCII range, you may wish to instead use the
-more customized Unicode properties, "ID_Start", ID_Continue", "XID_Start", and
-"XID_Continue". See L<http://unicode.org/reports/tr31>.
+more customized L</Unicode Properties>, C<\p{ID_Start}>,
+C<\p{ID_Continue}>, C<\p{XID_Start}>, and C<\p{XID_Continue}>. See
+L<http://unicode.org/reports/tr31>.
Any character not matched by C<\w> is matched by C<\W>.
@@ -235,63 +252,69 @@ Which rules apply are determined as described in L<perlre/Which character set mo
Any character not matched by C<\s> is matched by C<\S>.
C<\h> matches any character considered horizontal whitespace;
-this includes the space and tab characters and several others
+this includes the platform's space and tab characters and several others
listed in the table below. C<\H> matches any character
-not considered horizontal whitespace.
+not considered horizontal whitespace. They use the platform's native
+character set, and do not consider any locale that may otherwise be in
+use.
C<\v> matches any character considered vertical whitespace;
-this includes the carriage return and line feed characters (newline)
+this includes the platform's carriage return and line feed characters (newline)
plus several other characters, all listed in the table below.
C<\V> matches any character not considered vertical whitespace.
+They use the platform's native character set, and do not consider any
+locale that may otherwise be in use.
C<\R> matches anything that can be considered a newline under Unicode
rules. It's not a character class, as it can match a multi-character
sequence. Therefore, it cannot be used inside a bracketed character
-class; use C<\v> instead (vertical whitespace).
+class; use C<\v> instead (vertical whitespace). It uses the platform's
+native character set, and does not consider any locale that may
+otherwise be in use.
Details are discussed in L<perlrebackslash>.
Note that unlike C<\s> (and C<\d> and C<\w>), C<\h> and C<\v> always match
-the same characters, without regard to other factors, such as whether the
-source string is in UTF-8 format.
+the same characters, without regard to other factors, such as the active
+locale or whether the source string is in UTF-8 format.
One might think that C<\s> is equivalent to C<[\h\v]>. This is not true.
-For example, the vertical tab (C<"\x0b">) is not matched by C<\s>, it is
-however considered vertical whitespace.
+The difference is that the vertical tab (C<"\x0b">) is not matched by
+C<\s>; it is however considered vertical whitespace.
The following table is a complete listing of characters matched by
C<\s>, C<\h> and C<\v> as of Unicode 6.0.
-The first column gives the code point of the character (in hex format),
+The first column gives the Unicode code point of the character (in hex format),
the second column gives the (Unicode) name. The third column indicates
by which class(es) the character is matched (assuming no locale or EBCDIC code
page is in effect that changes the C<\s> matching).
- 0x00009 CHARACTER TABULATION h s
- 0x0000a LINE FEED (LF) vs
- 0x0000b LINE TABULATION v
- 0x0000c FORM FEED (FF) vs
- 0x0000d CARRIAGE RETURN (CR) vs
- 0x00020 SPACE h s
- 0x00085 NEXT LINE (NEL) vs [1]
- 0x000a0 NO-BREAK SPACE h s [1]
- 0x01680 OGHAM SPACE MARK h s
- 0x0180e MONGOLIAN VOWEL SEPARATOR h s
- 0x02000 EN QUAD h s
- 0x02001 EM QUAD h s
- 0x02002 EN SPACE h s
- 0x02003 EM SPACE h s
- 0x02004 THREE-PER-EM SPACE h s
- 0x02005 FOUR-PER-EM SPACE h s
- 0x02006 SIX-PER-EM SPACE h s
- 0x02007 FIGURE SPACE h s
- 0x02008 PUNCTUATION SPACE h s
- 0x02009 THIN SPACE h s
- 0x0200a HAIR SPACE h s
- 0x02028 LINE SEPARATOR vs
- 0x02029 PARAGRAPH SEPARATOR vs
- 0x0202f NARROW NO-BREAK SPACE h s
- 0x0205f MEDIUM MATHEMATICAL SPACE h s
- 0x03000 IDEOGRAPHIC SPACE h s
+ 0x0009 CHARACTER TABULATION h s
+ 0x000a LINE FEED (LF) vs
+ 0x000b LINE TABULATION v
+ 0x000c FORM FEED (FF) vs
+ 0x000d CARRIAGE RETURN (CR) vs
+ 0x0020 SPACE h s
+ 0x0085 NEXT LINE (NEL) vs [1]
+ 0x00a0 NO-BREAK SPACE h s [1]
+ 0x1680 OGHAM SPACE MARK h s
+ 0x180e MONGOLIAN VOWEL SEPARATOR h s
+ 0x2000 EN QUAD h s
+ 0x2001 EM QUAD h s
+ 0x2002 EN SPACE h s
+ 0x2003 EM SPACE h s
+ 0x2004 THREE-PER-EM SPACE h s
+ 0x2005 FOUR-PER-EM SPACE h s
+ 0x2006 SIX-PER-EM SPACE h s
+ 0x2007 FIGURE SPACE h s
+ 0x2008 PUNCTUATION SPACE h s
+ 0x2009 THIN SPACE h s
+ 0x200a HAIR SPACE h s
+ 0x2028 LINE SEPARATOR vs
+ 0x2029 PARAGRAPH SEPARATOR vs
+ 0x202f NARROW NO-BREAK SPACE h s
+ 0x205f MEDIUM MATHEMATICAL SPACE h s
+ 0x3000 IDEOGRAPHIC SPACE h s
=over 4
@@ -303,20 +326,6 @@ L<the beginning of this section|/Whitespace>.
=back
-=head3 \N
-
-C<\N> is new in 5.12, and is experimental. It, like the dot, matches any
-character that is not a newline. The difference is that C<\N> is not influenced
-by the I<single line> regular expression modifier (see L</The dot> above). Note
-that the form C<\N{...}> may mean something completely different. When the
-C<{...}> is a L<quantifier|perlre/Quantifiers>, it means to match a non-newline
-character that many times. For example, C<\N{3}> means to match 3
-non-newlines; C<\N{5,}> means to match 5 or more non-newlines. But if C<{...}>
-is not a legal quantifier, it is presumed to be a named character. See
-L<charnames> for those. For example, none of C<\N{COLON}>, C<\N{4F}>, and
-C<\N{F4}> contain legal quantifiers, so Perl will try to find characters whose
-names are respectively C<COLON>, C<4F>, and C<F4>.
-
=head3 Unicode Properties
C<\pP> and C<\p{Prop}> are character classes to match characters that fit given
@@ -329,7 +338,7 @@ which means to match if the property "name" for the character has that particula
For instance, a match for a number can be written as C</\pN/> or as
C</\p{Number}/>, or as C</\p{Number=True}/>.
Lowercase letters are matched by the property I<Lowercase_Letter> which
-has as short form I<Ll>. They need the braces, so are written as C</\p{Ll}/> or
+has the short form I<Ll>. They need the braces, so are written as C</\p{Ll}/> or
C</\p{Lowercase_Letter}/>, or C</\p{General_Category=Lowercase_Letter}/>
(the underscores are optional).
C</\pLl/> is valid, but means something different.
@@ -353,11 +362,11 @@ C<Lowercase>,
and C<Titlecase>,
all of which match C<Cased> under C</i> matching.
(The difference between these sets is that some things, such as Roman
-Numerals, come in both upper and lower case so they are C<Cased>, but
+numerals, come in both upper and lower case, so they are C<Cased>, but
aren't considered to be letters, so they aren't C<Cased_Letter>s. They're
actually C<Letter_Number>s.)
This set also includes its subsets C<PosixUpper> and C<PosixLower>, both
-of which under C</i> matching match C<PosixAlpha>.
+of which under C</i> match C<PosixAlpha>.
For more details on Unicode properties, see L<perlunicode/Unicode
Character Properties>; for a
@@ -367,6 +376,17 @@ which notes all forms that have C</i> differences.
It is also possible to define your own properties. This is discussed in
L<perlunicode/User-Defined Character Properties>.
+Unicode properties are defined (surprise!) only on Unicode code points.
+A warning is raised and all matches fail on non-Unicode code points
+(those above the legal Unicode maximum of 0x10FFFF). This can be
+somewhat surprising,
+
+ chr(0x110000) =~ \p{ASCII_Hex_Digit=True} # Fails.
+ chr(0x110000) =~ \p{ASCII_Hex_Digit=False} # Also fails!
+
+Even though these two matches might be thought of as complements, they
+are so only on Unicode code points.
+
=head4 Examples
"a" =~ /\w/ # Match, "a" is a 'word' character.
@@ -419,8 +439,8 @@ Examples:
-------
-* There is an exception to a bracketed character class matching only a
-single character. When the class is to match caselessely under C</i>
+* There is an exception to a bracketed character class matching a
+single character only. When the class is to match caselessly under C</i>
matching rules, and a character inside the class matches a
multiple-character sequence caselessly under Unicode rules, the class
(when not L<inverted|/Negation>) will also match that sequence. For
@@ -503,7 +523,7 @@ of listing all characters in the range, one may use the hyphen (C<->).
If inside a bracketed character class you have two characters separated
by a hyphen, it's treated as if all characters between the two were in
the class. For instance, C<[0-9]> matches any ASCII digit, and C<[a-m]>
-matches any lowercase letter from the first half of the old ASCII alphabet.
+matches any lowercase letter from the first half of the ASCII alphabet.
Note that the two characters on either side of the hyphen are not
necessarily both letters or both digits. Any character is possible,
@@ -537,26 +557,27 @@ Examples:
It is also possible to instead list the characters you do not want to
match. You can do so by using a caret (C<^>) as the first character in the
character class. For instance, C<[^a-z]> matches any character that is not a
-lowercase ASCII letter, which therefore includes almost a hundred thousand
-Unicode letters. The class is said to be "negated" or "inverted".
+lowercase ASCII letter, which therefore includes more than a million
+Unicode code points. The class is said to be "negated" or "inverted".
This syntax make the caret a special character inside a bracketed character
class, but only if it is the first character of the class. So if you want
the caret as one of the characters to match, either escape the caret or
-else not list it first.
+else don't list it first.
In inverted bracketed character classes, Perl ignores the Unicode rules
-that normally say that a given character matches a sequence of multiple
-characters under caseless C</i> matching, which otherwise could be
-highly confusing:
+that normally say that certain characters should match a sequence of
+multiple characters under caseless C</i> matching. Following those
+rules could lead to highly confusing situations:
- "ss" =~ /^[^\xDF]+$/ui;
+ "ss" =~ /^[^\xDF]+$/ui; # Matches!
This should match any sequences of characters that aren't C<\xDF> nor
what C<\xDF> matches under C</i>. C<"s"> isn't C<\xDF>, but Unicode
says that C<"ss"> is what C<\xDF> matches under C</i>. So which one
"wins"? Do you fail the match because the string has C<ss> or accept it
-because it has an C<s> followed by another C<s>?
+because it has an C<s> followed by another C<s>? Perl has chosen the
+latter.
Examples:
@@ -648,67 +669,8 @@ The other counterpart, in the column labelled "Full-range Unicode", matches any
appropriate characters in the full Unicode character set. For example,
C<\p{Alpha}> matches not just the ASCII alphabetic characters, but any
character in the entire Unicode character set considered alphabetic.
-The column labelled "backslash sequence" is a (short) synonym for
-the Full-range Unicode form.
-
-(Each of the counterparts has various synonyms as well.
-L<perluniprops/Properties accessible through \p{} and \P{}> lists all
-synonyms, plus all characters matched by each ASCII-range property.
-For example, C<\p{AHex}> is a synonym for C<\p{ASCII_Hex_Digit}>,
-and any C<\p> property name can be prefixed with "Is" such as C<\p{IsAlpha}>.)
-
-Both the C<\p> counterparts always assume Unicode rules are in effect.
-On ASCII platforms, this means they assume that the code points from 128
-to 255 are Latin-1, and that means that using them under locale rules is
-unwise unless the locale is guaranteed to be Latin-1 or UTF-8. In contrast, the
-POSIX character classes are useful under locale rules. They are
-affected by the actual rules in effect, as follows:
-
-=over
-
-=item If the C</a> modifier, is in effect ...
-
-Each of the POSIX classes matches exactly the same as their ASCII-range
-counterparts.
-
-=item otherwise ...
-
-=over
-
-=item For code points above 255 ...
-
-The POSIX class matches the same as its Full-range counterpart.
-
-=item For code points below 256 ...
-
-=over
-
-=item if locale rules are in effect ...
-
-The POSIX class matches according to the locale.
-
-=item if Unicode rules are in effect or if on an EBCDIC platform ...
-
-The POSIX class matches the same as the Full-range counterpart.
-
-=item otherwise ...
-
-The POSIX class matches the same as the ASCII range counterpart.
-
-=back
-
-=back
-
-=back
-
-Which rules apply are determined as described in
-L<perlre/Which character set modifier is in effect?>.
-
-It is proposed to change this behavior in a future release of Perl so that
-whether or not Unicode rules are in effect would not change the
-behavior: Outside of locale or an EBCDIC code page, the POSIX classes
-would behave like their ASCII-range counterparts. If you wish to
-comment on this proposal, send email to C<perl5-porters@perl.org>.
+An entry in the column labelled "backslash sequence" is a (short)
+equivalent.
[[:...:]] ASCII-range Full-range backslash Note
Unicode Unicode sequence
@@ -766,11 +728,12 @@ it could alter the behavior of C<[[:punct:]]>).
The similarly named property, C<\p{Punct}>, matches a somewhat different
set in the ASCII range, namely
-C<[-!"#%&'()*,./:;?@[\\\]_{}]>. That is, it is missing C<[$+E<lt>=E<gt>^`|~]>.
+C<[-!"#%&'()*,./:;?@[\\\]_{}]>. That is, it is missing the nine
+characters C<[$+E<lt>=E<gt>^`|~]>.
This is because Unicode splits what POSIX considers to be punctuation into two
categories, Punctuation and Symbols.
-C<\p{XPosixPunct}> and (in Unicode mode) C<[[:punct:]]>, match what
+C<\p{XPosixPunct}> and (under Unicode rules) C<[[:punct:]]>, match what
C<\p{PosixPunct}> matches in the ASCII range, plus what C<\p{Punct}>
matches. This is different than strictly matching according to
C<\p{Punct}>. Another way to say it is that
@@ -786,10 +749,66 @@ matches the vertical tab, C<\cK>. Same for the two ASCII-only range forms.
=back
-There are various other synonyms that can be used for these besides
-C<\p{HorizSpace}> and \C<\p{XPosixBlank}>. For example,
-C<\p{PosixAlpha}> can be written as C<\p{Alpha}>. All are listed
-in L<perluniprops/Properties accessible through \p{} and \P{}>.
+There are various other synonyms that can be used besides the names
+listed in the table. For example, C<\p{PosixAlpha}> can be written as
+C<\p{Alpha}>. All are listed in
+L<perluniprops/Properties accessible through \p{} and \P{}>,
+plus all characters matched by each ASCII-range property.
+
+Both the C<\p> counterparts always assume Unicode rules are in effect.
+On ASCII platforms, this means they assume that the code points from 128
+to 255 are Latin-1, and that means that using them under locale rules is
+unwise unless the locale is guaranteed to be Latin-1 or UTF-8. In contrast, the
+POSIX character classes are useful under locale rules. They are
+affected by the actual rules in effect, as follows:
+
+=over
+
+=item If the C</a> modifier, is in effect ...
+
+Each of the POSIX classes matches exactly the same as their ASCII-range
+counterparts.
+
+=item otherwise ...
+
+=over
+
+=item For code points above 255 ...
+
+The POSIX class matches the same as its Full-range counterpart.
+
+=item For code points below 256 ...
+
+=over
+
+=item if locale rules are in effect ...
+
+The POSIX class matches according to the locale, except that
+C<word> uses the platform's native underscore character, no matter what
+the locale is.
+
+=item if Unicode rules are in effect or if on an EBCDIC platform ...
+
+The POSIX class matches the same as the Full-range counterpart.
+
+=item otherwise ...
+
+The POSIX class matches the same as the ASCII range counterpart.
+
+=back
+
+=back
+
+=back
+
+Which rules apply are determined as described in
+L<perlre/Which character set modifier is in effect?>.
+
+It is proposed to change this behavior in a future release of Perl so that
+whether or not Unicode rules are in effect would not change the
+behavior: Outside of locale or an EBCDIC code page, the POSIX classes
+would behave like their ASCII-range counterparts. If you wish to
+comment on this proposal, send email to C<perl5-porters@perl.org>.
=head4 Negation of POSIX character classes
X<character class, negation>
diff --git a/Master/tlpkg/tlperl/lib/pods/perlref.pod b/Master/tlpkg/tlperl/lib/pods/perlref.pod
index 550f4c14d21..0fab80969aa 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlref.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlref.pod
@@ -24,7 +24,7 @@ Hard references are smart--they keep track of reference counts for you,
automatically freeing the thing referred to when its reference count goes
to zero. (Reference counts for values in self-referential or
cyclic data structures may not go to zero without a little help; see
-L<perlobj/"Two-Phased Garbage Collection"> for a detailed explanation.)
+L</"Circular References"> for a detailed explanation.)
If that thing happens to be an object, the object is destructed. See
L<perlobj> for more about objects. (In a sense, everything in Perl is an
object, but we usually reserve the word for references to objects that
@@ -51,6 +51,19 @@ scalar is holding a reference, it always behaves as a simple scalar. It
doesn't magically start being an array or hash or subroutine; you have to
tell it explicitly to do so, by dereferencing it.
+References are easy to use in Perl. There is just one overriding
+principle: in general, Perl does no implicit referencing or dereferencing.
+When a scalar is holding a reference, it always behaves as a simple scalar.
+It doesn't magically start being an array or hash or subroutine; you have to
+tell it explicitly to do so, by dereferencing it.
+
+That said, be aware that Perl version 5.14 introduces an exception
+to the rule, for syntactic convenience. Experimental array and hash container
+function behavior allows array and hash references to be handled by Perl as
+if they had been explicitly syntactically dereferenced. See
+L<perl5140delta/"Syntactical Enhancements">
+and L<perlfunc> for details.
+
=head2 Making References
X<reference, creation> X<referencing>
@@ -458,6 +471,58 @@ as:
print "That yields ${\($n + 5)} widgets\n";
+=head2 Circular References
+X<circular reference> X<reference, circular>
+
+It is possible to create a "circular reference" in Perl, which can lead
+to memory leaks. A circular reference occurs when two references
+contain a reference to each other, like this:
+
+ my $foo = {};
+ my $bar = { foo => $foo };
+ $foo->{bar} = $bar;
+
+You can also create a circular reference with a single variable:
+
+ my $foo;
+ $foo = \$foo;
+
+In this case, the reference count for the variables will never reach 0,
+and the references will never be garbage-collected. This can lead to
+memory leaks.
+
+Because objects in Perl are implemented as references, it's possible to
+have circular references with objects as well. Imagine a TreeNode class
+where each node references its parent and child nodes. Any node with a
+parent will be part of a circular reference.
+
+You can break circular references by creating a "weak reference". A
+weak reference does not increment the reference count for a variable,
+which means that the object can go out of scope and be destroyed. You
+can weaken a reference with the C<weaken> function exported by the
+L<Scalar::Util> module.
+
+Here's how we can make the first example safer:
+
+ use Scalar::Util 'weaken';
+
+ my $foo = {};
+ my $bar = { foo => $foo };
+ $foo->{bar} = $bar;
+
+ weaken $foo->{bar};
+
+The reference from C<$foo> to C<$bar> has been weakened. When the
+C<$bar> variable goes out of scope, it will be garbage-collected. The
+next time you look at the value of the C<< $foo->{bar} >> key, it will
+be C<undef>.
+
+This action at a distance can be confusing, so you should be careful
+with your use of weaken. You should weaken the reference in the
+variable that will go out of scope I<first>. That way, the longer-lived
+variable will contain the expected reference until it goes out of
+scope.
+
=head2 Symbolic references
X<reference, symbolic> X<reference, soft>
X<symbolic reference> X<soft reference>
@@ -510,16 +575,16 @@ variables, which are all "global" to the package.
=head2 Not-so-symbolic references
-A new feature contributing to readability in perl version 5.001 is that the
-brackets around a symbolic reference behave more like quotes, just as they
-always have within a string. That is,
+Since Perl verion 5.001, brackets around a symbolic reference can simply
+serve to isolate an identifier or variable name from the rest of an
+expression, just as they always have within a string. For example,
$push = "pop on ";
print "${push}over";
has always meant to print "pop on over", even though push is
-a reserved word. This has been generalized to work the same outside
-of quotes, so that
+a reserved word. In 5.001, this was generalized to work the same
+without the enclosing double quotes, so that
print ${push} . "over";
@@ -536,9 +601,9 @@ using strict refs:
${ bareword }; # Okay, means $bareword.
${ "bareword" }; # Error, symbolic reference.
-Similarly, because of all the subscripting that is done using single
-words, we've applied the same rule to any bareword that is used for
-subscripting a hash. So now, instead of writing
+Similarly, because of all the subscripting that is done using single words,
+the same rule applies to any bareword that is used for subscripting a hash.
+So now, instead of writing
$array{ "aaa" }{ "bbb" }{ "ccc" }
@@ -682,5 +747,5 @@ Some pathological examples of the use of references can be found
in the F<t/op/ref.t> regression test in the Perl source directory.
See also L<perldsc> and L<perllol> for how to use references to create
-complex data structures, and L<perltoot>, L<perlobj>, and L<perlbot>
+complex data structures, and L<perlootut> and L<perlobj>
for how to use them to create objects.
diff --git a/Master/tlpkg/tlperl/lib/pods/perlreftut.pod b/Master/tlpkg/tlperl/lib/pods/perlreftut.pod
index 7898b6db53c..9565562711d 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlreftut.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlreftut.pod
@@ -7,7 +7,7 @@ perlreftut - Mark's very short tutorial about references
One of the most important new features in Perl 5 was the capability to
manage complicated data structures like multidimensional arrays and
nested hashes. To enable these, Perl 5 introduced a feature called
-`references', and using references is the key to managing complicated,
+'references', and using references is the key to managing complicated,
structured data in Perl. Unfortunately, there's a lot of funny syntax
to learn, and the main manual page can be hard to follow. The manual
is quite complete, and sometimes people find that a problem, because
@@ -402,7 +402,7 @@ This is Perl, so it does the exact right thing. It sees that you want
to push C<Athens> onto an array that doesn't exist, so it helpfully
makes a new, empty, anonymous array for you, installs it into
C<%table>, and then pushes C<Athens> onto it. This is called
-`autovivification'--bringing things to life automatically. Perl saw
+'autovivification'--bringing things to life automatically. Perl saw
that they key wasn't in the hash, so it created a new hash entry
automatically. Perl saw that you wanted to use the hash value as an
array, so it created a new empty array and installed a reference to it
diff --git a/Master/tlpkg/tlperl/lib/pods/perlrequick.pod b/Master/tlpkg/tlperl/lib/pods/perlrequick.pod
index d543389d488..bd44d013c54 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlrequick.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlrequick.pod
@@ -162,8 +162,9 @@ character, or the match fails. Then
/[a^]at/; # matches 'aat' or '^at'; here '^' is ordinary
Perl has several abbreviations for common character classes. (These
-definitions are those that Perl uses in ASCII mode with the C</a> modifier.
-See L<perlrecharclass/Backslash sequences> for details.)
+definitions are those that Perl uses in ASCII-safe mode with the C</a> modifier.
+Otherwise they could match many more non-ASCII Unicode characters as
+well. See L<perlrecharclass/Backslash sequences> for details.)
=over 4
diff --git a/Master/tlpkg/tlperl/lib/pods/perlreref.pod b/Master/tlpkg/tlperl/lib/pods/perlreref.pod
index f5a79759296..954a423759c 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlreref.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlreref.pod
@@ -107,6 +107,7 @@ These work as in normal strings.
\u Titlecase next character
\L Lowercase until \E
\U Uppercase until \E
+ \F Foldcase until \E
\Q Disable pattern metacharacters until \E
\E End modification
@@ -176,7 +177,7 @@ POSIX character classes and their Unicode and Perl equivalents:
space PosixSpace XPosixSpace [\s\cK]
PerlSpace XPerlSpace \s Perl's whitespace def'n
upper PosixUpper XPosixUpper Uppercase characters
- word PerlWord XPosixWord \w Alnum + Unicode marks +
+ word PosixWord XPosixWord \w Alnum + Unicode marks +
connectors, like '_'
(Perl extension)
xdigit ASCII_Hex_Digit XPosixDigit Hexadecimal digit,
@@ -299,6 +300,7 @@ Captured groups are numbered according to their I<opening> paren.
lcfirst Lowercase first char of a string
uc Uppercase a string
ucfirst Titlecase first char of a string
+ fc Foldcase a string
pos Return or set current match position
quotemeta Quote metacharacters
@@ -307,8 +309,9 @@ Captured groups are numbered according to their I<opening> paren.
split Use a regex to split a string into parts
-The first four of these are like the escape sequences C<\L>, C<\l>,
-C<\U>, and C<\u>. For Titlecase, see L</Titlecase>.
+The first five of these are like the escape sequences C<\L>, C<\l>,
+C<\U>, C<\u>, and C<\F>. For Titlecase, see L</Titlecase>; For
+Foldcase, see L</Foldcase>.
=head2 TERMINOLOGY
@@ -317,6 +320,12 @@ C<\U>, and C<\u>. For Titlecase, see L</Titlecase>.
Unicode concept which most often is equal to uppercase, but for
certain characters like the German "sharp s" there is a difference.
+=head3 Foldcase
+
+Unicode form that is useful when comparing strings regardless of case,
+as certain characters have compex one-to-many case mappings. Primarily a
+variant of lowercase.
+
=head1 AUTHOR
Iain Truskett. Updated by the Perl 5 Porters.
diff --git a/Master/tlpkg/tlperl/lib/pods/perlretut.pod b/Master/tlpkg/tlperl/lib/pods/perlretut.pod
index ea80594e605..a3ff6ad28c4 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlretut.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlretut.pod
@@ -781,7 +781,7 @@ so may lead to surprising and unsatisfactory results.
=head2 Relative backreferences
Counting the opening parentheses to get the correct number for a
-backreference is errorprone as soon as there is more than one
+backreference is error-prone as soon as there is more than one
capturing group. A more convenient technique became available
with Perl 5.10: relative backreferences. To refer to the immediately
preceding capture group one now may write C<\g{-1}>, the next but
@@ -1537,7 +1537,7 @@ the regexp in the I<last successful match> is used instead. So we have
=head3 Global matching
-The final two modifiers we will disccuss here,
+The final two modifiers we will discuss here,
C<//g> and C<//c>, concern multiple matches.
The modifier C<//g> stands for global matching and allows the
matching operator to match within a string as many times as possible.
@@ -1583,9 +1583,9 @@ there are no groupings, a list of matches to the whole regexp. So if
we wanted just the words, we could use
@words = ($x =~ /(\w+)/g); # matches,
- # $word[0] = 'cat'
- # $word[1] = 'dog'
- # $word[2] = 'house'
+ # $words[0] = 'cat'
+ # $words[1] = 'dog'
+ # $words[2] = 'house'
Closely associated with the C<//g> modifier is the C<\G> anchor. The
C<\G> anchor matches at the point where the previous C<//g> match left
@@ -1654,7 +1654,7 @@ important not only to match what is desired, but to reject what is not
desired.
(There are other regexp modifiers that are available, such as
-C<//o>, C<//d>, and C<//l>, but their specialized uses are beyond the
+C<//o>, but their specialized uses are beyond the
scope of this introduction. )
=head3 Search and replace
@@ -1870,7 +1870,7 @@ substituted.
C<\Q>, C<\L>, C<\l>, C<\U>, C<\u> and C<\E> are actually part of
double-quotish syntax, and not part of regexp syntax proper. They will
-work if they appear in a regular expression embeddded directly in a
+work if they appear in a regular expression embedded directly in a
program, but not when contained in a string that is interpolated in a
pattern.
@@ -1907,32 +1907,32 @@ specified in the Unicode standard. For instance, if we wanted to
represent or match the astrological sign for the planet Mercury, we
could use
- use charnames ":full"; # use named chars with Unicode full names
$x = "abc\N{MERCURY}def";
$x =~ /\N{MERCURY}/; # matches
-One can also use short names or restrict names to a certain alphabet:
+One can also use "short" names:
- use charnames ':full';
print "\N{GREEK SMALL LETTER SIGMA} is called sigma.\n";
-
- use charnames ":short";
print "\N{greek:Sigma} is an upper-case sigma.\n";
+You can also restrict names to a certain alphabet by specifying the
+L<charnames> pragma:
+
use charnames qw(greek);
print "\N{sigma} is Greek sigma\n";
-A list of full names can be found in F<NamesList.txt> in the Unicode standard
-(available at L<http://www.unicode.org/Public/UNIDATA/>).
-
-The answer to requirement 2), as of 5.6.0, is that a regexp (mostly)
-uses Unicode characters. (For messy backward compatibility reasons,
-most but not all semantics of a match will assume Unicode, unless,
-starting in Perl 5.14, you tell it to use full Unicode. You can do this
-explicitly by using the C<//u> modifier, or you can ask Perl to use the
-modifier implicitly for all regexes in a scope by using C<use 5.012> (or
-higher) or C<use feature 'unicode_strings'>.) If you want to handle
-Unicode properly, you should ensure that one of these is the case.)
+An index of character names is available on-line from the Unicode
+Consortium, L<http://www.unicode.org/charts/charindex.html>; explanatory
+material with links to other resources at
+L<http://www.unicode.org/standard/where>.
+
+The answer to requirement 2) is, as of 5.6.0, that a regexp (mostly)
+uses Unicode characters. (The "mostly" is for messy backward
+compatibility reasons, but starting in Perl 5.14, any regex compiled in
+the scope of a C<use feature 'unicode_strings'> (which is automatically
+turned on within the scope of a C<use 5.012> or higher) will turn that
+"mostly" into "always". If you want to handle Unicode properly, you
+should ensure that C<'unicode_strings'> is turned on.)
Internally, this is encoded to bytes using either UTF-8 or a native 8
bit encoding, depending on the history of the string, but conceptually
it is a sequence of characters, not bytes. See L<perlunitut> for a
@@ -1944,7 +1944,6 @@ C<\p{name}> escape sequence. Closely associated is the C<\P{name}>
character class, which is the negation of the C<\p{name}> class. For
example, to match lower and uppercase characters,
- use charnames ":full"; # use named chars with Unicode full names
$x = "BOB";
$x =~ /^\p{IsUpper}/; # matches, uppercase char class
$x =~ /^\P{IsUpper}/; # doesn't match, char class sans uppercase
@@ -2732,7 +2731,7 @@ groups or produce results, it may be necessary to use this in
combination with embedded code.
%count = ();
- "supercalifragilisticexpialidoceous" =~
+ "supercalifragilisticexpialidocious" =~
/([aeiou])(?{ $count{$1}++; })(*FAIL)/i;
printf "%3d '%s'\n", $count{$_}, $_ for (sort keys %count);
@@ -2745,7 +2744,7 @@ for another vowel. Thus, match or no match makes no difference, and the
regexp engine proceeds until the entire string has been inspected.
(It's remarkable that an alternative solution using something like
- $count{lc($_)}++ for split('', "supercalifragilisticexpialidoceous");
+ $count{lc($_)}++ for split('', "supercalifragilisticexpialidocious");
printf "%3d '%s'\n", $count2{$_}, $_ for ( qw{ a e i o u } );
is considerably slower.)
@@ -2776,7 +2775,8 @@ the end of the block enclosing the pragmas.
The C<re '/flags'> pragma (introduced in Perl
5.14) turns on the given regular expression flags
-until the end of the lexical scope. See C<re/"'/flags' mode"> for more
+until the end of the lexical scope. See
+L<re/"'E<sol>flags' mode"> for more
detail.
use re 'debug';
@@ -2792,7 +2792,7 @@ information is displayed in color on terminals that can display
termcap color sequences. Here is example output:
% perl -e 'use re "debug"; "abc" =~ /a*b+c/;'
- Compiling REx `a*b+c'
+ Compiling REx 'a*b+c'
size 9 first at 1
1: STAR(4)
2: EXACT <a>(0)
@@ -2800,11 +2800,11 @@ termcap color sequences. Here is example output:
5: EXACT <b>(0)
7: EXACT <c>(9)
9: END(0)
- floating `bc' at 0..2147483647 (checking floating) minlen 2
- Guessing start of match, REx `a*b+c' against `abc'...
- Found floating substr `bc' at offset 1...
+ floating 'bc' at 0..2147483647 (checking floating) minlen 2
+ Guessing start of match, REx 'a*b+c' against 'abc'...
+ Found floating substr 'bc' at offset 1...
Guessed: match at offset 0
- Matching REx `a*b+c' against `abc'
+ Matching REx 'a*b+c' against 'abc'
Setting an EVAL scope, savestack=3
0 <> <abc> | 1: STAR
EXACT <a> can match 1 times out of 32767...
@@ -2815,13 +2815,13 @@ termcap color sequences. Here is example output:
2 <ab> <c> | 7: EXACT <c>
3 <abc> <> | 9: END
Match successful!
- Freeing REx: `a*b+c'
+ Freeing REx: 'a*b+c'
If you have gotten this far into the tutorial, you can probably guess
what the different parts of the debugging output tell you. The first
part
- Compiling REx `a*b+c'
+ Compiling REx 'a*b+c'
size 9 first at 1
1: STAR(4)
2: EXACT <a>(0)
@@ -2835,15 +2835,15 @@ starred object, in this case C<'a'>, and if it matches, goto line 4,
i.e., C<PLUS(7)>. The middle lines describe some heuristics and
optimizations performed before a match:
- floating `bc' at 0..2147483647 (checking floating) minlen 2
- Guessing start of match, REx `a*b+c' against `abc'...
- Found floating substr `bc' at offset 1...
+ floating 'bc' at 0..2147483647 (checking floating) minlen 2
+ Guessing start of match, REx 'a*b+c' against 'abc'...
+ Found floating substr 'bc' at offset 1...
Guessed: match at offset 0
Then the match is executed and the remaining lines describe the
process:
- Matching REx `a*b+c' against `abc'
+ Matching REx 'a*b+c' against 'abc'
Setting an EVAL scope, savestack=3
0 <> <abc> | 1: STAR
EXACT <a> can match 1 times out of 32767...
@@ -2854,7 +2854,7 @@ process:
2 <ab> <c> | 7: EXACT <c>
3 <abc> <> | 9: END
Match successful!
- Freeing REx: `a*b+c'
+ Freeing REx: 'a*b+c'
Each step is of the form S<C<< n <x> <y> >>>, with C<< <x> >> the
part of the string matched and C<< <y> >> the part not yet
diff --git a/Master/tlpkg/tlperl/lib/pods/perlriscos.pod b/Master/tlpkg/tlperl/lib/pods/perlriscos.pod
index 62a1a5647c7..2acd738c8c3 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlriscos.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlriscos.pod
@@ -4,7 +4,7 @@ specifically designed to be readable as is.
=head1 NAME
-README.riscos - Perl version 5 for RISC OS
+perlriscos - Perl version 5 for RISC OS
=head1 DESCRIPTION
diff --git a/Master/tlpkg/tlperl/lib/pods/perlrun.pod b/Master/tlpkg/tlperl/lib/pods/perlrun.pod
index d51342f8f80..6ddc608d4f4 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlrun.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlrun.pod
@@ -93,11 +93,12 @@ getting whatever version is first in the user's path. If you want
a specific version of Perl, say, perl5.005_57, you should place
that directly in the C<#!> line's path.
-If the C<#!> line does not contain the word "perl", the program named after
-the C<#!> is executed instead of the Perl interpreter. This is slightly
-bizarre, but it helps people on machines that don't do C<#!>, because they
-can tell a program that their SHELL is F</usr/bin/perl>, and Perl will then
-dispatch the program to the correct interpreter for them.
+If the C<#!> line does not contain the word "perl" nor the word "indir"
+the program named after the C<#!> is executed instead of the Perl
+interpreter. This is slightly bizarre, but it helps people on machines
+that don't do C<#!>, because they can tell a program that their SHELL is
+F</usr/bin/perl>, and Perl will then dispatch the program to the correct
+interpreter for them.
After locating your program, Perl compiles the entire program to an
internal form. If there are any compilation errors, execution of the
@@ -143,8 +144,8 @@ Perl program and a Perl library file.
Put
- $ perl -mysw 'f$env("procedure")' 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8' !
- $ exit++ + ++$status != 0 and $exit = $status = undef;
+ $ perl -mysw 'f$env("procedure")' 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8' !
+ $ exit++ + ++$status != 0 and $exit = $status = undef;
at the top of your program, where B<-mysw> are any command line switches you
want to pass to Perl. You can now invoke the program directly, by saying
@@ -160,7 +161,7 @@ Command-interpreters on non-Unix systems have rather different ideas
on quoting than Unix shells. You'll need to learn the special
characters in your command-interpreter (C<*>, C<\> and C<"> are
common) and how to protect whitespace and these characters to run
-one-liners (see B<-e> below).
+one-liners (see L<-e|/-e commandline> below).
On some systems, you may have to change single-quotes to double ones,
which you must I<not> do on Unix or Plan 9 systems. You might also
@@ -282,13 +283,13 @@ are as follows; listing the letters is equal to summing the numbers.
D 24 i + o
A 32 the @ARGV elements are expected to be strings encoded
in UTF-8
- L 64 normally the "IOEioA" are unconditional,
- the L makes them conditional on the locale environment
- variables (the LC_ALL, LC_TYPE, and LANG, in the order
- of decreasing precedence) -- if the variables indicate
+ L 64 normally the "IOEioA" are unconditional, the L makes
+ them conditional on the locale environment variables
+ (the LC_ALL, LC_TYPE, and LANG, in the order of
+ decreasing precedence) -- if the variables indicate
UTF-8, then the selected "IOEioA" are in effect
- a 256 Set ${^UTF8CACHE} to -1, to run the UTF-8 caching code in
- debugging mode.
+ a 256 Set ${^UTF8CACHE} to -1, to run the UTF-8 caching
+ code in debugging mode.
=for documenting_the_underdocumented
perl.h gives W/128 as PERL_UNICODE_WIDESYSCALLS "/* for Sarathy */"
@@ -314,6 +315,7 @@ same effect as B<-CSDL>. In other words, the standard I/O handles and
the default C<open()> layer are UTF-8-fied I<but> only if the locale
environment variables indicate a UTF-8 locale. This behaviour follows
the I<implicit> (and problematic) UTF-8 behaviour of Perl 5.8.0.
+(See L<perl581delta/UTF-8 no longer default under UTF-8 locales>.)
You can use B<-C0> (or C<"0"> for C<PERL_UNICODE>) to explicitly
disable all the above Unicode features.
@@ -393,19 +395,24 @@ B<-D14> is equivalent to B<-Dtls>):
512 r Regular expression parsing and execution
1024 x Syntax tree dump
2048 u Tainting checks
- 4096 U Unofficial, User hacking (reserved for private, unreleased use)
+ 4096 U Unofficial, User hacking (reserved for private,
+ unreleased use)
8192 H Hash dump -- usurps values()
16384 X Scratchpad allocation
32768 D Cleaning up
131072 T Tokenizing
- 262144 R Include reference counts of dumped variables (eg when using -Ds)
- 524288 J show s,t,P-debug (don't Jump over) on opcodes within package DB
+ 262144 R Include reference counts of dumped variables (eg when
+ using -Ds)
+ 524288 J show s,t,P-debug (don't Jump over) on opcodes within
+ package DB
1048576 v Verbose: use in conjunction with other flags
2097152 C Copy On Write
4194304 A Consistency checks on internal structures
- 8388608 q quiet - currently only suppresses the "EXECUTING" message
+ 8388608 q quiet - currently only suppresses the "EXECUTING"
+ message
16777216 M trace smart match resolution
- 33554432 B dump suBroutine definitions, including special Blocks like BEGIN
+ 33554432 B dump suBroutine definitions, including special Blocks
+ like BEGIN
All these flags require B<-DDEBUGGING> when you compile the Perl
executable (but see C<:opd> in L<Devel::Peek> or L<re/'debug' mode>
@@ -512,20 +519,22 @@ as:
This allows you to add a prefix to the backup file, instead of (or in
addition to) a suffix:
- $ perl -pi'orig_*' -e 's/bar/baz/' fileA # backup to 'orig_fileA'
+ $ perl -pi'orig_*' -e 's/bar/baz/' fileA # backup to
+ # 'orig_fileA'
Or even to place backup copies of the original files into another
directory (provided the directory already exists):
- $ perl -pi'old/*.orig' -e 's/bar/baz/' fileA # backup to 'old/fileA.orig'
+ $ perl -pi'old/*.orig' -e 's/bar/baz/' fileA # backup to
+ # 'old/fileA.orig'
These sets of one-liners are equivalent:
- $ perl -pi -e 's/bar/baz/' fileA # overwrite current file
- $ perl -pi'*' -e 's/bar/baz/' fileA # overwrite current file
+ $ perl -pi -e 's/bar/baz/' fileA # overwrite current file
+ $ perl -pi'*' -e 's/bar/baz/' fileA # overwrite current file
- $ perl -pi'.orig' -e 's/bar/baz/' fileA # backup to 'fileA.orig'
- $ perl -pi'*.orig' -e 's/bar/baz/' fileA # backup to 'fileA.orig'
+ $ perl -pi'.orig' -e 's/bar/baz/' fileA # backup to 'fileA.orig'
+ $ perl -pi'*.orig' -e 's/bar/baz/' fileA # backup to 'fileA.orig'
From the shell, saying
@@ -669,7 +678,7 @@ I<awk>:
... # your program goes here
}
-Note that the lines are not printed by default. See B<-p> to have
+Note that the lines are not printed by default. See L</-p> to have
lines printed. If a file named by an argument cannot be opened for
some reason, Perl warns you about it and moves on to the next file.
diff --git a/Master/tlpkg/tlperl/lib/pods/perlsec.pod b/Master/tlpkg/tlperl/lib/pods/perlsec.pod
index 1c49453d535..d8470eccccb 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlsec.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlsec.pod
@@ -170,6 +170,7 @@ nearby CPAN mirror, and included in Perl starting from the release 5.8.0.
Or you may be able to use the following C<is_tainted()> function.
sub is_tainted {
+ local $@; # Don't pollute caller's value.
return ! eval { eval("#" . substr(join("", @_), 0, 0)); 1 };
}
diff --git a/Master/tlpkg/tlperl/lib/pods/perlsolaris.pod b/Master/tlpkg/tlperl/lib/pods/perlsolaris.pod
index b8c8dbf71e4..0e6ffd9a9fb 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlsolaris.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlsolaris.pod
@@ -4,7 +4,7 @@ specifically designed to be readable as is.
=head1 NAME
-README.solaris - Perl version 5 on Solaris systems
+perlsolaris - Perl version 5 on Solaris systems
=head1 DESCRIPTION
diff --git a/Master/tlpkg/tlperl/lib/pods/perlsource.pod b/Master/tlpkg/tlperl/lib/pods/perlsource.pod
index 94ceec00bd3..16252eb3f07 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlsource.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlsource.pod
@@ -10,89 +10,94 @@ perlsource - A guide to the Perl source tree
=head1 DESCRIPTION
-This document describes the layout of the Perl source tree. If you're hacking
-on the Perl core, this will help you find what you're looking for.
+This document describes the layout of the Perl source tree. If you're
+hacking on the Perl core, this will help you find what you're looking
+for.
=head1 FINDING YOUR WAY AROUND
-The Perl source tree is big. Here's some of the thing you'll find in it:
+The Perl source tree is big. Here's some of the thing you'll find in
+it:
=head2 C code
-The C source code and header files mostly live in the root of the source
-tree. There are a few platform-specific directories which contain C code. In
-addition, some of the modules shipped with Perl include C or XS code.
+The C source code and header files mostly live in the root of the
+source tree. There are a few platform-specific directories which
+contain C code. In addition, some of the modules shipped with Perl
+include C or XS code.
See L<perlinterp> for more details on the files that make up the Perl
interpreter, as well as details on how it works.
=head2 Core modules
-Modules shipped as part of the Perl core live in four subdirectories. Two of
-these directories contain modules that live in the core, and two contain
-modules that can also be released separately on CPAN. Modules which can be
-released on cpan are known as "dual-life" modules.
+Modules shipped as part of the Perl core live in four subdirectories.
+Two of these directories contain modules that live in the core, and two
+contain modules that can also be released separately on CPAN. Modules
+which can be released on cpan are known as "dual-life" modules.
=over 4
=item * F<lib/>
-This directory contains pure-Perl modules which are only released as part of
-the core. This directory contains I<all> of the modules and their tests,
-unlike other core modules.
+This directory contains pure-Perl modules which are only released as
+part of the core. This directory contains I<all> of the modules and
+their tests, unlike other core modules.
=item * F<ext/>
-This directory contains XS-using modules which are only released as part of
-the core. These modules generally have their F<Makefile.PL> and are laid out
-more like a typical CPAN module.
+This directory contains XS-using modules which are only released as
+part of the core. These modules generally have their F<Makefile.PL> and
+are laid out more like a typical CPAN module.
=item * F<dist/>
This directory is for dual-life modules where the blead source is
-canonical. Note that some modules in this directory may not yet have been
-released separately on CPAN.
+canonical. Note that some modules in this directory may not yet have
+been released separately on CPAN.
=item * F<cpan/>
This directory contains dual-life modules where the CPAN module is
-canonical. Do not patch these modules directly! Changes to these modules
-should be submitted to the maintainer of the CPAN module. Once those changes
-are applied and released, the new version of the module will be incorporated
-into the core.
+canonical. Do not patch these modules directly! Changes to these
+modules should be submitted to the maintainer of the CPAN module. Once
+those changes are applied and released, the new version of the module
+will be incorporated into the core.
=back
-For some dual-life modules, it has not yet been determined if the CPAN version
-or the blead source is canonical. Until that is done, those modules should be
-in F<cpan/>.
+For some dual-life modules, it has not yet been determined if the CPAN
+version or the blead source is canonical. Until that is done, those
+modules should be in F<cpan/>.
=head2 Tests
The Perl core has an extensive test suite. If you add new tests (or new
-modules with tests), you may need to update the F<t/TEST> file so that the
-tests are run.
+modules with tests), you may need to update the F<t/TEST> file so that
+the tests are run.
=over 4
=item * Module tests
-Tests for core modules in the F<lib/> directory are right next to the module
-itself. For example, we have F<lib/strict.pm> and F<lib/strict.t>.
+Tests for core modules in the F<lib/> directory are right next to the
+module itself. For example, we have F<lib/strict.pm> and
+F<lib/strict.t>.
Tests for modules in F<ext/> and the dual-life modules are in F<t/>
subdirectories for each module, like a standard CPAN distribution.
=item * F<t/base/>
-Tests for the absolute basic functionality of Perl. This includes C<if>, basic
-file reads and writes, simple regexes, etc. These are run first in the test
-suite and if any of them fail, something is I<really> broken.
+Tests for the absolute basic functionality of Perl. This includes
+C<if>, basic file reads and writes, simple regexes, etc. These are run
+first in the test suite and if any of them fail, something is I<really>
+broken.
=item * F<t/cmd/>
-Tests for basic control structures, C<if/else>, C<while>,
-subroutines, etc.
+Tests for basic control structures, C<if/else>, C<while>, subroutines,
+etc.
=item * F<t/comp/>
@@ -131,9 +136,9 @@ Windows-specific tests.
=item * F<t/porting/>
-Tests the state of the source tree for various common errors. For example, it
-tests that everyone who is listed in the git log has a corresponding entry in
-the F<AUTHORS> file.
+Tests the state of the source tree for various common errors. For
+example, it tests that everyone who is listed in the git log has a
+corresponding entry in the F<AUTHORS> file.
=item * F<t/lib/>
@@ -149,15 +154,15 @@ A test suite for the s2p converter.
=head2 Documentation
-All of the core documentation intended for end users lives in
-F<pod/>. Individual modules in F<lib/>, F<ext/>, F<dist/>, and F<cpan/>
-usually have their own documentation, either in the F<Module.pm> file or an
+All of the core documentation intended for end users lives in F<pod/>.
+Individual modules in F<lib/>, F<ext/>, F<dist/>, and F<cpan/> usually
+have their own documentation, either in the F<Module.pm> file or an
accompanying F<Module.pod> file.
Finally, documentation intended for core Perl developers lives in the
F<Porting/> directory.
-=head2 Hacking toolks and documentation
+=head2 Hacking tools and documentation
The F<Porting> directory contains a grab bag of code and documentation
intended to help porters work on Perl. Some of the highlights include:
@@ -166,18 +171,19 @@ intended to help porters work on Perl. Some of the highlights include:
=item * F<check*>
-These are scripts which will check the source things like ANSI C violations,
-POD encoding issues, etc.
+These are scripts which will check the source things like ANSI C
+violations, POD encoding issues, etc.
=item * F<Maintainers>, F<Maintainers.pl>, and F<Maintainers.pm>
-These files contain information on who maintains which modules. Run C<perl
-Porting/Maintainers -M Module::Name> to find out more information about a
-dual-life module.
+These files contain information on who maintains which modules. Run
+C<perl Porting/Maintainers -M Module::Name> to find out more
+information about a dual-life module.
=item * F<podtidy>
-Tidies a pod file. It's a good idea to run this on a pod file you've patched.
+Tidies a pod file. It's a good idea to run this on a pod file you've
+patched.
=back
@@ -186,8 +192,8 @@ Tidies a pod file. It's a good idea to run this on a pod file you've patched.
The Perl build system starts with the F<Configure> script in the root
directory.
-Platform-specific pieces of the build system also live in platform-specific
-directories like F<win32/>, F<vms/>, etc.
+Platform-specific pieces of the build system also live in
+platform-specific directories like F<win32/>, F<vms/>, etc.
The F<Configure> script is ultimately responsible for generating a
F<Makefile>.
@@ -195,21 +201,22 @@ F<Makefile>.
The build system that Perl uses is called metaconfig. This system is
maintained separately from the Perl core.
-The metaconfig system has its own git repository. Please see its README file
-in L<http://perl5.git.perl.org/metaconfig.git/> for more details.
+The metaconfig system has its own git repository. Please see its README
+file in L<http://perl5.git.perl.org/metaconfig.git/> for more details.
-The F<Cross> directory contains various files related to cross-compiling
-Perl. See F<Cross/README> for more details.
+The F<Cross> directory contains various files related to
+cross-compiling Perl. See F<Cross/README> for more details.
=head2 F<AUTHORS>
-This file everyone who's contributed to Perl. If you submit a patch, you
-should add your name to this file as part of the patch.
+This file lists everyone who's contributed to Perl. If you submit a
+patch, you should add your name to this file as part of the patch.
=head2 F<MANIFEST>
-The F<MANIFEST> file in the root of the source tree contains a list of every
-file in the Perl core, as well as a brief description of each file.
+The F<MANIFEST> file in the root of the source tree contains a list of
+every file in the Perl core, as well as a brief description of each
+file.
You can get an overview of all the files with this command:
diff --git a/Master/tlpkg/tlperl/lib/pods/perlsub.pod b/Master/tlpkg/tlperl/lib/pods/perlsub.pod
index ea5fa207cc8..760e496fab7 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlsub.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlsub.pod
@@ -217,9 +217,21 @@ X<recursion>
Not only does the C<&> form make the argument list optional, it also
disables any prototype checking on arguments you do provide. This
is partly for historical reasons, and partly for having a convenient way
-to cheat if you know what you're doing. See L<Prototypes> below.
+to cheat if you know what you're doing. See L</Prototypes> below.
X<&>
+Since Perl 5.16.0, the C<__SUB__> token is available under C<use feature
+'current_sub'> and C<use 5.16.0>. It will evaluate to a reference to the
+currently-running sub, which allows for recursive calls without knowing
+your subroutine's name.
+
+ use 5.16.0;
+ my $factorial = sub {
+ my ($x) = @_;
+ return 1 if $x == 1;
+ return($x * __SUB__->( $x - 1 ) );
+ };
+
Subroutines whose names are in all upper case are reserved to the Perl
core, as are modules whose names are in all lower case. A subroutine in
all capitals is a loosely-held convention meaning it will be called
@@ -439,10 +451,12 @@ if you want to stay compatible with releases older than 5.10.
=head3 Persistent variables via state()
-Beginning with perl 5.9.4, you can declare variables with the C<state>
-keyword in place of C<my>. For that to work, though, you must have
+Beginning with Perl 5.9.4, you can declare variables with the C<state>
+keyword in place of C<my>. For that to work, though, you must have
enabled that feature beforehand, either by using the C<feature> pragma, or
-by using C<-E> on one-liners. (see L<feature>)
+by using C<-E> on one-liners (see L<feature>). Beginning with Perl 5.16,
+the C<CORE::state> form does not require the
+C<feature> pragma.
For example, the following code maintains a private counter, incremented
each time the gimme_another() function is called:
@@ -554,7 +568,7 @@ values to global (meaning package) variables. It does I<not> create
a local variable. This is known as dynamic scoping. Lexical scoping
is done with C<my>, which works more like C's auto declarations.
-Some types of lvalues can be localized as well : hash and array elements
+Some types of lvalues can be localized as well: hash and array elements
and slices, conditionals (provided that their result is always
localizable), and symbolic references. As for simple variables, this
creates new, dynamically scoped values.
@@ -740,8 +754,7 @@ To do this, you have to declare the subroutine to return an lvalue.
my $val;
sub canmod : lvalue {
- # return $val; this doesn't work, don't say "return"
- $val;
+ $val; # or: return $val;
}
sub nomod {
$val;
@@ -770,14 +783,9 @@ all the subroutines are called in a list context.
=item Lvalue subroutines are EXPERIMENTAL
-They appear to be convenient, but there are several reasons to be
+They appear to be convenient, but there is at least one reason to be
circumspect.
-You can't use the return keyword, you must pass out the value before
-falling out of subroutine scope. (see comment in example above). This
-is usually not a problem, but it disallows an explicit return out of a
-deeply nested loop, which is sometimes a nice way out.
-
They violate encapsulation. A normal mutator can check the supplied
argument before setting the attribute it is protecting, an lvalue
subroutine never gets that chance. Consider;
@@ -893,7 +901,7 @@ can be used to create what is effectively a local function, or at least,
a local alias.
{
- local *grow = \&shrink; # only until this block exists
+ local *grow = \&shrink; # only until this block exits
grow(); # really calls shrink()
move(); # if move() grow()s, it shrink()s too
}
@@ -1081,8 +1089,8 @@ corresponding built-in.
Any backslashed prototype character represents an actual argument
that must start with that character (optionally preceded by C<my>,
-C<our> or C<local>), with the exception of C<$>, which will accept a
-hash or array element even without a dollar sign, such as
+C<our> or C<local>), with the exception of C<$>, which will
+accept any scalar lvalue expression, such as C<$foo = 7> or
C<< my_function()->[0] >>. The value passed as part of C<@_> will be a
reference to the actual argument given in the subroutine call,
obtained by applying C<\> to that argument.
@@ -1140,9 +1148,9 @@ is of an acceptable type.
A semicolon (C<;>) separates mandatory arguments from optional arguments.
It is redundant before C<@> or C<%>, which gobble up everything else.
-As the last character of a prototype, or just before a semicolon, you can
-use C<_> in place of C<$>: if this argument is not provided, C<$_> will be
-used instead.
+As the last character of a prototype, or just before a semicolon, a C<@>
+or a C<%>, you can use C<_> in place of C<$>: if this argument is not
+provided, C<$_> will be used instead.
Note how the last three examples in the table above are treated
specially by the parser. C<mygrep()> is parsed as a true list
@@ -1153,7 +1161,11 @@ arguments, just like C<time()>. That is, if you say
mytime +2;
you'll get C<mytime() + 2>, not C<mytime(2)>, which is how it would be parsed
-without a prototype.
+without a prototype. If you want to force a unary function to have the
+same precedence as a list operator, add C<;> to the end of the prototype:
+
+ sub mygetprotobynumber($;);
+ mygetprotobynumber $a > $b; # parsed as mygetprotobynumber($a > $b)
The interesting thing about C<&> is that you can generate new syntax with it,
provided it's in the initial position:
@@ -1278,9 +1290,10 @@ the constant folding doesn't reduce them to a single constant:
}
If you redefine a subroutine that was eligible for inlining, you'll get
-a mandatory warning. (You can use this warning to tell whether or not a
+a warning by default. (You can use this warning to tell whether or not a
particular subroutine is considered constant.) The warning is
-considered severe enough not to be optional because previously compiled
+considered severe enough not to be affected by the B<-w>
+switch (or its absence) because previously compiled
invocations of the function will still be using the old value of the
function. If you need to be able to redefine the subroutine, you need to
ensure that it isn't inlined, either by dropping the C<()> prototype
@@ -1313,8 +1326,10 @@ built-in name with the special package qualifier C<CORE::>. For example,
saying C<CORE::open()> always refers to the built-in C<open()>, even
if the current package has imported some other subroutine called
C<&open()> from elsewhere. Even though it looks like a regular
-function call, it isn't: you can't take a reference to it, such as
-the incorrect C<\&CORE::open> might appear to produce.
+function call, it isn't: the CORE:: prefix in that case is part of Perl's
+syntax, and works for any keyword, regardless of what is in the CORE
+package. Taking a reference to it, that is, C<\&CORE::open>, only works
+for some keywords. See L<CORE>.
Library modules should not in general export built-in names like C<open>
or C<chdir> as part of their default C<@EXPORT> list, because these may
@@ -1430,9 +1445,8 @@ variable of the same package as the C<AUTOLOAD> routine. The name
is not passed as an ordinary argument because, er, well, just
because, that's why. (As an exception, a method call to a nonexistent
C<import> or C<unimport> method is just skipped instead. Also, if
-the AUTOLOAD subroutine is an XSUB, C<$AUTOLOAD> is not populated;
-instead, you should call L<< C<SvPVX>E<sol>C<SvCUR>|perlapi >> on the
-C<CV> for C<AUTOLOAD> to retrieve the method name.)
+the AUTOLOAD subroutine is an XSUB, there are other ways to retrieve the
+subroutine name. See L<perlguts/Autoloading with XSUBs> for details.)
Many C<AUTOLOAD> routines load in a definition for the requested
@@ -1461,7 +1475,7 @@ even need parentheses:
who "am", "i";
ls '-l';
-A more complete example of this is the standard Shell module, which
+A more complete example of this is the Shell module on CPAN, which
can treat undefined subroutine calls as calls to external programs.
Mechanisms are available to help modules writers split their modules
@@ -1518,4 +1532,4 @@ See L<perlxs> if you'd like to learn about calling C subroutines from Perl.
See L<perlembed> if you'd like to learn about calling Perl subroutines from C.
See L<perlmod> to learn about bundling up your functions in separate files.
See L<perlmodlib> to learn what library modules come standard on your system.
-See L<perltoot> to learn how to make object method calls.
+See L<perlootut> to learn how to make object method calls.
diff --git a/Master/tlpkg/tlperl/lib/pods/perlsymbian.pod b/Master/tlpkg/tlperl/lib/pods/perlsymbian.pod
index 04678fe8f55..2572631c12a 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlsymbian.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlsymbian.pod
@@ -4,7 +4,7 @@ designed to be readable as is.
=head1 NAME
-README.symbian - Perl version 5 on Symbian OS
+perlsymbian - Perl version 5 on Symbian OS
=head1 DESCRIPTION
@@ -301,7 +301,7 @@ the Perl definitions and redefines them as PerlNew() and PerlCopy().
=head1 TO DO
-Lots. See F<symbian\TODO>.
+Lots. See F<symbian/TODO>.
=head1 WARNING
diff --git a/Master/tlpkg/tlperl/lib/pods/perlsyn.pod b/Master/tlpkg/tlperl/lib/pods/perlsyn.pod
index 603dd15ae83..3bebeec7adb 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlsyn.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlsyn.pod
@@ -6,12 +6,13 @@ perlsyn - Perl syntax
=head1 DESCRIPTION
A Perl program consists of a sequence of declarations and statements
-which run from the top to the bottom. Loops, subroutines and other
+which run from the top to the bottom. Loops, subroutines, and other
control structures allow you to jump around within the code.
-Perl is a B<free-form> language, you can format and indent it however
-you like. Whitespace mostly serves to separate tokens, unlike
-languages like Python where it is an important part of the syntax.
+Perl is a B<free-form> language: you can format and indent it however
+you like. Whitespace serves mostly to separate tokens, unlike
+languages like Python where it is an important part of the syntax,
+or Fortran where it is immaterial.
Many of Perl's syntactic elements are B<optional>. Rather than
requiring you to put parentheses around every function call and
@@ -31,7 +32,7 @@ see L<perltrap> for information about how they differ.
X<declaration> X<undef> X<undefined> X<uninitialized>
The only things you need to declare in Perl are report formats and
-subroutines (and sometimes not even subroutines). A variable holds
+subroutines (and sometimes not even subroutines). A scalar variable holds
the undefined value (C<undef>) until it has been assigned a defined
value, which is anything other than C<undef>. When used as a number,
C<undef> is treated as C<0>; when used as a string, it is treated as
@@ -41,24 +42,23 @@ you'll be notified of an uninitialized value whenever you treat
C<undef> as a string or a number. Well, usually. Boolean contexts,
such as:
- my $a;
if ($a) {}
are exempt from warnings (because they care about truth rather than
definedness). Operators such as C<++>, C<-->, C<+=>,
-C<-=>, and C<.=>, that operate on undefined left values such as:
+C<-=>, and C<.=>, that operate on undefined variables such as:
- my $a;
+ undef $a;
$a++;
are also always exempt from such warnings.
A declaration can be put anywhere a statement can, but has no effect on
-the execution of the primary sequence of statements--declarations all
-take effect at compile time. Typically all the declarations are put at
+the execution of the primary sequence of statements: declarations all
+take effect at compile time. All declarations are typically put at
the beginning or the end of the script. However, if you're using
-lexically-scoped private variables created with C<my()>, you'll
-have to make sure
+lexically-scoped private variables created with C<my()>,
+C<state()>, or C<our()>, you'll have to make sure
your format or subroutine definition is within the same block scope
as the my if you expect to be able to access those private variables.
@@ -70,11 +70,21 @@ X<subroutine, declaration>
sub myname;
$me = myname $0 or die "can't get myname";
-Note that myname() functions as a list operator, not as a unary operator;
-so be careful to use C<or> instead of C<||> in this case. However, if
-you were to declare the subroutine as C<sub myname ($)>, then
-C<myname> would function as a unary operator, so either C<or> or
-C<||> would work.
+A bare declaration like that declares the function to be a list operator,
+not a unary operator, so you have to be careful to use parentheses (or
+C<or> instead of C<||>.) The C<||> operator binds too tightly to use after
+list operators; it becomes part of the last element. You can always use
+parentheses around the list operators arguments to turn the list operator
+back into something that behaves more like a function call. Alternatively,
+you can use the prototype C<($)> to turn the subroutine into a unary
+operator:
+
+ sub myname ($);
+ $me = myname $0 || die "can't get myname";
+
+That now parses as you'd expect, but you still ought to get in the habit of
+using parentheses in that situation. For more on prototypes, see
+L<perlsub>
Subroutines declarations can also be loaded up with the C<require> statement
or both loaded and imported into your namespace with a C<use> statement.
@@ -97,23 +107,24 @@ expression.
X<statement> X<semicolon> X<expression> X<;>
The only kind of simple statement is an expression evaluated for its
-side effects. Every simple statement must be terminated with a
+side-effects. Every simple statement must be terminated with a
semicolon, unless it is the final statement in a block, in which case
-the semicolon is optional. (A semicolon is still encouraged if the
+the semicolon is optional. But put the semicolon in anyway if the
block takes up more than one line, because you may eventually add
-another line.) Note that there are some operators like C<eval {}> and
-C<do {}> that look like compound statements, but aren't (they're just
-TERMs in an expression), and thus need an explicit termination if used
+another line. Note that there are operators like C<eval {}>, C<sub {}>, and
+C<do {}> that I<look> like compound statements, but aren't--they're just
+TERMs in an expression--and thus need an explicit termination when used
as the last item in a statement.
=head2 Truth and Falsehood
X<truth> X<falsehood> X<true> X<false> X<!> X<not> X<negation> X<0>
-The number 0, the strings C<'0'> and C<''>, the empty list C<()>, and
-C<undef> are all false in a boolean context. All other values are true.
+The number 0, the strings C<'0'> and C<"">, the empty list C<()>, and
+C<undef> are all false in a boolean context. All other values are true.
Negation of a true value by C<!> or C<not> returns a special false value.
-When evaluated as a string it is treated as C<''>, but as a number, it
-is treated as 0.
+When evaluated as a string it is treated as C<"">, but as a number, it
+is treated as 0. Most Perl operators
+that return true or false behave this way.
=head2 Statement Modifiers
X<statement modifier> X<modifier> X<if> X<unless> X<while>
@@ -127,40 +138,24 @@ modifiers are:
unless EXPR
while EXPR
until EXPR
- when EXPR
for LIST
foreach LIST
+ when EXPR
The C<EXPR> following the modifier is referred to as the "condition".
Its truth or falsehood determines how the modifier will behave.
C<if> executes the statement once I<if> and only if the condition is
true. C<unless> is the opposite, it executes the statement I<unless>
-the condition is true (i.e., if the condition is false).
+the condition is true (that is, if the condition is false).
print "Basset hounds got long ears" if length $ear >= 10;
go_outside() and play() unless $is_raining;
-C<when> executes the statement I<when> C<$_> smart matches C<EXPR>, and
-then either C<break>s out if it's enclosed in a C<given> scope or skips
-to the C<next> element when it lies directly inside a C<for> loop.
-See also L</"Switch statements">.
-
- given ($something) {
- $abc = 1 when /^abc/;
- $just_a = 1 when /^a/;
- $other = 1;
- }
-
- for (@names) {
- admin($_) when [ qw/Alice Bob/ ];
- regular($_) when [ qw/Chris David Ellen/ ];
- }
-
-The C<foreach> modifier is an iterator: it executes the statement once
+The C<for(each)> modifier is an iterator: it executes the statement once
for each item in the LIST (with C<$_> aliased to each item in turn).
- print "Hello $_!\n" foreach qw(world Dolly nurse);
+ print "Hello $_!\n" for qw(world Dolly nurse);
C<while> repeats the statement I<while> the condition is true.
C<until> does the opposite, it repeats the statement I<until> the
@@ -172,14 +167,16 @@ condition is true (or while the condition is false):
The C<while> and C<until> modifiers have the usual "C<while> loop"
semantics (conditional evaluated first), except when applied to a
-C<do>-BLOCK (or to the deprecated C<do>-SUBROUTINE statement), in
+C<do>-BLOCK (or to the Perl4 C<do>-SUBROUTINE statement), in
which case the block executes once before the conditional is
-evaluated. This is so that you can write loops like:
+evaluated.
+
+This is so that you can write loops like:
do {
$line = <STDIN>;
...
- } until $line eq ".\n";
+ } until !defined($line) || $line eq ".\n"
See L<perlfunc/do>. Note also that the loop control statements described
later will I<NOT> work in this construct, because modifiers don't take
@@ -203,17 +200,31 @@ X<last>
} while $x++ <= $z;
}
-B<NOTE:> The behaviour of a C<my> statement modified with a statement
-modifier conditional or loop construct (e.g. C<my $x if ...>) is
+B<NOTE:> The behaviour of a C<my>, C<state>, or
+C<our> modified with a statement modifier conditional
+or loop construct (for example, C<my $x if ...>) is
B<undefined>. The value of the C<my> variable may be C<undef>, any
previously assigned value, or possibly anything else. Don't rely on
it. Future versions of perl might do something different from the
version of perl you try it out on. Here be dragons.
X<my>
+The C<when> modifier is an experimental feature that first appeared in Perl
+5.14. To use it, you should include a C<use v5.14> declaration.
+(Technically, it requires only the C<switch> feature, but that aspect of it
+was not available before 5.14.) Operative only from within a C<foreach>
+loop or a C<given> block, it executes the statement only if the smartmatch
+C<< $_ ~~ I<EXPR> >> is true. If the statement executes, it is followed by
+a C<next> from inside a C<foreach> and C<break> from inside a C<given>.
+
+Under the current implementation, the C<foreach> loop can be
+anywhere within the C<when> modifier's dynamic scope, but must be
+within the C<given> block's lexical scope. This restricted may
+be relaxed in a future release. See L<"Switch Statements"> below.
+
=head2 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>
+X<{> X<}> X<if> X<unless> X<given> X<while> X<until> X<foreach> X<for> X<continue>
In Perl, a sequence of statements that defines a scope is called a block.
Sometimes a block is delimited by the file containing it (in the case
@@ -227,36 +238,55 @@ The following compound statements may be used to control flow:
if (EXPR) BLOCK
if (EXPR) BLOCK else BLOCK
+ if (EXPR) BLOCK elsif (EXPR) BLOCK ...
if (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK
+
unless (EXPR) BLOCK
unless (EXPR) BLOCK else BLOCK
+ unless (EXPR) BLOCK elsif (EXPR) BLOCK ...
unless (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK
+
+ given (EXPR) BLOCK
+
LABEL while (EXPR) BLOCK
LABEL while (EXPR) BLOCK continue BLOCK
+
LABEL until (EXPR) BLOCK
LABEL until (EXPR) BLOCK continue BLOCK
+
LABEL for (EXPR; EXPR; EXPR) BLOCK
+ LABEL for VAR (LIST) BLOCK
+ LABEL for VAR (LIST) BLOCK continue BLOCK
+
+ LABEL foreach (EXPR; EXPR; EXPR) BLOCK
LABEL foreach VAR (LIST) BLOCK
LABEL foreach VAR (LIST) BLOCK continue BLOCK
+
+ LABEL BLOCK
LABEL BLOCK continue BLOCK
-Note that, unlike C and Pascal, these are defined in terms of BLOCKs,
+ PHASE BLOCK
+
+The experimental C<given> statement is I<not automatically enabled>; see
+L</"Switch Statements"> below for how to do so, and the attendant caveats.
+
+Unlike in C and Pascal, in Perl these are all defined in terms of BLOCKs,
not statements. This means that the curly brackets are I<required>--no
dangling statements allowed. If you want to write conditionals without
-curly brackets there are several other ways to do it. The following
+curly brackets, there are several other ways to do it. The following
all do the same thing:
- if (!open(FOO)) { die "Can't open $FOO: $!"; }
+ if (!open(FOO)) { die "Can't open $FOO: $!" }
die "Can't open $FOO: $!" unless open(FOO);
- open(FOO) or die "Can't open $FOO: $!"; # FOO or bust!
- open(FOO) ? 'hi mom' : die "Can't open $FOO: $!";
+ open(FOO) || die "Can't open $FOO: $!";
+ open(FOO) ? () : die "Can't open $FOO: $!";
# a bit exotic, that last one
The C<if> statement is straightforward. Because BLOCKs are always
bounded by curly brackets, there is never any ambiguity about which
C<if> an C<else> goes with. If you use C<unless> in place of C<if>,
-the sense of the test is reversed. Like C<if>, C<unless> can be followed
-by C<else>. C<unless> can even be followed by one or more C<elsif>
+the sense of the test is reversed. Like C<if>, C<unless> can be followed
+by C<else>. C<unless> can even be followed by one or more C<elsif>
statements, though you may want to think twice before using that particular
language construct, as everyone reading your code will have to think at least
twice before they can understand what's going on.
@@ -279,8 +309,12 @@ conditional is about to be evaluated again. Thus it can be used to
increment a loop variable, even when the loop has been continued via
the C<next> statement.
+When a block is preceding by a compilation phase keyword such as C<BEGIN>,
+C<END>, C<INIT>, C<CHECK>, or C<UNITCHECK>, then the block will run only
+during the corresponding phase of execution. See L<perlmod> for more details.
+
Extension modules can also hook into the Perl parser to define new
-kinds of compound statement. These are introduced by a keyword which
+kinds of compound statements. These are introduced by a keyword which
the extension recognizes, and the syntax following the keyword is
defined entirely by the extension. If you are an implementor, see
L<perlapi/PL_keyword_plugin> for the mechanism. If you are using such
@@ -323,7 +357,7 @@ want to skip ahead and get the next record.
# now process $_
}
-which is Perl short-hand for the more explicitly written version:
+which is Perl shorthand for the more explicitly written version:
LINE: while (defined($line = <ARGV>)) {
chomp($line);
@@ -336,7 +370,7 @@ which is Perl short-hand for the more explicitly written version:
Note that if there were a C<continue> block on the above code, it would
get executed only on lines discarded by the regex (since redo skips the
-continue block). A continue block is often used to reset line counters
+continue block). A continue block is often used to reset line counters
or C<m?pat?> one-time matches:
# inspired by :1,$g/fred/s//WILMA/
@@ -354,12 +388,13 @@ If the word C<while> is replaced by the word C<until>, the sense of the
test is reversed, but the conditional is still tested before the first
iteration.
-The loop control statements don't work in an C<if> or C<unless>, since
+Loop control statements don't work in an C<if> or C<unless>, since
they aren't loops. You can double the braces to make them such, though.
if (/pattern/) {{
last if /fred/;
- next if /barney/; # same effect as "last", but doesn't document as well
+ next if /barney/; # same effect as "last",
+ # but doesn't document as well
# do something here
}}
@@ -431,9 +466,7 @@ loop.
X<my> X<local>
The C<foreach> keyword is actually a synonym for the C<for> keyword, so
-you can use C<foreach> for readability or C<for> for brevity. (Or because
-the Bourne shell is more familiar to you than I<csh>, so writing C<for>
-comes more naturally.) If VAR is omitted, C<$_> is set to each value.
+you can use either. If VAR is omitted, C<$_> is set to each value.
X<$_>
If any element of LIST is an lvalue, you can modify it by modifying
@@ -459,8 +492,9 @@ Examples:
$elem *= 2;
}
- for $count (10,9,8,7,6,5,4,3,2,1,'BOOM') {
- print $count, "\n"; sleep(1);
+ for $count (reverse(1..10), "BOOM") {
+ print $count, "\n";
+ sleep(1);
}
for (1..15) { print "Merry Christmas\n"; }
@@ -518,34 +552,345 @@ The BLOCK construct can be used to emulate case structures.
$nothing = 1;
}
-Such constructs are quite frequently used, because older versions
-of Perl had no official C<switch> statement.
+You'll also find that C<foreach> loop used to create a topicalizer
+and a switch:
+
+ SWITCH:
+ for ($var) {
+ if (/^abc/) { $abc = 1; last SWITCH; }
+ if (/^def/) { $def = 1; last SWITCH; }
+ if (/^xyz/) { $xyz = 1; last SWITCH; }
+ $nothing = 1;
+ }
+
+Such constructs are quite frequently used, both because older versions of
+Perl had no official C<switch> statement, and also because the new version
+described immediately below remains experimental and can sometimes be confusing.
+
+=head2 Switch Statements
-=head2 Switch statements
X<switch> X<case> X<given> X<when> X<default>
-Starting from Perl 5.10, you can say
+Starting from Perl 5.10.1 (well, 5.10.0, but it didn't work
+right), you can say
use feature "switch";
-which enables a switch feature that is closely based on the
-Perl 6 proposal.
+to enable an experimental switch feature. This is loosely based on an
+old version of a Perl 6 proposal, but it no longer resembles the Perl 6
+construct. You also get the switch feature whenever you declare that your
+code prefers to run under a version of Perl that is 5.10 or later. For
+example:
+
+ use v5.14;
+
+Under the "switch" feature, Perl gains the experimental keywords
+C<given>, C<when>, C<default>, C<continue>, and C<break>.
+Starting from Perl 5.16, one can prefix the switch
+keywords with C<CORE::> to access the feature without a C<use feature>
+statement. The keywords C<given> and
+C<when> are analogous to C<switch> and
+C<case> in other languages, so the code in the previous section could be
+rewritten as
+
+ use v5.10.1;
+ for ($var) {
+ when (/^abc/) { $abc = 1 }
+ when (/^def/) { $def = 1 }
+ when (/^xyz/) { $xyz = 1 }
+ default { $nothing = 1 }
+ }
+
+The C<foreach> is the non-experimental way to set a topicalizer.
+If you wish to use the highly experimental C<given>, that could be
+written like this:
+
+ use v5.10.1;
+ given ($var) {
+ when (/^abc/) { $abc = 1 }
+ when (/^def/) { $def = 1 }
+ when (/^xyz/) { $xyz = 1 }
+ default { $nothing = 1 }
+ }
+
+As of 5.14, that can also be written this way:
+
+ use v5.14;
+ for ($var) {
+ $abc = 1 when /^abc/;
+ $def = 1 when /^def/;
+ $xyz = 1 when /^xyz/;
+ default { $nothing = 1 }
+ }
+
+Or if you don't care to play it safe, like this:
+
+ use v5.14;
+ given ($var) {
+ $abc = 1 when /^abc/;
+ $def = 1 when /^def/;
+ $xyz = 1 when /^xyz/;
+ default { $nothing = 1 }
+ }
+
+The arguments to C<given> and C<when> are in scalar context,
+and C<given> assigns the C<$_> variable its topic value.
+
+Exactly what the I<EXPR> argument to C<when> does is hard to describe
+precisely, but in general, it tries to guess what you want done. Sometimes
+it is interpreted as C<< $_ ~~ I<EXPR> >>, and sometimes it does not. It
+also behaves differently when lexically enclosed by a C<given> block than
+it does when dynamically enclosed by a C<foreach> loop. The rules are far
+too difficult to understand to be described here. See L</"Experimental Details
+on given and when"> later on.
+
+Due to an unfortunate bug in how C<given> was implemented between Perl 5.10
+and 5.14, under those implementations the version of C<$_> governed by
+C<given> is merely a lexically scoped copy of the original, not a
+dynamically scoped alias to the original, as it would be if it were a
+C<foreach> or under both the original and the current Perl 6 language
+specification. This bug is expected to be addressed in a future release of
+Perl. For forwards compatibility, if you really want a lexical C<$_>,
+specify that explicitly:
+
+ given(my $_ = EXPR) { ... }
+
+In the meanwhile, stick to C<foreach> for your topicalizer and
+you will be less unhappy.
-The keywords C<given> and C<when> are analogous
-to C<switch> and C<case> in other languages, so the code
-above could be written as
+=head2 Goto
+X<goto>
+
+Although not for the faint of heart, Perl does support a C<goto>
+statement. There are three forms: C<goto>-LABEL, C<goto>-EXPR, and
+C<goto>-&NAME. A loop's LABEL is not actually a valid target for
+a C<goto>; it's just the name of the loop.
- given($_) {
- when (/^abc/) { $abc = 1; }
- when (/^def/) { $def = 1; }
- when (/^xyz/) { $xyz = 1; }
- default { $nothing = 1; }
+The C<goto>-LABEL form finds the statement labeled with LABEL and resumes
+execution there. It may not be used to go into any construct that
+requires initialization, such as a subroutine or a C<foreach> loop. It
+also can't be used to go into a construct that is optimized away. It
+can be used to go almost anywhere else within the dynamic scope,
+including out of subroutines, but it's usually better to use some other
+construct such as C<last> or C<die>. The author of Perl has never felt the
+need to use this form of C<goto> (in Perl, that is--C is another matter).
+
+The C<goto>-EXPR form expects a label name, whose scope will be resolved
+dynamically. This allows for computed C<goto>s per FORTRAN, but isn't
+necessarily recommended if you're optimizing for maintainability:
+
+ goto(("FOO", "BAR", "GLARCH")[$i]);
+
+The C<goto>-&NAME form is highly magical, and substitutes a call to the
+named subroutine for the currently running subroutine. This is used by
+C<AUTOLOAD()> subroutines that wish to load another subroutine and then
+pretend that the other subroutine had been called in the first place
+(except that any modifications to C<@_> in the current subroutine are
+propagated to the other subroutine.) After the C<goto>, not even C<caller()>
+will be able to tell that this routine was called first.
+
+In almost all cases like this, it's usually a far, far better idea to use the
+structured control flow mechanisms of C<next>, C<last>, or C<redo> instead of
+resorting to a C<goto>. For certain applications, the catch and throw pair of
+C<eval{}> and die() for exception processing can also be a prudent approach.
+
+=head2 The Ellipsis Statement
+X<...>
+X<... statement>
+X<ellipsis operator>
+X<elliptical statement>
+X<unimplemented statement>
+X<unimplemented operator>
+X<yada-yada>
+X<yada-yada operator>
+X<... operator>
+X<whatever operator>
+X<triple-dot operator>
+
+Beginning in Perl 5.12, Perl accepts an ellipsis, "C<...>", as a
+placeholder for code that you haven't implemented yet. This form of
+ellipsis, the unimplemented statement, should not be confused with the
+binary flip-flop C<...> operator. One is a statement and the other an
+operator. (Perl doesn't usually confuse them because usually Perl can tell
+whether it wants an operator or a statement, but see below for exceptions.)
+
+When Perl 5.12 or later encounters an ellipsis statement, it parses this
+without error, but if and when you should actually try to execute it, Perl
+throws an exception with the text C<Unimplemented>:
+
+ use v5.12;
+ sub unimplemented { ... }
+ eval { unimplemented() };
+ if ($@ =~ /^Unimplemented at /) {
+ say "I found an ellipsis!";
+ }
+
+You can only use the elliptical statement to stand in for a
+complete statement. These examples of how the ellipsis works:
+
+ use v5.12;
+ { ... }
+ sub foo { ... }
+ ...;
+ eval { ... };
+ sub somemeth {
+ my $self = shift;
+ ...;
}
+ $x = do {
+ my $n;
+ ...;
+ say "Hurrah!";
+ $n;
+ };
+
+The elliptical statement cannot stand in for an expression that
+is part of a larger statement, since the C<...> is also the three-dot
+version of the flip-flop operator (see L<perlop/"Range Operators">).
+
+These examples of attempts to use an ellipsis are syntax errors:
+
+ use v5.12;
+
+ print ...;
+ open(my $fh, ">", "/dev/passwd") or ...;
+ if ($condition && ... ) { say "Howdy" };
+
+There are some cases where Perl can't immediately tell the difference
+between an expression and a statement. For instance, the syntax for a
+block and an anonymous hash reference constructor look the same unless
+there's something in the braces to give Perl a hint. The ellipsis is a
+syntax error if Perl doesn't guess that the C<{ ... }> is a block. In that
+case, it doesn't think the C<...> is an ellipsis because it's expecting an
+expression instead of a statement:
+
+ @transformed = map { ... } @input; # syntax error
+
+You can use a C<;> inside your block to denote that the C<{ ... }> is a
+block and not a hash reference constructor. Now the ellipsis works:
+
+ @transformed = map {; ... } @input; # ; disambiguates
-This construct is very flexible and powerful. For example:
+ @transformed = map { ...; } @input; # ; disambiguates
+
+Note: Some folks colloquially refer to this bit of punctuation as a
+"yada-yada" or "triple-dot", but its true name
+is actually an ellipsis. Perl does not yet
+accept the Unicode version, U+2026 HORIZONTAL ELLIPSIS, as an alias for
+C<...>, but someday it may.
+
+=head2 PODs: Embedded Documentation
+X<POD> X<documentation>
+
+Perl has a mechanism for intermixing documentation with source code.
+While it's expecting the beginning of a new statement, if the compiler
+encounters a line that begins with an equal sign and a word, like this
+
+ =head1 Here There Be Pods!
+
+Then that text and all remaining text up through and including a line
+beginning with C<=cut> will be ignored. The format of the intervening
+text is described in L<perlpod>.
+
+This allows you to intermix your source code
+and your documentation text freely, as in
+
+ =item snazzle($)
+
+ The snazzle() function will behave in the most spectacular
+ form that you can possibly imagine, not even excepting
+ cybernetic pyrotechnics.
+
+ =cut back to the compiler, nuff of this pod stuff!
+
+ sub snazzle($) {
+ my $thingie = shift;
+ .........
+ }
+
+Note that pod translators should look at only paragraphs beginning
+with a pod directive (it makes parsing easier), whereas the compiler
+actually knows to look for pod escapes even in the middle of a
+paragraph. This means that the following secret stuff will be
+ignored by both the compiler and the translators.
+
+ $a=3;
+ =secret stuff
+ warn "Neither POD nor CODE!?"
+ =cut back
+ print "got $a\n";
+
+You probably shouldn't rely upon the C<warn()> being podded out forever.
+Not all pod translators are well-behaved in this regard, and perhaps
+the compiler will become pickier.
+
+One may also use pod directives to quickly comment out a section
+of code.
+
+=head2 Plain Old Comments (Not!)
+X<comment> X<line> X<#> X<preprocessor> X<eval>
+
+Perl can process line directives, much like the C preprocessor. Using
+this, one can control Perl's idea of filenames and line numbers in
+error or warning messages (especially for strings that are processed
+with C<eval()>). The syntax for this mechanism is almost the same as for
+most C preprocessors: it matches the regular expression
+
+ # example: '# line 42 "new_filename.plx"'
+ /^\# \s*
+ line \s+ (\d+) \s*
+ (?:\s("?)([^"]+)\g2)? \s*
+ $/x
+
+with C<$1> being the line number for the next line, and C<$3> being
+the optional filename (specified with or without quotes). Note that
+no whitespace may precede the C<< # >>, unlike modern C preprocessors.
+
+There is a fairly obvious gotcha included with the line directive:
+Debuggers and profilers will only show the last source line to appear
+at a particular line number in a given file. Care should be taken not
+to cause line number collisions in code you'd like to debug later.
+
+Here are some examples that you should be able to type into your command
+shell:
+
+ % perl
+ # line 200 "bzzzt"
+ # the '#' on the previous line must be the first char on line
+ die 'foo';
+ __END__
+ foo at bzzzt line 201.
+
+ % perl
+ # line 200 "bzzzt"
+ eval qq[\n#line 2001 ""\ndie 'foo']; print $@;
+ __END__
+ foo at - line 2001.
+
+ % perl
+ eval qq[\n#line 200 "foo bar"\ndie 'foo']; print $@;
+ __END__
+ foo at foo bar line 200.
+
+ % perl
+ # line 345 "goop"
+ eval "\n#line " . __LINE__ . ' "' . __FILE__ ."\"\ndie 'foo'";
+ print $@;
+ __END__
+ foo at goop line 345.
+
+=head2 Experimental Details on given and when
+
+As previously mentioned, the "switch" feature is considered highly
+experimental; it is subject to change with little notice. In particular,
+both C<given> and C<when> have tricky behaviours that are expected to
+change to become less tricky in the future. Do not rely upon their
+current (mis)implementations.
+
+Here is a longer example of C<given>:
use feature ":5.10";
- given($foo) {
+ given ($foo) {
when (undef) {
say '$foo is undefined';
}
@@ -567,102 +912,122 @@ This construct is very flexible and powerful. For example:
}
}
-C<given(EXPR)> will assign the value of EXPR to C<$_>
-within the lexical scope of the block, so it's similar to
+As currently implemented, C<given(EXPR)> assign the value of I<EXPR> to
+merely a lexically scoped I<B<copy>> (!) of C<$_>, not a dynamically
+scoped alias the way C<foreach> does. That makes it similar to
do { my $_ = EXPR; ... }
except that the block is automatically broken out of by a
-successful C<when> or an explicit C<break>.
+successful C<when> or an explicit C<break>. Because it is only a
+copy, and because it is only lexically scoped, not dynamically
+scoped, you cannot do the things with it that you are used to in
+a C<foreach> loop. In particular, you probably cannot use
+arbitrary function calls. Best stick to C<foreach> for that.
+
+Most of the power comes from the implicit smartmatching that can
+sometimes apply. Most of the time, C<when(EXPR)> is treated as an
+implicit smartmatch of C<$_>, that is, C<$_ ~~ EXPR>. (See
+L<perlop/"Smartmatch Operator"> for more information on smartmatching.)
+But when I<EXPR> is one of the 10 exceptional cases (or things like them)
+listed below, it is used directly as a boolean.
-Most of the power comes from implicit smart matching:
+=over 4
- when($foo)
+=item 1.
-is exactly equivalent to
+A user-defined subroutine call or a method invocation.
- when($_ ~~ $foo)
+=item 2.
-Most of the time, C<when(EXPR)> is treated as an implicit smart match of
-C<$_>, i.e. C<$_ ~~ EXPR>. (See L</"Smart matching in detail"> for more
-information on smart matching.) But when EXPR is one of the below
-exceptional cases, it is used directly as a boolean:
+A regular expression match in the form of C</REGEX/>, C<$foo =~ /REGEX/>,
+or C<$foo =~ EXPR>. Also, a negated regular expression match in
+the form C<!/REGEX/>, C<$foo !~ /REGEX/>, or C<$foo !~ EXPR>.
-=over 4
+=item 3.
-=item *
+A smart match that uses an explicit C<~~> operator, such as C<EXPR ~~ EXPR>.
-a subroutine or method call
+=item 4.
-=item *
+A boolean comparison operator such as C<$_ E<lt> 10> or C<$x eq "abc"> The
+relational operators that this applies to are the six numeric comparisons
+(C<< < >>, C<< > >>, C<< <= >>, C<< >= >>, C<< == >>, and C<< != >>), and
+the six string comparisons (C<lt>, C<gt>, C<le>, C<ge>, C<eq>, and C<ne>).
-a regular expression match, i.e. C</REGEX/> or C<$foo =~ /REGEX/>,
-or a negated regular expression match (C<!/REGEX/> or C<$foo !~ /REGEX/>).
+B<NOTE:> You will often have to use C<$c ~~ $_> because
+the default case uses C<$_ ~~ $c> , which is frequently
+the opposite of what you want.
-=item *
+=item 5.
-a comparison such as C<$_ E<lt> 10> or C<$x eq "abc">
-(or of course C<$_ ~~ $c>)
+At least the three builtin functions C<defined(...)>, C<exists(...)>, and
+C<eof(...)>. We might someday add more of these later if we think of them.
-=item *
+=item 6.
-C<defined(...)>, C<exists(...)>, or C<eof(...)>
+A negated expression, whether C<!(EXPR)> or C<not(EXPR)>, or a logical
+exclusive-or, C<(EXPR1) xor (EXPR2)>. The bitwise versions (C<~> and C<^>)
+are not included.
-=item *
+=item 7.
-a negated expression C<!(...)> or C<not (...)>, or a logical
-exclusive-or C<(...) xor (...)>.
+A filetest operator, with exactly 4 exceptions: C<-s>, C<-M>, C<-A>, and
+C<-C>, as these return numerical values, not boolean ones. The C<-z>
+filetest operator is not included in the exception list.
-=item *
+=item 8.
-a filetest operator, with the exception of C<-s>, C<-M>, C<-A>, and C<-C>,
-that return numerical values, not boolean ones.
-
-=item *
-
-the C<..> and C<...> flip-flop operators.
+The C<..> and C<...> flip-flop operators. Note that the C<...> flip-flop
+operator is completely different from the C<...> elliptical statement
+just described.
=back
-In those cases the value of EXPR is used directly as a boolean.
+In those 8 cases above, the value of EXPR is used directly as a boolean, so
+no smartmatching is done. You may think of C<when> as a smartsmartmatch.
-Furthermore, Perl inspects the operands of the binary boolean operators to
-decide whether to use smart matching for each one by applying the above test to
-the operands:
+Furthermore, Perl inspects the operands of logical operators to
+decide whether to use smartmatching for each one by applying the
+above test to the operands:
=over 4
-=item *
+=item 9.
-If EXPR is C<... && ...> or C<... and ...>, the test
-is applied recursively to both operands. If I<both>
-operands pass the test, then the expression is treated
-as boolean; otherwise, smart matching is used.
+If EXPR is C<EXPR1 && EXPR2> or C<EXPR1 and EXPR2>, the test is applied
+I<recursively> to both EXPR1 and EXPR2.
+Only if I<both> operands also pass the
+test, I<recursively>, will the expression be treated as boolean. Otherwise,
+smartmatching is used.
-=item *
+=item 10.
-If EXPR is C<... || ...>, C<... // ...> or C<... or ...>, the test
-is applied recursively to the first operand (which may be a
-higher-precedence AND operator, for example). If the first operand
-is to use smart matching, then both operands will do so; if it is
-not, then the second argument will not be either.
+If EXPR is C<EXPR1 || EXPR2>, C<EXPR1 // EXPR2>, or C<EXPR1 or EXPR2>, the
+test is applied I<recursively> to EXPR1 only (which might itself be a
+higher-precedence AND operator, for example, and thus subject to the
+previous rule), not to EXPR2. If EXPR1 is to use smartmatching, then EXPR2
+also does so, no matter what EXPR2 contains. But if EXPR2 does not get to
+use smartmatching, then the second argument will not be either. This is
+quite different from the C<&&> case just described, so be careful.
=back
-These rules look complicated, but usually they will do what
-you want. For example:
+These rules are complicated, but the goal is for them to do what you want
+(even if you don't quite understand why they are doing it). For example:
when (/^\d+$/ && $_ < 75) { ... }
-will be treated as a boolean match because the rules say both a regex match and
-an explicit test on $_ will be treated as boolean.
+will be treated as a boolean match because the rules say both
+a regex match and an explicit test on C<$_> will be treated
+as boolean.
Also:
when ([qw(foo bar)] && /baz/) { ... }
-will use smart matching because only I<one> of the operands is a boolean; the
-other uses smart matching, and that wins.
+will use smartmatching because only I<one> of the operands is a boolean:
+the other uses smartmatching, and that wins.
Further:
@@ -672,29 +1037,31 @@ will use smart matching (only the first operand is considered), whereas
when (/^baz/ || [qw(foo bar)]) { ... }
-will test only the regex, which causes both operands to be treated as boolean.
-Watch out for this one, then, because an arrayref is always a true value, which
-makes it effectively redundant.
+will test only the regex, which causes both operands to be
+treated as boolean. Watch out for this one, then, because an
+arrayref is always a true value, which makes it effectively
+redundant. Not a good idea.
-Tautologous boolean operators are still going to be optimized away. Don't be
-tempted to write
+Tautologous boolean operators are still going to be optimized
+away. Don't be tempted to write
- when ('foo' or 'bar') { ... }
+ when ("foo" or "bar") { ... }
-This will optimize down to C<'foo'>, so C<'bar'> will never be considered (even
-though the rules say to use a smart match on C<'foo'>). For an alternation like
-this, an array ref will work, because this will instigate smart matching:
+This will optimize down to C<"foo">, so C<"bar"> will never be considered (even
+though the rules say to use a smartmatch
+on C<"foo">). For an alternation like
+this, an array ref will work, because this will instigate smartmatching:
when ([qw(foo bar)] { ... }
This is somewhat equivalent to the C-style switch statement's fallthrough
-functionality (not to be confused with I<Perl's> fallthrough functionality - see
-below), wherein the same block is used for several C<case> statements.
+functionality (not to be confused with I<Perl's> fallthrough
+functionality--see below), wherein the same block is used for several
+C<case> statements.
-Another useful shortcut is that, if you use a literal array
-or hash as the argument to C<given>, it is turned into a
-reference. So C<given(@foo)> is the same as C<given(\@foo)>,
-for example.
+Another useful shortcut is that, if you use a literal array or hash as the
+argument to C<given>, it is turned into a reference. So C<given(@foo)> is
+the same as C<given(\@foo)>, for example.
C<default> behaves exactly like C<when(1 == 1)>, which is
to say that it always matches.
@@ -712,29 +1079,29 @@ case to the next:
given($foo) {
when (/x/) { say '$foo contains an x'; continue }
- when (/y/) { say '$foo contains a y' }
- default { say '$foo does not contain a y' }
+ when (/y/) { say '$foo contains a y' }
+ default { say '$foo does not contain a y' }
}
=head3 Return value
-When a C<given> statement is also a valid expression (e.g.
-when it's the last statement of a block), it evaluates to :
+When a C<given> statement is also a valid expression (for example,
+when it's the last statement of a block), it evaluates to:
=over 4
=item *
-an empty list as soon as an explicit C<break> is encountered.
+An empty list as soon as an explicit C<break> is encountered.
=item *
-the value of the last evaluated expression of the successful
-C<when>/C<default> clause, if there's one.
+The value of the last evaluated expression of the successful
+C<when>/C<default> clause, if there happens to be one.
=item *
-the value of the last evaluated expression of the C<given> block if no
+The value of the last evaluated expression of the C<given> block if no
condition is true.
=back
@@ -745,15 +1112,18 @@ was applied to the C<given> block.
Note that, unlike C<if> and C<unless>, failed C<when> statements always
evaluate to an empty list.
- my $price = do { given ($item) {
- when ([ 'pear', 'apple' ]) { 1 }
- break when 'vote'; # My vote cannot be bought
- 1e10 when /Mona Lisa/;
- 'unknown';
- } };
+ my $price = do {
+ given ($item) {
+ when (["pear", "apple"]) { 1 }
+ break when "vote"; # My vote cannot be bought
+ 1e10 when /Mona Lisa/;
+ "unknown";
+ }
+ };
-Currently, C<given> blocks can't always be used as proper expressions. This
-may be addressed in a future version of perl.
+Currently, C<given> blocks can't always
+be used as proper expressions. This
+may be addressed in a future version of Perl.
=head3 Switching in a loop
@@ -761,256 +1131,83 @@ Instead of using C<given()>, you can use a C<foreach()> loop.
For example, here's one way to count how many times a particular
string occurs in an array:
+ use v5.10.1;
my $count = 0;
for (@array) {
when ("foo") { ++$count }
}
print "\@array contains $count copies of 'foo'\n";
-At the end of all C<when> blocks, there is an implicit C<next>.
-You can override that with an explicit C<last> if you're only
-interested in the first match.
-
-This doesn't work if you explicitly specify a loop variable,
-as in C<for $item (@array)>. You have to use the default
-variable C<$_>. (You can use C<for my $_ (@array)>.)
-
-=head3 Smart matching in detail
-
-The behaviour of a smart match depends on what type of thing its arguments
-are. The behaviour is determined by the following table: the first row
-that applies determines the match behaviour (which is thus mostly
-determined by the type of the right operand). Note that the smart match
-implicitly dereferences any non-blessed hash or array ref, so the "Hash"
-and "Array" entries apply in those cases. (For blessed references, the
-"Object" entries apply.)
-
-Note that the "Matching Code" column is not always an exact rendition. For
-example, the smart match operator short-circuits whenever possible, but
-C<grep> does not.
-
- $a $b Type of Match Implied Matching Code
- ====== ===== ===================== =============
- Any undef undefined !defined $a
-
- Any Object invokes ~~ overloading on $object, or dies
-
- Hash CodeRef sub truth for each key[1] !grep { !$b->($_) } keys %$a
- Array CodeRef sub truth for each elt[1] !grep { !$b->($_) } @$a
- Any CodeRef scalar sub truth $b->($a)
-
- Hash Hash hash keys identical (every key is found in both hashes)
- Array Hash hash keys intersection grep { exists $b->{$_} } @$a
- Regex Hash hash key grep grep /$a/, keys %$b
- undef Hash always false (undef can't be a key)
- Any Hash hash entry existence exists $b->{$a}
-
- Hash Array hash keys intersection grep { exists $a->{$_} } @$b
- Array Array arrays are comparable[2]
- Regex Array array grep grep /$a/, @$b
- undef Array array contains undef grep !defined, @$b
- Any Array match against an array element[3]
- grep $a ~~ $_, @$b
-
- Hash Regex hash key grep grep /$b/, keys %$a
- Array Regex array grep grep /$b/, @$a
- Any Regex pattern match $a =~ /$b/
-
- Object Any invokes ~~ overloading on $object, or falls back:
- Any Num numeric equality $a == $b
- Num numish[4] numeric equality $a == $b
- undef Any undefined !defined($b)
- Any Any string equality $a eq $b
-
- 1 - empty hashes or arrays will match.
- 2 - that is, each element smart-matches the element of same index in the
- other array. [3]
- 3 - If a circular reference is found, we fall back to referential equality.
- 4 - either a real number, or a string that looks like a number
-
-=head3 Custom matching via overloading
-
-You can change the way that an object is matched by overloading
-the C<~~> operator. This may alter the usual smart match semantics.
-
-It should be noted that C<~~> will refuse to work on objects that
-don't overload it (in order to avoid relying on the object's
-underlying structure).
-
-Note also that smart match's matching rules take precedence over
-overloading, so if C<$obj> has smart match overloading, then
+Or in a more recent version:
- $obj ~~ X
+ use v5.14;
+ my $count = 0;
+ for (@array) {
+ ++$count when "foo";
+ }
+ print "\@array contains $count copies of 'foo'\n";
-will not automatically invoke the overload method with X as an argument;
-instead the table above is consulted as normal, and based in the type of X,
-overloading may or may not be invoked.
+At the end of all C<when> blocks, there is an implicit C<next>.
+You can override that with an explicit C<last> if you're
+interested in only the first match alone.
-See L<overload>.
+This doesn't work if you explicitly specify a loop variable, as
+in C<for $item (@array)>. You have to use the default variable C<$_>.
=head3 Differences from Perl 6
-The Perl 5 smart match and C<given>/C<when> constructs are not
-absolutely identical to their Perl 6 analogues. The most visible
-difference is that, in Perl 5, parentheses are required around
-the argument to C<given()> and C<when()> (except when this last
-one is used as a statement modifier). Parentheses in Perl 6
-are always optional in a control construct such as C<if()>,
-C<while()>, or C<when()>; they can't be made optional in Perl
-5 without a great deal of potential confusion, because Perl 5
-would parse the expression
+The Perl 5 smartmatch and C<given>/C<when> constructs are not compatible
+with their Perl 6 analogues. The most visible difference and least
+important difference is that, in Perl 5, parentheses are required around
+the argument to C<given()> and C<when()> (except when this last one is used
+as a statement modifier). Parentheses in Perl 6 are always optional in a
+control construct such as C<if()>, C<while()>, or C<when()>; they can't be
+made optional in Perl 5 without a great deal of potential confusion,
+because Perl 5 would parse the expression
- given $foo {
- ...
- }
+ given $foo {
+ ...
+ }
as though the argument to C<given> were an element of the hash
C<%foo>, interpreting the braces as hash-element syntax.
-The table of smart matches is not identical to that proposed by the
-Perl 6 specification, mainly due to the differences between Perl 6's
-and Perl 5's data models.
-
-In Perl 6, C<when()> will always do an implicit smart match
-with its argument, whilst it is convenient in Perl 5 to
-suppress this implicit smart match in certain situations,
-as documented above. (The difference is largely because Perl 5
-does not, even internally, have a boolean type.)
-
-=head2 Goto
-X<goto>
-
-Although not for the faint of heart, Perl does support a C<goto>
-statement. There are three forms: C<goto>-LABEL, C<goto>-EXPR, and
-C<goto>-&NAME. A loop's LABEL is not actually a valid target for
-a C<goto>; it's just the name of the loop.
-
-The C<goto>-LABEL form finds the statement labeled with LABEL and resumes
-execution there. It may not be used to go into any construct that
-requires initialization, such as a subroutine or a C<foreach> loop. It
-also can't be used to go into a construct that is optimized away. It
-can be used to go almost anywhere else within the dynamic scope,
-including out of subroutines, but it's usually better to use some other
-construct such as C<last> or C<die>. The author of Perl has never felt the
-need to use this form of C<goto> (in Perl, that is--C is another matter).
-
-The C<goto>-EXPR form expects a label name, whose scope will be resolved
-dynamically. This allows for computed C<goto>s per FORTRAN, but isn't
-necessarily recommended if you're optimizing for maintainability:
-
- goto(("FOO", "BAR", "GLARCH")[$i]);
-
-The C<goto>-&NAME form is highly magical, and substitutes a call to the
-named subroutine for the currently running subroutine. This is used by
-C<AUTOLOAD()> subroutines that wish to load another subroutine and then
-pretend that the other subroutine had been called in the first place
-(except that any modifications to C<@_> in the current subroutine are
-propagated to the other subroutine.) After the C<goto>, not even C<caller()>
-will be able to tell that this routine was called first.
-
-In almost all cases like this, it's usually a far, far better idea to use the
-structured control flow mechanisms of C<next>, C<last>, or C<redo> instead of
-resorting to a C<goto>. For certain applications, the catch and throw pair of
-C<eval{}> and die() for exception processing can also be a prudent approach.
-
-=head2 PODs: Embedded Documentation
-X<POD> X<documentation>
-
-Perl has a mechanism for intermixing documentation with source code.
-While it's expecting the beginning of a new statement, if the compiler
-encounters a line that begins with an equal sign and a word, like this
-
- =head1 Here There Be Pods!
+However, their are many, many other differences. For example,
+this works in Perl 5:
-Then that text and all remaining text up through and including a line
-beginning with C<=cut> will be ignored. The format of the intervening
-text is described in L<perlpod>.
-
-This allows you to intermix your source code
-and your documentation text freely, as in
-
- =item snazzle($)
-
- The snazzle() function will behave in the most spectacular
- form that you can possibly imagine, not even excepting
- cybernetic pyrotechnics.
-
- =cut back to the compiler, nuff of this pod stuff!
+ use v5.12;
+ my @primary = ("red", "blue", "green");
- sub snazzle($) {
- my $thingie = shift;
- .........
+ if (@primary ~~ "red") {
+ say "primary smartmatches red";
}
-Note that pod translators should look at only paragraphs beginning
-with a pod directive (it makes parsing easier), whereas the compiler
-actually knows to look for pod escapes even in the middle of a
-paragraph. This means that the following secret stuff will be
-ignored by both the compiler and the translators.
-
- $a=3;
- =secret stuff
- warn "Neither POD nor CODE!?"
- =cut back
- print "got $a\n";
-
-You probably shouldn't rely upon the C<warn()> being podded out forever.
-Not all pod translators are well-behaved in this regard, and perhaps
-the compiler will become pickier.
-
-One may also use pod directives to quickly comment out a section
-of code.
-
-=head2 Plain Old Comments (Not!)
-X<comment> X<line> X<#> X<preprocessor> X<eval>
-
-Perl can process line directives, much like the C preprocessor. Using
-this, one can control Perl's idea of filenames and line numbers in
-error or warning messages (especially for strings that are processed
-with C<eval()>). The syntax for this mechanism is almost the same as for
-most C preprocessors: it matches the regular expression
-
- # example: '# line 42 "new_filename.plx"'
- /^\# \s*
- line \s+ (\d+) \s*
- (?:\s("?)([^"]+)\g2)? \s*
- $/x
-
-with C<$1> being the line number for the next line, and C<$3> being
-the optional filename (specified with or without quotes). Note that
-no whitespace may precede the C<< # >>, unlike modern C preprocessors.
+ if ("red" ~~ @primary) {
+ say "red smartmatches primary";
+ }
-There is a fairly obvious gotcha included with the line directive:
-Debuggers and profilers will only show the last source line to appear
-at a particular line number in a given file. Care should be taken not
-to cause line number collisions in code you'd like to debug later.
+ say "that's all, folks!";
-Here are some examples that you should be able to type into your command
-shell:
+But it doesn't work at all in Perl 6. Instead, you should
+use the (parallelizable) C<any> operator instead:
- % perl
- # line 200 "bzzzt"
- # the `#' on the previous line must be the first char on line
- die 'foo';
- __END__
- foo at bzzzt line 201.
+ if any(@primary) eq "red" {
+ say "primary smartmatches red";
+ }
- % perl
- # line 200 "bzzzt"
- eval qq[\n#line 2001 ""\ndie 'foo']; print $@;
- __END__
- foo at - line 2001.
+ if "red" eq any(@primary) {
+ say "red smartmatches primary";
+ }
- % perl
- eval qq[\n#line 200 "foo bar"\ndie 'foo']; print $@;
- __END__
- foo at foo bar line 200.
+The table of smartmatches in L<perlop/"Smartmatch Operator"> is not
+identical to that proposed by the Perl 6 specification, mainly due to
+differences between Perl 6's and Perl 5's data models, but also because
+the Perl 6 spec has changed since Perl 5 rushed into early adoption.
- % perl
- # line 345 "goop"
- eval "\n#line " . __LINE__ . ' "' . __FILE__ ."\"\ndie 'foo'";
- print $@;
- __END__
- foo at goop line 345.
+In Perl 6, C<when()> will always do an implicit smartmatch with its
+argument, while in Perl 5 it is convenient (albeit potentially confusing) to
+suppress this implicit smartmatch in various rather loosely-defined
+situations, as roughly outlined above. (The difference is largely because
+Perl 5 does not have, even internally, a boolean type.)
=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perlthrtut.pod b/Master/tlpkg/tlperl/lib/pods/perlthrtut.pod
index 30f83577482..6b693d1b0e1 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlthrtut.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlthrtut.pod
@@ -13,7 +13,7 @@ between threads must be explicit. The user-level interface for I<ithreads>
uses the L<threads> class.
B<NOTE>: There was another older Perl threading flavor called the 5.005 model
-that used the L<Threads> class. This old model was known to have problems, is
+that used the L<threads> class. This old model was known to have problems, is
deprecated, and was removed for release 5.10. You are
strongly encouraged to migrate any existing 5.005 threads code to the new
model as soon as possible.
@@ -1043,7 +1043,7 @@ give you the full POSIX API). For example, there is no way to
guarantee that a signal sent to a multi-threaded Perl application
will get intercepted by any particular thread. (However, a recently
added feature does provide the capability to send signals between
-threads. See L<threads/"THREAD SIGNALLING> for more details.)
+threads. See L<threads/THREAD SIGNALLING> for more details.)
=head1 Thread-Safety of System Libraries
@@ -1090,7 +1090,7 @@ Latest version of L<threads::shared> on CPAN:
L<http://search.cpan.org/search?module=threads%3A%3Ashared>
Perl threads mailing list:
-L<http://lists.cpan.org/showlist.cgi?name=iThreads>
+L<http://lists.perl.org/list/ithreads.html>
=head1 Bibliography
diff --git a/Master/tlpkg/tlperl/lib/pods/perltie.pod b/Master/tlpkg/tlperl/lib/pods/perltie.pod
index 456cc60cbab..887f2f02edd 100644
--- a/Master/tlpkg/tlperl/lib/pods/perltie.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perltie.pod
@@ -870,11 +870,10 @@ program, where output to STDOUT and STDERR may have to be redirected
in some special way. See nvi and the Apache module for examples.
When tying a handle, the first argument to C<tie> should begin with an
-asterisk. So, if you are tying STDOUT, use C<*STDOUT>. If you have assigned
-it to a scalar variable, say C<$handle>, use C<*$handle>. C<tie $handle>
-works, too, but that is considered a bug and will be fixed in Perl 5.16. It
-is supposed to tie the scalar C<$handle>, not the handle inside it.
-C<tie $handle> emits a deprecation warning as of Perl 5.14.
+asterisk. So, if you are tying STDOUT, use C<*STDOUT>. If you have
+assigned it to a scalar variable, say C<$handle>, use C<*$handle>.
+C<tie $handle> ties the scalar variable C<$handle>, not the handle inside
+it.
In our example we're going to create a shouting handle.
diff --git a/Master/tlpkg/tlperl/lib/pods/perltoc.pod b/Master/tlpkg/tlperl/lib/pods/perltoc.pod
index a72f910d4dc..35868311f54 100644
--- a/Master/tlpkg/tlperl/lib/pods/perltoc.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perltoc.pod
@@ -1,7 +1,7 @@
# !!!!!!! 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.
+# Edit those files and run ..\pod\buildtoc to effect changes.
=head1 NAME
@@ -39,6 +39,8 @@ through to locate the proper section you're looking for.
=item Platform-Specific
+=item Stubs for Deleted Documents
+
=back
=item DESCRIPTION
@@ -405,253 +407,65 @@ X<record> X<structure> X<struct>
=back
-=head2 perlboot - Beginner's Object-Oriented Tutorial
+=head2 perlootut - Object-Oriented Programming in Perl 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 Let's review...
-
-=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 DATE
=item DESCRIPTION
-=item Creating a Class
+=item OBJECT-ORIENTED FUNDAMENTALS
=over 4
-=item Object Representation
-
-=item Class Interface
+=item Object
-=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 Class
-=item Documenting the Interface
+=item Methods
-=back
+=item Attributes
-=item Aggregation
+=item Polymorphism
=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 Encapsulation
-=item Indirect References to Class Data
+=item Composition
-=item Monadic Classes
+=item Roles
-=item Translucent Attributes
+=item When to Use OO
=back
-=item Class Data as Lexical Variables
+=item PERL OO SYSTEMS
=over 4
-=item Privacy and Responsibility
+=item Moose
-=item File-Scoped Lexicals
+Declarative sugar, Roles built-in, A miniature type system, Full
+introspection and manipulation, Self-hosted and extensible, Rich ecosystem,
+Many more features
-=item More Inheritance Concerns
+=item Class::Accessor
-=item Locking the Door and Throwing Away the Key
+=item Object::Tiny
-=item Translucency Revisited
+=item Role::Tiny
-=back
-
-=item NOTES
-
-=item SEE ALSO
-
-=item AUTHOR AND COPYRIGHT
+=item OO System Summary
-=item ACKNOWLEDGEMENTS
+L<Moose>, L<Class::Accessor>, L<Object::Tiny>, L<Role::Tiny>
-=item HISTORY
+=item Other OO Systems
=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
+=item CONCLUSION
=back
@@ -918,28 +732,25 @@ LIMIT specified
=over 4
-=item Where to get the perlfaq
+=item Where to find the perlfaq
+
+=item How to use the perlfaq
=item How to contribute to the perlfaq
-=item What will happen if you mail your Perl programming problems to the
-authors?
+=item What if my question isn't answered in the FAQ?
=back
-=item CREDITS
-
-=item AUTHOR AND COPYRIGHT
+=item TABLE OF CONTENTS
-=item Table of Contents
+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 -
+Web, Email and Networking
-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
+=item THE QUESTIONS
=over 4
@@ -959,17 +770,21 @@ Interaction, perlfaq9 - Networking
=item L<perlfaq8>: System Interaction
-=item L<perlfaq9>: Networking
+=item L<perlfaq9>: Web, Email and Networking
=back
+=item CREDITS
+
+=item AUTHOR AND COPYRIGHT
+
=back
=head2 perlfaq1 - General Questions About Perl
=over 4
-=item DESCRIPTION
+=item DESCRIPTION
=over 4
@@ -981,8 +796,6 @@ Interaction, perlfaq9 - Networking
=item What are Perl 4, Perl 5, or Perl 6?
-=item What was Ponie?
-
=item What is Perl 6?
=item How stable is Perl?
@@ -998,16 +811,12 @@ Scheme, or Tcl?
=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
+L<http://www.perl.org/about.html>,
+L<http://perltraining.com.au/whyperl.html>
=back
@@ -1023,43 +832,44 @@ http://www.perl.org/advocacy/whyperl.html
=over 4
-=item What machines support perl? Where do I get it?
+=item What machines support Perl? Where do I get it?
-=item How can I get a binary version of perl?
+=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
+=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?
+L<http://www.perl.org/>, L<http://perldoc.perl.org/>,
+L<http://learn.perl.org/>
-=item Where should I post source code?
+=item What is perl.com? Perl Mongers? pm.org? perl.org? cpan.org?
+
+L<http://www.perl.org/>, L<http://learn.perl.org/>,
+L<http://jobs.perl.org/>, L<http://lists.perl.org/>
+
+=item Where can I post questions?
=item Perl Books
=item Which magazines have Perl content?
-=item What mailing lists are there for Perl?
+=item Which Perl blogs should I read?
-=item Where are the archives for comp.lang.perl.misc?
+=item What mailing lists are there for Perl?
-=item Where can I buy a commercial version of perl?
+=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 AUTHOR AND COPYRIGHT
@@ -1076,9 +886,27 @@ What does CPAN/src/... mean?
=item How do I do (anything)?
-=item How can I use Perl interactively?
+Basics, L<perldata> - Perl data types, L<perlvar> - Perl pre-defined
+variables, L<perlsyn> - Perl syntax, L<perlop> - Perl operators and
+precedence, L<perlsub> - Perl subroutines, Execution, L<perlrun> - how to
+execute the Perl interpreter, L<perldebug> - Perl debugging, Functions,
+L<perlfunc> - Perl builtin functions, Objects, L<perlref> - Perl references
+and nested data structures, L<perlmod> - Perl modules (packages and symbol
+tables), L<perlobj> - Perl objects, L<perltie> - how to hide an object
+class in a simple variable, Data Structures, L<perlref> - Perl references
+and nested data structures, L<perllol> - Manipulating arrays of arrays in
+Perl, L<perldsc> - Perl Data Structures Cookbook, Modules, L<perlmod> -
+Perl modules (packages and symbol tables), L<perlmodlib> - constructing new
+Perl modules and finding existing ones, Regexes, L<perlre> - Perl regular
+expressions, L<perlfunc> - Perl builtin functions>, L<perlop> - Perl
+operators and precedence, L<perllocale> - Perl locale handling
+(internationalization and localization), Moving to perl5, L<perltrap> -
+Perl traps for the unwary, L<perl>, Linking with C, L<perlxstut> - Tutorial
+for writing XSUBs, L<perlxs> - XS language reference manual, L<perlcall> -
+Perl calling conventions from C, L<perlguts> - Introduction to the Perl
+API, L<perlembed> - how to embed perl in your C program, Various
-=item Is there a Perl shell?
+=item How can I use Perl interactively?
=item How do I find which modules are installed on my system?
@@ -1090,14 +918,12 @@ What does CPAN/src/... mean?
=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, Notepad++, Open Perl IDE, OptiPerl, Padre,
PerlBuilder, visiPerl+, Visual Perl, Zeus, GNU Emacs, MicroEMACS, XEmacs,
-Jed, Elvis, Vile, Vim, Codewright, MultiEdit, SlickEdit, ConTEXT, Bash,
-Ksh, Tcsh, Zsh, Affrus, Alpha, BBEdit and BBEdit Lite
+Jed, Vim, Vile, Codewright, MultiEdit, SlickEdit, ConTEXT, Bash, Ksh, Tcsh,
+Zsh, Affrus, Alpha, BBEdit and BBEdit Lite
=item Where can I get Perl macros for vi?
@@ -1170,7 +996,7 @@ numbers I should be getting (eg, 19.95)?
=item Why isn't my octal data interpreted correctly?
-=item Does Perl have a round() function? What about ceil() and floor()?
+=item Does Perl have a round() function? What about ceil() and floor()?
Trig functions?
=item How do I convert between numeric representations/bases/radixes?
@@ -1284,7 +1110,7 @@ after the end token
=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
+=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?
@@ -1358,6 +1184,8 @@ array of hashes or arrays?
=item How can I check if a key exists in a multilevel hash?
+=item How can I prevent addition of unwanted keys into a hash?
+
=back
=item Data: Misc
@@ -1392,7 +1220,7 @@ array of hashes or arrays?
=over 4
-=item How do I flush/unbuffer an output filehandle? Why must I do this?
+=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 change, delete, or insert a line in a file, or append to the
@@ -1417,8 +1245,8 @@ 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?
+=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?
@@ -1446,9 +1274,6 @@ X<clobber> X<read-write> X<clobbering> X<truncate> X<truncating>
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>
@@ -1487,7 +1312,7 @@ 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?
+=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?
@@ -1501,15 +1326,15 @@ 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
+=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 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>
@@ -1554,12 +1379,6 @@ X<..>
X<regex, XML> X<regex, HTML> X<XML> X<HTML> X<pain> X<frustration>
X<sucking out, will to live>
-Solve the balanced text problem from another question in L<perlfaq6>, Try
-the recursive regex features in Perl 5.10 and later. See L<perlre>, Try
-defining a grammar using Perl 5.10's C<(?DEFINE)> feature, Break the
-problem down into sub-problems instead of trying to use a single regex,
-Convince everyone not to use XML or HTML in the first place
-
=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>
@@ -1626,7 +1445,7 @@ 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//>
+X<\E, regex> X<qr//>
=back
@@ -1681,7 +1500,7 @@ Passing Methods
=item How do I create a static variable?
-=item What's the difference between dynamic and lexical (static) scoping?
+=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
@@ -1689,7 +1508,7 @@ 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 Why doesn't "my($foo) = E<lt>$fhE<gt>;" work right?
=item How do I redefine a builtin function, operator, or method?
@@ -1771,7 +1590,7 @@ 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
+=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?
@@ -1804,8 +1623,8 @@ does the error message "Protocol not supported" mean?
=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
+=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
@@ -1844,7 +1663,7 @@ search path?
=item How do I add a directory to my include path (@INC) at runtime?
the C<PERLLIB> environment variable, the C<PERL5LIB> environment variable,
-the C<perl -Idir> command line flag, the C<lib> pragma:, the C<local::lib>
+the C<perl -Idir> command line flag, the C<lib> pragma:, the L<local::lib>
module:
=item What is socket.ph and where do I get it?
@@ -1855,7 +1674,7 @@ module:
=back
-=head2 perlfaq9 - Networking
+=head2 perlfaq9 - Web, Email and Networking
=over 4
@@ -1863,61 +1682,55 @@ module:
=over 4
-=item What is the correct form of response from a CGI script?
+=item Should I use a web framework?
+
+=item Which web framework should I use?
+X<framework> X<CGI.pm> X<CGI> X<Catalyst> X<Dancer>
-=item My CGI script runs from the command line but not the browser. (500
-Server Error)
+L<Catalyst>, L<Dancer>, L<Mojolicious>, L<Web::Simple>
-=item How can I get better error messages from a CGI program?
+=item What is Plack and PSGI?
=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?
-X<URI> X<CGI.pm> X<CGI> X<URI::Escape> X<RFC 2396>
+X<URI> X<URI::Escape> X<RFC 2396>
=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 make sure users can't enter values into a form that causes
+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 find the user's mail address?
+
+=item How do I send email?
-=item How do I send mail?
+L<Email::Sender::Transport::Sendmail>, L<Email::Sender::Transport::SMTP>,
+L<Email::Sender::Transport::SMTP::TLS>
=item How do I use MIME to make an attachment to a mail message?
-=item How do I read mail?
+=item How do I read email?
=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 do I fetch/put an (S)FTP file?
=item How can I do RPC in Perl?
@@ -1953,7 +1766,8 @@ X<until> X<when> 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>
+X<{> X<}> X<if> X<unless> X<given> 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>
@@ -1967,18 +1781,32 @@ X<for> X<foreach>
=item Basic BLOCKs
X<block>
-=item Switch statements
-X<switch> X<case> X<given> X<when> X<default>
+=item Switch Statements
=item Goto
X<goto>
+=item The Ellipsis Statement
+X<...>
+X<... statement>
+X<ellipsis operator>
+X<elliptical statement>
+X<unimplemented statement>
+X<unimplemented operator>
+X<yada-yada>
+X<yada-yada operator>
+X<... operator>
+X<whatever operator>
+X<triple-dot operator>
+
=item PODs: Embedded Documentation
X<POD> X<documentation>
=item Plain Old Comments (Not!)
X<comment> X<line> X<#> X<preprocessor> X<eval>
+=item Experimental Details on given and when
+
=back
=back
@@ -2008,6 +1836,8 @@ X<list>
=item Subscripts
+=item Multi-dimensional array emulation
+
=item Slices
X<slice> X<array, slice> X<hash, slice>
@@ -2069,6 +1899,13 @@ X<relational operator> X<operator, relational>
=item Equality Operators
X<equality> X<equal> X<equals> X<operator, equality>
+=item Smartmatch Operator
+
+1. Empty hashes or arrays match, 2. That is, each element smartmatches the
+element of the same index in the other array.[3], 3. If a circular
+reference is found, fall back to referential equality, 4. Either an actual
+number, or a string that looks like one
+
=item Bitwise And
X<operator, bitwise, and> X<bitwise and> X<&>
@@ -2082,7 +1919,7 @@ X<&&> X<logical and> X<operator, logical, and>
=item C-style Logical Or
X<||> X<operator, logical, or>
-=item C-style Logical Defined-Or
+=item Logical Defined-Or
X<//> X<operator, logical, defined-or>
=item Range Operators
@@ -2096,10 +1933,6 @@ X<assignment> X<operator, assignment> X<=> X<**=> X<+=> X<*=> X<&=>
X<<< <<= >>> X<&&=> X<-=> X</=> X<|=> X<<< >>= >>> X<||=> X<//=> X<.=>
X<%=> X<^=> X<x=>
-=item The Triple-Dot Operator
-X<...> X<... operator> X<yada-yada operator> X<whatever operator>
-X<triple-dot operator>
-
=item Comma Operator
X<comma> X<operator, comma> X<,>
@@ -2112,9 +1945,9 @@ X<operator, logical, not> X<not>
=item Logical And
X<operator, logical, and> X<and>
-=item Logical or, Defined or, and Exclusive Or
+=item Logical or and Exclusive Or
X<operator, logical, or> X<operator, logical, xor>
-X<operator, logical, defined or> X<operator, logical, exclusive or>
+X<operator, logical, exclusive or>
X<or> X<xor>
=item C Operators Missing From Perl
@@ -2179,7 +2012,6 @@ X<operator, bitwise, string>
X<integer>
=item Floating-point Arithmetic
-X<floating-point> X<floating point> X<float> X<real>
=item Bigger Numbers
X<number, arbitrary precision>
@@ -2264,18 +2096,16 @@ 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 the switch
-feature, 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
+flow of your Perl program X<control flow>, 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>, Non-function keywords
=item Portability
X<portability> X<Unix> X<portable>
@@ -2302,59 +2132,62 @@ 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>, default BLOCK,
-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>,
-each ARRAY X<array, iterator>, each EXPR, 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>, given EXPR BLOCK X<given>, given BLOCK,
-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
+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>, each ARRAY
+X<array, iterator>, each EXPR, 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, evalbytes EXPR X<evalbytes>, evalbytes, 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, fc EXPR X<fc> X<foldcase>
+X<casefold> X<fold-case> X<case-fold>, fc, fcntl FILEHANDLE,FUNCTION,SCALAR
+X<fcntl>, __FILE__ X<__FILE__>, 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>, keys ARRAY, keys EXPR, kill SIGNAL, LIST X<kill> X<signal>,
-last LABEL X<last> X<break>, last, lc EXPR X<lc> X<lowercase>, lc, If C<use
-bytes> is in effect:, On EBCDIC platforms, On ASCII platforms, Otherwise,
-If EXPR has the UTF8 flag set, Otherwise, if C<use locale> is in effect,
-Otherwise, if C<use feature 'unicode_strings'> is in effect:, Otherwise:,
-On EBCDIC platforms, On ASCII platforms, 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
+X<keys> X<key>, keys ARRAY, keys EXPR, kill SIGNAL, LIST, kill SIGNAL
+X<kill> X<signal>, last LABEL X<last> X<break>, last, lc EXPR X<lc>
+X<lowercase>, lc, If C<use bytes> is in effect:, On EBCDIC platforms, On
+ASCII platforms, Otherwise, if C<use locale> (but not C<use locale
+':not_characters'>) is in effect:, Otherwise, If EXPR has the UTF8 flag
+set:, Otherwise, if C<use feature 'unicode_strings'> or C<use locale
+':not_characters'>) is in effect:, Otherwise:, On EBCDIC platforms, On
+ASCII platforms, lcfirst EXPR X<lcfirst> X<lowercase>, lcfirst, length EXPR
+X<length> X<size>, length, __LINE__ X<__LINE__>, 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 FILEHANDLE X<lstat>, lstat
+EXPR, lstat DIRHANDLE, 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 declarations>
@@ -2367,41 +2200,42 @@ 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, package NAMESPACE VERSION X<package> X<module>
X<namespace> X<version>, package NAMESPACE BLOCK, package NAMESPACE VERSION
-BLOCK X<package> X<module> X<namespace> X<version>, pipe
-READHANDLE,WRITEHANDLE X<pipe>, pop ARRAY X<pop> X<stack>, pop EXPR, pop,
-pos SCALAR X<pos> X<match, position>, pos, print FILEHANDLE LIST X<print>,
-print FILEHANDLE, print LIST, print, printf FILEHANDLE FORMAT, LIST
-X<printf>, printf FILEHANDLE, printf FORMAT, LIST, printf, prototype
-FUNCTION X<prototype>, push ARRAY,LIST X<push> X<stack>, push EXPR,LIST,
-q/STRING/, qq/STRING/, qx/STRING/, qw/STRING/, qr/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 FILEHANDLE, 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 EXPR, 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 or EXPR,OFFSET,LENGTH,LIST X<splice>, splice ARRAY or
+BLOCK X<package> X<module> X<namespace> X<version>, __PACKAGE__
+X<__PACKAGE__>, pipe READHANDLE,WRITEHANDLE X<pipe>, pop ARRAY X<pop>
+X<stack>, pop EXPR, pop, pos SCALAR X<pos> X<match, position>, pos, print
+FILEHANDLE LIST X<print>, print FILEHANDLE, print LIST, print, printf
+FILEHANDLE FORMAT, LIST X<printf>, printf FILEHANDLE, printf FORMAT, LIST,
+printf, prototype FUNCTION X<prototype>, push ARRAY,LIST X<push> X<stack>,
+push EXPR,LIST, q/STRING/, qq/STRING/, qw/STRING/, qx/STRING/, qr/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
+FILEHANDLE, 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
+EXPR, 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 or EXPR,OFFSET,LENGTH,LIST X<splice>, splice ARRAY or
EXPR,OFFSET,LENGTH, splice ARRAY or EXPR,OFFSET, splice ARRAY or EXPR,
split /PATTERN/,EXPR,LIMIT X<split>, split /PATTERN/,EXPR, split /PATTERN/,
split, sprintf FORMAT, LIST X<sprintf>, format parameter index, flags,
@@ -2411,11 +2245,11 @@ 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
+BLOCK, sub NAME : ATTRS BLOCK, sub NAME (PROTO) : ATTRS BLOCK, __SUB__
+X<__SUB__>, 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
@@ -2429,14 +2263,19 @@ 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>, unshift EXPR,LIST,
+unshift ARRAY,LIST X<unshift>, unshift EXPR,LIST, untie VARIABLE X<untie>,
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>, values ARRAY, values EXPR, 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>, when EXPR
-BLOCK X<when>, when BLOCK, write FILEHANDLE X<write>, write EXPR, write,
-y///
+X<wantarray> X<context>, warn LIST X<warn> X<warning> X<STDERR>, write
+FILEHANDLE X<write>, write EXPR, write, y///
+
+=item Non-function Keywords by Cross-reference
+
+__DATA__, __END__, BEGIN, CHECK, END, INIT, UNITCHECK, DESTROY, and, cmp,
+eq, ge, gt, if, le, lt, ne, not, or, x, xor, AUTOLOAD, else, elseif, elsif,
+for, foreach, unless, until, while, default, given, when
=back
@@ -2707,9 +2546,10 @@ First:, Second:, Third:, Fourth:, Fifth:, Sixth:
=item DESCRIPTION
-NAME, SYNOPSIS, DESCRIPTION, OPTIONS, RETURN VALUE, ERRORS, DIAGNOSTICS,
-EXAMPLES, ENVIRONMENT, FILES, CAVEATS, BUGS, RESTRICTIONS, NOTES, AUTHOR,
-HISTORY, COPYRIGHT AND LICENSE, SEE ALSO
+bold (BE<lt>E<gt>), italic (IE<lt>E<gt>), code (CE<lt>E<gt>), files
+(FE<lt>E<gt>), NAME, SYNOPSIS, DESCRIPTION, OPTIONS, RETURN VALUE, ERRORS,
+DIAGNOSTICS, EXAMPLES, ENVIRONMENT, FILES, CAVEATS, BUGS, RESTRICTIONS,
+NOTES, AUTHOR, HISTORY, COPYRIGHT AND LICENSE, SEE ALSO
=item SEE ALSO
@@ -2847,31 +2687,36 @@ 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>
+[abw] X<debugger command, L>, S [[!]regex] X<debugger command, S>, t [n]
+X<debugger command, t>, t [n] 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>
+command, b>, b [file]:[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>, disable [file]:[line] X<breakpoint>
+X<debugger command, disable> X<disable>, disable [line] X<breakpoint>
+X<debugger command, disable> X<disable>, enable [file]:[line] X<breakpoint>
+X<debugger command, disable> X<disable>, enable [line] X<breakpoint>
+X<debugger command, disable> X<disable>, 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
@@ -2947,25 +2792,18 @@ X<memory usage>
$ARG, $_ X<$_> X<$ARG>, @ARG, @_ X<@_> X<@ARG>, $LIST_SEPARATOR, $" X<$">
X<$LIST_SEPARATOR>, $PROCESS_ID, $PID, $$ X<$$> X<$PID> X<$PROCESS_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>, $SUBSCRIPT_SEPARATOR, $SUBSEP, $;
-X<$;> X<$SUBSEP> X<SUBSCRIPT_SEPARATOR>, $REAL_USER_ID, $UID, $< X<< $< >>
-X<$UID> X<$REAL_USER_ID>, $EFFECTIVE_USER_ID, $EUID, $> X<< $> >> X<$EUID>
-X<$EFFECTIVE_USER_ID>, $a, $b X<$a> X<$b>, $COMPILING, $^C X<$^C>
-X<$COMPILING>, $DEBUGGING, $^D X<$^D> X<$DEBUGGING>, ${^ENCODING}
-X<${^ENCODING}>, %ENV X<%ENV>, $SYSTEM_FD_MAX, $^F X<$^F>
-X<$SYSTEM_FD_MAX>, @F X<@F>, ${^GLOBAL_PHASE} X<${^GLOBAL_PHASE}>,
-CONSTRUCT, START, CHECK, INIT, RUN, END, DESTRUCT, $^H X<$^H>, %^H X<%^H>,
-@INC X<@INC>, %INC X<%INC>, $INPLACE_EDIT, $^I X<$^I> X<$INPLACE_EDIT>, $^M
-X<$^M>, $OSNAME, $^O X<$^O> X<$OSNAME>, ${^OPEN} X<${^OPEN}>, $PERLDB, $^P
-X<$^P> X<$PERLDB>, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x100,
-0x200, 0x400, %SIG X<%SIG>, $BASETIME, $^T X<$^T> X<$BASETIME>, ${^TAINT}
-X<${^TAINT}>, ${^UNICODE} X<${^UNICODE}>, ${^UTF8CACHE} X<${^UTF8CACHE}>,
-${^UTF8LOCALE} X<${^UTF8LOCALE}>, $PERL_VERSION, $^V X<$^V>
-X<$PERL_VERSION>, ${^WIN32_SLOPPY_STAT} X<${^WIN32_SLOPPY_STAT}>
-X<sitecustomize> X<sitecustomize.pl>, $EXECUTABLE_NAME, $^X X<$^X>
-X<$EXECUTABLE_NAME>
+$PROGRAM_NAME, $0 X<$0> X<$PROGRAM_NAME>, $REAL_GROUP_ID, $GID, $( X<$(>
+X<$GID> X<$REAL_GROUP_ID>, $EFFECTIVE_GROUP_ID, $EGID, $) X<$)> X<$EGID>
+X<$EFFECTIVE_GROUP_ID>, $REAL_USER_ID, $UID, $< X<< $< >> X<$UID>
+X<$REAL_USER_ID>, $EFFECTIVE_USER_ID, $EUID, $> X<< $> >> X<$EUID>
+X<$EFFECTIVE_USER_ID>, $SUBSCRIPT_SEPARATOR, $SUBSEP, $; X<$;> X<$SUBSEP>
+X<SUBSCRIPT_SEPARATOR>, $a, $b X<$a> X<$b>, %ENV X<%ENV>, $SYSTEM_FD_MAX,
+$^F X<$^F> X<$SYSTEM_FD_MAX>, @F X<@F>, @INC X<@INC>, %INC X<%INC>,
+$INPLACE_EDIT, $^I X<$^I> X<$INPLACE_EDIT>, $^M X<$^M>, $OSNAME, $^O X<$^O>
+X<$OSNAME>, %SIG X<%SIG>, $BASETIME, $^T X<$^T> X<$BASETIME>,
+$PERL_VERSION, $^V X<$^V> X<$PERL_VERSION>, ${^WIN32_SLOPPY_STAT}
+X<${^WIN32_SLOPPY_STAT}> X<sitecustomize> X<sitecustomize.pl>,
+$EXECUTABLE_NAME, $^X X<$^X> X<$EXECUTABLE_NAME>
=item Variables related to regular expressions
@@ -3020,6 +2858,16 @@ X<$OS_ERROR>, %OS_ERROR, %ERRNO, %! X<%!> X<%OS_ERROR> X<%ERRNO>,
$CHILD_ERROR, $? X<$?> X<$CHILD_ERROR>, $EVAL_ERROR, $@ X<$@>
X<$EVAL_ERROR>
+=item Variables related to the interpreter state
+
+$COMPILING, $^C X<$^C> X<$COMPILING>, $DEBUGGING, $^D X<$^D> X<$DEBUGGING>,
+${^ENCODING} X<${^ENCODING}>, ${^GLOBAL_PHASE} X<${^GLOBAL_PHASE}>,
+CONSTRUCT, START, CHECK, INIT, RUN, END, DESTRUCT, $^H X<$^H>, %^H X<%^H>,
+${^OPEN} X<${^OPEN}>, $PERLDB, $^P X<$^P> X<$PERLDB>, 0x01, 0x02, 0x04,
+0x08, 0x10, 0x20, 0x40, 0x80, 0x100, 0x200, 0x400, ${^TAINT} X<${^TAINT}>,
+${^UNICODE} X<${^UNICODE}>, ${^UTF8CACHE} X<${^UTF8CACHE}>, ${^UTF8LOCALE}
+X<${^UTF8LOCALE}>
+
=item Deprecated and removed variables
$OFMT, $# X<$#> X<$OFMT>, $* X<$*>, $ARRAY_BASE, $[ X<$[> X<$ARRAY_BASE>,
@@ -3081,8 +2929,8 @@ X<possessive>
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<(*:NAME)> X<(*MARK)> X<(*MARK:NAME)> X<(*:NAME)>, C<(*THEN)>
+C<(*THEN:NAME)>, Verbs without an argument, C<(*COMMIT)> X<(*COMMIT)>,
C<(*FAIL)> C<(*F)> X<(*FAIL)> X<(*F)>, C<(*ACCEPT)> X<(*ACCEPT)>
=item Backtracking
@@ -3178,10 +3026,10 @@ Unicode rules are in effect or if on an EBCDIC platform .., otherwise ..,
=item Bracketed Character Classes
-If the C</a> modifier, is in effect .., otherwise .., For code points above
-255 .., For code points below 256 .., if locale rules are in effect .., if
-Unicode rules are in effect or if on an EBCDIC platform .., otherwise ..,
-[1], [2], [3], [4], [5], [6]
+[1], [2], [3], [4], [5], [6], If the C</a> modifier, is in effect ..,
+otherwise .., For code points above 255 .., For code points below 256 ..,
+if locale rules are in effect .., if Unicode rules are in effect or if on
+an EBCDIC platform .., otherwise ..
=back
@@ -3249,6 +3097,9 @@ lexical> X<closure> X<lexical> X<lexical scope>, 5. X<constructor> X<new>,
=item Using References
X<reference, use> X<dereferencing> X<dereference>
+=item Circular References
+X<circular reference> X<reference, circular>
+
=item Symbolic references
X<reference, symbolic> X<reference, soft>
X<symbolic reference> X<soft reference>
@@ -3328,7 +3179,7 @@ X<format, internals>
=back
-=head2 perlobj - Perl objects
+=head2 perlobj - Perl object reference
=over 4
@@ -3336,7 +3187,7 @@ X<format, internals>
=over 4
-=item An Object is Simply a Reference
+=item An Object is Simply a Data Structure
X<object> X<bless> X<constructor> X<new>
=item A Class is Simply a Package
@@ -3348,23 +3199,42 @@ 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 Inheritance
+X<inheritance>
+
+=item Writing Constructors
+X<constructor>
+
+=item Attributes
+X<attribute>
+
+=item An Aside About Smarter and Safer Code
+
+=item Method Call Variations
+X<method>
-=item Default UNIVERSAL methods
+=item Invoking Class Methods
+X<invocation>
+
+=item C<bless>, C<blessed>, and C<ref>
+
+=item The UNIVERSAL Class
X<UNIVERSAL>
-isa(CLASS) X<isa>, DOES(ROLE) X<DOES>, can(METHOD) X<can>, VERSION( [NEED]
-) X<VERSION>
+isa($class) X<isa>, DOES($role) X<DOES>, can($method) X<can>,
+VERSION($need) X<VERSION>
+
+=item AUTOLOAD
+X<AUTOLOAD>
=item Destructors
X<destructor> X<DESTROY>
-=item Summary
+=item Non-Hash Objects
-=item Two-Phased Garbage Collection
-X<garbage collection> X<GC> X<circular reference>
-X<reference, circular> X<DESTROY> X<destructor>
+=item Inside-Out objects
+
+=item Pseudo-hashes
=back
@@ -3575,6 +3445,8 @@ BEGIN blocks, Open filehandles, Open directory handles, Forking pipe open()
not yet implemented, Global state maintained by XSUBs, Interpreter embedded
in larger application, Thread-safety of extensions
+=item PORTABILITY CAVEATS
+
=item BUGS
=item AUTHOR
@@ -3849,6 +3721,13 @@ localization)
=item DESCRIPTION
+=item WHAT IS A LOCALE
+
+Category LC_NUMERIC: Numeric formatting, Category LC_MONETARY: Formatting
+of monetary amounts, Category LC_TIME: Date/Time formatting, Category
+LC_MESSAGES: Error and other messages, Category LC_COLLATE: Collation,
+Category LC_CTYPE: Character Types
+
=item PREPARING TO USE LOCALES
=item USING LOCALES
@@ -3857,6 +3736,9 @@ localization)
=item The use locale pragma
+B<Under C<use locale ':not_characters';>>, B<Under just plain C<use
+locale;>>
+
=item The setlocale function
=item Finding locales
@@ -4020,8 +3902,9 @@ B<C<\p{Assigned}>>, B<C<\p{Blank}>>, B<C<\p{Decomposition_Type:
Non_Canonical}>> (Short: C<\p{Dt=NonCanon}>), B<C<\p{Graph}>>,
B<C<\p{HorizSpace}>>, B<C<\p{In=*}>>, B<C<\p{PerlSpace}>>,
B<C<\p{PerlWord}>>, B<C<\p{Posix...}>>, B<C<\p{Present_In: *}>> (Short:
-C<\p{In=*}>), B<C<\p{Print}>>, B<C<\p{SpacePerl}>>, B<C<\p{VertSpace}>>,
-B<C<\p{Word}>>, B<C<\p{XPosix...}>>
+C<\p{In=*}>), B<C<\p{Print}>>, B<C<\p{SpacePerl}>>, B<C<\p{Title}>> and
+B<C<\p{Titlecase}>>, B<C<\p{VertSpace}>>, B<C<\p{Word}>>,
+B<C<\p{XPosix...}>>
=item User-Defined Character Properties
@@ -4147,41 +4030,59 @@ range?
=back
-=head2 perluniprops - Index of Unicode Version 6.0.0 properties in Perl
+=head2 perluniprops - Index of Unicode Version 6.1.0 character properties
+in Perl
=over 4
=item DESCRIPTION
-=item Properties accessible through \p{} and \P{}
+=item Properties accessible through C<\p{}> and C<\P{}>
-Single form (\p{name}) tighter rules:, white space adjacent to a non-word
-character, underscores separating digits in numbers, Compound form
-(\p{name=value} or \p{name:value}) tighter rules:, Obsolete, Stabilized,
-Deprecated, B<*> is a wild-card, B<(\d+)> in the info column gives the
-number of code points matched by this property, B<D> means this is
-deprecated, B<O> means this is obsolete, B<S> means this is stabilized,
+Single form (C<\p{name}>) tighter rules:, white space adjacent to a
+non-word character, underscores separating digits in numbers, Compound form
+(C<\p{name=value}> or C<\p{name:value}>) tighter rules:, Stabilized,
+Deprecated, Obsolete, Z<>B<*> is a wild-card, B<(\d+)> in the info column
+gives the number of code points matched by this property, B<D> means this
+is deprecated, B<O> means this is obsolete, B<S> means this is stabilized,
B<T> means tighter (stricter) name matching applies, B<X> means use of this
-form is discouraged
+form is discouraged, and may not be stable
=over 4
-=item Legal \p{} and \P{} constructs that match no characters
+=item Legal C<\p{}> and C<\P{}> constructs that match no characters
\p{Canonical_Combining_Class=Attached_Below_Left},
-\p{Joining_Type=Left_Joining}
+\p{Grapheme_Cluster_Break=Prepend}, \p{Joining_Type=Left_Joining}
=back
-=item Properties not accessible through \p{} and \P{}
+=item Properties accessible through Unicode::UCD
-=item Unicode regular expression properties that are NOT accepted by Perl
+=item Properties accessible through other means
+
+=item Unicode character properties that are NOT accepted by Perl
I<Expands_On_NFC> (XO_NFC), I<Expands_On_NFD> (XO_NFD), I<Expands_On_NFKC>
(XO_NFKC), I<Expands_On_NFKD> (XO_NFKD), I<Grapheme_Link> (Gr_Link),
-I<Jamo_Short_Name> (JSN), I<Script=Katakana_Or_Hiragana> (sc=Hrkt)
+I<Indic_Matra_Category> (InMC), I<Indic_Syllabic_Category> (InSC),
+I<Jamo_Short_Name> (JSN), I<Other_Alphabetic> (OAlpha),
+I<Other_Default_Ignorable_Code_Point> (ODI), I<Other_Grapheme_Extend>
+(OGr_Ext), I<Other_ID_Continue> (OIDC), I<Other_ID_Start> (OIDS),
+I<Other_Lowercase> (OLower), I<Other_Math> (OMath), I<Other_Uppercase>
+(OUpper), I<Script=Katakana_Or_Hiragana> (sc=Hrkt),
+I<Script_Extensions=Katakana_Or_Hiragana> (scx=Hrkt)
+
+=item Other information in the Unicode data base
-=item Files in the I<To> directory (for serious hackers only)
+F<auxiliary/GraphemeBreakTest.html>, F<auxiliary/LineBreakTest.html>,
+F<auxiliary/SentenceBreakTest.html>, F<auxiliary/WordBreakTest.html>,
+F<auxiliary\LBTest.txt>, F<auxiliary\SBTest.txt>, F<auxiliary\WBTest.txt>,
+F<BidiTest.txt>, F<NormalizationTest.txt>, F<CJKRadicals.txt>,
+F<EmojiSources.txt>, F<Index.txt>, F<IndicMatraCategory.txt>,
+F<IndicSyllabicCategory.txt>, F<NamedSqProv.txt>, F<NamesList.txt>,
+F<NormalizationCorrections.txt>, F<Props.txt>, F<ReadMe.txt>,
+F<StandardizedVariants.txt>
=item SEE ALSO
@@ -4423,11 +4324,14 @@ X<CLONE> X<CLONE_SKIP> X<thread> X<threads> X<ithread>
=item Pragmatic Modules
-attributes, autodie, autodie::exception, autodie::exception::system,
-autodie::hints, autouse, base, bigint, bignum, bigrat, blib, bytes,
-charnames, constant, deprecate, diagnostics, encoding, encoding::warnings,
-feature, fields, filetest, if, inc::latest, integer, less, lib, locale,
-mro, open, ops, overload, overloading, parent, re, sigtrap, sort, strict,
+arybase, attributes, autodie, autodie::exception,
+autodie::exception::system, autodie::hints, autouse, base, bigint, bignum,
+bigrat, blib, bytes, charnames, constant, deprecate, diagnostics, encoding,
+encoding::warnings, feature, fields, filetest, if, inc::latest, integer,
+less, lib, locale, mro, open, ops, overload, overloading, parent, perldoc,
+perlfaq, perlfaq1, perlfaq2, perlfaq3, perlfaq4, perlfaq5, perlfaq6,
+perlfaq7, perlfaq8, perlfaq9, perlfunc, perlglossary, perlpodspeccopy,
+perlvarcopy, perlxs, perlxstut, perlxstypemap, re, sigtrap, sort, strict,
subs, threads, threads::shared, utf8, vars, version, vmsish, warnings,
warnings::register
@@ -4437,31 +4341,42 @@ AnyDBM_File, App::Cpan, App::Prove, App::Prove::State,
App::Prove::State::Result, App::Prove::State::Result::Test,
Archive::Extract, Archive::Tar, Archive::Tar::File, Attribute::Handlers,
AutoLoader, AutoSplit, B, B::Concise, B::Debug, B::Deparse, B::Lint,
-B::Lint::Debug, 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::Distroprefs,
+B::Lint::Debug, B::Showlex, B::Terse, B::Xref, Benchmark, C<Socket>, CGI,
+CGI::Apache, CGI::Carp, CGI::Cookie, CGI::Fast, CGI::Pretty, CGI::Push,
+CGI::Switch, CGI::Util, CORE, CPAN, CPAN::API::HOWTO, CPAN::Distroprefs,
CPAN::FirstTime, CPAN::Kwalify, CPAN::Meta, CPAN::Meta::Converter,
CPAN::Meta::Feature, CPAN::Meta::History, CPAN::Meta::Prereqs,
-CPAN::Meta::Spec, CPAN::Meta::Validator, CPAN::Meta::YAML, CPAN::Nox,
-CPAN::Version, CPANPLUS, CPANPLUS::Dist::Base, CPANPLUS::Dist::Build,
-CPANPLUS::Dist::Build::Constants, CPANPLUS::Dist::Sample,
+CPAN::Meta::Requirements, CPAN::Meta::Spec, CPAN::Meta::Validator,
+CPAN::Meta::YAML, CPAN::Nox, CPAN::Version, CPANPLUS, CPANPLUS::Backend,
+CPANPLUS::Backend::RV, CPANPLUS::Config, CPANPLUS::Configure,
+CPANPLUS::Dist, CPANPLUS::Dist::Autobundle, CPANPLUS::Dist::Base,
+CPANPLUS::Dist::Build, CPANPLUS::Dist::Build::Constants,
+CPANPLUS::Dist::MM, CPANPLUS::Dist::Sample, CPANPLUS::Error, CPANPLUS::FAQ,
+CPANPLUS::Hacking, CPANPLUS::Internals, CPANPLUS::Internals::Extract,
+CPANPLUS::Internals::Fetch, CPANPLUS::Internals::Report,
+CPANPLUS::Internals::Search, CPANPLUS::Internals::Source,
CPANPLUS::Internals::Source::Memory, CPANPLUS::Internals::Source::SQLite,
-CPANPLUS::Shell::Classic, CPANPLUS::Shell::Default::Plugins::HOWTO, Carp,
-Class::Struct, Compress::Raw::Bzip2, Compress::Raw::Bzip2::FAQ,
-Compress::Raw::Zlib, Compress::Raw::Zlib::FAQ, 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::PPPort,
-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,
+CPANPLUS::Internals::Utils, CPANPLUS::Module, CPANPLUS::Module::Author,
+CPANPLUS::Module::Author::Fake, CPANPLUS::Module::Checksums,
+CPANPLUS::Module::Fake, CPANPLUS::Selfupdate, CPANPLUS::Shell,
+CPANPLUS::Shell::Classic, CPANPLUS::Shell::Default,
+CPANPLUS::Shell::Default::Plugins::CustomSource,
+CPANPLUS::Shell::Default::Plugins::HOWTO,
+CPANPLUS::Shell::Default::Plugins::Remote,
+CPANPLUS::Shell::Default::Plugins::Source, Carp, Class::Struct,
+Compress::Raw::Bzip2, 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::InnerPackage, Devel::PPPort, 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,
@@ -4472,31 +4387,43 @@ 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::YAML, ExtUtils::Manifest, ExtUtils::Mkbootstrap,
-ExtUtils::Mksymlists, ExtUtils::Packlist, ExtUtils::ParseXS,
-ExtUtils::XSSymSet, 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, HTTP::Tiny, Hash::Util, Hash::Util::FieldHash, I18N::Collate,
-I18N::LangTags, I18N::LangTags::Detect, I18N::LangTags::List,
-I18N::Langinfo, IO, IO::Compress::Base, IO::Compress::Bzip2,
-IO::Compress::Deflate, IO::Compress::FAQ, 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,
+ExtUtils::Manifest, ExtUtils::Mkbootstrap, ExtUtils::Mksymlists,
+ExtUtils::Packlist, ExtUtils::ParseXS, ExtUtils::ParseXS::Constants,
+ExtUtils::ParseXS::Utilities, ExtUtils::Typemaps, ExtUtils::Typemaps::Cmd,
+ExtUtils::Typemaps::InputMap, ExtUtils::Typemaps::OutputMap,
+ExtUtils::Typemaps::Type, ExtUtils::XSSymSet, 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, HTTP::Tiny, Hash::Util, Hash::Util::FieldHash,
+I18N::Collate, I18N::LangTags, I18N::LangTags::Detect,
+I18N::LangTags::List, I18N::Langinfo, IO, IO::Compress::Base,
+IO::Compress::Bzip2, IO::Compress::Deflate, IO::Compress::FAQ,
+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::Bunzip2, IO::Uncompress::Gunzip, IO::Uncompress::Inflate,
IO::Uncompress::RawInflate, IO::Uncompress::Unzip, IO::Zlib, IPC::Cmd,
IPC::Msg, IPC::Open2, IPC::Open3, IPC::Semaphore, IPC::SharedMem,
IPC::SysV, JSON::PP, JSON::PP::Boolean, List::Util, List::Util::XS,
-Locale::Codes, Locale::Codes::Changes, Locale::Codes::Country,
-Locale::Codes::Currency, Locale::Codes::Language, Locale::Codes::Script,
-Locale::Constants, Locale::Country, Locale::Currency, Locale::Language,
-Locale::Maketext, Locale::Maketext::Cookbook, Locale::Maketext::Guts,
+Locale::Codes, Locale::Codes::API, Locale::Codes::Changes,
+Locale::Codes::Constants, Locale::Codes::Country,
+Locale::Codes::Country_Codes, Locale::Codes::Country_Retired,
+Locale::Codes::Currency, Locale::Codes::Currency_Codes,
+Locale::Codes::Currency_Retired, Locale::Codes::LangExt,
+Locale::Codes::LangExt_Codes, Locale::Codes::LangExt_Retired,
+Locale::Codes::LangFam, Locale::Codes::LangFam_Codes,
+Locale::Codes::LangFam_Retired, Locale::Codes::LangVar,
+Locale::Codes::LangVar_Codes, Locale::Codes::LangVar_Retired,
+Locale::Codes::Language, Locale::Codes::Language_Codes,
+Locale::Codes::Language_Retired, Locale::Codes::Script,
+Locale::Codes::Script_Codes, Locale::Codes::Script_Retired,
+Locale::Country, Locale::Currency, Locale::Language, Locale::Maketext,
+Locale::Maketext::Cookbook, Locale::Maketext::Guts,
Locale::Maketext::GutsLoader, Locale::Maketext::Simple,
Locale::Maketext::TPJ13, Locale::Script, Log::Message,
Log::Message::Config, Log::Message::Handlers, Log::Message::Item,
@@ -4523,45 +4450,47 @@ 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, Object::Accessor, Opcode, POSIX,
Package::Constants, Params::Check, Parse::CPAN::Meta, Perl::OSType, 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, Pod::Perldoc::BaseTo, Pod::Perldoc::GetOptsOO,
+PerlIO::encoding, PerlIO::mmap, 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,
+Pod::Perldoc::BaseTo, Pod::Perldoc::GetOptsOO, Pod::Perldoc::ToANSI,
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::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::XHTML, Pod::Simple::XMLOutStream,
-Pod::Text, Pod::Text::Color, Pod::Text::Termcap, Pod::Usage, SDBM_File,
-Safe, Scalar::Util, Search::Dict, SelectSaver, SelfLoader, Shell, Socket,
-Storable, Symbol, Sys::Hostname, Sys::Syslog, Sys::Syslog::Win32,
-TAP::Base, TAP::Formatter::Base, TAP::Formatter::Color,
-TAP::Formatter::Console, TAP::Formatter::Console::ParallelSession,
-TAP::Formatter::Console::Session, TAP::Formatter::File,
-TAP::Formatter::File::Session, TAP::Formatter::Session, TAP::Harness,
-TAP::Object, TAP::Parser, TAP::Parser::Aggregator, TAP::Parser::Grammar,
-TAP::Parser::Iterator, TAP::Parser::Iterator::Array,
-TAP::Parser::Iterator::Process, TAP::Parser::Iterator::Stream,
-TAP::Parser::IteratorFactory, TAP::Parser::Multiplexer,
-TAP::Parser::Result, TAP::Parser::Result::Bailout,
-TAP::Parser::Result::Comment, TAP::Parser::Result::Plan,
-TAP::Parser::Result::Pragma, TAP::Parser::Result::Test,
-TAP::Parser::Result::Unknown, TAP::Parser::Result::Version,
-TAP::Parser::Result::YAML, TAP::Parser::ResultFactory,
-TAP::Parser::Scheduler, TAP::Parser::Scheduler::Job,
-TAP::Parser::Scheduler::Spinner, TAP::Parser::Source,
-TAP::Parser::SourceHandler, TAP::Parser::SourceHandler::Executable,
-TAP::Parser::SourceHandler::File, TAP::Parser::SourceHandler::Handle,
-TAP::Parser::SourceHandler::Perl, TAP::Parser::SourceHandler::RawTAP,
-TAP::Parser::Utils, TAP::Parser::YAMLish::Reader,
-TAP::Parser::YAMLish::Writer, Term::ANSIColor, Term::Cap, Term::Complete,
-Term::ReadLine, Term::UI, Test, Test::Builder, Test::Builder::Module,
+Pod::Perldoc::ToPod, Pod::Perldoc::ToRtf, Pod::Perldoc::ToTerm,
+Pod::Perldoc::ToText, Pod::Perldoc::ToTk, Pod::Perldoc::ToXml,
+Pod::PlainText, 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::XHTML, Pod::Simple::XMLOutStream, Pod::Text, Pod::Text::Color,
+Pod::Text::Termcap, Pod::Usage, SDBM_File, Safe, Scalar::Util,
+Search::Dict, SelectSaver, SelfLoader, Storable, Symbol, Sys::Hostname,
+Sys::Syslog, Sys::Syslog::Win32, TAP::Base, TAP::Formatter::Base,
+TAP::Formatter::Color, TAP::Formatter::Console,
+TAP::Formatter::Console::ParallelSession, TAP::Formatter::Console::Session,
+TAP::Formatter::File, TAP::Formatter::File::Session,
+TAP::Formatter::Session, TAP::Harness, TAP::Object, TAP::Parser,
+TAP::Parser::Aggregator, TAP::Parser::Grammar, TAP::Parser::Iterator,
+TAP::Parser::Iterator::Array, TAP::Parser::Iterator::Process,
+TAP::Parser::Iterator::Stream, TAP::Parser::IteratorFactory,
+TAP::Parser::Multiplexer, TAP::Parser::Result,
+TAP::Parser::Result::Bailout, TAP::Parser::Result::Comment,
+TAP::Parser::Result::Plan, TAP::Parser::Result::Pragma,
+TAP::Parser::Result::Test, TAP::Parser::Result::Unknown,
+TAP::Parser::Result::Version, TAP::Parser::Result::YAML,
+TAP::Parser::ResultFactory, TAP::Parser::Scheduler,
+TAP::Parser::Scheduler::Job, TAP::Parser::Scheduler::Spinner,
+TAP::Parser::Source, TAP::Parser::SourceHandler,
+TAP::Parser::SourceHandler::Executable, TAP::Parser::SourceHandler::File,
+TAP::Parser::SourceHandler::Handle, TAP::Parser::SourceHandler::Perl,
+TAP::Parser::SourceHandler::RawTAP, TAP::Parser::Utils,
+TAP::Parser::YAMLish::Reader, TAP::Parser::YAMLish::Writer,
+Term::ANSIColor, Term::Cap, Term::Complete, Term::ReadLine, Term::UI,
+Term::UI::History, Test, Test::Builder, Test::Builder::Module,
Test::Builder::Tester, Test::Builder::Tester::Color, Test::Harness,
Test::More, Test::Simple, Test::Tutorial, Text::Abbrev, Text::Balanced,
Text::ParseWords, Text::Soundex, Text::Tabs, Text::Wrap, Thread,
@@ -4591,8 +4520,8 @@ South Africa
=item Asia
-Hong Kong, India, Indonesia, Japan, Kazakhstan, Republic of Korea, Russia,
-Singapore, Taiwan, Thailand, Turkey, Viet Nam
+China, Hong Kong, India, Indonesia, Japan, Republic of Korea, Russia,
+Singapore, Taiwan, Thailand, Turkey
=item Central America
@@ -4608,10 +4537,10 @@ Ukraine, United Kingdom
=item North America
-Bahamas, Canada, Mexico, United States, Alabama, California, Florida,
-Idaho, Illinois, Indiana, Massachusetts, Michigan, Minnesota, New Jersey,
-New York, North Carolina, Oregon, Pennsylvania, South Carolina, Tennessee,
-Texas, Utah, Virginia, Washington, Wisconsin
+Bahamas, Canada, Mexico, United States, Alabama, Arizona, California,
+Florida, Idaho, Illinois, Indiana, Massachusetts, Michigan, Minnesota, New
+Jersey, New York, North Carolina, Oregon, Pennsylvania, South Carolina,
+Tennessee, Texas, Utah, Virginia, Washington, Wisconsin
=item Oceania
@@ -4814,6 +4743,8 @@ tarball, Announce to the modules list, Announce to clpa, Fix bugs!
=item A basic example
+=item Key naming
+
=item Implementation details
=back
@@ -4833,7 +4764,7 @@ tarball, Announce to the modules list, Announce to clpa, Fix bugs!
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>
+C<roffitall>
=item Converters
@@ -4845,13 +4776,13 @@ L<config_data|config_data>, L<libnetcfg|libnetcfg>, L<perlivp>
=item Development
-L<perlbug|perlbug>, L<perlthanks|perlthanks>, L<h2ph|h2ph>, L<c2ph|c2ph>
-and L<pstruct|pstruct>, L<h2xs|h2xs>, L<enc2xs>, L<xsubpp>,
-L<dprofpp|dprofpp>, L<prove>, L<corelist>
+L<perlbug|perlbug>, L<perlthanks|perlbug>, L<h2ph|h2ph>, L<c2ph|c2ph> and
+L<pstruct|pstruct>, L<h2xs|h2xs>, L<enc2xs>, L<xsubpp>, L<prove>,
+L<corelist>
=item General tools
-L<piconv>, L<ptar>, L<ptardiff>, L<ptargrep>, L<shasum>
+L<piconv>, L<ptar>, L<ptardiff>, L<ptargrep>, L<shasum>, L<zipdetails>
=item Installation
@@ -4863,45 +4794,6 @@ L<cpan>, L<cpanp>, L<cpan2dist>, L<instmodsh>
=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
@@ -4938,6 +4830,35 @@ Some Filters Clobber the C<DATA> Handle
=back
+=head2 perldtrace - Perl's support for DTrace
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item HISTORY
+
+=item PROBES
+
+sub-entry(SUBNAME, FILE, LINE, PACKAGE), sub-return(SUBNAME, FILE, LINE,
+PACKAGE), phase-change(NEWPHASE, OLDPHASE)
+
+=item EXAMPLES
+
+Most frequently called functions, Trace function calls, Function calls
+during interpreter cleanup, System calls at compile time
+
+=item REFERENCES
+
+DTrace User Guide, DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and
+FreeBSD
+
+=item AUTHORS
+
+=back
+
=head2 perlglossary - Perl Glossary
=over 4
@@ -4985,7 +4906,7 @@ dropped modules, dweomer, dwimmer, dynamic scoping
=item E
-eclectic, element, embedding, empty subclass test, en passant,
+eclectic, element, embedding, empty list, 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
@@ -5012,7 +4933,7 @@ document, hexadecimal, home directory, host, hubris, HV
identifier, impatience, implementation, import, increment, indexing,
indirect filehandle, indirect object, indirect object slot, indirection,
infix, inheritance, instance, instance variable, integer, interface,
-interpolation, interpreter, invocand, invocation, I/O, IO, IP, IPC, is-a,
+interpolation, interpreter, invocant, invocation, I/O, IO, IP, IPC, is-a,
iteration, iterator, IV
=item J
@@ -5068,8 +4989,8 @@ qualified, quantifier
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
+reserved words, restricted hash, return value, RFC, right shift, root,
+RTFM, run phase, run time, run-time pattern, RV, rvalue
=item S
@@ -5225,7 +5146,7 @@ SBRKed/SBRKs:CONTINUOUS>, C<pad: 0>, C<heads: 2192>, C<chain: 0>, C<tail:
=back
-=head2 perlxstut, perlXStut - Tutorial for writing XSUBs
+=head2 perlxstut - Tutorial for writing XSUBs
=over 4
@@ -5351,6 +5272,8 @@ SBRKed/SBRKs:CONTINUOUS>, C<pad: 0>, C<heads: 2192>, C<chain: 0>, C<tail:
=item The NO_INIT Keyword
+=item The TYPEMAP: Keyword
+
=item Initializing Function Parameters
=item Default Parameter Values
@@ -5403,6 +5326,8 @@ SBRKed/SBRKs:CONTINUOUS>, C<pad: 0>, C<heads: 2192>, C<chain: 0>, C<tail:
=item The CASE: Keyword
+=item The EXPORT_XSUB_SYMBOLS: Keyword
+
=item The & Unary Operator
=item Inserting POD, Comments and C Preprocessor Directives
@@ -5413,8 +5338,6 @@ SBRKed/SBRKs:CONTINUOUS>, C<pad: 0>, C<heads: 2192>, C<chain: 0>, C<tail:
=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,
@@ -5433,6 +5356,36 @@ dMY_CXT_INTERP(my_perl)
=back
+=head2 perlxstypemap - Perl XS C/Perl type mapping
+
+=over 4
+
+=item DESCRIPTION
+
+=over 4
+
+=item Anatomy of a typemap
+
+=item The Role of the typemap File in Your Distribution
+
+=item Sharing typemaps Between CPAN Distributions
+
+=item Writing typemap Entries
+
+=item Full Listing of Core Typemaps
+
+T_SV, T_SVREF, T_SVREF_FIXED, T_AVREF, T_AVREF_REFCOUNT_FIXED, T_HVREF,
+T_HVREF_REFCOUNT_FIXED, T_CVREF, T_CVREF_REFCOUNT_FIXED, T_SYSRET, T_UV,
+T_IV, T_INT, T_ENUM, T_BOOL, T_U_INT, T_SHORT, T_U_SHORT, T_LONG, T_U_LONG,
+T_CHAR, T_U_CHAR, T_FLOAT, T_NV, T_DOUBLE, T_PV, T_PTR, T_PTRREF, T_PTROBJ,
+T_REF_IV_REF, T_REF_IV_PTR, T_PTRDESC, T_REFREF, T_REFOBJ, T_OPAQUEPTR,
+T_OPAQUE, Implicit array, T_PACKED, T_PACKEDARRAY, T_DATAUNIT, T_CALLBACK,
+T_ARRAY, T_STDIO, T_INOUT, T_IN, T_OUT
+
+=back
+
+=back
+
=head2 perlclib - Internal replacements for standard C library functions
=over 4
@@ -5538,6 +5491,8 @@ save_hptr(HV **hptr)>
=item XSUBs and the Argument Stack
+=item Autoloading with XSUBs
+
=item Calling Perl Routines from within C Programs
=item Memory Allocation
@@ -5798,7 +5753,7 @@ RXf_NULL
=item C<substrs>
-=item C<nparens>, C<lasparen>, and C<lastcloseparen>
+=item C<nparens>, C<lastparen>, and C<lastcloseparen>
=item C<intflags>
@@ -5970,11 +5925,17 @@ 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>, pad_findmy X<pad_findmy>, pad_sv X<pad_sv>, 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>
+cv_clone X<cv_clone>, cv_undef X<cv_undef>, find_rundefsv X<find_rundefsv>,
+find_rundefsvoffset X<find_rundefsvoffset>, load_module X<load_module>,
+nothreadhook X<nothreadhook>, pad_add_anon X<pad_add_anon>, pad_add_name_pv
+X<pad_add_name_pv>, pad_add_name_pvn X<pad_add_name_pvn>, pad_add_name_sv
+X<pad_add_name_sv>, pad_alloc X<pad_alloc>, pad_compname_type
+X<pad_compname_type>, pad_findmy_pv X<pad_findmy_pv>, pad_findmy_pvn
+X<pad_findmy_pvn>, pad_findmy_sv X<pad_findmy_sv>, pad_setsv X<pad_setsv>,
+pad_sv X<pad_sv>, pad_tidy X<pad_tidy>, 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
@@ -6024,14 +5985,20 @@ ibcmp X<ibcmp>, ibcmp_locale X<ibcmp_locale>
=item Global Variables
-PL_keyword_plugin X<PL_keyword_plugin>
+PL_check X<PL_check>, PL_keyword_plugin X<PL_keyword_plugin>
=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>
+X<gv_fetchmeth_autoload>, gv_fetchmeth_pv X<gv_fetchmeth_pv>,
+gv_fetchmeth_pvn X<gv_fetchmeth_pvn>, gv_fetchmeth_pvn_autoload
+X<gv_fetchmeth_pvn_autoload>, gv_fetchmeth_pv_autoload
+X<gv_fetchmeth_pv_autoload>, gv_fetchmeth_sv X<gv_fetchmeth_sv>,
+gv_fetchmeth_sv_autoload X<gv_fetchmeth_sv_autoload>, gv_init X<gv_init>,
+gv_init_pv X<gv_init_pv>, gv_init_pvn X<gv_init_pvn>, gv_init_sv
+X<gv_init_sv>, gv_stashpv X<gv_stashpv>, gv_stashpvn X<gv_stashpvn>,
+gv_stashpvs X<gv_stashpvs>, gv_stashsv X<gv_stashsv>
=item Handy Values
@@ -6040,12 +6007,15 @@ Nullsv X<Nullsv>
=item Hash Manipulation Functions
+cop_fetch_label X<cop_fetch_label>, cop_store_label X<cop_store_label>,
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>, HeUTF8 X<HeUTF8>, HeVAL
-X<HeVAL>, HvENAME X<HvENAME>, HvNAME X<HvNAME>, hv_assert X<hv_assert>,
-hv_clear X<hv_clear>, hv_clear_placeholders X<hv_clear_placeholders>,
-hv_copy_hints_hv X<hv_copy_hints_hv>, hv_delete X<hv_delete>, hv_delete_ent
+X<HeVAL>, HvENAME X<HvENAME>, HvENAMELEN X<HvENAMELEN>, HvENAMEUTF8
+X<HvENAMEUTF8>, HvNAME X<HvNAME>, HvNAMELEN X<HvNAMELEN>, HvNAMEUTF8
+X<HvNAMEUTF8>, hv_assert X<hv_assert>, hv_clear X<hv_clear>,
+hv_clear_placeholders X<hv_clear_placeholders>, hv_copy_hints_hv
+X<hv_copy_hints_hv>, 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_fill X<hv_fill>, hv_iterinit X<hv_iterinit>, hv_iterkey X<hv_iterkey>,
@@ -6055,6 +6025,10 @@ 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 Hook manipulation
+
+wrap_op_checker X<wrap_op_checker>
+
=item Lexer interface
lex_bufutf8 X<lex_bufutf8>, lex_discard_to X<lex_discard_to>,
@@ -6110,7 +6084,7 @@ 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>
+X<mro_method_changed_in>, mro_register X<mro_register>
=item Multicall Functions
@@ -6142,10 +6116,17 @@ X<ck_entersub_args_proto>, ck_entersub_args_proto_or_list
X<ck_entersub_args_proto_or_list>, cv_const_sv X<cv_const_sv>,
cv_get_call_checker X<cv_get_call_checker>, cv_set_call_checker
X<cv_set_call_checker>, LINKLIST X<LINKLIST>, newCONSTSUB X<newCONSTSUB>,
-newXS X<newXS>, op_append_elem X<op_append_elem>, op_append_list
-X<op_append_list>, OP_CLASS X<OP_CLASS>, OP_DESC X<OP_DESC>, op_linklist
-X<op_linklist>, op_lvalue X<op_lvalue>, OP_NAME X<OP_NAME>, op_prepend_elem
-X<op_prepend_elem>, op_scope X<op_scope>, rv2cv_op_cv X<rv2cv_op_cv>
+newCONSTSUB_flags X<newCONSTSUB_flags>, newXS X<newXS>, op_append_elem
+X<op_append_elem>, op_append_list X<op_append_list>, OP_CLASS X<OP_CLASS>,
+OP_DESC X<OP_DESC>, op_linklist X<op_linklist>, op_lvalue X<op_lvalue>,
+OP_NAME X<OP_NAME>, op_prepend_elem X<op_prepend_elem>, op_scope
+X<op_scope>, rv2cv_op_cv X<rv2cv_op_cv>
+
+=item Pad Data Structures
+
+CvPADLIST X<CvPADLIST>, pad_add_name_pvs X<pad_add_name_pvs>,
+pad_findmy_pvs X<pad_findmy_pvs>, pad_new X<pad_new>, PL_comppad
+X<PL_comppad>, PL_comppad_name X<PL_comppad_name>, PL_curpad X<PL_curpad>
=item Per-Interpreter Variables
@@ -6189,12 +6170,12 @@ X<SVt_PVMG>
=item SV Manipulation Functions
-croak_xs_usage X<croak_xs_usage>, get_sv X<get_sv>, newRV_inc X<newRV_inc>,
-newSVpvn_utf8 X<newSVpvn_utf8>, 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>,
+boolSV X<boolSV>, croak_xs_usage X<croak_xs_usage>, get_sv X<get_sv>,
+newRV_inc X<newRV_inc>, newSVpvn_utf8 X<newSVpvn_utf8>, 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
@@ -6227,8 +6208,11 @@ 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_catpv_nomg
X<sv_catpv_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>, sv_utf8_upgrade_nomg
+X<sv_derived_from>, sv_derived_from_pv X<sv_derived_from_pv>,
+sv_derived_from_pvn X<sv_derived_from_pvn>, sv_derived_from_sv
+X<sv_derived_from_sv>, sv_does X<sv_does>, sv_does_pv X<sv_does_pv>,
+sv_does_pvn X<sv_does_pvn>, sv_does_sv X<sv_does_sv>, sv_report_used
+X<sv_report_used>, sv_setsv_nomg X<sv_setsv_nomg>, sv_utf8_upgrade_nomg
X<sv_utf8_upgrade_nomg>
=item SV-Body Allocation
@@ -6291,17 +6275,18 @@ sv_vsetpvfn X<sv_vsetpvfn>, sv_vsetpvf_mg X<sv_vsetpvf_mg>
bytes_cmp_utf8 X<bytes_cmp_utf8>, bytes_from_utf8 X<bytes_from_utf8>,
bytes_to_utf8 X<bytes_to_utf8>, foldEQ_utf8 X<foldEQ_utf8>, is_ascii_string
-X<is_ascii_string>, 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<is_ascii_string>, is_utf8_char X<is_utf8_char>, is_utf8_char_buf
+X<is_utf8_char_buf>, 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<utf8_to_uvchr>, utf8_to_uvchr_buf X<utf8_to_uvchr_buf>, utf8_to_uvuni
+X<utf8_to_uvuni>, utf8_to_uvuni_buf X<utf8_to_uvuni_buf>, 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
@@ -6310,7 +6295,8 @@ 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_APIVERSION_BOOTCHECK
-X<XS_APIVERSION_BOOTCHECK>, XS_VERSION X<XS_VERSION>, XS_VERSION_BOOTCHECK
+X<XS_APIVERSION_BOOTCHECK>, XS_EXTERNAL X<XS_EXTERNAL>, XS_INTERNAL
+X<XS_INTERNAL>, XS_VERSION X<XS_VERSION>, XS_VERSION_BOOTCHECK
X<XS_VERSION_BOOTCHECK>
=item Warning and Dieing
@@ -6334,127 +6320,122 @@ PerlIO_setlinebuf X<PerlIO_setlinebuf>, PerlIO_stderr X<PerlIO_stderr>,
PerlIO_stdin X<PerlIO_stdin>, PerlIO_stdout X<PerlIO_stdout>, PerlIO_tell
X<PerlIO_tell>, PerlIO_unread X<PerlIO_unread>, PerlIO_write
X<PerlIO_write>, Slab_Alloc X<Slab_Alloc>, Slab_Free X<Slab_Free>,
-_to_uni_fold_flags X<_to_uni_fold_flags>, _to_utf8_fold_flags
-X<_to_utf8_fold_flags>, amagic_call X<amagic_call>, amagic_deref_call
-X<amagic_deref_call>, any_dup X<any_dup>, apply_attrs_string
-X<apply_attrs_string>, atfork_lock X<atfork_lock>, atfork_unlock
-X<atfork_unlock>, av_arylen_p X<av_arylen_p>, av_iter_p X<av_iter_p>,
-block_gimme X<block_gimme>, call_atexit X<call_atexit>, call_list
-X<call_list>, calloc X<calloc>, cast_i32 X<cast_i32>, cast_iv X<cast_iv>,
-cast_ulong X<cast_ulong>, cast_uv X<cast_uv>, ck_warner X<ck_warner>,
-ck_warner_d X<ck_warner_d>, ckwarn X<ckwarn>, ckwarn_d X<ckwarn_d>,
-clone_params_del X<clone_params_del>, clone_params_new X<clone_params_new>,
-croak_nocontext X<croak_nocontext>, csighandler X<csighandler>, cx_dump
-X<cx_dump>, cx_dup X<cx_dup>, cxinc X<cxinc>, deb X<deb>, deb_nocontext
-X<deb_nocontext>, debop X<debop>, debprofdump X<debprofdump>, debstack
-X<debstack>, debstackptrs X<debstackptrs>, delimcpy X<delimcpy>,
-despatch_signals X<despatch_signals>, die_nocontext X<die_nocontext>,
-dirp_dup X<dirp_dup>, do_aspawn X<do_aspawn>, do_binmode X<do_binmode>,
-do_close X<do_close>, do_gv_dump X<do_gv_dump>, do_gvgv_dump
-X<do_gvgv_dump>, do_hv_dump X<do_hv_dump>, do_join X<do_join>,
-do_magic_dump X<do_magic_dump>, do_op_dump X<do_op_dump>, do_open
-X<do_open>, do_open9 X<do_open9>, do_openn X<do_openn>, do_pmop_dump
-X<do_pmop_dump>, do_spawn X<do_spawn>, do_spawn_nowait X<do_spawn_nowait>,
-do_sprintf X<do_sprintf>, do_sv_dump X<do_sv_dump>, doing_taint
-X<doing_taint>, doref X<doref>, dounwind X<dounwind>, dowantarray
-X<dowantarray>, dump_all X<dump_all>, dump_eval X<dump_eval>, dump_fds
-X<dump_fds>, dump_form X<dump_form>, dump_indent X<dump_indent>,
-dump_mstats X<dump_mstats>, dump_packsubs X<dump_packsubs>, dump_sub
-X<dump_sub>, dump_vindent X<dump_vindent>, fetch_cop_label
-X<fetch_cop_label>, filter_add X<filter_add>, filter_del X<filter_del>,
-filter_read X<filter_read>, find_rundefsv X<find_rundefsv>,
-find_rundefsvoffset X<find_rundefsvoffset>, foldEQ_latin1 X<foldEQ_latin1>,
-foldEQ_utf8_flags X<foldEQ_utf8_flags>, form_nocontext X<form_nocontext>,
-fp_dup X<fp_dup>, fprintf_nocontext X<fprintf_nocontext>,
-free_global_struct X<free_global_struct>, free_tmps X<free_tmps>,
-get_context X<get_context>, get_mstats X<get_mstats>, get_op_descs
-X<get_op_descs>, get_op_names X<get_op_names>, get_ppaddr X<get_ppaddr>,
-get_vtbl X<get_vtbl>, gp_dup X<gp_dup>, gp_free X<gp_free>, gp_ref
-X<gp_ref>, gv_AVadd X<gv_AVadd>, gv_HVadd X<gv_HVadd>, gv_IOadd
-X<gv_IOadd>, gv_SVadd X<gv_SVadd>, gv_add_by_type X<gv_add_by_type>,
-gv_autoload4 X<gv_autoload4>, gv_check X<gv_check>, gv_dump X<gv_dump>,
+_is_utf8_quotemeta X<_is_utf8_quotemeta>, amagic_call X<amagic_call>,
+amagic_deref_call X<amagic_deref_call>, any_dup X<any_dup>, atfork_lock
+X<atfork_lock>, atfork_unlock X<atfork_unlock>, av_arylen_p X<av_arylen_p>,
+av_iter_p X<av_iter_p>, block_gimme X<block_gimme>, call_atexit
+X<call_atexit>, call_list X<call_list>, calloc X<calloc>, cast_i32
+X<cast_i32>, cast_iv X<cast_iv>, cast_ulong X<cast_ulong>, cast_uv
+X<cast_uv>, ck_warner X<ck_warner>, ck_warner_d X<ck_warner_d>, ckwarn
+X<ckwarn>, ckwarn_d X<ckwarn_d>, clone_params_del X<clone_params_del>,
+clone_params_new X<clone_params_new>, croak_nocontext X<croak_nocontext>,
+csighandler X<csighandler>, cx_dump X<cx_dump>, cx_dup X<cx_dup>, cxinc
+X<cxinc>, deb X<deb>, deb_nocontext X<deb_nocontext>, debop X<debop>,
+debprofdump X<debprofdump>, debstack X<debstack>, debstackptrs
+X<debstackptrs>, delimcpy X<delimcpy>, despatch_signals
+X<despatch_signals>, die_nocontext X<die_nocontext>, dirp_dup X<dirp_dup>,
+do_aspawn X<do_aspawn>, do_binmode X<do_binmode>, do_close X<do_close>,
+do_gv_dump X<do_gv_dump>, do_gvgv_dump X<do_gvgv_dump>, do_hv_dump
+X<do_hv_dump>, do_join X<do_join>, do_magic_dump X<do_magic_dump>,
+do_op_dump X<do_op_dump>, do_open X<do_open>, do_open9 X<do_open9>,
+do_openn X<do_openn>, do_pmop_dump X<do_pmop_dump>, do_spawn X<do_spawn>,
+do_spawn_nowait X<do_spawn_nowait>, do_sprintf X<do_sprintf>, do_sv_dump
+X<do_sv_dump>, doing_taint X<doing_taint>, doref X<doref>, dounwind
+X<dounwind>, dowantarray X<dowantarray>, dump_all X<dump_all>, dump_eval
+X<dump_eval>, dump_fds X<dump_fds>, dump_form X<dump_form>, dump_indent
+X<dump_indent>, dump_mstats X<dump_mstats>, dump_packsubs X<dump_packsubs>,
+dump_sub X<dump_sub>, dump_vindent X<dump_vindent>, filter_add
+X<filter_add>, filter_del X<filter_del>, filter_read X<filter_read>,
+foldEQ_latin1 X<foldEQ_latin1>, form_nocontext X<form_nocontext>, fp_dup
+X<fp_dup>, fprintf_nocontext X<fprintf_nocontext>, free_global_struct
+X<free_global_struct>, free_tmps X<free_tmps>, get_context X<get_context>,
+get_mstats X<get_mstats>, get_op_descs X<get_op_descs>, get_op_names
+X<get_op_names>, get_ppaddr X<get_ppaddr>, get_vtbl X<get_vtbl>, gp_dup
+X<gp_dup>, gp_free X<gp_free>, gp_ref X<gp_ref>, gv_AVadd X<gv_AVadd>,
+gv_HVadd X<gv_HVadd>, gv_IOadd X<gv_IOadd>, gv_SVadd X<gv_SVadd>,
+gv_add_by_type X<gv_add_by_type>, gv_autoload4 X<gv_autoload4>,
+gv_autoload_pv X<gv_autoload_pv>, gv_autoload_pvn X<gv_autoload_pvn>,
+gv_autoload_sv X<gv_autoload_sv>, gv_check X<gv_check>, gv_dump X<gv_dump>,
gv_efullname X<gv_efullname>, gv_efullname3 X<gv_efullname3>, gv_efullname4
X<gv_efullname4>, gv_fetchfile X<gv_fetchfile>, gv_fetchfile_flags
-X<gv_fetchfile_flags>, gv_fetchmethod_flags X<gv_fetchmethod_flags>,
-gv_fetchpv X<gv_fetchpv>, gv_fetchpvn_flags X<gv_fetchpvn_flags>,
-gv_fetchsv X<gv_fetchsv>, gv_fullname X<gv_fullname>, gv_fullname3
-X<gv_fullname3>, gv_fullname4 X<gv_fullname4>, gv_handler X<gv_handler>,
-gv_init X<gv_init>, gv_name_set X<gv_name_set>, he_dup X<he_dup>, hek_dup
+X<gv_fetchfile_flags>, gv_fetchpv X<gv_fetchpv>, gv_fetchpvn_flags
+X<gv_fetchpvn_flags>, gv_fetchsv X<gv_fetchsv>, gv_fullname X<gv_fullname>,
+gv_fullname3 X<gv_fullname3>, gv_fullname4 X<gv_fullname4>, gv_handler
+X<gv_handler>, gv_name_set X<gv_name_set>, he_dup X<he_dup>, hek_dup
X<hek_dup>, hv_common X<hv_common>, hv_common_key_len X<hv_common_key_len>,
hv_delayfree_ent X<hv_delayfree_ent>, hv_eiter_p X<hv_eiter_p>,
hv_eiter_set X<hv_eiter_set>, hv_free_ent X<hv_free_ent>, hv_ksplit
X<hv_ksplit>, hv_name_set X<hv_name_set>, hv_placeholders_get
X<hv_placeholders_get>, hv_placeholders_p X<hv_placeholders_p>,
hv_placeholders_set X<hv_placeholders_set>, hv_riter_p X<hv_riter_p>,
-hv_riter_set X<hv_riter_set>, hv_store_flags X<hv_store_flags>,
-init_global_struct X<init_global_struct>, init_i18nl10n X<init_i18nl10n>,
-init_i18nl14n X<init_i18nl14n>, init_stacks X<init_stacks>, init_tm
-X<init_tm>, instr X<instr>, is_lvalue_sub X<is_lvalue_sub>, is_uni_alnum
-X<is_uni_alnum>, is_uni_alnum_lc X<is_uni_alnum_lc>, is_uni_alpha
-X<is_uni_alpha>, is_uni_alpha_lc X<is_uni_alpha_lc>, is_uni_ascii
-X<is_uni_ascii>, is_uni_ascii_lc X<is_uni_ascii_lc>, is_uni_cntrl
-X<is_uni_cntrl>, is_uni_cntrl_lc X<is_uni_cntrl_lc>, is_uni_digit
-X<is_uni_digit>, is_uni_digit_lc X<is_uni_digit_lc>, is_uni_graph
-X<is_uni_graph>, is_uni_graph_lc X<is_uni_graph_lc>, is_uni_idfirst
-X<is_uni_idfirst>, is_uni_idfirst_lc X<is_uni_idfirst_lc>, is_uni_lower
-X<is_uni_lower>, is_uni_lower_lc X<is_uni_lower_lc>, is_uni_print
-X<is_uni_print>, is_uni_print_lc X<is_uni_print_lc>, is_uni_punct
-X<is_uni_punct>, is_uni_punct_lc X<is_uni_punct_lc>, is_uni_space
-X<is_uni_space>, is_uni_space_lc X<is_uni_space_lc>, is_uni_upper
-X<is_uni_upper>, is_uni_upper_lc X<is_uni_upper_lc>, is_uni_xdigit
-X<is_uni_xdigit>, is_uni_xdigit_lc X<is_uni_xdigit_lc>, is_utf8_alnum
-X<is_utf8_alnum>, is_utf8_alpha X<is_utf8_alpha>, is_utf8_ascii
-X<is_utf8_ascii>, is_utf8_cntrl X<is_utf8_cntrl>, is_utf8_digit
-X<is_utf8_digit>, is_utf8_graph X<is_utf8_graph>, is_utf8_idcont
-X<is_utf8_idcont>, is_utf8_idfirst X<is_utf8_idfirst>, is_utf8_lower
-X<is_utf8_lower>, is_utf8_mark X<is_utf8_mark>, is_utf8_perl_space
-X<is_utf8_perl_space>, is_utf8_perl_word X<is_utf8_perl_word>,
-is_utf8_posix_digit X<is_utf8_posix_digit>, is_utf8_print X<is_utf8_print>,
-is_utf8_punct X<is_utf8_punct>, is_utf8_space X<is_utf8_space>,
-is_utf8_upper X<is_utf8_upper>, is_utf8_xdigit X<is_utf8_xdigit>,
-is_utf8_xidcont X<is_utf8_xidcont>, is_utf8_xidfirst X<is_utf8_xidfirst>,
-leave_scope X<leave_scope>, load_module_nocontext X<load_module_nocontext>,
-magic_dump X<magic_dump>, malloc X<malloc>, markstack_grow
-X<markstack_grow>, mess_nocontext X<mess_nocontext>, mfree X<mfree>, mg_dup
-X<mg_dup>, mg_size X<mg_size>, mini_mktime X<mini_mktime>, moreswitches
-X<moreswitches>, mro_get_from_name X<mro_get_from_name>,
-mro_get_private_data X<mro_get_private_data>, mro_register X<mro_register>,
-mro_set_mro X<mro_set_mro>, mro_set_private_data X<mro_set_private_data>,
-my_atof X<my_atof>, my_atof2 X<my_atof2>, my_bcopy X<my_bcopy>, my_bzero
-X<my_bzero>, my_chsize X<my_chsize>, my_cxt_index X<my_cxt_index>,
-my_cxt_init X<my_cxt_init>, my_dirfd X<my_dirfd>, my_exit X<my_exit>,
-my_failure_exit X<my_failure_exit>, my_fflush_all X<my_fflush_all>, my_fork
-X<my_fork>, my_htonl X<my_htonl>, my_lstat X<my_lstat>, my_memcmp
-X<my_memcmp>, my_memset X<my_memset>, my_ntohl X<my_ntohl>, my_pclose
-X<my_pclose>, my_popen X<my_popen>, my_popen_list X<my_popen_list>,
-my_setenv X<my_setenv>, my_socketpair X<my_socketpair>, my_stat X<my_stat>,
-my_strftime X<my_strftime>, my_strlcat X<my_strlcat>, my_strlcpy
-X<my_strlcpy>, my_swap X<my_swap>, newANONATTRSUB X<newANONATTRSUB>,
-newANONHASH X<newANONHASH>, newANONLIST X<newANONLIST>, newANONSUB
-X<newANONSUB>, newATTRSUB X<newATTRSUB>, newAVREF X<newAVREF>, newCVREF
-X<newCVREF>, newFORM X<newFORM>, newGVREF X<newGVREF>, newGVgen
-X<newGVgen>, newHVREF X<newHVREF>, newHVhv X<newHVhv>, newIO X<newIO>,
-newMYSUB X<newMYSUB>, newPROG X<newPROG>, newRV X<newRV>, newSUB X<newSUB>,
-newSVREF X<newSVREF>, newSVpvf_nocontext X<newSVpvf_nocontext>, newXS_flags
-X<newXS_flags>, new_collate X<new_collate>, new_ctype X<new_ctype>,
-new_numeric X<new_numeric>, new_stackinfo X<new_stackinfo>, ninstr
-X<ninstr>, op_dump X<op_dump>, op_free X<op_free>, op_null X<op_null>,
-op_refcnt_lock X<op_refcnt_lock>, op_refcnt_unlock X<op_refcnt_unlock>,
-parser_dup X<parser_dup>, perl_alloc_using X<perl_alloc_using>,
-perl_clone_using X<perl_clone_using>, pmop_dump X<pmop_dump>, pop_scope
-X<pop_scope>, pregcomp X<pregcomp>, pregexec X<pregexec>, pregfree
-X<pregfree>, pregfree2 X<pregfree2>, printf_nocontext X<printf_nocontext>,
-ptr_table_clear X<ptr_table_clear>, ptr_table_fetch X<ptr_table_fetch>,
-ptr_table_free X<ptr_table_free>, ptr_table_new X<ptr_table_new>,
-ptr_table_split X<ptr_table_split>, ptr_table_store X<ptr_table_store>,
-push_scope X<push_scope>, re_compile X<re_compile>, re_dup_guts
-X<re_dup_guts>, re_intuit_start X<re_intuit_start>, re_intuit_string
-X<re_intuit_string>, realloc X<realloc>, reentrant_free X<reentrant_free>,
-reentrant_init X<reentrant_init>, reentrant_retry X<reentrant_retry>,
-reentrant_size X<reentrant_size>, ref X<ref>, reg_named_buff_all
-X<reg_named_buff_all>, reg_named_buff_exists X<reg_named_buff_exists>,
-reg_named_buff_fetch X<reg_named_buff_fetch>, reg_named_buff_firstkey
-X<reg_named_buff_firstkey>, reg_named_buff_nextkey
+hv_riter_set X<hv_riter_set>, init_global_struct X<init_global_struct>,
+init_i18nl10n X<init_i18nl10n>, init_i18nl14n X<init_i18nl14n>, init_stacks
+X<init_stacks>, init_tm X<init_tm>, instr X<instr>, is_lvalue_sub
+X<is_lvalue_sub>, is_uni_alnum X<is_uni_alnum>, is_uni_alnum_lc
+X<is_uni_alnum_lc>, is_uni_alpha X<is_uni_alpha>, is_uni_alpha_lc
+X<is_uni_alpha_lc>, is_uni_ascii X<is_uni_ascii>, is_uni_ascii_lc
+X<is_uni_ascii_lc>, is_uni_cntrl X<is_uni_cntrl>, is_uni_cntrl_lc
+X<is_uni_cntrl_lc>, is_uni_digit X<is_uni_digit>, is_uni_digit_lc
+X<is_uni_digit_lc>, is_uni_graph X<is_uni_graph>, is_uni_graph_lc
+X<is_uni_graph_lc>, is_uni_idfirst X<is_uni_idfirst>, is_uni_idfirst_lc
+X<is_uni_idfirst_lc>, is_uni_lower X<is_uni_lower>, is_uni_lower_lc
+X<is_uni_lower_lc>, is_uni_print X<is_uni_print>, is_uni_print_lc
+X<is_uni_print_lc>, is_uni_punct X<is_uni_punct>, is_uni_punct_lc
+X<is_uni_punct_lc>, is_uni_space X<is_uni_space>, is_uni_space_lc
+X<is_uni_space_lc>, is_uni_upper X<is_uni_upper>, is_uni_upper_lc
+X<is_uni_upper_lc>, is_uni_xdigit X<is_uni_xdigit>, is_uni_xdigit_lc
+X<is_uni_xdigit_lc>, is_utf8_alnum X<is_utf8_alnum>, is_utf8_alpha
+X<is_utf8_alpha>, is_utf8_ascii X<is_utf8_ascii>, is_utf8_cntrl
+X<is_utf8_cntrl>, is_utf8_digit X<is_utf8_digit>, is_utf8_graph
+X<is_utf8_graph>, is_utf8_idcont X<is_utf8_idcont>, is_utf8_idfirst
+X<is_utf8_idfirst>, is_utf8_lower X<is_utf8_lower>, is_utf8_mark
+X<is_utf8_mark>, is_utf8_perl_space X<is_utf8_perl_space>,
+is_utf8_perl_word X<is_utf8_perl_word>, is_utf8_posix_digit
+X<is_utf8_posix_digit>, is_utf8_print X<is_utf8_print>, is_utf8_punct
+X<is_utf8_punct>, is_utf8_space X<is_utf8_space>, is_utf8_upper
+X<is_utf8_upper>, is_utf8_xdigit X<is_utf8_xdigit>, is_utf8_xidcont
+X<is_utf8_xidcont>, is_utf8_xidfirst X<is_utf8_xidfirst>, leave_scope
+X<leave_scope>, load_module_nocontext X<load_module_nocontext>, magic_dump
+X<magic_dump>, malloc X<malloc>, markstack_grow X<markstack_grow>,
+mess_nocontext X<mess_nocontext>, mfree X<mfree>, mg_dup X<mg_dup>, mg_size
+X<mg_size>, mini_mktime X<mini_mktime>, moreswitches X<moreswitches>,
+mro_get_from_name X<mro_get_from_name>, mro_get_private_data
+X<mro_get_private_data>, mro_set_mro X<mro_set_mro>, mro_set_private_data
+X<mro_set_private_data>, my_atof X<my_atof>, my_atof2 X<my_atof2>, my_bcopy
+X<my_bcopy>, my_bzero X<my_bzero>, my_chsize X<my_chsize>, my_cxt_index
+X<my_cxt_index>, my_cxt_init X<my_cxt_init>, my_dirfd X<my_dirfd>, my_exit
+X<my_exit>, my_failure_exit X<my_failure_exit>, my_fflush_all
+X<my_fflush_all>, my_fork X<my_fork>, my_htonl X<my_htonl>, my_lstat
+X<my_lstat>, my_memcmp X<my_memcmp>, my_memset X<my_memset>, my_ntohl
+X<my_ntohl>, my_pclose X<my_pclose>, my_popen X<my_popen>, my_popen_list
+X<my_popen_list>, my_setenv X<my_setenv>, my_socketpair X<my_socketpair>,
+my_stat X<my_stat>, my_strftime X<my_strftime>, my_strlcat X<my_strlcat>,
+my_strlcpy X<my_strlcpy>, my_swap X<my_swap>, newANONATTRSUB
+X<newANONATTRSUB>, newANONHASH X<newANONHASH>, newANONLIST X<newANONLIST>,
+newANONSUB X<newANONSUB>, newATTRSUB X<newATTRSUB>, newAVREF X<newAVREF>,
+newCVREF X<newCVREF>, newFORM X<newFORM>, newGVREF X<newGVREF>, newGVgen
+X<newGVgen>, newGVgen_flags X<newGVgen_flags>, newHVREF X<newHVREF>,
+newHVhv X<newHVhv>, newIO X<newIO>, newMYSUB X<newMYSUB>, newPROG
+X<newPROG>, newRV X<newRV>, newSUB X<newSUB>, newSVREF X<newSVREF>,
+newSVpvf_nocontext X<newSVpvf_nocontext>, new_collate X<new_collate>,
+new_ctype X<new_ctype>, new_numeric X<new_numeric>, new_stackinfo
+X<new_stackinfo>, ninstr X<ninstr>, op_dump X<op_dump>, op_free X<op_free>,
+op_null X<op_null>, op_refcnt_lock X<op_refcnt_lock>, op_refcnt_unlock
+X<op_refcnt_unlock>, parser_dup X<parser_dup>, perl_alloc_using
+X<perl_alloc_using>, perl_clone_using X<perl_clone_using>, pmop_dump
+X<pmop_dump>, pop_scope X<pop_scope>, pregcomp X<pregcomp>, pregexec
+X<pregexec>, pregfree X<pregfree>, pregfree2 X<pregfree2>, printf_nocontext
+X<printf_nocontext>, ptr_table_clear X<ptr_table_clear>, ptr_table_fetch
+X<ptr_table_fetch>, ptr_table_free X<ptr_table_free>, ptr_table_new
+X<ptr_table_new>, ptr_table_split X<ptr_table_split>, ptr_table_store
+X<ptr_table_store>, push_scope X<push_scope>, re_compile X<re_compile>,
+re_dup_guts X<re_dup_guts>, re_intuit_start X<re_intuit_start>,
+re_intuit_string X<re_intuit_string>, realloc X<realloc>, reentrant_free
+X<reentrant_free>, reentrant_init X<reentrant_init>, reentrant_retry
+X<reentrant_retry>, reentrant_size X<reentrant_size>, ref X<ref>,
+reg_named_buff_all X<reg_named_buff_all>, reg_named_buff_exists
+X<reg_named_buff_exists>, reg_named_buff_fetch X<reg_named_buff_fetch>,
+reg_named_buff_firstkey X<reg_named_buff_firstkey>, reg_named_buff_nextkey
X<reg_named_buff_nextkey>, reg_named_buff_scalar X<reg_named_buff_scalar>,
regclass_swash X<regclass_swash>, regdump X<regdump>, regdupe_internal
X<regdupe_internal>, regexec_flags X<regexec_flags>, regfree_internal
@@ -6510,7 +6491,9 @@ X<utf16_to_utf8>, utf16_to_utf8_reversed X<utf16_to_utf8_reversed>,
uvchr_to_utf8_flags X<uvchr_to_utf8_flags>, uvuni_to_utf8 X<uvuni_to_utf8>,
vdeb X<vdeb>, vform X<vform>, vload_module X<vload_module>, vnewSVpvf
X<vnewSVpvf>, vwarner X<vwarner>, warn_nocontext X<warn_nocontext>, warner
-X<warner>, warner_nocontext X<warner_nocontext>, whichsig X<whichsig>
+X<warner>, warner_nocontext X<warner_nocontext>, whichsig X<whichsig>,
+whichsig_pv X<whichsig_pv>, whichsig_pvn X<whichsig_pvn>, whichsig_sv
+X<whichsig_sv>
=item AUTHORS
@@ -6537,28 +6520,16 @@ CvWEAKOUTSIDE X<CvWEAKOUTSIDE>
=item Embedding Functions
-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_fixup_inner_anons X<pad_fixup_inner_anons>, pad_free
-X<pad_free>, pad_leavemy X<pad_leavemy>, 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>
+cv_dump X<cv_dump>, do_dump_pad X<do_dump_pad>, intro_my X<intro_my>,
+padlist_dup X<padlist_dup>, pad_alloc_name X<pad_alloc_name>,
+pad_block_start X<pad_block_start>, pad_check_dup X<pad_check_dup>,
+pad_findlex X<pad_findlex>, pad_fixup_inner_anons X<pad_fixup_inner_anons>,
+pad_free X<pad_free>, pad_leavemy X<pad_leavemy>, pad_push X<pad_push>,
+pad_reset X<pad_reset>, pad_swipe X<pad_swipe>
-=item Functions in file pad.h
+=item Functions in file op.c
-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>
+core_prototype X<core_prototype>
=item Functions in file pp_ctl.c
@@ -6566,7 +6537,7 @@ docatch X<docatch>
=item GV Functions
-gv_try_downgrade X<gv_try_downgrade>, is_gv_magical_sv X<is_gv_magical_sv>
+gv_try_downgrade X<gv_try_downgrade>
=item Hash Manipulation Functions
@@ -6596,9 +6567,23 @@ mg_localize X<mg_localize>
mro_get_linear_isa_dfs X<mro_get_linear_isa_dfs>, mro_isa_changed_in
X<mro_isa_changed_in>, mro_package_moved X<mro_package_moved>
+=item Optree Manipulation Functions
+
+finalize_optree X<finalize_optree>
+
=item Pad Data Structures
-CvPADLIST X<CvPADLIST>, pad_new X<pad_new>
+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_peg X<pad_peg>,
+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 Per-Interpreter Variables
@@ -6617,7 +6602,7 @@ X<sv_clean_objs>, sv_free_arenas X<sv_free_arenas>
=item SV-Body Allocation
-sv_2num X<sv_2num>
+sv_2num X<sv_2num>, sv_ref X<sv_ref>
=item Unicode Support
@@ -6625,269 +6610,151 @@ find_uninit_var X<find_uninit_var>, report_uninit X<report_uninit>
=item Undocumented functions
-F0convert X<F0convert>, Slab_to_rw X<Slab_to_rw>, _append_range_to_invlist
-X<_append_range_to_invlist>, _new_invlist X<_new_invlist>,
-_swash_inversion_hash X<_swash_inversion_hash>, _swash_to_invlist
-X<_swash_to_invlist>, add_alternate X<add_alternate>, add_cp_to_invlist
-X<add_cp_to_invlist>, add_data X<add_data>, add_range_to_invlist
-X<add_range_to_invlist>, add_utf16_textfilter X<add_utf16_textfilter>,
-addmad X<addmad>, allocmy X<allocmy>, amagic_cmp X<amagic_cmp>,
-amagic_cmp_locale X<amagic_cmp_locale>, amagic_i_ncmp X<amagic_i_ncmp>,
-amagic_ncmp X<amagic_ncmp>, anonymise_cv_maybe X<anonymise_cv_maybe>, ao
-X<ao>, append_madprops X<append_madprops>, apply X<apply>, apply_attrs
-X<apply_attrs>, apply_attrs_my X<apply_attrs_my>,
-assert_uft8_cache_coherent X<assert_uft8_cache_coherent>, av_reify
-X<av_reify>, bad_type X<bad_type>, bind_match X<bind_match>, block_end
-X<block_end>, block_start X<block_start>, boot_core_PerlIO
-X<boot_core_PerlIO>, boot_core_UNIVERSAL X<boot_core_UNIVERSAL>,
-boot_core_mro X<boot_core_mro>, bytes_to_uni X<bytes_to_uni>, cando
-X<cando>, check_type_and_open X<check_type_and_open>, check_uni
-X<check_uni>, check_utf8_print X<check_utf8_print>, checkcomma
-X<checkcomma>, checkposixcc X<checkposixcc>, ckwarn_common
-X<ckwarn_common>, cl_and X<cl_and>, cl_anything X<cl_anything>, cl_init
-X<cl_init>, cl_is_anything X<cl_is_anything>, cl_or X<cl_or>,
-clear_placeholders X<clear_placeholders>, closest_cop X<closest_cop>,
-convert X<convert>, cop_free X<cop_free>, cr_textfilter X<cr_textfilter>,
-create_eval_scope X<create_eval_scope>, curmad X<curmad>, curse X<curse>,
-cv_ckproto_len X<cv_ckproto_len>, cvgv_set X<cvgv_set>, cvstash_set
-X<cvstash_set>, deb_curcv X<deb_curcv>, deb_stack_all X<deb_stack_all>,
-deb_stack_n X<deb_stack_n>, debprof X<debprof>, debug_start_match
-X<debug_start_match>, del_sv X<del_sv>, delete_eval_scope
-X<delete_eval_scope>, deprecate_commaless_var_list
-X<deprecate_commaless_var_list>, destroy_matcher X<destroy_matcher>,
-die_unwind X<die_unwind>, div128 X<div128>, do_aexec X<do_aexec>, do_aexec5
-X<do_aexec5>, do_chomp X<do_chomp>, do_delete_local X<do_delete_local>,
+_add_range_to_invlist X<_add_range_to_invlist>, _core_swash_init
+X<_core_swash_init>, _invlist_array_init X<_invlist_array_init>,
+_invlist_contents X<_invlist_contents>, _invlist_intersection
+X<_invlist_intersection>, _invlist_intersection_maybe_complement_2nd
+X<_invlist_intersection_maybe_complement_2nd>, _invlist_invert
+X<_invlist_invert>, _invlist_invert_prop X<_invlist_invert_prop>,
+_invlist_populate_swatch X<_invlist_populate_swatch>, _invlist_subtract
+X<_invlist_subtract>, _invlist_union X<_invlist_union>,
+_invlist_union_maybe_complement_2nd X<_invlist_union_maybe_complement_2nd>,
+_is_utf8__perl_idstart X<_is_utf8__perl_idstart>, _new_invlist
+X<_new_invlist>, _swash_inversion_hash X<_swash_inversion_hash>,
+_swash_to_invlist X<_swash_to_invlist>, _to_fold_latin1 X<_to_fold_latin1>,
+_to_upper_title_latin1 X<_to_upper_title_latin1>, aassign_common_vars
+X<aassign_common_vars>, add_cp_to_invlist X<add_cp_to_invlist>, addmad
+X<addmad>, allocmy X<allocmy>, amagic_is_enabled X<amagic_is_enabled>,
+append_madprops X<append_madprops>, apply X<apply>, av_reify X<av_reify>,
+bind_match X<bind_match>, block_end X<block_end>, block_start
+X<block_start>, boot_core_PerlIO X<boot_core_PerlIO>, boot_core_UNIVERSAL
+X<boot_core_UNIVERSAL>, boot_core_mro X<boot_core_mro>, cando X<cando>,
+check_utf8_print X<check_utf8_print>, ck_entersub_args_core
+X<ck_entersub_args_core>, convert X<convert>, coresub_op X<coresub_op>,
+create_eval_scope X<create_eval_scope>, cv_ckproto_len_flags
+X<cv_ckproto_len_flags>, cvgv_set X<cvgv_set>, cvstash_set X<cvstash_set>,
+deb_stack_all X<deb_stack_all>, delete_eval_scope X<delete_eval_scope>,
+die_unwind X<die_unwind>, do_aexec X<do_aexec>, do_aexec5 X<do_aexec5>,
do_eof X<do_eof>, do_exec X<do_exec>, do_exec3 X<do_exec3>, do_execfree
X<do_execfree>, do_ipcctl X<do_ipcctl>, do_ipcget X<do_ipcget>, do_msgrcv
-X<do_msgrcv>, do_msgsnd X<do_msgsnd>, do_oddball X<do_oddball>,
-do_op_xmldump X<do_op_xmldump>, do_pmop_xmldump X<do_pmop_xmldump>,
-do_print X<do_print>, do_readline X<do_readline>, do_seek X<do_seek>,
-do_semop X<do_semop>, do_shmio X<do_shmio>, do_smartmatch X<do_smartmatch>,
-do_sysseek X<do_sysseek>, do_tell X<do_tell>, do_trans X<do_trans>,
-do_trans_complex X<do_trans_complex>, do_trans_complex_utf8
-X<do_trans_complex_utf8>, do_trans_count X<do_trans_count>,
-do_trans_count_utf8 X<do_trans_count_utf8>, do_trans_simple
-X<do_trans_simple>, do_trans_simple_utf8 X<do_trans_simple_utf8>, do_vecget
-X<do_vecget>, do_vecset X<do_vecset>, do_vop X<do_vop>, doeval X<doeval>,
-dofile X<dofile>, dofindlabel X<dofindlabel>, doform X<doform>, dooneliner
-X<dooneliner>, doopen_pm X<doopen_pm>, doparseform X<doparseform>,
-dopoptoeval X<dopoptoeval>, dopoptogiven X<dopoptogiven>, dopoptolabel
-X<dopoptolabel>, dopoptoloop X<dopoptoloop>, dopoptosub_at
-X<dopoptosub_at>, dopoptowhen X<dopoptowhen>, dump_all_perl
-X<dump_all_perl>, dump_exec_pos X<dump_exec_pos>, dump_packsubs_perl
-X<dump_packsubs_perl>, dump_sub_perl X<dump_sub_perl>, dump_sv_child
-X<dump_sv_child>, dump_trie X<dump_trie>, dump_trie_interim_list
-X<dump_trie_interim_list>, dump_trie_interim_table
-X<dump_trie_interim_table>, dumpuntil X<dumpuntil>, dup_attrlist
-X<dup_attrlist>, emulate_cop_io X<emulate_cop_io>, exec_failed
-X<exec_failed>, expect_number X<expect_number>, feature_is_enabled
-X<feature_is_enabled>, filter_gets X<filter_gets>, find_and_forget_pmops
-X<find_and_forget_pmops>, find_array_subscript X<find_array_subscript>,
-find_beginning X<find_beginning>, find_byclass X<find_byclass>,
-find_hash_subscript X<find_hash_subscript>, find_in_my_stash
-X<find_in_my_stash>, find_script X<find_script>, first_symbol
-X<first_symbol>, fold_constants X<fold_constants>, forbid_setid
-X<forbid_setid>, force_ident X<force_ident>, force_list X<force_list>,
-force_next X<force_next>, force_strict_version X<force_strict_version>,
-force_version X<force_version>, force_word X<force_word>, forget_pmop
-X<forget_pmop>, free_tied_hv_pool X<free_tied_hv_pool>, gen_constant_list
-X<gen_constant_list>, get_aux_mg X<get_aux_mg>, get_db_sub X<get_db_sub>,
-get_debug_opts X<get_debug_opts>, get_hash_seed X<get_hash_seed>,
-get_no_modify X<get_no_modify>, get_num X<get_num>, get_opargs
+X<do_msgrcv>, do_msgsnd X<do_msgsnd>, do_ncmp X<do_ncmp>, do_op_xmldump
+X<do_op_xmldump>, do_pmop_xmldump X<do_pmop_xmldump>, do_print X<do_print>,
+do_readline X<do_readline>, do_seek X<do_seek>, do_semop X<do_semop>,
+do_shmio X<do_shmio>, do_sysseek X<do_sysseek>, do_tell X<do_tell>,
+do_trans X<do_trans>, do_vecget X<do_vecget>, do_vecset X<do_vecset>,
+do_vop X<do_vop>, dofile X<dofile>, dump_all_perl X<dump_all_perl>,
+dump_packsubs_perl X<dump_packsubs_perl>, dump_sub_perl X<dump_sub_perl>,
+dump_sv_child X<dump_sv_child>, emulate_cop_io X<emulate_cop_io>,
+feature_is_enabled X<feature_is_enabled>, find_rundefsv2 X<find_rundefsv2>,
+find_script X<find_script>, free_tied_hv_pool X<free_tied_hv_pool>,
+get_db_sub X<get_db_sub>, get_debug_opts X<get_debug_opts>, get_hash_seed
+X<get_hash_seed>, get_invlist_iter_addr X<get_invlist_iter_addr>,
+get_invlist_len_addr X<get_invlist_len_addr>, get_invlist_version_id_addr
+X<get_invlist_version_id_addr>, get_invlist_zero_addr
+X<get_invlist_zero_addr>, get_no_modify X<get_no_modify>, get_opargs
X<get_opargs>, get_re_arg X<get_re_arg>, getenv_len X<getenv_len>,
-glob_2number X<glob_2number>, glob_assign_glob X<glob_assign_glob>,
-glob_assign_ref X<glob_assign_ref>, grok_bslash_c X<grok_bslash_c>,
-grok_bslash_o X<grok_bslash_o>, group_end X<group_end>, gv_ename
-X<gv_ename>, gv_get_super_pkg X<gv_get_super_pkg>, gv_init_sv
-X<gv_init_sv>, gv_magicalize_isa X<gv_magicalize_isa>,
-gv_magicalize_overload X<gv_magicalize_overload>, hfreeentries
-X<hfreeentries>, hsplit X<hsplit>, hv_auxinit X<hv_auxinit>,
-hv_backreferences_p X<hv_backreferences_p>, hv_delete_common
-X<hv_delete_common>, hv_kill_backrefs X<hv_kill_backrefs>, hv_magic_check
-X<hv_magic_check>, hv_notallowed X<hv_notallowed>, hv_undef_flags
-X<hv_undef_flags>, incline X<incline>, incpush X<incpush>,
-incpush_if_exists X<incpush_if_exists>, incpush_use_sep X<incpush_use_sep>,
-ingroup X<ingroup>, init_argv_symbols X<init_argv_symbols>, init_dbargs
-X<init_dbargs>, init_debugger X<init_debugger>, init_ids X<init_ids>,
-init_interp X<init_interp>, init_main_stash X<init_main_stash>,
-init_perllib X<init_perllib>, init_postdump_symbols
-X<init_postdump_symbols>, init_predump_symbols X<init_predump_symbols>,
-intuit_method X<intuit_method>, intuit_more X<intuit_more>, invert
-X<invert>, invlist_array X<invlist_array>, invlist_destroy
-X<invlist_destroy>, invlist_extend X<invlist_extend>, invlist_intersection
-X<invlist_intersection>, invlist_len X<invlist_len>, invlist_max
-X<invlist_max>, invlist_set_len X<invlist_set_len>, invlist_set_max
-X<invlist_set_max>, invlist_trim X<invlist_trim>, invlist_union
-X<invlist_union>, invoke_exception_hook X<invoke_exception_hook>, io_close
-X<io_close>, is_an_int X<is_an_int>, is_handle_constructor
-X<is_handle_constructor>, is_inplace_av X<is_inplace_av>,
-is_list_assignment X<is_list_assignment>, is_utf8_X_L X<is_utf8_X_L>,
-is_utf8_X_LV X<is_utf8_X_LV>, is_utf8_X_LVT X<is_utf8_X_LVT>,
-is_utf8_X_LV_LVT_V X<is_utf8_X_LV_LVT_V>, is_utf8_X_T X<is_utf8_X_T>,
-is_utf8_X_V X<is_utf8_X_V>, is_utf8_X_begin X<is_utf8_X_begin>,
-is_utf8_X_extend X<is_utf8_X_extend>, is_utf8_X_non_hangul
-X<is_utf8_X_non_hangul>, is_utf8_X_prepend X<is_utf8_X_prepend>,
-is_utf8_char_slow X<is_utf8_char_slow>, is_utf8_common X<is_utf8_common>,
-isa_lookup X<isa_lookup>, jmaybe X<jmaybe>, join_exact X<join_exact>,
-keyword X<keyword>, keyword_plugin_standard X<keyword_plugin_standard>,
-list X<list>, listkids X<listkids>, localize X<localize>, looks_like_bool
-X<looks_like_bool>, lop X<lop>, mad_free X<mad_free>, madlex X<madlex>,
-madparse X<madparse>, magic_clear_all_env X<magic_clear_all_env>,
-magic_clearenv X<magic_clearenv>, magic_clearisa X<magic_clearisa>,
-magic_clearpack X<magic_clearpack>, magic_clearsig X<magic_clearsig>,
-magic_existspack X<magic_existspack>, magic_freearylen_p
-X<magic_freearylen_p>, magic_freeovrld X<magic_freeovrld>, magic_get
-X<magic_get>, magic_getarylen X<magic_getarylen>, magic_getdefelem
-X<magic_getdefelem>, magic_getnkeys X<magic_getnkeys>, magic_getpack
-X<magic_getpack>, magic_getpos X<magic_getpos>, magic_getsig
-X<magic_getsig>, magic_getsubstr X<magic_getsubstr>, magic_gettaint
-X<magic_gettaint>, magic_getuvar X<magic_getuvar>, magic_getvec
-X<magic_getvec>, magic_killbackrefs X<magic_killbackrefs>, magic_len
-X<magic_len>, magic_methcall1 X<magic_methcall1>, magic_methpack
-X<magic_methpack>, magic_nextpack X<magic_nextpack>, magic_regdata_cnt
-X<magic_regdata_cnt>, magic_regdatum_get X<magic_regdatum_get>,
-magic_regdatum_set X<magic_regdatum_set>, magic_scalarpack
-X<magic_scalarpack>, magic_set X<magic_set>, magic_set_all_env
-X<magic_set_all_env>, magic_setamagic X<magic_setamagic>, magic_setarylen
-X<magic_setarylen>, magic_setcollxfrm X<magic_setcollxfrm>, magic_setdbline
-X<magic_setdbline>, magic_setdefelem X<magic_setdefelem>, magic_setenv
-X<magic_setenv>, magic_setisa X<magic_setisa>, magic_setmglob
-X<magic_setmglob>, magic_setnkeys X<magic_setnkeys>, magic_setpack
-X<magic_setpack>, magic_setpos X<magic_setpos>, magic_setregexp
-X<magic_setregexp>, magic_setsig X<magic_setsig>, magic_setsubstr
-X<magic_setsubstr>, magic_settaint X<magic_settaint>, magic_setutf8
-X<magic_setutf8>, magic_setuvar X<magic_setuvar>, magic_setvec
-X<magic_setvec>, magic_sizepack X<magic_sizepack>, magic_wipepack
-X<magic_wipepack>, make_matcher X<make_matcher>, make_trie X<make_trie>,
-make_trie_failtable X<make_trie_failtable>, malloc_good_size
-X<malloc_good_size>, malloced_size X<malloced_size>, matcher_matches_sv
-X<matcher_matches_sv>, measure_struct X<measure_struct>, mem_collxfrm
-X<mem_collxfrm>, mem_log_common X<mem_log_common>, mess_alloc
-X<mess_alloc>, method_common X<method_common>, missingterm X<missingterm>,
-mod X<mod>, mode_from_discipline X<mode_from_discipline>, modkids
-X<modkids>, more_bodies X<more_bodies>, more_sv X<more_sv>,
-mro_clean_isarev X<mro_clean_isarev>, mro_gather_and_rename
-X<mro_gather_and_rename>, mro_meta_dup X<mro_meta_dup>, mro_meta_init
-X<mro_meta_init>, mul128 X<mul128>, mulexp10 X<mulexp10>,
-munge_qwlist_to_paren_list X<munge_qwlist_to_paren_list>, my_attrs
-X<my_attrs>, my_betoh16 X<my_betoh16>, my_betoh32 X<my_betoh32>, my_betoh64
-X<my_betoh64>, my_betohi X<my_betohi>, my_betohl X<my_betohl>, my_betohs
-X<my_betohs>, my_clearenv X<my_clearenv>, my_exit_jump X<my_exit_jump>,
-my_htobe16 X<my_htobe16>, my_htobe32 X<my_htobe32>, my_htobe64
-X<my_htobe64>, my_htobei X<my_htobei>, my_htobel X<my_htobel>, my_htobes
-X<my_htobes>, my_htole16 X<my_htole16>, my_htole32 X<my_htole32>,
-my_htole64 X<my_htole64>, my_htolei X<my_htolei>, my_htolel X<my_htolel>,
-my_htoles X<my_htoles>, my_kid X<my_kid>, my_letoh16 X<my_letoh16>,
-my_letoh32 X<my_letoh32>, my_letoh64 X<my_letoh64>, my_letohi X<my_letohi>,
-my_letohl X<my_letohl>, my_letohs X<my_letohs>, my_lstat_flags
-X<my_lstat_flags>, my_stat_flags X<my_stat_flags>, my_swabn X<my_swabn>,
-my_unexec X<my_unexec>, need_utf8 X<need_utf8>, newDEFSVOP X<newDEFSVOP>,
-newGIVWHENOP X<newGIVWHENOP>, newGP X<newGP>, newMADPROP X<newMADPROP>,
-newMADsv X<newMADsv>, newTOKEN X<newTOKEN>, new_constant X<new_constant>,
-new_he X<new_he>, new_logop X<new_logop>, new_warnings_bitfield
-X<new_warnings_bitfield>, next_symbol X<next_symbol>, nextargv X<nextargv>,
-nextchar X<nextchar>, no_bareword_allowed X<no_bareword_allowed>,
-no_fh_allowed X<no_fh_allowed>, no_op X<no_op>, not_a_number
-X<not_a_number>, nuke_stacks X<nuke_stacks>, num_overflow X<num_overflow>,
-oopsAV X<oopsAV>, oopsHV X<oopsHV>, op_clear X<op_clear>, op_const_sv
-X<op_const_sv>, op_getmad X<op_getmad>, op_getmad_weak X<op_getmad_weak>,
-op_refcnt_dec X<op_refcnt_dec>, op_refcnt_inc X<op_refcnt_inc>, op_xmldump
-X<op_xmldump>, open_script X<open_script>, opt_scalarhv X<opt_scalarhv>,
-pack_rec X<pack_rec>, package X<package>, package_version
-X<package_version>, pad_add_name_sv X<pad_add_name_sv>, pad_compname_type
-X<pad_compname_type>, pad_peg X<pad_peg>, padlist_dup X<padlist_dup>,
-parse_body X<parse_body>, parse_unicode_opts X<parse_unicode_opts>,
-parser_free X<parser_free>, path_is_absolute X<path_is_absolute>, peep
-X<peep>, pending_Slabs_to_ro X<pending_Slabs_to_ro>, pidgone X<pidgone>,
-pm_description X<pm_description>, pmop_xmldump X<pmop_xmldump>, pmruntime
-X<pmruntime>, pmtrans X<pmtrans>, populate_isa X<populate_isa>,
-prepend_madprops X<prepend_madprops>, printbuf X<printbuf>,
-process_special_blocks X<process_special_blocks>, ptr_table_find
-X<ptr_table_find>, put_byte X<put_byte>, qerror X<qerror>, qsortsvu
-X<qsortsvu>, re_croak2 X<re_croak2>, readpipe_override
-X<readpipe_override>, ref_array_or_hash X<ref_array_or_hash>,
-refcounted_he_value X<refcounted_he_value>, refkids X<refkids>, refto
-X<refto>, reg X<reg>, reg_check_named_buff_matched
-X<reg_check_named_buff_matched>, reg_named_buff X<reg_named_buff>,
-reg_named_buff_iter X<reg_named_buff_iter>, reg_namedseq X<reg_namedseq>,
-reg_node X<reg_node>, reg_numbered_buff_fetch X<reg_numbered_buff_fetch>,
-reg_numbered_buff_length X<reg_numbered_buff_length>,
-reg_numbered_buff_store X<reg_numbered_buff_store>, reg_qr_package
-X<reg_qr_package>, reg_recode X<reg_recode>, reg_scan_name
-X<reg_scan_name>, reg_skipcomment X<reg_skipcomment>, reg_temp_copy
-X<reg_temp_copy>, reganode X<reganode>, regatom X<regatom>, regbranch
-X<regbranch>, regclass X<regclass>, regcppop X<regcppop>, regcppush
-X<regcppush>, regcurly X<regcurly>, regdump_extflags X<regdump_extflags>,
-reghop3 X<reghop3>, reghop4 X<reghop4>, reghopmaybe3 X<reghopmaybe3>,
-reginclass X<reginclass>, reginsert X<reginsert>, regmatch X<regmatch>,
-regpiece X<regpiece>, regpposixcc X<regpposixcc>, regprop X<regprop>,
-regrepeat X<regrepeat>, regtail X<regtail>, regtail_study X<regtail_study>,
-regtry X<regtry>, reguni X<reguni>, regwhite X<regwhite>, report_evil_fh
-X<report_evil_fh>, report_wrongway_fh X<report_wrongway_fh>,
-require_tie_mod X<require_tie_mod>, restore_magic X<restore_magic>, rpeep
-X<rpeep>, rsignal_restore X<rsignal_restore>, rsignal_save X<rsignal_save>,
-run_body X<run_body>, run_user_filter X<run_user_filter>, rxres_free
-X<rxres_free>, rxres_restore X<rxres_restore>, rxres_save X<rxres_save>,
-same_dirent X<same_dirent>, save_hek_flags X<save_hek_flags>, save_lines
-X<save_lines>, save_magic X<save_magic>, save_pushptri32ptr
-X<save_pushptri32ptr>, save_scalar_at X<save_scalar_at>, sawparens
-X<sawparens>, scalar X<scalar>, scalar_mod_type X<scalar_mod_type>,
-scalarboolean X<scalarboolean>, scalarkids X<scalarkids>, scalarseq
-X<scalarseq>, scalarvoid X<scalarvoid>, scan_commit X<scan_commit>,
-scan_const X<scan_const>, scan_formline X<scan_formline>, scan_heredoc
-X<scan_heredoc>, scan_ident X<scan_ident>, scan_inputsymbol
-X<scan_inputsymbol>, scan_pat X<scan_pat>, scan_str X<scan_str>, scan_subst
-X<scan_subst>, scan_trans X<scan_trans>, scan_word X<scan_word>,
-search_const X<search_const>, sequence X<sequence>, sequence_num
-X<sequence_num>, sequence_tail X<sequence_tail>, set_regclass_bit
-X<set_regclass_bit>, set_regclass_bit_fold X<set_regclass_bit_fold>,
-share_hek_flags X<share_hek_flags>, sighandler X<sighandler>, simplify_sort
-X<simplify_sort>, skipspace X<skipspace>, skipspace0 X<skipspace0>,
-skipspace1 X<skipspace1>, skipspace2 X<skipspace2>, softref2xv
-X<softref2xv>, sortcv X<sortcv>, sortcv_stacked X<sortcv_stacked>,
-sortcv_xsub X<sortcv_xsub>, space_join_names_mortal
-X<space_join_names_mortal>, start_force X<start_force>, stdize_locale
-X<stdize_locale>, store_cop_label X<store_cop_label>, strip_return
-X<strip_return>, study_chunk X<study_chunk>, sub_crush_depth
-X<sub_crush_depth>, sublex_done X<sublex_done>, sublex_push X<sublex_push>,
-sublex_start X<sublex_start>, sv_2iuv_common X<sv_2iuv_common>,
-sv_2iuv_non_preserve X<sv_2iuv_non_preserve>, sv_add_backref
-X<sv_add_backref>, sv_catxmlpv X<sv_catxmlpv>, sv_catxmlpvn
-X<sv_catxmlpvn>, sv_catxmlsv X<sv_catxmlsv>, sv_compile_2op_is_broken
-X<sv_compile_2op_is_broken>, sv_del_backref X<sv_del_backref>,
-sv_dup_common X<sv_dup_common>, sv_dup_inc_multiple X<sv_dup_inc_multiple>,
-sv_exp_grow X<sv_exp_grow>, sv_free2 X<sv_free2>, sv_i_ncmp X<sv_i_ncmp>,
-sv_kill_backrefs X<sv_kill_backrefs>, sv_ncmp X<sv_ncmp>, sv_pos_b2u_midway
-X<sv_pos_b2u_midway>, sv_pos_u2b_cached X<sv_pos_u2b_cached>,
-sv_pos_u2b_forwards X<sv_pos_u2b_forwards>, sv_pos_u2b_midway
-X<sv_pos_u2b_midway>, sv_release_COW X<sv_release_COW>, sv_setsv_cow
-X<sv_setsv_cow>, sv_unglob X<sv_unglob>, sv_xmlpeek X<sv_xmlpeek>,
-swallow_bom X<swallow_bom>, swash_get X<swash_get>, tied_method
-X<tied_method>, to_byte_substr X<to_byte_substr>, to_utf8_substr
-X<to_utf8_substr>, token_free X<token_free>, token_getmad X<token_getmad>,
-tokenize_use X<tokenize_use>, tokeq X<tokeq>, tokereport X<tokereport>,
-too_few_arguments X<too_few_arguments>, too_many_arguments
-X<too_many_arguments>, try_amagic_bin X<try_amagic_bin>, try_amagic_un
-X<try_amagic_un>, uiv_2buf X<uiv_2buf>, unpack_rec X<unpack_rec>,
-unreferenced_to_tmp_stack X<unreferenced_to_tmp_stack>, unshare_hek
-X<unshare_hek>, unshare_hek_or_pvn X<unshare_hek_or_pvn>,
-unwind_handler_stack X<unwind_handler_stack>, update_debugger_info
-X<update_debugger_info>, usage X<usage>, utf16_textfilter
-X<utf16_textfilter>, utf8_mg_len_cache_update X<utf8_mg_len_cache_update>,
-utf8_mg_pos_cache_update X<utf8_mg_pos_cache_update>, utilize X<utilize>,
-validate_suid X<validate_suid>, varname X<varname>, visit X<visit>,
-vivify_defelem X<vivify_defelem>, vivify_ref X<vivify_ref>, wait4pid
-X<wait4pid>, watch X<watch>, with_queued_errors X<with_queued_errors>,
-write_no_mem X<write_no_mem>, write_to_stderr X<write_to_stderr>,
-xmldump_all X<xmldump_all>, xmldump_all_perl X<xmldump_all_perl>,
-xmldump_attr X<xmldump_attr>, xmldump_eval X<xmldump_eval>, xmldump_form
+hfree_next_entry X<hfree_next_entry>, hv_backreferences_p
+X<hv_backreferences_p>, hv_kill_backrefs X<hv_kill_backrefs>,
+hv_undef_flags X<hv_undef_flags>, init_argv_symbols X<init_argv_symbols>,
+init_dbargs X<init_dbargs>, init_debugger X<init_debugger>, invert
+X<invert>, invlist_array X<invlist_array>, invlist_clone X<invlist_clone>,
+invlist_iterinit X<invlist_iterinit>, invlist_len X<invlist_len>,
+invlist_max X<invlist_max>, invlist_set_len X<invlist_set_len>,
+invlist_trim X<invlist_trim>, io_close X<io_close>, is_utf8_X_L
+X<is_utf8_X_L>, is_utf8_X_LV X<is_utf8_X_LV>, is_utf8_X_LVT
+X<is_utf8_X_LVT>, is_utf8_X_LV_LVT_V X<is_utf8_X_LV_LVT_V>, is_utf8_X_T
+X<is_utf8_X_T>, is_utf8_X_V X<is_utf8_X_V>, is_utf8_X_begin
+X<is_utf8_X_begin>, is_utf8_X_extend X<is_utf8_X_extend>,
+is_utf8_X_non_hangul X<is_utf8_X_non_hangul>, is_utf8_X_prepend
+X<is_utf8_X_prepend>, jmaybe X<jmaybe>, keyword X<keyword>,
+keyword_plugin_standard X<keyword_plugin_standard>, list X<list>, localize
+X<localize>, mad_free X<mad_free>, madlex X<madlex>, madparse X<madparse>,
+magic_clear_all_env X<magic_clear_all_env>, magic_clearenv
+X<magic_clearenv>, magic_clearisa X<magic_clearisa>, magic_clearpack
+X<magic_clearpack>, magic_clearsig X<magic_clearsig>, magic_existspack
+X<magic_existspack>, magic_freearylen_p X<magic_freearylen_p>,
+magic_freeovrld X<magic_freeovrld>, magic_get X<magic_get>, magic_getarylen
+X<magic_getarylen>, magic_getdefelem X<magic_getdefelem>, magic_getnkeys
+X<magic_getnkeys>, magic_getpack X<magic_getpack>, magic_getpos
+X<magic_getpos>, magic_getsig X<magic_getsig>, magic_getsubstr
+X<magic_getsubstr>, magic_gettaint X<magic_gettaint>, magic_getuvar
+X<magic_getuvar>, magic_getvec X<magic_getvec>, magic_killbackrefs
+X<magic_killbackrefs>, magic_len X<magic_len>, magic_nextpack
+X<magic_nextpack>, magic_regdata_cnt X<magic_regdata_cnt>,
+magic_regdatum_get X<magic_regdatum_get>, magic_regdatum_set
+X<magic_regdatum_set>, magic_scalarpack X<magic_scalarpack>, magic_set
+X<magic_set>, magic_set_all_env X<magic_set_all_env>, magic_setamagic
+X<magic_setamagic>, magic_setarylen X<magic_setarylen>, magic_setcollxfrm
+X<magic_setcollxfrm>, magic_setdbline X<magic_setdbline>, magic_setdefelem
+X<magic_setdefelem>, magic_setenv X<magic_setenv>, magic_setisa
+X<magic_setisa>, magic_setmglob X<magic_setmglob>, magic_setnkeys
+X<magic_setnkeys>, magic_setpack X<magic_setpack>, magic_setpos
+X<magic_setpos>, magic_setregexp X<magic_setregexp>, magic_setsig
+X<magic_setsig>, magic_setsubstr X<magic_setsubstr>, magic_settaint
+X<magic_settaint>, magic_setutf8 X<magic_setutf8>, magic_setuvar
+X<magic_setuvar>, magic_setvec X<magic_setvec>, magic_setvstring
+X<magic_setvstring>, magic_sizepack X<magic_sizepack>, magic_wipepack
+X<magic_wipepack>, malloc_good_size X<malloc_good_size>, malloced_size
+X<malloced_size>, mem_collxfrm X<mem_collxfrm>, mode_from_discipline
+X<mode_from_discipline>, more_bodies X<more_bodies>, mro_meta_dup
+X<mro_meta_dup>, mro_meta_init X<mro_meta_init>, munge_qwlist_to_paren_list
+X<munge_qwlist_to_paren_list>, my_attrs X<my_attrs>, my_betoh16
+X<my_betoh16>, my_betoh32 X<my_betoh32>, my_betoh64 X<my_betoh64>,
+my_betohi X<my_betohi>, my_betohl X<my_betohl>, my_betohs X<my_betohs>,
+my_clearenv X<my_clearenv>, my_htobe16 X<my_htobe16>, my_htobe32
+X<my_htobe32>, my_htobe64 X<my_htobe64>, my_htobei X<my_htobei>, my_htobel
+X<my_htobel>, my_htobes X<my_htobes>, my_htole16 X<my_htole16>, my_htole32
+X<my_htole32>, my_htole64 X<my_htole64>, my_htolei X<my_htolei>, my_htolel
+X<my_htolel>, my_htoles X<my_htoles>, my_letoh16 X<my_letoh16>, my_letoh32
+X<my_letoh32>, my_letoh64 X<my_letoh64>, my_letohi X<my_letohi>, my_letohl
+X<my_letohl>, my_letohs X<my_letohs>, my_lstat_flags X<my_lstat_flags>,
+my_stat_flags X<my_stat_flags>, my_swabn X<my_swabn>, my_unexec
+X<my_unexec>, newATTRSUB_flags X<newATTRSUB_flags>, newGP X<newGP>,
+newMADPROP X<newMADPROP>, newMADsv X<newMADsv>, newTOKEN X<newTOKEN>,
+newXS_len_flags X<newXS_len_flags>, new_warnings_bitfield
+X<new_warnings_bitfield>, nextargv X<nextargv>, oopsAV X<oopsAV>, oopsHV
+X<oopsHV>, op_clear X<op_clear>, op_const_sv X<op_const_sv>, op_getmad
+X<op_getmad>, op_getmad_weak X<op_getmad_weak>, op_integerize
+X<op_integerize>, op_lvalue_flags X<op_lvalue_flags>, op_refcnt_dec
+X<op_refcnt_dec>, op_refcnt_inc X<op_refcnt_inc>, op_std_init
+X<op_std_init>, op_xmldump X<op_xmldump>, package X<package>,
+package_version X<package_version>, parse_unicode_opts
+X<parse_unicode_opts>, parser_free X<parser_free>, peep X<peep>,
+pending_Slabs_to_ro X<pending_Slabs_to_ro>, pmop_xmldump X<pmop_xmldump>,
+pmruntime X<pmruntime>, populate_isa X<populate_isa>, prepend_madprops
+X<prepend_madprops>, qerror X<qerror>, reg_named_buff X<reg_named_buff>,
+reg_named_buff_iter X<reg_named_buff_iter>, reg_numbered_buff_fetch
+X<reg_numbered_buff_fetch>, reg_numbered_buff_length
+X<reg_numbered_buff_length>, reg_numbered_buff_store
+X<reg_numbered_buff_store>, reg_qr_package X<reg_qr_package>, reg_temp_copy
+X<reg_temp_copy>, regcurly X<regcurly>, regprop X<regprop>, report_evil_fh
+X<report_evil_fh>, report_redefined_cv X<report_redefined_cv>,
+report_wrongway_fh X<report_wrongway_fh>, rpeep X<rpeep>, rsignal_restore
+X<rsignal_restore>, rsignal_save X<rsignal_save>, rxres_save X<rxres_save>,
+same_dirent X<same_dirent>, sawparens X<sawparens>, scalar X<scalar>,
+scalarvoid X<scalarvoid>, set_regclass_bit X<set_regclass_bit>, sighandler
+X<sighandler>, softref2xv X<softref2xv>, sub_crush_depth
+X<sub_crush_depth>, sv_add_backref X<sv_add_backref>, sv_catxmlpv
+X<sv_catxmlpv>, sv_catxmlpvn X<sv_catxmlpvn>, sv_catxmlsv X<sv_catxmlsv>,
+sv_compile_2op_is_broken X<sv_compile_2op_is_broken>, sv_del_backref
+X<sv_del_backref>, sv_free2 X<sv_free2>, sv_kill_backrefs
+X<sv_kill_backrefs>, sv_sethek X<sv_sethek>, sv_setsv_cow X<sv_setsv_cow>,
+sv_unglob X<sv_unglob>, sv_xmlpeek X<sv_xmlpeek>, tied_method
+X<tied_method>, token_free X<token_free>, token_getmad X<token_getmad>,
+translate_substr_offsets X<translate_substr_offsets>, try_amagic_bin
+X<try_amagic_bin>, try_amagic_un X<try_amagic_un>, unshare_hek
+X<unshare_hek>, utilize X<utilize>, varname X<varname>, vivify_defelem
+X<vivify_defelem>, vivify_ref X<vivify_ref>, wait4pid X<wait4pid>,
+was_lvalue_sub X<was_lvalue_sub>, watch X<watch>, write_to_stderr
+X<write_to_stderr>, xmldump_all X<xmldump_all>, xmldump_all_perl
+X<xmldump_all_perl>, xmldump_eval X<xmldump_eval>, xmldump_form
X<xmldump_form>, xmldump_indent X<xmldump_indent>, xmldump_packsubs
X<xmldump_packsubs>, xmldump_packsubs_perl X<xmldump_packsubs_perl>,
xmldump_sub X<xmldump_sub>, xmldump_sub_perl X<xmldump_sub_perl>,
xmldump_vindent X<xmldump_vindent>, xs_apiversion_bootcheck
X<xs_apiversion_bootcheck>, xs_version_bootcheck X<xs_version_bootcheck>,
-yyerror X<yyerror>, yylex X<yylex>, yyparse X<yyparse>, yyunlex X<yyunlex>,
-yywarn X<yywarn>
+yyerror X<yyerror>, yyerror_pv X<yyerror_pv>, yyerror_pvn X<yyerror_pvn>,
+yylex X<yylex>, yyparse X<yyparse>, yyunlex X<yyunlex>
=item AUTHORS
@@ -7016,6 +6883,8 @@ your change, Send your change to perlbug, Thank you
=item perl-changes mailing list
+=item #p5p on IRC
+
=back
=item GETTING THE PERL SOURCE
@@ -7122,7 +6991,7 @@ F<t/lib/>, F<t/x2p>
=item Documentation
-=item Hacking toolks and documentation
+=item Hacking tools and documentation
F<check*>, F<Maintainers>, F<Maintainers.pl>, and F<Maintainers.pm>,
F<podtidy>
@@ -7312,6 +7181,14 @@ the Perl core
=item DESCRIPTION
+=item GOVERNANCE
+
+=over 4
+
+=item Perl 5 Porters
+
+=back
+
=item MAINTENANCE AND SUPPORT
=item BACKWARD COMPATIBILITY AND DEPRECATION
@@ -7372,20 +7249,26 @@ experimental, deprecated, discouraged, removed
=item Bisecting
+=back
+
=item Topic branches and rewriting history
+=over 4
+
+=item Grafts
+
=back
=item WRITE ACCESS TO THE GIT REPOSITORY
+=item Accepting a patch
+
=over 4
=item Committing to blead
=item Committing to maintenance versions
-=item Grafts
-
=item Merging from a branch via GitHub
=item A note on camel and dromedary
@@ -7480,243 +7363,6 @@ L<http://perl.com/>, L<http://use.perl.org/>, L<http://www.perlmonks.org/>
=back
-=head2 perltodo - Perl TO-DO List
-
-=over 4
-
-=item DESCRIPTION
-
-=item Tasks that only need Perl knowledge
-
-=over 4
-
-=item Migrate t/ from custom TAP generation
-
-=item Automate perldelta generation
-
-Modules and Pragmata, New Documentation, New Tests
-
-=item Remove duplication of test setup.
-
-=item POD -E<gt> HTML conversion in the core still sucks
-
-=item Make ExtUtils::ParseXS use strict;
-
-=item Make Schwern poorer
-
-=item Improve the coverage of the core tests
-
-=item test B
-
-=item A decent benchmark
-
-=item fix tainting bugs
-
-=item Dual life everything
-
-=item POSIX memory footprint
-
-=item embed.pl/makedef.pl
-
-=item use strict; and AutoLoad
-
-=item profile installman
-
-=item enable lexical enabling/disabling of individual warnings
-
-=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
-
-=item Split "linker" from "compiler"
-
-C<cc> (in F<cc.U>), C<ld> (in F<dlsrc.U>)
-
-=item Configure Windows using PowerShell
-
-=item decouple -g and -DDEBUGGING
-
-=back
-
-=item Tasks that need a little C knowledge
-
-=over 4
-
-=item Weed out needless PERL_UNUSED_ARG
-
-=item Modernize the order of directories in @INC
-
-=item -Duse32bit*
-
-=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 Fix POSIX::access() and chdir() on Win32
-
-=item strcat(), strcpy(), strncat(), strncpy(), sprintf(), vsprintf()
-
-=item -D_FORTIFY_SOURCE=2, -fstack-protector
-
-=item Arenas for GPs? For MAGIC?
-
-=item Shared arenas
-
-=back
-
-=item Tasks that need a knowledge of XS
-
-=over 4
-
-=item Write an XS cookbook
-
-=item Allow XSUBs to inline themselves as OPs
-
-=item Remove the use of SVs as temporaries in dump.c
-
-=item safely supporting POSIX SA_SIGINFO
-
-=item autovivification
-
-=item Unicode in Filenames
-
-=item Unicode in %ENV
-
-=item Unicode and glob()
-
-=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 Organize error messages
-
-=back
-
-=item Tasks that need a knowledge of the interpreter
-
-=over 4
-
-=item forbid labels with keyword names
-
-=item truncate() prototype
-
-=item decapsulation of smart match argument
-
-=item error reporting of [$a ; $b]
-
-=item lexicals used only once
-
-=item UTF-8 revamp
-
-=item Properly Unicode safe tokeniser and pads.
-
-=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 Propagate compilation hints to the debugger
-
-=item Attach/detach debugger from running program
-
-=item LVALUE functions for lists
-
-=item regexp optimiser optional
-
-=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 Virtualize operating system access
-
-=item Investigate PADTMP hash pessimisation
-
-=item Store the current pad in the OP slab allocator
-
-=item repack the optree
-
-=item eliminate incorrect line numbers in warnings
-
-=item optimize tail-calls
-
-=item Add C<00dddd>
-
-=back
-
-=item Big projects
-
-=over 4
-
-=item make ithreads more robust
-
-=item iCOW
-
-=item (?{...}) closures in regexps
-
-=item Add class set operations to regexp engine
-
-=back
-
-=item Tasks for microperl
-
-=over 4
-
-=item make creating uconfig.sh automatic
-
-=item make creating Makefile.micro automatic
-
-=item do away with fork/exec/wait?
-
-=item some of the uconfig.sh really needs to be probed (using cc) in
-buildtime:
-
-=back
-
-=back
-
=head2 perldoc - Look up Perl documentation in Pod format.
=over 4
@@ -7731,8 +7377,8 @@ B<-h>, B<-D>, B<-t>, B<-u>, B<-m> I<module>, B<-l>, B<-F>, B<-f>
I<perlfunc>, B<-q> I<perlfaq-search-regexp>, B<-v> I<perlvar>, 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>
+B<PageName|ModuleName|ProgramName|URL>, B<-n> I<some-formatter>, B<-r>,
+B<-i>, B<-V>
=item SECURITY
@@ -7776,57 +7422,39 @@ B<-V>
=back
-=head2 perldelta - what is new for perl v5.14.2
+=head2 perldelta - what is new for perl v5.16.2
=over 4
=item DESCRIPTION
-=item Core Enhancements
-
-=item Security
-
-=over 4
-
-=item C<File::Glob::bsd_glob()> memory error with GLOB_ALTDIRFUNC
-(CVE-2011-2728).
-
-=item C<Encode> decode_xs n-byte heap-overflow (CVE-2011-2939)
-
-=back
-
=item Incompatible Changes
-=item Deprecations
-
=item Modules and Pragmata
=over 4
-=item New Modules and Pragmata
-
=item Updated Modules and Pragmata
-=item Removed Modules and Pragmata
-
=back
-=item Platform Support
+=item Configuration and Compilation
-=over 4
+configuration should no longer be confused by ls colorization
-=item New Platforms
+=item Platform Support
-=item Discontinued Platforms
+=over 4
=item Platform-Specific Notes
-HP-UX PA-RISC/64 now supports gcc-4.x, Building on OS X 10.7 Lion and Xcode
-4 works again
+AIX
=back
-=item Bug Fixes
+=item Selected Bug Fixes
+
+fix /\h/ equivalence with /[\h]/
=item Known Problems
@@ -7838,57 +7466,39 @@ HP-UX PA-RISC/64 now supports gcc-4.x, Building on OS X 10.7 Lion and Xcode
=back
-=head2 perl5142delta, perldelta - what is new for perl v5.14.2
+=head2 perl5162delta, perldelta - what is new for perl v5.16.2
=over 4
=item DESCRIPTION
-=item Core Enhancements
-
-=item Security
-
-=over 4
-
-=item C<File::Glob::bsd_glob()> memory error with GLOB_ALTDIRFUNC
-(CVE-2011-2728).
-
-=item C<Encode> decode_xs n-byte heap-overflow (CVE-2011-2939)
-
-=back
-
=item Incompatible Changes
-=item Deprecations
-
=item Modules and Pragmata
=over 4
-=item New Modules and Pragmata
-
=item Updated Modules and Pragmata
-=item Removed Modules and Pragmata
-
=back
-=item Platform Support
+=item Configuration and Compilation
-=over 4
+configuration should no longer be confused by ls colorization
-=item New Platforms
+=item Platform Support
-=item Discontinued Platforms
+=over 4
=item Platform-Specific Notes
-HP-UX PA-RISC/64 now supports gcc-4.x, Building on OS X 10.7 Lion and Xcode
-4 works again
+AIX
=back
-=item Bug Fixes
+=item Selected Bug Fixes
+
+fix /\h/ equivalence with /[\h]/
=item Known Problems
@@ -7900,73 +7510,45 @@ HP-UX PA-RISC/64 now supports gcc-4.x, Building on OS X 10.7 Lion and Xcode
=back
-=head2 perl5141delta - what is new for perl v5.14.1
+=head2 perl5161delta - what is new for perl v5.16.1
=over 4
=item DESCRIPTION
-=item Core Enhancements
-
=item Security
-=item Incompatible Changes
-
-=item Deprecations
-
-=item Modules and Pragmata
-
=over 4
-=item New Modules and Pragmata
-
-=item Updated Modules and Pragmata
-
-=item Removed Modules and Pragmata
+=item an off-by-two error in Scalar-List-Util has been fixed
=back
-=item Documentation
-
-=over 4
-
-=item New Documentation
-
-=item Changes to Existing Documentation
-
-=back
+=item Incompatible Changes
-=item Diagnostics
+=item Modules and Pragmata
=over 4
-=item New Diagnostics
-
-=item Changes to Existing Diagnostics
+=item Updated Modules and Pragmata
=back
-=item Utility Changes
-
=item Configuration and Compilation
-=item Testing
-
=item Platform Support
=over 4
-=item New Platforms
-
-=item Discontinued Platforms
-
=item Platform-Specific Notes
+VMS
+
=back
-=item Internal Changes
+=item Selected Bug Fixes
-=item Bug Fixes
+=item Known Problems
=item Acknowledgements
@@ -7976,7 +7558,7 @@ HP-UX PA-RISC/64 now supports gcc-4.x, Building on OS X 10.7 Lion and Xcode
=back
-=head2 perl5140delta - what is new for perl v5.14.0
+=head2 perl5160delta - what is new for perl v5.16.0
=over 4
@@ -7988,43 +7570,39 @@ HP-UX PA-RISC/64 now supports gcc-4.x, Building on OS X 10.7 Lion and Xcode
=over 4
-=item Unicode
+=item C<use I<VERSION>>
-=item Regular Expressions
+=item C<__SUB__>
-=item Syntactical Enhancements
+=item New and Improved Built-ins
-=item Exception Handling
-
-=item Other Enhancements
+=item Unicode Support
-C<-d:-foo>, C<-d:-foo=bar>
+=item XS Changes
-=item New C APIs
+=item Changes to Special Variables
-=back
+=item Debugger Changes
-=item Security
+=item The C<CORE> Namespace
-=over 4
-
-=item User-defined regular expression properties
+=item Other Changes
=back
-=item Incompatible Changes
+=item Security
=over 4
-=item Regular Expressions and String Escapes
+=item Use C<is_utf8_char_buf()> and not C<is_utf8_char()>
-=item Stashes and Package Variables
-
-=item Changes to Syntax or to Perl Operators
+=item Malformed UTF-8 input could cause attempts to read beyond the end of
+the buffer
-=item Threads and Processes
+=item C<File::Glob::bsd_glob()> memory error with GLOB_ALTDIRFUNC
+(CVE-2011-2728).
-=item Configuration
+=item Privileges are now set correctly when assigning to C<$(>
=back
@@ -8032,82 +7610,80 @@ C<-d:-foo>, C<-d:-foo=bar>
=over 4
-=item Omitting a space between a regular expression and subsequent word
+=item Don't read the Unicode data base files in F<lib/unicore>
-=item C<\cI<X>>
+=item XS functions C<is_utf8_char()>, C<utf8_to_uvchr()> and
+C<utf8_to_uvuni()>
-=item C<"\b{"> and C<"\B{">
-
-=item Perl 4-era .pl libraries
-
-=item List assignment to C<$[>
-
-=item Use of qw(...) as parentheses
+=back
-=item C<\N{BELL}>
+=item Future Deprecations
-=item C<?PATTERN?>
+=over 4
-=item Tie functions on scalars holding typeglobs
+=item Core Modules
-=item User-defined case-mapping
+=item Platforms with no supporting programmers:
-=item Deprecated modules
-
-L<Devel::DProf>
+=item Other Future Deprecations
=back
-=item Performance Enhancements
+=item Incompatible Changes
=over 4
-=item "Safe signals" optimisation
+=item Special blocks called in void context
-=item Optimisation of shift() and pop() calls without arguments
+=item The C<overloading> pragma and regexp objects
-=item Optimisation of regexp engine string comparison work
+=item Two XS typemap Entries removed
-=item Regular expression compilation speed-up
+=item Unicode 6.1 has incompatibilities with Unicode 6.0
-=item String appending is 100 times faster
+=item Borland compiler
-=item Eliminate C<PL_*> accessor functions under ithreads
+=item Certain deprecated Unicode properties are no longer supported by
+default
-=item Freeing weak references
+=item Dereferencing IO thingies as typeglobs
-=item Lexical array and hash assignments
+=item User-defined case-changing operations
-=item C<@_> uses less memory
+=item XSUBs are now 'static'
-=item Size optimisations to SV and HV structures
+=item Weakening read-only references
-=item Memory consumption improvements to Exporter
+=item Tying scalars that hold typeglobs
-=item Memory savings for weak references
+=item IPC::Open3 no longer provides C<xfork()>, C<xclose_on_exec()>
+and C<xpipe_anon()>
-=item C<%+> and C<%-> use less memory
+=item C<$$> no longer caches PID
-=item Multiple small improvements to threads
+=item C<$$> and C<getppid()> no longer emulate POSIX semantics under
+LinuxThreads
-=item Adjacent pairs of nextstate opcodes are now optimized away
+=item C<< $< >>, C<< $> >>, C<$(> and C<$)> are no longer cached
+
+=item Which Non-ASCII characters get quoted by C<quotemeta> and C<\Q> has
+changed
=back
+=item Performance Enhancements
+
=item Modules and Pragmata
=over 4
-=item New Modules and Pragmata
+=item Deprecated Modules
-=item Updated Modules and Pragma
+L<Version::Requirements>
-much less configuration dialog hassle, support for F<META/MYMETA.json>,
-support for L<local::lib>, support for L<HTTP::Tiny> to reduce the
-dependency on FTP sites, automatic mirror selection, iron out all known
-bugs in configure_requires, support for distributions compressed with
-L<bzip2(1)>, allow F<Foo/Bar.pm> on the command line to mean C<Foo::Bar>,
-charinfo(), charscript(), charblock()
+=item New Modules and Pragmata
+
+=item Updated Modules and Pragmata
=item Removed Modules and Pragmata
@@ -8121,6 +7697,8 @@ charinfo(), charscript(), charblock()
=item Changes to Existing Documentation
+=item Removed Documentation
+
=back
=item Diagnostics
@@ -8129,13 +7707,7 @@ charinfo(), charscript(), charblock()
=item New Diagnostics
-Closure prototype called, Insecure user-defined property %s, panic: gp_free
-failed to free glob pointer - something is repeatedly re-creating entries,
-Parsing code internal error (%s), refcnt: fd %d%s, Regexp modifier "/%c"
-may not appear twice, Regexp modifiers "/%c" and "/%c" are mutually
-exclusive, Using !~ with %s doesn't make sense, "\b{" is deprecated; use
-"\b\{" instead, "\B{" is deprecated; use "\B\{" instead, Operation "%s"
-returns its argument for .., Use of qw(...) as parentheses is deprecated
+=item Removed Errors
=item Changes to Existing Diagnostics
@@ -8149,157 +7721,71 @@ returns its argument for .., Use of qw(...) as parentheses is deprecated
=over 4
-=item New Platforms
-
-AIX
-
-=item Discontinued Platforms
-
-Apollo DomainOS, MacOS Classic
-
=item Platform-Specific Notes
=back
=item Internal Changes
-=over 4
-
-=item New APIs
-
-=item C API Changes
-
-=item Deprecated C APIs
-
-C<Perl_ptr_table_clear>, C<sv_compile_2op>, C<find_rundefsvoffset>,
-C<CALL_FPTR> and C<CPERLscope>
-
-=item Other Internal Changes
-
-=back
-
=item Selected Bug Fixes
=over 4
-=item I/O
-
-=item Regular Expression Bug Fixes
-
-=item Syntax/Parsing Bugs
-
-=item Stashes, Globs and Method Lookup
-
-Aliasing packages by assigning to globs [perl #77358], Deleting packages by
-deleting their containing stash elements, Undefining the glob containing a
-package (C<undef *Foo::>), Undefining an ISA glob (C<undef *Foo::ISA>),
-Deleting an ISA stash element (C<delete $Foo::{ISA}>), Sharing @ISA arrays
-between classes (via C<*Foo::ISA = \@Bar::ISA> or C<*Foo::ISA = *Bar::ISA>)
-[perl #77238]
-
-=item Unicode
-
-=item Ties, Overloading and Other Magic
-
-=item The Debugger
-
-=item Threads
-
-=item Scoping and Subroutines
-
-=item Signals
-
-=item Miscellaneous Memory Leaks
-
-=item Memory Corruption and Crashes
-
-=item Fixes to Various Perl Operators
-
-=item Bugs Relating to the C API
-
-=back
-
-=item Known Problems
-
-=item Errata
-
-=over 4
-
-=item keys(), values(), and each() work on arrays
-
-=item split() and C<@_>
-
-=back
-
-=item Obituary
-
-=item Acknowledgements
+=item Array and hash
-=item Reporting Bugs
+=item C API fixes
-=item SEE ALSO
+=item Compile-time hints
-=back
+=item Copy-on-write scalars
-=head2 perl51311delta - what is new for perl v5.13.11
+=item The debugger
-=over 4
+=item Dereferencing operators
-=item DESCRIPTION
+=item Filehandle, last-accessed
-=item Security
+=item Filetests and C<stat>
-=over 4
+=item Formats
-=item User-defined regular expression properties
+=item C<given> and C<when>
-=back
+=item The C<glob> operator
-=item Incompatible Changes
+=item Lvalue subroutines
-=over 4
+=item Overloading
-=item local($_) will strip all magic from $_
+=item Prototypes of built-in keywords
-=item Passing references to warn()
+=item Regular expressions
-=item fork() emulation will not wait for signalled children
+=item Smartmatching
-=item Perl source code is read in text mode on Windows
+=item The C<sort> operator
-=back
+=item The C<substr> operator
-=item Performance Enhancements
+=item Support for embedded nulls
-=item Modules and Pragmata
+=item Threading bugs
-=over 4
+=item Tied variables
-=item Updated Modules and Pragmata
+=item Version objects and vstrings
-charinfo(), charscript(), charblock()
+=item Warnings, redefinition
-=back
-
-=item Documentation
+=item Warnings, "Uninitialized"
-=over 4
+=item Weak references
-=item Changes to Existing Documentation
+=item Other notable fixes
=back
-=item Diagnostics
-
-=over 4
-
-=item New Diagnostics
-
-=back
-
-=item Testing
-
-=item Selected Bug Fixes
+=item Known Problems
=item Acknowledgements
@@ -8309,165 +7795,147 @@ charinfo(), charscript(), charblock()
=back
-=head2 perl51310delta - what is new for perl v5.13.10
+=head2 perl5160delta - what is new for perl v5.16.0
=over 4
=item DESCRIPTION
+=item Notice
+
=item Core Enhancements
=over 4
-=item The new regular expression modifiers available in suffix form
+=item C<use I<VERSION>>
-=item Add C<\p{Titlecase}> as a synonym for C<\p{Title}>
+=item C<__SUB__>
-=item New regular expression modifier option C</aa>
-
-=item New warnings categories for problematic (non-)Unicode code points.
-
-=back
-
-=item Incompatible Changes
-
-=over 4
+=item New and Improved Built-ins
-=item Most C<\p{}> properties are now immune from case-insensitive matching
+=item Unicode Support
-=item regex: \p{} in pattern implies Unicode semantics
+=item XS Changes
-=item add GvCV_set() and GvGP_set() macros and change GvGP()
+=item Changes to Special Variables
-=item _swash_inversion_hash is no longer exported as part of the API
+=item Debugger Changes
-=item Unreferenced objects in global destruction
+=item The C<CORE> Namespace
-=item C<close> on shared pipes
+=item Other Changes
=back
-=item Deprecations
-
-Deprecated Modules, L<Devel::DProf>
+=item Security
=over 4
-=item User-defined case-mapping
-
-=back
-
-=item Modules and Pragmata
+=item Use C<is_utf8_char_buf()> and not C<is_utf8_char()>
-=over 4
+=item Malformed UTF-8 input could cause attempts to read beyond the end of
+the buffer
-=item New Modules and Pragmata
+=item C<File::Glob::bsd_glob()> memory error with GLOB_ALTDIRFUNC
+(CVE-2011-2728).
-=item Updated Modules and Pragmata
+=item Privileges are now set correctly when assigning to C<$(>
=back
-=item Documentation
+=item Deprecations
=over 4
-=item Changes to Existing Documentation
+=item Don't read the Unicode data base files in F<lib/unicore>
+
+=item XS functions C<is_utf8_char()>, C<utf8_to_uvchr()> and
+C<utf8_to_uvuni()>
=back
-=item Diagnostics
+=item Future Deprecations
=over 4
-=item New Diagnostics
+=item Core Modules
-"\b{" is deprecated; use "\b\{" instead, "\B{" is deprecated; use "\B\{"
-instead, regcomp: Add warning if \p is used under locale. (fb2e24c), panic:
-gp_free failed to free glob pointer - something is repeatedly re-creating
-entries, refcnt: fd %d%s
+=item Platforms with no supporting programmers:
-=item Changes to Existing Diagnostics
+=item Other Future Deprecations
=back
-=item Utility Changes
-
-=item Configuration and Compilation
-
-=item Testing
-
-=item Platform Support
+=item Incompatible Changes
=over 4
-=item Platform-Specific Notes
+=item Special blocks called in void context
-Windows, MirBSD
+=item The C<overloading> pragma and regexp objects
-=back
+=item Two XS typemap Entries removed
-=item Internal Changes
+=item Unicode 6.1 has incompatibilities with Unicode 6.0
-=item Selected Bug Fixes
+=item Borland compiler
-=item Acknowledgements
+=item Certain deprecated Unicode properties are no longer supported by
+default
-=item Reporting Bugs
+=item Dereferencing IO thingies as typeglobs
-=item SEE ALSO
+=item User-defined case-changing operations
-=back
+=item XSUBs are now 'static'
-=head2 perl5139delta - what is new for perl v5.13.9
+=item Weakening read-only references
-=over 4
+=item Tying scalars that hold typeglobs
-=item DESCRIPTION
+=item IPC::Open3 no longer provides C<xfork()>, C<xclose_on_exec()>
+and C<xpipe_anon()>
-=item Core Enhancements
+=item C<$$> no longer caches PID
-=over 4
+=item C<$$> and C<getppid()> no longer emulate POSIX semantics under
+LinuxThreads
-=item New regular expression modifier C</a>
+=item C<< $< >>, C<< $> >>, C<$(> and C<$)> are no longer cached
-=item Any unsigned value can be encoded as a character
-
-=item Regular expression debugging output improvement
+=item Which Non-ASCII characters get quoted by C<quotemeta> and C<\Q> has
+changed
=back
-=item Security
-
-=over 4
-
-=item Restrict \p{IsUserDefined} to In\w+ and Is\w+
-
-=back
+=item Performance Enhancements
-=item Incompatible Changes
+=item Modules and Pragmata
=over 4
-=item All objects are destroyed
+=item Deprecated Modules
-=back
-
-=item Modules and Pragmata
-
-=over 4
+L<Version::Requirements>
=item New Modules and Pragmata
=item Updated Modules and Pragmata
+=item Removed Modules and Pragmata
+
=back
=item Documentation
=over 4
+=item New Documentation
+
=item Changes to Existing Documentation
+=item Removed Documentation
+
=back
=item Diagnostics
@@ -8476,129 +7944,85 @@ Windows, MirBSD
=item New Diagnostics
+=item Removed Errors
+
=item Changes to Existing Diagnostics
=back
=item Utility Changes
-=item Testing
+=item Configuration and Compilation
=item Platform Support
=over 4
-=item Discontinued Platforms
-
-Apollo DomainOS, MacOS Classic
-
=item Platform-Specific Notes
-Cygwin, Solaris
-
=back
=item Internal Changes
=item Selected Bug Fixes
-=item Known Problems
-
-=item Acknowledgements
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl5138delta - what is new for perl v5.13.8
-
=over 4
-=item DESCRIPTION
+=item Array and hash
-=item Core Enhancements
+=item C API fixes
-=over 4
-
-=item C<-d:-foo> calls C<Devel::foo::unimport>
-
-C<-d:-foo>, C<-d:-foo=bar>
-
-=item Filehandle method calls load L<IO::File> on demand
-
-=item Full functionality for C<use feature 'unicode_strings'>
-
-=item Exception Handling Backcompat Hack
+=item Compile-time hints
-=item printf-like functions understand post-1980 size modifiers
+=item Copy-on-write scalars
-=item DTrace probes now include package name
+=item The debugger
-=item Stacked labels
-
-=back
-
-=item Incompatible Changes
-
-=over 4
+=item Dereferencing operators
-=item C<:=> is now a syntax error
+=item Filehandle, last-accessed
-=item Run-time code block in regular expressions
+=item Filetests and C<stat>
-=back
-
-=item Deprecations
-
-=over 4
-
-=item C<?PATTERN?> is deprecated
-
-=item C<sv_compile_2op()> is now deprecated
+=item Formats
-=item Tie functions on scalars holding typeglobs
+=item C<given> and C<when>
-=back
+=item The C<glob> operator
-=item Modules and Pragmata
-
-=over 4
+=item Lvalue subroutines
-=item Updated Modules and Pragmata
+=item Overloading
-=item Dual-life Modules and Pragmata
+=item Prototypes of built-in keywords
-=back
+=item Regular expressions
-=item Diagnostics
+=item Smartmatching
-=over 4
+=item The C<sort> operator
-=item New Diagnostics
+=item The C<substr> operator
-=item Changes to Existing Diagnostics
+=item Support for embedded nulls
-=back
+=item Threading bugs
-=item Configuration and Compilation
+=item Tied variables
-=item Testing
+=item Version objects and vstrings
-=item Platform Support
+=item Warnings, redefinition
-=over 4
+=item Warnings, "Uninitialized"
-=item Platform-Specific Notes
+=item Weak references
-NetBSD, Windows
+=item Other notable fixes
=back
-=item Internal Changes
-
-=item Selected Bug Fixes
+=item Known Problems
=item Acknowledgements
@@ -8608,7 +8032,7 @@ NetBSD, Windows
=back
-=head2 perl5137delta - what is new for perl v5.13.7
+=head2 perl5143delta - what is new for perl v5.14.3
=over 4
@@ -8616,48 +8040,20 @@ NetBSD, Windows
=item Core Enhancements
-=over 4
-
-=item Single term prototype
-
-=item C<use re '/flags';>
-
-=item Statement labels can appear in more places
-
-=item C<use feature "unicode_strings"> now applies to more regex matching
-
-=item Array and hash container functions accept references
-
-=item y///r
+=item Security
-=item New global variable C<${^GLOBAL_PHASE}>
+=over 4
-=item Unicode Version 6.0 is now supported (mostly)
+=item C<Digest> unsafe use of eval (CVE-2011-3597)
-=item Improved support for custom OPs
+=item Heap buffer overrun in 'x' string repeat operator (CVE-2012-5195)
=back
=item Incompatible Changes
-=over 4
-
-=item Dereferencing typeglobs
-
-=item Clearing stashes
-
-=back
-
=item Deprecations
-=over 4
-
-=item C<\N{BELL}> is deprecated
-
-=back
-
-=item Performance Enhancements
-
=item Modules and Pragmata
=over 4
@@ -8666,6 +8062,8 @@ NetBSD, Windows
=item Updated Modules and Pragmata
+=item Removed Modules and Pragmata
+
=back
=item Documentation
@@ -8678,33 +8076,23 @@ NetBSD, Windows
=back
-=item Diagnostics
-
-=over 4
-
-=item New Diagnostics
-
-=back
-
-=item Utility Changes
-
-=item Testing
+=item Configuration and Compilation
=item Platform Support
=over 4
-=item Platform-Specific Notes
+=item New Platforms
-Windows, VMS
+=item Discontinued Platforms
-=back
+=item Platform-Specific Notes
-=item Internal Changes
+FreeBSD, Solaris and NetBSD, HP-UX, Linux, Mac OS X, GNU/Hurd, NetBSD
-=item Selected Bug Fixes
+=back
-=item Obituary
+=item Bug Fixes
=item Acknowledgements
@@ -8714,7 +8102,7 @@ Windows, VMS
=back
-=head2 perl5136delta - what is new for perl v5.13.6
+=head2 perl5142delta - what is new for perl v5.14.2
=over 4
@@ -8722,87 +8110,51 @@ Windows, VMS
=item Core Enhancements
-=over 4
-
-=item C<(?^...)> regex construct added to signify default modifiers
-
-=item C<"d">, C<"l">, and C<"u"> regex modifiers added
-
-=item C<use feature "unicode_strings"> now applies to some regex matching
-
-=item C<\N{...}> now handles Unicode named character sequences
-
-=item New function C<charnames::string_vianame()>
-
-=item Reentrant regular expression engine
+=item Security
-=item Custom per-subroutine check hooks
+=over 4
-=item Return value of C<delete $+{...}>
+=item C<File::Glob::bsd_glob()> memory error with GLOB_ALTDIRFUNC
+(CVE-2011-2728).
-=item C<keys>, C<values> work on arrays
+=item C<Encode> decode_xs n-byte heap-overflow (CVE-2011-2939)
=back
=item Incompatible Changes
-=over 4
-
-=item Stringification of regexes has changed
-
-=item Regular expressions retain their localeness when interpolated
-
-=item Directory handles not copied to threads
-
-=item Negation treats strings differently from before
-
-=item Negative zero
-
-=back
-
-=item Performance Enhancements
+=item Deprecations
=item Modules and Pragmata
=over 4
-=item Updated Modules and Pragmata
-
-=back
-
-=item Documentation
+=item New Modules and Pragmata
-=over 4
+=item Updated Modules and Pragmata
-=item Changes to Existing Documentation
+=item Removed Modules and Pragmata
=back
-=item Diagnostics
+=item Platform Support
=over 4
-=item Changes to Existing Diagnostics
-
-=back
-
-=item Testing
-
-=item Platform Support
+=item New Platforms
-=over 4
+=item Discontinued Platforms
=item Platform-Specific Notes
-IRIX, Mac OS X, OpenVOS, VMS, Windows
+HP-UX PA-RISC/64 now supports gcc-4.x, Building on OS X 10.7 Lion and Xcode
+4 works again
=back
-=item Internal Changes
-
-=item Selected Bug Fixes
+=item Bug Fixes
-=item Errata
+=item Known Problems
=item Acknowledgements
@@ -8812,7 +8164,7 @@ IRIX, Mac OS X, OpenVOS, VMS, Windows
=back
-=head2 perl5135delta - what is new for perl v5.13.5
+=head2 perl5141delta - what is new for perl v5.14.1
=over 4
@@ -8820,53 +8172,21 @@ IRIX, Mac OS X, OpenVOS, VMS, Windows
=item Core Enhancements
-=over 4
-
-=item Adjacent pairs of nextstate opcodes are now optimized away
-
-=item API function to parse statements
-
-=item API functions for accessing the runtime hinthash
-
-=item C interface to C<caller()>
-
-=back
+=item Security
=item Incompatible Changes
-=over 4
-
-=item Magic variables outside the main package
-
-=item Smart-matching against array slices
-
-=item C API changes
-
-=back
-
=item Deprecations
-=over 4
-
-=item Use of qw(...) as parentheses
-
-=back
-
-=item Performance Enhancements
-
=item Modules and Pragmata
=over 4
+=item New Modules and Pragmata
+
=item Updated Modules and Pragmata
-C<bignum>, C<blib>, C<open>, C<threads-shared>, C<warnings> and
-C<warnings::register>, C<B::Debug>, C<CPANPLUS::Dist::Build>,
-C<Data::Dumper>, C<Encode>, C<Errno>, C<ExtUtils::MakeMaker>,
-C<Filter::Simple>, C<Hash::Util>, C<Math::BigInt>,
-C<Math::BigInt::FastCalc>, C<Math::BigRat>, C<Module::CoreList>,
-C<PerlIO::scalar>, C<POSIX>, C<Safe>, C<Test::Simple>, C<Tie::Hash>,
-C<Unicode::Collate>, C<XSLoader>
+=item Removed Modules and Pragmata
=back
@@ -8874,6 +8194,8 @@ C<Unicode::Collate>, C<XSLoader>
=over 4
+=item New Documentation
+
=item Changes to Existing Documentation
=back
@@ -8890,23 +8212,25 @@ C<Unicode::Collate>, C<XSLoader>
=item Utility Changes
+=item Configuration and Compilation
+
=item Testing
=item Platform Support
=over 4
-=item Platform-Specific Notes
+=item New Platforms
-VMS
+=item Discontinued Platforms
+
+=item Platform-Specific Notes
=back
=item Internal Changes
-=item Selected Bug Fixes
-
-=item Known Problems
+=item Bug Fixes
=item Acknowledgements
@@ -8916,154 +8240,140 @@ VMS
=back
-=head2 perl5134delta - what is new for perl v5.13.4
+=head2 perl5140delta - what is new for perl v5.14.0
=over 4
=item DESCRIPTION
+=item Notice
+
=item Core Enhancements
=over 4
-=item C<srand()> now returns the seed
-
-=item C<\N{I<name>}> and C<charnames> enhancements
-
-=back
+=item Unicode
-=item Incompatible Changes
+=item Regular Expressions
-=over 4
+=item Syntactical Enhancements
-=item Declare API incompatibility between blead releases
+=item Exception Handling
-=item Check API compatibility when loading XS modules
+=item Other Enhancements
-=item Binary Incompatible with all previous Perls
+C<-d:-foo>, C<-d:-foo=bar>
-=item Change in the parsing of certain prototypes
+=item New C APIs
=back
-=item Deprecations
+=item Security
=over 4
-=item List assignment to C<$[>
+=item User-defined regular expression properties
=back
-=item Performance Enhancements
-
-=item Modules and Pragmata
+=item Incompatible Changes
=over 4
-=item New Modules and Pragmata
-
-=item Updated Modules and Pragmata
-
-C<Archive::Tar>, C<B::Lint>, C<Carp>, C<Compress::Raw::Bzip2>,
-C<Compress::Raw::Zlib>, C<File::Spec>, C<I18N::Langinfo>, C<IO::Compress>,
-C<Module::CoreList>, C<Test::Harness>, C<Test::Simple>,
-C<Unicode::Collate>, C<feature>
-
-=item Removed Modules and Pragmata
+=item Regular Expressions and String Escapes
-=back
+=item Stashes and Package Variables
-=item Documentation
+=item Changes to Syntax or to Perl Operators
-=over 4
+=item Threads and Processes
-=item Changes to Existing Documentation
+=item Configuration
=back
-=item Configuration and Compilation
+=item Deprecations
-=item Testing
+=over 4
-=item Platform Support
+=item Omitting a space between a regular expression and subsequent word
-=over 4
+=item C<\cI<X>>
-=item Platform-Specific Notes
+=item C<"\b{"> and C<"\B{">
-Win32
+=item Perl 4-era .pl libraries
-=back
+=item List assignment to C<$[>
-=item Internal Changes
+=item Use of qw(...) as parentheses
-Removed C<PERL_POLLUTE>, Added C<PERL_STATIC_INLINE>
+=item C<\N{BELL}>
-=item Selected Bug Fixes
+=item C<?PATTERN?>
-=item Known Problems
+=item Tie functions on scalars holding typeglobs
-=item Acknowledgements
+=item User-defined case-mapping
-=item Reporting Bugs
+=item Deprecated modules
-=item SEE ALSO
+L<Devel::DProf>
=back
-=head2 perl5133delta - what is new for perl v5.13.3
+=item Performance Enhancements
=over 4
-=item DESCRIPTION
+=item "Safe signals" optimisation
-=item Core Enhancements
+=item Optimisation of shift() and pop() calls without arguments
-=over 4
+=item Optimisation of regexp engine string comparison work
-=item \o{...} for octals
+=item Regular expression compilation speed-up
-=item C<\N{I<name>}> and C<charnames> enhancements
+=item String appending is 100 times faster
-=item Uppercase X/B allowed in hexadecimal/binary literals
+=item Eliminate C<PL_*> accessor functions under ithreads
-=back
+=item Freeing weak references
-=item Incompatible Changes
+=item Lexical array and hash assignments
-=over 4
+=item C<@_> uses less memory
-=item \400 - \777
+=item Size optimisations to SV and HV structures
-=back
+=item Memory consumption improvements to Exporter
-=item Deprecations
+=item Memory savings for weak references
-=over 4
+=item C<%+> and C<%-> use less memory
-=item Omitting a space between a regular expression and subsequent word
+=item Multiple small improvements to threads
-=item Deprecation warning added for deprecated-in-core .pl libs
+=item Adjacent pairs of nextstate opcodes are now optimized away
=back
-=item Performance Enhancements
-
=item Modules and Pragmata
=over 4
-=item Updated Modules and Pragmata
+=item New Modules and Pragmata
+
+=item Updated Modules and Pragma
+
+much less configuration dialog hassle, support for F<META/MYMETA.json>,
+support for L<local::lib>, support for L<HTTP::Tiny> to reduce the
+dependency on FTP sites, automatic mirror selection, iron out all known
+bugs in configure_requires, support for distributions compressed with
+L<bzip2(1)>, allow F<Foo/Bar.pm> on the command line to mean C<Foo::Bar>,
+charinfo(), charscript(), charblock()
-C<autodie>, C<charnames>, C<lib>, C<threads>, C<threads::shared>,
-C<warnings>, C<Archive::Extract>, C<Archive::Tar>, C<Attribute::Handlers>,
-C<Compress::Raw::Bzip2>, C<Compress::Raw::Zlib>, C<Compress::Zlib>,
-C<CPANPLUS>, C<Digest::MD5>, C<Digest::SHA>, C<Exporter>,
-C<ExtUtils::CBuilder>, C<ExtUtils::Manifest>, C<ExtUtils::ParseXS>,
-C<File::Copy>, C<I18N::LangTags>, C<IPC::Cmd>, C<IPC::SysV>,
-C<Locale::Maketext>, C<Module::Build>, C<Module::CoreList>,
-C<Module::Load>, C<Term::ANSIColor>, C<Test::Harness>, C<Time::HiRes>,
-C<Time::Piece>, C<Unicode::Collate>, C<Unicode::Normalize>
+=item Removed Modules and Pragmata
=back
@@ -9077,226 +8387,115 @@ C<Time::Piece>, C<Unicode::Collate>, C<Unicode::Normalize>
=back
-=item Utility Changes
-
-=item Configuration and Compilation
-
-=item Testing
-
-=item Platform Support
-
-=over 4
-
-=item Discontinued Platforms
-
-MacOS Classic
-
-=item Platform-Specific Notes
-
-Win32
-
-=back
-
-=item Internal Changes
-
-=item Selected Bug Fixes
-
-=item Known Problems
-
-=item Errata
-
-=item Acknowledgements
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl5132delta - what is new for perl v5.13.2
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=over 4
-
-=item localised tied scalars are tied again.
-
-=item Naming fixes in Policy_sh.SH may invalidate Policy.sh
-
-=item Stashes are now always defined
-
-=back
-
-=item Core Enhancements
+=item Diagnostics
=over 4
-=item Non-destructive substitution
-
-=item package block syntax
+=item New Diagnostics
-=item CLONE_PARAMS structure added to ease correct thread creation
+Closure prototype called, Insecure user-defined property %s, panic: gp_free
+failed to free glob pointer - something is repeatedly re-creating entries,
+Parsing code internal error (%s), refcnt: fd %d%s, Regexp modifier "/%c"
+may not appear twice, Regexp modifiers "/%c" and "/%c" are mutually
+exclusive, Using !~ with %s doesn't make sense, "\b{" is deprecated; use
+"\b\{" instead, "\B{" is deprecated; use "\B\{" instead, Operation "%s"
+returns its argument for .., Use of qw(...) as parentheses is deprecated
-=item perl -h no longer recommends -w
+=item Changes to Existing Diagnostics
=back
-=item Modules and Pragmata
-
-=over 4
-
-=item Updated Modules
-
-release 1.94_57, bugfix: treat modules correctly that are deprecated in
-perl 5.12, 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), testfix: solaris
-should run the tests without expect because (some?) solaris have a broken
-expect, testfix: run tests with cache_metadata off to prevent spill over
-effects from previous test runs
+=item Utility Changes
-=back
+=item Configuration and Compilation
-=item Changes to Existing Documentation
+=item Platform Support
=over 4
-=item Replace wrong tr/// table in perlebcdic.pod
-
-=item Document tricks for user-defined casing
+=item New Platforms
-=item Document $# and $* as removed and clarify $#array usage
+AIX
-=item INSTALL explicitly states the requirement for C89
+=item Discontinued Platforms
-=item No longer advertise Math::TrulyRandom
+Apollo DomainOS, MacOS Classic
-=item perlfaq synchronised to upstream
+=item Platform-Specific Notes
=back
-=item Performance Enhancements
+=item Internal Changes
=over 4
-=item Multiple small improvements to threads
-
-=item Size optimisations to SV and HV structures
-
-=item Optimisation of regexp engine string comparison work
-
-=item Memory consumption improvements to Exporter
+=item New APIs
-=back
+=item C API Changes
-=item Installation and Configuration Improvements
+=item Deprecated C APIs
-=over 4
+C<Perl_ptr_table_clear>, C<sv_compile_2op>, C<find_rundefsvoffset>,
+C<CALL_FPTR> and C<CPERLscope>
-=item Compilation improvements
+=item Other Internal Changes
=back
=item Selected Bug Fixes
-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), Don't
-accidentally clone lexicals in scope within active stack frames in the
-parent when creating a child thread (RT #73086) (05d04d), Avoid loading
-feature.pm when 'no 5.13.2;' or similar is encountered (faee19), Trap
-invalid use of SvIVX on SVt_REGEXP when assertions are on (e77da3), Don't
-stamp on $DB::single, $DB::trace and $DB::signal if they already have
-values when $^P is assigned to (RT #72422) (4c0f30), chop now correctly
-handles perl's extended UTF-8 (RT #73246) (65ab92), Defer signal handling
-when shared SV locks are held to avoid deadlocks (RT #74868) (65c742),
-glob() no longer crashes when %File::Glob:: is empty and CORE::GLOBAL::glob
-isn't present (4984aa), 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), 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), Independently, a bug was fixed that prevented
-$tied-E<gt>() from always calling FETCH correctly (RT #8438) (7c7501)
-
-=item Changed Internals
-
-The implementation of sv_dup_inc() has changed from a macro to a function
-
-=item Deprecations
-
-=item Platform Specific Notes
-
=over 4
-=item Recent OpenBSDs now use perl's malloc
-
-=back
-
-=item Acknowledgements
-
-=item Reporting Bugs
+=item I/O
-=item SEE ALSO
+=item Regular Expression Bug Fixes
-=back
+=item Syntax/Parsing Bugs
-=head2 perl5131delta - what is new for perl v5.13.1
+=item Stashes, Globs and Method Lookup
-=over 4
+Aliasing packages by assigning to globs [perl #77358], Deleting packages by
+deleting their containing stash elements, Undefining the glob containing a
+package (C<undef *Foo::>), Undefining an ISA glob (C<undef *Foo::ISA>),
+Deleting an ISA stash element (C<delete $Foo::{ISA}>), Sharing @ISA arrays
+between classes (via C<*Foo::ISA = \@Bar::ISA> or C<*Foo::ISA = *Bar::ISA>)
+[perl #77238]
-=item DESCRIPTION
+=item Unicode
-=item Incompatible Changes
+=item Ties, Overloading and Other Magic
-=over 4
+=item The Debugger
-=item "C<\cI<X>>"
+=item Threads
-=item localised tied hashes, arrays and scalars are no longed tied
+=item Scoping and Subroutines
-=item C<given> return values
+=item Signals
-=back
+=item Miscellaneous Memory Leaks
-=item Core Enhancements
+=item Memory Corruption and Crashes
-=over 4
+=item Fixes to Various Perl Operators
-=item Exception Handling Reliability
+=item Bugs Relating to the C API
=back
-=item Modules and Pragmata
-
-=over 4
+=item Known Problems
-=item Updated Modules
+=item Errata
-C<Errno>, Perl 4 C<.pl> libraries, C<B::Deparse>
+=over 4
-=item Removed Modules and Pragmata
+=item keys(), values(), and each() work on arrays
-C<Class::ISA>, C<Pod::Plainer>, C<Switch>
+=item split() and C<@_>
=back
-=item New Documentation
-
-perlgpl
-
-=item Selected Bug Fixes
-
-=item Changed Internals
-
-=item Deprecations
-
-C<Perl_ptr_table_clear>
+=item Obituary
=item Acknowledgements
@@ -9306,44 +8505,25 @@ C<Perl_ptr_table_clear>
=back
-=head2 perl5130delta - what is new for perl v5.13.0
+=head2 perl5124delta - what is new for perl v5.12.4
=over 4
=item DESCRIPTION
-=item Core Enhancements
-
-=over 4
-
-=item "safe signals" optimization
-
-=item Assignment to C<$0> sets the legacy process name with C<prctl()> on
-Linux
-
-=item Optimization of shift; and pop; calls without arguments
+=item Incompatible Changes
-=back
+=item Selected Bug Fixes
=item Modules and Pragmata
-=over 4
-
-=item Updated Modules
-
-CGI, Data::Dumper, MIME::Base64, threads, threads-shared
-
-=back
-
-=item Installation and Configuration Improvements
-
-=over 4
+=item Testing
-=item Platform Specific Changes
+=item Documentation
-AIX
+=item Platform Specific Notes
-=back
+Linux
=item Acknowledgements
@@ -9725,515 +8905,6 @@ OpenVMS, Stratus VOS, Symbian, Windows
=back
-=head2 perl5115delta - what is new for perl v5.11.5
-
-=over 4
-
-=item DESCRIPTION
-
-=item Core Enhancements
-
-=over 4
-
-=item 32-bit limit on substr arguments removed
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item Pragmata Changes
-
-C<version>
-
-=item Updated Modules
-
-C<B::Debug>, C<CPAN>, C<CPANPLUS::Dist::Build>, C<Pod::Perldoc>,
-C<Pod::Plainer>, C<Safe>, C<Socket>, C<podlators>
-
-=back
-
-=item Changes to Existing Documentation
-
-=item Installation and Configuration Improvements
-
-=over 4
-
-=item Configuration improvements
-
-=back
-
-=item Selected Bug Fixes
-
-=item New or Changed Diagnostics
-
-=item New Tests
-
-F<t/op/filehandle.t>, F<t/op/time_loop.t>
-
-=item Known Problems
-
-=item Acknowledgements
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl5114delta - what is new for perl v5.11.4
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=over 4
-
-=item Version number formats
-
-=back
-
-=item Core Enhancements
-
-=over 4
-
-=item Unicode properties
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item Pragmata Changes
-
-C<less>, C<version>, C<warnings>
-
-=item Updated Modules
-
-C<Archive::Extract>, C<B::Deparse>, C<Compress::Raw::Bzip2>,
-C<Compress::Raw::Zlib>, C<CPAN>, C<File::Fetch>, C<Module::Build>, C<Safe>
-
-=item Removed Modules and Pragmata
-
-C<Devel::DProf::V>
-
-=back
-
-=item Changes to Existing Documentation
-
-=over 4
-
-=item Configuration improvements
-
-=item Platform Specific Changes
-
-VMS
-
-=back
-
-=item Selected Bug Fixes
-
-=item New or Changed Diagnostics
-
-New warning category C<illegalproto>, lvalue attribute ignored after the
-subroutine has been defined
-
-=item Changed Internals
-
-=item Known Problems
-
-=item Deprecations
-
-C<< UNIVERSAL-E<gt>import() >>
-
-=item Acknowledgements
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl5113delta - what is new for perl v5.11.3
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=over 4
-
-=item Filehandles are blessed directly into C<IO::Handle>, as C<FileHandle>
-is merely a wrapper around C<IO::Handle>.
-
-=back
-
-=item Core Enhancements
-
-=over 4
-
-=item Unicode version
-
-=item Unicode properties
-
-=item Regular Expressions
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item Pragmata Changes
-
-C<constant>, C<diagnostics>, C<feature>, C<legacy>, C<threads>, C<warnings>
-
-=item Updated Modules
-
-C<Archive::Extract>, C<CPAN>, C<CPANPLUS>, C<Encode>,
-C<ExtUtils::MakeMaker>, C<File::Path>, C<Module::Build>,
-C<Module::CoreList>, C<POSIX>, C<Pod::Simple>, C<Safe>
-
-=back
-
-=item Utility Changes
-
-F<perlbug>
-
-=item Changes to Existing Documentation
-
-=item Installation and Configuration Improvements
-
-=over 4
-
-=item Testing improvements
-
-It's now possible to override C<PERL5OPT> and friends in F<t/TEST>
-
-=item Platform Specific Changes
-
-Win32, cygwin, Enable IPv6 support on cygwin 1.7 and newer, OpenVMS, Make
--UDEBUGGING the default on VMS for 5.12.0
-
-=back
-
-=item Selected Bug Fixes
-
-=item New or Changed Diagnostics
-
-=item New Tests
-
-t/comp/final_line_num.t, t/comp/form_scope.t, t/comp/line_debug.t,
-t/op/filetest_t.t, t/op/qr.t, t/op/utf8cache.t, t/re/uniprops.t
-
-=item Deprecations
-
-Use of "goto" to jump into a construct is deprecated
-
-=item Acknowledgements
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl5112delta - what is new for perl v5.11.2
-
-=over 4
-
-=item DESCRIPTION
-
-=item Core Enhancements
-
-=over 4
-
-=item qr overloading
-
-=item Pluggable keywords
-
-=item APIs for more internals
-
-=item Overridable function lookup
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item New Modules and Pragmata
-
-C<legacy>
-
-=item Pragmata Changes
-
-C<diagnostics>, C<overload>
-
-=item Updated Modules
-
-C<B::Concise>, C<B::Deparse>, C<Carp>, C<Compress::Zlib>, C<CPANPLUS>,
-C<Encode>, C<ExtUtils::CBuilder>, C<Env>, C<File::Fetch>, C<I8N::Langinfo>,
-C<I8N::LangTags>, C<IO::Compress>, C<IPC::Cmd>, C<List::Util>,
-C<Locale::Maketext>, C<Module::Build>, C<Module::CoreList>, C<Pod::Simple>,
-C<Scalar::Util>, C<Switch>
-
-=back
-
-=item Utility Changes
-
-F<a2p>
-
-=item Performance Enhancements
-
-=item New or Changed Diagnostics
-
-C<Bad plugin affecting keyword '%s'>, C<gmtime(%.0f) too large>, C<Lexing
-code attempted to stuff non-Latin-1 character into Latin-1 input>, C<Lexing
-code internal error (%s)>, C<localtime(%.0f) too large>, C<Overloaded
-dereference did not return a reference>, C<Overloaded qr did not return a
-REGEXP>, C<Perl_pmflag() is deprecated, and will be removed from the XS
-API>, C<Runaway format>
-
-=item Changed Internals
-
-=item New Tests
-
-F<t/op/while_readdir.t>
-
-=item Known Problems
-
-Known test failures on VMS
-
-=item Deprecations
-
-=over 4
-
-=item Use of C<:=> to mean an empty attribute list is now deprecated.
-
-=back
-
-=item Acknowledgements
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl5111delta - what is new for perl v5.11.1
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=item Core Enhancements
-
-=over 4
-
-=item Add C<package NAME VERSION> syntax
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item Updated Modules
-
-=back
-
-=item New Documentation
-
-=item Changes to Existing Documentation
-
-Documentation for C<$1> in perlvar.pod clarified
-
-=item Performance Enhancements
-
-C<if (%foo)> has been optimized to be faster than C<if (keys %foo)>
-
-=item Platform Specific Notes
-
-Darwin (Mac OS X), DragonFly BSD, Win32
-
-=item Selected Bug Fixes
-
-=item New or Changed Diagnostics
-
-=item Testing
-
-=item Known Problems
-
-Untriaged test crashes on Windows 2000, Known test failures on VMS
-
-=item Errata for 5.11.0
-
-The Perl 5.11.0 release notes incorrectly described 'delete local'
-
-=item Acknowledgements
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
-=head2 perl5110delta - what is new for perl v5.11.0
-
-=over 4
-
-=item DESCRIPTION
-
-=item Incompatible Changes
-
-=over 4
-
-=item Unicode interpretation of \w, \d, \s, and the POSIX character classes
-redefined.
-
-=item @INC reorganization
-
-=item Switch statement changes
-
-flip-flop operators, defined-or operator
-
-=item Smart match changes
-
-=item Labels can't be keywords
-
-=item Other incompatible changes
-
-=back
-
-=item Core Enhancements
-
-=over 4
-
-=item Unicode Character Database 5.1.0
-
-=item A proper interface for pluggable Method Resolution Orders
-
-=item The C<overloading> pragma
-
-=item C<\N> regex escape
-
-=item Implicit strictures
-
-=item Parallel tests
-
-=item The C<...> operator
-
-=item DTrace support
-
-=item Support for C<configure_requires> in CPAN module metadata
-
-=item C<each> is now more flexible
-
-=item Y2038 compliance
-
-=item C<$,> flexibility
-
-=item // in where clauses
-
-=item Enabling warnings from your shell environment
-
-=item C<delete local>
-
-=item New support for Abstract namespace sockets
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item Dual-lifed modules moved
-
-=item New Modules and Pragmata
-
-C<autodie>, C<Compress::Raw::Bzip2>, C<parent>, C<Parse::CPAN::Meta>
-
-=item Pragmata Changes
-
-C<overloading>, C<attrs>, C<charnames>, C<feature>, C<mro>
-
-=item Updated Modules
-
-C<ExtUtils::MakeMaker>, C<Test::Harness>, C<UNIVERSAL>
-
-=back
-
-=item Utility Changes
-
-F<h2ph>, F<h2xs>, F<perl5db.pl>, F<perlbug>, F<perlthanks>
-
-=item New Documentation
-
-L<perlhaiku>, L<perlmroapi>, L<perlperf>, L<perlrepository>
-
-=item Changes to Existing Documentation
-
-=item Performance Enhancements
-
-=item Installation and Configuration Improvements
-
-=over 4
-
-=item F<ext/> reorganisation
-
-=item Configuration improvements
-
-=item Compilation improvements
-
-=item Platform Specific Changes
-
-AIX, Cygwin, DomainOS, FreeBSD, Irix, Haiku, MachTen, MiNT, MirOS BSD,
-NetBSD, Stratus VOS, Symbian, Win32, VMS
-
-=back
-
-=item Selected Bug Fixes
-
-=item New or Changed Diagnostics
-
-C<panic: sv_chop %s>, C<Can't locate package %s for the parents of %s>,
-C<v-string in use/require is non-portable>, C<Deep recursion on subroutine
-"%s">
-
-=item Changed Internals
-
-C<SVf_UTF8>, C<SVs_TEMP>
-
-=item New Tests
-
-t/comp/retainedlines.t, t/io/perlio_fail.t, t/io/perlio_leaks.t,
-t/io/perlio_open.t, t/io/perlio.t, t/io/pvbm.t, t/mro/package_aliases.t,
-t/op/dbm.t, t/op/index_thr.t, t/op/pat_thr.t, t/op/qr_gc.t,
-t/op/reg_email_thr.t, t/op/regexp_qr_embed_thr.t,
-t/op/regexp_unicode_prop.t, t/op/regexp_unicode_prop_thr.t,
-t/op/reg_nc_tie.t, t/op/reg_posixcc.t, t/op/re.t, t/op/setpgrpstack.t,
-t/op/substr_thr.t, t/op/upgrade.t, t/uni/lex_utf8.t, t/uni/tie.t
-
-=item Known Problems
-
-=item Deprecations
-
-=item Acknowledgements
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=back
-
=head2 perl5101delta - what is new for perl v5.10.1
=over 4
@@ -10659,765 +9330,6 @@ v-string in use/require is non-portable, perl -V
=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 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 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 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 perl589delta - what is new for perl v5.8.9
=over 4
@@ -12313,363 +10225,7 @@ Win32::GetOSVersion
=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 Tying
-
-=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
+=head2 perl561delta - what's new for perl v5.6.1
=over 4
@@ -13848,6 +11404,58 @@ long, Process terminated by SIG%s
=back
+=head2 perlexperiment - A listing of experimental features in Perl
+
+=over 4
+
+=item DESCRIPTION
+
+=over 4
+
+=item Current experiments
+
+fork() emulation, Weak references, Internal file glob, 64-bit support, die
+accepts a reference, Unicode support, -Dusemultiplicity -Dusethreads, Long
+Doubles Still Don't Work In Solaris, GetOpt::Long Options can now take
+multiple values at once (experimental), 5.005-style threading,
+Test::Harness::Straps, perlcc, C<our> can now have an experimental optional
+attribute C<unique>, Assertions, Linux abstract Unix domain sockets,
+L<Pod::HTML2Pod|Pod::HTML2Pod>, L<Pod::PXML|Pod::PXML>, threads, The <:pop>
+IO pseudolayer, The <:win32> IO pseudolayer, MLDBM, internal functions with
+M flag, lex_start API, internal API for C<%H>, av_create_and_push,
+av_create_and_unshift_one, av_create_and_unshift_one, PL_keyword_plugin,
+hv_iternext_flags, lex_bufutf8, lex_discard_to, lex_grow_linestr,
+lex_next_chunk, lex_peek_unichar, lex_read_space, lex_read_to,
+lex_read_unichar, lex_stuff_pv, lex_stuff_pvn, lex_stuff_pvs, lex_stuff_sv,
+lex_unstuff, parse_fullstmt, parse_stmtseq, PL_parser-E<gt>bufend,
+PL_parser-E<gt>bufptr, PL_parser-E<gt>linestart, PL_parser-E<gt>linestr,
+Perl_signbit, pad_findmy, sv_utf8_decode, sv_utf8_downgrade,
+bytes_from_utf8, bytes_to_utf8, utf8_to_bytes, DB module, The pseudo-hash
+data type, Lvalue subroutines, There is an C<installhtml> target in the
+Makefile, Unicode in Perl on EBCDIC, C<(?{code})>, C<(??{ code })>,
+Backtracking control verbs, Code expressions, conditional expressions, and
+independent expressions in regexes, The C<\N> regex character class,
+gv_try_downgrade, Experimental Support for Sun Studio Compilers for Linux
+OS, Pluggable keywords
+
+=item Accepted features
+
+(none yet identified)
+
+=item Removed features
+
+C<legacy>
+
+=back
+
+=item AUTHORS
+
+=item COPYRIGHT
+
+=item LICENSE
+
+=back
+
=head2 perlartistic - the Perl Artistic License
=over 4
@@ -13891,7 +11499,7 @@ a), b), c), d), a), b), c), d)
=back
-=head2 perlaix, README.aix - Perl version 5 on IBM AIX (UNIX) systems
+=head2 perlaix - Perl version 5 on IBM AIX (UNIX) systems
=over 4
@@ -14015,7 +11623,7 @@ B<Unix emulation for AmigaOS: ixemul.library>, B<Version of Amiga OS>
=back
-=head2 perlbeos, README.beos - Perl version 5.8+ on BeOS
+=head2 perlbeos - Perl version 5.8+ on BeOS
=over 4
@@ -14041,7 +11649,7 @@ B<Unix emulation for AmigaOS: ixemul.library>, B<Version of Amiga OS>
=back
-=head2 perlbs2000, README.BS2000 - building and installing Perl for BS2000.
+=head2 perlbs2000 - building and installing Perl for BS2000.
=over 4
@@ -14102,8 +11710,8 @@ B<Unix emulation for AmigaOS: ixemul.library>, B<Version of Amiga OS>
=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
+celib-sources, Rainer Keuchel's console-sources, go to F<./win32>
+subdirectory, edit file F<./win32/ce-helpers/compile.bat>, run
compile.bat, run compile.bat dist
=back
@@ -14140,7 +11748,7 @@ Rainer Keuchel <coyxc@rainer-keuchel.de>, Vadim Konovalov
=back
-=head2 perlcygwin, README.cygwin - Perl for Cygwin
+=head2 perlcygwin - Perl for Cygwin
=over 4
@@ -14154,7 +11762,7 @@ Rainer Keuchel <coyxc@rainer-keuchel.de>, Vadim Konovalov
=item Cygwin Configuration
-C<PATH>, I<nroff>, Permissions
+C<PATH>, I<nroff>
=back
@@ -14171,8 +11779,8 @@ 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<-Uusedl>, C<-Dusemymalloc>, C<-Uuseperlio>, C<-Dusemultiplicity>,
+C<-Uuse64bitint>, C<-Duselongdouble>, C<-Uuseithreads>, C<-Duselargefiles>,
C<-Dmksymlinks>
=item Suspicious Warnings on Cygwin
@@ -14202,13 +11810,15 @@ Win9x and C<d_eofnblk>, Compiler/Preprocessor defines
=item Script Portability on Cygwin
Pathnames, Text/Binary, PerlIO, F<.exe>, Cygwin vs. Windows process ids,
-Cygwin vs. Windows errors, C<chown()>, Miscellaneous
+Cygwin vs. Windows errors, rebase errors on fork or system, 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>
+C<Cygwin::mount_table()>, C<Cygwin::mount_flags>, C<Cygwin::is_binmount>,
+C<Cygwin::sync_winenv>
=back
@@ -14303,7 +11913,7 @@ DJGPP, Pthreads
=back
-=head2 perlepoc, README.epoc - Perl for EPOC
+=head2 perlepoc - Perl for EPOC
=over 4
@@ -14333,7 +11943,7 @@ DJGPP, Pthreads
=back
-=head2 perlfreebsd, README.freebsd - Perl version 5 on FreeBSD systems
+=head2 perlfreebsd - Perl version 5 on FreeBSD systems
=over 4
@@ -14351,7 +11961,7 @@ DJGPP, Pthreads
=back
-=head2 perlhaiku, README.haiku - Perl version 5.10+ on Haiku
+=head2 perlhaiku - Perl version 5.10+ on Haiku
=over 4
@@ -14365,8 +11975,7 @@ DJGPP, Pthreads
=back
-=head2 perlhpux, README.hpux - Perl version 5 on Hewlett-Packard Unix
-(HP-UX) systems
+=head2 perlhpux - Perl version 5 on Hewlett-Packard Unix (HP-UX) systems
=over 4
@@ -14420,15 +12029,15 @@ DJGPP, Pthreads
=item nss_delete core dump from op/pwent or op/grent
+=item error: pasting ")" and "l" does not give a valid preprocessing token
+
=item Miscellaneous
=item AUTHOR
-=item DATE
-
=back
-=head2 perlhurd, README.hurd - Perl version 5 on Hurd
+=head2 perlhurd - Perl version 5 on Hurd
=over 4
@@ -14444,7 +12053,7 @@ DJGPP, Pthreads
=back
-=head2 perlirix, README.irix - Perl version 5 on Irix systems
+=head2 perlirix - Perl version 5 on Irix systems
=over 4
@@ -14472,7 +12081,7 @@ DJGPP, Pthreads
=back
-=head2 perllinux, README.linux - Perl version 5 on Linux systems
+=head2 perllinux - Perl version 5 on Linux systems
=over 4
@@ -14488,7 +12097,7 @@ DJGPP, Pthreads
=back
-=head2 perlmacos, README.macos - Perl under Mac OS (Classic)
+=head2 perlmacos - Perl under Mac OS (Classic)
=over 4
@@ -14500,7 +12109,7 @@ DJGPP, Pthreads
=back
-=head2 perlmacosx, README.macosx - Perl under Mac OS X
+=head2 perlmacosx - Perl under Mac OS X
=over 4
@@ -14536,7 +12145,7 @@ DJGPP, Pthreads
=back
-=head2 perlmpeix, README.mpeix - Perl/iX for HP e3000 MPE
+=head2 perlmpeix - Perl/iX for HP e3000 MPE
=over 4
@@ -14611,7 +12220,7 @@ SetNWBld.bat, Buildtype.bat
=back
-=head2 perlopenbsd, README.openbsd - Perl version 5 on OpenBSD systems
+=head2 perlopenbsd - Perl version 5 on OpenBSD systems
=over 4
@@ -14905,8 +12514,7 @@ C<COND_WAIT>, F<os2.c>
=back
-=head2 perlos390, README.os390 - building and installing Perl for OS/390
-and z/OS
+=head2 perlos390 - building and installing Perl for OS/390 and z/OS
=over 4
@@ -14954,7 +12562,7 @@ and z/OS
=back
-=head2 perlos400, README.os400 - Perl version 5 on OS/400
+=head2 perlos400 - Perl version 5 on OS/400
=over 4
@@ -15014,7 +12622,7 @@ and z/OS
=back
-=head2 perlqnx, README.qnx - Perl version 5 on QNX
+=head2 perlqnx - Perl version 5 on QNX
=over 4
@@ -15040,7 +12648,7 @@ qnx/ar, qnx/cpp
=back
-=head2 perlriscos, README.riscos - Perl version 5 for RISC OS
+=head2 perlriscos - Perl version 5 for RISC OS
=over 4
@@ -15052,7 +12660,7 @@ qnx/ar, qnx/cpp
=back
-=head2 perlsolaris, README.solaris - Perl version 5 on Solaris systems
+=head2 perlsolaris - Perl version 5 on Solaris systems
=over 4
@@ -15138,7 +12746,7 @@ DATAMODEL_NATIVE specified", sh: ar: not found
=back
-=head2 perlsymbian, README.symbian - Perl version 5 on Symbian OS
+=head2 perlsymbian - Perl version 5 on Symbian OS
=over 4
@@ -15174,8 +12782,8 @@ DATAMODEL_NATIVE specified", sh: ar: not found
=back
-=head2 perltru64, README.tru64 - Perl version 5 on Tru64 (formerly known as
-Digital UNIX formerly known as DEC OSF/1) systems
+=head2 perltru64 - Perl version 5 on Tru64 (formerly known as Digital UNIX
+formerly known as DEC OSF/1) systems
=over 4
@@ -15225,7 +12833,7 @@ Digital UNIX formerly known as DEC OSF/1) systems
=back
-=head2 perlvmesa, README.vmesa - building and installing Perl for VM/ESA.
+=head2 perlvmesa - building and installing Perl for VM/ESA.
=over 4
@@ -15340,7 +12948,7 @@ utime LIST, waitpid PID,FLAGS
=back
-=head2 perlvos, README.vos - Perl for Stratus VOS
+=head2 perlvos - Perl for Stratus VOS
=over 4
@@ -15384,10 +12992,10 @@ L<http://mingw.org>, L<http://mingw-w64.sf.net>
=item Setting Up Perl on Windows
-Make, Command Shell, Borland C++, Microsoft Visual C++, Microsoft Visual
-C++ 2008/2010 Express Edition, Microsoft Visual C++ 2005 Express Edition,
-Microsoft Visual C++ Toolkit 2003, Microsoft Platform SDK 64-bit Compiler,
-MinGW release 3 with gcc
+Make, Command Shell, Microsoft Visual C++, Microsoft Visual C++ 2008/2010
+Express Edition, Microsoft Visual C++ 2005 Express Edition, Microsoft
+Visual C++ Toolkit 2003, Microsoft Platform SDK 64-bit Compiler, MinGW
+release 3 with gcc
=item Building
@@ -15424,12 +13032,1597 @@ Steve Hay E<lt>steve.m.hay@googlemail.comE<gt>
=back
+=head2 perlboot - This document has been deleted
+
+=over 4
+
+=item DESCRIPTION
+
+=back
+
+=head2 perlbot - This document has been deleted
+
+=over 4
+
+=item DESCRIPTION
+
+=back
+
+=head2 perltodo - Perl TO-DO List
+
+=over 4
+
+=item DESCRIPTION
+
+=back
+
+=head2 perltooc - This document has been deleted
+
+=over 4
+
+=item DESCRIPTION
+
+=back
+
+=head2 perltoot - This document has been deleted
+
+=over 4
+
+=item DESCRIPTION
+
+=back
+
=head1 PRAGMA DOCUMENTATION
+=head2 arybase - Set indexing base via $[
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item HISTORY
+
+=item BUGS
+
+=item SEE ALSO
+
+=back
+
+=head2 attributes - get/set subroutine or variable attributes
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=over 4
+
+=item What C<import> does
+
+=item Built-in Attributes
+
+lvalue, method, locked
+
+=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 MORE EXAMPLES
+
+=item SEE ALSO
+
+=back
+
+=head2 autodie - Replace functions with ones that succeed or die with
+lexical scope
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item EXCEPTIONS
+
+=item CATEGORIES
+
+=item FUNCTION SPECIFIC NOTES
+
+=over 4
+
+=item flock
+
+=item system/exec
+
+=back
+
+=item GOTCHAS
+
+=item DIAGNOSTICS
+
+:void cannot be used with lexical scope, No user hints defined for %s
+
+=item BUGS
+
+=over 4
+
+=item autodie and string eval
+
+=item REPORTING BUGS
+
+=back
+
+=item FEEDBACK
+
+=item AUTHOR
+
+=item LICENSE
+
+=item SEE ALSO
+
+=item ACKNOWLEDGEMENTS
+
+=back
+
+=head2 autodie::exception - Exceptions from autodying functions.
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=over 4
+
+=item Common Methods
+
+=back
+
+=back
+
+=over 4
+
+=item Advanced methods
+
+=back
+
+=over 4
+
+=item SEE ALSO
+
+=item LICENSE
+
+=item AUTHOR
+
+=back
+
+=head2 autodie::exception::system - Exceptions from autodying system().
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=back
+
+=over 4
+
+=item stringify
+
+=back
+
+=over 4
+
+=item LICENSE
+
+=item AUTHOR
+
+=back
+
+=head2 autodie::hints - Provide hints about user subroutines to autodie
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=over 4
+
+=item Introduction
+
+=item What are hints?
+
+=item Example hints
+
+=back
+
+=item Manually setting hints from within your program
+
+=item Adding hints to your module
+
+=item Insisting on hints
+
+=back
+
+=over 4
+
+=item Diagnostics
+
+Attempts to set_hints_for unidentifiable subroutine, fail hints cannot be
+provided with either scalar or list hints for %s, %s hint missing for %s
+
+=item ACKNOWLEDGEMENTS
+
+=item AUTHOR
+
+=item LICENSE
+
+=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 CAVEATS
+
+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 CAVEATS
+
+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 Caveat
+
+=item Options
+
+a or accuracy, p or precision, t or trace, l or lib, hex, oct, v or version
+
+=back
+
+=item CAVEATS
+
+in_effect(), hex()/oct()
+
+=item EXAMPLES
+
+=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 NOTICE
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item LIMITATIONS
+
+=item SEE ALSO
+
+=back
+
+=head2 charnames - access to Unicode character names and named character
+sequences; also define character names
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item LOOSE MATCHES
+
+=item ALIASES
+
+=item CUSTOM ALIASES
+
+=item charnames::string_vianame(I<name>)
+
+=item charnames::vianame(I<name>)
+
+=item charnames::viacode(I<code>)
+
+=item CUSTOM TRANSLATORS
+
+=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 SEE ALSO
+
+=item BUGS
+
+=item AUTHORS
+
+=item COPYRIGHT & LICENSE
+
+=back
+
+=head2 deprecate - Perl pragma for deprecating the core version of a module
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=over 4
+
+=item EXPORT
+
+=back
+
+=item SEE ALSO
+
+=item AUTHOR
+
+=item COPYRIGHT AND LICENSE
+
+=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
+
+=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 features
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=over 4
+
+=item Lexical effect
+
+=item C<no feature>
+
+=back
+
+=item AVAILABLE FEATURES
+
+=over 4
+
+=item The 'say' feature
+
+=item The 'state' feature
+
+=item The 'switch' feature
+
+=item The 'unicode_strings' feature
+
+=item The 'unicode_eval' and 'evalbytes' features
+
+=item The 'current_sub' feature
+
+=item The 'array_base' feature
+
+=item The 'fc' 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 inc::latest - use modules bundled in inc/ if they are newer than
+installed ones
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=over 4
+
+=item Special notes on bundling
+
+=back
+
+=item USAGE
+
+=over 4
+
+=item Author-mode
+
+loaded_modules(), write(), bundle_module()
+
+=item As bundled in inc/
+
+=back
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=item SEE ALSO
+
+=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
+
+=item COPYRIGHT AND LICENSE
+
+=back
+
+=head2 locale - Perl pragma to use or 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 Pugs
+
+=item Parrot
+
+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 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 Fundamentals
+
+=item Overloadable Operations
+
+C<not>, C<neg>, C<++>, C<-->, I<Assignments>, I<Non-mutators with a mutator
+variant>, C<int>, I<String, numeric, boolean, and regexp conversions>,
+I<Iteration>, I<File tests>, I<Matching>, I<Dereferencing>, I<Special>
+
+=item Magic Autogeneration
+
+=item Special Keys for C<use overload>
+
+defined, but FALSE, C<undef>, TRUE
+
+=item How Perl Chooses an Operator Implementation
+
+=item Losing Overloading
+
+=item Inheritance and Overloading
+
+Method names in the C<use overload> directive, Overloading of an operation
+is inherited by derived classes
+
+=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
+
+=back
+
+=item IMPLEMENTATION
+
+=item COOKBOOK
+
+=over 4
+
+=item Two-face Scalars
+
+=item Two-face References
+
+=item Symbolic Calculator
+
+=item I<Really> Symbolic Calculator
+
+=back
+
+=item AUTHOR
+
+=item SEE ALSO
+
+=item DIAGNOSTICS
+
+Odd number of arguments for overload::constant, '%s' is not an overloadable
+type, '%s' is not a code reference, overload arg '%s' is invalid
+
+=item BUGS AND PITFALLS
+
+=back
+
+=head2 overloading - perl pragma to lexically control overloading
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+C<no overloading>, C<no overloading @ops>, C<use overloading>, C<use
+overloading @ops>
+
+=back
+
+=head2 parent - Establish an ISA relationship with base classes at compile
+time
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item DIAGNOSTICS
+
+Class 'Foo' tried to inherit from itself
+
+=item HISTORY
+
+=item CAVEATS
+
+=item SEE ALSO
+
+=item AUTHORS AND CONTRIBUTORS
+
+=item MAINTAINER
+
+=item LICENSE
+
+=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 '/flags' 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 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 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, Memory consumption,
+Current working directory, Environment variables, Catching signals,
+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, END blocks
+in threads, Open directory handles, Perl Bugs and the CPAN Version of
+L<threads>
+
+=item REQUIREMENTS
+
+=item SEE ALSO
+
+=item AUTHOR
+
+=item LICENSE
+
+=item ACKNOWLEDGEMENTS
+
+=back
+
+=head2 threads::shared - Perl extension for sharing data structures between
+threads
+
+=over 4
+
+=item VERSION
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item EXPORT
+
+=item FUNCTIONS
+
+share VARIABLE, shared_clone REF, 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
+
+=item LICENSE
+
+=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
+
+=item TYPES OF VERSION OBJECTS
+
+Decimal Versions, Dotted Decimal Versions
+
+=item DECLARING VERSIONS
+
+=over 4
+
+=item How to convert a module from decimal to dotted-decimal
+
+=item How to C<declare()> a dotted-decimal version
+
+=back
+
+=item PARSING AND COMPARING VERSIONS
+
+=over 4
+
+=item How to C<parse()> a version
+
+=item How to check for a legal version string
+
+C<is_lax()>, C<is_strict()>
+
+=item How to compare version objects
+
+=back
+
+=item OBJECT METHODS
+
+=over 4
+
+=item is_alpha()
+
+=item is_qv()
+
+=item normal()
+
+=item numify()
+
+=item stringify()
+
+=back
+
+=item EXPORTED FUNCTIONS
+
+=over 4
+
+=item qv()
+
+=item is_lax()
+
+=item is_strict()
+
+=back
+
+=item AUTHOR
+
+=item SEE ALSO
+
+=back
+
+=head2 version::Internals - Perl extension for Version Objects
+
+=over 4
+
+=item DESCRIPTION
+
+=item WHAT IS A VERSION?
+
+Decimal Versions, Dotted-Decimal Versions
+
+=over 4
+
+=item Decimal Versions
+
+=item Dotted-Decimal Versions
+
+=item Alpha Versions
+
+=item Regular Expressions for Version Parsing
+
+C<$version::LAX>, C<$version::STRICT>, v1.234.5
+
+=back
+
+=item IMPLEMENTATION DETAILS
+
+=over 4
+
+=item Equivalence between Decimal and Dotted-Decimal Versions
+
+=item Quoting Rules
+
+=item What about v-strings?
+
+=item Version Object Internals
+
+original, qv, alpha, version
+
+=item Replacement UNIVERSAL::VERSION
+
+=back
+
+=item USAGE DETAILS
+
+=over 4
+
+=item Using modules that use version.pm
+
+Decimal versions always work, Dotted-Decimal version work sometimes
+
+=item Object Methods
+
+new(), qv(), Normal Form, Numification, Stringification, Comparison
+operators, Logical Operators
+
+=back
+
+=item AUTHOR
+
+=item SEE ALSO
+
+=back
+
+=head2 version::Requirements, Version::Requirements - a set of version
+requirements for a CPAN dist
+
+=over 4
+
+=item VERSION
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item METHODS
+
+=over 4
+
+=item new
+
+=item add_minimum
+
+=item add_maximum
+
+=item add_exclusion
+
+=item exact_version
+
+=item add_requirements
+
+=item accepts_module
+
+=item clear_requirement
+
+=item required_modules
+
+=item clone
+
+=item is_simple
+
+=item is_finalized
+
+=item finalize
+
+=item as_string_hash
+
+=item from_string_hash
+
+=back
+
+=item AUTHOR
+
+=item COPYRIGHT AND LICENSE
+
+=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::fatal_enabled(),
+warnings::fatal_enabled($category), warnings::fatal_enabled($object),
+warnings::warn($message), warnings::warn($category, $message),
+warnings::warn($object, $message), warnings::warnif($message),
+warnings::warnif($category, $message), warnings::warnif($object, $message),
+warnings::register_categories(@names)
+
+=back
+
+=head2 warnings::register - warnings import function
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=back
+
=head1 MODULE DOCUMENTATION
-=head2 C:\perl_tl\perl-5.14.2\lib::AnyDBM_File, AnyDBM_File - provide
-framework for multiple DBMs
+=head2 AnyDBM_File - provide framework for multiple DBMs
=over 4
@@ -15449,8 +14642,7 @@ framework for multiple DBMs
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::App::Cpan, App::Cpan - easily interact
-with CPAN from the command line
+=head2 App::Cpan - easily interact with CPAN from the command line
=over 4
@@ -15497,8 +14689,7 @@ run()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::App::Prove, App::Prove - Implements the
-C<prove> command.
+=head2 App::Prove - Implements the C<prove> command.
=over 4
@@ -15555,8 +14746,7 @@ C<tapversion>, C<trap>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::App::Prove::State, App::Prove::State -
-State storage for the C<prove> command.
+=head2 App::Prove::State - State storage for the C<prove> command.
=over 4
@@ -15619,8 +14809,7 @@ C<new>, C<old>, C<save>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::App::Prove::State::Result,
-App::Prove::State::Result - Individual test suite results.
+=head2 App::Prove::State::Result - Individual test suite results.
=over 4
@@ -15660,8 +14849,7 @@ App::Prove::State::Result - Individual test suite results.
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::App::Prove::State::Result::Test,
-App::Prove::State::Result::Test - Individual test results.
+=head2 App::Prove::State::Result::Test - Individual test results.
=over 4
@@ -15695,8 +14883,7 @@ App::Prove::State::Result::Test - Individual test results.
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Archive::Extract, Archive::Extract - A
-generic archive extracting mechanism
+=head2 Archive::Extract - A generic archive extracting mechanism
=over 4
@@ -15835,8 +15022,7 @@ Mime magic support, Thread safety
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Archive::Tar, Archive::Tar - module for
-manipulations of tar archives
+=head2 Archive::Tar - module for manipulations of tar archives
=over 4
@@ -15858,7 +15044,7 @@ manipulations of tar archives
=item $tar->read ( $filename|$handle, [$compressed, {opt => 'val'}] )
-limit, filter, extract
+limit, filter, md5, extract
=back
@@ -15912,6 +15098,18 @@ limit, filter, extract
=over 4
+=item $tar->chmod( $file, $mode )
+
+=back
+
+=over 4
+
+=item $tar->chown( $file, $uname [, $gname] )
+
+=back
+
+=over 4
+
=item $tar->remove (@filenamelist)
=back
@@ -16080,8 +15278,8 @@ implementations
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Archive::Tar::File, Archive::Tar::File -
-a subclass for in-memory extracted file from Archive::Tar
+=head2 Archive::Tar::File - a subclass for in-memory extracted file from
+Archive::Tar
=over 4
@@ -16162,6 +15360,18 @@ uname, gname, devmajor, devminor, prefix, raw
=over 4
+=item $bool = $file->chmod $mode)
+
+=back
+
+=over 4
+
+=item $bool = $file->chown( $user [, $group])
+
+=back
+
+=over 4
+
=item Convenience methods
$file->is_file, $file->is_dir, $file->is_hardlink, $file->is_symlink,
@@ -16170,8 +15380,7 @@ $file->is_longlink, $file->is_label, $file->is_unknown
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Attribute::Handlers, Attribute::Handlers
-- Simpler definition of attribute handlers
+=head2 Attribute::Handlers - Simpler definition of attribute handlers
=over 4
@@ -16219,8 +15428,7 @@ be able to apply END handler>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::AutoLoader, AutoLoader - load
-subroutines only on demand
+=head2 AutoLoader - load subroutines only on demand
=over 4
@@ -16254,8 +15462,7 @@ subroutines only on demand
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::AutoSplit, AutoSplit - split a package
-for autoloading
+=head2 AutoSplit - split a package for autoloading
=over 4
@@ -16279,7 +15486,7 @@ $keep, $check, $modtime
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::B, B - The Perl Compiler Backend
+=head2 B - The Perl Compiler Backend
=over 4
@@ -16342,7 +15549,7 @@ RV
=item B::PV Methods
-PV, RV, PVX
+PV, RV, PVX, CUR, LEN
=item B::PVMG Methods
@@ -16427,8 +15634,8 @@ redoop, nextop, lastop
=item B::COP Methods
-label, stash, stashpv, file, cop_seq, arybase, line, warnings, io, hints,
-hints_hash
+label, stash, stashpv, stashlen, file, cop_seq, arybase, line, warnings,
+io, hints, hints_hash
=back
@@ -16436,8 +15643,7 @@ hints_hash
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::B::Concise, B::Concise - Walk Perl
-syntax tree, printing concise info about ops
+=head2 B::Concise - Walk Perl syntax tree, printing concise info about ops
=over 4
@@ -16542,8 +15748,7 @@ a{_POSIX_SAVED_IDS}', perl -MB::Concise -e
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::B::Debug, B::Debug - Walk Perl syntax
-tree, printing debug info about ops
+=head2 B::Debug - Walk Perl syntax tree, printing debug info about ops
=over 4
@@ -16559,8 +15764,7 @@ tree, printing debug info about ops
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::B::Deparse, B::Deparse - Perl compiler
-backend to produce perl code
+=head2 B::Deparse - Perl compiler backend to produce perl code
=over 4
@@ -16598,7 +15802,7 @@ strict, $[, bytes, utf8, integer, re, warnings, hint_bits, warning_bits,
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::B::Lint, B::Lint - Perl lint
+=head2 B::Lint - Perl lint
=over 4
@@ -16631,8 +15835,7 @@ validate against older perls
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::B::Lint::Debug, B::Lint::Debug - Adds
-debugging stringification to B::
+=head2 B::Lint::Debug - Adds debugging stringification to B::
=over 4
@@ -16640,8 +15843,7 @@ debugging stringification to B::
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::B::Showlex, B::Showlex - Show lexical
-variables used in functions or files
+=head2 B::Showlex - Show lexical variables used in functions or files
=over 4
@@ -16665,8 +15867,7 @@ variables used in functions or files
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::B::Terse, B::Terse - Walk Perl syntax
-tree, printing terse info about ops
+=head2 B::Terse - Walk Perl syntax tree, printing terse info about ops
=over 4
@@ -16678,8 +15879,7 @@ tree, printing terse info about ops
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::B::Xref, B::Xref - Generates cross
-reference reports for Perl programs
+=head2 B::Xref - Generates cross reference reports for Perl programs
=over 4
@@ -16687,6 +15887,8 @@ reference reports for Perl programs
=item DESCRIPTION
+i, &, s, r
+
=item OPTIONS
C<-oFILENAME>, C<-r>, C<-d>, C<-D[tO]>
@@ -16697,8 +15899,7 @@ C<-oFILENAME>, C<-r>, C<-d>, C<-D[tO]>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Benchmark, Benchmark - benchmark running
-times of Perl code
+=head2 Benchmark - benchmark running times of Perl code
=over 4
@@ -16744,8 +15945,7 @@ disablecache ( ), enablecache ( ), timesum ( T1, T2 )
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CGI, CGI - Handle Common Gateway
-Interface requests and responses
+=head2 CGI - Handle Common Gateway Interface requests and responses
=over 4
@@ -17010,8 +16210,7 @@ MacEachern (dougm@opengroup.org), Robin Houston (robin@oneworld.org),
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CGI::Apache, CGI::Apache - Backward
-compatibility module for CGI.pm
+=head2 CGI::Apache - Backward compatibility module for CGI.pm
=over 4
@@ -17029,8 +16228,8 @@ compatibility module for CGI.pm
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CGI::Carp, B<CGI::Carp> - CGI routines
-for writing to the HTTPD (or other) error log
+=head2 CGI::Carp, B<CGI::Carp> - CGI routines for writing to the HTTPD (or
+other) error log
=over 4
@@ -17066,8 +16265,7 @@ for writing to the HTTPD (or other) error log
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CGI::Cookie, CGI::Cookie - Interface to
-HTTP Cookies
+=head2 CGI::Cookie - Interface to HTTP Cookies
=over 4
@@ -17102,8 +16300,7 @@ B<name()>, B<value()>, B<domain()>, B<path()>, B<expires()>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CGI::Fast, CGI::Fast - CGI Interface for
-Fast CGI
+=head2 CGI::Fast - CGI Interface for Fast CGI
=over 4
@@ -17133,8 +16330,7 @@ FCGI_SOCKET_PATH, FCGI_LISTEN_QUEUE
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CGI::Pretty, CGI::Pretty - module to
-produce nicely formatted HTML code
+=head2 CGI::Pretty - module to produce nicely formatted HTML code
=over 4
@@ -17158,8 +16354,7 @@ produce nicely formatted HTML code
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CGI::Push, CGI::Push - Simple Interface
-to Server Push
+=head2 CGI::Push - Simple Interface to Server Push
=over 4
@@ -17189,8 +16384,7 @@ to Server Push
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CGI::Switch, CGI::Switch - Backward
-compatibility module for defunct CGI::Switch
+=head2 CGI::Switch - Backward compatibility module for defunct CGI::Switch
=over 4
@@ -17208,8 +16402,7 @@ compatibility module for defunct CGI::Switch
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CGI::Util, CGI::Util - Internal
-utilities used by CGI module
+=head2 CGI::Util - Internal utilities used by CGI module
=over 4
@@ -17223,8 +16416,7 @@ utilities used by CGI module
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CORE, CORE - Pseudo-namespace for Perl's
-core routines
+=head2 CORE - Namespace for Perl's core routines
=over 4
@@ -17240,8 +16432,7 @@ core routines
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPAN, CPAN - query, download and build
-perl modules from CPAN sites
+=head2 CPAN - query, download and build perl modules from CPAN sites
=over 4
@@ -17267,6 +16458,8 @@ and the C<fforce> pragma, Lockfile, Signals
=item mkmyconfig
+=item r [Module|/Regexp/]...
+
=item recent ***EXPERIMENTAL COMMAND***
=item recompile
@@ -17275,7 +16468,7 @@ and the C<fforce> pragma, Lockfile, Signals
=item smoke ***EXPERIMENTAL COMMAND***
-=item upgrade [Module|/Regex/]...
+=item upgrade [Module|/Regexp/]...
=item The four C<CPAN::*> Classes: Author, Bundle, Module, Distribution
@@ -17464,8 +16657,7 @@ http firewall, ftp firewall, One-way visibility, SOCKS, IP Masquerade
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPAN::API::HOWTO, CPAN::API::HOWTO - a
-recipe book for programming with CPAN.pm
+=head2 CPAN::API::HOWTO - a recipe book for programming with CPAN.pm
=over 4
@@ -17487,12 +16679,11 @@ recipe book for programming with CPAN.pm
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPAN::Distroprefs, CPAN::Distroprefs --
-read and match distroprefs
+=head2 CPAN::Distroprefs -- read and match distroprefs
=over 4
-=item SYNOPSIS
+=item SYNOPSIS
=item DESCRIPTION
@@ -17513,14 +16704,13 @@ files remain to be found
=back
-=item PREFS
+=item PREFS
=item LICENSE
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPAN::FirstTime, CPAN::FirstTime -
-Utility for CPAN::Config file Initialization
+=head2 CPAN::FirstTime - Utility for CPAN::Config file Initialization
=over 4
@@ -17551,8 +16741,7 @@ use_sqlite, version_timeout, yaml_load_code, yaml_module
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPAN::Kwalify, CPAN::Kwalify - Interface
-between CPAN.pm and Kwalify.pm
+=head2 CPAN::Kwalify - Interface between CPAN.pm and Kwalify.pm
=over 4
@@ -17568,8 +16757,7 @@ _validate($schema_name, $data, $file, $doc), yaml($schema_name)
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPAN::Meta, CPAN::Meta - the
-distribution metadata for a CPAN dist
+=head2 CPAN::Meta - the distribution metadata for a CPAN dist
=over 4
@@ -17625,14 +16813,24 @@ distribution metadata for a CPAN dist
=item SEE ALSO
+=item SUPPORT
+
+=over 4
+
+=item Bugs / Feature Requests
+
+=item Source Code
+
+=back
+
=item AUTHORS
=item COPYRIGHT AND LICENSE
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPAN::Meta::Converter,
-CPAN::Meta::Converter - Convert CPAN distribution metadata structures
+=head2 CPAN::Meta::Converter - Convert CPAN distribution metadata
+structures
=over 4
@@ -17660,8 +16858,8 @@ CPAN::Meta::Converter - Convert CPAN distribution metadata structures
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPAN::Meta::Feature, CPAN::Meta::Feature
-- an optional feature provided by a CPAN distribution
+=head2 CPAN::Meta::Feature - an optional feature provided by a CPAN
+distribution
=over 4
@@ -17691,8 +16889,7 @@ CPAN::Meta::Converter - Convert CPAN distribution metadata structures
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPAN::Meta::History, CPAN::Meta::History
-- history of CPAN Meta Spec changes
+=head2 CPAN::Meta::History - history of CPAN Meta Spec changes
=over 4
@@ -17724,8 +16921,8 @@ CPAN::Meta::Converter - Convert CPAN distribution metadata structures
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPAN::Meta::Prereqs, CPAN::Meta::Prereqs
-- a set of distribution prerequisites by phase and type
+=head2 CPAN::Meta::Prereqs - a set of distribution prerequisites by phase
+and type
=over 4
@@ -17761,8 +16958,64 @@ CPAN::Meta::Converter - Convert CPAN distribution metadata structures
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPAN::Meta::Spec, CPAN::Meta::Spec -
-specification for CPAN distribution metadata
+=head2 CPAN::Meta::Requirements - a set of version requirements for a CPAN
+dist
+
+=over 4
+
+=item VERSION
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item METHODS
+
+=over 4
+
+=item new
+
+=item add_minimum
+
+=item add_maximum
+
+=item add_exclusion
+
+=item exact_version
+
+=item add_requirements
+
+=item accepts_module
+
+=item clear_requirement
+
+=item required_modules
+
+=item clone
+
+=item is_simple
+
+=item is_finalized
+
+=item finalize
+
+=item as_string_hash
+
+=item add_string_requirement
+
+>= 1.3, <= 1.3, ! 1.3, > 1.3, < 1.3, >= 1.3, ! 1.5, <= 2.0
+
+=item from_string_hash
+
+=back
+
+=item AUTHORS
+
+=item COPYRIGHT AND LICENSE
+
+=back
+
+=head2 CPAN::Meta::Spec - specification for CPAN distribution metadata
=over 4
@@ -17862,8 +17115,8 @@ conflicts
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPAN::Meta::Validator,
-CPAN::Meta::Validator - validate CPAN distribution metadata structures
+=head2 CPAN::Meta::Validator - validate CPAN distribution metadata
+structures
=over 4
@@ -17885,12 +17138,8 @@ CPAN::Meta::Validator - validate CPAN distribution metadata structures
=item Check Methods
-check_map($spec,$data)
-
=item Validator Methods
-header($self,$key,$value)
-
=back
=item BUGS
@@ -17901,8 +17150,8 @@ header($self,$key,$value)
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPAN::Meta::YAML, CPAN::Meta::YAML -
-Read and write a subset of YAML for CPAN Meta files
+=head2 CPAN::Meta::YAML - Read and write a subset of YAML for CPAN Meta
+files
=over 4
@@ -17916,14 +17165,61 @@ Read and write a subset of YAML for CPAN Meta files
=item SEE ALSO
+=item SUPPORT
+
+=over 4
+
+=item Bugs / Feature Requests
+
+=item Source Code
+
+=back
+
=item AUTHORS
=item COPYRIGHT AND LICENSE
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPAN::Nox, CPAN::Nox - Wrapper around
-CPAN.pm without using any XS module
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=back
+
+new( LOCAL_FILE_NAME )
+
+continents()
+
+countries( [CONTINENTS] )
+
+mirrors( [COUNTRIES] )
+
+get_mirrors_by_countries( [COUNTRIES] )
+
+get_mirrors_by_continents( [CONTINENTS] )
+
+get_countries_by_continents( [CONTINENTS] )
+
+best_mirrors
+
+get_n_random_mirrors_by_continents( N, [CONTINENTS]
+
+get_mirrors_timings( MIRROR_LIST, SEEN, CALLBACK );
+
+find_best_continents( HASH_REF );
+
+=over 4
+
+=item AUTHOR
+
+=item LICENSE
+
+=back
+
+=head2 CPAN::Nox - Wrapper around CPAN.pm without using any XS module
=over 4
@@ -17937,8 +17233,7 @@ CPAN.pm without using any XS module
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPAN::Version, CPAN::Version - utility
-functions to compare CPAN versions
+=head2 CPAN::Version - utility functions to compare CPAN versions
=over 4
@@ -17950,8 +17245,7 @@ functions to compare CPAN versions
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS, CPANPLUS - API & CLI access to
-the CPAN mirrors
+=head2 CPANPLUS - API & CLI access to the CPAN mirrors
=over 4
@@ -18012,11 +17306,11 @@ the CPAN mirrors
=item CONTACT INFORMATION
Bug reporting: I<bug-cpanplus@rt.cpan.org>, Questions & suggestions:
-I<cpanplus-devel@lists.sourceforge.net>
+I<bug-cpanplus@rt.cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Backend, CPANPLUS::Backend
+=head2 CPANPLUS::Backend - programmer's interface to CPANPLUS
=over 4
@@ -18090,9 +17384,9 @@ verbose => BOOL] )
=item $mod_obj = $cb->parse_module( module =>
$modname|$distname|$modobj|URI|PATH )
-Text::Bastardize, Text-Bastardize, Text-Bastardize-1.06,
-AYRNIEU/Text-Bastardize, AYRNIEU/Text-Bastardize-1.06,
-AYRNIEU/Text-Bastardize-1.06.tar.gz,
+Text::Bastardize, Text-Bastardize, Text/Bastardize.pm,
+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, /tmp/Text-Bastardize-1.06,
./Text-Bastardize-1.06
@@ -18193,8 +17487,7 @@ BOOL] );
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Backend::RV,
-CPANPLUS::Backend::RV
+=head2 CPANPLUS::Backend::RV - return value objects
=over 4
@@ -18225,7 +17518,8 @@ ok, args, rv, function
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Config, CPANPLUS::Config
+=head2 CPANPLUS::Config - configuration defaults and heuristics for
+CPANPLUS
=over 4
@@ -18245,6 +17539,10 @@ hosts
=back
+allow_build_interactivity
+
+allow_unknown_prereqs
+
base
buildflags
@@ -18259,6 +17557,8 @@ dist_type
email
+enable_custom_sources
+
extractdir
fetchdir
@@ -18305,6 +17605,12 @@ source_engine
cpantest_reporter_args
+=over 4
+
+=item Section 'program'
+
+=back
+
editor
make
@@ -18329,7 +17635,7 @@ perlwrapper
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Configure, CPANPLUS::Configure
+=head2 CPANPLUS::Configure - configuration for CPANPLUS
=over 4
@@ -18404,7 +17710,7 @@ _set|_get_mirror, _set|_get_fetch
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Dist, CPANPLUS::Dist
+=head2 CPANPLUS::Dist - base class for plugins
=over 4
@@ -18466,8 +17772,8 @@ $version_spec )
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Dist::Autobundle,
-CPANPLUS::Dist::Autobundle
+=head2 CPANPLUS::Dist::Autobundle - distribution class for installation
+snapshots
=over 4
@@ -18477,8 +17783,7 @@ CPANPLUS::Dist::Autobundle
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Dist::Base,
-CPANPLUS::Dist::Base - Base class for custom distribution classes
+=head2 CPANPLUS::Dist::Base - Base class for custom distribution classes
=over 4
@@ -18534,8 +17839,7 @@ CPANPLUS::Dist::Base - Base class for custom distribution classes
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Dist::Build,
-CPANPLUS::Dist::Build - CPANPLUS plugin to install packages that use
+=head2 CPANPLUS::Dist::Build - CPANPLUS plugin to install packages that use
Build.PL
=over 4
@@ -18602,8 +17906,8 @@ prereq_target => TARGET, force => BOOL, verbose => BOOL, skiptest => BOOL])
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Dist::Build::Constants,
-CPANPLUS::Dist::Build::Constants - Constants for CPANPLUS::Dist::Build
+=head2 CPANPLUS::Dist::Build::Constants - Constants for
+CPANPLUS::Dist::Build
=over 4
@@ -18617,7 +17921,8 @@ CPANPLUS::Dist::Build::Constants - Constants for CPANPLUS::Dist::Build
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Dist::MM, CPANPLUS::Dist::MM
+=head2 CPANPLUS::Dist::MM - distribution class for MakeMaker related
+modules
=over 4
@@ -18629,7 +17934,7 @@ CPANPLUS::Dist::Build::Constants - Constants for CPANPLUS::Dist::Build
parent(), status()
-=item STATUS ACCESSORS
+=item STATUS ACCESSORS
makefile (), make (), test (), prepared (), distdir (), created (),
installed (), uninstalled (), _create_args (), _install_args ()
@@ -18689,8 +17994,8 @@ skiptest => BOOL, force => BOOL, verbose => BOOL])
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Dist::Sample,
-CPANPLUS::Dist::Sample -- Sample code to create your own Dist::* plugin
+=head2 CPANPLUS::Dist::Sample -- Sample code to create your own Dist::*
+plugin
=over 4
@@ -18698,7 +18003,7 @@ CPANPLUS::Dist::Sample -- Sample code to create your own Dist::* plugin
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Error, CPANPLUS::Error
+=head2 CPANPLUS::Error - error handling for CPANPLUS
=over 4
@@ -18742,7 +18047,9 @@ $ERROR_FH, $MSG_FH
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::FAQ, CPANPLUS::FAQ
+=head2 CPANPLUS::FAQ - CPANPLUS Frequently Asked Questions
+
+=head2 CPANPLUS::FAQ
=over 4
@@ -18756,7 +18063,7 @@ $ERROR_FH, $MSG_FH
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Hacking, CPANPLUS::Hacking
+=head2 CPANPLUS::Hacking - developing CPANPLUS
=over 4
@@ -18782,12 +18089,12 @@ the test suite to test for the bug, [OPTIONAL] A patch to the code + tests
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@lists.sourceforge.net, With subject containing C<[PATCH]> +
-description of the patch
+bug-cpanplus@rt.cpan.org, With subject containing C<[PATCH]> + description
+of the patch
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Internals, CPANPLUS::Internals
+=head2 CPANPLUS::Internals - CPANPLUS internals
=over 4
@@ -18849,8 +18156,7 @@ edit_test_report, proceed_on_test_failure, munge_dist_metafile
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Internals::Extract,
-CPANPLUS::Internals::Extract
+=head2 CPANPLUS::Internals::Extract - internals for archive extraction
=over 4
@@ -18872,8 +18178,7 @@ module, extractdir, prefer_bin, perl, verbose, force
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Internals::Fetch,
-CPANPLUS::Internals::Fetch
+=head2 CPANPLUS::Internals::Fetch - internals for fetching files
=over 4
@@ -18901,8 +18206,7 @@ BOOL, prefer_bin => BOOL, ttl => $seconds] )
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Internals::Report,
-CPANPLUS::Internals::Report
+=head2 CPANPLUS::Internals::Report - internals for sending test reports
=over 4
@@ -18939,8 +18243,7 @@ module, buffer, failed, save, address, verbose, force
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Internals::Search,
-CPANPLUS::Internals::Search
+=head2 CPANPLUS::Internals::Search - internals for searching for modules
=over 4
@@ -18976,8 +18279,7 @@ type, allow, data
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Internals::Source,
-CPANPLUS::Internals::Source
+=head2 CPANPLUS::Internals::Source - internals for updating source files
=over 4
@@ -19061,7 +18363,7 @@ uptodate, path, verbose
=over 4
=item $file = $cb->_add_custom_module_source( uri => URI, [verbose => BOOL]
-);
+);
=back
@@ -19074,7 +18376,7 @@ uptodate, path, verbose
=over 4
=item $file = $cb->_remove_custom_module_source( uri => URI, [verbose =>
-BOOL] );
+BOOL] );
=back
@@ -19092,7 +18394,7 @@ BOOL] );
=over 4
-=item $ok = $cb->__update_custom_module_source
+=item $ok = $cb->__update_custom_module_source
=back
@@ -19105,12 +18407,11 @@ BOOL] );
=over 4
-=item $bool = $cb->__create_custom_module_entries( [verbose => BOOL] )
+=item $bool = $cb->__create_custom_module_entries( [verbose => BOOL] )
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Internals::Source::Memory,
-CPANPLUS::Internals::Source::Memory - In memory implementation
+=head2 CPANPLUS::Internals::Source::Memory - In memory implementation
=over 4
@@ -19129,11 +18430,9 @@ path, verbose
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Internals::Source::SQLite,
-CPANPLUS::Internals::Source::SQLite - SQLite implementation
+=head2 CPANPLUS::Internals::Source::SQLite - SQLite implementation
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Internals::Utils,
-CPANPLUS::Internals::Utils
+=head2 CPANPLUS::Internals::Utils - convenience functions for CPANPLUS
=over 4
@@ -19237,7 +18536,7 @@ PACKAGE_STRING );
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Module, CPANPLUS::Module
+=head2 CPANPLUS::Module - CPAN module objects for CPANPLUS
=over 4
@@ -19430,6 +18729,10 @@ prefer_bin => BOOL, force => BOOL, verbose => BOOL, ..... ]);
=item $bool = $self->add_to_includepath;
+=back
+
+=over 4
+
=item $path = $self->best_path_to_module_build();
=back
@@ -19444,8 +18747,7 @@ prefer_bin => BOOL, force => BOOL, verbose => BOOL, ..... ]);
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Module::Author,
-CPANPLUS::Module::Author
+=head2 CPANPLUS::Module::Author - CPAN author object for CPANPLUS
=over 4
@@ -19496,8 +18798,7 @@ author, cpanid, email, parent
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Module::Author::Fake,
-CPANPLUS::Module::Author::Fake
+=head2 CPANPLUS::Module::Author::Fake - dummy author object for CPANPLUS
=over 4
@@ -19515,8 +18816,8 @@ CPANPLUS::Module::Author::Fake
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Module::Checksums,
-CPANPLUS::Module::Checksums
+=head2 CPANPLUS::Module::Checksums - checking the checksum of a
+distribution
=over 4
@@ -19534,8 +18835,7 @@ CPANPLUS::Module::Checksums
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Module::Fake,
-CPANPLUS::Module::Fake
+=head2 CPANPLUS::Module::Fake - fake module object for internal use
=over 4
@@ -19553,8 +18853,7 @@ CPANPLUS::Module::Fake
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Selfupdate,
-CPANPLUS::Selfupdate
+=head2 CPANPLUS::Selfupdate - self-updating for CPANPLUS
=over 4
@@ -19576,6 +18875,12 @@ CPANPLUS::Selfupdate
=over 4
+=item @cat = $self->list_categories
+
+=back
+
+=over 4
+
=item %list = $self->list_modules_to_update( update =>
"core|dependencies|enabled_features|features|all", [latest => BOOL] )
@@ -19647,7 +18952,7 @@ CPANPLUS::Selfupdate
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Shell, CPANPLUS::Shell
+=head2 CPANPLUS::Shell - base class for CPANPLUS shells
=over 4
@@ -19669,8 +18974,7 @@ CPANPLUS::Selfupdate
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Shell::Classic,
-CPANPLUS::Shell::Classic - CPAN.pm emulation for CPANPLUS
+=head2 CPANPLUS::Shell::Classic - CPAN.pm emulation for CPANPLUS
=over 4
@@ -19692,8 +18996,7 @@ CPANPLUS::Shell::Classic - CPAN.pm emulation for CPANPLUS
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Shell::Default,
-CPANPLUS::Shell::Default
+=head2 CPANPLUS::Shell::Default - the default CPANPLUS shell
=over 4
@@ -19715,9 +19018,8 @@ CPANPLUS::Shell::Default
=back
-=head2
-C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Shell::Default::Plugins::CustomSource
-, CPANPLUS::Shell::Default::Plugins::CustomSource
+=head2 CPANPLUS::Shell::Default::Plugins::CustomSource - add custom sources
+to CPANPLUS
=over 4
@@ -19727,15 +19029,15 @@ C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Shell::Default::Plugins::CustomSource
=back
-=head2
-C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Shell::Default::Plugins::HOWTO,
-CPANPLUS::Shell::Default::Plugins::HOWTO -- documentation on how to write
-your own plugins
+=head2 CPANPLUS::Shell::Default::Plugins::HOWTO -- documentation on how to
+write your own plugins
=over 4
=item SYNOPSIS
+=item DESCRIPTION
+
=item HOWTO
=over 4
@@ -19765,9 +19067,8 @@ from the user, Options -- A hashref of options provided by the user
=back
-=head2
-C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Shell::Default::Plugins::Remote,
-CPANPLUS::Shell::Default::Plugins::Remote
+=head2 CPANPLUS::Shell::Default::Plugins::Remote - connect to a remote
+CPANPLUS
=over 4
@@ -19789,9 +19090,8 @@ CPANPLUS::Shell::Default::Plugins::Remote
=back
-=head2
-C:\perl_tl\perl-5.14.2\lib::CPANPLUS::Shell::Default::Plugins::Source,
-CPANPLUS::Shell::Default::Plugins::Source
+=head2 CPANPLUS::Shell::Default::Plugins::Source - read in CPANPLUS
+commands
=over 4
@@ -19813,8 +19113,7 @@ CPANPLUS::Shell::Default::Plugins::Source
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Carp, Carp - alternative warn and die
-for modules
+=head2 Carp - alternative warn and die for modules
=over 4
@@ -19852,10 +19151,17 @@ for modules
=item BUGS
+=item SEE ALSO
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=item LICENSE
+
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Class::Struct, Class::Struct - declare
-struct-like datatypes as Perl classes
+=head2 Class::Struct - declare struct-like datatypes as Perl classes
=over 4
@@ -19886,8 +19192,8 @@ Example 1, Example 2, Example 3
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Compress::Raw::Bzip2,
-Compress::Raw::Bzip2 - Low-Level Interface to bzip2 compression library
+=head2 Compress::Raw::Bzip2 - Low-Level Interface to bzip2 compression
+library
=over 4
@@ -19948,8 +19254,8 @@ B<$verbosity>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Compress::Raw::Zlib, Compress::Raw::Zlib
-- Low-Level Interface to zlib compression library
+=head2 Compress::Raw::Zlib - Low-Level Interface to zlib compression
+library
=over 4
@@ -20042,12 +19348,26 @@ B<-ADLER32>, B<-ConsumeInput>, B<-LimitOutput>
=item my $version = Compress::Raw::Zlib::zlib_version();
+=item my $flags = Compress::Raw::Zlib::zlibCompileFlags();
+
=back
=item The LimitOutput option.
=item ACCESSING ZIP FILES
+=item FAQ
+
+=over 4
+
+=item Compatibility with Unix compress/uncompress.
+
+=item Accessing .tar.Z files
+
+=item Zlib Library Version Support
+
+=back
+
=item CONSTANTS
=item SEE ALSO
@@ -20060,8 +19380,7 @@ B<-ADLER32>, B<-ConsumeInput>, B<-LimitOutput>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Compress::Zlib, Compress::Zlib -
-Interface to zlib compression library
+=head2 Compress::Zlib - Interface to zlib compression library
=over 4
@@ -20176,8 +19495,7 @@ B<-WindowBits>, B<-Bufsize>, B<-Dictionary>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Config, Config - access Perl
-configuration information
+=head2 Config - access Perl configuration information
=over 4
@@ -20288,20 +19606,21 @@ 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_gmtime64>, 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_inetntop>, C<d_inetpton>, 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_localtime64>, 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_mktime64>,
-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_ndbm>, C<d_ndbm_h_uses_prototypes>, C<d_nice>, C<d_nl_langinfo>,
+C<d_inetaton>, C<d_inetntop>, C<d_inetpton>, C<d_int64_t>, C<d_ipv6_mreq>,
+C<d_isascii>, C<d_isblank>, 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_localtime64>, 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_mktime64>, 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_ndbm>,
+C<d_ndbm_h_uses_prototypes>, 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>,
@@ -20328,31 +19647,32 @@ 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_sin6_scope_id>, C<d_sitearch>, C<d_snprintf>, C<d_sockaddr_sa_len>,
-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_static_inline>,
-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_timegm>, 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<dtrace>, C<dynamic_ext>
+C<d_sin6_scope_id>, C<d_sitearch>, C<d_snprintf>, C<d_sockaddr_in6>,
+C<d_sockaddr_sa_len>, 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_static_inline>, 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_timegm>,
+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<dtrace>, C<dynamic_ext>
=over 4
@@ -20416,12 +19736,12 @@ C<i_libutil>, C<i_limits>, C<i_locale>, C<i_machcthr>, C<i_malloc>,
C<i_mallocmalloc>, 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_syspoll>,
-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_shadow>, C<i_socks>, C<i_stdarg>, C<i_stdbool>, 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_syspoll>, 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>,
@@ -20452,13 +19772,13 @@ C<known_extensions>, C<ksh>
=back
-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>
+C<ld>, C<ld_can_script>, 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>
=over 4
@@ -20557,10 +19877,10 @@ 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>
+C<sSCNfldbl>, C<ssizetype>, C<st_ino_sign>, C<st_ino_size>, 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>
=over 4
@@ -20582,13 +19902,13 @@ 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<usedevel>, C<usedl>, C<usedtrace>,
-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>
+C<usefaststdio>, C<useithreads>, C<usekernprocpathname>, C<uselargefiles>,
+C<uselongdouble>, C<usemallocwrap>, C<usemorebits>, C<usemultiplicity>,
+C<usemymalloc>, C<usenm>, C<usensgetexecutablepath>, 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>
=over 4
@@ -20648,8 +19968,7 @@ dynamic, nonxs, static
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Cwd, Cwd - get pathname of current
-working directory
+=head2 Cwd - get pathname of current working directory
=over 4
@@ -20681,8 +20000,7 @@ abs_path, realpath, fast_abs_path
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::DB, DB - programmatic interface to the
-Perl debugging API
+=head2 DB - programmatic interface to the Perl debugging API
=over 4
@@ -20717,8 +20035,7 @@ CLIENT->output(LIST)
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::DBM_Filter, DBM_Filter -- Filter DBM
-keys/values
+=head2 DBM_Filter -- Filter DBM keys/values
=over 4
@@ -20783,8 +20100,7 @@ utf8, encode, compress, int32, null
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::DBM_Filter::compress,
-DBM_Filter::compress - filter for DBM_Filter
+=head2 DBM_Filter::compress - filter for DBM_Filter
=over 4
@@ -20798,8 +20114,7 @@ DBM_Filter::compress - filter for DBM_Filter
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::DBM_Filter::encode, DBM_Filter::encode -
-filter for DBM_Filter
+=head2 DBM_Filter::encode - filter for DBM_Filter
=over 4
@@ -20813,8 +20128,7 @@ filter for DBM_Filter
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::DBM_Filter::int32, DBM_Filter::int32 -
-filter for DBM_Filter
+=head2 DBM_Filter::int32 - filter for DBM_Filter
=over 4
@@ -20828,8 +20142,7 @@ filter for DBM_Filter
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::DBM_Filter::null, DBM_Filter::null -
-filter for DBM_Filter
+=head2 DBM_Filter::null - filter for DBM_Filter
=over 4
@@ -20843,8 +20156,7 @@ filter for DBM_Filter
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::DBM_Filter::utf8, DBM_Filter::utf8 -
-filter for DBM_Filter
+=head2 DBM_Filter::utf8 - filter for DBM_Filter
=over 4
@@ -20858,8 +20170,8 @@ filter for DBM_Filter
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Data::Dumper, Data::Dumper - stringified
-perl data structures, suitable for both printing and C<eval>
+=head2 Data::Dumper - stringified perl data structures, suitable for both
+printing and C<eval>
=over 4
@@ -20906,31 +20218,7 @@ Dumper
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Devel::DProf, Devel::DProf - a
-B<DEPRECATED> Perl code profiler
-
-=over 4
-
-=item SYNOPSIS
-
-=item ACHTUNG!
-
-=item DESCRIPTION
-
-=item PROFILE FORMAT
-
-=item AUTOLOAD
-
-=item ENVIRONMENT
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::Devel::InnerPackage, Devel::InnerPackage
-- find all the inner packages of a package
+=head2 Devel::InnerPackage - find all the inner packages of a package
=over 4
@@ -20958,8 +20246,7 @@ B<DEPRECATED> Perl code profiler
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Devel::PPPort, Devel::PPPort -
-Perl/Pollution/Portability
+=head2 Devel::PPPort - Perl/Pollution/Portability
=over 4
@@ -20993,10 +20280,13 @@ Perl/Pollution/Portability
=item Perl API not supported by ppport.h
-perl 5.11.0, perl 5.10.0, 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
+perl 5.14.0, perl 5.13.10, perl 5.13.8, perl 5.13.7, perl 5.13.6, perl
+5.13.5, perl 5.13.4, perl 5.13.3, perl 5.13.2, perl 5.13.1, perl 5.11.5,
+perl 5.11.4, perl 5.11.2, perl 5.11.1, perl 5.11.0, perl 5.10.1, perl
+5.10.0, 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
@@ -21010,8 +20300,7 @@ perl 5.004_05, perl 5.004
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Devel::Peek, Devel::Peek - A data
-debugging tool for the XS programmer
+=head2 Devel::Peek - A data debugging tool for the XS programmer
=over 4
@@ -21061,8 +20350,7 @@ debugging tool for the XS programmer
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Devel::SelfStubber, Devel::SelfStubber -
-generate stubs for a SelfLoading module
+=head2 Devel::SelfStubber - generate stubs for a SelfLoading module
=over 4
@@ -21072,8 +20360,7 @@ generate stubs for a SelfLoading module
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Digest, Digest - Modules that calculate
-message digests
+=head2 Digest - Modules that calculate message digests
=over 4
@@ -21099,8 +20386,7 @@ $io_handle ), $ctx->add_bits( $data, $nbits ), $ctx->add_bits( $bitstring
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Digest::MD5, Digest::MD5 - Perl
-interface to the MD5 Algorithm
+=head2 Digest::MD5 - Perl interface to the MD5 Algorithm
=over 4
@@ -21128,8 +20414,7 @@ $md5->add_bits($bitstring), $md5->digest, $md5->hexdigest, $md5->b64digest
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Digest::SHA, Digest::SHA - Perl
-extension for SHA-1/224/256/384/512
+=head2 Digest::SHA - Perl extension for SHA-1/224/256/384/512
=over 4
@@ -21184,8 +20469,7 @@ B<hmac_sha512256_base64($data, $key)>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Digest::base, Digest::base - Digest base
-class
+=head2 Digest::base - Digest base class
=over 4
@@ -21197,8 +20481,7 @@ class
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Digest::file, Digest::file - Calculate
-digests of files
+=head2 Digest::file - Calculate digests of files
=over 4
@@ -21214,8 +20497,7 @@ $algorithm, [$arg,...] ), digest_file_base64( $file, $algorithm, [$arg,...]
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::DirHandle, DirHandle - supply object
-methods for directory handles
+=head2 DirHandle - supply object methods for directory handles
=over 4
@@ -21225,8 +20507,7 @@ methods for directory handles
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Dumpvalue, Dumpvalue - provides screen
-dump of Perl data.
+=head2 Dumpvalue - provides screen dump of Perl data.
=over 4
@@ -21252,8 +20533,7 @@ compactDump, veryCompact, set, get
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::DynaLoader, DynaLoader - Dynamically
-load C libraries into Perl code
+=head2 DynaLoader - Dynamically load C libraries into Perl code
=over 4
@@ -21271,7 +20551,7 @@ dl_install_xsub(), bootstrap()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode, Encode - character encodings
+=head2 Encode - character encodings in Perl
=over 4
@@ -21291,10 +20571,10 @@ dl_install_xsub(), bootstrap()
=back
-=item PERL ENCODING API
+=item THE PERL ENCODING API
-$octets = encode(ENCODING, $string [, CHECK]), $string = decode(ENCODING,
-$octets [, CHECK]), [$obj =] find_encoding(ENCODING), [$length =]
+$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]);
@@ -21349,8 +20629,7 @@ is_utf8(STRING [, CHECK]), _utf8_on(STRING), _utf8_off(STRING)
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::Alias, Encode::Alias - alias
-definitions to encodings
+=head2 Encode::Alias - alias definitions to encodings
=over 4
@@ -21371,8 +20650,7 @@ reference, e.g.:
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::Byte, Encode::Byte - Single Byte
-Encodings
+=head2 Encode::Byte - Single Byte Encodings
=over 4
@@ -21386,11 +20664,9 @@ Encodings
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::CJKConstants,
-Encode::CJKConstants.pm -- Internally used by Encode::??::ISO_2022_*
+=head2 Encode::CJKConstants -- Internally used by Encode::??::ISO_2022_*
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::CN, Encode::CN - China-based
-Chinese Encodings
+=head2 Encode::CN - China-based Chinese Encodings
=over 4
@@ -21406,14 +20682,11 @@ Chinese Encodings
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::CN::HZ, Encode::CN::HZ --
-internally used by Encode::CN
+=head2 Encode::CN::HZ -- internally used by Encode::CN
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::Config, Encode::Config --
-internally used by Encode
+=head2 Encode::Config -- internally used by Encode
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::EBCDIC, Encode::EBCDIC - EBCDIC
-Encodings
+=head2 Encode::EBCDIC - EBCDIC Encodings
=over 4
@@ -21427,8 +20700,7 @@ Encodings
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::Encoder, Encode::Encoder --
-Object Oriented Encoder
+=head2 Encode::Encoder -- Object Oriented Encoder
=over 4
@@ -21456,8 +20728,7 @@ $e-E<gt>bytes([$encoding])
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::Encoding, Encode::Encoding -
-Encode Implementation Base Class
+=head2 Encode::Encoding - Encode Implementation Base Class
=over 4
@@ -21495,8 +20766,7 @@ Scheme 1, Scheme 2, Other Schemes
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::GSM0338, Encode::GSM0338 -- ESTI
-GSM 03.38 Encoding
+=head2 Encode::GSM0338 -- ESTI GSM 03.38 Encoding
=over 4
@@ -21512,8 +20782,7 @@ GSM 03.38 Encoding
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::Guess, Encode::Guess -- Guesses
-encoding from data
+=head2 Encode::Guess -- Guesses encoding from data
=over 4
@@ -21535,8 +20804,7 @@ guess_encoding($data, [, I<list of suspects>])
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::JP, Encode::JP - Japanese
-Encodings
+=head2 Encode::JP - Japanese Encodings
=over 4
@@ -21554,14 +20822,11 @@ Encodings
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::JP::H2Z, Encode::JP::H2Z --
-internally used by Encode::JP::2022_JP*
+=head2 Encode::JP::H2Z -- internally used by Encode::JP::2022_JP*
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::JP::JIS7, Encode::JP::JIS7 --
-internally used by Encode::JP
+=head2 Encode::JP::JIS7 -- internally used by Encode::JP
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::KR, Encode::KR - Korean
-Encodings
+=head2 Encode::KR - Korean Encodings
=over 4
@@ -21575,11 +20840,9 @@ Encodings
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::KR::2022_KR, Encode::KR::2022_KR
--- internally used by Encode::KR
+=head2 Encode::KR::2022_KR -- internally used by Encode::KR
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::MIME::Header,
-Encode::MIME::Header -- MIME 'B' and 'Q' header encoding
+=head2 Encode::MIME::Header -- MIME 'B' and 'Q' header encoding
=over 4
@@ -21595,8 +20858,7 @@ Encode::MIME::Header -- MIME 'B' and 'Q' header encoding
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::MIME::Name, Encode::MIME::NAME
--- internally used by Encode
+=head2 Encode::MIME::Name, Encode::MIME::NAME -- internally used by Encode
=over 4
@@ -21604,8 +20866,7 @@ Encode::MIME::Header -- MIME 'B' and 'Q' header encoding
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::PerlIO, Encode::PerlIO -- a
-detailed document on Encode and PerlIO
+=head2 Encode::PerlIO -- a detailed document on Encode and PerlIO
=over 4
@@ -21625,8 +20886,7 @@ detailed document on Encode and PerlIO
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::Supported, Encode::Supported --
-Encodings supported by Encode
+=head2 Encode::Supported -- Encodings supported by Encode
=over 4
@@ -21714,8 +20974,7 @@ C<CJKV Information Processing> by Ken Lunde
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::Symbol, Encode::Symbol - Symbol
-Encodings
+=head2 Encode::Symbol - Symbol Encodings
=over 4
@@ -21729,8 +20988,7 @@ Encodings
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::TW, Encode::TW - Taiwan-based
-Chinese Encodings
+=head2 Encode::TW - Taiwan-based Chinese Encodings
=over 4
@@ -21746,8 +21004,7 @@ Chinese Encodings
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::Unicode, Encode::Unicode --
-Various Unicode Transformation Formats
+=head2 Encode::Unicode -- Various Unicode Transformation Formats
=over 4
@@ -21777,8 +21034,7 @@ BOM as integer when fetched in network byte order
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Encode::Unicode::UTF7,
-Encode::Unicode::UTF7 -- UTF-7 encoding
+=head2 Encode::Unicode::UTF7 -- UTF-7 encoding
=over 4
@@ -21792,8 +21048,8 @@ Encode::Unicode::UTF7 -- UTF-7 encoding
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::English, English - use nice English (or
-awk) names for ugly punctuation variables
+=head2 English - use nice English (or awk) names for ugly punctuation
+variables
=over 4
@@ -21805,8 +21061,8 @@ awk) names for ugly punctuation variables
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Env, Env - perl module that imports
-environment variables as scalars or arrays
+=head2 Env - perl module that imports environment variables as scalars or
+arrays
=over 4
@@ -21820,7 +21076,7 @@ environment variables as scalars or arrays
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Errno, Errno - System errno constants
+=head2 Errno - System errno constants
=over 4
@@ -21836,8 +21092,7 @@ environment variables as scalars or arrays
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Exporter, Exporter - Implements default
-import method for modules
+=head2 Exporter - Implements default import method for modules
=over 4
@@ -21897,8 +21152,7 @@ C<use YourModule;>, C<use YourModule ();>, C<use YourModule qw(...);>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Exporter::Heavy, Exporter::Heavy -
-Exporter guts
+=head2 Exporter::Heavy - Exporter guts
=over 4
@@ -21908,8 +21162,7 @@ Exporter guts
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::CBuilder, ExtUtils::CBuilder -
-Compile and link C code for Perl modules
+=head2 ExtUtils::CBuilder - Compile and link C code for Perl modules
=over 4
@@ -21928,6 +21181,8 @@ lib_file, exe_file, prelink, need_prelink, extra_link_args_after_prelink
=item HISTORY
+=item SUPPORT
+
=item AUTHOR
=item COPYRIGHT
@@ -21936,8 +21191,8 @@ lib_file, exe_file, prelink, need_prelink, extra_link_args_after_prelink
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::CBuilder::Platform::Windows,
-ExtUtils::CBuilder::Platform::Windows - Builder class for Windows platforms
+=head2 ExtUtils::CBuilder::Platform::Windows - Builder class for Windows
+platforms
=over 4
@@ -21949,8 +21204,8 @@ ExtUtils::CBuilder::Platform::Windows - Builder class for Windows platforms
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::Command, ExtUtils::Command -
-utilities to replace common UNIX commands in Makefiles etc.
+=head2 ExtUtils::Command - utilities to replace common UNIX commands in
+Makefiles etc.
=over 4
@@ -21998,8 +21253,7 @@ dos2unix
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::Command::MM,
-ExtUtils::Command::MM - Commands for the MM's to use in Makefiles
+=head2 ExtUtils::Command::MM - Commands for the MM's to use in Makefiles
=over 4
@@ -22019,8 +21273,7 @@ B<perllocal_install>
B<uninstall>
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::Constant, ExtUtils::Constant -
-generate XS code to import C header constants
+=head2 ExtUtils::Constant - generate XS code to import C header constants
=over 4
@@ -22054,8 +21307,7 @@ C_SUBNAME
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::Constant::Base,
-ExtUtils::Constant::Base - base class for ExtUtils::Constant objects
+=head2 ExtUtils::Constant::Base - base class for ExtUtils::Constant objects
=over 4
@@ -22096,8 +21348,7 @@ post, def_pre, def_post, utf8, weight
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::Constant::Utils,
-ExtUtils::Constant::Utils - helper functions for ExtUtils::Constant
+=head2 ExtUtils::Constant::Utils - helper functions for ExtUtils::Constant
=over 4
@@ -22119,8 +21370,7 @@ perl_stringify NAME
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::Constant::XS,
-ExtUtils::Constant::XS - generate C code for XS modules' constants.
+=head2 ExtUtils::Constant::XS - generate C code for XS modules' constants.
=over 4
@@ -22134,8 +21384,7 @@ ExtUtils::Constant::XS - generate C code for XS modules' constants.
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::Embed, ExtUtils::Embed -
-Utilities for embedding Perl in C/C++ applications
+=head2 ExtUtils::Embed - Utilities for embedding Perl in C/C++ applications
=over 4
@@ -22158,8 +21407,7 @@ ccopts(), xsi_header(), xsi_protos(@modules), xsi_body(@modules)
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::Install, ExtUtils::Install -
-install files from here to there
+=head2 ExtUtils::Install - install files from here to there
=over 4
@@ -22236,8 +21484,7 @@ B<EU_INSTALL_SITE_SKIPFILE>, B<EU_INSTALL_ALWAYS_COPY>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::Installed, ExtUtils::Installed
-- Inventory management of installed modules
+=head2 ExtUtils::Installed - Inventory management of installed modules
=over 4
@@ -22258,8 +21505,7 @@ packlist(), version()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::Liblist, ExtUtils::Liblist -
-determine libraries to use and how to use them
+=head2 ExtUtils::Liblist - determine libraries to use and how to use them
=over 4
@@ -22294,8 +21540,7 @@ dynamic extensions at load time
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MM, ExtUtils::MM - OS adjusted
-ExtUtils::MakeMaker subclass
+=head2 ExtUtils::MM - OS adjusted ExtUtils::MakeMaker subclass
=over 4
@@ -22305,8 +21550,7 @@ ExtUtils::MakeMaker subclass
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MM_AIX, ExtUtils::MM_AIX - AIX
-specific subclass of ExtUtils::MM_Unix
+=head2 ExtUtils::MM_AIX - AIX specific subclass of ExtUtils::MM_Unix
=over 4
@@ -22330,8 +21574,7 @@ specific subclass of ExtUtils::MM_Unix
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MM_Any, ExtUtils::MM_Any -
-Platform-agnostic MM methods
+=head2 ExtUtils::MM_Any - Platform-agnostic MM methods
=over 4
@@ -22385,8 +21628,8 @@ Platform-agnostic MM methods
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MM_BeOS, ExtUtils::MM_BeOS -
-methods to override UN*X behaviour in ExtUtils::MakeMaker
+=head2 ExtUtils::MM_BeOS - methods to override UN*X behaviour in
+ExtUtils::MakeMaker
=over 4
@@ -22400,8 +21643,8 @@ os_flavor
init_linker
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MM_Cygwin, ExtUtils::MM_Cygwin
-- methods to override UN*X behaviour in ExtUtils::MakeMaker
+=head2 ExtUtils::MM_Cygwin - methods to override UN*X behaviour in
+ExtUtils::MakeMaker
=over 4
@@ -22425,8 +21668,7 @@ dynamic_lib
all_target
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MM_DOS, ExtUtils::MM_DOS - DOS
-specific subclass of ExtUtils::MM_Unix
+=head2 ExtUtils::MM_DOS - DOS specific subclass of ExtUtils::MM_Unix
=over 4
@@ -22454,8 +21696,7 @@ B<replace_manpage_separator>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MM_Darwin, ExtUtils::MM_Darwin
-- special behaviors for OS X
+=head2 ExtUtils::MM_Darwin - special behaviors for OS X
=over 4
@@ -22471,8 +21712,7 @@ B<replace_manpage_separator>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MM_MacOS, ExtUtils::MM_MacOS -
-once produced Makefiles for MacOS Classic
+=head2 ExtUtils::MM_MacOS - once produced Makefiles for MacOS Classic
=over 4
@@ -22482,8 +21722,8 @@ once produced Makefiles for MacOS Classic
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MM_NW5, ExtUtils::MM_NW5 -
-methods to override UN*X behaviour in ExtUtils::MakeMaker
+=head2 ExtUtils::MM_NW5 - methods to override UN*X behaviour in
+ExtUtils::MakeMaker
=over 4
@@ -22503,8 +21743,8 @@ static_lib
dynamic_lib
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MM_OS2, ExtUtils::MM_OS2 -
-methods to override UN*X behaviour in ExtUtils::MakeMaker
+=head2 ExtUtils::MM_OS2 - methods to override UN*X behaviour in
+ExtUtils::MakeMaker
=over 4
@@ -22522,8 +21762,7 @@ init_linker
os_flavor
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MM_QNX, ExtUtils::MM_QNX - QNX
-specific subclass of ExtUtils::MM_Unix
+=head2 ExtUtils::MM_QNX - QNX specific subclass of ExtUtils::MM_Unix
=over 4
@@ -22547,8 +21786,7 @@ specific subclass of ExtUtils::MM_Unix
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MM_UWIN, ExtUtils::MM_UWIN -
-U/WIN specific subclass of ExtUtils::MM_Unix
+=head2 ExtUtils::MM_UWIN - U/WIN specific subclass of ExtUtils::MM_Unix
=over 4
@@ -22576,8 +21814,7 @@ B<replace_manpage_separator>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MM_Unix, ExtUtils::MM_Unix -
-methods used by ExtUtils::MakeMaker
+=head2 ExtUtils::MM_Unix - methods used by ExtUtils::MakeMaker
=over 4
@@ -22671,7 +21908,7 @@ init_DIRFILESEP
init_main
-init_others
+init_tools
init_linker
@@ -22777,8 +22014,8 @@ xs_o (o)
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MM_VMS, ExtUtils::MM_VMS -
-methods to override UN*X behaviour in ExtUtils::MakeMaker
+=head2 ExtUtils::MM_VMS - methods to override UN*X behaviour in
+ExtUtils::MakeMaker
=over 4
@@ -22824,6 +22061,8 @@ init_DIRFILESEP
init_main (override)
+init_tools (override)
+
init_others (override)
init_platform (override)
@@ -22878,6 +22117,10 @@ B<echo>
quote_literal
+escape_dollarsigns
+
+escape_all_dollarsigns
+
escape_newlines
max_exec_len
@@ -22898,8 +22141,7 @@ os_flavor
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MM_VOS, ExtUtils::MM_VOS - VOS
-specific subclass of ExtUtils::MM_Unix
+=head2 ExtUtils::MM_VOS - VOS specific subclass of ExtUtils::MM_Unix
=over 4
@@ -22923,8 +22165,8 @@ specific subclass of ExtUtils::MM_Unix
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MM_Win32, ExtUtils::MM_Win32 -
-methods to override UN*X behaviour in ExtUtils::MakeMaker
+=head2 ExtUtils::MM_Win32 - methods to override UN*X behaviour in
+ExtUtils::MakeMaker
=over 4
@@ -22948,10 +22190,14 @@ B<maybe_command>
B<init_DIRFILESEP>
-B<init_others>
+init_tools
+
+init_others
init_platform, platform_constants
+constants
+
special_targets
static_lib
@@ -22980,8 +22226,7 @@ os_flavor
cflags
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MM_Win95, ExtUtils::MM_Win95 -
-method to customize MakeMaker for Win9X
+=head2 ExtUtils::MM_Win95 - method to customize MakeMaker for Win9X
=over 4
@@ -23013,8 +22258,7 @@ os_flavor
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MY, ExtUtils::MY -
-ExtUtils::MakeMaker subclass for customization
+=head2 ExtUtils::MY - ExtUtils::MakeMaker subclass for customization
=over 4
@@ -23024,8 +22268,7 @@ ExtUtils::MakeMaker subclass for customization
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MakeMaker, ExtUtils::MakeMaker
-- Create a module Makefile
+=head2 ExtUtils::MakeMaker - Create a module Makefile
=over 4
@@ -23100,7 +22343,7 @@ C<< MAN3PODS => ' ' >>
make distdir, make disttest, make tardist, make dist, make
uutardist, make shdist, make zipdist, make ci
-=item Module Meta-Data
+=item Module Meta-Data (META and MYMETA)
=item Disabling an extension
@@ -23122,8 +22365,7 @@ PERL_MM_OPT, PERL_MM_USE_DEFAULT, PERL_CORE
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MakeMaker::Config,
-ExtUtils::MakeMaker::Config - Wrapper around Config.pm
+=head2 ExtUtils::MakeMaker::Config - Wrapper around Config.pm
=over 4
@@ -23133,8 +22375,8 @@ ExtUtils::MakeMaker::Config - Wrapper around Config.pm
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MakeMaker::FAQ,
-ExtUtils::MakeMaker::FAQ - Frequently Asked Questions About MakeMaker
+=head2 ExtUtils::MakeMaker::FAQ - Frequently Asked Questions About
+MakeMaker
=over 4
@@ -23178,8 +22420,7 @@ directory?
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MakeMaker::Tutorial,
-ExtUtils::MakeMaker::Tutorial - Writing a module with MakeMaker
+=head2 ExtUtils::MakeMaker::Tutorial - Writing a module with MakeMaker
=over 4
@@ -23202,23 +22443,7 @@ bin/
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::MakeMaker::YAML,
-ExtUtils::MakeMaker::YAML - clone of YAML::Tiny
-
-=over 4
-
-=item SYNOPSIS
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=item COPYRIGHT
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::Manifest, ExtUtils::Manifest -
-utilities to write and check a MANIFEST file
+=head2 ExtUtils::Manifest - utilities to write and check a MANIFEST file
=over 4
@@ -23285,8 +22510,7 @@ B<PERL_MM_MANIFEST_DEBUG>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::Miniperl, ExtUtils::Miniperl,
-writemain - write the C code for perlmain.c
+=head2 ExtUtils::Miniperl, writemain - write the C code for perlmain.c
=over 4
@@ -23298,8 +22522,7 @@ writemain - write the C code for perlmain.c
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::Mkbootstrap,
-ExtUtils::Mkbootstrap - make a bootstrap file for use by DynaLoader
+=head2 ExtUtils::Mkbootstrap - make a bootstrap file for use by DynaLoader
=over 4
@@ -23309,8 +22532,8 @@ ExtUtils::Mkbootstrap - make a bootstrap file for use by DynaLoader
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::Mksymlists,
-ExtUtils::Mksymlists - write linker options files for dynamic extension
+=head2 ExtUtils::Mksymlists - write linker options files for dynamic
+extension
=over 4
@@ -23330,8 +22553,7 @@ mkfh()
__find_relocations
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::Packlist, ExtUtils::Packlist -
-manage .packlist files
+=head2 ExtUtils::Packlist - manage .packlist files
=over 4
@@ -23351,18 +22573,19 @@ new(), read(), write(), validate(), packlist_file()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::ParseXS, ExtUtils::ParseXS -
-converts Perl XS code into C code
+=head2 ExtUtils::ParseXS - converts Perl XS code into C code
=over 4
=item SYNOPSIS
+=item DESCRIPTION
+
=item EXPORT
=item FUNCTIONS
-process_xs(), B<C++>, B<hiertype>, B<except>, B<typemap>, B<prototypes>,
+process_file(), B<C++>, B<hiertype>, B<except>, B<typemap>, B<prototypes>,
B<versioncheck>, B<linenumbers>, B<optimize>, B<inout>, B<argtypes>, B<s>,
errors()
@@ -23374,8 +22597,514 @@ errors()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::XSSymSet, ExtUtils::XSSymSet -
-keep sets of symbol names palatable to the VMS linker
+=head2 ExtUtils::ParseXS::Constants - Initialization values for some
+globals
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=back
+
+=head2 ExtUtils::ParseXS::Utilities - Subroutines used with
+ExtUtils::ParseXS
+
+=over 4
+
+=item SYNOPSIS
+
+=item SUBROUTINES
+
+=over 4
+
+=item C<standard_typemap_locations()>
+
+Purpose, Arguments, Return Value
+
+=back
+
+=back
+
+=over 4
+
+=item C<trim_whitespace()>
+
+Purpose, Argument, Return Value
+
+=back
+
+=over 4
+
+=item C<tidy_type()>
+
+Purpose, Arguments, Return Value
+
+=back
+
+=over 4
+
+=item C<C_string()>
+
+Purpose, Arguments, Return Value
+
+=back
+
+=over 4
+
+=item C<valid_proto_string()>
+
+Purpose, Arguments, Return Value
+
+=back
+
+=over 4
+
+=item C<process_typemaps()>
+
+Purpose, Arguments, Return Value
+
+=back
+
+=over 4
+
+=item C<make_targetable()>
+
+Purpose, Arguments, Return Value
+
+=back
+
+=over 4
+
+=item C<map_type()>
+
+Purpose, Arguments, Return Value
+
+=back
+
+=over 4
+
+=item C<standard_XS_defs()>
+
+Purpose, Arguments, Return Value
+
+=back
+
+=over 4
+
+=item C<assign_func_args()>
+
+Purpose, Arguments, Return Value
+
+=back
+
+=over 4
+
+=item C<analyze_preprocessor_statements()>
+
+Purpose, Arguments, Return Value
+
+=back
+
+=over 4
+
+=item C<set_cond()>
+
+Purpose, Arguments, Return Value
+
+=back
+
+=over 4
+
+=item C<current_line_number()>
+
+Purpose, Arguments, Return Value
+
+=back
+
+=over 4
+
+=item C<Warn()>
+
+Purpose, Arguments, Return Value
+
+=back
+
+=over 4
+
+=item C<blurt()>
+
+Purpose, Arguments, Return Value
+
+=back
+
+=over 4
+
+=item C<death()>
+
+Purpose, Arguments, Return Value
+
+=back
+
+=over 4
+
+=item C<check_conditional_preprocessor_statements()>
+
+Purpose, Arguments, Return Value
+
+=back
+
+=over 4
+
+=item C<escape_file_for_line_directive()>
+
+Purpose, Arguments, Return Value
+
+=back
+
+=over 4
+
+=item C<report_typemap_failure>
+
+Purpose, Arguments, Return Value
+
+=back
+
+=head2 ExtUtils::Typemaps - Read/Write/Modify Perl/XS typemap files
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item METHODS
+
+=back
+
+=over 4
+
+=item new
+
+=back
+
+=over 4
+
+=item file
+
+=back
+
+=over 4
+
+=item add_typemap
+
+=back
+
+=over 4
+
+=item add_inputmap
+
+=back
+
+=over 4
+
+=item add_outputmap
+
+=back
+
+=over 4
+
+=item add_string
+
+=back
+
+=over 4
+
+=item remove_typemap
+
+=back
+
+=over 4
+
+=item remove_inputmap
+
+=back
+
+=over 4
+
+=item remove_inputmap
+
+=back
+
+=over 4
+
+=item get_typemap
+
+=back
+
+=over 4
+
+=item get_inputmap
+
+=back
+
+=over 4
+
+=item get_outputmap
+
+=back
+
+=over 4
+
+=item write
+
+=back
+
+=over 4
+
+=item as_string
+
+=back
+
+=over 4
+
+=item as_embedded_typemap
+
+=back
+
+=over 4
+
+=item merge
+
+=back
+
+=over 4
+
+=item is_empty
+
+=back
+
+=over 4
+
+=item list_mapped_ctypes
+
+=back
+
+=over 4
+
+=item _get_typemap_hash
+
+=back
+
+=over 4
+
+=item _get_inputmap_hash
+
+=back
+
+=over 4
+
+=item _get_outputmap_hash
+
+=back
+
+=over 4
+
+=item _get_prototype_hash
+
+=back
+
+=over 4
+
+=item CAVEATS
+
+=item SEE ALSO
+
+=item AUTHOR
+
+=item COPYRIGHT & LICENSE
+
+=back
+
+=head2 ExtUtils::Typemaps::Cmd - Quick commands for handling typemaps
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item EXPORTED FUNCTIONS
+
+=over 4
+
+=item embeddable_typemap
+
+=back
+
+=item SEE ALSO
+
+=item AUTHOR
+
+=item COPYRIGHT & LICENSE
+
+=back
+
+=head2 ExtUtils::Typemaps::InputMap - Entry in the INPUT section of a
+typemap
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item METHODS
+
+=back
+
+=over 4
+
+=item new
+
+=back
+
+=over 4
+
+=item code
+
+=back
+
+=over 4
+
+=item xstype
+
+=back
+
+=over 4
+
+=item cleaned_code
+
+=back
+
+=over 4
+
+=item SEE ALSO
+
+=item AUTHOR
+
+=item COPYRIGHT & LICENSE
+
+=back
+
+=head2 ExtUtils::Typemaps::OutputMap - Entry in the OUTPUT section of a
+typemap
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item METHODS
+
+=back
+
+=over 4
+
+=item new
+
+=back
+
+=over 4
+
+=item code
+
+=back
+
+=over 4
+
+=item xstype
+
+=back
+
+=over 4
+
+=item cleaned_code
+
+=back
+
+=over 4
+
+=item targetable
+
+=back
+
+=over 4
+
+=item SEE ALSO
+
+=item AUTHOR
+
+=item COPYRIGHT & LICENSE
+
+=back
+
+=head2 ExtUtils::Typemaps::Type - Entry in the TYPEMAP section of a typemap
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item METHODS
+
+=back
+
+=over 4
+
+=item new
+
+=back
+
+=over 4
+
+=item proto
+
+=back
+
+=over 4
+
+=item xstype
+
+=back
+
+=over 4
+
+=item ctype
+
+=back
+
+=over 4
+
+=item tidy_ctype
+
+=back
+
+=over 4
+
+=item SEE ALSO
+
+=item AUTHOR
+
+=item COPYRIGHT & LICENSE
+
+=back
+
+=head2 ExtUtils::XSSymSet - keep sets of symbol names palatable to the VMS
+linker
=over 4
@@ -23393,8 +23122,7 @@ get_trimmed($name), all_orig(), all_trimmed()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::ExtUtils::testlib, ExtUtils::testlib -
-add blib/* directories to @INC
+=head2 ExtUtils::testlib - add blib/* directories to @INC
=over 4
@@ -23404,8 +23132,7 @@ add blib/* directories to @INC
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Fatal, Fatal - Replace functions with
-equivalents which succeed or die
+=head2 Fatal - Replace functions with equivalents which succeed or die
=over 4
@@ -23431,8 +23158,7 @@ neither a builtin, nor a Perl subroutine, Cannot make the non-overridable
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Fcntl, Fcntl - load the C Fcntl.h
-defines
+=head2 Fcntl - load the C Fcntl.h defines
=over 4
@@ -23446,8 +23172,8 @@ defines
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::Basename, File::Basename - Parse
-file paths into directory, filename and suffix.
+=head2 File::Basename - Parse file paths into directory, filename and
+suffix.
=over 4
@@ -23471,8 +23197,7 @@ C<fileparse_set_fstype> X<filesystem>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::CheckTree, File::CheckTree - run
-many filetest checks on a tree
+=head2 File::CheckTree - run many filetest checks on a tree
=over 4
@@ -23486,8 +23211,7 @@ many filetest checks on a tree
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::Compare, File::Compare - Compare
-files or filehandles
+=head2 File::Compare - Compare files or filehandles
=over 4
@@ -23501,8 +23225,7 @@ files or filehandles
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::Copy, File::Copy - Copy files or
-filehandles
+=head2 File::Copy - Copy files or filehandles
=over 4
@@ -23519,8 +23242,7 @@ rmscopy($from,$to[,$date_flag]) X<rmscopy>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::DosGlob, File::DosGlob - DOS like
-globbing and then some
+=head2 File::DosGlob - DOS like globbing and then some
=over 4
@@ -23540,8 +23262,7 @@ globbing and then some
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::Fetch, File::Fetch - A generic
-file fetching mechanism
+=head2 File::Fetch - A generic file fetching mechanism
=over 4
@@ -23636,8 +23357,7 @@ Implement $PREFER_BIN
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::Find, File::Find - Traverse a
-directory tree.
+=head2 File::Find - Traverse a directory tree.
=over 4
@@ -23677,8 +23397,7 @@ $dont_use_nlink, symlinks
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::Glob, File::Glob - Perl extension
-for BSD glob routine
+=head2 File::Glob - Perl extension for BSD glob routine
=over 4
@@ -23690,6 +23409,8 @@ for BSD glob routine
=item META CHARACTERS
+=item EXPORTS
+
=item POSIX FLAGS
C<GLOB_ERR>, C<GLOB_LIMIT>, C<GLOB_MARK>, C<GLOB_NOCASE>, C<GLOB_NOCHECK>,
@@ -23710,8 +23431,7 @@ C<GLOB_NOSPACE>, C<GLOB_ABEND>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::GlobMapper, File::GlobMapper -
-Extend File Glob to Allow Input and Output Files
+=head2 File::GlobMapper - Extend File Glob to Allow Input and Output Files
=over 4
@@ -23755,8 +23475,7 @@ B<~>, B<~user>, B<.>, B<*>, B<?>, B<\>, B<[]>, B<{,}>, B<()>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::Path, File::Path - Create or
-remove directory trees
+=head2 File::Path - Create or remove directory trees
=over 4
@@ -23820,8 +23539,7 @@ group ownership not changed
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::Spec, File::Spec - portably
-perform operations on file names
+=head2 File::Spec - portably perform operations on file names
=over 4
@@ -23846,8 +23564,7 @@ X<relative, path>, rel2abs() X<rel2abs> X<absolute, path> X<relative, path>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::Spec::Cygwin, File::Spec::Cygwin -
-methods for Cygwin file specs
+=head2 File::Spec::Cygwin - methods for Cygwin file specs
=over 4
@@ -23871,8 +23588,7 @@ case_tolerant
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::Spec::Epoc, File::Spec::Epoc -
-methods for Epoc file specs
+=head2 File::Spec::Epoc - methods for Epoc file specs
=over 4
@@ -23894,8 +23610,7 @@ canonpath()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::Spec::Functions,
-File::Spec::Functions - portably perform operations on file names
+=head2 File::Spec::Functions - portably perform operations on file names
=over 4
@@ -23915,8 +23630,7 @@ File::Spec::Functions - portably perform operations on file names
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::Spec::Mac, File::Spec::Mac -
-File::Spec for Mac OS (Classic)
+=head2 File::Spec::Mac - File::Spec for Mac OS (Classic)
=over 4
@@ -23968,8 +23682,7 @@ rel2abs
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::Spec::OS2, File::Spec::OS2 -
-methods for OS/2 file specs
+=head2 File::Spec::OS2 - methods for OS/2 file specs
=over 4
@@ -23983,8 +23696,8 @@ tmpdir, splitpath
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::Spec::Unix, File::Spec::Unix -
-File::Spec for Unix, base for other File::Spec modules
+=head2 File::Spec::Unix - File::Spec for Unix, base for other File::Spec
+modules
=over 4
@@ -24040,8 +23753,7 @@ rel2abs()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::Spec::VMS, File::Spec::VMS -
-methods for VMS file specs
+=head2 File::Spec::VMS - methods for VMS file specs
=over 4
@@ -24091,8 +23803,7 @@ rel2abs (override)
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::Spec::Win32, File::Spec::Win32 -
-methods for Win32 file specs
+=head2 File::Spec::Win32 - methods for Win32 file specs
=over 4
@@ -24134,8 +23845,7 @@ catpath
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::Temp, File::Temp - return name and
-handle of a temporary file safely
+=head2 File::Temp - return name and handle of a temporary file safely
=over 4
@@ -24255,8 +23965,7 @@ B<$KEEP_ALL>, B<$DEBUG>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::File::stat, File::stat - by-name
-interface to Perl's built-in stat() functions
+=head2 File::stat - by-name interface to Perl's built-in stat() functions
=over 4
@@ -24280,8 +23989,7 @@ File::stat ignores use filetest 'access', File::stat ignores VMS ACLs
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::FileCache, FileCache - keep more files
-open than the system permits
+=head2 FileCache - keep more files open than the system permits
=over 4
@@ -24297,8 +24005,7 @@ cacheout EXPR, cacheout MODE, EXPR
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::FileHandle, FileHandle - supply object
-methods for filehandles
+=head2 FileHandle - supply object methods for filehandles
=over 4
@@ -24312,8 +24019,7 @@ $fh->print, $fh->printf, $fh->getline, $fh->getlines
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Filter::Simple, Filter::Simple -
-Simplified source filtering
+=head2 Filter::Simple - Simplified source filtering
=over 4
@@ -24355,8 +24061,7 @@ C<"all">
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Filter::Util::Call, Filter::Util::Call -
-Perl Source Filter Utility Module
+=head2 Filter::Util::Call - Perl Source Filter Utility Module
=over 4
@@ -24398,8 +24103,7 @@ B<$_>, B<$status>, B<filter_read> and B<filter_read_exact>, B<filter_del>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::FindBin, FindBin - Locate directory of
-original perl script
+=head2 FindBin - Locate directory of original perl script
=over 4
@@ -24411,16 +24115,13 @@ original perl script
=item KNOWN ISSUES
-=item KNOWN BUGS
-
=item AUTHORS
=item COPYRIGHT
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Getopt::Long, Getopt::Long - Extended
-processing of command line options
+=head2 Getopt::Long - Extended processing of command line options
=over 4
@@ -24539,8 +24240,8 @@ supplied
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Getopt::Std, getopt, getopts - Process
-single-character switches with switch clustering
+=head2 Getopt::Std, getopt, getopts - Process single-character switches
+with switch clustering
=over 4
@@ -24552,8 +24253,7 @@ single-character switches with switch clustering
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::HTTP::Tiny, HTTP::Tiny - A small,
-simple, correct HTTP/1.1 client
+=head2 HTTP::Tiny - A small, simple, correct HTTP/1.1 client
=over 4
@@ -24569,12 +24269,16 @@ simple, correct HTTP/1.1 client
=item new
-=item get
+=item get|head|put|post|delete
+
+=item post_form
=item mirror
=item request
+=item www_form_urlencode
+
=back
=item LIMITATIONS
@@ -24597,8 +24301,7 @@ simple, correct HTTP/1.1 client
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Hash::Util, Hash::Util - A selection of
-general-utility hash subroutines
+=head2 Hash::Util - A selection of general-utility hash subroutines
=over 4
@@ -24652,8 +24355,7 @@ unlock_hashref_recurse, hash_ref_unlocked, legal_ref_keys, hidden_ref_keys
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Hash::Util::FieldHash,
-Hash::Util::FieldHash - Support for Inside-Out Classes
+=head2 Hash::Util::FieldHash - Support for Inside-Out Classes
=over 4
@@ -24716,8 +24418,8 @@ C<Name_idhash>, C<Name_id_reg>, C<Name_idhash_reg>, C<Name_fieldhash>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::I18N::Collate, I18N::Collate - compare
-8-bit scalar data according to the current locale
+=head2 I18N::Collate - compare 8-bit scalar data according to the current
+locale
=over 4
@@ -24727,8 +24429,8 @@ C<Name_idhash>, C<Name_id_reg>, C<Name_idhash_reg>, C<Name_fieldhash>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::I18N::LangTags, I18N::LangTags -
-functions for dealing with RFC3066-style language tags
+=head2 I18N::LangTags - functions for dealing with RFC3066-style language
+tags
=over 4
@@ -24775,8 +24477,7 @@ implicate_supers_strictly( ...languages... )
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::I18N::LangTags::Detect,
-I18N::LangTags::Detect - detect the user's language preferences
+=head2 I18N::LangTags::Detect - detect the user's language preferences
=over 4
@@ -24796,8 +24497,7 @@ I18N::LangTags::Detect - detect the user's language preferences
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::I18N::LangTags::List,
-I18N::LangTags::List -- tags and names for human languages
+=head2 I18N::LangTags::List -- tags and names for human languages
=over 4
@@ -24945,7 +24645,7 @@ Sichuan Yi, {yi} : Yiddish, {yo} : Yoruba, [{ypk} : Yupik languages], {znd}
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO, IO - load various IO modules
+=head2 IO - load various IO modules
=over 4
@@ -24957,8 +24657,7 @@ Sichuan Yi, {yi} : Yiddish, {yo} : Yoruba, [{ypk} : Yupik languages], {znd}
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Compress::Base, IO::Compress::Base -
-Base Class for IO::Compress modules
+=head2 IO::Compress::Base - Base Class for IO::Compress modules
=over 4
@@ -24976,8 +24675,7 @@ Base Class for IO::Compress modules
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Compress::Bzip2, IO::Compress::Bzip2
-- Write bzip2 files/buffers
+=head2 IO::Compress::Bzip2 - Write bzip2 files/buffers
=over 4
@@ -25083,8 +24781,7 @@ C<< Strict => 0|1 >>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Compress::Deflate,
-IO::Compress::Deflate - Write RFC 1950 files/buffers
+=head2 IO::Compress::Deflate - Write RFC 1950 files/buffers
=over 4
@@ -25192,8 +24889,85 @@ Filehandle, C<< Merge => 0|1 >>, -Level, -Strategy, C<< Strict => 0|1 >>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Compress::Gzip, IO::Compress::Gzip -
-Write RFC 1952 files/buffers
+=head2 IO::Compress::FAQ -- Frequently Asked Questions about IO::Compress
+
+=over 4
+
+=item DESCRIPTION
+
+=item GENERAL
+
+=over 4
+
+=item Compatibility with Unix compress/uncompress.
+
+=item Accessing .tar.Z files
+
+=item How do I recompress using a different compression?
+
+=back
+
+=item ZIP
+
+=over 4
+
+=item What Compression Types do IO::Compress::Zip & IO::Uncompress::Unzip
+support?
+
+Store (method 0), Deflate (method 8), Bzip2 (method 12), Lzma (method 14)
+
+=item Can I Read/Write Zip files larger the 4 Gig?
+
+=item Zip Resources
+
+=back
+
+=item GZIP
+
+=over 4
+
+=item Gzip Resources
+
+=back
+
+=item ZLIB
+
+=over 4
+
+=item Zlib Resources
+
+=back
+
+=item HTTP & NETWORK
+
+=over 4
+
+=item Apache::GZip Revisited
+
+=item Compressed files and Net::FTP
+
+=back
+
+=item MISC
+
+=over 4
+
+=item Using C<InputLength> to uncompress data embedded in a larger
+file/buffer.
+
+=back
+
+=item SEE ALSO
+
+=item AUTHOR
+
+=item MODIFICATION HISTORY
+
+=item COPYRIGHT AND LICENSE
+
+=back
+
+=head2 IO::Compress::Gzip - Write RFC 1952 files/buffers
=over 4
@@ -25305,8 +25079,7 @@ C<< ExtraField => $data >>, C<< ExtraFlags => $value >>, C<< Strict => 0|1
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Compress::RawDeflate,
-IO::Compress::RawDeflate - Write RFC 1951 files/buffers
+=head2 IO::Compress::RawDeflate - Write RFC 1951 files/buffers
=over 4
@@ -25414,8 +25187,7 @@ Filehandle, C<< Merge => 0|1 >>, -Level, -Strategy, C<< Strict => 0|1 >>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Compress::Zip, IO::Compress::Zip -
-Write zip files/buffers
+=head2 IO::Compress::Zip - Write zip files/buffers
=over 4
@@ -25455,14 +25227,15 @@ 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<< exUnix2 => [$uid,
-$gid] >>, 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 >>
+Filehandle, C<< Name => $string >>, C<< CanonicalName => 0|1 >>, C<<
+FilterName => sub { ... } >>, C<< Time => $number >>, C<< ExtAttr => $attr
+>>, C<< exTime => [$atime, $mtime, $ctime] >>, C<< exUnix2 => [$uid, $gid]
+>>, C<< exUnixN => [$uid, $gid] >>, 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 >>, C<< Preset =>
+number >>, C<< Extreme => 0|1 >>, -Level, -Strategy, C<< Strict => 0|1 >>
=item Examples
@@ -25530,8 +25303,7 @@ number >>, C<< WorkFactor => number >>, -Level, -Strategy, C<< Strict =>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Dir, IO::Dir - supply object methods
-for directory handles
+=head2 IO::Dir - supply object methods for directory handles
=over 4
@@ -25550,8 +25322,7 @@ rewind (), close (), tie %hash, 'IO::Dir', DIRNAME [, OPTIONS ]
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::File, IO::File - supply object
-methods for filehandles
+=head2 IO::File - supply object methods for filehandles
=over 4
@@ -25576,8 +25347,7 @@ open( FILENAME [,MODE [,PERMS]] ), open( FILENAME, IOLAYERS ), binmode(
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Handle, IO::Handle - supply object
-methods for I/O handles
+=head2 IO::Handle - supply object methods for I/O handles
=over 4
@@ -25606,8 +25376,7 @@ $io->blocking ( [ BOOL ] ), $io->untaint
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Pipe, IO::Pipe - supply object
-methods for pipes
+=head2 IO::Pipe - supply object methods for pipes
=over 4
@@ -25631,8 +25400,7 @@ reader ([ARGS]), writer ([ARGS]), handles ()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Poll, IO::Poll - Object interface to
-system poll call
+=head2 IO::Poll - Object interface to system poll call
=over 4
@@ -25653,8 +25421,7 @@ IO ), handles( [ EVENT_MASK ] )
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Seekable, IO::Seekable - supply seek
-based methods for I/O objects
+=head2 IO::Seekable - supply seek based methods for I/O objects
=over 4
@@ -25672,8 +25439,7 @@ $io->tell
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Select, IO::Select - OO interface to
-the select system call
+=head2 IO::Select - OO interface to the select system call
=over 4
@@ -25699,8 +25465,7 @@ count (), bits(), select ( READ, WRITE, EXCEPTION [, TIMEOUT ] )
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Socket, IO::Socket - Object
-interface to socket communications
+=head2 IO::Socket - Object interface to socket communications
=over 4
@@ -25726,8 +25491,7 @@ setsockopt(LEVEL, OPT, VAL), socktype, timeout([VAL])
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Socket::INET, IO::Socket::INET -
-Object interface for AF_INET domain sockets
+=head2 IO::Socket::INET - Object interface for AF_INET domain sockets
=over 4
@@ -25756,8 +25520,7 @@ sockaddr (), sockport (), sockhost (), peeraddr (), peerport (), peerhost
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Socket::UNIX, IO::Socket::UNIX -
-Object interface for AF_UNIX domain sockets
+=head2 IO::Socket::UNIX - Object interface for AF_UNIX domain sockets
=over 4
@@ -25781,8 +25544,8 @@ hostpath(), peerpath()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Uncompress::AnyInflate,
-IO::Uncompress::AnyInflate - Uncompress zlib-based (zip, gzip) file/buffer
+=head2 IO::Uncompress::AnyInflate - Uncompress zlib-based (zip, gzip)
+file/buffer
=over 4
@@ -25899,8 +25662,7 @@ the sub-field structure as defined in RFC 1952
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Uncompress::AnyUncompress,
-IO::Uncompress::AnyUncompress - Uncompress gzip, zip, bzip2 or lzop
+=head2 IO::Uncompress::AnyUncompress - Uncompress gzip, zip, bzip2 or lzop
file/buffer
=over 4
@@ -26009,8 +25771,7 @@ $size >>, C<< Append => 0|1 >>, C<< Strict => 0|1 >>, C<< RawInflate => 0|1
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Uncompress::Base,
-IO::Uncompress::Base - Base Class for IO::Uncompress modules
+=head2 IO::Uncompress::Base - Base Class for IO::Uncompress modules
=over 4
@@ -26028,8 +25789,7 @@ IO::Uncompress::Base - Base Class for IO::Uncompress modules
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Uncompress::Bunzip2,
-IO::Uncompress::Bunzip2 - Read bzip2 files/buffers
+=head2 IO::Uncompress::Bunzip2 - Read bzip2 files/buffers
=over 4
@@ -26138,8 +25898,7 @@ $size >>, C<< Append => 0|1 >>, C<< Strict => 0|1 >>, C<< Small => 0|1 >>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Uncompress::Gunzip,
-IO::Uncompress::Gunzip - Read RFC 1952 files/buffers
+=head2 IO::Uncompress::Gunzip - Read RFC 1952 files/buffers
=over 4
@@ -26256,8 +26015,7 @@ Name, Comment
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Uncompress::Inflate,
-IO::Uncompress::Inflate - Read RFC 1950 files/buffers
+=head2 IO::Uncompress::Inflate - Read RFC 1950 files/buffers
=over 4
@@ -26369,8 +26127,7 @@ $size >>, C<< Append => 0|1 >>, C<< Strict => 0|1 >>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Uncompress::RawInflate,
-IO::Uncompress::RawInflate - Read RFC 1951 files/buffers
+=head2 IO::Uncompress::RawInflate - Read RFC 1951 files/buffers
=over 4
@@ -26482,8 +26239,7 @@ $size >>, C<< Append => 0|1 >>, C<< Strict => 0|1 >>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Uncompress::Unzip,
-IO::Uncompress::Unzip - Read zip files/buffers
+=head2 IO::Uncompress::Unzip - Read zip files/buffers
=over 4
@@ -26598,8 +26354,7 @@ C<< Name => "membername" >>, C<< AutoClose => 0|1 >>, C<< MultiStream =>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IO::Zlib, IO::Zlib - IO:: style
-interface to L<Compress::Zlib>
+=head2 IO::Zlib - IO:: style interface to L<Compress::Zlib>
=over 4
@@ -26644,8 +26399,7 @@ IO::Zlib::WRITE: too long LENGTH
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IPC::Cmd, IPC::Cmd - finding and running
-system commands made easy
+=head2 IPC::Cmd - finding and running system commands made easy
=over 4
@@ -26653,7 +26407,7 @@ system commands made easy
=item DESCRIPTION
-=item CLASS METHODS
+=item CLASS METHODS
=over 4
@@ -26739,6 +26493,8 @@ C<timeout>, C<stdout>, C<stderr>, C<merged>, C<err_msg>
=item $IPC::Cmd::INSTANCES
+=item $IPC::Cmd::ALLOW_NULL_ARGS
+
=back
=item Caveats
@@ -26758,8 +26514,8 @@ Interleaving STDOUT/STDERR
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IPC::Open2, IPC::Open2 - open a process
-for both reading and writing using open2()
+=head2 IPC::Open2 - open a process for both reading and writing using
+open2()
=over 4
@@ -26773,8 +26529,8 @@ for both reading and writing using open2()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::IPC::Open3, IPC::Open3 - open a process
-for reading, writing, and error handling using open3()
+=head2 IPC::Open3 - open a process for reading, writing, and error handling
+using open3()
=over 4
@@ -26790,8 +26546,7 @@ L<IPC::Open2>, L<IPC::Run>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::JSON::PP, JSON::PP - JSON::XS compatible
-pure-Perl module.
+=head2 JSON::PP - JSON::XS compatible pure-Perl module.
=over 4
@@ -26962,8 +26717,7 @@ speed, memory saving
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::JSON::PP::Boolean, JSON::PP::Boolean -
-dummy module providing JSON::PP::Boolean
+=head2 JSON::PP::Boolean - dummy module providing JSON::PP::Boolean
=over 4
@@ -26979,8 +26733,7 @@ dummy module providing JSON::PP::Boolean
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::List::Util, List::Util - A selection of
-general-utility list subroutines
+=head2 List::Util - A selection of general-utility list subroutines
=over 4
@@ -27001,8 +26754,8 @@ BLOCK LIST, shuffle LIST, sum LIST
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::List::Util::XS, List::Util::XS -
-Indicate if List::Util was compiled with a C compiler
+=head2 List::Util::XS - Indicate if List::Util was compiled with a C
+compiler
=over 4
@@ -27016,15 +26769,20 @@ Indicate if List::Util was compiled with a C compiler
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Locale::Codes, Locale::Codes - a
-distribution of modules to handle locale codes
+=head2 Locale::Codes - a distribution of modules to handle locale codes
=over 4
=item DESCRIPTION
-B<Locale::Country>, B<Locale::Language>, B<Locale::Currency>,
-B<Locale::Script>
+B<Locale::Codes::Country, Locale::Country>, B<Locale::Codes::Language,
+Locale::Language>, B<Locale::Codes::Currency, Locale::Currency>,
+B<Locale::Codes::Script, Locale::Script>, B<Locale::Codes::LangExt>,
+B<Locale::Codes::LangVar>, B<Locale::Codes::LangFam>, B<Locale::Codes>,
+B<Locale::Codes::Constants>, B<Locale::Codes::Country_codes>,
+B<Locale::Codes::Language_codes>, B<Locale::Codes::Currency_codes>,
+B<Locale::Codes::Script_codes>, B<Locale::Codes::LangExt_codes>,
+B<Locale::Codes::LangVar_codes>, B<Locale::Codes::LangFam_codes>
=item NEW CODE SETS
@@ -27033,54 +26791,42 @@ the data>, B<A reliable source of data>
=item COMMON ALIASES
+=item DEPRECATED CODES
+
+=item SEE ALSO
+
+B<Locale::Codes::API>, B<Locale::Codes::Country>,
+B<Locale::Codes::Language>, B<Locale::Codes::Script>,
+B<Locale::Codes::Currency>, B<Locale::Codes::Changes>
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=back
+
+=head2 Locale::Codes::API - a description of the callable function in each
+module
+
+=over 4
+
+=item DESCRIPTION
+
=item ROUTINES
-B<code2country ( CODE [,CODESET] )>, B<code2language( CODE [,CODESET] )>,
-B<code2currency( CODE [,CODESET] )>, B<code2script ( CODE [,CODESET] )>,
-B<country2code ( NAME [,CODESET] )>, B<language2code( NAME [,CODESET] )>,
-B<currency2code( NAME [,CODESET] )>, B<script2code ( NAME [,CODESET] )>,
-B<country_code2code ( CODE ,CODESET ,CODESET2 )>, B<language_code2code(
-CODE ,CODESET ,CODESET2 )>, B<currency_code2code( CODE ,CODESET ,CODESET2
-)>, B<script_code2code ( CODE ,CODESET ,CODESET2 )>, B<all_country_codes (
-[CODESET] )>, B<all_language_codes( [CODESET] )>, B<all_currency_codes(
-[CODESET] )>, B<all_script_codes ( [CODESET] )>, B<all_country_names (
-[CODESET] )>, B<all_language_names( [CODESET] )>, B<all_currency_names(
-[CODESET] )>, B<all_script_names ( [CODESET] )>
+B<code2XXX ( CODE [,CODESET] [,'retired'] )>, B<XXX2code ( NAME [,CODESET]
+[,'retired'] )>, B<XXX_code2code ( CODE ,CODESET ,CODESET2 )>,
+B<all_XXX_codes ( [CODESET] [,'retired'] )>, B<all_XXX_names ( [CODESET]
+[,'retired'] )>
=item SEMI-PRIVATE ROUTINES
-B<Locale::Country::rename_country ( CODE ,NEW_NAME [,CODESET] )>,
-B<Locale::Language::rename_language( CODE ,NEW_NAME [,CODESET] )>,
-B<Locale::Currency::rename_currency( CODE ,NEW_NAME [,CODESET] )>,
-B<Locale::Script::rename_script ( CODE ,NEW_NAME [,CODESET] )>,
-B<Locale::Country::add_country ( CODE ,NAME [,CODESET] )>,
-B<Locale::Language::add_language( CODE ,NAME [,CODESET] )>,
-B<Locale::Currency::add_currency( CODE ,NAME [,CODESET] )>,
-B<Locale::Script::add_script ( CODE ,NAME [,CODESET] )>,
-B<Locale::Country::delete_country ( CODE [,CODESET] )>,
-B<Locale::Language::delete_language( CODE [,CODESET] )>,
-B<Locale::Currency::delete_currency( CODE [,CODESET] )>,
-B<Locale::Script::delete_script ( CODE [,CODESET] )>,
-B<Locale::Country::add_country_alias ( NAME ,NEW_NAME )>,
-B<Locale::Language::add_language_alias( NAME ,NEW_NAME )>,
-B<Locale::Currency::add_currency_alias( NAME ,NEW_NAME )>,
-B<Locale::Script::add_script_alias ( NAME ,NEW_NAME )>,
-B<Locale::Country::delete_country_alias ( NAME )>,
-B<Locale::Language::delete_language_alias( NAME )>,
-B<Locale::Currency::delete_currency_alias( NAME )>,
-B<Locale::Script::delete_script_alias ( NAME )>,
-B<Locale::Country::rename_country_code ( CODE ,NEW_CODE [,CODESET] )>,
-B<Locale::Language::rename_language_code( CODE ,NEW_CODE [,CODESET] )>,
-B<Locale::Currency::rename_currency_code( CODE ,NEW_CODE [,CODESET] )>,
-B<Locale::Script::rename_script_code ( CODE ,NEW_CODE [,CODESET] )>,
-B<Locale::Country::add_country_code_alias ( CODE ,NEW_CODE [,CODESET] )>,
-B<Locale::Language::add_language_code_alias( CODE ,NEW_CODE [,CODESET] )>,
-B<Locale::Currency::add_currency_code_alias( CODE ,NEW_CODE [,CODESET] )>,
-B<Locale::Script::add_script_code_alias ( CODE ,NEW_CODE [,CODESET] )>,
-B<Locale::Country::delete_country_code_alias ( CODE [,CODESET] )>,
-B<Locale::Language::delete_language_code_alias( CODE [,CODESET] )>,
-B<Locale::Currency::delete_currency_code_alias( CODE [,CODESET] )>,
-B<Locale::Script::delete_script_code_alias ( CODE [,CODESET] )>
+B<MODULE::rename_XXX ( CODE ,NEW_NAME [,CODESET] )>, B<MODULE::add_XXX (
+CODE ,NAME [,CODESET] )>, B<MODULE::delete_XXX ( CODE [,CODESET] )>,
+B<MODULE::add_XXX_alias ( NAME ,NEW_NAME )>, B<MODULE::delete_XXX_alias (
+NAME )>, B<MODULE::rename_XXX_code ( CODE ,NEW_CODE [,CODESET] )>,
+B<MODULE::add_XXX_code_alias ( CODE ,NEW_CODE [,CODESET] )>,
+B<MODULE::delete_XXX_code_alias ( CODE [,CODESET] )>
=item KNOWN BUGS AND LIMITATIONS
@@ -27088,8 +26834,120 @@ B<*>, B<*>
=item SEE ALSO
-B<Locale::Constants>, B<Locale::Country>, B<Locale::Language>,
-B<Locale::Script>, B<Locale::Currency>
+=item AUTHOR
+
+=item COPYRIGHT
+
+=back
+
+=head2 Locale::Codes::Changes - details changes to Locale::Codes
+
+=over 4
+
+=item SYNOPSIS
+
+=item VERSION 3.22 (yyyy-mm-dd; sbeck)
+
+=item VERSION 3.21 (2012-03-01; sbeck)
+
+=item VERSION 3.20 (2011-12-01; sbeck)
+
+B<Added limited support for deprecated codes>, B<Fixed capitalization>,
+B<Pod tests off by default>, B<Codesets may be specified by name>,
+B<alias_code deprecated>, B<Code cleanup>, B<Added LangFam module>
+
+=item VERSION 3.18 (2011-08-31; sbeck)
+
+B<No longer use CIA data>
+
+=item VERSION 3.17 (2011-06-28; sbeck)
+
+B<Added new types of codes>, B<Added new codeset(s)>, B<Bug fixes>,
+B<Reorganized code>
+
+=item VERSION 3.16 (2011-03-01; sbeck)
+
+=item VERSION 3.15 (2010-12-02; sbeck)
+
+B<Minor fixes>
+
+=item VERSION 3.14 (2010-09-28; sbeck)
+
+B<Bug fixes>
+
+=item VERSION 3.13 (2010-06-04; sbeck)
+
+=item VERSION 3.12 (2010-04-06; sbeck)
+
+B<Reorganized code>
+
+=item VERSION 3.11 (2010-03-01; sbeck)
+
+B<Added new codeset(s)>, B<Bug fixes>
+
+=item VERSION 3.10 (2010-02-18; sbeck)
+
+B<Reorganized code>, B<(!) Changed XXX_code2code behavior slightly>,
+B<Added many semi-private routines>, B<New aliases>
+
+=item VERSION 3.01 (2010-02-15; sbeck)
+
+B<Fixed Makefile.PL and Build.PL>
+
+=item VERSION 3.00 (2010-02-10; sbeck)
+
+B<New maintainer>, B<(*) (!) All codes are generated from standards>,
+B<Added new codeset(s)>, B<(*) (!) Locale::Script changed>, B<Added missing
+functions>, B<(!) Dropped support for _alias_code>, B<(!) All functions
+return the standard value>, B<(!) rename_country function altered>
+
+=item VERSION 2.07 (2004-06-10; neilb)
+
+=item VERSION 2.06 (2002-07-15; neilb)
+
+=item VERSION 2.05 (2002-07-08; neilb)
+
+=item VERSION 2.04 (2002-05-23; neilb)
+
+=item VERSION 2.03 (2002-03-24; neilb)
+
+=item VERSION 2.02 (2002-03-09; neilb)
+
+=item VERSION 2.01 (2002-02-18; neilb)
+
+=item VERSION 2.00 (2002-02-17; neilb)
+
+=item VERSION 1.06 (2001-03-04; neilb)
+
+=item VERSION 1.05 (2001-02-13; neilb)
+
+=item VERSION 1.04 (2000-12-21; neilb)
+
+=item VERSION 1.03 (2000-12-??; neilb)
+
+=item VERSION 1.02 (2000-05-04; neilb)
+
+=item VERSION 1.00 (1998-03-09; neilb)
+
+=item VERSION 0.003 (1997-05-09; neilb)
+
+=item SEE ALSO
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=back
+
+=head2 Locale::Codes::Constants - constants for Locale codes
+
+=over 4
+
+=item DESCRIPTION
+
+=item KNOWN BUGS AND LIMITATIONS
+
+=item SEE ALSO
=item AUTHOR
@@ -27097,32 +26955,54 @@ B<Locale::Script>, B<Locale::Currency>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Locale::Codes::Changes,
-Locale::Codes::Changes - details important changes after 2.07
+=head2 Locale::Codes::Country - standard codes for country identification
=over 4
-=item 3.10
+=item SYNOPSIS
-B<Changed XXX_code2code behavior slightly>, B<Added many semi-private
-routines>
+=item DESCRIPTION
-=item 3.00
+=item SUPPORTED CODE SETS
-B<New maintainer>, B<All codes are generated from standards>, B<Added
-several code sets from standards>, B<Locale::Script changed>, B<Added
-missing functions>, B<Dropped support for _alias_code>
+B<alpha-2, LOCALE_CODE_ALPHA_2>, B<alpha-3, LOCALE_CODE_ALPHA_3>,
+B<numeric, LOCALE_CODE_NUMERIC>, B<fips-10, LOCALE_CODE_FIPS>, B<dom,
+LOCALE_CODE_DOM>
+
+=item ROUTINES
+
+B<code2country ( CODE [,CODESET] )>, B<country2code ( NAME [,CODESET] )>,
+B<country_code2code ( CODE ,CODESET ,CODESET2 )>, B<all_country_codes (
+[CODESET] )>, B<all_country_names ( [CODESET] )>,
+B<Locale::Codes::Country::rename_country ( CODE ,NEW_NAME [,CODESET] )>,
+B<Locale::Codes::Country::add_country ( CODE ,NAME [,CODESET] )>,
+B<Locale::Codes::Country::delete_country ( CODE [,CODESET] )>,
+B<Locale::Codes::Country::add_country_alias ( NAME ,NEW_NAME )>,
+B<Locale::Codes::Country::delete_country_alias ( NAME )>,
+B<Locale::Codes::Country::rename_country_code ( CODE ,NEW_CODE [,CODESET]
+)>, B<Locale::Codes::Country::add_country_code_alias ( CODE ,NEW_CODE
+[,CODESET] )>, B<Locale::Codes::Country::delete_country_code_alias ( CODE
+[,CODESET] )>, B<alias_code ( ALIAS, CODE [,CODESET] )>
=item SEE ALSO
+B<Locale::Codes>, B<Locale::Codes::API>, B<Locale::SubCountry>,
+B<http://www.iso.org/iso/country_codes>,
+B<http://www.iso.org/iso/list-en1-semic-3.txt>,
+B<http://unstats.un.org/unsd/methods/m49/m49alpha.htm>,
+B<http://earth-info.nga.mil/gns/html/digraphs.htm>,
+B<http://www.iana.org/domains/>,
+B<https://www.cia.gov/library/publications/the-world-factbook/appendix/prin
+t_appendix-d.html>, B<http://www.statoids.com/wab.html>
+
=item AUTHOR
=item COPYRIGHT
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Locale::Codes::Country,
-Locale::Codes::Country - country codes for the Locale::Country module
+=head2 Locale::Codes::Country_Codes - country codes for the
+Locale::Codes::Country module
=over 4
@@ -27134,8 +27014,8 @@ Locale::Codes::Country - country codes for the Locale::Country module
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Locale::Codes::Currency,
-Locale::Codes::Currency - currency codes for the Locale::Currency module
+=head2 Locale::Codes::Country_Retired - retired country codes for the
+Locale::Codes::Country module
=over 4
@@ -27147,21 +27027,46 @@ Locale::Codes::Currency - currency codes for the Locale::Currency module
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Locale::Codes::Language,
-Locale::Codes::Language - language codes for the Locale::Language module
+=head2 Locale::Codes::Currency - standard codes for currency identification
=over 4
=item SYNOPSIS
+=item DESCRIPTION
+
+=item SUPPORTED CODE SETS
+
+B<alpha, LOCALE_CURR_ALPHA>, B<num, LOCALE_CURR_NUMERIC>
+
+=item ROUTINES
+
+B<code2currency ( CODE [,CODESET] )>, B<currency2code ( NAME [,CODESET] )>,
+B<currency_code2code ( CODE ,CODESET ,CODESET2 )>, B<all_currency_codes (
+[CODESET] )>, B<all_currency_names ( [CODESET] )>,
+B<Locale::Codes::Currency::rename_currency ( CODE ,NEW_NAME [,CODESET] )>,
+B<Locale::Codes::Currency::add_currency ( CODE ,NAME [,CODESET] )>,
+B<Locale::Codes::Currency::delete_currency ( CODE [,CODESET] )>,
+B<Locale::Codes::Currency::add_currency_alias ( NAME ,NEW_NAME )>,
+B<Locale::Codes::Currency::delete_currency_alias ( NAME )>,
+B<Locale::Codes::Currency::rename_currency_code ( CODE ,NEW_CODE
+[,CODESET] )>, B<Locale::Codes::Currency::add_currency_code_alias ( CODE
+,NEW_CODE [,CODESET] )>,
+B<Locale::Codes::Currency::delete_currency_code_alias ( CODE [,CODESET] )>
+
+=item SEE ALSO
+
+B<Locale::Codes>, B<Locale::Codes::API>,
+B<http://www.iso.org/iso/support/currency_codes_list-1.htm>
+
=item AUTHOR
=item COPYRIGHT
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Locale::Codes::Script,
-Locale::Codes::Script - script codes for the Locale::Script module
+=head2 Locale::Codes::Currency_Codes - currency codes for the
+Locale::Codes::Currency module
=over 4
@@ -27173,25 +27078,86 @@ Locale::Codes::Script - script codes for the Locale::Script module
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Locale::Constants, Locale::Constants -
-constants for Locale codes
+=head2 Locale::Codes::Currency_Retired - retired currency codes for the
+Locale::Codes::Currency module
=over 4
+=item SYNOPSIS
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=back
+
+=head2 Locale::Codes::LangExt - standard codes for language extension
+identification
+
+=over 4
+
+=item SYNOPSIS
+
=item DESCRIPTION
-=item KNOWN BUGS AND LIMITATIONS
+=item SUPPORTED CODE SETS
+
+B<alpha>
+
+=item ROUTINES
+
+B<code2langext ( CODE [,CODESET] )>, B<langext2code ( NAME [,CODESET] )>,
+B<langext_code2code ( CODE ,CODESET ,CODESET2 )>, B<all_langext_codes (
+[CODESET] )>, B<all_langext_names ( [CODESET] )>,
+B<Locale::Codes::LangExt::rename_langext ( CODE ,NEW_NAME [,CODESET] )>,
+B<Locale::Codes::LangExt::add_langext ( CODE ,NAME [,CODESET] )>,
+B<Locale::Codes::LangExt::delete_langext ( CODE [,CODESET] )>,
+B<Locale::Codes::LangExt::add_langext_alias ( NAME ,NEW_NAME )>,
+B<Locale::Codes::LangExt::delete_langext_alias ( NAME )>,
+B<Locale::Codes::LangExt::rename_langext_code ( CODE ,NEW_CODE [,CODESET]
+)>, B<Locale::Codes::LangExt::add_langext_code_alias ( CODE ,NEW_CODE
+[,CODESET] )>, B<Locale::Codes::LangExt::delete_langext_code_alias ( CODE
+[,CODESET] )>
=item SEE ALSO
+B<Locale::Codes>, B<Locale::Codes::API>,
+B<http://www.iana.org/assignments/language-subtag-registry>
+
=item AUTHOR
=item COPYRIGHT
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Locale::Country, Locale::Country -
-standard codes for country identification
+=head2 Locale::Codes::LangExt_Codes - langext codes for the
+Locale::Codes::LangExt module
+
+=over 4
+
+=item SYNOPSIS
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=back
+
+=head2 Locale::Codes::LangExt_Retired - retired langext codes for the
+Locale::Codes::LangExt module
+
+=over 4
+
+=item SYNOPSIS
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=back
+
+=head2 Locale::Codes::LangFam - standard codes for language extension
+identification
=over 4
@@ -27201,7 +27167,270 @@ standard codes for country identification
=item SUPPORTED CODE SETS
-B<alpha-2>, B<alpha-3>, B<numeric>, B<fips-10>, B<dom>
+B<alpha>
+
+=item ROUTINES
+
+B<code2langfam ( CODE [,CODESET] )>, B<langfam2code ( NAME [,CODESET] )>,
+B<langfam_code2code ( CODE ,CODESET ,CODESET2 )>, B<all_langfam_codes (
+[CODESET] )>, B<all_langfam_names ( [CODESET] )>,
+B<Locale::Codes::LangFam::rename_langfam ( CODE ,NEW_NAME [,CODESET] )>,
+B<Locale::Codes::LangFam::add_langfam ( CODE ,NAME [,CODESET] )>,
+B<Locale::Codes::LangFam::delete_langfam ( CODE [,CODESET] )>,
+B<Locale::Codes::LangFam::add_langfam_alias ( NAME ,NEW_NAME )>,
+B<Locale::Codes::LangFam::delete_langfam_alias ( NAME )>,
+B<Locale::Codes::LangFam::rename_langfam_code ( CODE ,NEW_CODE [,CODESET]
+)>, B<Locale::Codes::LangFam::add_langfam_code_alias ( CODE ,NEW_CODE
+[,CODESET] )>, B<Locale::Codes::LangFam::delete_langfam_code_alias ( CODE
+[,CODESET] )>
+
+=item SEE ALSO
+
+B<Locale::Codes>, B<Locale::Codes::API>,
+B<http://www.loc.gov/standards/iso639-5/id.php>
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=back
+
+=head2 Locale::Codes::LangFam_Codes - langfam codes for the
+Locale::Codes::LangFam module
+
+=over 4
+
+=item SYNOPSIS
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=back
+
+=head2 Locale::Codes::LangFam_Retired - retired langfam codes for the
+Locale::Codes::LangFam module
+
+=over 4
+
+=item SYNOPSIS
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=back
+
+=head2 Locale::Codes::LangVar - standard codes for language variation
+identification
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item SUPPORTED CODE SETS
+
+B<alpha>
+
+=item ROUTINES
+
+B<code2langvar ( CODE [,CODESET] )>, B<langvar2code ( NAME [,CODESET] )>,
+B<langvar_code2code ( CODE ,CODESET ,CODESET2 )>, B<all_langvar_codes (
+[CODESET] )>, B<all_langvar_names ( [CODESET] )>,
+B<Locale::Codes::LangVar::rename_langvar ( CODE ,NEW_NAME [,CODESET] )>,
+B<Locale::Codes::LangVar::add_langvar ( CODE ,NAME [,CODESET] )>,
+B<Locale::Codes::LangVar::delete_langvar ( CODE [,CODESET] )>,
+B<Locale::Codes::LangVar::add_langvar_alias ( NAME ,NEW_NAME )>,
+B<Locale::Codes::LangVar::delete_langvar_alias ( NAME )>,
+B<Locale::Codes::LangVar::rename_langvar_code ( CODE ,NEW_CODE [,CODESET]
+)>, B<Locale::Codes::LangVar::add_langvar_code_alias ( CODE ,NEW_CODE
+[,CODESET] )>, B<Locale::Codes::LangVar::delete_langvar_code_alias ( CODE
+[,CODESET] )>
+
+=item SEE ALSO
+
+B<Locale::Codes>, B<Locale::Codes::API>,
+B<http://www.iana.org/assignments/language-subtag-registry>
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=back
+
+=head2 Locale::Codes::LangVar_Codes - langvar codes for the
+Locale::Codes::LangVar module
+
+=over 4
+
+=item SYNOPSIS
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=back
+
+=head2 Locale::Codes::LangVar_Retired - retired langvar codes for the
+Locale::Codes::LangVar module
+
+=over 4
+
+=item SYNOPSIS
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=back
+
+=head2 Locale::Codes::Language - standard codes for language identification
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item SUPPORTED CODE SETS
+
+B<alpha-2, LOCALE_LANG_ALPHA_2>, B<alpha-3, LOCALE_LANG_ALPHA_3>, B<term,
+LOCALE_LANG_TERM>
+
+=item ROUTINES
+
+B<code2language ( CODE [,CODESET] )>, B<language2code ( NAME [,CODESET] )>,
+B<language_code2code ( CODE ,CODESET ,CODESET2 )>, B<all_language_codes (
+[CODESET] )>, B<all_language_names ( [CODESET] )>,
+B<Locale::Codes::Language::rename_language ( CODE ,NEW_NAME [,CODESET] )>,
+B<Locale::Codes::Language::add_language ( CODE ,NAME [,CODESET] )>,
+B<Locale::Codes::Language::delete_language ( CODE [,CODESET] )>,
+B<Locale::Codes::Language::add_language_alias ( NAME ,NEW_NAME )>,
+B<Locale::Codes::Language::delete_language_alias ( NAME )>,
+B<Locale::Codes::Language::rename_language_code ( CODE ,NEW_CODE
+[,CODESET] )>, B<Locale::Codes::Language::add_language_code_alias ( CODE
+,NEW_CODE [,CODESET] )>,
+B<Locale::Codes::Language::delete_language_code_alias ( CODE [,CODESET] )>
+
+=item SEE ALSO
+
+B<Locale::Codes>, B<Locale::Codes::API>,
+B<http://www.loc.gov/standards/iso639-2/>,
+B<http://www.loc.gov/standards/iso639-5/>,
+B<http://www.iana.org/assignments/language-subtag-registry>
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=back
+
+=head2 Locale::Codes::Language_Codes - language codes for the
+Locale::Codes::Language module
+
+=over 4
+
+=item SYNOPSIS
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=back
+
+=head2 Locale::Codes::Language_Retired - retired language codes for the
+Locale::Codes::Language module
+
+=over 4
+
+=item SYNOPSIS
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=back
+
+=head2 Locale::Codes::Script - standard codes for script identification
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item SUPPORTED CODE SETS
+
+B<alpha, LOCALE_SCRIPT_ALPHA>, B<num, LOCALE_SCRIPT_NUMERIC>
+
+=item ROUTINES
+
+B<code2script ( CODE [,CODESET] )>, B<script2code ( NAME [,CODESET] )>,
+B<script_code2code ( CODE ,CODESET ,CODESET2 )>, B<all_script_codes (
+[CODESET] )>, B<all_script_names ( [CODESET] )>,
+B<Locale::Codes::Script::rename_script ( CODE ,NEW_NAME [,CODESET] )>,
+B<Locale::Codes::Script::add_script ( CODE ,NAME [,CODESET] )>,
+B<Locale::Codes::Script::delete_script ( CODE [,CODESET] )>,
+B<Locale::Codes::Script::add_script_alias ( NAME ,NEW_NAME )>,
+B<Locale::Codes::Script::delete_script_alias ( NAME )>,
+B<Locale::Codes::Script::rename_script_code ( CODE ,NEW_CODE [,CODESET]
+)>, B<Locale::Codes::Script::add_script_code_alias ( CODE ,NEW_CODE
+[,CODESET] )>, B<Locale::Codes::Script::delete_script_code_alias ( CODE
+[,CODESET] )>
+
+=item SEE ALSO
+
+B<Locale::Codes>, B<Locale::Codes::API>,
+B<http://www.unicode.org/iso15924/>,
+B<http://www.iana.org/assignments/language-subtag-registry>
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=back
+
+=head2 Locale::Codes::Script_Codes - script codes for the
+Locale::Codes::Script module
+
+=over 4
+
+=item SYNOPSIS
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=back
+
+=head2 Locale::Codes::Script_Retired - retired script codes for the
+Locale::Codes::Script module
+
+=over 4
+
+=item SYNOPSIS
+
+=item AUTHOR
+
+=item COPYRIGHT
+
+=back
+
+=head2 Locale::Country - standard codes for country identification
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item SUPPORTED CODE SETS
+
+B<alpha-2, LOCALE_CODE_ALPHA_2>, B<alpha-3, LOCALE_CODE_ALPHA_3>,
+B<numeric, LOCALE_CODE_NUMERIC>, B<fips-10, LOCALE_CODE_FIPS>, B<dom,
+LOCALE_CODE_DOM>
=item ROUTINES
@@ -27220,7 +27449,7 @@ B<alias_code ( ALIAS, CODE [,CODESET] )>
=item SEE ALSO
-B<Locale::Codes>, B<Locale::Constants>, B<Locale::SubCountry>,
+B<Locale::Codes>, B<Locale::Codes::API>, B<Locale::SubCountry>,
B<http://www.iso.org/iso/country_codes>,
B<http://www.iso.org/iso/list-en1-semic-3.txt>,
B<http://unstats.un.org/unsd/methods/m49/m49alpha.htm>,
@@ -27235,8 +27464,7 @@ t_appendix-d.html>, B<http://www.statoids.com/wab.html>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Locale::Currency, Locale::Currency -
-standard codes for currency identification
+=head2 Locale::Currency - standard codes for currency identification
=over 4
@@ -27246,7 +27474,7 @@ standard codes for currency identification
=item SUPPORTED CODE SETS
-B<alpha>, B<num>
+B<alpha, LOCALE_CURR_ALPHA>, B<num, LOCALE_CURR_NUMERIC>
=item ROUTINES
@@ -27264,7 +27492,7 @@ B<Locale::Currency::add_currency_code_alias ( CODE ,NEW_CODE [,CODESET]
=item SEE ALSO
-B<Locale::Codes>, B<Locale::Constants>,
+B<Locale::Codes>, B<Locale::Codes::API>,
B<http://www.iso.org/iso/support/currency_codes_list-1.htm>
=item AUTHOR
@@ -27273,8 +27501,7 @@ B<http://www.iso.org/iso/support/currency_codes_list-1.htm>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Locale::Language, Locale::Language -
-standard codes for language identification
+=head2 Locale::Language - standard codes for language identification
=over 4
@@ -27284,7 +27511,8 @@ standard codes for language identification
=item SUPPORTED CODE SETS
-B<alpha-2>, B<alpha-3>, B<term>
+B<alpha-2, LOCALE_LANG_ALPHA_2>, B<alpha-3, LOCALE_LANG_ALPHA_3>, B<term,
+LOCALE_LANG_TERM>
=item ROUTINES
@@ -27302,8 +27530,10 @@ B<Locale::Language::add_language_code_alias ( CODE ,NEW_CODE [,CODESET]
=item SEE ALSO
-B<Locale::Codes>, B<Locale::Constants>,
-B<http://www.loc.gov/standards/iso639-2/>
+B<Locale::Codes>, B<Locale::Codes::API>,
+B<http://www.loc.gov/standards/iso639-2/>,
+B<http://www.loc.gov/standards/iso639-5/>,
+B<http://www.iana.org/assignments/language-subtag-registry>
=item AUTHOR
@@ -27311,8 +27541,7 @@ B<http://www.loc.gov/standards/iso639-2/>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Locale::Maketext, Locale::Maketext -
-framework for localization
+=head2 Locale::Maketext - framework for localization
=over 4
@@ -27336,8 +27565,9 @@ $lh->fail_with I<or> $lh->fail_with(I<PARAM>), $lh->failure_handler_auto
$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()
+$language->numf($number), $language->numerate($number, $singular, $plural,
+$negative), $language->sprintf($format, @items), $language->language_tag(),
+$language->encoding()
=item Language Handle Attributes and Internals
@@ -27365,8 +27595,7 @@ $language->language_tag(), $language->encoding()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Locale::Maketext::Cookbook,
-Locale::Maketext::Cookbook - recipes for using Locale::Maketext
+=head2 Locale::Maketext::Cookbook - recipes for using Locale::Maketext
=over 4
@@ -27378,9 +27607,8 @@ Locale::Maketext::Cookbook - recipes for using Locale::Maketext
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Locale::Maketext::Guts,
-Locale::Maketext::Guts - Deprecated module to load Locale::Maketext utf8
-code
+=head2 Locale::Maketext::Guts - Deprecated module to load Locale::Maketext
+utf8 code
=over 4
@@ -27390,9 +27618,8 @@ code
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Locale::Maketext::GutsLoader,
-Locale::Maketext::GutsLoader - Deprecated module to load Locale::Maketext
-utf8 code
+=head2 Locale::Maketext::GutsLoader - Deprecated module to load
+Locale::Maketext utf8 code
=over 4
@@ -27402,8 +27629,8 @@ utf8 code
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Locale::Maketext::Simple,
-Locale::Maketext::Simple - Simple interface to Locale::Maketext::Lexicon
+=head2 Locale::Maketext::Simple - Simple interface to
+Locale::Maketext::Lexicon
=over 4
@@ -27453,8 +27680,7 @@ Locale::Maketext::Simple - Simple interface to Locale::Maketext::Lexicon
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Locale::Maketext::TPJ13,
-Locale::Maketext::TPJ13 -- article about software localization
+=head2 Locale::Maketext::TPJ13 -- article about software localization
=over 4
@@ -27492,8 +27718,7 @@ Locale::Maketext::TPJ13 -- article about software localization
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Locale::Script, Locale::Script -
-standard codes for script identification
+=head2 Locale::Script - standard codes for script identification
=over 4
@@ -27503,7 +27728,7 @@ standard codes for script identification
=item SUPPORTED CODE SETS
-B<alpha>, B<numeric>
+B<alpha, LOCALE_SCRIPT_ALPHA>, B<num, LOCALE_SCRIPT_NUMERIC>
=item ROUTINES
@@ -27521,7 +27746,9 @@ B<Locale::Script::delete_script_code_alias ( CODE [,CODESET] )>
=item SEE ALSO
-B<Locale::Codes>, B<Locale::Constants>, B<http://www.unicode.org/iso15924/>
+B<Locale::Codes>, B<Locale::Codes::API>,
+B<http://www.unicode.org/iso15924/>,
+B<http://www.iana.org/assignments/language-subtag-registry>
=item AUTHOR
@@ -27529,8 +27756,7 @@ B<Locale::Codes>, B<Locale::Constants>, B<http://www.unicode.org/iso15924/>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Log::Message, Log::Message - A generic
-message storing mechanism;
+=head2 Log::Message - A generic message storing mechanism;
=over 4
@@ -27607,8 +27833,7 @@ tag, level, message, amount, chrono, remove
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Log::Message::Config,
-Log::Message::Config - Configuration options for Log::Message
+=head2 Log::Message::Config - Configuration options for Log::Message
=over 4
@@ -27626,8 +27851,7 @@ Log::Message::Config - Configuration options for Log::Message
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Log::Message::Handlers,
-Log::Message::Handlers - Message handlers for Log::Message
+=head2 Log::Message::Handlers - Message handlers for Log::Message
=over 4
@@ -27701,8 +27925,7 @@ Log::Message::Handlers - Message handlers for Log::Message
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Log::Message::Item, Log::Message::Item
-- Message objects for Log::Message
+=head2 Log::Message::Item - Message objects for Log::Message
=over 4
@@ -27744,8 +27967,7 @@ Log::Message::Handlers - Message handlers for Log::Message
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Log::Message::Simple,
-Log::Message::Simple - Simplified interface to Log::Message
+=head2 Log::Message::Simple - Simplified interface to Log::Message
=over 4
@@ -27803,8 +28025,7 @@ $ERROR_FH, $MSG_FH, $DEBUG_FH, $STACKTRACE_ON_ERROR
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::MIME::Base64, MIME::Base64 - Encoding
-and decoding of base64 strings
+=head2 MIME::Base64 - Encoding and decoding of base64 strings
=over 4
@@ -27825,8 +28046,8 @@ decoded_base64_length( $str )
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::MIME::QuotedPrint, MIME::QuotedPrint -
-Encoding and decoding of quoted-printable strings
+=head2 MIME::QuotedPrint - Encoding and decoding of quoted-printable
+strings
=over 4
@@ -27843,8 +28064,7 @@ encode_qp( $str), encode_qp( $str, $eol), encode_qp( $str, $eol, $binmode
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Math::BigFloat, Math::BigFloat -
-Arbitrary size floating point math package
+=head2 Math::BigFloat - Arbitrary size floating point math package
=over 4
@@ -27922,8 +28142,7 @@ accuracy()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Math::BigInt, Math::BigInt - Arbitrary
-size integer/float math package
+=head2 Math::BigInt - Arbitrary size integer/float math package
=over 4
@@ -27979,6 +28198,8 @@ Input, Output
=item babs()
+=item bsgn()
+
=item bnorm()
=item bnot()
@@ -28130,12 +28351,16 @@ oct()/hex(), log(-inf), exp(), cos(), sin(), atan2()
=item Alternative math libraries
+=back
+
=item SUBCLASSING
-=back
+=over 4
=item Subclassing Math::BigInt
+=back
+
=item UPGRADING
=over 4
@@ -28162,8 +28387,7 @@ bsqrt(), brsft()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Math::BigInt::Calc, Math::BigInt::Calc -
-Pure Perl module to support Math::BigInt
+=head2 Math::BigInt::Calc - Pure Perl module to support Math::BigInt
=over 4
@@ -28213,8 +28437,7 @@ SIGN2)>, I<_signed_xor(OBJ1, OBJ2, SIGN1, SIGN2)>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Math::BigInt::CalcEmu,
-Math::BigInt::CalcEmu - Emulate low-level math with BigInt code
+=head2 Math::BigInt::CalcEmu - Emulate low-level math with BigInt code
=over 4
@@ -28242,8 +28465,8 @@ Math::BigInt::CalcEmu - Emulate low-level math with BigInt code
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Math::BigInt::FastCalc,
-Math::BigInt::FastCalc - Math::BigInt::Calc with some XS for more speed
+=head2 Math::BigInt::FastCalc - Math::BigInt::Calc with some XS for more
+speed
=over 4
@@ -28263,8 +28486,7 @@ Math::BigInt::FastCalc - Math::BigInt::Calc with some XS for more speed
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Math::BigRat, Math::BigRat - Arbitrary
-big rational numbers
+=head2 Math::BigRat - Arbitrary big rational numbers
=over 4
@@ -28376,8 +28598,8 @@ blog(), bmodinv() and bmodpow() (partial)
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Math::Complex, Math::Complex - complex
-numbers and associated mathematical functions
+=head2 Math::Complex - complex numbers and associated mathematical
+functions
=over 4
@@ -28423,8 +28645,7 @@ numbers and associated mathematical functions
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Math::Trig, Math::Trig - trigonometric
-functions
+=head2 Math::Trig - trigonometric functions
=over 4
@@ -28500,8 +28721,7 @@ asin_real, acos_real
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Memoize, Memoize - Make functions faster
-by trading space for time
+=head2 Memoize - Make functions faster by trading space for time
=over 4
@@ -28553,9 +28773,8 @@ C<MEMORY>, C<HASH>, C<TIE>, C<FAULT>, C<MERGE>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Memoize::AnyDBM_File,
-Memoize::AnyDBM_File - glue to provide EXISTS for AnyDBM_File for Storable
-use
+=head2 Memoize::AnyDBM_File - glue to provide EXISTS for AnyDBM_File for
+Storable use
=over 4
@@ -28563,8 +28782,8 @@ use
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Memoize::Expire, Memoize::Expire -
-Plug-in module for automatic expiration of memoized values
+=head2 Memoize::Expire - Plug-in module for automatic expiration of
+memoized values
=over 4
@@ -28586,8 +28805,7 @@ Plug-in module for automatic expiration of memoized values
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Memoize::ExpireFile, Memoize::ExpireFile
-- test for Memoize expiration semantics
+=head2 Memoize::ExpireFile - test for Memoize expiration semantics
=over 4
@@ -28595,8 +28813,7 @@ Plug-in module for automatic expiration of memoized values
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Memoize::ExpireTest, Memoize::ExpireTest
-- test for Memoize expiration semantics
+=head2 Memoize::ExpireTest - test for Memoize expiration semantics
=over 4
@@ -28604,8 +28821,8 @@ Plug-in module for automatic expiration of memoized values
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Memoize::NDBM_File, Memoize::NDBM_File -
-glue to provide EXISTS for NDBM_File for Storable use
+=head2 Memoize::NDBM_File - glue to provide EXISTS for NDBM_File for
+Storable use
=over 4
@@ -28613,8 +28830,8 @@ glue to provide EXISTS for NDBM_File for Storable use
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Memoize::SDBM_File, Memoize::SDBM_File -
-glue to provide EXISTS for SDBM_File for Storable use
+=head2 Memoize::SDBM_File - glue to provide EXISTS for SDBM_File for
+Storable use
=over 4
@@ -28622,8 +28839,7 @@ glue to provide EXISTS for SDBM_File for Storable use
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Memoize::Storable, Memoize::Storable -
-store Memoized data in Storable database
+=head2 Memoize::Storable - store Memoized data in Storable database
=over 4
@@ -28631,8 +28847,7 @@ store Memoized data in Storable database
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build, Module::Build - Build and
-install Perl modules
+=head2 Module::Build - Build and install Perl modules
=over 4
@@ -28690,8 +28905,7 @@ install_path, install_base, destdir, prefix
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::API, Module::Build::API -
-API Reference for Module Authors
+=head2 Module::Build::API - API Reference for Module Authors
=over 4
@@ -28774,8 +28988,7 @@ keywords, resources
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Authoring,
-Module::Build::Authoring - Authoring Module::Build modules
+=head2 Module::Build::Authoring - Authoring Module::Build modules
=over 4
@@ -28813,8 +29026,7 @@ configure_requires, build_requires, requires, recommends, conflicts
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Base, Module::Build::Base
-- Default methods for Module::Build
+=head2 Module::Build::Base - Default methods for Module::Build
=over 4
@@ -28830,8 +29042,8 @@ configure_requires, build_requires, requires, recommends, conflicts
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Bundling,
-Module::Build::Bundling - How to bundle Module::Build with a distribution
+=head2 Module::Build::Bundling - How to bundle Module::Build with a
+distribution
=over 4
@@ -28853,8 +29065,7 @@ Module::Build::Bundling - How to bundle Module::Build with a distribution
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Compat,
-Module::Build::Compat - Compatibility with ExtUtils::MakeMaker
+=head2 Module::Build::Compat - Compatibility with ExtUtils::MakeMaker
=over 4
@@ -28878,8 +29089,7 @@ makefile
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::ConfigData,
-Module::Build::ConfigData - Configuration for Module::Build
+=head2 Module::Build::ConfigData - Configuration for Module::Build
=over 4
@@ -28897,8 +29107,7 @@ auto_feature_names(), write()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Cookbook,
-Module::Build::Cookbook - Examples of Module::Build Usage
+=head2 Module::Build::Cookbook - Examples of Module::Build Usage
=over 4
@@ -28968,8 +29177,7 @@ to the testing, do I generate a test file
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::ModuleInfo,
-Module::Build::ModuleInfo - DEPRECATED
+=head2 Module::Build::ModuleInfo - DEPRECATED
=over 4
@@ -28979,8 +29187,8 @@ Module::Build::ModuleInfo - DEPRECATED
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Notes,
-Module::Build::Notes - Create persistent distribution configuration modules
+=head2 Module::Build::Notes - Create persistent distribution configuration
+modules
=over 4
@@ -28994,8 +29202,7 @@ Module::Build::Notes - Create persistent distribution configuration modules
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Notes, NOTES_NAME -
-Configuration for MODULE_NAME
+=head2 Module::Build::Notes, NOTES_NAME - Configuration for MODULE_NAME
=over 4
@@ -29013,8 +29220,7 @@ auto_feature_names(), write()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::PPMMaker,
-Module::Build::PPMMaker - Perl Package Manager file creation
+=head2 Module::Build::PPMMaker - Perl Package Manager file creation
=over 4
@@ -29030,8 +29236,7 @@ Module::Build::PPMMaker - Perl Package Manager file creation
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Platform::Amiga,
-Module::Build::Platform::Amiga - Builder class for Amiga platforms
+=head2 Module::Build::Platform::Amiga - Builder class for Amiga platforms
=over 4
@@ -29043,8 +29248,7 @@ Module::Build::Platform::Amiga - Builder class for Amiga platforms
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Platform::Default,
-Module::Build::Platform::Default - Stub class for unknown platforms
+=head2 Module::Build::Platform::Default - Stub class for unknown platforms
=over 4
@@ -29056,8 +29260,7 @@ Module::Build::Platform::Default - Stub class for unknown platforms
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Platform::EBCDIC,
-Module::Build::Platform::EBCDIC - Builder class for EBCDIC platforms
+=head2 Module::Build::Platform::EBCDIC - Builder class for EBCDIC platforms
=over 4
@@ -29069,8 +29272,7 @@ Module::Build::Platform::EBCDIC - Builder class for EBCDIC platforms
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Platform::MPEiX,
-Module::Build::Platform::MPEiX - Builder class for MPEiX platforms
+=head2 Module::Build::Platform::MPEiX - Builder class for MPEiX platforms
=over 4
@@ -29082,8 +29284,7 @@ Module::Build::Platform::MPEiX - Builder class for MPEiX platforms
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Platform::MacOS,
-Module::Build::Platform::MacOS - Builder class for MacOS platforms
+=head2 Module::Build::Platform::MacOS - Builder class for MacOS platforms
=over 4
@@ -29103,8 +29304,7 @@ new(), make_executable(), dispatch(), ACTION_realclean()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Platform::RiscOS,
-Module::Build::Platform::RiscOS - Builder class for RiscOS platforms
+=head2 Module::Build::Platform::RiscOS - Builder class for RiscOS platforms
=over 4
@@ -29116,8 +29316,7 @@ Module::Build::Platform::RiscOS - Builder class for RiscOS platforms
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Platform::Unix,
-Module::Build::Platform::Unix - Builder class for Unix platforms
+=head2 Module::Build::Platform::Unix - Builder class for Unix platforms
=over 4
@@ -29129,8 +29328,7 @@ Module::Build::Platform::Unix - Builder class for Unix platforms
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Platform::VMS,
-Module::Build::Platform::VMS - Builder class for VMS platforms
+=head2 Module::Build::Platform::VMS - Builder class for VMS platforms
=over 4
@@ -29194,8 +29392,7 @@ ACTION_clean
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Platform::VOS,
-Module::Build::Platform::VOS - Builder class for VOS platforms
+=head2 Module::Build::Platform::VOS - Builder class for VOS platforms
=over 4
@@ -29207,8 +29404,8 @@ Module::Build::Platform::VOS - Builder class for VOS platforms
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Platform::Windows,
-Module::Build::Platform::Windows - Builder class for Windows platforms
+=head2 Module::Build::Platform::Windows - Builder class for Windows
+platforms
=over 4
@@ -29220,8 +29417,7 @@ Module::Build::Platform::Windows - Builder class for Windows platforms
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Platform::aix,
-Module::Build::Platform::aix - Builder class for AIX platform
+=head2 Module::Build::Platform::aix - Builder class for AIX platform
=over 4
@@ -29233,8 +29429,7 @@ Module::Build::Platform::aix - Builder class for AIX platform
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Platform::cygwin,
-Module::Build::Platform::cygwin - Builder class for Cygwin platform
+=head2 Module::Build::Platform::cygwin - Builder class for Cygwin platform
=over 4
@@ -29246,8 +29441,8 @@ Module::Build::Platform::cygwin - Builder class for Cygwin platform
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Platform::darwin,
-Module::Build::Platform::darwin - Builder class for Mac OS X platform
+=head2 Module::Build::Platform::darwin - Builder class for Mac OS X
+platform
=over 4
@@ -29259,8 +29454,7 @@ Module::Build::Platform::darwin - Builder class for Mac OS X platform
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Platform::os2,
-Module::Build::Platform::os2 - Builder class for OS/2 platform
+=head2 Module::Build::Platform::os2 - Builder class for OS/2 platform
=over 4
@@ -29272,8 +29466,7 @@ Module::Build::Platform::os2 - Builder class for OS/2 platform
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::Version,
-Module::Build::Version - DEPRECATED
+=head2 Module::Build::Version - DEPRECATED
=over 4
@@ -29281,8 +29474,7 @@ Module::Build::Version - DEPRECATED
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Build::YAML, Module::Build::YAML
-- DEPRECATED
+=head2 Module::Build::YAML - DEPRECATED
=over 4
@@ -29290,8 +29482,7 @@ Module::Build::Version - DEPRECATED
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::CoreList, Module::CoreList -
-what modules shipped with versions of perl
+=head2 Module::CoreList - what modules shipped with versions of perl
=over 4
@@ -29304,7 +29495,8 @@ what modules shipped with versions of perl
C<first_release( MODULE )>, C<first_release_by_date( MODULE )>,
C<find_modules( REGEX, [ LIST OF PERLS ] )>, C<find_version( PERL_VERSION
)>, C<is_deprecated( MODULE, PERL_VERSION )>, C<removed_from( MODULE )>,
-C<removed_from_by_date( MODULE )>
+C<removed_from_by_date( MODULE )>, C<changes_between( PERL_VERSION,
+PERL_VERSION )>
=item DATA STRUCTURES
@@ -29324,8 +29516,7 @@ C<%Module::CoreList::upstream>, C<%Module::CoreList::bug_tracker>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Load, Module::Load - runtime
-require of both modules and files
+=head2 Module::Load - runtime require of both modules and files
=over 4
@@ -29347,9 +29538,8 @@ require of both modules and files
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Load::Conditional,
-Module::Load::Conditional - Looking up module information / loading at
-runtime
+=head2 Module::Load::Conditional - Looking up module information / loading
+at runtime
=over 4
@@ -29415,8 +29605,7 @@ modules, verbose, nocache
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Loaded, Module::Loaded - mark
-modules as loaded or unloaded
+=head2 Module::Loaded - mark modules as loaded or unloaded
=over 4
@@ -29456,19 +29645,37 @@ modules as loaded or unloaded
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Metadata, Module::Metadata -
-Gather package and POD information from perl module files
+=head2 Module::Metadata - Gather package and POD information from perl
+module files
=over 4
+=item SYNOPSIS
+
=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), package_versions_from_directory($dir, \@files?), log_info
-(internal)
+=item USAGE
+
+=over 4
+
+=item Class methods
+
+C<< new_from_file($filename, collect_pod => 1) >>, C<<
+new_from_handle($handle, $filename, collect_pod => 1) >>, C<<
+new_from_module($module, collect_pod => 1, inc => \@dirs) >>, C<<
+find_module_by_name($module, \@dirs) >>, C<<
+find_module_dir_by_name($module, \@dirs) >>, C<< provides( %options ) >>,
+version B<(required)>, dir, files, prefix, C<<
+package_versions_from_directory($dir, \@files?) >>, C<< log_info (internal)
+>>
+
+=item Object methods
+
+C<< name() >>, C<< version($package) >>, C<< filename() >>, C<<
+packages_inside() >>, C<< pod_inside() >>, C<< contains_pod() >>, C<<
+pod($section) >>
+
+=back
=item AUTHOR
@@ -29476,8 +29683,8 @@ find_module_by_name($module, \@dirs), find_module_dir_by_name($module,
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Pluggable, Module::Pluggable -
-automatically give your module the ability to have plugins
+=head2 Module::Pluggable - automatically give your module the ability to
+have plugins
=over 4
@@ -29539,9 +29746,8 @@ automatically give your module the ability to have plugins
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Module::Pluggable::Object,
-Module::Pluggable::Object - automatically give your module the ability to
-have plugins
+=head2 Module::Pluggable::Object - automatically give your module the
+ability to have plugins
=over 4
@@ -29561,8 +29767,8 @@ have plugins
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::NEXT, NEXT.pm - Provide a pseudo-class
-NEXT (et al) that allows method redispatch
+=head2 NEXT - Provide a pseudo-class NEXT (et al) that allows method
+redispatch
=over 4
@@ -29590,8 +29796,7 @@ NEXT (et al) that allows method redispatch
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Net::Cmd, Net::Cmd - Network Command
-class (as used by FTP, SMTP etc)
+=head2 Net::Cmd - Network Command class (as used by FTP, SMTP etc)
=over 4
@@ -29618,8 +29823,7 @@ ungetline ( TEXT ), rawdatasend ( DATA ), read_until_dot (), tied_fh ()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Net::Config, Net::Config - Local
-configuration data for libnet
+=head2 Net::Config - Local configuration data for libnet
=over 4
@@ -29639,8 +29843,8 @@ ftp_int_passive, local_netmask, test_hosts, test_exists
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Net::Domain, Net::Domain - Attempt to
-evaluate the current host's internet name and domain
+=head2 Net::Domain - Attempt to evaluate the current host's internet name
+and domain
=over 4
@@ -29656,7 +29860,7 @@ hostfqdn (), domainname (), hostname (), hostdomain ()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Net::FTP, Net::FTP - FTP Client class
+=head2 Net::FTP - FTP Client class
=over 4
@@ -29719,7 +29923,7 @@ http://www.csh.rit.edu/~adam/Progs/
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Net::NNTP, Net::NNTP - NNTP Client class
+=head2 Net::NNTP - NNTP Client class
=over 4
@@ -29767,8 +29971,7 @@ MESSAGE-SPEC, PATTERN, Examples, C<[^]-]>, C<*bdc>, C<[0-9a-zA-Z]>, C<a??d>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Net::Netrc, Net::Netrc - OO interface to
-users netrc file
+=head2 Net::Netrc - OO interface to users netrc file
=over 4
@@ -29797,8 +30000,7 @@ login (), password (), account (), lpa ()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Net::POP3, Net::POP3 - Post Office
-Protocol 3 Client class (RFC1939)
+=head2 Net::POP3 - Post Office Protocol 3 Client class (RFC1939)
=over 4
@@ -29828,8 +30030,7 @@ auth ( USERNAME, PASSWORD ), user ( USER ), pass ( PASS ), login ( [ USER
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Net::Ping, Net::Ping - check a remote
-host for reachability
+=head2 Net::Ping - check a remote host for reachability
=over 4
@@ -29862,8 +30063,7 @@ $p->port_number([$port_number]), pingecho($host [, $timeout]);
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Net::SMTP, Net::SMTP - Simple Mail
-Transfer Protocol Client
+=head2 Net::SMTP - Simple Mail Transfer Protocol Client
=over 4
@@ -29897,8 +30097,7 @@ $subject ] ), quit ()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Net::Time, Net::Time - time and daytime
-network client interface
+=head2 Net::Time - time and daytime network client interface
=over 4
@@ -29915,8 +30114,8 @@ PROTOCOL [, TIMEOUT]]])
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Net::hostent, Net::hostent - by-name
-interface to Perl's built-in gethost*() functions
+=head2 Net::hostent - by-name interface to Perl's built-in gethost*()
+functions
=over 4
@@ -29932,8 +30131,7 @@ interface to Perl's built-in gethost*() functions
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Net::libnetFAQ, libnetFAQ - libnet
-Frequently Asked Questions
+=head2 Net::libnetFAQ, libnetFAQ - libnet Frequently Asked Questions
=over 4
@@ -30034,8 +30232,8 @@ hostname ?
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Net::netent, Net::netent - by-name
-interface to Perl's built-in getnet*() functions
+=head2 Net::netent - by-name interface to Perl's built-in getnet*()
+functions
=over 4
@@ -30051,8 +30249,8 @@ interface to Perl's built-in getnet*() functions
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Net::protoent, Net::protoent - by-name
-interface to Perl's built-in getproto*() functions
+=head2 Net::protoent - by-name interface to Perl's built-in getproto*()
+functions
=over 4
@@ -30066,8 +30264,8 @@ interface to Perl's built-in getproto*() functions
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Net::servent, Net::servent - by-name
-interface to Perl's built-in getserv*() functions
+=head2 Net::servent - by-name interface to Perl's built-in getserv*()
+functions
=over 4
@@ -30083,8 +30281,7 @@ interface to Perl's built-in getserv*() functions
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::O, O - Generic interface to Perl
-Compiler backends
+=head2 O - Generic interface to Perl Compiler backends
=over 4
@@ -30102,8 +30299,7 @@ Compiler backends
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Object::Accessor, Object::Accessor -
-interface to create per object accessors
+=head2 Object::Accessor - interface to create per object accessors
=over 4
@@ -30238,8 +30434,7 @@ Allow handlers, Callbacks
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Opcode, Opcode - Disable named opcodes
-when compiling perl code
+=head2 Opcode - Disable named opcodes when compiling perl code
=over 4
@@ -30284,8 +30479,7 @@ opdump (PAT)
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::POSIX, POSIX - Perl interface to IEEE
-Std 1003.1
+=head2 POSIX - Perl interface to IEEE Std 1003.1
=over 4
@@ -30293,8 +30487,6 @@ Std 1003.1
=item DESCRIPTION
-=item NOTE
-
=item CAVEATS
=item FUNCTIONS
@@ -30419,8 +30611,7 @@ WTERMSIG, WIFSTOPPED, WSTOPSIG
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Package::Constants, Package::Constants -
-List all constants declared in a package
+=head2 Package::Constants - List all constants declared in a package
=over 4
@@ -30460,8 +30651,7 @@ List all constants declared in a package
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Params::Check, Params::Check - A generic
-input parsing/checking mechanism.
+=head2 Params::Check - A generic input parsing/checking mechanism.
=over 4
@@ -30537,8 +30727,7 @@ string, regexp, subroutine, array ref
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Parse::CPAN::Meta, Parse::CPAN::Meta -
-Parse META.yml and META.json CPAN metadata files
+=head2 Parse::CPAN::Meta - Parse META.yml and META.json CPAN metadata files
=over 4
@@ -30590,8 +30779,7 @@ Parse META.yml and META.json CPAN metadata files
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Perl::OSType, Perl::OSType - Map Perl
-operating system names to generic types
+=head2 Perl::OSType - Map Perl operating system names to generic types
=over 4
@@ -30619,8 +30807,8 @@ operating system names to generic types
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::PerlIO, PerlIO - On demand loader for
-PerlIO layers and root of PerlIO::* name space
+=head2 PerlIO - On demand loader for PerlIO layers and root of PerlIO::*
+name space
=over 4
@@ -30628,13 +30816,13 @@ PerlIO layers and root of PerlIO::* name space
=item DESCRIPTION
-:unix, :stdio, :perlio, :crlf, :mmap, :utf8, :bytes, :raw, :pop, :win32
+:unix, :stdio, :perlio, :crlf, :utf8, :bytes, :raw, :pop, :win32
=over 4
=item Custom Layers
-:encoding, :via
+:encoding, :mmap, :via
=item Alternatives to raw
@@ -30650,8 +30838,7 @@ PerlIO layers and root of PerlIO::* name space
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::PerlIO::encoding, PerlIO::encoding -
-encoding layer
+=head2 PerlIO::encoding - encoding layer
=over 4
@@ -30663,8 +30850,19 @@ encoding layer
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::PerlIO::scalar, PerlIO::scalar -
-in-memory IO, scalar IO
+=head2 PerlIO::mmap - Memory mapped IO
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item IMPLEMENTATION NOTE
+
+=back
+
+=head2 PerlIO::scalar - in-memory IO, scalar IO
=over 4
@@ -30676,8 +30874,7 @@ in-memory IO, scalar IO
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::PerlIO::via, PerlIO::via - Helper class
-for PerlIO layers implemented in perl
+=head2 PerlIO::via - Helper class for PerlIO layers implemented in perl
=over 4
@@ -30688,7 +30885,7 @@ for PerlIO layers implemented in perl
=item EXPECTED METHODS
$class->PUSHED([$mode,[$fh]]), $obj->POPPED([$fh]),
-$obj->UTF8($bellowFlag,[$fh]), $obj->OPEN($path,$mode,[$fh]),
+$obj->UTF8($belowFlag,[$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),
@@ -30706,8 +30903,7 @@ $obj->CLEARERR($fh), $obj->ERROR($fh), $obj->EOF($fh)
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::PerlIO::via::QuotedPrint,
-PerlIO::via::QuotedPrint - PerlIO layer for quoted-printable strings
+=head2 PerlIO::via::QuotedPrint - PerlIO layer for quoted-printable strings
=over 4
@@ -30725,8 +30921,7 @@ PerlIO::via::QuotedPrint - PerlIO layer for quoted-printable strings
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Checker, Pod::Checker, podchecker()
-- check pod documents for syntax errors
+=head2 Pod::Checker, podchecker() - check pod documents for syntax errors
=over 4
@@ -30753,12 +30948,12 @@ B<-warnings> =E<gt> I<val>
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
+Apparent command =foo not preceded by blank line, 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
+=cut command, Spurious =pod command, Spurious character(s) after =back
=item Warnings
@@ -30808,8 +31003,7 @@ C<$checker-E<gt>hyperlink()>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Escapes, Pod::Escapes -- for
-resolving Pod EE<lt>...E<gt> sequences
+=head2 Pod::Escapes -- for resolving Pod EE<lt>...E<gt> sequences
=over 4
@@ -30833,8 +31027,7 @@ $Latin1Char_to_fallback{I<character>}, $Code2USASCII{I<integer>}
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Find, Pod::Find - find POD
-documents in directory trees
+=head2 Pod::Find - find POD documents in directory trees
=over 4
@@ -30882,23 +31075,7 @@ C<-inc =E<gt> 1>, C<-dirs =E<gt> [ $dir1, $dir2, ... ]>, C<-verbose =E<gt>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Functions, Pod::Functions - Group
-Perl's functions a la perlfunc.pod
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-%Kinds, %Type, %Flavor, %Type_Description, @Type_Order
-
-=item CHANGES
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Html, Pod::Html - module to convert
-pod files to HTML
+=head2 Pod::Html - module to convert pod files to HTML
=over 4
@@ -30912,9 +31089,9 @@ pod files to HTML
=item pod2html
-backlink, cachedir, css, flush, header, help, hiddendirs, htmldir,
-htmlroot, index, infile, libpods, netscape, outfile, podpath, podroot,
-quiet, recurse, title, verbose
+backlink, cachedir, css, flush, header, help, htmldir, htmlroot, index,
+infile, outfile, poderrors, podpath, podroot, quiet, recurse, title,
+verbose
=item htmlify
@@ -30932,8 +31109,8 @@ quiet, recurse, title, verbose
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::InputObjects, Pod::InputObjects -
-objects representing POD input paragraphs, commands, etc.
+=head2 Pod::InputObjects - objects representing POD input paragraphs,
+commands, etc.
=over 4
@@ -31162,8 +31339,7 @@ B<Pod::InteriorSequence>, package B<Pod::ParseTree>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::LaTeX, Pod::LaTeX - Convert Pod
-data to formatted Latex
+=head2 Pod::LaTeX - Convert Pod data to formatted Latex
=over 4
@@ -31285,8 +31461,7 @@ B<_split_delimited>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Man, Pod::Man - Convert POD data to
-formatted *roff input
+=head2 Pod::Man - Convert POD data to formatted *roff input
=over 4
@@ -31314,8 +31489,7 @@ roff font should be 1 or 2 chars, not "%s", Invalid quote specification
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::ParseLink, Pod::ParseLink - Parse
-an LE<lt>E<gt> formatting code in POD text
+=head2 Pod::ParseLink - Parse an LE<lt>E<gt> formatting code in POD text
=over 4
@@ -31331,8 +31505,7 @@ an LE<lt>E<gt> formatting code in POD text
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::ParseUtils, Pod::ParseUtils -
-helpers for POD parsing and conversion
+=head2 Pod::ParseUtils - helpers for POD parsing and conversion
=over 4
@@ -31436,8 +31609,7 @@ $cacheitem-E<gt>idx()
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Parser, Pod::Parser - base class
-for creating POD filters and translators
+=head2 Pod::Parser - base class for creating POD filters and translators
=over 4
@@ -31680,8 +31852,7 @@ I<code-ref>|I<method-name>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Perldoc, Pod::Perldoc - Look up
-Perl documentation in Pod format.
+=head2 Pod::Perldoc - Look up Perl documentation in Pod format.
=over 4
@@ -31697,8 +31868,7 @@ Perl documentation in Pod format.
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Perldoc::BaseTo,
-Pod::Perldoc::BaseTo - Base for Pod::Perldoc formatters
+=head2 Pod::Perldoc::BaseTo - Base for Pod::Perldoc formatters
=over 4
@@ -31714,8 +31884,7 @@ Pod::Perldoc::BaseTo - Base for Pod::Perldoc formatters
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Perldoc::GetOptsOO,
-Pod::Perldoc::GetOptsOO - Customized option parser for Pod::Perldoc
+=head2 Pod::Perldoc::GetOptsOO - Customized option parser for Pod::Perldoc
=over 4
@@ -31723,6 +31892,15 @@ Pod::Perldoc::GetOptsOO - Customized option parser for Pod::Perldoc
=item DESCRIPTION
+Call Pod::Perldoc::GetOptsOO::getopts($object, \@ARGV, $truth), Given -n,
+if there's a opt_n_with, it'll call $object->opt_n_with( ARGUMENT )
+(e.g., "-n foo" => $object->opt_n_with('foo'). Ditto "-nfoo"), Otherwise
+(given -n) if there's an opt_n, we'll call it $object->opt_n($truth)
+(Truth defaults to 1), Otherwise we try calling
+$object->handle_unknown_option('n') (and we increment the error count by
+the return value of it), If there's no handle_unknown_option, then we just
+warn, and then increment the error counter
+
=item SEE ALSO
=item COPYRIGHT AND DISCLAIMERS
@@ -31731,8 +31909,7 @@ Pod::Perldoc::GetOptsOO - Customized option parser for Pod::Perldoc
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Perldoc::ToChecker,
-Pod::Perldoc::ToChecker - let Perldoc check Pod for errors
+=head2 Pod::Perldoc::ToANSI - render Pod with ANSI color escapes
=over 4
@@ -31740,6 +31917,8 @@ Pod::Perldoc::ToChecker - let Perldoc check Pod for errors
=item DESCRIPTION
+=item CAVEAT
+
=item SEE ALSO
=item COPYRIGHT AND DISCLAIMERS
@@ -31748,8 +31927,23 @@ Pod::Perldoc::ToChecker - let Perldoc check Pod for errors
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Perldoc::ToMan, Pod::Perldoc::ToMan
-- let Perldoc render Pod as man pages
+=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
@@ -31767,8 +31961,7 @@ Pod::Perldoc::ToChecker - let Perldoc check Pod for errors
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Perldoc::ToNroff,
-Pod::Perldoc::ToNroff - let Perldoc convert Pod to nroff
+=head2 Pod::Perldoc::ToNroff - let Perldoc convert Pod to nroff
=over 4
@@ -31786,8 +31979,7 @@ Pod::Perldoc::ToNroff - let Perldoc convert Pod to nroff
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Perldoc::ToPod, Pod::Perldoc::ToPod
-- let Perldoc render Pod as ... Pod!
+=head2 Pod::Perldoc::ToPod - let Perldoc render Pod as ... Pod!
=over 4
@@ -31803,8 +31995,7 @@ Pod::Perldoc::ToNroff - let Perldoc convert Pod to nroff
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Perldoc::ToRtf, Pod::Perldoc::ToRtf
-- let Perldoc render Pod as RTF
+=head2 Pod::Perldoc::ToRtf - let Perldoc render Pod as RTF
=over 4
@@ -31820,8 +32011,7 @@ Pod::Perldoc::ToNroff - let Perldoc convert Pod to nroff
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Perldoc::ToText,
-Pod::Perldoc::ToText - let Perldoc render Pod as plaintext
+=head2 Pod::Perldoc::ToTerm - render Pod with terminal escapes
=over 4
@@ -31839,8 +32029,7 @@ Pod::Perldoc::ToText - let Perldoc render Pod as plaintext
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Perldoc::ToTk, Pod::Perldoc::ToTk -
-let Perldoc use Tk::Pod to render Pod
+=head2 Pod::Perldoc::ToText - let Perldoc render Pod as plaintext
=over 4
@@ -31848,14 +32037,31 @@ let Perldoc use Tk::Pod to render Pod
=item DESCRIPTION
+=item CAVEAT
+
=item SEE ALSO
+=item COPYRIGHT AND DISCLAIMERS
+
=item AUTHOR
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Perldoc::ToXml, Pod::Perldoc::ToXml
-- let Perldoc render Pod as XML
+=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
@@ -31871,8 +32077,7 @@ let Perldoc use Tk::Pod to render Pod
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::PlainText, Pod::PlainText - Convert
-POD data to formatted ASCII text
+=head2 Pod::PlainText - Convert POD data to formatted ASCII text
=over 4
@@ -31897,8 +32102,8 @@ Unknown sequence: %s, Unmatched =back
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Select, Pod::Select, podselect() -
-extract selected sections of POD from input
+=head2 Pod::Select, podselect() - extract selected sections of POD from
+input
=over 4
@@ -32004,8 +32209,7 @@ B<-output>, B<-sections>, B<-ranges>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple, Pod::Simple - framework for
-parsing Pod
+=head2 Pod::Simple - framework for parsing Pod
=over 4
@@ -32032,6 +32236,32 @@ $parser->source_filename >>, C<< $parser->doc_has_started >>, C<<
$parser->source_dead >>, C<< $parser->strip_verbatim_indent( I<SOMEVALUE> )
>>
+=item TERTIARY METHODS
+
+C<< $parser->abandon_output_fh() >>X<abandon_output_fh>, C<<
+$parser->abandon_output_string() >>X<abandon_output_string>, C<<
+$parser->accept_code( @codes ) >>X<accept_code>, C<< $parser->accept_codes(
+@codes ) >>X<accept_codes>, C<< $parser->accept_directive_as_data(
+@directives ) >>X<accept_directive_as_data>, C<<
+$parser->accept_directive_as_processed( @directives )
+>>X<accept_directive_as_processed>, C<<
+$parser->accept_directive_as_verbatim( @directives )
+>>X<accept_directive_as_verbatim>, C<< $parser->accept_target( @targets )
+>>X<accept_target>, C<< $parser->accept_target_as_text( @targets )
+>>X<accept_target_as_text>, C<< $parser->accept_targets( @targets )
+>>X<accept_targets>, C<< $parser->accept_targets_as_text( @targets )
+>>X<accept_targets_as_text>, C<< $parser->any_errata_seen()
+>>X<any_errata_seen>, C<< $parser->parse_from_file( $source, $to )
+>>X<parse_from_file>, C<< $parser->scream( @error_messages ) >>X<scream>,
+C<< $parser->unaccept_code( @codes ) >>X<unaccept_code>, C<<
+$parser->unaccept_codes( @codes ) >>X<unaccept_codes>, C<<
+$parser->unaccept_directive( @directives ) >>X<unaccept_directive>, C<<
+$parser->unaccept_directives( @directives ) >>X<unaccept_directives>, C<<
+$parser->unaccept_target( @targets ) >>X<unaccept_target>, C<<
+$parser->unaccept_targets( @targets ) >>X<unaccept_targets>, C<<
+$parser->version_report() >>X<version_report>, C<< $parser->whine(
+@error_messages ) >>X<whine>
+
=item CAVEATS
=item SEE ALSO
@@ -32043,12 +32273,12 @@ $parser->source_dead >>, C<< $parser->strip_verbatim_indent( I<SOMEVALUE> )
=item AUTHOR
Allison Randal C<allison@perl.org>, Hans Dieter Pearcey C<hdp@cpan.org>,
-David E. Wheeler C<dwheeler@cpan.org>
+David E. Wheeler C<dwheeler@cpan.org>, Gabor Szabo C<szabgab@gmail.com>,
+Shawn H Corey C<SHCOREY at cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::Checker,
-Pod::Simple::Checker -- check the Pod syntax of a document
+=head2 Pod::Simple::Checker -- check the Pod syntax of a document
=over 4
@@ -32069,8 +32299,7 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::Debug, Pod::Simple::Debug
--- put Pod::Simple into trace/debug mode
+=head2 Pod::Simple::Debug -- put Pod::Simple into trace/debug mode
=over 4
@@ -32095,8 +32324,7 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::DumpAsText,
-Pod::Simple::DumpAsText -- dump Pod-parsing events as text
+=head2 Pod::Simple::DumpAsText -- dump Pod-parsing events as text
=over 4
@@ -32117,8 +32345,7 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::DumpAsXML,
-Pod::Simple::DumpAsXML -- turn Pod into XML
+=head2 Pod::Simple::DumpAsXML -- turn Pod into XML
=over 4
@@ -32139,8 +32366,7 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::HTML, Pod::Simple::HTML -
-convert Pod to HTML
+=head2 Pod::Simple::HTML - convert Pod to HTML
=over 4
@@ -32201,8 +32427,8 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::HTMLBatch,
-Pod::Simple::HTMLBatch - convert several Pod files to several HTML files
+=head2 Pod::Simple::HTMLBatch - convert several Pod files to several HTML
+files
=over 4
@@ -32259,8 +32485,8 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::LinkSection,
-Pod::Simple::LinkSection -- represent "section" attributes of L codes
+=head2 Pod::Simple::LinkSection -- represent "section" attributes of L
+codes
=over 4
@@ -32281,8 +32507,7 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::Methody,
-Pod::Simple::Methody -- turn Pod::Simple events into method calls
+=head2 Pod::Simple::Methody -- turn Pod::Simple events into method calls
=over 4
@@ -32305,8 +32530,7 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::PullParser,
-Pod::Simple::PullParser -- a pull-parser interface to parsing Pod
+=head2 Pod::Simple::PullParser -- a pull-parser interface to parsing Pod
=over 4
@@ -32342,8 +32566,8 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::PullParserEndToken,
-Pod::Simple::PullParserEndToken -- end-tokens from Pod::Simple::PullParser
+=head2 Pod::Simple::PullParserEndToken -- end-tokens from
+Pod::Simple::PullParser
=over 4
@@ -32367,8 +32591,7 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::PullParserStartToken,
-Pod::Simple::PullParserStartToken -- start-tokens from
+=head2 Pod::Simple::PullParserStartToken -- start-tokens from
Pod::Simple::PullParser
=over 4
@@ -32397,8 +32620,7 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::PullParserTextToken,
-Pod::Simple::PullParserTextToken -- text-tokens from
+=head2 Pod::Simple::PullParserTextToken -- text-tokens from
Pod::Simple::PullParser
=over 4
@@ -32422,8 +32644,7 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::PullParserToken,
-Pod::Simple::PullParserToken -- tokens from Pod::Simple::PullParser
+=head2 Pod::Simple::PullParserToken -- tokens from Pod::Simple::PullParser
=over 4
@@ -32447,8 +32668,7 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::RTF, Pod::Simple::RTF --
-format Pod as RTF
+=head2 Pod::Simple::RTF -- format Pod as RTF
=over 4
@@ -32481,8 +32701,7 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::Search, Pod::Simple::Search
-- find POD documents in directory trees
+=head2 Pod::Simple::Search - find POD documents in directory trees
=over 4
@@ -32529,8 +32748,7 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::SimpleTree,
-Pod::Simple::SimpleTree -- parse Pod into a simple parse tree
+=head2 Pod::Simple::SimpleTree -- parse Pod into a simple parse tree
=over 4
@@ -32555,8 +32773,8 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::Subclassing,
-Pod::Simple::Subclassing -- write a formatter as a Pod::Simple subclass
+=head2 Pod::Simple::Subclassing -- write a formatter as a Pod::Simple
+subclass
=over 4
@@ -32576,9 +32794,10 @@ 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
+events with an element_name of over-empty, 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
@@ -32592,13 +32811,16 @@ $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->cut_handler( I<CODE_REF> ) >>, C<< $parser->pod_handler(
+I<CODE_REF> ) >>, C<< $parser->whiteline_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> ) >>
+I<SOMEVALUE> ) >>, C<< $parser->preserve_whitespace( I<SOMEVALUE> ) >>, C<<
+$parser->parse_empty_lists( I<SOMEVALUE> ) >>
=item SEE ALSO
@@ -32613,8 +32835,7 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::Text, Pod::Simple::Text --
-format Pod as plaintext
+=head2 Pod::Simple::Text -- format Pod as plaintext
=over 4
@@ -32635,8 +32856,7 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::TextContent,
-Pod::Simple::TextContent -- get the text content of Pod
+=head2 Pod::Simple::TextContent -- get the text content of Pod
=over 4
@@ -32657,8 +32877,7 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::XHTML, Pod::Simple::XHTML
--- format Pod as validating XHTML
+=head2 Pod::Simple::XHTML -- format Pod as validating XHTML
=over 4
@@ -32710,6 +32929,10 @@ David E. Wheeler C<dwheeler@cpan.org>
=item index
+=item anchor_items
+
+=item backlink
+
=back
=back
@@ -32769,8 +32992,7 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Simple::XMLOutStream,
-Pod::Simple::XMLOutStream -- turn Pod into XML
+=head2 Pod::Simple::XMLOutStream -- turn Pod into XML
=over 4
@@ -32797,8 +33019,7 @@ David E. Wheeler C<dwheeler@cpan.org>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Text, Pod::Text - Convert POD data
-to formatted ASCII text
+=head2 Pod::Text - Convert POD data to formatted ASCII text
=over 4
@@ -32827,8 +33048,7 @@ Bizarre space in item, Item called without tag, Can't open %s for reading:
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Text::Color, Pod::Text::Color -
-Convert POD data to formatted color ASCII text
+=head2 Pod::Text::Color - Convert POD data to formatted color ASCII text
=over 4
@@ -32846,7 +33066,7 @@ Convert POD data to formatted color ASCII text
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Text::Overstrike, =for stopwords
+=head2 Pod::Text::Overstrike, =for stopwords
overstrike
=over 4
@@ -32865,8 +33085,8 @@ overstrike
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Text::Termcap, Pod::Text::Termcap -
-Convert POD data to ASCII text with format escapes
+=head2 Pod::Text::Termcap - Convert POD data to ASCII text with format
+escapes
=over 4
@@ -32884,8 +33104,8 @@ Convert POD data to ASCII text with format escapes
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Pod::Usage, Pod::Usage, pod2usage() -
-print a usage message from embedded pod documentation
+=head2 Pod::Usage, pod2usage() - print a usage message from embedded pod
+documentation
=over 4
@@ -32896,6 +33116,12 @@ print a usage message from embedded pod documentation
C<-message>, C<-msg>, C<-exitval>, C<-verbose>, C<-sections>, C<-output>,
C<-input>, C<-pathlist>, C<-noperldoc>
+=over 4
+
+=item Pass-through options
+
+=back
+
=item DESCRIPTION
=item EXAMPLES
@@ -32916,8 +33142,7 @@ C<-input>, C<-pathlist>, C<-noperldoc>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::SDBM_File, SDBM_File - Tied access to
-sdbm files
+=head2 SDBM_File - Tied access to sdbm files
=over 4
@@ -32939,8 +33164,7 @@ C<O_RDONLY>, C<O_WRONLY>, C<O_RDWR>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Safe, Safe - Compile and execute code in
-restricted compartments
+=head2 Safe - Compile and execute code in restricted compartments
=over 4
@@ -32996,8 +33220,7 @@ Memory, CPU, Snooping, Signals, State Changes
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Scalar::Util, Scalar::Util - A selection
-of general-utility scalar subroutines
+=head2 Scalar::Util - A selection of general-utility scalar subroutines
=over 4
@@ -33023,8 +33246,7 @@ XS version of Scalar::Util
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Search::Dict, Search::Dict, look -
-search for key in dictionary file
+=head2 Search::Dict - look - search for key in dictionary file
=over 4
@@ -33034,8 +33256,7 @@ search for key in dictionary file
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::SelectSaver, SelectSaver - save and
-restore selected file handle
+=head2 SelectSaver - save and restore selected file handle
=over 4
@@ -33045,8 +33266,7 @@ restore selected file handle
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::SelfLoader, SelfLoader - load functions
-only on demand
+=head2 SelfLoader - load functions only on demand
=over 4
@@ -33078,10 +33298,7 @@ only on demand
=back
-B<_make_cmd>
-
-=head2 C:\perl_tl\perl-5.14.2\lib::Shell, Shell - run shell commands
-transparently within perl
+=head2 Socket, C<Socket> - networking constants and support functions
=over 4
@@ -33089,50 +33306,150 @@ transparently within perl
=item DESCRIPTION
+=back
+
=over 4
-=item Caveats
+=item CONSTANTS
-=item Escaping Magic Characters
+=back
-=item Configuration
+=over 4
+
+=item PF_INET, PF_INET6, PF_UNIX, ...
+
+=item AF_INET, AF_INET6, AF_UNIX, ...
+
+=item SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, ...
+
+=item SOL_SOCKET
+
+=item SO_ACCEPTCONN, SO_BROADCAST, SO_ERROR, ...
+
+=item IP_OPTIONS, IP_TOS, IP_TTL, ...
+
+=item MSG_BCAST, MSG_OOB, MSG_TRUNC, ...
+
+=item SHUT_RD, SHUT_RDWR, SHUT_WR
+
+=item INADDR_ANY, INADDR_BROADCAST, INADDR_LOOPBACK, INADDR_NONE
+
+=item IPPROTO_IP, IPPROTO_IPV6, IPPROTO_TCP, ...
+
+=item TCP_CORK, TCP_KEEPALIVE, TCP_NODELAY, ...
+
+=item IN6ADDR_ANY, IN6ADDR_LOOPBACK
+
+=item IPV6_ADD_MEMBERSHIP, IPV6_MTU, IPV6_V6ONLY, ...
=back
-=item BUGS
+=over 4
-=item AUTHOR
+=item STRUCTURE MANIPULATORS
+
+=back
+
+=over 4
+
+=item $family = sockaddr_family $sockaddr
+
+=item $sockaddr = pack_sockaddr_in $port, $ip_address
+
+=item ($port, $ip_address) = unpack_sockaddr_in $sockaddr
+
+=item $sockaddr = sockaddr_in $port, $ip_address
+
+=item ($port, $ip_address) = sockaddr_in $sockaddr
+
+=item $sockaddr = pack_sockaddr_in6 $port, $ip6_address, [$scope_id,
+[$flowinfo]]
+
+=item ($port, $ip6_address, $scope_id, $flowinfo) = unpack_sockaddr_in6
+$sockaddr
+
+=item $sockaddr = sockaddr_in6 $port, $ip6_address, [$scope_id,
+[$flowinfo]]
+
+=item ($port, $ip6_address, $scope_id, $flowinfo) = sockaddr_in6 $sockaddr
+
+=item $sockaddr = pack_sockaddr_un $path
+
+=item ($path) = unpack_sockaddr_un $sockaddr
+
+=item $sockaddr = sockaddr_un $path
+
+=item ($path) = sockaddr_un $sockaddr
+
+=item $ipv6_mreq = pack_ipv6_mreq $ip6_address, $ifindex
+
+=item ($ip6_address, $ifindex) = unpack_ipv6_mreq $ipv6_mreq
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Socket, Socket, sockaddr_in,
-sockaddr_un, inet_aton, inet_ntoa, inet_pton, inet_ntop - load the C
-socket.h defines and structure manipulators
+=over 4
+
+=item FUNCTIONS
+
+=back
=over 4
-=item SYNOPSIS
+=item $ip_address = inet_aton $string
-=item DESCRIPTION
+=item $string = inet_ntoa $ip_address
+
+=item $address = inet_pton $family, $string
+
+=item $string = inet_ntop $family, $address
+
+=item ($err, @result) = getaddrinfo $host, $service, [$hints]
+
+flags => INT, family => INT, socktype => INT, protocol => INT, family =>
+INT, socktype => INT, protocol => INT, addr => STRING, canonname => STRING,
+AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST
+
+=item ($err, $hostname, $servicename) = getnameinfo $sockaddr, [$flags,
+[$xflags]]
-inet_aton HOSTNAME, inet_ntoa IP_ADDRESS, INADDR_ANY, INADDR_BROADCAST,
-INADDR_LOOPBACK, INADDR_NONE, IN6ADDR_ANY, IN6ADDR_LOOPBACK,
-sockaddr_family SOCKADDR, sockaddr_in PORT, ADDRESS, sockaddr_in
-SOCKADDR_IN, pack_sockaddr_in PORT, IP_ADDRESS, unpack_sockaddr_in
-SOCKADDR_IN, sockaddr_in6 PORT, IP6_ADDRESS, [ SCOPE_ID, [ FLOWINFO ] ],
-sockaddr_in6 SOCKADDR_IN6, pack_sockaddr_in6 PORT, IP6_ADDRESS, [ SCOPE_ID,
-[ FLOWINFO ] ], unpack_sockaddr_in6 SOCKADDR_IN6, sockaddr_un PATHNAME,
-sockaddr_un SOCKADDR_UN, pack_sockaddr_un PATH, unpack_sockaddr_un
-SOCKADDR_UN, inet_pton ADDRESS_FAMILY, HOSTNAME, inet_ntop ADDRESS_FAMILY,
-IP_ADDRESS, getaddrinfo HOST, SERVICE, [ HINTS ], flags => INT, family =>
-INT, socktype => INT, protocol => INT, family => INT, socktype => INT,
-protocol => INT, addr => STRING, canonname => STRING, getnameinfo ADDR,
-FLAGS
+NI_NUMERICHOST, NI_NUMERICSERV, NI_NAMEREQD, NI_DGRAM, NIx_NOHOST,
+NIx_NOSERV
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Storable, Storable - persistence for
-Perl data structures
+=over 4
+
+=item getaddrinfo() / getnameinfo() ERROR CONSTANTS
+
+EAI_AGAIN, EAI_BADFLAGS, EAI_FAMILY, EAI_NODATA, EAI_NONAME, EAI_SERVICE
+
+=back
+
+=over 4
+
+=item EXAMPLES
+
+=over 4
+
+=item Lookup for connect()
+
+=item Making a human-readable string out of an address
+
+=item Resolving hostnames into IP addresses
+
+=item Accessing socket options
+
+=back
+
+=back
+
+=over 4
+
+=item AUTHOR
+
+=back
+
+=head2 Storable - persistence for Perl data structures
=over 4
@@ -33203,8 +33520,7 @@ $buffer ), $info = Storable::read_magic( $buffer, $must_be_file )
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Symbol, Symbol - manipulate Perl symbols
-and their names
+=head2 Symbol - manipulate Perl symbols and their names
=over 4
@@ -33216,8 +33532,7 @@ and their names
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Sys::Hostname, Sys::Hostname - Try every
-conceivable way to get hostname
+=head2 Sys::Hostname - Try every conceivable way to get hostname
=over 4
@@ -33229,8 +33544,8 @@ conceivable way to get hostname
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Base, TAP::Base - Base class that
-provides common functionality to L<TAP::Parser>
+=head2 TAP::Base - Base class that provides common functionality to
+L<TAP::Parser>
and L<TAP::Harness>
=over 4
@@ -33255,8 +33570,7 @@ and L<TAP::Harness>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Formatter::Base,
-TAP::Formatter::Base - Base class for harness output delegates
+=head2 TAP::Formatter::Base - Base class for harness output delegates
=over 4
@@ -33288,8 +33602,7 @@ C<jobs>, C<show_count>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Formatter::Color,
-TAP::Formatter::Color - Run Perl test scripts with color
+=head2 TAP::Formatter::Color - Run Perl test scripts with color
=over 4
@@ -33313,9 +33626,8 @@ TAP::Formatter::Color - Run Perl test scripts with color
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Formatter::Console,
-TAP::Formatter::Console - Harness output delegate for default console
-output
+=head2 TAP::Formatter::Console - Harness output delegate for default
+console output
=over 4
@@ -33337,10 +33649,8 @@ output
=back
-=head2
-C:\perl_tl\perl-5.14.2\lib::TAP::Formatter::Console::ParallelSession,
-TAP::Formatter::Console::ParallelSession - Harness output delegate for
-parallel console output
+=head2 TAP::Formatter::Console::ParallelSession - Harness output delegate
+for parallel console output
=over 4
@@ -33368,9 +33678,8 @@ parallel console output
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Formatter::Console::Session,
-TAP::Formatter::Console::Session - Harness output delegate for default
-console output
+=head2 TAP::Formatter::Console::Session - Harness output delegate for
+default console output
=over 4
@@ -33396,8 +33705,7 @@ console output
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Formatter::File,
-TAP::Formatter::File - Harness output delegate for file output
+=head2 TAP::Formatter::File - Harness output delegate for file output
=over 4
@@ -33419,8 +33727,8 @@ TAP::Formatter::File - Harness output delegate for file output
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Formatter::File::Session,
-TAP::Formatter::File::Session - Harness output delegate for file output
+=head2 TAP::Formatter::File::Session - Harness output delegate for file
+output
=over 4
@@ -33452,8 +33760,8 @@ TAP::Formatter::File::Session - Harness output delegate for file output
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Formatter::Session,
-TAP::Formatter::Session - Abstract base class for harness output delegate
+=head2 TAP::Formatter::Session - Abstract base class for harness output
+delegate
=over 4
@@ -33475,8 +33783,7 @@ C<formatter>, C<parser>, C<name>, C<show_count>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Harness, TAP::Harness - Run test
-scripts with statistics
+=head2 TAP::Harness - Run test scripts with statistics
=over 4
@@ -33561,8 +33868,8 @@ L</new>, L</runtests>, L</summary>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Object, TAP::Object - Base class
-that provides common functionality to all C<TAP::*> modules
+=head2 TAP::Object - Base class that provides common functionality to all
+C<TAP::*> modules
=over 4
@@ -33592,8 +33899,7 @@ that provides common functionality to all C<TAP::*> modules
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser, TAP::Parser - Parse
-L<TAP|Test::Harness::TAP> output
+=head2 TAP::Parser - Parse L<TAP|Test::Harness::TAP> output
=over 4
@@ -33725,8 +34031,7 @@ Kraai, David Wheeler, Alex Vandiver, Cosimo Streppone, Ville Skyttä
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Aggregator,
-TAP::Parser::Aggregator - Aggregate TAP::Parser results
+=head2 TAP::Parser::Aggregator - Aggregate TAP::Parser results
=over 4
@@ -33773,8 +34078,7 @@ Failed tests, Parse errors, Bad exit or wait status
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Grammar,
-TAP::Parser::Grammar - A grammar for the Test Anything Protocol.
+=head2 TAP::Parser::Grammar - A grammar for the Test Anything Protocol.
=over 4
@@ -33814,8 +34118,7 @@ TAP::Parser::Grammar - A grammar for the Test Anything Protocol.
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Iterator,
-TAP::Parser::Iterator - Base class for TAP source iterators
+=head2 TAP::Parser::Iterator - Base class for TAP source iterators
=over 4
@@ -33855,8 +34158,7 @@ TAP::Parser::Iterator - Base class for TAP source iterators
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Iterator::Array,
-TAP::Parser::Iterator::Array - Iterator for array-based TAP sources
+=head2 TAP::Parser::Iterator::Array - Iterator for array-based TAP sources
=over 4
@@ -33890,8 +34192,8 @@ TAP::Parser::Iterator::Array - Iterator for array-based TAP sources
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Iterator::Process,
-TAP::Parser::Iterator::Process - Iterator for process-based TAP sources
+=head2 TAP::Parser::Iterator::Process - Iterator for process-based TAP
+sources
=over 4
@@ -33925,8 +34227,8 @@ TAP::Parser::Iterator::Process - Iterator for process-based TAP sources
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Iterator::Stream,
-TAP::Parser::Iterator::Stream - Iterator for filehandle-based TAP sources
+=head2 TAP::Parser::Iterator::Stream - Iterator for filehandle-based TAP
+sources
=over 4
@@ -33964,9 +34266,8 @@ TAP::Parser::Iterator::Stream - Iterator for filehandle-based TAP sources
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::IteratorFactory,
-TAP::Parser::IteratorFactory - Figures out which SourceHandler objects to
-use for a given Source
+=head2 TAP::Parser::IteratorFactory - Figures out which SourceHandler
+objects to use for a given Source
=over 4
@@ -34014,8 +34315,7 @@ use for a given Source
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Multiplexer,
-TAP::Parser::Multiplexer - Multiplex multiple TAP::Parsers
+=head2 TAP::Parser::Multiplexer - Multiplex multiple TAP::Parsers
=over 4
@@ -34051,8 +34351,7 @@ TAP::Parser::Multiplexer - Multiplex multiple TAP::Parsers
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Result, TAP::Parser::Result
-- Base class for TAP::Parser output objects
+=head2 TAP::Parser::Result - Base class for TAP::Parser output objects
=over 4
@@ -34097,8 +34396,7 @@ C<is_version>, C<is_unknown>, C<is_yaml>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Result::Bailout,
-TAP::Parser::Result::Bailout - Bailout result token.
+=head2 TAP::Parser::Result::Bailout - Bailout result token.
=over 4
@@ -34122,8 +34420,7 @@ C<as_string>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Result::Comment,
-TAP::Parser::Result::Comment - Comment result token.
+=head2 TAP::Parser::Result::Comment - Comment result token.
=over 4
@@ -34147,8 +34444,7 @@ C<as_string>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Result::Plan,
-TAP::Parser::Result::Plan - Plan result token.
+=head2 TAP::Parser::Result::Plan - Plan result token.
=over 4
@@ -34172,8 +34468,7 @@ C<as_string>, C<raw>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Result::Pragma,
-TAP::Parser::Result::Pragma - TAP pragma token.
+=head2 TAP::Parser::Result::Pragma - TAP pragma token.
=over 4
@@ -34197,8 +34492,7 @@ C<as_string>, C<raw>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Result::Test,
-TAP::Parser::Result::Test - Test result token.
+=head2 TAP::Parser::Result::Test - Test result token.
=over 4
@@ -34220,8 +34514,7 @@ TAP::Parser::Result::Test - Test result token.
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Result::Unknown,
-TAP::Parser::Result::Unknown - Unknown result token.
+=head2 TAP::Parser::Result::Unknown - Unknown result token.
=over 4
@@ -34239,8 +34532,7 @@ C<as_string>, C<raw>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Result::Version,
-TAP::Parser::Result::Version - TAP syntax version token.
+=head2 TAP::Parser::Result::Version - TAP syntax version token.
=over 4
@@ -34264,8 +34556,7 @@ C<as_string>, C<raw>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Result::YAML,
-TAP::Parser::Result::YAML - YAML result token.
+=head2 TAP::Parser::Result::YAML - YAML result token.
=over 4
@@ -34289,8 +34580,7 @@ C<as_string>, C<raw>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::ResultFactory,
-TAP::Parser::ResultFactory - Factory for creating TAP::Parser output
+=head2 TAP::Parser::ResultFactory - Factory for creating TAP::Parser output
objects
=over 4
@@ -34325,8 +34615,7 @@ objects
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Scheduler,
-TAP::Parser::Scheduler - Schedule tests during parallel testing
+=head2 TAP::Parser::Scheduler - Schedule tests during parallel testing
=over 4
@@ -34350,8 +34639,7 @@ TAP::Parser::Scheduler - Schedule tests during parallel testing
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Scheduler::Job,
-TAP::Parser::Scheduler::Job - A single testing job.
+=head2 TAP::Parser::Scheduler::Job - A single testing job.
=over 4
@@ -34375,8 +34663,7 @@ TAP::Parser::Scheduler::Job - A single testing job.
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Scheduler::Spinner,
-TAP::Parser::Scheduler::Spinner - A no-op job.
+=head2 TAP::Parser::Scheduler::Spinner - A no-op job.
=over 4
@@ -34400,8 +34687,7 @@ TAP::Parser::Scheduler::Spinner - A no-op job.
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Source, TAP::Parser::Source
-- a TAP source & meta data about it
+=head2 TAP::Parser::Source - a TAP source & meta data about it
=over 4
@@ -34439,8 +34725,8 @@ TAP::Parser::Scheduler::Spinner - A no-op job.
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::SourceHandler,
-TAP::Parser::SourceHandler - Base class for different TAP source handlers
+=head2 TAP::Parser::SourceHandler - Base class for different TAP source
+handlers
=over 4
@@ -34480,9 +34766,8 @@ TAP::Parser::SourceHandler - Base class for different TAP source handlers
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::SourceHandler::Executable,
-TAP::Parser::SourceHandler::Executable - Stream output from an executable
-TAP source
+=head2 TAP::Parser::SourceHandler::Executable - Stream output from an
+executable TAP source
=over 4
@@ -34520,8 +34805,7 @@ TAP source
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::SourceHandler::File,
-TAP::Parser::SourceHandler::File - Stream TAP from a text file.
+=head2 TAP::Parser::SourceHandler::File - Stream TAP from a text file.
=over 4
@@ -34555,9 +34839,8 @@ TAP::Parser::SourceHandler::File - Stream TAP from a text file.
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::SourceHandler::Handle,
-TAP::Parser::SourceHandler::Handle - Stream TAP from an IO::Handle or a
-GLOB.
+=head2 TAP::Parser::SourceHandler::Handle - Stream TAP from an IO::Handle
+or a GLOB.
=over 4
@@ -34589,8 +34872,7 @@ GLOB.
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::SourceHandler::Perl,
-TAP::Parser::SourceHandler::Perl - Stream TAP from a Perl executable
+=head2 TAP::Parser::SourceHandler::Perl - Stream TAP from a Perl executable
=over 4
@@ -34628,8 +34910,7 @@ TAP::Parser::SourceHandler::Perl - Stream TAP from a Perl executable
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::SourceHandler::RawTAP,
-TAP::Parser::SourceHandler::RawTAP - Stream output from raw TAP in a
+=head2 TAP::Parser::SourceHandler::RawTAP - Stream output from raw TAP in a
scalar/array ref.
=over 4
@@ -34662,8 +34943,7 @@ scalar/array ref.
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::Utils, TAP::Parser::Utils -
-Internal TAP::Parser utilities
+=head2 TAP::Parser::Utils - Internal TAP::Parser utilities
=over 4
@@ -34685,8 +34965,7 @@ Internal TAP::Parser utilities
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::YAMLish::Reader,
-TAP::Parser::YAMLish::Reader - Read YAMLish data from iterator
+=head2 TAP::Parser::YAMLish::Reader - Read YAMLish data from iterator
=over 4
@@ -34714,8 +34993,7 @@ TAP::Parser::YAMLish::Reader - Read YAMLish data from iterator
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::TAP::Parser::YAMLish::Writer,
-TAP::Parser::YAMLish::Writer - Write YAMLish data
+=head2 TAP::Parser::YAMLish::Writer - Write YAMLish data
=over 4
@@ -34746,8 +35024,7 @@ reference to an array into which YAML will be pushed, a code reference
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Term::ANSIColor, Term::ANSIColor - Color
-screen output using ANSI escape sequences
+=head2 Term::ANSIColor - Color screen output using ANSI escape sequences
=over 4
@@ -34793,8 +35070,7 @@ ANSI_COLORS_DISABLED
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Term::Cap, Term::Cap - Perl termcap
-interface
+=head2 Term::Cap - Perl termcap interface
=over 4
@@ -34832,8 +35108,7 @@ B<Trequire>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Term::Complete, Term::Complete - Perl
-word completion module
+=head2 Term::Complete - Perl word completion module
=over 4
@@ -34851,8 +35126,7 @@ E<lt>tabE<gt>, ^D, ^U, E<lt>delE<gt>, E<lt>bsE<gt>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Term::ReadLine, Term::ReadLine - Perl
-interface to various C<readline> packages.
+=head2 Term::ReadLine - Perl interface to various C<readline> packages.
If no real package is found, substitutes stubs instead of basic functions.
=over 4
@@ -34868,7 +35142,7 @@ C<findConsole>, Attribs, C<Features>
=item Additional supported functions
-C<tkRunning>, C<ornaments>, C<newTTY>
+C<tkRunning>, C<event_loop>, C<ornaments>, C<newTTY>
=item EXPORTS
@@ -34876,8 +35150,7 @@ C<tkRunning>, C<ornaments>, C<newTTY>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Term::UI, Term::UI - Term::ReadLine UI
-made easy
+=head2 Term::UI - Term::ReadLine UI made easy
=over 4
@@ -34962,7 +35235,7 @@ record", allow => $ref] );
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Term::UI::History, Term::UI::History
+=head2 Term::UI::History - history function
=over 4
@@ -34994,8 +35267,7 @@ $HISTORY_FH
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Test, Test - provides a simple framework
-for writing test scripts
+=head2 Test - provides a simple framework for writing test scripts
=over 4
@@ -35042,8 +35314,7 @@ NORMAL TESTS, SKIPPED TESTS, TODO TESTS
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Test::Builder, Test::Builder - Backend
-for building test libraries
+=head2 Test::Builder - Backend for building test libraries
=over 4
@@ -35224,8 +35495,7 @@ B<_my_exit>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Test::Builder::Module,
-Test::Builder::Module - Base class for test modules
+=head2 Test::Builder::Module - Base class for test modules
=over 4
@@ -35247,8 +35517,7 @@ Test::Builder::Module - Base class for test modules
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Test::Builder::Tester,
-Test::Builder::Tester - test testsuites that have been built with
+=head2 Test::Builder::Tester - test testsuites that have been built with
Test::Builder
=over 4
@@ -35289,8 +35558,8 @@ color
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Test::Builder::Tester::Color,
-Test::Builder::Tester::Color - turn on colour in Test::Builder::Tester
+=head2 Test::Builder::Tester::Color - turn on colour in
+Test::Builder::Tester
=over 4
@@ -35310,8 +35579,7 @@ Test::Builder::Tester::Color - turn on colour in Test::Builder::Tester
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Test::Harness, Test::Harness - Run Perl
-standard test scripts with statistics
+=head2 Test::Harness - Run Perl standard test scripts with statistics
=over 4
@@ -35366,8 +35634,7 @@ c >>, C<HARNESS_SUBCLASS>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Test::More, Test::More - yet another
-framework for writing test scripts
+=head2 Test::More - yet another framework for writing test scripts
=over 4
@@ -35504,8 +35771,7 @@ objects, Threads
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Test::Simple, Test::Simple - Basic
-utilities for writing tests.
+=head2 Test::Simple - Basic utilities for writing tests.
=over 4
@@ -35537,8 +35803,7 @@ L<Test::More>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Test::Tutorial, Test::Tutorial - A
-tutorial about writing really basic tests
+=head2 Test::Tutorial - A tutorial about writing really basic tests
=over 4
@@ -35576,8 +35841,7 @@ tutorial about writing really basic tests
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Text::Abbrev, abbrev - create an
-abbreviation table from a list
+=head2 Text::Abbrev - abbrev - create an abbreviation table from a list
=over 4
@@ -35589,8 +35853,7 @@ abbreviation table from a list
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Text::Balanced, Text::Balanced - Extract
-delimited text sequences from strings.
+=head2 Text::Balanced - Extract delimited text sequences from strings.
=over 4
@@ -35665,8 +35928,8 @@ tag>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Text::ParseWords, Text::ParseWords -
-parse text into an array of tokens or array of arrays
+=head2 Text::ParseWords - parse text into an array of tokens or array of
+arrays
=over 4
@@ -35680,8 +35943,7 @@ parse text into an array of tokens or array of arrays
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Text::Soundex, Text::Soundex -
-Implementation of the soundex algorithm.
+=head2 Text::Soundex - Implementation of the soundex algorithm.
=over 4
@@ -35699,8 +35961,8 @@ Implementation of the soundex algorithm.
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Text::Tabs, Text::Tabs -- expand and
-unexpand tabs per the unix expand(1) and unexpand(1)
+=head2 Text::Tabs -- expand and unexpand tabs per the unix expand(1) and
+unexpand(1)
=over 4
@@ -35714,8 +35976,7 @@ unexpand tabs per the unix expand(1) and unexpand(1)
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Text::Wrap, Text::Wrap - line wrapping
-to form simple paragraphs
+=head2 Text::Wrap - line wrapping to form simple paragraphs
=over 4
@@ -35733,8 +35994,7 @@ to form simple paragraphs
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Thread, Thread - Manipulate threads in
-Perl (for old code only)
+=head2 Thread - Manipulate threads in Perl (for old code only)
=over 4
@@ -35764,8 +36024,7 @@ lock(\&sub), eval, flags
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Thread::Queue, Thread::Queue -
-Thread-safe queues
+=head2 Thread::Queue - Thread-safe queues
=over 4
@@ -35804,8 +36063,7 @@ above
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Thread::Semaphore, Thread::Semaphore -
-Thread-safe semaphores
+=head2 Thread::Semaphore - Thread-safe semaphores
=over 4
@@ -35831,8 +36089,7 @@ Thread-safe semaphores
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Tie::Array, Tie::Array - base class for
-tied arrays
+=head2 Tie::Array - base class for tied arrays
=over 4
@@ -35851,8 +36108,7 @@ SHIFT this, UNSHIFT this, LIST, SPLICE this, offset, length, LIST
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Tie::File, Tie::File - Access the lines
-of a disk file via a Perl array
+=head2 Tie::File - Access the lines of a disk file via a Perl array
=over 4
@@ -35920,8 +36176,7 @@ of a disk file via a Perl array
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Tie::Handle, Tie::Handle - base class
-definitions for tied handles
+=head2 Tie::Handle - base class definitions for tied handles
=over 4
@@ -35940,8 +36195,8 @@ EOF this, TELL this, SEEK this, offset, whence, DESTROY this
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Tie::Hash, Tie::Hash, Tie::StdHash,
-Tie::ExtraHash - base class definitions for tied hashes
+=head2 Tie::Hash, Tie::StdHash, Tie::ExtraHash - base class definitions for
+tied hashes
=over 4
@@ -35963,8 +36218,7 @@ this, SCALAR this
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Tie::Hash::NamedCapture,
-Tie::Hash::NamedCapture - Named regexp capture buffers
+=head2 Tie::Hash::NamedCapture - Named regexp capture buffers
=over 4
@@ -35976,8 +36230,7 @@ Tie::Hash::NamedCapture - Named regexp capture buffers
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Tie::Memoize, Tie::Memoize - add data to
-hash when needed
+=head2 Tie::Memoize - add data to hash when needed
=over 4
@@ -35995,8 +36248,7 @@ hash when needed
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Tie::RefHash, Tie::RefHash - use
-references as hash keys
+=head2 Tie::RefHash - use references as hash keys
=over 4
@@ -36022,8 +36274,8 @@ references as hash keys
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Tie::Scalar, Tie::Scalar, Tie::StdScalar
-- base class definitions for tied scalars
+=head2 Tie::Scalar, Tie::StdScalar - base class definitions for tied
+scalars
=over 4
@@ -36043,8 +36295,7 @@ TIESCALAR classname, LIST, FETCH this, STORE this, value, DESTROY this
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Tie::StdHandle, Tie::StdHandle - base
-class definitions for tied handles
+=head2 Tie::StdHandle - base class definitions for tied handles
=over 4
@@ -36054,8 +36305,7 @@ class definitions for tied handles
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Tie::SubstrHash, Tie::SubstrHash -
-Fixed-table-size, fixed-key-length hashing
+=head2 Tie::SubstrHash - Fixed-table-size, fixed-key-length hashing
=over 4
@@ -36067,8 +36317,8 @@ Fixed-table-size, fixed-key-length hashing
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Time::HiRes, Time::HiRes - High
-resolution alarm, sleep, gettimeofday, interval timers
+=head2 Time::HiRes - High resolution alarm, sleep, gettimeofday, interval
+timers
=over 4
@@ -36114,8 +36364,7 @@ $flags = 0), clock(), stat, stat FH, stat EXPR
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Time::Local, Time::Local - efficiently
-compute time from local and GMT time
+=head2 Time::Local - efficiently compute time from local and GMT time
=over 4
@@ -36155,8 +36404,7 @@ compute time from local and GMT time
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Time::Piece, Time::Piece - Object
-Oriented time objects
+=head2 Time::Piece - Object Oriented time objects
=over 4
@@ -36204,8 +36452,7 @@ Oriented time objects
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Time::Seconds, Time::Seconds - a simple
-API to convert seconds to other date values
+=head2 Time::Seconds - a simple API to convert seconds to other date values
=over 4
@@ -36223,8 +36470,8 @@ API to convert seconds to other date values
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Time::gmtime, Time::gmtime - by-name
-interface to Perl's built-in gmtime() function
+=head2 Time::gmtime - by-name interface to Perl's built-in gmtime()
+function
=over 4
@@ -36238,8 +36485,8 @@ interface to Perl's built-in gmtime() function
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Time::localtime, Time::localtime -
-by-name interface to Perl's built-in localtime() function
+=head2 Time::localtime - by-name interface to Perl's built-in localtime()
+function
=over 4
@@ -36253,8 +36500,7 @@ by-name interface to Perl's built-in localtime() function
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Time::tm, Time::tm - internal object
-used by Time::gmtime and Time::localtime
+=head2 Time::tm - internal object used by Time::gmtime and Time::localtime
=over 4
@@ -36266,8 +36512,7 @@ used by Time::gmtime and Time::localtime
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::UNIVERSAL, UNIVERSAL - base class for
-ALL classes (blessed references)
+=head2 UNIVERSAL - base class for ALL classes (blessed references)
=over 4
@@ -36286,8 +36531,7 @@ METHOD ) >>, C<< eval { VAL->can( METHOD ) } >>, C<VERSION ( [ REQUIRE ] )>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Unicode::Collate, Unicode::Collate -
-Unicode Collation Algorithm
+=head2 Unicode::Collate - Unicode Collation Algorithm
=over 4
@@ -36300,9 +36544,9 @@ Unicode Collation Algorithm
=item Constructor and Tailoring
UCA_Version, alternate, backwards, entry, hangul_terminator, ignoreChar,
-ignoreName, katakana_before_hiragana, level, normalization, overrideCJK,
-overrideHangul, preprocess, rearrange, suppress, table, undefChar,
-undefName, upper_before_lower, variable
+ignoreName, ignore_level2, katakana_before_hiragana, level, normalization,
+overrideCJK, overrideHangul, preprocess, rearrange, rewrite, suppress,
+table, undefChar, undefName, upper_before_lower, variable
=item Methods for Collation
@@ -36351,8 +36595,7 @@ Language (LDML) - UTS #35
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Unicode::Collate::CJK::Big5,
-Unicode::Collate::CJK::Big5 - weighting CJK Unified Ideographs
+=head2 Unicode::Collate::CJK::Big5 - weighting CJK Unified Ideographs
for Unicode::Collate
=over 4
@@ -36368,8 +36611,7 @@ Language (LDML) - UTS #35, L<Unicode::Collate>, L<Unicode::Collate::Locale>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Unicode::Collate::CJK::GB2312,
-Unicode::Collate::CJK::GB2312 - weighting CJK Unified Ideographs
+=head2 Unicode::Collate::CJK::GB2312 - weighting CJK Unified Ideographs
for Unicode::Collate
=over 4
@@ -36387,8 +36629,8 @@ Language (LDML) - UTS #35, L<Unicode::Collate>, L<Unicode::Collate::Locale>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Unicode::Collate::CJK::JISX0208,
-Unicode::Collate::CJK::JISX0208 - weighting JIS KANJI for Unicode::Collate
+=head2 Unicode::Collate::CJK::JISX0208 - weighting JIS KANJI for
+Unicode::Collate
=over 4
@@ -36402,8 +36644,7 @@ L<Unicode::Collate>, L<Unicode::Collate::Locale>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Unicode::Collate::CJK::Korean,
-Unicode::Collate::CJK::Korean - weighting CJK Unified Ideographs
+=head2 Unicode::Collate::CJK::Korean - weighting CJK Unified Ideographs
for Unicode::Collate
=over 4
@@ -36419,8 +36660,7 @@ Language (LDML) - UTS #35, L<Unicode::Collate>, L<Unicode::Collate::Locale>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Unicode::Collate::CJK::Pinyin,
-Unicode::Collate::CJK::Pinyin - weighting CJK Unified Ideographs
+=head2 Unicode::Collate::CJK::Pinyin - weighting CJK Unified Ideographs
for Unicode::Collate
=over 4
@@ -36438,8 +36678,7 @@ Language (LDML) - UTS #35, L<Unicode::Collate>, L<Unicode::Collate::Locale>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Unicode::Collate::CJK::Stroke,
-Unicode::Collate::CJK::Stroke - weighting CJK Unified Ideographs
+=head2 Unicode::Collate::CJK::Stroke - weighting CJK Unified Ideographs
for Unicode::Collate
=over 4
@@ -36455,8 +36694,7 @@ Language (LDML) - UTS #35, L<Unicode::Collate>, L<Unicode::Collate::Locale>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Unicode::Collate::Locale,
-Unicode::Collate::Locale - Linguistic tailoring for DUCET via
+=head2 Unicode::Collate::Locale - Linguistic tailoring for DUCET via
Unicode::Collate
=over 4
@@ -36471,7 +36709,7 @@ Unicode::Collate
=item Methods
-C<$Collator-E<gt>getlocale>
+C<$Collator-E<gt>getlocale>, C<$Collator-E<gt>locale_version>
=item A list of tailorable locales
@@ -36494,8 +36732,7 @@ L<Unicode::Normalize>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Unicode::Normalize, Unicode::Normalize -
-Unicode Normalization Forms
+=head2 Unicode::Normalize - Unicode Normalization Forms
=over 4
@@ -36566,8 +36803,7 @@ http://www.unicode.org/review/pr-29.html, http://www.unicode.org/notes/tn5/
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Unicode::UCD, Unicode::UCD - Unicode
-character database
+=head2 Unicode::UCD - Unicode character database
=over 4
@@ -36579,6 +36815,12 @@ character database
=item code point argument
+=back
+
+=back
+
+=over 4
+
=item B<charinfo()>
B<code>, B<name>, B<category>, B<combining>, B<bidi>, B<decomposition>,
@@ -36587,8 +36829,6 @@ B<upper>, B<lower>, B<title>, B<block>, B<script>
=back
-=back
-
=over 4
=item B<charblock()>
@@ -36641,7 +36881,8 @@ B<upper>, B<lower>, B<title>, B<block>, B<script>
=item B<casefold()>
-B<code>, B<full>, B<simple>, B<mapping>, B<status>, B<*>, B<*>, B<turkic>
+B<code>, B<full>, B<simple>, B<mapping>, B<status>, B<*> If you use this
+C<I> mapping, B<*> If you exclude this C<I> mapping, B<turkic>
=back
@@ -36661,7 +36902,35 @@ B<code>, B<lower>, B<title>, B<upper>, B<condition>
=over 4
-=item num
+=item B<num()>
+
+=back
+
+=over 4
+
+=item B<prop_aliases()>
+
+=back
+
+=over 4
+
+=item B<prop_value_aliases()>
+
+=back
+
+=over 4
+
+=item B<prop_invlist()>
+
+=back
+
+=over 4
+
+=item B<prop_invmap()>
+
+B<C<s>>, B<C<sl>>, C<correction>, C<control>, C<alternate>, C<figment>,
+C<abbreviation>, B<C<a>>, B<C<al>>, B<C<ae>>, B<C<ale>>, B<C<ar>>, B<C<n>>,
+B<C<ad>>
=back
@@ -36677,7 +36946,7 @@ B<code>, B<lower>, B<title>, B<upper>, B<condition>
=item B<Matching Scripts and Blocks>
-=item Implementation Note
+=item Old-style versus new-style block names
=back
@@ -36689,8 +36958,8 @@ B<code>, B<lower>, B<title>, B<upper>, B<condition>
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::User::grent, User::grent - by-name
-interface to Perl's built-in getgr*() functions
+=head2 User::grent - by-name interface to Perl's built-in getgr*()
+functions
=over 4
@@ -36704,8 +36973,8 @@ interface to Perl's built-in getgr*() functions
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::User::pwent, User::pwent - by-name
-interface to Perl's built-in getpw*() functions
+=head2 User::pwent - by-name interface to Perl's built-in getpw*()
+functions
=over 4
@@ -36729,8 +36998,7 @@ March 18th, 2000
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Win32, Win32 - Interfaces to some Win32
-API Functions
+=head2 Win32 - Interfaces to some Win32 API Functions
=over 4
@@ -36769,8 +37037,8 @@ PID), Win32::UnregisterServer(LIBRARYNAME)
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Win32API::File, Win32API::File -
-Low-level access to Win32 system API calls for files/dirs.
+=head2 Win32API::File - Low-level access to Win32 system API calls for
+files/dirs.
=over 4
@@ -36905,8 +37173,7 @@ C<":SEM_">, C<":PARTITION_">, C<":ALL">
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::Win32CORE, Win32CORE - Win32 CORE
-function stubs
+=head2 Win32CORE - Win32 CORE function stubs
=over 4
@@ -36916,8 +37183,7 @@ function stubs
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::XSLoader, XSLoader - Dynamically load C
-libraries into Perl code
+=head2 XSLoader - Dynamically load C libraries into Perl code
=over 4
@@ -36950,1570 +37216,18 @@ C<Undefined symbols present after loading %s: %s>
=item LIMITATIONS
-=item BUGS
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item COPYRIGHT & LICENSE
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::attributes, attributes - get/set
-subroutine or variable attributes
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item What C<import> does
-
-=item Built-in Attributes
-
-lvalue, method, locked
-
-=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 MORE EXAMPLES
-
-=item SEE ALSO
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::autodie, autodie - Replace functions
-with ones that succeed or die with lexical scope
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXCEPTIONS
-
-=item CATEGORIES
-
-=item FUNCTION SPECIFIC NOTES
-
-=over 4
-
-=item flock
-
-=item system/exec
-
-=back
-
-=item GOTCHAS
-
-=item DIAGNOSTICS
-
-:void cannot be used with lexical scope, No user hints defined for %s
-
-=item BUGS
-
-=over 4
-
-=item autodie and string eval
-
-=item REPORTING BUGS
-
-=back
-
-=item FEEDBACK
-
-=item AUTHOR
-
-=item LICENSE
-
-=item SEE ALSO
-
-=item ACKNOWLEDGEMENTS
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::autodie::exception, autodie::exception -
-Exceptions from autodying functions.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Common Methods
-
-=back
-
-=back
-
-=over 4
-
-=item Advanced methods
-
-=back
-
-=over 4
-
-=item SEE ALSO
-
-=item LICENSE
-
-=item AUTHOR
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::autodie::exception::system,
-autodie::exception::system - Exceptions from autodying system().
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item stringify
-
-=back
-
-=over 4
-
-=item LICENSE
-
-=item AUTHOR
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::autodie::hints, autodie::hints - Provide
-hints about user subroutines to autodie
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Introduction
-
-=item What are hints?
-
-=item Example hints
-
-=back
-
-=item Manually setting hints from within your program
-
-=item Adding hints to your module
-
-=item Insisting on hints
-
-=back
-
-=over 4
-
-=item Diagnostics
-
-Attempts to set_hints_for unidentifiable subroutine, fail hints cannot be
-provided with either scalar or list hints for %s, %s hint missing for %s
-
-=item ACKNOWLEDGEMENTS
-
-=item AUTHOR
-
-=item LICENSE
-
-=item SEE ALSO
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::autouse, 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 C:\perl_tl\perl-5.14.2\lib::base, 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 C:\perl_tl\perl-5.14.2\lib::bigint, 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 CAVEATS
-
-in_effect(), hex()/oct()
-
-=item MODULES USED
-
-=item EXAMPLES
-
-=item LICENSE
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::bignum, 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 CAVEATS
-
-in_effect(), hex()/oct()
-
-=item MODULES USED
-
-=item EXAMPLES
-
-=item LICENSE
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::bigrat, 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 Caveat
-
-=item Options
-
-a or accuracy, p or precision, t or trace, l or lib, hex, oct, v or version
-
-=back
-
-=item CAVEATS
-
-in_effect(), hex()/oct()
-
-=item EXAMPLES
-
-=item LICENSE
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::blib, blib - Use MakeMaker's uninstalled
-version of a package
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::bytes, bytes - Perl pragma to force byte
-semantics rather than character semantics
-
-=over 4
-
-=item NOTICE
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item LIMITATIONS
-
-=item SEE ALSO
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::charnames, charnames - access to Unicode
-character names and named character sequences; also define character names
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item ALIASES
-
-=item CUSTOM ALIASES
-
-=item charnames::viacode(I<code>)
-
-=item charnames::string_vianame(I<name>)
-
-=item charnames::vianame(I<name>)
-
-=item CUSTOM TRANSLATORS
+=item KNOWN BUGS
=item BUGS
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::constant, 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 SEE ALSO
-=item BUGS
-
=item AUTHORS
=item COPYRIGHT & LICENSE
=back
-=head2 C:\perl_tl\perl-5.14.2\lib::deprecate, deprecate - Perl pragma for
-deprecating the core version of a module
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item EXPORT
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::diagnostics, 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 C:\perl_tl\perl-5.14.2\lib::encoding, 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
-
-=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 C:\perl_tl\perl-5.14.2\lib::encoding::warnings, 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 C:\perl_tl\perl-5.14.2\lib::feature, feature - Perl pragma to enable
-new 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
-
-=item the 'unicode_strings' feature
-
-=back
-
-=item FEATURE BUNDLES
-
-=item IMPLICIT LOADING
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::fields, fields - compile-time class
-fields
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-new, phash
-
-=item SEE ALSO
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::filetest, 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 C:\perl_tl\perl-5.14.2\lib::if, if - C<use> a Perl module if a
-condition holds
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::inc::latest, inc::latest - use modules
-bundled in inc/ if they are newer than installed ones
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Special notes on bundling
-
-=back
-
-=item USAGE
-
-=over 4
-
-=item Author-mode
-
-loaded_modules(), write(), bundle_module()
-
-=item As bundled in inc/
-
-=back
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::integer, integer - Perl pragma to use
-integer arithmetic instead of floating point
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::less, 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 C:\perl_tl\perl-5.14.2\lib::lib, 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
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::locale, locale - Perl pragma to use and
-avoid POSIX locales for built-in operations
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::mro, 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 Pugs
-
-=item Parrot
-
-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 C:\perl_tl\perl-5.14.2\lib::open, 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 C:\perl_tl\perl-5.14.2\lib::ops, ops - Perl pragma to restrict
-unsafe operations when compiling
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::overload, overload - Package for
-overloading Perl operations
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Fundamentals
-
-=item Overloadable Operations
-
-C<not>, C<neg>, C<++>, C<-->, I<Assignments>, I<Non-mutators with a mutator
-variant>, C<int>, I<String, numeric, boolean, and regexp conversions>,
-I<Iteration>, I<File tests>, I<Matching>, I<Dereferencing>, I<Special>
-
-=item Magic Autogeneration
-
-=item Special Keys for C<use overload>
-
-defined, but FALSE, C<undef>, TRUE
-
-=item How Perl Chooses an Operator Implementation
-
-=item Losing Overloading
-
-=item Inheritance and Overloading
-
-Method names in the C<use overload> directive, Overloading of an operation
-is inherited by derived classes
-
-=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
-
-=back
-
-=item IMPLEMENTATION
-
-=item COOKBOOK
-
-=over 4
-
-=item Two-face Scalars
-
-=item Two-face References
-
-=item Symbolic Calculator
-
-=item I<Really> Symbolic Calculator
-
-=back
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=item DIAGNOSTICS
-
-Odd number of arguments for overload::constant, `%s' is not an overloadable
-type, `%s' is not a code reference
-
-=item BUGS AND PITFALLS
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::overloading, overloading - perl pragma
-to lexically control overloading
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-C<no overloading>, C<no overloading @ops>, C<use overloading>, C<use
-overloading @ops>
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::parent, parent - Establish an ISA
-relationship with base classes at compile time
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item DIAGNOSTICS
-
-Class 'Foo' tried to inherit from itself
-
-=item HISTORY
-
-=item CAVEATS
-
-=item SEE ALSO
-
-=item AUTHORS AND CONTRIBUTORS
-
-=item MAINTAINER
-
-=item LICENSE
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::re, re - Perl pragma to alter regular
-expression behaviour
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item 'taint' mode
-
-=item 'eval' mode
-
-=item '/flags' 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 C:\perl_tl\perl-5.14.2\lib::sigtrap, 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 C:\perl_tl\perl-5.14.2\lib::sort, sort - perl pragma to control
-sort() behaviour
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CAVEATS
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::strict, 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 C:\perl_tl\perl-5.14.2\lib::subs, subs - Perl pragma to predeclare
-sub names
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::threads, 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, Memory consumption,
-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, END blocks in threads, Open directory
-handles, Perl Bugs and the CPAN Version of L<threads>
-
-=item REQUIREMENTS
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item LICENSE
-
-=item ACKNOWLEDGEMENTS
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::threads::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, shared_clone REF, 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
-
-=item LICENSE
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::utf8, 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 C:\perl_tl\perl-5.14.2\lib::vars, vars - Perl pragma to predeclare
-global variable names (obsolete)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::version, version - Perl extension for
-Version Objects
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item TYPES OF VERSION OBJECTS
-
-Decimal Versions, Dotted Decimal Versions
-
-=item DECLARING VERSIONS
-
-=over 4
-
-=item How to convert a module from decimal to dotted-decimal
-
-=item How to C<declare()> a dotted-decimal version
-
-=back
-
-=item PARSING AND COMPARING VERSIONS
-
-=over 4
-
-=item How to C<parse()> a version
-
-=item How to check for a legal version string
-
-C<is_lax()>, C<is_strict()>
-
-=item How to compare version objects
-
-=back
-
-=item OBJECT METHODS
-
-=over 4
-
-=item is_alpha()
-
-=item is_qv()
-
-=item normal()
-
-=item numify()
-
-=item stringify()
-
-=back
-
-=item EXPORTED FUNCTIONS
-
-=over 4
-
-=item qv()
-
-=item is_lax()
-
-=item is_strict()
-
-=back
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::version::Internals, version::Internals -
-Perl extension for Version Objects
-
-=over 4
-
-=item DESCRIPTION
-
-=item WHAT IS A VERSION?
-
-Decimal Versions, Dotted-Decimal Versions
-
-=over 4
-
-=item Decimal Versions
-
-=item Dotted-Decimal Versions
-
-=item Alpha Versions
-
-=item Regular Expressions for Version Parsing
-
-C<$version::LAX>, C<$version::STRICT>, v1.234.5
-
-=back
-
-=item IMPLEMENTATION DETAILS
-
-=over 4
-
-=item Equivalence between Decimal and Dotted-Decimal Versions
-
-=item Quoting Rules
-
-=item What about v-strings?
-
-=item Version Object Internals
-
-original, qv, alpha, version
-
-=item Replacement UNIVERSAL::VERSION
-
-=back
-
-=item USAGE DETAILS
-
-=over 4
-
-=item Using modules that use version.pm
-
-Decimal versions always work, Dotted-Decimal version work sometimes
-
-=item Object Methods
-
-new(), qv(), Normal Form, Numification, Stringification, Comparison
-operators, Logical Operators
-
-=back
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::version::Requirements,
-Version::Requirements - a set of version requirements for a CPAN dist
-
-=over 4
-
-=item VERSION
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=over 4
-
-=item new
-
-=item add_minimum
-
-=item add_maximum
-
-=item add_exclusion
-
-=item exact_version
-
-=item add_requirements
-
-=item accepts_module
-
-=item clear_requirement
-
-=item required_modules
-
-=item clone
-
-=item is_simple
-
-=item is_finalized
-
-=item finalize
-
-=item as_string_hash
-
-=item from_string_hash
-
-=back
-
-=item AUTHOR
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::vmsish, 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 C:\perl_tl\perl-5.14.2\lib::warnings, 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::fatal_enabled(),
-warnings::fatal_enabled($category), warnings::fatal_enabled($object),
-warnings::warn($message), warnings::warn($category, $message),
-warnings::warn($object, $message), warnings::warnif($message),
-warnings::warnif($category, $message), warnings::warnif($object, $message),
-warnings::register_categories(@names)
-
-=back
-
-=head2 C:\perl_tl\perl-5.14.2\lib::warnings::register, warnings::register -
-warnings import function
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
=head1 AUXILIARY DOCUMENTATION
Here should be listed all the extra programs' documentation, but they
@@ -38525,16 +37239,12 @@ don't all have manual pages yet:
=item c2ph
-=item dprofpp
-
=item h2ph
=item h2xs
=item perlbug
-=item perldoc
-
=item pl2pm
=item pod2html
diff --git a/Master/tlpkg/tlperl/lib/pods/perltodo.pod b/Master/tlpkg/tlperl/lib/pods/perltodo.pod
index de0e373b468..524a501681f 100644
--- a/Master/tlpkg/tlperl/lib/pods/perltodo.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perltodo.pod
@@ -4,1277 +4,7 @@ perltodo - Perl TO-DO List
=head1 DESCRIPTION
-This is a list of wishes for Perl. The most up to date version of this file
-is at L<http://perl5.git.perl.org/perl.git/blob_plain/HEAD:/pod/perltodo.pod>
-
-The tasks we think are smaller or easier are listed first. Anyone is welcome
-to work on any of these, but it's a good idea to first contact
-I<perl5-porters@perl.org> to avoid duplication of effort, and to learn from
-any previous attempts. By all means contact a pumpking privately first if you
-prefer.
-
-Whilst patches to make the list shorter are most welcome, ideas to add to
-the list are also encouraged. Check the perl5-porters archives for past
-ideas, and any discussion about them. One set of archives may be found at
-L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/>
-
-What can we offer you in return? Fame, fortune, and everlasting glory? Maybe
-not, but if your patch is incorporated, then we'll add your name to the
-F<AUTHORS> file, which ships in the official distribution. How many other
-programming languages offer you 1 line of immortality?
-
-=head1 Tasks that only need Perl knowledge
-
-=head2 Migrate t/ from custom TAP generation
-
-Many tests below F<t/> still generate TAP by "hand", rather than using library
-functions. As explained in L<perlhack/TESTING>, tests in F<t/> are
-written in a particular way to test that more complex constructions actually
-work before using them routinely. Hence they don't use C<Test::More>, but
-instead there is an intentionally simpler library, F<t/test.pl>. However,
-quite a few tests in F<t/> have not been refactored to use it. Refactoring
-any of these tests, one at a time, is a useful thing TODO.
-
-The subdirectories F<base>, F<cmd> and F<comp>, that contain the most
-basic tests, should be excluded from this task.
-
-=head2 Automate perldelta generation
-
-The perldelta file accompanying each release summaries the major changes.
-It's mostly manually generated currently, but some of that could be
-automated with a bit of perl, specifically the generation of
-
-=over
-
-=item Modules and Pragmata
-
-=item New Documentation
-
-=item New Tests
-
-=back
-
-See F<Porting/how_to_write_a_perldelta.pod> for details.
-
-=head2 Remove duplication of test setup.
-
-Schwern notes, that there's duplication of code - lots and lots of tests have
-some variation on the big block of C<$Is_Foo> checks. We can safely put this
-into a file, change it to build an C<%Is> hash and require it. Maybe just put
-it into F<test.pl>. Throw in the handy tainting subroutines.
-
-=head2 POD -E<gt> HTML conversion in the core still sucks
-
-Which is crazy given just how simple POD purports to be, and how simple HTML
-can be. It's not actually I<as> simple as it sounds, particularly with the
-flexibility POD allows for C<=item>, but it would be good to improve the
-visual appeal of the HTML generated, and to avoid it having any validation
-errors. See also L</make HTML install work>, as the layout of installation tree
-is needed to improve the cross-linking.
-
-The addition of C<Pod::Simple> and its related modules may make this task
-easier to complete.
-
-=head2 Make ExtUtils::ParseXS use strict;
-
-F<lib/ExtUtils/ParseXS.pm> contains this line
-
- # use strict; # One of these days...
-
-Simply uncomment it, and fix all the resulting issues :-)
-
-The more practical approach, to break the task down into manageable chunks, is
-to work your way though the code from bottom to top, or if necessary adding
-extra C<{ ... }> blocks, and turning on strict within them.
-
-=head2 Make Schwern poorer
-
-We should have tests for everything. When all the core's modules are tested,
-Schwern has promised to donate to $500 to TPF. We may need volunteers to
-hold him upside down and shake vigorously in order to actually extract the
-cash.
-
-=head2 Improve the coverage of the core tests
-
-Use Devel::Cover to ascertain the core modules' test coverage, then add
-tests that are currently missing.
-
-=head2 test B
-
-A full test suite for the B module would be nice.
-
-=head2 A decent benchmark
-
-C<perlbench> seems impervious to any recent changes made to the perl core. It
-would be useful to have a reasonable general benchmarking suite that roughly
-represented what current perl programs do, and measurably reported whether
-tweaks to the core improve, degrade or don't really affect performance, to
-guide people attempting to optimise the guts of perl. Gisle would welcome
-new tests for perlbench.
-
-=head2 fix tainting bugs
-
-Fix the bugs revealed by running the test suite with the C<-t> switch (via
-C<make test.taintwarn>).
-
-=head2 Dual life everything
-
-As part of the "dists" plan, anything that doesn't belong in the smallest perl
-distribution needs to be dual lifed. Anything else can be too. Figure out what
-changes would be needed to package that module and its tests up for CPAN, and
-do so. Test it with older perl releases, and fix the problems you find.
-
-To make a minimal perl distribution, it's useful to look at
-F<t/lib/commonsense.t>.
-
-=head2 POSIX memory footprint
-
-Ilya observed that use POSIX; eats memory like there's no tomorrow, and at
-various times worked to cut it down. There is probably still fat to cut out -
-for example POSIX passes Exporter some very memory hungry data structures.
-
-=head2 embed.pl/makedef.pl
-
-There is a script F<embed.pl> that generates several header files to prefix
-all of Perl's symbols in a consistent way, to provide some semblance of
-namespace support in C<C>. Functions are declared in F<embed.fnc>, variables
-in F<interpvar.h>. Quite a few of the functions and variables
-are conditionally declared there, using C<#ifdef>. However, F<embed.pl>
-doesn't understand the C macros, so the rules about which symbols are present
-when is duplicated in F<makedef.pl>. Writing things twice is bad, m'kay.
-It would be good to teach C<embed.pl> to understand the conditional
-compilation, and hence remove the duplication, and the mistakes it has caused.
-
-=head2 use strict; and AutoLoad
-
-Currently if you write
-
- package Whack;
- use AutoLoader 'AUTOLOAD';
- use strict;
- 1;
- __END__
- sub bloop {
- print join (' ', No, strict, here), "!\n";
- }
-
-then C<use strict;> isn't in force within the autoloaded subroutines. It would
-be more consistent (and less surprising) to arrange for all lexical pragmas
-in force at the __END__ block to be in force within each autoloaded subroutine.
-
-There's a similar problem with SelfLoader.
-
-=head2 profile installman
-
-The F<installman> script is slow. All it is doing text processing, which we're
-told is something Perl is good at. So it would be nice to know what it is doing
-that is taking so much CPU, and where possible address it.
-
-=head2 enable lexical enabling/disabling of individual warnings
-
-Currently, warnings can only be enabled or disabled by category. There
-are times when it would be useful to quash a single warning, not a
-whole category.
-
-=head1 Tasks that need a little sysadmin-type knowledge
-
-Or if you prefer, tasks that you would learn from, and broaden your skills
-base...
-
-=head2 make HTML install work
-
-There is an C<installhtml> target in the Makefile. It's marked as
-"experimental". It would be good to get this tested, make it work reliably, and
-remove the "experimental" tag. This would include
-
-=over 4
-
-=item 1
-
-Checking that cross linking between various parts of the documentation works.
-In particular that links work between the modules (files with POD in F<lib/>)
-and the core documentation (files in F<pod/>)
-
-=item 2
-
-Work out how to split C<perlfunc> into chunks, preferably one per function
-group, preferably with general case code that could be used elsewhere.
-Challenges here are correctly identifying the groups of functions that go
-together, and making the right named external cross-links point to the right
-page. Things to be aware of are C<-X>, groups such as C<getpwnam> to
-C<endservent>, two or more C<=items> giving the different parameter lists, such
-as
-
- =item substr EXPR,OFFSET,LENGTH,REPLACEMENT
- =item substr EXPR,OFFSET,LENGTH
- =item substr EXPR,OFFSET
-
-and different parameter lists having different meanings. (eg C<select>)
-
-=back
-
-=head2 compressed man pages
-
-Be able to install them. This would probably need a configure test to see how
-the system does compressed man pages (same directory/different directory?
-same filename/different filename), as well as tweaking the F<installman> script
-to compress as necessary.
-
-=head2 Add a code coverage target to the Makefile
-
-Make it easy for anyone to run Devel::Cover on the core's tests. The steps
-to do this manually are roughly
-
-=over 4
-
-=item *
-
-do a normal C<Configure>, but include Devel::Cover as a module to install
-(see L<INSTALL> for how to do this)
-
-=item *
-
- make perl
-
-=item *
-
- cd t; HARNESS_PERL_SWITCHES=-MDevel::Cover ./perl -I../lib harness
-
-=item *
-
-Process the resulting Devel::Cover database
-
-=back
-
-This just give you the coverage of the F<.pm>s. To also get the C level
-coverage you need to
-
-=over 4
-
-=item *
-
-Additionally tell C<Configure> to use the appropriate C compiler flags for
-C<gcov>
-
-=item *
-
- make perl.gcov
-
-(instead of C<make perl>)
-
-=item *
-
-After running the tests run C<gcov> to generate all the F<.gcov> files.
-(Including down in the subdirectories of F<ext/>
-
-=item *
-
-(From the top level perl directory) run C<gcov2perl> on all the C<.gcov> files
-to get their stats into the cover_db directory.
-
-=item *
-
-Then process the Devel::Cover database
-
-=back
-
-It would be good to add a single switch to C<Configure> to specify that you
-wanted to perform perl level coverage, and another to specify C level
-coverage, and have C<Configure> and the F<Makefile> do all the right things
-automatically.
-
-=head2 Make Config.pm cope with differences between built and installed perl
-
-Quite often vendors ship a perl binary compiled with their (pay-for)
-compilers. People install a free compiler, such as gcc. To work out how to
-build extensions, Perl interrogates C<%Config>, so in this situation
-C<%Config> describes compilers that aren't there, and extension building
-fails. This forces people into choosing between re-compiling perl themselves
-using the compiler they have, or only using modules that the vendor ships.
-
-It would be good to find a way teach C<Config.pm> about the installation setup,
-possibly involving probing at install time or later, so that the C<%Config> in
-a binary distribution better describes the installed machine, when the
-installed machine differs from the build machine in some significant way.
-
-=head2 linker specification files
-
-Some platforms mandate that you provide a list of a shared library's external
-symbols to the linker, so the core already has the infrastructure in place to
-do this for generating shared perl libraries. My understanding is that the
-GNU toolchain can accept an optional linker specification file, and restrict
-visibility just to symbols declared in that file. It would be good to extend
-F<makedef.pl> to support this format, and to provide a means within
-C<Configure> to enable it. This would allow Unix users to test that the
-export list is correct, and to build a perl that does not pollute the global
-namespace with private symbols, and will fail in the same way as msvc or mingw
-builds or when using PERL_DL_NONLAZY=1.
-
-=head2 Cross-compile support
-
-Currently C<Configure> understands C<-Dusecrosscompile> option. This option
-arranges for building C<miniperl> for TARGET machine, so this C<miniperl> is
-assumed then to be copied to TARGET machine and used as a replacement of full
-C<perl> executable.
-
-This could be done little differently. Namely C<miniperl> should be built for
-HOST and then full C<perl> with extensions should be compiled for TARGET.
-This, however, might require extra trickery for %Config: we have one config
-first for HOST and then another for TARGET. Tools like MakeMaker will be
-mightily confused. Having around two different types of executables and
-libraries (HOST and TARGET) makes life interesting for Makefiles and
-shell (and Perl) scripts. There is $Config{run}, normally empty, which
-can be used as an execution wrapper. Also note that in some
-cross-compilation/execution environments the HOST and the TARGET do
-not see the same filesystem(s), the $Config{run} may need to do some
-file/directory copying back and forth.
-
-=head2 roffitall
-
-Make F<pod/roffitall> be updated by F<pod/buildtoc>.
-
-=head2 Split "linker" from "compiler"
-
-Right now, Configure probes for two commands, and sets two variables:
-
-=over 4
-
-=item * C<cc> (in F<cc.U>)
-
-This variable holds the name of a command to execute a C compiler which
-can resolve multiple global references that happen to have the same
-name. Usual values are F<cc> and F<gcc>.
-Fervent ANSI compilers may be called F<c89>. AIX has F<xlc>.
-
-=item * C<ld> (in F<dlsrc.U>)
-
-This variable indicates the program to be used to link
-libraries for dynamic loading. On some systems, it is F<ld>.
-On ELF systems, it should be C<$cc>. Mostly, we'll try to respect
-the hint file setting.
-
-=back
-
-There is an implicit historical assumption from around Perl5.000alpha
-something, that C<$cc> is also the correct command for linking object files
-together to make an executable. This may be true on Unix, but it's not true
-on other platforms, and there are a maze of work arounds in other places (such
-as F<Makefile.SH>) to cope with this.
-
-Ideally, we should create a new variable to hold the name of the executable
-linker program, probe for it in F<Configure>, and centralise all the special
-case logic there or in hints files.
-
-A small bikeshed issue remains - what to call it, given that C<$ld> is already
-taken (arguably for the wrong thing now, but on SunOS 4.1 it is the command
-for creating dynamically-loadable modules) and C<$link> could be confused with
-the Unix command line executable of the same name, which does something
-completely different. Andy Dougherty makes the counter argument "In parrot, I
-tried to call the command used to link object files and libraries into an
-executable F<link>, since that's what my vaguely-remembered DOS and VMS
-experience suggested. I don't think any real confusion has ensued, so it's
-probably a reasonable name for perl5 to use."
-
-"Alas, I've always worried that introducing it would make things worse,
-since now the module building utilities would have to look for
-C<$Config{link}> and institute a fall-back plan if it weren't found."
-Although I can see that as confusing, given that C<$Config{d_link}> is true
-when (hard) links are available.
-
-=head2 Configure Windows using PowerShell
-
-Currently, Windows uses hard-coded config files based to build the
-config.h for compiling Perl. Makefiles are also hard-coded and need to be
-hand edited prior to building Perl. While this makes it easy to create a perl.exe
-that works across multiple Windows versions, being able to accurately
-configure a perl.exe for a specific Windows versions and VS C++ would be
-a nice enhancement. With PowerShell available on Windows XP and up, this
-may now be possible. Step 1 might be to investigate whether this is possible
-and use this to clean up our current makefile situation. Step 2 would be to
-see if there would be a way to use our existing metaconfig units to configure a
-Windows Perl or whether we go in a separate direction and make it so. Of
-course, we all know what step 3 is.
-
-=head2 decouple -g and -DDEBUGGING
-
-Currently F<Configure> automatically adds C<-DDEBUGGING> to the C compiler
-flags if it spots C<-g> in the optimiser flags. The pre-processor directive
-C<DEBUGGING> enables F<perl>'s command line C<-D> options, but in the process
-makes F<perl> slower. It would be good to disentangle this logic, so that
-C-level debugging with C<-g> and Perl level debugging with C<-D> can easily
-be enabled independently.
-
-=head1 Tasks that need a little C knowledge
-
-These tasks would need a little C knowledge, but don't need any specific
-background or experience with XS, or how the Perl interpreter works
-
-=head2 Weed out needless PERL_UNUSED_ARG
-
-The C code uses the macro C<PERL_UNUSED_ARG> to stop compilers warning about
-unused arguments. Often the arguments can't be removed, as there is an
-external constraint that determines the prototype of the function, so this
-approach is valid. However, there are some cases where C<PERL_UNUSED_ARG>
-could be removed. Specifically
-
-=over 4
-
-=item *
-
-The prototypes of (nearly all) static functions can be changed
-
-=item *
-
-Unused arguments generated by short cut macros are wasteful - the short cut
-macro used can be changed.
-
-=back
-
-=head2 Modernize the order of directories in @INC
-
-The way @INC is laid out by default, one cannot upgrade core (dual-life)
-modules without overwriting files. This causes problems for binary
-package builders. One possible proposal is laid out in this
-message:
-L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2002-04/msg02380.html>
-
-=head2 -Duse32bit*
-
-Natively 64-bit systems need neither -Duse64bitint nor -Duse64bitall.
-On these systems, it might be the default compilation mode, and there
-is currently no guarantee that passing no use64bitall option to the
-Configure process will build a 32bit perl. Implementing -Duse32bit*
-options would be nice for perl 5.14.
-
-=head2 Profile Perl - am I hot or not?
-
-The Perl source code is stable enough that it makes sense to profile it,
-identify and optimise the hotspots. It would be good to measure the
-performance of the Perl interpreter using free tools such as cachegrind,
-gprof, and dtrace, and work to reduce the bottlenecks they reveal.
-
-As part of this, the idea of F<pp_hot.c> is that it contains the I<hot> ops,
-the ops that are most commonly used. The idea is that by grouping them, their
-object code will be adjacent in the executable, so they have a greater chance
-of already being in the CPU cache (or swapped in) due to being near another op
-already in use.
-
-Except that it's not clear if these really are the most commonly used ops. So
-as part of exercising your skills with coverage and profiling tools you might
-want to determine what ops I<really> are the most commonly used. And in turn
-suggest evictions and promotions to achieve a better F<pp_hot.c>.
-
-One piece of Perl code that might make a good testbed is F<installman>.
-
-=head2 Allocate OPs from arenas
-
-Currently all new OP structures are individually malloc()ed and free()d.
-All C<malloc> implementations have space overheads, and are now as fast as
-custom allocates so it would both use less memory and less CPU to allocate
-the various OP structures from arenas. The SV arena code can probably be
-re-used for this.
-
-Note that Configuring perl with C<-Accflags=-DPL_OP_SLAB_ALLOC> will use
-Perl_Slab_alloc() to pack optrees into a contiguous block, which is
-probably superior to the use of OP arenas, esp. from a cache locality
-standpoint. See L<Profile Perl - am I hot or not?>.
-
-=head2 Improve win32/wince.c
-
-Currently, numerous functions look virtually, if not completely,
-identical in both C<win32/wince.c> and C<win32/win32.c> files, which can't
-be good.
-
-=head2 Use secure CRT functions when building with VC8 on Win32
-
-Visual C++ 2005 (VC++ 8.x) deprecated a number of CRT functions on the basis
-that they were "unsafe" and introduced differently named secure versions of
-them as replacements, e.g. instead of writing
-
- FILE* f = fopen(__FILE__, "r");
-
-one should now write
-
- FILE* f;
- errno_t err = fopen_s(&f, __FILE__, "r");
-
-Currently, the warnings about these deprecations have been disabled by adding
--D_CRT_SECURE_NO_DEPRECATE to the CFLAGS. It would be nice to remove that
-warning suppressant and actually make use of the new secure CRT functions.
-
-There is also a similar issue with POSIX CRT function names like fileno having
-been deprecated in favour of ISO C++ conformant names like _fileno. These
-warnings are also currently suppressed by adding -D_CRT_NONSTDC_NO_DEPRECATE. It
-might be nice to do as Microsoft suggest here too, although, unlike the secure
-functions issue, there is presumably little or no benefit in this case.
-
-=head2 Fix POSIX::access() and chdir() on Win32
-
-These functions currently take no account of DACLs and therefore do not behave
-correctly in situations where access is restricted by DACLs (as opposed to the
-read-only attribute).
-
-Furthermore, POSIX::access() behaves differently for directories having the
-read-only attribute set depending on what CRT library is being used. For
-example, the _access() function in the VC6 and VC7 CRTs (wrongly) claim that
-such directories are not writable, whereas in fact all directories are writable
-unless access is denied by DACLs. (In the case of directories, the read-only
-attribute actually only means that the directory cannot be deleted.) This CRT
-bug is fixed in the VC8 and VC9 CRTs (but, of course, the directory may still
-not actually be writable if access is indeed denied by DACLs).
-
-For the chdir() issue, see ActiveState bug #74552:
-L<http://bugs.activestate.com/show_bug.cgi?id=74552>
-
-Therefore, DACLs should be checked both for consistency across CRTs and for
-the correct answer.
-
-(Note that perl's -w operator should not be modified to check DACLs. It has
-been written so that it reflects the state of the read-only attribute, even
-for directories (whatever CRT is being used), for symmetry with chmod().)
-
-=head2 strcat(), strcpy(), strncat(), strncpy(), sprintf(), vsprintf()
-
-Maybe create a utility that checks after each libperl.a creation that
-none of the above (nor sprintf(), vsprintf(), or *SHUDDER* gets())
-ever creep back to libperl.a.
-
- nm libperl.a | ./miniperl -alne '$o = $F[0] if /:$/; print "$o $F[1]" if $F[0] eq "U" && $F[1] =~ /^(?:strn?c(?:at|py)|v?sprintf|gets)$/'
-
-Note, of course, that this will only tell whether B<your> platform
-is using those naughty interfaces.
-
-=head2 -D_FORTIFY_SOURCE=2, -fstack-protector
-
-Recent glibcs support C<-D_FORTIFY_SOURCE=2> and recent gcc
-(4.1 onwards?) supports C<-fstack-protector>, both of which give
-protection against various kinds of buffer overflow problems.
-These should probably be used for compiling Perl whenever available,
-Configure and/or hints files should be adjusted to probe for the
-availability of these features and enable them as appropriate.
-
-=head2 Arenas for GPs? For MAGIC?
-
-C<struct gp> and C<struct magic> are both currently allocated by C<malloc>.
-It might be a speed or memory saving to change to using arenas. Or it might
-not. It would need some suitable benchmarking first. In particular, C<GP>s
-can probably be changed with minimal compatibility impact (probably nothing
-outside of the core, or even outside of F<gv.c> allocates them), but they
-probably aren't allocated/deallocated often enough for a speed saving. Whereas
-C<MAGIC> is allocated/deallocated more often, but in turn, is also something
-more externally visible, so changing the rules here may bite external code.
-
-=head2 Shared arenas
-
-Several SV body structs are now the same size, notably PVMG and PVGV, PVAV and
-PVHV, and PVCV and PVFM. It should be possible to allocate and return same
-sized bodies from the same actual arena, rather than maintaining one arena for
-each. This could save 4-6K per thread, of memory no longer tied up in the
-not-yet-allocated part of an arena.
-
-
-=head1 Tasks that need a knowledge of XS
-
-These tasks would need C knowledge, and roughly the level of knowledge of
-the perl API that comes from writing modules that use XS to interface to
-C.
-
-=head2 Write an XS cookbook
-
-Create pod/perlxscookbook.pod with short, task-focused 'recipes' in XS that
-demonstrate common tasks and good practices. (Some of these might be
-extracted from perlguts.) The target audience should be XS novices, who need
-more examples than perlguts but something less overwhelming than perlapi.
-Recipes should provide "one pretty good way to do it" instead of TIMTOWTDI.
-
-Rather than focusing on interfacing Perl to C libraries, such a cookbook
-should probably focus on how to optimize Perl routines by re-writing them
-in XS. This will likely be more motivating to those who mostly work in
-Perl but are looking to take the next step into XS.
-
-Deconstructing and explaining some simpler XS modules could be one way to
-bootstrap a cookbook. (List::Util? Class::XSAccessor? Tree::Ternary_XS?)
-Another option could be deconstructing the implementation of some simpler
-functions in op.c.
-
-=head2 Allow XSUBs to inline themselves as OPs
-
-For a simple XSUB, often the subroutine dispatch takes more time than the
-XSUB itself. The tokeniser already has the ability to inline constant
-subroutines - it would be good to provide a way to inline other subroutines.
-
-Specifically, simplest approach looks to be to allow an XSUB to provide an
-alternative implementation of itself as a custom OP. A new flag bit in
-C<CvFLAGS()> would signal to the peephole optimiser to take an optree
-such as this:
-
- b <@> leave[1 ref] vKP/REFC ->(end)
- 1 <0> enter ->2
- 2 <;> nextstate(main 1 -e:1) v:{ ->3
- a <2> sassign vKS/2 ->b
- 8 <1> entersub[t2] sKS/TARG,1 ->9
- - <1> ex-list sK ->8
- 3 <0> pushmark s ->4
- 4 <$> const(IV 1) sM ->5
- 6 <1> rv2av[t1] lKM/1 ->7
- 5 <$> gv(*a) s ->6
- - <1> ex-rv2cv sK ->-
- 7 <$> gv(*x) s/EARLYCV ->8
- - <1> ex-rv2sv sKRM*/1 ->a
- 9 <$> gvsv(*b) s ->a
-
-perform the symbol table lookup of C<rv2cv> and C<gv(*x)>, locate the
-pointer to the custom OP that provides the direct implementation, and re-
-write the optree something like:
-
- b <@> leave[1 ref] vKP/REFC ->(end)
- 1 <0> enter ->2
- 2 <;> nextstate(main 1 -e:1) v:{ ->3
- a <2> sassign vKS/2 ->b
- 7 <1> custom_x -> 8
- - <1> ex-list sK ->7
- 3 <0> pushmark s ->4
- 4 <$> const(IV 1) sM ->5
- 6 <1> rv2av[t1] lKM/1 ->7
- 5 <$> gv(*a) s ->6
- - <1> ex-rv2cv sK ->-
- - <$> ex-gv(*x) s/EARLYCV ->7
- - <1> ex-rv2sv sKRM*/1 ->a
- 8 <$> gvsv(*b) s ->a
-
-I<i.e.> the C<gv(*)> OP has been nulled and spliced out of the execution
-path, and the C<entersub> OP has been replaced by the custom op.
-
-This approach should provide a measurable speed up to simple XSUBs inside
-tight loops. Initially one would have to write the OP alternative
-implementation by hand, but it's likely that this should be reasonably
-straightforward for the type of XSUB that would benefit the most. Longer
-term, once the run-time implementation is proven, it should be possible to
-progressively update ExtUtils::ParseXS to generate OP implementations for
-some XSUBs.
-
-=head2 Remove the use of SVs as temporaries in dump.c
-
-F<dump.c> contains debugging routines to dump out the contains of perl data
-structures, such as C<SV>s, C<AV>s and C<HV>s. Currently, the dumping code
-B<uses> C<SV>s for its temporary buffers, which was a logical initial
-implementation choice, as they provide ready made memory handling.
-
-However, they also lead to a lot of confusion when it happens that what you're
-trying to debug is seen by the code in F<dump.c>, correctly or incorrectly, as
-a temporary scalar it can use for a temporary buffer. It's also not possible
-to dump scalars before the interpreter is properly set up, such as during
-ithreads cloning. It would be good to progressively replace the use of scalars
-as string accumulation buffers with something much simpler, directly allocated
-by C<malloc>. The F<dump.c> code is (or should be) only producing 7 bit
-US-ASCII, so output character sets are not an issue.
-
-Producing and proving an internal simple buffer allocation would make it easier
-to re-write the internals of the PerlIO subsystem to avoid using C<SV>s for
-B<its> buffers, use of which can cause problems similar to those of F<dump.c>,
-at similar times.
-
-=head2 safely supporting POSIX SA_SIGINFO
-
-Some years ago Jarkko supplied patches to provide support for the POSIX
-SA_SIGINFO feature in Perl, passing the extra data to the Perl signal handler.
-
-Unfortunately, it only works with "unsafe" signals, because under safe
-signals, by the time Perl gets to run the signal handler, the extra
-information has been lost. Moreover, it's not easy to store it somewhere,
-as you can't call mutexs, or do anything else fancy, from inside a signal
-handler.
-
-So it strikes me that we could provide safe SA_SIGINFO support
-
-=over 4
-
-=item 1
-
-Provide global variables for two file descriptors
-
-=item 2
-
-When the first request is made via C<sigaction> for C<SA_SIGINFO>, create a
-pipe, store the reader in one, the writer in the other
-
-=item 3
-
-In the "safe" signal handler (C<Perl_csighandler()>/C<S_raise_signal()>), if
-the C<siginfo_t> pointer non-C<NULL>, and the writer file handle is open,
-
-=over 8
-
-=item 1
-
-serialise signal number, C<struct siginfo_t> (or at least the parts we care
-about) into a small auto char buff
-
-=item 2
-
-C<write()> that (non-blocking) to the writer fd
-
-=over 12
-
-=item 1
-
-if it writes 100%, flag the signal in a counter of "signals on the pipe" akin
-to the current per-signal-number counts
-
-=item 2
-
-if it writes 0%, assume the pipe is full. Flag the data as lost?
-
-=item 3
-
-if it writes partially, croak a panic, as your OS is broken.
-
-=back
-
-=back
-
-=item 4
-
-in the regular C<PERL_ASYNC_CHECK()> processing, if there are "signals on
-the pipe", read the data out, deserialise, build the Perl structures on
-the stack (code in C<Perl_sighandler()>, the "unsafe" handler), and call as
-usual.
-
-=back
-
-I think that this gets us decent C<SA_SIGINFO> support, without the current risk
-of running Perl code inside the signal handler context. (With all the dangers
-of things like C<malloc> corruption that that currently offers us)
-
-For more information see the thread starting with this message:
-L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-03/msg00305.html>
-
-=head2 autovivification
-
-Make all autovivification consistent w.r.t LVALUE/RVALUE and strict/no strict;
-
-This task is incremental - even a little bit of work on it will help.
-
-=head2 Unicode in Filenames
-
-chdir, chmod, chown, chroot, exec, glob, link, lstat, mkdir, open,
-opendir, qx, readdir, readlink, rename, rmdir, stat, symlink, sysopen,
-system, truncate, unlink, utime, -X. All these could potentially accept
-Unicode filenames either as input or output (and in the case of system
-and qx Unicode in general, as input or output to/from the shell).
-Whether a filesystem - an operating system pair understands Unicode in
-filenames varies.
-
-Known combinations that have some level of understanding include
-Microsoft NTFS, Apple HFS+ (In Mac OS 9 and X) and Apple UFS (in Mac
-OS X), NFS v4 is rumored to be Unicode, and of course Plan 9. How to
-create Unicode filenames, what forms of Unicode are accepted and used
-(UCS-2, UTF-16, UTF-8), what (if any) is the normalization form used,
-and so on, varies. Finding the right level of interfacing to Perl
-requires some thought. Remember that an OS does not implicate a
-filesystem.
-
-(The Windows -C command flag "wide API support" has been at least
-temporarily retired in 5.8.1, and the -C has been repurposed, see
-L<perlrun>.)
-
-Most probably the right way to do this would be this:
-L</"Virtualize operating system access">.
-
-=head2 Unicode in %ENV
-
-Currently the %ENV entries are always byte strings.
-See L</"Virtualize operating system access">.
-
-=head2 Unicode and glob()
-
-Currently glob patterns and filenames returned from File::Glob::glob()
-are always byte strings. See L</"Virtualize operating system access">.
-
-=head2 use less 'memory'
-
-Investigate trade offs to switch out perl's choices on memory usage.
-Particularly perl should be able to give memory back.
-
-This task is incremental - even a little bit of work on it will help.
-
-=head2 Re-implement C<:unique> in a way that is actually thread-safe
-
-The old implementation made bad assumptions on several levels. A good 90%
-solution might be just to make C<:unique> work to share the string buffer
-of SvPVs. That way large constant strings can be shared between ithreads,
-such as the configuration information in F<Config>.
-
-=head2 Make tainting consistent
-
-Tainting would be easier to use if it didn't take documented shortcuts and
-allow taint to "leak" everywhere within an expression.
-
-=head2 readpipe(LIST)
-
-system() accepts a LIST syntax (and a PROGRAM LIST syntax) to avoid
-running a shell. readpipe() (the function behind qx//) could be similarly
-extended.
-
-=head2 Audit the code for destruction ordering assumptions
-
-Change 25773 notes
-
- /* Need to check SvMAGICAL, as during global destruction it may be that
- AvARYLEN(av) has been freed before av, and hence the SvANY() pointer
- is now part of the linked list of SV heads, rather than pointing to
- the original body. */
- /* FIXME - audit the code for other bugs like this one. */
-
-adding the C<SvMAGICAL> check to
-
- if (AvARYLEN(av) && SvMAGICAL(AvARYLEN(av))) {
- MAGIC *mg = mg_find (AvARYLEN(av), PERL_MAGIC_arylen);
-
-Go through the core and look for similar assumptions that SVs have particular
-types, as all bets are off during global destruction.
-
-=head2 Extend PerlIO and PerlIO::Scalar
-
-PerlIO::Scalar doesn't know how to truncate(). Implementing this
-would require extending the PerlIO vtable.
-
-Similarly the PerlIO vtable doesn't know about formats (write()), or
-about stat(), or chmod()/chown(), utime(), or flock().
-
-(For PerlIO::Scalar it's hard to see what e.g. mode bits or ownership
-would mean.)
-
-PerlIO doesn't do directories or symlinks, either: mkdir(), rmdir(),
-opendir(), closedir(), seekdir(), rewinddir(), glob(); symlink(),
-readlink().
-
-See also L</"Virtualize operating system access">.
-
-=head2 -C on the #! line
-
-It should be possible to make -C work correctly if found on the #! line,
-given that all perl command line options are strict ASCII, and -C changes
-only the interpretation of non-ASCII characters, and not for the script file
-handle. To make it work needs some investigation of the ordering of function
-calls during startup, and (by implication) a bit of tweaking of that order.
-
-=head2 Organize error messages
-
-Perl's diagnostics (error messages, see L<perldiag>) could use
-reorganizing and formalizing so that each error message has its
-stable-for-all-eternity unique id, categorized by severity, type, and
-subsystem. (The error messages would be listed in a datafile outside
-of the Perl source code, and the source code would only refer to the
-messages by the id.) This clean-up and regularizing should apply
-for all croak() messages.
-
-This would enable all sorts of things: easier translation/localization
-of the messages (though please do keep in mind the caveats of
-L<Locale::Maketext> about too straightforward approaches to
-translation), filtering by severity, and instead of grepping for a
-particular error message one could look for a stable error id. (Of
-course, changing the error messages by default would break all the
-existing software depending on some particular error message...)
-
-This kind of functionality is known as I<message catalogs>. Look for
-inspiration for example in the catgets() system, possibly even use it
-if available-- but B<only> if available, all platforms will B<not>
-have catgets().
-
-For the really pure at heart, consider extending this item to cover
-also the warning messages (see L<perllexwarn>, C<warnings.pl>).
-
-=head1 Tasks that need a knowledge of the interpreter
-
-These tasks would need C knowledge, and knowledge of how the interpreter works,
-or a willingness to learn.
-
-=head2 forbid labels with keyword names
-
-Currently C<goto keyword> "computes" the label value:
-
- $ perl -e 'goto print'
- Can't find label 1 at -e line 1.
-
-It is controversial if the right way to avoid the confusion is to forbid
-labels with keyword names, or if it would be better to always treat
-bareword expressions after a "goto" as a label and never as a keyword.
-
-=head2 truncate() prototype
-
-The prototype of truncate() is currently C<$$>. It should probably
-be C<*$> instead. (This is changed in F<opcode.pl>)
-
-=head2 decapsulation of smart match argument
-
-Currently C<$foo ~~ $object> will die with the message "Smart matching a
-non-overloaded object breaks encapsulation". It would be nice to allow
-to bypass this by using explicitly the syntax C<$foo ~~ %$object> or
-C<$foo ~~ @$object>.
-
-=head2 error reporting of [$a ; $b]
-
-Using C<;> inside brackets is a syntax error, and we don't propose to change
-that by giving it any meaning. However, it's not reported very helpfully:
-
- $ perl -e '$a = [$b; $c];'
- syntax error at -e line 1, near "$b;"
- syntax error at -e line 1, near "$c]"
- Execution of -e aborted due to compilation errors.
-
-It should be possible to hook into the tokeniser or the lexer, so that when a
-C<;> is parsed where it is not legal as a statement terminator (ie inside
-C<{}> used as a hashref, C<[]> or C<()>) it issues an error something like
-I<';' isn't legal inside an expression - if you need multiple statements use a
-do {...} block>. See the thread starting at
-L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-09/msg00573.html>
-
-=head2 lexicals used only once
-
-This warns:
-
- $ perl -we '$pie = 42'
- Name "main::pie" used only once: possible typo at -e line 1.
-
-This does not:
-
- $ perl -we 'my $pie = 42'
-
-Logically all lexicals used only once should warn, if the user asks for
-warnings. An unworked RT ticket (#5087) has been open for almost seven
-years for this discrepancy.
-
-=head2 UTF-8 revamp
-
-The handling of Unicode is unclean in many places. In the regex engine
-there are especially many problems. The swash data structure could be
-replaced my something better. Inversion lists and maps are likely
-candidates. The whole Unicode database could be placed in-core for a
-huge speed-up. Only minimal work was done on the optimizer when utf8
-was added, with the result that the synthetic start class often will
-fail to narrow down the possible choices when given non-Latin1 input.
-
-=head2 Properly Unicode safe tokeniser and pads.
-
-The tokeniser isn't actually very UTF-8 clean. C<use utf8;> is a hack -
-variable names are stored in stashes as raw bytes, without the utf-8 flag
-set. The pad API only takes a C<char *> pointer, so that's all bytes too. The
-tokeniser ignores the UTF-8-ness of C<PL_rsfp>, or any SVs returned from
-source filters. All this could be fixed.
-
-=head2 state variable initialization in list context
-
-Currently this is illegal:
-
- state ($a, $b) = foo();
-
-In Perl 6, C<state ($a) = foo();> and C<(state $a) = foo();> have different
-semantics, which is tricky to implement in Perl 5 as currently they produce
-the same opcode trees. The Perl 6 design is firm, so it would be good to
-implement the necessary code in Perl 5. There are comments in
-C<Perl_newASSIGNOP()> that show the code paths taken by various assignment
-constructions involving state variables.
-
-=head2 Implement $value ~~ 0 .. $range
-
-It would be nice to extend the syntax of the C<~~> operator to also
-understand numeric (and maybe alphanumeric) ranges.
-
-=head2 A does() built-in
-
-Like ref(), only useful. It would call the C<DOES> method on objects; it
-would also tell whether something can be dereferenced as an
-array/hash/etc., or used as a regexp, etc.
-L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-03/msg00481.html>
-
-=head2 Tied filehandles and write() don't mix
-
-There is no method on tied filehandles to allow them to be called back by
-formats.
-
-=head2 Propagate compilation hints to the debugger
-
-Currently a debugger started with -dE on the command-line doesn't see the
-features enabled by -E. More generally hints (C<$^H> and C<%^H>) aren't
-propagated to the debugger. Probably it would be a good thing to propagate
-hints from the innermost non-C<DB::> scope: this would make code eval'ed
-in the debugger see the features (and strictures, etc.) currently in
-scope.
-
-=head2 Attach/detach debugger from running program
-
-The old perltodo notes "With C<gdb>, you can attach the debugger to a running
-program if you pass the process ID. It would be good to do this with the Perl
-debugger on a running Perl program, although I'm not sure how it would be
-done." ssh and screen do this with named pipes in /tmp. Maybe we can too.
-
-=head2 LVALUE functions for lists
-
-The old perltodo notes that lvalue functions don't work for list or hash
-slices. This would be good to fix.
-
-=head2 regexp optimiser optional
-
-The regexp optimiser is not optional. It should configurable to be, to allow
-its performance to be measured, and its bugs to be easily demonstrated.
-
-=head2 C</w> regex modifier
-
-That flag would enable to match whole words, and also to interpolate
-arrays as alternations. With it, C</P/w> would be roughly equivalent to:
-
- do { local $"='|'; /\b(?:P)\b/ }
-
-See
-L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-01/msg00400.html>
-for the discussion.
-
-=head2 optional optimizer
-
-Make the peephole optimizer optional. Currently it performs two tasks as
-it walks the optree - genuine peephole optimisations, and necessary fixups of
-ops. It would be good to find an efficient way to switch out the
-optimisations whilst keeping the fixups.
-
-=head2 You WANT *how* many
-
-Currently contexts are void, scalar and list. split has a special mechanism in
-place to pass in the number of return values wanted. It would be useful to
-have a general mechanism for this, backwards compatible and little speed hit.
-This would allow proposals such as short circuiting sort to be implemented
-as a module on CPAN.
-
-=head2 lexical aliases
-
-Allow lexical aliases (maybe via the syntax C<my \$alias = \$foo>.
-
-=head2 entersub XS vs Perl
-
-At the moment pp_entersub is huge, and has code to deal with entering both
-perl and XS subroutines. Subroutine implementations rarely change between
-perl and XS at run time, so investigate using 2 ops to enter subs (one for
-XS, one for perl) and swap between if a sub is redefined.
-
-=head2 Self-ties
-
-Self-ties are currently illegal because they caused too many segfaults. Maybe
-the causes of these could be tracked down and self-ties on all types
-reinstated.
-
-=head2 Optimize away @_
-
-The old perltodo notes "Look at the "reification" code in C<av.c>".
-
-=head2 Virtualize operating system access
-
-Implement a set of "vtables" that virtualizes operating system access
-(open(), mkdir(), unlink(), readdir(), getenv(), etc.) At the very
-least these interfaces should take SVs as "name" arguments instead of
-bare char pointers; probably the most flexible and extensible way
-would be for the Perl-facing interfaces to accept HVs. The system
-needs to be per-operating-system and per-file-system
-hookable/filterable, preferably both from XS and Perl level
-(L<perlport/"Files and Filesystems"> is good reading at this point,
-in fact, all of L<perlport> is.)
-
-This has actually already been implemented (but only for Win32),
-take a look at F<iperlsys.h> and F<win32/perlhost.h>. While all Win32
-variants go through a set of "vtables" for operating system access,
-non-Win32 systems currently go straight for the POSIX/Unix-style
-system/library call. Similar system as for Win32 should be
-implemented for all platforms. The existing Win32 implementation
-probably does not need to survive alongside this proposed new
-implementation, the approaches could be merged.
-
-What would this give us? One often-asked-for feature this would
-enable is using Unicode for filenames, and other "names" like %ENV,
-usernames, hostnames, and so forth.
-(See L<perlunicode/"When Unicode Does Not Happen">.)
-
-But this kind of virtualization would also allow for things like
-virtual filesystems, virtual networks, and "sandboxes" (though as long
-as dynamic loading of random object code is allowed, not very safe
-sandboxes since external code of course know not of Perl's vtables).
-An example of a smaller "sandbox" is that this feature can be used to
-implement per-thread working directories: Win32 already does this.
-
-See also L</"Extend PerlIO and PerlIO::Scalar">.
-
-=head2 Investigate PADTMP hash pessimisation
-
-The peephole optimiser converts constants used for hash key lookups to shared
-hash key scalars. Under ithreads, something is undoing this work.
-See
-L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-09/msg00793.html>
-
-=head2 Store the current pad in the OP slab allocator
-
-=for clarification
-I hope that I got that "current pad" part correct
-
-Currently we leak ops in various cases of parse failure. I suggested that we
-could solve this by always using the op slab allocator, and walking it to
-free ops. Dave comments that as some ops are already freed during optree
-creation one would have to mark which ops are freed, and not double free them
-when walking the slab. He notes that one problem with this is that for some ops
-you have to know which pad was current at the time of allocation, which does
-change. I suggested storing a pointer to the current pad in the memory allocated
-for the slab, and swapping to a new slab each time the pad changes. Dave thinks
-that this would work.
-
-=head2 repack the optree
-
-Repacking the optree after execution order is determined could allow
-removal of NULL ops, and optimal ordering of OPs with respect to cache-line
-filling. The slab allocator could be reused for this purpose. I think that
-the best way to do this is to make it an optional step just before the
-completed optree is attached to anything else, and to use the slab allocator
-unchanged, so that freeing ops is identical whether or not this step runs.
-Note that the slab allocator allocates ops downwards in memory, so one would
-have to actually "allocate" the ops in reverse-execution order to get them
-contiguous in memory in execution order.
-
-See
-L<http://www.nntp.perl.org/group/perl.perl5.porters/2007/12/msg131975.html>
-
-Note that running this copy, and then freeing all the old location ops would
-cause their slabs to be freed, which would eliminate possible memory wastage if
-the previous suggestion is implemented, and we swap slabs more frequently.
-
-=head2 eliminate incorrect line numbers in warnings
-
-This code
-
- use warnings;
- my $undef;
-
- if ($undef == 3) {
- } elsif ($undef == 0) {
- }
-
-used to produce this output:
-
- Use of uninitialized value in numeric eq (==) at wrong.pl line 4.
- Use of uninitialized value in numeric eq (==) at wrong.pl line 4.
-
-where the line of the second warning was misreported - it should be line 5.
-Rafael fixed this - the problem arose because there was no nextstate OP
-between the execution of the C<if> and the C<elsif>, hence C<PL_curcop> still
-reports that the currently executing line is line 4. The solution was to inject
-a nextstate OPs for each C<elsif>, although it turned out that the nextstate
-OP needed to be a nulled OP, rather than a live nextstate OP, else other line
-numbers became misreported. (Jenga!)
-
-The problem is more general than C<elsif> (although the C<elsif> case is the
-most common and the most confusing). Ideally this code
-
- use warnings;
- my $undef;
-
- my $a = $undef + 1;
- my $b
- = $undef
- + 1;
-
-would produce this output
-
- Use of uninitialized value $undef in addition (+) at wrong.pl line 4.
- Use of uninitialized value $undef in addition (+) at wrong.pl line 7.
-
-(rather than lines 4 and 5), but this would seem to require every OP to carry
-(at least) line number information.
-
-What might work is to have an optional line number in memory just before the
-BASEOP structure, with a flag bit in the op to say whether it's present.
-Initially during compile every OP would carry its line number. Then add a late
-pass to the optimiser (potentially combined with L</repack the optree>) which
-looks at the two ops on every edge of the graph of the execution path. If
-the line number changes, flags the destination OP with this information.
-Once all paths are traced, replace every op with the flag with a
-nextstate-light op (that just updates C<PL_curcop>), which in turn then passes
-control on to the true op. All ops would then be replaced by variants that
-do not store the line number. (Which, logically, why it would work best in
-conjunction with L</repack the optree>, as that is already copying/reallocating
-all the OPs)
-
-(Although I should note that we're not certain that doing this for the general
-case is worth it)
-
-=head2 optimize tail-calls
-
-Tail-calls present an opportunity for broadly applicable optimization;
-anywhere that C<< return foo(...) >> is called, the outer return can
-be replaced by a goto, and foo will return directly to the outer
-caller, saving (conservatively) 25% of perl's call&return cost, which
-is relatively higher than in C. The scheme language is known to do
-this heavily. B::Concise provides good insight into where this
-optimization is possible, ie anywhere entersub,leavesub op-sequence
-occurs.
-
- perl -MO=Concise,-exec,a,b,-main -e 'sub a{ 1 }; sub b {a()}; b(2)'
-
-Bottom line on this is probably a new pp_tailcall function which
-combines the code in pp_entersub, pp_leavesub. This should probably
-be done 1st in XS, and using B::Generate to patch the new OP into the
-optrees.
-
-=head2 Add C<00dddd>
-
-It has been proposed that octal constants be specifiable through the syntax
-C<0oddddd>, parallel to the existing construct to specify hex constants
-C<0xddddd>
-
-=head1 Big projects
-
-Tasks that will get your name mentioned in the description of the "Highlights
-of 5.14"
-
-=head2 make ithreads more robust
-
-Generally make ithreads more robust. See also L</iCOW>
-
-This task is incremental - even a little bit of work on it will help, and
-will be greatly appreciated.
-
-One bit would be to determine how to clone directory handles on systems
-without a C<fchdir> function (in sv.c:Perl_dirp_dup).
-
-Fix Perl_sv_dup, et al so that threads can return objects.
-
-=head2 iCOW
-
-Sarathy and Arthur have a proposal for an improved Copy On Write which
-specifically will be able to COW new ithreads. If this can be implemented
-it would be a good thing.
-
-=head2 (?{...}) closures in regexps
-
-Fix (or rewrite) the implementation of the C</(?{...})/> closures.
-
-=head2 Add class set operations to regexp engine
-
-Apparently these are quite useful. Anyway, Jeffery Friedl wants them.
-
-demerphq has this on his todo list, but right at the bottom.
-
-
-=head1 Tasks for microperl
-
-
-[ Each and every one of these may be obsolete, but they were listed
- in the old Todo.micro file]
-
-
-=head2 make creating uconfig.sh automatic
-
-=head2 make creating Makefile.micro automatic
-
-=head2 do away with fork/exec/wait?
-
-(system, popen should be enough?)
-
-=head2 some of the uconfig.sh really needs to be probed (using cc) in buildtime:
-
-(uConfigure? :-) native datatype widths and endianness come to mind
-
+We no longer install the Perl 5 to-do list as a manpage, as installing
+snapshot that becomes increasingly out of date isn't that useful to anyone.
+The current Perl 5 to-do list is maintained in the git repository, and can
+be viewed at L<http://perl5.git.perl.org/perl.git/blob/HEAD:/Porting/todo.pod>
diff --git a/Master/tlpkg/tlperl/lib/pods/perltooc.pod b/Master/tlpkg/tlperl/lib/pods/perltooc.pod
index 06f697cdef1..35163255300 100644
--- a/Master/tlpkg/tlperl/lib/pods/perltooc.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perltooc.pod
@@ -1,1342 +1,12 @@
+=encoding utf8
+
=head1 NAME
-perltooc - Tom's OO Tutorial for Class Data in Perl
+perltooc - This document has been deleted
=head1 DESCRIPTION
-When designing an object class, you are sometimes faced with the situation
-of wanting common state shared by all objects of that class.
-Such I<class attributes> act somewhat like global variables for the entire
-class, but unlike program-wide globals, class attributes have meaning only to
-the class itself.
-
-Here are a few examples where class attributes might come in handy:
-
-=over 4
-
-=item *
-
-to keep a count of the objects you've created, or how many are
-still extant.
-
-=item *
-
-to extract the name or file descriptor for a logfile used by a debugging
-method.
-
-=item *
-
-to access collective data, like the total amount of cash dispensed by
-all ATMs in a network in a given day.
-
-=item *
-
-to access the last object created by a class, or the most accessed object,
-or to retrieve a list of all objects.
-
-=back
-
-Unlike a true global, class attributes should not be accessed directly.
-Instead, their state should be inspected, and perhaps altered, only
-through the mediated access of I<class methods>. These class attributes
-accessor methods are similar in spirit and function to accessors used
-to manipulate the state of instance attributes on an object. They provide a
-clear firewall between interface and implementation.
-
-You should allow access to class attributes through either the class
-name or any object of that class. If we assume that $an_object is of
-type Some_Class, and the &Some_Class::population_count method accesses
-class attributes, then these two invocations should both be possible,
-and almost certainly equivalent.
-
- Some_Class->population_count()
- $an_object->population_count()
-
-The question is, where do you store the state which that method accesses?
-Unlike more restrictive languages like C++, where these are called
-static data members, Perl provides no syntactic mechanism to declare
-class attributes, any more than it provides a syntactic mechanism to
-declare instance attributes. Perl provides the developer with a broad
-set of powerful but flexible features that can be uniquely crafted to
-the particular demands of the situation.
-
-A class in Perl is typically implemented in a module. A module consists
-of two complementary feature sets: a package for interfacing with the
-outside world, and a lexical file scope for privacy. Either of these
-two mechanisms can be used to implement class attributes. That means you
-get to decide whether to put your class attributes in package variables
-or to put them in lexical variables.
-
-And those aren't the only decisions to make. If you choose to use package
-variables, you can make your class attribute accessor methods either ignorant
-of inheritance or sensitive to it. If you choose lexical variables,
-you can elect to permit access to them from anywhere in the entire file
-scope, or you can limit direct data access exclusively to the methods
-implementing those attributes.
-
-=head1 Class Data in a Can
-
-One of the easiest ways to solve a hard problem is to let someone else
-do it for you! In this case, Class::Data::Inheritable (available on a
-CPAN near you) offers a canned solution to the class data problem
-using closures. So before you wade into this document, consider
-having a look at that module.
-
-
-=head1 Class Data as Package Variables
-
-Because a class in Perl is really just a package, using package variables
-to hold class attributes is the most natural choice. This makes it simple
-for each class to have its own class attributes. Let's say you have a class
-called Some_Class that needs a couple of different attributes that you'd
-like to be global to the entire class. The simplest thing to do is to
-use package variables like $Some_Class::CData1 and $Some_Class::CData2
-to hold these attributes. But we certainly don't want to encourage
-outsiders to touch those data directly, so we provide methods
-to mediate access.
-
-In the accessor methods below, we'll for now just ignore the first
-argument--that part to the left of the arrow on method invocation, which
-is either a class name or an object reference.
-
- package Some_Class;
- sub CData1 {
- shift; # XXX: ignore calling class/object
- $Some_Class::CData1 = shift if @_;
- return $Some_Class::CData1;
- }
- sub CData2 {
- shift; # XXX: ignore calling class/object
- $Some_Class::CData2 = shift if @_;
- return $Some_Class::CData2;
- }
-
-This technique is highly legible and should be completely straightforward
-to even the novice Perl programmer. By fully qualifying the package
-variables, they stand out clearly when reading the code. Unfortunately,
-if you misspell one of these, you've introduced an error that's hard
-to catch. It's also somewhat disconcerting to see the class name itself
-hard-coded in so many places.
-
-Both these problems can be easily fixed. Just add the C<use strict>
-pragma, then pre-declare your package variables. (The C<our> operator
-will be new in 5.6, and will work for package globals just like C<my>
-works for scoped lexicals.)
-
- package Some_Class;
- use strict;
- our($CData1, $CData2); # our() is new to perl5.6
- sub CData1 {
- shift; # XXX: ignore calling class/object
- $CData1 = shift if @_;
- return $CData1;
- }
- sub CData2 {
- shift; # XXX: ignore calling class/object
- $CData2 = shift if @_;
- return $CData2;
- }
-
-
-As with any other global variable, some programmers prefer to start their
-package variables with capital letters. This helps clarity somewhat, but
-by no longer fully qualifying the package variables, their significance
-can be lost when reading the code. You can fix this easily enough by
-choosing better names than were used here.
-
-=head2 Putting All Your Eggs in One Basket
-
-Just as the mindless enumeration of accessor methods for instance attributes
-grows tedious after the first few (see L<perltoot>), so too does the
-repetition begin to grate when listing out accessor methods for class
-data. Repetition runs counter to the primary virtue of a programmer:
-Laziness, here manifesting as that innate urge every programmer feels
-to factor out duplicate code whenever possible.
-
-Here's what to do. First, make just one hash to hold all class attributes.
-
- package Some_Class;
- use strict;
- our %ClassData = ( # our() is new to perl5.6
- CData1 => "",
- CData2 => "",
- );
-
-Using closures (see L<perlref>) and direct access to the package symbol
-table (see L<perlmod>), now clone an accessor method for each key in
-the %ClassData hash. Each of these methods is used to fetch or store
-values to the specific, named class attribute.
-
- for my $datum (keys %ClassData) {
- no strict "refs"; # to register new methods in package
- *$datum = sub {
- shift; # XXX: ignore calling class/object
- $ClassData{$datum} = shift if @_;
- return $ClassData{$datum};
- }
- }
-
-It's true that you could work out a solution employing an &AUTOLOAD
-method, but this approach is unlikely to prove satisfactory. Your
-function would have to distinguish between class attributes and object
-attributes; it could interfere with inheritance; and it would have to
-careful about DESTROY. Such complexity is uncalled for in most cases,
-and certainly in this one.
-
-You may wonder why we're rescinding strict refs for the loop. We're
-manipulating the package's symbol table to introduce new function names
-using symbolic references (indirect naming), which the strict pragma
-would otherwise forbid. Normally, symbolic references are a dodgy
-notion at best. This isn't just because they can be used accidentally
-when you aren't meaning to. It's also because for most uses
-to which beginning Perl programmers attempt to put symbolic references,
-we have much better approaches, like nested hashes or hashes of arrays.
-But there's nothing wrong with using symbolic references to manipulate
-something that is meaningful only from the perspective of the package
-symbol table, like method names or package variables. In other
-words, when you want to refer to the symbol table, use symbol references.
-
-Clustering all the class attributes in one place has several advantages.
-They're easy to spot, initialize, and change. The aggregation also
-makes them convenient to access externally, such as from a debugger
-or a persistence package. The only possible problem is that we don't
-automatically know the name of each class's class object, should it have
-one. This issue is addressed below in L<"The Eponymous Meta-Object">.
-
-=head2 Inheritance Concerns
-
-Suppose you have an instance of a derived class, and you access class
-data using an inherited method call. Should that end up referring
-to the base class's attributes, or to those in the derived class?
-How would it work in the earlier examples? The derived class inherits
-all the base class's methods, including those that access class attributes.
-But what package are the class attributes stored in?
-
-The answer is that, as written, class attributes are stored in the package into
-which those methods were compiled. When you invoke the &CData1 method
-on the name of the derived class or on one of that class's objects, the
-version shown above is still run, so you'll access $Some_Class::CData1--or
-in the method cloning version, C<$Some_Class::ClassData{CData1}>.
-
-Think of these class methods as executing in the context of their base
-class, not in that of their derived class. Sometimes this is exactly
-what you want. If Feline subclasses Carnivore, then the population of
-Carnivores in the world should go up when a new Feline is born.
-But what if you wanted to figure out how many Felines you have apart
-from Carnivores? The current approach doesn't support that.
-
-You'll have to decide on a case-by-case basis whether it makes any sense
-for class attributes to be package-relative. If you want it to be so,
-then stop ignoring the first argument to the function. Either it will
-be a package name if the method was invoked directly on a class name,
-or else it will be an object reference if the method was invoked on an
-object reference. In the latter case, the ref() function provides the
-class of that object.
-
- package Some_Class;
- sub CData1 {
- my $obclass = shift;
- my $class = ref($obclass) || $obclass;
- my $varname = $class . "::CData1";
- no strict "refs"; # to access package data symbolically
- $$varname = shift if @_;
- return $$varname;
- }
-
-And then do likewise for all other class attributes (such as CData2,
-etc.) that you wish to access as package variables in the invoking package
-instead of the compiling package as we had previously.
-
-Once again we temporarily disable the strict references ban, because
-otherwise we couldn't use the fully-qualified symbolic name for
-the package global. This is perfectly reasonable: since all package
-variables by definition live in a package, there's nothing wrong with
-accessing them via that package's symbol table. That's what it's there
-for (well, somewhat).
-
-What about just using a single hash for everything and then cloning
-methods? What would that look like? The only difference would be the
-closure used to produce new method entries for the class's symbol table.
-
- no strict "refs";
- *$datum = sub {
- my $obclass = shift;
- my $class = ref($obclass) || $obclass;
- my $varname = $class . "::ClassData";
- $varname->{$datum} = shift if @_;
- return $varname->{$datum};
- }
-
-=head2 The Eponymous Meta-Object
-
-It could be argued that the %ClassData hash in the previous example is
-neither the most imaginative nor the most intuitive of names. Is there
-something else that might make more sense, be more useful, or both?
-
-As it happens, yes, there is. For the "class meta-object", we'll use
-a package variable of the same name as the package itself. Within the
-scope of a package Some_Class declaration, we'll use the eponymously
-named hash %Some_Class as that class's meta-object. (Using an eponymously
-named hash is somewhat reminiscent of classes that name their constructors
-eponymously in the Python or C++ fashion. That is, class Some_Class would
-use &Some_Class::Some_Class as a constructor, probably even exporting that
-name as well. The StrNum class in Recipe 13.14 in I<The Perl Cookbook>
-does this, if you're looking for an example.)
-
-This predictable approach has many benefits, including having a well-known
-identifier to aid in debugging, transparent persistence,
-or checkpointing. It's also the obvious name for monadic classes and
-translucent attributes, discussed later.
-
-Here's an example of such a class. Notice how the name of the
-hash storing the meta-object is the same as the name of the package
-used to implement the class.
-
- package Some_Class;
- use strict;
-
- # create class meta-object using that most perfect of names
- our %Some_Class = ( # our() is new to perl5.6
- CData1 => "",
- CData2 => "",
- );
-
- # this accessor is calling-package-relative
- sub CData1 {
- my $obclass = shift;
- my $class = ref($obclass) || $obclass;
- no strict "refs"; # to access eponymous meta-object
- $class->{CData1} = shift if @_;
- return $class->{CData1};
- }
-
- # but this accessor is not
- sub CData2 {
- shift; # XXX: ignore calling class/object
- no strict "refs"; # to access eponymous meta-object
- __PACKAGE__ -> {CData2} = shift if @_;
- return __PACKAGE__ -> {CData2};
- }
-
-In the second accessor method, the __PACKAGE__ notation was used for
-two reasons. First, to avoid hardcoding the literal package name
-in the code in case we later want to change that name. Second, to
-clarify to the reader that what matters here is the package currently
-being compiled into, not the package of the invoking object or class.
-If the long sequence of non-alphabetic characters bothers you, you can
-always put the __PACKAGE__ in a variable first.
-
- sub CData2 {
- shift; # XXX: ignore calling class/object
- no strict "refs"; # to access eponymous meta-object
- my $class = __PACKAGE__;
- $class->{CData2} = shift if @_;
- return $class->{CData2};
- }
-
-Even though we're using symbolic references for good not evil, some
-folks tend to become unnerved when they see so many places with strict
-ref checking disabled. Given a symbolic reference, you can always
-produce a real reference (the reverse is not true, though). So we'll
-create a subroutine that does this conversion for us. If invoked as a
-function of no arguments, it returns a reference to the compiling class's
-eponymous hash. Invoked as a class method, it returns a reference to
-the eponymous hash of its caller. And when invoked as an object method,
-this function returns a reference to the eponymous hash for whatever
-class the object belongs to.
-
- package Some_Class;
- use strict;
-
- our %Some_Class = ( # our() is new to perl5.6
- CData1 => "",
- CData2 => "",
- );
-
- # tri-natured: function, class method, or object method
- sub _classobj {
- my $obclass = shift || __PACKAGE__;
- my $class = ref($obclass) || $obclass;
- no strict "refs"; # to convert sym ref to real one
- return \%$class;
- }
-
- for my $datum (keys %{ _classobj() } ) {
- # turn off strict refs so that we can
- # register a method in the symbol table
- no strict "refs";
- *$datum = sub {
- use strict "refs";
- my $self = shift->_classobj();
- $self->{$datum} = shift if @_;
- return $self->{$datum};
- }
- }
-
-=head2 Indirect References to Class Data
-
-A reasonably common strategy for handling class attributes is to store
-a reference to each package variable on the object itself. This is
-a strategy you've probably seen before, such as in L<perltoot> and
-L<perlbot>, but there may be variations in the example below that you
-haven't thought of before.
-
- package Some_Class;
- our($CData1, $CData2); # our() is new to perl5.6
-
- sub new {
- my $obclass = shift;
- return bless my $self = {
- ObData1 => "",
- ObData2 => "",
- CData1 => \$CData1,
- CData2 => \$CData2,
- } => (ref $obclass || $obclass);
- }
-
- sub ObData1 {
- my $self = shift;
- $self->{ObData1} = shift if @_;
- return $self->{ObData1};
- }
-
- sub ObData2 {
- my $self = shift;
- $self->{ObData2} = shift if @_;
- return $self->{ObData2};
- }
-
- sub CData1 {
- my $self = shift;
- my $dataref = ref $self
- ? $self->{CData1}
- : \$CData1;
- $$dataref = shift if @_;
- return $$dataref;
- }
-
- sub CData2 {
- my $self = shift;
- my $dataref = ref $self
- ? $self->{CData2}
- : \$CData2;
- $$dataref = shift if @_;
- return $$dataref;
- }
-
-As written above, a derived class will inherit these methods, which
-will consequently access package variables in the base class's package.
-This is not necessarily expected behavior in all circumstances. Here's an
-example that uses a variable meta-object, taking care to access the
-proper package's data.
-
- package Some_Class;
- use strict;
-
- our %Some_Class = ( # our() is new to perl5.6
- CData1 => "",
- CData2 => "",
- );
-
- sub _classobj {
- my $self = shift;
- my $class = ref($self) || $self;
- no strict "refs";
- # get (hard) ref to eponymous meta-object
- return \%$class;
- }
-
- sub new {
- my $obclass = shift;
- my $classobj = $obclass->_classobj();
- bless my $self = {
- ObData1 => "",
- ObData2 => "",
- CData1 => \$classobj->{CData1},
- CData2 => \$classobj->{CData2},
- } => (ref $obclass || $obclass);
- return $self;
- }
-
- sub ObData1 {
- my $self = shift;
- $self->{ObData1} = shift if @_;
- return $self->{ObData1};
- }
-
- sub ObData2 {
- my $self = shift;
- $self->{ObData2} = shift if @_;
- return $self->{ObData2};
- }
-
- sub CData1 {
- my $self = shift;
- $self = $self->_classobj() unless ref $self;
- my $dataref = $self->{CData1};
- $$dataref = shift if @_;
- return $$dataref;
- }
-
- sub CData2 {
- my $self = shift;
- $self = $self->_classobj() unless ref $self;
- my $dataref = $self->{CData2};
- $$dataref = shift if @_;
- return $$dataref;
- }
-
-Not only are we now strict refs clean, using an eponymous meta-object
-seems to make the code cleaner. Unlike the previous version, this one
-does something interesting in the face of inheritance: it accesses the
-class meta-object in the invoking class instead of the one into which
-the method was initially compiled.
-
-You can easily access data in the class meta-object, making
-it easy to dump the complete class state using an external mechanism such
-as when debugging or implementing a persistent class. This works because
-the class meta-object is a package variable, has a well-known name, and
-clusters all its data together. (Transparent persistence
-is not always feasible, but it's certainly an appealing idea.)
-
-There's still no check that object accessor methods have not been
-invoked on a class name. If strict ref checking is enabled, you'd
-blow up. If not, then you get the eponymous meta-object. What you do
-with--or about--this is up to you. The next two sections demonstrate
-innovative uses for this powerful feature.
-
-=head2 Monadic Classes
-
-Some of the standard modules shipped with Perl provide class interfaces
-without any attribute methods whatsoever. The most commonly used module
-not numbered amongst the pragmata, the Exporter module, is a class with
-neither constructors nor attributes. Its job is simply to provide a
-standard interface for modules wishing to export part of their namespace
-into that of their caller. Modules use the Exporter's &import method by
-setting their inheritance list in their package's @ISA array to mention
-"Exporter". But class Exporter provides no constructor, so you can't
-have several instances of the class. In fact, you can't have any--it
-just doesn't make any sense. All you get is its methods. Its interface
-contains no statefulness, so state data is wholly superfluous.
-
-Another sort of class that pops up from time to time is one that supports
-a unique instance. Such classes are called I<monadic classes>, or less
-formally, I<singletons> or I<highlander classes>.
-
-If a class is monadic, where do you store its state, that is,
-its attributes? How do you make sure that there's never more than
-one instance? While you could merely use a slew of package variables,
-it's a lot cleaner to use the eponymously named hash. Here's a complete
-example of a monadic class:
-
- package Cosmos;
- %Cosmos = ();
-
- # accessor method for "name" attribute
- sub name {
- my $self = shift;
- $self->{name} = shift if @_;
- return $self->{name};
- }
-
- # read-only accessor method for "birthday" attribute
- sub birthday {
- my $self = shift;
- die "can't reset birthday" if @_; # XXX: croak() is better
- return $self->{birthday};
- }
-
- # accessor method for "stars" attribute
- sub stars {
- my $self = shift;
- $self->{stars} = shift if @_;
- return $self->{stars};
- }
-
- # oh my - one of our stars just went out!
- sub supernova {
- my $self = shift;
- my $count = $self->stars();
- $self->stars($count - 1) if $count > 0;
- }
-
- # constructor/initializer method - fix by reboot
- sub bigbang {
- my $self = shift;
- %$self = (
- name => "the world according to tchrist",
- birthday => time(),
- stars => 0,
- );
- return $self; # yes, it's probably a class. SURPRISE!
- }
-
- # After the class is compiled, but before any use or require
- # returns, we start off the universe with a bang.
- __PACKAGE__ -> bigbang();
-
-Hold on, that doesn't look like anything special. Those attribute
-accessors look no different than they would if this were a regular class
-instead of a monadic one. The crux of the matter is there's nothing
-that says that $self must hold a reference to a blessed object. It merely
-has to be something you can invoke methods on. Here the package name
-itself, Cosmos, works as an object. Look at the &supernova method. Is that
-a class method or an object method? The answer is that static analysis
-cannot reveal the answer. Perl doesn't care, and neither should you.
-In the three attribute methods, C<%$self> is really accessing the %Cosmos
-package variable.
-
-If like Stephen Hawking, you posit the existence of multiple, sequential,
-and unrelated universes, then you can invoke the &bigbang method yourself
-at any time to start everything all over again. You might think of
-&bigbang as more of an initializer than a constructor, since the function
-doesn't allocate new memory; it only initializes what's already there.
-But like any other constructor, it does return a scalar value to use
-for later method invocations.
-
-Imagine that some day in the future, you decide that one universe just
-isn't enough. You could write a new class from scratch, but you already
-have an existing class that does what you want--except that it's monadic,
-and you want more than just one cosmos.
-
-That's what code reuse via subclassing is all about. Look how short
-the new code is:
-
- package Multiverse;
- use Cosmos;
- @ISA = qw(Cosmos);
-
- sub new {
- my $protoverse = shift;
- my $class = ref($protoverse) || $protoverse;
- my $self = {};
- return bless($self, $class)->bigbang();
- }
- 1;
-
-Because we were careful to be good little creators when we designed our
-Cosmos class, we can now reuse it without touching a single line of code
-when it comes time to write our Multiverse class. The same code that
-worked when invoked as a class method continues to work perfectly well
-when invoked against separate instances of a derived class.
-
-The astonishing thing about the Cosmos class above is that the value
-returned by the &bigbang "constructor" is not a reference to a blessed
-object at all. It's just the class's own name. A class name is, for
-virtually all intents and purposes, a perfectly acceptable object.
-It has state, behavior, and identity, the three crucial components
-of an object system. It even manifests inheritance, polymorphism,
-and encapsulation. And what more can you ask of an object?
-
-To understand object orientation in Perl, it's important to recognize the
-unification of what other programming languages might think of as class
-methods and object methods into just plain methods. "Class methods"
-and "object methods" are distinct only in the compartmentalizing mind
-of the Perl programmer, not in the Perl language itself.
-
-Along those same lines, a constructor is nothing special either, which
-is one reason why Perl has no pre-ordained name for them. "Constructor"
-is just an informal term loosely used to describe a method that returns
-a scalar value that you can make further method calls against. So long
-as it's either a class name or an object reference, that's good enough.
-It doesn't even have to be a reference to a brand new object.
-
-You can have as many--or as few--constructors as you want, and you can
-name them whatever you care to. Blindly and obediently using new()
-for each and every constructor you ever write is to speak Perl with
-such a severe C++ accent that you do a disservice to both languages.
-There's no reason to insist that each class have but one constructor,
-or that a constructor be named new(), or that a constructor be
-used solely as a class method and not an object method.
-
-The next section shows how useful it can be to further distance ourselves
-from any formal distinction between class method calls and object method
-calls, both in constructors and in accessor methods.
-
-=head2 Translucent Attributes
-
-A package's eponymous hash can be used for more than just containing
-per-class, global state data. It can also serve as a sort of template
-containing default settings for object attributes. These default
-settings can then be used in constructors for initialization of a
-particular object. The class's eponymous hash can also be used to
-implement I<translucent attributes>. A translucent attribute is one
-that has a class-wide default. Each object can set its own value for the
-attribute, in which case C<< $object->attribute() >> returns that value.
-But if no value has been set, then C<< $object->attribute() >> returns
-the class-wide default.
-
-We'll apply something of a copy-on-write approach to these translucent
-attributes. If you're just fetching values from them, you get
-translucency. But if you store a new value to them, that new value is
-set on the current object. On the other hand, if you use the class as
-an object and store the attribute value directly on the class, then the
-meta-object's value changes, and later fetch operations on objects with
-uninitialized values for those attributes will retrieve the meta-object's
-new values. Objects with their own initialized values, however, won't
-see any change.
-
-Let's look at some concrete examples of using these properties before we
-show how to implement them. Suppose that a class named Some_Class
-had a translucent data attribute called "color". First you set the color
-in the meta-object, then you create three objects using a constructor
-that happens to be named &spawn.
-
- use Vermin;
- Vermin->color("vermilion");
-
- $ob1 = Vermin->spawn(); # so that's where Jedi come from
- $ob2 = Vermin->spawn();
- $ob3 = Vermin->spawn();
-
- print $obj3->color(); # prints "vermilion"
-
-Each of these objects' colors is now "vermilion", because that's the
-meta-object's value for that attribute, and these objects do not have
-individual color values set.
-
-Changing the attribute on one object has no effect on other objects
-previously created.
-
- $ob3->color("chartreuse");
- print $ob3->color(); # prints "chartreuse"
- print $ob1->color(); # prints "vermilion", translucently
-
-If you now use $ob3 to spawn off another object, the new object will
-take the color its parent held, which now happens to be "chartreuse".
-That's because the constructor uses the invoking object as its template
-for initializing attributes. When that invoking object is the
-class name, the object used as a template is the eponymous meta-object.
-When the invoking object is a reference to an instantiated object, the
-&spawn constructor uses that existing object as a template.
-
- $ob4 = $ob3->spawn(); # $ob3 now template, not %Vermin
- print $ob4->color(); # prints "chartreuse"
-
-Any actual values set on the template object will be copied to the
-new object. But attributes undefined in the template object, being
-translucent, will remain undefined and consequently translucent in the
-new one as well.
-
-Now let's change the color attribute on the entire class:
-
- Vermin->color("azure");
- print $ob1->color(); # prints "azure"
- print $ob2->color(); # prints "azure"
- print $ob3->color(); # prints "chartreuse"
- print $ob4->color(); # prints "chartreuse"
-
-That color change took effect only in the first pair of objects, which
-were still translucently accessing the meta-object's values. The second
-pair had per-object initialized colors, and so didn't change.
-
-One important question remains. Changes to the meta-object are reflected
-in translucent attributes in the entire class, but what about
-changes to discrete objects? If you change the color of $ob3, does the
-value of $ob4 see that change? Or vice-versa. If you change the color
-of $ob4, does then the value of $ob3 shift?
-
- $ob3->color("amethyst");
- print $ob3->color(); # prints "amethyst"
- print $ob4->color(); # hmm: "chartreuse" or "amethyst"?
-
-While one could argue that in certain rare cases it should, let's not
-do that. Good taste aside, we want the answer to the question posed in
-the comment above to be "chartreuse", not "amethyst". So we'll treat
-these attributes similar to the way process attributes like environment
-variables, user and group IDs, or the current working directory are
-treated across a fork(). You can change only yourself, but you will see
-those changes reflected in your unspawned children. Changes to one object
-will propagate neither up to the parent nor down to any existing child objects.
-Those objects made later, however, will see the changes.
-
-If you have an object with an actual attribute value, and you want to
-make that object's attribute value translucent again, what do you do?
-Let's design the class so that when you invoke an accessor method with
-C<undef> as its argument, that attribute returns to translucency.
-
- $ob4->color(undef); # back to "azure"
-
-Here's a complete implementation of Vermin as described above.
-
- package Vermin;
-
- # here's the class meta-object, eponymously named.
- # it holds all class attributes, and also all instance attributes
- # so the latter can be used for both initialization
- # and translucency.
-
- our %Vermin = ( # our() is new to perl5.6
- PopCount => 0, # capital for class attributes
- color => "beige", # small for instance attributes
- );
-
- # constructor method
- # invoked as class method or object method
- sub spawn {
- my $obclass = shift;
- my $class = ref($obclass) || $obclass;
- my $self = {};
- bless($self, $class);
- $class->{PopCount}++;
- # init fields from invoking object, or omit if
- # invoking object is the class to provide translucency
- %$self = %$obclass if ref $obclass;
- return $self;
- }
-
- # translucent accessor for "color" attribute
- # invoked as class method or object method
- sub color {
- my $self = shift;
- my $class = ref($self) || $self;
-
- # handle class invocation
- unless (ref $self) {
- $class->{color} = shift if @_;
- return $class->{color}
- }
-
- # handle object invocation
- $self->{color} = shift if @_;
- if (defined $self->{color}) { # not exists!
- return $self->{color};
- } else {
- return $class->{color};
- }
- }
-
- # accessor for "PopCount" class attribute
- # invoked as class method or object method
- # but uses object solely to locate meta-object
- sub population {
- my $obclass = shift;
- my $class = ref($obclass) || $obclass;
- return $class->{PopCount};
- }
-
- # instance destructor
- # invoked only as object method
- sub DESTROY {
- my $self = shift;
- my $class = ref $self;
- $class->{PopCount}--;
- }
-
-Here are a couple of helper methods that might be convenient. They aren't
-accessor methods at all. They're used to detect accessibility of data
-attributes. The &is_translucent method determines whether a particular
-object attribute is coming from the meta-object. The &has_attribute
-method detects whether a class implements a particular property at all.
-It could also be used to distinguish undefined properties from non-existent
-ones.
-
- # detect whether an object attribute is translucent
- # (typically?) invoked only as object method
- sub is_translucent {
- my($self, $attr) = @_;
- return !defined $self->{$attr};
- }
-
- # test for presence of attribute in class
- # invoked as class method or object method
- sub has_attribute {
- my($self, $attr) = @_;
- my $class = ref($self) || $self;
- return exists $class->{$attr};
- }
-
-If you prefer to install your accessors more generically, you can make
-use of the upper-case versus lower-case convention to register into the
-package appropriate methods cloned from generic closures.
-
- for my $datum (keys %{ +__PACKAGE__ }) {
- *$datum = ($datum =~ /^[A-Z]/)
- ? sub { # install class accessor
- my $obclass = shift;
- my $class = ref($obclass) || $obclass;
- return $class->{$datum};
- }
- : sub { # install translucent accessor
- my $self = shift;
- my $class = ref($self) || $self;
- unless (ref $self) {
- $class->{$datum} = shift if @_;
- return $class->{$datum}
- }
- $self->{$datum} = shift if @_;
- return defined $self->{$datum}
- ? $self -> {$datum}
- : $class -> {$datum}
- }
- }
-
-Translations of this closure-based approach into C++, Java, and Python
-have been left as exercises for the reader. Be sure to send us mail as
-soon as you're done.
-
-=head1 Class Data as Lexical Variables
-
-=head2 Privacy and Responsibility
-
-Unlike conventions used by some Perl programmers, in the previous
-examples, we didn't prefix the package variables used for class attributes
-with an underscore, nor did we do so for the names of the hash keys used
-for instance attributes. You don't need little markers on data names to
-suggest nominal privacy on attribute variables or hash keys, because these
-are B<already> notionally private! Outsiders have no business whatsoever
-playing with anything within a class save through the mediated access of
-its documented interface; in other words, through method invocations.
-And not even through just any method, either. Methods that begin with
-an underscore are traditionally considered off-limits outside the class.
-If outsiders skip the documented method interface to poke around the
-internals of your class and end up breaking something, that's not your
-fault--it's theirs.
-
-Perl believes in individual responsibility rather than mandated control.
-Perl respects you enough to let you choose your own preferred level of
-pain, or of pleasure. Perl believes that you are creative, intelligent,
-and capable of making your own decisions--and fully expects you to
-take complete responsibility for your own actions. In a perfect world,
-these admonitions alone would suffice, and everyone would be intelligent,
-responsible, happy, and creative. And careful. One probably shouldn't
-forget careful, and that's a good bit harder to expect. Even Einstein
-would take wrong turns by accident and end up lost in the wrong part
-of town.
-
-Some folks get the heebie-jeebies when they see package variables
-hanging out there for anyone to reach over and alter them. Some folks
-live in constant fear that someone somewhere might do something wicked.
-The solution to that problem is simply to fire the wicked, of course.
-But unfortunately, it's not as simple as all that. These cautious
-types are also afraid that they or others will do something not so
-much wicked as careless, whether by accident or out of desperation.
-If we fire everyone who ever gets careless, pretty soon there won't be
-anybody left to get any work done.
-
-Whether it's needless paranoia or sensible caution, this uneasiness can
-be a problem for some people. We can take the edge off their discomfort
-by providing the option of storing class attributes as lexical variables
-instead of as package variables. The my() operator is the source of
-all privacy in Perl, and it is a powerful form of privacy indeed.
-
-It is widely perceived, and indeed has often been written, that Perl
-provides no data hiding, that it affords the class designer no privacy
-nor isolation, merely a rag-tag assortment of weak and unenforceable
-social conventions instead. This perception is demonstrably false and
-easily disproven. In the next section, we show how to implement forms
-of privacy that are far stronger than those provided in nearly any
-other object-oriented language.
-
-=head2 File-Scoped Lexicals
-
-A lexical variable is visible only through the end of its static scope.
-That means that the only code able to access that variable is code
-residing textually below the my() operator through the end of its block
-if it has one, or through the end of the current file if it doesn't.
-
-Starting again with our simplest example given at the start of this
-document, we replace our() variables with my() versions.
-
- package Some_Class;
- my($CData1, $CData2); # file scope, not in any package
- sub CData1 {
- shift; # XXX: ignore calling class/object
- $CData1 = shift if @_;
- return $CData1;
- }
- sub CData2 {
- shift; # XXX: ignore calling class/object
- $CData2 = shift if @_;
- return $CData2;
- }
-
-So much for that old $Some_Class::CData1 package variable and its brethren!
-Those are gone now, replaced with lexicals. No one outside the
-scope can reach in and alter the class state without resorting to the
-documented interface. Not even subclasses or superclasses of
-this one have unmediated access to $CData1. They have to invoke the &CData1
-method against Some_Class or an instance thereof, just like anybody else.
-
-To be scrupulously honest, that last statement assumes you haven't packed
-several classes together into the same file scope, nor strewn your class
-implementation across several different files. Accessibility of those
-variables is based uniquely on the static file scope. It has nothing to
-do with the package. That means that code in a different file but
-the same package (class) could not access those variables, yet code in the
-same file but a different package (class) could. There are sound reasons
-why we usually suggest a one-to-one mapping between files and packages
-and modules and classes. You don't have to stick to this suggestion if
-you really know what you're doing, but you're apt to confuse yourself
-otherwise, especially at first.
-
-If you'd like to aggregate your class attributes into one lexically scoped,
-composite structure, you're perfectly free to do so.
-
- package Some_Class;
- my %ClassData = (
- CData1 => "",
- CData2 => "",
- );
- sub CData1 {
- shift; # XXX: ignore calling class/object
- $ClassData{CData1} = shift if @_;
- return $ClassData{CData1};
- }
- sub CData2 {
- shift; # XXX: ignore calling class/object
- $ClassData{CData2} = shift if @_;
- return $ClassData{CData2};
- }
-
-To make this more scalable as other class attributes are added, we can
-again register closures into the package symbol table to create accessor
-methods for them.
-
- package Some_Class;
- my %ClassData = (
- CData1 => "",
- CData2 => "",
- );
- for my $datum (keys %ClassData) {
- no strict "refs";
- *$datum = sub {
- shift; # XXX: ignore calling class/object
- $ClassData{$datum} = shift if @_;
- return $ClassData{$datum};
- };
- }
-
-Requiring even your own class to use accessor methods like anybody else is
-probably a good thing. But demanding and expecting that everyone else,
-be they subclass or superclass, friend or foe, will all come to your
-object through mediation is more than just a good idea. It's absolutely
-critical to the model. Let there be in your mind no such thing as
-"public" data, nor even "protected" data, which is a seductive but
-ultimately destructive notion. Both will come back to bite at you.
-That's because as soon as you take that first step out of the solid
-position in which all state is considered completely private, save from the
-perspective of its own accessor methods, you have violated the envelope.
-And, having pierced that encapsulating envelope, you shall doubtless
-someday pay the price when future changes in the implementation break
-unrelated code. Considering that avoiding this infelicitous outcome was
-precisely why you consented to suffer the slings and arrows of obsequious
-abstraction by turning to object orientation in the first place, such
-breakage seems unfortunate in the extreme.
-
-=head2 More Inheritance Concerns
-
-Suppose that Some_Class were used as a base class from which to derive
-Another_Class. If you invoke a &CData method on the derived class or
-on an object of that class, what do you get? Would the derived class
-have its own state, or would it piggyback on its base class's versions
-of the class attributes?
-
-The answer is that under the scheme outlined above, the derived class
-would B<not> have its own state data. As before, whether you consider
-this a good thing or a bad one depends on the semantics of the classes
-involved.
-
-The cleanest, sanest, simplest way to address per-class state in a
-lexical is for the derived class to override its base class's version
-of the method that accesses the class attributes. Since the actual method
-called is the one in the object's derived class if this exists, you
-automatically get per-class state this way. Any urge to provide an
-unadvertised method to sneak out a reference to the %ClassData hash
-should be strenuously resisted.
-
-As with any other overridden method, the implementation in the
-derived class always has the option of invoking its base class's
-version of the method in addition to its own. Here's an example:
-
- package Another_Class;
- @ISA = qw(Some_Class);
-
- my %ClassData = (
- CData1 => "",
- );
-
- sub CData1 {
- my($self, $newvalue) = @_;
- if (@_ > 1) {
- # set locally first
- $ClassData{CData1} = $newvalue;
-
- # then pass the buck up to the first
- # overridden version, if there is one
- if ($self->can("SUPER::CData1")) {
- $self->SUPER::CData1($newvalue);
- }
- }
- return $ClassData{CData1};
- }
-
-Those dabbling in multiple inheritance might be concerned
-about there being more than one override.
-
- for my $parent (@ISA) {
- my $methname = $parent . "::CData1";
- if ($self->can($methname)) {
- $self->$methname($newvalue);
- }
- }
-
-Because the &UNIVERSAL::can method returns a reference
-to the function directly, you can use this directly
-for a significant performance improvement:
-
- for my $parent (@ISA) {
- if (my $coderef = $self->can($parent . "::CData1")) {
- $self->$coderef($newvalue);
- }
- }
-
-If you override C<UNIVERSAL::can> in your own classes, be sure to return the
-reference appropriately.
-
-=head2 Locking the Door and Throwing Away the Key
-
-As currently implemented, any code within the same scope as the
-file-scoped lexical %ClassData can alter that hash directly. Is that
-ok? Is it acceptable or even desirable to allow other parts of the
-implementation of this class to access class attributes directly?
-
-That depends on how careful you want to be. Think back to the Cosmos
-class. If the &supernova method had directly altered $Cosmos::Stars or
-C<$Cosmos::Cosmos{stars}>, then we wouldn't have been able to reuse the
-class when it came to inventing a Multiverse. So letting even the class
-itself access its own class attributes without the mediating intervention of
-properly designed accessor methods is probably not a good idea after all.
-
-Restricting access to class attributes from the class itself is usually
-not enforceable even in strongly object-oriented languages. But in Perl,
-you can.
-
-Here's one way:
-
- package Some_Class;
-
- { # scope for hiding $CData1
- my $CData1;
- sub CData1 {
- shift; # XXX: unused
- $CData1 = shift if @_;
- return $CData1;
- }
- }
-
- { # scope for hiding $CData2
- my $CData2;
- sub CData2 {
- shift; # XXX: unused
- $CData2 = shift if @_;
- return $CData2;
- }
- }
-
-No one--absolutely no one--is allowed to read or write the class
-attributes without the mediation of the managing accessor method, since
-only that method has access to the lexical variable it's managing.
-This use of mediated access to class attributes is a form of privacy far
-stronger than most OO languages provide.
-
-The repetition of code used to create per-datum accessor methods chafes
-at our Laziness, so we'll again use closures to create similar
-methods.
-
- package Some_Class;
-
- { # scope for ultra-private meta-object for class attributes
- my %ClassData = (
- CData1 => "",
- CData2 => "",
- );
-
- for my $datum (keys %ClassData ) {
- no strict "refs";
- *$datum = sub {
- use strict "refs";
- my ($self, $newvalue) = @_;
- $ClassData{$datum} = $newvalue if @_ > 1;
- return $ClassData{$datum};
- }
- }
-
- }
-
-The closure above can be modified to take inheritance into account using
-the &UNIVERSAL::can method and SUPER as shown previously.
-
-=head2 Translucency Revisited
-
-The Vermin class demonstrates translucency using a package variable,
-eponymously named %Vermin, as its meta-object. If you prefer to
-use absolutely no package variables beyond those necessary to appease
-inheritance or possibly the Exporter, this strategy is closed to you.
-That's too bad, because translucent attributes are an appealing
-technique, so it would be valuable to devise an implementation using
-only lexicals.
-
-There's a second reason why you might wish to avoid the eponymous
-package hash. If you use class names with double-colons in them, you
-would end up poking around somewhere you might not have meant to poke.
-
- package Vermin;
- $class = "Vermin";
- $class->{PopCount}++;
- # accesses $Vermin::Vermin{PopCount}
-
- package Vermin::Noxious;
- $class = "Vermin::Noxious";
- $class->{PopCount}++;
- # accesses $Vermin::Noxious{PopCount}
-
-In the first case, because the class name had no double-colons, we got
-the hash in the current package. But in the second case, instead of
-getting some hash in the current package, we got the hash %Noxious in
-the Vermin package. (The noxious vermin just invaded another package and
-sprayed their data around it. :-) Perl doesn't support relative packages
-in its naming conventions, so any double-colons trigger a fully-qualified
-lookup instead of just looking in the current package.
-
-In practice, it is unlikely that the Vermin class had an existing
-package variable named %Noxious that you just blew away. If you're
-still mistrustful, you could always stake out your own territory
-where you know the rules, such as using Eponymous::Vermin::Noxious or
-Hieronymus::Vermin::Boschious or Leave_Me_Alone::Vermin::Noxious as class
-names instead. Sure, it's in theory possible that someone else has
-a class named Eponymous::Vermin with its own %Noxious hash, but this
-kind of thing is always true. There's no arbiter of package names.
-It's always the case that globals like @Cwd::ISA would collide if more
-than one class uses the same Cwd package.
-
-If this still leaves you with an uncomfortable twinge of paranoia,
-we have another solution for you. There's nothing that says that you
-have to have a package variable to hold a class meta-object, either for
-monadic classes or for translucent attributes. Just code up the methods
-so that they access a lexical instead.
-
-Here's another implementation of the Vermin class with semantics identical
-to those given previously, but this time using no package variables.
-
- package Vermin;
-
-
- # Here's the class meta-object, eponymously named.
- # It holds all class data, and also all instance data
- # so the latter can be used for both initialization
- # and translucency. it's a template.
- my %ClassData = (
- PopCount => 0, # capital for class attributes
- color => "beige", # small for instance attributes
- );
-
- # constructor method
- # invoked as class method or object method
- sub spawn {
- my $obclass = shift;
- my $class = ref($obclass) || $obclass;
- my $self = {};
- bless($self, $class);
- $ClassData{PopCount}++;
- # init fields from invoking object, or omit if
- # invoking object is the class to provide translucency
- %$self = %$obclass if ref $obclass;
- return $self;
- }
-
- # translucent accessor for "color" attribute
- # invoked as class method or object method
- sub color {
- my $self = shift;
-
- # handle class invocation
- unless (ref $self) {
- $ClassData{color} = shift if @_;
- return $ClassData{color}
- }
-
- # handle object invocation
- $self->{color} = shift if @_;
- if (defined $self->{color}) { # not exists!
- return $self->{color};
- } else {
- return $ClassData{color};
- }
- }
-
- # class attribute accessor for "PopCount" attribute
- # invoked as class method or object method
- sub population {
- return $ClassData{PopCount};
- }
-
- # instance destructor; invoked only as object method
- sub DESTROY {
- $ClassData{PopCount}--;
- }
-
- # detect whether an object attribute is translucent
- # (typically?) invoked only as object method
- sub is_translucent {
- my($self, $attr) = @_;
- $self = \%ClassData if !ref $self;
- return !defined $self->{$attr};
- }
-
- # test for presence of attribute in class
- # invoked as class method or object method
- sub has_attribute {
- my($self, $attr) = @_;
- return exists $ClassData{$attr};
- }
-
-=head1 NOTES
-
-Inheritance is a powerful but subtle device, best used only after careful
-forethought and design. Aggregation instead of inheritance is often a
-better approach.
-
-You can't use file-scoped lexicals in conjunction with the SelfLoader
-or the AutoLoader, because they alter the lexical scope in which the
-module's methods wind up getting compiled.
-
-The usual mealy-mouthed package-munging doubtless applies to setting
-up names of object attributes. For example, C<< $self->{ObData1} >>
-should probably be C<< $self->{ __PACKAGE__ . "_ObData1" } >>, but that
-would just confuse the examples.
-
-=head1 SEE ALSO
-
-L<perltoot>, L<perlobj>, L<perlmod>, and L<perlbot>.
-
-The Tie::SecureHash and Class::Data::Inheritable modules from CPAN are
-worth checking out.
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1999 Tom Christiansen.
-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.
-
-=head1 ACKNOWLEDGEMENTS
-
-Russ Allbery, Jon Orwant, Randy Ray, Larry Rosler, Nat Torkington,
-and Stephen Warren all contributed suggestions and corrections to this
-piece. Thanks especially to Damian Conway for his ideas and feedback,
-and without whose indirect prodding I might never have taken the time
-to show others how much Perl has to offer in the way of objects once
-you start thinking outside the tiny little box that today's "popular"
-object-oriented languages enforce.
-
-=head1 HISTORY
+For information on OO programming with Perl, please see L<perlootut>
+and L<perlobj>.
-Last edit: Sun Feb 4 20:50:28 EST 2001
+=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perltoot.pod b/Master/tlpkg/tlperl/lib/pods/perltoot.pod
index 0d8648bdd55..c89629036c3 100644
--- a/Master/tlpkg/tlperl/lib/pods/perltoot.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perltoot.pod
@@ -1,1836 +1,12 @@
+=encoding utf8
+
=head1 NAME
-perltoot - Tom's object-oriented tutorial for perl
+perltoot - This document has been deleted
=head1 DESCRIPTION
-Object-oriented programming is a big seller these days. Some managers
-would rather have objects than sliced bread. Why is that? What's so
-special about an object? Just what I<is> an object anyway?
-
-An object is nothing but a way of tucking away complex behaviours into
-a neat little easy-to-use bundle. (This is what professors call
-abstraction.) Smart people who have nothing to do but sit around for
-weeks on end figuring out really hard problems make these nifty
-objects that even regular people can use. (This is what professors call
-software reuse.) Users (well, programmers) can play with this little
-bundle all they want, but they aren't to open it up and mess with the
-insides. Just like an expensive piece of hardware, the contract says
-that you void the warranty if you muck with the cover. So don't do that.
-
-The heart of objects is the class, a protected little private namespace
-full of data and functions. A class is a set of related routines that
-addresses some problem area. You can think of it as a user-defined type.
-The Perl package mechanism, also used for more traditional modules,
-is used for class modules as well. Objects "live" in a class, meaning
-that they belong to some package.
-
-More often than not, the class provides the user with little bundles.
-These bundles are objects. They know whose class they belong to,
-and how to behave. Users ask the class to do something, like "give
-me an object." Or they can ask one of these objects to do something.
-Asking a class to do something for you is calling a I<class method>.
-Asking an object to do something for you is calling an I<object method>.
-Asking either a class (usually) or an object (sometimes) to give you
-back an object is calling a I<constructor>, which is just a
-kind of method.
-
-That's all well and good, but how is an object different from any other
-Perl data type? Just what is an object I<really>; that is, what's its
-fundamental type? The answer to the first question is easy. An object
-is different from any other data type in Perl in one and only one way:
-you may dereference it using not merely string or numeric subscripts
-as with simple arrays and hashes, but with named subroutine calls.
-In a word, with I<methods>.
-
-The answer to the second question is that it's a reference, and not just
-any reference, mind you, but one whose referent has been I<bless>()ed
-into a particular class (read: package). What kind of reference? Well,
-the answer to that one is a bit less concrete. That's because in Perl
-the designer of the class can employ any sort of reference they'd like
-as the underlying intrinsic data type. It could be a scalar, an array,
-or a hash reference. It could even be a code reference. But because
-of its inherent flexibility, an object is usually a hash reference.
-
-=head1 Creating a Class
-
-Before you create a class, you need to decide what to name it. That's
-because the class (package) name governs the name of the file used to
-house it, just as with regular modules. Then, that class (package)
-should provide one or more ways to generate objects. Finally, it should
-provide mechanisms to allow users of its objects to indirectly manipulate
-these objects from a distance.
-
-For example, let's make a simple Person class module. It gets stored in
-the file Person.pm. If it were called a Happy::Person class, it would
-be stored in the file Happy/Person.pm, and its package would become
-Happy::Person instead of just Person. (On a personal computer not
-running Unix or Plan 9, but something like Mac OS or VMS, the directory
-separator may be different, but the principle is the same.) Do not assume
-any formal relationship between modules based on their directory names.
-This is merely a grouping convenience, and has no effect on inheritance,
-variable accessibility, or anything else.
-
-For this module we aren't going to use Exporter, because we're
-a well-behaved class module that doesn't export anything at all.
-In order to manufacture objects, a class needs to have a I<constructor
-method>. A constructor gives you back not just a regular data type,
-but a brand-new object in that class. This magic is taken care of by
-the bless() function, whose sole purpose is to enable its referent to
-be used as an object. Remember: being an object really means nothing
-more than that methods may now be called against it.
-
-While a constructor may be named anything you'd like, most Perl
-programmers seem to like to call theirs new(). However, new() is not
-a reserved word, and a class is under no obligation to supply such.
-Some programmers have also been known to use a function with
-the same name as the class as the constructor.
-
-=head2 Object Representation
-
-By far the most common mechanism used in Perl to represent a Pascal
-record, a C struct, or a C++ class is an anonymous hash. That's because a
-hash has an arbitrary number of data fields, each conveniently accessed by
-an arbitrary name of your own devising.
-
-If you were just doing a simple
-struct-like emulation, you would likely go about it something like this:
-
- $rec = {
- name => "Jason",
- age => 23,
- peers => [ "Norbert", "Rhys", "Phineas"],
- };
-
-If you felt like it, you could add a bit of visual distinction
-by up-casing the hash keys:
-
- $rec = {
- NAME => "Jason",
- AGE => 23,
- PEERS => [ "Norbert", "Rhys", "Phineas"],
- };
-
-And so you could get at C<< $rec->{NAME} >> to find "Jason", or
-C<< @{ $rec->{PEERS} } >> to get at "Norbert", "Rhys", and "Phineas".
-(Have you ever noticed how many 23-year-old programmers seem to
-be named "Jason" these days? :-)
-
-This same model is often used for classes, although it is not considered
-the pinnacle of programming propriety for folks from outside the
-class to come waltzing into an object, brazenly accessing its data
-members directly. Generally speaking, an object should be considered
-an opaque cookie that you use I<object methods> to access. Visually,
-methods look like you're dereffing a reference using a function name
-instead of brackets or braces.
-
-=head2 Class Interface
-
-Some languages provide a formal syntactic interface to a class's methods,
-but Perl does not. It relies on you to read the documentation of each
-class. If you try to call an undefined method on an object, Perl won't
-complain, but the program will trigger an exception while it's running.
-Likewise, if you call a method expecting a prime number as its argument
-with a non-prime one instead, you can't expect the compiler to catch this.
-(Well, you can expect it all you like, but it's not going to happen.)
-
-Let's suppose you have a well-educated user of your Person class,
-someone who has read the docs that explain the prescribed
-interface. Here's how they might use the Person class:
-
- use Person;
-
- $him = Person->new();
- $him->name("Jason");
- $him->age(23);
- $him->peers( "Norbert", "Rhys", "Phineas" );
-
- push @All_Recs, $him; # save object in array for later
-
- printf "%s is %d years old.\n", $him->name, $him->age;
- print "His peers are: ", join(", ", $him->peers), "\n";
-
- printf "Last rec's name is %s\n", $All_Recs[-1]->name;
-
-As you can see, the user of the class doesn't know (or at least, has no
-business paying attention to the fact) that the object has one particular
-implementation or another. The interface to the class and its objects
-is exclusively via methods, and that's all the user of the class should
-ever play with.
-
-=head2 Constructors and Instance Methods
-
-Still, I<someone> has to know what's in the object. And that someone is
-the class. It implements methods that the programmer uses to access
-the object. Here's how to implement the Person class using the standard
-hash-ref-as-an-object idiom. We'll make a class method called new() to
-act as the constructor, and three object methods called name(), age(), and
-peers() to get at per-object data hidden away in our anonymous hash.
-
- package Person;
- use strict;
-
- ##################################################
- ## the object constructor (simplistic version) ##
- ##################################################
- sub new {
- my $self = {};
- $self->{NAME} = undef;
- $self->{AGE} = undef;
- $self->{PEERS} = [];
- bless($self); # but see below
- return $self;
- }
-
- ##############################################
- ## methods to access per-object data ##
- ## ##
- ## With args, they set the value. Without ##
- ## any, they only retrieve it/them. ##
- ##############################################
-
- sub name {
- my $self = shift;
- if (@_) { $self->{NAME} = shift }
- return $self->{NAME};
- }
-
- sub age {
- my $self = shift;
- if (@_) { $self->{AGE} = shift }
- return $self->{AGE};
- }
-
- sub peers {
- my $self = shift;
- if (@_) { @{ $self->{PEERS} } = @_ }
- return @{ $self->{PEERS} };
- }
-
- 1; # so the require or use succeeds
-
-We've created three methods to access an object's data, name(), age(),
-and peers(). These are all substantially similar. If called with an
-argument, they set the appropriate field; otherwise they return the
-value held by that field, meaning the value of that hash key.
-
-=head2 Planning for the Future: Better Constructors
-
-Even though at this point you may not even know what it means, someday
-you're going to worry about inheritance. (You can safely ignore this
-for now and worry about it later if you'd like.) To ensure that this
-all works out smoothly, you must use the double-argument form of bless().
-The second argument is the class into which the referent will be blessed.
-By not assuming our own class as the default second argument and instead
-using the class passed into us, we make our constructor inheritable.
-
- sub new {
- my $class = shift;
- my $self = {};
- $self->{NAME} = undef;
- $self->{AGE} = undef;
- $self->{PEERS} = [];
- bless ($self, $class);
- return $self;
- }
-
-That's about all there is for constructors. These methods bring objects
-to life, returning neat little opaque bundles to the user to be used in
-subsequent method calls.
-
-=head2 Destructors
-
-Every story has a beginning and an end. The beginning of the object's
-story is its constructor, explicitly called when the object comes into
-existence. But the ending of its story is the I<destructor>, a method
-implicitly called when an object leaves this life. Any per-object
-clean-up code is placed in the destructor, which must (in Perl) be called
-DESTROY.
-
-If constructors can have arbitrary names, then why not destructors?
-Because while a constructor is explicitly called, a destructor is not.
-Destruction happens automatically via Perl's garbage collection (GC)
-system, which is a quick but somewhat lazy reference-based GC system.
-To know what to call, Perl insists that the destructor be named DESTROY.
-Perl's notion of the right time to call a destructor is not well-defined
-currently, which is why your destructors should not rely on when they are
-called.
-
-Why is DESTROY in all caps? Perl on occasion uses purely uppercase
-function names as a convention to indicate that the function will
-be automatically called by Perl in some way. Others that are called
-implicitly include BEGIN, END, AUTOLOAD, plus all methods used by
-tied objects, described in L<perltie>.
-
-In really good object-oriented programming languages, the user doesn't
-care when the destructor is called. It just happens when it's supposed
-to. In low-level languages without any GC at all, there's no way to
-depend on this happening at the right time, so the programmer must
-explicitly call the destructor to clean up memory and state, crossing
-their fingers that it's the right time to do so. Unlike C++, an
-object destructor is nearly never needed in Perl, and even when it is,
-explicit invocation is uncalled for. In the case of our Person class,
-we don't need a destructor because Perl takes care of simple matters
-like memory deallocation.
-
-The only situation where Perl's reference-based GC won't work is
-when there's a circularity in the data structure, such as:
-
- $this->{WHATEVER} = $this;
-
-In that case, you must delete the self-reference manually if you expect
-your program not to leak memory. While admittedly error-prone, this is
-the best we can do right now. Nonetheless, rest assured that when your
-program is finished, its objects' destructors are all duly called.
-So you are guaranteed that an object I<eventually> gets properly
-destroyed, except in the unique case of a program that never exits.
-(If you're running Perl embedded in another application, this full GC
-pass happens a bit more frequently--whenever a thread shuts down.)
-
-=head2 Other Object Methods
-
-The methods we've talked about so far have either been constructors or
-else simple "data methods", interfaces to data stored in the object.
-These are a bit like an object's data members in the C++ world, except
-that strangers don't access them as data. Instead, they should only
-access the object's data indirectly via its methods. This is an
-important rule: in Perl, access to an object's data should I<only>
-be made through methods.
-
-Perl doesn't impose restrictions on who gets to use which methods.
-The public-versus-private distinction is by convention, not syntax.
-(Well, unless you use the Alias module described below in
-L<Data Members as Variables>.) Occasionally you'll see method names beginning or ending
-with an underscore or two. This marking is a convention indicating
-that the methods are private to that class alone and sometimes to its
-closest acquaintances, its immediate subclasses. But this distinction
-is not enforced by Perl itself. It's up to the programmer to behave.
-
-There's no reason to limit methods to those that simply access data.
-Methods can do anything at all. The key point is that they're invoked
-against an object or a class. Let's say we'd like object methods that
-do more than fetch or set one particular field.
-
- sub exclaim {
- my $self = shift;
- return sprintf "Hi, I'm %s, age %d, working with %s",
- $self->{NAME}, $self->{AGE}, join(", ", @{$self->{PEERS}});
- }
-
-Or maybe even one like this:
-
- sub happy_birthday {
- my $self = shift;
- return ++$self->{AGE};
- }
-
-Some might argue that one should go at these this way:
-
- sub exclaim {
- my $self = shift;
- return sprintf "Hi, I'm %s, age %d, working with %s",
- $self->name, $self->age, join(", ", $self->peers);
- }
-
- sub happy_birthday {
- my $self = shift;
- return $self->age( $self->age() + 1 );
- }
-
-But since these methods are all executing in the class itself, this
-may not be critical. There are tradeoffs to be made. Using direct
-hash access is faster (about an order of magnitude faster, in fact), and
-it's more convenient when you want to interpolate in strings. But using
-methods (the external interface) internally shields not just the users of
-your class but even you yourself from changes in your data representation.
-
-=head1 Class Data
-
-What about "class data", data items common to each object in a class?
-What would you want that for? Well, in your Person class, you might
-like to keep track of the total people alive. How do you implement that?
-
-You I<could> make it a global variable called $Person::Census. But about
-only reason you'd do that would be if you I<wanted> people to be able to
-get at your class data directly. They could just say $Person::Census
-and play around with it. Maybe this is ok in your design scheme.
-You might even conceivably want to make it an exported variable. To be
-exportable, a variable must be a (package) global. If this were a
-traditional module rather than an object-oriented one, you might do that.
-
-While this approach is expected in most traditional modules, it's
-generally considered rather poor form in most object modules. In an
-object module, you should set up a protective veil to separate interface
-from implementation. So provide a class method to access class data
-just as you provide object methods to access object data.
-
-So, you I<could> still keep $Census as a package global and rely upon
-others to honor the contract of the module and therefore not play around
-with its implementation. You could even be supertricky and make $Census a
-tied object as described in L<perltie>, thereby intercepting all accesses.
-
-But more often than not, you just want to make your class data a
-file-scoped lexical. To do so, simply put this at the top of the file:
-
- my $Census = 0;
-
-Even though the scope of a my() normally expires when the block in which
-it was declared is done (in this case the whole file being required or
-used), Perl's deep binding of lexical variables guarantees that the
-variable will not be deallocated, remaining accessible to functions
-declared within that scope. This doesn't work with global variables
-given temporary values via local(), though.
-
-Irrespective of whether you leave $Census a package global or make
-it instead a file-scoped lexical, you should make these
-changes to your Person::new() constructor:
-
- sub new {
- my $class = shift;
- my $self = {};
- $Census++;
- $self->{NAME} = undef;
- $self->{AGE} = undef;
- $self->{PEERS} = [];
- bless ($self, $class);
- return $self;
- }
-
- sub population {
- return $Census;
- }
-
-Now that we've done this, we certainly do need a destructor so that
-when Person is destroyed, the $Census goes down. Here's how
-this could be done:
-
- sub DESTROY { --$Census }
-
-Notice how there's no memory to deallocate in the destructor? That's
-something that Perl takes care of for you all by itself.
-
-Alternatively, you could use the Class::Data::Inheritable module from
-CPAN.
-
-
-=head2 Accessing Class Data
-
-It turns out that this is not really a good way to go about handling
-class data. A good scalable rule is that I<you must never reference class
-data directly from an object method>. Otherwise you aren't building a
-scalable, inheritable class. The object must be the rendezvous point
-for all operations, especially from an object method. The globals
-(class data) would in some sense be in the "wrong" package in your
-derived classes. In Perl, methods execute in the context of the class
-they were defined in, I<not> that of the object that triggered them.
-Therefore, namespace visibility of package globals in methods is unrelated
-to inheritance.
-
-Got that? Maybe not. Ok, let's say that some other class "borrowed"
-(well, inherited) the DESTROY method as it was defined above. When those
-objects are destroyed, the original $Census variable will be altered,
-not the one in the new class's package namespace. Perhaps this is what
-you want, but probably it isn't.
-
-Here's how to fix this. We'll store a reference to the data in the
-value accessed by the hash key "_CENSUS". Why the underscore? Well,
-mostly because an initial underscore already conveys strong feelings
-of magicalness to a C programmer. It's really just a mnemonic device
-to remind ourselves that this field is special and not to be used as
-a public data member in the same way that NAME, AGE, and PEERS are.
-(Because we've been developing this code under the strict pragma, prior
-to perl version 5.004 we'll have to quote the field name.)
-
- sub new {
- my $class = shift;
- my $self = {};
- $self->{NAME} = undef;
- $self->{AGE} = undef;
- $self->{PEERS} = [];
- # "private" data
- $self->{"_CENSUS"} = \$Census;
- bless ($self, $class);
- ++ ${ $self->{"_CENSUS"} };
- return $self;
- }
-
- sub population {
- my $self = shift;
- if (ref $self) {
- return ${ $self->{"_CENSUS"} };
- } else {
- return $Census;
- }
- }
-
- sub DESTROY {
- my $self = shift;
- -- ${ $self->{"_CENSUS"} };
- }
-
-=head2 Debugging Methods
-
-It's common for a class to have a debugging mechanism. For example,
-you might want to see when objects are created or destroyed. To do that,
-add a debugging variable as a file-scoped lexical. For this, we'll pull
-in the standard Carp module to emit our warnings and fatal messages.
-That way messages will come out with the caller's filename and
-line number instead of our own; if we wanted them to be from our own
-perspective, we'd just use die() and warn() directly instead of croak()
-and carp() respectively.
-
- use Carp;
- my $Debugging = 0;
-
-Now add a new class method to access the variable.
-
- sub debug {
- my $class = shift;
- if (ref $class) { confess "Class method called as object method" }
- unless (@_ == 1) { confess "usage: CLASSNAME->debug(level)" }
- $Debugging = shift;
- }
-
-Now fix up DESTROY to murmur a bit as the moribund object expires:
-
- sub DESTROY {
- my $self = shift;
- if ($Debugging) { carp "Destroying $self " . $self->name }
- -- ${ $self->{"_CENSUS"} };
- }
-
-One could conceivably make a per-object debug state. That
-way you could call both of these:
-
- Person->debug(1); # entire class
- $him->debug(1); # just this object
-
-To do so, we need our debugging method to be a "bimodal" one, one that
-works on both classes I<and> objects. Therefore, adjust the debug()
-and DESTROY methods as follows:
-
- sub debug {
- my $self = shift;
- confess "usage: thing->debug(level)" unless @_ == 1;
- my $level = shift;
- if (ref($self)) {
- $self->{"_DEBUG"} = $level; # just myself
- } else {
- $Debugging = $level; # whole class
- }
- }
-
- sub DESTROY {
- my $self = shift;
- if ($Debugging || $self->{"_DEBUG"}) {
- carp "Destroying $self " . $self->name;
- }
- -- ${ $self->{"_CENSUS"} };
- }
-
-What happens if a derived class (which we'll call Employee) inherits
-methods from this Person base class? Then C<< Employee->debug() >>, when called
-as a class method, manipulates $Person::Debugging not $Employee::Debugging.
-
-=head2 Class Destructors
-
-The object destructor handles the death of each distinct object. But sometimes
-you want a bit of cleanup when the entire class is shut down, which
-currently only happens when the program exits. To make such a
-I<class destructor>, create a function in that class's package named
-END. This works just like the END function in traditional modules,
-meaning that it gets called whenever your program exits unless it execs
-or dies of an uncaught signal. For example,
-
- sub END {
- if ($Debugging) {
- print "All persons are going away now.\n";
- }
- }
-
-When the program exits, all the class destructors (END functions) are
-be called in the opposite order that they were loaded in (LIFO order).
-
-=head2 Documenting the Interface
-
-And there you have it: we've just shown you the I<implementation> of this
-Person class. Its I<interface> would be its documentation. Usually this
-means putting it in pod ("plain old documentation") format right there
-in the same file. In our Person example, we would place the following
-docs anywhere in the Person.pm file. Even though it looks mostly like
-code, it's not. It's embedded documentation such as would be used by
-the pod2man, pod2html, or pod2text programs. The Perl compiler ignores
-pods entirely, just as the translators ignore code. Here's an example of
-some pods describing the informal interface:
-
- =head1 NAME
-
- Person - class to implement people
-
- =head1 SYNOPSIS
-
- use Person;
-
- #################
- # class methods #
- #################
- $ob = Person->new;
- $count = Person->population;
-
- #######################
- # object data methods #
- #######################
-
- ### get versions ###
- $who = $ob->name;
- $years = $ob->age;
- @pals = $ob->peers;
-
- ### set versions ###
- $ob->name("Jason");
- $ob->age(23);
- $ob->peers( "Norbert", "Rhys", "Phineas" );
-
- ########################
- # other object methods #
- ########################
-
- $phrase = $ob->exclaim;
- $ob->happy_birthday;
-
- =head1 DESCRIPTION
-
- The Person class implements dah dee dah dee dah....
-
-That's all there is to the matter of interface versus implementation.
-A programmer who opens up the module and plays around with all the private
-little shiny bits that were safely locked up behind the interface contract
-has voided the warranty, and you shouldn't worry about their fate.
-
-=head1 Aggregation
-
-Suppose you later want to change the class to implement better names.
-Perhaps you'd like to support both given names (called Christian names,
-irrespective of one's religion) and family names (called surnames), plus
-nicknames and titles. If users of your Person class have been properly
-accessing it through its documented interface, then you can easily change
-the underlying implementation. If they haven't, then they lose and
-it's their fault for breaking the contract and voiding their warranty.
-
-To do this, we'll make another class, this one called Fullname. What's
-the Fullname class look like? To answer that question, you have to
-first figure out how you want to use it. How about we use it this way:
-
- $him = Person->new();
- $him->fullname->title("St");
- $him->fullname->christian("Thomas");
- $him->fullname->surname("Aquinas");
- $him->fullname->nickname("Tommy");
- printf "His normal name is %s\n", $him->name;
- printf "But his real name is %s\n", $him->fullname->as_string;
-
-Ok. To do this, we'll change Person::new() so that it supports
-a full name field this way:
-
- sub new {
- my $class = shift;
- my $self = {};
- $self->{FULLNAME} = Fullname->new();
- $self->{AGE} = undef;
- $self->{PEERS} = [];
- $self->{"_CENSUS"} = \$Census;
- bless ($self, $class);
- ++ ${ $self->{"_CENSUS"} };
- return $self;
- }
-
- sub fullname {
- my $self = shift;
- return $self->{FULLNAME};
- }
-
-Then to support old code, define Person::name() this way:
-
- sub name {
- my $self = shift;
- return $self->{FULLNAME}->nickname(@_)
- || $self->{FULLNAME}->christian(@_);
- }
-
-Here's the Fullname class. We'll use the same technique
-of using a hash reference to hold data fields, and methods
-by the appropriate name to access them:
-
- package Fullname;
- use strict;
-
- sub new {
- my $class = shift;
- my $self = {
- TITLE => undef,
- CHRISTIAN => undef,
- SURNAME => undef,
- NICK => undef,
- };
- bless ($self, $class);
- return $self;
- }
-
- sub christian {
- my $self = shift;
- if (@_) { $self->{CHRISTIAN} = shift }
- return $self->{CHRISTIAN};
- }
-
- sub surname {
- my $self = shift;
- if (@_) { $self->{SURNAME} = shift }
- return $self->{SURNAME};
- }
-
- sub nickname {
- my $self = shift;
- if (@_) { $self->{NICK} = shift }
- return $self->{NICK};
- }
-
- sub title {
- my $self = shift;
- if (@_) { $self->{TITLE} = shift }
- return $self->{TITLE};
- }
-
- sub as_string {
- my $self = shift;
- my $name = join(" ", @$self{'CHRISTIAN', 'SURNAME'});
- if ($self->{TITLE}) {
- $name = $self->{TITLE} . " " . $name;
- }
- return $name;
- }
-
- 1;
-
-Finally, here's the test program:
-
- #!/usr/bin/perl -w
- use strict;
- use Person;
- sub END { show_census() }
-
- sub show_census () {
- printf "Current population: %d\n", Person->population;
- }
-
- Person->debug(1);
-
- show_census();
-
- my $him = Person->new();
-
- $him->fullname->christian("Thomas");
- $him->fullname->surname("Aquinas");
- $him->fullname->nickname("Tommy");
- $him->fullname->title("St");
- $him->age(1);
-
- printf "%s is really %s.\n", $him->name, $him->fullname->as_string;
- printf "%s's age: %d.\n", $him->name, $him->age;
- $him->happy_birthday;
- printf "%s's age: %d.\n", $him->name, $him->age;
-
- show_census();
-
-=head1 Inheritance
-
-Object-oriented programming systems all support some notion of
-inheritance. Inheritance means allowing one class to piggy-back on
-top of another one so you don't have to write the same code again and
-again. It's about software reuse, and therefore related to Laziness,
-the principal virtue of a programmer. (The import/export mechanisms in
-traditional modules are also a form of code reuse, but a simpler one than
-the true inheritance that you find in object modules.)
-
-Sometimes the syntax of inheritance is built into the core of the
-language, and sometimes it's not. Perl has no special syntax for
-specifying the class (or classes) to inherit from. Instead, it's all
-strictly in the semantics. Each package can have a variable called @ISA,
-which governs (method) inheritance. If you try to call a method on an
-object or class, and that method is not found in that object's package,
-Perl then looks to @ISA for other packages to go looking through in
-search of the missing method.
-
-Like the special per-package variables recognized by Exporter (such as
-@EXPORT, @EXPORT_OK, @EXPORT_FAIL, %EXPORT_TAGS, and $VERSION), the @ISA
-array I<must> be a package-scoped global and not a file-scoped lexical
-created via my(). Most classes have just one item in their @ISA array.
-In this case, we have what's called "single inheritance", or SI for short.
-
-Consider this class:
-
- package Employee;
- use Person;
- @ISA = ("Person");
- 1;
-
-Not a lot to it, eh? All it's doing so far is loading in another
-class and stating that this one will inherit methods from that
-other class if need be. We have given it none of its own methods.
-We rely upon an Employee to behave just like a Person.
-
-Setting up an empty class like this is called the "empty subclass test";
-that is, making a derived class that does nothing but inherit from a
-base class. If the original base class has been designed properly,
-then the new derived class can be used as a drop-in replacement for the
-old one. This means you should be able to write a program like this:
-
- use Employee;
- my $empl = Employee->new();
- $empl->name("Jason");
- $empl->age(23);
- printf "%s is age %d.\n", $empl->name, $empl->age;
-
-By proper design, we mean always using the two-argument form of bless(),
-avoiding direct access of global data, and not exporting anything. If you
-look back at the Person::new() function we defined above, we were careful
-to do that. There's a bit of package data used in the constructor,
-but the reference to this is stored on the object itself and all other
-methods access package data via that reference, so we should be ok.
-
-What do we mean by the Person::new() function? Isn't that actually
-a method? Well, in principle, yes. A method is just a function that
-expects as its first argument a class name (package) or object
-(blessed reference). Person::new() is the function that both the
-C<< Person->new() >> method and the C<< Employee->new() >> method end
-up calling. Understand that while a method call looks a lot like a
-function call, they aren't really quite the same, and if you treat them
-as the same, you'll very soon be left with nothing but broken programs.
-First, the actual underlying calling conventions are different: method
-calls get an extra argument. Second, function calls don't do inheritance,
-but methods do.
-
- Method Call Resulting Function Call
- ----------- ------------------------
- Person->new() Person::new("Person")
- Employee->new() Person::new("Employee")
-
-So don't use function calls when you mean to call a method.
-
-If an employee is just a Person, that's not all too very interesting.
-So let's add some other methods. We'll give our employee
-data fields to access their salary, their employee ID, and their
-start date.
-
-If you're getting a little tired of creating all these nearly identical
-methods just to get at the object's data, do not despair. Later,
-we'll describe several different convenience mechanisms for shortening
-this up. Meanwhile, here's the straight-forward way:
-
- sub salary {
- my $self = shift;
- if (@_) { $self->{SALARY} = shift }
- return $self->{SALARY};
- }
-
- sub id_number {
- my $self = shift;
- if (@_) { $self->{ID} = shift }
- return $self->{ID};
- }
-
- sub start_date {
- my $self = shift;
- if (@_) { $self->{START_DATE} = shift }
- return $self->{START_DATE};
- }
-
-=head2 Overridden Methods
-
-What happens when both a derived class and its base class have the same
-method defined? Well, then you get the derived class's version of that
-method. For example, let's say that we want the peers() method called on
-an employee to act a bit differently. Instead of just returning the list
-of peer names, let's return slightly different strings. So doing this:
-
- $empl->peers("Peter", "Paul", "Mary");
- printf "His peers are: %s\n", join(", ", $empl->peers);
-
-will produce:
-
- His peers are: PEON=PETER, PEON=PAUL, PEON=MARY
-
-To do this, merely add this definition into the Employee.pm file:
-
- sub peers {
- my $self = shift;
- if (@_) { @{ $self->{PEERS} } = @_ }
- return map { "PEON=\U$_" } @{ $self->{PEERS} };
- }
-
-There, we've just demonstrated the high-falutin' concept known in certain
-circles as I<polymorphism>. We've taken on the form and behaviour of
-an existing object, and then we've altered it to suit our own purposes.
-This is a form of Laziness. (Getting polymorphed is also what happens
-when the wizard decides you'd look better as a frog.)
-
-Every now and then you'll want to have a method call trigger both its
-derived class (also known as "subclass") version as well as its base class
-(also known as "superclass") version. In practice, constructors and
-destructors are likely to want to do this, and it probably also makes
-sense in the debug() method we showed previously.
-
-To do this, add this to Employee.pm:
-
- use Carp;
- my $Debugging = 0;
-
- sub debug {
- my $self = shift;
- confess "usage: thing->debug(level)" unless @_ == 1;
- my $level = shift;
- if (ref($self)) {
- $self->{"_DEBUG"} = $level;
- } else {
- $Debugging = $level; # whole class
- }
- Person::debug($self, $Debugging); # don't really do this
- }
-
-As you see, we turn around and call the Person package's debug() function.
-But this is far too fragile for good design. What if Person doesn't
-have a debug() function, but is inheriting I<its> debug() method
-from elsewhere? It would have been slightly better to say
-
- Person->debug($Debugging);
-
-But even that's got too much hard-coded. It's somewhat better to say
-
- $self->Person::debug($Debugging);
-
-Which is a funny way to say to start looking for a debug() method up
-in Person. This strategy is more often seen on overridden object methods
-than on overridden class methods.
-
-There is still something a bit off here. We've hard-coded our
-superclass's name. This in particular is bad if you change which classes
-you inherit from, or add others. Fortunately, the pseudoclass SUPER
-comes to the rescue here.
-
- $self->SUPER::debug($Debugging);
-
-This way it starts looking in my class's @ISA. This only makes sense
-from I<within> a method call, though. Don't try to access anything
-in SUPER:: from anywhere else, because it doesn't exist outside
-an overridden method call. Note that C<SUPER> refers to the superclass of
-the current package, I<not> to the superclass of C<$self>.
-
-Things are getting a bit complicated here. Have we done anything
-we shouldn't? As before, one way to test whether we're designing
-a decent class is via the empty subclass test. Since we already have
-an Employee class that we're trying to check, we'd better get a new
-empty subclass that can derive from Employee. Here's one:
-
- package Boss;
- use Employee; # :-)
- @ISA = qw(Employee);
-
-And here's the test program:
-
- #!/usr/bin/perl -w
- use strict;
- use Boss;
- Boss->debug(1);
-
- my $boss = Boss->new();
-
- $boss->fullname->title("Don");
- $boss->fullname->surname("Pichon Alvarez");
- $boss->fullname->christian("Federico Jesus");
- $boss->fullname->nickname("Fred");
-
- $boss->age(47);
- $boss->peers("Frank", "Felipe", "Faust");
-
- printf "%s is age %d.\n", $boss->fullname->as_string, $boss->age;
- printf "His peers are: %s\n", join(", ", $boss->peers);
-
-Running it, we see that we're still ok. If you'd like to dump out your
-object in a nice format, somewhat like the way the 'x' command works in
-the debugger, you could use the Data::Dumper module from CPAN this way:
-
- use Data::Dumper;
- print "Here's the boss:\n";
- print Dumper($boss);
-
-Which shows us something like this:
-
- Here's the boss:
- $VAR1 = bless( {
- _CENSUS => \1,
- FULLNAME => bless( {
- TITLE => 'Don',
- SURNAME => 'Pichon Alvarez',
- NICK => 'Fred',
- CHRISTIAN => 'Federico Jesus'
- }, 'Fullname' ),
- AGE => 47,
- PEERS => [
- 'Frank',
- 'Felipe',
- 'Faust'
- ]
- }, 'Boss' );
-
-Hm.... something's missing there. What about the salary, start date,
-and ID fields? Well, we never set them to anything, even undef, so they
-don't show up in the hash's keys. The Employee class has no new() method
-of its own, and the new() method in Person doesn't know about Employees.
-(Nor should it: proper OO design dictates that a subclass be allowed to
-know about its immediate superclass, but never vice-versa.) So let's
-fix up Employee::new() this way:
-
- sub new {
- my $class = shift;
- my $self = $class->SUPER::new();
- $self->{SALARY} = undef;
- $self->{ID} = undef;
- $self->{START_DATE} = undef;
- bless ($self, $class); # reconsecrate
- return $self;
- }
-
-Now if you dump out an Employee or Boss object, you'll find
-that new fields show up there now.
-
-=head2 Multiple Inheritance
-
-Ok, at the risk of confusing beginners and annoying OO gurus, it's
-time to confess that Perl's object system includes that controversial
-notion known as multiple inheritance, or MI for short. All this means
-is that rather than having just one parent class who in turn might
-itself have a parent class, etc., that you can directly inherit from
-two or more parents. It's true that some uses of MI can get you into
-trouble, although hopefully not quite so much trouble with Perl as with
-dubiously-OO languages like C++.
-
-The way it works is actually pretty simple: just put more than one package
-name in your @ISA array. When it comes time for Perl to go finding
-methods for your object, it looks at each of these packages in order.
-Well, kinda. It's actually a fully recursive, depth-first order by
-default (see L<mro> for alternate method resolution orders).
-Consider a bunch of @ISA arrays like this:
-
- @First::ISA = qw( Alpha );
- @Second::ISA = qw( Beta );
- @Third::ISA = qw( First Second );
-
-If you have an object of class Third:
-
- my $ob = Third->new();
- $ob->spin();
-
-How do we find a spin() method (or a new() method for that matter)?
-Because the search is depth-first, classes will be looked up
-in the following order: Third, First, Alpha, Second, and Beta.
-
-In practice, few class modules have been seen that actually
-make use of MI. One nearly always chooses simple containership of
-one class within another over MI. That's why our Person
-object I<contained> a Fullname object. That doesn't mean
-it I<was> one.
-
-However, there is one particular area where MI in Perl is rampant:
-borrowing another class's class methods. This is rather common,
-especially with some bundled "objectless" classes,
-like Exporter, DynaLoader, AutoLoader, and SelfLoader. These classes
-do not provide constructors; they exist only so you may inherit their
-class methods. (It's not entirely clear why inheritance was done
-here rather than traditional module importation.)
-
-For example, here is the POSIX module's @ISA:
-
- package POSIX;
- @ISA = qw(Exporter DynaLoader);
-
-The POSIX module isn't really an object module, but then,
-neither are Exporter or DynaLoader. They're just lending their
-classes' behaviours to POSIX.
-
-Why don't people use MI for object methods much? One reason is that
-it can have complicated side-effects. For one thing, your inheritance
-graph (no longer a tree) might converge back to the same base class.
-Although Perl guards against recursive inheritance, merely having parents
-who are related to each other via a common ancestor, incestuous though
-it sounds, is not forbidden. What if in our Third class shown above we
-wanted its new() method to also call both overridden constructors in its
-two parent classes? The SUPER notation would only find the first one.
-Also, what about if the Alpha and Beta classes both had a common ancestor,
-like Nought? If you kept climbing up the inheritance tree calling
-overridden methods, you'd end up calling Nought::new() twice,
-which might well be a bad idea.
-
-=head2 UNIVERSAL: The Root of All Objects
-
-Wouldn't it be convenient if all objects were rooted at some ultimate
-base class? That way you could give every object common methods without
-having to go and add it to each and every @ISA. Well, it turns out that
-you can. You don't see it, but Perl tacitly and irrevocably assumes
-that there's an extra element at the end of @ISA: the class UNIVERSAL.
-In version 5.003, there were no predefined methods there, but you could put
-whatever you felt like into it.
-
-However, as of version 5.004 (or some subversive releases, like 5.003_08),
-UNIVERSAL has some methods in it already. These are builtin to your Perl
-binary, so they don't take any extra time to load. Predefined methods
-include isa(), can(), and VERSION(). isa() tells you whether an object or
-class "is" another one without having to traverse the hierarchy yourself:
-
- $has_io = $fd->isa("IO::Handle");
- $itza_handle = IO::Socket->isa("IO::Handle");
-
-The can() method, called against that object or class, reports back
-whether its string argument is a callable method name in that class.
-In fact, it gives you back a function reference to that method:
-
- $his_print_method = $obj->can('as_string');
-
-Finally, the VERSION method checks whether the class (or the object's
-class) has a package global called $VERSION that's high enough, as in:
-
- Some_Module->VERSION(3.0);
- $his_vers = $ob->VERSION();
-
-However, we don't usually call VERSION ourselves. (Remember that an all
-uppercase function name is a Perl convention that indicates that the
-function will be automatically used by Perl in some way.) In this case,
-it happens when you say
-
- use Some_Module 3.0;
-
-If you wanted to add version checking to your Person class explained
-above, just add this to Person.pm:
-
- our $VERSION = '1.1';
-
-and then in Employee.pm you can say
-
- use Person 1.1;
-
-And it would make sure that you have at least that version number or
-higher available. This is not the same as loading in that exact version
-number. No mechanism currently exists for concurrent installation of
-multiple versions of a module. Lamentably.
-
-=head2 Deeper UNIVERSAL details
-
-It is also valid (though perhaps unwise in most cases) to put other
-packages' names in @UNIVERSAL::ISA. These packages will also be
-implicitly inherited by all classes, just as UNIVERSAL itself is.
-However, neither UNIVERSAL nor any of its parents from the @ISA tree
-are explicit base classes of all objects. To clarify, given the
-following:
-
- @UNIVERSAL::ISA = ('REALLYUNIVERSAL');
-
- package REALLYUNIVERSAL;
- sub special_method { return "123" }
-
- package Foo;
- sub normal_method { return "321" }
-
-Calling Foo->special_method() will return "123", but calling
-Foo->isa('REALLYUNIVERSAL') or Foo->isa('UNIVERSAL') will return
-false.
-
-If your class is using an alternate mro like C3 (see
-L<mro>), method resolution within UNIVERSAL / @UNIVERSAL::ISA will
-still occur in the default depth-first left-to-right manner,
-after the class's C3 mro is exhausted.
-
-All of the above is made more intuitive by realizing what really
-happens during method lookup, which is roughly like this
-ugly pseudo-code:
-
- get_mro(class) {
- # recurses down the @ISA's starting at class,
- # builds a single linear array of all
- # classes to search in the appropriate order.
- # The method resolution order (mro) to use
- # for the ordering is whichever mro "class"
- # has set on it (either default (depth first
- # l-to-r) or C3 ordering).
- # The first entry in the list is the class
- # itself.
- }
-
- find_method(class, methname) {
- foreach $class (get_mro(class)) {
- if($class->has_method(methname)) {
- return ref_to($class->$methname);
- }
- }
- foreach $class (get_mro(UNIVERSAL)) {
- if($class->has_method(methname)) {
- return ref_to($class->$methname);
- }
- }
- return undef;
- }
-
-However the code that implements UNIVERSAL::isa does not
-search in UNIVERSAL itself, only in the package's actual
-@ISA.
-
-=head1 Alternate Object Representations
-
-Nothing requires objects to be implemented as hash references. An object
-can be any sort of reference so long as its referent has been suitably
-blessed. That means scalar, array, and code references are also fair
-game.
-
-A scalar would work if the object has only one datum to hold. An array
-would work for most cases, but makes inheritance a bit dodgy because
-you have to invent new indices for the derived classes.
-
-=head2 Arrays as Objects
-
-If the user of your class honors the contract and sticks to the advertised
-interface, then you can change its underlying interface if you feel
-like it. Here's another implementation that conforms to the same
-interface specification. This time we'll use an array reference
-instead of a hash reference to represent the object.
-
- package Person;
- use strict;
-
- my($NAME, $AGE, $PEERS) = ( 0 .. 2 );
-
- ############################################
- ## the object constructor (array version) ##
- ############################################
- sub new {
- my $self = [];
- $self->[$NAME] = undef; # this is unnecessary
- $self->[$AGE] = undef; # as is this
- $self->[$PEERS] = []; # but this isn't, really
- bless($self);
- return $self;
- }
-
- sub name {
- my $self = shift;
- if (@_) { $self->[$NAME] = shift }
- return $self->[$NAME];
- }
-
- sub age {
- my $self = shift;
- if (@_) { $self->[$AGE] = shift }
- return $self->[$AGE];
- }
-
- sub peers {
- my $self = shift;
- if (@_) { @{ $self->[$PEERS] } = @_ }
- return @{ $self->[$PEERS] };
- }
-
- 1; # so the require or use succeeds
-
-You might guess that the array access would be a lot faster than the
-hash access, but they're actually comparable. The array is a I<little>
-bit faster, but not more than ten or fifteen percent, even when you
-replace the variables above like $AGE with literal numbers, like 1.
-A bigger difference between the two approaches can be found in memory use.
-A hash representation takes up more memory than an array representation
-because you have to allocate memory for the keys as well as for the values.
-However, it really isn't that bad, especially since as of version 5.004,
-memory is only allocated once for a given hash key, no matter how many
-hashes have that key. It's expected that sometime in the future, even
-these differences will fade into obscurity as more efficient underlying
-representations are devised.
-
-Still, the tiny edge in speed (and somewhat larger one in memory)
-is enough to make some programmers choose an array representation
-for simple classes. There's still a little problem with
-scalability, though, because later in life when you feel
-like creating subclasses, you'll find that hashes just work
-out better.
-
-=head2 Closures as Objects
-
-Using a code reference to represent an object offers some fascinating
-possibilities. We can create a new anonymous function (closure) who
-alone in all the world can see the object's data. This is because we
-put the data into an anonymous hash that's lexically visible only to
-the closure we create, bless, and return as the object. This object's
-methods turn around and call the closure as a regular subroutine call,
-passing it the field we want to affect. (Yes,
-the double-function call is slow, but if you wanted fast, you wouldn't
-be using objects at all, eh? :-)
-
-Use would be similar to before:
-
- use Person;
- $him = Person->new();
- $him->name("Jason");
- $him->age(23);
- $him->peers( [ "Norbert", "Rhys", "Phineas" ] );
- printf "%s is %d years old.\n", $him->name, $him->age;
- print "His peers are: ", join(", ", @{$him->peers}), "\n";
-
-but the implementation would be radically, perhaps even sublimely
-different:
-
- package Person;
-
- sub new {
- my $class = shift;
- my $self = {
- NAME => undef,
- AGE => undef,
- PEERS => [],
- };
- my $closure = sub {
- my $field = shift;
- if (@_) { $self->{$field} = shift }
- return $self->{$field};
- };
- bless($closure, $class);
- return $closure;
- }
-
- sub name { &{ $_[0] }("NAME", @_[ 1 .. $#_ ] ) }
- sub age { &{ $_[0] }("AGE", @_[ 1 .. $#_ ] ) }
- sub peers { &{ $_[0] }("PEERS", @_[ 1 .. $#_ ] ) }
-
- 1;
-
-Because this object is hidden behind a code reference, it's probably a bit
-mysterious to those whose background is more firmly rooted in standard
-procedural or object-based programming languages than in functional
-programming languages whence closures derive. The object
-created and returned by the new() method is itself not a data reference
-as we've seen before. It's an anonymous code reference that has within
-it access to a specific version (lexical binding and instantiation)
-of the object's data, which are stored in the private variable $self.
-Although this is the same function each time, it contains a different
-version of $self.
-
-When a method like C<$him-E<gt>name("Jason")> is called, its implicit
-zeroth argument is the invoking object--just as it is with all method
-calls. But in this case, it's our code reference (something like a
-function pointer in C++, but with deep binding of lexical variables).
-There's not a lot to be done with a code reference beyond calling it, so
-that's just what we do when we say C<&{$_[0]}>. This is just a regular
-function call, not a method call. The initial argument is the string
-"NAME", and any remaining arguments are whatever had been passed to the
-method itself.
-
-Once we're executing inside the closure that had been created in new(),
-the $self hash reference suddenly becomes visible. The closure grabs
-its first argument ("NAME" in this case because that's what the name()
-method passed it), and uses that string to subscript into the private
-hash hidden in its unique version of $self.
-
-Nothing under the sun will allow anyone outside the executing method to
-be able to get at this hidden data. Well, nearly nothing. You I<could>
-single step through the program using the debugger and find out the
-pieces while you're in the method, but everyone else is out of luck.
-
-There, if that doesn't excite the Scheme folks, then I just don't know
-what will. Translation of this technique into C++, Java, or any other
-braindead-static language is left as a futile exercise for aficionados
-of those camps.
-
-You could even add a bit of nosiness via the caller() function and
-make the closure refuse to operate unless called via its own package.
-This would no doubt satisfy certain fastidious concerns of programming
-police and related puritans.
-
-If you were wondering when Hubris, the third principle virtue of a
-programmer, would come into play, here you have it. (More seriously,
-Hubris is just the pride in craftsmanship that comes from having written
-a sound bit of well-designed code.)
-
-=head1 AUTOLOAD: Proxy Methods
-
-Autoloading is a way to intercept calls to undefined methods. An autoload
-routine may choose to create a new function on the fly, either loaded
-from disk or perhaps just eval()ed right there. This define-on-the-fly
-strategy is why it's called autoloading.
-
-But that's only one possible approach. Another one is to just
-have the autoloaded method itself directly provide the
-requested service. When used in this way, you may think
-of autoloaded methods as "proxy" methods.
-
-When Perl tries to call an undefined function in a particular package
-and that function is not defined, it looks for a function in
-that same package called AUTOLOAD. If one exists, it's called
-with the same arguments as the original function would have had.
-The fully-qualified name of the function is stored in that package's
-global variable $AUTOLOAD. Once called, the function can do anything
-it would like, including defining a new function by the right name, and
-then doing a really fancy kind of C<goto> right to it, erasing itself
-from the call stack.
-
-What does this have to do with objects? After all, we keep talking about
-functions, not methods. Well, since a method is just a function with
-an extra argument and some fancier semantics about where it's found,
-we can use autoloading for methods, too. Perl doesn't start looking
-for an AUTOLOAD method until it has exhausted the recursive hunt up
-through @ISA, though. Some programmers have even been known to define
-a UNIVERSAL::AUTOLOAD method to trap unresolved method calls to any
-kind of object.
-
-=head2 Autoloaded Data Methods
-
-You probably began to get a little suspicious about the duplicated
-code way back earlier when we first showed you the Person class, and
-then later the Employee class. Each method used to access the
-hash fields looked virtually identical. This should have tickled
-that great programming virtue, Impatience, but for the time,
-we let Laziness win out, and so did nothing. Proxy methods can cure
-this.
-
-Instead of writing a new function every time we want a new data field,
-we'll use the autoload mechanism to generate (actually, mimic) methods on
-the fly. To verify that we're accessing a valid member, we will check
-against an C<_permitted> (pronounced "under-permitted") field, which
-is a reference to a file-scoped lexical (like a C file static) hash of permitted fields in this record
-called %fields. Why the underscore? For the same reason as the _CENSUS
-field we once used: as a marker that means "for internal use only".
-
-Here's what the module initialization code and class
-constructor will look like when taking this approach:
-
- package Person;
- use Carp;
- our $AUTOLOAD; # it's a package global
-
- my %fields = (
- name => undef,
- age => undef,
- peers => undef,
- );
-
- sub new {
- my $class = shift;
- my $self = {
- _permitted => \%fields,
- %fields,
- };
- bless $self, $class;
- return $self;
- }
-
-If we wanted our record to have default values, we could fill those in
-where current we have C<undef> in the %fields hash.
-
-Notice how we saved a reference to our class data on the object itself?
-Remember that it's important to access class data through the object
-itself instead of having any method reference %fields directly, or else
-you won't have a decent inheritance.
-
-The real magic, though, is going to reside in our proxy method, which
-will handle all calls to undefined methods for objects of class Person
-(or subclasses of Person). It has to be called AUTOLOAD. Again, it's
-all caps because it's called for us implicitly by Perl itself, not by
-a user directly.
-
- sub AUTOLOAD {
- my $self = shift;
- my $type = ref($self)
- or croak "$self is not an object";
-
- my $name = $AUTOLOAD;
- $name =~ s/.*://; # strip fully-qualified portion
-
- unless (exists $self->{_permitted}->{$name} ) {
- croak "Can't access `$name' field in class $type";
- }
-
- if (@_) {
- return $self->{$name} = shift;
- } else {
- return $self->{$name};
- }
- }
-
-Pretty nifty, eh? All we have to do to add new data fields
-is modify %fields. No new functions need be written.
-
-I could have avoided the C<_permitted> field entirely, but I
-wanted to demonstrate how to store a reference to class data on the
-object so you wouldn't have to access that class data
-directly from an object method.
-
-=head2 Inherited Autoloaded Data Methods
-
-But what about inheritance? Can we define our Employee
-class similarly? Yes, so long as we're careful enough.
-
-Here's how to be careful:
-
- package Employee;
- use Person;
- use strict;
- our @ISA = qw(Person);
-
- my %fields = (
- id => undef,
- salary => undef,
- );
-
- sub new {
- my $class = shift;
- my $self = $class->SUPER::new();
- my($element);
- foreach $element (keys %fields) {
- $self->{_permitted}->{$element} = $fields{$element};
- }
- @{$self}{keys %fields} = values %fields;
- return $self;
- }
-
-Once we've done this, we don't even need to have an
-AUTOLOAD function in the Employee package, because
-we'll grab Person's version of that via inheritance,
-and it will all work out just fine.
-
-=head1 Metaclassical Tools
-
-Even though proxy methods can provide a more convenient approach to making
-more struct-like classes than tediously coding up data methods as
-functions, it still leaves a bit to be desired. For one thing, it means
-you have to handle bogus calls that you don't mean to trap via your proxy.
-It also means you have to be quite careful when dealing with inheritance,
-as detailed above.
-
-Perl programmers have responded to this by creating several different
-class construction classes. These metaclasses are classes
-that create other classes. A couple worth looking at are
-Class::Struct and Alias. These and other related metaclasses can be
-found in the modules directory on CPAN.
-
-=head2 Class::Struct
-
-One of the older ones is Class::Struct. In fact, its syntax and
-interface were sketched out long before perl5 even solidified into a
-real thing. What it does is provide you a way to "declare" a class
-as having objects whose fields are of a specific type. The function
-that does this is called, not surprisingly enough, struct(). Because
-structures or records are not base types in Perl, each time you want to
-create a class to provide a record-like data object, you yourself have
-to define a new() method, plus separate data-access methods for each of
-that record's fields. You'll quickly become bored with this process.
-The Class::Struct::struct() function alleviates this tedium.
-
-Here's a simple example of using it:
-
- use Class::Struct qw(struct);
- use Jobbie; # user-defined; see below
-
- struct 'Fred' => {
- one => '$',
- many => '@',
- profession => 'Jobbie', # does not call Jobbie->new()
- };
-
- $ob = Fred->new(profession => Jobbie->new());
- $ob->one("hmmmm");
-
- $ob->many(0, "here");
- $ob->many(1, "you");
- $ob->many(2, "go");
- print "Just set: ", $ob->many(2), "\n";
-
- $ob->profession->salary(10_000);
-
-You can declare types in the struct to be basic Perl types, or
-user-defined types (classes). User types will be initialized by calling
-that class's new() method.
-
-Take care that the C<Jobbie> object is not created automatically by the
-C<Fred> class's new() method, so you should specify a C<Jobbie> object
-when you create an instance of C<Fred>.
-
-Here's a real-world example of using struct generation. Let's say you
-wanted to override Perl's idea of gethostbyname() and gethostbyaddr() so
-that they would return objects that acted like C structures. We don't
-care about high-falutin' OO gunk. All we want is for these objects to
-act like structs in the C sense.
-
- use Socket;
- use Net::hostent;
- $h = gethostbyname("perl.com"); # object return
- printf "perl.com's real name is %s, address %s\n",
- $h->name, inet_ntoa($h->addr);
-
-Here's how to do this using the Class::Struct module.
-The crux is going to be this call:
-
- struct 'Net::hostent' => [ # note bracket
- name => '$',
- aliases => '@',
- addrtype => '$',
- 'length' => '$',
- addr_list => '@',
- ];
-
-Which creates object methods of those names and types.
-It even creates a new() method for us.
-
-We could also have implemented our object this way:
-
- struct 'Net::hostent' => { # note brace
- name => '$',
- aliases => '@',
- addrtype => '$',
- 'length' => '$',
- addr_list => '@',
- };
-
-and then Class::Struct would have used an anonymous hash as the object
-type, instead of an anonymous array. The array is faster and smaller,
-but the hash works out better if you eventually want to do inheritance.
-Since for this struct-like object we aren't planning on inheritance,
-this time we'll opt for better speed and size over better flexibility.
-
-Here's the whole implementation:
-
- package Net::hostent;
- use strict;
-
- BEGIN {
- use Exporter ();
- our @EXPORT = qw(gethostbyname gethostbyaddr gethost);
- our @EXPORT_OK = qw(
- $h_name @h_aliases
- $h_addrtype $h_length
- @h_addr_list $h_addr
- );
- our %EXPORT_TAGS = ( FIELDS => [ @EXPORT_OK, @EXPORT ] );
- }
- our @EXPORT_OK;
-
- # Class::Struct forbids use of @ISA
- sub import { goto &Exporter::import }
-
- use Class::Struct qw(struct);
- struct 'Net::hostent' => [
- name => '$',
- aliases => '@',
- addrtype => '$',
- 'length' => '$',
- addr_list => '@',
- ];
-
- sub addr { shift->addr_list->[0] }
-
- sub populate (@) {
- return unless @_;
- my $hob = new(); # Class::Struct made this!
- $h_name = $hob->[0] = $_[0];
- @h_aliases = @{ $hob->[1] } = split ' ', $_[1];
- $h_addrtype = $hob->[2] = $_[2];
- $h_length = $hob->[3] = $_[3];
- $h_addr = $_[4];
- @h_addr_list = @{ $hob->[4] } = @_[ (4 .. $#_) ];
- return $hob;
- }
-
- sub gethostbyname ($) { populate(CORE::gethostbyname(shift)) }
-
- sub gethostbyaddr ($;$) {
- my ($addr, $addrtype);
- $addr = shift;
- require Socket unless @_;
- $addrtype = @_ ? shift : Socket::AF_INET();
- populate(CORE::gethostbyaddr($addr, $addrtype))
- }
-
- sub gethost($) {
- if ($_[0] =~ /^\d+(?:\.\d+(?:\.\d+(?:\.\d+)?)?)?$/) {
- require Socket;
- &gethostbyaddr(Socket::inet_aton(shift));
- } else {
- &gethostbyname;
- }
- }
-
- 1;
-
-We've snuck in quite a fair bit of other concepts besides just dynamic
-class creation, like overriding core functions, import/export bits,
-function prototyping, short-cut function call via C<&whatever>, and
-function replacement with C<goto &whatever>. These all mostly make
-sense from the perspective of a traditional module, but as you can see,
-we can also use them in an object module.
-
-You can look at other object-based, struct-like overrides of core
-functions in the 5.004 release of Perl in File::stat, Net::hostent,
-Net::netent, Net::protoent, Net::servent, Time::gmtime, Time::localtime,
-User::grent, and User::pwent. These modules have a final component
-that's all lowercase, by convention reserved for compiler pragmas,
-because they affect the compilation and change a builtin function.
-They also have the type names that a C programmer would most expect.
-
-=head2 Data Members as Variables
-
-If you're used to C++ objects, then you're accustomed to being able to
-get at an object's data members as simple variables from within a method.
-The Alias module provides for this, as well as a good bit more, such
-as the possibility of private methods that the object can call but folks
-outside the class cannot.
-
-Here's an example of creating a Person using the Alias module.
-When you update these magical instance variables, you automatically
-update value fields in the hash. Convenient, eh?
-
- package Person;
-
- # this is the same as before...
- sub new {
- my $class = shift;
- my $self = {
- NAME => undef,
- AGE => undef,
- PEERS => [],
- };
- bless($self, $class);
- return $self;
- }
-
- use Alias qw(attr);
- our ($NAME, $AGE, $PEERS);
-
- sub name {
- my $self = attr shift;
- if (@_) { $NAME = shift; }
- return $NAME;
- }
-
- sub age {
- my $self = attr shift;
- if (@_) { $AGE = shift; }
- return $AGE;
- }
-
- sub peers {
- my $self = attr shift;
- if (@_) { @PEERS = @_; }
- return @PEERS;
- }
-
- sub exclaim {
- my $self = attr shift;
- return sprintf "Hi, I'm %s, age %d, working with %s",
- $NAME, $AGE, join(", ", @PEERS);
- }
-
- sub happy_birthday {
- my $self = attr shift;
- return ++$AGE;
- }
-
-The need for the C<our> declaration is because what Alias does
-is play with package globals with the same name as the fields. To use
-globals while C<use strict> is in effect, you have to predeclare them.
-These package variables are localized to the block enclosing the attr()
-call just as if you'd used a local() on them. However, that means that
-they're still considered global variables with temporary values, just
-as with any other local().
-
-It would be nice to combine Alias with
-something like Class::Struct or Class::MethodMaker.
-
-=head1 NOTES
-
-=head2 Object Terminology
-
-In the various OO literature, it seems that a lot of different words
-are used to describe only a few different concepts. If you're not
-already an object programmer, then you don't need to worry about all
-these fancy words. But if you are, then you might like to know how to
-get at the same concepts in Perl.
-
-For example, it's common to call an object an I<instance> of a class
-and to call those objects' methods I<instance methods>. Data fields
-peculiar to each object are often called I<instance data> or I<object
-attributes>, and data fields common to all members of that class are
-I<class data>, I<class attributes>, or I<static data members>.
-
-Also, I<base class>, I<generic class>, and I<superclass> all describe
-the same notion, whereas I<derived class>, I<specific class>, and
-I<subclass> describe the other related one.
-
-C++ programmers have I<static methods> and I<virtual methods>,
-but Perl only has I<class methods> and I<object methods>.
-Actually, Perl only has methods. Whether a method gets used
-as a class or object method is by usage only. You could accidentally
-call a class method (one expecting a string argument) on an
-object (one expecting a reference), or vice versa.
-
-From the C++ perspective, all methods in Perl are virtual.
-This, by the way, is why they are never checked for function
-prototypes in the argument list as regular builtin and user-defined
-functions can be.
-
-Because a class is itself something of an object, Perl's classes can be
-taken as describing both a "class as meta-object" (also called I<object
-factory>) philosophy and the "class as type definition" (I<declaring>
-behaviour, not I<defining> mechanism) idea. C++ supports the latter
-notion, but not the former.
-
-=head1 SEE ALSO
-
-The following manpages will doubtless provide more
-background for this one:
-L<perlmod>,
-L<perlref>,
-L<perlobj>,
-L<perlbot>,
-L<perltie>,
-and
-L<overload>.
-
-L<perlboot> is a kinder, gentler introduction to object-oriented
-programming.
-
-L<perltooc> provides more detail on class data.
-
-Some modules which might prove interesting are Class::Accessor,
-Class::Class, Class::Contract, Class::Data::Inheritable,
-Class::MethodMaker and Tie::SecureHash
-
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997, 1998 Tom Christiansen
-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.
-
-=head1 COPYRIGHT
-
-=head2 Acknowledgments
+For information on OO programming with Perl, please see L<perlootut>
+and L<perlobj>.
-Thanks to
-Larry Wall,
-Roderick Schertler,
-Gurusamy Sarathy,
-Dean Roehrich,
-Raphael Manfredi,
-Brent Halsey,
-Greg Bacon,
-Brad Appleton,
-and many others for their helpful comments.
+=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perltrap.pod b/Master/tlpkg/tlperl/lib/pods/perltrap.pod
index 99e25c8d490..e4fbb23a536 100644
--- a/Master/tlpkg/tlperl/lib/pods/perltrap.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perltrap.pod
@@ -171,7 +171,7 @@ C<do { } while> construct. See L<perlsyn/"Loop Control">.
=item *
The switch statement is called C<given/when> and only available in
-perl 5.10 or newer. See L<perlsyn/"Switch statements">.
+perl 5.10 or newer. See L<perlsyn/"Switch Statements">.
=item *
diff --git a/Master/tlpkg/tlperl/lib/pods/perltru64.pod b/Master/tlpkg/tlperl/lib/pods/perltru64.pod
index 618c5748d09..81ef9feb98c 100644
--- a/Master/tlpkg/tlperl/lib/pods/perltru64.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perltru64.pod
@@ -4,7 +4,7 @@ designed to be readable as is.
=head1 NAME
-README.tru64 - Perl version 5 on Tru64 (formerly known as Digital UNIX formerly known as DEC OSF/1) systems
+perltru64 - Perl version 5 on Tru64 (formerly known as Digital UNIX formerly known as DEC OSF/1) systems
=head1 DESCRIPTION
@@ -37,7 +37,7 @@ necessary, and also gives advice on how to raise the process limits.
Also, Configure might abort with
Build a threading Perl? [n]
- Configure[2437]: Syntax error at line 1 : `config.sh' is not expected.
+ Configure[2437]: Syntax error at line 1 : 'config.sh' is not expected.
This indicates that Configure is being run with a broken Korn shell
(even though you think you are using a Bourne shell by using
diff --git a/Master/tlpkg/tlperl/lib/pods/perltw.pod b/Master/tlpkg/tlperl/lib/pods/perltw.pod
index 934db9eb42d..4e029d91f2a 100644
--- a/Master/tlpkg/tlperl/lib/pods/perltw.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perltw.pod
@@ -2,158 +2,158 @@ 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.
-The following documentation is written in Big5 encoding.
+The following documentation is written in UTF-8 encoding.
-¦pªG§A¥Î¤@¯ëªº¤å¦r½s¿è¾¹¾\Äý³o¥÷¤å¥ó, ½Ð©¿²¤¤å¤¤©_¯Sªºµù°O¦r²Å.
-³o¥÷¤å¥ó¬O¥H POD (²©ú¤å¥ó®æ¦¡) ¼g¦¨; ³oºØ®æ¦¡¬O¬°¤F¯àÅý¤Hª½±µÅª¨ú,
-¦Ó¯S§O³]­pªº. Ãö©ó¦¹®æ¦¡ªº¶i¤@¨B¸ê°T, ½Ð°Ñ¦Ò perlpod ½u¤W¤å¥ó.
+如果你用一般的文字編輯器閱覽這份文件, 請忽略文中奇特的註記字符.
+這份文件是以 POD (簡明文件格å¼) 寫æˆ; 這種格å¼æ˜¯ç‚ºäº†èƒ½è®“人直接讀å–,
+而特別設計的. 關於此格å¼çš„進一步資訊, è«‹åƒè€ƒ perlpod 線上文件.
-=encoding big5
+=encoding UTF-8
=head1 NAME
-perltw - ¥¿Å餤¤å Perl «ü«n
+perltw - 正體中文 Perl 指å—
=head1 DESCRIPTION
-Åwªï¨Ó¨ì Perl ªº¤Ñ¦a!
+歡迎來到 Perl 的天地!
-±q 5.8.0 ª©¶}©l, Perl ¨ã³Æ¤F§¹µ½ªº Unicode (¸U°ê½X) ¤ä´©,
-¤]³s±a¤ä´©¤F³\¦h©Ô¤B»y¨t¥H¥~ªº½s½X¤è¦¡; CJK (¤¤¤éÁú) «K¬O¨ä¤¤ªº¤@³¡¥÷.
-Unicode ¬O°ê»Ú©Êªº¼Ð·Ç, ¸Õ¹Ï²[»\¥@¬É¤W©Ò¦³ªº¦r²Å: ¦è¤è¥@¬É, ªF¤è¥@¬É,
-¥H¤Î¨âªÌ¶¡ªº¤@¤Á (§Æþ¤å, ±Ô§Q¨È¤å, ªü©Ô§B¤å, §Æ§B¨Ó¤å, ¦L«×¤å,
-¦L¦a¦w¤å, µ¥µ¥). ¥¦¤]®e¯Ç¤F¦hºØ§@·~¨t²Î»P¥­»O (¦p PC ¤Î³Áª÷¶ð).
+從 5.8.0 版開始, Perl 具備了完善的 Unicode (è¬åœ‹ç¢¼) 支æ´,
+也連帶支æ´äº†è¨±å¤šæ‹‰ä¸èªžç³»ä»¥å¤–的編碼方å¼; CJK (中日韓) 便是其中的一部份.
+Unicode 是國際性的標準, 試圖涵蓋世界上所有的字符: 西方世界, æ±æ–¹ä¸–ç•Œ,
+以åŠå…©è€…間的一切 (希臘文, 敘利亞文, 阿拉伯文, 希伯來文, å°åº¦æ–‡,
+å°åœ°å®‰æ–‡, 等等). 它也容ç´äº†å¤šç¨®ä½œæ¥­ç³»çµ±èˆ‡å¹³è‡º (如 PC åŠéº¥é‡‘å¡”).
-Perl ¥»¨­¥H Unicode ¶i¦æ¾Þ§@. ³oªí¥Ü Perl ¤º³¡ªº¦r¦ê¸ê®Æ¥i¥Î Unicode
-ªí¥Ü; Perl ªº¨ç¦¡»Pºâ²Å (¨Ò¦p¥¿³Wªí¥Ü¦¡¤ñ¹ï) ¤]¯à¹ï Unicode ¶i¦æ¾Þ§@.
-¦b¿é¤J¤Î¿é¥X®É, ¬°¤F³B²z¥H Unicode ¤§«eªº½s½X¤è¦¡Àx¦sªº¸ê®Æ, Perl
-´£¨Ñ¤F Encode ³o­Ó¼Ò²Õ, ¥i¥HÅý§A»´©ö¦aŪ¨ú¤Î¼g¤J¦³ªº½s½X¸ê®Æ.
+Perl 本身以 Unicode 進行æ“作. 這表示 Perl 內部的字串資料å¯ç”¨ Unicode
+表示; Perl 的函å¼èˆ‡ç®—符 (例如正è¦è¡¨ç¤ºå¼æ¯”å°) ä¹Ÿèƒ½å° Unicode 進行æ“作.
+在輸入åŠè¼¸å‡ºæ™‚, 為了處ç†ä»¥ Unicode 之å‰çš„編碼方å¼å„²å­˜çš„資料, Perl
+æ供了 Encode 這個模組, å¯ä»¥è®“你輕易地讀å–åŠå¯«å…¥èˆŠæœ‰çš„編碼資料.
-Encode ©µ¦ù¼Ò²Õ¤ä´©¤U¦C¥¿Å餤¤åªº½s½X¤è¦¡ ('big5' ªí¥Ü 'big5-eten'):
+Encode 延伸模組支æ´ä¸‹åˆ—æ­£é«”ä¸­æ–‡çš„ç·¨ç¢¼æ–¹å¼ ('big5' 表示 'big5-eten'):
- big5-eten Big5 ½s½X (§t­Ê¤Ñ©µ¦ù¦r§Î)
- big5-hkscs Big5 + ­»´ä¥~¦r¶°, 2001 ¦~ª©
- cp950 ¦r½X­¶ 950 (Big5 + ·L³n²K¥[ªº¦r²Å)
+ big5-eten Big5 編碼 (å«å€šå¤©å»¶ä¼¸å­—å½¢)
+ big5-hkscs Big5 + 香港外字集, 2001 年版
+ cp950 å­—ç¢¼é  950 (Big5 + 微軟添加的字符)
-Á|¨Ò¨Ó»¡, ±N Big5 ½s½XªºÀÉ®×Âন Unicode, ¯­»ÝÁä¤J¤U¦C«ü¥O:
+舉例來說, å°‡ Big5 ç·¨ç¢¼çš„æª”æ¡ˆè½‰æˆ Unicode, 祗需éµå…¥ä¸‹åˆ—指令:
perl -Mencoding=big5,STDOUT,utf8 -pe1 < file.big5 > file.utf8
-Perl ¤]¤ºªþ¤F "piconv", ¤@¤ä§¹¥þ¥H Perl ¼g¦¨ªº¦r²ÅÂà´«¤u¨ãµ{¦¡, ¥Îªk¦p¤U:
+Perl 也內附了 "piconv", 一支完全以 Perl 寫æˆçš„字符轉æ›å·¥å…·ç¨‹å¼, 用法如下:
piconv -f big5 -t utf8 < file.big5 > file.utf8
piconv -f utf8 -t big5 < file.utf8 > file.big5
-¥t¥~, §Q¥Î encoding ¼Ò²Õ, §A¥i¥H»´©ö¼g¥X¥H¦r²Å¬°³æ¦ìªºµ{¦¡½X, ¦p¤U©Ò¥Ü:
+å¦å¤–, 利用 encoding 模組, ä½ å¯ä»¥è¼•æ˜“寫出以字符為單ä½çš„程å¼ç¢¼, 如下所示:
#!/usr/bin/env perl
- # ±Ò°Ê big5 ¦r¦ê¸ÑªR; ¼Ð·Ç¿é¥X¤J¤Î¼Ð·Ç¿ù»~³£³]¬° big5 ½s½X
+ # å•Ÿå‹• big5 字串解æž; 標準輸出入åŠæ¨™æº–錯誤都設為 big5 編碼
use encoding 'big5', STDIN => 'big5', STDOUT => 'big5';
- print length("Àd¾m"); # 2 (Âù¤Þ¸¹ªí¥Ü¦r²Å)
- print length('Àd¾m'); # 4 (³æ¤Þ¸¹ªí¥Ü¦ì¤¸²Õ)
- print index("½Î½Î±Ð»£", "να"); # -1 (¤£¥]§t¦¹¤l¦r¦ê)
- print index('½Î½Î±Ð»£', 'να'); # 1 (±q²Ä¤G­Ó¦ì¤¸²Õ¶}©l)
+ print length("駱é§"); # 2 (雙引號表示字符)
+ print length('駱é§'); # 4 (單引號表示ä½å…ƒçµ„)
+ print index("諄諄教誨", "彖帢"); # -1 (ä¸åŒ…å«æ­¤å­å­—串)
+ print index('諄諄教誨', '彖帢'); # 1 (從第二個ä½å…ƒçµ„開始)
-¦b³Ì«á¤@¦C¨Ò¤l¸Ì, "½Î" ªº²Ä¤G­Ó¦ì¤¸²Õ»P "½Î" ªº²Ä¤@­Ó¦ì¤¸²Õµ²¦X¦¨ Big5
-½Xªº "ν"; "½Î" ªº²Ä¤G­Ó¦ì¤¸²Õ«h»P "±Ð" ªº²Ä¤@­Ó¦ì¤¸²Õµ²¦X¦¨ "α".
-³o¸Ñ¨M¤F¥H«e Big5 ½X¤ñ¹ï³B²z¤W±`¨£ªº°ÝÃD.
+在最後一列例å­è£¡, "è«„" 的第二個ä½å…ƒçµ„與 "è«„" 的第一個ä½å…ƒçµ„çµåˆæˆ Big5
+碼的 "å½–"; "è«„" 的第二個ä½å…ƒçµ„則與 "æ•™" 的第一個ä½å…ƒçµ„çµåˆæˆ "帢".
+é€™è§£æ±ºäº†ä»¥å‰ Big5 碼比å°è™•ç†ä¸Šå¸¸è¦‹çš„å•é¡Œ.
-=head2 ÃB¥~ªº¤¤¤å½s½X
+=head2 é¡å¤–的中文編碼
-¦pªG»Ý­n§ó¦hªº¤¤¤å½s½X, ¥i¥H±q CPAN (L<http://www.cpan.org/>) ¤U¸ü
-Encode::HanExtra ¼Ò²Õ. ¥¦¥Ø«e´£¨Ñ¤U¦C½s½X¤è¦¡:
+如果需è¦æ›´å¤šçš„中文編碼, å¯ä»¥å¾ž CPAN (L<http://www.cpan.org/>) 下載
+Encode::HanExtra 模組. 它目å‰æ供下列編碼方å¼:
- cccii 1980 ¦~¤å«Ø·|ªº¤¤¤å¸ê°T¥æ´«½X
- euc-tw Unix ©µ¦ù¦r²Å¶°, ¥]§t CNS11643 ¥­­± 1-7
- big5plus ¤¤¤å¼Æ¦ì¤Æ§Þ³N±À¼s°òª÷·|ªº Big5+
- big5ext ¤¤¤å¼Æ¦ì¤Æ§Þ³N±À¼s°òª÷·|ªº Big5e
+ cccii 1980 年文建會的中文資訊交æ›ç¢¼
+ euc-tw Unix 延伸字符集, åŒ…å« CNS11643 å¹³é¢ 1-7
+ big5plus 中文數ä½åŒ–技術推廣基金會的 Big5+
+ big5ext 中文數ä½åŒ–技術推廣基金會的 Big5e
-¥t¥~, Encode::HanConvert ¼Ò²Õ«h´£¨Ñ¤F²ÁcÂà´«¥Îªº¨âºØ½s½X:
+å¦å¤–, Encode::HanConvert 模組則æ供了簡ç¹è½‰æ›ç”¨çš„兩種編碼:
- big5-simp Big5 ¥¿Å餤¤å»P Unicode ²Å餤¤å¤¬Âà
- gbk-trad GBK ²Å餤¤å»P Unicode ¥¿Å餤¤å¤¬Âà
+ big5-simp Big5 正體中文與 Unicode 簡體中文互轉
+ gbk-trad GBK 簡體中文與 Unicode 正體中文互轉
-­Y·Q¦b GBK »P Big5 ¤§¶¡¤¬Âà, ½Ð°Ñ¦Ò¸Ó¼Ò²Õ¤ºªþªº b2g.pl »P g2b.pl ¨â¤äµ{¦¡,
-©Î¦bµ{¦¡¤º¨Ï¥Î¤U¦C¼gªk:
+若想在 GBK 與 Big5 之間互轉, è«‹åƒè€ƒè©²æ¨¡çµ„內附的 b2g.pl 與 g2b.pl 兩支程å¼,
+或在程å¼å…§ä½¿ç”¨ä¸‹åˆ—寫法:
use Encode::HanConvert;
- $euc_cn = big5_to_gb($big5); # ±q Big5 Âର GBK
- $big5 = gb_to_big5($euc_cn); # ±q GBK Âର Big5
+ $euc_cn = big5_to_gb($big5); # 從 Big5 轉為 GBK
+ $big5 = gb_to_big5($euc_cn); # 從 GBK 轉為 Big5
-=head2 ¶i¤@¨Bªº¸ê°T
+=head2 進一步的資訊
-½Ð°Ñ¦Ò Perl ¤ºªþªº¤j¶q»¡©ú¤å¥ó (¤£©¯¥þ¬O¥Î­^¤å¼gªº), ¨Ó¾Ç²ß§ó¦hÃö©ó
-Perl ªºª¾ÃÑ, ¥H¤Î Unicode ªº¨Ï¥Î¤è¦¡. ¤£¹L, ¥~³¡ªº¸ê·½¬Û·íÂ×´I:
+è«‹åƒè€ƒ Perl 內附的大é‡èªªæ˜Žæ–‡ä»¶ (ä¸å¹¸å…¨æ˜¯ç”¨è‹±æ–‡å¯«çš„), 來學習更多關於
+Perl 的知識, ä»¥åŠ Unicode 的使用方å¼. ä¸éŽ, 外部的資æºç›¸ç•¶è±å¯Œ:
-=head2 ´£¨Ñ Perl ¸ê·½ªººô§}
+=head2 æä¾› Perl 資æºçš„網å€
=over 4
=item L<http://www.perl.com/>
-Perl ªº­º­¶ (¥Ñ¼ÚµÜ§¤½¥qºûÅ@)
+Perl çš„é¦–é  (ç”±æ­èŠç¦®å…¬å¸ç¶­è­·)
=item L<http://www.cpan.org/>
-Perl ºî¦X¨åÂúô (Comprehensive Perl Archive Network)
+Perl 綜åˆå…¸è—網 (Comprehensive Perl Archive Network)
=item L<http://lists.perl.org/>
-Perl ¶l»¼½×¾Â¤@Äý
+Perl 郵éžè«–壇一覽
=back
-=head2 ¾Ç²ß Perl ªººô§}
+=head2 學習 Perl 的網å€
=over 4
=item L<http://www.oreilly.com.tw/product_perl.php?id=index_perl>
-¥¿Å餤¤åª©ªº¼ÚµÜ§ Perl ®ÑÂÇ
+正體中文版的æ­èŠç¦® Perl 書藉
=item L<http://groups.google.com/groups?q=tw.bbs.comp.lang.perl>
-»OÆW Perl ³s½u°Q½×°Ï (¤]´N¬O¦U¤j BBS ªº Perl ³s½uª©)
+è‡ºç£ Perl é€£ç·šè¨Žè«–å€ (也就是å„大 BBS çš„ Perl 連線版)
=back
-=head2 Perl ¨Ï¥ÎªÌ¶°·|
+=head2 Perl 使用者集會
=over 4
-=item L<http://www.pm.org/groups/asia.html>
+=item L<http://www.pm.org/groups/taiwan.html>
-»OÆW Perl ±À¼s²Õ¤@Äý
+è‡ºç£ Perl 推廣組一覽
-=item L<http://irc.elixus.org/>
+=item L<irc://irc.freenode.org/#perl.tw>
-ÃÀ¥ß¨ó½u¤W²á¤Ñ«Ç
+Perl.tw 線上èŠå¤©å®¤
=back
-=head2 Unicode ¬ÛÃöºô§}
+=head2 Unicode 相關網å€
=over 4
=item L<http://www.unicode.org/>
-Unicode ¾Ç³N¾Ç·| (Unicode ¼Ð·Çªº¨î©wªÌ)
+Unicode 學術學會 (Unicode 標準的制定者)
=item L<http://www.cl.cam.ac.uk/%7Emgk25/unicode.html>
-Unix/Linux ¤Wªº UTF-8 ¤Î Unicode µª«È°Ý
+Unix/Linux 上的 UTF-8 åŠ Unicode 答客å•
=back
-=head2 ¤¤¤å¤Æ¸ê°T
+=head2 中文化資訊
=over 4
-=item ¤¤¤å¤Æ³nÅéÁp·ù
+=item 中文化軟體è¯ç›Ÿ
L<http://www.cpatch.org/>
-=item Linux ³nÅ餤¤å¤Æ­p¹º
+=item Linux 軟體中文化計劃
L<http://www.linux.org.tw/CLDP/>
@@ -167,6 +167,6 @@ L<Encode>, L<Encode::TW>, L<encoding>, L<perluniintro>, L<perlunicode>
Jarkko Hietaniemi E<lt>jhi@iki.fiE<gt>
-Audrey Tang (­ð»ñ) E<lt>audreyt@audreyt.orgE<gt>
+Audrey Tang (å”é³³) E<lt>audreyt@audreyt.orgE<gt>
=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perlunicode.pod b/Master/tlpkg/tlperl/lib/pods/perlunicode.pod
index d77c40cbbde..77daca34a7d 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlunicode.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlunicode.pod
@@ -90,10 +90,12 @@ semantics. For operations where this determination cannot be made
without additional information from the user, Perl decides in favor of
compatibility and chooses to use byte semantics.
-When C<use locale> is in effect (which overrides
-C<use feature 'unicode_strings'> in the same scope), Perl uses the
-semantics associated
-with the current locale. Otherwise, Perl uses the platform's native
+When C<use locale> (but not C<use locale ':not_characters'>) is in
+effect, Perl uses the semantics associated with the current locale.
+(C<use locale> overrides C<use feature 'unicode_strings'> in the same scope;
+while C<use locale ':not_characters'> effectively also selects
+C<use feature 'unicode_strings'> in its scope; see L<perllocale>.)
+Otherwise, Perl uses the platform's native
byte semantics for characters whose code points are less than 256, and
Unicode semantics for those greater than 255. On EBCDIC platforms, this
is almost seamless, as the EBCDIC code pages that Perl handles are
@@ -155,15 +157,17 @@ Alternatively, you can use the C<\x{...}> notation for characters 0x100 and
above. For characters below 0x100 you may get byte semantics instead of
character semantics; see L</The "Unicode Bug">. On EBCDIC machines there is
the additional problem that the value for such characters gives the EBCDIC
-character rather than the Unicode one.
+character rather than the Unicode one, thus it is more portable to use
+C<\N{U+...}> instead.
-Additionally, if you
+Additionally, you can use the C<\N{...}> notation and put the official
+Unicode character name within the braces, such as
+C<\N{WHITE SMILING FACE}>. This automatically loads the L<charnames>
+module with the C<:full> and C<:short> options. If you prefer different
+options for this module, you can instead, before the C<\N{...}>,
+explicitly load it with your desired options; for example,
- use charnames ':full';
-
-you can use the C<\N{...}> notation and put the official Unicode
-character name within the braces, such as C<\N{WHITE SMILING FACE}>.
-See L<charnames>.
+ use charnames ':loose';
=item *
@@ -260,11 +264,13 @@ complement B<and> the full character-wide bit complement.
=item *
-You can define your own mappings to be used in C<lc()>,
-C<lcfirst()>, C<uc()>, and C<ucfirst()> (or their double-quoted string inlined
-versions such as C<\U>). See
-L<User-Defined Case-Mappings|/"User-Defined Case Mappings (for serious hackers only)">
-for more details.
+There is a CPAN module, L<Unicode::Casing>, which allows you to define
+your own mappings to be used in C<lc()>, C<lcfirst()>, C<uc()>,
+C<ucfirst()>, and C<fc> (or their double-quoted string inlined
+versions such as C<\U>).
+(Prior to Perl 5.16, this functionality was partially provided
+in the Perl core, but suffered from a number of insurmountable
+drawbacks, so the CPAN module was written instead.)
=back
@@ -301,7 +307,8 @@ This formality is needed when properties are not binary; that is, if they can
take on more values than just True and False. For example, the Bidi_Class (see
L</"Bidirectional Character Types"> below), can take on several different
values, such as Left, Right, Whitespace, and others. To match these, one needs
-to specify the property name (Bidi_Class), AND the value being matched against
+to specify both the property name (Bidi_Class), AND the value being
+matched against
(Left, Right, etc.). This is done, as in the examples above, by having the
two components separated by an equal sign (or interchangeably, a colon), like
C<\p{Bidi_Class: Left}>.
@@ -364,6 +371,14 @@ of which under C</i> matching match C<PosixAlpha>.
numerals, come in both upper and lower case so they are C<Cased>, but aren't considered
letters, so they aren't C<Cased_Letter>s.)
+The result is undefined if you try to match a non-Unicode code point
+(that is, one above 0x10FFFF) against a Unicode property. Currently, a
+warning is raised, and the match will fail. In some cases, this is
+counterintuitive, as both these fail:
+
+ chr(0x110000) =~ \p{ASCII_Hex_Digit=True} # Fails.
+ chr(0x110000) =~ \p{ASCII_Hex_Digit=False} # Fails!
+
=head3 B<General_Category>
Every Unicode character is assigned a general category, which is the "most
@@ -469,11 +484,63 @@ The world's languages are written in many different scripts. This sentence
written in Cyrillic, and Greek is written in, well, Greek; Japanese mainly in
Hiragana or Katakana. There are many more.
-The Unicode Script property gives what script a given character is in,
-and the property can be specified with the compound form like
-C<\p{Script=Hebrew}> (short: C<\p{sc=hebr}>). Perl furnishes shortcuts for all
-script names. You can omit everything up through the equals (or colon), and
-simply write C<\p{Latin}> or C<\P{Cyrillic}>.
+The Unicode Script and Script_Extensions properties give what script a
+given character is in. Either property can be specified with the
+compound form like
+C<\p{Script=Hebrew}> (short: C<\p{sc=hebr}>), or
+C<\p{Script_Extensions=Javanese}> (short: C<\p{scx=java}>).
+In addition, Perl furnishes shortcuts for all
+C<Script> property names. You can omit everything up through the equals
+(or colon), and simply write C<\p{Latin}> or C<\P{Cyrillic}>.
+(This is not true for C<Script_Extensions>, which is required to be
+written in the compound form.)
+
+The difference between these two properties involves characters that are
+used in multiple scripts. For example the digits '0' through '9' are
+used in many parts of the world. These are placed in a script named
+C<Common>. Other characters are used in just a few scripts. For
+example, the "KATAKANA-HIRAGANA DOUBLE HYPHEN" is used in both Japanese
+scripts, Katakana and Hiragana, but nowhere else. The C<Script>
+property places all characters that are used in multiple scripts in the
+C<Common> script, while the C<Script_Extensions> property places those
+that are used in only a few scripts into each of those scripts; while
+still using C<Common> for those used in many scripts. Thus both these
+match:
+
+ "0" =~ /\p{sc=Common}/ # Matches
+ "0" =~ /\p{scx=Common}/ # Matches
+
+and only the first of these match:
+
+ "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" =~ /\p{sc=Common} # Matches
+ "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" =~ /\p{scx=Common} # No match
+
+And only the last two of these match:
+
+ "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" =~ /\p{sc=Hiragana} # No match
+ "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" =~ /\p{sc=Katakana} # No match
+ "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" =~ /\p{scx=Hiragana} # Matches
+ "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" =~ /\p{scx=Katakana} # Matches
+
+C<Script_Extensions> is thus an improved C<Script>, in which there are
+fewer characters in the C<Common> script, and correspondingly more in
+other scripts. It is new in Unicode version 6.0, and its data are likely
+to change significantly in later releases, as things get sorted out.
+
+(Actually, besides C<Common>, the C<Inherited> script, contains
+characters that are used in multiple scripts. These are modifier
+characters which modify other characters, and inherit the script value
+of the controlling character. Some of these are used in many scripts,
+and so go into C<Inherited> in both C<Script> and C<Script_Extensions>.
+Others are used in just a few scripts, so are in C<Inherited> in
+C<Script>, but not in C<Script_Extensions>.)
+
+It is worth stressing that there are several different sets of digits in
+Unicode that are equivalent to 0-9 and are matchable by C<\d> in a
+regular expression. If they are used in a single language only, they
+are in that language's C<Script> and C<Script_Extension>. If they are
+used in more than one script, they will be in C<sc=Common>, but only
+if they are used in many scripts should they be in C<scx=Common>.
A complete list of scripts and their shortcuts is in L<perluniprops>.
@@ -496,20 +563,14 @@ other words, the ASCII characters. The "Latin" script contains some letters
from this as well as several other blocks, like "Latin-1 Supplement",
"Latin Extended-A", etc., but it does not contain all the characters from
those blocks. It does not, for example, contain the digits 0-9, because
-those digits are shared across many scripts. The digits 0-9 and similar groups,
-like punctuation, are in the script called C<Common>. There is also a
-script called C<Inherited> for characters that modify other characters,
-and inherit the script value of the controlling character. (Note that
-there are several different sets of digits in Unicode that are
-equivalent to 0-9 and are matchable by C<\d> in a regular expression.
-If they are used in a single language only, they are in that language's
-script. Only sets are used across several languages are in the
-C<Common> script.)
+those digits are shared across many scripts, and hence are in the
+C<Common> script.
For more about scripts versus blocks, see UAX#24 "Unicode Script Property":
L<http://www.unicode.org/reports/tr24>
-The Script property is likely to be the one you want to use when processing
+The C<Script> or C<Script_Extensions> properties are likely to be the
+ones you want to use when processing
natural language; the Block property may occasionally be useful in working
with the nuts and bolts of Unicode.
@@ -557,8 +618,9 @@ Unicode ones, but some are genuine extensions, including several that are in
the compound form. And quite a few of these are actually recommended by Unicode
(in L<http://www.unicode.org/reports/tr18>).
-This section gives some details on all extensions that aren't synonyms for
-compound-form Unicode properties (for those, you'll have to refer to the
+This section gives some details on all extensions that aren't just
+synonyms for compound-form Unicode properties
+(for those properties, you'll have to refer to the
L<Unicode Standard|http://www.unicode.org/reports/tr44>.
=over
@@ -719,6 +781,13 @@ This is the same as C<\s>, including beyond ASCII.
Mnemonic: Space, as modified by Perl. (It doesn't include the vertical tab
which both the Posix standard and Unicode consider white space.)
+=item B<C<\p{Title}>> and B<C<\p{Titlecase}>>
+
+Under case-sensitive matching, these both match the same code points as
+C<\p{General Category=Titlecase_Letter}> (C<\p{gc=lt}>). The difference
+is that under C</i> caseless matching, these match the same as
+C<\p{Cased}>, whereas C<\p{gc=lt}> matches C<\p{Cased_Letter>).
+
=item B<C<\p{VertSpace}>>
This is the same as C<\v>: A character that changes the spacing vertically.
@@ -781,28 +850,32 @@ tabular characters) denoting a range of Unicode code points to include.
=item *
Something to include, prefixed by "+": a built-in character
-property (prefixed by "utf8::") or a user-defined character property,
+property (prefixed by "utf8::") or a fully qualified (including package
+name) user-defined character property,
to represent all the characters in that property; two hexadecimal code
points for a range; or a single hexadecimal code point.
=item *
Something to exclude, prefixed by "-": an existing character
-property (prefixed by "utf8::") or a user-defined character property,
+property (prefixed by "utf8::") or a fully qualified (including package
+name) user-defined character property,
to represent all the characters in that property; two hexadecimal code
points for a range; or a single hexadecimal code point.
=item *
Something to negate, prefixed "!": an existing character
-property (prefixed by "utf8::") or a user-defined character property,
+property (prefixed by "utf8::") or a fully qualified (including package
+name) user-defined character property,
to represent all the characters in that property; two hexadecimal code
points for a range; or a single hexadecimal code point.
=item *
Something to intersect with, prefixed by "&": an existing character
-property (prefixed by "utf8::") or a user-defined character property,
+property (prefixed by "utf8::") or a fully qualified (including package
+name) user-defined character property,
for all the characters except the characters in the property; two
hexadecimal code points for a range; or a single hexadecimal code point.
@@ -852,204 +925,38 @@ The negation is useful for defining (surprise!) negated classes.
END
}
-Intersection is useful for getting the common characters matched by
-two (or more) classes.
+This will match all non-Unicode code points, since every one of them is
+not in Kana. You can use intersection to exclude these, if desired, as
+this modified example shows:
- sub InFooAndBar {
+ sub InNotKana {
return <<'END';
- +main::Foo
- &main::Bar
- END
- }
-
-It's important to remember not to use "&" for the first set; that
-would be intersecting with nothing, resulting in an empty set.
-
-=head2 User-Defined Case Mappings (for serious hackers only)
-
-B<This featured is deprecated and is scheduled to be removed in Perl
-5.16.>
-The CPAN module L<Unicode::Casing> provides better functionality
-without the drawbacks described below.
-
-You can define your own mappings to be used in C<lc()>,
-C<lcfirst()>, C<uc()>, and C<ucfirst()> (or their string-inlined versions,
-C<\L>, C<\l>, C<\U>, and C<\u>). The mappings are currently only valid
-on strings encoded in UTF-8, but see below for a partial workaround for
-this restriction.
-
-The principle is similar to that of user-defined character
-properties: define subroutines that do the mappings.
-C<ToLower> is used for C<lc()>, C<\L>, C<lcfirst()>, and C<\l>; C<ToTitle> for
-C<ucfirst()> and C<\u>; and C<ToUpper> for C<uc()> and C<\U>.
-
-C<ToUpper()> should look something like this:
-
- sub ToUpper {
- return <<END;
- 0061\t007A\t0041
- 0101\t\t0100
+ !utf8::InHiragana
+ -utf8::InKatakana
+ +utf8::IsCn
+ &utf8::Any
END
}
-This sample C<ToUpper()> has the effect of mapping "a-z" to "A-Z", 0x101
-to 0x100, and all other characters map to themselves. The first
-returned line means to map the code point at 0x61 ("a") to 0x41 ("A"),
-the code point at 0x62 ("b") to 0x42 ("B"), ..., 0x7A ("z") to 0x5A
-("Z"). The second line maps just the code point 0x101 to 0x100. Since
-there are no other mappings defined, all other code points map to
-themselves.
-
-This mechanism is not well behaved as far as affecting other packages
-and scopes. All non-threaded programs have exactly one uppercasing
-behavior, one lowercasing behavior, and one titlecasing behavior in
-effect for utf8-encoded strings for the duration of the program. Each
-of these behaviors is irrevocably determined the first time the
-corresponding function is called to change a utf8-encoded string's case.
-If a corresponding C<To-> function has been defined in the package that
-makes that first call, the mapping defined by that function will be the
-mapping used for the duration of the program's execution across all
-packages and scopes. If no corresponding C<To-> function has been
-defined in that package, the standard official mapping will be used for
-all packages and scopes, and any corresponding C<To-> function anywhere
-will be ignored. Threaded programs have similar behavior. If the
-program's casing behavior has been decided at the time of a thread's
-creation, the thread will inherit that behavior. But, if the behavior
-hasn't been decided, the thread gets to decide for itself, and its
-decision does not affect other threads nor its creator.
-
-As shown by the example above, you have to furnish a complete mapping;
-you can't just override a couple of characters and leave the rest
-unchanged. You can find all the official mappings in the directory
-C<$Config{privlib}>F</unicore/To/>. The mapping data is returned as the
-here-document. The C<utf8::ToSpecI<Foo>> hashes in those files are special
-exception mappings derived from
-C<$Config{privlib}>F</unicore/SpecialCasing.txt>. (The "Digit" and
-"Fold" mappings that one can see in the directory are not directly
-user-accessible, one can use either the L<Unicode::UCD> module, or just match
-case-insensitively, which is what uses the "Fold" mapping. Neither are user
-overridable.)
-
-If you have many mappings to change, you can take the official mapping data,
-change by hand the affected code points, and place the whole thing into your
-subroutine. But this will only be valid on Perls that use the same Unicode
-version. Another option would be to have your subroutine read the official
-mapping files and overwrite the affected code points.
-
-If you have only a few mappings to change, starting in 5.14 you can use the
-following trick, here illustrated for Turkish.
-
- use Config;
- use charnames ":full";
-
- sub ToUpper {
- my $official = do "$Config{privlib}/unicore/To/Upper.pl";
- $utf8::ToSpecUpper{'i'} =
- "\N{LATIN CAPITAL LETTER I WITH DOT ABOVE}";
- return $official;
- }
+C<&utf8::Any> must be the last line in the definition.
-This takes the official mappings and overrides just one, for "LATIN SMALL
-LETTER I". The keys to the hash must be the bytes that form the UTF-8
-(on EBCDIC platforms, UTF-EBCDIC) of the character, as illustrated by
-the inverse function.
+Intersection is used generally for getting the common characters matched
+by two (or more) classes. It's important to remember not to use "&" for
+the first set; that would be intersecting with nothing, resulting in an
+empty set.
- sub ToLower {
- my $official = do $lower;
- $utf8::ToSpecLower{"\xc4\xb0"} = "i";
- return $official;
- }
+(Note that official Unicode properties differ from these in that they
+automatically exclude non-Unicode code points and a warning is raised if
+a match is attempted on one of those.)
-This example is for an ASCII platform, and C<\xc4\xb0> is the string of
-bytes that together form the UTF-8 that represents C<\N{LATIN CAPITAL
-LETTER I WITH DOT ABOVE}>, C<U+0130>. You can avoid having to figure out
-these bytes, and at the same time make it work on all platforms by
-instead writing:
-
- sub ToLower {
- my $official = do $lower;
- my $sequence = "\N{LATIN CAPITAL LETTER I WITH DOT ABOVE}";
- utf8::encode($sequence);
- $utf8::ToSpecLower{$sequence} = "i";
- return $official;
- }
+=head2 User-Defined Case Mappings (for serious hackers only)
-This works because C<utf8::encode()> takes the single character and
-converts it to the sequence of bytes that constitute it. Note that we took
-advantage of the fact that C<"i"> is the same in UTF-8 or UTF_EBCIDIC as not;
-otherwise we would have had to write
-
- $utf8::ToSpecLower{$sequence} = "\N{LATIN SMALL LETTER I}";
-
-in the ToLower example, and in the ToUpper example, use
-
- my $sequence = "\N{LATIN SMALL LETTER I}";
- utf8::encode($sequence);
-
-A big caveat to the above trick and to this whole mechanism in general,
-is that they work only on strings encoded in UTF-8. You can partially
-get around this by using C<use subs>. (But better to just convert to
-use L<Unicode::Casing>.) For example:
-(The trick illustrated here does work in earlier releases, but only if all the
-characters you want to override have ordinal values of 256 or higher, or
-if you use the other tricks given just below.)
-
-The mappings are in effect only for the package they are defined in, and only
-on scalars that have been marked as having Unicode characters, for example by
-using C<utf8::upgrade()>. Although probably not advisable, you can
-cause the mappings to be used globally by importing into C<CORE::GLOBAL>
-(see L<CORE>).
-
-You can partially get around the restriction that the source strings
-must be in utf8 by using C<use subs> (or by importing into C<CORE::GLOBAL>) by:
-
- use subs qw(uc ucfirst lc lcfirst);
-
- sub uc($) {
- my $string = shift;
- utf8::upgrade($string);
- return CORE::uc($string);
- }
-
- sub lc($) {
- my $string = shift;
- utf8::upgrade($string);
-
- # Unless an I is before a dot_above, it turns into a dotless i.
- # (The character class with the combining classes matches non-above
- # marks following the I. Any number of these may be between the 'I' and
- # the dot_above, and the dot_above will still apply to the 'I'.
- use charnames ":full";
- $string =~
- s/I
- (?! [^\p{ccc=0}\p{ccc=Above}]* \N{COMBINING DOT ABOVE} )
- /\N{LATIN SMALL LETTER DOTLESS I}/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}]* )
- \N{COMBINING DOT ABOVE}
- /i$1/gx;
- return CORE::lc($string);
- }
-
-These examples (also for Turkish) make sure the input is in UTF-8, and then
-call the corresponding official function, which will use the C<ToUpper()> and
-C<ToLower()> functions you have defined.
-(For Turkish, there are other required functions: C<ucfirst>, C<lcfirst>,
-and C<ToTitle>. These are very similar to the ones given above.)
-
-The reason this is only a partial fix is that it doesn't affect the C<\l>,
-C<\L>, C<\u>, and C<\U> case-change operations in regular expressions,
-which still require the source to be encoded in utf8 (see L</The "Unicode
-Bug">). (Again, use L<Unicode::Casing> instead.)
-
-The C<lc()> example shows how you can add context-dependent casing. Note
-that context-dependent casing suffers from the problem that the string
-passed to the casing function may not have sufficient context to make
-the proper choice. Also, it will not be called for C<\l>, C<\L>, C<\u>,
-and C<\U>.
+B<This feature has been removed as of Perl 5.16.>
+The CPAN module L<Unicode::Casing> provides better functionality without
+the drawbacks that this feature had. If you are using a Perl earlier
+than 5.16, this feature was most fully documented in the 5.14 version of
+this pod:
+L<http://perldoc.perl.org/5.14.0/perlunicode.html#User-Defined-Case-Mappings-%28for-serious-hackers-only%29>
=head2 Character Encodings for Input and Output
@@ -1068,41 +975,41 @@ and the section numbers refer to the Unicode Technical Standard #18,
Level 1 - Basic Unicode Support
- RL1.1 Hex Notation - done [1]
- RL1.2 Properties - done [2][3]
- RL1.2a Compatibility Properties - done [4]
- RL1.3 Subtraction and Intersection - MISSING [5]
- RL1.4 Simple Word Boundaries - done [6]
- RL1.5 Simple Loose Matches - done [7]
- RL1.6 Line Boundaries - MISSING [8][9]
- RL1.7 Supplementary Code Points - done [10]
-
- [1] \x{...}
- [2] \p{...} \P{...}
- [3] supports not only minimal list, but all Unicode character
- properties (see L</Unicode Character Properties>)
- [4] \d \D \s \S \w \W \X [:prop:] [:^prop:]
- [5] can use regular expression look-ahead [a] or
- user-defined character properties [b] to emulate set
- operations
- [6] \b \B
- [7] note that Perl does Full case-folding in matching (but with
- bugs), not Simple: for example U+1F88 is equivalent to
- U+1F00 U+03B9, not with 1F80. This difference matters
- mainly for certain Greek capital letters with certain
- modifiers: the Full case-folding decomposes the letter,
- while the Simple case-folding would map it to a single
- character.
- [8] should do ^ and $ also on U+000B (\v in C), FF (\f), CR
- (\r), CRLF (\r\n), NEL (U+0085), LS (U+2028), and PS
- (U+2029); should also affect <>, $., and script line
- numbers; should not split lines within CRLF [c] (i.e. there
- is no empty line between \r and \n)
- [9] Linebreaking conformant with UAX#14 "Unicode Line Breaking
- Algorithm" is available through the Unicode::LineBreaking
- module.
- [10] UTF-8/UTF-EBDDIC used in Perl allows not only U+10000 to
- U+10FFFF but also beyond U+10FFFF
+ RL1.1 Hex Notation - done [1]
+ RL1.2 Properties - done [2][3]
+ RL1.2a Compatibility Properties - done [4]
+ RL1.3 Subtraction and Intersection - MISSING [5]
+ RL1.4 Simple Word Boundaries - done [6]
+ RL1.5 Simple Loose Matches - done [7]
+ RL1.6 Line Boundaries - MISSING [8][9]
+ RL1.7 Supplementary Code Points - done [10]
+
+ [1] \x{...}
+ [2] \p{...} \P{...}
+ [3] supports not only minimal list, but all Unicode character
+ properties (see Unicode Character Properties above)
+ [4] \d \D \s \S \w \W \X [:prop:] [:^prop:]
+ [5] can use regular expression look-ahead [a] or
+ user-defined character properties [b] to emulate set
+ operations
+ [6] \b \B
+ [7] note that Perl does Full case-folding in matching (but with
+ bugs), not Simple: for example U+1F88 is equivalent to
+ U+1F00 U+03B9, instead of just U+1F80. This difference
+ matters mainly for certain Greek capital letters with certain
+ modifiers: the Full case-folding decomposes the letter,
+ while the Simple case-folding would map it to a single
+ character.
+ [8] should do ^ and $ also on U+000B (\v in C), FF (\f), CR
+ (\r), CRLF (\r\n), NEL (U+0085), LS (U+2028), and PS
+ (U+2029); should also affect <>, $., and script line
+ numbers; should not split lines within CRLF [c] (i.e. there
+ is no empty line between \r and \n)
+ [9] Linebreaking conformant with UAX#14 "Unicode Line Breaking
+ Algorithm" is available through the Unicode::LineBreaking
+ module.
+ [10] UTF-8/UTF-EBDDIC used in Perl allows not only U+10000 to
+ U+10FFFF but also beyond U+10FFFF
[a] You can mimic class subtraction using lookahead.
For example, what UTS#18 might write as
@@ -1120,7 +1027,7 @@ But in this particular example, you probably really want
which will match assigned characters known to be part of the Greek script.
-Also see the Unicode::Regex::Set module, it does implement the full
+Also see the L<Unicode::Regex::Set> module; it does implement the full
UTS#18 grouping, intersection, union, and removal (subtraction) syntax.
[b] '+' for union, '-' for removal (set-difference), '&' for intersection
@@ -1132,46 +1039,43 @@ UTS#18 grouping, intersection, union, and removal (subtraction) syntax.
Level 2 - Extended Unicode Support
- RL2.1 Canonical Equivalents - MISSING [10][11]
- RL2.2 Default Grapheme Clusters - MISSING [12]
- RL2.3 Default Word Boundaries - MISSING [14]
- RL2.4 Default Loose Matches - MISSING [15]
- RL2.5 Name Properties - MISSING [16]
- RL2.6 Wildcard Properties - MISSING
+ RL2.1 Canonical Equivalents - MISSING [10][11]
+ RL2.2 Default Grapheme Clusters - MISSING [12]
+ RL2.3 Default Word Boundaries - MISSING [14]
+ RL2.4 Default Loose Matches - MISSING [15]
+ RL2.5 Name Properties - DONE
+ RL2.6 Wildcard Properties - MISSING
- [10] see UAX#15 "Unicode Normalization Forms"
- [11] have Unicode::Normalize but not integrated to regexes
- [12] have \X but we don't have a "Grapheme Cluster Mode"
- [14] see UAX#29, Word Boundaries
- [15] see UAX#21 "Case Mappings"
- [16] missing loose match [e]
-
-[e] C<\N{...}> allows namespaces (see L<charnames>).
+ [10] see UAX#15 "Unicode Normalization Forms"
+ [11] have Unicode::Normalize but not integrated to regexes
+ [12] have \X but we don't have a "Grapheme Cluster Mode"
+ [14] see UAX#29, Word Boundaries
+ [15] This is covered in Chapter 3.13 (in Unicode 6.0)
=item *
Level 3 - Tailored Support
- RL3.1 Tailored Punctuation - MISSING
- RL3.2 Tailored Grapheme Clusters - MISSING [17][18]
- RL3.3 Tailored Word Boundaries - MISSING
- RL3.4 Tailored Loose Matches - MISSING
- RL3.5 Tailored Ranges - MISSING
- RL3.6 Context Matching - MISSING [19]
- RL3.7 Incremental Matches - MISSING
+ RL3.1 Tailored Punctuation - MISSING
+ RL3.2 Tailored Grapheme Clusters - MISSING [17][18]
+ RL3.3 Tailored Word Boundaries - MISSING
+ RL3.4 Tailored Loose Matches - MISSING
+ RL3.5 Tailored Ranges - MISSING
+ RL3.6 Context Matching - MISSING [19]
+ RL3.7 Incremental Matches - MISSING
( RL3.8 Unicode Set Sharing )
- RL3.9 Possible Match Sets - MISSING
- RL3.10 Folded Matching - MISSING [20]
- RL3.11 Submatchers - MISSING
-
- [17] see UAX#10 "Unicode Collation Algorithms"
- [18] have Unicode::Collate but not integrated to regexes
- [19] have (?<=x) and (?=x), but look-aheads or look-behinds
- should see outside of the target substring
- [20] need insensitive matching for linguistic features other
- than case; for example, hiragana to katakana, wide and
- narrow, simplified Han to traditional Han (see UTR#30
- "Character Foldings")
+ RL3.9 Possible Match Sets - MISSING
+ RL3.10 Folded Matching - MISSING [20]
+ RL3.11 Submatchers - MISSING
+
+ [17] see UAX#10 "Unicode Collation Algorithms"
+ [18] have Unicode::Collate but not integrated to regexes
+ [19] have (?<=x) and (?=x), but look-aheads or look-behinds
+ should see outside of the target substring
+ [20] need insensitive matching for linguistic features other
+ than case; for example, hiragana to katakana, wide and
+ narrow, simplified Han to traditional Han (see UTR#30
+ "Character Foldings")
=back
@@ -1192,14 +1096,14 @@ encoding. For ASCII (and we really do mean 7-bit ASCII, not another
The following table is from Unicode 3.2.
- Code Points 1st Byte 2nd Byte 3rd Byte 4th Byte
+ Code Points 1st Byte 2nd Byte 3rd Byte 4th Byte
U+0000..U+007F 00..7F
U+0080..U+07FF * C2..DF 80..BF
U+0800..U+0FFF E0 * A0..BF 80..BF
U+1000..U+CFFF E1..EC 80..BF 80..BF
U+D000..U+D7FF ED 80..9F 80..BF
- U+D800..U+DFFF +++++++ utf16 surrogates, not legal utf8 +++++++
+ U+D800..U+DFFF +++++ utf16 surrogates, not legal utf8 +++++
U+E000..U+FFFF EE..EF 80..BF 80..BF
U+10000..U+3FFFF F0 * 90..BF 80..BF 80..BF
U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF
@@ -1213,12 +1117,12 @@ explicitly forbidden, and the shortest possible encoding should always be used
Another way to look at it is via bits:
- Code Points 1st Byte 2nd Byte 3rd Byte 4th Byte
+ Code Points 1st Byte 2nd Byte 3rd Byte 4th Byte
- 0aaaaaaa 0aaaaaaa
- 00000bbbbbaaaaaa 110bbbbb 10aaaaaa
- ccccbbbbbbaaaaaa 1110cccc 10bbbbbb 10aaaaaa
- 00000dddccccccbbbbbbaaaaaa 11110ddd 10cccccc 10bbbbbb 10aaaaaa
+ 0aaaaaaa 0aaaaaaa
+ 00000bbbbbaaaaaa 110bbbbb 10aaaaaa
+ ccccbbbbbbaaaaaa 1110cccc 10bbbbbb 10aaaaaa
+ 00000dddccccccbbbbbbaaaaaa 11110ddd 10cccccc 10bbbbbb 10aaaaaa
As you can see, the continuation bytes all begin with "10", and the
leading bits of the start byte tell how many bytes there are in the
@@ -1467,55 +1371,69 @@ readdir, readlink
=head2 The "Unicode Bug"
-The term, the "Unicode bug" has been applied to an inconsistency
+The term, "Unicode bug" has been applied to an inconsistency
on ASCII platforms with the
Unicode code points in the Latin-1 Supplement block, that
is, between 128 and 255. Without a locale specified, unlike all other
characters or code points, these characters have very different semantics in
byte semantics versus character semantics, unless
-C<use feature 'unicode_strings'> is specified.
-(The lesson here is to specify C<unicode_strings> to avoid the
-headaches.)
+C<use feature 'unicode_strings'> is specified, directly or indirectly.
+(It is indirectly specified by a C<use v5.12> or higher.)
-In character semantics they are interpreted as Unicode code points, which means
+In character semantics these upper-Latin1 characters are interpreted as
+Unicode code points, which means
they have the same semantics as Latin-1 (ISO-8859-1).
-In byte semantics, they are considered to be unassigned characters, meaning
-that the only semantics they have is their ordinal numbers, and that they are
+In byte semantics (without C<unicode_strings>), they are considered to
+be unassigned characters, meaning that the only semantics they have is
+their ordinal numbers, and that they are
not members of various character classes. None are considered to match C<\w>
for example, but all match C<\W>.
-The behavior is known to have effects on these areas:
+Perl 5.12.0 added C<unicode_strings> to force character semantics on
+these code points in some circumstances, which fixed portions of the
+bug; Perl 5.14.0 fixed almost all of it; and Perl 5.16.0 fixed the
+remainder (so far as we know, anyway). The lesson here is to enable
+C<unicode_strings> to avoid the headaches described below.
+
+The old, problematic behavior affects these areas:
=over 4
=item *
Changing the case of a scalar, that is, using C<uc()>, C<ucfirst()>, C<lc()>,
-and C<lcfirst()>, or C<\L>, C<\U>, C<\u> and C<\l> in regular expression
-substitutions.
+and C<lcfirst()>, or C<\L>, C<\U>, C<\u> and C<\l> in double-quotish
+contexts, such as regular expression substitutions.
+Under C<unicode_strings> starting in Perl 5.12.0, character semantics are
+generally used. See L<perlfunc/lc> for details on how this works
+in combination with various other pragmas.
=item *
-Using caseless (C</i>) regular expression matching
+Using caseless (C</i>) regular expression matching.
+Starting in Perl 5.14.0, regular expressions compiled within
+the scope of C<unicode_strings> use character semantics
+even when executed or compiled into larger
+regular expressions outside the scope.
=item *
Matching any of several properties in regular expressions, namely C<\b>,
C<\B>, C<\s>, C<\S>, C<\w>, C<\W>, and all the Posix character classes
I<except> C<[[:ascii:]]>.
+Starting in Perl 5.14.0, regular expressions compiled within
+the scope of C<unicode_strings> use character semantics
+even when executed or compiled into larger
+regular expressions outside the scope.
=item *
-In C<quotemeta> or its inline equivalent C<\Q>, no characters
-code points above 127 are quoted in UTF-8 encoded strings, but in
-byte encoded strings, code points between 128-255 are always quoted.
-
-=item *
-
-User-defined case change mappings. You can create a C<ToUpper()> function, for
-example, which overrides Perl's built-in case mappings. The scalar must be
-encoded in utf8 for your function to actually be invoked.
+In C<quotemeta> or its inline equivalent C<\Q>, no code points above 127
+are quoted in UTF-8 encoded strings, but in byte encoded strings, code
+points between 128-255 are always quoted.
+Starting in Perl 5.16.0, consistent quoting rules are used within the
+scope of C<unicode_strings>, as described in L<perlfunc/quotemeta>.
=back
@@ -1544,21 +1462,9 @@ ASCII range (except in a locale), along with Perl's desire to add Unicode
support seamlessly. The result wasn't seamless: these characters were
orphaned.
-Starting in Perl 5.14, C<use feature 'unicode_strings'> can be used to
-cause Perl to use Unicode semantics on all string operations within the
-scope of the feature subpragma. Regular expressions compiled in its
-scope retain that behavior even when executed or compiled into larger
-regular expressions outside the scope. (The pragma does not, however,
-affect the C<quotemeta> behavior. Nor does it affect the deprecated
-user-defined case changing operations--these still require a UTF-8
-encoded string to operate.)
-
-In Perl 5.12, the subpragma affected casing changes, but not regular
-expressions. See L<perlfunc/lc> for details on how this pragma works in
-combination with various others for casing.
-
-For earlier Perls, or when a string is passed to a function outside the
-subpragma's scope, a workaround is to always call C<utf8::upgrade($string)>,
+For Perls earlier than those described above, or when a string is passed
+to a function outside the subpragma's scope, a workaround is to always
+call C<utf8::upgrade($string)>,
or to use the standard module L<Encode>. Also, a scalar that has any characters
whose ordinal is above 0x100, or which were specified using either of the
C<\N{...}> notations, will automatically have character semantics.
@@ -1608,7 +1514,8 @@ pointing after the UTF-8 bytes. It works appropriately on EBCDIC machines.
=item *
-C<utf8_to_uvchr(buf, lenp)> reads UTF-8 encoded bytes from a buffer and
+C<utf8_to_uvchr_buf(buf, bufend, lenp)> reads UTF-8 encoded bytes from a
+buffer and
returns the Unicode character code point and, optionally, the length of
the UTF-8 byte sequence. It works appropriately on EBCDIC machines.
@@ -1632,13 +1539,14 @@ designed to be a one-way street).
=item *
-C<is_utf8_char(s)> returns true if the pointer points to a valid UTF-8
-character.
+C<is_utf8_string(buf, len)> returns true if C<len> bytes of the buffer
+are valid UTF-8.
=item *
-C<is_utf8_string(buf, len)> returns true if C<len> bytes of the buffer
-are valid UTF-8.
+C<is_utf8_char(s)> returns true if the pointer points to a valid UTF-8
+character. However, this function should not be used because of
+security concerns. Instead, use C<is_utf8_string()>.
=item *
@@ -1693,14 +1601,7 @@ Download the files in the desired version of Unicode from the Unicode web
site L<http://www.unicode.org>). These should replace the existing files in
F<lib/unicore> in the Perl source tree. Follow the instructions in
F<README.perl> in that directory to change some of their names, and then build
-perl (see F<INSTALL>).
-
-It is even possible to copy the built files to a different directory, and then
-change F<utf8_heavy.pl> in the directory C<$Config{privlib}> to point to the
-new directory, or maybe make a copy of that directory before making the change,
-and using C<@INC> or the C<-I> run-time flag to switch between versions at will
-(but because of caching, not in the middle of a process), but all this is
-beyond the scope of these instructions.
+perl (see L<INSTALL>).
=head1 BUGS
@@ -1815,7 +1716,7 @@ working with 5.6, you will need some of the following adjustments to
your code. The examples are written such that the code will continue
to work under 5.6, so you should be safe to try them out.
-=over 4
+=over 3
=item *
diff --git a/Master/tlpkg/tlperl/lib/pods/perlunifaq.pod b/Master/tlpkg/tlperl/lib/pods/perlunifaq.pod
index 9fd2b380567..9bd103c9ac2 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlunifaq.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlunifaq.pod
@@ -274,7 +274,8 @@ Instead of C<decode> and C<encode>, you could use C<_utf8_on> and C<_utf8_off>,
but this is considered bad style. Especially C<_utf8_on> can be dangerous, for
the same reason that C<:utf8> can.
-There are some shortcuts for oneliners; see C<-C> in L<perlrun>.
+There are some shortcuts for oneliners;
+see L<-C|perlrun/-C [numberE<sol>list]> in L<perlrun>.
=head2 What's the difference between C<UTF-8> and C<utf8>?
diff --git a/Master/tlpkg/tlperl/lib/pods/perluniintro.pod b/Master/tlpkg/tlperl/lib/pods/perluniintro.pod
index 3fbff0024fd..8ce4b7b4464 100644
--- a/Master/tlpkg/tlperl/lib/pods/perluniintro.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perluniintro.pod
@@ -93,25 +93,42 @@ character. Firstly, there are unallocated code points within
otherwise used blocks. Secondly, there are special Unicode control
characters that do not represent true characters.
-A common myth about Unicode is that it is "16-bit", that is,
-Unicode is only represented as C<0x10000> (or 65536) characters from
-C<0x0000> to C<0xFFFF>. B<This is untrue.> Since Unicode 2.0 (July
+When Unicode was first conceived, it was thought that all the world's
+characters could be represented using a 16-bit word; that is a maximum of
+C<0x10000> (or 65536) characters from C<0x0000> to C<0xFFFF> would be
+needed. This soon proved to be false, and since Unicode 2.0 (July
1996), Unicode has been defined all the way up to 21 bits (C<0x10FFFF>),
-and since Unicode 3.1 (March 2001), characters have been defined
-beyond C<0xFFFF>. The first C<0x10000> characters are called the
-I<Plane 0>, or the I<Basic Multilingual Plane> (BMP). With Unicode
-3.1, 17 (yes, seventeen) planes in all were defined--but they are
-nowhere near full of defined characters, yet.
-
-Another myth is about Unicode blocks--that they have something to
-do with languages--that each block would define the characters used
-by a language or a set of languages. B<This is also untrue.>
+and Unicode 3.1 (March 2001) defined the first characters above C<0xFFFF>.
+The first C<0x10000> characters are called the I<Plane 0>, or the
+I<Basic Multilingual Plane> (BMP). With Unicode 3.1, 17 (yes,
+seventeen) planes in all were defined--but they are nowhere near full of
+defined characters, yet.
+
+When a new language is being encoded, Unicode generally will choose a
+C<block> of consecutive unallocated code points for its characters. So
+far, the number of code points in these blocks has always been evenly
+divisible by 16. Extras in a block, not currently needed, are left
+unallocated, for future growth. But there have been occasions when
+a later relase needed more code points than the available extras, and a
+new block had to allocated somewhere else, not contiguous to the initial
+one, to handle the overflow. Thus, it became apparent early on that
+"block" wasn't an adequate organizing principal, and so the C<Script>
+property was created. (Later an improved script property was added as
+well, the C<Script_Extensions> property.) Those code points that are in
+overflow blocks can still
+have the same script as the original ones. The script concept fits more
+closely with natural language: there is C<Latin> script, C<Greek>
+script, and so on; and there are several artificial scripts, like
+C<Common> for characters that are used in multiple scripts, such as
+mathematical symbols. Scripts usually span varied parts of several
+blocks. For more information about scripts, see L<perlunicode/Scripts>.
The division into blocks exists, but it is almost completely
-accidental--an artifact of how the characters have been and
-still are allocated. Instead, there is a concept called I<scripts>, which is
-more useful: there is C<Latin> script, C<Greek> script, and so on. Scripts
-usually span varied parts of several blocks. For more information about
-scripts, see L<perlunicode/Scripts>.
+accidental--an artifact of how the characters have been and still are
+allocated. (Note that this paragraph has oversimplified things for the
+sake of this being an introduction. Unicode doesn't really encode
+languages, but the writing systems for them--their scripts; and one
+script can be used by many languages. Unicode also encodes things that
+aren't really about languages, such as symbols like C<BAGGAGE CLAIM>.)
The Unicode code points are just abstract numbers. To input and
output these abstract numbers, the numbers must be I<encoded> or
@@ -135,7 +152,8 @@ problems of the initial Unicode implementation, but for example
regular expressions still do not work with Unicode in 5.6.1.
Perl 5.14.0 is the first release where Unicode support is
(almost) seamlessly integrable without some gotchas (the exception being
-some differences in L<quotemeta|perlfunc/quotemeta>). To enable this
+some differences in L<quotemeta|perlfunc/quotemeta>, which is fixed
+starting in Perl 5.16.0). To enable this
seamless support, you should C<use feature 'unicode_strings'> (which is
automatically selected if you C<use 5.012> or higher). See L<feature>.
(5.14 also fixes a number of bugs and departures from the Unicode
@@ -253,10 +271,9 @@ always produced. If you want to force the production of Unicode
characters regardless of the numeric value, use C<pack("U", ...)>
instead of C<\x..>, C<\x{...}>, or C<chr()>.
-You can also use the C<charnames> pragma to invoke characters
+You can invoke characters
by name in double-quoted strings:
- use charnames ':full';
my $arabic_alef = "\N{ARABIC LETTER ALEF}";
And, as mentioned above, you can also C<pack()> numbers into Unicode
@@ -287,8 +304,8 @@ will work on the Unicode characters (see L<perlunicode> and L<perlretut>).
Note that Perl considers grapheme clusters to be separate characters, so for
example
- use charnames ':full';
- print length("\N{LATIN CAPITAL LETTER A}\N{COMBINING ACUTE ACCENT}"), "\n";
+ print length("\N{LATIN CAPITAL LETTER A}\N{COMBINING ACUTE ACCENT}"),
+ "\n";
will print 2, not 1. The only exception is that regular expressions
have C<\X> for matching an extended grapheme cluster. (Thus C<\X> in a
@@ -459,7 +476,7 @@ displayed as C<\x..>, and the rest of the characters as themselves:
join("",
map { $_ > 255 ? # if wide character...
sprintf("\\x{%04X}", $_) : # \x{...}
- chr($_) =~ /[[:cntrl:]]/ ? # else if control character ...
+ chr($_) =~ /[[:cntrl:]]/ ? # else if control character...
sprintf("\\x%02X", $_) : # \x..
quotemeta(chr($_)) # else quoted or as themselves
} unpack("W*", $_[0])); # unpack Unicode characters
@@ -675,7 +692,7 @@ and the C<length()> function:
my $unicode = chr(0x100);
print length($unicode), "\n"; # will print 1
require Encode;
- print length(Encode::encode_utf8($unicode)), "\n"; # will print 2
+ print length(Encode::encode_utf8($unicode)),"\n"; # will print 2
use bytes;
print length($unicode), "\n"; # will also print 2
# (the 0xC4 0x80 of the UTF-8)
@@ -785,17 +802,19 @@ L<http://www.cl.cam.ac.uk/~mgk25/unicode.html>
How Does Unicode Work With Traditional Locales?
-Perl tries to keep the two separated. Code points that are above 255
-are treated as Unicode; those below 256, generally as locale. This
-works reasonably well except in some case-insensitive regular expression
-pattern matches that in Unicode would cross the 255/256 boundary. These
-are disallowed.
-Also, the C<\p{}> and C<\N{}> constructs silently assume Unicode values
-even for code points below 256.
-See also L<perlrun> for the
-description of the C<-C> switch and its environment counterpart,
-C<$ENV{PERL_UNICODE}> to see how to enable various Unicode features,
-for example by using locale settings.
+Starting in Perl 5.16, you can specify
+
+ use locale ':not_characters';
+
+to get Perl to work well with tradtional locales. The catch is that you
+have to translate from the locale character set to/from Unicode
+yourself. See L</Unicode IE<sol>O> above for how to
+
+ use open ':locale';
+
+to accomplish this, but full details are in L<perllocale/Unicode and
+UTF-8>, including gotchas that happen if you don't specifiy
+C<:not_characters>.
=back
diff --git a/Master/tlpkg/tlperl/lib/pods/perluniprops.pod b/Master/tlpkg/tlperl/lib/pods/perluniprops.pod
index 2968f5bbda9..91bf37c8284 100644
--- a/Master/tlpkg/tlperl/lib/pods/perluniprops.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perluniprops.pod
@@ -2,7 +2,7 @@
# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
# This file is machine-generated by mktables from the Unicode
-# database, Version 6.0.0. Any changes made here will be lost!
+# database, Version 6.1.0. Any changes made here will be lost!
To change this file, edit mktables instead.
@@ -11,52 +11,67 @@ To change this file, edit mktables instead.
=head1 NAME
-perluniprops - Index of Unicode Version 6.0.0 properties in Perl
+perluniprops - Index of Unicode Version 6.1.0 character properties in Perl
=head1 DESCRIPTION
-There are many properties in Unicode, and Perl provides access to almost all of
-them, as well as some additional extensions and short-cut synonyms.
+This document provides information about the portion of the Unicode database
+that deals with character properties, that is the portion that is defined on
+single code points. (L</Other information in the Unicode data base>
+below briefly mentions other data that Unicode provides.)
-And just about all of the few that aren't accessible through the Perl
-core are accessible through the modules: Unicode::Normalize and
-Unicode::UCD, and for Unihan properties, via the CPAN module Unicode::Unihan.
+Perl can provide access to all non-provisional Unicode character properties,
+though not all are enabled by default. The omitted ones are the Unihan
+properties (accessible via the CPAN module L<Unicode::Unihan>) and certain
+deprecated or Unicode-internal properties. (An installation may choose to
+recompile Perl's tables to change this. See L<Unicode character
+properties that are NOT accepted by Perl>.)
+
+For most purposes, access to Unicode properties from the Perl core is through
+regular expression matches, as described in the next section.
+For some special purposes, and to access the properties that are not suitable
+for regular expression matching, all the Unicode character properties that
+Perl handles are accessible via the standard L<Unicode::UCD> module, as
+described in the section L</Properties accessible through Unicode::UCD>.
+
+Perl also provides some additional extensions and short-cut synonyms
+for Unicode properties.
This document merely lists all available properties and does not attempt to
explain what each property really means. There is a brief description of each
-Perl extension. There is some detail about Blocks, Scripts, General_Category,
+Perl extension; see L<perlunicode/Other Properties> for more information on
+these. There is some detail about Blocks, Scripts, General_Category,
and Bidi_Class in L<perlunicode>, but to find out about the intricacies of the
-Unicode properties, refer to the Unicode standard. A good starting place is
-L<http://www.unicode.org/reports/tr44/>. More information on the Perl extensions is in
-L<perlunicode/Other Properties>.
+official Unicode properties, refer to the Unicode standard. A good starting
+place is L<http://www.unicode.org/reports/tr44/>.
Note that you can define your own properties; see
L<perlunicode/"User-Defined Character Properties">.
-=head1 Properties accessible through \p{} and \P{}
+=head1 Properties accessible through C<\p{}> and C<\P{}>
-The Perl regular expression \p{} and \P{} constructs give access to most of
-the Unicode character properties. The table below shows all these constructs,
-both single and compound forms.
+The Perl regular expression C<\p{}> and C<\P{}> constructs give access to
+most of the Unicode character properties. The table below shows all these
+constructs, both single and compound forms.
B<Compound forms> consist of two components, separated by an equals sign or a
colon. The first component is the property name, and the second component is
the particular value of the property to match against, for example,
-'\p{Script: Greek}' and '\p{Script=Greek}' both mean to match characters
+C<\p{Script: Greek}> and C<\p{Script=Greek}> both mean to match characters
whose Script property is Greek.
-B<Single forms>, like '\p{Greek}', are mostly Perl-defined shortcuts for
+B<Single forms>, like C<\p{Greek}>, are mostly Perl-defined shortcuts for
their equivalent compound forms. The table shows these equivalences. (In our
-example, '\p{Greek}' is a just a shortcut for '\p{Script=Greek}'.)
+example, C<\p{Greek}> is a just a shortcut for C<\p{Script=Greek}>.)
There are also a few Perl-defined single forms that are not shortcuts for a
-compound form. One such is \p{Word}. These are also listed in the table.
+compound form. One such is C<\p{Word}>. These are also listed in the table.
In parsing these constructs, Perl always ignores Upper/lower case differences
-everywhere within the {braces}. Thus '\p{Greek}' means the same thing as
-'\p{greek}'. But note that changing the case of the 'p' or 'P' before the
-left brace completely changes the meaning of the construct, from "match" (for
-'\p{}') to "doesn't match" (for '\P{}'). Casing in this document is for
-improved legibility.
+everywhere within the {braces}. Thus C<\p{Greek}> means the same thing as
+C<\p{greek}>. But note that changing the case of the C<"p"> or C<"P"> before
+the left brace completely changes the meaning of the construct, from "match"
+(for C<\p{}>) to "doesn't match" (for C<\P{}>). Casing in this document is
+for improved legibility.
Also, white space, hyphens, and underscores are also normally ignored
everywhere between the {braces}, and hence can be freely added or removed
@@ -66,7 +81,7 @@ means that tighter (stricter) rules are used for that entry:
=over 4
-=item Single form (\p{name}) tighter rules:
+=item Single form (C<\p{name}>) tighter rules:
White space, hyphens, and underscores ARE significant
except for:
@@ -82,7 +97,7 @@ except for:
That means, for example, that you can freely add or remove white space
adjacent to (but within) the braces without affecting the meaning.
-=item Compound form (\p{name=value} or \p{name:value}) tighter rules:
+=item Compound form (C<\p{name=value}> or C<\p{name:value}>) tighter rules:
The tighter rules given above for the single form apply to everything to the
right of the colon or equals; the looser rules still apply to everything to
@@ -98,14 +113,9 @@ There are several varieties of obsolescence:
=over 4
-=item Obsolete
-
-Properties marked with an 'B<O>' in the table are considered
-obsolete.
-
=item Stabilized
-Obsolete properties may be stabilized. Such a determination does not indicate
+A property may be stabilized. Such a determination does not indicate
that the property should or should not be used; instead it is a declaration
that the property will not be maintained nor extended for newly encoded
characters. Such properties are marked with an 'B<S>' in the
@@ -113,7 +123,7 @@ table.
=item Deprecated
-An obsolete property may be deprecated, perhaps because its original intent
+A property may be deprecated, perhaps because its original intent
has been replaced by another property, or because its specification was
somehow defective. This means that its use is strongly
discouraged, so much so that a warning will be issued if used, unless the
@@ -129,26 +139,38 @@ earlier Unicode releases.
A deprecated property may be made unavailable in a future Perl version, so it
is best to move away from them.
-=back
-
-Some Perl extensions are present for backwards compatibility and are
-discouraged from being used, but not obsolete. An 'B<X>'
-flags each such entry in the table.
+A deprecated property may also be stabilized, but this fact is not shown.
+=item Obsolete
-Matches in the Block property have shortcuts that begin with 'In_'. For
-example, \p{Block=Latin1} can be written as \p{In_Latin1}. For backward
-compatibility, if there is no conflict with another shortcut, these may also
-be written as \p{Latin1} or \p{Is_Latin1}. But, N.B., there are numerous
-such conflicting shortcuts. Use of these forms for Block is discouraged, and
-are flagged as such, not only because of the potential confusion as to what is
-meant, but also because a later release of Unicode may preempt the shortcut,
-and your program would no longer be correct. Use the 'In_' form instead to
-avoid this, or even more clearly, use the compound form, e.g.,
-\p{blk:latin1}. See L<perlunicode/"Blocks"> for more information about this.
+Properties marked with an 'B<O>' in the table are considered (plain)
+obsolete. Generally this designation is given to properties that Unicode once
+used for internal purposes (but not any longer).
+=back
-The table below has two columns. The left column contains the \p{}
+Some Perl extensions are present for backwards compatibility and are
+discouraged from being used, but are not obsolete. An 'B<X>'
+flags each such entry in the table. Future Unicode versions may force
+some of these extensions to be removed without warning, replaced by another
+property with the same name that means something different. Use the
+equivalent shown instead.
+
+
+Matches in the Block property have shortcuts that begin with "In_". For
+example, C<\p{Block=Latin1}> can be written as C<\p{In_Latin1}>. For
+backward compatibility, if there is no conflict with another shortcut, these
+may also be written as C<\p{Latin1}> or C<\p{Is_Latin1}>. But, N.B., there
+are numerous such conflicting shortcuts. Use of these forms for Block is
+discouraged, and are flagged as such, not only because of the potential
+confusion as to what is meant, but also because a later release of Unicode may
+preempt the shortcut, and your program would no longer be correct. Use the
+"In_" form instead to avoid this, or even more clearly, use the compound form,
+e.g., C<\p{blk:latin1}>. See L<perlunicode/"Blocks"> for more information
+about this.
+
+
+The table below has two columns. The left column contains the C<\p{}>
constructs to look up, possibly preceded by the flags mentioned above; and
the right column contains information about them, like a description, or
synonyms. It shows both the single and compound forms for each property that
@@ -177,7 +199,7 @@ in the second column. Under case-insensitive matching they match the
same code pode points as the property "other_property".
There is no description given for most non-Perl defined properties (See
-http://www.unicode.org/reports/tr44/ for that).
+L<http://www.unicode.org/reports/tr44/> for that).
For compactness, 'B<*>' is used as a wildcard instead of showing all possible
combinations. For example, entries like:
@@ -189,10 +211,11 @@ for the latter is also valid for the former. Similarly,
\p{Is_*} \p{*}
-means that if and only if, for example, \p{Foo} exists, then \p{Is_Foo} and
-\p{IsFoo} are also valid and all mean the same thing. And similarly,
-\p{Foo=Bar} means the same as \p{Is_Foo=Bar} and \p{IsFoo=Bar}. '*' here
-is restricted to something not beginning with an underscore.
+means that if and only if, for example, C<\p{Foo}> exists, then
+C<\p{Is_Foo}> and C<\p{IsFoo}> are also valid and all mean the same thing.
+And similarly, C<\p{Foo=Bar}> means the same as C<\p{Is_Foo=Bar}> and
+C<\p{IsFoo=Bar}>. "*" here is restricted to something not beginning with an
+underscore.
Also, in binary properties, 'Yes', 'T', and 'True' are all synonyms for 'Y'.
And 'No', 'F', and 'False' are all synonyms for 'N'. The table shows 'Y*' and
@@ -206,11 +229,11 @@ binary properties have both single and compound forms available.
Note that all non-essential underscores are removed in the display of the
short names below.
-B<Summary legend:>
+B<Legend summary:>
=over 4
-=item B<*> is a wild-card
+=item Z<>B<*> is a wild-card
=item B<(\d+)> in the info column gives the number of code points matched by
this property.
@@ -223,92 +246,143 @@ this property.
=item B<T> means tighter (stricter) name matching applies.
-=item B<X> means use of this form is discouraged.
+=item B<X> means use of this form is discouraged, and may not be
+stable.
=back
NAME INFO
X \p{Aegean_Numbers} \p{Block=Aegean_Numbers} (64)
- T \p{Age: 1.1} Code point's usage introduced in version
+ T \p{Age: 1.1} \p{Age=V1_1} (33_979)
+ T \p{Age: 2.0} \p{Age=V2_0} (144_521)
+ T \p{Age: 2.1} \p{Age=V2_1} (2)
+ T \p{Age: 3.0} \p{Age=V3_0} (10_307)
+ T \p{Age: 3.1} \p{Age=V3_1} (44_978)
+ T \p{Age: 3.2} \p{Age=V3_2} (1016)
+ T \p{Age: 4.0} \p{Age=V4_0} (1226)
+ T \p{Age: 4.1} \p{Age=V4_1} (1273)
+ T \p{Age: 5.0} \p{Age=V5_0} (1369)
+ T \p{Age: 5.1} \p{Age=V5_1} (1624)
+ T \p{Age: 5.2} \p{Age=V5_2} (6648)
+ T \p{Age: 6.0} \p{Age=V6_0} (2088)
+ T \p{Age: 6.1} \p{Age=V6_1} (732)
+ \p{Age: NA} \p{Age=Unassigned} (864_349)
+ \p{Age: Unassigned} Code point's usage has not been assigned
+ in any Unicode release thus far. (Short:
+ \p{Age=NA}) (864_349)
+ \p{Age: V1_1} Code point's usage introduced in version
1.1 (33_979)
- T \p{Age: 2.0} Code point's usage was introduced in
+ \p{Age: V2_0} Code point's usage was introduced in
version 2.0; See also Property
'Present_In' (144_521)
- T \p{Age: 2.1} Code point's usage was introduced in
+ \p{Age: V2_1} Code point's usage was introduced in
version 2.1; See also Property
'Present_In' (2)
- T \p{Age: 3.0} Code point's usage was introduced in
+ \p{Age: V3_0} Code point's usage was introduced in
version 3.0; See also Property
'Present_In' (10_307)
- T \p{Age: 3.1} Code point's usage was introduced in
+ \p{Age: V3_1} Code point's usage was introduced in
version 3.1; See also Property
'Present_In' (44_978)
- T \p{Age: 3.2} Code point's usage was introduced in
+ \p{Age: V3_2} Code point's usage was introduced in
version 3.2; See also Property
'Present_In' (1016)
- T \p{Age: 4.0} Code point's usage was introduced in
+ \p{Age: V4_0} Code point's usage was introduced in
version 4.0; See also Property
'Present_In' (1226)
- T \p{Age: 4.1} Code point's usage was introduced in
+ \p{Age: V4_1} Code point's usage was introduced in
version 4.1; See also Property
'Present_In' (1273)
- T \p{Age: 5.0} Code point's usage was introduced in
+ \p{Age: V5_0} Code point's usage was introduced in
version 5.0; See also Property
'Present_In' (1369)
- T \p{Age: 5.1} Code point's usage was introduced in
+ \p{Age: V5_1} Code point's usage was introduced in
version 5.1; See also Property
'Present_In' (1624)
- T \p{Age: 5.2} Code point's usage was introduced in
+ \p{Age: V5_2} Code point's usage was introduced in
version 5.2; See also Property
'Present_In' (6648)
- T \p{Age: 6.0} Code point's usage was introduced in
+ \p{Age: V6_0} Code point's usage was introduced in
version 6.0; See also Property
'Present_In' (2088)
- \p{Age: Unassigned} Code point's usage has not been assigned
- in any Unicode release thus far.
- (865_081)
- \p{AHex} \p{ASCII_Hex_Digit} (= \p{ASCII_Hex_Digit=
- Y}) (22)
+ \p{Age: V6_1} Code point's usage was introduced in
+ version 6.1; See also Property
+ 'Present_In' (732)
+ \p{AHex} \p{PosixXDigit} (= \p{ASCII_Hex_Digit=Y})
+ (22)
\p{AHex: *} \p{ASCII_Hex_Digit: *}
- X \p{Alchemical_Symbols} \p{Block=Alchemical_Symbols} (128)
+ X \p{Alchemical} \p{Alchemical_Symbols} (= \p{Block=
+ Alchemical_Symbols}) (128)
+ X \p{Alchemical_Symbols} \p{Block=Alchemical_Symbols} (Short:
+ \p{InAlchemical}) (128)
\p{All} \p{Any} (1_114_112)
- \p{Alnum} Alphabetic and (Decimal) Numeric (101_959)
- \p{Alpha} \p{Alphabetic=Y} (101_539)
+ \p{Alnum} Alphabetic and (decimal) Numeric (102_619)
+ \p{Alpha} \p{Alphabetic=Y} (102_159)
\p{Alpha: *} \p{Alphabetic: *}
- \p{Alphabetic} \p{Alpha} (= \p{Alphabetic=Y}) (101_539)
- \p{Alphabetic: N*} (Short: \p{Alpha=N}, \P{Alpha}) (1_012_573)
- \p{Alphabetic: Y*} (Short: \p{Alpha=Y}, \p{Alpha}) (101_539)
+ \p{Alphabetic} \p{Alpha} (= \p{Alphabetic=Y}) (102_159)
+ \p{Alphabetic: N*} (Short: \p{Alpha=N}, \P{Alpha}) (1_011_953)
+ \p{Alphabetic: Y*} (Short: \p{Alpha=Y}, \p{Alpha}) (102_159)
+ X \p{Alphabetic_PF} \p{Alphabetic_Presentation_Forms} (=
+ \p{Block=Alphabetic_Presentation_Forms})
+ (80)
X \p{Alphabetic_Presentation_Forms} \p{Block=
- Alphabetic_Presentation_Forms} (80)
+ Alphabetic_Presentation_Forms} (Short:
+ \p{InAlphabeticPF}) (80)
+ X \p{Ancient_Greek_Music} \p{Ancient_Greek_Musical_Notation} (=
+ \p{Block=
+ Ancient_Greek_Musical_Notation}) (80)
X \p{Ancient_Greek_Musical_Notation} \p{Block=
- Ancient_Greek_Musical_Notation} (80)
+ Ancient_Greek_Musical_Notation} (Short:
+ \p{InAncientGreekMusic}) (80)
X \p{Ancient_Greek_Numbers} \p{Block=Ancient_Greek_Numbers} (80)
X \p{Ancient_Symbols} \p{Block=Ancient_Symbols} (64)
\p{Any} [\x{0000}-\x{10FFFF}] (1_114_112)
\p{Arab} \p{Arabic} (= \p{Script=Arabic}) (NOT
- \p{Block=Arabic}) (1051)
+ \p{Block=Arabic}) (1234)
\p{Arabic} \p{Script=Arabic} (Short: \p{Arab}; NOT
- \p{Block=Arabic}) (1051)
+ \p{Block=Arabic}) (1234)
+ X \p{Arabic_Ext_A} \p{Arabic_Extended_A} (= \p{Block=
+ Arabic_Extended_A}) (96)
+ X \p{Arabic_Extended_A} \p{Block=Arabic_Extended_A} (Short:
+ \p{InArabicExtA}) (96)
+ X \p{Arabic_Math} \p{Arabic_Mathematical_Alphabetic_Symbols}
+ (= \p{Block=
+ Arabic_Mathematical_Alphabetic_Symbols})
+ (256)
+ X \p{Arabic_Mathematical_Alphabetic_Symbols} \p{Block=
+ Arabic_Mathematical_Alphabetic_Symbols}
+ (Short: \p{InArabicMath}) (256)
+ X \p{Arabic_PF_A} \p{Arabic_Presentation_Forms_A} (=
+ \p{Block=Arabic_Presentation_Forms_A})
+ (688)
+ X \p{Arabic_PF_B} \p{Arabic_Presentation_Forms_B} (=
+ \p{Block=Arabic_Presentation_Forms_B})
+ (144)
X \p{Arabic_Presentation_Forms_A} \p{Block=
- Arabic_Presentation_Forms_A} (688)
+ Arabic_Presentation_Forms_A} (Short:
+ \p{InArabicPFA}) (688)
X \p{Arabic_Presentation_Forms_B} \p{Block=
- Arabic_Presentation_Forms_B} (144)
- X \p{Arabic_Supplement} \p{Block=Arabic_Supplement} (48)
+ Arabic_Presentation_Forms_B} (Short:
+ \p{InArabicPFB}) (144)
+ X \p{Arabic_Sup} \p{Arabic_Supplement} (= \p{Block=
+ Arabic_Supplement}) (48)
+ X \p{Arabic_Supplement} \p{Block=Arabic_Supplement} (Short:
+ \p{InArabicSup}) (48)
\p{Armenian} \p{Script=Armenian} (Short: \p{Armn}; NOT
- \p{Block=Armenian}) (90)
+ \p{Block=Armenian}) (91)
\p{Armi} \p{Imperial_Aramaic} (= \p{Script=
Imperial_Aramaic}) (NOT \p{Block=
Imperial_Aramaic}) (31)
\p{Armn} \p{Armenian} (= \p{Script=Armenian}) (NOT
- \p{Block=Armenian}) (90)
+ \p{Block=Armenian}) (91)
X \p{Arrows} \p{Block=Arrows} (112)
\p{ASCII} \p{Block=Basic_Latin} [[:ASCII:]] (128)
- \p{ASCII_Hex_Digit} \p{ASCII_Hex_Digit=Y} (Short: \p{AHex})
+ \p{ASCII_Hex_Digit} \p{PosixXDigit} (= \p{ASCII_Hex_Digit=Y})
(22)
\p{ASCII_Hex_Digit: N*} (Short: \p{AHex=N}, \P{AHex}) (1_114_090)
\p{ASCII_Hex_Digit: Y*} (Short: \p{AHex=Y}, \p{AHex}) (22)
- \p{Assigned} All assigned code points (248_965)
+ \p{Assigned} All assigned code points (249_697)
\p{Avestan} \p{Script=Avestan} (Short: \p{Avst}; NOT
\p{Block=Avestan}) (61)
\p{Avst} \p{Avestan} (= \p{Script=Avestan}) (NOT
@@ -321,7 +395,10 @@ this property.
\p{Block=Bamum}) (657)
\p{Bamum} \p{Script=Bamum} (Short: \p{Bamu}; NOT
\p{Block=Bamum}) (657)
- X \p{Bamum_Supplement} \p{Block=Bamum_Supplement} (576)
+ X \p{Bamum_Sup} \p{Bamum_Supplement} (= \p{Block=
+ Bamum_Supplement}) (576)
+ X \p{Bamum_Supplement} \p{Block=Bamum_Supplement} (Short:
+ \p{InBamumSup}) (576)
X \p{Basic_Latin} \p{ASCII} (= \p{Block=Basic_Latin}) (128)
\p{Batak} \p{Script=Batak} (Short: \p{Batk}; NOT
\p{Block=Batak}) (56)
@@ -334,10 +411,10 @@ this property.
\p{Block=Bengali}) (92)
\p{Bidi_C} \p{Bidi_Control} (= \p{Bidi_Control=Y}) (7)
\p{Bidi_C: *} \p{Bidi_Control: *}
- \p{Bidi_Class: AL} \p{Bidi_Class=Arabic_Letter} (1116)
- \p{Bidi_Class: AN} \p{Bidi_Class=Arabic_Number} (48)
- \p{Bidi_Class: Arabic_Letter} (Short: \p{Bc=AL}) (1116)
- \p{Bidi_Class: Arabic_Number} (Short: \p{Bc=AN}) (48)
+ \p{Bidi_Class: AL} \p{Bidi_Class=Arabic_Letter} (1438)
+ \p{Bidi_Class: AN} \p{Bidi_Class=Arabic_Number} (49)
+ \p{Bidi_Class: Arabic_Letter} (Short: \p{Bc=AL}) (1438)
+ \p{Bidi_Class: Arabic_Number} (Short: \p{Bc=AN}) (49)
\p{Bidi_Class: B} \p{Bidi_Class=Paragraph_Separator} (7)
\p{Bidi_Class: BN} \p{Bidi_Class=Boundary_Neutral} (4015)
\p{Bidi_Class: Boundary_Neutral} (Short: \p{Bc=BN}) (4015)
@@ -345,25 +422,25 @@ this property.
\p{Bidi_Class: CS} \p{Bidi_Class=Common_Separator} (15)
\p{Bidi_Class: EN} \p{Bidi_Class=European_Number} (131)
\p{Bidi_Class: ES} \p{Bidi_Class=European_Separator} (12)
- \p{Bidi_Class: ET} \p{Bidi_Class=European_Terminator} (64)
+ \p{Bidi_Class: ET} \p{Bidi_Class=European_Terminator} (65)
\p{Bidi_Class: European_Number} (Short: \p{Bc=EN}) (131)
\p{Bidi_Class: European_Separator} (Short: \p{Bc=ES}) (12)
- \p{Bidi_Class: European_Terminator} (Short: \p{Bc=ET}) (64)
- \p{Bidi_Class: L} \p{Bidi_Class=Left_To_Right} (1_098_619)
- \p{Bidi_Class: Left_To_Right} (Short: \p{Bc=L}) (1_098_619)
+ \p{Bidi_Class: European_Terminator} (Short: \p{Bc=ET}) (65)
+ \p{Bidi_Class: L} \p{Bidi_Class=Left_To_Right} (1_098_531)
+ \p{Bidi_Class: Left_To_Right} (Short: \p{Bc=L}) (1_098_531)
\p{Bidi_Class: Left_To_Right_Embedding} (Short: \p{Bc=LRE}) (1)
\p{Bidi_Class: Left_To_Right_Override} (Short: \p{Bc=LRO}) (1)
\p{Bidi_Class: LRE} \p{Bidi_Class=Left_To_Right_Embedding} (1)
\p{Bidi_Class: LRO} \p{Bidi_Class=Left_To_Right_Override} (1)
- \p{Bidi_Class: Nonspacing_Mark} (Short: \p{Bc=NSM}) (1209)
- \p{Bidi_Class: NSM} \p{Bidi_Class=Nonspacing_Mark} (1209)
- \p{Bidi_Class: ON} \p{Bidi_Class=Other_Neutral} (4412)
- \p{Bidi_Class: Other_Neutral} (Short: \p{Bc=ON}) (4412)
+ \p{Bidi_Class: Nonspacing_Mark} (Short: \p{Bc=NSM}) (1290)
+ \p{Bidi_Class: NSM} \p{Bidi_Class=Nonspacing_Mark} (1290)
+ \p{Bidi_Class: ON} \p{Bidi_Class=Other_Neutral} (4447)
+ \p{Bidi_Class: Other_Neutral} (Short: \p{Bc=ON}) (4447)
\p{Bidi_Class: Paragraph_Separator} (Short: \p{Bc=B}) (7)
\p{Bidi_Class: PDF} \p{Bidi_Class=Pop_Directional_Format} (1)
\p{Bidi_Class: Pop_Directional_Format} (Short: \p{Bc=PDF}) (1)
- \p{Bidi_Class: R} \p{Bidi_Class=Right_To_Left} (4438)
- \p{Bidi_Class: Right_To_Left} (Short: \p{Bc=R}) (4438)
+ \p{Bidi_Class: R} \p{Bidi_Class=Right_To_Left} (4086)
+ \p{Bidi_Class: Right_To_Left} (Short: \p{Bc=R}) (4086)
\p{Bidi_Class: Right_To_Left_Embedding} (Short: \p{Bc=RLE}) (1)
\p{Bidi_Class: Right_To_Left_Override} (Short: \p{Bc=RLO}) (1)
\p{Bidi_Class: RLE} \p{Bidi_Class=Right_To_Left_Embedding} (1)
@@ -376,31 +453,49 @@ this property.
\p{Bidi_Control: N*} (Short: \p{BidiC=N}, \P{BidiC}) (1_114_105)
\p{Bidi_Control: Y*} (Short: \p{BidiC=Y}, \p{BidiC}) (7)
\p{Bidi_M} \p{Bidi_Mirrored} (= \p{Bidi_Mirrored=Y})
- (543)
+ (545)
\p{Bidi_M: *} \p{Bidi_Mirrored: *}
\p{Bidi_Mirrored} \p{Bidi_Mirrored=Y} (Short: \p{BidiM})
- (543)
- \p{Bidi_Mirrored: N*} (Short: \p{BidiM=N}, \P{BidiM}) (1_113_569)
- \p{Bidi_Mirrored: Y*} (Short: \p{BidiM=Y}, \p{BidiM}) (543)
+ (545)
+ \p{Bidi_Mirrored: N*} (Short: \p{BidiM=N}, \P{BidiM}) (1_113_567)
+ \p{Bidi_Mirrored: Y*} (Short: \p{BidiM=Y}, \p{BidiM}) (545)
\p{Blank} \h, Horizontal white space (19)
\p{Blk: *} \p{Block: *}
\p{Block: Aegean_Numbers} (Single: \p{InAegeanNumbers}) (64)
- \p{Block: Alchemical_Symbols} (Single: \p{InAlchemicalSymbols})
- (128)
- \p{Block: Alphabetic_Presentation_Forms} (Single:
- \p{InAlphabeticPresentationForms}) (80)
- \p{Block: Ancient_Greek_Musical_Notation} (Single:
- \p{InAncientGreekMusicalNotation}) (80)
+ \p{Block: Alchemical} \p{Block=Alchemical_Symbols} (128)
+ \p{Block: Alchemical_Symbols} (Short: \p{Blk=Alchemical},
+ \p{InAlchemical}) (128)
+ \p{Block: Alphabetic_PF} \p{Block=Alphabetic_Presentation_Forms}
+ (80)
+ \p{Block: Alphabetic_Presentation_Forms} (Short: \p{Blk=
+ AlphabeticPF}, \p{InAlphabeticPF}) (80)
+ \p{Block: Ancient_Greek_Music} \p{Block=
+ Ancient_Greek_Musical_Notation} (80)
+ \p{Block: Ancient_Greek_Musical_Notation} (Short: \p{Blk=
+ AncientGreekMusic},
+ \p{InAncientGreekMusic}) (80)
\p{Block: Ancient_Greek_Numbers} (Single:
\p{InAncientGreekNumbers}) (80)
\p{Block: Ancient_Symbols} (Single: \p{InAncientSymbols}) (64)
\p{Block: Arabic} (Single: \p{InArabic}; NOT \p{Arabic} NOR
\p{Is_Arabic}) (256)
- \p{Block: Arabic_Presentation_Forms_A} (Single:
- \p{InArabicPresentationFormsA}) (688)
- \p{Block: Arabic_Presentation_Forms_B} (Single:
- \p{InArabicPresentationFormsB}) (144)
- \p{Block: Arabic_Supplement} (Single: \p{InArabicSupplement}) (48)
+ \p{Block: Arabic_Ext_A} \p{Block=Arabic_Extended_A} (96)
+ \p{Block: Arabic_Extended_A} (Short: \p{Blk=ArabicExtA},
+ \p{InArabicExtA}) (96)
+ \p{Block: Arabic_Math} \p{Block=
+ Arabic_Mathematical_Alphabetic_Symbols}
+ (256)
+ \p{Block: Arabic_Mathematical_Alphabetic_Symbols} (Short: \p{Blk=
+ ArabicMath}, \p{InArabicMath}) (256)
+ \p{Block: Arabic_PF_A} \p{Block=Arabic_Presentation_Forms_A} (688)
+ \p{Block: Arabic_PF_B} \p{Block=Arabic_Presentation_Forms_B} (144)
+ \p{Block: Arabic_Presentation_Forms_A} (Short: \p{Blk=ArabicPFA},
+ \p{InArabicPFA}) (688)
+ \p{Block: Arabic_Presentation_Forms_B} (Short: \p{Blk=ArabicPFB},
+ \p{InArabicPFB}) (144)
+ \p{Block: Arabic_Sup} \p{Block=Arabic_Supplement} (48)
+ \p{Block: Arabic_Supplement} (Short: \p{Blk=ArabicSup},
+ \p{InArabicSup}) (48)
\p{Block: Armenian} (Single: \p{InArmenian}; NOT \p{Armenian}
NOR \p{Is_Armenian}) (96)
\p{Block: Arrows} (Single: \p{InArrows}) (112)
@@ -411,7 +506,9 @@ this property.
NOR \p{Is_Balinese}) (128)
\p{Block: Bamum} (Single: \p{InBamum}; NOT \p{Bamum} NOR
\p{Is_Bamum}) (96)
- \p{Block: Bamum_Supplement} (Single: \p{InBamumSupplement}) (576)
+ \p{Block: Bamum_Sup} \p{Block=Bamum_Supplement} (576)
+ \p{Block: Bamum_Supplement} (Short: \p{Blk=BamumSup},
+ \p{InBamumSup}) (576)
\p{Block: Basic_Latin} (Short: \p{Blk=ASCII}, \p{ASCII}) (128)
\p{Block: Batak} (Single: \p{InBatak}; NOT \p{Batak} NOR
\p{Is_Batak}) (64)
@@ -420,128 +517,187 @@ this property.
\p{Block: Block_Elements} (Single: \p{InBlockElements}) (32)
\p{Block: Bopomofo} (Single: \p{InBopomofo}; NOT \p{Bopomofo}
NOR \p{Is_Bopomofo}) (48)
- \p{Block: Bopomofo_Extended} (Single: \p{InBopomofoExtended}) (32)
+ \p{Block: Bopomofo_Ext} \p{Block=Bopomofo_Extended} (32)
+ \p{Block: Bopomofo_Extended} (Short: \p{Blk=BopomofoExt},
+ \p{InBopomofoExt}) (32)
\p{Block: Box_Drawing} (Single: \p{InBoxDrawing}) (128)
\p{Block: Brahmi} (Single: \p{InBrahmi}; NOT \p{Brahmi} NOR
\p{Is_Brahmi}) (128)
- \p{Block: Braille_Patterns} (Single: \p{InBraillePatterns}) (256)
+ \p{Block: Braille} \p{Block=Braille_Patterns} (256)
+ \p{Block: Braille_Patterns} (Short: \p{Blk=Braille},
+ \p{InBraille}) (256)
\p{Block: Buginese} (Single: \p{InBuginese}; NOT \p{Buginese}
NOR \p{Is_Buginese}) (32)
\p{Block: Buhid} (Single: \p{InBuhid}; NOT \p{Buhid} NOR
\p{Is_Buhid}) (32)
- \p{Block: Byzantine_Musical_Symbols} (Single:
- \p{InByzantineMusicalSymbols}) (256)
+ \p{Block: Byzantine_Music} \p{Block=Byzantine_Musical_Symbols}
+ (256)
+ \p{Block: Byzantine_Musical_Symbols} (Short: \p{Blk=
+ ByzantineMusic}, \p{InByzantineMusic})
+ (256)
\p{Block: Canadian_Syllabics} \p{Block=
Unified_Canadian_Aboriginal_Syllabics}
(640)
\p{Block: Carian} (Single: \p{InCarian}; NOT \p{Carian} NOR
\p{Is_Carian}) (64)
+ \p{Block: Chakma} (Single: \p{InChakma}; NOT \p{Chakma} NOR
+ \p{Is_Chakma}) (80)
\p{Block: Cham} (Single: \p{InCham}; NOT \p{Cham} NOR
\p{Is_Cham}) (96)
\p{Block: Cherokee} (Single: \p{InCherokee}; NOT \p{Cherokee}
NOR \p{Is_Cherokee}) (96)
- \p{Block: CJK_Compatibility} (Single: \p{InCJKCompatibility}) (256)
- \p{Block: CJK_Compatibility_Forms} (Single:
- \p{InCJKCompatibilityForms}) (32)
- \p{Block: CJK_Compatibility_Ideographs} (Single:
- \p{InCJKCompatibilityIdeographs}) (512)
- \p{Block: CJK_Compatibility_Ideographs_Supplement} (Single:
- \p{InCJKCompatibilityIdeographs-
- Supplement}) (544)
- \p{Block: CJK_Radicals_Supplement} (Single:
- \p{InCJKRadicalsSupplement}) (128)
- \p{Block: CJK_Strokes} (Single: \p{InCJKStrokes}) (48)
- \p{Block: CJK_Symbols_And_Punctuation} (Single:
- \p{InCJKSymbolsAndPunctuation}) (64)
- \p{Block: CJK_Unified_Ideographs} (Single:
- \p{InCJKUnifiedIdeographs}) (20_992)
- \p{Block: CJK_Unified_Ideographs_Extension_A} (Single:
- \p{InCJKUnifiedIdeographsExtensionA})
+ \p{Block: CJK} \p{Block=CJK_Unified_Ideographs} (20_992)
+ \p{Block: CJK_Compat} \p{Block=CJK_Compatibility} (256)
+ \p{Block: CJK_Compat_Forms} \p{Block=CJK_Compatibility_Forms} (32)
+ \p{Block: CJK_Compat_Ideographs} \p{Block=
+ CJK_Compatibility_Ideographs} (512)
+ \p{Block: CJK_Compat_Ideographs_Sup} \p{Block=
+ CJK_Compatibility_Ideographs_Supplement}
+ (544)
+ \p{Block: CJK_Compatibility} (Short: \p{Blk=CJKCompat},
+ \p{InCJKCompat}) (256)
+ \p{Block: CJK_Compatibility_Forms} (Short: \p{Blk=CJKCompatForms},
+ \p{InCJKCompatForms}) (32)
+ \p{Block: CJK_Compatibility_Ideographs} (Short: \p{Blk=
+ CJKCompatIdeographs},
+ \p{InCJKCompatIdeographs}) (512)
+ \p{Block: CJK_Compatibility_Ideographs_Supplement} (Short: \p{Blk=
+ CJKCompatIdeographsSup},
+ \p{InCJKCompatIdeographsSup}) (544)
+ \p{Block: CJK_Ext_A} \p{Block=
+ CJK_Unified_Ideographs_Extension_A}
(6592)
- \p{Block: CJK_Unified_Ideographs_Extension_B} (Single:
- \p{InCJKUnifiedIdeographsExtensionB})
+ \p{Block: CJK_Ext_B} \p{Block=
+ CJK_Unified_Ideographs_Extension_B}
(42_720)
- \p{Block: CJK_Unified_Ideographs_Extension_C} (Single:
- \p{InCJKUnifiedIdeographsExtensionC})
+ \p{Block: CJK_Ext_C} \p{Block=
+ CJK_Unified_Ideographs_Extension_C}
(4160)
- \p{Block: CJK_Unified_Ideographs_Extension_D} (Single:
- \p{InCJKUnifiedIdeographsExtensionD})
- (224)
- \p{Block: Combining_Diacritical_Marks} (Single:
- \p{InCombiningDiacriticalMarks}) (112)
+ \p{Block: CJK_Ext_D} \p{Block=
+ CJK_Unified_Ideographs_Extension_D} (224)
+ \p{Block: CJK_Radicals_Sup} \p{Block=CJK_Radicals_Supplement} (128)
+ \p{Block: CJK_Radicals_Supplement} (Short: \p{Blk=CJKRadicalsSup},
+ \p{InCJKRadicalsSup}) (128)
+ \p{Block: CJK_Strokes} (Single: \p{InCJKStrokes}) (48)
+ \p{Block: CJK_Symbols} \p{Block=CJK_Symbols_And_Punctuation} (64)
+ \p{Block: CJK_Symbols_And_Punctuation} (Short: \p{Blk=CJKSymbols},
+ \p{InCJKSymbols}) (64)
+ \p{Block: CJK_Unified_Ideographs} (Short: \p{Blk=CJK}, \p{InCJK})
+ (20_992)
+ \p{Block: CJK_Unified_Ideographs_Extension_A} (Short: \p{Blk=
+ CJKExtA}, \p{InCJKExtA}) (6592)
+ \p{Block: CJK_Unified_Ideographs_Extension_B} (Short: \p{Blk=
+ CJKExtB}, \p{InCJKExtB}) (42_720)
+ \p{Block: CJK_Unified_Ideographs_Extension_C} (Short: \p{Blk=
+ CJKExtC}, \p{InCJKExtC}) (4160)
+ \p{Block: CJK_Unified_Ideographs_Extension_D} (Short: \p{Blk=
+ CJKExtD}, \p{InCJKExtD}) (224)
+ \p{Block: Combining_Diacritical_Marks} (Short: \p{Blk=
+ Diacriticals}, \p{InDiacriticals}) (112)
\p{Block: Combining_Diacritical_Marks_For_Symbols} (Short: \p{Blk=
- CombiningMarksForSymbols},
- \p{InCombiningMarksForSymbols}) (48)
- \p{Block: Combining_Diacritical_Marks_Supplement} (Single:
- \p{InCombiningDiacriticalMarks-
- Supplement}) (64)
- \p{Block: Combining_Half_Marks} (Single: \p{InCombiningHalfMarks})
- (16)
+ DiacriticalsForSymbols},
+ \p{InDiacriticalsForSymbols}) (48)
+ \p{Block: Combining_Diacritical_Marks_Supplement} (Short: \p{Blk=
+ DiacriticalsSup}, \p{InDiacriticalsSup})
+ (64)
+ \p{Block: Combining_Half_Marks} (Short: \p{Blk=HalfMarks},
+ \p{InHalfMarks}) (16)
\p{Block: Combining_Marks_For_Symbols} \p{Block=
Combining_Diacritical_Marks_For_Symbols}
(48)
- \p{Block: Common_Indic_Number_Forms} (Single:
- \p{InCommonIndicNumberForms}) (16)
+ \p{Block: Common_Indic_Number_Forms} (Short: \p{Blk=
+ IndicNumberForms},
+ \p{InIndicNumberForms}) (16)
+ \p{Block: Compat_Jamo} \p{Block=Hangul_Compatibility_Jamo} (96)
\p{Block: Control_Pictures} (Single: \p{InControlPictures}) (64)
\p{Block: Coptic} (Single: \p{InCoptic}; NOT \p{Coptic} NOR
\p{Is_Coptic}) (128)
- \p{Block: Counting_Rod_Numerals} (Single:
- \p{InCountingRodNumerals}) (32)
+ \p{Block: Counting_Rod} \p{Block=Counting_Rod_Numerals} (32)
+ \p{Block: Counting_Rod_Numerals} (Short: \p{Blk=CountingRod},
+ \p{InCountingRod}) (32)
\p{Block: Cuneiform} (Single: \p{InCuneiform}; NOT
\p{Cuneiform} NOR \p{Is_Cuneiform})
(1024)
- \p{Block: Cuneiform_Numbers_And_Punctuation} (Single:
- \p{InCuneiformNumbersAndPunctuation})
- (128)
+ \p{Block: Cuneiform_Numbers} \p{Block=
+ Cuneiform_Numbers_And_Punctuation} (128)
+ \p{Block: Cuneiform_Numbers_And_Punctuation} (Short: \p{Blk=
+ CuneiformNumbers},
+ \p{InCuneiformNumbers}) (128)
\p{Block: Currency_Symbols} (Single: \p{InCurrencySymbols}) (48)
\p{Block: Cypriot_Syllabary} (Single: \p{InCypriotSyllabary}) (64)
\p{Block: Cyrillic} (Single: \p{InCyrillic}; NOT \p{Cyrillic}
NOR \p{Is_Cyrillic}) (256)
- \p{Block: Cyrillic_Extended_A} (Single: \p{InCyrillicExtendedA})
- (32)
- \p{Block: Cyrillic_Extended_B} (Single: \p{InCyrillicExtendedB})
- (96)
- \p{Block: Cyrillic_Supplement} (Single: \p{InCyrillicSupplement})
- (48)
+ \p{Block: Cyrillic_Ext_A} \p{Block=Cyrillic_Extended_A} (32)
+ \p{Block: Cyrillic_Ext_B} \p{Block=Cyrillic_Extended_B} (96)
+ \p{Block: Cyrillic_Extended_A} (Short: \p{Blk=CyrillicExtA},
+ \p{InCyrillicExtA}) (32)
+ \p{Block: Cyrillic_Extended_B} (Short: \p{Blk=CyrillicExtB},
+ \p{InCyrillicExtB}) (96)
+ \p{Block: Cyrillic_Sup} \p{Block=Cyrillic_Supplement} (48)
+ \p{Block: Cyrillic_Supplement} (Short: \p{Blk=CyrillicSup},
+ \p{InCyrillicSup}) (48)
\p{Block: Cyrillic_Supplementary} \p{Block=Cyrillic_Supplement}
(48)
\p{Block: Deseret} (Single: \p{InDeseret}) (80)
\p{Block: Devanagari} (Single: \p{InDevanagari}; NOT
\p{Devanagari} NOR \p{Is_Devanagari})
(128)
- \p{Block: Devanagari_Extended} (Single: \p{InDevanagariExtended})
- (32)
+ \p{Block: Devanagari_Ext} \p{Block=Devanagari_Extended} (32)
+ \p{Block: Devanagari_Extended} (Short: \p{Blk=DevanagariExt},
+ \p{InDevanagariExt}) (32)
+ \p{Block: Diacriticals} \p{Block=Combining_Diacritical_Marks} (112)
+ \p{Block: Diacriticals_For_Symbols} \p{Block=
+ Combining_Diacritical_Marks_For_Symbols}
+ (48)
+ \p{Block: Diacriticals_Sup} \p{Block=
+ Combining_Diacritical_Marks_Supplement}
+ (64)
\p{Block: Dingbats} (Single: \p{InDingbats}) (192)
- \p{Block: Domino_Tiles} (Single: \p{InDominoTiles}) (112)
+ \p{Block: Domino} \p{Block=Domino_Tiles} (112)
+ \p{Block: Domino_Tiles} (Short: \p{Blk=Domino}, \p{InDomino}) (112)
\p{Block: Egyptian_Hieroglyphs} (Single:
\p{InEgyptianHieroglyphs}; NOT
\p{Egyptian_Hieroglyphs} NOR
\p{Is_Egyptian_Hieroglyphs}) (1072)
\p{Block: Emoticons} (Single: \p{InEmoticons}) (80)
- \p{Block: Enclosed_Alphanumeric_Supplement} (Single:
- \p{InEnclosedAlphanumericSupplement})
- (256)
- \p{Block: Enclosed_Alphanumerics} (Single:
- \p{InEnclosedAlphanumerics}) (160)
- \p{Block: Enclosed_CJK_Letters_And_Months} (Single:
- \p{InEnclosedCJKLettersAndMonths}) (256)
- \p{Block: Enclosed_Ideographic_Supplement} (Single:
- \p{InEnclosedIdeographicSupplement})
+ \p{Block: Enclosed_Alphanum} \p{Block=Enclosed_Alphanumerics} (160)
+ \p{Block: Enclosed_Alphanum_Sup} \p{Block=
+ Enclosed_Alphanumeric_Supplement} (256)
+ \p{Block: Enclosed_Alphanumeric_Supplement} (Short: \p{Blk=
+ EnclosedAlphanumSup},
+ \p{InEnclosedAlphanumSup}) (256)
+ \p{Block: Enclosed_Alphanumerics} (Short: \p{Blk=
+ EnclosedAlphanum},
+ \p{InEnclosedAlphanum}) (160)
+ \p{Block: Enclosed_CJK} \p{Block=Enclosed_CJK_Letters_And_Months}
(256)
+ \p{Block: Enclosed_CJK_Letters_And_Months} (Short: \p{Blk=
+ EnclosedCJK}, \p{InEnclosedCJK}) (256)
+ \p{Block: Enclosed_Ideographic_Sup} \p{Block=
+ Enclosed_Ideographic_Supplement} (256)
+ \p{Block: Enclosed_Ideographic_Supplement} (Short: \p{Blk=
+ EnclosedIdeographicSup},
+ \p{InEnclosedIdeographicSup}) (256)
\p{Block: Ethiopic} (Single: \p{InEthiopic}; NOT \p{Ethiopic}
NOR \p{Is_Ethiopic}) (384)
- \p{Block: Ethiopic_Extended} (Single: \p{InEthiopicExtended}) (96)
- \p{Block: Ethiopic_Extended_A} (Single: \p{InEthiopicExtendedA})
- (48)
- \p{Block: Ethiopic_Supplement} (Single: \p{InEthiopicSupplement})
- (32)
- \p{Block: General_Punctuation} (Single: \p{InGeneralPunctuation})
- (112)
+ \p{Block: Ethiopic_Ext} \p{Block=Ethiopic_Extended} (96)
+ \p{Block: Ethiopic_Ext_A} \p{Block=Ethiopic_Extended_A} (48)
+ \p{Block: Ethiopic_Extended} (Short: \p{Blk=EthiopicExt},
+ \p{InEthiopicExt}) (96)
+ \p{Block: Ethiopic_Extended_A} (Short: \p{Blk=EthiopicExtA},
+ \p{InEthiopicExtA}) (48)
+ \p{Block: Ethiopic_Sup} \p{Block=Ethiopic_Supplement} (32)
+ \p{Block: Ethiopic_Supplement} (Short: \p{Blk=EthiopicSup},
+ \p{InEthiopicSup}) (32)
+ \p{Block: General_Punctuation} (Short: \p{Blk=Punctuation},
+ \p{InPunctuation}; NOT \p{Punct} NOR
+ \p{Is_Punctuation}) (112)
\p{Block: Geometric_Shapes} (Single: \p{InGeometricShapes}) (96)
\p{Block: Georgian} (Single: \p{InGeorgian}; NOT \p{Georgian}
NOR \p{Is_Georgian}) (96)
- \p{Block: Georgian_Supplement} (Single: \p{InGeorgianSupplement})
- (48)
+ \p{Block: Georgian_Sup} \p{Block=Georgian_Supplement} (48)
+ \p{Block: Georgian_Supplement} (Short: \p{Blk=GeorgianSup},
+ \p{InGeorgianSup}) (48)
\p{Block: Glagolitic} (Single: \p{InGlagolitic}; NOT
\p{Glagolitic} NOR \p{Is_Glagolitic})
(96)
@@ -551,37 +707,54 @@ this property.
NOR \p{Is_Greek}) (144)
\p{Block: Greek_And_Coptic} (Short: \p{Blk=Greek}, \p{InGreek};
NOT \p{Greek} NOR \p{Is_Greek}) (144)
- \p{Block: Greek_Extended} (Single: \p{InGreekExtended}) (256)
+ \p{Block: Greek_Ext} \p{Block=Greek_Extended} (256)
+ \p{Block: Greek_Extended} (Short: \p{Blk=GreekExt},
+ \p{InGreekExt}) (256)
\p{Block: Gujarati} (Single: \p{InGujarati}; NOT \p{Gujarati}
NOR \p{Is_Gujarati}) (128)
\p{Block: Gurmukhi} (Single: \p{InGurmukhi}; NOT \p{Gurmukhi}
NOR \p{Is_Gurmukhi}) (128)
- \p{Block: Halfwidth_And_Fullwidth_Forms} (Single:
- \p{InHalfwidthAndFullwidthForms}) (240)
- \p{Block: Hangul_Compatibility_Jamo} (Single:
- \p{InHangulCompatibilityJamo}) (96)
- \p{Block: Hangul_Jamo} (Single: \p{InHangulJamo}) (256)
- \p{Block: Hangul_Jamo_Extended_A} (Single:
- \p{InHangulJamoExtendedA}) (32)
- \p{Block: Hangul_Jamo_Extended_B} (Single:
- \p{InHangulJamoExtendedB}) (80)
- \p{Block: Hangul_Syllables} (Single: \p{InHangulSyllables})
+ \p{Block: Half_And_Full_Forms} \p{Block=
+ Halfwidth_And_Fullwidth_Forms} (240)
+ \p{Block: Half_Marks} \p{Block=Combining_Half_Marks} (16)
+ \p{Block: Halfwidth_And_Fullwidth_Forms} (Short: \p{Blk=
+ HalfAndFullForms},
+ \p{InHalfAndFullForms}) (240)
+ \p{Block: Hangul} \p{Block=Hangul_Syllables} (NOT \p{Hangul}
+ NOR \p{Is_Hangul}) (11_184)
+ \p{Block: Hangul_Compatibility_Jamo} (Short: \p{Blk=CompatJamo},
+ \p{InCompatJamo}) (96)
+ \p{Block: Hangul_Jamo} (Short: \p{Blk=Jamo}, \p{InJamo}) (256)
+ \p{Block: Hangul_Jamo_Extended_A} (Short: \p{Blk=JamoExtA},
+ \p{InJamoExtA}) (32)
+ \p{Block: Hangul_Jamo_Extended_B} (Short: \p{Blk=JamoExtB},
+ \p{InJamoExtB}) (80)
+ \p{Block: Hangul_Syllables} (Short: \p{Blk=Hangul}, \p{InHangul};
+ NOT \p{Hangul} NOR \p{Is_Hangul})
(11_184)
\p{Block: Hanunoo} (Single: \p{InHanunoo}; NOT \p{Hanunoo}
NOR \p{Is_Hanunoo}) (32)
\p{Block: Hebrew} (Single: \p{InHebrew}; NOT \p{Hebrew} NOR
\p{Is_Hebrew}) (112)
- \p{Block: High_Private_Use_Surrogates} (Single:
- \p{InHighPrivateUseSurrogates}) (128)
+ \p{Block: High_Private_Use_Surrogates} (Short: \p{Blk=
+ HighPUSurrogates},
+ \p{InHighPUSurrogates}) (128)
+ \p{Block: High_PU_Surrogates} \p{Block=
+ High_Private_Use_Surrogates} (128)
\p{Block: High_Surrogates} (Single: \p{InHighSurrogates}) (896)
\p{Block: Hiragana} (Single: \p{InHiragana}; NOT \p{Hiragana}
NOR \p{Is_Hiragana}) (96)
- \p{Block: Ideographic_Description_Characters} (Single:
- \p{InIdeographicDescriptionCharacters})
- (16)
+ \p{Block: IDC} \p{Block=
+ Ideographic_Description_Characters} (NOT
+ \p{ID_Continue} NOR \p{Is_IDC}) (16)
+ \p{Block: Ideographic_Description_Characters} (Short: \p{Blk=IDC},
+ \p{InIDC}; NOT \p{ID_Continue} NOR
+ \p{Is_IDC}) (16)
\p{Block: Imperial_Aramaic} (Single: \p{InImperialAramaic}; NOT
\p{Imperial_Aramaic} NOR
\p{Is_Imperial_Aramaic}) (32)
+ \p{Block: Indic_Number_Forms} \p{Block=Common_Indic_Number_Forms}
+ (16)
\p{Block: Inscriptional_Pahlavi} (Single:
\p{InInscriptionalPahlavi}; NOT
\p{Inscriptional_Pahlavi} NOR
@@ -590,20 +763,30 @@ this property.
\p{InInscriptionalParthian}; NOT
\p{Inscriptional_Parthian} NOR
\p{Is_Inscriptional_Parthian}) (32)
- \p{Block: IPA_Extensions} (Single: \p{InIPAExtensions}) (96)
+ \p{Block: IPA_Ext} \p{Block=IPA_Extensions} (96)
+ \p{Block: IPA_Extensions} (Short: \p{Blk=IPAExt}, \p{InIPAExt})
+ (96)
+ \p{Block: Jamo} \p{Block=Hangul_Jamo} (256)
+ \p{Block: Jamo_Ext_A} \p{Block=Hangul_Jamo_Extended_A} (32)
+ \p{Block: Jamo_Ext_B} \p{Block=Hangul_Jamo_Extended_B} (80)
\p{Block: Javanese} (Single: \p{InJavanese}; NOT \p{Javanese}
NOR \p{Is_Javanese}) (96)
\p{Block: Kaithi} (Single: \p{InKaithi}; NOT \p{Kaithi} NOR
\p{Is_Kaithi}) (80)
- \p{Block: Kana_Supplement} (Single: \p{InKanaSupplement}) (256)
+ \p{Block: Kana_Sup} \p{Block=Kana_Supplement} (256)
+ \p{Block: Kana_Supplement} (Short: \p{Blk=KanaSup}, \p{InKanaSup})
+ (256)
\p{Block: Kanbun} (Single: \p{InKanbun}) (16)
- \p{Block: Kangxi_Radicals} (Single: \p{InKangxiRadicals}) (224)
+ \p{Block: Kangxi} \p{Block=Kangxi_Radicals} (224)
+ \p{Block: Kangxi_Radicals} (Short: \p{Blk=Kangxi}, \p{InKangxi})
+ (224)
\p{Block: Kannada} (Single: \p{InKannada}; NOT \p{Kannada}
NOR \p{Is_Kannada}) (128)
\p{Block: Katakana} (Single: \p{InKatakana}; NOT \p{Katakana}
NOR \p{Is_Katakana}) (96)
- \p{Block: Katakana_Phonetic_Extensions} (Single:
- \p{InKatakanaPhoneticExtensions}) (16)
+ \p{Block: Katakana_Ext} \p{Block=Katakana_Phonetic_Extensions} (16)
+ \p{Block: Katakana_Phonetic_Extensions} (Short: \p{Blk=
+ KatakanaExt}, \p{InKatakanaExt}) (16)
\p{Block: Kayah_Li} (Single: \p{InKayahLi}) (48)
\p{Block: Kharoshthi} (Single: \p{InKharoshthi}; NOT
\p{Kharoshthi} NOR \p{Is_Kharoshthi})
@@ -614,14 +797,26 @@ this property.
\p{Block: Lao} (Single: \p{InLao}; NOT \p{Lao} NOR
\p{Is_Lao}) (128)
\p{Block: Latin_1} \p{Block=Latin_1_Supplement} (128)
+ \p{Block: Latin_1_Sup} \p{Block=Latin_1_Supplement} (128)
\p{Block: Latin_1_Supplement} (Short: \p{Blk=Latin1},
\p{InLatin1}) (128)
- \p{Block: Latin_Extended_A} (Single: \p{InLatinExtendedA}) (128)
- \p{Block: Latin_Extended_Additional} (Single:
- \p{InLatinExtendedAdditional}) (256)
- \p{Block: Latin_Extended_B} (Single: \p{InLatinExtendedB}) (208)
- \p{Block: Latin_Extended_C} (Single: \p{InLatinExtendedC}) (32)
- \p{Block: Latin_Extended_D} (Single: \p{InLatinExtendedD}) (224)
+ \p{Block: Latin_Ext_A} \p{Block=Latin_Extended_A} (128)
+ \p{Block: Latin_Ext_Additional} \p{Block=
+ Latin_Extended_Additional} (256)
+ \p{Block: Latin_Ext_B} \p{Block=Latin_Extended_B} (208)
+ \p{Block: Latin_Ext_C} \p{Block=Latin_Extended_C} (32)
+ \p{Block: Latin_Ext_D} \p{Block=Latin_Extended_D} (224)
+ \p{Block: Latin_Extended_A} (Short: \p{Blk=LatinExtA},
+ \p{InLatinExtA}) (128)
+ \p{Block: Latin_Extended_Additional} (Short: \p{Blk=
+ LatinExtAdditional},
+ \p{InLatinExtAdditional}) (256)
+ \p{Block: Latin_Extended_B} (Short: \p{Blk=LatinExtB},
+ \p{InLatinExtB}) (208)
+ \p{Block: Latin_Extended_C} (Short: \p{Blk=LatinExtC},
+ \p{InLatinExtC}) (32)
+ \p{Block: Latin_Extended_D} (Short: \p{Blk=LatinExtD},
+ \p{InLatinExtD}) (224)
\p{Block: Lepcha} (Single: \p{InLepcha}; NOT \p{Lepcha} NOR
\p{Is_Lepcha}) (80)
\p{Block: Letterlike_Symbols} (Single: \p{InLetterlikeSymbols})
@@ -638,50 +833,84 @@ this property.
\p{Is_Lycian}) (32)
\p{Block: Lydian} (Single: \p{InLydian}; NOT \p{Lydian} NOR
\p{Is_Lydian}) (32)
- \p{Block: Mahjong_Tiles} (Single: \p{InMahjongTiles}) (48)
+ \p{Block: Mahjong} \p{Block=Mahjong_Tiles} (48)
+ \p{Block: Mahjong_Tiles} (Short: \p{Blk=Mahjong}, \p{InMahjong})
+ (48)
\p{Block: Malayalam} (Single: \p{InMalayalam}; NOT
\p{Malayalam} NOR \p{Is_Malayalam}) (128)
\p{Block: Mandaic} (Single: \p{InMandaic}; NOT \p{Mandaic}
NOR \p{Is_Mandaic}) (32)
- \p{Block: Mathematical_Alphanumeric_Symbols} (Single:
- \p{InMathematicalAlphanumericSymbols})
- (1024)
- \p{Block: Mathematical_Operators} (Single:
- \p{InMathematicalOperators}) (256)
+ \p{Block: Math_Alphanum} \p{Block=
+ Mathematical_Alphanumeric_Symbols} (1024)
+ \p{Block: Math_Operators} \p{Block=Mathematical_Operators} (256)
+ \p{Block: Mathematical_Alphanumeric_Symbols} (Short: \p{Blk=
+ MathAlphanum}, \p{InMathAlphanum}) (1024)
+ \p{Block: Mathematical_Operators} (Short: \p{Blk=MathOperators},
+ \p{InMathOperators}) (256)
\p{Block: Meetei_Mayek} (Single: \p{InMeeteiMayek}; NOT
\p{Meetei_Mayek} NOR
\p{Is_Meetei_Mayek}) (64)
- \p{Block: Miscellaneous_Mathematical_Symbols_A} (Single:
- \p{InMiscellaneousMathematicalSymbolsA})
+ \p{Block: Meetei_Mayek_Ext} \p{Block=Meetei_Mayek_Extensions} (32)
+ \p{Block: Meetei_Mayek_Extensions} (Short: \p{Blk=MeeteiMayekExt},
+ \p{InMeeteiMayekExt}) (32)
+ \p{Block: Meroitic_Cursive} (Single: \p{InMeroiticCursive}; NOT
+ \p{Meroitic_Cursive} NOR
+ \p{Is_Meroitic_Cursive}) (96)
+ \p{Block: Meroitic_Hieroglyphs} (Single:
+ \p{InMeroiticHieroglyphs}) (32)
+ \p{Block: Miao} (Single: \p{InMiao}; NOT \p{Miao} NOR
+ \p{Is_Miao}) (160)
+ \p{Block: Misc_Arrows} \p{Block=Miscellaneous_Symbols_And_Arrows}
+ (256)
+ \p{Block: Misc_Math_Symbols_A} \p{Block=
+ Miscellaneous_Mathematical_Symbols_A}
(48)
- \p{Block: Miscellaneous_Mathematical_Symbols_B} (Single:
- \p{InMiscellaneousMathematicalSymbolsB})
+ \p{Block: Misc_Math_Symbols_B} \p{Block=
+ Miscellaneous_Mathematical_Symbols_B}
(128)
- \p{Block: Miscellaneous_Symbols} (Single:
- \p{InMiscellaneousSymbols}) (256)
- \p{Block: Miscellaneous_Symbols_And_Arrows} (Single:
- \p{InMiscellaneousSymbolsAndArrows})
- (256)
- \p{Block: Miscellaneous_Symbols_And_Pictographs} (Single:
- \p{InMiscellaneousSymbolsAnd-
- Pictographs}) (768)
- \p{Block: Miscellaneous_Technical} (Single:
- \p{InMiscellaneousTechnical}) (256)
+ \p{Block: Misc_Pictographs} \p{Block=
+ Miscellaneous_Symbols_And_Pictographs}
+ (768)
+ \p{Block: Misc_Symbols} \p{Block=Miscellaneous_Symbols} (256)
+ \p{Block: Misc_Technical} \p{Block=Miscellaneous_Technical} (256)
+ \p{Block: Miscellaneous_Mathematical_Symbols_A} (Short: \p{Blk=
+ MiscMathSymbolsA},
+ \p{InMiscMathSymbolsA}) (48)
+ \p{Block: Miscellaneous_Mathematical_Symbols_B} (Short: \p{Blk=
+ MiscMathSymbolsB},
+ \p{InMiscMathSymbolsB}) (128)
+ \p{Block: Miscellaneous_Symbols} (Short: \p{Blk=MiscSymbols},
+ \p{InMiscSymbols}) (256)
+ \p{Block: Miscellaneous_Symbols_And_Arrows} (Short: \p{Blk=
+ MiscArrows}, \p{InMiscArrows}) (256)
+ \p{Block: Miscellaneous_Symbols_And_Pictographs} (Short: \p{Blk=
+ MiscPictographs}, \p{InMiscPictographs})
+ (768)
+ \p{Block: Miscellaneous_Technical} (Short: \p{Blk=MiscTechnical},
+ \p{InMiscTechnical}) (256)
+ \p{Block: Modifier_Letters} \p{Block=Spacing_Modifier_Letters} (80)
\p{Block: Modifier_Tone_Letters} (Single:
\p{InModifierToneLetters}) (32)
\p{Block: Mongolian} (Single: \p{InMongolian}; NOT
\p{Mongolian} NOR \p{Is_Mongolian}) (176)
- \p{Block: Musical_Symbols} (Single: \p{InMusicalSymbols}) (256)
+ \p{Block: Music} \p{Block=Musical_Symbols} (256)
+ \p{Block: Musical_Symbols} (Short: \p{Blk=Music}, \p{InMusic})
+ (256)
\p{Block: Myanmar} (Single: \p{InMyanmar}; NOT \p{Myanmar}
NOR \p{Is_Myanmar}) (160)
- \p{Block: Myanmar_Extended_A} (Single: \p{InMyanmarExtendedA}) (32)
+ \p{Block: Myanmar_Ext_A} \p{Block=Myanmar_Extended_A} (32)
+ \p{Block: Myanmar_Extended_A} (Short: \p{Blk=MyanmarExtA},
+ \p{InMyanmarExtA}) (32)
+ \p{Block: NB} \p{Block=No_Block} (860_672)
\p{Block: New_Tai_Lue} (Single: \p{InNewTaiLue}; NOT
\p{New_Tai_Lue} NOR \p{Is_New_Tai_Lue})
(96)
\p{Block: NKo} (Single: \p{InNKo}; NOT \p{Nko} NOR
\p{Is_NKo}) (64)
- \p{Block: No_Block} (Single: \p{InNoBlock}) (861_664)
+ \p{Block: No_Block} (Short: \p{Blk=NB}, \p{InNB}) (860_672)
\p{Block: Number_Forms} (Single: \p{InNumberForms}) (64)
+ \p{Block: OCR} \p{Block=Optical_Character_Recognition}
+ (32)
\p{Block: Ogham} (Single: \p{InOgham}; NOT \p{Ogham} NOR
\p{Is_Ogham}) (32)
\p{Block: Ol_Chiki} (Single: \p{InOlChiki}) (48)
@@ -695,32 +924,44 @@ this property.
\p{Block: Old_Turkic} (Single: \p{InOldTurkic}; NOT
\p{Old_Turkic} NOR \p{Is_Old_Turkic})
(80)
- \p{Block: Optical_Character_Recognition} (Single:
- \p{InOpticalCharacterRecognition}) (32)
+ \p{Block: Optical_Character_Recognition} (Short: \p{Blk=OCR},
+ \p{InOCR}) (32)
\p{Block: Oriya} (Single: \p{InOriya}; NOT \p{Oriya} NOR
\p{Is_Oriya}) (128)
\p{Block: Osmanya} (Single: \p{InOsmanya}; NOT \p{Osmanya}
NOR \p{Is_Osmanya}) (48)
\p{Block: Phags_Pa} (Single: \p{InPhagsPa}; NOT \p{Phags_Pa}
NOR \p{Is_Phags_Pa}) (64)
- \p{Block: Phaistos_Disc} (Single: \p{InPhaistosDisc}) (48)
+ \p{Block: Phaistos} \p{Block=Phaistos_Disc} (48)
+ \p{Block: Phaistos_Disc} (Short: \p{Blk=Phaistos}, \p{InPhaistos})
+ (48)
\p{Block: Phoenician} (Single: \p{InPhoenician}; NOT
\p{Phoenician} NOR \p{Is_Phoenician})
(32)
- \p{Block: Phonetic_Extensions} (Single: \p{InPhoneticExtensions})
- (128)
- \p{Block: Phonetic_Extensions_Supplement} (Single:
- \p{InPhoneticExtensionsSupplement}) (64)
+ \p{Block: Phonetic_Ext} \p{Block=Phonetic_Extensions} (128)
+ \p{Block: Phonetic_Ext_Sup} \p{Block=
+ Phonetic_Extensions_Supplement} (64)
+ \p{Block: Phonetic_Extensions} (Short: \p{Blk=PhoneticExt},
+ \p{InPhoneticExt}) (128)
+ \p{Block: Phonetic_Extensions_Supplement} (Short: \p{Blk=
+ PhoneticExtSup}, \p{InPhoneticExtSup})
+ (64)
\p{Block: Playing_Cards} (Single: \p{InPlayingCards}) (96)
\p{Block: Private_Use} \p{Block=Private_Use_Area} (NOT
\p{Private_Use} NOR \p{Is_Private_Use})
(6400)
- \p{Block: Private_Use_Area} (Short: \p{Blk=PrivateUse},
- \p{InPrivateUse}; NOT \p{Private_Use}
- NOR \p{Is_Private_Use}) (6400)
+ \p{Block: Private_Use_Area} (Short: \p{Blk=PUA}, \p{InPUA}; NOT
+ \p{Private_Use} NOR \p{Is_Private_Use})
+ (6400)
+ \p{Block: PUA} \p{Block=Private_Use_Area} (NOT
+ \p{Private_Use} NOR \p{Is_Private_Use})
+ (6400)
+ \p{Block: Punctuation} \p{Block=General_Punctuation} (NOT
+ \p{Punct} NOR \p{Is_Punctuation}) (112)
\p{Block: Rejang} (Single: \p{InRejang}; NOT \p{Rejang} NOR
\p{Is_Rejang}) (48)
- \p{Block: Rumi_Numeral_Symbols} (Single: \p{InRumiNumeralSymbols})
+ \p{Block: Rumi} \p{Block=Rumi_Numeral_Symbols} (32)
+ \p{Block: Rumi_Numeral_Symbols} (Short: \p{Blk=Rumi}, \p{InRumi})
(32)
\p{Block: Runic} (Single: \p{InRunic}; NOT \p{Runic} NOR
\p{Is_Runic}) (96)
@@ -729,33 +970,53 @@ this property.
\p{Block: Saurashtra} (Single: \p{InSaurashtra}; NOT
\p{Saurashtra} NOR \p{Is_Saurashtra})
(96)
+ \p{Block: Sharada} (Single: \p{InSharada}; NOT \p{Sharada}
+ NOR \p{Is_Sharada}) (96)
\p{Block: Shavian} (Single: \p{InShavian}) (48)
\p{Block: Sinhala} (Single: \p{InSinhala}; NOT \p{Sinhala}
NOR \p{Is_Sinhala}) (128)
- \p{Block: Small_Form_Variants} (Single: \p{InSmallFormVariants})
- (32)
- \p{Block: Spacing_Modifier_Letters} (Single:
- \p{InSpacingModifierLetters}) (80)
+ \p{Block: Small_Form_Variants} (Short: \p{Blk=SmallForms},
+ \p{InSmallForms}) (32)
+ \p{Block: Small_Forms} \p{Block=Small_Form_Variants} (32)
+ \p{Block: Sora_Sompeng} (Single: \p{InSoraSompeng}; NOT
+ \p{Sora_Sompeng} NOR
+ \p{Is_Sora_Sompeng}) (48)
+ \p{Block: Spacing_Modifier_Letters} (Short: \p{Blk=
+ ModifierLetters}, \p{InModifierLetters})
+ (80)
\p{Block: Specials} (Single: \p{InSpecials}) (16)
\p{Block: Sundanese} (Single: \p{InSundanese}; NOT
\p{Sundanese} NOR \p{Is_Sundanese}) (64)
- \p{Block: Superscripts_And_Subscripts} (Single:
- \p{InSuperscriptsAndSubscripts}) (48)
- \p{Block: Supplemental_Arrows_A} (Single:
- \p{InSupplementalArrowsA}) (16)
- \p{Block: Supplemental_Arrows_B} (Single:
- \p{InSupplementalArrowsB}) (128)
- \p{Block: Supplemental_Mathematical_Operators} (Single:
- \p{InSupplementalMathematicalOperators})
+ \p{Block: Sundanese_Sup} \p{Block=Sundanese_Supplement} (16)
+ \p{Block: Sundanese_Supplement} (Short: \p{Blk=SundaneseSup},
+ \p{InSundaneseSup}) (16)
+ \p{Block: Sup_Arrows_A} \p{Block=Supplemental_Arrows_A} (16)
+ \p{Block: Sup_Arrows_B} \p{Block=Supplemental_Arrows_B} (128)
+ \p{Block: Sup_Math_Operators} \p{Block=
+ Supplemental_Mathematical_Operators}
(256)
- \p{Block: Supplemental_Punctuation} (Single:
- \p{InSupplementalPunctuation}) (128)
- \p{Block: Supplementary_Private_Use_Area_A} (Single:
- \p{InSupplementaryPrivateUseAreaA})
+ \p{Block: Sup_PUA_A} \p{Block=Supplementary_Private_Use_Area_A}
(65_536)
- \p{Block: Supplementary_Private_Use_Area_B} (Single:
- \p{InSupplementaryPrivateUseAreaB})
+ \p{Block: Sup_PUA_B} \p{Block=Supplementary_Private_Use_Area_B}
(65_536)
+ \p{Block: Sup_Punctuation} \p{Block=Supplemental_Punctuation} (128)
+ \p{Block: Super_And_Sub} \p{Block=Superscripts_And_Subscripts} (48)
+ \p{Block: Superscripts_And_Subscripts} (Short: \p{Blk=
+ SuperAndSub}, \p{InSuperAndSub}) (48)
+ \p{Block: Supplemental_Arrows_A} (Short: \p{Blk=SupArrowsA},
+ \p{InSupArrowsA}) (16)
+ \p{Block: Supplemental_Arrows_B} (Short: \p{Blk=SupArrowsB},
+ \p{InSupArrowsB}) (128)
+ \p{Block: Supplemental_Mathematical_Operators} (Short: \p{Blk=
+ SupMathOperators},
+ \p{InSupMathOperators}) (256)
+ \p{Block: Supplemental_Punctuation} (Short: \p{Blk=
+ SupPunctuation}, \p{InSupPunctuation})
+ (128)
+ \p{Block: Supplementary_Private_Use_Area_A} (Short: \p{Blk=
+ SupPUAA}, \p{InSupPUAA}) (65_536)
+ \p{Block: Supplementary_Private_Use_Area_B} (Short: \p{Blk=
+ SupPUAB}, \p{InSupPUAB}) (65_536)
\p{Block: Syloti_Nagri} (Single: \p{InSylotiNagri}; NOT
\p{Syloti_Nagri} NOR
\p{Is_Syloti_Nagri}) (48)
@@ -772,8 +1033,11 @@ this property.
NOR \p{Is_Tai_Tham}) (144)
\p{Block: Tai_Viet} (Single: \p{InTaiViet}; NOT \p{Tai_Viet}
NOR \p{Is_Tai_Viet}) (96)
- \p{Block: Tai_Xuan_Jing_Symbols} (Single:
- \p{InTaiXuanJingSymbols}) (96)
+ \p{Block: Tai_Xuan_Jing} \p{Block=Tai_Xuan_Jing_Symbols} (96)
+ \p{Block: Tai_Xuan_Jing_Symbols} (Short: \p{Blk=TaiXuanJing},
+ \p{InTaiXuanJing}) (96)
+ \p{Block: Takri} (Single: \p{InTakri}; NOT \p{Takri} NOR
+ \p{Is_Takri}) (80)
\p{Block: Tamil} (Single: \p{InTamil}; NOT \p{Tamil} NOR
\p{Is_Tamil}) (128)
\p{Block: Telugu} (Single: \p{InTelugu}; NOT \p{Telugu} NOR
@@ -786,34 +1050,53 @@ this property.
NOR \p{Is_Tibetan}) (256)
\p{Block: Tifinagh} (Single: \p{InTifinagh}; NOT \p{Tifinagh}
NOR \p{Is_Tifinagh}) (80)
- \p{Block: Transport_And_Map_Symbols} (Single:
- \p{InTransportAndMapSymbols}) (128)
+ \p{Block: Transport_And_Map} \p{Block=Transport_And_Map_Symbols}
+ (128)
+ \p{Block: Transport_And_Map_Symbols} (Short: \p{Blk=
+ TransportAndMap}, \p{InTransportAndMap})
+ (128)
+ \p{Block: UCAS} \p{Block=
+ Unified_Canadian_Aboriginal_Syllabics}
+ (640)
+ \p{Block: UCAS_Ext} \p{Block=
+ Unified_Canadian_Aboriginal_Syllabics_-
+ Extended} (80)
\p{Block: Ugaritic} (Single: \p{InUgaritic}; NOT \p{Ugaritic}
NOR \p{Is_Ugaritic}) (32)
\p{Block: Unified_Canadian_Aboriginal_Syllabics} (Short: \p{Blk=
- CanadianSyllabics},
- \p{InCanadianSyllabics}) (640)
- \p{Block: Unified_Canadian_Aboriginal_Syllabics_Extended} (Single:
- \p{InUnifiedCanadianAboriginalSyllabics-
- Extended}) (80)
+ UCAS}, \p{InUCAS}) (640)
+ \p{Block: Unified_Canadian_Aboriginal_Syllabics_Extended} (Short:
+ \p{Blk=UCASExt}, \p{InUCASExt}) (80)
\p{Block: Vai} (Single: \p{InVai}; NOT \p{Vai} NOR
\p{Is_Vai}) (320)
- \p{Block: Variation_Selectors} (Single: \p{InVariationSelectors})
+ \p{Block: Variation_Selectors} (Short: \p{Blk=VS}, \p{InVS}; NOT
+ \p{Variation_Selector} NOR \p{Is_VS})
(16)
- \p{Block: Variation_Selectors_Supplement} (Single:
- \p{InVariationSelectorsSupplement}) (240)
- \p{Block: Vedic_Extensions} (Single: \p{InVedicExtensions}) (48)
+ \p{Block: Variation_Selectors_Supplement} (Short: \p{Blk=VSSup},
+ \p{InVSSup}) (240)
+ \p{Block: Vedic_Ext} \p{Block=Vedic_Extensions} (48)
+ \p{Block: Vedic_Extensions} (Short: \p{Blk=VedicExt},
+ \p{InVedicExt}) (48)
\p{Block: Vertical_Forms} (Single: \p{InVerticalForms}) (16)
+ \p{Block: VS} \p{Block=Variation_Selectors} (NOT
+ \p{Variation_Selector} NOR \p{Is_VS})
+ (16)
+ \p{Block: VS_Sup} \p{Block=Variation_Selectors_Supplement}
+ (240)
\p{Block: Yi_Radicals} (Single: \p{InYiRadicals}) (64)
\p{Block: Yi_Syllables} (Single: \p{InYiSyllables}) (1168)
- \p{Block: Yijing_Hexagram_Symbols} (Single:
- \p{InYijingHexagramSymbols}) (64)
+ \p{Block: Yijing} \p{Block=Yijing_Hexagram_Symbols} (64)
+ \p{Block: Yijing_Hexagram_Symbols} (Short: \p{Blk=Yijing},
+ \p{InYijing}) (64)
X \p{Block_Elements} \p{Block=Block_Elements} (32)
\p{Bopo} \p{Bopomofo} (= \p{Script=Bopomofo}) (NOT
\p{Block=Bopomofo}) (70)
\p{Bopomofo} \p{Script=Bopomofo} (Short: \p{Bopo}; NOT
\p{Block=Bopomofo}) (70)
- X \p{Bopomofo_Extended} \p{Block=Bopomofo_Extended} (32)
+ X \p{Bopomofo_Ext} \p{Bopomofo_Extended} (= \p{Block=
+ Bopomofo_Extended}) (32)
+ X \p{Bopomofo_Extended} \p{Block=Bopomofo_Extended} (Short:
+ \p{InBopomofoExt}) (32)
X \p{Box_Drawing} \p{Block=Box_Drawing} (128)
\p{Brah} \p{Brahmi} (= \p{Script=Brahmi}) (NOT
\p{Block=Brahmi}) (108)
@@ -821,7 +1104,8 @@ this property.
\p{Block=Brahmi}) (108)
\p{Brai} \p{Braille} (= \p{Script=Braille}) (256)
\p{Braille} \p{Script=Braille} (Short: \p{Brai}) (256)
- X \p{Braille_Patterns} \p{Block=Braille_Patterns} (256)
+ X \p{Braille_Patterns} \p{Block=Braille_Patterns} (Short:
+ \p{InBraille}) (256)
\p{Bugi} \p{Buginese} (= \p{Script=Buginese}) (NOT
\p{Block=Buginese}) (30)
\p{Buginese} \p{Script=Buginese} (Short: \p{Bugi}; NOT
@@ -830,10 +1114,14 @@ this property.
\p{Block=Buhid}) (20)
\p{Buhid} \p{Script=Buhid} (Short: \p{Buhd}; NOT
\p{Block=Buhid}) (20)
+ X \p{Byzantine_Music} \p{Byzantine_Musical_Symbols} (= \p{Block=
+ Byzantine_Musical_Symbols}) (256)
X \p{Byzantine_Musical_Symbols} \p{Block=Byzantine_Musical_Symbols}
- (256)
+ (Short: \p{InByzantineMusic}) (256)
\p{C} \p{Other} (= \p{General_Category=Other})
- (1_004_868)
+ (1_004_135)
+ \p{Cakm} \p{Chakma} (= \p{Script=Chakma}) (NOT
+ \p{Block=Chakma}) (67)
\p{Canadian_Aboriginal} \p{Script=Canadian_Aboriginal} (Short:
\p{Cans}) (710)
X \p{Canadian_Syllabics} \p{Unified_Canadian_Aboriginal_Syllabics}
@@ -841,51 +1129,87 @@ this property.
Unified_Canadian_Aboriginal_Syllabics})
(640)
T \p{Canonical_Combining_Class: 0} \p{Canonical_Combining_Class=
- Not_Reordered} (1_113_506)
+ Not_Reordered} (1_113_459)
T \p{Canonical_Combining_Class: 1} \p{Canonical_Combining_Class=
Overlay} (26)
T \p{Canonical_Combining_Class: 7} \p{Canonical_Combining_Class=
- Nukta} (12)
+ Nukta} (13)
T \p{Canonical_Combining_Class: 8} \p{Canonical_Combining_Class=
Kana_Voicing} (2)
T \p{Canonical_Combining_Class: 9} \p{Canonical_Combining_Class=
- Virama} (31)
- T \p{Canonical_Combining_Class: 10} (Short: \p{Ccc=10}) (1)
- T \p{Canonical_Combining_Class: 11} (Short: \p{Ccc=11}) (1)
- T \p{Canonical_Combining_Class: 12} (Short: \p{Ccc=12}) (1)
- T \p{Canonical_Combining_Class: 13} (Short: \p{Ccc=13}) (1)
- T \p{Canonical_Combining_Class: 14} (Short: \p{Ccc=14}) (1)
- T \p{Canonical_Combining_Class: 15} (Short: \p{Ccc=15}) (1)
- T \p{Canonical_Combining_Class: 16} (Short: \p{Ccc=16}) (1)
- T \p{Canonical_Combining_Class: 17} (Short: \p{Ccc=17}) (1)
- T \p{Canonical_Combining_Class: 18} (Short: \p{Ccc=18}) (2)
- T \p{Canonical_Combining_Class: 19} (Short: \p{Ccc=19}) (2)
- T \p{Canonical_Combining_Class: 20} (Short: \p{Ccc=20}) (1)
- T \p{Canonical_Combining_Class: 21} (Short: \p{Ccc=21}) (1)
- T \p{Canonical_Combining_Class: 22} (Short: \p{Ccc=22}) (1)
- T \p{Canonical_Combining_Class: 23} (Short: \p{Ccc=23}) (1)
- T \p{Canonical_Combining_Class: 24} (Short: \p{Ccc=24}) (1)
- T \p{Canonical_Combining_Class: 25} (Short: \p{Ccc=25}) (1)
- T \p{Canonical_Combining_Class: 26} (Short: \p{Ccc=26}) (1)
- T \p{Canonical_Combining_Class: 27} (Short: \p{Ccc=27}) (1)
- T \p{Canonical_Combining_Class: 28} (Short: \p{Ccc=28}) (1)
- T \p{Canonical_Combining_Class: 29} (Short: \p{Ccc=29}) (1)
- T \p{Canonical_Combining_Class: 30} (Short: \p{Ccc=30}) (2)
- T \p{Canonical_Combining_Class: 31} (Short: \p{Ccc=31}) (2)
- T \p{Canonical_Combining_Class: 32} (Short: \p{Ccc=32}) (2)
- T \p{Canonical_Combining_Class: 33} (Short: \p{Ccc=33}) (1)
- T \p{Canonical_Combining_Class: 34} (Short: \p{Ccc=34}) (1)
- T \p{Canonical_Combining_Class: 35} (Short: \p{Ccc=35}) (1)
- T \p{Canonical_Combining_Class: 36} (Short: \p{Ccc=36}) (1)
- T \p{Canonical_Combining_Class: 84} (Short: \p{Ccc=84}) (1)
- T \p{Canonical_Combining_Class: 91} (Short: \p{Ccc=91}) (1)
- T \p{Canonical_Combining_Class: 103} (Short: \p{Ccc=103}) (2)
- T \p{Canonical_Combining_Class: 107} (Short: \p{Ccc=107}) (4)
- T \p{Canonical_Combining_Class: 118} (Short: \p{Ccc=118}) (2)
- T \p{Canonical_Combining_Class: 122} (Short: \p{Ccc=122}) (4)
- T \p{Canonical_Combining_Class: 129} (Short: \p{Ccc=129}) (1)
- T \p{Canonical_Combining_Class: 130} (Short: \p{Ccc=130}) (6)
- T \p{Canonical_Combining_Class: 132} (Short: \p{Ccc=132}) (1)
+ Virama} (37)
+ T \p{Canonical_Combining_Class: 10} \p{Canonical_Combining_Class=
+ CCC10} (1)
+ T \p{Canonical_Combining_Class: 11} \p{Canonical_Combining_Class=
+ CCC11} (1)
+ T \p{Canonical_Combining_Class: 12} \p{Canonical_Combining_Class=
+ CCC12} (1)
+ T \p{Canonical_Combining_Class: 13} \p{Canonical_Combining_Class=
+ CCC13} (1)
+ T \p{Canonical_Combining_Class: 14} \p{Canonical_Combining_Class=
+ CCC14} (1)
+ T \p{Canonical_Combining_Class: 15} \p{Canonical_Combining_Class=
+ CCC15} (1)
+ T \p{Canonical_Combining_Class: 16} \p{Canonical_Combining_Class=
+ CCC16} (1)
+ T \p{Canonical_Combining_Class: 17} \p{Canonical_Combining_Class=
+ CCC17} (1)
+ T \p{Canonical_Combining_Class: 18} \p{Canonical_Combining_Class=
+ CCC18} (2)
+ T \p{Canonical_Combining_Class: 19} \p{Canonical_Combining_Class=
+ CCC19} (2)
+ T \p{Canonical_Combining_Class: 20} \p{Canonical_Combining_Class=
+ CCC20} (1)
+ T \p{Canonical_Combining_Class: 21} \p{Canonical_Combining_Class=
+ CCC21} (1)
+ T \p{Canonical_Combining_Class: 22} \p{Canonical_Combining_Class=
+ CCC22} (1)
+ T \p{Canonical_Combining_Class: 23} \p{Canonical_Combining_Class=
+ CCC23} (1)
+ T \p{Canonical_Combining_Class: 24} \p{Canonical_Combining_Class=
+ CCC24} (1)
+ T \p{Canonical_Combining_Class: 25} \p{Canonical_Combining_Class=
+ CCC25} (1)
+ T \p{Canonical_Combining_Class: 26} \p{Canonical_Combining_Class=
+ CCC26} (1)
+ T \p{Canonical_Combining_Class: 27} \p{Canonical_Combining_Class=
+ CCC27} (2)
+ T \p{Canonical_Combining_Class: 28} \p{Canonical_Combining_Class=
+ CCC28} (2)
+ T \p{Canonical_Combining_Class: 29} \p{Canonical_Combining_Class=
+ CCC29} (2)
+ T \p{Canonical_Combining_Class: 30} \p{Canonical_Combining_Class=
+ CCC30} (2)
+ T \p{Canonical_Combining_Class: 31} \p{Canonical_Combining_Class=
+ CCC31} (2)
+ T \p{Canonical_Combining_Class: 32} \p{Canonical_Combining_Class=
+ CCC32} (2)
+ T \p{Canonical_Combining_Class: 33} \p{Canonical_Combining_Class=
+ CCC33} (1)
+ T \p{Canonical_Combining_Class: 34} \p{Canonical_Combining_Class=
+ CCC34} (1)
+ T \p{Canonical_Combining_Class: 35} \p{Canonical_Combining_Class=
+ CCC35} (1)
+ T \p{Canonical_Combining_Class: 36} \p{Canonical_Combining_Class=
+ CCC36} (1)
+ T \p{Canonical_Combining_Class: 84} \p{Canonical_Combining_Class=
+ CCC84} (1)
+ T \p{Canonical_Combining_Class: 91} \p{Canonical_Combining_Class=
+ CCC91} (1)
+ T \p{Canonical_Combining_Class: 103} \p{Canonical_Combining_Class=
+ CCC103} (2)
+ T \p{Canonical_Combining_Class: 107} \p{Canonical_Combining_Class=
+ CCC107} (4)
+ T \p{Canonical_Combining_Class: 118} \p{Canonical_Combining_Class=
+ CCC118} (2)
+ T \p{Canonical_Combining_Class: 122} \p{Canonical_Combining_Class=
+ CCC122} (4)
+ T \p{Canonical_Combining_Class: 129} \p{Canonical_Combining_Class=
+ CCC129} (1)
+ T \p{Canonical_Combining_Class: 130} \p{Canonical_Combining_Class=
+ CCC130} (6)
+ T \p{Canonical_Combining_Class: 132} \p{Canonical_Combining_Class=
+ CCC132} (1)
T \p{Canonical_Combining_Class: 200} \p{Canonical_Combining_Class=
Attached_Below_Left} (0)
T \p{Canonical_Combining_Class: 202} \p{Canonical_Combining_Class=
@@ -897,7 +1221,7 @@ this property.
T \p{Canonical_Combining_Class: 218} \p{Canonical_Combining_Class=
Below_Left} (1)
T \p{Canonical_Combining_Class: 220} \p{Canonical_Combining_Class=
- Below} (121)
+ Below} (129)
T \p{Canonical_Combining_Class: 222} \p{Canonical_Combining_Class=
Below_Right} (4)
T \p{Canonical_Combining_Class: 224} \p{Canonical_Combining_Class=
@@ -907,7 +1231,7 @@ this property.
T \p{Canonical_Combining_Class: 228} \p{Canonical_Combining_Class=
Above_Left} (3)
T \p{Canonical_Combining_Class: 230} \p{Canonical_Combining_Class=
- Above} (320)
+ Above} (349)
T \p{Canonical_Combining_Class: 232} \p{Canonical_Combining_Class=
Above_Right} (4)
T \p{Canonical_Combining_Class: 233} \p{Canonical_Combining_Class=
@@ -917,8 +1241,8 @@ this property.
T \p{Canonical_Combining_Class: 240} \p{Canonical_Combining_Class=
Iota_Subscript} (1)
\p{Canonical_Combining_Class: A} \p{Canonical_Combining_Class=
- Above} (320)
- \p{Canonical_Combining_Class: Above} (Short: \p{Ccc=A}) (320)
+ Above} (349)
+ \p{Canonical_Combining_Class: Above} (Short: \p{Ccc=A}) (349)
\p{Canonical_Combining_Class: Above_Left} (Short: \p{Ccc=AL}) (3)
\p{Canonical_Combining_Class: Above_Right} (Short: \p{Ccc=AR}) (4)
\p{Canonical_Combining_Class: AL} \p{Canonical_Combining_Class=
@@ -942,14 +1266,50 @@ this property.
\p{Canonical_Combining_Class: Attached_Below_Left} (Short: \p{Ccc=
ATBL}) (0)
\p{Canonical_Combining_Class: B} \p{Canonical_Combining_Class=
- Below} (121)
- \p{Canonical_Combining_Class: Below} (Short: \p{Ccc=B}) (121)
+ Below} (129)
+ \p{Canonical_Combining_Class: Below} (Short: \p{Ccc=B}) (129)
\p{Canonical_Combining_Class: Below_Left} (Short: \p{Ccc=BL}) (1)
\p{Canonical_Combining_Class: Below_Right} (Short: \p{Ccc=BR}) (4)
\p{Canonical_Combining_Class: BL} \p{Canonical_Combining_Class=
Below_Left} (1)
\p{Canonical_Combining_Class: BR} \p{Canonical_Combining_Class=
Below_Right} (4)
+ \p{Canonical_Combining_Class: CCC10} (Short: \p{Ccc=CCC10}) (1)
+ \p{Canonical_Combining_Class: CCC103} (Short: \p{Ccc=CCC103}) (2)
+ \p{Canonical_Combining_Class: CCC107} (Short: \p{Ccc=CCC107}) (4)
+ \p{Canonical_Combining_Class: CCC11} (Short: \p{Ccc=CCC11}) (1)
+ \p{Canonical_Combining_Class: CCC118} (Short: \p{Ccc=CCC118}) (2)
+ \p{Canonical_Combining_Class: CCC12} (Short: \p{Ccc=CCC12}) (1)
+ \p{Canonical_Combining_Class: CCC122} (Short: \p{Ccc=CCC122}) (4)
+ \p{Canonical_Combining_Class: CCC129} (Short: \p{Ccc=CCC129}) (1)
+ \p{Canonical_Combining_Class: CCC13} (Short: \p{Ccc=CCC13}) (1)
+ \p{Canonical_Combining_Class: CCC130} (Short: \p{Ccc=CCC130}) (6)
+ \p{Canonical_Combining_Class: CCC132} (Short: \p{Ccc=CCC132}) (1)
+ \p{Canonical_Combining_Class: CCC14} (Short: \p{Ccc=CCC14}) (1)
+ \p{Canonical_Combining_Class: CCC15} (Short: \p{Ccc=CCC15}) (1)
+ \p{Canonical_Combining_Class: CCC16} (Short: \p{Ccc=CCC16}) (1)
+ \p{Canonical_Combining_Class: CCC17} (Short: \p{Ccc=CCC17}) (1)
+ \p{Canonical_Combining_Class: CCC18} (Short: \p{Ccc=CCC18}) (2)
+ \p{Canonical_Combining_Class: CCC19} (Short: \p{Ccc=CCC19}) (2)
+ \p{Canonical_Combining_Class: CCC20} (Short: \p{Ccc=CCC20}) (1)
+ \p{Canonical_Combining_Class: CCC21} (Short: \p{Ccc=CCC21}) (1)
+ \p{Canonical_Combining_Class: CCC22} (Short: \p{Ccc=CCC22}) (1)
+ \p{Canonical_Combining_Class: CCC23} (Short: \p{Ccc=CCC23}) (1)
+ \p{Canonical_Combining_Class: CCC24} (Short: \p{Ccc=CCC24}) (1)
+ \p{Canonical_Combining_Class: CCC25} (Short: \p{Ccc=CCC25}) (1)
+ \p{Canonical_Combining_Class: CCC26} (Short: \p{Ccc=CCC26}) (1)
+ \p{Canonical_Combining_Class: CCC27} (Short: \p{Ccc=CCC27}) (2)
+ \p{Canonical_Combining_Class: CCC28} (Short: \p{Ccc=CCC28}) (2)
+ \p{Canonical_Combining_Class: CCC29} (Short: \p{Ccc=CCC29}) (2)
+ \p{Canonical_Combining_Class: CCC30} (Short: \p{Ccc=CCC30}) (2)
+ \p{Canonical_Combining_Class: CCC31} (Short: \p{Ccc=CCC31}) (2)
+ \p{Canonical_Combining_Class: CCC32} (Short: \p{Ccc=CCC32}) (2)
+ \p{Canonical_Combining_Class: CCC33} (Short: \p{Ccc=CCC33}) (1)
+ \p{Canonical_Combining_Class: CCC34} (Short: \p{Ccc=CCC34}) (1)
+ \p{Canonical_Combining_Class: CCC35} (Short: \p{Ccc=CCC35}) (1)
+ \p{Canonical_Combining_Class: CCC36} (Short: \p{Ccc=CCC36}) (1)
+ \p{Canonical_Combining_Class: CCC84} (Short: \p{Ccc=CCC84}) (1)
+ \p{Canonical_Combining_Class: CCC91} (Short: \p{Ccc=CCC91}) (1)
\p{Canonical_Combining_Class: DA} \p{Canonical_Combining_Class=
Double_Above} (5)
\p{Canonical_Combining_Class: DB} \p{Canonical_Combining_Class=
@@ -967,35 +1327,35 @@ this property.
Left} (2)
\p{Canonical_Combining_Class: Left} (Short: \p{Ccc=L}) (2)
\p{Canonical_Combining_Class: NK} \p{Canonical_Combining_Class=
- Nukta} (12)
+ Nukta} (13)
\p{Canonical_Combining_Class: Not_Reordered} (Short: \p{Ccc=NR})
- (1_113_506)
+ (1_113_459)
\p{Canonical_Combining_Class: NR} \p{Canonical_Combining_Class=
- Not_Reordered} (1_113_506)
- \p{Canonical_Combining_Class: Nukta} (Short: \p{Ccc=NK}) (12)
+ Not_Reordered} (1_113_459)
+ \p{Canonical_Combining_Class: Nukta} (Short: \p{Ccc=NK}) (13)
\p{Canonical_Combining_Class: OV} \p{Canonical_Combining_Class=
Overlay} (26)
\p{Canonical_Combining_Class: Overlay} (Short: \p{Ccc=OV}) (26)
\p{Canonical_Combining_Class: R} \p{Canonical_Combining_Class=
Right} (1)
\p{Canonical_Combining_Class: Right} (Short: \p{Ccc=R}) (1)
- \p{Canonical_Combining_Class: Virama} (Short: \p{Ccc=VR}) (31)
+ \p{Canonical_Combining_Class: Virama} (Short: \p{Ccc=VR}) (37)
\p{Canonical_Combining_Class: VR} \p{Canonical_Combining_Class=
- Virama} (31)
+ Virama} (37)
\p{Cans} \p{Canadian_Aboriginal} (= \p{Script=
Canadian_Aboriginal}) (710)
\p{Cari} \p{Carian} (= \p{Script=Carian}) (NOT
\p{Block=Carian}) (49)
\p{Carian} \p{Script=Carian} (Short: \p{Cari}; NOT
\p{Block=Carian}) (49)
- \p{Case_Ignorable} \p{Case_Ignorable=Y} (Short: \p{CI}) (1692)
- \p{Case_Ignorable: N*} (Short: \p{CI=N}, \P{CI}) (1_112_420)
- \p{Case_Ignorable: Y*} (Short: \p{CI=Y}, \p{CI}) (1692)
- \p{Cased} \p{Cased=Y} (3427)
- \p{Cased: N*} (Single: \P{Cased}) (1_110_685)
- \p{Cased: Y*} (Single: \p{Cased}) (3427)
+ \p{Case_Ignorable} \p{Case_Ignorable=Y} (Short: \p{CI}) (1799)
+ \p{Case_Ignorable: N*} (Short: \p{CI=N}, \P{CI}) (1_112_313)
+ \p{Case_Ignorable: Y*} (Short: \p{CI=Y}, \p{CI}) (1799)
+ \p{Cased} \p{Cased=Y} (3448)
+ \p{Cased: N*} (Single: \P{Cased}) (1_110_664)
+ \p{Cased: Y*} (Single: \p{Cased}) (3448)
\p{Cased_Letter} \p{General_Category=Cased_Letter} (Short:
- \p{LC}) (3226)
+ \p{LC}) (3223)
\p{Category: *} \p{General_Category: *}
\p{Cc} \p{Cntrl} (= \p{General_Category=Control})
(65)
@@ -1004,102 +1364,152 @@ this property.
\p{Composition_Exclusion=Y}) (81)
\p{CE: *} \p{Composition_Exclusion: *}
\p{Cf} \p{Format} (= \p{General_Category=Format})
- (140)
+ (139)
+ \p{Chakma} \p{Script=Chakma} (Short: \p{Cakm}; NOT
+ \p{Block=Chakma}) (67)
\p{Cham} \p{Script=Cham} (NOT \p{Block=Cham}) (83)
\p{Changes_When_Casefolded} \p{Changes_When_Casefolded=Y} (Short:
- \p{CWCF}) (1102)
+ \p{CWCF}) (1107)
\p{Changes_When_Casefolded: N*} (Short: \p{CWCF=N}, \P{CWCF})
- (1_113_010)
+ (1_113_005)
\p{Changes_When_Casefolded: Y*} (Short: \p{CWCF=Y}, \p{CWCF})
- (1102)
+ (1107)
\p{Changes_When_Casemapped} \p{Changes_When_Casemapped=Y} (Short:
- \p{CWCM}) (2128)
+ \p{CWCM}) (2138)
\p{Changes_When_Casemapped: N*} (Short: \p{CWCM=N}, \P{CWCM})
- (1_111_984)
+ (1_111_974)
\p{Changes_When_Casemapped: Y*} (Short: \p{CWCM=Y}, \p{CWCM})
- (2128)
+ (2138)
\p{Changes_When_Lowercased} \p{Changes_When_Lowercased=Y} (Short:
- \p{CWL}) (1038)
+ \p{CWL}) (1043)
\p{Changes_When_Lowercased: N*} (Short: \p{CWL=N}, \P{CWL})
- (1_113_074)
- \p{Changes_When_Lowercased: Y*} (Short: \p{CWL=Y}, \p{CWL}) (1038)
+ (1_113_069)
+ \p{Changes_When_Lowercased: Y*} (Short: \p{CWL=Y}, \p{CWL}) (1043)
\p{Changes_When_NFKC_Casefolded} \p{Changes_When_NFKC_Casefolded=
- Y} (Short: \p{CWKCF}) (9792)
+ Y} (Short: \p{CWKCF}) (9944)
\p{Changes_When_NFKC_Casefolded: N*} (Short: \p{CWKCF=N},
- \P{CWKCF}) (1_104_320)
+ \P{CWKCF}) (1_104_168)
\p{Changes_When_NFKC_Casefolded: Y*} (Short: \p{CWKCF=Y},
- \p{CWKCF}) (9792)
+ \p{CWKCF}) (9944)
\p{Changes_When_Titlecased} \p{Changes_When_Titlecased=Y} (Short:
- \p{CWT}) (1094)
+ \p{CWT}) (1099)
\p{Changes_When_Titlecased: N*} (Short: \p{CWT=N}, \P{CWT})
- (1_113_018)
- \p{Changes_When_Titlecased: Y*} (Short: \p{CWT=Y}, \p{CWT}) (1094)
+ (1_113_013)
+ \p{Changes_When_Titlecased: Y*} (Short: \p{CWT=Y}, \p{CWT}) (1099)
\p{Changes_When_Uppercased} \p{Changes_When_Uppercased=Y} (Short:
- \p{CWU}) (1121)
+ \p{CWU}) (1126)
\p{Changes_When_Uppercased: N*} (Short: \p{CWU=N}, \P{CWU})
- (1_112_991)
- \p{Changes_When_Uppercased: Y*} (Short: \p{CWU=Y}, \p{CWU}) (1121)
+ (1_112_986)
+ \p{Changes_When_Uppercased: Y*} (Short: \p{CWU=Y}, \p{CWU}) (1126)
\p{Cher} \p{Cherokee} (= \p{Script=Cherokee}) (NOT
\p{Block=Cherokee}) (85)
\p{Cherokee} \p{Script=Cherokee} (Short: \p{Cher}; NOT
\p{Block=Cherokee}) (85)
\p{CI} \p{Case_Ignorable} (= \p{Case_Ignorable=
- Y}) (1692)
+ Y}) (1799)
\p{CI: *} \p{Case_Ignorable: *}
- X \p{CJK_Compatibility} \p{Block=CJK_Compatibility} (256)
- X \p{CJK_Compatibility_Forms} \p{Block=CJK_Compatibility_Forms} (32)
+ X \p{CJK} \p{CJK_Unified_Ideographs} (= \p{Block=
+ CJK_Unified_Ideographs}) (20_992)
+ X \p{CJK_Compat} \p{CJK_Compatibility} (= \p{Block=
+ CJK_Compatibility}) (256)
+ X \p{CJK_Compat_Forms} \p{CJK_Compatibility_Forms} (= \p{Block=
+ CJK_Compatibility_Forms}) (32)
+ X \p{CJK_Compat_Ideographs} \p{CJK_Compatibility_Ideographs} (=
+ \p{Block=CJK_Compatibility_Ideographs})
+ (512)
+ X \p{CJK_Compat_Ideographs_Sup}
+ \p{CJK_Compatibility_Ideographs_-
+ Supplement} (= \p{Block=
+ CJK_Compatibility_Ideographs_-
+ Supplement}) (544)
+ X \p{CJK_Compatibility} \p{Block=CJK_Compatibility} (Short:
+ \p{InCJKCompat}) (256)
+ X \p{CJK_Compatibility_Forms} \p{Block=CJK_Compatibility_Forms}
+ (Short: \p{InCJKCompatForms}) (32)
X \p{CJK_Compatibility_Ideographs} \p{Block=
- CJK_Compatibility_Ideographs} (512)
+ CJK_Compatibility_Ideographs} (Short:
+ \p{InCJKCompatIdeographs}) (512)
X \p{CJK_Compatibility_Ideographs_Supplement} \p{Block=
CJK_Compatibility_Ideographs_Supplement}
+ (Short: \p{InCJKCompatIdeographsSup})
(544)
- X \p{CJK_Radicals_Supplement} \p{Block=CJK_Radicals_Supplement} (128)
+ X \p{CJK_Ext_A} \p{CJK_Unified_Ideographs_Extension_A} (=
+ \p{Block=
+ CJK_Unified_Ideographs_Extension_A})
+ (6592)
+ X \p{CJK_Ext_B} \p{CJK_Unified_Ideographs_Extension_B} (=
+ \p{Block=
+ CJK_Unified_Ideographs_Extension_B})
+ (42_720)
+ X \p{CJK_Ext_C} \p{CJK_Unified_Ideographs_Extension_C} (=
+ \p{Block=
+ CJK_Unified_Ideographs_Extension_C})
+ (4160)
+ X \p{CJK_Ext_D} \p{CJK_Unified_Ideographs_Extension_D} (=
+ \p{Block=
+ CJK_Unified_Ideographs_Extension_D})
+ (224)
+ X \p{CJK_Radicals_Sup} \p{CJK_Radicals_Supplement} (= \p{Block=
+ CJK_Radicals_Supplement}) (128)
+ X \p{CJK_Radicals_Supplement} \p{Block=CJK_Radicals_Supplement}
+ (Short: \p{InCJKRadicalsSup}) (128)
X \p{CJK_Strokes} \p{Block=CJK_Strokes} (48)
+ X \p{CJK_Symbols} \p{CJK_Symbols_And_Punctuation} (=
+ \p{Block=CJK_Symbols_And_Punctuation})
+ (64)
X \p{CJK_Symbols_And_Punctuation} \p{Block=
- CJK_Symbols_And_Punctuation} (64)
+ CJK_Symbols_And_Punctuation} (Short:
+ \p{InCJKSymbols}) (64)
X \p{CJK_Unified_Ideographs} \p{Block=CJK_Unified_Ideographs}
- (20_992)
+ (Short: \p{InCJK}) (20_992)
X \p{CJK_Unified_Ideographs_Extension_A} \p{Block=
CJK_Unified_Ideographs_Extension_A}
- (6592)
+ (Short: \p{InCJKExtA}) (6592)
X \p{CJK_Unified_Ideographs_Extension_B} \p{Block=
CJK_Unified_Ideographs_Extension_B}
- (42_720)
+ (Short: \p{InCJKExtB}) (42_720)
X \p{CJK_Unified_Ideographs_Extension_C} \p{Block=
CJK_Unified_Ideographs_Extension_C}
- (4160)
+ (Short: \p{InCJKExtC}) (4160)
X \p{CJK_Unified_Ideographs_Extension_D} \p{Block=
- CJK_Unified_Ideographs_Extension_D} (224)
+ CJK_Unified_Ideographs_Extension_D}
+ (Short: \p{InCJKExtD}) (224)
\p{Close_Punctuation} \p{General_Category=Close_Punctuation}
(Short: \p{Pe}) (71)
\p{Cn} \p{Unassigned} (= \p{General_Category=
- Unassigned}) (865_147)
+ Unassigned}) (864_415)
\p{Cntrl} \p{General_Category=Control} Control
characters (Short: \p{Cc}) (65)
\p{Co} \p{Private_Use} (= \p{General_Category=
Private_Use}) (NOT \p{Private_Use_Area})
(137_468)
X \p{Combining_Diacritical_Marks} \p{Block=
- Combining_Diacritical_Marks} (112)
+ Combining_Diacritical_Marks} (Short:
+ \p{InDiacriticals}) (112)
X \p{Combining_Diacritical_Marks_For_Symbols} \p{Block=
Combining_Diacritical_Marks_For_Symbols}
- (Short: \p{InCombiningMarksForSymbols})
+ (Short: \p{InDiacriticalsForSymbols})
(48)
X \p{Combining_Diacritical_Marks_Supplement} \p{Block=
Combining_Diacritical_Marks_Supplement}
- (64)
- X \p{Combining_Half_Marks} \p{Block=Combining_Half_Marks} (16)
+ (Short: \p{InDiacriticalsSup}) (64)
+ X \p{Combining_Half_Marks} \p{Block=Combining_Half_Marks} (Short:
+ \p{InHalfMarks}) (16)
+ \p{Combining_Mark} \p{Mark} (= \p{General_Category=Mark})
+ (1645)
X \p{Combining_Marks_For_Symbols}
\p{Combining_Diacritical_Marks_For_-
Symbols} (= \p{Block=
Combining_Diacritical_Marks_For_-
Symbols}) (48)
- \p{Common} \p{Script=Common} (Short: \p{Zyyy}) (6379)
+ \p{Common} \p{Script=Common} (Short: \p{Zyyy}) (6412)
X \p{Common_Indic_Number_Forms} \p{Block=Common_Indic_Number_Forms}
- (16)
+ (Short: \p{InIndicNumberForms}) (16)
\p{Comp_Ex} \p{Full_Composition_Exclusion} (=
- \p{Full_Composition_Exclusion=Y}) (1118)
+ \p{Full_Composition_Exclusion=Y}) (1120)
\p{Comp_Ex: *} \p{Full_Composition_Exclusion: *}
+ X \p{Compat_Jamo} \p{Hangul_Compatibility_Jamo} (= \p{Block=
+ Hangul_Compatibility_Jamo}) (96)
\p{Composition_Exclusion} \p{Composition_Exclusion=Y} (Short:
\p{CE}) (81)
\p{Composition_Exclusion: N*} (Short: \p{CE=N}, \P{CE}) (1_114_031)
@@ -1111,67 +1521,83 @@ this property.
(65)
X \p{Control_Pictures} \p{Block=Control_Pictures} (64)
\p{Copt} \p{Coptic} (= \p{Script=Coptic}) (NOT
- \p{Block=Coptic}) (135)
+ \p{Block=Coptic}) (137)
\p{Coptic} \p{Script=Coptic} (Short: \p{Copt}; NOT
- \p{Block=Coptic}) (135)
- X \p{Counting_Rod_Numerals} \p{Block=Counting_Rod_Numerals} (32)
+ \p{Block=Coptic}) (137)
+ X \p{Counting_Rod} \p{Counting_Rod_Numerals} (= \p{Block=
+ Counting_Rod_Numerals}) (32)
+ X \p{Counting_Rod_Numerals} \p{Block=Counting_Rod_Numerals} (Short:
+ \p{InCountingRod}) (32)
\p{Cprt} \p{Cypriot} (= \p{Script=Cypriot}) (55)
\p{Cs} \p{Surrogate} (= \p{General_Category=
Surrogate}) (2048)
\p{Cuneiform} \p{Script=Cuneiform} (Short: \p{Xsux}; NOT
\p{Block=Cuneiform}) (982)
+ X \p{Cuneiform_Numbers} \p{Cuneiform_Numbers_And_Punctuation} (=
+ \p{Block=
+ Cuneiform_Numbers_And_Punctuation}) (128)
X \p{Cuneiform_Numbers_And_Punctuation} \p{Block=
- Cuneiform_Numbers_And_Punctuation} (128)
+ Cuneiform_Numbers_And_Punctuation}
+ (Short: \p{InCuneiformNumbers}) (128)
\p{Currency_Symbol} \p{General_Category=Currency_Symbol}
- (Short: \p{Sc}) (47)
+ (Short: \p{Sc}) (48)
X \p{Currency_Symbols} \p{Block=Currency_Symbols} (48)
\p{CWCF} \p{Changes_When_Casefolded} (=
- \p{Changes_When_Casefolded=Y}) (1102)
+ \p{Changes_When_Casefolded=Y}) (1107)
\p{CWCF: *} \p{Changes_When_Casefolded: *}
\p{CWCM} \p{Changes_When_Casemapped} (=
- \p{Changes_When_Casemapped=Y}) (2128)
+ \p{Changes_When_Casemapped=Y}) (2138)
\p{CWCM: *} \p{Changes_When_Casemapped: *}
\p{CWKCF} \p{Changes_When_NFKC_Casefolded} (=
\p{Changes_When_NFKC_Casefolded=Y})
- (9792)
+ (9944)
\p{CWKCF: *} \p{Changes_When_NFKC_Casefolded: *}
\p{CWL} \p{Changes_When_Lowercased} (=
- \p{Changes_When_Lowercased=Y}) (1038)
+ \p{Changes_When_Lowercased=Y}) (1043)
\p{CWL: *} \p{Changes_When_Lowercased: *}
\p{CWT} \p{Changes_When_Titlecased} (=
- \p{Changes_When_Titlecased=Y}) (1094)
+ \p{Changes_When_Titlecased=Y}) (1099)
\p{CWT: *} \p{Changes_When_Titlecased: *}
\p{CWU} \p{Changes_When_Uppercased} (=
- \p{Changes_When_Uppercased=Y}) (1121)
+ \p{Changes_When_Uppercased=Y}) (1126)
\p{CWU: *} \p{Changes_When_Uppercased: *}
\p{Cypriot} \p{Script=Cypriot} (Short: \p{Cprt}) (55)
X \p{Cypriot_Syllabary} \p{Block=Cypriot_Syllabary} (64)
\p{Cyrillic} \p{Script=Cyrillic} (Short: \p{Cyrl}; NOT
- \p{Block=Cyrillic}) (408)
- X \p{Cyrillic_Extended_A} \p{Block=Cyrillic_Extended_A} (32)
- X \p{Cyrillic_Extended_B} \p{Block=Cyrillic_Extended_B} (96)
- X \p{Cyrillic_Supplement} \p{Block=Cyrillic_Supplement} (48)
+ \p{Block=Cyrillic}) (417)
+ X \p{Cyrillic_Ext_A} \p{Cyrillic_Extended_A} (= \p{Block=
+ Cyrillic_Extended_A}) (32)
+ X \p{Cyrillic_Ext_B} \p{Cyrillic_Extended_B} (= \p{Block=
+ Cyrillic_Extended_B}) (96)
+ X \p{Cyrillic_Extended_A} \p{Block=Cyrillic_Extended_A} (Short:
+ \p{InCyrillicExtA}) (32)
+ X \p{Cyrillic_Extended_B} \p{Block=Cyrillic_Extended_B} (Short:
+ \p{InCyrillicExtB}) (96)
+ X \p{Cyrillic_Sup} \p{Cyrillic_Supplement} (= \p{Block=
+ Cyrillic_Supplement}) (48)
+ X \p{Cyrillic_Supplement} \p{Block=Cyrillic_Supplement} (Short:
+ \p{InCyrillicSup}) (48)
X \p{Cyrillic_Supplementary} \p{Cyrillic_Supplement} (= \p{Block=
Cyrillic_Supplement}) (48)
\p{Cyrl} \p{Cyrillic} (= \p{Script=Cyrillic}) (NOT
- \p{Block=Cyrillic}) (408)
- \p{Dash} \p{Dash=Y} (25)
- \p{Dash: N*} (Single: \P{Dash}) (1_114_087)
- \p{Dash: Y*} (Single: \p{Dash}) (25)
+ \p{Block=Cyrillic}) (417)
+ \p{Dash} \p{Dash=Y} (27)
+ \p{Dash: N*} (Single: \P{Dash}) (1_114_085)
+ \p{Dash: Y*} (Single: \p{Dash}) (27)
\p{Dash_Punctuation} \p{General_Category=Dash_Punctuation}
- (Short: \p{Pd}) (21)
+ (Short: \p{Pd}) (23)
\p{Decimal_Number} \p{Digit} (= \p{General_Category=
- Decimal_Number}) (420)
+ Decimal_Number}) (460)
\p{Decomposition_Type: Can} \p{Decomposition_Type=Canonical}
- (13_221)
- \p{Decomposition_Type: Canonical} (Short: \p{Dt=Can}) (13_221)
+ (13_225)
+ \p{Decomposition_Type: Canonical} (Short: \p{Dt=Can}) (13_225)
\p{Decomposition_Type: Circle} (Short: \p{Dt=Enc}) (240)
\p{Decomposition_Type: Com} \p{Decomposition_Type=Compat} (720)
\p{Decomposition_Type: Compat} (Short: \p{Dt=Com}) (720)
\p{Decomposition_Type: Enc} \p{Decomposition_Type=Circle} (240)
\p{Decomposition_Type: Fin} \p{Decomposition_Type=Final} (240)
\p{Decomposition_Type: Final} (Short: \p{Dt=Fin}) (240)
- \p{Decomposition_Type: Font} (Short: \p{Dt=Font}) (1043)
+ \p{Decomposition_Type: Font} (Short: \p{Dt=Font}) (1184)
\p{Decomposition_Type: Fra} \p{Decomposition_Type=Fraction} (20)
\p{Decomposition_Type: Fraction} (Short: \p{Dt=Fra}) (20)
\p{Decomposition_Type: Init} \p{Decomposition_Type=Initial} (171)
@@ -1185,18 +1611,18 @@ this property.
\p{Decomposition_Type: Nb} \p{Decomposition_Type=Nobreak} (5)
\p{Decomposition_Type: Nobreak} (Short: \p{Dt=Nb}) (5)
\p{Decomposition_Type: Non_Canon} \p{Decomposition_Type=
- Non_Canonical} (Perl extension) (3510)
+ Non_Canonical} (Perl extension) (3655)
\p{Decomposition_Type: Non_Canonical} Union of all non-canonical
decompositions (Short: \p{Dt=NonCanon})
- (Perl extension) (3510)
- \p{Decomposition_Type: None} (Short: \p{Dt=None}) (1_097_381)
+ (Perl extension) (3655)
+ \p{Decomposition_Type: None} (Short: \p{Dt=None}) (1_097_232)
\p{Decomposition_Type: Small} (Short: \p{Dt=Sml}) (26)
\p{Decomposition_Type: Sml} \p{Decomposition_Type=Small} (26)
\p{Decomposition_Type: Sqr} \p{Decomposition_Type=Square} (284)
\p{Decomposition_Type: Square} (Short: \p{Dt=Sqr}) (284)
\p{Decomposition_Type: Sub} (Short: \p{Dt=Sub}) (38)
- \p{Decomposition_Type: Sup} \p{Decomposition_Type=Super} (142)
- \p{Decomposition_Type: Super} (Short: \p{Dt=Sup}) (142)
+ \p{Decomposition_Type: Sup} \p{Decomposition_Type=Super} (146)
+ \p{Decomposition_Type: Super} (Short: \p{Dt=Sup}) (146)
\p{Decomposition_Type: Vert} \p{Decomposition_Type=Vertical} (35)
\p{Decomposition_Type: Vertical} (Short: \p{Dt=Vert}) (35)
\p{Decomposition_Type: Wide} (Short: \p{Dt=Wide}) (104)
@@ -1213,24 +1639,42 @@ this property.
\p{Deprecated: Y*} (Short: \p{Dep=Y}, \p{Dep}) (111)
\p{Deseret} \p{Script=Deseret} (Short: \p{Dsrt}) (80)
\p{Deva} \p{Devanagari} (= \p{Script=Devanagari})
- (NOT \p{Block=Devanagari}) (150)
+ (NOT \p{Block=Devanagari}) (151)
\p{Devanagari} \p{Script=Devanagari} (Short: \p{Deva};
- NOT \p{Block=Devanagari}) (150)
- X \p{Devanagari_Extended} \p{Block=Devanagari_Extended} (32)
+ NOT \p{Block=Devanagari}) (151)
+ X \p{Devanagari_Ext} \p{Devanagari_Extended} (= \p{Block=
+ Devanagari_Extended}) (32)
+ X \p{Devanagari_Extended} \p{Block=Devanagari_Extended} (Short:
+ \p{InDevanagariExt}) (32)
\p{DI} \p{Default_Ignorable_Code_Point} (=
\p{Default_Ignorable_Code_Point=Y})
(4167)
\p{DI: *} \p{Default_Ignorable_Code_Point: *}
- \p{Dia} \p{Diacritic} (= \p{Diacritic=Y}) (639)
+ \p{Dia} \p{Diacritic} (= \p{Diacritic=Y}) (693)
\p{Dia: *} \p{Diacritic: *}
- \p{Diacritic} \p{Diacritic=Y} (Short: \p{Dia}) (639)
- \p{Diacritic: N*} (Short: \p{Dia=N}, \P{Dia}) (1_113_473)
- \p{Diacritic: Y*} (Short: \p{Dia=Y}, \p{Dia}) (639)
+ \p{Diacritic} \p{Diacritic=Y} (Short: \p{Dia}) (693)
+ \p{Diacritic: N*} (Short: \p{Dia=N}, \P{Dia}) (1_113_419)
+ \p{Diacritic: Y*} (Short: \p{Dia=Y}, \p{Dia}) (693)
+ X \p{Diacriticals} \p{Combining_Diacritical_Marks} (=
+ \p{Block=Combining_Diacritical_Marks})
+ (112)
+ X \p{Diacriticals_For_Symbols}
+ \p{Combining_Diacritical_Marks_For_-
+ Symbols} (= \p{Block=
+ Combining_Diacritical_Marks_For_-
+ Symbols}) (48)
+ X \p{Diacriticals_Sup} \p{Combining_Diacritical_Marks_Supplement}
+ (= \p{Block=
+ Combining_Diacritical_Marks_Supplement})
+ (64)
\p{Digit} \p{General_Category=Decimal_Number} [0-9]
+ all other decimal digits (Short:
- \p{Nd}) (420)
+ \p{Nd}) (460)
X \p{Dingbats} \p{Block=Dingbats} (192)
- X \p{Domino_Tiles} \p{Block=Domino_Tiles} (112)
+ X \p{Domino} \p{Domino_Tiles} (= \p{Block=
+ Domino_Tiles}) (112)
+ X \p{Domino_Tiles} \p{Block=Domino_Tiles} (Short:
+ \p{InDomino}) (112)
\p{Dsrt} \p{Deseret} (= \p{Script=Deseret}) (80)
\p{Dt: *} \p{Decomposition_Type: *}
\p{Ea: *} \p{East_Asian_Width: *}
@@ -1253,122 +1697,150 @@ this property.
\p{Egyp}; NOT \p{Block=
Egyptian_Hieroglyphs}) (1071)
X \p{Emoticons} \p{Block=Emoticons} (80)
+ X \p{Enclosed_Alphanum} \p{Enclosed_Alphanumerics} (= \p{Block=
+ Enclosed_Alphanumerics}) (160)
+ X \p{Enclosed_Alphanum_Sup} \p{Enclosed_Alphanumeric_Supplement} (=
+ \p{Block=
+ Enclosed_Alphanumeric_Supplement}) (256)
X \p{Enclosed_Alphanumeric_Supplement} \p{Block=
- Enclosed_Alphanumeric_Supplement} (256)
- X \p{Enclosed_Alphanumerics} \p{Block=Enclosed_Alphanumerics} (160)
+ Enclosed_Alphanumeric_Supplement}
+ (Short: \p{InEnclosedAlphanumSup}) (256)
+ X \p{Enclosed_Alphanumerics} \p{Block=Enclosed_Alphanumerics}
+ (Short: \p{InEnclosedAlphanum}) (160)
+ X \p{Enclosed_CJK} \p{Enclosed_CJK_Letters_And_Months} (=
+ \p{Block=
+ Enclosed_CJK_Letters_And_Months}) (256)
X \p{Enclosed_CJK_Letters_And_Months} \p{Block=
- Enclosed_CJK_Letters_And_Months} (256)
+ Enclosed_CJK_Letters_And_Months} (Short:
+ \p{InEnclosedCJK}) (256)
+ X \p{Enclosed_Ideographic_Sup} \p{Enclosed_Ideographic_Supplement}
+ (= \p{Block=
+ Enclosed_Ideographic_Supplement}) (256)
X \p{Enclosed_Ideographic_Supplement} \p{Block=
- Enclosed_Ideographic_Supplement} (256)
+ Enclosed_Ideographic_Supplement} (Short:
+ \p{InEnclosedIdeographicSup}) (256)
\p{Enclosing_Mark} \p{General_Category=Enclosing_Mark}
(Short: \p{Me}) (12)
\p{Ethi} \p{Ethiopic} (= \p{Script=Ethiopic}) (NOT
\p{Block=Ethiopic}) (495)
\p{Ethiopic} \p{Script=Ethiopic} (Short: \p{Ethi}; NOT
\p{Block=Ethiopic}) (495)
- X \p{Ethiopic_Extended} \p{Block=Ethiopic_Extended} (96)
- X \p{Ethiopic_Extended_A} \p{Block=Ethiopic_Extended_A} (48)
- X \p{Ethiopic_Supplement} \p{Block=Ethiopic_Supplement} (32)
- \p{Ext} \p{Extender} (= \p{Extender=Y}) (28)
+ X \p{Ethiopic_Ext} \p{Ethiopic_Extended} (= \p{Block=
+ Ethiopic_Extended}) (96)
+ X \p{Ethiopic_Ext_A} \p{Ethiopic_Extended_A} (= \p{Block=
+ Ethiopic_Extended_A}) (48)
+ X \p{Ethiopic_Extended} \p{Block=Ethiopic_Extended} (Short:
+ \p{InEthiopicExt}) (96)
+ X \p{Ethiopic_Extended_A} \p{Block=Ethiopic_Extended_A} (Short:
+ \p{InEthiopicExtA}) (48)
+ X \p{Ethiopic_Sup} \p{Ethiopic_Supplement} (= \p{Block=
+ Ethiopic_Supplement}) (32)
+ X \p{Ethiopic_Supplement} \p{Block=Ethiopic_Supplement} (Short:
+ \p{InEthiopicSup}) (32)
+ \p{Ext} \p{Extender} (= \p{Extender=Y}) (31)
\p{Ext: *} \p{Extender: *}
- \p{Extender} \p{Extender=Y} (Short: \p{Ext}) (28)
- \p{Extender: N*} (Short: \p{Ext=N}, \P{Ext}) (1_114_084)
- \p{Extender: Y*} (Short: \p{Ext=Y}, \p{Ext}) (28)
+ \p{Extender} \p{Extender=Y} (Short: \p{Ext}) (31)
+ \p{Extender: N*} (Short: \p{Ext=N}, \P{Ext}) (1_114_081)
+ \p{Extender: Y*} (Short: \p{Ext=Y}, \p{Ext}) (31)
\p{Final_Punctuation} \p{General_Category=Final_Punctuation}
(Short: \p{Pf}) (10)
\p{Format} \p{General_Category=Format} (Short:
- \p{Cf}) (140)
+ \p{Cf}) (139)
\p{Full_Composition_Exclusion} \p{Full_Composition_Exclusion=Y}
- (Short: \p{CompEx}) (1118)
+ (Short: \p{CompEx}) (1120)
\p{Full_Composition_Exclusion: N*} (Short: \p{CompEx=N},
- \P{CompEx}) (1_112_994)
+ \P{CompEx}) (1_112_992)
\p{Full_Composition_Exclusion: Y*} (Short: \p{CompEx=Y},
- \p{CompEx}) (1118)
+ \p{CompEx}) (1120)
\p{Gc: *} \p{General_Category: *}
\p{GCB: *} \p{Grapheme_Cluster_Break: *}
- \p{General_Category: C} \p{General_Category=Other} (1_004_868)
+ \p{General_Category: C} \p{General_Category=Other} (1_004_135)
\p{General_Category: Cased_Letter} [\p{Ll}\p{Lu}\p{Lt}] (Short:
- \p{Gc=LC}, \p{LC}) (3226)
+ \p{Gc=LC}, \p{LC}) (3223)
\p{General_Category: Cc} \p{General_Category=Control} (65)
- \p{General_Category: Cf} \p{General_Category=Format} (140)
+ \p{General_Category: Cf} \p{General_Category=Format} (139)
\p{General_Category: Close_Punctuation} (Short: \p{Gc=Pe}, \p{Pe})
(71)
- \p{General_Category: Cn} \p{General_Category=Unassigned} (865_147)
+ \p{General_Category: Cn} \p{General_Category=Unassigned} (864_415)
\p{General_Category: Cntrl} \p{General_Category=Control} (65)
\p{General_Category: Co} \p{General_Category=Private_Use} (137_468)
+ \p{General_Category: Combining_Mark} \p{General_Category=Mark}
+ (1645)
\p{General_Category: Connector_Punctuation} (Short: \p{Gc=Pc},
\p{Pc}) (10)
\p{General_Category: Control} (Short: \p{Gc=Cc}, \p{Cc}) (65)
\p{General_Category: Cs} \p{General_Category=Surrogate} (2048)
\p{General_Category: Currency_Symbol} (Short: \p{Gc=Sc}, \p{Sc})
- (47)
+ (48)
\p{General_Category: Dash_Punctuation} (Short: \p{Gc=Pd}, \p{Pd})
- (21)
+ (23)
\p{General_Category: Decimal_Number} (Short: \p{Gc=Nd}, \p{Nd})
- (420)
+ (460)
\p{General_Category: Digit} \p{General_Category=Decimal_Number}
- (420)
+ (460)
\p{General_Category: Enclosing_Mark} (Short: \p{Gc=Me}, \p{Me})
(12)
\p{General_Category: Final_Punctuation} (Short: \p{Gc=Pf}, \p{Pf})
(10)
- \p{General_Category: Format} (Short: \p{Gc=Cf}, \p{Cf}) (140)
+ \p{General_Category: Format} (Short: \p{Gc=Cf}, \p{Cf}) (139)
\p{General_Category: Initial_Punctuation} (Short: \p{Gc=Pi},
\p{Pi}) (12)
- \p{General_Category: L} \p{General_Category=Letter} (100_520)
- X \p{General_Category: L&} \p{General_Category=Cased_Letter} (3226)
- X \p{General_Category: L_} \p{General_Category=Cased_Letter} (3226)
- \p{General_Category: LC} \p{General_Category=Cased_Letter} (3226)
- \p{General_Category: Letter} (Short: \p{Gc=L}, \p{L}) (100_520)
+ \p{General_Category: L} \p{General_Category=Letter} (101_013)
+ X \p{General_Category: L&} \p{General_Category=Cased_Letter} (3223)
+ X \p{General_Category: L_} \p{General_Category=Cased_Letter} Note
+ the trailing '_' matters in spite of
+ loose matching rules. (3223)
+ \p{General_Category: LC} \p{General_Category=Cased_Letter} (3223)
+ \p{General_Category: Letter} (Short: \p{Gc=L}, \p{L}) (101_013)
\p{General_Category: Letter_Number} (Short: \p{Gc=Nl}, \p{Nl})
(224)
\p{General_Category: Line_Separator} (Short: \p{Gc=Zl}, \p{Zl}) (1)
\p{General_Category: Ll} \p{General_Category=Lowercase_Letter}
(/i= General_Category=Cased_Letter)
- (1759)
- \p{General_Category: Lm} \p{General_Category=Modifier_Letter} (210)
- \p{General_Category: Lo} \p{General_Category=Other_Letter} (97_084)
+ (1751)
+ \p{General_Category: Lm} \p{General_Category=Modifier_Letter} (237)
+ \p{General_Category: Lo} \p{General_Category=Other_Letter} (97_553)
\p{General_Category: Lowercase_Letter} (Short: \p{Gc=Ll}, \p{Ll};
- /i= General_Category=Cased_Letter) (1759)
+ /i= General_Category=Cased_Letter) (1751)
\p{General_Category: Lt} \p{General_Category=Titlecase_Letter}
(/i= General_Category=Cased_Letter) (31)
\p{General_Category: Lu} \p{General_Category=Uppercase_Letter}
(/i= General_Category=Cased_Letter)
- (1436)
- \p{General_Category: M} \p{General_Category=Mark} (1498)
- \p{General_Category: Mark} (Short: \p{Gc=M}, \p{M}) (1498)
- \p{General_Category: Math_Symbol} (Short: \p{Gc=Sm}, \p{Sm}) (948)
- \p{General_Category: Mc} \p{General_Category=Spacing_Mark} (287)
+ (1441)
+ \p{General_Category: M} \p{General_Category=Mark} (1645)
+ \p{General_Category: Mark} (Short: \p{Gc=M}, \p{M}) (1645)
+ \p{General_Category: Math_Symbol} (Short: \p{Gc=Sm}, \p{Sm}) (952)
+ \p{General_Category: Mc} \p{General_Category=Spacing_Mark} (353)
\p{General_Category: Me} \p{General_Category=Enclosing_Mark} (12)
\p{General_Category: Mn} \p{General_Category=Nonspacing_Mark}
- (1199)
+ (1280)
\p{General_Category: Modifier_Letter} (Short: \p{Gc=Lm}, \p{Lm})
- (210)
+ (237)
\p{General_Category: Modifier_Symbol} (Short: \p{Gc=Sk}, \p{Sk})
(115)
- \p{General_Category: N} \p{General_Category=Number} (1100)
- \p{General_Category: Nd} \p{General_Category=Decimal_Number} (420)
+ \p{General_Category: N} \p{General_Category=Number} (1148)
+ \p{General_Category: Nd} \p{General_Category=Decimal_Number} (460)
\p{General_Category: Nl} \p{General_Category=Letter_Number} (224)
- \p{General_Category: No} \p{General_Category=Other_Number} (456)
+ \p{General_Category: No} \p{General_Category=Other_Number} (464)
\p{General_Category: Nonspacing_Mark} (Short: \p{Gc=Mn}, \p{Mn})
- (1199)
- \p{General_Category: Number} (Short: \p{Gc=N}, \p{N}) (1100)
+ (1280)
+ \p{General_Category: Number} (Short: \p{Gc=N}, \p{N}) (1148)
\p{General_Category: Open_Punctuation} (Short: \p{Gc=Ps}, \p{Ps})
(72)
- \p{General_Category: Other} (Short: \p{Gc=C}, \p{C}) (1_004_868)
+ \p{General_Category: Other} (Short: \p{Gc=C}, \p{C}) (1_004_135)
\p{General_Category: Other_Letter} (Short: \p{Gc=Lo}, \p{Lo})
- (97_084)
- \p{General_Category: Other_Number} (Short: \p{Gc=No}, \p{No}) (456)
+ (97_553)
+ \p{General_Category: Other_Number} (Short: \p{Gc=No}, \p{No}) (464)
\p{General_Category: Other_Punctuation} (Short: \p{Gc=Po}, \p{Po})
- (402)
+ (434)
\p{General_Category: Other_Symbol} (Short: \p{Gc=So}, \p{So})
- (4398)
- \p{General_Category: P} \p{General_Category=Punctuation} (598)
+ (4404)
+ \p{General_Category: P} \p{General_Category=Punctuation} (632)
\p{General_Category: Paragraph_Separator} (Short: \p{Gc=Zp},
\p{Zp}) (1)
\p{General_Category: Pc} \p{General_Category=
Connector_Punctuation} (10)
- \p{General_Category: Pd} \p{General_Category=Dash_Punctuation} (21)
+ \p{General_Category: Pd} \p{General_Category=Dash_Punctuation} (23)
\p{General_Category: Pe} \p{General_Category=Close_Punctuation}
(71)
\p{General_Category: Pf} \p{General_Category=Final_Punctuation}
@@ -1376,41 +1848,45 @@ this property.
\p{General_Category: Pi} \p{General_Category=Initial_Punctuation}
(12)
\p{General_Category: Po} \p{General_Category=Other_Punctuation}
- (402)
+ (434)
\p{General_Category: Private_Use} (Short: \p{Gc=Co}, \p{Co})
(137_468)
\p{General_Category: Ps} \p{General_Category=Open_Punctuation} (72)
- \p{General_Category: Punct} \p{General_Category=Punctuation} (598)
- \p{General_Category: Punctuation} (Short: \p{Gc=P}, \p{P}) (598)
- \p{General_Category: S} \p{General_Category=Symbol} (5508)
- \p{General_Category: Sc} \p{General_Category=Currency_Symbol} (47)
+ \p{General_Category: Punct} \p{General_Category=Punctuation} (632)
+ \p{General_Category: Punctuation} (Short: \p{Gc=P}, \p{P}) (632)
+ \p{General_Category: S} \p{General_Category=Symbol} (5519)
+ \p{General_Category: Sc} \p{General_Category=Currency_Symbol} (48)
\p{General_Category: Separator} (Short: \p{Gc=Z}, \p{Z}) (20)
\p{General_Category: Sk} \p{General_Category=Modifier_Symbol} (115)
- \p{General_Category: Sm} \p{General_Category=Math_Symbol} (948)
- \p{General_Category: So} \p{General_Category=Other_Symbol} (4398)
+ \p{General_Category: Sm} \p{General_Category=Math_Symbol} (952)
+ \p{General_Category: So} \p{General_Category=Other_Symbol} (4404)
\p{General_Category: Space_Separator} (Short: \p{Gc=Zs}, \p{Zs})
(18)
- \p{General_Category: Spacing_Mark} (Short: \p{Gc=Mc}, \p{Mc}) (287)
+ \p{General_Category: Spacing_Mark} (Short: \p{Gc=Mc}, \p{Mc}) (353)
\p{General_Category: Surrogate} (Short: \p{Gc=Cs}, \p{Cs}) (2048)
- \p{General_Category: Symbol} (Short: \p{Gc=S}, \p{S}) (5508)
+ \p{General_Category: Symbol} (Short: \p{Gc=S}, \p{S}) (5519)
\p{General_Category: Titlecase_Letter} (Short: \p{Gc=Lt}, \p{Lt};
/i= General_Category=Cased_Letter) (31)
\p{General_Category: Unassigned} (Short: \p{Gc=Cn}, \p{Cn})
- (865_147)
+ (864_415)
\p{General_Category: Uppercase_Letter} (Short: \p{Gc=Lu}, \p{Lu};
- /i= General_Category=Cased_Letter) (1436)
+ /i= General_Category=Cased_Letter) (1441)
\p{General_Category: Z} \p{General_Category=Separator} (20)
\p{General_Category: Zl} \p{General_Category=Line_Separator} (1)
\p{General_Category: Zp} \p{General_Category=Paragraph_Separator}
(1)
\p{General_Category: Zs} \p{General_Category=Space_Separator} (18)
- X \p{General_Punctuation} \p{Block=General_Punctuation} (112)
+ X \p{General_Punctuation} \p{Block=General_Punctuation} (Short:
+ \p{InPunctuation}) (112)
X \p{Geometric_Shapes} \p{Block=Geometric_Shapes} (96)
\p{Geor} \p{Georgian} (= \p{Script=Georgian}) (NOT
- \p{Block=Georgian}) (120)
+ \p{Block=Georgian}) (127)
\p{Georgian} \p{Script=Georgian} (Short: \p{Geor}; NOT
- \p{Block=Georgian}) (120)
- X \p{Georgian_Supplement} \p{Block=Georgian_Supplement} (48)
+ \p{Block=Georgian}) (127)
+ X \p{Georgian_Sup} \p{Georgian_Supplement} (= \p{Block=
+ Georgian_Supplement}) (48)
+ X \p{Georgian_Supplement} \p{Block=Georgian_Supplement} (Short:
+ \p{InGeorgianSup}) (48)
\p{Glag} \p{Glagolitic} (= \p{Script=Glagolitic})
(NOT \p{Block=Glagolitic}) (94)
\p{Glagolitic} \p{Script=Glagolitic} (Short: \p{Glag};
@@ -1420,69 +1896,82 @@ this property.
\p{Gothic} \p{Script=Gothic} (Short: \p{Goth}; NOT
\p{Block=Gothic}) (27)
\p{Gr_Base} \p{Grapheme_Base} (= \p{Grapheme_Base=Y})
- (108_010)
+ (108_660)
\p{Gr_Base: *} \p{Grapheme_Base: *}
\p{Gr_Ext} \p{Grapheme_Extend} (= \p{Grapheme_Extend=
- Y}) (1234)
+ Y}) (1317)
\p{Gr_Ext: *} \p{Grapheme_Extend: *}
- \p{Graph} Characters that are graphical (246_832)
+ \p{Graph} Characters that are graphical (247_564)
\p{Grapheme_Base} \p{Grapheme_Base=Y} (Short: \p{GrBase})
- (108_010)
+ (108_660)
\p{Grapheme_Base: N*} (Short: \p{GrBase=N}, \P{GrBase})
- (1_006_102)
- \p{Grapheme_Base: Y*} (Short: \p{GrBase=Y}, \p{GrBase}) (108_010)
+ (1_005_452)
+ \p{Grapheme_Base: Y*} (Short: \p{GrBase=Y}, \p{GrBase}) (108_660)
\p{Grapheme_Cluster_Break: CN} \p{Grapheme_Cluster_Break=Control}
- (203)
- \p{Grapheme_Cluster_Break: Control} (Short: \p{GCB=CN}) (203)
+ (6023)
+ \p{Grapheme_Cluster_Break: Control} (Short: \p{GCB=CN}) (6023)
\p{Grapheme_Cluster_Break: CR} (Short: \p{GCB=CR}) (1)
\p{Grapheme_Cluster_Break: EX} \p{Grapheme_Cluster_Break=Extend}
- (1234)
- \p{Grapheme_Cluster_Break: Extend} (Short: \p{GCB=EX}) (1234)
+ (1317)
+ \p{Grapheme_Cluster_Break: Extend} (Short: \p{GCB=EX}) (1317)
\p{Grapheme_Cluster_Break: L} (Short: \p{GCB=L}) (125)
\p{Grapheme_Cluster_Break: LF} (Short: \p{GCB=LF}) (1)
\p{Grapheme_Cluster_Break: LV} (Short: \p{GCB=LV}) (399)
\p{Grapheme_Cluster_Break: LVT} (Short: \p{GCB=LVT}) (10_773)
- \p{Grapheme_Cluster_Break: Other} (Short: \p{GCB=XX}) (1_100_854)
+ \p{Grapheme_Cluster_Break: Other} (Short: \p{GCB=XX}) (1_094_950)
\p{Grapheme_Cluster_Break: PP} \p{Grapheme_Cluster_Break=Prepend}
- (15)
- \p{Grapheme_Cluster_Break: Prepend} (Short: \p{GCB=PP}) (15)
+ (0)
+ \p{Grapheme_Cluster_Break: Prepend} (Short: \p{GCB=PP}) (0)
\p{Grapheme_Cluster_Break: SM} \p{Grapheme_Cluster_Break=
- SpacingMark} (275)
- \p{Grapheme_Cluster_Break: SpacingMark} (Short: \p{GCB=SM}) (275)
+ SpacingMark} (291)
+ \p{Grapheme_Cluster_Break: SpacingMark} (Short: \p{GCB=SM}) (291)
\p{Grapheme_Cluster_Break: T} (Short: \p{GCB=T}) (137)
\p{Grapheme_Cluster_Break: V} (Short: \p{GCB=V}) (95)
\p{Grapheme_Cluster_Break: XX} \p{Grapheme_Cluster_Break=Other}
- (1_100_854)
+ (1_094_950)
\p{Grapheme_Extend} \p{Grapheme_Extend=Y} (Short: \p{GrExt})
- (1234)
- \p{Grapheme_Extend: N*} (Short: \p{GrExt=N}, \P{GrExt}) (1_112_878)
- \p{Grapheme_Extend: Y*} (Short: \p{GrExt=Y}, \p{GrExt}) (1234)
+ (1317)
+ \p{Grapheme_Extend: N*} (Short: \p{GrExt=N}, \P{GrExt}) (1_112_795)
+ \p{Grapheme_Extend: Y*} (Short: \p{GrExt=Y}, \p{GrExt}) (1317)
\p{Greek} \p{Script=Greek} (Short: \p{Grek}; NOT
\p{Greek_And_Coptic}) (511)
X \p{Greek_And_Coptic} \p{Block=Greek_And_Coptic} (Short:
\p{InGreek}) (144)
- X \p{Greek_Extended} \p{Block=Greek_Extended} (256)
+ X \p{Greek_Ext} \p{Greek_Extended} (= \p{Block=
+ Greek_Extended}) (256)
+ X \p{Greek_Extended} \p{Block=Greek_Extended} (Short:
+ \p{InGreekExt}) (256)
\p{Grek} \p{Greek} (= \p{Script=Greek}) (NOT
\p{Greek_And_Coptic}) (511)
\p{Gujarati} \p{Script=Gujarati} (Short: \p{Gujr}; NOT
- \p{Block=Gujarati}) (83)
+ \p{Block=Gujarati}) (84)
\p{Gujr} \p{Gujarati} (= \p{Script=Gujarati}) (NOT
- \p{Block=Gujarati}) (83)
+ \p{Block=Gujarati}) (84)
\p{Gurmukhi} \p{Script=Gurmukhi} (Short: \p{Guru}; NOT
\p{Block=Gurmukhi}) (79)
\p{Guru} \p{Gurmukhi} (= \p{Script=Gurmukhi}) (NOT
\p{Block=Gurmukhi}) (79)
+ X \p{Half_And_Full_Forms} \p{Halfwidth_And_Fullwidth_Forms} (=
+ \p{Block=Halfwidth_And_Fullwidth_Forms})
+ (240)
+ X \p{Half_Marks} \p{Combining_Half_Marks} (= \p{Block=
+ Combining_Half_Marks}) (16)
X \p{Halfwidth_And_Fullwidth_Forms} \p{Block=
- Halfwidth_And_Fullwidth_Forms} (240)
- \p{Han} \p{Script=Han} (75_960)
- \p{Hang} \p{Hangul} (= \p{Script=Hangul}) (11_739)
- \p{Hangul} \p{Script=Hangul} (Short: \p{Hang})
- (11_739)
+ Halfwidth_And_Fullwidth_Forms} (Short:
+ \p{InHalfAndFullForms}) (240)
+ \p{Han} \p{Script=Han} (75_963)
+ \p{Hang} \p{Hangul} (= \p{Script=Hangul}) (NOT
+ \p{Hangul_Syllables}) (11_739)
+ \p{Hangul} \p{Script=Hangul} (Short: \p{Hang}; NOT
+ \p{Hangul_Syllables}) (11_739)
X \p{Hangul_Compatibility_Jamo} \p{Block=Hangul_Compatibility_Jamo}
- (96)
- X \p{Hangul_Jamo} \p{Block=Hangul_Jamo} (256)
- X \p{Hangul_Jamo_Extended_A} \p{Block=Hangul_Jamo_Extended_A} (32)
- X \p{Hangul_Jamo_Extended_B} \p{Block=Hangul_Jamo_Extended_B} (80)
+ (Short: \p{InCompatJamo}) (96)
+ X \p{Hangul_Jamo} \p{Block=Hangul_Jamo} (Short: \p{InJamo})
+ (256)
+ X \p{Hangul_Jamo_Extended_A} \p{Block=Hangul_Jamo_Extended_A}
+ (Short: \p{InJamoExtA}) (32)
+ X \p{Hangul_Jamo_Extended_B} \p{Block=Hangul_Jamo_Extended_B}
+ (Short: \p{InJamoExtB}) (80)
\p{Hangul_Syllable_Type: L} \p{Hangul_Syllable_Type=Leading_Jamo}
(125)
\p{Hangul_Syllable_Type: Leading_Jamo} (Short: \p{Hst=L}) (125)
@@ -1503,8 +1992,9 @@ this property.
\p{Hangul_Syllable_Type: V} \p{Hangul_Syllable_Type=Vowel_Jamo}
(95)
\p{Hangul_Syllable_Type: Vowel_Jamo} (Short: \p{Hst=V}) (95)
- X \p{Hangul_Syllables} \p{Block=Hangul_Syllables} (11_184)
- \p{Hani} \p{Han} (= \p{Script=Han}) (75_960)
+ X \p{Hangul_Syllables} \p{Block=Hangul_Syllables} (Short:
+ \p{InHangul}) (11_184)
+ \p{Hani} \p{Han} (= \p{Script=Han}) (75_963)
\p{Hano} \p{Hanunoo} (= \p{Script=Hanunoo}) (NOT
\p{Block=Hanunoo}) (21)
\p{Hanunoo} \p{Script=Hanunoo} (Short: \p{Hano}; NOT
@@ -1519,7 +2009,11 @@ this property.
\p{Hex_Digit: N*} (Short: \p{Hex=N}, \P{Hex}) (1_114_068)
\p{Hex_Digit: Y*} (Short: \p{Hex=Y}, \p{Hex}) (44)
X \p{High_Private_Use_Surrogates} \p{Block=
- High_Private_Use_Surrogates} (128)
+ High_Private_Use_Surrogates} (Short:
+ \p{InHighPUSurrogates}) (128)
+ X \p{High_PU_Surrogates} \p{High_Private_Use_Surrogates} (=
+ \p{Block=High_Private_Use_Surrogates})
+ (128)
X \p{High_Surrogates} \p{Block=High_Surrogates} (896)
\p{Hira} \p{Hiragana} (= \p{Script=Hiragana}) (NOT
\p{Block=Hiragana}) (91)
@@ -1534,26 +2028,29 @@ this property.
D \p{Hyphen: Y*} Supplanted by Line_Break property values;
see www.unicode.org/reports/tr14
(Single: \p{Hyphen}) (11)
- \p{ID_Continue} \p{ID_Continue=Y} (Short: \p{IDC})
- (102_675)
- \p{ID_Continue: N*} (Short: \p{IDC=N}, \P{IDC}) (1_011_437)
- \p{ID_Continue: Y*} (Short: \p{IDC=Y}, \p{IDC}) (102_675)
- \p{ID_Start} \p{ID_Start=Y} (Short: \p{IDS}) (100_747)
- \p{ID_Start: N*} (Short: \p{IDS=N}, \P{IDS}) (1_013_365)
- \p{ID_Start: Y*} (Short: \p{IDS=Y}, \p{IDS}) (100_747)
- \p{IDC} \p{ID_Continue} (= \p{ID_Continue=Y})
- (102_675)
+ \p{ID_Continue} \p{ID_Continue=Y} (Short: \p{IDC}; NOT
+ \p{Ideographic_Description_Characters})
+ (103_355)
+ \p{ID_Continue: N*} (Short: \p{IDC=N}, \P{IDC}) (1_010_757)
+ \p{ID_Continue: Y*} (Short: \p{IDC=Y}, \p{IDC}) (103_355)
+ \p{ID_Start} \p{ID_Start=Y} (Short: \p{IDS}) (101_240)
+ \p{ID_Start: N*} (Short: \p{IDS=N}, \P{IDS}) (1_012_872)
+ \p{ID_Start: Y*} (Short: \p{IDS=Y}, \p{IDS}) (101_240)
+ \p{IDC} \p{ID_Continue} (= \p{ID_Continue=Y}) (NOT
+ \p{Ideographic_Description_Characters})
+ (103_355)
\p{IDC: *} \p{ID_Continue: *}
\p{Ideo} \p{Ideographic} (= \p{Ideographic=Y})
- (75_630)
+ (75_633)
\p{Ideo: *} \p{Ideographic: *}
\p{Ideographic} \p{Ideographic=Y} (Short: \p{Ideo})
- (75_630)
- \p{Ideographic: N*} (Short: \p{Ideo=N}, \P{Ideo}) (1_038_482)
- \p{Ideographic: Y*} (Short: \p{Ideo=Y}, \p{Ideo}) (75_630)
+ (75_633)
+ \p{Ideographic: N*} (Short: \p{Ideo=N}, \P{Ideo}) (1_038_479)
+ \p{Ideographic: Y*} (Short: \p{Ideo=Y}, \p{Ideo}) (75_633)
X \p{Ideographic_Description_Characters} \p{Block=
- Ideographic_Description_Characters} (16)
- \p{IDS} \p{ID_Start} (= \p{ID_Start=Y}) (100_747)
+ Ideographic_Description_Characters}
+ (Short: \p{InIDC}) (16)
+ \p{IDS} \p{ID_Start} (= \p{ID_Start=Y}) (101_240)
\p{IDS: *} \p{ID_Start: *}
\p{IDS_Binary_Operator} \p{IDS_Binary_Operator=Y} (Short:
\p{IDSB}) (10)
@@ -1576,8 +2073,10 @@ this property.
Imperial_Aramaic}) (31)
\p{In: *} \p{Present_In: *} (Perl extension)
\p{In_*} \p{Block: *}
+ X \p{Indic_Number_Forms} \p{Common_Indic_Number_Forms} (= \p{Block=
+ Common_Indic_Number_Forms}) (16)
\p{Inherited} \p{Script=Inherited} (Short: \p{Zinh})
- (523)
+ (524)
\p{Initial_Punctuation} \p{General_Category=Initial_Punctuation}
(Short: \p{Pi}) (12)
\p{Inscriptional_Pahlavi} \p{Script=Inscriptional_Pahlavi} (Short:
@@ -1586,14 +2085,23 @@ this property.
\p{Inscriptional_Parthian} \p{Script=Inscriptional_Parthian}
(Short: \p{Prti}; NOT \p{Block=
Inscriptional_Parthian}) (30)
- X \p{IPA_Extensions} \p{Block=IPA_Extensions} (96)
+ X \p{IPA_Ext} \p{IPA_Extensions} (= \p{Block=
+ IPA_Extensions}) (96)
+ X \p{IPA_Extensions} \p{Block=IPA_Extensions} (Short:
+ \p{InIPAExt}) (96)
\p{Is_*} \p{*} (Any exceptions are individually
noted beginning with the word NOT.) If
an entry has flag(s) at its beginning,
- like 'D', the 'Is_' form has the same
+ like "D", the "Is_" form has the same
flag(s)
\p{Ital} \p{Old_Italic} (= \p{Script=Old_Italic})
(NOT \p{Block=Old_Italic}) (35)
+ X \p{Jamo} \p{Hangul_Jamo} (= \p{Block=Hangul_Jamo})
+ (256)
+ X \p{Jamo_Ext_A} \p{Hangul_Jamo_Extended_A} (= \p{Block=
+ Hangul_Jamo_Extended_A}) (32)
+ X \p{Jamo_Ext_B} \p{Hangul_Jamo_Extended_B} (= \p{Block=
+ Hangul_Jamo_Extended_B}) (80)
\p{Java} \p{Javanese} (= \p{Script=Javanese}) (NOT
\p{Block=Javanese}) (91)
\p{Javanese} \p{Script=Javanese} (Short: \p{Java}; NOT
@@ -1607,7 +2115,7 @@ this property.
\p{Joining_Group: Ain} (Short: \p{Jg=Ain}) (7)
\p{Joining_Group: Alaph} (Short: \p{Jg=Alaph}) (1)
\p{Joining_Group: Alef} (Short: \p{Jg=Alef}) (10)
- \p{Joining_Group: Beh} (Short: \p{Jg=Beh}) (19)
+ \p{Joining_Group: Beh} (Short: \p{Jg=Beh}) (20)
\p{Joining_Group: Beth} (Short: \p{Jg=Beth}) (2)
\p{Joining_Group: Burushaski_Yeh_Barree} (Short: \p{Jg=
BurushaskiYehBarree}) (2)
@@ -1616,13 +2124,13 @@ this property.
\p{Joining_Group: E} (Short: \p{Jg=E}) (1)
\p{Joining_Group: Farsi_Yeh} (Short: \p{Jg=FarsiYeh}) (7)
\p{Joining_Group: Fe} (Short: \p{Jg=Fe}) (1)
- \p{Joining_Group: Feh} (Short: \p{Jg=Feh}) (9)
+ \p{Joining_Group: Feh} (Short: \p{Jg=Feh}) (10)
\p{Joining_Group: Final_Semkath} (Short: \p{Jg=FinalSemkath}) (1)
\p{Joining_Group: Gaf} (Short: \p{Jg=Gaf}) (13)
\p{Joining_Group: Gamal} (Short: \p{Jg=Gamal}) (3)
- \p{Joining_Group: Hah} (Short: \p{Jg=Hah}) (17)
- \p{Joining_Group: Hamza_On_Heh_Goal} \p{Joining_Group=
- Teh_Marbuta_Goal} (1)
+ \p{Joining_Group: Hah} (Short: \p{Jg=Hah}) (18)
+ \p{Joining_Group: Hamza_On_Heh_Goal} (Short: \p{Jg=
+ HamzaOnHehGoal}) (1)
\p{Joining_Group: He} (Short: \p{Jg=He}) (1)
\p{Joining_Group: Heh} (Short: \p{Jg=Heh}) (1)
\p{Joining_Group: Heh_Goal} (Short: \p{Jg=HehGoal}) (2)
@@ -1631,20 +2139,21 @@ this property.
\p{Joining_Group: Kaph} (Short: \p{Jg=Kaph}) (1)
\p{Joining_Group: Khaph} (Short: \p{Jg=Khaph}) (1)
\p{Joining_Group: Knotted_Heh} (Short: \p{Jg=KnottedHeh}) (2)
- \p{Joining_Group: Lam} (Short: \p{Jg=Lam}) (6)
+ \p{Joining_Group: Lam} (Short: \p{Jg=Lam}) (7)
\p{Joining_Group: Lamadh} (Short: \p{Jg=Lamadh}) (1)
- \p{Joining_Group: Meem} (Short: \p{Jg=Meem}) (3)
+ \p{Joining_Group: Meem} (Short: \p{Jg=Meem}) (4)
\p{Joining_Group: Mim} (Short: \p{Jg=Mim}) (1)
\p{Joining_Group: No_Joining_Group} (Short: \p{Jg=NoJoiningGroup})
- (1_113_882)
+ (1_113_870)
\p{Joining_Group: Noon} (Short: \p{Jg=Noon}) (8)
\p{Joining_Group: Nun} (Short: \p{Jg=Nun}) (1)
\p{Joining_Group: Nya} (Short: \p{Jg=Nya}) (1)
\p{Joining_Group: Pe} (Short: \p{Jg=Pe}) (1)
- \p{Joining_Group: Qaf} (Short: \p{Jg=Qaf}) (4)
+ \p{Joining_Group: Qaf} (Short: \p{Jg=Qaf}) (5)
\p{Joining_Group: Qaph} (Short: \p{Jg=Qaph}) (1)
- \p{Joining_Group: Reh} (Short: \p{Jg=Reh}) (16)
+ \p{Joining_Group: Reh} (Short: \p{Jg=Reh}) (17)
\p{Joining_Group: Reversed_Pe} (Short: \p{Jg=ReversedPe}) (1)
+ \p{Joining_Group: Rohingya_Yeh} (Short: \p{Jg=RohingyaYeh}) (1)
\p{Joining_Group: Sad} (Short: \p{Jg=Sad}) (5)
\p{Joining_Group: Sadhe} (Short: \p{Jg=Sadhe}) (1)
\p{Joining_Group: Seen} (Short: \p{Jg=Seen}) (11)
@@ -1652,14 +2161,14 @@ this property.
\p{Joining_Group: Shin} (Short: \p{Jg=Shin}) (1)
\p{Joining_Group: Swash_Kaf} (Short: \p{Jg=SwashKaf}) (1)
\p{Joining_Group: Syriac_Waw} (Short: \p{Jg=SyriacWaw}) (1)
- \p{Joining_Group: Tah} (Short: \p{Jg=Tah}) (3)
+ \p{Joining_Group: Tah} (Short: \p{Jg=Tah}) (4)
\p{Joining_Group: Taw} (Short: \p{Jg=Taw}) (1)
\p{Joining_Group: Teh_Marbuta} (Short: \p{Jg=TehMarbuta}) (3)
- \p{Joining_Group: Teh_Marbuta_Goal} (Short: \p{Jg=TehMarbutaGoal})
- (1)
+ \p{Joining_Group: Teh_Marbuta_Goal} \p{Joining_Group=
+ Hamza_On_Heh_Goal} (1)
\p{Joining_Group: Teth} (Short: \p{Jg=Teth}) (2)
- \p{Joining_Group: Waw} (Short: \p{Jg=Waw}) (15)
- \p{Joining_Group: Yeh} (Short: \p{Jg=Yeh}) (8)
+ \p{Joining_Group: Waw} (Short: \p{Jg=Waw}) (16)
+ \p{Joining_Group: Yeh} (Short: \p{Jg=Yeh}) (10)
\p{Joining_Group: Yeh_Barree} (Short: \p{Jg=YehBarree}) (2)
\p{Joining_Group: Yeh_With_Tail} (Short: \p{Jg=YehWithTail}) (1)
\p{Joining_Group: Yudh} (Short: \p{Jg=Yudh}) (1)
@@ -1667,32 +2176,42 @@ this property.
\p{Joining_Group: Zain} (Short: \p{Jg=Zain}) (1)
\p{Joining_Group: Zhain} (Short: \p{Jg=Zhain}) (1)
\p{Joining_Type: C} \p{Joining_Type=Join_Causing} (3)
- \p{Joining_Type: D} \p{Joining_Type=Dual_Joining} (189)
- \p{Joining_Type: Dual_Joining} (Short: \p{Jt=D}) (189)
+ \p{Joining_Type: D} \p{Joining_Type=Dual_Joining} (215)
+ \p{Joining_Type: Dual_Joining} (Short: \p{Jt=D}) (215)
\p{Joining_Type: Join_Causing} (Short: \p{Jt=C}) (3)
\p{Joining_Type: L} \p{Joining_Type=Left_Joining} (0)
\p{Joining_Type: Left_Joining} (Short: \p{Jt=L}) (0)
- \p{Joining_Type: Non_Joining} (Short: \p{Jt=U}) (1_112_502)
- \p{Joining_Type: R} \p{Joining_Type=Right_Joining} (74)
- \p{Joining_Type: Right_Joining} (Short: \p{Jt=R}) (74)
- \p{Joining_Type: T} \p{Joining_Type=Transparent} (1344)
- \p{Joining_Type: Transparent} (Short: \p{Jt=T}) (1344)
- \p{Joining_Type: U} \p{Joining_Type=Non_Joining} (1_112_502)
+ \p{Joining_Type: Non_Joining} (Short: \p{Jt=U}) (1_112_389)
+ \p{Joining_Type: R} \p{Joining_Type=Right_Joining} (82)
+ \p{Joining_Type: Right_Joining} (Short: \p{Jt=R}) (82)
+ \p{Joining_Type: T} \p{Joining_Type=Transparent} (1423)
+ \p{Joining_Type: Transparent} (Short: \p{Jt=T}) (1423)
+ \p{Joining_Type: U} \p{Joining_Type=Non_Joining} (1_112_389)
\p{Jt: *} \p{Joining_Type: *}
\p{Kaithi} \p{Script=Kaithi} (Short: \p{Kthi}; NOT
\p{Block=Kaithi}) (66)
\p{Kali} \p{Kayah_Li} (= \p{Script=Kayah_Li}) (48)
\p{Kana} \p{Katakana} (= \p{Script=Katakana}) (NOT
\p{Block=Katakana}) (300)
- X \p{Kana_Supplement} \p{Block=Kana_Supplement} (256)
+ X \p{Kana_Sup} \p{Kana_Supplement} (= \p{Block=
+ Kana_Supplement}) (256)
+ X \p{Kana_Supplement} \p{Block=Kana_Supplement} (Short:
+ \p{InKanaSup}) (256)
X \p{Kanbun} \p{Block=Kanbun} (16)
- X \p{Kangxi_Radicals} \p{Block=Kangxi_Radicals} (224)
+ X \p{Kangxi} \p{Kangxi_Radicals} (= \p{Block=
+ Kangxi_Radicals}) (224)
+ X \p{Kangxi_Radicals} \p{Block=Kangxi_Radicals} (Short:
+ \p{InKangxi}) (224)
\p{Kannada} \p{Script=Kannada} (Short: \p{Knda}; NOT
\p{Block=Kannada}) (86)
\p{Katakana} \p{Script=Katakana} (Short: \p{Kana}; NOT
\p{Block=Katakana}) (300)
+ X \p{Katakana_Ext} \p{Katakana_Phonetic_Extensions} (=
+ \p{Block=Katakana_Phonetic_Extensions})
+ (16)
X \p{Katakana_Phonetic_Extensions} \p{Block=
- Katakana_Phonetic_Extensions} (16)
+ Katakana_Phonetic_Extensions} (Short:
+ \p{InKatakanaExt}) (16)
\p{Kayah_Li} \p{Script=Kayah_Li} (Short: \p{Kali}) (48)
\p{Khar} \p{Kharoshthi} (= \p{Script=Kharoshthi})
(NOT \p{Block=Kharoshthi}) (65)
@@ -1708,37 +2227,56 @@ this property.
\p{Kthi} \p{Kaithi} (= \p{Script=Kaithi}) (NOT
\p{Block=Kaithi}) (66)
\p{L} \p{Letter} (= \p{General_Category=Letter})
- (100_520)
- \p{L&} \p{Cased_Letter} (= \p{General_Category=
- Cased_Letter}) (3226)
- \p{L_} \p{Cased_Letter} (= \p{General_Category=
- Cased_Letter}) (3226)
+ (101_013)
+ X \p{L&} \p{Cased_Letter} (= \p{General_Category=
+ Cased_Letter}) (3223)
+ X \p{L_} \p{Cased_Letter} (= \p{General_Category=
+ Cased_Letter}) Note the trailing '_'
+ matters in spite of loose matching
+ rules. (3223)
\p{Lana} \p{Tai_Tham} (= \p{Script=Tai_Tham}) (NOT
\p{Block=Tai_Tham}) (127)
- \p{Lao} \p{Script=Lao} (NOT \p{Block=Lao}) (65)
+ \p{Lao} \p{Script=Lao} (NOT \p{Block=Lao}) (67)
\p{Laoo} \p{Lao} (= \p{Script=Lao}) (NOT \p{Block=
- Lao}) (65)
- \p{Latin} \p{Script=Latin} (Short: \p{Latn}) (1267)
+ Lao}) (67)
+ \p{Latin} \p{Script=Latin} (Short: \p{Latn}) (1272)
X \p{Latin_1} \p{Latin_1_Supplement} (= \p{Block=
Latin_1_Supplement}) (128)
+ X \p{Latin_1_Sup} \p{Latin_1_Supplement} (= \p{Block=
+ Latin_1_Supplement}) (128)
X \p{Latin_1_Supplement} \p{Block=Latin_1_Supplement} (Short:
\p{InLatin1}) (128)
- X \p{Latin_Extended_A} \p{Block=Latin_Extended_A} (128)
- X \p{Latin_Extended_Additional} \p{Block=Latin_Extended_Additional}
+ X \p{Latin_Ext_A} \p{Latin_Extended_A} (= \p{Block=
+ Latin_Extended_A}) (128)
+ X \p{Latin_Ext_Additional} \p{Latin_Extended_Additional} (=
+ \p{Block=Latin_Extended_Additional})
(256)
- X \p{Latin_Extended_B} \p{Block=Latin_Extended_B} (208)
- X \p{Latin_Extended_C} \p{Block=Latin_Extended_C} (32)
- X \p{Latin_Extended_D} \p{Block=Latin_Extended_D} (224)
- \p{Latn} \p{Latin} (= \p{Script=Latin}) (1267)
+ X \p{Latin_Ext_B} \p{Latin_Extended_B} (= \p{Block=
+ Latin_Extended_B}) (208)
+ X \p{Latin_Ext_C} \p{Latin_Extended_C} (= \p{Block=
+ Latin_Extended_C}) (32)
+ X \p{Latin_Ext_D} \p{Latin_Extended_D} (= \p{Block=
+ Latin_Extended_D}) (224)
+ X \p{Latin_Extended_A} \p{Block=Latin_Extended_A} (Short:
+ \p{InLatinExtA}) (128)
+ X \p{Latin_Extended_Additional} \p{Block=Latin_Extended_Additional}
+ (Short: \p{InLatinExtAdditional}) (256)
+ X \p{Latin_Extended_B} \p{Block=Latin_Extended_B} (Short:
+ \p{InLatinExtB}) (208)
+ X \p{Latin_Extended_C} \p{Block=Latin_Extended_C} (Short:
+ \p{InLatinExtC}) (32)
+ X \p{Latin_Extended_D} \p{Block=Latin_Extended_D} (Short:
+ \p{InLatinExtD}) (224)
+ \p{Latn} \p{Latin} (= \p{Script=Latin}) (1272)
\p{Lb: *} \p{Line_Break: *}
\p{LC} \p{Cased_Letter} (= \p{General_Category=
- Cased_Letter}) (3226)
+ Cased_Letter}) (3223)
\p{Lepc} \p{Lepcha} (= \p{Script=Lepcha}) (NOT
\p{Block=Lepcha}) (74)
\p{Lepcha} \p{Script=Lepcha} (Short: \p{Lepc}; NOT
\p{Block=Lepcha}) (74)
\p{Letter} \p{General_Category=Letter} (Short: \p{L})
- (100_520)
+ (101_013)
\p{Letter_Number} \p{General_Category=Letter_Number} (Short:
\p{Nl}) (224)
X \p{Letterlike_Symbols} \p{Block=Letterlike_Symbols} (80)
@@ -1748,25 +2286,29 @@ this property.
\p{Block=Limbu}) (66)
\p{Linb} \p{Linear_B} (= \p{Script=Linear_B}) (211)
\p{Line_Break: AI} \p{Line_Break=Ambiguous} (724)
- \p{Line_Break: AL} \p{Line_Break=Alphabetic} (15_797)
- \p{Line_Break: Alphabetic} (Short: \p{Lb=AL}) (15_797)
+ \p{Line_Break: AL} \p{Line_Break=Alphabetic} (16_251)
+ \p{Line_Break: Alphabetic} (Short: \p{Lb=AL}) (16_251)
\p{Line_Break: Ambiguous} (Short: \p{Lb=AI}) (724)
- \p{Line_Break: B2} \p{Line_Break=Break_Both} (1)
- \p{Line_Break: BA} \p{Line_Break=Break_After} (140)
+ \p{Line_Break: B2} \p{Line_Break=Break_Both} (3)
+ \p{Line_Break: BA} \p{Line_Break=Break_After} (151)
\p{Line_Break: BB} \p{Line_Break=Break_Before} (19)
\p{Line_Break: BK} \p{Line_Break=Mandatory_Break} (4)
- \p{Line_Break: Break_After} (Short: \p{Lb=BA}) (140)
+ \p{Line_Break: Break_After} (Short: \p{Lb=BA}) (151)
\p{Line_Break: Break_Before} (Short: \p{Lb=BB}) (19)
- \p{Line_Break: Break_Both} (Short: \p{Lb=B2}) (1)
+ \p{Line_Break: Break_Both} (Short: \p{Lb=B2}) (3)
\p{Line_Break: Break_Symbols} (Short: \p{Lb=SY}) (1)
\p{Line_Break: Carriage_Return} (Short: \p{Lb=CR}) (1)
\p{Line_Break: CB} \p{Line_Break=Contingent_Break} (1)
+ \p{Line_Break: CJ} \p{Line_Break=
+ Conditional_Japanese_Starter} (51)
\p{Line_Break: CL} \p{Line_Break=Close_Punctuation} (87)
\p{Line_Break: Close_Parenthesis} (Short: \p{Lb=CP}) (2)
\p{Line_Break: Close_Punctuation} (Short: \p{Lb=CL}) (87)
- \p{Line_Break: CM} \p{Line_Break=Combining_Mark} (1483)
- \p{Line_Break: Combining_Mark} (Short: \p{Lb=CM}) (1483)
- \p{Line_Break: Complex_Context} (Short: \p{Lb=SA}) (663)
+ \p{Line_Break: CM} \p{Line_Break=Combining_Mark} (1628)
+ \p{Line_Break: Combining_Mark} (Short: \p{Lb=CM}) (1628)
+ \p{Line_Break: Complex_Context} (Short: \p{Lb=SA}) (665)
+ \p{Line_Break: Conditional_Japanese_Starter} (Short: \p{Lb=CJ})
+ (51)
\p{Line_Break: Contingent_Break} (Short: \p{Lb=CB}) (1)
\p{Line_Break: CP} \p{Line_Break=Close_Parenthesis} (2)
\p{Line_Break: CR} \p{Line_Break=Carriage_Return} (1)
@@ -1776,6 +2318,8 @@ this property.
\p{Line_Break: Glue} (Short: \p{Lb=GL}) (18)
\p{Line_Break: H2} (Short: \p{Lb=H2}) (399)
\p{Line_Break: H3} (Short: \p{Lb=H3}) (10_773)
+ \p{Line_Break: Hebrew_Letter} (Short: \p{Lb=HL}) (74)
+ \p{Line_Break: HL} \p{Line_Break=Hebrew_Letter} (74)
\p{Line_Break: HY} \p{Line_Break=Hyphen} (1)
\p{Line_Break: Hyphen} (Short: \p{Lb=HY}) (1)
\p{Line_Break: ID} \p{Line_Break=Ideographic} (161_793)
@@ -1793,19 +2337,19 @@ this property.
\p{Line_Break: Mandatory_Break} (Short: \p{Lb=BK}) (4)
\p{Line_Break: Next_Line} (Short: \p{Lb=NL}) (1)
\p{Line_Break: NL} \p{Line_Break=Next_Line} (1)
- \p{Line_Break: Nonstarter} (Short: \p{Lb=NS}) (77)
- \p{Line_Break: NS} \p{Line_Break=Nonstarter} (77)
- \p{Line_Break: NU} \p{Line_Break=Numeric} (412)
- \p{Line_Break: Numeric} (Short: \p{Lb=NU}) (412)
+ \p{Line_Break: Nonstarter} (Short: \p{Lb=NS}) (26)
+ \p{Line_Break: NS} \p{Line_Break=Nonstarter} (26)
+ \p{Line_Break: NU} \p{Line_Break=Numeric} (452)
+ \p{Line_Break: Numeric} (Short: \p{Lb=NU}) (452)
\p{Line_Break: OP} \p{Line_Break=Open_Punctuation} (81)
\p{Line_Break: Open_Punctuation} (Short: \p{Lb=OP}) (81)
\p{Line_Break: PO} \p{Line_Break=Postfix_Numeric} (28)
\p{Line_Break: Postfix_Numeric} (Short: \p{Lb=PO}) (28)
- \p{Line_Break: PR} \p{Line_Break=Prefix_Numeric} (44)
- \p{Line_Break: Prefix_Numeric} (Short: \p{Lb=PR}) (44)
+ \p{Line_Break: PR} \p{Line_Break=Prefix_Numeric} (45)
+ \p{Line_Break: Prefix_Numeric} (Short: \p{Lb=PR}) (45)
\p{Line_Break: QU} \p{Line_Break=Quotation} (34)
\p{Line_Break: Quotation} (Short: \p{Lb=QU}) (34)
- \p{Line_Break: SA} \p{Line_Break=Complex_Context} (663)
+ \p{Line_Break: SA} \p{Line_Break=Complex_Context} (665)
D \p{Line_Break: SG} \p{Line_Break=Surrogate} (2048)
\p{Line_Break: SP} \p{Line_Break=Space} (1)
\p{Line_Break: Space} (Short: \p{Lb=SP}) (1)
@@ -1814,10 +2358,10 @@ this property.
and therefore shouldn't be the basis for
line breaking (Short: \p{Lb=SG}) (2048)
\p{Line_Break: SY} \p{Line_Break=Break_Symbols} (1)
- \p{Line_Break: Unknown} (Short: \p{Lb=XX}) (919_067)
+ \p{Line_Break: Unknown} (Short: \p{Lb=XX}) (918_338)
\p{Line_Break: WJ} \p{Line_Break=Word_Joiner} (2)
\p{Line_Break: Word_Joiner} (Short: \p{Lb=WJ}) (2)
- \p{Line_Break: XX} \p{Line_Break=Unknown} (919_067)
+ \p{Line_Break: XX} \p{Line_Break=Unknown} (918_338)
\p{Line_Break: ZW} \p{Line_Break=ZWSpace} (1)
\p{Line_Break: ZWSpace} (Short: \p{Lb=ZW}) (1)
\p{Line_Separator} \p{General_Category=Line_Separator}
@@ -1829,12 +2373,12 @@ this property.
\p{Ll} \p{Lowercase_Letter} (=
\p{General_Category=Lowercase_Letter})
(/i= General_Category=Cased_Letter)
- (1759)
+ (1751)
\p{Lm} \p{Modifier_Letter} (=
\p{General_Category=Modifier_Letter})
- (210)
+ (237)
\p{Lo} \p{Other_Letter} (= \p{General_Category=
- Other_Letter}) (97_084)
+ Other_Letter}) (97_553)
\p{LOE} \p{Logical_Order_Exception} (=
\p{Logical_Order_Exception=Y}) (15)
\p{LOE: *} \p{Logical_Order_Exception: *}
@@ -1844,24 +2388,24 @@ this property.
(1_114_097)
\p{Logical_Order_Exception: Y*} (Short: \p{LOE=Y}, \p{LOE}) (15)
X \p{Low_Surrogates} \p{Block=Low_Surrogates} (1024)
- \p{Lower} \p{Lowercase=Y} (/i= Cased=Yes) (1918)
+ \p{Lower} \p{Lowercase=Y} (/i= Cased=Yes) (1934)
\p{Lower: *} \p{Lowercase: *}
\p{Lowercase} \p{Lower} (= \p{Lowercase=Y}) (/i= Cased=
- Yes) (1918)
+ Yes) (1934)
\p{Lowercase: N*} (Short: \p{Lower=N}, \P{Lower}; /i= Cased=
- No) (1_112_194)
+ No) (1_112_178)
\p{Lowercase: Y*} (Short: \p{Lower=Y}, \p{Lower}; /i= Cased=
- Yes) (1918)
+ Yes) (1934)
\p{Lowercase_Letter} \p{General_Category=Lowercase_Letter}
(Short: \p{Ll}; /i= General_Category=
- Cased_Letter) (1759)
+ Cased_Letter) (1751)
\p{Lt} \p{Titlecase_Letter} (=
\p{General_Category=Titlecase_Letter})
(/i= General_Category=Cased_Letter) (31)
\p{Lu} \p{Uppercase_Letter} (=
\p{General_Category=Uppercase_Letter})
(/i= General_Category=Cased_Letter)
- (1436)
+ (1441)
\p{Lyci} \p{Lycian} (= \p{Script=Lycian}) (NOT
\p{Block=Lycian}) (29)
\p{Lycian} \p{Script=Lycian} (Short: \p{Lyci}; NOT
@@ -1871,8 +2415,11 @@ this property.
\p{Lydian} \p{Script=Lydian} (Short: \p{Lydi}; NOT
\p{Block=Lydian}) (27)
\p{M} \p{Mark} (= \p{General_Category=Mark})
- (1498)
- X \p{Mahjong_Tiles} \p{Block=Mahjong_Tiles} (48)
+ (1645)
+ X \p{Mahjong} \p{Mahjong_Tiles} (= \p{Block=
+ Mahjong_Tiles}) (48)
+ X \p{Mahjong_Tiles} \p{Block=Mahjong_Tiles} (Short:
+ \p{InMahjong}) (48)
\p{Malayalam} \p{Script=Malayalam} (Short: \p{Mlym}; NOT
\p{Block=Malayalam}) (98)
\p{Mand} \p{Mandaic} (= \p{Script=Mandaic}) (NOT
@@ -1880,41 +2427,88 @@ this property.
\p{Mandaic} \p{Script=Mandaic} (Short: \p{Mand}; NOT
\p{Block=Mandaic}) (29)
\p{Mark} \p{General_Category=Mark} (Short: \p{M})
- (1498)
- \p{Math} \p{Math=Y} (2165)
- \p{Math: N*} (Single: \P{Math}) (1_111_947)
- \p{Math: Y*} (Single: \p{Math}) (2165)
+ (1645)
+ \p{Math} \p{Math=Y} (2310)
+ \p{Math: N*} (Single: \P{Math}) (1_111_802)
+ \p{Math: Y*} (Single: \p{Math}) (2310)
+ X \p{Math_Alphanum} \p{Mathematical_Alphanumeric_Symbols} (=
+ \p{Block=
+ Mathematical_Alphanumeric_Symbols})
+ (1024)
+ X \p{Math_Operators} \p{Mathematical_Operators} (= \p{Block=
+ Mathematical_Operators}) (256)
\p{Math_Symbol} \p{General_Category=Math_Symbol} (Short:
- \p{Sm}) (948)
+ \p{Sm}) (952)
X \p{Mathematical_Alphanumeric_Symbols} \p{Block=
- Mathematical_Alphanumeric_Symbols} (1024)
- X \p{Mathematical_Operators} \p{Block=Mathematical_Operators} (256)
+ Mathematical_Alphanumeric_Symbols}
+ (Short: \p{InMathAlphanum}) (1024)
+ X \p{Mathematical_Operators} \p{Block=Mathematical_Operators}
+ (Short: \p{InMathOperators}) (256)
\p{Mc} \p{Spacing_Mark} (= \p{General_Category=
- Spacing_Mark}) (287)
+ Spacing_Mark}) (353)
\p{Me} \p{Enclosing_Mark} (= \p{General_Category=
Enclosing_Mark}) (12)
\p{Meetei_Mayek} \p{Script=Meetei_Mayek} (Short: \p{Mtei};
- NOT \p{Block=Meetei_Mayek}) (56)
+ NOT \p{Block=Meetei_Mayek}) (79)
+ X \p{Meetei_Mayek_Ext} \p{Meetei_Mayek_Extensions} (= \p{Block=
+ Meetei_Mayek_Extensions}) (32)
+ X \p{Meetei_Mayek_Extensions} \p{Block=Meetei_Mayek_Extensions}
+ (Short: \p{InMeeteiMayekExt}) (32)
+ \p{Merc} \p{Meroitic_Cursive} (= \p{Script=
+ Meroitic_Cursive}) (NOT \p{Block=
+ Meroitic_Cursive}) (26)
+ \p{Mero} \p{Meroitic_Hieroglyphs} (= \p{Script=
+ Meroitic_Hieroglyphs}) (32)
+ \p{Meroitic_Cursive} \p{Script=Meroitic_Cursive} (Short:
+ \p{Merc}; NOT \p{Block=
+ Meroitic_Cursive}) (26)
+ \p{Meroitic_Hieroglyphs} \p{Script=Meroitic_Hieroglyphs} (Short:
+ \p{Mero}) (32)
+ \p{Miao} \p{Script=Miao} (NOT \p{Block=Miao}) (133)
+ X \p{Misc_Arrows} \p{Miscellaneous_Symbols_And_Arrows} (=
+ \p{Block=
+ Miscellaneous_Symbols_And_Arrows}) (256)
+ X \p{Misc_Math_Symbols_A} \p{Miscellaneous_Mathematical_Symbols_A}
+ (= \p{Block=
+ Miscellaneous_Mathematical_Symbols_A})
+ (48)
+ X \p{Misc_Math_Symbols_B} \p{Miscellaneous_Mathematical_Symbols_B}
+ (= \p{Block=
+ Miscellaneous_Mathematical_Symbols_B})
+ (128)
+ X \p{Misc_Pictographs} \p{Miscellaneous_Symbols_And_Pictographs}
+ (= \p{Block=
+ Miscellaneous_Symbols_And_Pictographs})
+ (768)
+ X \p{Misc_Symbols} \p{Miscellaneous_Symbols} (= \p{Block=
+ Miscellaneous_Symbols}) (256)
+ X \p{Misc_Technical} \p{Miscellaneous_Technical} (= \p{Block=
+ Miscellaneous_Technical}) (256)
X \p{Miscellaneous_Mathematical_Symbols_A} \p{Block=
Miscellaneous_Mathematical_Symbols_A}
- (48)
+ (Short: \p{InMiscMathSymbolsA}) (48)
X \p{Miscellaneous_Mathematical_Symbols_B} \p{Block=
Miscellaneous_Mathematical_Symbols_B}
- (128)
- X \p{Miscellaneous_Symbols} \p{Block=Miscellaneous_Symbols} (256)
+ (Short: \p{InMiscMathSymbolsB}) (128)
+ X \p{Miscellaneous_Symbols} \p{Block=Miscellaneous_Symbols} (Short:
+ \p{InMiscSymbols}) (256)
X \p{Miscellaneous_Symbols_And_Arrows} \p{Block=
- Miscellaneous_Symbols_And_Arrows} (256)
+ Miscellaneous_Symbols_And_Arrows}
+ (Short: \p{InMiscArrows}) (256)
X \p{Miscellaneous_Symbols_And_Pictographs} \p{Block=
Miscellaneous_Symbols_And_Pictographs}
- (768)
- X \p{Miscellaneous_Technical} \p{Block=Miscellaneous_Technical} (256)
+ (Short: \p{InMiscPictographs}) (768)
+ X \p{Miscellaneous_Technical} \p{Block=Miscellaneous_Technical}
+ (Short: \p{InMiscTechnical}) (256)
\p{Mlym} \p{Malayalam} (= \p{Script=Malayalam})
(NOT \p{Block=Malayalam}) (98)
\p{Mn} \p{Nonspacing_Mark} (=
\p{General_Category=Nonspacing_Mark})
- (1199)
+ (1280)
\p{Modifier_Letter} \p{General_Category=Modifier_Letter}
- (Short: \p{Lm}) (210)
+ (Short: \p{Lm}) (237)
+ X \p{Modifier_Letters} \p{Spacing_Modifier_Letters} (= \p{Block=
+ Spacing_Modifier_Letters}) (80)
\p{Modifier_Symbol} \p{General_Category=Modifier_Symbol}
(Short: \p{Sk}) (115)
X \p{Modifier_Tone_Letters} \p{Block=Modifier_Tone_Letters} (32)
@@ -1924,102 +2518,95 @@ this property.
\p{Block=Mongolian}) (153)
\p{Mtei} \p{Meetei_Mayek} (= \p{Script=
Meetei_Mayek}) (NOT \p{Block=
- Meetei_Mayek}) (56)
- X \p{Musical_Symbols} \p{Block=Musical_Symbols} (256)
+ Meetei_Mayek}) (79)
+ X \p{Music} \p{Musical_Symbols} (= \p{Block=
+ Musical_Symbols}) (256)
+ X \p{Musical_Symbols} \p{Block=Musical_Symbols} (Short:
+ \p{InMusic}) (256)
\p{Myanmar} \p{Script=Myanmar} (Short: \p{Mymr}; NOT
\p{Block=Myanmar}) (188)
- X \p{Myanmar_Extended_A} \p{Block=Myanmar_Extended_A} (32)
+ X \p{Myanmar_Ext_A} \p{Myanmar_Extended_A} (= \p{Block=
+ Myanmar_Extended_A}) (32)
+ X \p{Myanmar_Extended_A} \p{Block=Myanmar_Extended_A} (Short:
+ \p{InMyanmarExtA}) (32)
\p{Mymr} \p{Myanmar} (= \p{Script=Myanmar}) (NOT
\p{Block=Myanmar}) (188)
\p{N} \p{Number} (= \p{General_Category=Number})
- (1100)
+ (1148)
+ X \p{NB} \p{No_Block} (= \p{Block=No_Block})
+ (860_672)
\p{NChar} \p{Noncharacter_Code_Point} (=
\p{Noncharacter_Code_Point=Y}) (66)
\p{NChar: *} \p{Noncharacter_Code_Point: *}
\p{Nd} \p{Digit} (= \p{General_Category=
- Decimal_Number}) (420)
+ Decimal_Number}) (460)
\p{New_Tai_Lue} \p{Script=New_Tai_Lue} (Short: \p{Talu};
NOT \p{Block=New_Tai_Lue}) (83)
\p{NFC_QC: *} \p{NFC_Quick_Check: *}
- \p{NFC_Quick_Check: M} \p{NFC_Quick_Check=Maybe} (103)
- \p{NFC_Quick_Check: Maybe} (Short: \p{NFCQC=M}) (103)
+ \p{NFC_Quick_Check: M} \p{NFC_Quick_Check=Maybe} (104)
+ \p{NFC_Quick_Check: Maybe} (Short: \p{NFCQC=M}) (104)
\p{NFC_Quick_Check: N} \p{NFC_Quick_Check=No} (NOT
- \P{NFC_Quick_Check} NOR \P{NFC_QC} NOR
- \P{Is_NFC_Quick_Check} NOR
- \P{Is_NFC_QC}) (1118)
+ \P{NFC_Quick_Check} NOR \P{NFC_QC})
+ (1120)
\p{NFC_Quick_Check: No} (Short: \p{NFCQC=N}; NOT
- \P{NFC_Quick_Check} NOR \P{NFC_QC} NOR
- \P{Is_NFC_Quick_Check} NOR
- \P{Is_NFC_QC}) (1118)
+ \P{NFC_Quick_Check} NOR \P{NFC_QC})
+ (1120)
\p{NFC_Quick_Check: Y} \p{NFC_Quick_Check=Yes} (NOT
- \p{NFC_Quick_Check} NOR \p{NFC_QC} NOR
- \p{Is_NFC_Quick_Check} NOR
- \p{Is_NFC_QC}) (1_112_891)
+ \p{NFC_Quick_Check} NOR \p{NFC_QC})
+ (1_112_888)
\p{NFC_Quick_Check: Yes} (Short: \p{NFCQC=Y}; NOT
- \p{NFC_Quick_Check} NOR \p{NFC_QC} NOR
- \p{Is_NFC_Quick_Check} NOR
- \p{Is_NFC_QC}) (1_112_891)
+ \p{NFC_Quick_Check} NOR \p{NFC_QC})
+ (1_112_888)
\p{NFD_QC: *} \p{NFD_Quick_Check: *}
\p{NFD_Quick_Check: N} \p{NFD_Quick_Check=No} (NOT
- \P{NFD_Quick_Check} NOR \P{NFD_QC} NOR
- \P{Is_NFD_Quick_Check} NOR
- \P{Is_NFD_QC}) (13_221)
+ \P{NFD_Quick_Check} NOR \P{NFD_QC})
+ (13_225)
\p{NFD_Quick_Check: No} (Short: \p{NFDQC=N}; NOT
- \P{NFD_Quick_Check} NOR \P{NFD_QC} NOR
- \P{Is_NFD_Quick_Check} NOR
- \P{Is_NFD_QC}) (13_221)
+ \P{NFD_Quick_Check} NOR \P{NFD_QC})
+ (13_225)
\p{NFD_Quick_Check: Y} \p{NFD_Quick_Check=Yes} (NOT
- \p{NFD_Quick_Check} NOR \p{NFD_QC} NOR
- \p{Is_NFD_Quick_Check} NOR
- \p{Is_NFD_QC}) (1_100_891)
+ \p{NFD_Quick_Check} NOR \p{NFD_QC})
+ (1_100_887)
\p{NFD_Quick_Check: Yes} (Short: \p{NFDQC=Y}; NOT
- \p{NFD_Quick_Check} NOR \p{NFD_QC} NOR
- \p{Is_NFD_Quick_Check} NOR
- \p{Is_NFD_QC}) (1_100_891)
+ \p{NFD_Quick_Check} NOR \p{NFD_QC})
+ (1_100_887)
\p{NFKC_QC: *} \p{NFKC_Quick_Check: *}
- \p{NFKC_Quick_Check: M} \p{NFKC_Quick_Check=Maybe} (103)
- \p{NFKC_Quick_Check: Maybe} (Short: \p{NFKCQC=M}) (103)
+ \p{NFKC_Quick_Check: M} \p{NFKC_Quick_Check=Maybe} (104)
+ \p{NFKC_Quick_Check: Maybe} (Short: \p{NFKCQC=M}) (104)
\p{NFKC_Quick_Check: N} \p{NFKC_Quick_Check=No} (NOT
- \P{NFKC_Quick_Check} NOR \P{NFKC_QC} NOR
- \P{Is_NFKC_Quick_Check} NOR
- \P{Is_NFKC_QC}) (4640)
+ \P{NFKC_Quick_Check} NOR \P{NFKC_QC})
+ (4787)
\p{NFKC_Quick_Check: No} (Short: \p{NFKCQC=N}; NOT
- \P{NFKC_Quick_Check} NOR \P{NFKC_QC} NOR
- \P{Is_NFKC_Quick_Check} NOR
- \P{Is_NFKC_QC}) (4640)
+ \P{NFKC_Quick_Check} NOR \P{NFKC_QC})
+ (4787)
\p{NFKC_Quick_Check: Y} \p{NFKC_Quick_Check=Yes} (NOT
- \p{NFKC_Quick_Check} NOR \p{NFKC_QC} NOR
- \p{Is_NFKC_Quick_Check} NOR
- \p{Is_NFKC_QC}) (1_109_369)
+ \p{NFKC_Quick_Check} NOR \p{NFKC_QC})
+ (1_109_221)
\p{NFKC_Quick_Check: Yes} (Short: \p{NFKCQC=Y}; NOT
- \p{NFKC_Quick_Check} NOR \p{NFKC_QC} NOR
- \p{Is_NFKC_Quick_Check} NOR
- \p{Is_NFKC_QC}) (1_109_369)
+ \p{NFKC_Quick_Check} NOR \p{NFKC_QC})
+ (1_109_221)
\p{NFKD_QC: *} \p{NFKD_Quick_Check: *}
\p{NFKD_Quick_Check: N} \p{NFKD_Quick_Check=No} (NOT
- \P{NFKD_Quick_Check} NOR \P{NFKD_QC} NOR
- \P{Is_NFKD_Quick_Check} NOR
- \P{Is_NFKD_QC}) (16_731)
+ \P{NFKD_Quick_Check} NOR \P{NFKD_QC})
+ (16_880)
\p{NFKD_Quick_Check: No} (Short: \p{NFKDQC=N}; NOT
- \P{NFKD_Quick_Check} NOR \P{NFKD_QC} NOR
- \P{Is_NFKD_Quick_Check} NOR
- \P{Is_NFKD_QC}) (16_731)
+ \P{NFKD_Quick_Check} NOR \P{NFKD_QC})
+ (16_880)
\p{NFKD_Quick_Check: Y} \p{NFKD_Quick_Check=Yes} (NOT
- \p{NFKD_Quick_Check} NOR \p{NFKD_QC} NOR
- \p{Is_NFKD_Quick_Check} NOR
- \p{Is_NFKD_QC}) (1_097_381)
+ \p{NFKD_Quick_Check} NOR \p{NFKD_QC})
+ (1_097_232)
\p{NFKD_Quick_Check: Yes} (Short: \p{NFKDQC=Y}; NOT
- \p{NFKD_Quick_Check} NOR \p{NFKD_QC} NOR
- \p{Is_NFKD_Quick_Check} NOR
- \p{Is_NFKD_QC}) (1_097_381)
+ \p{NFKD_Quick_Check} NOR \p{NFKD_QC})
+ (1_097_232)
\p{Nko} \p{Script=Nko} (NOT \p{NKo}) (59)
\p{Nkoo} \p{Nko} (= \p{Script=Nko}) (NOT \p{NKo})
(59)
\p{Nl} \p{Letter_Number} (= \p{General_Category=
Letter_Number}) (224)
\p{No} \p{Other_Number} (= \p{General_Category=
- Other_Number}) (456)
- X \p{No_Block} \p{Block=No_Block} (861_664)
+ Other_Number}) (464)
+ X \p{No_Block} \p{Block=No_Block} (Short: \p{InNB})
+ (860_672)
\p{Noncharacter_Code_Point} \p{Noncharacter_Code_Point=Y} (Short:
\p{NChar}) (66)
\p{Noncharacter_Code_Point: N*} (Short: \p{NChar=N}, \P{NChar})
@@ -2027,20 +2614,20 @@ this property.
\p{Noncharacter_Code_Point: Y*} (Short: \p{NChar=Y}, \p{NChar})
(66)
\p{Nonspacing_Mark} \p{General_Category=Nonspacing_Mark}
- (Short: \p{Mn}) (1199)
+ (Short: \p{Mn}) (1280)
\p{Nt: *} \p{Numeric_Type: *}
\p{Number} \p{General_Category=Number} (Short: \p{N})
- (1100)
+ (1148)
X \p{Number_Forms} \p{Block=Number_Forms} (64)
- \p{Numeric_Type: De} \p{Numeric_Type=Decimal} (420)
- \p{Numeric_Type: Decimal} (Short: \p{Nt=De}) (420)
+ \p{Numeric_Type: De} \p{Numeric_Type=Decimal} (460)
+ \p{Numeric_Type: Decimal} (Short: \p{Nt=De}) (460)
\p{Numeric_Type: Di} \p{Numeric_Type=Digit} (128)
\p{Numeric_Type: Digit} (Short: \p{Nt=Di}) (128)
- \p{Numeric_Type: None} (Short: \p{Nt=None}) (1_112_935)
- \p{Numeric_Type: Nu} \p{Numeric_Type=Numeric} (629)
- \p{Numeric_Type: Numeric} (Short: \p{Nt=Nu}) (629)
+ \p{Numeric_Type: None} (Short: \p{Nt=None}) (1_112_887)
+ \p{Numeric_Type: Nu} \p{Numeric_Type=Numeric} (637)
+ \p{Numeric_Type: Numeric} (Short: \p{Nt=Nu}) (637)
T \p{Numeric_Value: -1/2} (Short: \p{Nv=-1/2}) (1)
- T \p{Numeric_Value: 0} (Short: \p{Nv=0}) (56)
+ T \p{Numeric_Value: 0} (Short: \p{Nv=0}) (60)
T \p{Numeric_Value: 1/16} (Short: \p{Nv=1/16}) (3)
T \p{Numeric_Value: 1/10} (Short: \p{Nv=1/10}) (1)
T \p{Numeric_Value: 1/9} (Short: \p{Nv=1/9}) (1)
@@ -2061,24 +2648,24 @@ this property.
T \p{Numeric_Value: 4/5} (Short: \p{Nv=4/5}) (1)
T \p{Numeric_Value: 5/6} (Short: \p{Nv=5/6}) (2)
T \p{Numeric_Value: 7/8} (Short: \p{Nv=7/8}) (1)
- T \p{Numeric_Value: 1} (Short: \p{Nv=1}) (93)
+ T \p{Numeric_Value: 1} (Short: \p{Nv=1}) (97)
T \p{Numeric_Value: 3/2} (Short: \p{Nv=3/2}) (1)
- T \p{Numeric_Value: 2} (Short: \p{Nv=2}) (96)
+ T \p{Numeric_Value: 2} (Short: \p{Nv=2}) (100)
T \p{Numeric_Value: 5/2} (Short: \p{Nv=5/2}) (1)
- T \p{Numeric_Value: 3} (Short: \p{Nv=3}) (98)
+ T \p{Numeric_Value: 3} (Short: \p{Nv=3}) (102)
T \p{Numeric_Value: 7/2} (Short: \p{Nv=7/2}) (1)
- T \p{Numeric_Value: 4} (Short: \p{Nv=4}) (89)
+ T \p{Numeric_Value: 4} (Short: \p{Nv=4}) (93)
T \p{Numeric_Value: 9/2} (Short: \p{Nv=9/2}) (1)
- T \p{Numeric_Value: 5} (Short: \p{Nv=5}) (86)
+ T \p{Numeric_Value: 5} (Short: \p{Nv=5}) (90)
T \p{Numeric_Value: 11/2} (Short: \p{Nv=11/2}) (1)
- T \p{Numeric_Value: 6} (Short: \p{Nv=6}) (78)
+ T \p{Numeric_Value: 6} (Short: \p{Nv=6}) (82)
T \p{Numeric_Value: 13/2} (Short: \p{Nv=13/2}) (1)
- T \p{Numeric_Value: 7} (Short: \p{Nv=7}) (77)
+ T \p{Numeric_Value: 7} (Short: \p{Nv=7}) (81)
T \p{Numeric_Value: 15/2} (Short: \p{Nv=15/2}) (1)
- T \p{Numeric_Value: 8} (Short: \p{Nv=8}) (73)
+ T \p{Numeric_Value: 8} (Short: \p{Nv=8}) (77)
T \p{Numeric_Value: 17/2} (Short: \p{Nv=17/2}) (1)
- T \p{Numeric_Value: 9} (Short: \p{Nv=9}) (77)
- T \p{Numeric_Value: 10} (Short: \p{Nv=10}) (39)
+ T \p{Numeric_Value: 9} (Short: \p{Nv=9}) (81)
+ T \p{Numeric_Value: 10} (Short: \p{Nv=10}) (40)
T \p{Numeric_Value: 11} (Short: \p{Nv=11}) (6)
T \p{Numeric_Value: 12} (Short: \p{Nv=12}) (6)
T \p{Numeric_Value: 13} (Short: \p{Nv=13}) (4)
@@ -2088,7 +2675,7 @@ this property.
T \p{Numeric_Value: 17} (Short: \p{Nv=17}) (5)
T \p{Numeric_Value: 18} (Short: \p{Nv=18}) (5)
T \p{Numeric_Value: 19} (Short: \p{Nv=19}) (5)
- T \p{Numeric_Value: 20} (Short: \p{Nv=20}) (18)
+ T \p{Numeric_Value: 20} (Short: \p{Nv=20}) (19)
T \p{Numeric_Value: 21} (Short: \p{Nv=21}) (1)
T \p{Numeric_Value: 22} (Short: \p{Nv=22}) (1)
T \p{Numeric_Value: 23} (Short: \p{Nv=23}) (1)
@@ -2098,7 +2685,7 @@ this property.
T \p{Numeric_Value: 27} (Short: \p{Nv=27}) (1)
T \p{Numeric_Value: 28} (Short: \p{Nv=28}) (1)
T \p{Numeric_Value: 29} (Short: \p{Nv=29}) (1)
- T \p{Numeric_Value: 30} (Short: \p{Nv=30}) (10)
+ T \p{Numeric_Value: 30} (Short: \p{Nv=30}) (11)
T \p{Numeric_Value: 31} (Short: \p{Nv=31}) (1)
T \p{Numeric_Value: 32} (Short: \p{Nv=32}) (1)
T \p{Numeric_Value: 33} (Short: \p{Nv=33}) (1)
@@ -2108,7 +2695,7 @@ this property.
T \p{Numeric_Value: 37} (Short: \p{Nv=37}) (1)
T \p{Numeric_Value: 38} (Short: \p{Nv=38}) (1)
T \p{Numeric_Value: 39} (Short: \p{Nv=39}) (1)
- T \p{Numeric_Value: 40} (Short: \p{Nv=40}) (9)
+ T \p{Numeric_Value: 40} (Short: \p{Nv=40}) (10)
T \p{Numeric_Value: 41} (Short: \p{Nv=41}) (1)
T \p{Numeric_Value: 42} (Short: \p{Nv=42}) (1)
T \p{Numeric_Value: 43} (Short: \p{Nv=43}) (1)
@@ -2118,10 +2705,10 @@ this property.
T \p{Numeric_Value: 47} (Short: \p{Nv=47}) (1)
T \p{Numeric_Value: 48} (Short: \p{Nv=48}) (1)
T \p{Numeric_Value: 49} (Short: \p{Nv=49}) (1)
- T \p{Numeric_Value: 50} (Short: \p{Nv=50}) (19)
- T \p{Numeric_Value: 60} (Short: \p{Nv=60}) (5)
- T \p{Numeric_Value: 70} (Short: \p{Nv=70}) (5)
- T \p{Numeric_Value: 80} (Short: \p{Nv=80}) (5)
+ T \p{Numeric_Value: 50} (Short: \p{Nv=50}) (20)
+ T \p{Numeric_Value: 60} (Short: \p{Nv=60}) (6)
+ T \p{Numeric_Value: 70} (Short: \p{Nv=70}) (6)
+ T \p{Numeric_Value: 80} (Short: \p{Nv=80}) (6)
T \p{Numeric_Value: 90} (Short: \p{Nv=90}) (6)
T \p{Numeric_Value: 100} (Short: \p{Nv=100}) (20)
T \p{Numeric_Value: 200} (Short: \p{Nv=200}) (2)
@@ -2155,28 +2742,15 @@ this property.
100000000}) (2)
T \p{Numeric_Value: 1000000000000} (= 1.0e+012) (Short: \p{Nv=
1000000000000}) (1)
- \p{Numeric_Value: NaN} (Short: \p{Nv=NaN}) (1_112_935)
+ \p{Numeric_Value: NaN} (Short: \p{Nv=NaN}) (1_112_887)
\p{Nv: *} \p{Numeric_Value: *}
- D \p{OAlpha} \p{Other_Alphabetic} (=
- \p{Other_Alphabetic=Y}) (795)
- D \p{OAlpha: *} \p{Other_Alphabetic: *}
- D \p{ODI} \p{Other_Default_Ignorable_Code_Point} (=
- \p{Other_Default_Ignorable_Code_Point=
- Y}) (3778)
- D \p{ODI: *} \p{Other_Default_Ignorable_Code_Point: *}
+ X \p{OCR} \p{Optical_Character_Recognition} (=
+ \p{Block=Optical_Character_Recognition})
+ (32)
\p{Ogam} \p{Ogham} (= \p{Script=Ogham}) (NOT
\p{Block=Ogham}) (29)
\p{Ogham} \p{Script=Ogham} (Short: \p{Ogam}; NOT
\p{Block=Ogham}) (29)
- D \p{OGr_Ext} \p{Other_Grapheme_Extend} (=
- \p{Other_Grapheme_Extend=Y}) (23)
- D \p{OGr_Ext: *} \p{Other_Grapheme_Extend: *}
- D \p{OIDC} \p{Other_ID_Continue} (=
- \p{Other_ID_Continue=Y}) (12)
- D \p{OIDC: *} \p{Other_ID_Continue: *}
- D \p{OIDS} \p{Other_ID_Start} (= \p{Other_ID_Start=
- Y}) (4)
- D \p{OIDS: *} \p{Other_ID_Start: *}
\p{Ol_Chiki} \p{Script=Ol_Chiki} (Short: \p{Olck}) (48)
\p{Olck} \p{Ol_Chiki} (= \p{Script=Ol_Chiki}) (48)
\p{Old_Italic} \p{Script=Old_Italic} (Short: \p{Ital};
@@ -2187,15 +2761,11 @@ this property.
\p{Sarb}) (32)
\p{Old_Turkic} \p{Script=Old_Turkic} (Short: \p{Orkh};
NOT \p{Block=Old_Turkic}) (73)
- D \p{OLower} \p{Other_Lowercase} (= \p{Other_Lowercase=
- Y}) (159)
- D \p{OLower: *} \p{Other_Lowercase: *}
- D \p{OMath} \p{Other_Math} (= \p{Other_Math=Y}) (1217)
- D \p{OMath: *} \p{Other_Math: *}
\p{Open_Punctuation} \p{General_Category=Open_Punctuation}
(Short: \p{Ps}) (72)
X \p{Optical_Character_Recognition} \p{Block=
- Optical_Character_Recognition} (32)
+ Optical_Character_Recognition} (Short:
+ \p{InOCR}) (32)
\p{Oriya} \p{Script=Oriya} (Short: \p{Orya}; NOT
\p{Block=Oriya}) (90)
\p{Orkh} \p{Old_Turkic} (= \p{Script=Old_Turkic})
@@ -2207,117 +2777,18 @@ this property.
\p{Osmanya} \p{Script=Osmanya} (Short: \p{Osma}; NOT
\p{Block=Osmanya}) (40)
\p{Other} \p{General_Category=Other} (Short: \p{C})
- (1_004_868)
- D \p{Other_Alphabetic} \p{Other_Alphabetic=Y} (Short: \p{OAlpha})
- (795)
- D \p{Other_Alphabetic: N*} Used by Unicode internally for generating
- the Alphabetic property (which should be
- used instead) and not intended to be
- used stand-alone (Short: \p{OAlpha=N},
- \P{OAlpha}) (1_113_317)
- D \p{Other_Alphabetic: Y*} Used by Unicode internally for generating
- the Alphabetic property (which should be
- used instead) and not intended to be
- used stand-alone (Short: \p{OAlpha=Y},
- \p{OAlpha}) (795)
- D \p{Other_Default_Ignorable_Code_Point}
- \p{Other_Default_Ignorable_Code_Point=Y}
- (Short: \p{ODI}) (3778)
- D \p{Other_Default_Ignorable_Code_Point: N*} Used by Unicode
- internally for generating the
- Default_Ignorable_Code_Point property
- (which should be used instead) and not
- intended to be used stand-alone (Short:
- \p{ODI=N}, \P{ODI}) (1_110_334)
- D \p{Other_Default_Ignorable_Code_Point: Y*} Used by Unicode
- internally for generating the
- Default_Ignorable_Code_Point property
- (which should be used instead) and not
- intended to be used stand-alone (Short:
- \p{ODI=Y}, \p{ODI}) (3778)
- D \p{Other_Grapheme_Extend} \p{Other_Grapheme_Extend=Y} (Short:
- \p{OGrExt}) (23)
- D \p{Other_Grapheme_Extend: N*} Used by Unicode internally for
- generating the Grapheme_Extend property
- (which should be used instead) and not
- intended to be used stand-alone (Short:
- \p{OGrExt=N}, \P{OGrExt}) (1_114_089)
- D \p{Other_Grapheme_Extend: Y*} Used by Unicode internally for
- generating the Grapheme_Extend property
- (which should be used instead) and not
- intended to be used stand-alone (Short:
- \p{OGrExt=Y}, \p{OGrExt}) (23)
- D \p{Other_ID_Continue} \p{Other_ID_Continue=Y} (Short: \p{OIDC})
- (12)
- D \p{Other_ID_Continue: N*} Used by Unicode internally for
- generating the ID_Continue property
- (which should be used instead) and not
- intended to be used stand-alone (Short:
- \p{OIDC=N}, \P{OIDC}) (1_114_100)
- D \p{Other_ID_Continue: Y*} Used by Unicode internally for
- generating the ID_Continue property
- (which should be used instead) and not
- intended to be used stand-alone (Short:
- \p{OIDC=Y}, \p{OIDC}) (12)
- D \p{Other_ID_Start} \p{Other_ID_Start=Y} (Short: \p{OIDS}) (4)
- D \p{Other_ID_Start: N*} Used by Unicode internally for generating
- the ID_Start property (which should be
- used instead) and not intended to be
- used stand-alone (Short: \p{OIDS=N},
- \P{OIDS}) (1_114_108)
- D \p{Other_ID_Start: Y*} Used by Unicode internally for generating
- the ID_Start property (which should be
- used instead) and not intended to be
- used stand-alone (Short: \p{OIDS=Y},
- \p{OIDS}) (4)
+ (1_004_135)
\p{Other_Letter} \p{General_Category=Other_Letter} (Short:
- \p{Lo}) (97_084)
- D \p{Other_Lowercase} \p{Other_Lowercase=Y} (Short: \p{OLower})
- (159)
- D \p{Other_Lowercase: N*} Used by Unicode internally for generating
- the Lowercase property (which should be
- used instead) and not intended to be
- used stand-alone (Short: \p{OLower=N},
- \P{OLower}) (1_113_953)
- D \p{Other_Lowercase: Y*} Used by Unicode internally for generating
- the Lowercase property (which should be
- used instead) and not intended to be
- used stand-alone (Short: \p{OLower=Y},
- \p{OLower}) (159)
- D \p{Other_Math} \p{Other_Math=Y} (Short: \p{OMath}) (1217)
- D \p{Other_Math: N*} Used by Unicode internally for generating
- the Math property (which should be used
- instead) and not intended to be used
- stand-alone (Short: \p{OMath=N},
- \P{OMath}) (1_112_895)
- D \p{Other_Math: Y*} Used by Unicode internally for generating
- the Math property (which should be used
- instead) and not intended to be used
- stand-alone (Short: \p{OMath=Y},
- \p{OMath}) (1217)
+ \p{Lo}) (97_553)
\p{Other_Number} \p{General_Category=Other_Number} (Short:
- \p{No}) (456)
+ \p{No}) (464)
\p{Other_Punctuation} \p{General_Category=Other_Punctuation}
- (Short: \p{Po}) (402)
+ (Short: \p{Po}) (434)
\p{Other_Symbol} \p{General_Category=Other_Symbol} (Short:
- \p{So}) (4398)
- D \p{Other_Uppercase} \p{Other_Uppercase=Y} (Short: \p{OUpper})
- (42)
- D \p{Other_Uppercase: N*} Used by Unicode internally for generating
- the Uppercase property (which should be
- used instead) and not intended to be
- used stand-alone (Short: \p{OUpper=N},
- \P{OUpper}) (1_114_070)
- D \p{Other_Uppercase: Y*} Used by Unicode internally for generating
- the Uppercase property (which should be
- used instead) and not intended to be
- used stand-alone (Short: \p{OUpper=Y},
- \p{OUpper}) (42)
- D \p{OUpper} \p{Other_Uppercase} (= \p{Other_Uppercase=
- Y}) (42)
- D \p{OUpper: *} \p{Other_Uppercase: *}
+ \p{So}) (4404)
\p{P} \p{Punct} (= \p{General_Category=
- Punctuation}) (598)
+ Punctuation}) (NOT
+ \p{General_Punctuation}) (632)
\p{Paragraph_Separator} \p{General_Category=Paragraph_Separator}
(Short: \p{Zp}) (1)
\p{Pat_Syn} \p{Pattern_Syntax} (= \p{Pattern_Syntax=
@@ -2341,11 +2812,11 @@ this property.
Connector_Punctuation}) (10)
\p{Pd} \p{Dash_Punctuation} (=
\p{General_Category=Dash_Punctuation})
- (21)
+ (23)
\p{Pe} \p{Close_Punctuation} (=
\p{General_Category=Close_Punctuation})
(71)
- \p{PerlSpace} \s, restricted to ASCII (5)
+ \p{PerlSpace} \s, restricted to ASCII = [ \f\n\r\t] (5)
\p{PerlWord} \w, restricted to ASCII = [A-Za-z0-9_] (63)
\p{Pf} \p{Final_Punctuation} (=
\p{General_Category=Final_Punctuation})
@@ -2354,7 +2825,10 @@ this property.
\p{Block=Phags_Pa}) (56)
\p{Phags_Pa} \p{Script=Phags_Pa} (Short: \p{Phag}; NOT
\p{Block=Phags_Pa}) (56)
- X \p{Phaistos_Disc} \p{Block=Phaistos_Disc} (48)
+ X \p{Phaistos} \p{Phaistos_Disc} (= \p{Block=
+ Phaistos_Disc}) (48)
+ X \p{Phaistos_Disc} \p{Block=Phaistos_Disc} (Short:
+ \p{InPhaistos}) (48)
\p{Phli} \p{Inscriptional_Pahlavi} (= \p{Script=
Inscriptional_Pahlavi}) (NOT \p{Block=
Inscriptional_Pahlavi}) (27)
@@ -2362,16 +2836,25 @@ this property.
(NOT \p{Block=Phoenician}) (29)
\p{Phoenician} \p{Script=Phoenician} (Short: \p{Phnx};
NOT \p{Block=Phoenician}) (29)
- X \p{Phonetic_Extensions} \p{Block=Phonetic_Extensions} (128)
+ X \p{Phonetic_Ext} \p{Phonetic_Extensions} (= \p{Block=
+ Phonetic_Extensions}) (128)
+ X \p{Phonetic_Ext_Sup} \p{Phonetic_Extensions_Supplement} (=
+ \p{Block=
+ Phonetic_Extensions_Supplement}) (64)
+ X \p{Phonetic_Extensions} \p{Block=Phonetic_Extensions} (Short:
+ \p{InPhoneticExt}) (128)
X \p{Phonetic_Extensions_Supplement} \p{Block=
- Phonetic_Extensions_Supplement} (64)
+ Phonetic_Extensions_Supplement} (Short:
+ \p{InPhoneticExtSup}) (64)
\p{Pi} \p{Initial_Punctuation} (=
\p{General_Category=
Initial_Punctuation}) (12)
X \p{Playing_Cards} \p{Block=Playing_Cards} (96)
+ \p{Plrd} \p{Miao} (= \p{Script=Miao}) (NOT
+ \p{Block=Miao}) (133)
\p{Po} \p{Other_Punctuation} (=
\p{General_Category=Other_Punctuation})
- (402)
+ (434)
\p{PosixAlnum} [A-Za-z0-9] (62)
\p{PosixAlpha} [A-Za-z] (52)
\p{PosixBlank} \t and ' ' (2)
@@ -2391,8 +2874,9 @@ this property.
vertical tab) (6)
\p{PosixUpper} [A-Z] (/i= PosixAlpha) (26)
\p{PosixWord} \p{PerlWord} (63)
- \p{PosixXDigit} [0-9A-Fa-f] (22)
- T \p{Present_In: 1.1} \p{Age=1.1} (Short: \p{In=1.1}) (Perl
+ \p{PosixXDigit} \p{ASCII_Hex_Digit=Y} [0-9A-Fa-f] (Short:
+ \p{AHex}) (22)
+ T \p{Present_In: 1.1} \p{Age=V1_1} (Short: \p{In=1.1}) (Perl
extension) (33_979)
T \p{Present_In: 2.0} Code point's usage introduced in version
2.0 or earlier (Short: \p{In=2.0}) (Perl
@@ -2427,29 +2911,35 @@ this property.
T \p{Present_In: 6.0} Code point's usage introduced in version
6.0 or earlier (Short: \p{In=6.0}) (Perl
extension) (249_031)
+ T \p{Present_In: 6.1} Code point's usage introduced in version
+ 6.1 or earlier (Short: \p{In=6.1}) (Perl
+ extension) (249_763)
\p{Present_In: Unassigned} \p{Age=Unassigned} (Short: \p{In=
- Unassigned}) (Perl extension) (865_081)
+ Unassigned}) (Perl extension) (864_349)
\p{Print} Characters that are graphical plus space
- characters (but no controls) (246_850)
+ characters (but no controls) (247_582)
\p{Private_Use} \p{General_Category=Private_Use} (Short:
\p{Co}; NOT \p{Private_Use_Area})
(137_468)
X \p{Private_Use_Area} \p{Block=Private_Use_Area} (Short:
- \p{InPrivateUse}) (6400)
+ \p{InPUA}) (6400)
\p{Prti} \p{Inscriptional_Parthian} (= \p{Script=
Inscriptional_Parthian}) (NOT \p{Block=
Inscriptional_Parthian}) (30)
\p{Ps} \p{Open_Punctuation} (=
\p{General_Category=Open_Punctuation})
(72)
+ X \p{PUA} \p{Private_Use_Area} (= \p{Block=
+ Private_Use_Area}) (6400)
\p{Punct} \p{General_Category=Punctuation} (Short:
- \p{P}) (598)
+ \p{P}; NOT \p{General_Punctuation}) (632)
\p{Punctuation} \p{Punct} (= \p{General_Category=
- Punctuation}) (598)
+ Punctuation}) (NOT
+ \p{General_Punctuation}) (632)
\p{Qaac} \p{Coptic} (= \p{Script=Coptic}) (NOT
- \p{Block=Coptic}) (135)
+ \p{Block=Coptic}) (137)
\p{Qaai} \p{Inherited} (= \p{Script=Inherited})
- (523)
+ (524)
\p{QMark} \p{Quotation_Mark} (= \p{Quotation_Mark=
Y}) (29)
\p{QMark: *} \p{Quotation_Mark: *}
@@ -2464,13 +2954,16 @@ this property.
\p{Block=Rejang}) (37)
\p{Rjng} \p{Rejang} (= \p{Script=Rejang}) (NOT
\p{Block=Rejang}) (37)
- X \p{Rumi_Numeral_Symbols} \p{Block=Rumi_Numeral_Symbols} (32)
+ X \p{Rumi} \p{Rumi_Numeral_Symbols} (= \p{Block=
+ Rumi_Numeral_Symbols}) (32)
+ X \p{Rumi_Numeral_Symbols} \p{Block=Rumi_Numeral_Symbols} (Short:
+ \p{InRumi}) (32)
\p{Runic} \p{Script=Runic} (Short: \p{Runr}; NOT
\p{Block=Runic}) (78)
\p{Runr} \p{Runic} (= \p{Script=Runic}) (NOT
\p{Block=Runic}) (78)
\p{S} \p{Symbol} (= \p{General_Category=Symbol})
- (5508)
+ (5519)
\p{Samaritan} \p{Script=Samaritan} (Short: \p{Samr}; NOT
\p{Block=Samaritan}) (61)
\p{Samr} \p{Samaritan} (= \p{Script=Samaritan})
@@ -2484,13 +2977,13 @@ this property.
\p{SB: *} \p{Sentence_Break: *}
\p{Sc} \p{Currency_Symbol} (=
\p{General_Category=Currency_Symbol})
- (47)
+ (48)
\p{Sc: *} \p{Script: *}
- \p{Script: Arab} \p{Script=Arabic} (1051)
- \p{Script: Arabic} (Short: \p{Sc=Arab}, \p{Arab}) (1051)
- \p{Script: Armenian} (Short: \p{Sc=Armn}, \p{Armn}) (90)
+ \p{Script: Arab} \p{Script=Arabic} (1234)
+ \p{Script: Arabic} (Short: \p{Sc=Arab}, \p{Arab}) (1234)
+ \p{Script: Armenian} (Short: \p{Sc=Armn}, \p{Armn}) (91)
\p{Script: Armi} \p{Script=Imperial_Aramaic} (31)
- \p{Script: Armn} \p{Script=Armenian} (90)
+ \p{Script: Armn} \p{Script=Armenian} (91)
\p{Script: Avestan} (Short: \p{Sc=Avst}, \p{Avst}) (61)
\p{Script: Avst} \p{Script=Avestan} (61)
\p{Script: Bali} \p{Script=Balinese} (121)
@@ -2511,47 +3004,49 @@ this property.
\p{Script: Buginese} (Short: \p{Sc=Bugi}, \p{Bugi}) (30)
\p{Script: Buhd} \p{Script=Buhid} (20)
\p{Script: Buhid} (Short: \p{Sc=Buhd}, \p{Buhd}) (20)
+ \p{Script: Cakm} \p{Script=Chakma} (67)
\p{Script: Canadian_Aboriginal} (Short: \p{Sc=Cans}, \p{Cans})
(710)
\p{Script: Cans} \p{Script=Canadian_Aboriginal} (710)
\p{Script: Cari} \p{Script=Carian} (49)
\p{Script: Carian} (Short: \p{Sc=Cari}, \p{Cari}) (49)
+ \p{Script: Chakma} (Short: \p{Sc=Cakm}, \p{Cakm}) (67)
\p{Script: Cham} (Short: \p{Sc=Cham}, \p{Cham}) (83)
\p{Script: Cher} \p{Script=Cherokee} (85)
\p{Script: Cherokee} (Short: \p{Sc=Cher}, \p{Cher}) (85)
- \p{Script: Common} (Short: \p{Sc=Zyyy}, \p{Zyyy}) (6379)
- \p{Script: Copt} \p{Script=Coptic} (135)
- \p{Script: Coptic} (Short: \p{Sc=Copt}, \p{Copt}) (135)
+ \p{Script: Common} (Short: \p{Sc=Zyyy}, \p{Zyyy}) (6412)
+ \p{Script: Copt} \p{Script=Coptic} (137)
+ \p{Script: Coptic} (Short: \p{Sc=Copt}, \p{Copt}) (137)
\p{Script: Cprt} \p{Script=Cypriot} (55)
\p{Script: Cuneiform} (Short: \p{Sc=Xsux}, \p{Xsux}) (982)
\p{Script: Cypriot} (Short: \p{Sc=Cprt}, \p{Cprt}) (55)
- \p{Script: Cyrillic} (Short: \p{Sc=Cyrl}, \p{Cyrl}) (408)
- \p{Script: Cyrl} \p{Script=Cyrillic} (408)
+ \p{Script: Cyrillic} (Short: \p{Sc=Cyrl}, \p{Cyrl}) (417)
+ \p{Script: Cyrl} \p{Script=Cyrillic} (417)
\p{Script: Deseret} (Short: \p{Sc=Dsrt}, \p{Dsrt}) (80)
- \p{Script: Deva} \p{Script=Devanagari} (150)
- \p{Script: Devanagari} (Short: \p{Sc=Deva}, \p{Deva}) (150)
+ \p{Script: Deva} \p{Script=Devanagari} (151)
+ \p{Script: Devanagari} (Short: \p{Sc=Deva}, \p{Deva}) (151)
\p{Script: Dsrt} \p{Script=Deseret} (80)
\p{Script: Egyp} \p{Script=Egyptian_Hieroglyphs} (1071)
\p{Script: Egyptian_Hieroglyphs} (Short: \p{Sc=Egyp}, \p{Egyp})
(1071)
\p{Script: Ethi} \p{Script=Ethiopic} (495)
\p{Script: Ethiopic} (Short: \p{Sc=Ethi}, \p{Ethi}) (495)
- \p{Script: Geor} \p{Script=Georgian} (120)
- \p{Script: Georgian} (Short: \p{Sc=Geor}, \p{Geor}) (120)
+ \p{Script: Geor} \p{Script=Georgian} (127)
+ \p{Script: Georgian} (Short: \p{Sc=Geor}, \p{Geor}) (127)
\p{Script: Glag} \p{Script=Glagolitic} (94)
\p{Script: Glagolitic} (Short: \p{Sc=Glag}, \p{Glag}) (94)
\p{Script: Goth} \p{Script=Gothic} (27)
\p{Script: Gothic} (Short: \p{Sc=Goth}, \p{Goth}) (27)
\p{Script: Greek} (Short: \p{Sc=Grek}, \p{Grek}) (511)
\p{Script: Grek} \p{Script=Greek} (511)
- \p{Script: Gujarati} (Short: \p{Sc=Gujr}, \p{Gujr}) (83)
- \p{Script: Gujr} \p{Script=Gujarati} (83)
+ \p{Script: Gujarati} (Short: \p{Sc=Gujr}, \p{Gujr}) (84)
+ \p{Script: Gujr} \p{Script=Gujarati} (84)
\p{Script: Gurmukhi} (Short: \p{Sc=Guru}, \p{Guru}) (79)
\p{Script: Guru} \p{Script=Gurmukhi} (79)
- \p{Script: Han} (Short: \p{Sc=Han}, \p{Han}) (75_960)
+ \p{Script: Han} (Short: \p{Sc=Han}, \p{Han}) (75_963)
\p{Script: Hang} \p{Script=Hangul} (11_739)
\p{Script: Hangul} (Short: \p{Sc=Hang}, \p{Hang}) (11_739)
- \p{Script: Hani} \p{Script=Han} (75_960)
+ \p{Script: Hani} \p{Script=Han} (75_963)
\p{Script: Hano} \p{Script=Hanunoo} (21)
\p{Script: Hanunoo} (Short: \p{Sc=Hano}, \p{Hano}) (21)
\p{Script: Hebr} \p{Script=Hebrew} (133)
@@ -2559,7 +3054,7 @@ this property.
\p{Script: Hira} \p{Script=Hiragana} (91)
\p{Script: Hiragana} (Short: \p{Sc=Hira}, \p{Hira}) (91)
\p{Script: Imperial_Aramaic} (Short: \p{Sc=Armi}, \p{Armi}) (31)
- \p{Script: Inherited} (Short: \p{Sc=Zinh}, \p{Zinh}) (523)
+ \p{Script: Inherited} (Short: \p{Sc=Zinh}, \p{Zinh}) (524)
\p{Script: Inscriptional_Pahlavi} (Short: \p{Sc=Phli}, \p{Phli})
(27)
\p{Script: Inscriptional_Parthian} (Short: \p{Sc=Prti}, \p{Prti})
@@ -2580,10 +3075,10 @@ this property.
\p{Script: Knda} \p{Script=Kannada} (86)
\p{Script: Kthi} \p{Script=Kaithi} (66)
\p{Script: Lana} \p{Script=Tai_Tham} (127)
- \p{Script: Lao} (Short: \p{Sc=Lao}, \p{Lao}) (65)
- \p{Script: Laoo} \p{Script=Lao} (65)
- \p{Script: Latin} (Short: \p{Sc=Latn}, \p{Latn}) (1267)
- \p{Script: Latn} \p{Script=Latin} (1267)
+ \p{Script: Lao} (Short: \p{Sc=Lao}, \p{Lao}) (67)
+ \p{Script: Laoo} \p{Script=Lao} (67)
+ \p{Script: Latin} (Short: \p{Sc=Latn}, \p{Latn}) (1272)
+ \p{Script: Latn} \p{Script=Latin} (1272)
\p{Script: Lepc} \p{Script=Lepcha} (74)
\p{Script: Lepcha} (Short: \p{Sc=Lepc}, \p{Lepc}) (74)
\p{Script: Limb} \p{Script=Limbu} (66)
@@ -2598,11 +3093,17 @@ this property.
\p{Script: Malayalam} (Short: \p{Sc=Mlym}, \p{Mlym}) (98)
\p{Script: Mand} \p{Script=Mandaic} (29)
\p{Script: Mandaic} (Short: \p{Sc=Mand}, \p{Mand}) (29)
- \p{Script: Meetei_Mayek} (Short: \p{Sc=Mtei}, \p{Mtei}) (56)
+ \p{Script: Meetei_Mayek} (Short: \p{Sc=Mtei}, \p{Mtei}) (79)
+ \p{Script: Merc} \p{Script=Meroitic_Cursive} (26)
+ \p{Script: Mero} \p{Script=Meroitic_Hieroglyphs} (32)
+ \p{Script: Meroitic_Cursive} (Short: \p{Sc=Merc}, \p{Merc}) (26)
+ \p{Script: Meroitic_Hieroglyphs} (Short: \p{Sc=Mero}, \p{Mero})
+ (32)
+ \p{Script: Miao} (Short: \p{Sc=Miao}, \p{Miao}) (133)
\p{Script: Mlym} \p{Script=Malayalam} (98)
\p{Script: Mong} \p{Script=Mongolian} (153)
\p{Script: Mongolian} (Short: \p{Sc=Mong}, \p{Mong}) (153)
- \p{Script: Mtei} \p{Script=Meetei_Mayek} (56)
+ \p{Script: Mtei} \p{Script=Meetei_Mayek} (79)
\p{Script: Myanmar} (Short: \p{Sc=Mymr}, \p{Mymr}) (188)
\p{Script: Mymr} \p{Script=Myanmar} (188)
\p{Script: New_Tai_Lue} (Short: \p{Sc=Talu}, \p{Talu}) (83)
@@ -2626,9 +3127,10 @@ this property.
\p{Script: Phli} \p{Script=Inscriptional_Pahlavi} (27)
\p{Script: Phnx} \p{Script=Phoenician} (29)
\p{Script: Phoenician} (Short: \p{Sc=Phnx}, \p{Phnx}) (29)
+ \p{Script: Plrd} \p{Script=Miao} (133)
\p{Script: Prti} \p{Script=Inscriptional_Parthian} (30)
- \p{Script: Qaac} \p{Script=Coptic} (135)
- \p{Script: Qaai} \p{Script=Inherited} (523)
+ \p{Script: Qaac} \p{Script=Coptic} (137)
+ \p{Script: Qaai} \p{Script=Inherited} (524)
\p{Script: Rejang} (Short: \p{Sc=Rjng}, \p{Rjng}) (37)
\p{Script: Rjng} \p{Script=Rejang} (37)
\p{Script: Runic} (Short: \p{Sc=Runr}, \p{Runr}) (78)
@@ -2638,12 +3140,16 @@ this property.
\p{Script: Sarb} \p{Script=Old_South_Arabian} (32)
\p{Script: Saur} \p{Script=Saurashtra} (81)
\p{Script: Saurashtra} (Short: \p{Sc=Saur}, \p{Saur}) (81)
+ \p{Script: Sharada} (Short: \p{Sc=Shrd}, \p{Shrd}) (83)
\p{Script: Shavian} (Short: \p{Sc=Shaw}, \p{Shaw}) (48)
\p{Script: Shaw} \p{Script=Shavian} (48)
+ \p{Script: Shrd} \p{Script=Sharada} (83)
\p{Script: Sinh} \p{Script=Sinhala} (80)
\p{Script: Sinhala} (Short: \p{Sc=Sinh}, \p{Sinh}) (80)
- \p{Script: Sund} \p{Script=Sundanese} (55)
- \p{Script: Sundanese} (Short: \p{Sc=Sund}, \p{Sund}) (55)
+ \p{Script: Sora} \p{Script=Sora_Sompeng} (35)
+ \p{Script: Sora_Sompeng} (Short: \p{Sc=Sora}, \p{Sora}) (35)
+ \p{Script: Sund} \p{Script=Sundanese} (72)
+ \p{Script: Sundanese} (Short: \p{Sc=Sund}, \p{Sund}) (72)
\p{Script: Sylo} \p{Script=Syloti_Nagri} (44)
\p{Script: Syloti_Nagri} (Short: \p{Sc=Sylo}, \p{Sylo}) (44)
\p{Script: Syrc} \p{Script=Syriac} (77)
@@ -2654,6 +3160,8 @@ this property.
\p{Script: Tai_Le} (Short: \p{Sc=Tale}, \p{Tale}) (35)
\p{Script: Tai_Tham} (Short: \p{Sc=Lana}, \p{Lana}) (127)
\p{Script: Tai_Viet} (Short: \p{Sc=Tavt}, \p{Tavt}) (72)
+ \p{Script: Takr} \p{Script=Takri} (66)
+ \p{Script: Takri} (Short: \p{Sc=Takr}, \p{Takr}) (66)
\p{Script: Tale} \p{Script=Tai_Le} (35)
\p{Script: Talu} \p{Script=New_Tai_Lue} (83)
\p{Script: Tamil} (Short: \p{Sc=Taml}, \p{Taml}) (72)
@@ -2661,26 +3169,246 @@ this property.
\p{Script: Tavt} \p{Script=Tai_Viet} (72)
\p{Script: Telu} \p{Script=Telugu} (93)
\p{Script: Telugu} (Short: \p{Sc=Telu}, \p{Telu}) (93)
- \p{Script: Tfng} \p{Script=Tifinagh} (57)
+ \p{Script: Tfng} \p{Script=Tifinagh} (59)
\p{Script: Tglg} \p{Script=Tagalog} (20)
\p{Script: Thaa} \p{Script=Thaana} (50)
\p{Script: Thaana} (Short: \p{Sc=Thaa}, \p{Thaa}) (50)
\p{Script: Thai} (Short: \p{Sc=Thai}, \p{Thai}) (86)
\p{Script: Tibetan} (Short: \p{Sc=Tibt}, \p{Tibt}) (207)
\p{Script: Tibt} \p{Script=Tibetan} (207)
- \p{Script: Tifinagh} (Short: \p{Sc=Tfng}, \p{Tfng}) (57)
+ \p{Script: Tifinagh} (Short: \p{Sc=Tfng}, \p{Tfng}) (59)
\p{Script: Ugar} \p{Script=Ugaritic} (31)
\p{Script: Ugaritic} (Short: \p{Sc=Ugar}, \p{Ugar}) (31)
- \p{Script: Unknown} (Short: \p{Sc=Zzzz}, \p{Zzzz}) (1_004_663)
+ \p{Script: Unknown} (Short: \p{Sc=Zzzz}, \p{Zzzz}) (1_003_931)
\p{Script: Vai} (Short: \p{Sc=Vai}, \p{Vai}) (300)
\p{Script: Vaii} \p{Script=Vai} (300)
\p{Script: Xpeo} \p{Script=Old_Persian} (50)
\p{Script: Xsux} \p{Script=Cuneiform} (982)
\p{Script: Yi} (Short: \p{Sc=Yi}, \p{Yi}) (1220)
\p{Script: Yiii} \p{Script=Yi} (1220)
- \p{Script: Zinh} \p{Script=Inherited} (523)
- \p{Script: Zyyy} \p{Script=Common} (6379)
- \p{Script: Zzzz} \p{Script=Unknown} (1_004_663)
+ \p{Script: Zinh} \p{Script=Inherited} (524)
+ \p{Script: Zyyy} \p{Script=Common} (6412)
+ \p{Script: Zzzz} \p{Script=Unknown} (1_003_931)
+ \p{Script_Extensions: Arab} \p{Script_Extensions=Arabic} (1261)
+ \p{Script_Extensions: Arabic} (Short: \p{Scx=Arab}) (1261)
+ \p{Script_Extensions: Armenian} (Short: \p{Scx=Armn}) (92)
+ \p{Script_Extensions: Armi} \p{Script_Extensions=Imperial_Aramaic}
+ (31)
+ \p{Script_Extensions: Armn} \p{Script_Extensions=Armenian} (92)
+ \p{Script_Extensions: Avestan} (Short: \p{Scx=Avst}) (61)
+ \p{Script_Extensions: Avst} \p{Script_Extensions=Avestan} (61)
+ \p{Script_Extensions: Bali} \p{Script_Extensions=Balinese} (121)
+ \p{Script_Extensions: Balinese} (Short: \p{Scx=Bali}) (121)
+ \p{Script_Extensions: Bamu} \p{Script_Extensions=Bamum} (657)
+ \p{Script_Extensions: Bamum} (Short: \p{Scx=Bamu}) (657)
+ \p{Script_Extensions: Batak} (Short: \p{Scx=Batk}) (56)
+ \p{Script_Extensions: Batk} \p{Script_Extensions=Batak} (56)
+ \p{Script_Extensions: Beng} \p{Script_Extensions=Bengali} (94)
+ \p{Script_Extensions: Bengali} (Short: \p{Scx=Beng}) (94)
+ \p{Script_Extensions: Bopo} \p{Script_Extensions=Bopomofo} (306)
+ \p{Script_Extensions: Bopomofo} (Short: \p{Scx=Bopo}) (306)
+ \p{Script_Extensions: Brah} \p{Script_Extensions=Brahmi} (108)
+ \p{Script_Extensions: Brahmi} (Short: \p{Scx=Brah}) (108)
+ \p{Script_Extensions: Brai} \p{Script_Extensions=Braille} (256)
+ \p{Script_Extensions: Braille} (Short: \p{Scx=Brai}) (256)
+ \p{Script_Extensions: Bugi} \p{Script_Extensions=Buginese} (30)
+ \p{Script_Extensions: Buginese} (Short: \p{Scx=Bugi}) (30)
+ \p{Script_Extensions: Buhd} \p{Script_Extensions=Buhid} (22)
+ \p{Script_Extensions: Buhid} (Short: \p{Scx=Buhd}) (22)
+ \p{Script_Extensions: Cakm} \p{Script_Extensions=Chakma} (67)
+ \p{Script_Extensions: Canadian_Aboriginal} (Short: \p{Scx=Cans})
+ (710)
+ \p{Script_Extensions: Cans} \p{Script_Extensions=
+ Canadian_Aboriginal} (710)
+ \p{Script_Extensions: Cari} \p{Script_Extensions=Carian} (49)
+ \p{Script_Extensions: Carian} (Short: \p{Scx=Cari}) (49)
+ \p{Script_Extensions: Chakma} (Short: \p{Scx=Cakm}) (67)
+ \p{Script_Extensions: Cham} (Short: \p{Scx=Cham}) (83)
+ \p{Script_Extensions: Cher} \p{Script_Extensions=Cherokee} (85)
+ \p{Script_Extensions: Cherokee} (Short: \p{Scx=Cher}) (85)
+ \p{Script_Extensions: Common} (Short: \p{Scx=Zyyy}) (6059)
+ \p{Script_Extensions: Copt} \p{Script_Extensions=Coptic} (137)
+ \p{Script_Extensions: Coptic} (Short: \p{Scx=Copt}) (137)
+ \p{Script_Extensions: Cprt} \p{Script_Extensions=Cypriot} (112)
+ \p{Script_Extensions: Cuneiform} (Short: \p{Scx=Xsux}) (982)
+ \p{Script_Extensions: Cypriot} (Short: \p{Scx=Cprt}) (112)
+ \p{Script_Extensions: Cyrillic} (Short: \p{Scx=Cyrl}) (417)
+ \p{Script_Extensions: Cyrl} \p{Script_Extensions=Cyrillic} (417)
+ \p{Script_Extensions: Deseret} (Short: \p{Scx=Dsrt}) (80)
+ \p{Script_Extensions: Deva} \p{Script_Extensions=Devanagari} (163)
+ \p{Script_Extensions: Devanagari} (Short: \p{Scx=Deva}) (163)
+ \p{Script_Extensions: Dsrt} \p{Script_Extensions=Deseret} (80)
+ \p{Script_Extensions: Egyp} \p{Script_Extensions=
+ Egyptian_Hieroglyphs} (1071)
+ \p{Script_Extensions: Egyptian_Hieroglyphs} (Short: \p{Scx=Egyp})
+ (1071)
+ \p{Script_Extensions: Ethi} \p{Script_Extensions=Ethiopic} (495)
+ \p{Script_Extensions: Ethiopic} (Short: \p{Scx=Ethi}) (495)
+ \p{Script_Extensions: Geor} \p{Script_Extensions=Georgian} (128)
+ \p{Script_Extensions: Georgian} (Short: \p{Scx=Geor}) (128)
+ \p{Script_Extensions: Glag} \p{Script_Extensions=Glagolitic} (94)
+ \p{Script_Extensions: Glagolitic} (Short: \p{Scx=Glag}) (94)
+ \p{Script_Extensions: Goth} \p{Script_Extensions=Gothic} (27)
+ \p{Script_Extensions: Gothic} (Short: \p{Scx=Goth}) (27)
+ \p{Script_Extensions: Greek} (Short: \p{Scx=Grek}) (511)
+ \p{Script_Extensions: Grek} \p{Script_Extensions=Greek} (511)
+ \p{Script_Extensions: Gujarati} (Short: \p{Scx=Gujr}) (94)
+ \p{Script_Extensions: Gujr} \p{Script_Extensions=Gujarati} (94)
+ \p{Script_Extensions: Gurmukhi} (Short: \p{Scx=Guru}) (91)
+ \p{Script_Extensions: Guru} \p{Script_Extensions=Gurmukhi} (91)
+ \p{Script_Extensions: Han} (Short: \p{Scx=Han}) (76_218)
+ \p{Script_Extensions: Hang} \p{Script_Extensions=Hangul} (11_971)
+ \p{Script_Extensions: Hangul} (Short: \p{Scx=Hang}) (11_971)
+ \p{Script_Extensions: Hani} \p{Script_Extensions=Han} (76_218)
+ \p{Script_Extensions: Hano} \p{Script_Extensions=Hanunoo} (23)
+ \p{Script_Extensions: Hanunoo} (Short: \p{Scx=Hano}) (23)
+ \p{Script_Extensions: Hebr} \p{Script_Extensions=Hebrew} (133)
+ \p{Script_Extensions: Hebrew} (Short: \p{Scx=Hebr}) (133)
+ \p{Script_Extensions: Hira} \p{Script_Extensions=Hiragana} (356)
+ \p{Script_Extensions: Hiragana} (Short: \p{Scx=Hira}) (356)
+ \p{Script_Extensions: Imperial_Aramaic} (Short: \p{Scx=Armi}) (31)
+ \p{Script_Extensions: Inherited} (Short: \p{Scx=Zinh}) (506)
+ \p{Script_Extensions: Inscriptional_Pahlavi} (Short: \p{Scx=Phli})
+ (27)
+ \p{Script_Extensions: Inscriptional_Parthian} (Short: \p{Scx=
+ Prti}) (30)
+ \p{Script_Extensions: Ital} \p{Script_Extensions=Old_Italic} (35)
+ \p{Script_Extensions: Java} \p{Script_Extensions=Javanese} (91)
+ \p{Script_Extensions: Javanese} (Short: \p{Scx=Java}) (91)
+ \p{Script_Extensions: Kaithi} (Short: \p{Scx=Kthi}) (76)
+ \p{Script_Extensions: Kali} \p{Script_Extensions=Kayah_Li} (48)
+ \p{Script_Extensions: Kana} \p{Script_Extensions=Katakana} (565)
+ \p{Script_Extensions: Kannada} (Short: \p{Scx=Knda}) (86)
+ \p{Script_Extensions: Katakana} (Short: \p{Scx=Kana}) (565)
+ \p{Script_Extensions: Kayah_Li} (Short: \p{Scx=Kali}) (48)
+ \p{Script_Extensions: Khar} \p{Script_Extensions=Kharoshthi} (65)
+ \p{Script_Extensions: Kharoshthi} (Short: \p{Scx=Khar}) (65)
+ \p{Script_Extensions: Khmer} (Short: \p{Scx=Khmr}) (146)
+ \p{Script_Extensions: Khmr} \p{Script_Extensions=Khmer} (146)
+ \p{Script_Extensions: Knda} \p{Script_Extensions=Kannada} (86)
+ \p{Script_Extensions: Kthi} \p{Script_Extensions=Kaithi} (76)
+ \p{Script_Extensions: Lana} \p{Script_Extensions=Tai_Tham} (127)
+ \p{Script_Extensions: Lao} (Short: \p{Scx=Lao}) (67)
+ \p{Script_Extensions: Laoo} \p{Script_Extensions=Lao} (67)
+ \p{Script_Extensions: Latin} (Short: \p{Scx=Latn}) (1272)
+ \p{Script_Extensions: Latn} \p{Script_Extensions=Latin} (1272)
+ \p{Script_Extensions: Lepc} \p{Script_Extensions=Lepcha} (74)
+ \p{Script_Extensions: Lepcha} (Short: \p{Scx=Lepc}) (74)
+ \p{Script_Extensions: Limb} \p{Script_Extensions=Limbu} (66)
+ \p{Script_Extensions: Limbu} (Short: \p{Scx=Limb}) (66)
+ \p{Script_Extensions: Linb} \p{Script_Extensions=Linear_B} (268)
+ \p{Script_Extensions: Linear_B} (Short: \p{Scx=Linb}) (268)
+ \p{Script_Extensions: Lisu} (Short: \p{Scx=Lisu}) (48)
+ \p{Script_Extensions: Lyci} \p{Script_Extensions=Lycian} (29)
+ \p{Script_Extensions: Lycian} (Short: \p{Scx=Lyci}) (29)
+ \p{Script_Extensions: Lydi} \p{Script_Extensions=Lydian} (27)
+ \p{Script_Extensions: Lydian} (Short: \p{Scx=Lydi}) (27)
+ \p{Script_Extensions: Malayalam} (Short: \p{Scx=Mlym}) (98)
+ \p{Script_Extensions: Mand} \p{Script_Extensions=Mandaic} (30)
+ \p{Script_Extensions: Mandaic} (Short: \p{Scx=Mand}) (30)
+ \p{Script_Extensions: Meetei_Mayek} (Short: \p{Scx=Mtei}) (79)
+ \p{Script_Extensions: Merc} \p{Script_Extensions=Meroitic_Cursive}
+ (26)
+ \p{Script_Extensions: Mero} \p{Script_Extensions=
+ Meroitic_Hieroglyphs} (32)
+ \p{Script_Extensions: Meroitic_Cursive} (Short: \p{Scx=Merc}) (26)
+ \p{Script_Extensions: Meroitic_Hieroglyphs} (Short: \p{Scx=Mero})
+ (32)
+ \p{Script_Extensions: Miao} (Short: \p{Scx=Miao}) (133)
+ \p{Script_Extensions: Mlym} \p{Script_Extensions=Malayalam} (98)
+ \p{Script_Extensions: Mong} \p{Script_Extensions=Mongolian} (156)
+ \p{Script_Extensions: Mongolian} (Short: \p{Scx=Mong}) (156)
+ \p{Script_Extensions: Mtei} \p{Script_Extensions=Meetei_Mayek} (79)
+ \p{Script_Extensions: Myanmar} (Short: \p{Scx=Mymr}) (188)
+ \p{Script_Extensions: Mymr} \p{Script_Extensions=Myanmar} (188)
+ \p{Script_Extensions: New_Tai_Lue} (Short: \p{Scx=Talu}) (83)
+ \p{Script_Extensions: Nko} (Short: \p{Scx=Nko}) (59)
+ \p{Script_Extensions: Nkoo} \p{Script_Extensions=Nko} (59)
+ \p{Script_Extensions: Ogam} \p{Script_Extensions=Ogham} (29)
+ \p{Script_Extensions: Ogham} (Short: \p{Scx=Ogam}) (29)
+ \p{Script_Extensions: Ol_Chiki} (Short: \p{Scx=Olck}) (48)
+ \p{Script_Extensions: Olck} \p{Script_Extensions=Ol_Chiki} (48)
+ \p{Script_Extensions: Old_Italic} (Short: \p{Scx=Ital}) (35)
+ \p{Script_Extensions: Old_Persian} (Short: \p{Scx=Xpeo}) (50)
+ \p{Script_Extensions: Old_South_Arabian} (Short: \p{Scx=Sarb}) (32)
+ \p{Script_Extensions: Old_Turkic} (Short: \p{Scx=Orkh}) (73)
+ \p{Script_Extensions: Oriya} (Short: \p{Scx=Orya}) (92)
+ \p{Script_Extensions: Orkh} \p{Script_Extensions=Old_Turkic} (73)
+ \p{Script_Extensions: Orya} \p{Script_Extensions=Oriya} (92)
+ \p{Script_Extensions: Osma} \p{Script_Extensions=Osmanya} (40)
+ \p{Script_Extensions: Osmanya} (Short: \p{Scx=Osma}) (40)
+ \p{Script_Extensions: Phag} \p{Script_Extensions=Phags_Pa} (59)
+ \p{Script_Extensions: Phags_Pa} (Short: \p{Scx=Phag}) (59)
+ \p{Script_Extensions: Phli} \p{Script_Extensions=
+ Inscriptional_Pahlavi} (27)
+ \p{Script_Extensions: Phnx} \p{Script_Extensions=Phoenician} (29)
+ \p{Script_Extensions: Phoenician} (Short: \p{Scx=Phnx}) (29)
+ \p{Script_Extensions: Plrd} \p{Script_Extensions=Miao} (133)
+ \p{Script_Extensions: Prti} \p{Script_Extensions=
+ Inscriptional_Parthian} (30)
+ \p{Script_Extensions: Qaac} \p{Script_Extensions=Coptic} (137)
+ \p{Script_Extensions: Qaai} \p{Script_Extensions=Inherited} (506)
+ \p{Script_Extensions: Rejang} (Short: \p{Scx=Rjng}) (37)
+ \p{Script_Extensions: Rjng} \p{Script_Extensions=Rejang} (37)
+ \p{Script_Extensions: Runic} (Short: \p{Scx=Runr}) (78)
+ \p{Script_Extensions: Runr} \p{Script_Extensions=Runic} (78)
+ \p{Script_Extensions: Samaritan} (Short: \p{Scx=Samr}) (61)
+ \p{Script_Extensions: Samr} \p{Script_Extensions=Samaritan} (61)
+ \p{Script_Extensions: Sarb} \p{Script_Extensions=
+ Old_South_Arabian} (32)
+ \p{Script_Extensions: Saur} \p{Script_Extensions=Saurashtra} (81)
+ \p{Script_Extensions: Saurashtra} (Short: \p{Scx=Saur}) (81)
+ \p{Script_Extensions: Sharada} (Short: \p{Scx=Shrd}) (83)
+ \p{Script_Extensions: Shavian} (Short: \p{Scx=Shaw}) (48)
+ \p{Script_Extensions: Shaw} \p{Script_Extensions=Shavian} (48)
+ \p{Script_Extensions: Shrd} \p{Script_Extensions=Sharada} (83)
+ \p{Script_Extensions: Sinh} \p{Script_Extensions=Sinhala} (80)
+ \p{Script_Extensions: Sinhala} (Short: \p{Scx=Sinh}) (80)
+ \p{Script_Extensions: Sora} \p{Script_Extensions=Sora_Sompeng} (35)
+ \p{Script_Extensions: Sora_Sompeng} (Short: \p{Scx=Sora}) (35)
+ \p{Script_Extensions: Sund} \p{Script_Extensions=Sundanese} (72)
+ \p{Script_Extensions: Sundanese} (Short: \p{Scx=Sund}) (72)
+ \p{Script_Extensions: Sylo} \p{Script_Extensions=Syloti_Nagri} (44)
+ \p{Script_Extensions: Syloti_Nagri} (Short: \p{Scx=Sylo}) (44)
+ \p{Script_Extensions: Syrc} \p{Script_Extensions=Syriac} (93)
+ \p{Script_Extensions: Syriac} (Short: \p{Scx=Syrc}) (93)
+ \p{Script_Extensions: Tagalog} (Short: \p{Scx=Tglg}) (22)
+ \p{Script_Extensions: Tagb} \p{Script_Extensions=Tagbanwa} (20)
+ \p{Script_Extensions: Tagbanwa} (Short: \p{Scx=Tagb}) (20)
+ \p{Script_Extensions: Tai_Le} (Short: \p{Scx=Tale}) (35)
+ \p{Script_Extensions: Tai_Tham} (Short: \p{Scx=Lana}) (127)
+ \p{Script_Extensions: Tai_Viet} (Short: \p{Scx=Tavt}) (72)
+ \p{Script_Extensions: Takr} \p{Script_Extensions=Takri} (78)
+ \p{Script_Extensions: Takri} (Short: \p{Scx=Takr}) (78)
+ \p{Script_Extensions: Tale} \p{Script_Extensions=Tai_Le} (35)
+ \p{Script_Extensions: Talu} \p{Script_Extensions=New_Tai_Lue} (83)
+ \p{Script_Extensions: Tamil} (Short: \p{Scx=Taml}) (72)
+ \p{Script_Extensions: Taml} \p{Script_Extensions=Tamil} (72)
+ \p{Script_Extensions: Tavt} \p{Script_Extensions=Tai_Viet} (72)
+ \p{Script_Extensions: Telu} \p{Script_Extensions=Telugu} (93)
+ \p{Script_Extensions: Telugu} (Short: \p{Scx=Telu}) (93)
+ \p{Script_Extensions: Tfng} \p{Script_Extensions=Tifinagh} (59)
+ \p{Script_Extensions: Tglg} \p{Script_Extensions=Tagalog} (22)
+ \p{Script_Extensions: Thaa} \p{Script_Extensions=Thaana} (65)
+ \p{Script_Extensions: Thaana} (Short: \p{Scx=Thaa}) (65)
+ \p{Script_Extensions: Thai} (Short: \p{Scx=Thai}) (86)
+ \p{Script_Extensions: Tibetan} (Short: \p{Scx=Tibt}) (207)
+ \p{Script_Extensions: Tibt} \p{Script_Extensions=Tibetan} (207)
+ \p{Script_Extensions: Tifinagh} (Short: \p{Scx=Tfng}) (59)
+ \p{Script_Extensions: Ugar} \p{Script_Extensions=Ugaritic} (31)
+ \p{Script_Extensions: Ugaritic} (Short: \p{Scx=Ugar}) (31)
+ \p{Script_Extensions: Unknown} (Short: \p{Scx=Zzzz}) (1_003_931)
+ \p{Script_Extensions: Vai} (Short: \p{Scx=Vai}) (300)
+ \p{Script_Extensions: Vaii} \p{Script_Extensions=Vai} (300)
+ \p{Script_Extensions: Xpeo} \p{Script_Extensions=Old_Persian} (50)
+ \p{Script_Extensions: Xsux} \p{Script_Extensions=Cuneiform} (982)
+ \p{Script_Extensions: Yi} (Short: \p{Scx=Yi}) (1246)
+ \p{Script_Extensions: Yiii} \p{Script_Extensions=Yi} (1246)
+ \p{Script_Extensions: Zinh} \p{Script_Extensions=Inherited} (506)
+ \p{Script_Extensions: Zyyy} \p{Script_Extensions=Common} (6059)
+ \p{Script_Extensions: Zzzz} \p{Script_Extensions=Unknown}
+ (1_003_931)
+ \p{Scx: *} \p{Script_Extensions: *}
\p{SD} \p{Soft_Dotted} (= \p{Soft_Dotted=Y}) (46)
\p{SD: *} \p{Soft_Dotted: *}
\p{Sentence_Break: AT} \p{Sentence_Break=ATerm} (4)
@@ -2688,32 +3416,36 @@ this property.
\p{Sentence_Break: CL} \p{Sentence_Break=Close} (177)
\p{Sentence_Break: Close} (Short: \p{SB=CL}) (177)
\p{Sentence_Break: CR} (Short: \p{SB=CR}) (1)
- \p{Sentence_Break: EX} \p{Sentence_Break=Extend} (1502)
- \p{Sentence_Break: Extend} (Short: \p{SB=EX}) (1502)
- \p{Sentence_Break: FO} \p{Sentence_Break=Format} (138)
- \p{Sentence_Break: Format} (Short: \p{SB=FO}) (138)
- \p{Sentence_Break: LE} \p{Sentence_Break=OLetter} (97_369)
+ \p{Sentence_Break: EX} \p{Sentence_Break=Extend} (1649)
+ \p{Sentence_Break: Extend} (Short: \p{SB=EX}) (1649)
+ \p{Sentence_Break: FO} \p{Sentence_Break=Format} (137)
+ \p{Sentence_Break: Format} (Short: \p{SB=FO}) (137)
+ \p{Sentence_Break: LE} \p{Sentence_Break=OLetter} (97_841)
\p{Sentence_Break: LF} (Short: \p{SB=LF}) (1)
- \p{Sentence_Break: LO} \p{Sentence_Break=Lower} (1917)
- \p{Sentence_Break: Lower} (Short: \p{SB=LO}) (1917)
- \p{Sentence_Break: NU} \p{Sentence_Break=Numeric} (412)
- \p{Sentence_Break: Numeric} (Short: \p{SB=NU}) (412)
- \p{Sentence_Break: OLetter} (Short: \p{SB=LE}) (97_369)
- \p{Sentence_Break: Other} (Short: \p{SB=XX}) (1_010_959)
+ \p{Sentence_Break: LO} \p{Sentence_Break=Lower} (1933)
+ \p{Sentence_Break: Lower} (Short: \p{SB=LO}) (1933)
+ \p{Sentence_Break: NU} \p{Sentence_Break=Numeric} (452)
+ \p{Sentence_Break: Numeric} (Short: \p{SB=NU}) (452)
+ \p{Sentence_Break: OLetter} (Short: \p{SB=LE}) (97_841)
+ \p{Sentence_Break: Other} (Short: \p{SB=XX}) (1_010_273)
\p{Sentence_Break: SC} \p{Sentence_Break=SContinue} (26)
\p{Sentence_Break: SContinue} (Short: \p{SB=SC}) (26)
\p{Sentence_Break: SE} \p{Sentence_Break=Sep} (3)
\p{Sentence_Break: Sep} (Short: \p{SB=SE}) (3)
\p{Sentence_Break: Sp} (Short: \p{SB=Sp}) (21)
- \p{Sentence_Break: ST} \p{Sentence_Break=STerm} (73)
- \p{Sentence_Break: STerm} (Short: \p{SB=ST}) (73)
- \p{Sentence_Break: UP} \p{Sentence_Break=Upper} (1509)
- \p{Sentence_Break: Upper} (Short: \p{SB=UP}) (1509)
- \p{Sentence_Break: XX} \p{Sentence_Break=Other} (1_010_959)
+ \p{Sentence_Break: ST} \p{Sentence_Break=STerm} (80)
+ \p{Sentence_Break: STerm} (Short: \p{SB=ST}) (80)
+ \p{Sentence_Break: UP} \p{Sentence_Break=Upper} (1514)
+ \p{Sentence_Break: Upper} (Short: \p{SB=UP}) (1514)
+ \p{Sentence_Break: XX} \p{Sentence_Break=Other} (1_010_273)
\p{Separator} \p{General_Category=Separator} (Short:
\p{Z}) (20)
+ \p{Sharada} \p{Script=Sharada} (Short: \p{Shrd}; NOT
+ \p{Block=Sharada}) (83)
\p{Shavian} \p{Script=Shavian} (Short: \p{Shaw}) (48)
\p{Shaw} \p{Shavian} (= \p{Script=Shavian}) (48)
+ \p{Shrd} \p{Sharada} (= \p{Script=Sharada}) (NOT
+ \p{Block=Sharada}) (83)
\p{Sinh} \p{Sinhala} (= \p{Script=Sinhala}) (NOT
\p{Block=Sinhala}) (80)
\p{Sinhala} \p{Script=Sinhala} (Short: \p{Sinh}; NOT
@@ -2722,13 +3454,21 @@ this property.
\p{General_Category=Modifier_Symbol})
(115)
\p{Sm} \p{Math_Symbol} (= \p{General_Category=
- Math_Symbol}) (948)
- X \p{Small_Form_Variants} \p{Block=Small_Form_Variants} (32)
+ Math_Symbol}) (952)
+ X \p{Small_Form_Variants} \p{Block=Small_Form_Variants} (Short:
+ \p{InSmallForms}) (32)
+ X \p{Small_Forms} \p{Small_Form_Variants} (= \p{Block=
+ Small_Form_Variants}) (32)
\p{So} \p{Other_Symbol} (= \p{General_Category=
- Other_Symbol}) (4398)
+ Other_Symbol}) (4404)
\p{Soft_Dotted} \p{Soft_Dotted=Y} (Short: \p{SD}) (46)
\p{Soft_Dotted: N*} (Short: \p{SD=N}, \P{SD}) (1_114_066)
\p{Soft_Dotted: Y*} (Short: \p{SD=Y}, \p{SD}) (46)
+ \p{Sora} \p{Sora_Sompeng} (= \p{Script=
+ Sora_Sompeng}) (NOT \p{Block=
+ Sora_Sompeng}) (35)
+ \p{Sora_Sompeng} \p{Script=Sora_Sompeng} (Short: \p{Sora};
+ NOT \p{Block=Sora_Sompeng}) (35)
\p{Space} \p{White_Space=Y} \s including beyond
ASCII plus vertical tab (26)
\p{Space: *} \p{White_Space: *}
@@ -2736,32 +3476,60 @@ this property.
(Short: \p{Zs}) (18)
\p{SpacePerl} \p{XPerlSpace} (25)
\p{Spacing_Mark} \p{General_Category=Spacing_Mark} (Short:
- \p{Mc}) (287)
+ \p{Mc}) (353)
X \p{Spacing_Modifier_Letters} \p{Block=Spacing_Modifier_Letters}
- (80)
+ (Short: \p{InModifierLetters}) (80)
X \p{Specials} \p{Block=Specials} (16)
- \p{STerm} \p{STerm=Y} (76)
- \p{STerm: N*} (Single: \P{STerm}) (1_114_036)
- \p{STerm: Y*} (Single: \p{STerm}) (76)
+ \p{STerm} \p{STerm=Y} (83)
+ \p{STerm: N*} (Single: \P{STerm}) (1_114_029)
+ \p{STerm: Y*} (Single: \p{STerm}) (83)
\p{Sund} \p{Sundanese} (= \p{Script=Sundanese})
- (NOT \p{Block=Sundanese}) (55)
+ (NOT \p{Block=Sundanese}) (72)
\p{Sundanese} \p{Script=Sundanese} (Short: \p{Sund}; NOT
- \p{Block=Sundanese}) (55)
+ \p{Block=Sundanese}) (72)
+ X \p{Sundanese_Sup} \p{Sundanese_Supplement} (= \p{Block=
+ Sundanese_Supplement}) (16)
+ X \p{Sundanese_Supplement} \p{Block=Sundanese_Supplement} (Short:
+ \p{InSundaneseSup}) (16)
+ X \p{Sup_Arrows_A} \p{Supplemental_Arrows_A} (= \p{Block=
+ Supplemental_Arrows_A}) (16)
+ X \p{Sup_Arrows_B} \p{Supplemental_Arrows_B} (= \p{Block=
+ Supplemental_Arrows_B}) (128)
+ X \p{Sup_Math_Operators} \p{Supplemental_Mathematical_Operators} (=
+ \p{Block=
+ Supplemental_Mathematical_Operators})
+ (256)
+ X \p{Sup_PUA_A} \p{Supplementary_Private_Use_Area_A} (=
+ \p{Block=
+ Supplementary_Private_Use_Area_A})
+ (65_536)
+ X \p{Sup_PUA_B} \p{Supplementary_Private_Use_Area_B} (=
+ \p{Block=
+ Supplementary_Private_Use_Area_B})
+ (65_536)
+ X \p{Sup_Punctuation} \p{Supplemental_Punctuation} (= \p{Block=
+ Supplemental_Punctuation}) (128)
+ X \p{Super_And_Sub} \p{Superscripts_And_Subscripts} (=
+ \p{Block=Superscripts_And_Subscripts})
+ (48)
X \p{Superscripts_And_Subscripts} \p{Block=
- Superscripts_And_Subscripts} (48)
- X \p{Supplemental_Arrows_A} \p{Block=Supplemental_Arrows_A} (16)
- X \p{Supplemental_Arrows_B} \p{Block=Supplemental_Arrows_B} (128)
+ Superscripts_And_Subscripts} (Short:
+ \p{InSuperAndSub}) (48)
+ X \p{Supplemental_Arrows_A} \p{Block=Supplemental_Arrows_A} (Short:
+ \p{InSupArrowsA}) (16)
+ X \p{Supplemental_Arrows_B} \p{Block=Supplemental_Arrows_B} (Short:
+ \p{InSupArrowsB}) (128)
X \p{Supplemental_Mathematical_Operators} \p{Block=
Supplemental_Mathematical_Operators}
- (256)
+ (Short: \p{InSupMathOperators}) (256)
X \p{Supplemental_Punctuation} \p{Block=Supplemental_Punctuation}
- (128)
+ (Short: \p{InSupPunctuation}) (128)
X \p{Supplementary_Private_Use_Area_A} \p{Block=
Supplementary_Private_Use_Area_A}
- (65_536)
+ (Short: \p{InSupPUAA}) (65_536)
X \p{Supplementary_Private_Use_Area_B} \p{Block=
Supplementary_Private_Use_Area_B}
- (65_536)
+ (Short: \p{InSupPUAB}) (65_536)
\p{Surrogate} \p{General_Category=Surrogate} (Short:
\p{Cs}) (2048)
\p{Sylo} \p{Syloti_Nagri} (= \p{Script=
@@ -2770,7 +3538,7 @@ this property.
\p{Syloti_Nagri} \p{Script=Syloti_Nagri} (Short: \p{Sylo};
NOT \p{Block=Syloti_Nagri}) (44)
\p{Symbol} \p{General_Category=Symbol} (Short: \p{S})
- (5508)
+ (5519)
\p{Syrc} \p{Syriac} (= \p{Script=Syriac}) (NOT
\p{Block=Syriac}) (77)
\p{Syriac} \p{Script=Syriac} (Short: \p{Syrc}; NOT
@@ -2788,7 +3556,14 @@ this property.
\p{Block=Tai_Tham}) (127)
\p{Tai_Viet} \p{Script=Tai_Viet} (Short: \p{Tavt}; NOT
\p{Block=Tai_Viet}) (72)
- X \p{Tai_Xuan_Jing_Symbols} \p{Block=Tai_Xuan_Jing_Symbols} (96)
+ X \p{Tai_Xuan_Jing} \p{Tai_Xuan_Jing_Symbols} (= \p{Block=
+ Tai_Xuan_Jing_Symbols}) (96)
+ X \p{Tai_Xuan_Jing_Symbols} \p{Block=Tai_Xuan_Jing_Symbols} (Short:
+ \p{InTaiXuanJing}) (96)
+ \p{Takr} \p{Takri} (= \p{Script=Takri}) (NOT
+ \p{Block=Takri}) (66)
+ \p{Takri} \p{Script=Takri} (Short: \p{Takr}; NOT
+ \p{Block=Takri}) (66)
\p{Tale} \p{Tai_Le} (= \p{Script=Tai_Le}) (NOT
\p{Block=Tai_Le}) (35)
\p{Talu} \p{New_Tai_Lue} (= \p{Script=New_Tai_Lue})
@@ -2804,15 +3579,15 @@ this property.
\p{Telugu} \p{Script=Telugu} (Short: \p{Telu}; NOT
\p{Block=Telugu}) (93)
\p{Term} \p{Terminal_Punctuation} (=
- \p{Terminal_Punctuation=Y}) (169)
+ \p{Terminal_Punctuation=Y}) (176)
\p{Term: *} \p{Terminal_Punctuation: *}
\p{Terminal_Punctuation} \p{Terminal_Punctuation=Y} (Short:
- \p{Term}) (169)
+ \p{Term}) (176)
\p{Terminal_Punctuation: N*} (Short: \p{Term=N}, \P{Term})
- (1_113_943)
- \p{Terminal_Punctuation: Y*} (Short: \p{Term=Y}, \p{Term}) (169)
+ (1_113_936)
+ \p{Terminal_Punctuation: Y*} (Short: \p{Term=Y}, \p{Term}) (176)
\p{Tfng} \p{Tifinagh} (= \p{Script=Tifinagh}) (NOT
- \p{Block=Tifinagh}) (57)
+ \p{Block=Tifinagh}) (59)
\p{Tglg} \p{Tagalog} (= \p{Script=Tagalog}) (NOT
\p{Block=Tagalog}) (20)
\p{Thaa} \p{Thaana} (= \p{Script=Thaana}) (NOT
@@ -2825,80 +3600,100 @@ this property.
\p{Tibt} \p{Tibetan} (= \p{Script=Tibetan}) (NOT
\p{Block=Tibetan}) (207)
\p{Tifinagh} \p{Script=Tifinagh} (Short: \p{Tfng}; NOT
- \p{Block=Tifinagh}) (57)
- \p{Title} (/i= Cased=Yes) (31)
- \p{Titlecase} \p{Title} (/i= Cased=Yes) (31)
+ \p{Block=Tifinagh}) (59)
+ \p{Title} \p{Titlecase} (/i= Cased=Yes) (31)
+ \p{Titlecase} (= \p{Gc=Lt}) (Short: \p{Title}; /i=
+ Cased=Yes) (31)
\p{Titlecase_Letter} \p{General_Category=Titlecase_Letter}
(Short: \p{Lt}; /i= General_Category=
Cased_Letter) (31)
+ X \p{Transport_And_Map} \p{Transport_And_Map_Symbols} (= \p{Block=
+ Transport_And_Map_Symbols}) (128)
X \p{Transport_And_Map_Symbols} \p{Block=Transport_And_Map_Symbols}
- (128)
+ (Short: \p{InTransportAndMap}) (128)
+ X \p{UCAS} \p{Unified_Canadian_Aboriginal_Syllabics}
+ (= \p{Block=
+ Unified_Canadian_Aboriginal_Syllabics})
+ (640)
+ X \p{UCAS_Ext} \p{Unified_Canadian_Aboriginal_Syllabics_-
+ Extended} (= \p{Block=
+ Unified_Canadian_Aboriginal_Syllabics_-
+ Extended}) (80)
\p{Ugar} \p{Ugaritic} (= \p{Script=Ugaritic}) (NOT
\p{Block=Ugaritic}) (31)
\p{Ugaritic} \p{Script=Ugaritic} (Short: \p{Ugar}; NOT
\p{Block=Ugaritic}) (31)
\p{UIdeo} \p{Unified_Ideograph} (=
- \p{Unified_Ideograph=Y}) (74_616)
+ \p{Unified_Ideograph=Y}) (74_617)
\p{UIdeo: *} \p{Unified_Ideograph: *}
\p{Unassigned} \p{General_Category=Unassigned} (Short:
- \p{Cn}) (865_147)
+ \p{Cn}) (864_415)
X \p{Unified_Canadian_Aboriginal_Syllabics} \p{Block=
Unified_Canadian_Aboriginal_Syllabics}
- (Short: \p{InCanadianSyllabics}) (640)
+ (Short: \p{InUCAS}) (640)
X \p{Unified_Canadian_Aboriginal_Syllabics_Extended} \p{Block=
Unified_Canadian_Aboriginal_Syllabics_-
- Extended} (80)
+ Extended} (Short: \p{InUCASExt}) (80)
\p{Unified_Ideograph} \p{Unified_Ideograph=Y} (Short: \p{UIdeo})
- (74_616)
+ (74_617)
\p{Unified_Ideograph: N*} (Short: \p{UIdeo=N}, \P{UIdeo})
- (1_039_496)
- \p{Unified_Ideograph: Y*} (Short: \p{UIdeo=Y}, \p{UIdeo}) (74_616)
+ (1_039_495)
+ \p{Unified_Ideograph: Y*} (Short: \p{UIdeo=Y}, \p{UIdeo}) (74_617)
\p{Unknown} \p{Script=Unknown} (Short: \p{Zzzz})
- (1_004_663)
- \p{Upper} \p{Uppercase=Y} (/i= Cased=Yes) (1478)
+ (1_003_931)
+ \p{Upper} \p{Uppercase=Y} (/i= Cased=Yes) (1483)
\p{Upper: *} \p{Uppercase: *}
\p{Uppercase} \p{Upper} (= \p{Uppercase=Y}) (/i= Cased=
- Yes) (1478)
+ Yes) (1483)
\p{Uppercase: N*} (Short: \p{Upper=N}, \P{Upper}; /i= Cased=
- No) (1_112_634)
+ No) (1_112_629)
\p{Uppercase: Y*} (Short: \p{Upper=Y}, \p{Upper}; /i= Cased=
- Yes) (1478)
+ Yes) (1483)
\p{Uppercase_Letter} \p{General_Category=Uppercase_Letter}
(Short: \p{Lu}; /i= General_Category=
- Cased_Letter) (1436)
+ Cased_Letter) (1441)
\p{Vai} \p{Script=Vai} (NOT \p{Block=Vai}) (300)
\p{Vaii} \p{Vai} (= \p{Script=Vai}) (NOT \p{Block=
Vai}) (300)
- \p{Variation_Selector} \p{Variation_Selector=Y} (Short: \p{VS})
- (259)
+ \p{Variation_Selector} \p{Variation_Selector=Y} (Short: \p{VS};
+ NOT \p{Variation_Selectors}) (259)
\p{Variation_Selector: N*} (Short: \p{VS=N}, \P{VS}) (1_113_853)
\p{Variation_Selector: Y*} (Short: \p{VS=Y}, \p{VS}) (259)
- X \p{Variation_Selectors} \p{Block=Variation_Selectors} (16)
+ X \p{Variation_Selectors} \p{Block=Variation_Selectors} (Short:
+ \p{InVS}) (16)
X \p{Variation_Selectors_Supplement} \p{Block=
- Variation_Selectors_Supplement} (240)
- X \p{Vedic_Extensions} \p{Block=Vedic_Extensions} (48)
+ Variation_Selectors_Supplement} (Short:
+ \p{InVSSup}) (240)
+ X \p{Vedic_Ext} \p{Vedic_Extensions} (= \p{Block=
+ Vedic_Extensions}) (48)
+ X \p{Vedic_Extensions} \p{Block=Vedic_Extensions} (Short:
+ \p{InVedicExt}) (48)
X \p{Vertical_Forms} \p{Block=Vertical_Forms} (16)
\p{VertSpace} \v (7)
\p{VS} \p{Variation_Selector} (=
- \p{Variation_Selector=Y}) (259)
+ \p{Variation_Selector=Y}) (NOT
+ \p{Variation_Selectors}) (259)
\p{VS: *} \p{Variation_Selector: *}
+ X \p{VS_Sup} \p{Variation_Selectors_Supplement} (=
+ \p{Block=
+ Variation_Selectors_Supplement}) (240)
\p{WB: *} \p{Word_Break: *}
\p{White_Space} \p{White_Space=Y} (Short: \p{WSpace}) (26)
\p{White_Space: N*} (Short: \p{Space=N}, \P{WSpace})
(1_114_086)
\p{White_Space: Y*} (Short: \p{Space=Y}, \p{WSpace}) (26)
\p{Word} \w, including beyond ASCII; = \p{Alnum} +
- \pM + \p{Pc} (102_724)
- \p{Word_Break: ALetter} (Short: \p{WB=LE}) (24_453)
+ \pM + \p{Pc} (103_404)
+ \p{Word_Break: ALetter} (Short: \p{WB=LE}) (24_941)
\p{Word_Break: CR} (Short: \p{WB=CR}) (1)
\p{Word_Break: EX} \p{Word_Break=ExtendNumLet} (10)
- \p{Word_Break: Extend} (Short: \p{WB=Extend}) (1502)
+ \p{Word_Break: Extend} (Short: \p{WB=Extend}) (1649)
\p{Word_Break: ExtendNumLet} (Short: \p{WB=EX}) (10)
- \p{Word_Break: FO} \p{Word_Break=Format} (137)
- \p{Word_Break: Format} (Short: \p{WB=FO}) (137)
+ \p{Word_Break: FO} \p{Word_Break=Format} (136)
+ \p{Word_Break: Format} (Short: \p{WB=FO}) (136)
\p{Word_Break: KA} \p{Word_Break=Katakana} (310)
\p{Word_Break: Katakana} (Short: \p{WB=KA}) (310)
- \p{Word_Break: LE} \p{Word_Break=ALetter} (24_453)
+ \p{Word_Break: LE} \p{Word_Break=ALetter} (24_941)
\p{Word_Break: LF} (Short: \p{WB=LF}) (1)
\p{Word_Break: MB} \p{Word_Break=MidNumLet} (8)
\p{Word_Break: MidLetter} (Short: \p{WB=ML}) (8)
@@ -2908,45 +3703,45 @@ this property.
\p{Word_Break: MN} \p{Word_Break=MidNum} (15)
\p{Word_Break: Newline} (Short: \p{WB=NL}) (5)
\p{Word_Break: NL} \p{Word_Break=Newline} (5)
- \p{Word_Break: NU} \p{Word_Break=Numeric} (411)
- \p{Word_Break: Numeric} (Short: \p{WB=NU}) (411)
- \p{Word_Break: Other} (Short: \p{WB=XX}) (1_087_251)
- \p{Word_Break: XX} \p{Word_Break=Other} (1_087_251)
+ \p{Word_Break: NU} \p{Word_Break=Numeric} (451)
+ \p{Word_Break: Numeric} (Short: \p{WB=NU}) (451)
+ \p{Word_Break: Other} (Short: \p{WB=XX}) (1_086_577)
+ \p{Word_Break: XX} \p{Word_Break=Other} (1_086_577)
\p{WSpace} \p{White_Space} (= \p{White_Space=Y}) (26)
\p{WSpace: *} \p{White_Space: *}
\p{XDigit} \p{Hex_Digit=Y} (Short: \p{Hex}) (44)
\p{XID_Continue} \p{XID_Continue=Y} (Short: \p{XIDC})
- (102_656)
- \p{XID_Continue: N*} (Short: \p{XIDC=N}, \P{XIDC}) (1_011_456)
- \p{XID_Continue: Y*} (Short: \p{XIDC=Y}, \p{XIDC}) (102_656)
- \p{XID_Start} \p{XID_Start=Y} (Short: \p{XIDS}) (100_724)
- \p{XID_Start: N*} (Short: \p{XIDS=N}, \P{XIDS}) (1_013_388)
- \p{XID_Start: Y*} (Short: \p{XIDS=Y}, \p{XIDS}) (100_724)
+ (103_336)
+ \p{XID_Continue: N*} (Short: \p{XIDC=N}, \P{XIDC}) (1_010_776)
+ \p{XID_Continue: Y*} (Short: \p{XIDC=Y}, \p{XIDC}) (103_336)
+ \p{XID_Start} \p{XID_Start=Y} (Short: \p{XIDS}) (101_217)
+ \p{XID_Start: N*} (Short: \p{XIDS=N}, \P{XIDS}) (1_012_895)
+ \p{XID_Start: Y*} (Short: \p{XIDS=Y}, \p{XIDS}) (101_217)
\p{XIDC} \p{XID_Continue} (= \p{XID_Continue=Y})
- (102_656)
+ (103_336)
\p{XIDC: *} \p{XID_Continue: *}
- \p{XIDS} \p{XID_Start} (= \p{XID_Start=Y}) (100_724)
+ \p{XIDS} \p{XID_Start} (= \p{XID_Start=Y}) (101_217)
\p{XIDS: *} \p{XID_Start: *}
\p{Xpeo} \p{Old_Persian} (= \p{Script=Old_Persian})
(NOT \p{Block=Old_Persian}) (50)
\p{XPerlSpace} \s, including beyond ASCII (Short:
\p{SpacePerl}) (25)
- \p{XPosixAlnum} \p{Alnum} (101_959)
- \p{XPosixAlpha} \p{Alpha} (= \p{Alphabetic=Y}) (101_539)
+ \p{XPosixAlnum} \p{Alnum} (102_619)
+ \p{XPosixAlpha} \p{Alpha} (= \p{Alphabetic=Y}) (102_159)
\p{XPosixBlank} \p{Blank} (19)
\p{XPosixCntrl} \p{Cntrl} (= \p{General_Category=Control})
(65)
\p{XPosixDigit} \p{Digit} (= \p{General_Category=
- Decimal_Number}) (420)
- \p{XPosixGraph} \p{Graph} (246_832)
+ Decimal_Number}) (460)
+ \p{XPosixGraph} \p{Graph} (247_564)
\p{XPosixLower} \p{Lower} (= \p{Lowercase=Y}) (/i= Cased=
- Yes) (1918)
- \p{XPosixPrint} \p{Print} (246_850)
- \p{XPosixPunct} \p{Punct} + ASCII-range \p{Symbol} (607)
+ Yes) (1934)
+ \p{XPosixPrint} \p{Print} (247_582)
+ \p{XPosixPunct} \p{Punct} + ASCII-range \p{Symbol} (641)
\p{XPosixSpace} \p{Space} (= \p{White_Space=Y}) (26)
\p{XPosixUpper} \p{Upper} (= \p{Uppercase=Y}) (/i= Cased=
- Yes) (1478)
- \p{XPosixWord} \p{Word} (102_724)
+ Yes) (1483)
+ \p{XPosixWord} \p{Word} (103_404)
\p{XPosixXDigit} \p{XDigit} (= \p{Hex_Digit=Y}) (44)
\p{Xsux} \p{Cuneiform} (= \p{Script=Cuneiform})
(NOT \p{Block=Cuneiform}) (982)
@@ -2954,11 +3749,14 @@ this property.
X \p{Yi_Radicals} \p{Block=Yi_Radicals} (64)
X \p{Yi_Syllables} \p{Block=Yi_Syllables} (1168)
\p{Yiii} \p{Yi} (= \p{Script=Yi}) (1220)
- X \p{Yijing_Hexagram_Symbols} \p{Block=Yijing_Hexagram_Symbols} (64)
+ X \p{Yijing} \p{Yijing_Hexagram_Symbols} (= \p{Block=
+ Yijing_Hexagram_Symbols}) (64)
+ X \p{Yijing_Hexagram_Symbols} \p{Block=Yijing_Hexagram_Symbols}
+ (Short: \p{InYijing}) (64)
\p{Z} \p{Separator} (= \p{General_Category=
Separator}) (20)
\p{Zinh} \p{Inherited} (= \p{Script=Inherited})
- (523)
+ (524)
\p{Zl} \p{Line_Separator} (= \p{General_Category=
Line_Separator}) (1)
\p{Zp} \p{Paragraph_Separator} (=
@@ -2967,69 +3765,352 @@ this property.
\p{Zs} \p{Space_Separator} (=
\p{General_Category=Space_Separator})
(18)
- \p{Zyyy} \p{Common} (= \p{Script=Common}) (6379)
+ \p{Zyyy} \p{Common} (= \p{Script=Common}) (6412)
\p{Zzzz} \p{Unknown} (= \p{Script=Unknown})
- (1_004_663)
- T \p{_CanonDCIJ} (For internal use by Perl, not necessarily
+ (1_003_931)
+ TX\p{_CanonDCIJ} (For internal use by Perl, not necessarily
stable) (= \p{Soft_Dotted=Y}) (46)
- T \p{_Case_Ignorable} (For internal use by Perl, not necessarily
- stable) (= \p{Case_Ignorable=Y}) (1692)
- T \p{_CombAbove} (For internal use by Perl, not necessarily
+ TX\p{_Case_Ignorable} (For internal use by Perl, not necessarily
+ stable) (= \p{Case_Ignorable=Y}) (1799)
+ TX\p{_CombAbove} (For internal use by Perl, not necessarily
stable) (= \p{Canonical_Combining_Class=
- Above}) (320)
- T \p{_X_Begin} (For internal use by Perl, not necessarily
- stable) (1_113_907)
- T \p{_X_Extend} (For internal use by Perl, not necessarily
- stable) (1509)
- T \p{_X_LV_LVT_V} (For internal use by Perl, not necessarily
- stable) (11_267)
+ Above}) (349)
-=head2 Legal \p{} and \P{} constructs that match no characters
+=head2 Legal C<\p{}> and C<\P{}> constructs that match no characters
Unicode has some property-value pairs that currently don't match anything.
-This happens generally either because they are obsolete, or for symmetry with
-other forms, but no language has yet been encoded that uses them. In this
-version of Unicode, the following match zero code points:
+This happens generally either because they are obsolete, or they exist for
+symmetry with other forms, but no language has yet been encoded that uses
+them. In this version of Unicode, the following match zero code points:
=over 4
=item \p{Canonical_Combining_Class=Attached_Below_Left}
+=item \p{Grapheme_Cluster_Break=Prepend}
+
=item \p{Joining_Type=Left_Joining}
=back
-=head1 Properties not accessible through \p{} and \P{}
-
-A few properties are accessible in Perl via various function calls only.
-These are:
+=head1 Properties accessible through Unicode::UCD
+
+All the Unicode character properties mentioned above (except for those marked
+as for internal use by Perl) are also accessible by
+L<Unicode::UCD/prop_invlist()>.
+
+Due to their nature, not all Unicode character properties are suitable for
+regular expression matches, nor C<prop_invlist()>. The remaining
+non-provisional, non-internal ones are accessible via
+L<Unicode::UCD/prop_invmap()> (except for those that this Perl installation
+hasn't included; see L<below for which those are|/Unicode character properties
+that are NOT accepted by Perl>).
+
+For compatibility with other parts of Perl, all the single forms given in the
+table in the L<section above|/Properties accessible through \p{} and \P{}>
+are recognized. BUT, there are some ambiguities between some Perl extensions
+and the Unicode properties, all of which are silently resolved in favor of the
+official Unicode property. To avoid surprises, you should only use
+C<prop_invmap()> for forms listed in the table below, which omits the
+non-recommended ones. The affected forms are the Perl single form equivalents
+of Unicode properties, such as C<\p{sc}> being a single-form equivalent of
+C<\p{gc=sc}>, which is treated by C<prop_invmap()> as the C<Script> property,
+whose short name is C<sc>. The table indicates the current ambiguities in the
+INFO column, beginning with the word C<"NOT">.
+
+The standard Unicode properties listed below are documented in
+L<http://www.unicode.org/reports/tr44/>; Perl_Decimal_Digit is documented in
+L<Unicode::UCD/prop_invmap()>. The other Perl extensions are in
+L<perlunicode/Other Properties>;
+
+The first column in the table is a name for the property; the second column is
+an alternative name, if any, plus possibly some annotations. The alternative
+name is the property's full name, unless that would simply repeat the first
+column, in which case the second column indicates the property's short name
+(if different). The annotations are given only in the entry for the full
+name. If a property is obsolete, etc, the entry will be flagged with the same
+characters used in the table in the L<section above|/Properties accessible
+through \p{} and \P{}>, like B<D> or B<S>.
+
+ NAME INFO
+
+ Age
+ AHex ASCII_Hex_Digit
+ All Any. (Perl extension)
+ Alnum (Perl extension). Alphabetic and
+ (decimal) Numeric
+ Alpha Alphabetic
+ Alphabetic (Short: Alpha)
+ Any (Perl extension). [\x{0000}-\x{10FFFF}]
+ ASCII Block=ASCII. (Perl extension).
+ [[:ASCII:]]
+ ASCII_Hex_Digit (Short: AHex)
+ Assigned (Perl extension). All assigned code points
+ Bc Bidi_Class
+ Bidi_C Bidi_Control
+ Bidi_Class (Short: bc)
+ Bidi_Control (Short: Bidi_C)
+ Bidi_M Bidi_Mirrored
+ Bidi_Mirrored (Short: Bidi_M)
+ Bidi_Mirroring_Glyph (Short: bmg)
+ Blank (Perl extension). \h, Horizontal white
+ space
+ Blk Block
+ Block (Short: blk)
+ Bmg Bidi_Mirroring_Glyph
+ Canonical_Combining_Class (Short: ccc)
+ Case_Folding (Short: cf)
+ Case_Ignorable (Short: CI)
+ Cased
+ Category General_Category
+ Ccc Canonical_Combining_Class
+ CE Composition_Exclusion
+ Cf Case_Folding; NOT 'cf' meaning
+ 'General_Category=Format'
+ Changes_When_Casefolded (Short: CWCF)
+ Changes_When_Casemapped (Short: CWCM)
+ Changes_When_Lowercased (Short: CWL)
+ Changes_When_NFKC_Casefolded (Short: CWKCF)
+ Changes_When_Titlecased (Short: CWT)
+ Changes_When_Uppercased (Short: CWU)
+ CI Case_Ignorable
+ Cntrl General_Category=Cntrl. (Perl extension).
+ Control characters
+ Comp_Ex Full_Composition_Exclusion
+ Composition_Exclusion (Short: CE)
+ CWCF Changes_When_Casefolded
+ CWCM Changes_When_Casemapped
+ CWKCF Changes_When_NFKC_Casefolded
+ CWL Changes_When_Lowercased
+ CWT Changes_When_Titlecased
+ CWU Changes_When_Uppercased
+ Dash
+ Decomposition_Mapping (Short: dm)
+ Decomposition_Type (Short: dt)
+ Default_Ignorable_Code_Point (Short: DI)
+ Dep Deprecated
+ Deprecated (Short: Dep)
+ DI Default_Ignorable_Code_Point
+ Dia Diacritic
+ Diacritic (Short: Dia)
+ Digit General_Category=Digit. (Perl extension).
+ [0-9] + all other decimal digits
+ Dm Decomposition_Mapping
+ Dt Decomposition_Type
+ Ea East_Asian_Width
+ East_Asian_Width (Short: ea)
+ Ext Extender
+ Extender (Short: Ext)
+ Full_Composition_Exclusion (Short: Comp_Ex)
+ Gc General_Category
+ GCB Grapheme_Cluster_Break
+ General_Category (Short: gc)
+ Gr_Base Grapheme_Base
+ Gr_Ext Grapheme_Extend
+ Graph (Perl extension). Characters that are
+ graphical
+ Grapheme_Base (Short: Gr_Base)
+ Grapheme_Cluster_Break (Short: GCB)
+ Grapheme_Extend (Short: Gr_Ext)
+ Hangul_Syllable_Type (Short: hst)
+ Hex Hex_Digit
+ Hex_Digit (Short: Hex)
+ HorizSpace Blank. (Perl extension)
+ Hst Hangul_Syllable_Type
+ D Hyphen Supplanted by Line_Break property values;
+ see www.unicode.org/reports/tr14
+ ID_Continue (Short: IDC)
+ ID_Start (Short: IDS)
+ IDC ID_Continue
+ Ideo Ideographic
+ Ideographic (Short: Ideo)
+ IDS ID_Start
+ IDS_Binary_Operator (Short: IDSB)
+ IDS_Trinary_Operator (Short: IDST)
+ IDSB IDS_Binary_Operator
+ IDST IDS_Trinary_Operator
+ In Present_In. (Perl extension)
+ Isc ISO_Comment; NOT 'isc' meaning
+ 'General_Category=Other'
+ ISO_Comment (Short: isc)
+ Jg Joining_Group
+ Join_C Join_Control
+ Join_Control (Short: Join_C)
+ Joining_Group (Short: jg)
+ Joining_Type (Short: jt)
+ Jt Joining_Type
+ Lb Line_Break
+ Lc Lowercase_Mapping; NOT 'lc' meaning
+ 'General_Category=Cased_Letter'
+ Line_Break (Short: lb)
+ LOE Logical_Order_Exception
+ Logical_Order_Exception (Short: LOE)
+ Lower Lowercase
+ Lowercase (Short: Lower)
+ Lowercase_Mapping (Short: lc)
+ Math
+ Na Name
+ Na1 Unicode_1_Name
+ Name (Short: na)
+ Name_Alias
+ NChar Noncharacter_Code_Point
+ NFC_QC NFC_Quick_Check
+ NFC_Quick_Check (Short: NFC_QC)
+ NFD_QC NFD_Quick_Check
+ NFD_Quick_Check (Short: NFD_QC)
+ NFKC_Casefold (Short: NFKC_CF)
+ NFKC_CF NFKC_Casefold
+ NFKC_QC NFKC_Quick_Check
+ NFKC_Quick_Check (Short: NFKC_QC)
+ NFKD_QC NFKD_Quick_Check
+ NFKD_Quick_Check (Short: NFKD_QC)
+ Noncharacter_Code_Point (Short: NChar)
+ Nt Numeric_Type
+ Numeric_Type (Short: nt)
+ Numeric_Value (Short: nv)
+ Nv Numeric_Value
+ Pat_Syn Pattern_Syntax
+ Pat_WS Pattern_White_Space
+ Pattern_Syntax (Short: Pat_Syn)
+ Pattern_White_Space (Short: Pat_WS)
+ Perl_Decimal_Digit (Perl extension)
+ PerlSpace (Perl extension). \s, restricted to ASCII
+ = [ \f\n\r\t]
+ PerlWord (Perl extension). \w, restricted to ASCII
+ = [A-Za-z0-9_]
+ PosixAlnum (Perl extension). [A-Za-z0-9]
+ PosixAlpha (Perl extension). [A-Za-z]
+ PosixBlank (Perl extension). \t and ' '
+ PosixCntrl (Perl extension). ASCII control
+ characters: NUL, SOH, STX, ETX, EOT, ENQ,
+ ACK, BEL, BS, HT, LF, VT, FF, CR, SO, SI,
+ DLE, DC1, DC2, DC3, DC4, NAK, SYN, ETB,
+ CAN, EOM, SUB, ESC, FS, GS, RS, US, and DEL
+ PosixDigit (Perl extension). [0-9]
+ PosixGraph (Perl extension). [-
+ !"#$%&'()*+,./:;<>?@[\\]^_`{|}~0-9A-Za-z]
+ PosixLower (Perl extension). [a-z]
+ PosixPrint (Perl extension). [- 0-9A-Za-
+ z!"#$%&'()*+,./:;<>?@[\\]^_`{|}~]
+ PosixPunct (Perl extension). [-
+ !"#$%&'()*+,./:;<>?@[\\]^_`{|}~]
+ PosixSpace (Perl extension). \t, \n, \cK, \f, \r,
+ and ' '. (\cK is vertical tab)
+ PosixUpper (Perl extension). [A-Z]
+ PosixWord PerlWord. (Perl extension)
+ PosixXDigit (Perl extension). [0-9A-Fa-f]
+ Present_In (Short: In). (Perl extension)
+ Print (Perl extension). Characters that are
+ graphical plus space characters (but no
+ controls)
+ Punct General_Category=Punct. (Perl extension)
+ QMark Quotation_Mark
+ Quotation_Mark (Short: QMark)
+ Radical
+ SB Sentence_Break
+ Sc Script; NOT 'sc' meaning
+ 'General_Category=Currency_Symbol'
+ Scf Simple_Case_Folding
+ Script (Short: sc)
+ Script_Extensions (Short: scx)
+ Scx Script_Extensions
+ SD Soft_Dotted
+ Sentence_Break (Short: SB)
+ Sfc Simple_Case_Folding
+ Simple_Case_Folding (Short: scf)
+ Simple_Lowercase_Mapping (Short: slc)
+ Simple_Titlecase_Mapping (Short: stc)
+ Simple_Uppercase_Mapping (Short: suc)
+ Slc Simple_Lowercase_Mapping
+ Soft_Dotted (Short: SD)
+ Space White_Space
+ SpacePerl XPerlSpace. (Perl extension)
+ Stc Simple_Titlecase_Mapping
+ STerm
+ Suc Simple_Uppercase_Mapping
+ Tc Titlecase_Mapping
+ Term Terminal_Punctuation
+ Terminal_Punctuation (Short: Term)
+ Title Titlecase. (Perl extension)
+ Titlecase (Short: Title). (Perl extension). (=
+ \p{Gc=Lt})
+ Titlecase_Mapping (Short: tc)
+ Uc Uppercase_Mapping
+ UIdeo Unified_Ideograph
+ Unicode_1_Name (Short: na1)
+ Unified_Ideograph (Short: UIdeo)
+ Upper Uppercase
+ Uppercase (Short: Upper)
+ Uppercase_Mapping (Short: uc)
+ Variation_Selector (Short: VS)
+ VertSpace (Perl extension). \v
+ VS Variation_Selector
+ WB Word_Break
+ White_Space (Short: WSpace)
+ Word (Perl extension). \w, including beyond
+ ASCII; = \p{Alnum} + \pM + \p{Pc}
+ Word_Break (Short: WB)
+ WSpace White_Space
+ XDigit (Perl extension)
+ XID_Continue (Short: XIDC)
+ XID_Start (Short: XIDS)
+ XIDC XID_Continue
+ XIDS XID_Start
+ XPerlSpace (Perl extension). \s, including beyond
+ ASCII
+ XPosixAlnum Alnum. (Perl extension)
+ XPosixAlpha Alpha. (Perl extension)
+ XPosixBlank Blank. (Perl extension)
+ XPosixCntrl General_Category=Cntrl. (Perl extension)
+ XPosixDigit General_Category=Digit. (Perl extension)
+ XPosixGraph Graph. (Perl extension)
+ XPosixLower Lower. (Perl extension)
+ XPosixPrint Print. (Perl extension)
+ XPosixPunct (Perl extension). \p{Punct} + ASCII-range
+ \p{Symbol}
+ XPosixSpace Space. (Perl extension)
+ XPosixUpper Upper. (Perl extension)
+ XPosixWord Word. (Perl extension)
+ XPosixXDigit XDigit. (Perl extension)
+
+
+=head1 Properties accessible through other means
+
+Certain properties are accessible also via core function calls. These are:
Lowercase_Mapping lc() and lcfirst()
Titlecase_Mapping ucfirst()
Uppercase_Mapping uc()
-Case_Folding is accessible through the /i modifier in regular expressions.
+Also, Case_Folding is accessible through the C</i> modifier in regular
+expressions, the C<\F> transliteration escape, and the C<L<fc|perlfunc/fc>>
+operator.
+
+And, the Name and Name_Aliases properties are accessible through the C<\N{}>
+interpolation in double-quoted strings and regular expressions; and functions
+C<charnames::viacode()>, C<charnames::vianame()>, and
+C<charnames::string_vianame()> (which require a C<use charnames ();> to be
+specified.
-The Name property is accessible through the \N{} interpolation in
-double-quoted strings and regular expressions, but both usages require a C<use
-charnames;> to be specified, which also contains related functions viacode(),
-vianame(), and string_vianame().
+Finally, most properties related to decomposition are accessible via
+L<Unicode::Normalize>.
-=head1 Unicode regular expression properties that are NOT accepted by Perl
+=head1 Unicode character properties that are NOT accepted by Perl
Perl will generate an error for a few character properties in Unicode when
used in a regular expression. The non-Unihan ones are listed below, with the
reasons they are not accepted, perhaps with work-arounds. The short names for
the properties are listed enclosed in (parentheses).
-
-=over 4
-
+As described after the list, an installation can change the defaults and choose
+to accept any of these. The list is machine generated based on the
+choices made for the installation that generated this document.
+=over 4
@@ -3045,35 +4126,55 @@ Deprecated by Unicode. These are characters that expand to more than one charac
-
-
=item I<Grapheme_Link> (Gr_Link)
Deprecated by Unicode: Duplicates ccc=vr (Canonical_Combining_Class=Virama)
+=item I<Indic_Matra_Category> (InMC)
+
+=item I<Indic_Syllabic_Category> (InSC)
+
+Provisional
+
=item I<Jamo_Short_Name> (JSN)
-Used by Unicode internally for generating other properties and not intended to be used stand-alone
+=item I<Other_Alphabetic> (OAlpha)
+=item I<Other_Default_Ignorable_Code_Point> (ODI)
+=item I<Other_Grapheme_Extend> (OGr_Ext)
+=item I<Other_ID_Continue> (OIDC)
+=item I<Other_ID_Start> (OIDS)
-=item I<Script=Katakana_Or_Hiragana> (sc=Hrkt)
+=item I<Other_Lowercase> (OLower)
-Obsolete. All code points previously matched by this have been moved to "Script=Common"
+=item I<Other_Math> (OMath)
+=item I<Other_Uppercase> (OUpper)
+Used by Unicode internally for generating other properties and not intended to be used stand-alone
+
+
+
+=item I<Script=Katakana_Or_Hiragana> (sc=Hrkt)
+
+Obsolete. All code points previously matched by this have been moved to "Script=Common". Consider instead using "Script_Extensions=Katakana" or "Script_Extensions=Hiragana (or both)"
+=item I<Script_Extensions=Katakana_Or_Hiragana> (scx=Hrkt)
+
+All code points that would be matched by this are matched by either "Script_Extensions=Katakana" or "Script_Extensions=Hiragana"
=back
+
An installation can choose to allow any of these to be matched by downloading
the Unicode database from L<http://www.unicode.org/Public/> to
C<$Config{privlib}>/F<unicore/> in the Perl source tree, changing the
@@ -3081,64 +4182,119 @@ controlling lists contained in the program
C<$Config{privlib}>/F<unicore/mktables> and then re-compiling and installing.
(C<%Config> is available from the Config module).
-=head1 Files in the I<To> directory (for serious hackers only)
+=head1 Other information in the Unicode data base
+
+The Unicode data base is delivered in two different formats. The XML version
+is valid for more modern Unicode releases. The other version is a collection
+of files. The two are intended to give equivalent information. Perl uses the
+older form; this allows you to recompile Perl to use early Unicode releases.
+
+The only non-character property that Perl currently supports is Named
+Sequences, in which a sequence of code points
+is given a name and generally treated as a single entity. (Perl supports
+these via the C<\N{...}> double-quotish construct,
+L<charnames/charnames::string_vianame(name)>, and L<Unicode::UCD/namedseq()>.
+
+Below is a list of the files in the Unicode data base that Perl doesn't
+currently use, along with very brief descriptions of their purposes.
+Some of the names of the files have been shortened from those that Unicode
+uses, in order to allow them to be distinguishable from similarly named files
+on file systems for which only the first 8 characters of a name are
+significant.
+
+=over 4
+
+
+
+
+=item F<auxiliary/GraphemeBreakTest.html>
+
+=item F<auxiliary/LineBreakTest.html>
+
+=item F<auxiliary/SentenceBreakTest.html>
+
+=item F<auxiliary/WordBreakTest.html>
+
+Documentation of validation tests
+
+
+
+=item F<auxiliary\LBTest.txt>
+
+=item F<auxiliary\SBTest.txt>
+
+=item F<auxiliary\WBTest.txt>
+
+=item F<BidiTest.txt>
+
+=item F<NormalizationTest.txt>
+
+Validation Tests
+
-All Unicode properties are really mappings (in the mathematical sense) from
-code points to their respective values. As part of its build process,
-Perl constructs tables containing these mappings for all properties that it
-deals with. Some, but not all, of these are written out into files.
-Those written out are in the directory C<$Config{privlib}>/F<unicore/To/>
-(%Config is available from the Config module).
-Perl reserves the right to change the format and even the existence of any of
-those files without notice, except the ones that were in existence prior to
-release 5.13. If those change, a deprecation cycle will be done first. These
-are:
+=item F<CJKRadicals.txt>
- Bmg.pl Bidi_Mirroring_Glyph (bmg)
- Digit.pl Perl_Decimal_Digit
- Fold.pl Case_Folding (cf)
- Lower.pl Lowercase_Mapping (lc)
- NFKCCF.pl NFKC_Casefold (NFKC_CF)
- Title.pl Titlecase_Mapping (tc)
- Upper.pl Uppercase_Mapping (uc)
+Maps the kRSUnicode property values to corresponding code points
-Each of the files in this directory defines two hash entries to help reading
-programs decipher it. One of them looks like this:
- $utf8::SwashInfo{'ToNAME'}{'format'} = 's';
+=item F<EmojiSources.txt>
-where 'NAME' is a name to indicate the property. For backwards compatibility,
-this is not necessarily the property's official Unicode name. (The 'To' is
-also for backwards compatibility.) The hash entry gives the format of the
-mapping fields of the table, currently one of the following:
+Maps certain Unicode code points to their legacy Japanese cell-phone values
- b binary
- c Perl's internal (Normalize.pm) decomposition mapping
- d single decimal digit
- f floating point number
- i integer
- r rational: an integer or a fraction
- s string
- x positive hex whole number; a code point
-This format applies only to the entries in the main body of the table.
-Entries defined in hashes or ones that are missing from the list can have a
-different format.
+=item F<Index.txt>
-The value that the missing entries have is given by the other SwashInfo hash
-entry line; it looks like this:
+Alphabetical index of Unicode characters
- $utf8::SwashInfo{'ToNAME'}{'missing'} = 'NaN';
-This example line says that any Unicode code points not explicitly listed in
-the file have the value 'NaN' under the property indicated by NAME. If the
-value is the special string C<< <code point> >>, it means that the value for
-any missing code point is the code point itself. This happens, for example,
-in the file for Uppercase_Mapping (To/Upper.pl), in which code points like the
-character 'A', are missing because the uppercase of 'A' is itself.
+
+=item F<IndicMatraCategory.txt>
+
+=item F<IndicSyllabicCategory.txt>
+
+Provisional; for the analysis and processing of Indic scripts
+
+
+
+=item F<NamedSqProv.txt>
+
+Named sequences proposed for inclusion in a later version of the Unicode Standard; if you need them now, you can append this file to F<NamedSequences.txt> and recompile perl
+
+
+
+=item F<NamesList.txt>
+
+Annotated list of characters
+
+
+
+=item F<NormalizationCorrections.txt>
+
+Documentation of corrections already incorporated into the Unicode data base
+
+
+
+=item F<Props.txt>
+
+Only in very early releases; is a subset of F<PropList.txt> (which is used instead)
+
+
+
+=item F<ReadMe.txt>
+
+Documentation
+
+
+
+=item F<StandardizedVariants.txt>
+
+Certain glyph variations for character display are standardized. This lists the non-Unihan ones; the Unihan ones are also not used by Perl, and are in a separate Unicode data base L<http://www.unicode.org/ivd>
+
+
+=back
=head1 SEE ALSO
diff --git a/Master/tlpkg/tlperl/lib/pods/perlutil.pod b/Master/tlpkg/tlperl/lib/pods/perlutil.pod
index 53ecb5986d3..040f51d5f65 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlutil.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlutil.pod
@@ -66,7 +66,7 @@ utility will look for errors in your markup.
F<splain> is an interface to L<perldiag> - paste in your error message
to it, and it'll explain it for you.
-=item L<roffitall|roffitall>
+=item C<roffitall>
The C<roffitall> utility is not installed on your system but lives in
the F<pod/> directory of your Perl source kit; it converts all the
@@ -164,7 +164,7 @@ itself or any of the standard library modules back to the developers;
please read through the documentation for F<perlbug> thoroughly before
using it to submit a bug report.
-=item L<perlthanks|perlthanks>
+=item L<perlthanks|perlbug>
This program provides an easy way to send a thank-you message back to the
authors and maintainers of perl. It's just F<perlbug> installed under
@@ -209,13 +209,6 @@ F<xsubpp> will compile XS code into C code by embedding the constructs
necessary to let C functions manipulate Perl values and creates the glue
necessary to let Perl access those functions.
-=item L<dprofpp|dprofpp>
-
-Perl comes with a profiler, the F<Devel::DProf> module. The
-F<dprofpp> utility analyzes the output of this profiler and tells you
-which subroutines are taking up the most run time. See L<Devel::DProf>
-for more information.
-
=item L<prove>
F<prove> is a command-line interface to the test-running functionality
@@ -263,6 +256,11 @@ in a tar archive.
This utility, that comes with the C<Digest::SHA> module, is used to print
or verify SHA checksums.
+=item L<zipdetails>
+
+L<zipdetails> displays information about the internal record structure of the zip file.
+It is not concerned with displaying any details of the compressed data stored in the zip file.
+
=back
=head2 Installation
@@ -304,11 +302,10 @@ validate your packlists and even create a tarball from an installed module.
L<perldoc|perldoc>, L<pod2man|pod2man>, L<perlpod>,
L<pod2html|pod2html>, L<pod2usage|pod2usage>, L<podselect|podselect>,
L<podchecker|podchecker>, L<splain|splain>, L<perldiag>,
-L<roffitall|roffitall>, L<a2p|a2p>, L<s2p|s2p>, L<find2perl|find2perl>,
+C<roffitall|roffitall>, L<a2p|a2p>, L<s2p|s2p>, L<find2perl|find2perl>,
L<File::Find|File::Find>, L<pl2pm|pl2pm>, L<perlbug|perlbug>,
-L<h2ph|h2ph>, L<c2ph|c2ph>, L<h2xs|h2xs>, L<dprofpp|dprofpp>,
-L<Devel::DProf>, L<enc2xs>, L<xsubpp>, L<cpan>, L<cpanp>, L<cpan2dist>,
-L<instmodsh>, L<piconv>, L<prove>, L<corelist>, L<ptar>, L<ptardiff>,
-L<shasum>
+L<h2ph|h2ph>, L<c2ph|c2ph>, L<h2xs|h2xs>, L<enc2xs>, L<xsubpp>,
+L<cpan>, L<cpanp>, L<cpan2dist>, L<instmodsh>, L<piconv>, L<prove>,
+L<corelist>, L<ptar>, L<ptardiff>, L<shasum>, L<zipdetails>
=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perlvar.pod b/Master/tlpkg/tlperl/lib/pods/perlvar.pod
index 39bab245bb3..c09aea52027 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlvar.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlvar.pod
@@ -6,46 +6,46 @@ perlvar - Perl predefined variables
=head2 The Syntax of Variable Names
-Variable names in Perl can have several formats. Usually, they
+Variable names in Perl can have several formats. Usually, they
must begin with a letter or underscore, in which case they can be
arbitrarily long (up to an internal limit of 251 characters) and
may contain letters, digits, underscores, or the special sequence
-C<::> or C<'>. In this case, the part before the last C<::> or
+C<::> or C<'>. In this case, the part before the last C<::> or
C<'> is taken to be a I<package qualifier>; see L<perlmod>.
Perl variable names may also be a sequence of digits or a single
-punctuation or control character. These names are all reserved for
+punctuation or control character. These names are all reserved for
special uses by Perl; for example, the all-digits names are used
to hold data captured by backreferences after a regular expression
-match. Perl has a special syntax for the single-control-character
+match. Perl has a special syntax for the single-control-character
names: It understands C<^X> (caret C<X>) to mean the control-C<X>
-character. For example, the notation C<$^W> (dollar-sign caret
+character. For example, the notation C<$^W> (dollar-sign caret
C<W>) is the scalar variable whose name is the single character
-control-C<W>. This is better than typing a literal control-C<W>
+control-C<W>. This is better than typing a literal control-C<W>
into your program.
Since Perl 5.6, Perl variable names may be alphanumeric
strings that begin with control characters (or better yet, a caret).
These variables must be written in the form C<${^Foo}>; the braces
-are not optional. C<${^Foo}> denotes the scalar variable whose
-name is a control-C<F> followed by two C<o>'s. These variables are
+are not optional. C<${^Foo}> denotes the scalar variable whose
+name is a control-C<F> followed by two C<o>'s. These variables are
reserved for future special uses by Perl, except for the ones that
-begin with C<^_> (control-underscore or caret-underscore). No
+begin with C<^_> (control-underscore or caret-underscore). No
control-character name that begins with C<^_> will acquire a special
meaning in any future version of Perl; such names may therefore be
-used safely in programs. C<$^_> itself, however, I<is> reserved.
+used safely in programs. C<$^_> itself, however, I<is> reserved.
Perl identifiers that begin with digits, control characters, or
punctuation characters are exempt from the effects of the C<package>
declaration and are always forced to be in package C<main>; they are
-also exempt from C<strict 'vars'> errors. A few other names are also
+also exempt from C<strict 'vars'> errors. A few other names are also
exempt in these ways:
- ENV STDIN
- INC STDOUT
- ARGV STDERR
- ARGVOUT
- SIG
+ ENV STDIN
+ INC STDOUT
+ ARGV STDERR
+ ARGVOUT
+ SIG
In particular, the special C<${^_XYZ}> variables are always taken
to be in package C<main>, regardless of any C<package> declarations
@@ -53,21 +53,21 @@ presently in scope.
=head1 SPECIAL VARIABLES
-The following names have special meaning to Perl. Most punctuation
+The following names have special meaning to Perl. Most punctuation
names have reasonable mnemonics, or analogs in the shells.
Nevertheless, if you wish to use long variable names, you need only say:
- use English;
+ use English;
-at the top of your program. This aliases all the short names to the long
-names in the current package. Some even have medium names, generally
-borrowed from B<awk>. To avoid a performance hit, if you don't need the
+at the top of your program. This aliases all the short names to the long
+names in the current package. Some even have medium names, generally
+borrowed from B<awk>. To avoid a performance hit, if you don't need the
C<$PREMATCH>, C<$MATCH>, or C<$POSTMATCH> it's best to use the C<English>
module without them:
- use English '-no_match_vars';
+ use English '-no_match_vars';
-Before you continue, note the sort order for variables. In general, we
+Before you continue, note the sort order for variables. In general, we
first list the variables in case-insensitive, almost-lexigraphical
order (ignoring the C<{> or C<^> preceding words, as in C<${^UNICODE}>
or C<$^T>), although C<$_> and C<@_> move up to the top of the pile.
@@ -83,20 +83,20 @@ array, hash, and bareword.
=item $_
X<$_> X<$ARG>
-The default input and pattern-searching space. The following pairs are
+The default input and pattern-searching space. The following pairs are
equivalent:
- while (<>) {...} # equivalent only in while!
- while (defined($_ = <>)) {...}
+ while (<>) {...} # equivalent only in while!
+ while (defined($_ = <>)) {...}
- /^Subject:/
- $_ =~ /^Subject:/
+ /^Subject:/
+ $_ =~ /^Subject:/
- tr/a-z/A-Z/
- $_ =~ tr/a-z/A-Z/
+ tr/a-z/A-Z/
+ $_ =~ tr/a-z/A-Z/
- chomp
- chomp($_)
+ chomp
+ chomp($_)
Here are the places where Perl will assume C<$_> even if you don't use it:
@@ -106,7 +106,8 @@ Here are the places where Perl will assume C<$_> even if you don't use it:
The following functions use C<$_> as a default argument:
-abs, alarm, chomp, chop, chr, chroot, cos, defined, eval, exp, glob,
+abs, alarm, chomp, chop, chr, chroot,
+cos, defined, eval, evalbytes, exp, glob,
hex, int, lc, lcfirst, length, log, lstat, mkdir, oct, ord, pos, print,
quotemeta, readlink, readpipe, ref, require, reverse (in scalar context only),
rmdir, sin, split (on its second argument), sqrt, stat, study, uc, ucfirst,
@@ -139,13 +140,13 @@ The implicit variable of C<given()>.
The default place to put an input record when a C<< <FH> >>
operation's result is tested by itself as the sole criterion of a C<while>
-test. Outside a C<while> test, this will not happen.
+test. Outside a C<while> test, this will not happen.
=back
As C<$_> is a global variable, this may lead in some cases to unwanted
-side-effects. As of perl 5.9.1, you can now use a lexical version of
-C<$_> by declaring it in a file or in a block with C<my>. Moreover,
+side-effects. As of perl 5.10, you can now use a lexical version of
+C<$_> by declaring it in a file or in a block with C<my>. Moreover,
declaring C<our $_> restores the global C<$_> in the current scope.
Mnemonic: underline is understood in certain operations.
@@ -156,7 +157,7 @@ Mnemonic: underline is understood in certain operations.
X<@_> X<@ARG>
Within a subroutine the array C<@_> contains the parameters passed to
-that subroutine. Inside a subroutine, C<@_> is the default array for
+that subroutine. Inside a subroutine, C<@_> is the default array for
the array operators C<push>, C<pop>, C<shift>, and C<unshift>.
See L<perlsub>.
@@ -168,13 +169,13 @@ X<$"> X<$LIST_SEPARATOR>
When an array or an array slice is interpolated into a double-quoted
string or a similar context such as C</.../>, its elements are
-separated by this value. Default is a space. For example, this:
+separated by this value. Default is a space. For example, this:
- print "The array is: @array\n";
+ print "The array is: @array\n";
is equivalent to this:
- print "The array is: " . join($", @array) . "\n";
+ print "The array is: " . join($", @array) . "\n";
Mnemonic: works in double-quoted context.
@@ -185,75 +186,30 @@ Mnemonic: works in double-quoted context.
=item $$
X<$$> X<$PID> X<$PROCESS_ID>
-The process number of the Perl running this script. You should
-consider this variable read-only, although it will be altered
+The process number of the Perl running this script. Though you I<can> set
+this variable, doing so is generally discouraged, although it can be
+invaluable for some testing purposes. It will be reset automatically
across C<fork()> calls.
-Note for Linux users: on Linux, the C functions C<getpid()> and
-C<getppid()> return different values from different threads. In order to
-be portable, this behavior is not reflected by C<$$>, whose value remains
-consistent across threads. If you want to call the underlying C<getpid()>,
-you may use the CPAN module C<Linux::Pid>.
+Note for Linux and Debian GNU/kFreeBSD users: Before Perl v5.16.0 perl
+would emulate POSIX semantics on Linux systems using LinuxThreads, a
+partial implementation of POSIX Threads that has since been superseded
+by the Native POSIX Thread Library (NPTL).
-Mnemonic: same as shells.
-
-=item $REAL_GROUP_ID
-
-=item $GID
-
-=item $(
-X<$(> X<$GID> X<$REAL_GROUP_ID>
-
-The real gid of this process. If you are on a machine that supports
-membership in multiple groups simultaneously, gives a space separated
-list of groups you are in. The first number is the one returned by
-C<getgid()>, and the subsequent ones by C<getgroups()>, one of which may be
-the same as the first number.
-
-However, a value assigned to C<$(> must be a single number used to
-set the real gid. So the value given by C<$(> should I<not> be assigned
-back to C<$(> without being forced numeric, such as by adding zero. Note
-that this is different to the effective gid (C<$)>) which does take a
-list.
+LinuxThreads is now obsolete on Linux, and and caching C<getpid()>
+like this made embedding perl unnecessarily complex (since you'd have
+to manually update the value of $$), so now C<$$> and C<getppid()>
+will always return the same values as the underlying C library.
-You can change both the real gid and the effective gid at the same
-time by using C<POSIX::setgid()>. Changes to C<$(> require a check to C<$!>
-to detect any possible errors after an attempted change.
-
-Mnemonic: parentheses are used to I<group> things. The real gid is the
-group you I<left>, if you're running setgid.
-
-=item $EFFECTIVE_GROUP_ID
+Debian GNU/kFreeBSD systems also used LinuxThreads up until and
+including the 6.0 release, but after that moved to FreeBSD thread
+semantics, which are POSIX-like.
-=item $EGID
-
-=item $)
-X<$)> X<$EGID> X<$EFFECTIVE_GROUP_ID>
-
-The effective gid of this process. If you are on a machine that
-supports membership in multiple groups simultaneously, gives a space
-separated list of groups you are in. The first number is the one
-returned by C<getegid()>, and the subsequent ones by C<getgroups()>,
-one of which may be the same as the first number.
-
-Similarly, a value assigned to C<$)> must also be a space-separated
-list of numbers. The first number sets the effective gid, and
-the rest (if any) are passed to C<setgroups()>. To get the effect of an
-empty list for C<setgroups()>, just repeat the new effective gid; that is,
-to force an effective gid of 5 and an effectively empty C<setgroups()>
-list, say C< $) = "5 5" >.
-
-You can change both the effective gid and the real gid at the same
-time by using C<POSIX::setgid()> (use only a single numeric argument).
-Changes to C<$)> require a check to C<$!> to detect any possible errors
-after an attempted change.
-
-C<< $< >>, C<< $> >>, C<$(> and C<$)> can be set only on
-machines that support the corresponding I<set[re][ug]id()> routine. C<$(>
-and C<$)> can be swapped only on machines supporting C<setregid()>.
+To see if your system is affected by this discrepancy check if
+C<getconf GNU_LIBPTHREAD_VERSION | grep -q NPTL> returns a false
+value. NTPL threads preserve the POSIX semantics.
-Mnemonic: parentheses are used to I<group> things. The effective gid
-is the group that's I<right> for you, if you're running setgid.
+Mnemonic: same as shells.
=item $PROGRAM_NAME
@@ -263,14 +219,14 @@ X<$0> X<$PROGRAM_NAME>
Contains the name of the program being executed.
On some (but not all) operating systems assigning to C<$0> modifies
-the argument area that the C<ps> program sees. On some platforms you
+the argument area that the C<ps> program sees. On some platforms you
may have to use special C<ps> options or a different C<ps> to see the
-changes. Modifying the C<$0> is more useful as a way of indicating the
+changes. Modifying the C<$0> is more useful as a way of indicating the
current program state than it is for hiding the program you're
running.
Note that there are platform-specific limitations on the maximum
-length of C<$0>. In the most extreme case it may be limited to the
+length of C<$0>. In the most extreme case it may be limited to the
space occupied by the original C<$0>.
In some platforms there may be arbitrary amount of padding, for
@@ -280,14 +236,14 @@ length of the argument area, no matter what you do (this is the case
for example with Linux 2.2).
Note for BSD users: setting C<$0> does not completely remove "perl"
-from the ps(1) output. For example, setting C<$0> to C<"foobar"> may
+from the ps(1) output. For example, setting C<$0> to C<"foobar"> may
result in C<"perl: foobar (perl)"> (whether both the C<"perl: "> prefix
and the " (perl)" suffix are shown depends on your exact BSD variant
-and version). This is an operating system feature, Perl cannot help it.
+and version). This is an operating system feature, Perl cannot help it.
In multithreaded scripts Perl coordinates the threads so that any
thread may modify its copy of the C<$0> and the change becomes visible
-to ps(1) (assuming the operating system plays along). Note that
+to ps(1) (assuming the operating system plays along). Note that
the view of C<$0> the other threads have will not change since they
have their own copies of it.
@@ -296,44 +252,71 @@ C<$0> will contain the string C<"-e">.
On Linux as of perl 5.14 the legacy process name will be set with
C<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
+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
+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.
Mnemonic: same as B<sh> and B<ksh>.
-=item $SUBSCRIPT_SEPARATOR
+=item $REAL_GROUP_ID
-=item $SUBSEP
+=item $GID
-=item $;
-X<$;> X<$SUBSEP> X<SUBSCRIPT_SEPARATOR>
+=item $(
+X<$(> X<$GID> X<$REAL_GROUP_ID>
-The subscript separator for multidimensional array emulation. If you
-refer to a hash element as
+The real gid of this process. If you are on a machine that supports
+membership in multiple groups simultaneously, gives a space separated
+list of groups you are in. The first number is the one returned by
+C<getgid()>, and the subsequent ones by C<getgroups()>, one of which may be
+the same as the first number.
- $foo{$a,$b,$c}
+However, a value assigned to C<$(> must be a single number used to
+set the real gid. So the value given by C<$(> should I<not> be assigned
+back to C<$(> without being forced numeric, such as by adding zero. Note
+that this is different to the effective gid (C<$)>) which does take a
+list.
-it really means
+You can change both the real gid and the effective gid at the same
+time by using C<POSIX::setgid()>. Changes
+to C<$(> require a check to C<$!>
+to detect any possible errors after an attempted change.
- $foo{join($;, $a, $b, $c)}
+Mnemonic: parentheses are used to I<group> things. The real gid is the
+group you I<left>, if you're running setgid.
-But don't put
+=item $EFFECTIVE_GROUP_ID
- @foo{$a,$b,$c} # a slice--note the @
+=item $EGID
-which means
+=item $)
+X<$)> X<$EGID> X<$EFFECTIVE_GROUP_ID>
- ($foo{$a},$foo{$b},$foo{$c})
+The effective gid of this process. If you are on a machine that
+supports membership in multiple groups simultaneously, gives a space
+separated list of groups you are in. The first number is the one
+returned by C<getegid()>, and the subsequent ones by C<getgroups()>,
+one of which may be the same as the first number.
-Default is "\034", the same as SUBSEP in B<awk>. If your keys contain
-binary data there might not be any safe value for C<$;>.
+Similarly, a value assigned to C<$)> must also be a space-separated
+list of numbers. The first number sets the effective gid, and
+the rest (if any) are passed to C<setgroups()>. To get the effect of an
+empty list for C<setgroups()>, just repeat the new effective gid; that is,
+to force an effective gid of 5 and an effectively empty C<setgroups()>
+list, say C< $) = "5 5" >.
-Consider using "real" multidimensional arrays as described
-in L<perllol>.
+You can change both the effective gid and the real gid at the same
+time by using C<POSIX::setgid()> (use only a single numeric argument).
+Changes to C<$)> require a check to C<$!> to detect any possible errors
+after an attempted change.
-Mnemonic: comma (the syntactic subscript separator) is a semi-semicolon.
+C<< $< >>, C<< $> >>, C<$(> and C<$)> can be set only on
+machines that support the corresponding I<set[re][ug]id()> routine. C<$(>
+and C<$)> can be swapped only on machines supporting C<setregid()>.
+
+Mnemonic: parentheses are used to I<group> things. The effective gid
+is the group that's I<right> for you, if you're running setgid.
=item $REAL_USER_ID
@@ -342,8 +325,8 @@ Mnemonic: comma (the syntactic subscript separator) is a semi-semicolon.
=item $<
X<< $< >> X<$UID> X<$REAL_USER_ID>
-The real uid of this process. You can change both the real uid and the
-effective uid at the same time by using C<POSIX::setuid()>. Since
+The real uid of this process. You can change both the real uid and the
+effective uid at the same time by using C<POSIX::setuid()>. Since
changes to C<< $< >> require a system call, check C<$!> after a change
attempt to detect any possible errors.
@@ -356,13 +339,13 @@ Mnemonic: it's the uid you came I<from>, if you're running setuid.
=item $>
X<< $> >> X<$EUID> X<$EFFECTIVE_USER_ID>
-The effective uid of this process. For example:
+The effective uid of this process. For example:
- $< = $>; # set real to effective uid
- ($<,$>) = ($>,$<); # swap real and effective uids
+ $< = $>; # set real to effective uid
+ ($<,$>) = ($>,$<); # swap real and effective uids
You can change both the effective uid and the real uid at the same
-time by using C<POSIX::setuid()>. Changes to C<< $> >> require a check
+time by using C<POSIX::setuid()>. Changes to C<< $> >> require a check
to C<$!> to detect any possible errors after an attempted change.
C<< $< >> and C<< $> >> can be swapped only on machines
@@ -370,55 +353,53 @@ supporting C<setreuid()>.
Mnemonic: it's the uid you went I<to>, if you're running setuid.
-=item $a
+=item $SUBSCRIPT_SEPARATOR
-=item $b
-X<$a> X<$b>
+=item $SUBSEP
-Special package variables when using C<sort()>, see L<perlfunc/sort>.
-Because of this specialness C<$a> and C<$b> don't need to be declared
-(using C<use vars>, or C<our()>) even when using the C<strict 'vars'>
-pragma. Don't lexicalize them with C<my $a> or C<my $b> if you want to
-be able to use them in the C<sort()> comparison block or function.
+=item $;
+X<$;> X<$SUBSEP> X<SUBSCRIPT_SEPARATOR>
-=item $COMPILING
+The subscript separator for multidimensional array emulation. If you
+refer to a hash element as
-=item $^C
-X<$^C> X<$COMPILING>
+ $foo{$a,$b,$c}
-The current value of the flag associated with the B<-c> switch.
-Mainly of use with B<-MO=...> to allow code to alter its behavior
-when being compiled, such as for example to C<AUTOLOAD> at compile
-time rather than normal, deferred loading. Setting
-C<$^C = 1> is similar to calling C<B::minus_c>.
+it really means
-This variable was added in Perl 5.6.
+ $foo{join($;, $a, $b, $c)}
-=item $DEBUGGING
+But don't put
-=item $^D
-X<$^D> X<$DEBUGGING>
+ @foo{$a,$b,$c} # a slice--note the @
-The current value of the debugging flags. May be read or set. Like its
-command-line equivalent, you can use numeric or symbolic values, eg
-C<$^D = 10> or C<$^D = "st">.
+which means
-Mnemonic: value of B<-D> switch.
+ ($foo{$a},$foo{$b},$foo{$c})
-=item ${^ENCODING}
-X<${^ENCODING}>
+Default is "\034", the same as SUBSEP in B<awk>. If your keys contain
+binary data there might not be any safe value for C<$;>.
-The I<object reference> to the C<Encode> object that is used to convert
-the source code to Unicode. Thanks to this variable your Perl script
-does not have to be written in UTF-8. Default is I<undef>. The direct
-manipulation of this variable is highly discouraged.
+Consider using "real" multidimensional arrays as described
+in L<perllol>.
-This variable was added in Perl 5.8.2.
+Mnemonic: comma (the syntactic subscript separator) is a semi-semicolon.
+
+=item $a
+
+=item $b
+X<$a> X<$b>
+
+Special package variables when using C<sort()>, see L<perlfunc/sort>.
+Because of this specialness C<$a> and C<$b> don't need to be declared
+(using C<use vars>, or C<our()>) even when using the C<strict 'vars'>
+pragma. Don't lexicalize them with C<my $a> or C<my $b> if you want to
+be able to use them in the C<sort()> comparison block or function.
=item %ENV
X<%ENV>
-The hash C<%ENV> contains your current environment. Setting a
+The hash C<%ENV> contains your current environment. Setting a
value in C<ENV> changes the environment for any child processes
you subsequently C<fork()> off.
@@ -427,11 +408,12 @@ you subsequently C<fork()> off.
=item $^F
X<$^F> X<$SYSTEM_FD_MAX>
-The maximum system file descriptor, ordinarily 2. System file
+The maximum system file descriptor, ordinarily 2. System file
descriptors are passed to C<exec()>ed processes, while higher file
-descriptors are not. Also, during an C<open()>, system file descriptors are
+descriptors are not. Also, during an
+C<open()>, system file descriptors are
preserved even if the C<open()> fails (ordinary file descriptors are
-closed before the C<open()> is attempted). The close-on-exec
+closed before the C<open()> is attempted). The close-on-exec
status of a file descriptor will be decided according to the value of
C<$^F> when the corresponding file, pipe, or socket was opened, not the
time of the C<exec()>.
@@ -440,203 +422,43 @@ time of the C<exec()>.
X<@F>
The array C<@F> contains the fields of each line read in when autosplit
-mode is turned on. See L<perlrun> for the B<-a> switch. This array
+mode is turned on. See L<perlrun> for the B<-a> switch. This array
is package-specific, and must be declared or given a full package name
if not in package main when running under C<strict 'vars'>.
-=item ${^GLOBAL_PHASE}
-X<${^GLOBAL_PHASE}>
-
-The current phase of the perl interpreter.
-
-Possible values are:
-
-=over 8
-
-=item CONSTRUCT
-
-The C<PerlInterpreter*> is being constructed via C<perl_construct>. This
-value is mostly there for completeness and for use via the
-underlying C variable C<PL_phase>. It's not really possible for Perl
-code to be executed unless construction of the interpreter is
-finished.
-
-=item START
-
-This is the global compile-time. That includes, basically, every
-C<BEGIN> block executed directly or indirectly from during the
-compile-time of the top-level program.
-
-This phase is not called "BEGIN" to avoid confusion with
-C<BEGIN>-blocks, as those are executed during compile-time of any
-compilation unit, not just the top-level program. A new, localised
-compile-time entered at run-time, for example by constructs as
-C<eval "use SomeModule"> are not global interpreter phases, and
-therefore aren't reflected by C<${^GLOBAL_PHASE}>.
-
-=item CHECK
-
-Execution of any C<CHECK> blocks.
-
-=item INIT
-
-Similar to "CHECK", but for C<INIT>-blocks, not C<CHECK> blocks.
-
-=item RUN
-
-The main run-time, i.e. the execution of C<PL_main_root>.
-
-=item END
-
-Execution of any C<END> blocks.
-
-=item DESTRUCT
-
-Global destruction.
-
-=back
-
-Also note that there's no value for UNITCHECK-blocks. That's because
-those are run for each compilation unit individually, and therefore is
-not a global interpreter phase.
-
-Not every program has to go through each of the possible phases, but
-transition from one phase to another can only happen in the order
-described in the above list.
-
-An example of all of the phases Perl code can see:
-
- BEGIN { print "compile-time: ${^GLOBAL_PHASE}\n" }
-
- INIT { print "init-time: ${^GLOBAL_PHASE}\n" }
-
- CHECK { print "check-time: ${^GLOBAL_PHASE}\n" }
-
- {
- package Print::Phase;
-
- sub new {
- my ($class, $time) = @_;
- return bless \$time, $class;
- }
-
- sub DESTROY {
- my $self = shift;
- print "$$self: ${^GLOBAL_PHASE}\n";
- }
- }
-
- print "run-time: ${^GLOBAL_PHASE}\n";
-
- my $runtime = Print::Phase->new(
- "lexical variables are garbage collected before END"
- );
-
- END { print "end-time: ${^GLOBAL_PHASE}\n" }
-
- our $destruct = Print::Phase->new(
- "package variables are garbage collected after END"
- );
-
-This will print out
-
- compile-time: START
- check-time: CHECK
- init-time: INIT
- run-time: RUN
- lexical variables are garbage collected before END: RUN
- end-time: END
- package variables are garbage collected after END: DESTRUCT
-
-This variable was added in Perl 5.14.0.
-
-=item $^H
-X<$^H>
-
-WARNING: This variable is strictly for internal use only. Its availability,
-behavior, and contents are subject to change without notice.
-
-This variable contains compile-time hints for the Perl interpreter. At the
-end of compilation of a BLOCK the value of this variable is restored to the
-value when the interpreter started to compile the BLOCK.
-
-When perl begins to parse any block construct that provides a lexical scope
-(e.g., eval body, required file, subroutine body, loop body, or conditional
-block), the existing value of C<$^H> is saved, but its value is left unchanged.
-When the compilation of the block is completed, it regains the saved value.
-Between the points where its value is saved and restored, code that
-executes within BEGIN blocks is free to change the value of C<$^H>.
-
-This behavior provides the semantic of lexical scoping, and is used in,
-for instance, the C<use strict> pragma.
-
-The contents should be an integer; different bits of it are used for
-different pragmatic flags. Here's an example:
-
- sub add_100 { $^H |= 0x100 }
-
- sub foo {
- BEGIN { add_100() }
- bar->baz($boon);
- }
-
-Consider what happens during execution of the BEGIN block. At this point
-the BEGIN block has already been compiled, but the body of C<foo()> is still
-being compiled. The new value of C<$^H> will therefore be visible only while
-the body of C<foo()> is being compiled.
-
-Substitution of C<BEGIN { add_100() }> block with:
-
- BEGIN { require strict; strict->import('vars') }
-
-demonstrates how C<use strict 'vars'> is implemented. Here's a conditional
-version of the same lexical pragma:
-
- BEGIN { require strict; strict->import('vars') if $condition }
-
-This variable was added in Perl 5.003.
-
-=item %^H
-X<%^H>
-
-The C<%^H> hash provides the same scoping semantic as C<$^H>. This makes it
-useful for implementation of lexically scoped pragmas. See L<perlpragma>.
-
-This variable was added in Perl 5.6.
-
=item @INC
X<@INC>
The array C<@INC> contains the list of places that the C<do EXPR>,
-C<require>, or C<use> constructs look for their library files. It
+C<require>, or C<use> constructs look for their library files. It
initially consists of the arguments to any B<-I> command-line
switches, followed by the default Perl library, probably
F</usr/local/lib/perl>, followed by ".", to represent the current
-directory. ("." will not be appended if taint checks are enabled,
+directory. ("." will not be appended if taint checks are enabled,
either by C<-T> or by C<-t>.) If you need to modify this at runtime,
you should use the C<use lib> pragma to get the machine-dependent
library properly loaded also:
- use lib '/mypath/libdir/';
- use SomeMod;
+ use lib '/mypath/libdir/';
+ use SomeMod;
You can also insert hooks into the file inclusion system by putting Perl
-code directly into C<@INC>. Those hooks may be subroutine references, array
-references or blessed objects. See L<perlfunc/require> for details.
+code directly into C<@INC>. Those hooks may be subroutine references,
+array references or blessed objects. See L<perlfunc/require> for details.
=item %INC
X<%INC>
The hash C<%INC> contains entries for each filename included via the
-C<do>, C<require>, or C<use> operators. The key is the filename
+C<do>, C<require>, or C<use> operators. The key is the filename
you specified (with module names converted to pathnames), and the
-value is the location of the file found. The C<require>
+value is the location of the file found. The C<require>
operator uses this hash to determine whether a particular file has
already been included.
If the file was loaded via a hook (e.g. a subroutine reference, see
L<perlfunc/require> for a description of these hooks), this hook is
-by default inserted into C<%INC> in place of a filename. Note, however,
+by default inserted into C<%INC> in place of a filename. Note, however,
that the hook may have set the C<%INC> entry by itself to provide some more
specific info.
@@ -645,7 +467,7 @@ specific info.
=item $^I
X<$^I> X<$INPLACE_EDIT>
-The current value of the inplace-edit extension. Use C<undef> to disable
+The current value of the inplace-edit extension. Use C<undef> to disable
inplace editing.
Mnemonic: value of B<-i> switch.
@@ -655,15 +477,15 @@ X<$^M>
By default, running out of memory is an untrappable, fatal error.
However, if suitably built, Perl can use the contents of C<$^M>
-as an emergency memory pool after C<die()>ing. Suppose that your Perl
+as an emergency memory pool after C<die()>ing. Suppose that your Perl
were compiled with C<-DPERL_EMERGENCY_SBRK> and used Perl's malloc.
Then
- $^M = 'a' x (1 << 16);
+ $^M = 'a' x (1 << 16);
-would allocate a 64K buffer for use in an emergency. See the
+would allocate a 64K buffer for use in an emergency. See the
F<INSTALL> file in the Perl distribution for information on how to
-add custom C compilation flags when compiling perl. To discourage casual
+add custom C compilation flags when compiling perl. To discourage casual
use of this advanced feature, there is no L<English|English> long name for
this variable.
@@ -675,183 +497,116 @@ This variable was added in Perl 5.004.
X<$^O> X<$OSNAME>
The name of the operating system under which this copy of Perl was
-built, as determined during the configuration process. For examples
+built, as determined during the configuration process. For examples
see L<perlport/PLATFORMS>.
-The value is identical to C<$Config{'osname'}>. See also L<Config>
+The value is identical to C<$Config{'osname'}>. See also L<Config>
and the B<-V> command-line switch documented in L<perlrun>.
In Windows platforms, C<$^O> is not very helpful: since it is always
C<MSWin32>, it doesn't tell the difference between
-95/98/ME/NT/2000/XP/CE/.NET. Use C<Win32::GetOSName()> or
+95/98/ME/NT/2000/XP/CE/.NET. Use C<Win32::GetOSName()> or
Win32::GetOSVersion() (see L<Win32> and L<perlport>) to distinguish
between the variants.
This variable was added in Perl 5.003.
-=item ${^OPEN}
-X<${^OPEN}>
-
-An internal variable used by PerlIO. A string in two parts, separated
-by a C<\0> byte, the first part describes the input layers, the second
-part describes the output layers.
-
-This variable was added in Perl 5.8.2.
-
-=item $PERLDB
-
-=item $^P
-X<$^P> X<$PERLDB>
-
-The internal variable for debugging support. The meanings of the
-various bits are subject to change, but currently indicate:
-
-=over 6
-
-=item 0x01
-
-Debug subroutine enter/exit.
-
-=item 0x02
-
-Line-by-line debugging. Causes C<DB::DB()> subroutine to be called for each
-statement executed. Also causes saving source code lines (like 0x400).
-
-=item 0x04
-
-Switch off optimizations.
-
-=item 0x08
-
-Preserve more data for future interactive inspections.
-
-=item 0x10
-
-Keep info about source lines on which a subroutine is defined.
-
-=item 0x20
-
-Start with single-step on.
-
-=item 0x40
-
-Use subroutine address instead of name when reporting.
-
-=item 0x80
-
-Report C<goto &subroutine> as well.
-
-=item 0x100
-
-Provide informative "file" names for evals based on the place they were compiled.
-
-=item 0x200
-
-Provide informative names to anonymous subroutines based on the place they
-were compiled.
-
-=item 0x400
-
-Save source code lines into C<@{"_<$filename"}>.
-
-=back
-
-Some bits may be relevant at compile-time only, some at
-run-time only. This is a new mechanism and the details may change.
-See also L<perldebguts>.
-
=item %SIG
X<%SIG>
-The hash C<%SIG> contains signal handlers for signals. For example:
+The hash C<%SIG> contains signal handlers for signals. For example:
- sub handler { # 1st argument is signal name
- my($sig) = @_;
- print "Caught a SIG$sig--shutting down\n";
- close(LOG);
- exit(0);
- }
+ sub handler { # 1st argument is signal name
+ my($sig) = @_;
+ print "Caught a SIG$sig--shutting down\n";
+ close(LOG);
+ exit(0);
+ }
- $SIG{'INT'} = \&handler;
- $SIG{'QUIT'} = \&handler;
- ...
- $SIG{'INT'} = 'DEFAULT'; # restore default action
- $SIG{'QUIT'} = 'IGNORE'; # ignore SIGQUIT
+ $SIG{'INT'} = \&handler;
+ $SIG{'QUIT'} = \&handler;
+ ...
+ $SIG{'INT'} = 'DEFAULT'; # restore default action
+ $SIG{'QUIT'} = 'IGNORE'; # ignore SIGQUIT
Using a value of C<'IGNORE'> usually has the effect of ignoring the
-signal, except for the C<CHLD> signal. See L<perlipc> for more about
+signal, except for the C<CHLD> signal. See L<perlipc> for more about
this special case.
Here are some other examples:
- $SIG{"PIPE"} = "Plumber"; # assumes main::Plumber (not recommended)
- $SIG{"PIPE"} = \&Plumber; # just fine; assume current Plumber
- $SIG{"PIPE"} = *Plumber; # somewhat esoteric
- $SIG{"PIPE"} = Plumber(); # oops, what did Plumber() return??
+ $SIG{"PIPE"} = "Plumber"; # assumes main::Plumber (not
+ # recommended)
+ $SIG{"PIPE"} = \&Plumber; # just fine; assume current
+ # Plumber
+ $SIG{"PIPE"} = *Plumber; # somewhat esoteric
+ $SIG{"PIPE"} = Plumber(); # oops, what did Plumber()
+ # return??
Be sure not to use a bareword as the name of a signal handler,
lest you inadvertently call it.
If your system has the C<sigaction()> function then signal handlers
-are installed using it. This means you get reliable signal handling.
+are installed using it. This means you get reliable signal handling.
The default delivery policy of signals changed in Perl 5.8.0 from
immediate (also known as "unsafe") to deferred, also known as "safe
-signals". See L<perlipc> for more information.
+signals". See L<perlipc> for more information.
-Certain internal hooks can be also set using the C<%SIG> hash. The
+Certain internal hooks can be also set using the C<%SIG> hash. The
routine indicated by C<$SIG{__WARN__}> is called when a warning
-message is about to be printed. The warning message is passed as the
-first argument. The presence of a C<__WARN__> hook causes the
-ordinary printing of warnings to C<STDERR> to be suppressed. You can
+message is about to be printed. The warning message is passed as the
+first argument. The presence of a C<__WARN__> hook causes the
+ordinary printing of warnings to C<STDERR> to be suppressed. You can
use this to save warnings in a variable, or turn warnings into fatal
errors, like this:
- local $SIG{__WARN__} = sub { die $_[0] };
- eval $proggie;
+ local $SIG{__WARN__} = sub { die $_[0] };
+ eval $proggie;
As the C<'IGNORE'> hook is not supported by C<__WARN__>, you can
disable warnings using the empty subroutine:
- local $SIG{__WARN__} = sub {};
+ local $SIG{__WARN__} = sub {};
The routine indicated by C<$SIG{__DIE__}> is called when a fatal
-exception is about to be thrown. The error message is passed as the
-first argument. When a C<__DIE__> hook routine returns, the exception
+exception is about to be thrown. The error message is passed as the
+first argument. When a C<__DIE__> hook routine returns, the exception
processing continues as it would have in the absence of the hook,
-unless the hook routine itself exits via a C<goto>, a loop exit, or a
-C<die()>. The C<__DIE__> handler is explicitly disabled during the
-call, so that you can die from a C<__DIE__> handler. Similarly for
-C<__WARN__>.
+unless the hook routine itself exits via a C<goto &sub>, a loop exit,
+or a C<die()>. The C<__DIE__> handler is explicitly disabled during
+the call, so that you can die from a C<__DIE__> handler. Similarly
+for C<__WARN__>.
Due to an implementation glitch, the C<$SIG{__DIE__}> hook is called
-even inside an C<eval()>. Do not use this to rewrite a pending
+even inside an C<eval()>. Do not use this to rewrite a pending
exception in C<$@>, or as a bizarre substitute for overriding
-C<CORE::GLOBAL::die()>. This strange action at a distance may be fixed
+C<CORE::GLOBAL::die()>. This strange action at a distance may be fixed
in a future release so that C<$SIG{__DIE__}> is only called if your
-program is about to exit, as was the original intent. Any other use is
+program is about to exit, as was the original intent. Any other use is
deprecated.
C<__DIE__>/C<__WARN__> handlers are very special in one respect: they
-may be called to report (probable) errors found by the parser. In such
+may be called to report (probable) errors found by the parser. In such
a case the parser may be in inconsistent state, so any attempt to
evaluate Perl code from such a handler will probably result in a
-segfault. This means that warnings or errors that result from parsing
+segfault. This means that warnings or errors that result from parsing
Perl should be used with extreme caution, like this:
- require Carp if defined $^S;
- Carp::confess("Something wrong") if defined &Carp::confess;
- die "Something wrong, but could not load Carp to give backtrace...
- To see backtrace try starting Perl with -MCarp switch";
+ require Carp if defined $^S;
+ Carp::confess("Something wrong") if defined &Carp::confess;
+ die "Something wrong, but could not load Carp to give "
+ . "backtrace...\n\t"
+ . "To see backtrace try starting Perl with -MCarp switch";
Here the first line will load C<Carp> I<unless> it is the parser who
-called the handler. The second line will print backtrace and die if
-C<Carp> was available. The third line will be executed only if C<Carp> was
+called the handler. The second line will print backtrace and die if
+C<Carp> was available. The third line will be executed only if C<Carp> was
not available.
Having to even think about the C<$^S> variable in your exception
-handlers is simply wrong. C<$SIG{__DIE__}> as currently implemented
-invites grievous and difficult to track down errors. Avoid it
+handlers is simply wrong. C<$SIG{__DIE__}> as currently implemented
+invites grievous and difficult to track down errors. Avoid it
and use an C<END{}> or CORE::GLOBAL::die override instead.
See L<perlfunc/die>, L<perlfunc/warn>, L<perlfunc/eval>, and
@@ -863,50 +618,9 @@ L<warnings> for additional information.
X<$^T> X<$BASETIME>
The time at which the program began running, in seconds since the
-epoch (beginning of 1970). The values returned by the B<-M>, B<-A>,
+epoch (beginning of 1970). The values returned by the B<-M>, B<-A>,
and B<-C> filetests are based on this value.
-=item ${^TAINT}
-X<${^TAINT}>
-
-Reflects if taint mode is on or off. 1 for on (the program was run with
-B<-T>), 0 for off, -1 when only taint warnings are enabled (i.e. with
-B<-t> or B<-TU>).
-
-This variable is read-only.
-
-This variable was added in Perl 5.8.
-
-=item ${^UNICODE}
-X<${^UNICODE}>
-
-Reflects certain Unicode settings of Perl. See L<perlrun>
-documentation for the C<-C> switch for more information about
-the possible values.
-
-This variable is set during Perl startup and is thereafter read-only.
-
-This variable was added in Perl 5.8.2.
-
-=item ${^UTF8CACHE}
-X<${^UTF8CACHE}>
-
-This variable controls the state of the internal UTF-8 offset caching code.
-1 for on (the default), 0 for off, -1 to debug the caching code by checking
-all its results against linear scans, and panicking on any discrepancy.
-
-This variable was added in Perl 5.8.9.
-
-=item ${^UTF8LOCALE}
-X<${^UTF8LOCALE}>
-
-This variable indicates whether a UTF-8 locale was detected by perl at
-startup. This information is used by perl when it's in
-adjust-utf8ness-to-locale mode (as when run with the C<-CL> command-line
-switch); see L<perlrun> for more info on this.
-
-This variable was added in Perl 5.8.8.
-
=item $PERL_VERSION
=item $^V
@@ -916,18 +630,18 @@ The revision, version, and subversion of the Perl interpreter,
represented as a C<version> object.
This variable first appeared in perl 5.6.0; earlier versions of perl
-will see an undefined value. Before perl 5.10.0 C<$^V> was represented
+will see an undefined value. Before perl 5.10.0 C<$^V> was represented
as a v-string.
C<$^V> can be used to determine whether the Perl interpreter executing
-a script is in the right range of versions. For example:
+a script is in the right range of versions. For example:
- warn "Hashes not randomized!\n" if !$^V or $^V lt v5.8.1
+ warn "Hashes not randomized!\n" if !$^V or $^V lt v5.8.1
To convert C<$^V> into its string representation use C<sprintf()>'s
C<"%vd"> conversion:
- printf "version is v%vd\n", $^V; # Perl's version
+ printf "version is v%vd\n", $^V; # Perl's version
See the documentation of C<use VERSION> and C<require VERSION>
for a convenient way to fail if the running Perl interpreter is too old.
@@ -942,14 +656,14 @@ Mnemonic: use ^V for Version Control.
X<${^WIN32_SLOPPY_STAT}> X<sitecustomize> X<sitecustomize.pl>
If this variable is set to a true value, then C<stat()> on Windows will
-not try to open the file. This means that the link count cannot be
+not try to open the file. This means that the link count cannot be
determined and file attributes may be out of date if additional
-hardlinks to the file exist. On the other hand, not opening the file
+hardlinks to the file exist. On the other hand, not opening the file
is considerably faster, especially for files on network drives.
This variable could be set in the F<sitecustomize.pl> file to
configure the local Perl installation to use "sloppy" C<stat()> by
-default. See the documentation for B<-f> in
+default. See the documentation for B<-f> in
L<perlrun|perlrun/"Command Switches"> for more information about site
customization.
@@ -966,15 +680,15 @@ C<argv[0]> or (where supported) F</proc/self/exe>.
Depending on the host operating system, the value of C<$^X> may be
a relative or absolute pathname of the perl program file, or may
be the string used to invoke perl but not the pathname of the
-perl program file. Also, most operating systems permit invoking
+perl program file. Also, most operating systems permit invoking
programs that are not in the PATH environment variable, so there
-is no guarantee that the value of C<$^X> is in PATH. For VMS, the
+is no guarantee that the value of C<$^X> is in PATH. For VMS, the
value may or may not include a version number.
You usually can use the value of C<$^X> to re-invoke an independent
copy of the same perl that is currently running, e.g.,
- @first_run = `$^X -le "print int rand 100 for 1..100"`;
+ @first_run = `$^X -le "print int rand 100 for 1..100"`;
But recall that not all operating systems support forking or
capturing of the output of commands, so this complex statement
@@ -983,43 +697,43 @@ may not be portable.
It is not safe to use the value of C<$^X> as a path name of a file,
as some operating systems that have a mandatory suffix on
executable files do not require use of the suffix when invoking
-a command. To convert the value of C<$^X> to a path name, use the
+a command. To convert the value of C<$^X> to a path name, use the
following statements:
- # Build up a set of file names (not command names).
- use Config;
- my $this_perl = $^X;
- if ($^O ne 'VMS') {
- $this_perl .= $Config{_exe}
- unless $this_perl =~ m/$Config{_exe}$/i;
- }
+ # Build up a set of file names (not command names).
+ use Config;
+ my $this_perl = $^X;
+ if ($^O ne 'VMS') {
+ $this_perl .= $Config{_exe}
+ unless $this_perl =~ m/$Config{_exe}$/i;
+ }
Because many operating systems permit anyone with read access to
the Perl program file to make a copy of it, patch the copy, and
then execute the copy, the security-conscious Perl programmer
should take care to invoke the installed copy of perl, not the
-copy referenced by C<$^X>. The following statements accomplish
+copy referenced by C<$^X>. The following statements accomplish
this goal, and produce a pathname that can be invoked as a
command or referenced as a file.
- use Config;
- my $secure_perl_path = $Config{perlpath};
- if ($^O ne 'VMS') {
- $secure_perl_path .= $Config{_exe}
- unless $secure_perl_path =~ m/$Config{_exe}$/i;
- }
+ use Config;
+ my $secure_perl_path = $Config{perlpath};
+ if ($^O ne 'VMS') {
+ $secure_perl_path .= $Config{_exe}
+ unless $secure_perl_path =~ m/$Config{_exe}$/i;
+ }
=back
=head2 Variables related to regular expressions
Most of the special variables related to regular expressions are side
-effects. Perl sets these variables when it has a successful match, so
-you should check the match result before using them. For instance:
+effects. Perl sets these variables when it has a successful match, so
+you should check the match result before using them. For instance:
- if( /P(A)TT(ER)N/ ) {
- print "I found $1 and $2\n";
- }
+ if( /P(A)TT(ER)N/ ) {
+ print "I found $1 and $2\n";
+ }
These variables are read-only and dynamically-scoped, unless we note
otherwise.
@@ -1028,44 +742,44 @@ The dynamic nature of the regular expression variables means that
their value is limited to the block that they are in, as demonstrated
by this bit of code:
- my $outer = 'Wallace and Grommit';
- my $inner = 'Mutt and Jeff';
+ my $outer = 'Wallace and Grommit';
+ my $inner = 'Mutt and Jeff';
- my $pattern = qr/(\S+) and (\S+)/;
+ my $pattern = qr/(\S+) and (\S+)/;
- sub show_n { print "\$1 is $1; \$2 is $2\n" }
+ sub show_n { print "\$1 is $1; \$2 is $2\n" }
- {
- OUTER:
- show_n() if $outer =~ m/$pattern/;
+ {
+ OUTER:
+ show_n() if $outer =~ m/$pattern/;
- INNER: {
- show_n() if $inner =~ m/$pattern/;
- }
+ INNER: {
+ show_n() if $inner =~ m/$pattern/;
+ }
- show_n();
- }
+ show_n();
+ }
The output shows that while in the C<OUTER> block, the values of C<$1>
-and C<$2> are from the match against C<$outer>. Inside the C<INNER>
+and C<$2> are from the match against C<$outer>. Inside the C<INNER>
block, the values of C<$1> and C<$2> are from the match against
C<$inner>, but only until the end of the block (i.e. the dynamic
-scope). After the C<INNER> block completes, the values of C<$1> and
+scope). After the C<INNER> block completes, the values of C<$1> and
C<$2> return to the values for the match against C<$outer> even though
we have not made another match:
- $1 is Wallace; $2 is Grommit
- $1 is Mutt; $2 is Jeff
- $1 is Wallace; $2 is Grommit
+ $1 is Wallace; $2 is Grommit
+ $1 is Mutt; $2 is Jeff
+ $1 is Wallace; $2 is Grommit
Due to an unfortunate accident of Perl's implementation, C<use
English> imposes a considerable performance penalty on all regular
expression matches in a program because it uses the C<$`>, C<$&>, and
C<$'>, regardless of whether they occur in the scope of C<use
-English>. For that reason, saying C<use English> in libraries is
+English>. For that reason, saying C<use English> in libraries is
strongly discouraged unless you import it without the match variables:
- use English '-no_match_vars'
+ use English '-no_match_vars'
The C<Devel::NYTProf> and C<Devel::FindAmpersand>
modules can help you find uses of these
@@ -1098,9 +812,9 @@ any matches hidden within a BLOCK or C<eval()> enclosed by the current
BLOCK).
The use of this variable anywhere in a program imposes a considerable
-performance penalty on all regular expression matches. To avoid this
-penalty, you can extract the same substring by using L</@->. Starting
-with Perl 5.10, you can use the </p> match flag and the C<${^MATCH}>
+performance penalty on all regular expression matches. To avoid this
+penalty, you can extract the same substring by using L</@->. Starting
+with Perl 5.10, you can use the C</p> match flag and the C<${^MATCH}>
variable to do the same thing for particular match operations.
This variable is read-only and dynamically-scoped.
@@ -1129,9 +843,9 @@ pattern match, not counting any matches hidden within a BLOCK or C<eval>
enclosed by the current BLOCK.
The use of this variable anywhere in a program imposes a considerable
-performance penalty on all regular expression matches. To avoid this
-penalty, you can extract the same substring by using L</@->. Starting
-with Perl 5.10, you can use the </p> match flag and the
+performance penalty on all regular expression matches. To avoid this
+penalty, you can extract the same substring by using L</@->. Starting
+with Perl 5.10, you can use the C</p> match flag and the
C<${^PREMATCH}> variable to do the same thing for particular match
operations.
@@ -1158,16 +872,16 @@ X<$'> X<$POSTMATCH> X<${^POSTMATCH}> X<@->
The string following whatever was matched by the last successful
pattern match (not counting any matches hidden within a BLOCK or C<eval()>
-enclosed by the current BLOCK). Example:
+enclosed by the current BLOCK). Example:
- local $_ = 'abcdefghi';
- /def/;
- print "$`:$&:$'\n"; # prints abc:def:ghi
+ local $_ = 'abcdefghi';
+ /def/;
+ print "$`:$&:$'\n"; # prints abc:def:ghi
The use of this variable anywhere in a program imposes a considerable
performance penalty on all regular expression matches.
To avoid this penalty, you can extract the same substring by
-using L</@->. Starting with Perl 5.10, you can use the </p> match flag
+using L</@->. Starting with Perl 5.10, you can use the C</p> match flag
and the C<${^POSTMATCH}> variable to do the same thing for particular
match operations.
@@ -1194,9 +908,9 @@ X<$+> X<$LAST_PAREN_MATCH>
The text matched by the last bracket of the last successful search pattern.
This is useful if you don't know which one of a set of alternative patterns
-matched. For example:
+matched. For example:
- /Version: (.*)|Revision: (.*)/ && ($rev = $+);
+ /Version: (.*)|Revision: (.*)/ && ($rev = $+);
This variable is read-only and dynamically-scoped.
@@ -1212,10 +926,10 @@ with the rightmost closing parenthesis) of the last successful search
pattern.
This is primarily used inside C<(?{...})> blocks for examining text
-recently matched. For example, to effectively capture text to a variable
+recently matched. For example, to effectively capture text to a variable
(in addition to C<$1>, C<$2>, etc.), replace C<(...)> with
- (?:(...)(?{ $var = $^N }))
+ (?:(...)(?{ $var = $^N }))
By setting and then using C<$var> in this way relieves you from having to
worry about exactly which numbered set of parentheses they are.
@@ -1230,14 +944,14 @@ Mnemonic: the (possibly) Nested parenthesis that most recently closed.
X<@+> X<@LAST_MATCH_END>
This array holds the offsets of the ends of the last successful
-submatches in the currently active dynamic scope. C<$+[0]> is
-the offset into the string of the end of the entire match. This
+submatches in the currently active dynamic scope. C<$+[0]> is
+the offset into the string of the end of the entire match. This
is the same value as what the C<pos> function returns when called
-on the variable that was matched against. The I<n>th element
+on the variable that was matched against. The I<n>th element
of this array holds the offset of the I<n>th submatch, so
C<$+[1]> is the offset past where C<$1> ends, C<$+[2]> the offset
-past where C<$2> ends, and so on. You can use C<$#+> to determine
-how many subgroups were in the last successful match. See the
+past where C<$2> ends, and so on. You can use C<$#+> to determine
+how many subgroups were in the last successful match. See the
examples given for the C<@-> variable.
This variable was added in Perl 5.6.
@@ -1253,7 +967,7 @@ currently active dynamic scope.
For example, C<$+{foo}> is equivalent to C<$1> after the following match:
- 'foo' =~ /(?<foo>foo)/;
+ 'foo' =~ /(?<foo>foo)/;
The keys of the C<%+> hash list only the names of buffers that have
captured (and that are thus associated to defined values).
@@ -1262,7 +976,7 @@ The underlying behaviour of C<%+> is provided by the
L<Tie::Hash::NamedCapture> module.
B<Note:> C<%-> and C<%+> are tied views into a common internal hash
-associated with the last successful regular expression. Therefore mixing
+associated with the last successful regular expression. Therefore mixing
iterative access to them via C<each> may have unpredictable results.
Likewise, if the last successful match changes, then the results may be
surprising.
@@ -1281,17 +995,17 @@ C<$-[>I<n>C<]> is the offset of the start of the substring matched by
I<n>-th subpattern, or undef if the subpattern did not match.
Thus, after a match against C<$_>, C<$&> coincides with C<substr $_, $-[0],
-$+[0] - $-[0]>. Similarly, $I<n> coincides with C<substr $_, $-[n],
+$+[0] - $-[0]>. Similarly, $I<n> coincides with C<substr $_, $-[n],
$+[n] - $-[n]> if C<$-[n]> is defined, and $+ coincides with
-C<substr $_, $-[$#-], $+[$#-] - $-[$#-]>. One can use C<$#-> to find the last
-matched subgroup in the last successful match. Contrast with
-C<$#+>, the number of subgroups in the regular expression. Compare
+C<substr $_, $-[$#-], $+[$#-] - $-[$#-]>. One can use C<$#-> to find the
+last matched subgroup in the last successful match. Contrast with
+C<$#+>, the number of subgroups in the regular expression. Compare
with C<@+>.
This array holds the offsets of the beginnings of the last
successful submatches in the currently active dynamic scope.
C<$-[0]> is the offset into the string of the beginning of the
-entire match. The I<n>th element of this array holds the offset
+entire match. The I<n>th element of this array holds the offset
of the I<n>th submatch, so C<$-[1]> is the offset where C<$1>
begins, C<$-[2]> the offset where C<$2> begins, and so on.
@@ -1321,7 +1035,7 @@ This variable was added in Perl 5.6.
X<%-> X<%LAST_MATCH_START>
Similar to C<%+>, this variable allows access to the named capture groups
-in the last successful match in the currently active dynamic scope. To
+in the last successful match in the currently active dynamic scope. To
each capture group name found in the regular expression, it associates a
reference to an array containing the list of values captured by all
buffers with that name (should there be several of them), in the order
@@ -1334,7 +1048,9 @@ Here's an example:
my $ary = $-{$bufname};
foreach my $idx (0..$#$ary) {
print "\$-{$bufname}[$idx] : ",
- (defined($ary->[$idx]) ? "'$ary->[$idx]'" : "undef"),
+ (defined($ary->[$idx])
+ ? "'$ary->[$idx]'"
+ : "undef"),
"\n";
}
}
@@ -1342,10 +1058,10 @@ Here's an example:
would print out:
- $-{A}[0] : '1'
- $-{A}[1] : '3'
- $-{B}[0] : '2'
- $-{B}[1] : '4'
+ $-{A}[0] : '1'
+ $-{A}[1] : '3'
+ $-{B}[0] : '2'
+ $-{B}[1] : '4'
The keys of the C<%-> hash correspond to all buffer names found in
the regular expression.
@@ -1354,7 +1070,7 @@ The behaviour of C<%-> is implemented via the
L<Tie::Hash::NamedCapture> module.
B<Note:> C<%-> and C<%+> are tied views into a common internal hash
-associated with the last successful regular expression. Therefore mixing
+associated with the last successful regular expression. Therefore mixing
iterative access to them via C<each> may have unpredictable results.
Likewise, if the last successful match changes, then the results may be
surprising.
@@ -1369,15 +1085,15 @@ This variable is read-only and dynamically-scoped.
X<$^R> X<$LAST_REGEXP_CODE_RESULT>
The result of evaluation of the last successful C<(?{ code })>
-regular expression assertion (see L<perlre>). May be written to.
+regular expression assertion (see L<perlre>). May be written to.
This variable was added in Perl 5.005.
=item ${^RE_DEBUG_FLAGS}
X<${^RE_DEBUG_FLAGS}>
-The current value of the regex debugging flags. Set to 0 for no debug output
-even when the C<re 'debug'> module is loaded. See L<re> for details.
+The current value of the regex debugging flags. Set to 0 for no debug output
+even when the C<re 'debug'> module is loaded. See L<re> for details.
This variable was added in Perl 5.10.
@@ -1385,9 +1101,10 @@ This variable was added in Perl 5.10.
X<${^RE_TRIE_MAXBUF}>
Controls how certain regex optimisations are applied and how much memory they
-utilize. This value by default is 65536 which corresponds to a 512kB temporary
-cache. Set this to a higher value to trade memory for speed when matching
-large alternations. Set it to a lower value if you want the optimisations to
+utilize. This value by default is 65536 which corresponds to a 512kB
+temporary cache. Set this to a higher value to trade
+memory for speed when matching large alternations. Set
+it to a lower value if you want the optimisations to
be as conservative of memory as possible but still occur, and set it to a
negative value to prevent the optimisation and conserve the most memory.
Under normal situations this variable should be of no interest to you.
@@ -1401,50 +1118,50 @@ This variable was added in Perl 5.10.
Variables that depend on the currently selected filehandle may be set
by calling an appropriate object method on the C<IO::Handle> object,
although this is less efficient than using the regular built-in
-variables. (Summary lines below for this contain the word HANDLE.)
+variables. (Summary lines below for this contain the word HANDLE.)
First you must say
- use IO::Handle;
+ use IO::Handle;
after which you may use either
- method HANDLE EXPR
+ method HANDLE EXPR
or more safely,
- HANDLE->method(EXPR)
+ HANDLE->method(EXPR)
-Each method returns the old value of the C<IO::Handle> attribute. The
+Each method returns the old value of the C<IO::Handle> attribute. The
methods each take an optional EXPR, which, if supplied, specifies the
-new value for the C<IO::Handle> attribute in question. If not
+new value for the C<IO::Handle> attribute in question. If not
supplied, most methods do nothing to the current value--except for
C<autoflush()>, which will assume a 1 for you, just to be different.
Because loading in the C<IO::Handle> class is an expensive operation,
you should learn how to use the regular built-in variables.
-A few of these variables are considered "read-only". This means that
+A few of these variables are considered "read-only". This means that
if you try to assign to this variable, either directly or indirectly
through a reference, you'll raise a run-time exception.
You should be very careful when modifying the default values of most
-special variables described in this document. In most cases you want
+special variables described in this document. In most cases you want
to localize these variables before changing them, since if you don't,
the change may affect other modules which rely on the default values
-of the special variables that you have changed. This is one of the
+of the special variables that you have changed. This is one of the
correct ways to read the whole file at once:
- open my $fh, "<", "foo" or die $!;
- local $/; # enable localized slurp mode
- my $content = <$fh>;
- close $fh;
+ open my $fh, "<", "foo" or die $!;
+ local $/; # enable localized slurp mode
+ my $content = <$fh>;
+ close $fh;
But the following code is quite bad:
- open my $fh, "<", "foo" or die $!;
- undef $/; # enable slurp mode
- my $content = <$fh>;
- close $fh;
+ open my $fh, "<", "foo" or die $!;
+ undef $/; # enable slurp mode
+ my $content = <$fh>;
+ close $fh;
since some other module, may want to read data from some file in the
default "line mode", so if the code we have just presented has been
@@ -1452,30 +1169,30 @@ executed, the global value of C<$/> is now changed for any other code
running inside the same Perl interpreter.
Usually when a variable is localized you want to make sure that this
-change affects the shortest scope possible. So unless you are already
-inside some short C<{}> block, you should create one yourself. For
+change affects the shortest scope possible. So unless you are already
+inside some short C<{}> block, you should create one yourself. For
example:
- my $content = '';
- open my $fh, "<", "foo" or die $!;
- {
- local $/;
- $content = <$fh>;
- }
- close $fh;
+ my $content = '';
+ open my $fh, "<", "foo" or die $!;
+ {
+ local $/;
+ $content = <$fh>;
+ }
+ close $fh;
Here is an example of how your own code can go broken:
- for ( 1..3 ){
- $\ = "\r\n";
- nasty_break();
- print "$_";
- }
+ for ( 1..3 ){
+ $\ = "\r\n";
+ nasty_break();
+ print "$_";
+ }
- sub nasty_break {
+ sub nasty_break {
$\ = "\f";
# do something with $_
- }
+ }
You probably expect this code to print the equivalent of
@@ -1486,11 +1203,11 @@ but instead you get:
"1\f2\f3\f"
Why? Because C<nasty_break()> modifies C<$\> without localizing it
-first. The value you set in C<nasty_break()> is still there when you
-return. The fix is to add C<local()> so the value doesn't leak out of
+first. The value you set in C<nasty_break()> is still there when you
+return. The fix is to add C<local()> so the value doesn't leak out of
C<nasty_break()>:
- local $\ = "\f";
+ local $\ = "\f";
It's easy to notice the problem in such a short example, but in more
complicated code you are looking for trouble if you don't localize
@@ -1507,18 +1224,18 @@ Contains the name of the current file when reading from C<< <> >>.
X<@ARGV>
The array C<@ARGV> contains the command-line arguments intended for
-the script. C<$#ARGV> is generally the number of arguments minus
+the script. C<$#ARGV> is generally the number of arguments minus
one, because C<$ARGV[0]> is the first argument, I<not> the program's
-command name itself. See C<$0> for the command name.
+command name itself. See L</$0> for the command name.
=item ARGV
X<ARGV>
The special filehandle that iterates over command-line filenames in
-C<@ARGV>. Usually written as the null filehandle in the angle operator
-C<< <> >>. Note that currently C<ARGV> only has its magical effect
+C<@ARGV>. Usually written as the null filehandle in the angle operator
+C<< <> >>. Note that currently C<ARGV> only has its magical effect
within the C<< <> >> operator; elsewhere it is just a plain filehandle
-corresponding to the last file opened by C<< <> >>. In particular,
+corresponding to the last file opened by C<< <> >>. In particular,
passing C<\*ARGV> as a parameter to a function that expects a filehandle
may not cause your function to automatically read the contents of all the
files in C<@ARGV>.
@@ -1527,8 +1244,8 @@ files in C<@ARGV>.
X<ARGVOUT>
The special filehandle that points to the currently open output file
-when doing edit-in-place processing with B<-i>. Useful when you have
-to do a lot of inserting and don't want to keep modifying C<$_>. See
+when doing edit-in-place processing with B<-i>. Useful when you have
+to do a lot of inserting and don't want to keep modifying C<$_>. See
L<perlrun> for the B<-i> switch.
=item Handle->output_field_separator( EXPR )
@@ -1540,8 +1257,8 @@ L<perlrun> for the B<-i> switch.
=item $,
X<$,> X<$OFS> X<$OUTPUT_FIELD_SEPARATOR>
-The output field separator for the print operator. If defined, this
-value is printed between each of print's arguments. Default is C<undef>.
+The output field separator for the print operator. If defined, this
+value is printed between each of print's arguments. Default is C<undef>.
Mnemonic: what is printed when there is a "," in your print statement.
@@ -1557,20 +1274,20 @@ X<$.> X<$NR> X<$INPUT_LINE_NUMBER> X<line number>
Current line number for the last filehandle accessed.
Each filehandle in Perl counts the number of lines that have been read
-from it. (Depending on the value of C<$/>, Perl's idea of what
+from it. (Depending on the value of C<$/>, Perl's idea of what
constitutes a line may not match yours.) When a line is read from a
filehandle (via C<readline()> or C<< <> >>), or when C<tell()> or
C<seek()> is called on it, C<$.> becomes an alias to the line counter
for that filehandle.
You can adjust the counter by assigning to C<$.>, but this will not
-actually move the seek pointer. I<Localizing C<$.> will not localize
-the filehandle's line count>. Instead, it will localize perl's notion
+actually move the seek pointer. I<Localizing C<$.> will not localize
+the filehandle's line count>. Instead, it will localize perl's notion
of which filehandle C<$.> is currently aliased to.
C<$.> is reset when the filehandle is closed, but B<not> when an open
-filehandle is reopened without an intervening C<close()>. For more
-details, see L<perlop/"IE<sol>O Operators">. Because C<< <> >> never does
+filehandle is reopened without an intervening C<close()>. For more
+details, see L<perlop/"IE<sol>O Operators">. Because C<< <> >> never does
an explicit close, line numbers increase across C<ARGV> files (but see
examples in L<perlfunc/eof>).
@@ -1589,15 +1306,15 @@ Mnemonic: many programs use "." to mean the current line number.
=item $/
X<$/> X<$RS> X<$INPUT_RECORD_SEPARATOR>
-The input record separator, newline by default. This influences Perl's
-idea of what a "line" is. Works like B<awk>'s RS variable, including
+The input record separator, newline by default. This influences Perl's
+idea of what a "line" is. Works like B<awk>'s RS variable, including
treating empty lines as a terminator if set to the null string (an
-empty line cannot contain any spaces or tabs). You may set it to a
+empty line cannot contain any spaces or tabs). You may set it to a
multi-character string to match a multi-character terminator, or to
-C<undef> to read through the end of file. Setting it to C<"\n\n">
+C<undef> to read through the end of file. Setting it to C<"\n\n">
means something slightly different than setting to C<"">, if the file
-contains consecutive empty lines. Setting to C<""> will treat two or
-more consecutive empty lines as a single empty line. Setting to
+contains consecutive empty lines. Setting to C<""> will treat two or
+more consecutive empty lines as a single empty line. Setting to
C<"\n\n"> will blindly assume that the next input character belongs to
the next paragraph, even if it's a newline.
@@ -1605,33 +1322,38 @@ the next paragraph, even if it's a newline.
local $_ = <FH>; # whole file now here
s/\n[ \t]+/ /g;
-Remember: the value of C<$/> is a string, not a regex. B<awk> has to
+Remember: the value of C<$/> is a string, not a regex. B<awk> has to
be better for something. :-)
Setting C<$/> to a reference to an integer, scalar containing an
integer, or scalar that's convertible to an integer will attempt to
read records instead of lines, with the maximum record size being the
-referenced integer. So this:
+referenced integer. So this:
local $/ = \32768; # or \"32768", or \$var_containing_32768
open my $fh, "<", $myfile or die $!;
local $_ = <$fh>;
-will read a record of no more than 32768 bytes from FILE. If you're
+will read a record of no more than 32768 bytes from FILE. If you're
not reading from a record-oriented file (or your OS doesn't have
record-oriented files), then you'll likely get a full chunk of data
-with every read. If a record is larger than the record size you've
-set, you'll get the record back in pieces. Trying to set the record
+with every read. If a record is larger than the record size you've
+set, you'll get the record back in pieces. Trying to set the record
size to zero or less will cause reading in the (rest of the) whole file.
-On VMS, record reads are done with the equivalent of C<sysread>,
-so it's best not to mix record and non-record reads on the same
-file. (This is unlikely to be a problem, because any file you'd
-want to read in record mode is probably unusable in line mode.)
-Non-VMS systems do normal I/O, so it's safe to mix record and
-non-record reads of a file.
+On VMS only, record reads bypass PerlIO layers and any associated
+buffering,so you must not mix record and non-record reads on the
+same filehandle. Record mode mixes with line mode only when the
+same buffering layer is in use for both modes.
+
+If you perform a record read on a FILE with an encoding layer such as
+C<:encoding(latin1)> or C<:utf8>, you may get an invalid string as a
+result, may leave the FILE positioned between characters in the stream
+and may not be reading the number of bytes from the underlying file
+that you specified. This behaviour may change without warning in a
+future version of perl.
-See also L<perlport/"Newlines">. Also see C<$.>.
+See also L<perlport/"Newlines">. Also see L</$.>.
Mnemonic: / delimits line boundaries when quoting poetry.
@@ -1644,8 +1366,8 @@ Mnemonic: / delimits line boundaries when quoting poetry.
=item $\
X<$\> X<$ORS> X<$OUTPUT_RECORD_SEPARATOR>
-The output record separator for the print operator. If defined, this
-value is printed after the last of print's arguments. Default is C<undef>.
+The output record separator for the print operator. If defined, this
+value is printed after the last of print's arguments. Default is C<undef>.
Mnemonic: you set C<$\> instead of adding "\n" at the end of the print.
Also, it's just like C<$/>, but it's what you get "back" from Perl.
@@ -1658,16 +1380,16 @@ Also, it's just like C<$/>, but it's what you get "back" from Perl.
X<$|> X<autoflush> X<flush> X<$OUTPUT_AUTOFLUSH>
If set to nonzero, forces a flush right away and after every write or
-print on the currently selected output channel. Default is 0
+print on the currently selected output channel. Default is 0
(regardless of whether the channel is really buffered by the system or
not; C<$|> tells you only whether you've asked Perl explicitly to
-flush after each write). STDOUT will typically be line buffered if
-output is to the terminal and block buffered otherwise. Setting this
+flush after each write). STDOUT will typically be line buffered if
+output is to the terminal and block buffered otherwise. Setting this
variable is useful primarily when you are outputting to a pipe or
socket, such as when you are running a Perl program under B<rsh> and
-want to see the output as it's happening. This has no effect on input
-buffering. See L<perlfunc/getc> for that. See L<perlfunc/select> on
-how to select the output channel. See also L<IO::Handle>.
+want to see the output as it's happening. This has no effect on input
+buffering. See L<perlfunc/getc> for that. See L<perlfunc/select> on
+how to select the output channel. See also L<IO::Handle>.
Mnemonic: when you want your pipes to be piping hot.
@@ -1676,7 +1398,7 @@ Mnemonic: when you want your pipes to be piping hot.
=head3 Variables related to formats
The special variables for formats are a subset of those for
-filehandles. See L<perlform> for more information about Perl's
+filehandles. See L<perlform> for more information about Perl's
formats.
=over 8
@@ -1688,9 +1410,9 @@ X<$^A> X<$ACCUMULATOR>
The current value of the C<write()> accumulator for C<format()> lines.
A format contains C<formline()> calls that put their result into
-C<$^A>. After calling its format, C<write()> prints out the contents
-of C<$^A> and empties. So you never really see the contents of C<$^A>
-unless you call C<formline()> yourself and then look at it. See
+C<$^A>. After calling its format, C<write()> prints out the contents
+of C<$^A> and empties. So you never really see the contents of C<$^A>
+unless you call C<formline()> yourself and then look at it. See
L<perlform> and L<perlfunc/"formline PICTURE,LIST">.
=item HANDLE->format_formfeed(EXPR)
@@ -1700,7 +1422,7 @@ L<perlform> and L<perlfunc/"formline PICTURE,LIST">.
=item $^L
X<$^L> X<$FORMAT_FORMFEED>
-What formats output as a form feed. The default is C<\f>.
+What formats output as a form feed. The default is C<\f>.
=item HANDLE->format_page_number(EXPR)
@@ -1733,7 +1455,7 @@ Mnemonic: lines_on_page - lines_printed.
X<$:> X<FORMAT_LINE_BREAK_CHARACTERS>
The current set of characters after which a string may be broken to
-fill continuation fields (starting with C<^>) in a format. The default is
+fill continuation fields (starting with C<^>) in a format. The default is
S<" \n-">, to break on a space, newline, or a hyphen.
Mnemonic: a "colon" in poetry is a part of a line.
@@ -1746,7 +1468,7 @@ Mnemonic: a "colon" in poetry is a part of a line.
X<$=> X<$FORMAT_LINES_PER_PAGE>
The current page length (printable lines) of the currently selected
-output channel. The default is 60.
+output channel. The default is 60.
Mnemonic: = has horizontal lines.
@@ -1758,9 +1480,9 @@ Mnemonic: = has horizontal lines.
X<$^> X<$FORMAT_TOP_NAME>
The name of the current top-of-page format for the currently selected
-output channel. The default is the name of the filehandle with C<_TOP>
-appended. For example, the default format top name for the C<STDOUT>
-filehanlde is C<STDOUT_TOP>.
+output channel. The default is the name of the filehandle with C<_TOP>
+appended. For example, the default format top name for the C<STDOUT>
+filehandle is C<STDOUT_TOP>.
Mnemonic: points to top of page.
@@ -1772,8 +1494,8 @@ Mnemonic: points to top of page.
X<$~> X<$FORMAT_NAME>
The name of the current report format for the currently selected
-output channel. The default format name is the same as the filehandle
-name. For example, the default format name for the C<STDOUT>
+output channel. The default format name is the same as the filehandle
+name. For example, the default format name for the C<STDOUT>
filehandle is just C<STDOUT>.
Mnemonic: brother to C<$^>.
@@ -1785,46 +1507,46 @@ X<error> X<exception>
The variables C<$@>, C<$!>, C<$^E>, and C<$?> contain information
about different types of error conditions that may appear during
-execution of a Perl program. The variables are shown ordered by
+execution of a Perl program. The variables are shown ordered by
the "distance" between the subsystem which reported the error and
-the Perl process. They correspond to errors detected by the Perl
+the Perl process. They correspond to errors detected by the Perl
interpreter, C library, operating system, or an external program,
respectively.
To illustrate the differences between these variables, consider the
-following Perl expression, which uses a single-quoted string. After
+following Perl expression, which uses a single-quoted string. After
execution of this statement, perl may have set all four special error
variables:
- eval q{
- open my $pipe, "/cdrom/install |" or die $!;
- my @res = <$pipe>;
- close $pipe or die "bad pipe: $?, $!";
- };
+ eval q{
+ open my $pipe, "/cdrom/install |" or die $!;
+ my @res = <$pipe>;
+ close $pipe or die "bad pipe: $?, $!";
+ };
When perl executes the C<eval()> expression, it translates the
C<open()>, C<< <PIPE> >>, and C<close> calls in the C run-time library
-and thence to the operating system kernel. perl sets C<$!> to
+and thence to the operating system kernel. perl sets C<$!> to
the C library's C<errno> if one of these calls fails.
C<$@> is set if the string to be C<eval>-ed did not compile (this may
happen if C<open> or C<close> were imported with bad prototypes), or
-if Perl code executed during evaluation C<die()>d. In these cases the
+if Perl code executed during evaluation C<die()>d. In these cases the
value of C<$@> is the compile error, or the argument to C<die> (which
-will interpolate C<$!> and C<$?>). (See also L<Fatal>, though.)
+will interpolate C<$!> and C<$?>). (See also L<Fatal>, though.)
Under a few operating systems, C<$^E> may contain a more verbose error
-indicator, such as in this case, "CDROM tray not closed." Systems that
+indicator, such as in this case, "CDROM tray not closed." Systems that
do not support extended error messages leave C<$^E> the same as C<$!>.
Finally, C<$?> may be set to non-0 value if the external program
-F</cdrom/install> fails. The upper eight bits reflect specific error
+F</cdrom/install> fails. The upper eight bits reflect specific error
conditions encountered by the program (the program's C<exit()> value).
The lower eight bits reflect mode of failure, like signal death and
-core dump information. See C<wait(2)> for details. In contrast to
+core dump information. See L<wait(2)> for details. In contrast to
C<$!> and C<$^E>, which are set only if error condition is detected,
the variable C<$?> is set on each C<wait> or pipe C<close>,
-overwriting the old value. This is more like C<$@>, which on every
+overwriting the old value. This is more like C<$@>, which on every
C<eval()> is always set on failure and cleared on success.
For more details, see the individual descriptions at C<$@>, C<$!>,
@@ -1837,7 +1559,7 @@ X<$^CHILD_ERROR_NATIVE>
The native status returned by the last pipe close, backtick (C<``>)
command, successful call to C<wait()> or C<waitpid()>, or from the
-C<system()> operator. On POSIX-like systems this value can be decoded
+C<system()> operator. On POSIX-like systems this value can be decoded
with the WIFEXITED, WEXITSTATUS, WIFSIGNALED, WTERMSIG, WIFSTOPPED,
WSTOPSIG and WIFCONTINUED functions provided by the L<POSIX> module.
@@ -1851,14 +1573,14 @@ This variable was added in Perl 5.8.9.
=item $^E
X<$^E> X<$EXTENDED_OS_ERROR>
-Error information specific to the current operating system. At the
+Error information specific to the current operating system. At the
moment, this differs from C<$!> under only VMS, OS/2, and Win32 (and
-for MacPerl). On all other platforms, C<$^E> is always just the same
+for MacPerl). On all other platforms, C<$^E> is always just the same
as C<$!>.
Under VMS, C<$^E> provides the VMS status value from the last system
-error. This is more specific information about the last system error
-than that provided by C<$!>. This is particularly important when C<$!>
+error. This is more specific information about the last system error
+than that provided by C<$!>. This is particularly important when C<$!>
is set to B<EVMSERR>.
Under OS/2, C<$^E> is set to the error code of the last call to OS/2
@@ -1866,8 +1588,8 @@ API either via CRT, or directly from perl.
Under Win32, C<$^E> always returns the last error information reported
by the Win32 call C<GetLastError()> which describes the last error
-from within the Win32 API. Most Win32-specific code will report errors
-via C<$^E>. ANSI C and Unix-like calls set C<errno> and so most
+from within the Win32 API. Most Win32-specific code will report errors
+via C<$^E>. ANSI C and Unix-like calls set C<errno> and so most
portable Perl code will report errors via C<$!>.
Caveats mentioned in the description of C<$!> generally apply to
@@ -1911,9 +1633,11 @@ Mnemonic: related to the B<-w> switch.
X<${^WARNING_BITS}>
The current set of warning checks enabled by the C<use warnings> pragma.
-See the documentation of C<warnings> for more details.
+It has the same scoping as the C<$^H> and C<%^H> variables. The exact
+values are considered internal to the L<warnings> pragma and may change
+between versions of Perl.
-This variable was added in Perl 5.10.
+This variable was added in Perl 5.6.
=item $OS_ERROR
@@ -1922,12 +1646,18 @@ This variable was added in Perl 5.10.
=item $!
X<$!> X<$ERRNO> X<$OS_ERROR>
-If used numerically, yields the current value of the C C<errno>
-variable, or in other words, if a system or library call fails, it
-sets this variable. This means that the value of C<$!> is meaningful
-only I<immediately> after a B<failure>:
+When referenced, C<$!> retrieves the current value
+of the C C<errno> integer variable.
+If C<$!> is assigned a numerical value, that value is stored in C<errno>.
+When referenced as a string, C<$!> yields the system error string
+corresponding to C<errno>.
+
+Many system or library calls set C<errno> if they fail,
+to indicate the cause of failure. They usually do B<not>
+set C<errno> to zero if they succeed. This means C<errno>,
+hence C<$!>, is meaningful only I<immediately> after a B<failure>:
- if (open my $fh, "<", $filename) {
+ if (open my $fh, "<", $filename) {
# Here $! is meaningless.
...
}
@@ -1937,16 +1667,13 @@ only I<immediately> after a B<failure>:
# Already here $! might be meaningless.
}
# Since here we might have either success or failure,
- # here $! is meaningless.
+ # $! is meaningless.
-The I<meaningless> stands for anything: zero, non-zero,
-C<undef>. A successful system or library call does B<not> set the
-variable to zero.
-
-If used as a string, yields the corresponding system error string. You
-can assign a number to C<$!> to set I<errno> if, for instance, you
-want C<"$!"> to return the string for error I<n>, or you want to set
-the exit value for the C<die()> operator.
+Here, I<meaningless> means that C<$!> may be unrelated to the outcome
+of the C<open()> operator. Assignment to C<$!> is similarly ephemeral.
+It can be used immediately before invoking the C<die()> operator,
+to set the exit value, or to inspect the system error string
+corresponding to error I<n>, or to restore C<$!> to a meaningful state.
Mnemonic: What just went bang?
@@ -1958,12 +1685,12 @@ Mnemonic: What just went bang?
X<%!> X<%OS_ERROR> X<%ERRNO>
Each element of C<%!> has a true value only if C<$!> is set to that
-value. For example, C<$!{ENOENT}> is true if and only if the current
+value. For example, C<$!{ENOENT}> is true if and only if the current
value of C<$!> is C<ENOENT>; that is, if the most recent error was "No
such file or directory" (or its moral equivalent: not all operating
-systems give that exact error, and certainly not all languages). To
+systems give that exact error, and certainly not all languages). To
check if a particular key is meaningful on your system, use C<exists
-$!{the_key}>; for a list of legal keys, use C<keys %!>. See L<Errno>
+$!{the_key}>; for a list of legal keys, use C<keys %!>. See L<Errno>
for more information, and also see L</$!>.
This variable was added in Perl 5.005.
@@ -1975,9 +1702,9 @@ X<$?> X<$CHILD_ERROR>
The status returned by the last pipe close, backtick (C<``>) command,
successful call to C<wait()> or C<waitpid()>, or from the C<system()>
-operator. This is just the 16-bit status word returned by the
+operator. This is just the 16-bit status word returned by the
traditional Unix C<wait()> system call (or else is made up to look
-like it). Thus, the exit value of the subprocess is really (C<<< $? >>
+like it). Thus, the exit value of the subprocess is really (C<<< $? >>
8 >>>), and C<$? & 127> gives which signal, if any, the process died
from, and C<$? & 128> reports whether there was a core dump.
@@ -1988,8 +1715,8 @@ If you have installed a signal handler for C<SIGCHLD>, the
value of C<$?> will usually be wrong outside that handler.
Inside an C<END> subroutine C<$?> contains the value that is going to be
-given to C<exit()>. You can modify C<$?> in an C<END> subroutine to
-change the exit status of your program. For example:
+given to C<exit()>. You can modify C<$?> in an C<END> subroutine to
+change the exit status of your program. For example:
END {
$? = 1 if $? == 255; # die would make it 255
@@ -2006,12 +1733,13 @@ Mnemonic: similar to B<sh> and B<ksh>.
=item $@
X<$@> X<$EVAL_ERROR>
-The Perl syntax error message from the last C<eval()> operator. If C<$@> is
+The Perl syntax error message from the
+last C<eval()> operator. If C<$@> is
the null string, the last C<eval()> parsed and executed correctly
(although the operations you invoked may have failed in the normal
fashion).
-Warning messages are not collected in this variable. You can, however,
+Warning messages are not collected in this variable. You can, however,
set up a routine to process warnings by setting C<$SIG{__WARN__}> as
described in L</%SIG>.
@@ -2019,11 +1747,337 @@ Mnemonic: Where was the syntax error "at"?
=back
+=head2 Variables related to the interpreter state
+
+These variables provide information about the current interpreter state.
+
+=over 8
+
+=item $COMPILING
+
+=item $^C
+X<$^C> X<$COMPILING>
+
+The current value of the flag associated with the B<-c> switch.
+Mainly of use with B<-MO=...> to allow code to alter its behavior
+when being compiled, such as for example to C<AUTOLOAD> at compile
+time rather than normal, deferred loading. Setting
+C<$^C = 1> is similar to calling C<B::minus_c>.
+
+This variable was added in Perl 5.6.
+
+=item $DEBUGGING
+
+=item $^D
+X<$^D> X<$DEBUGGING>
+
+The current value of the debugging flags. May be read or set. Like its
+command-line equivalent, you can use numeric or symbolic values, eg
+C<$^D = 10> or C<$^D = "st">.
+
+Mnemonic: value of B<-D> switch.
+
+=item ${^ENCODING}
+X<${^ENCODING}>
+
+The I<object reference> to the C<Encode> object that is used to convert
+the source code to Unicode. Thanks to this variable your Perl script
+does not have to be written in UTF-8. Default is I<undef>. The direct
+manipulation of this variable is highly discouraged.
+
+This variable was added in Perl 5.8.2.
+
+=item ${^GLOBAL_PHASE}
+X<${^GLOBAL_PHASE}>
+
+The current phase of the perl interpreter.
+
+Possible values are:
+
+=over 8
+
+=item CONSTRUCT
+
+The C<PerlInterpreter*> is being constructed via C<perl_construct>. This
+value is mostly there for completeness and for use via the
+underlying C variable C<PL_phase>. It's not really possible for Perl
+code to be executed unless construction of the interpreter is
+finished.
+
+=item START
+
+This is the global compile-time. That includes, basically, every
+C<BEGIN> block executed directly or indirectly from during the
+compile-time of the top-level program.
+
+This phase is not called "BEGIN" to avoid confusion with
+C<BEGIN>-blocks, as those are executed during compile-time of any
+compilation unit, not just the top-level program. A new, localised
+compile-time entered at run-time, for example by constructs as
+C<eval "use SomeModule"> are not global interpreter phases, and
+therefore aren't reflected by C<${^GLOBAL_PHASE}>.
+
+=item CHECK
+
+Execution of any C<CHECK> blocks.
+
+=item INIT
+
+Similar to "CHECK", but for C<INIT>-blocks, not C<CHECK> blocks.
+
+=item RUN
+
+The main run-time, i.e. the execution of C<PL_main_root>.
+
+=item END
+
+Execution of any C<END> blocks.
+
+=item DESTRUCT
+
+Global destruction.
+
+=back
+
+Also note that there's no value for UNITCHECK-blocks. That's because
+those are run for each compilation unit individually, and therefore is
+not a global interpreter phase.
+
+Not every program has to go through each of the possible phases, but
+transition from one phase to another can only happen in the order
+described in the above list.
+
+An example of all of the phases Perl code can see:
+
+ BEGIN { print "compile-time: ${^GLOBAL_PHASE}\n" }
+
+ INIT { print "init-time: ${^GLOBAL_PHASE}\n" }
+
+ CHECK { print "check-time: ${^GLOBAL_PHASE}\n" }
+
+ {
+ package Print::Phase;
+
+ sub new {
+ my ($class, $time) = @_;
+ return bless \$time, $class;
+ }
+
+ sub DESTROY {
+ my $self = shift;
+ print "$$self: ${^GLOBAL_PHASE}\n";
+ }
+ }
+
+ print "run-time: ${^GLOBAL_PHASE}\n";
+
+ my $runtime = Print::Phase->new(
+ "lexical variables are garbage collected before END"
+ );
+
+ END { print "end-time: ${^GLOBAL_PHASE}\n" }
+
+ our $destruct = Print::Phase->new(
+ "package variables are garbage collected after END"
+ );
+
+This will print out
+
+ compile-time: START
+ check-time: CHECK
+ init-time: INIT
+ run-time: RUN
+ lexical variables are garbage collected before END: RUN
+ end-time: END
+ package variables are garbage collected after END: DESTRUCT
+
+This variable was added in Perl 5.14.0.
+
+=item $^H
+X<$^H>
+
+WARNING: This variable is strictly for
+internal use only. Its availability,
+behavior, and contents are subject to change without notice.
+
+This variable contains compile-time hints for the Perl interpreter. At the
+end of compilation of a BLOCK the value of this variable is restored to the
+value when the interpreter started to compile the BLOCK.
+
+When perl begins to parse any block construct that provides a lexical scope
+(e.g., eval body, required file, subroutine body, loop body, or conditional
+block), the existing value of C<$^H> is saved, but its value is left unchanged.
+When the compilation of the block is completed, it regains the saved value.
+Between the points where its value is saved and restored, code that
+executes within BEGIN blocks is free to change the value of C<$^H>.
+
+This behavior provides the semantic of lexical scoping, and is used in,
+for instance, the C<use strict> pragma.
+
+The contents should be an integer; different bits of it are used for
+different pragmatic flags. Here's an example:
+
+ sub add_100 { $^H |= 0x100 }
+
+ sub foo {
+ BEGIN { add_100() }
+ bar->baz($boon);
+ }
+
+Consider what happens during execution of the BEGIN block. At this point
+the BEGIN block has already been compiled, but the body of C<foo()> is still
+being compiled. The new value of C<$^H>
+will therefore be visible only while
+the body of C<foo()> is being compiled.
+
+Substitution of C<BEGIN { add_100() }> block with:
+
+ BEGIN { require strict; strict->import('vars') }
+
+demonstrates how C<use strict 'vars'> is implemented. Here's a conditional
+version of the same lexical pragma:
+
+ BEGIN {
+ require strict; strict->import('vars') if $condition
+ }
+
+This variable was added in Perl 5.003.
+
+=item %^H
+X<%^H>
+
+The C<%^H> hash provides the same scoping semantic as C<$^H>. This makes
+it useful for implementation of lexically scoped pragmas. See
+L<perlpragma>.
+
+When putting items into C<%^H>, in order to avoid conflicting with other
+users of the hash there is a convention regarding which keys to use.
+A module should use only keys that begin with the module's name (the
+name of its main package) and a "/" character. For example, a module
+C<Foo::Bar> should use keys such as C<Foo::Bar/baz>.
+
+This variable was added in Perl 5.6.
+
+=item ${^OPEN}
+X<${^OPEN}>
+
+An internal variable used by PerlIO. A string in two parts, separated
+by a C<\0> byte, the first part describes the input layers, the second
+part describes the output layers.
+
+This variable was added in Perl 5.8.0.
+
+=item $PERLDB
+
+=item $^P
+X<$^P> X<$PERLDB>
+
+The internal variable for debugging support. The meanings of the
+various bits are subject to change, but currently indicate:
+
+=over 6
+
+=item 0x01
+
+Debug subroutine enter/exit.
+
+=item 0x02
+
+Line-by-line debugging. Causes C<DB::DB()> subroutine to be called for
+each statement executed. Also causes saving source code lines (like
+0x400).
+
+=item 0x04
+
+Switch off optimizations.
+
+=item 0x08
+
+Preserve more data for future interactive inspections.
+
+=item 0x10
+
+Keep info about source lines on which a subroutine is defined.
+
+=item 0x20
+
+Start with single-step on.
+
+=item 0x40
+
+Use subroutine address instead of name when reporting.
+
+=item 0x80
+
+Report C<goto &subroutine> as well.
+
+=item 0x100
+
+Provide informative "file" names for evals based on the place they were compiled.
+
+=item 0x200
+
+Provide informative names to anonymous subroutines based on the place they
+were compiled.
+
+=item 0x400
+
+Save source code lines into C<@{"_<$filename"}>.
+
+=back
+
+Some bits may be relevant at compile-time only, some at
+run-time only. This is a new mechanism and the details may change.
+See also L<perldebguts>.
+
+=item ${^TAINT}
+X<${^TAINT}>
+
+Reflects if taint mode is on or off. 1 for on (the program was run with
+B<-T>), 0 for off, -1 when only taint warnings are enabled (i.e. with
+B<-t> or B<-TU>).
+
+This variable is read-only.
+
+This variable was added in Perl 5.8.
+
+=item ${^UNICODE}
+X<${^UNICODE}>
+
+Reflects certain Unicode settings of Perl. See L<perlrun>
+documentation for the C<-C> switch for more information about
+the possible values.
+
+This variable is set during Perl startup and is thereafter read-only.
+
+This variable was added in Perl 5.8.2.
+
+=item ${^UTF8CACHE}
+X<${^UTF8CACHE}>
+
+This variable controls the state of the internal UTF-8 offset caching code.
+1 for on (the default), 0 for off, -1 to debug the caching code by checking
+all its results against linear scans, and panicking on any discrepancy.
+
+This variable was added in Perl 5.8.9.
+
+=item ${^UTF8LOCALE}
+X<${^UTF8LOCALE}>
+
+This variable indicates whether a UTF-8 locale was detected by perl at
+startup. This information is used by perl when it's in
+adjust-utf8ness-to-locale mode (as when run with the C<-CL> command-line
+switch); see L<perlrun> for more info on this.
+
+This variable was added in Perl 5.8.8.
+
+=back
+
=head2 Deprecated and removed variables
Deprecating a variable announces the intent of the perl maintainers to
-eventually remove the variable from the langauge. It may still be
-available despite its status. Using a deprecated variable triggers
+eventually remove the variable from the language. It may still be
+available despite its status. Using a deprecated variable triggers
a warning.
Once a variable is removed, its use triggers an error telling you
@@ -2038,13 +2092,13 @@ See L<perldiag> for details about error messages.
=item $#
X<$#> X<$OFMT>
-C<$#> was a variable that you could be use to format printed numbers.
+C<$#> was a variable that could be used to format printed numbers.
After a deprecation cycle, its magic was removed in Perl 5.10 and
using it now triggers a warning: C<$# is no longer supported>.
This is not the sigil you use in front of an array name to get the
-last index, like C<$#array>. That's still how you get the last index
-of an array in Perl. The two have nothing to do with each other.
+last index, like C<$#array>. That's still how you get the last index
+of an array in Perl. The two have nothing to do with each other.
Deprecated in Perl 5.
@@ -2068,7 +2122,7 @@ Removed in Perl 5.10.
X<$[> X<$ARRAY_BASE>
This variable stores the index of the first element in an array, and
-of the first character in a substring. The default is 0, but you could
+of the first character in a substring. The default is 0, but you could
theoretically set it to 1 to make Perl behave more like B<awk> (or Fortran)
when subscripting and when evaluating the index() and substr() functions.
@@ -2079,8 +2133,15 @@ Its use is highly discouraged.
Prior to Perl 5.10, assignment to C<$[> could be seen from outer lexical
scopes in the same file, unlike other compile-time directives (such as
-L<strict>). Using local() on it would bind its value strictly to a lexical
-block. Now it is always lexically scoped.
+L<strict>). Using local() on it would bind its value strictly to a lexical
+block. Now it is always lexically scoped.
+
+As of Perl 5.16, it is implemented by the L<arybase> module. See
+L<arybase> for more details on its behaviour.
+
+Under C<use v5.16>, or C<no feature "array_base">, C<$[> no longer has any
+effect, and always contains 0. Assigning 0 to it is permitted, but any
+other value will produce an error.
Mnemonic: [ begins subscripts.
@@ -2091,10 +2152,10 @@ Deprecated in Perl 5.12.
=item $]
X<$]> X<$OLD_PERL_VERSION>
-See C<$^V> for a more modern representation of the Perl version that allows
+See L</$^V> for a more modern representation of the Perl version that allows
accurate string comparisons.
-The version + patchlevel / 1000 of the Perl interpreter. This variable
+The version + patchlevel / 1000 of the Perl interpreter. This variable
can be used to determine whether the Perl interpreter executing a
script is in the right range of versions:
@@ -2108,8 +2169,6 @@ for a convenient way to fail if the running Perl interpreter is too old.
Mnemonic: Is this version of perl in the right bracket?
-Deprecated in Perl 5.6.
-
=back
=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perlvmesa.pod b/Master/tlpkg/tlperl/lib/pods/perlvmesa.pod
index 27c3aec7096..ae8e3864da4 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlvmesa.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlvmesa.pod
@@ -7,7 +7,7 @@ INSTALL file.
=head1 NAME
-README.vmesa - building and installing Perl for VM/ESA.
+perlvmesa - building and installing Perl for VM/ESA.
=head1 SYNOPSIS
@@ -120,7 +120,7 @@ To subscribe, send an empty message to perl-mvs-subscribe@perl.org.
See also:
-L<http://lists.perl.org/showlist.cgi?name=perl-mvs>
+L<http://lists.perl.org/list/perl-mvs.html>
There are web archives of the mailing list at:
diff --git a/Master/tlpkg/tlperl/lib/pods/perlvms.pod b/Master/tlpkg/tlperl/lib/pods/perlvms.pod
index 7e96c06b054..d88e6b14be7 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlvms.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlvms.pod
@@ -409,7 +409,7 @@ internal Perl problems that would cause such a condition.
This allows the programmer to look at the execution stack and variables to
find out the cause of the exception. As the debugger is being invoked as
the Perl interpreter is about to do a fatal exit, continuing the execution
-in debug mode is usally not practical.
+in debug mode is usually not practical.
Starting Perl in the VMS debugger may change the program execution
profile in a way that such problems are not reproduced.
@@ -704,7 +704,6 @@ results of testing and further review.
See L</"$?"> for a description of the encoding of the Unix value to
produce a native VMS status containing it.
-
=item dump
Rather than causing Perl to abort and dump core, the C<dump>
diff --git a/Master/tlpkg/tlperl/lib/pods/perlvos.pod b/Master/tlpkg/tlperl/lib/pods/perlvos.pod
index 2283fc19b42..28cc9d130dd 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlvos.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlvos.pod
@@ -4,7 +4,7 @@ specially designed to be readable as is.
=head1 NAME
-README.vos - Perl for Stratus VOS
+perlvos - Perl for Stratus VOS
=head1 SYNOPSIS
diff --git a/Master/tlpkg/tlperl/lib/pods/perlwin32.pod b/Master/tlpkg/tlperl/lib/pods/perlwin32.pod
index 67869cac6cc..7095f75a261 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlwin32.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlwin32.pod
@@ -39,7 +39,6 @@ additional software to run (other than what came with your operating
system). Currently, this port is capable of using one of the
following compilers on the Intel x86 architecture:
- Borland C++ version 5.02 or later
Microsoft Visual C++ version 6.0 or later
Gcc by mingw.org gcc version 3.2 or later
Gcc by mingw-w64.sf.net gcc version 4.4.3 or later
@@ -62,14 +61,11 @@ that are also supported by perl's makefile.
=back
-The Borland C++ and Microsoft Visual C++ compilers are also now being given
-away free. The Borland compiler is available as "Borland C++ Compiler Free
-Command Line Tools" and is the same compiler that ships with the full
-"Borland C++ Builder" product. The Microsoft compiler is available as
-"Visual C++ Toolkit 2003" or "Visual C++ 2005/2008/2010 Express Edition" (and
-also as part of the ".NET Framework SDK") and is the same compiler that ships
-with "Visual C++ .NET 2003 Professional" or "Visual C++ 2005/2008/2010
-Professional" respectively.
+The Microsoft Visual C++ compilers are also now being given away free. They are
+available as "Visual C++ Toolkit 2003" or "Visual C++ 2005/2008/2010 Express
+Edition" (and also as part of the ".NET Framework SDK") and are the same
+compilers that ship with "Visual C++ .NET 2003 Professional" or "Visual C++
+2005/2008/2010 Professional" respectively.
This port can also be built on IA64/AMD64 using:
@@ -80,7 +76,7 @@ The Windows SDK can be downloaded from L<http://www.microsoft.com/>.
The MinGW64 compiler is available at L<http://sourceforge.net/projects/mingw-w64>.
The latter is actually a cross-compiler targeting Win64. There's also a trimmed
down compiler (no java, or gfortran) suitable for building perl available at:
-L<http://strawberryperl.com/package/kmx/64_gcctoolchain/mingw64-w64-20100123-kmx-v2.zip>
+L<http://strawberryperl.com/package/kmx/64_gcctoolchain/>
NOTE: If you're using a 32-bit compiler to build perl on a 64-bit Windows
operating system, then you should set the WIN64 environment variable to "undef".
@@ -100,7 +96,7 @@ See L<Usage Hints for Perl on Windows> below for general hints about this.
You need a "make" program to build the sources. If you are using
Visual C++ or the Windows SDK tools, nmake will work. Builds using
-the Borland compiler or gcc need dmake.
+the gcc need dmake.
dmake is a freely available make that has very nice macro features
and parallelability.
@@ -111,16 +107,6 @@ L<http://search.cpan.org/dist/dmake/>
Fetch and install dmake somewhere on your path.
-There exists a minor coexistence problem with dmake and Borland C++
-compilers. Namely, if a distribution has C files named with mixed
-case letters, they will be compiled into appropriate .obj-files named
-with all lowercase letters, and every time dmake is invoked
-to bring files up to date, it will try to recompile such files again.
-For example, Tk distribution has a lot of such files, resulting in
-needless recompiles every time dmake is invoked. To avoid this, you
-may use the script "sync_ext.pl" after a successful build. It is
-available in the win32 subdirectory of the Perl source distribution.
-
=item Command Shell
Use the default "cmd" shell that comes with Windows. Some versions of the
@@ -131,14 +117,6 @@ shell.
Make sure the path to the build directory does not contain spaces. The
build usually works in this circumstance, but some tests will fail.
-=item Borland C++
-
-If you are using the Borland compiler, you will need dmake.
-(The make that Borland supplies is seriously crippled and will not
-work for MakeMaker builds.)
-
-See L</"Make"> above.
-
=item Microsoft Visual C++
The nmake that comes with Visual C++ will suffice for building.
@@ -362,9 +340,7 @@ may end up building against the installed perl's lib/CORE directory rather
than the one being tested.
You will have to make sure that CCTYPE is set correctly and that
-CCHOME points to wherever you installed your compiler. If building with
-gcc-4.x.x, you'll also need to uncomment the assignment to GCC_4XX and
-uncomment the assignment to the appropriate GCCHELPERDLL in the makefile.mk.
+CCHOME points to wherever you installed your compiler.
If building with the cross-compiler provided by
mingw-w64.sourceforge.net you'll need to uncomment the line that sets
@@ -391,7 +367,7 @@ Be sure to read the instructions near the top of the makefiles carefully.
Type "dmake" (or "nmake" if you are using that make).
This should build everything. Specifically, it will create perl.exe,
-perl514.dll at the perl toplevel, and various other extension dll's
+perl516.dll at the perl toplevel, and various other extension dll's
under the lib\auto directory. If the build fails for any reason, make
sure you have done the previous steps correctly.
@@ -411,20 +387,6 @@ spaces. So don't do that.
If you are running the tests from a emacs shell window, you may see
failures in op/stat.t. Run "dmake test-notty" in that case.
-If you're using the Borland compiler, you may see a failure in op/taint.t
-arising from the inability to find the Borland Runtime DLLs on the system
-default path. You will need to copy the DLLs reported by the messages
-from where Borland chose to install it, into the Windows system directory
-(usually somewhere like C:\WINDOWS\SYSTEM32) and rerun the test.
-
-If you're using Borland compiler versions 5.2 and below, you may run into
-problems finding the correct header files when building extensions. For
-example, building the "Tk" extension may fail because both perl and Tk
-contain a header file called "patchlevel.h". The latest Borland compiler
-(v5.5) is free of this misbehaviour, and it even supports an
-option -VI- for backward (bugward) compatibility for using the old Borland
-search algorithm to locate header files.
-
If you run the tests on a FAT partition, you may see some failures for
C<link()> related tests (I<op/write.t>, I<op/stat.t> ...). Testing on
NTFS avoids these errors.
@@ -525,15 +487,18 @@ using a non-standard shell, be inconsistent). The only (useful) quote
character is the double quote ("). It can be used to protect spaces
and other special characters in arguments.
-The Windows documentation has almost no description of how the
-quoting rules are implemented, but here are some general observations
-based on experiments: The C runtime breaks arguments at spaces and
-passes them to programs in argc/argv. Double quotes can be used to
-prevent arguments with spaces in them from being split up. You can
-put a double quote in an argument by escaping it with a backslash and
-enclosing the whole argument within double quotes. The backslash and
-the pair of double quotes surrounding the argument will be stripped by
-the C runtime.
+The Windows documentation describes the shell parsing rules here:
+L<http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/cmd.mspx?mfr=true>
+and the C runtime parsing rules here:
+L<http://msdn.microsoft.com/en-us/library/17w5ykft%28v=VS.100%29.aspx>.
+
+Here are some further observations based on experiments: The C runtime
+breaks arguments at spaces and passes them to programs in argc/argv.
+Double quotes can be used to prevent arguments with spaces in them from
+being split up. You can put a double quote in an argument by escaping
+it with a backslash and enclosing the whole argument within double quotes.
+The backslash and the pair of double quotes surrounding the argument will
+be stripped by the C runtime.
The file redirection characters "E<lt>", "E<gt>", and "|" can be quoted by
double quotes (although there are suggestions that this may not always
@@ -915,8 +880,6 @@ and borrowed from the Hip Communications port that was available
at the time. Various people have made numerous and sundry hacks
since then.
-Borland support was added in 5.004_01 (Gurusamy Sarathy).
-
GCC/mingw32 support was added in 5.005 (Nick Ing-Simmons).
Support for PERL_OBJECT was added in 5.005 (ActiveState Tool Corp).
@@ -927,6 +890,6 @@ Win9x support was added in 5.6 (Benjamin Stuhl).
Support for 64-bit Windows added in 5.8 (ActiveState Corp).
-Last updated: 18 November 2010
+Last updated: 10 September 2011
=cut
diff --git a/Master/tlpkg/tlperl/lib/pods/perlxs.pod b/Master/tlpkg/tlperl/lib/pods/perlxs.pod
index 415f2ad2a00..11fc13c5ff5 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlxs.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlxs.pod
@@ -61,14 +61,15 @@ 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.
+for the library being linked. For more information on typemaps,
+see L<perlxstypemap>.
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.
+allows the XS file to contain embedded documentation.
See L<perlxstut> for a tutorial on the whole extension creation process.
@@ -197,7 +198,7 @@ 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">
+should be considered part of the variable. See L<perlxstypemap>
for more info about handling qualifiers and unary operators in C types.
The function name and the return type must be placed on
@@ -317,10 +318,19 @@ able to write:
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 *>.
+whenever it is being called. The same problem exists for C<HV *>,
+C<CV *>, and C<SVREF> (which indicates a scalar reference, not
+a general C<SV *>).
+In XS code on perls starting with perl 5.16, you can override the
+typemaps for any of these types with a version that has proper
+handling of refcounts. In your C<TYPEMAP> section, do
-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* T_AVREF_REFCOUNT_FIXED
+
+to get the repaired variant. For backward compatibility with older
+versions of perl, you can instead decrement the reference count
+manually when you're returning one of the aforementioned
+types using C<sv_2mortal>:
AV *
array()
@@ -331,7 +341,8 @@ their reference count is decremented by making the AV or HV mortal:
OUTPUT:
RETVAL
-And also remember that you don't have to do this for an C<SV *>.
+Remember that you don't have to do this for an C<SV *>. The reference
+documentation for all core typemaps can be found in L<perlxstypemap>.
=head2 The MODULE Keyword
@@ -540,6 +551,25 @@ not care about its initial contents.
OUTPUT:
timep
+=head2 The TYPEMAP: Keyword
+
+Starting with Perl 5.16, you can embed typemaps into your XS code
+instead of or in addition to typemaps in a separate file. Multiple
+such embedded typemaps will be processed in order of appearance in
+the XS code and like local typemap files take precendence over the
+default typemap, the embedded typemaps may overwrite previous
+definitions of TYPEMAP, INPUT, and OUTPUT stanzas. The syntax for
+embedded typemaps is
+
+ TYPEMAP: <<HERE
+ ... your typemap code here ...
+ HERE
+
+where the C<TYPEMAP> keyword must appear in the first column of a
+new line.
+
+Refer to L<perlxstypemap> for details on writing typemaps.
+
=head2 Initializing Function Parameters
C function parameters are normally initialized with their values from
@@ -557,8 +587,8 @@ 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.
+must be protected with backslashes. The variables C<$var>, C<$arg>,
+and C<$type> can be used as in typemaps.
bool_t
rpcb_gettime(host,timep)
@@ -598,7 +628,7 @@ 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<$arg> will evaluate to C<ST(0)>, and C<$v{timep}> will evaluate to
C<ST(1)>.
=head2 Default Parameter Values
@@ -1295,12 +1325,12 @@ 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
+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
+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
@@ -1318,7 +1348,7 @@ this:
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
+multiple overloads with whitespace. Note that "" (the stringify
overload) should be entered as \"\" (i.e. escaped).
=head2 The FALLBACK: Keyword
@@ -1334,9 +1364,9 @@ FALLBACK keyword in the module header section, like this:
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
+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.
+L<overload/fallback> for more details.
=head2 The INTERFACE: Keyword
@@ -1353,11 +1383,11 @@ subtract() all having the signature:
you can make them all to use the same XSUB using this:
symbolic
- interface_s_ss(arg1, arg2)
+ interface_s_ss(arg1, arg2)
symbolic arg1
symbolic arg2
INTERFACE:
- multiply divide
+ multiply divide
add subtract
(This is the complete XSUB code for 4 Perl functions!) Four generated
@@ -1368,7 +1398,7 @@ 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",
+ CV *mycv = newXSproto("Symbolic::remainder",
XS_Symbolic_interface_s_ss, __FILE__, "$$");
XSINTERFACE_FUNC_SET(mycv, remainder);
@@ -1389,10 +1419,10 @@ 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
+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
+C<subtract_off>. Then one can use
#define XSINTERFACE_FUNC_BYOFFSET(ret,cv,f) \
((XSINTERFACE_CVT_ANON(ret))fp[CvXSUBANY(cv).any_i32])
@@ -1402,14 +1432,14 @@ C<subtract_off>. Then one can use
in C section,
symbolic
- interface_s_ss(arg1, arg2)
+ interface_s_ss(arg1, arg2)
symbolic arg1
symbolic arg2
- INTERFACE_MACRO:
+ INTERFACE_MACRO:
XSINTERFACE_FUNC_BYOFFSET
XSINTERFACE_FUNC_BYOFFSET_set
INTERFACE:
- multiply divide
+ multiply divide
add subtract
in XSUB section.
@@ -1501,6 +1531,24 @@ the different argument lists.
$status = x_gettime( $timep, $host );
+=head2 The EXPORT_XSUB_SYMBOLS: Keyword
+
+The EXPORT_XSUB_SYMBOLS: keyword is likely something you will never need.
+In perl versions earlier than 5.16.0, this keyword does nothing. Starting
+with 5.16, XSUB symbols are no longer exported by default. That is, they
+are C<static> functions. If you include
+
+ EXPORT_XSUB_SYMBOLS: ENABLE
+
+in your XS code, the XSUBs following this line will not be declared C<static>.
+You can later disable this with
+
+ EXPORT_XSUB_SYMBOLS: DISABLE
+
+which, again, is the default that you should probably never change.
+You cannot use this keyword on versions of perl before 5.16 to make
+XSUBs C<static>.
+
=head2 The & Unary Operator
The C<&> unary operator in the INPUT: section is used to tell B<xsubpp>
@@ -1613,7 +1661,7 @@ not listed.
color::set_blue( val )
int val
-Both Perl functions will expect an object as the first parameter. In the
+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:
@@ -1669,16 +1717,16 @@ example.
# 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 );
+ 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;
- }
+ 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
@@ -1786,8 +1834,9 @@ trim the name to the word DESTROY as Perl will expect.
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.
+This example requires the following typemap entry. Consult
+L<perlxstypemap> for more information about adding new typemaps
+for an extension.
TYPEMAP
Netconfig * T_PTROBJ
@@ -1803,75 +1852,6 @@ 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
@@ -1913,7 +1893,7 @@ Below is an example module that makes use of the macros.
strcpy(MY_CXT.name[0], "None");
strcpy(MY_CXT.name[1], "None");
strcpy(MY_CXT.name[2], "None");
- }
+ }
int
newMouse(char * name)
@@ -1983,7 +1963,7 @@ 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.)
+(But see L</MY_CXT_CLONE> below.)
=item dMY_CXT
@@ -1993,7 +1973,7 @@ 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
+example, if C<my_cxt_t> is
typedef struct {
int index;
@@ -2099,7 +2079,7 @@ File C<RPC.xs>: Interface to some ONC+ RPC bind library functions.
printf("NetconfigPtr::DESTROY\n");
free( netconf );
-File C<typemap>: Custom typemap for RPC.xs.
+File C<typemap>: Custom typemap for RPC.xs. (cf. L<perlxstypemap>)
TYPEMAP
Netconfig * T_PTROBJ
@@ -2133,7 +2113,8 @@ File C<rpctest.pl>: Perl test program for the RPC extension.
=head1 XS VERSION
-This document covers features supported by C<xsubpp> 1.935.
+This document covers features supported by C<ExtUtils::ParseXS>
+(also known as C<xsubpp>) 3.13_01.
=head1 AUTHOR
diff --git a/Master/tlpkg/tlperl/lib/pods/perlxstut.pod b/Master/tlpkg/tlperl/lib/pods/perlxstut.pod
index 91c13ed358f..93c1bfbe61b 100644
--- a/Master/tlpkg/tlperl/lib/pods/perlxstut.pod
+++ b/Master/tlpkg/tlperl/lib/pods/perlxstut.pod
@@ -1,6 +1,6 @@
=head1 NAME
-perlXStut - Tutorial for writing XSUBs
+perlxstut - Tutorial for writing XSUBs
=head1 DESCRIPTION
@@ -435,8 +435,12 @@ heavy use of the C functions within Perl.
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.
+in the typemap file ($PERLLIB/ExtUtils/typemap). There's a brief discussion
+below, but all the nitty-gritty details can be found in L<perlxstypemap>.
+If you have a new-enough version of perl (5.16 and up) or an upgraded
+XS compiler (C<ExtUtils::ParseXS> 3.13_01 or better), then you can inline
+typemaps in your XS instead of writing separate files.
+Either way, this typemap thing 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
@@ -451,7 +455,7 @@ The file name is Mytest.c:
dXSARGS;
if (items != 1)
Perl_croak(aTHX_ "Usage: Mytest::round(arg)");
- PERL_UNUSED_VAR(cv); /* -W */
+ PERL_UNUSED_VAR(cv); /* -W */
{
double arg = (double)SvNV(ST(0)); /* XXXXX */
if (arg > 0.0) {
@@ -462,20 +466,20 @@ The file name is Mytest.c:
arg = 0.0;
}
sv_setnv(ST(0), (double)arg); /* XXXXX */
- SvSETMAGIC(ST(0));
+ 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.
+Notice the two lines commented with "XXXXX". If you check the first part
+of the typemap file (or section), you'll see that doubles are of type
+T_DOUBLE. In the INPUT part of the typemap, 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
@@ -606,11 +610,13 @@ And also add the following function definition to the end of the .xs file:
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:
+Now we also need to create a typemap because the default Perl doesn't
+currently support the C<const char *> type. Include a new TYPEMAP
+section in your XS code before the above function:
+ TYPEMAP: <<END;
const char * T_PV
+ END
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
@@ -1086,6 +1092,7 @@ Mytest.xs:
int i, n;
struct statfs buf;
+ SvGETMAGIC(paths);
if ((!SvROK(paths))
|| (SvTYPE(SvRV(paths)) != SVt_PVAV)
|| ((numpaths = av_len((AV *)SvRV(paths))) < 0))
@@ -1145,8 +1152,10 @@ 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
+The C<INIT:> block first calls SvGETMAGIC(paths), in case
+paths is a tied variable. Then it checks that C<SvROK> returns
+true, which indicates that paths is a valid reference. (Simply
+checking C<SvROK> won't trigger FETCH on a tied variable.) 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>
@@ -1367,4 +1376,4 @@ Changes for h2xs as of Perl 5.8.x by Renee Baecker
=head2 Last Changed
-2007/10/11
+2012-01-20
diff --git a/Master/tlpkg/tlperl/lib/pods/perlxstypemap.pod b/Master/tlpkg/tlperl/lib/pods/perlxstypemap.pod
new file mode 100644
index 00000000000..67ddadefef7
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/pods/perlxstypemap.pod
@@ -0,0 +1,699 @@
+=head1 NAME
+
+perlxstypemap - Perl XS C/Perl type mapping
+
+=head1 DESCRIPTION
+
+The more you think about interfacing between two languages, the more
+you'll realize that the majority of programmer effort has to go into
+converting between the data structures that are native to either of
+the languages involved. This trumps other matter such as differing
+calling conventions because the problem space is so much greater.
+There are simply more ways to shove data into memory than there are
+ways to implement a function call.
+
+Perl XS' attempt at a solution to this is the concept of typemaps.
+At an abstract level, a Perl XS typemap is nothing but a recipe for
+converting from a certain Perl data structure to a certain C
+data structure and vice versa. Since there can be C types that
+are sufficiently similar to warrant converting with the same logic,
+XS typemaps are represented by a unique identifier, henceforth
+called an <XS type> in this document. You can then tell the XS
+compiler that multiple C types are to be mapped with the same
+XS typemap.
+
+In your XS code, when you define an argument with a C type or when
+you are using a C<CODE:> and an C<OUTPUT:> section together with a
+C return type of your XSUB, it'll be the typemapping mechanism that
+makes this easy.
+
+=head2 Anatomy of a typemap
+
+In more practical terms, 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.
+
+Each type of section can appear an arbitrary number of times
+and does not have to appear at all. For example, a typemap may
+commonly lack C<INPUT> and C<OUTPUT> sections if all it needs to
+do is associate additional C types with core XS types like T_PTROBJ.
+Lines that start with a hash C<#> are considered comments and ignored
+in the C<TYPEMAP> section, but are considered significant in C<INPUT>
+and C<OUTPUT>. Blank lines are generally ignored.
+
+Traditionally, typemaps needed to be written to a separate file,
+conventionally called C<typemap> in a CPAN distribution. With
+ExtUtils::ParseXS (the XS compiler) version 3.12 or better which
+comes with perl 5.16, typemaps can also be embedded directly into
+XS code using a HERE-doc like syntax:
+
+ TYPEMAP: <<HERE
+ ...
+ HERE
+
+where C<HERE> can be replaced by other identifiers like with normal
+Perl HERE-docs. All details below about the typemap textual format
+remain valid.
+
+The C<TYPEMAP> section should contain one pair of C type and
+XS type per line as follows. An example from the core typemap file:
+
+ TYPEMAP
+ # all variants of char* is handled by the T_PV typemap
+ char * T_PV
+ const char * T_PV
+ unsigned char * T_PV
+ ...
+
+The C<INPUT> and C<OUTPUT> sections have identical formats, that is,
+each unindented line starts a new in- or output map respectively.
+A new in- or output map must start with the name of the XS type to
+map on a line by itself, followed by the code that implements it
+indented on the following lines. Example:
+
+ INPUT
+ T_PV
+ $var = ($type)SvPV_nolen($arg)
+ T_PTR
+ $var = INT2PTR($type,SvIV($arg))
+
+We'll get to the meaning of those Perlish-looking variables in a
+little bit.
+
+Finally, here's an example of the full typemap file for mapping C
+strings of the C<char *> type to Perl scalars/strings:
+
+ TYPEMAP
+ char * T_PV
+
+ INPUT
+ T_PV
+ $var = ($type)SvPV_nolen($arg)
+
+ OUTPUT
+ T_PV
+ sv_setpv((SV*)$arg, $var);
+
+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 C<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 C<PTR2IV>, C<PTR2UV>, C<PTR2NV> macros,
+to map the other way, which may be useful in OUTPUT sections.
+
+=head2 The Role of the typemap File in Your Distribution
+
+The default typemap in the F<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. Instead of using
+an additional F<typemap> file, typemaps may be embedded verbatim in XS
+with a heredoc-like syntax. See the documentation on the C<TYPEMAP:> XS
+keyword.
+
+For CPAN distributions, you can assume that the XS types defined by
+the perl core are already available. Additionally, the core typemap
+has default XS types for a large number of C types. For example, if
+you simply return a C<char *> from your XSUB, the core typemap will
+have this C type associated with the T_PV XS type. That means your
+C string will be copied into the PV (pointer value) slot of a new scalar
+that will be returned from your XSUB to to Perl.
+
+If you're developing a CPAN distribution using XS, you may add your own
+file called F<typemap> to the distribution. That file may contain
+typemaps that either map types that are specific to your code or that
+override the core typemap file's mappings for common C types.
+
+=head2 Sharing typemaps Between CPAN Distributions
+
+Starting with ExtUtils::ParseXS version 3.13_01 (comes with perl 5.16
+and better), it is rather easy to share typemap code between multiple
+CPAN distributions. The general idea is to share it as a module that
+offers a certain API and have the dependent modules declare that as a
+built-time requirement and import the typemap into the XS. An example
+of such a typemap-sharing module on CPAN is
+C<ExtUtils::Typemaps::Basic>. Two steps to getting that module's
+typemaps available in your code:
+
+=over 4
+
+=item *
+
+Declare C<ExtUtils::Typemaps::Basic> as a build-time dependency
+in C<Makefile.PL> (use C<BUILD_REQUIRES>), or in your C<Build.PL>
+(use C<build_requires>).
+
+=item *
+
+Include the following line in the XS section of your XS file:
+(don't break the line)
+
+ INCLUDE_COMMAND: $^X -MExtUtils::Typemaps::Cmd
+ -e "print embeddable_typemap(q{Basic})"
+
+=back
+
+=head2 Writing typemap Entries
+
+Each INPUT or OUTPUT typemap entry is a double-quoted Perl string that
+will be evaluated in the presence of certain variables to get the
+final C code for mapping a certain C type.
+
+This means that you can embed Perl code in your typemap (C) code using
+constructs such as
+C<${ perl code that evaluates to scalar reference here }>. A common
+use case is to generate error messages that refer to the true function
+name even when using the ALIAS XS feature:
+
+ ${ $ALIAS ? \q[GvNAME(CvGV(cv))] : \qq[\"$pname\"] }
+
+For many typemap examples, refer to the core typemap file that can be
+found in the perl source tree at F<lib/ExtUtils/typemap>.
+
+The Perl variables that are available for interpolation into typemaps
+are the following:
+
+=over 4
+
+=item *
+
+I<$var> - the name of the input or output variable, eg. RETVAL for
+return values.
+
+=item *
+
+I<$type> - the raw C type of the parameter, any C<:> replaced with
+C<_>.
+
+=item *
+
+I<$ntype> - the supplied type with C<*> replaced with C<Ptr>.
+e.g. for a type of C<Foo::Bar>, I<$ntype> is C<Foo::Bar>
+
+=item *
+
+I<$arg> - the stack entry, that the parameter is input from or output
+to, e.g. C<ST(0)>
+
+=item *
+
+I<$argoff> - the argument stack offset of the argument. ie. 0 for the
+first argument, etc.
+
+=item *
+
+I<$pname> - the full name of the XSUB, with including the C<PACKAGE>
+name, with any C<PREFIX> stripped. This is the non-ALIAS name.
+
+=item *
+
+I<$Package> - the package specified by the most recent C<PACKAGE>
+keyword.
+
+=item *
+
+I<$ALIAS> - non-zero if the current XSUB has any aliases declared with
+C<ALIAS>.
+
+=back
+
+=head2 Full Listing of Core Typemaps
+
+Each C type is represented by an entry in the typemap file that
+is responsible for converting perl variables (SV, AV, HV, CV, etc.)
+to and from that type. The following sections list all XS types
+that come with perl by default.
+
+=over 4
+
+=item T_SV
+
+This simply passes the C representation of the Perl variable (an SV*)
+in and out of the XS layer. This can be used if the C code wants
+to deal directly with the Perl variable.
+
+=item T_SVREF
+
+Used to pass in and return a reference to an SV.
+
+Note that this typemap does not decrement the reference count
+when returning the reference to an SV*.
+See also: T_SVREF_REFCOUNT_FIXED
+
+=item T_SVREF_FIXED
+
+Used to pass in and return a reference to an SV.
+This is a fixed
+variant of T_SVREF that decrements the refcount appropriately
+when returning a reference to an SV*. Introduced in perl 5.15.4.
+
+=item T_AVREF
+
+From the perl level this is a reference to a perl array.
+From the C level this is a pointer to an AV.
+
+Note that this typemap does not decrement the reference count
+when returning an AV*. See also: T_AVREF_REFCOUNT_FIXED
+
+=item T_AVREF_REFCOUNT_FIXED
+
+From the perl level this is a reference to a perl array.
+From the C level this is a pointer to an AV. This is a fixed
+variant of T_AVREF that decrements the refcount appropriately
+when returning an AV*. Introduced in perl 5.15.4.
+
+=item T_HVREF
+
+From the perl level this is a reference to a perl hash.
+From the C level this is a pointer to an HV.
+
+Note that this typemap does not decrement the reference count
+when returning an HV*. See also: T_HVREF_REFCOUNT_FIXED
+
+=item T_HVREF_REFCOUNT_FIXED
+
+From the perl level this is a reference to a perl hash.
+From the C level this is a pointer to an HV. This is a fixed
+variant of T_HVREF that decrements the refcount appropriately
+when returning an HV*. Introduced in perl 5.15.4.
+
+=item T_CVREF
+
+From the perl level this is a reference to a perl subroutine
+(e.g. $sub = sub { 1 };). From the C level this is a pointer
+to a CV.
+
+Note that this typemap does not decrement the reference count
+when returning an HV*. See also: T_HVREF_REFCOUNT_FIXED
+
+=item T_CVREF_REFCOUNT_FIXED
+
+From the perl level this is a reference to a perl subroutine
+(e.g. $sub = sub { 1 };). From the C level this is a pointer
+to a CV.
+
+This is a fixed
+variant of T_HVREF that decrements the refcount appropriately
+when returning an HV*. Introduced in perl 5.15.4.
+
+=item T_SYSRET
+
+The T_SYSRET typemap is used to process return values from system calls.
+It is only meaningful when passing values from C to perl (there is
+no concept of passing a system return value from Perl to C).
+
+System calls return -1 on error (setting ERRNO with the reason)
+and (usually) 0 on success. If the return value is -1 this typemap
+returns C<undef>. If the return value is not -1, this typemap
+translates a 0 (perl false) to "0 but true" (which
+is perl true) or returns the value itself, to indicate that the
+command succeeded.
+
+The L<POSIX|POSIX> module makes extensive use of this type.
+
+=item T_UV
+
+An unsigned integer.
+
+=item T_IV
+
+A signed integer. This is cast to the required integer type when
+passed to C and converted to an IV when passed back to Perl.
+
+=item T_INT
+
+A signed integer. This typemap converts the Perl value to a native
+integer type (the C<int> type on the current platform). When returning
+the value to perl it is processed in the same way as for T_IV.
+
+Its behaviour is identical to using an C<int> type in XS with T_IV.
+
+=item T_ENUM
+
+An enum value. Used to transfer an enum component
+from C. There is no reason to pass an enum value to C since
+it is stored as an IV inside perl.
+
+=item T_BOOL
+
+A boolean type. This can be used to pass true and false values to and
+from C.
+
+=item T_U_INT
+
+This is for unsigned integers. It is equivalent to using T_UV
+but explicitly casts the variable to type C<unsigned int>.
+The default type for C<unsigned int> is T_UV.
+
+=item T_SHORT
+
+Short integers. This is equivalent to T_IV but explicitly casts
+the return to type C<short>. The default typemap for C<short>
+is T_IV.
+
+=item T_U_SHORT
+
+Unsigned short integers. This is equivalent to T_UV but explicitly
+casts the return to type C<unsigned short>. The default typemap for
+C<unsigned short> is T_UV.
+
+T_U_SHORT is used for type C<U16> in the standard typemap.
+
+=item T_LONG
+
+Long integers. This is equivalent to T_IV but explicitly casts
+the return to type C<long>. The default typemap for C<long>
+is T_IV.
+
+=item T_U_LONG
+
+Unsigned long integers. This is equivalent to T_UV but explicitly
+casts the return to type C<unsigned long>. The default typemap for
+C<unsigned long> is T_UV.
+
+T_U_LONG is used for type C<U32> in the standard typemap.
+
+=item T_CHAR
+
+Single 8-bit characters.
+
+=item T_U_CHAR
+
+An unsigned byte.
+
+=item T_FLOAT
+
+A floating point number. This typemap guarantees to return a variable
+cast to a C<float>.
+
+=item T_NV
+
+A Perl floating point number. Similar to T_IV and T_UV in that the
+return type is cast to the requested numeric type rather than
+to a specific type.
+
+=item T_DOUBLE
+
+A double precision floating point number. This typemap guarantees to
+return a variable cast to a C<double>.
+
+=item T_PV
+
+A string (char *).
+
+=item T_PTR
+
+A memory address (pointer). Typically associated with a C<void *>
+type.
+
+=item T_PTRREF
+
+Similar to T_PTR except that the pointer is stored in a scalar and the
+reference to that scalar is returned to the caller. This can be used
+to hide the actual pointer value from the programmer since it is usually
+not required directly from within perl.
+
+The typemap checks that a scalar reference is passed from perl to XS.
+
+=item T_PTROBJ
+
+Similar to T_PTRREF except that the reference is blessed into a class.
+This allows the pointer to be used as an object. Most commonly used to
+deal with C structs. The typemap checks that the perl object passed
+into the XS routine is of the correct class (or part of a subclass).
+
+The pointer is blessed into a class that is derived from the name
+of type of the pointer but with all '*' in the name replaced with
+'Ptr'.
+
+=item T_REF_IV_REF
+
+NOT YET
+
+=item T_REF_IV_PTR
+
+Similar to T_PTROBJ in that the pointer is blessed into a scalar object.
+The difference is that when the object is passed back into XS it must be
+of the correct type (inheritance is not supported).
+
+The pointer is blessed into a class that is derived from the name
+of type of the pointer but with all '*' in the name replaced with
+'Ptr'.
+
+=item T_PTRDESC
+
+NOT YET
+
+=item T_REFREF
+
+Similar to T_PTRREF, except the pointer stored in the referenced scalar
+is dereferenced and copied to the output variable. This means that
+T_REFREF is to T_PTRREF as T_OPAQUE is to T_OPAQUEPTR. All clear?
+
+Only the INPUT part of this is implemented (Perl to XSUB) and there
+are no known users in core or on CPAN.
+
+=item T_REFOBJ
+
+NOT YET
+
+=item T_OPAQUEPTR
+
+This can be used to store bytes in the string component of the
+SV. Here the representation of the data is irrelevant to perl and the
+bytes themselves are just stored in the SV. It is assumed that the C
+variable is a pointer (the bytes are copied from that memory
+location). If the pointer is pointing to something that is
+represented by 8 bytes then those 8 bytes are stored in the SV (and
+length() will report a value of 8). This entry is similar to T_OPAQUE.
+
+In principle the unpack() command can be used to convert the bytes
+back to a number (if the underlying type is known to be a number).
+
+This entry can be used to store a C structure (the number
+of bytes to be copied is calculated using the C C<sizeof> function)
+and can be used as an alternative to T_PTRREF without having to worry
+about a memory leak (since Perl will clean up the SV).
+
+=item T_OPAQUE
+
+This can be used to store data from non-pointer types in the string
+part of an SV. It is similar to T_OPAQUEPTR except that the
+typemap retrieves the pointer directly rather than assuming it
+is being supplied. For example, if an integer is imported into
+Perl using T_OPAQUE rather than T_IV the underlying bytes representing
+the integer will be stored in the SV but the actual integer value will
+not be available. i.e. The data is opaque to perl.
+
+The data may be retrieved using the C<unpack> function if the
+underlying type of the byte stream is known.
+
+T_OPAQUE supports input and output of simple types.
+T_OPAQUEPTR can be used to pass these bytes back into C if a pointer
+is acceptable.
+
+=item Implicit array
+
+xsubpp supports a special syntax for returning
+packed C arrays to perl. If the XS return type is given as
+
+ array(type, nelem)
+
+xsubpp will copy the contents of C<nelem * sizeof(type)> bytes from
+RETVAL to an SV and push it onto the stack. This is only really useful
+if the number of items to be returned is known at compile time and you
+don't mind having a string of bytes in your SV. Use T_ARRAY to push a
+variable number of arguments onto the return stack (they won't be
+packed as a single string though).
+
+This is similar to using T_OPAQUEPTR but can be used to process more
+than one element.
+
+=item T_PACKED
+
+Calls user-supplied functions for conversion. For C<OUTPUT>
+(XSUB to Perl), a function named C<XS_pack_$ntype> is called
+with the output Perl scalar and the C variable to convert from.
+C<$ntype> is the normalized C type that is to be mapped to
+Perl. Normalized means that all C<*> are replaced by the
+string C<Ptr>. The return value of the function is ignored.
+
+Conversely for C<INPUT> (Perl to XSUB) mapping, the
+function named C<XS_unpack_$ntype> is called with the input Perl
+scalar as argument and the return value is cast to the mapped
+C type and assigned to the output C variable.
+
+An example conversion function for a typemapped struct
+C<foo_t *> might be:
+
+ static void
+ XS_pack_foo_tPtr(SV *out, foo_t *in)
+ {
+ dTHX; /* alas, signature does not include pTHX_ */
+ HV* hash = newHV();
+ hv_stores(hash, "int_member", newSViv(in->int_member));
+ hv_stores(hash, "float_member", newSVnv(in->float_member));
+ /* ... */
+
+ /* mortalize as thy stack is not refcounted */
+ sv_setsv(out, sv_2mortal(newRV_noinc((SV*)hash)));
+ }
+
+The conversion from Perl to C is left as an exercise to the reader,
+but the prototype would be:
+
+ static foo_t *
+ XS_unpack_foo_tPtr(SV *in);
+
+Instead of an actual C function that has to fetch the thread context
+using C<dTHX>, you can define macros of the same name and avoid the
+overhead. Also, keep in mind to possibly free the memory allocated by
+C<XS_unpack_foo_tPtr>.
+
+=item T_PACKEDARRAY
+
+T_PACKEDARRAY is similar to T_PACKED. In fact, the C<INPUT> (Perl
+to XSUB) typemap is indentical, but the C<OUTPUT> typemap passes
+an additional argument to the C<XS_pack_$ntype> function. This
+third parameter indicates the number of elements in the output
+so that the function can handle C arrays sanely. The variable
+needs to be declared by the user and must have the name
+C<count_$ntype> where C<$ntype> is the normalized C type name
+as explained above. The signature of the function would be for
+the example above and C<foo_t **>:
+
+ static void
+ XS_pack_foo_tPtrPtr(SV *out, foo_t *in, UV count_foo_tPtrPtr);
+
+The type of the third parameter is arbitrary as far as the typemap
+is concerned. It just has to be in line with the declared variable.
+
+Of course, unless you know the number of elements in the
+C<sometype **> C array, within your XSUB, the return value from
+C<foo_t ** XS_unpack_foo_tPtrPtr(...)> will be hard to decypher.
+Since the details are all up to the XS author (the typemap user),
+there are several solutions, none of which particularly elegant.
+The most commonly seen solution has been to allocate memory for
+N+1 pointers and assign C<NULL> to the (N+1)th to facilitate
+iteration.
+
+Alternatively, using a customized typemap for your purposes in
+the first place is probably preferrable.
+
+=item T_DATAUNIT
+
+NOT YET
+
+=item T_CALLBACK
+
+NOT YET
+
+=item T_ARRAY
+
+This is used to convert the perl argument list to a C array
+and for pushing the contents of a C array onto the perl
+argument stack.
+
+The usual calling signature is
+
+ @out = array_func( @in );
+
+Any number of arguments can occur in the list before the array but
+the input and output arrays must be the last elements in the list.
+
+When used to pass a perl list to C the XS writer must provide a
+function (named after the array type but with 'Ptr' substituted for
+'*') to allocate the memory required to hold the list. A pointer
+should be returned. It is up to the XS writer to free the memory on
+exit from the function. The variable C<ix_$var> is set to the number
+of elements in the new array.
+
+When returning a C array to Perl the XS writer must provide an integer
+variable called C<size_$var> containing the number of elements in the
+array. This is used to determine how many elements should be pushed
+onto the return argument stack. This is not required on input since
+Perl knows how many arguments are on the stack when the routine is
+called. Ordinarily this variable would be called C<size_RETVAL>.
+
+Additionally, the type of each element is determined from the type of
+the array. If the array uses type C<intArray *> xsubpp will
+automatically work out that it contains variables of type C<int> and
+use that typemap entry to perform the copy of each element. All
+pointer '*' and 'Array' tags are removed from the name to determine
+the subtype.
+
+=item T_STDIO
+
+This is used for passing perl filehandles to and from C using
+C<FILE *> structures.
+
+=item T_INOUT
+
+This is used for passing perl filehandles to and from C using
+C<PerlIO *> structures. The file handle can used for reading and
+writing. This corresponds to the C<+E<lt>> mode, see also T_IN
+and T_OUT.
+
+See L<perliol> for more information on the Perl IO abstraction
+layer. Perl must have been built with C<-Duseperlio>.
+
+There is no check to assert that the filehandle passed from Perl
+to C was created with the right C<open()> mode.
+
+Hint: The L<perlxstut> tutorial covers the T_INOUT, T_IN, and T_OUT
+XS types nicely.
+
+=item T_IN
+
+Same as T_INOUT, but the filehandle that is returned from C to Perl
+can only be used for reading (mode C<E<lt>>).
+
+=item T_OUT
+
+Same as T_INOUT, but the filehandle that is returned from C to Perl
+is set to use the open mode C<+E<gt>>.
+
+=back
+