diff --git a/build.gradle b/build.gradle
index 4f2879ad1..4f9a55585 100644
--- a/build.gradle
+++ b/build.gradle
@@ -326,6 +326,7 @@ sourceSets {
srcDir 'src/main/resources'
include '**/*.pm'
include '**/*.pl'
+ include '**/*.pod'
include 'bin/**'
include 'META-INF/services/**'
}
@@ -341,6 +342,7 @@ sourceSets {
tasks.named('processResources', Copy) {
from(sourceSets.main.resources.srcDirs) {
include '**/*.pm'
+ include '**/*.pod'
include 'bin/**'
include 'META-INF/services/**'
}
diff --git a/dev/import-perl5/config.yaml b/dev/import-perl5/config.yaml
index 3eb963bf3..e14ac0e91 100644
--- a/dev/import-perl5/config.yaml
+++ b/dev/import-perl5/config.yaml
@@ -683,6 +683,12 @@ imports:
target: perl5_t/Test-Harness
type: directory
+ # Perl core documentation (perlfunc.pod, perlop.pod, etc.)
+ # Required by jperldoc for -f (function) lookups
+ - source: perl5/pod
+ target: src/main/perl/lib/pod
+ type: directory
+
# Add more imports below as needed
# Example with minimal fields:
# - source: perl5/lib/SomeModule.pm
diff --git a/pom.xml b/pom.xml
index 9d7f38d60..c8d4a3cf5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -80,6 +80,7 @@
**/*.pm
**/*.pl
+ **/*.pod
bin/**
diff --git a/src/main/java/org/perlonjava/core/Configuration.java b/src/main/java/org/perlonjava/core/Configuration.java
index 1a304bd33..45c9291e0 100644
--- a/src/main/java/org/perlonjava/core/Configuration.java
+++ b/src/main/java/org/perlonjava/core/Configuration.java
@@ -33,14 +33,14 @@ public final class Configuration {
* Automatically populated by Gradle/Maven during build.
* DO NOT EDIT MANUALLY - this value is replaced at build time.
*/
- public static final String gitCommitId = "93d20cfa9";
+ public static final String gitCommitId = "6331b9337";
/**
* Git commit date of the build (ISO format: YYYY-MM-DD).
* Automatically populated by Gradle/Maven during build.
* DO NOT EDIT MANUALLY - this value is replaced at build time.
*/
- public static final String gitCommitDate = "2026-03-27";
+ public static final String gitCommitDate = "2026-03-28";
// Prevent instantiation
private Configuration() {
diff --git a/src/main/perl/lib/Pod/Perldoc.pm b/src/main/perl/lib/Pod/Perldoc.pm
index bb6ffc83e..a0de7e086 100644
--- a/src/main/perl/lib/Pod/Perldoc.pm
+++ b/src/main/perl/lib/Pod/Perldoc.pm
@@ -1968,6 +1968,8 @@ sub searchfor {
or ( $ret = $self->check_file("$dir/pod",$s))
or ( $ret = $self->check_file("$dir/pods","$s.pod"))
or ( $ret = $self->check_file("$dir/pods",$s))
+ or ( $ret = $self->check_file("$dir/Pod","$s.pod"))
+ or ( $ret = $self->check_file("$dir/Pod",$s))
) {
DEBUG > 1 and print " Found $ret\n";
return $ret;
diff --git a/src/main/perl/lib/Pod/perl.pod b/src/main/perl/lib/Pod/perl.pod
new file mode 100644
index 000000000..48033e668
--- /dev/null
+++ b/src/main/perl/lib/Pod/perl.pod
@@ -0,0 +1,492 @@
+=head1 NAME
+
+perl - The Perl 5 language interpreter
+
+=head1 SYNOPSIS
+
+B S<[ B<-sTtuUWX> ]>
+ S<[ B<-hv> ] [ B<-V>[:I] ]>
+ S<[ B<-cw> ] [ B<-d>[B][:I] ] [ B<-D>[I] ]>
+ S<[ B<-pna> ] [ B<-F>I ] [ B<-l>[I] ] [ B<-0>[I] ]>
+ S<[ B<-I>I ] [ B<-m>[B<->]I ] [ B<-M>[B<->]I<'module...'> ] [ B<-f> ]>
+ S<[ B<-C [I] >]>
+ S<[ B<-S> ]>
+ S<[ B<-x>[I] ]>
+ S<[ B<-i>[I] ]>
+ S<[ [B<-e>|B<-E>] I<'command'> ] [ B<--> ] [ I ] [ I ]...>
+
+For more information on these options, you can run C.
+
+=head1 GETTING HELP
+
+The F program gives you access to all the documentation that comes
+with Perl. You can get more documentation, tutorials and community support
+online at L .
+
+If you're new to Perl, you should start by running C,
+which is a general intro for beginners and provides some background to help
+you navigate the rest of Perl's extensive documentation. Run C to learn more things you can do with F.
+
+For ease of access, the Perl manual has been split up into several sections.
+
+=begin buildtoc
+
+# This section is parsed by Porting/pod_lib.pl for use by pod/buildtoc etc
+
+flag =g perluniprops perlmodlib perlapi perlintern
+flag =go perltoc
+flag =ro perlcn perljp perlko perltw
+flag = perlvms
+
+path perlfaq.* cpan/perlfaq/lib/
+path perlglossary cpan/perlfaq/lib/
+path perlxs(?:tut|typemap)? dist/ExtUtils-ParseXS/lib/
+path perldoc cpan/Pod-Perldoc/
+
+aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp
+
+=end buildtoc
+
+=head2 Overview
+
+ perl Perl overview (this section)
+ perlintro Perl introduction for beginners
+ perlrun Perl execution and options
+ perltoc Perl documentation table of contents
+
+=head2 Tutorials
+
+ perlreftut Perl references short introduction
+ perldsc Perl data structures intro
+ perllol Perl data structures: arrays of arrays
+
+ perlrequick Perl regular expressions quick start
+ perlretut Perl regular expressions tutorial
+
+ perlootut Perl OO tutorial for beginners
+
+ perlperf Perl Performance and Optimization Techniques
+
+ perlstyle Perl style guide
+
+ perlcheat Perl cheat sheet
+ perltrap Perl traps for the unwary
+ perldebtut Perl debugging tutorial
+
+ perlfaq Perl frequently asked questions
+ perlfaq1 General Questions About Perl
+ perlfaq2 Obtaining and Learning about Perl
+ perlfaq3 Programming Tools
+ perlfaq4 Data Manipulation
+ perlfaq5 Files and Formats
+ perlfaq6 Regexes
+ perlfaq7 Perl Language Issues
+ perlfaq8 System Interaction
+ perlfaq9 Networking
+
+=head2 Reference Manual
+
+ perlsyn Perl syntax: declarations, statements, comments
+ perldata Perl data structures
+ perlop Perl expressions: operators, precedence, string literals
+ perlsub Perl subroutines
+ perlfunc Perl built-in functions
+ perlopentut Perl open() tutorial
+ perlpacktut Perl pack() and unpack() tutorial
+ perlpod Perl plain old documentation
+ perlpodspec Perl plain old documentation format specification
+ perldocstyle Perl style guide for core docs
+ perlpodstyle Perl POD style guide
+ perldiag Perl diagnostic messages
+ perldeprecation Perl deprecations
+ perllexwarn Perl warnings and their control
+ perldebug Perl debugging
+ perlvar Perl predefined variables
+ perlre Perl regular expressions, the rest of the story
+ perlrebackslash Perl regular expression backslash sequences
+ perlrecharclass Perl regular expression character classes
+ perlreref Perl regular expressions quick reference
+ perlref Perl references, the rest of the story
+ perlform Perl formats
+ perlobj Perl objects
+ perltie Perl objects hidden behind simple variables
+ perldbmfilter Perl DBM filters
+ perlclass Perl class syntax
+
+ perlipc Perl interprocess communication
+ perlfork Perl fork() information
+ perlnumber Perl number semantics
+
+ perlthrtut Perl threads tutorial
+
+ perlport Perl portability guide
+ perllocale Perl locale support
+ perluniintro Perl Unicode introduction
+ perlunicode Perl Unicode support
+ perlunicook Perl Unicode cookbook
+ perlunifaq Perl Unicode FAQ
+ perluniprops Index of Unicode properties in Perl
+ perlunitut Perl Unicode tutorial
+ perlebcdic Considerations for running Perl on EBCDIC platforms
+
+ perlsec Perl security
+ perlsecpolicy Perl security report handling policy
+
+ perlmod Perl modules: how they work
+ perlmodlib Perl modules: how to write and use
+ perlmodstyle Perl modules: how to write modules with style
+ perlmodinstall Perl modules: how to install from CPAN
+ perlnewmod Perl modules: preparing a new module for distribution
+ perlpragma Perl modules: writing a user pragma
+
+ perlutil utilities packaged with the Perl distribution
+
+ perlfilter Perl source filters
+
+ perldtrace Perl's support for DTrace
+
+ perlglossary Perl Glossary
+
+=head2 Internals and C Language Interface
+
+ perlembed Perl ways to embed perl in your C or C++ application
+ perldebguts Perl debugging guts and tips
+ perlxstut Perl XS tutorial
+ perlxs Perl XS application programming interface
+ perlxstypemap Perl XS C/Perl type conversion tools
+ perlclib Interacting with standard C library functions
+ perlguts Perl internal functions for those doing extensions
+ perlcall Perl calling conventions from C
+ perlmroapi Perl method resolution plugin interface
+ perlreapi Perl regular expression plugin interface
+ perlreguts Perl regular expression engine internals
+ perlclassguts Internals of class syntax
+
+ perlapi Perl API listing (autogenerated)
+ perlintern Perl internal functions (autogenerated)
+ perliol C API for Perl's implementation of IO in Layers
+ perlapio Perl internal IO abstraction interface
+
+ perlhack Perl hackers guide
+ perlsource Guide to the Perl source tree
+ perlinterp Overview of the Perl interpreter source and how it works
+ perlhacktut Walk through the creation of a simple C code patch
+ perlhacktips Tips for Perl core C code hacking
+ perlpolicy Perl development policies
+ perlgov Perl Rules of Governance
+ perlgit Using git with the Perl repository
+
+=head2 History
+
+ perlhist Perl history records
+ perldelta Perl changes since previous version
+ perl5438delta Perl changes in version 5.43.8
+ perl5437delta Perl changes in version 5.43.7
+ perl5436delta Perl changes in version 5.43.6
+ perl5435delta Perl changes in version 5.43.5
+ perl5434delta Perl changes in version 5.43.4
+ perl5433delta Perl changes in version 5.43.3
+ perl5432delta Perl changes in version 5.43.2
+ perl5431delta Perl changes in version 5.43.1
+ perl5430delta Perl changes in version 5.43.0
+ perl5421delta Perl changes in version 5.42.1
+ perl5420delta Perl changes in version 5.42.0
+ perl5403delta Perl changes in version 5.40.3
+ perl5402delta Perl changes in version 5.40.2
+ perl5401delta Perl changes in version 5.40.1
+ perl5400delta Perl changes in version 5.40.0
+ perl5385delta Perl changes in version 5.38.5
+ perl5384delta Perl changes in version 5.38.4
+ perl5383delta Perl changes in version 5.38.3
+ perl5382delta Perl changes in version 5.38.2
+ perl5381delta Perl changes in version 5.38.1
+ perl5380delta Perl changes in version 5.38.0
+ perl5363delta Perl changes in version 5.36.3
+ perl5362delta Perl changes in version 5.36.2
+ perl5361delta Perl changes in version 5.36.1
+ perl5360delta Perl changes in version 5.36.0
+ perl5343delta Perl changes in version 5.34.3
+ perl5342delta Perl changes in version 5.34.2
+ perl5341delta Perl changes in version 5.34.1
+ perl5340delta Perl changes in version 5.34.0
+ perl5321delta Perl changes in version 5.32.1
+ perl5320delta Perl changes in version 5.32.0
+ perl5303delta Perl changes in version 5.30.3
+ perl5302delta Perl changes in version 5.30.2
+ perl5301delta Perl changes in version 5.30.1
+ perl5300delta Perl changes in version 5.30.0
+ perl5283delta Perl changes in version 5.28.3
+ perl5282delta Perl changes in version 5.28.2
+ perl5281delta Perl changes in version 5.28.1
+ perl5280delta Perl changes in version 5.28.0
+ perl5263delta Perl changes in version 5.26.3
+ perl5262delta Perl changes in version 5.26.2
+ perl5261delta Perl changes in version 5.26.1
+ perl5260delta Perl changes in version 5.26.0
+ perl5244delta Perl changes in version 5.24.4
+ perl5243delta Perl changes in version 5.24.3
+ perl5242delta Perl changes in version 5.24.2
+ perl5241delta Perl changes in version 5.24.1
+ perl5240delta Perl changes in version 5.24.0
+ perl5224delta Perl changes in version 5.22.4
+ perl5223delta Perl changes in version 5.22.3
+ perl5222delta Perl changes in version 5.22.2
+ perl5221delta Perl changes in version 5.22.1
+ perl5220delta Perl changes in version 5.22.0
+ perl5203delta Perl changes in version 5.20.3
+ perl5202delta Perl changes in version 5.20.2
+ perl5201delta Perl changes in version 5.20.1
+ perl5200delta Perl changes in version 5.20.0
+ perl5184delta Perl changes in version 5.18.4
+ perl5182delta Perl changes in version 5.18.2
+ perl5181delta Perl changes in version 5.18.1
+ perl5180delta Perl changes in version 5.18.0
+ perl5163delta Perl changes in version 5.16.3
+ perl5162delta Perl changes in version 5.16.2
+ perl5161delta Perl changes in version 5.16.1
+ perl5160delta Perl changes in version 5.16.0
+ perl5144delta Perl changes in version 5.14.4
+ perl5143delta Perl changes in version 5.14.3
+ perl5142delta Perl changes in version 5.14.2
+ perl5141delta Perl changes in version 5.14.1
+ perl5140delta Perl changes in version 5.14.0
+ perl5125delta Perl changes in version 5.12.5
+ perl5124delta Perl changes in version 5.12.4
+ perl5123delta Perl changes in version 5.12.3
+ perl5122delta Perl changes in version 5.12.2
+ perl5121delta Perl changes in version 5.12.1
+ perl5120delta Perl changes in version 5.12.0
+ perl5101delta Perl changes in version 5.10.1
+ perl5100delta Perl changes in version 5.10.0
+ perl589delta Perl changes in version 5.8.9
+ perl588delta Perl changes in version 5.8.8
+ perl587delta Perl changes in version 5.8.7
+ perl586delta Perl changes in version 5.8.6
+ perl585delta Perl changes in version 5.8.5
+ perl584delta Perl changes in version 5.8.4
+ perl583delta Perl changes in version 5.8.3
+ perl582delta Perl changes in version 5.8.2
+ perl581delta Perl changes in version 5.8.1
+ perl58delta Perl changes in version 5.8.0
+ perl561delta Perl changes in version 5.6.1
+ perl56delta Perl changes in version 5.6
+ perl5005delta Perl changes in version 5.005
+ perl5004delta Perl changes in version 5.004
+
+=head2 Miscellaneous
+
+ perlbook Perl book information
+ perlcommunity Perl community information
+
+ perldoc Look up Perl documentation in Pod format
+
+ perlexperiment A listing of experimental features in Perl
+
+ perlartistic Perl Artistic License
+ perlgpl GNU General Public License
+
+=head2 Language-Specific
+
+=for buildtoc flag +r
+
+ perlcn Perl for Simplified Chinese (in UTF-8)
+ perljp Perl for Japanese (in EUC-JP)
+ perlko Perl for Korean (in EUC-KR)
+ perltw Perl for Traditional Chinese (in Big5)
+
+=head2 Platform-Specific
+
+ perlaix Perl notes for AIX
+ perlamiga Perl notes for AmigaOS
+ perlandroid Perl notes for Android
+ perlbs2000 Perl notes for POSIX-BC BS2000
+ perlcygwin Perl notes for Cygwin
+ perlfreebsd Perl notes for FreeBSD
+ perlhaiku Perl notes for Haiku
+ perlhpux Perl notes for HP-UX
+ perlhurd Perl notes for Hurd
+ perlirix Perl notes for Irix
+ perllinux Perl notes for Linux
+ perlmacosx Perl notes for Mac OS X
+ perlopenbsd Perl notes for OpenBSD
+ perlos2 Perl notes for OS/2
+ perlos390 Perl notes for OS/390
+ perlos400 Perl notes for OS/400
+ perlplan9 Perl notes for Plan 9
+ perlqnx Perl notes for QNX
+ perlriscos Perl notes for RISC OS
+ perlsolaris Perl notes for Solaris
+ perlsynology Perl notes for Synology
+ perltru64 Perl notes for Tru64
+ perlvms Perl notes for VMS
+ perlvos Perl notes for Stratus VOS
+ perlwin32 Perl notes for Windows
+
+=for buildtoc flag -r
+
+=head2 Stubs for Deleted Documents
+
+ perlboot
+ perlbot
+ perlrepository
+ perltodo
+ perltooc
+ perltoot
+
+=for buildtoc __END__
+
+On a Unix-like system, these documentation files will usually also be
+available as manpages for use with the F program.
+
+Some documentation is not available as man pages, so if a
+cross-reference is not found by man, try it with L. Perldoc can
+also take you directly to documentation for functions (with the B<-f>
+switch). See S> (or S> or
+S>) for other helpful options L has to offer.
+
+In general, if something strange has gone wrong with your program and you're
+not sure where you should look for help, try making your code comply with
+B and B. These will often point out exactly
+where the trouble is.
+
+=head1 DESCRIPTION
+
+Perl officially stands for Practical Extraction and Report Language,
+except when it doesn't.
+
+Perl was originally a language optimized for scanning arbitrary
+text files, extracting information from those text files, and printing
+reports based on that information. It quickly became a good language
+for many system management tasks. Over the years, Perl has grown into
+a general-purpose programming language. It's widely used for everything
+from quick "one-liners" to full-scale application development.
+
+The language is intended to be practical (easy to use, efficient,
+complete) rather than beautiful (tiny, elegant, minimal). It combines
+(in the author's opinion, anyway) some of the best features of B,
+B, and B, making it familiar and easy to use for Unix users to
+whip up quick solutions to annoying problems. Its general-purpose
+programming facilities support procedural, functional, and
+object-oriented programming paradigms, making Perl a comfortable
+language for the long haul on major projects, whatever your bent.
+
+Perl's roots in text processing haven't been forgotten over the years.
+It still boasts some of the most powerful regular expressions to be
+found anywhere, and its support for Unicode text is world-class. It
+handles all kinds of structured text, too, through an extensive
+collection of extensions. Those libraries, collected in the CPAN,
+provide ready-made solutions to an astounding array of problems. When
+they haven't set the standard themselves, they steal from the best
+-- just like Perl itself.
+
+=head1 AVAILABILITY
+
+Perl is available for most operating systems, including virtually
+all Unix-like platforms. See L
+for a listing.
+
+=head1 ENVIRONMENT
+
+See L.
+
+=head1 AUTHOR
+
+Larry Wall , with the help of oodles of other folks.
+
+If your Perl success stories and testimonials may be of help to others
+who wish to advocate the use of Perl in their applications,
+or if you wish to simply express your gratitude to Larry and the
+Perl developers, please write to perl-thanks@perl.org .
+
+=head1 FILES
+
+ "@INC" locations of perl libraries
+
+"@INC" above is a reference to the built-in variable of the same name;
+see L for more information.
+
+=head1 SEE ALSO
+
+=over
+
+=item L
+
+the Perl homepage
+
+=item L
+
+Perl articles
+
+=item L
+
+the Comprehensive Perl Archive
+
+=item L
+
+the Perl Mongers
+
+=back
+
+=head1 DIAGNOSTICS
+
+Using the C pragma ensures that all variables are properly
+declared and prevents other misuses of legacy Perl features.
+These are enabled by default within the scope of
+C> (or higher).
+
+The C pragma produces some lovely diagnostics.
+It is enabled by default when you say C (or higher).
+One can also use the B<-w> flag, but its use is normally discouraged,
+because it gets applied to all executed Perl code, including that not under
+your control.
+
+See L for explanations of all Perl's diagnostics. The C pragma automatically turns Perl's normally terse warnings
+and errors into these longer forms.
+
+Compilation errors will tell you the line number of the error, with an
+indication of the next token or token type that was to be examined.
+(In a script passed to Perl via B<-e> switches, each
+B<-e> is counted as one line.)
+
+Setuid scripts have additional constraints that can produce error
+messages such as "Insecure dependency". See L.
+
+Did we mention that you should definitely consider using the B
+pragma?
+
+=head1 BUGS
+
+The behavior implied by the B pragma is not mandatory.
+
+Perl is at the mercy of your machine's definitions of various
+operations such as type casting, atof(), and floating-point
+output with sprintf().
+
+If your stdio requires a seek or eof between reads and writes on a
+particular stream, so does Perl. (This doesn't apply to sysread()
+and syswrite().)
+
+While none of the built-in data types have any arbitrary size limits
+(apart from memory size), there are still a few arbitrary limits: a
+given variable name may not be longer than 251 characters. Line numbers
+displayed by diagnostics are internally stored as short integers,
+so they are limited to a maximum of 65535 (higher numbers usually being
+affected by wraparound).
+
+You may submit your bug reports (be sure to include full configuration
+information as output by the myconfig program in the perl source
+tree, or by C) to L.
+
+Perl actually stands for Pathologically Eclectic Rubbish Lister, but
+don't tell anyone I said that.
+
+=head1 NOTES
+
+The Perl motto is "There's more than one way to do it." Divining
+how many more is left as an exercise to the reader.
+
+The three principal virtues of a programmer are Laziness,
+Impatience, and Hubris. See the Camel Book for why.
+
diff --git a/src/main/perl/lib/Pod/perl5004delta.pod b/src/main/perl/lib/Pod/perl5004delta.pod
new file mode 100644
index 000000000..264483e11
--- /dev/null
+++ b/src/main/perl/lib/Pod/perl5004delta.pod
@@ -0,0 +1,1612 @@
+=head1 NAME
+
+perl5004delta - what's new for perl5.004
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.003 release (as
+documented in I, second edition--the Camel Book) and
+this one.
+
+=head1 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.
+
+=head1 Core Changes
+
+Most importantly, many bugs were fixed, including several security
+problems. See the F file in the distribution for details.
+
+=head2 List assignment to %ENV works
+
+C<%ENV = ()> and C<%ENV = @list> now work as expected (except on VMS
+where it generates a fatal error).
+
+=head2 Change to "Can't locate Foo.pm in @INC" error
+
+The error "Can't locate Foo.pm in @INC" now lists the contents of @INC
+for easier debugging.
+
+=head2 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.
+
+=head2 $PERL5OPT environment variable
+
+You may now put Perl options in the $PERL5OPT 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: B<-[DIMUdmw]>.
+
+=head2 Limitations on B<-M>, B<-m>, and B<-T> options
+
+The C<-M> and C<-m> options are no longer allowed on the C<#!> line of
+a script. If a script needs a module, it should invoke it with the
+C pragma.
+
+The B<-T> option is also forbidden on the C<#!> line of a script,
+unless it was present on the Perl command line. Due to the way C<#!>
+works, this usually means that B<-T> must be in the first argument.
+Thus:
+
+ #!/usr/bin/perl -T -w
+
+will probably work for an executable script invoked as C,
+while:
+
+ #!/usr/bin/perl -w -T
+
+will probably fail under the same conditions. (Non-Unix systems will
+probably not follow this rule.) But C is guaranteed
+to fail, since then there is no chance of B<-T> being found on the
+command line before it is found on the C<#!> line.
+
+=head2 More precise warnings
+
+If you removed the B<-w> 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.
+
+=head2 Deprecated: Inherited C for non-methods
+
+Before Perl 5.004, C functions were looked up as methods
+(using the C<@ISA> hierarchy), even when the function to be autoloaded
+was called as a plain function (e.g. C), not a method
+(e.g. C<< Foo->bar() >> or C<< $obj->bar() >>).
+
+Perl 5.005 will use method lookup only for methods' Cs.
+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 C.
+
+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 C for non-methods from a base class named
+C, execute C<*AUTOLOAD = \&BaseClass::AUTOLOAD> during startup.
+
+=head2 Previously deprecated %OVERLOAD is no longer usable
+
+Using %OVERLOAD to define overloading was deprecated in 5.003.
+Overloading is now defined using the overload pragma. %OVERLOAD is
+still used internally but should not be used by Perl scripts. See
+L for more details.
+
+=head2 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 C<@_>).
+
+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.
+
+For example, given this code:
+
+ undef @a; undef %a;
+ sub show { print $_[0] };
+ sub change { $_[0]++ };
+ show($a[2]);
+ change($a{b});
+
+After this code executes in Perl 5.004, $a{b} exists but $a[2] does
+not. In Perl 5.002 and 5.003, both $a{b} and $a[2] would have existed
+(but $a[2]'s value would have been undefined).
+
+=head2 Group vector changeable with C<$)>
+
+The C<$)> 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 C C function (if there is one).
+However, until this release, there has not been a way to call the
+C C function from Perl.
+
+In Perl 5.004, assigning to C<$)> 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
+C C function (if there is one).
+
+=head2 Fixed parsing of $$, &$, 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.
+
+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 "$$" 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.
+
+=head2 Fixed localization of $, $&, 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 $1,
+$2, etc. no longer being set where existing programs use them.
+
+=head2 No resetting of $. on implicit close
+
+The documentation for Perl 5.0 has always stated that C<$.> is I
+reset when an already-open file handle is reopened with no intervening
+call to C. Due to a bug, perl versions 5.000 through 5.003
+I reset C<$.> under that circumstance; Perl 5.004 does not.
+
+=head2 C may return undef
+
+The C operator returns true if a subroutine is expected to
+return a list, and false otherwise. In Perl 5.004, C 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.
+
+=head2 C 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:
+
+ @a = qw(time now is time);
+ print eval @a;
+ print '|', scalar eval @a;
+
+used to print something like "timenowis881399109|4", but now (and in perl4)
+prints "4|4".
+
+=head2 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
+C<-T> 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.
+
+The new restrictions when tainting include:
+
+=over 4
+
+=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.
+
+=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 $IFS and $PATH.
+
+=item No spawning if tainted $TERM doesn't look like a terminal name
+
+Some termcap libraries do unsafe things with $TERM. However, it would be
+unnecessarily harsh to treat all $TERM values as unsafe, since only shell
+metacharacters can cause trouble in $TERM. So a tainted $TERM is
+considered to be safe if it contains only alphanumerics, underscores,
+dashes, and colons, and unsafe if it contains other characters (including
+whitespace).
+
+=back
+
+=head2 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.
+
+=head2 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.
+
+=head2 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.
+
+In harmony with this change, C<*GLOB{FILEHANDLE}> is now just a
+backward-compatible synonym for C<*GLOB{IO}>.
+
+=head2 Internal change: PerlIO abstraction interface
+
+It is now possible to build Perl with AT&T's sfio IO package
+instead of stdio. See L for more details, and
+the F file for how to use it.
+
+=head2 New and changed syntax
+
+=over 4
+
+=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).
+
+This new syntax follows the pattern of S{FOO} >>> and
+S[$foo] >>>: You may now write S> as
+S($foo) >>>. All these arrow terms may be chained;
+thus, S{FOO}}($bar) >>> may now be written
+S{FOO}->($bar) >>>.
+
+=back
+
+=head2 New and changed builtin constants
+
+=over 4
+
+=item __PACKAGE__
+
+The current package name at compile time, or the undefined value if
+there is no current package (due to a C directive). Like
+C<__FILE__> and C<__LINE__>, C<__PACKAGE__> does I interpolate
+into strings.
+
+=back
+
+=head2 New and changed builtin variables
+
+=over 4
+
+=item $^E
+
+Extended error message on some platforms. (Also known as
+$EXTENDED_OS_ERROR if you C).
+
+=item $^H
+
+The current set of syntax checks enabled by C. See the
+documentation of C for more details. Not actually new, but
+newly documented.
+Because it is intended for internal use by Perl core components,
+there is no C long name for this variable.
+
+=item $^M
+
+By default, running out of memory it is not trappable. However, if
+compiled for this, Perl may use the contents of C<$^M> as an emergency
+pool after die()ing with this message. Suppose that your Perl were
+compiled with -DPERL_EMERGENCY_SBRK and used Perl's malloc. Then
+
+ $^M = 'a' x (1<<16);
+
+would allocate a 64K buffer for use when in emergency.
+See the F file for information on how to enable this option.
+As a disincentive to casual use of this advanced feature,
+there is no C long name for this variable.
+
+=back
+
+=head2 New and changed builtin functions
+
+=over 4
+
+=item delete on slices
+
+This now works. (e.g. C)
+
+=item flock
+
+is now supported on more platforms, prefers fcntl to lockf when
+emulating, and always flushes before (un)locking.
+
+=item printf and sprintf
+
+Perl now implements these functions itself; it doesn't use the C
+library function sprintf() 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.
+
+The new conversions in Perl's sprintf() are:
+
+ %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
+
+The new flags that go between the C<%> and the conversion are:
+
+ # prefix octal with "0", hex with "0x"
+ h interpret integer as C type "short" or "unsigned short"
+ V interpret integer as Perl's standard integer type
+
+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.
+
+See L for a complete list of conversion and flags.
+
+=item keys as an lvalue
+
+As an lvalue, C 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
+
+ keys %hash = 200;
+
+then C<%hash> will have at least 200 buckets allocated for it. These
+buckets will be retained even if you do C<%hash = ()>; use C if you want to free the storage while C<%hash> is still in scope.
+You can't shrink the number of buckets allocated for the hash using
+C in this way (but you needn't worry about doing this by accident,
+as trying has no effect).
+
+=item my() in Control Structures
+
+You can now use my() (with or without the parentheses) in the control
+expressions of control structures such as:
+
+ while (defined(my $line = <>)) {
+ $line = lc $line;
+ } continue {
+ print $line;
+ }
+
+ if ((my $answer = ) =~ /^y(es)?$/i) {
+ user_agrees();
+ } elsif ($answer =~ /^n(o)?$/i) {
+ user_disagrees();
+ } else {
+ chomp $answer;
+ die "`$answer' is neither `yes' nor `no'";
+ }
+
+Also, you can declare a foreach loop control variable as lexical by
+preceding it with the word "my". For example, in:
+
+ foreach my $i (1, 2, 3) {
+ some_function();
+ }
+
+$i is a lexical variable, and the scope of $i extends to the end of
+the loop, but not beyond it.
+
+Note that you still cannot use my() on global punctuation variables
+such as $_ and the like.
+
+=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.
+
+If 'p' or 'P' are given undef as values, they now generate a NULL
+pointer.
+
+Both pack() and unpack() now fail when their templates contain invalid
+types. (Invalid types used to be ignored.)
+
+=item sysseek()
+
+The new sysseek() operator is a variant of seek() that sets and gets the
+file's system read/write position, using the lseek(2) system call. It is
+the only reliable way to seek before using sysread() or syswrite(). Its
+return value is the new position, or the undefined value on failure.
+
+=item use VERSION
+
+If the first argument to C 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 C occurs at compile time, this check happens
+immediately during the compilation process, unlike C,
+which waits until runtime for the check. This is often useful if you
+need to check the current Perl version before Cing library modules
+which have changed in incompatible ways from older versions of Perl.
+(We try not to do this more than we have to.)
+
+=item use Module VERSION LIST
+
+If the VERSION argument is present between Module and LIST, then the
+C 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 $Module::VERSION. (Note that there is not a
+comma after VERSION!)
+
+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.
+
+=item prototype(FUNCTION)
+
+Returns the prototype of a function as a string (or C 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.)
+
+=item srand
+
+The default seed for C, which used to be C, has been changed.
+Now it's a heady mix of difficult-to-predict system-dependent values,
+which should be sufficient for most everyday purposes.
+
+Previous to version 5.004, calling C without first calling C
+would yield the same sequence of random numbers on most or all machines.
+Now, when perl sees that you're calling C and haven't yet called
+C, it calls C with the default seed. You should still call
+C 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.
+
+=item $_ as Default
+
+Functions documented in the Camel to default to $_ now in
+fact do, and all those that do are so documented in L.
+
+=item C does not reset search position on failure
+
+The C match iteration construct has always reset its target
+string's search position (which is visible through the C operator)
+when a match fails; as a result, the next C 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. C. This feature, in conjunction with the C<\G> zero-width
+assertion, makes it possible to chain matches together. See L
+and L.
+
+=item C ignores whitespace before ?*+{}
+
+The C 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, C was
+(mis)interpreted as C. This bug has been fixed in 5.004.
+
+=item nested C closures work now
+
+Prior to the 5.004 release, nested anonymous functions didn't work
+right. They do now.
+
+=item formats work right on changing lexicals
+
+Just like anonymous functions that contain lexical variables
+that change (like a lexical index variable for a C loop),
+formats now work properly. For example, this silently failed
+before (printed only zeros), but is fine now:
+
+ my $i;
+ foreach $i ( 1 .. 10 ) {
+ write;
+ }
+ format =
+ my i is @#
+ $i
+ .
+
+However, it still fails (without a warning) if the foreach is within a
+subroutine:
+
+ my $i;
+ sub foo {
+ foreach $i ( 1 .. 10 ) {
+ write;
+ }
+ }
+ foo;
+ format =
+ my i is @#
+ $i
+ .
+
+=back
+
+=head2 New builtin methods
+
+The C package automatically contains the following methods that
+are inherited by all other classes:
+
+=over 4
+
+=item isa(CLASS)
+
+C returns I if its object is blessed into a subclass of C
+
+C 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:
+
+ use UNIVERSAL qw(isa);
+
+ if(isa($ref, 'ARRAY')) {
+ ...
+ }
+
+=item can(METHOD)
+
+C checks to see if its object has a method called C,
+if it does then a reference to the sub is returned; if it does not then
+I is returned.
+
+=item VERSION( [NEED] )
+
+C returns the version number of the class (package). If the
+NEED argument is given then it will check that the current version (as
+defined by the $VERSION variable in the given package) not less than
+NEED; it will die if this is not the case. This method is normally
+called as a class method. This method is called automatically by the
+C form of C.
+
+ use A 1.2 qw(some imported subs);
+ # implies:
+ A->VERSION(1.2);
+
+=back
+
+B C directly uses Perl's internal code for method lookup, and
+C uses a very similar method and caching strategy. This may cause
+strange effects if the Perl code dynamically changes @ISA in any package.
+
+You may add other methods to the UNIVERSAL class via Perl or XS code.
+You do not need to C in order to make these methods
+available to your program. This is necessary only if you wish to
+have C available as a plain subroutine in the current package.
+
+=head2 TIEHANDLE now supported
+
+See L for other kinds of tie()s.
+
+=over 4
+
+=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.
+
+ sub TIEHANDLE {
+ print "\n";
+ my $i;
+ return bless \$i, shift;
+ }
+
+=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.
+
+ sub PRINT {
+ $r = shift;
+ $$r++;
+ return print join( $, => map {uc} @_), $\;
+ }
+
+=item PRINTF this, LIST
+
+This method will be triggered every time the tied handle is printed to
+with the C function.
+Beyond its self reference it also expects the format and list that was
+passed to the printf function.
+
+ sub PRINTF {
+ shift;
+ my $fmt = shift;
+ print sprintf($fmt, @_)."\n";
+ }
+
+=item READ this LIST
+
+This method will be called when the handle is read from via the C
+or C functions.
+
+ sub READ {
+ $r = shift;
+ my($buf,$len,$offset) = @_;
+ print "READ called, \$buf=$buf, \$len=$len, \$offset=$offset";
+ }
+
+=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.
+
+ sub READLINE {
+ $r = shift;
+ return "PRINT called $$r times\n"
+ }
+
+=item GETC this
+
+This method will be called when the C function is called.
+
+ sub GETC { print "Don't GETC, Get Perl"; return "a"; }
+
+=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.
+
+ sub DESTROY {
+ print " \n";
+ }
+
+=back
+
+=head2 Malloc enhancements
+
+If perl is compiled with the malloc included with the perl distribution
+(that is, if C is 'define') then you can print
+memory statistics at runtime by running Perl thusly:
+
+ env PERL_DEBUG_MSTATS=2 perl your_script_here
+
+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.)
+
+Three new compilation flags are recognized by malloc.c. (They have no
+effect if perl is compiled with system malloc().)
+
+=over 4
+
+=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 C<$^M>. See L"$^M">.
+
+=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 C 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).
+
+Expected memory savings (with 8-byte alignment in C) 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).
+
+=item -DTWO_POT_OPTIMIZE
+
+Similarly to C, 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.
+
+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.
+
+Expected saving of memory is 0-100% (100% in applications which
+require most memory in such 2**n chunks); expected slowdown is
+negligible.
+
+=back
+
+=head2 Miscellaneous efficiency enhancements
+
+Functions that have an empty prototype and that do nothing but return
+a fixed value are now inlined (e.g. C).
+
+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.
+
+=head1 Support for More Operating Systems
+
+Support for the following operating systems is new in Perl 5.004.
+
+=head2 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 L and L, so that many extensions
+available on the Comprehensive Perl Archive Network (CPAN) can now be
+readily built under Windows NT. See http://www.perl.com/ for more
+information on CPAN and F in the perl distribution for more
+details on how to get started with building this port.
+
+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 F in the
+perl distribution for more details on this port and how to obtain the
+Cygwin32 toolkit.
+
+=head2 Plan 9
+
+See F in the perl distribution.
+
+=head2 QNX
+
+See F in the perl distribution.
+
+=head2 AmigaOS
+
+See F in the perl distribution.
+
+=head1 Pragmata
+
+Six new pragmatic modules exist:
+
+=over 4
+
+=item use autouse MODULE => qw(sub1 sub2 sub3)
+
+Defers C 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.
+
+=item use blib
+
+=item use blib 'dir'
+
+Looks for MakeMaker-like I<'blib'> directory structure starting in
+I (or current directory) and working back up to five levels of
+parent directories.
+
+Intended for use on command line with B<-M> option as a way of testing
+arbitrary scripts against an uninstalled version of a package.
+
+=item use constant NAME => VALUE
+
+Provides a convenient interface for creating compile-time constants,
+See L.
+
+=item use locale
+
+Tells the compiler to enable (or disable) the use of POSIX locales for
+builtin operations.
+
+When C 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 B in print). LC_NUMERIC is always used in write, since
+lexical scoping of formats is problematic at best.
+
+Each C or C 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
+POSIX::setlocale().
+
+See L for more information.
+
+=item use ops
+
+Disable unsafe opcodes, or any named opcodes, when compiling Perl code.
+
+=item use vmsish
+
+Enable VMS-specific language features. Currently, there are three
+VMS-specific features available: 'status', which makes C<$?> and
+C return genuine VMS status values instead of emulating POSIX;
+'exit', which makes C take a genuine VMS status value instead of
+assuming that C is an error; and 'time', which makes all times
+relative to the local time zone, in the VMS tradition.
+
+=back
+
+=head1 Modules
+
+=head2 Required Updates
+
+Though Perl 5.004 is compatible with almost all modules that work
+with Perl 5.003, there are a few exceptions:
+
+ Module Required Version for Perl 5.004
+ ------ -------------------------------
+ Filter Filter-1.12
+ LWP libwww-perl-5.08
+ Tk Tk400.202 (-w makes noise)
+
+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.
+
+=head2 Installation directories
+
+The I 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.
+
+=head2 Module information summary
+
+Brand new modules, arranged by topic rather than strictly
+alphabetically:
+
+ CGI.pm Web server interface ("Common Gateway Interface")
+ CGI/Apache.pm Support for Apache's 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's builtin stat
+ Net/hostent.pm By-name interface to Perl's builtin gethost*
+ Net/netent.pm By-name interface to Perl's builtin getnet*
+ Net/protoent.pm By-name interface to Perl's builtin getproto*
+ Net/servent.pm By-name interface to Perl's builtin getserv*
+ Time/gmtime.pm By-name interface to Perl's builtin gmtime
+ Time/localtime.pm By-name interface to Perl's builtin localtime
+ Time/tm.pm Internal object for Time::{gm,local}time
+ User/grent.pm By-name interface to Perl's builtin getgr*
+ User/pwent.pm By-name interface to Perl's builtin getpw*
+
+ Tie/RefHash.pm Base class for tied hashes with references as keys
+
+ UNIVERSAL.pm Base class for *ALL* classes
+
+=head2 Fcntl
+
+New constants in the existing Fcntl modules are now supported,
+provided that your operating system happens to support them:
+
+ F_GETOWN F_SETOWN
+ O_ASYNC O_DEFER O_DSYNC O_FSYNC O_SYNC
+ O_EXLOCK O_SHLOCK
+
+These constants are intended for use with the Perl operators sysopen()
+and fcntl() 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 fcntl() and open().
+
+In addition, the Fcntl module now provides these constants for use
+with the Perl operator flock():
+
+ LOCK_SH LOCK_EX LOCK_NB LOCK_UN
+
+These constants are defined in all environments (because where there is
+no flock() 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. C).
+
+=head2 IO
+
+The IO module provides a simple mechanism to load all the IO modules at one
+go. Currently this includes:
+
+ IO::Handle
+ IO::Seekable
+ IO::File
+ IO::Pipe
+ IO::Socket
+
+For more information on any of these modules, please see its
+respective documentation.
+
+=head2 Math::Complex
+
+The Math::Complex module has been totally rewritten, and now supports
+more operations. These are overloaded:
+
+ + - * / ** <=> neg ~ abs sqrt exp log sin cos atan2 "" (stringify)
+
+And these functions are now exported:
+
+ 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
+
+=head2 Math::Trig
+
+This new module provides a simpler interface to parts of Math::Complex for
+those who need trigonometric functions only for real numbers.
+
+=head2 DB_File
+
+There have been quite a few changes made to DB_File. Here are a few of
+the highlights:
+
+=over 4
+
+=item *
+
+Fixed a handful of bugs.
+
+=item *
+
+By public demand, added support for the standard hash function exists().
+
+=item *
+
+Made it compatible with Berkeley DB 1.86.
+
+=item *
+
+Made negative subscripts work with RECNO interface.
+
+=item *
+
+Changed the default flags from O_RDWR to O_CREAT|O_RDWR and the default
+mode from 0640 to 0666.
+
+=item *
+
+Made DB_File automatically import the open() constants (O_RDWR,
+O_CREAT etc.) from Fcntl, if available.
+
+=item *
+
+Updated documentation.
+
+=back
+
+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.
+
+=head2 Net::Ping
+
+Major rewrite - support added for both udp echo and real icmp pings.
+
+=head2 Object-oriented overrides for builtin operators
+
+Many of the Perl builtins returning lists now have
+object-oriented overrides. These are:
+
+ File::stat
+ Net::hostent
+ Net::netent
+ Net::protoent
+ Net::servent
+ Time::gmtime
+ Time::localtime
+ User::grent
+ User::pwent
+
+For example, you can now say
+
+ use File::stat;
+ use User::pwent;
+ $his = (stat($filename)->st_uid == pwent($whoever)->pw_uid);
+
+=head1 Utility Changes
+
+=head2 pod2html
+
+=over 4
+
+=item Sends converted HTML to standard output
+
+The I 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 I did.
+Use the B<--outfile=FILENAME> option to write to a file.
+
+=back
+
+=head2 xsubpp
+
+=over 4
+
+=item C XSUBs now default to returning nothing
+
+Due to a documentation/implementation bug in previous versions of
+Perl, XSUBs with a return type of C 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.
+
+In Perl 5.004, if an XSUB is declared as returning C, 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 C.
+
+For backward compatibility, I tries to guess whether a
+C XSUB is really C or if it wants to return an C.
+It does so by examining the text of the XSUB: if I finds
+what looks like an assignment to C, it assumes that the
+XSUB's return type is really C.
+
+=back
+
+=head1 C Language API Changes
+
+=over 4
+
+=item C and C
+
+The C 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 C.
+Instead, you should use the C macro on the GV to extract its CV,
+and pass the CV to C.
+
+The most likely symptom of passing the result of C to
+C is Perl's producing an "Undefined subroutine called"
+error on the I call to a given method (since there is no cache
+on the first call).
+
+=item C
+
+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
+L, L and L for details and examples.
+
+=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 Cs, so that C 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 C keys. These
+additions also make it feasible to manipulate Cs (hash entries),
+which can be more efficient. See L for details.
+
+=back
+
+=head1 Documentation Changes
+
+Many of the base and library pods were updated. These
+new pods are included in section 1:
+
+=over 4
+
+=item L
+
+This document.
+
+=item L
+
+Frequently asked questions.
+
+=item L
+
+Locale support (internationalization and localization).
+
+=item L
+
+Tutorial on Perl OO programming.
+
+=item L
+
+Perl internal IO abstraction interface.
+
+=item L
+
+Perl module library and recommended practice for module creation.
+Extracted from L (which is much smaller as a result).
+
+=item L
+
+Although not new, this has been massively updated.
+
+=item L
+
+Although not new, this has been massively updated.
+
+=back
+
+=head1 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):
+
+ (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).
+
+=over 4
+
+=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.
+
+=item %s argument is not a HASH element or slice
+
+(F) The argument to delete() must be either a hash element, such as
+
+ $foo{$bar}
+ $ref->[12]->{"susie"}
+
+or a hash slice, such as
+
+ @foo{$bar, $baz, $xyzzy}
+ @{$ref->[12]}{"susie", "queue"}
+
+=item Allocation too large: %lx
+
+(X) You can't allocate more than 64K on an MS-DOS machine.
+
+=item Allocation too large
+
+(F) You can't allocate more than 2^31+"small amount" bytes.
+
+=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
+L and L for alternatives.
+
+=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.
+
+=item Attempt to use reference as lvalue in substr
+
+(W) You supplied a reference as the first argument to substr() used
+as an lvalue, which is pretty strange. Perhaps you forgot to
+dereference it first. See L.
+
+=item Bareword "%s" refers to nonexistent package
+
+(W) You used a qualified bareword of the form C, but
+the compiler saw no other uses of that namespace before that point.
+Perhaps you need to predeclare a package?
+
+=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 C instead of C.
+
+=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 L.
+
+=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).
+
+=item Constant subroutine %s redefined
+
+(S) You redefined a subroutine which had previously been eligible for
+inlining. See L for commentary and
+workarounds.
+
+=item Constant subroutine %s undefined
+
+(S) You undefined a subroutine which had previously been eligible for
+inlining. See L for commentary and
+workarounds.
+
+=item Copy method did not return a reference
+
+(F) The method which overloads "=" is buggy. See L.
+
+=item Died
+
+(F) You passed die() an empty string (the equivalent of C) or
+you called it with no args and both C<$@> and C<$_> were empty.
+
+=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 L.
+
+=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
+C<$A::B>). You've exceeded Perl's limits. Future versions of Perl are
+likely to eliminate these arbitrary limitations.
+
+=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., C).
+
+=item Illegal switch in PERL5OPT: %s
+
+(X) The PERL5OPT environment variable may only be used to set the
+following switches: B<-[DIMUdmw]>.
+
+=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.
+
+=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.
+
+=item internal error: glob failed
+
+(P) Something went wrong with the external program(s) used for C
+and C<< <*.c> >>. 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. C); otherwise, make them all
+empty (except that C should be C<'undef'>) so that Perl will
+think csh is missing. In either case, after editing config.sh, run
+C<./Configure -S> and rebuild Perl.
+
+=item Invalid conversion in %s: "%s"
+
+(W) Perl does not understand the given format conversion.
+See L.
+
+=item Invalid type in pack: '%s'
+
+(F) The given character is not a valid pack type. See L.
+
+=item Invalid type in unpack: '%s'
+
+(F) The given character is not a valid unpack type. See L.
+
+=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 C pragma is
+provided for just this purpose).
+
+=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 L.
+
+=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 Cing past the buffer
+will extend the buffer and zero pad the new area.
+
+=item Out of memory!
+
+(X|F) The malloc() function returned 0, indicating there was insufficient
+remaining memory (or virtual memory) to satisfy the request.
+
+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 C<$^M> as
+an emergency pool after die()ing with this message. In this case the
+error is trappable I.
+
+=item Out of memory during request for %s
+
+(F) The malloc() 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.
+
+=item panic: frexp
+
+(P) The library function frexp() failed, making printf("%f") impossible.
+
+=item Possible attempt to put comments in qw() list
+
+(W) qw() 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.)
+
+You probably wrote something like this:
+
+ @list = qw(
+ a # a comment
+ b # another comment
+ );
+
+when you should have written this:
+
+ @list = qw(
+ a
+ b
+ );
+
+If you really want comments, build your list the
+old-fashioned way, with quotes and commas:
+
+ @list = (
+ 'a', # a comment
+ 'b', # another comment
+ );
+
+=item Possible attempt to separate words with commas
+
+(W) qw() 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.)
+
+You probably wrote something like this:
+
+ qw! a, b, c !;
+
+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:
+
+ qw! a b c !;
+
+=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 C<$foo{&bar}> always behaves like a scalar, both when
+assigning to it and when evaluating its argument, while C<@foo{&bar}> 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.
+
+=item Stub found while resolving method `%s' overloading `%s' in %s
+
+(P) Overloading resolution over @ISA tree may be broken by importing stubs.
+Stubs should never be implicitly created, but explicit calls to C
+may break this.
+
+=item Too late for "B<-T>" option
+
+(X) The #! line (or local equivalent) in a Perl script contains the
+B<-T> option, but Perl was not invoked with B<-T> in its argument
+list. This is an error because, by the time Perl discovers a B<-T> in
+a script, it's too late to properly taint everything from the
+environment. So Perl gives up.
+
+=item untie attempted while %d inner references still exist
+
+(W) A copy of the object returned from C (or C) was still
+valid when C was called.
+
+=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.
+
+=item Unsupported function fork
+
+(F) Your version of executable does not support forking.
+
+Note that under some systems, like OS/2, there may be different flavors of
+Perl executables, some of which may support fork, some not. Try changing
+the name you call Perl by to C, C, and so on.
+
+=item Use of "$$" to mean "${$}" 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.
+
+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 "$$" 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.
+
+=item Value of %s can be "0"; test with defined()
+
+(W) In a conditional expression, you used , <*> (glob), C,
+or C 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 C operator.
+
+=item Variable "%s" may be unavailable
+
+(W) An inner (nested) I subroutine is inside a I
+subroutine, and outside that is another subroutine; and the anonymous
+(innermost) subroutine is referencing a lexical variable defined in
+the outermost subroutine. For example:
+
+ sub outermost { my $a; sub middle { sub { $a } } }
+
+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.
+
+In these circumstances, it is usually best to make the middle
+subroutine anonymous, using the C syntax. Perl has specific
+support for shared variables in nested anonymous subroutines; a named
+subroutine in between interferes with this feature.
+
+=item Variable "%s" will not stay shared
+
+(W) An inner (nested) I subroutine is referencing a lexical
+variable defined in an outer subroutine.
+
+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.
+
+Furthermore, if the outer subroutine is anonymous and references a
+lexical variable outside itself, then the outer and inner subroutines
+will I share the given variable.
+
+This problem can usually be solved by making the inner subroutine
+anonymous, using the C syntax. When inner anonymous subs that
+reference variables in outer subroutines are called or referenced,
+they are automatically rebound to the current values of such
+variables.
+
+=item Warning: something's wrong
+
+(W) You passed warn() an empty string (the equivalent of C) or
+you called it with no args and C<$_> was empty.
+
+=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 %ENV which violates the syntactic rules governing logical
+names. Since it cannot be translated normally, it is skipped, and will not
+appear in %ENV. 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.
+
+=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.
+
+=item Malformed PERLLIB_PREFIX
+
+(F) An error peculiar to OS/2. PERLLIB_PREFIX should be of the form
+
+ prefix1;prefix2
+
+or
+
+ prefix1 prefix2
+
+with nonempty prefix1 and prefix2. If C 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 F.
+
+=item PERL_SH_DIR too long
+
+(F) An error peculiar to OS/2. PERL_SH_DIR is the directory to find the
+C-shell in. See "PERL_SH_DIR" in F.
+
+=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
+L. See also "Process terminated by SIGTERM/SIGINT"
+in F.
+
+=back
+
+=head1 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.
+
+If you believe you have an unreported bug, please run the B
+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 C, will be sent off to