summaryrefslogtreecommitdiffstats
path: root/upstream/debian-unstable/man1/perl5005delta.1
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:43:11 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:43:11 +0000
commitfc22b3d6507c6745911b9dfcc68f1e665ae13dbc (patch)
treece1e3bce06471410239a6f41282e328770aa404a /upstream/debian-unstable/man1/perl5005delta.1
parentInitial commit. (diff)
downloadmanpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.tar.xz
manpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.zip
Adding upstream version 4.22.0.upstream/4.22.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'upstream/debian-unstable/man1/perl5005delta.1')
-rw-r--r--upstream/debian-unstable/man1/perl5005delta.1939
1 files changed, 939 insertions, 0 deletions
diff --git a/upstream/debian-unstable/man1/perl5005delta.1 b/upstream/debian-unstable/man1/perl5005delta.1
new file mode 100644
index 00000000..09e36db1
--- /dev/null
+++ b/upstream/debian-unstable/man1/perl5005delta.1
@@ -0,0 +1,939 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\" ========================================================================
+.\"
+.IX Title "PERL5005DELTA 1"
+.TH PERL5005DELTA 1 2024-01-12 "perl v5.38.2" "Perl Programmers Reference Guide"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+perl5005delta \- what's new for perl5.005
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+This document describes differences between the 5.004 release and this one.
+.SH "About the new versioning system"
+.IX Header "About the new versioning system"
+Perl is now developed on two tracks: a maintenance track that makes
+small, safe updates to released production versions with emphasis on
+compatibility; and a development track that pursues more aggressive
+evolution. Maintenance releases (which should be considered production
+quality) have subversion numbers that run from \f(CW1\fR to \f(CW49\fR, and
+development releases (which should be considered "alpha" quality) run
+from \f(CW50\fR to \f(CW99\fR.
+.PP
+Perl 5.005 is the combined product of the new dual-track development
+scheme.
+.SH "Incompatible Changes"
+.IX Header "Incompatible Changes"
+.SS "WARNING: This version is not binary compatible with Perl 5.004."
+.IX Subsection "WARNING: This version is not binary compatible with Perl 5.004."
+Starting with Perl 5.004_50 there were many deep and far-reaching changes
+to the language internals. If you have dynamically loaded extensions
+that you built under perl 5.003 or 5.004, you can continue to use them
+with 5.004, but you will need to rebuild and reinstall those extensions
+to use them 5.005. See \fIINSTALL\fR for detailed instructions on how to
+upgrade.
+.SS "Default installation structure has changed"
+.IX Subsection "Default installation structure has changed"
+The new Configure defaults are designed to allow a smooth upgrade from
+5.004 to 5.005, but you should read \fIINSTALL\fR for a detailed
+discussion of the changes in order to adapt them to your system.
+.SS "Perl Source Compatibility"
+.IX Subsection "Perl Source Compatibility"
+When none of the experimental features are enabled, there should be
+very few user-visible Perl source compatibility issues.
+.PP
+If threads are enabled, then some caveats apply. \f(CW@_\fR and \f(CW$_\fR become
+lexical variables. The effect of this should be largely transparent to
+the user, but there are some boundary conditions under which user will
+need to be aware of the issues. For example, \f(CWlocal(@_)\fR results in
+a "Can't localize lexical variable \f(CW@_\fR ..." message. This may be enabled
+in a future version.
+.PP
+Some new keywords have been introduced. These are generally expected to
+have very little impact on compatibility. See "New \f(CW\*(C`INIT\*(C'\fR keyword",
+"New \f(CW\*(C`lock\*(C'\fR keyword", and "New \f(CW\*(C`qr//\*(C'\fR operator".
+.PP
+Certain barewords are now reserved. Use of these will provoke a warning
+if you have asked for them with the \f(CW\*(C`\-w\*(C'\fR switch.
+See "\f(CW\*(C`our\*(C'\fR is now a reserved word".
+.SS "C Source Compatibility"
+.IX Subsection "C Source Compatibility"
+There have been a large number of changes in the internals to support
+the new features in this release.
+.IP \(bu 4
+Core sources now require ANSI C compiler
+.Sp
+An ANSI C compiler is now \fBrequired\fR to build perl. See \fIINSTALL\fR.
+.IP \(bu 4
+All Perl global variables must now be referenced with an explicit prefix
+.Sp
+All Perl global variables that are visible for use by extensions now
+have a \f(CW\*(C`PL_\*(C'\fR prefix. New extensions should \f(CW\*(C`not\*(C'\fR refer to perl globals
+by their unqualified names. To preserve sanity, we provide limited
+backward compatibility for globals that are being widely used like
+\&\f(CW\*(C`sv_undef\*(C'\fR and \f(CW\*(C`na\*(C'\fR (which should now be written as \f(CW\*(C`PL_sv_undef\*(C'\fR,
+\&\f(CW\*(C`PL_na\*(C'\fR etc.)
+.Sp
+If you find that your XS extension does not compile anymore because a
+perl global is not visible, try adding a \f(CW\*(C`PL_\*(C'\fR prefix to the global
+and rebuild.
+.Sp
+It is strongly recommended that all functions in the Perl API that don't
+begin with \f(CW\*(C`perl\*(C'\fR be referenced with a \f(CW\*(C`Perl_\*(C'\fR prefix. The bare function
+names without the \f(CW\*(C`Perl_\*(C'\fR prefix are supported with macros, but this
+support may cease in a future release.
+.Sp
+See perlapi.
+.IP \(bu 4
+Enabling threads has source compatibility issues
+.Sp
+Perl built with threading enabled requires extensions to use the new
+\&\f(CW\*(C`dTHR\*(C'\fR macro to initialize the handle to access per-thread data.
+If you see a compiler error that talks about the variable \f(CW\*(C`thr\*(C'\fR not
+being declared (when building a module that has XS code), you need
+to add \f(CW\*(C`dTHR;\*(C'\fR at the beginning of the block that elicited the error.
+.Sp
+The API function \f(CW\*(C`perl_get_sv("@",GV_ADD)\*(C'\fR should be used instead of
+directly accessing perl globals as \f(CWGvSV(errgv)\fR. The API call is
+backward compatible with existing perls and provides source compatibility
+with threading is enabled.
+.Sp
+See "C Source Compatibility" for more information.
+.SS "Binary Compatibility"
+.IX Subsection "Binary Compatibility"
+This version is NOT binary compatible with older versions. All extensions
+will need to be recompiled. Further binaries built with threads enabled
+are incompatible with binaries built without. This should largely be
+transparent to the user, as all binary incompatible configurations have
+their own unique architecture name, and extension binaries get installed at
+unique locations. This allows coexistence of several configurations in
+the same directory hierarchy. See \fIINSTALL\fR.
+.SS "Security fixes may affect compatibility"
+.IX Subsection "Security fixes may affect compatibility"
+A few taint leaks and taint omissions have been corrected. This may lead
+to "failure" of scripts that used to work with older versions. Compiling
+with \-DINCOMPLETE_TAINTS provides a perl with minimal amounts of changes
+to the tainting behavior. But note that the resulting perl will have
+known insecurities.
+.PP
+Oneliners with the \f(CW\*(C`\-e\*(C'\fR switch do not create temporary files anymore.
+.SS "Relaxed new mandatory warnings introduced in 5.004"
+.IX Subsection "Relaxed new mandatory warnings introduced in 5.004"
+Many new warnings that were introduced in 5.004 have been made
+optional. Some of these warnings are still present, but perl's new
+features make them less often a problem. See "New Diagnostics".
+.SS Licensing
+.IX Subsection "Licensing"
+Perl has a new Social Contract for contributors. See \fIPorting/Contract\fR.
+.PP
+The license included in much of the Perl documentation has changed.
+Most of the Perl documentation was previously under the implicit GNU
+General Public License or the Artistic License (at the user's choice).
+Now much of the documentation unambiguously states the terms under which
+it may be distributed. Those terms are in general much less restrictive
+than the GNU GPL. See perl and the individual perl manpages listed
+therein.
+.SH "Core Changes"
+.IX Header "Core Changes"
+.SS Threads
+.IX Subsection "Threads"
+WARNING: Threading is considered an \fBexperimental\fR feature. Details of the
+implementation may change without notice. There are known limitations
+and some bugs. These are expected to be fixed in future versions.
+.PP
+See \fIREADME.threads\fR.
+.SS Compiler
+.IX Subsection "Compiler"
+WARNING: The Compiler and related tools are considered \fBexperimental\fR.
+Features may change without notice, and there are known limitations
+and bugs. Since the compiler is fully external to perl, the default
+configuration will build and install it.
+.PP
+The Compiler produces three different types of transformations of a
+perl program. The C backend generates C code that captures perl's state
+just before execution begins. It eliminates the compile-time overheads
+of the regular perl interpreter, but the run-time performance remains
+comparatively the same. The CC backend generates optimized C code
+equivalent to the code path at run-time. The CC backend has greater
+potential for big optimizations, but only a few optimizations are
+implemented currently. The Bytecode backend generates a platform
+independent bytecode representation of the interpreter's state
+just before execution. Thus, the Bytecode back end also eliminates
+much of the compilation overhead of the interpreter.
+.PP
+The compiler comes with several valuable utilities.
+.PP
+\&\f(CW\*(C`B::Lint\*(C'\fR is an experimental module to detect and warn about suspicious
+code, especially the cases that the \f(CW\*(C`\-w\*(C'\fR switch does not detect.
+.PP
+\&\f(CW\*(C`B::Deparse\*(C'\fR can be used to demystify perl code, and understand
+how perl optimizes certain constructs.
+.PP
+\&\f(CW\*(C`B::Xref\*(C'\fR generates cross reference reports of all definition and use
+of variables, subroutines and formats in a program.
+.PP
+\&\f(CW\*(C`B::Showlex\*(C'\fR show the lexical variables used by a subroutine or file
+at a glance.
+.PP
+\&\f(CW\*(C`perlcc\*(C'\fR is a simple frontend for compiling perl.
+.PP
+See \f(CW\*(C`ext/B/README\*(C'\fR, B, and the respective compiler modules.
+.SS "Regular Expressions"
+.IX Subsection "Regular Expressions"
+Perl's regular expression engine has been seriously overhauled, and
+many new constructs are supported. Several bugs have been fixed.
+.PP
+Here is an itemized summary:
+.IP "Many new and improved optimizations" 4
+.IX Item "Many new and improved optimizations"
+Changes in the RE engine:
+.Sp
+.Vb 7
+\& Unneeded nodes removed;
+\& Substrings merged together;
+\& New types of nodes to process (SUBEXPR)* and similar expressions
+\& quickly, used if the SUBEXPR has no side effects and matches
+\& strings of the same length;
+\& Better optimizations by lookup for constant substrings;
+\& Better search for constants substrings anchored by $ ;
+.Ve
+.Sp
+Changes in Perl code using RE engine:
+.Sp
+.Vb 5
+\& More optimizations to s/longer/short/;
+\& study() was not working;
+\& /blah/ may be optimized to an analogue of index() if $& $\` $\*(Aq not seen;
+\& Unneeded copying of matched\-against string removed;
+\& Only matched part of the string is copying if $\` $\*(Aq were not seen;
+.Ve
+.IP "Many bug fixes" 4
+.IX Item "Many bug fixes"
+Note that only the major bug fixes are listed here. See \fIChanges\fR for others.
+.Sp
+.Vb 10
+\& Backtracking might not restore start of $3.
+\& No feedback if max count for * or + on "complex" subexpression
+\& was reached, similarly (but at compile time) for {3,34567}
+\& Primitive restrictions on max count introduced to decrease a
+\& possibility of a segfault;
+\& (ZERO\-LENGTH)* could segfault;
+\& (ZERO\-LENGTH)* was prohibited;
+\& Long REs were not allowed;
+\& /RE/g could skip matches at the same position after a
+\& zero\-length match;
+.Ve
+.IP "New regular expression constructs" 4
+.IX Item "New regular expression constructs"
+The following new syntax elements are supported:
+.Sp
+.Vb 8
+\& (?<=RE)
+\& (?<!RE)
+\& (?{ CODE })
+\& (?i\-x)
+\& (?i:RE)
+\& (?(COND)YES_RE|NO_RE)
+\& (?>RE)
+\& \ez
+.Ve
+.IP "New operator for precompiled regular expressions" 4
+.IX Item "New operator for precompiled regular expressions"
+See "New \f(CW\*(C`qr//\*(C'\fR operator".
+.IP "Other improvements" 4
+.IX Item "Other improvements"
+.Vb 7
+\& Better debugging output (possibly with colors),
+\& even from non\-debugging Perl;
+\& RE engine code now looks like C, not like assembler;
+\& Behaviour of RE modifiable by \`use re\*(Aq directive;
+\& Improved documentation;
+\& Test suite significantly extended;
+\& Syntax [:^upper:] etc., reserved inside character classes;
+.Ve
+.IP "Incompatible changes" 4
+.IX Item "Incompatible changes"
+.Vb 4
+\& (?i) localized inside enclosing group;
+\& $( is not interpolated into RE any more;
+\& /RE/g may match at the same position (with non\-zero length)
+\& after a zero\-length match (bug fix).
+.Ve
+.PP
+See perlre and perlop.
+.SS "Improved \fBmalloc()\fP"
+.IX Subsection "Improved malloc()"
+See banner at the beginning of \f(CW\*(C`malloc.c\*(C'\fR for details.
+.SS "Quicksort is internally implemented"
+.IX Subsection "Quicksort is internally implemented"
+Perl now contains its own highly optimized \fBqsort()\fR routine. The new \fBqsort()\fR
+is resistant to inconsistent comparison functions, so Perl's \f(CWsort()\fR will
+not provoke coredumps any more when given poorly written sort subroutines.
+(Some C library \f(CWqsort()\fRs that were being used before used to have this
+problem.) In our testing, the new \f(CWqsort()\fR required the minimal number
+of pair-wise compares on average, among all known \f(CWqsort()\fR implementations.
+.PP
+See \f(CW\*(C`perlfunc/sort\*(C'\fR.
+.SS "Reliable signals"
+.IX Subsection "Reliable signals"
+Perl's signal handling is susceptible to random crashes, because signals
+arrive asynchronously, and the Perl runtime is not reentrant at arbitrary
+times.
+.PP
+However, one experimental implementation of reliable signals is available
+when threads are enabled. See \f(CW\*(C`Thread::Signal\*(C'\fR. Also see \fIINSTALL\fR for
+how to build a Perl capable of threads.
+.SS "Reliable stack pointers"
+.IX Subsection "Reliable stack pointers"
+The internals now reallocate the perl stack only at predictable times.
+In particular, magic calls never trigger reallocations of the stack,
+because all reentrancy of the runtime is handled using a "stack of stacks".
+This should improve reliability of cached stack pointers in the internals
+and in XSUBs.
+.SS "More generous treatment of carriage returns"
+.IX Subsection "More generous treatment of carriage returns"
+Perl used to complain if it encountered literal carriage returns in
+scripts. Now they are mostly treated like whitespace within program text.
+Inside string literals and here documents, literal carriage returns are
+ignored if they occur paired with linefeeds, or get interpreted as whitespace
+if they stand alone. This behavior means that literal carriage returns
+in files should be avoided. You can get the older, more compatible (but
+less generous) behavior by defining the preprocessor symbol
+\&\f(CW\*(C`PERL_STRICT_CR\*(C'\fR when building perl. Of course, all this has nothing
+whatever to do with how escapes like \f(CW\*(C`\er\*(C'\fR are handled within strings.
+.PP
+Note that this doesn't somehow magically allow you to keep all text files
+in DOS format. The generous treatment only applies to files that perl
+itself parses. If your C compiler doesn't allow carriage returns in
+files, you may still be unable to build modules that need a C compiler.
+.SS "Memory leaks"
+.IX Subsection "Memory leaks"
+\&\f(CW\*(C`substr\*(C'\fR, \f(CW\*(C`pos\*(C'\fR and \f(CW\*(C`vec\*(C'\fR don't leak memory anymore when used in lvalue
+context. Many small leaks that impacted applications that embed multiple
+interpreters have been fixed.
+.SS "Better support for multiple interpreters"
+.IX Subsection "Better support for multiple interpreters"
+The build-time option \f(CW\*(C`\-DMULTIPLICITY\*(C'\fR has had many of the details
+reworked. Some previously global variables that should have been
+per-interpreter now are. With care, this allows interpreters to call
+each other. See the \f(CW\*(C`PerlInterp\*(C'\fR extension on CPAN.
+.SS "Behavior of \fBlocal()\fP on array and hash elements is now well-defined"
+.IX Subsection "Behavior of local() on array and hash elements is now well-defined"
+See "Temporary Values via \fBlocal()\fR" in perlsub.
+.ie n .SS """%!"" is transparently tied to the Errno module"
+.el .SS "\f(CW%!\fP is transparently tied to the Errno module"
+.IX Subsection "%! is transparently tied to the Errno module"
+See perlvar, and Errno.
+.SS "Pseudo-hashes are supported"
+.IX Subsection "Pseudo-hashes are supported"
+See perlref.
+.ie n .SS """EXPR foreach EXPR"" is supported"
+.el .SS "\f(CWEXPR foreach EXPR\fP is supported"
+.IX Subsection "EXPR foreach EXPR is supported"
+See perlsyn.
+.SS "Keywords can be globally overridden"
+.IX Subsection "Keywords can be globally overridden"
+See perlsub.
+.ie n .SS "$^E is meaningful on Win32"
+.el .SS "\f(CW$^E\fP is meaningful on Win32"
+.IX Subsection "$^E is meaningful on Win32"
+See perlvar.
+.ie n .SS """foreach (1..1000000)"" optimized"
+.el .SS "\f(CWforeach (1..1000000)\fP optimized"
+.IX Subsection "foreach (1..1000000) optimized"
+\&\f(CW\*(C`foreach (1..1000000)\*(C'\fR is now optimized into a counting loop. It does
+not try to allocate a 1000000\-size list anymore.
+.ie n .SS """Foo::"" can be used as implicitly quoted package name"
+.el .SS "\f(CWFoo::\fP can be used as implicitly quoted package name"
+.IX Subsection "Foo:: can be used as implicitly quoted package name"
+Barewords caused unintuitive behavior when a subroutine with the same
+name as a package happened to be defined. Thus, \f(CW\*(C`new Foo @args\*(C'\fR,
+use the result of the call to \f(CWFoo()\fR instead of \f(CW\*(C`Foo\*(C'\fR being treated
+as a literal. The recommended way to write barewords in the indirect
+object slot is \f(CW\*(C`new Foo:: @args\*(C'\fR. Note that the method \f(CWnew()\fR is
+called with a first argument of \f(CW\*(C`Foo\*(C'\fR, not \f(CW\*(C`Foo::\*(C'\fR when you do that.
+.ie n .SS """exists $Foo::{Bar::}"" tests existence of a package"
+.el .SS "\f(CWexists $Foo::{Bar::}\fP tests existence of a package"
+.IX Subsection "exists $Foo::{Bar::} tests existence of a package"
+It was impossible to test for the existence of a package without
+actually creating it before. Now \f(CW\*(C`exists $Foo::{Bar::}\*(C'\fR can be
+used to test if the \f(CW\*(C`Foo::Bar\*(C'\fR namespace has been created.
+.SS "Better locale support"
+.IX Subsection "Better locale support"
+See perllocale.
+.SS "Experimental support for 64\-bit platforms"
+.IX Subsection "Experimental support for 64-bit platforms"
+Perl5 has always had 64\-bit support on systems with 64\-bit longs.
+Starting with 5.005, the beginnings of experimental support for systems
+with 32\-bit long and 64\-bit 'long long' integers has been added.
+If you add \-DUSE_LONG_LONG to your ccflags in config.sh (or manually
+define it in perl.h) then perl will be built with 'long long' support.
+There will be many compiler warnings, and the resultant perl may not
+work on all systems. There are many other issues related to
+third-party extensions and libraries. This option exists to allow
+people to work on those issues.
+.SS "\fBprototype()\fP returns useful results on builtins"
+.IX Subsection "prototype() returns useful results on builtins"
+See "prototype" in perlfunc.
+.SS "Extended support for exception handling"
+.IX Subsection "Extended support for exception handling"
+\&\f(CWdie()\fR now accepts a reference value, and \f(CW$@\fR gets set to that
+value in exception traps. This makes it possible to propagate
+exception objects. This is an undocumented \fBexperimental\fR feature.
+.SS "Re-blessing in \fBDESTROY()\fP supported for chaining \fBDESTROY()\fP methods"
+.IX Subsection "Re-blessing in DESTROY() supported for chaining DESTROY() methods"
+See "Destructors" in perlobj.
+.ie n .SS "All ""printf"" format conversions are handled internally"
+.el .SS "All \f(CWprintf\fP format conversions are handled internally"
+.IX Subsection "All printf format conversions are handled internally"
+See "printf" in perlfunc.
+.ie n .SS "New ""INIT"" keyword"
+.el .SS "New \f(CWINIT\fP keyword"
+.IX Subsection "New INIT keyword"
+\&\f(CW\*(C`INIT\*(C'\fR subs are like \f(CW\*(C`BEGIN\*(C'\fR and \f(CW\*(C`END\*(C'\fR, but they get run just before
+the perl runtime begins execution. e.g., the Perl Compiler makes use of
+\&\f(CW\*(C`INIT\*(C'\fR blocks to initialize and resolve pointers to XSUBs.
+.ie n .SS "New ""lock"" keyword"
+.el .SS "New \f(CWlock\fP keyword"
+.IX Subsection "New lock keyword"
+The \f(CW\*(C`lock\*(C'\fR keyword is the fundamental synchronization primitive
+in threaded perl. When threads are not enabled, it is currently a noop.
+.PP
+To minimize impact on source compatibility this keyword is "weak", i.e., any
+user-defined subroutine of the same name overrides it, unless a \f(CW\*(C`use Thread\*(C'\fR
+has been seen.
+.ie n .SS "New ""qr//"" operator"
+.el .SS "New \f(CWqr//\fP operator"
+.IX Subsection "New qr// operator"
+The \f(CW\*(C`qr//\*(C'\fR operator, which is syntactically similar to the other quote-like
+operators, is used to create precompiled regular expressions. This compiled
+form can now be explicitly passed around in variables, and interpolated in
+other regular expressions. See perlop.
+.ie n .SS """our"" is now a reserved word"
+.el .SS "\f(CWour\fP is now a reserved word"
+.IX Subsection "our is now a reserved word"
+Calling a subroutine with the name \f(CW\*(C`our\*(C'\fR will now provoke a warning when
+using the \f(CW\*(C`\-w\*(C'\fR switch.
+.SS "Tied arrays are now fully supported"
+.IX Subsection "Tied arrays are now fully supported"
+See Tie::Array.
+.SS "Tied handles support is better"
+.IX Subsection "Tied handles support is better"
+Several missing hooks have been added. There is also a new base class for
+TIEARRAY implementations. See Tie::Array.
+.SS "4th argument to substr"
+.IX Subsection "4th argument to substr"
+\&\fBsubstr()\fR can now both return and replace in one operation. The optional
+4th argument is the replacement string. See "substr" in perlfunc.
+.SS "Negative LENGTH argument to splice"
+.IX Subsection "Negative LENGTH argument to splice"
+\&\fBsplice()\fR with a negative LENGTH argument now work similar to what the
+LENGTH did for \fBsubstr()\fR. Previously a negative LENGTH was treated as
+0. See "splice" in perlfunc.
+.SS "Magic lvalues are now more magical"
+.IX Subsection "Magic lvalues are now more magical"
+When you say something like \f(CW\*(C`substr($x, 5) = "hi"\*(C'\fR, the scalar returned
+by \fBsubstr()\fR is special, in that any modifications to it affect \f(CW$x\fR.
+(This is called a 'magic lvalue' because an 'lvalue' is something on
+the left side of an assignment.) Normally, this is exactly what you
+would expect to happen, but Perl uses the same magic if you use \fBsubstr()\fR,
+\&\fBpos()\fR, or \fBvec()\fR in a context where they might be modified, like taking
+a reference with \f(CW\*(C`\e\*(C'\fR or as an argument to a sub that modifies \f(CW@_\fR.
+In previous versions, this 'magic' only went one way, but now changes
+to the scalar the magic refers to ($x in the above example) affect the
+magic lvalue too. For instance, this code now acts differently:
+.PP
+.Vb 6
+\& $x = "hello";
+\& sub printit {
+\& $x = "g\*(Aqbye";
+\& print $_[0], "\en";
+\& }
+\& printit(substr($x, 0, 5));
+.Ve
+.PP
+In previous versions, this would print "hello", but it now prints "g'bye".
+.SS "<> now reads in records"
+.IX Subsection "<> now reads in records"
+If \f(CW$/\fR is a reference to an integer, or a scalar that holds an integer,
+<> will read in records instead of lines. For more info, see
+"$/" in perlvar.
+.SH "Supported Platforms"
+.IX Header "Supported Platforms"
+Configure has many incremental improvements. Site-wide policy for building
+perl can now be made persistent, via Policy.sh. Configure also records
+the command-line arguments used in \fIconfig.sh\fR.
+.SS "New Platforms"
+.IX Subsection "New Platforms"
+BeOS is now supported. See \fIREADME.beos\fR.
+.PP
+DOS is now supported under the DJGPP tools. See \fIREADME.dos\fR (installed
+as perldos on some systems).
+.PP
+MiNT is now supported. See \fIREADME.mint\fR.
+.PP
+MPE/iX is now supported. See README.mpeix.
+.PP
+MVS (aka OS390, aka Open Edition) is now supported. See \fIREADME.os390\fR
+(installed as perlos390 on some systems).
+.PP
+Stratus VOS is now supported. See \fIREADME.vos\fR.
+.SS "Changes in existing support"
+.IX Subsection "Changes in existing support"
+Win32 support has been vastly enhanced. Support for Perl Object, a C++
+encapsulation of Perl. GCC and EGCS are now supported on Win32.
+See \fIREADME.win32\fR, aka perlwin32.
+.PP
+VMS configuration system has been rewritten. See \fIREADME.vms\fR (installed
+as \fIREADME_vms\fR on some systems).
+.PP
+The hints files for most Unix platforms have seen incremental improvements.
+.SH "Modules and Pragmata"
+.IX Header "Modules and Pragmata"
+.SS "New Modules"
+.IX Subsection "New Modules"
+.IP B 4
+.IX Item "B"
+Perl compiler and tools. See B.
+.IP Data::Dumper 4
+.IX Item "Data::Dumper"
+A module to pretty print Perl data. See Data::Dumper.
+.IP Dumpvalue 4
+.IX Item "Dumpvalue"
+A module to dump perl values to the screen. See Dumpvalue.
+.IP Errno 4
+.IX Item "Errno"
+A module to look up errors more conveniently. See Errno.
+.IP File::Spec 4
+.IX Item "File::Spec"
+A portable API for file operations.
+.IP ExtUtils::Installed 4
+.IX Item "ExtUtils::Installed"
+Query and manage installed modules.
+.IP ExtUtils::Packlist 4
+.IX Item "ExtUtils::Packlist"
+Manipulate .packlist files.
+.IP Fatal 4
+.IX Item "Fatal"
+Make functions/builtins succeed or die.
+.IP IPC::SysV 4
+.IX Item "IPC::SysV"
+Constants and other support infrastructure for System V IPC operations
+in perl.
+.IP Test 4
+.IX Item "Test"
+A framework for writing test suites.
+.IP Tie::Array 4
+.IX Item "Tie::Array"
+Base class for tied arrays.
+.IP Tie::Handle 4
+.IX Item "Tie::Handle"
+Base class for tied handles.
+.IP Thread 4
+.IX Item "Thread"
+Perl thread creation, manipulation, and support.
+.IP attrs 4
+.IX Item "attrs"
+Set subroutine attributes.
+.IP fields 4
+.IX Item "fields"
+Compile-time class fields.
+.IP re 4
+.IX Item "re"
+Various pragmata to control behavior of regular expressions.
+.SS "Changes in existing modules"
+.IX Subsection "Changes in existing modules"
+.IP Benchmark 4
+.IX Item "Benchmark"
+You can now run tests for \fIx\fR seconds instead of guessing the right
+number of tests to run.
+.Sp
+Keeps better time.
+.IP Carp 4
+.IX Item "Carp"
+Carp has a new function \fBcluck()\fR. \fBcluck()\fR warns, like \fBcarp()\fR, but also adds
+a stack backtrace to the error message, like \fBconfess()\fR.
+.IP CGI 4
+.IX Item "CGI"
+CGI has been updated to version 2.42.
+.IP Fcntl 4
+.IX Item "Fcntl"
+More Fcntl constants added: F_SETLK64, F_SETLKW64, O_LARGEFILE for
+large (more than 4G) file access (the 64\-bit support is not yet
+working, though, so no need to get overly excited), Free/Net/OpenBSD
+locking behaviour flags F_FLOCK, F_POSIX, Linux F_SHLCK, and
+O_ACCMODE: the mask of O_RDONLY, O_WRONLY, and O_RDWR.
+.IP Math::Complex 4
+.IX Item "Math::Complex"
+The accessors methods Re, Im, arg, abs, rho, theta, methods can
+($z\->\fBRe()\fR) now also act as mutators ($z\->\fBRe\fR\|(3)).
+.IP Math::Trig 4
+.IX Item "Math::Trig"
+A little bit of radial trigonometry (cylindrical and spherical) added,
+for example the great circle distance.
+.IP POSIX 4
+.IX Item "POSIX"
+POSIX now has its own platform-specific hints files.
+.IP DB_File 4
+.IX Item "DB_File"
+DB_File supports version 2.x of Berkeley DB. See \f(CW\*(C`ext/DB_File/Changes\*(C'\fR.
+.IP MakeMaker 4
+.IX Item "MakeMaker"
+MakeMaker now supports writing empty makefiles, provides a way to
+specify that site \fBumask()\fR policy should be honored. There is also
+better support for manipulation of .packlist files, and getting
+information about installed modules.
+.Sp
+Extensions that have both architecture-dependent and
+architecture-independent files are now always installed completely in
+the architecture-dependent locations. Previously, the shareable parts
+were shared both across architectures and across perl versions and were
+therefore liable to be overwritten with newer versions that might have
+subtle incompatibilities.
+.IP CPAN 4
+.IX Item "CPAN"
+See perlmodinstall and CPAN.
+.IP Cwd 4
+.IX Item "Cwd"
+Cwd::cwd is faster on most platforms.
+.SH "Utility Changes"
+.IX Header "Utility Changes"
+\&\f(CW\*(C`h2ph\*(C'\fR and related utilities have been vastly overhauled.
+.PP
+\&\f(CW\*(C`perlcc\*(C'\fR, a new experimental front end for the compiler is available.
+.PP
+The crude GNU \f(CW\*(C`configure\*(C'\fR emulator is now called \f(CW\*(C`configure.gnu\*(C'\fR to
+avoid trampling on \f(CW\*(C`Configure\*(C'\fR under case-insensitive filesystems.
+.PP
+\&\f(CW\*(C`perldoc\*(C'\fR used to be rather slow. The slower features are now optional.
+In particular, case-insensitive searches need the \f(CW\*(C`\-i\*(C'\fR switch, and
+recursive searches need \f(CW\*(C`\-r\*(C'\fR. You can set these switches in the
+\&\f(CW\*(C`PERLDOC\*(C'\fR environment variable to get the old behavior.
+.SH "Documentation Changes"
+.IX Header "Documentation Changes"
+Config.pm now has a glossary of variables.
+.PP
+\&\fIPorting/patching.pod\fR has detailed instructions on how to create and
+submit patches for perl.
+.PP
+perlport specifies guidelines on how to write portably.
+.PP
+perlmodinstall describes how to fetch and install modules from \f(CW\*(C`CPAN\*(C'\fR
+sites.
+.PP
+Some more Perl traps are documented now. See perltrap.
+.PP
+perlopentut gives a tutorial on using \fBopen()\fR.
+.PP
+perlreftut gives a tutorial on references.
+.PP
+perlthrtut gives a tutorial on threads.
+.SH "New Diagnostics"
+.IX Header "New Diagnostics"
+.IP "Ambiguous call resolved as CORE::%s(), qualify as such or use &" 4
+.IX Item "Ambiguous call resolved as CORE::%s(), qualify as such or use &"
+(W) A subroutine you have declared has the same name as a Perl keyword,
+and you have used the name without qualification for calling one or the
+other. Perl decided to call the builtin because the subroutine is
+not imported.
+.Sp
+To force interpretation as a subroutine call, either put an ampersand
+before the subroutine name, or qualify the name with its package.
+Alternatively, you can import the subroutine (or pretend that it's
+imported with the \f(CW\*(C`use subs\*(C'\fR pragma).
+.Sp
+To silently interpret it as the Perl operator, use the \f(CW\*(C`CORE::\*(C'\fR prefix
+on the operator (e.g. \f(CWCORE::log($x)\fR) or by declaring the subroutine
+to be an object method (see "attrs").
+.IP "Bad index while coercing array into hash" 4
+.IX Item "Bad index while coercing array into hash"
+(F) The index looked up in the hash found as the 0'th element of a
+pseudo-hash is not legal. Index values must be at 1 or greater.
+See perlref.
+.IP "Bareword ""%s"" refers to nonexistent package" 4
+.IX Item "Bareword ""%s"" refers to nonexistent package"
+(W) You used a qualified bareword of the form \f(CW\*(C`Foo::\*(C'\fR, but
+the compiler saw no other uses of that namespace before that point.
+Perhaps you need to predeclare a package?
+.IP "Can't call method ""%s"" on an undefined value" 4
+.IX Item "Can't call method ""%s"" on an undefined value"
+(F) You used the syntax of a method call, but the slot filled by the
+object reference or package name contains an undefined value.
+Something like this will reproduce the error:
+.Sp
+.Vb 3
+\& $BADREF = 42;
+\& process $BADREF 1,2,3;
+\& $BADREF\->process(1,2,3);
+.Ve
+.IP "Can't check filesystem of script ""%s"" for nosuid" 4
+.IX Item "Can't check filesystem of script ""%s"" for nosuid"
+(P) For some reason you can't check the filesystem of the script for nosuid.
+.IP "Can't coerce array into hash" 4
+.IX Item "Can't coerce array into hash"
+(F) You used an array where a hash was expected, but the array has no
+information on how to map from keys to array indices. You can do that
+only with arrays that have a hash reference at index 0.
+.IP "Can't goto subroutine from an eval-string" 4
+.IX Item "Can't goto subroutine from an eval-string"
+(F) The "goto subroutine" call can't be used to jump out of an eval "string".
+(You can use it to jump out of an eval {BLOCK}, but you probably don't want to.)
+.IP "Can't localize pseudo-hash element" 4
+.IX Item "Can't localize pseudo-hash element"
+(F) You said something like \f(CW\*(C`local $ar\->{\*(Aqkey\*(Aq}\*(C'\fR, where \f(CW$ar\fR is
+a reference to a pseudo-hash. That hasn't been implemented yet, but
+you can get a similar effect by localizing the corresponding array
+element directly: \f(CW\*(C`local $ar\->[$ar\->[0]{\*(Aqkey\*(Aq}]\*(C'\fR.
+.IP "Can't use %%! because Errno.pm is not available" 4
+.IX 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
+provide symbolic names for \f(CW$!\fR errno values.
+.IP "Cannot find an opnumber for ""%s""" 4
+.IX Item "Cannot find an opnumber for ""%s"""
+(F) A string of a form \f(CW\*(C`CORE::word\*(C'\fR was given to \fBprototype()\fR, but
+there is no builtin with the name \f(CW\*(C`word\*(C'\fR.
+.IP "Character class syntax [. .] is reserved for future extensions" 4
+.IX Item "Character class syntax [. .] is reserved for future extensions"
+(W) Within regular expression character classes ([]) the syntax beginning
+with "[." and ending with ".]" is reserved for future extensions.
+If you need to represent those character sequences inside a regular
+expression character class, just quote the square brackets with the
+backslash: "\e[." and ".\e]".
+.IP "Character class syntax [: :] is reserved for future extensions" 4
+.IX Item "Character class syntax [: :] is reserved for future extensions"
+(W) Within regular expression character classes ([]) the syntax beginning
+with "[:" and ending with ":]" is reserved for future extensions.
+If you need to represent those character sequences inside a regular
+expression character class, just quote the square brackets with the
+backslash: "\e[:" and ":\e]".
+.IP "Character class syntax [= =] is reserved for future extensions" 4
+.IX Item "Character class syntax [= =] is reserved for future extensions"
+(W) Within regular expression character classes ([]) the syntax
+beginning with "[=" and ending with "=]" is reserved for future extensions.
+If you need to represent those character sequences inside a regular
+expression character class, just quote the square brackets with the
+backslash: "\e[=" and "=\e]".
+.ie n .IP "%s: Eval-group in insecure regular expression" 4
+.el .IP "\f(CW%s:\fR Eval-group in insecure regular expression" 4
+.IX Item "%s: Eval-group in insecure regular expression"
+(F) Perl detected tainted data when trying to compile a regular expression
+that contains the \f(CW\*(C`(?{ ... })\*(C'\fR zero-width assertion, which is unsafe.
+See "(?{ code })" in perlre, and perlsec.
+.ie n .IP "%s: Eval-group not allowed, use re 'eval'" 4
+.el .IP "\f(CW%s:\fR Eval-group not allowed, use re 'eval'" 4
+.IX Item "%s: Eval-group not allowed, use re 'eval'"
+(F) A regular expression contained the \f(CW\*(C`(?{ ... })\*(C'\fR zero-width assertion,
+but that construct is only allowed when the \f(CW\*(C`use re \*(Aqeval\*(Aq\*(C'\fR pragma is
+in effect. See "(?{ code })" in perlre.
+.ie n .IP "%s: Eval-group not allowed at run time" 4
+.el .IP "\f(CW%s:\fR Eval-group not allowed at run time" 4
+.IX Item "%s: Eval-group not allowed at run time"
+(F) Perl tried to compile a regular expression containing the \f(CW\*(C`(?{ ... })\*(C'\fR
+zero-width assertion at run time, as it would when the pattern contains
+interpolated values. Since that is a security risk, it is not allowed.
+If you insist, you may still do this by explicitly building the pattern
+from an interpolated string at run time and using that in an \fBeval()\fR.
+See "(?{ code })" in perlre.
+.IP "Explicit blessing to '' (assuming package main)" 4
+.IX Item "Explicit blessing to '' (assuming package main)"
+(W) You are blessing a reference to a zero length string. This has
+the effect of blessing the reference into the package main. This is
+usually not what you want. Consider providing a default target
+package, e.g. bless($ref, \f(CW$p\fR || 'MyPackage');
+.IP "Illegal hex digit ignored" 4
+.IX Item "Illegal hex digit ignored"
+(W) You may have tried to use a character other than 0 \- 9 or A \- F in a
+hexadecimal number. Interpretation of the hexadecimal number stopped
+before the illegal character.
+.IP "No such array field" 4
+.IX Item "No such array field"
+(F) You tried to access an array as a hash, but the field name used is
+not defined. The hash at index 0 should map all valid field names to
+array indices for that to work.
+.ie n .IP "No such field ""%s"" in variable %s of type %s" 4
+.el .IP "No such field ""%s"" in variable \f(CW%s\fR of type \f(CW%s\fR" 4
+.IX Item "No such field ""%s"" in variable %s of type %s"
+(F) You tried to access a field of a typed variable where the type
+does not know about the field name. The field names are looked up in
+the \f(CW%FIELDS\fR hash in the type package at compile time. The \f(CW%FIELDS\fR hash
+is usually set up with the 'fields' pragma.
+.IP "Out of memory during ridiculously large request" 4
+.IX Item "Out of memory during ridiculously large request"
+(F) You can't allocate more than 2^31+"small amount" bytes. This error
+is most likely to be caused by a typo in the Perl program. e.g., \f(CW$arr[time]\fR
+instead of \f(CW$arr[$time]\fR.
+.IP "Range iterator outside integer range" 4
+.IX Item "Range iterator outside integer range"
+(F) One (or both) of the numeric arguments to the range operator ".."
+are outside the range which can be represented by integers internally.
+One possible workaround is to force Perl to use magical string
+increment by prepending "0" to your numbers.
+.ie n .IP "Recursive inheritance detected while looking for method '%s' %s" 4
+.el .IP "Recursive inheritance detected while looking for method '%s' \f(CW%s\fR" 4
+.IX Item "Recursive inheritance detected while looking for method '%s' %s"
+(F) More than 100 levels of inheritance were encountered while invoking a
+method. Probably indicates an unintended loop in your inheritance hierarchy.
+.IP "Reference found where even-sized list expected" 4
+.IX Item "Reference found where even-sized list expected"
+(W) 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 \fBpairs\fR.
+.Sp
+.Vb 4
+\& %hash = { one => 1, two => 2, }; # WRONG
+\& %hash = [ qw/ an anon array / ]; # WRONG
+\& %hash = ( one => 1, two => 2, ); # right
+\& %hash = qw( one 1 two 2 ); # also fine
+.Ve
+.IP "Undefined value assigned to typeglob" 4
+.IX Item "Undefined value assigned to typeglob"
+(W) An undefined value was assigned to a typeglob, a la \f(CW\*(C`*foo = undef\*(C'\fR.
+This does nothing. It's possible that you really mean \f(CW\*(C`undef *foo\*(C'\fR.
+.IP "Use of reserved word ""%s"" is deprecated" 4
+.IX Item "Use of reserved word ""%s"" is deprecated"
+(D) The indicated bareword is a reserved word. Future versions of perl
+may use it as a keyword, so you're better off either explicitly quoting
+the word in a manner appropriate for its context of use, or using a
+different name altogether. The warning can be suppressed for subroutine
+names by either adding a \f(CW\*(C`&\*(C'\fR prefix, or using a package qualifier,
+e.g. \f(CW&our()\fR, or \f(CWFoo::our()\fR.
+.IP "perl: warning: Setting locale failed." 4
+.IX Item "perl: warning: Setting locale failed."
+(S) The whole warning message will look something like:
+.Sp
+.Vb 6
+\& perl: warning: Setting locale failed.
+\& perl: warning: Please check that your locale settings:
+\& LC_ALL = "En_US",
+\& LANG = (unset)
+\& are supported and installed on your system.
+\& perl: warning: Falling back to the standard locale ("C").
+.Ve
+.Sp
+Exactly what were the failed locale settings varies. In the above the
+settings were that the LC_ALL was "En_US" and the LANG had no value.
+This error means that Perl detected that you and/or your system
+administrator have set up the so-called variable system but Perl could
+not use those settings. This was not dead serious, fortunately: there
+is a "default locale" called "C" that Perl can and will use, the
+script will be run. Before you really fix the problem, however, you
+will get the same error message each time you run Perl. How to really
+fix the problem can be found in "LOCALE PROBLEMS" in perllocale.
+.SH "Obsolete Diagnostics"
+.IX Header "Obsolete Diagnostics"
+.IP "Can't \fBmktemp()\fR" 4
+.IX Item "Can't mktemp()"
+(F) The \fBmktemp()\fR routine failed for some reason while trying to process
+a \fB\-e\fR switch. Maybe your /tmp partition is full, or clobbered.
+.Sp
+Removed because \fB\-e\fR doesn't use temporary files any more.
+.ie n .IP "Can't write to temp file for \fB\-e\fR: %s" 4
+.el .IP "Can't write to temp file for \fB\-e\fR: \f(CW%s\fR" 4
+.IX Item "Can't write to temp file for -e: %s"
+(F) The write routine failed for some reason while trying to process
+a \fB\-e\fR switch. Maybe your /tmp partition is full, or clobbered.
+.Sp
+Removed because \fB\-e\fR doesn't use temporary files any more.
+.IP "Cannot open temporary file" 4
+.IX Item "Cannot open temporary file"
+(F) The create routine failed for some reason while trying to process
+a \fB\-e\fR switch. Maybe your /tmp partition is full, or clobbered.
+.Sp
+Removed because \fB\-e\fR doesn't use temporary files any more.
+.IP "regexp too big" 4
+.IX Item "regexp too big"
+(F) The current implementation of regular expressions uses shorts as
+address offsets within a string. Unfortunately this means that if
+the regular expression compiles to longer than 32767, it'll blow up.
+Usually when you want a regular expression this big, there is a better
+way to do it with multiple statements. See perlre.
+.SH "Configuration Changes"
+.IX Header "Configuration Changes"
+You can use "Configure \-Uinstallusrbinperl" which causes installperl
+to skip installing perl also as /usr/bin/perl. This is useful if you
+prefer not to modify /usr/bin for some reason or another but harmful
+because many scripts assume to find Perl in /usr/bin/perl.
+.SH BUGS
+.IX Header "BUGS"
+If you find what you think is a bug, you might check the headers of
+recently posted articles in the comp.lang.perl.misc newsgroup.
+There may also be information at http://www.perl.com/perl/ , the Perl
+Home Page.
+.PP
+If you believe you have an unreported bug, please run the \fBperlbug\fR
+program included with your release. Make sure you trim your bug down
+to a tiny but sufficient test case. Your bug report, along with the
+output of \f(CW\*(C`perl \-V\*(C'\fR, will be sent off to <\fIperlbug@perl.com\fR> to be
+analysed by the Perl porting team.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+The \fIChanges\fR file for exhaustive details on what changed.
+.PP
+The \fIINSTALL\fR file for how to build Perl.
+.PP
+The \fIREADME\fR file for general stuff.
+.PP
+The \fIArtistic\fR and \fICopying\fR files for copyright information.
+.SH HISTORY
+.IX Header "HISTORY"
+Written by Gurusamy Sarathy <\fIgsar@activestate.com\fR>, with many contributions
+from The Perl Porters.
+.PP
+Send omissions or corrections to <\fIperlbug@perl.com\fR>.