summaryrefslogtreecommitdiffstats
path: root/upstream/fedora-40/man1/perl5004delta.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/fedora-40/man1/perl5004delta.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/fedora-40/man1/perl5004delta.1')
-rw-r--r--upstream/fedora-40/man1/perl5004delta.11567
1 files changed, 1567 insertions, 0 deletions
diff --git a/upstream/fedora-40/man1/perl5004delta.1 b/upstream/fedora-40/man1/perl5004delta.1
new file mode 100644
index 00000000..8acb2ee1
--- /dev/null
+++ b/upstream/fedora-40/man1/perl5004delta.1
@@ -0,0 +1,1567 @@
+.\" -*- 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 "PERL5004DELTA 1"
+.TH PERL5004DELTA 1 2024-01-25 "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
+perl5004delta \- what's new for perl5.004
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+This document describes differences between the 5.003 release (as
+documented in \fIProgramming Perl\fR, second edition\-\-the Camel Book) and
+this one.
+.SH "Supported Environments"
+.IX Header "Supported Environments"
+Perl5.004 builds out of the box on Unix, Plan 9, LynxOS, VMS, OS/2,
+QNX, AmigaOS, and Windows NT. Perl runs on Windows 95 as well, but it
+cannot be built there, for lack of a reasonable command interpreter.
+.SH "Core Changes"
+.IX Header "Core Changes"
+Most importantly, many bugs were fixed, including several security
+problems. See the \fIChanges\fR file in the distribution for details.
+.ie n .SS "List assignment to %ENV works"
+.el .SS "List assignment to \f(CW%ENV\fP works"
+.IX Subsection "List assignment to %ENV works"
+\&\f(CW\*(C`%ENV = ()\*(C'\fR and \f(CW\*(C`%ENV = @list\*(C'\fR now work as expected (except on VMS
+where it generates a fatal error).
+.ie n .SS "Change to ""Can't locate Foo.pm in @INC"" error"
+.el .SS "Change to ""Can't locate Foo.pm in \f(CW@INC\fP"" error"
+.IX Subsection "Change to ""Can't locate Foo.pm in @INC"" error"
+The error "Can't locate Foo.pm in \f(CW@INC\fR" now lists the contents of \f(CW@INC\fR
+for easier debugging.
+.SS "Compilation option: Binary compatibility with 5.003"
+.IX Subsection "Compilation option: Binary compatibility with 5.003"
+There is a new Configure question that asks if you want to maintain
+binary compatibility with Perl 5.003. If you choose binary
+compatibility, you do not have to recompile your extensions, but you
+might have symbol conflicts if you embed Perl in another application,
+just as in the 5.003 release. By default, binary compatibility
+is preserved at the expense of symbol table pollution.
+.ie n .SS "$PERL5OPT environment variable"
+.el .SS "\f(CW$PERL5OPT\fP environment variable"
+.IX Subsection "$PERL5OPT environment variable"
+You may now put Perl options in the \f(CW$PERL5OPT\fR environment variable.
+Unless Perl is running with taint checks, it will interpret this
+variable as if its contents had appeared on a "#!perl" line at the
+beginning of your script, except that hyphens are optional. PERL5OPT
+may only be used to set the following switches: \fB\-[DIMUdmw]\fR.
+.SS "Limitations on \fB\-M\fP, \fB\-m\fP, and \fB\-T\fP options"
+.IX Subsection "Limitations on -M, -m, and -T options"
+The \f(CW\*(C`\-M\*(C'\fR and \f(CW\*(C`\-m\*(C'\fR options are no longer allowed on the \f(CW\*(C`#!\*(C'\fR line of
+a script. If a script needs a module, it should invoke it with the
+\&\f(CW\*(C`use\*(C'\fR pragma.
+.PP
+The \fB\-T\fR option is also forbidden on the \f(CW\*(C`#!\*(C'\fR line of a script,
+unless it was present on the Perl command line. Due to the way \f(CW\*(C`#!\*(C'\fR
+works, this usually means that \fB\-T\fR must be in the first argument.
+Thus:
+.PP
+.Vb 1
+\& #!/usr/bin/perl \-T \-w
+.Ve
+.PP
+will probably work for an executable script invoked as \f(CW\*(C`scriptname\*(C'\fR,
+while:
+.PP
+.Vb 1
+\& #!/usr/bin/perl \-w \-T
+.Ve
+.PP
+will probably fail under the same conditions. (Non-Unix systems will
+probably not follow this rule.) But \f(CW\*(C`perl scriptname\*(C'\fR is guaranteed
+to fail, since then there is no chance of \fB\-T\fR being found on the
+command line before it is found on the \f(CW\*(C`#!\*(C'\fR line.
+.SS "More precise warnings"
+.IX Subsection "More precise warnings"
+If you removed the \fB\-w\fR option from your Perl 5.003 scripts because it
+made Perl too verbose, we recommend that you try putting it back when
+you upgrade to Perl 5.004. Each new perl version tends to remove some
+undesirable warnings, while adding new warnings that may catch bugs in
+your scripts.
+.ie n .SS "Deprecated: Inherited ""AUTOLOAD"" for non-methods"
+.el .SS "Deprecated: Inherited \f(CWAUTOLOAD\fP for non-methods"
+.IX Subsection "Deprecated: Inherited AUTOLOAD for non-methods"
+Before Perl 5.004, \f(CW\*(C`AUTOLOAD\*(C'\fR functions were looked up as methods
+(using the \f(CW@ISA\fR hierarchy), even when the function to be autoloaded
+was called as a plain function (e.g. \f(CWFoo::bar()\fR), not a method
+(e.g. \f(CW\*(C`Foo\->bar()\*(C'\fR or \f(CW\*(C`$obj\->bar()\*(C'\fR).
+.PP
+Perl 5.005 will use method lookup only for methods' \f(CW\*(C`AUTOLOAD\*(C'\fRs.
+However, there is a significant base of existing code that may be using
+the old behavior. So, as an interim step, Perl 5.004 issues an optional
+warning when a non-method uses an inherited \f(CW\*(C`AUTOLOAD\*(C'\fR.
+.PP
+The simple rule is: Inheritance will not work when autoloading
+non-methods. The simple fix for old code is: In any module that used to
+depend on inheriting \f(CW\*(C`AUTOLOAD\*(C'\fR for non-methods from a base class named
+\&\f(CW\*(C`BaseClass\*(C'\fR, execute \f(CW\*(C`*AUTOLOAD = \e&BaseClass::AUTOLOAD\*(C'\fR during startup.
+.ie n .SS "Previously deprecated %OVERLOAD is no longer usable"
+.el .SS "Previously deprecated \f(CW%OVERLOAD\fP is no longer usable"
+.IX Subsection "Previously deprecated %OVERLOAD is no longer usable"
+Using \f(CW%OVERLOAD\fR to define overloading was deprecated in 5.003.
+Overloading is now defined using the overload pragma. \f(CW%OVERLOAD\fR is
+still used internally but should not be used by Perl scripts. See
+overload for more details.
+.SS "Subroutine arguments created only when they're modified"
+.IX Subsection "Subroutine arguments created only when they're modified"
+In Perl 5.004, nonexistent array and hash elements used as subroutine
+parameters are brought into existence only if they are actually
+assigned to (via \f(CW@_\fR).
+.PP
+Earlier versions of Perl vary in their handling of such arguments.
+Perl versions 5.002 and 5.003 always brought them into existence.
+Perl versions 5.000 and 5.001 brought them into existence only if
+they were not the first argument (which was almost certainly a bug).
+Earlier versions of Perl never brought them into existence.
+.PP
+For example, given this code:
+.PP
+.Vb 5
+\& undef @a; undef %a;
+\& sub show { print $_[0] };
+\& sub change { $_[0]++ };
+\& show($a[2]);
+\& change($a{b});
+.Ve
+.PP
+After this code executes in Perl 5.004, \f(CW$a\fR{b} exists but \f(CW$a\fR[2] does
+not. In Perl 5.002 and 5.003, both \f(CW$a\fR{b} and \f(CW$a\fR[2] would have existed
+(but \f(CW$a\fR[2]'s value would have been undefined).
+.ie n .SS "Group vector changeable with $)"
+.el .SS "Group vector changeable with \f(CW$)\fP"
+.IX Subsection "Group vector changeable with $)"
+The \f(CW$)\fR special variable has always (well, in Perl 5, at least)
+reflected not only the current effective group, but also the group list
+as returned by the \f(CWgetgroups()\fR C function (if there is one).
+However, until this release, there has not been a way to call the
+\&\f(CWsetgroups()\fR C function from Perl.
+.PP
+In Perl 5.004, assigning to \f(CW$)\fR is exactly symmetrical with examining
+it: The first number in its string value is used as the effective gid;
+if there are any numbers after the first one, they are passed to the
+\&\f(CWsetgroups()\fR C function (if there is one).
+.SS "Fixed parsing of $$<digit>, &$<digit>, etc."
+.IX Subsection "Fixed parsing of $$<digit>, &$<digit>, etc."
+Perl versions before 5.004 misinterpreted any type marker followed by
+"$" and a digit. For example, "$$0" was incorrectly taken to mean
+"${$}0" instead of "${$0}". This bug is (mostly) fixed in Perl 5.004.
+.PP
+However, the developers of Perl 5.004 could not fix this bug completely,
+because at least two widely-used modules depend on the old meaning of
+"$$0" in a string. So Perl 5.004 still interprets "$$<digit>" in the
+old (broken) way inside strings; but it generates this message as a
+warning. And in Perl 5.005, this special treatment will cease.
+.SS "Fixed localization of $<digit>, $&, etc."
+.IX Subsection "Fixed localization of $<digit>, $&, etc."
+Perl versions before 5.004 did not always properly localize the
+regex-related special variables. Perl 5.004 does localize them, as
+the documentation has always said it should. This may result in \f(CW$1\fR,
+\&\f(CW$2\fR, etc. no longer being set where existing programs use them.
+.SS "No resetting of $. on implicit close"
+.IX Subsection "No resetting of $. on implicit close"
+The documentation for Perl 5.0 has always stated that \f(CW$.\fR is \fInot\fR
+reset when an already-open file handle is reopened with no intervening
+call to \f(CW\*(C`close\*(C'\fR. Due to a bug, perl versions 5.000 through 5.003
+\&\fIdid\fR reset \f(CW$.\fR under that circumstance; Perl 5.004 does not.
+.ie n .SS """wantarray"" may return undef"
+.el .SS "\f(CWwantarray\fP may return undef"
+.IX Subsection "wantarray may return undef"
+The \f(CW\*(C`wantarray\*(C'\fR operator returns true if a subroutine is expected to
+return a list, and false otherwise. In Perl 5.004, \f(CW\*(C`wantarray\*(C'\fR can
+also return the undefined value if a subroutine's return value will
+not be used at all, which allows subroutines to avoid a time-consuming
+calculation of a return value if it isn't going to be used.
+.ie n .SS """eval EXPR"" determines value of EXPR in scalar context"
+.el .SS "\f(CWeval EXPR\fP determines value of EXPR in scalar context"
+.IX Subsection "eval EXPR determines value of EXPR in scalar context"
+Perl (version 5) used to determine the value of EXPR inconsistently,
+sometimes incorrectly using the surrounding context for the determination.
+Now, the value of EXPR (before being parsed by eval) is always determined in
+a scalar context. Once parsed, it is executed as before, by providing
+the context that the scope surrounding the eval provided. This change
+makes the behavior Perl4 compatible, besides fixing bugs resulting from
+the inconsistent behavior. This program:
+.PP
+.Vb 3
+\& @a = qw(time now is time);
+\& print eval @a;
+\& print \*(Aq|\*(Aq, scalar eval @a;
+.Ve
+.PP
+used to print something like "timenowis881399109|4", but now (and in perl4)
+prints "4|4".
+.SS "Changes to tainting checks"
+.IX Subsection "Changes to tainting checks"
+A bug in previous versions may have failed to detect some insecure
+conditions when taint checks are turned on. (Taint checks are used
+in setuid or setgid scripts, or when explicitly turned on with the
+\&\f(CW\*(C`\-T\*(C'\fR invocation option.) Although it's unlikely, this may cause a
+previously-working script to now fail, which should be construed
+as a blessing since that indicates a potentially-serious security
+hole was just plugged.
+.PP
+The new restrictions when tainting include:
+.IP "No \fBglob()\fR or <*>" 4
+.IX Item "No glob() or <*>"
+These operators may spawn the C shell (csh), which cannot be made
+safe. This restriction will be lifted in a future version of Perl
+when globbing is implemented without the use of an external program.
+.ie n .IP "No spawning if tainted $CDPATH, $ENV, $BASH_ENV" 4
+.el .IP "No spawning if tainted \f(CW$CDPATH\fR, \f(CW$ENV\fR, \f(CW$BASH_ENV\fR" 4
+.IX Item "No spawning if tainted $CDPATH, $ENV, $BASH_ENV"
+These environment variables may alter the behavior of spawned programs
+(especially shells) in ways that subvert security. So now they are
+treated as dangerous, in the manner of \f(CW$IFS\fR and \f(CW$PATH\fR.
+.ie n .IP "No spawning if tainted $TERM doesn't look like a terminal name" 4
+.el .IP "No spawning if tainted \f(CW$TERM\fR doesn't look like a terminal name" 4
+.IX Item "No spawning if tainted $TERM doesn't look like a terminal name"
+Some termcap libraries do unsafe things with \f(CW$TERM\fR. However, it would be
+unnecessarily harsh to treat all \f(CW$TERM\fR values as unsafe, since only shell
+metacharacters can cause trouble in \f(CW$TERM\fR. So a tainted \f(CW$TERM\fR is
+considered to be safe if it contains only alphanumerics, underscores,
+dashes, and colons, and unsafe if it contains other characters (including
+whitespace).
+.SS "New Opcode module and revised Safe module"
+.IX Subsection "New Opcode module and revised Safe module"
+A new Opcode module supports the creation, manipulation and
+application of opcode masks. The revised Safe module has a new API
+and is implemented using the new Opcode module. Please read the new
+Opcode and Safe documentation.
+.SS "Embedding improvements"
+.IX Subsection "Embedding improvements"
+In older versions of Perl it was not possible to create more than one
+Perl interpreter instance inside a single process without leaking like a
+sieve and/or crashing. The bugs that caused this behavior have all been
+fixed. However, you still must take care when embedding Perl in a C
+program. See the updated perlembed manpage for tips on how to manage
+your interpreters.
+.SS "Internal change: FileHandle class based on IO::* classes"
+.IX Subsection "Internal change: FileHandle class based on IO::* classes"
+File handles are now stored internally as type IO::Handle. The
+FileHandle module is still supported for backwards compatibility, but
+it is now merely a front end to the IO::* modules, specifically
+IO::Handle, IO::Seekable, and IO::File. We suggest, but do not
+require, that you use the IO::* modules in new code.
+.PP
+In harmony with this change, \f(CW*GLOB{FILEHANDLE}\fR is now just a
+backward-compatible synonym for \f(CW*GLOB{IO}\fR.
+.SS "Internal change: PerlIO abstraction interface"
+.IX Subsection "Internal change: PerlIO abstraction interface"
+It is now possible to build Perl with AT&T's sfio IO package
+instead of stdio. See perlapio for more details, and
+the \fIINSTALL\fR file for how to use it.
+.SS "New and changed syntax"
+.IX Subsection "New and changed syntax"
+.ie n .IP $coderef\->(PARAMS) 4
+.el .IP \f(CW$coderef\fR\->(PARAMS) 4
+.IX Item "$coderef->(PARAMS)"
+A subroutine reference may now be suffixed with an arrow and a
+(possibly empty) parameter list. This syntax denotes a call of the
+referenced subroutine, with the given parameters (if any).
+.Sp
+This new syntax follows the pattern of \f(CW\*(C`$hashref\->{FOO}\*(C'\fR and
+\&\f(CW\*(C`$aryref\->[$foo]\*(C'\fR: You may now write \f(CW&$subref($foo)\fR as
+\&\f(CW$subref\->($foo)\fR. All these arrow terms may be chained;
+thus, \f(CW\*(C`&{$table\->{FOO}}($bar)\*(C'\fR may now be written
+\&\f(CW\*(C`$table\->{FOO}\->($bar)\*(C'\fR.
+.SS "New and changed builtin constants"
+.IX Subsection "New and changed builtin constants"
+.IP _\|_PACKAGE_\|_ 4
+.IX Item "__PACKAGE__"
+The current package name at compile time, or the undefined value if
+there is no current package (due to a \f(CW\*(C`package;\*(C'\fR directive). Like
+\&\f(CW\*(C`_\|_FILE_\|_\*(C'\fR and \f(CW\*(C`_\|_LINE_\|_\*(C'\fR, \f(CW\*(C`_\|_PACKAGE_\|_\*(C'\fR does \fInot\fR interpolate
+into strings.
+.SS "New and changed builtin variables"
+.IX Subsection "New and changed builtin variables"
+.IP $^E 4
+.IX Item "$^E"
+Extended error message on some platforms. (Also known as
+\&\f(CW$EXTENDED_OS_ERROR\fR if you \f(CW\*(C`use English\*(C'\fR).
+.IP $^H 4
+.IX Item "$^H"
+The current set of syntax checks enabled by \f(CW\*(C`use strict\*(C'\fR. See the
+documentation of \f(CW\*(C`strict\*(C'\fR for more details. Not actually new, but
+newly documented.
+Because it is intended for internal use by Perl core components,
+there is no \f(CW\*(C`use English\*(C'\fR long name for this variable.
+.IP $^M 4
+.IX Item "$^M"
+By default, running out of memory it is not trappable. However, if
+compiled for this, Perl may use the contents of \f(CW$^M\fR as an emergency
+pool after \fBdie()\fRing with this message. Suppose that your Perl were
+compiled with \-DPERL_EMERGENCY_SBRK and used Perl's malloc. Then
+.Sp
+.Vb 1
+\& $^M = \*(Aqa\*(Aq x (1<<16);
+.Ve
+.Sp
+would allocate a 64K buffer for use when in emergency.
+See the \fIINSTALL\fR file for information on how to enable this option.
+As a disincentive to casual use of this advanced feature,
+there is no \f(CW\*(C`use English\*(C'\fR long name for this variable.
+.SS "New and changed builtin functions"
+.IX Subsection "New and changed builtin functions"
+.IP "delete on slices" 4
+.IX Item "delete on slices"
+This now works. (e.g. \f(CW\*(C`delete @ENV{\*(AqPATH\*(Aq, \*(AqMANPATH\*(Aq}\*(C'\fR)
+.IP flock 4
+.IX Item "flock"
+is now supported on more platforms, prefers fcntl to lockf when
+emulating, and always flushes before (un)locking.
+.IP "printf and sprintf" 4
+.IX Item "printf and sprintf"
+Perl now implements these functions itself; it doesn't use the C
+library function \fBsprintf()\fR any more, except for floating-point
+numbers, and even then only known flags are allowed. As a result, it
+is now possible to know which conversions and flags will work, and
+what they will do.
+.Sp
+The new conversions in Perl's \fBsprintf()\fR are:
+.Sp
+.Vb 4
+\& %i a synonym for %d
+\& %p a pointer (the address of the Perl value, in hexadecimal)
+\& %n special: *stores* the number of characters output so far
+\& into the next variable in the parameter list
+.Ve
+.Sp
+The new flags that go between the \f(CW\*(C`%\*(C'\fR and the conversion are:
+.Sp
+.Vb 3
+\& # prefix octal with "0", hex with "0x"
+\& h interpret integer as C type "short" or "unsigned short"
+\& V interpret integer as Perl\*(Aqs standard integer type
+.Ve
+.Sp
+Also, where a number would appear in the flags, an asterisk ("*") may
+be used instead, in which case Perl uses the next item in the
+parameter list as the given number (that is, as the field width or
+precision). If a field width obtained through "*" is negative, it has
+the same effect as the '\-' flag: left-justification.
+.Sp
+See "sprintf" in perlfunc for a complete list of conversion and flags.
+.IP "keys as an lvalue" 4
+.IX Item "keys as an lvalue"
+As an lvalue, \f(CW\*(C`keys\*(C'\fR allows you to increase the number of hash buckets
+allocated for the given hash. This can gain you a measure of efficiency if
+you know the hash is going to get big. (This is similar to pre-extending
+an array by assigning a larger number to $#array.) If you say
+.Sp
+.Vb 1
+\& keys %hash = 200;
+.Ve
+.Sp
+then \f(CW%hash\fR will have at least 200 buckets allocated for it. These
+buckets will be retained even if you do \f(CW\*(C`%hash = ()\*(C'\fR; use \f(CWundef
+%hash\fR if you want to free the storage while \f(CW%hash\fR is still in scope.
+You can't shrink the number of buckets allocated for the hash using
+\&\f(CW\*(C`keys\*(C'\fR in this way (but you needn't worry about doing this by accident,
+as trying has no effect).
+.IP "\fBmy()\fR in Control Structures" 4
+.IX Item "my() in Control Structures"
+You can now use \fBmy()\fR (with or without the parentheses) in the control
+expressions of control structures such as:
+.Sp
+.Vb 5
+\& while (defined(my $line = <>)) {
+\& $line = lc $line;
+\& } continue {
+\& print $line;
+\& }
+\&
+\& if ((my $answer = <STDIN>) =~ /^y(es)?$/i) {
+\& user_agrees();
+\& } elsif ($answer =~ /^n(o)?$/i) {
+\& user_disagrees();
+\& } else {
+\& chomp $answer;
+\& die "\`$answer\*(Aq is neither \`yes\*(Aq nor \`no\*(Aq";
+\& }
+.Ve
+.Sp
+Also, you can declare a foreach loop control variable as lexical by
+preceding it with the word "my". For example, in:
+.Sp
+.Vb 3
+\& foreach my $i (1, 2, 3) {
+\& some_function();
+\& }
+.Ve
+.Sp
+\&\f(CW$i\fR is a lexical variable, and the scope of \f(CW$i\fR extends to the end of
+the loop, but not beyond it.
+.Sp
+Note that you still cannot use \fBmy()\fR on global punctuation variables
+such as \f(CW$_\fR and the like.
+.IP "\fBpack()\fR and \fBunpack()\fR" 4
+.IX Item "pack() and unpack()"
+A new format 'w' represents a BER compressed integer (as defined in
+ASN.1). Its format is a sequence of one or more bytes, each of which
+provides seven bits of the total value, with the most significant
+first. Bit eight of each byte is set, except for the last byte, in
+which bit eight is clear.
+.Sp
+If 'p' or 'P' are given undef as values, they now generate a NULL
+pointer.
+.Sp
+Both \fBpack()\fR and \fBunpack()\fR now fail when their templates contain invalid
+types. (Invalid types used to be ignored.)
+.IP \fBsysseek()\fR 4
+.IX Item "sysseek()"
+The new \fBsysseek()\fR operator is a variant of \fBseek()\fR that sets and gets the
+file's system read/write position, using the \fBlseek\fR\|(2) system call. It is
+the only reliable way to seek before using \fBsysread()\fR or \fBsyswrite()\fR. Its
+return value is the new position, or the undefined value on failure.
+.IP "use VERSION" 4
+.IX Item "use VERSION"
+If the first argument to \f(CW\*(C`use\*(C'\fR is a number, it is treated as a version
+number instead of a module name. If the version of the Perl interpreter
+is less than VERSION, then an error message is printed and Perl exits
+immediately. Because \f(CW\*(C`use\*(C'\fR occurs at compile time, this check happens
+immediately during the compilation process, unlike \f(CW\*(C`require VERSION\*(C'\fR,
+which waits until runtime for the check. This is often useful if you
+need to check the current Perl version before \f(CW\*(C`use\*(C'\fRing library modules
+which have changed in incompatible ways from older versions of Perl.
+(We try not to do this more than we have to.)
+.IP "use Module VERSION LIST" 4
+.IX Item "use Module VERSION LIST"
+If the VERSION argument is present between Module and LIST, then the
+\&\f(CW\*(C`use\*(C'\fR will call the VERSION method in class Module with the given
+version as an argument. The default VERSION method, inherited from
+the UNIVERSAL class, croaks if the given version is larger than the
+value of the variable \f(CW$Module::VERSION\fR. (Note that there is not a
+comma after VERSION!)
+.Sp
+This version-checking mechanism is similar to the one currently used
+in the Exporter module, but it is faster and can be used with modules
+that don't use the Exporter. It is the recommended method for new
+code.
+.IP prototype(FUNCTION) 4
+.IX Item "prototype(FUNCTION)"
+Returns the prototype of a function as a string (or \f(CW\*(C`undef\*(C'\fR if the
+function has no prototype). FUNCTION is a reference to or the name of the
+function whose prototype you want to retrieve.
+(Not actually new; just never documented before.)
+.IP srand 4
+.IX Item "srand"
+The default seed for \f(CW\*(C`srand\*(C'\fR, which used to be \f(CW\*(C`time\*(C'\fR, has been changed.
+Now it's a heady mix of difficult-to-predict system-dependent values,
+which should be sufficient for most everyday purposes.
+.Sp
+Previous to version 5.004, calling \f(CW\*(C`rand\*(C'\fR without first calling \f(CW\*(C`srand\*(C'\fR
+would yield the same sequence of random numbers on most or all machines.
+Now, when perl sees that you're calling \f(CW\*(C`rand\*(C'\fR and haven't yet called
+\&\f(CW\*(C`srand\*(C'\fR, it calls \f(CW\*(C`srand\*(C'\fR with the default seed. You should still call
+\&\f(CW\*(C`srand\*(C'\fR manually if your code might ever be run on a pre\-5.004 system,
+of course, or if you want a seed other than the default.
+.ie n .IP "$_ as Default" 4
+.el .IP "\f(CW$_\fR as Default" 4
+.IX Item "$_ as Default"
+Functions documented in the Camel to default to \f(CW$_\fR now in
+fact do, and all those that do are so documented in perlfunc.
+.ie n .IP """m//gc"" does not reset search position on failure" 4
+.el .IP "\f(CWm//gc\fR does not reset search position on failure" 4
+.IX Item "m//gc does not reset search position on failure"
+The \f(CW\*(C`m//g\*(C'\fR match iteration construct has always reset its target
+string's search position (which is visible through the \f(CW\*(C`pos\*(C'\fR operator)
+when a match fails; as a result, the next \f(CW\*(C`m//g\*(C'\fR match after a failure
+starts again at the beginning of the string. With Perl 5.004, this
+reset may be disabled by adding the "c" (for "continue") modifier,
+i.e. \f(CW\*(C`m//gc\*(C'\fR. This feature, in conjunction with the \f(CW\*(C`\eG\*(C'\fR zero-width
+assertion, makes it possible to chain matches together. See perlop
+and perlre.
+.ie n .IP """m//x"" ignores whitespace before ?*+{}" 4
+.el .IP "\f(CWm//x\fR ignores whitespace before ?*+{}" 4
+.IX Item "m//x ignores whitespace before ?*+{}"
+The \f(CW\*(C`m//x\*(C'\fR construct has always been intended to ignore all unescaped
+whitespace. However, before Perl 5.004, whitespace had the effect of
+escaping repeat modifiers like "*" or "?"; for example, \f(CW\*(C`/a *b/x\*(C'\fR was
+(mis)interpreted as \f(CW\*(C`/a\e*b/x\*(C'\fR. This bug has been fixed in 5.004.
+.ie n .IP "nested ""sub{}"" closures work now" 4
+.el .IP "nested \f(CWsub{}\fR closures work now" 4
+.IX Item "nested sub{} closures work now"
+Prior to the 5.004 release, nested anonymous functions didn't work
+right. They do now.
+.IP "formats work right on changing lexicals" 4
+.IX Item "formats work right on changing lexicals"
+Just like anonymous functions that contain lexical variables
+that change (like a lexical index variable for a \f(CW\*(C`foreach\*(C'\fR loop),
+formats now work properly. For example, this silently failed
+before (printed only zeros), but is fine now:
+.Sp
+.Vb 8
+\& my $i;
+\& foreach $i ( 1 .. 10 ) {
+\& write;
+\& }
+\& format =
+\& my i is @#
+\& $i
+\& .
+.Ve
+.Sp
+However, it still fails (without a warning) if the foreach is within a
+subroutine:
+.Sp
+.Vb 11
+\& my $i;
+\& sub foo {
+\& foreach $i ( 1 .. 10 ) {
+\& write;
+\& }
+\& }
+\& foo;
+\& format =
+\& my i is @#
+\& $i
+\& .
+.Ve
+.SS "New builtin methods"
+.IX Subsection "New builtin methods"
+The \f(CW\*(C`UNIVERSAL\*(C'\fR package automatically contains the following methods that
+are inherited by all other classes:
+.IP isa(CLASS) 4
+.IX Item "isa(CLASS)"
+\&\f(CW\*(C`isa\*(C'\fR returns \fItrue\fR if its object is blessed into a subclass of \f(CW\*(C`CLASS\*(C'\fR
+.Sp
+\&\f(CW\*(C`isa\*(C'\fR is also exportable and can be called as a sub with two arguments. This
+allows the ability to check what a reference points to. Example:
+.Sp
+.Vb 1
+\& use UNIVERSAL qw(isa);
+\&
+\& if(isa($ref, \*(AqARRAY\*(Aq)) {
+\& ...
+\& }
+.Ve
+.IP can(METHOD) 4
+.IX Item "can(METHOD)"
+\&\f(CW\*(C`can\*(C'\fR checks to see if its object has a method called \f(CW\*(C`METHOD\*(C'\fR,
+if it does then a reference to the sub is returned; if it does not then
+\&\fIundef\fR is returned.
+.IP "VERSION( [NEED] )" 4
+.IX Item "VERSION( [NEED] )"
+\&\f(CW\*(C`VERSION\*(C'\fR 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 \f(CW$VERSION\fR variable in the given package) not less than
+NEED; it will die if this is not the case. This method is normally
+called as a class method. This method is called automatically by the
+\&\f(CW\*(C`VERSION\*(C'\fR form of \f(CW\*(C`use\*(C'\fR.
+.Sp
+.Vb 3
+\& use A 1.2 qw(some imported subs);
+\& # implies:
+\& A\->VERSION(1.2);
+.Ve
+.PP
+\&\fBNOTE:\fR \f(CW\*(C`can\*(C'\fR directly uses Perl's internal code for method lookup, and
+\&\f(CW\*(C`isa\*(C'\fR uses a very similar method and caching strategy. This may cause
+strange effects if the Perl code dynamically changes \f(CW@ISA\fR in any package.
+.PP
+You may add other methods to the UNIVERSAL class via Perl or XS code.
+You do not need to \f(CW\*(C`use UNIVERSAL\*(C'\fR in order to make these methods
+available to your program. This is necessary only if you wish to
+have \f(CW\*(C`isa\*(C'\fR available as a plain subroutine in the current package.
+.SS "TIEHANDLE now supported"
+.IX Subsection "TIEHANDLE now supported"
+See perltie for other kinds of \fBtie()\fRs.
+.IP "TIEHANDLE classname, LIST" 4
+.IX Item "TIEHANDLE classname, LIST"
+This is the constructor for the class. That means it is expected to
+return an object of some sort. The reference can be used to
+hold some internal information.
+.Sp
+.Vb 5
+\& sub TIEHANDLE {
+\& print "<shout>\en";
+\& my $i;
+\& return bless \e$i, shift;
+\& }
+.Ve
+.IP "PRINT this, LIST" 4
+.IX Item "PRINT this, LIST"
+This method will be triggered every time the tied handle is printed to.
+Beyond its self reference it also expects the list that was passed to
+the print function.
+.Sp
+.Vb 5
+\& sub PRINT {
+\& $r = shift;
+\& $$r++;
+\& return print join( $, => map {uc} @_), $\e;
+\& }
+.Ve
+.IP "PRINTF this, LIST" 4
+.IX Item "PRINTF this, LIST"
+This method will be triggered every time the tied handle is printed to
+with the \f(CWprintf()\fR function.
+Beyond its self reference it also expects the format and list that was
+passed to the printf function.
+.Sp
+.Vb 5
+\& sub PRINTF {
+\& shift;
+\& my $fmt = shift;
+\& print sprintf($fmt, @_)."\en";
+\& }
+.Ve
+.IP "READ this LIST" 4
+.IX Item "READ this LIST"
+This method will be called when the handle is read from via the \f(CW\*(C`read\*(C'\fR
+or \f(CW\*(C`sysread\*(C'\fR functions.
+.Sp
+.Vb 5
+\& sub READ {
+\& $r = shift;
+\& my($buf,$len,$offset) = @_;
+\& print "READ called, \e$buf=$buf, \e$len=$len, \e$offset=$offset";
+\& }
+.Ve
+.IP "READLINE this" 4
+.IX Item "READLINE this"
+This method will be called when the handle is read from. The method
+should return undef when there is no more data.
+.Sp
+.Vb 4
+\& sub READLINE {
+\& $r = shift;
+\& return "PRINT called $$r times\en"
+\& }
+.Ve
+.IP "GETC this" 4
+.IX Item "GETC this"
+This method will be called when the \f(CW\*(C`getc\*(C'\fR function is called.
+.Sp
+.Vb 1
+\& sub GETC { print "Don\*(Aqt GETC, Get Perl"; return "a"; }
+.Ve
+.IP "DESTROY this" 4
+.IX Item "DESTROY this"
+As with the other types of ties, this method will be called when the
+tied handle is about to be destroyed. This is useful for debugging and
+possibly for cleaning up.
+.Sp
+.Vb 3
+\& sub DESTROY {
+\& print "</shout>\en";
+\& }
+.Ve
+.SS "Malloc enhancements"
+.IX Subsection "Malloc enhancements"
+If perl is compiled with the malloc included with the perl distribution
+(that is, if \f(CW\*(C`perl \-V:d_mymalloc\*(C'\fR is 'define') then you can print
+memory statistics at runtime by running Perl thusly:
+.PP
+.Vb 1
+\& env PERL_DEBUG_MSTATS=2 perl your_script_here
+.Ve
+.PP
+The value of 2 means to print statistics after compilation and on
+exit; with a value of 1, the statistics are printed only on exit.
+(If you want the statistics at an arbitrary time, you'll need to
+install the optional module Devel::Peek.)
+.PP
+Three new compilation flags are recognized by malloc.c. (They have no
+effect if perl is compiled with system \fBmalloc()\fR.)
+.IP \-DPERL_EMERGENCY_SBRK 4
+.IX Item "-DPERL_EMERGENCY_SBRK"
+If this macro is defined, running out of memory need not be a fatal
+error: a memory pool can allocated by assigning to the special
+variable \f(CW$^M\fR. See "$^M".
+.IP \-DPACK_MALLOC 4
+.IX Item "-DPACK_MALLOC"
+Perl memory allocation is by bucket with sizes close to powers of two.
+Because of these malloc overhead may be big, especially for data of
+size exactly a power of two. If \f(CW\*(C`PACK_MALLOC\*(C'\fR is defined, perl uses
+a slightly different algorithm for small allocations (up to 64 bytes
+long), which makes it possible to have overhead down to 1 byte for
+allocations which are powers of two (and appear quite often).
+.Sp
+Expected memory savings (with 8\-byte alignment in \f(CW\*(C`alignbytes\*(C'\fR) is
+about 20% for typical Perl usage. Expected slowdown due to additional
+malloc overhead is in fractions of a percent (hard to measure, because
+of the effect of saved memory on speed).
+.IP \-DTWO_POT_OPTIMIZE 4
+.IX Item "-DTWO_POT_OPTIMIZE"
+Similarly to \f(CW\*(C`PACK_MALLOC\*(C'\fR, this macro improves allocations of data
+with size close to a power of two; but this works for big allocations
+(starting with 16K by default). Such allocations are typical for big
+hashes and special-purpose scripts, especially image processing.
+.Sp
+On recent systems, the fact that perl requires 2M from system for 1M
+allocation will not affect speed of execution, since the tail of such
+a chunk is not going to be touched (and thus will not require real
+memory). However, it may result in a premature out-of-memory error.
+So if you will be manipulating very large blocks with sizes close to
+powers of two, it would be wise to define this macro.
+.Sp
+Expected saving of memory is 0\-100% (100% in applications which
+require most memory in such 2**n chunks); expected slowdown is
+negligible.
+.SS "Miscellaneous efficiency enhancements"
+.IX Subsection "Miscellaneous efficiency enhancements"
+Functions that have an empty prototype and that do nothing but return
+a fixed value are now inlined (e.g. \f(CW\*(C`sub PI () { 3.14159 }\*(C'\fR).
+.PP
+Each unique hash key is only allocated once, no matter how many hashes
+have an entry with that key. So even if you have 100 copies of the
+same hash, the hash keys never have to be reallocated.
+.SH "Support for More Operating Systems"
+.IX Header "Support for More Operating Systems"
+Support for the following operating systems is new in Perl 5.004.
+.SS Win32
+.IX Subsection "Win32"
+Perl 5.004 now includes support for building a "native" perl under
+Windows NT, using the Microsoft Visual C++ compiler (versions 2.0
+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 ExtUtils::MakeMaker and 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 \fIREADME.win32\fR in the perl distribution for more
+details on how to get started with building this port.
+.PP
+There is also support for building perl under the Cygwin32 environment.
+Cygwin32 is a set of GNU tools that make it possible to compile and run
+many Unix programs under Windows NT by providing a mostly Unix-like
+interface for compilation and execution. See \fIREADME.cygwin32\fR in the
+perl distribution for more details on this port and how to obtain the
+Cygwin32 toolkit.
+.SS "Plan 9"
+.IX Subsection "Plan 9"
+See \fIREADME.plan9\fR in the perl distribution.
+.SS QNX
+.IX Subsection "QNX"
+See \fIREADME.qnx\fR in the perl distribution.
+.SS AmigaOS
+.IX Subsection "AmigaOS"
+See \fIREADME.amigaos\fR in the perl distribution.
+.SH Pragmata
+.IX Header "Pragmata"
+Six new pragmatic modules exist:
+.IP "use autouse MODULE => qw(sub1 sub2 sub3)" 4
+.IX Item "use autouse MODULE => qw(sub1 sub2 sub3)"
+Defers \f(CW\*(C`require MODULE\*(C'\fR until someone calls one of the specified
+subroutines (which must be exported by MODULE). This pragma should be
+used with caution, and only when necessary.
+.IP "use blib" 4
+.IX Item "use blib"
+.PD 0
+.IP "use blib 'dir'" 4
+.IX Item "use blib 'dir'"
+.PD
+Looks for MakeMaker-like \fI'blib'\fR directory structure starting in
+\&\fIdir\fR (or current directory) and working back up to five levels of
+parent directories.
+.Sp
+Intended for use on command line with \fB\-M\fR option as a way of testing
+arbitrary scripts against an uninstalled version of a package.
+.IP "use constant NAME => VALUE" 4
+.IX Item "use constant NAME => VALUE"
+Provides a convenient interface for creating compile-time constants,
+See "Constant Functions" in perlsub.
+.IP "use locale" 4
+.IX Item "use locale"
+Tells the compiler to enable (or disable) the use of POSIX locales for
+builtin operations.
+.Sp
+When \f(CW\*(C`use locale\*(C'\fR is in effect, the current LC_CTYPE locale is used
+for regular expressions and case mapping; LC_COLLATE for string
+ordering; and LC_NUMERIC for numeric formatting in printf and sprintf
+(but \fBnot\fR in print). LC_NUMERIC is always used in write, since
+lexical scoping of formats is problematic at best.
+.Sp
+Each \f(CW\*(C`use locale\*(C'\fR or \f(CW\*(C`no locale\*(C'\fR affects statements to the end of
+the enclosing BLOCK or, if not inside a BLOCK, to the end of the
+current file. Locales can be switched and queried with
+\&\fBPOSIX::setlocale()\fR.
+.Sp
+See perllocale for more information.
+.IP "use ops" 4
+.IX Item "use ops"
+Disable unsafe opcodes, or any named opcodes, when compiling Perl code.
+.IP "use vmsish" 4
+.IX Item "use vmsish"
+Enable VMS-specific language features. Currently, there are three
+VMS-specific features available: 'status', which makes \f(CW$?\fR and
+\&\f(CW\*(C`system\*(C'\fR return genuine VMS status values instead of emulating POSIX;
+\&'exit', which makes \f(CW\*(C`exit\*(C'\fR take a genuine VMS status value instead of
+assuming that \f(CW\*(C`exit 1\*(C'\fR is an error; and 'time', which makes all times
+relative to the local time zone, in the VMS tradition.
+.SH Modules
+.IX Header "Modules"
+.SS "Required Updates"
+.IX Subsection "Required Updates"
+Though Perl 5.004 is compatible with almost all modules that work
+with Perl 5.003, there are a few exceptions:
+.PP
+.Vb 5
+\& Module Required Version for Perl 5.004
+\& \-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\& Filter Filter\-1.12
+\& LWP libwww\-perl\-5.08
+\& Tk Tk400.202 (\-w makes noise)
+.Ve
+.PP
+Also, the majordomo mailing list program, version 1.94.1, doesn't work
+with Perl 5.004 (nor with perl 4), because it executes an invalid
+regular expression. This bug is fixed in majordomo version 1.94.2.
+.SS "Installation directories"
+.IX Subsection "Installation directories"
+The \fIinstallperl\fR script now places the Perl source files for
+extensions in the architecture-specific library directory, which is
+where the shared libraries for extensions have always been. This
+change is intended to allow administrators to keep the Perl 5.004
+library directory unchanged from a previous version, without running
+the risk of binary incompatibility between extensions' Perl source and
+shared libraries.
+.SS "Module information summary"
+.IX Subsection "Module information summary"
+Brand new modules, arranged by topic rather than strictly
+alphabetically:
+.PP
+.Vb 6
+\& CGI.pm Web server interface ("Common Gateway Interface")
+\& CGI/Apache.pm Support for Apache\*(Aqs Perl module
+\& CGI/Carp.pm Log server errors with helpful context
+\& CGI/Fast.pm Support for FastCGI (persistent server process)
+\& CGI/Push.pm Support for server push
+\& CGI/Switch.pm Simple interface for multiple server types
+\&
+\& CPAN Interface to Comprehensive Perl Archive Network
+\& CPAN::FirstTime Utility for creating CPAN configuration file
+\& CPAN::Nox Runs CPAN while avoiding compiled extensions
+\&
+\& IO.pm Top\-level interface to IO::* classes
+\& IO/File.pm IO::File extension Perl module
+\& IO/Handle.pm IO::Handle extension Perl module
+\& IO/Pipe.pm IO::Pipe extension Perl module
+\& IO/Seekable.pm IO::Seekable extension Perl module
+\& IO/Select.pm IO::Select extension Perl module
+\& IO/Socket.pm IO::Socket extension Perl module
+\&
+\& Opcode.pm Disable named opcodes when compiling Perl code
+\&
+\& ExtUtils/Embed.pm Utilities for embedding Perl in C programs
+\& ExtUtils/testlib.pm Fixes up @INC to use just\-built extension
+\&
+\& FindBin.pm Find path of currently executing program
+\&
+\& Class/Struct.pm Declare struct\-like datatypes as Perl classes
+\& File/stat.pm By\-name interface to Perl\*(Aqs builtin stat
+\& Net/hostent.pm By\-name interface to Perl\*(Aqs builtin gethost*
+\& Net/netent.pm By\-name interface to Perl\*(Aqs builtin getnet*
+\& Net/protoent.pm By\-name interface to Perl\*(Aqs builtin getproto*
+\& Net/servent.pm By\-name interface to Perl\*(Aqs builtin getserv*
+\& Time/gmtime.pm By\-name interface to Perl\*(Aqs builtin gmtime
+\& Time/localtime.pm By\-name interface to Perl\*(Aqs builtin localtime
+\& Time/tm.pm Internal object for Time::{gm,local}time
+\& User/grent.pm By\-name interface to Perl\*(Aqs builtin getgr*
+\& User/pwent.pm By\-name interface to Perl\*(Aqs builtin getpw*
+\&
+\& Tie/RefHash.pm Base class for tied hashes with references as keys
+\&
+\& UNIVERSAL.pm Base class for *ALL* classes
+.Ve
+.SS Fcntl
+.IX Subsection "Fcntl"
+New constants in the existing Fcntl modules are now supported,
+provided that your operating system happens to support them:
+.PP
+.Vb 3
+\& F_GETOWN F_SETOWN
+\& O_ASYNC O_DEFER O_DSYNC O_FSYNC O_SYNC
+\& O_EXLOCK O_SHLOCK
+.Ve
+.PP
+These constants are intended for use with the Perl operators \fBsysopen()\fR
+and \fBfcntl()\fR and the basic database modules like SDBM_File. For the
+exact meaning of these and other Fcntl constants please refer to your
+operating system's documentation for \fBfcntl()\fR and \fBopen()\fR.
+.PP
+In addition, the Fcntl module now provides these constants for use
+with the Perl operator \fBflock()\fR:
+.PP
+.Vb 1
+\& LOCK_SH LOCK_EX LOCK_NB LOCK_UN
+.Ve
+.PP
+These constants are defined in all environments (because where there is
+no \fBflock()\fR system call, Perl emulates it). However, for historical
+reasons, these constants are not exported unless they are explicitly
+requested with the ":flock" tag (e.g. \f(CW\*(C`use Fcntl \*(Aq:flock\*(Aq\*(C'\fR).
+.SS IO
+.IX Subsection "IO"
+The IO module provides a simple mechanism to load all the IO modules at one
+go. Currently this includes:
+.PP
+.Vb 5
+\& IO::Handle
+\& IO::Seekable
+\& IO::File
+\& IO::Pipe
+\& IO::Socket
+.Ve
+.PP
+For more information on any of these modules, please see its
+respective documentation.
+.SS Math::Complex
+.IX Subsection "Math::Complex"
+The Math::Complex module has been totally rewritten, and now supports
+more operations. These are overloaded:
+.PP
+.Vb 1
+\& + \- * / ** <=> neg ~ abs sqrt exp log sin cos atan2 "" (stringify)
+.Ve
+.PP
+And these functions are now exported:
+.PP
+.Vb 11
+\& pi i Re Im arg
+\& log10 logn ln cbrt root
+\& tan
+\& csc sec cot
+\& asin acos atan
+\& acsc asec acot
+\& sinh cosh tanh
+\& csch sech coth
+\& asinh acosh atanh
+\& acsch asech acoth
+\& cplx cplxe
+.Ve
+.SS Math::Trig
+.IX Subsection "Math::Trig"
+This new module provides a simpler interface to parts of Math::Complex for
+those who need trigonometric functions only for real numbers.
+.SS DB_File
+.IX Subsection "DB_File"
+There have been quite a few changes made to DB_File. Here are a few of
+the highlights:
+.IP \(bu 4
+Fixed a handful of bugs.
+.IP \(bu 4
+By public demand, added support for the standard hash function \fBexists()\fR.
+.IP \(bu 4
+Made it compatible with Berkeley DB 1.86.
+.IP \(bu 4
+Made negative subscripts work with RECNO interface.
+.IP \(bu 4
+Changed the default flags from O_RDWR to O_CREAT|O_RDWR and the default
+mode from 0640 to 0666.
+.IP \(bu 4
+Made DB_File automatically import the \fBopen()\fR constants (O_RDWR,
+O_CREAT etc.) from Fcntl, if available.
+.IP \(bu 4
+Updated documentation.
+.PP
+Refer to the HISTORY section in DB_File.pm for a complete list of
+changes. Everything after DB_File 1.01 has been added since 5.003.
+.SS Net::Ping
+.IX Subsection "Net::Ping"
+Major rewrite \- support added for both udp echo and real icmp pings.
+.SS "Object-oriented overrides for builtin operators"
+.IX Subsection "Object-oriented overrides for builtin operators"
+Many of the Perl builtins returning lists now have
+object-oriented overrides. These are:
+.PP
+.Vb 9
+\& File::stat
+\& Net::hostent
+\& Net::netent
+\& Net::protoent
+\& Net::servent
+\& Time::gmtime
+\& Time::localtime
+\& User::grent
+\& User::pwent
+.Ve
+.PP
+For example, you can now say
+.PP
+.Vb 3
+\& use File::stat;
+\& use User::pwent;
+\& $his = (stat($filename)\->st_uid == pwent($whoever)\->pw_uid);
+.Ve
+.SH "Utility Changes"
+.IX Header "Utility Changes"
+.SS pod2html
+.IX Subsection "pod2html"
+.IP "Sends converted HTML to standard output" 4
+.IX Item "Sends converted HTML to standard output"
+The \fIpod2html\fR utility included with Perl 5.004 is entirely new.
+By default, it sends the converted HTML to its standard output,
+instead of writing it to a file like Perl 5.003's \fIpod2html\fR did.
+Use the \fB\-\-outfile=FILENAME\fR option to write to a file.
+.SS xsubpp
+.IX Subsection "xsubpp"
+.ie n .IP """void"" XSUBs now default to returning nothing" 4
+.el .IP "\f(CWvoid\fR XSUBs now default to returning nothing" 4
+.IX Item "void XSUBs now default to returning nothing"
+Due to a documentation/implementation bug in previous versions of
+Perl, XSUBs with a return type of \f(CW\*(C`void\*(C'\fR have actually been
+returning one value. Usually that value was the GV for the XSUB,
+but sometimes it was some already freed or reused value, which would
+sometimes lead to program failure.
+.Sp
+In Perl 5.004, if an XSUB is declared as returning \f(CW\*(C`void\*(C'\fR, it
+actually returns no value, i.e. an empty list (though there is a
+backward-compatibility exception; see below). If your XSUB really
+does return an SV, you should give it a return type of \f(CW\*(C`SV *\*(C'\fR.
+.Sp
+For backward compatibility, \fIxsubpp\fR tries to guess whether a
+\&\f(CW\*(C`void\*(C'\fR XSUB is really \f(CW\*(C`void\*(C'\fR or if it wants to return an \f(CW\*(C`SV *\*(C'\fR.
+It does so by examining the text of the XSUB: if \fIxsubpp\fR finds
+what looks like an assignment to \f(CWST(0)\fR, it assumes that the
+XSUB's return type is really \f(CW\*(C`SV *\*(C'\fR.
+.SH "C Language API Changes"
+.IX Header "C Language API Changes"
+.ie n .IP """gv_fetchmethod"" and ""perl_call_sv""" 4
+.el .IP "\f(CWgv_fetchmethod\fR and \f(CWperl_call_sv\fR" 4
+.IX Item "gv_fetchmethod and perl_call_sv"
+The \f(CW\*(C`gv_fetchmethod\*(C'\fR function finds a method for an object, just like
+in Perl 5.003. The GV it returns may be a method cache entry.
+However, in Perl 5.004, method cache entries are not visible to users;
+therefore, they can no longer be passed directly to \f(CW\*(C`perl_call_sv\*(C'\fR.
+Instead, you should use the \f(CW\*(C`GvCV\*(C'\fR macro on the GV to extract its CV,
+and pass the CV to \f(CW\*(C`perl_call_sv\*(C'\fR.
+.Sp
+The most likely symptom of passing the result of \f(CW\*(C`gv_fetchmethod\*(C'\fR to
+\&\f(CW\*(C`perl_call_sv\*(C'\fR is Perl's producing an "Undefined subroutine called"
+error on the \fIsecond\fR call to a given method (since there is no cache
+on the first call).
+.ie n .IP """perl_eval_pv""" 4
+.el .IP \f(CWperl_eval_pv\fR 4
+.IX Item "perl_eval_pv"
+A new function handy for eval'ing strings of Perl code inside C code.
+This function returns the value from the eval statement, which can
+be used instead of fetching globals from the symbol table. See
+perlguts, perlembed and perlcall for details and examples.
+.IP "Extended API for manipulating hashes" 4
+.IX Item "Extended API for manipulating hashes"
+Internal handling of hash keys has changed. The old hashtable API is
+still fully supported, and will likely remain so. The additions to the
+API allow passing keys as \f(CW\*(C`SV*\*(C'\fRs, so that \f(CW\*(C`tied\*(C'\fR hashes can be given
+real scalars as keys rather than plain strings (nontied hashes still
+can only use strings as keys). New extensions must use the new hash
+access functions and macros if they wish to use \f(CW\*(C`SV*\*(C'\fR keys. These
+additions also make it feasible to manipulate \f(CW\*(C`HE*\*(C'\fRs (hash entries),
+which can be more efficient. See perlguts for details.
+.SH "Documentation Changes"
+.IX Header "Documentation Changes"
+Many of the base and library pods were updated. These
+new pods are included in section 1:
+.IP perldelta 4
+.IX Item "perldelta"
+This document.
+.IP perlfaq 4
+.IX Item "perlfaq"
+Frequently asked questions.
+.IP perllocale 4
+.IX Item "perllocale"
+Locale support (internationalization and localization).
+.IP perltoot 4
+.IX Item "perltoot"
+Tutorial on Perl OO programming.
+.IP perlapio 4
+.IX Item "perlapio"
+Perl internal IO abstraction interface.
+.IP perlmodlib 4
+.IX Item "perlmodlib"
+Perl module library and recommended practice for module creation.
+Extracted from perlmod (which is much smaller as a result).
+.IP perldebug 4
+.IX Item "perldebug"
+Although not new, this has been massively updated.
+.IP perlsec 4
+.IX Item "perlsec"
+Although not new, this has been massively updated.
+.SH "New Diagnostics"
+.IX Header "New Diagnostics"
+Several new conditions will trigger warnings that were
+silent before. Some only affect certain platforms.
+The following new warnings and errors outline these.
+These messages are classified as follows (listed in
+increasing order of desperation):
+.PP
+.Vb 7
+\& (W) A warning (optional).
+\& (D) A deprecation (optional).
+\& (S) A severe warning (mandatory).
+\& (F) A fatal error (trappable).
+\& (P) An internal error you should never see (trappable).
+\& (X) A very fatal error (nontrappable).
+\& (A) An alien error message (not generated by Perl).
+.Ve
+.ie n .IP """my"" variable %s masks earlier declaration in same scope" 4
+.el .IP """my"" variable \f(CW%s\fR masks earlier declaration in same scope" 4
+.IX Item """my"" variable %s masks earlier declaration in same scope"
+(W) A lexical variable has been redeclared in the same scope, effectively
+eliminating all access to the previous instance. This is almost always
+a typographical error. Note that the earlier variable will still exist
+until the end of the scope or until all closure referents to it are
+destroyed.
+.ie n .IP "%s argument is not a HASH element or slice" 4
+.el .IP "\f(CW%s\fR argument is not a HASH element or slice" 4
+.IX Item "%s argument is not a HASH element or slice"
+(F) The argument to \fBdelete()\fR must be either a hash element, such as
+.Sp
+.Vb 2
+\& $foo{$bar}
+\& $ref\->[12]\->{"susie"}
+.Ve
+.Sp
+or a hash slice, such as
+.Sp
+.Vb 2
+\& @foo{$bar, $baz, $xyzzy}
+\& @{$ref\->[12]}{"susie", "queue"}
+.Ve
+.ie n .IP "Allocation too large: %lx" 4
+.el .IP "Allocation too large: \f(CW%lx\fR" 4
+.IX Item "Allocation too large: %lx"
+(X) You can't allocate more than 64K on an MS-DOS machine.
+.IP "Allocation too large" 4
+.IX Item "Allocation too large"
+(F) You can't allocate more than 2^31+"small amount" bytes.
+.ie n .IP "Applying %s to %s will act on scalar(%s)" 4
+.el .IP "Applying \f(CW%s\fR to \f(CW%s\fR will act on scalar(%s)" 4
+.IX Item "Applying %s to %s will act on scalar(%s)"
+(W) The pattern match (//), substitution (s///), and transliteration (tr///)
+operators work on scalar values. If you apply one of them to an array
+or a hash, it will convert the array or hash to a scalar value (the
+length of an array or the population info of a hash) and then work on
+that scalar value. This is probably not what you meant to do. See
+"grep" in perlfunc and "map" in perlfunc for alternatives.
+.IP "Attempt to free nonexistent shared string" 4
+.IX Item "Attempt to free nonexistent shared string"
+(P) 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.
+.IP "Attempt to use reference as lvalue in substr" 4
+.IX Item "Attempt to use reference as lvalue in substr"
+(W) You supplied a reference as the first argument to \fBsubstr()\fR used
+as an lvalue, which is pretty strange. Perhaps you forgot to
+dereference it first. See "substr" in perlfunc.
+.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?
+.ie n .IP "Can't redefine active sort subroutine %s" 4
+.el .IP "Can't redefine active sort subroutine \f(CW%s\fR" 4
+.IX Item "Can't redefine active sort subroutine %s"
+(F) Perl optimizes the internal handling of sort subroutines and keeps
+pointers into them. You tried to redefine one such sort subroutine when it
+was currently active, which is not allowed. If you really want to do
+this, you should write \f(CW\*(C`sort { &func } @x\*(C'\fR instead of \f(CW\*(C`sort func @x\*(C'\fR.
+.ie n .IP "Can't use bareword (""%s"") as %s ref while ""strict refs"" in use" 4
+.el .IP "Can't use bareword (""%s"") as \f(CW%s\fR ref while ""strict refs"" in use" 4
+.IX Item "Can't use bareword (""%s"") as %s ref while ""strict refs"" in use"
+(F) Only hard references are allowed by "strict refs". Symbolic references
+are disallowed. See perlref.
+.IP "Cannot resolve method `%s' overloading `%s' in package `%s'" 4
+.IX Item "Cannot resolve method `%s' overloading `%s' in package `%s'"
+(P) Internal error trying to resolve overloading specified by a method
+name (as opposed to a subroutine reference).
+.ie n .IP "Constant subroutine %s redefined" 4
+.el .IP "Constant subroutine \f(CW%s\fR redefined" 4
+.IX Item "Constant subroutine %s redefined"
+(S) You redefined a subroutine which had previously been eligible for
+inlining. See "Constant Functions" in perlsub for commentary and
+workarounds.
+.ie n .IP "Constant subroutine %s undefined" 4
+.el .IP "Constant subroutine \f(CW%s\fR undefined" 4
+.IX Item "Constant subroutine %s undefined"
+(S) You undefined a subroutine which had previously been eligible for
+inlining. See "Constant Functions" in perlsub for commentary and
+workarounds.
+.IP "Copy method did not return a reference" 4
+.IX Item "Copy method did not return a reference"
+(F) The method which overloads "=" is buggy. See "Copy Constructor" in overload.
+.IP Died 4
+.IX Item "Died"
+(F) You passed \fBdie()\fR an empty string (the equivalent of \f(CW\*(C`die ""\*(C'\fR) or
+you called it with no args and both \f(CW$@\fR and \f(CW$_\fR were empty.
+.ie n .IP "Exiting pseudo-block via %s" 4
+.el .IP "Exiting pseudo-block via \f(CW%s\fR" 4
+.IX Item "Exiting pseudo-block via %s"
+(W) You are exiting a rather special block construct (like a sort block or
+subroutine) by unconventional means, such as a goto, or a loop control
+statement. See "sort" in perlfunc.
+.IP "Identifier too long" 4
+.IX Item "Identifier too long"
+(F) Perl limits identifiers (names for variables, functions, etc.) to
+252 characters for simple names, somewhat more for compound names (like
+\&\f(CW$A::B\fR). You've exceeded Perl's limits. Future versions of Perl are
+likely to eliminate these arbitrary limitations.
+.ie n .IP "Illegal character %s (carriage return)" 4
+.el .IP "Illegal character \f(CW%s\fR (carriage return)" 4
+.IX Item "Illegal character %s (carriage return)"
+(F) A carriage return character was found in the input. This is an
+error, and not a warning, because carriage return characters can break
+multi-line strings, including here documents (e.g., \f(CW\*(C`print <<EOF;\*(C'\fR).
+.ie n .IP "Illegal switch in PERL5OPT: %s" 4
+.el .IP "Illegal switch in PERL5OPT: \f(CW%s\fR" 4
+.IX Item "Illegal switch in PERL5OPT: %s"
+(X) The PERL5OPT environment variable may only be used to set the
+following switches: \fB\-[DIMUdmw]\fR.
+.IP "Integer overflow in hex number" 4
+.IX Item "Integer overflow in hex number"
+(S) The literal hex number you have specified is too big for your
+architecture. On a 32\-bit architecture the largest hex literal is
+0xFFFFFFFF.
+.IP "Integer overflow in octal number" 4
+.IX Item "Integer overflow in octal number"
+(S) The literal octal number you have specified is too big for your
+architecture. On a 32\-bit architecture the largest octal literal is
+037777777777.
+.IP "internal error: glob failed" 4
+.IX Item "internal error: glob failed"
+(P) Something went wrong with the external program(s) used for \f(CW\*(C`glob\*(C'\fR
+and \f(CW\*(C`<*.c>\*(C'\fR. This may 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. \f(CW\*(C`full_csh=\*(Aq/usr/bin/tcsh\*(Aq\*(C'\fR); otherwise, make them all
+empty (except that \f(CW\*(C`d_csh\*(C'\fR should be \f(CW\*(Aqundef\*(Aq\fR) so that Perl will
+think csh is missing. In either case, after editing config.sh, run
+\&\f(CW\*(C`./Configure \-S\*(C'\fR and rebuild Perl.
+.ie n .IP "Invalid conversion in %s: ""%s""" 4
+.el .IP "Invalid conversion in \f(CW%s:\fR ""%s""" 4
+.IX Item "Invalid conversion in %s: ""%s"""
+(W) Perl does not understand the given format conversion.
+See "sprintf" in perlfunc.
+.IP "Invalid type in pack: '%s'" 4
+.IX Item "Invalid type in pack: '%s'"
+(F) The given character is not a valid pack type. See "pack" in perlfunc.
+.IP "Invalid type in unpack: '%s'" 4
+.IX Item "Invalid type in unpack: '%s'"
+(F) The given character is not a valid unpack type. See "unpack" in perlfunc.
+.IP "Name ""%s::%s"" used only once: possible typo" 4
+.IX Item "Name ""%s::%s"" used only once: possible typo"
+(W) Typographical errors often show up as unique variable names.
+If you had a good reason for having a unique name, then just mention
+it again somehow to suppress the message (the \f(CW\*(C`use vars\*(C'\fR pragma is
+provided for just this purpose).
+.IP "Null picture in formline" 4
+.IX Item "Null picture in formline"
+(F) The first argument to formline must be a valid format picture
+specification. It was found to be empty, which probably means you
+supplied it an uninitialized value. See perlform.
+.IP "Offset outside string" 4
+.IX Item "Offset outside string"
+(F) You tried to do a read/write/send/recv operation with an offset
+pointing outside the buffer. This is difficult to imagine.
+The sole exception to this is that \f(CWsysread()\fRing past the buffer
+will extend the buffer and zero pad the new area.
+.IP "Out of memory!" 4
+.IX Item "Out of memory!"
+(X|F) The \fBmalloc()\fR function returned 0, indicating there was insufficient
+remaining memory (or virtual memory) to satisfy the request.
+.Sp
+The request was judged to be small, so the possibility to trap it
+depends on the way Perl was compiled. By default it is not trappable.
+However, if compiled for this, Perl may use the contents of \f(CW$^M\fR as
+an emergency pool after \fBdie()\fRing with this message. In this case the
+error is trappable \fIonce\fR.
+.ie n .IP "Out of memory during request for %s" 4
+.el .IP "Out of memory during request for \f(CW%s\fR" 4
+.IX Item "Out of memory during request for %s"
+(F) The \fBmalloc()\fR function returned 0, indicating there was insufficient
+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.
+.IP "panic: frexp" 4
+.IX Item "panic: frexp"
+(P) The library function \fBfrexp()\fR failed, making printf("%f") impossible.
+.IP "Possible attempt to put comments in \fBqw()\fR list" 4
+.IX Item "Possible attempt to put comments in qw() list"
+(W) \fBqw()\fR lists contain items separated by whitespace; as with literal
+strings, comment characters are not ignored, but are instead treated
+as literal data. (You may have used different delimiters than the
+parentheses shown here; braces are also frequently used.)
+.Sp
+You probably wrote something like this:
+.Sp
+.Vb 4
+\& @list = qw(
+\& a # a comment
+\& b # another comment
+\& );
+.Ve
+.Sp
+when you should have written this:
+.Sp
+.Vb 4
+\& @list = qw(
+\& a
+\& b
+\& );
+.Ve
+.Sp
+If you really want comments, build your list the
+old-fashioned way, with quotes and commas:
+.Sp
+.Vb 4
+\& @list = (
+\& \*(Aqa\*(Aq, # a comment
+\& \*(Aqb\*(Aq, # another comment
+\& );
+.Ve
+.IP "Possible attempt to separate words with commas" 4
+.IX Item "Possible attempt to separate words with commas"
+(W) \fBqw()\fR lists contain items separated by whitespace; therefore commas
+aren't needed to separate the items. (You may have used different
+delimiters than the parentheses shown here; braces are also frequently
+used.)
+.Sp
+You probably wrote something like this:
+.Sp
+.Vb 1
+\& qw! a, b, c !;
+.Ve
+.Sp
+which puts literal commas into some of the list items. Write it without
+commas if you don't want them to appear in your data:
+.Sp
+.Vb 1
+\& qw! a b c !;
+.Ve
+.IP "Scalar value @%s{%s} better written as $%s{%s}" 4
+.IX Item "Scalar value @%s{%s} better written as $%s{%s}"
+(W) You've used a hash slice (indicated by @) to select a single element of
+a hash. Generally it's better to ask for a scalar value (indicated by $).
+The difference is that \f(CW$foo{&bar}\fR always behaves like a scalar, both when
+assigning to it and when evaluating its argument, while \f(CW@foo{&bar}\fR behaves
+like a list when you assign to it, and provides a list context to its
+subscript, which can do weird things if you're expecting only one subscript.
+.ie n .IP "Stub found while resolving method `%s' overloading `%s' in %s" 4
+.el .IP "Stub found while resolving method `%s' overloading `%s' in \f(CW%s\fR" 4
+.IX Item "Stub found while resolving method `%s' overloading `%s' in %s"
+(P) Overloading resolution over \f(CW@ISA\fR tree may be broken by importing stubs.
+Stubs should never be implicitly created, but explicit calls to \f(CW\*(C`can\*(C'\fR
+may break this.
+.IP "Too late for ""\fB\-T\fR"" option" 4
+.IX Item "Too late for ""-T"" option"
+(X) The #! line (or local equivalent) in a Perl script contains the
+\&\fB\-T\fR option, but Perl was not invoked with \fB\-T\fR in its argument
+list. This is an error because, by the time Perl discovers a \fB\-T\fR in
+a script, it's too late to properly taint everything from the
+environment. So Perl gives up.
+.ie n .IP "untie attempted while %d inner references still exist" 4
+.el .IP "untie attempted while \f(CW%d\fR inner references still exist" 4
+.IX Item "untie attempted while %d inner references still exist"
+(W) A copy of the object returned from \f(CW\*(C`tie\*(C'\fR (or \f(CW\*(C`tied\*(C'\fR) was still
+valid when \f(CW\*(C`untie\*(C'\fR was called.
+.ie n .IP "Unrecognized character %s" 4
+.el .IP "Unrecognized character \f(CW%s\fR" 4
+.IX Item "Unrecognized character %s"
+(F) The Perl parser has no idea what to do with the specified character
+in your Perl script (or eval). Perhaps you tried to run a compressed
+script, a binary program, or a directory as a Perl program.
+.IP "Unsupported function fork" 4
+.IX Item "Unsupported function fork"
+(F) Your version of executable does not support forking.
+.Sp
+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 changing
+the name you call Perl by to \f(CW\*(C`perl_\*(C'\fR, \f(CW\*(C`perl_\|_\*(C'\fR, and so on.
+.IP "Use of ""$$<digit>"" to mean ""${$}<digit>"" is deprecated" 4
+.IX Item "Use of ""$$<digit>"" to mean ""${$}<digit>"" is deprecated"
+(D) Perl versions before 5.004 misinterpreted any type marker followed
+by "$" and a digit. For example, "$$0" was incorrectly taken to mean
+"${$}0" instead of "${$0}". This bug is (mostly) fixed in Perl 5.004.
+.Sp
+However, the developers of Perl 5.004 could not fix this bug completely,
+because at least two widely-used modules depend on the old meaning of
+"$$0" in a string. So Perl 5.004 still interprets "$$<digit>" in the
+old (broken) way inside strings; but it generates this message as a
+warning. And in Perl 5.005, this special treatment will cease.
+.ie n .IP "Value of %s can be ""0""; test with \fBdefined()\fR" 4
+.el .IP "Value of \f(CW%s\fR can be ""0""; test with \fBdefined()\fR" 4
+.IX Item "Value of %s can be ""0""; test with defined()"
+(W) In a conditional expression, you used <HANDLE>, <*> (glob), \f(CWeach()\fR,
+or \f(CWreaddir()\fR as a boolean value. Each of these constructs can return a
+value of "0"; that would make the conditional expression false, which is
+probably not what you intended. When using these constructs in conditional
+expressions, test their values with the \f(CW\*(C`defined\*(C'\fR operator.
+.IP "Variable ""%s"" may be unavailable" 4
+.IX Item "Variable ""%s"" may be unavailable"
+(W) An inner (nested) \fIanonymous\fR subroutine is inside a \fInamed\fR
+subroutine, and outside that is another subroutine; and the anonymous
+(innermost) subroutine is referencing a lexical variable defined in
+the outermost subroutine. For example:
+.Sp
+.Vb 1
+\& sub outermost { my $a; sub middle { sub { $a } } }
+.Ve
+.Sp
+If the anonymous subroutine is called or referenced (directly or
+indirectly) from the outermost subroutine, it will share the variable
+as you would expect. But if the anonymous subroutine is called or
+referenced when the outermost subroutine is not active, it will see
+the value of the shared variable as it was before and during the
+*first* call to the outermost subroutine, which is probably not what
+you want.
+.Sp
+In these circumstances, it is usually best to make the middle
+subroutine anonymous, using the \f(CW\*(C`sub {}\*(C'\fR syntax. Perl has specific
+support for shared variables in nested anonymous subroutines; a named
+subroutine in between interferes with this feature.
+.IP "Variable ""%s"" will not stay shared" 4
+.IX Item "Variable ""%s"" will not stay shared"
+(W) An inner (nested) \fInamed\fR subroutine is referencing a lexical
+variable defined in an outer subroutine.
+.Sp
+When the inner subroutine is called, it will probably see the value of
+the outer subroutine's variable as it was before and during the
+*first* call to the outer subroutine; in this case, after the first
+call to the outer subroutine is complete, the inner and outer
+subroutines will no longer share a common value for the variable. In
+other words, the variable will no longer be shared.
+.Sp
+Furthermore, if the outer subroutine is anonymous and references a
+lexical variable outside itself, then the outer and inner subroutines
+will \fInever\fR share the given variable.
+.Sp
+This problem can usually be solved by making the inner subroutine
+anonymous, using the \f(CW\*(C`sub {}\*(C'\fR syntax. When inner anonymous subs that
+reference variables in outer subroutines are called or referenced,
+they are automatically rebound to the current values of such
+variables.
+.IP "Warning: something's wrong" 4
+.IX Item "Warning: something's wrong"
+(W) You passed \fBwarn()\fR an empty string (the equivalent of \f(CW\*(C`warn ""\*(C'\fR) or
+you called it with no args and \f(CW$_\fR was empty.
+.IP "Ill-formed logical name |%s| in prime_env_iter" 4
+.IX Item "Ill-formed logical name |%s| in prime_env_iter"
+(W) A warning peculiar to VMS. A logical name was encountered when preparing
+to iterate over \f(CW%ENV\fR which violates the syntactic rules governing logical
+names. Since it cannot be translated normally, it is skipped, and will not
+appear in \f(CW%ENV\fR. This may be a benign occurrence, as some software packages
+might directly modify logical name tables and introduce nonstandard names,
+or it may indicate that a logical name table has been corrupted.
+.IP "Got an error from DosAllocMem" 4
+.IX Item "Got an error from DosAllocMem"
+(P) An error peculiar to OS/2. Most probably you're using an obsolete
+version of Perl, and this should not happen anyway.
+.IP "Malformed PERLLIB_PREFIX" 4
+.IX Item "Malformed PERLLIB_PREFIX"
+(F) An error peculiar to OS/2. PERLLIB_PREFIX should be of the form
+.Sp
+.Vb 1
+\& prefix1;prefix2
+.Ve
+.Sp
+or
+.Sp
+.Vb 1
+\& prefix1 prefix2
+.Ve
+.Sp
+with nonempty prefix1 and prefix2. If \f(CW\*(C`prefix1\*(C'\fR is indeed a prefix
+of a builtin library search path, prefix2 is substituted. The error
+may appear if components are not found, or are too long. See
+"PERLLIB_PREFIX" in \fIREADME.os2\fR.
+.IP "PERL_SH_DIR too long" 4
+.IX Item "PERL_SH_DIR too long"
+(F) An error peculiar to OS/2. PERL_SH_DIR is the directory to find the
+\&\f(CW\*(C`sh\*(C'\fR\-shell in. See "PERL_SH_DIR" in \fIREADME.os2\fR.
+.IP "Process terminated by SIG%s" 4
+.IX Item "Process terminated by SIG%s"
+(W) This is a standard message issued by OS/2 applications, while *nix
+applications die in silence. It is considered a feature of the OS/2
+port. One can easily disable this by appropriate sighandlers, see
+"Signals" in perlipc. See also "Process terminated by SIGTERM/SIGINT"
+in \fIREADME.os2\fR.
+.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. This file has been
+significantly updated for 5.004, so even veteran users should
+look through it.
+.PP
+The \fIREADME\fR file for general stuff.
+.PP
+The \fICopying\fR file for copyright information.
+.SH HISTORY
+.IX Header "HISTORY"
+Constructed by Tom Christiansen, grabbing material with permission
+from innumerable contributors, with kibitzing by more than a few Perl
+porters.
+.PP
+Last update: Wed May 14 11:14:09 EDT 1997