I'm pleased to announce that msys-perl has been updated from the
10-year-old 5.6.1 (April 9, 2001), to the young and spry 5.8.8 (Feb 2,
To install or upgrade:
mingw-get upgrade msys-perl-bin
mingw-get upgrade msys-perl-man (optional)
mingw-get upgrade msys-perl-html (optional)
mingw-get upgrade msys-perl-doc (optional)
mingw-get upgrade msys-perl-lic (optional)
Obviously, you may need to use 'mingw-get install' instead of 'mingw-get
upgrade' if you do not currently have msys-perl installed.
This build contains a workaround for a POSIX-allowable but unexpected
msys behavior in MSYS-1.0.16 and earlier. However, best results will be
obtained using MSYS-1.0.17 or later. For more information, see:
There are new runtime dependencies:
to go along with the existing ones that perl-5.6.1 had
These will be installed automatically by mingw-get if you do not already
have them installed.
In addition, the perlrebase script needs the following, but they will
NOT be installed automatically by mingw-get. If you don't already have
them installed, you'll need to install them manually via 'mingw-get
EITHER mingw32-binutils-bin OR msys-binutils-bin
Most installations will already have these packages, except perhaps
This updated perl release would not have been possible without the
earlier efforts of the msysgit folks, who have long provided a similar
port of perl-5.8.8 for their fork of the msys environment.
In addition, the efforts of LRN were invaluable: (a) providing an
initial port to OUR version of msys of perl-5.8.8, (b) tracking down and
debugging many newly discovered porting mishaps of the new perl on msys,
in both perl proper, the various extensions, and even in MSYS itself,
(c) providing updated versions of the build script which greatly
simplified package creation, given the issues related to DESTDIR
installs on msys, and (d) prodding me to finally get this release
published for general use.
Finally, Reini Urban, the cygwin-perl maintainer, provided assistance
(and example code, patches, and buildscripts), both on several mailing
lists and via his old cygwin perl-5.8.8-4 package.
The new release provides many improvements over the older version. The
following is a list culled from
and summarizes the changes from the 5.6.x series to the 5.8.x series.
For changes between minor revisions in the 5.8.x series, see
For MSYS-specific changes see the appropriate heading below.
- New IO Implementation:
the new PerlIO implementation is both a portable stdio implementation
(at the source code level) and a flexible new framework for richer
- Better Numeric Accuracy:
previous Perls relied on vendors' string-to-number and back
routines which in some cases proved to be too much trust
leading to nonportable and wrong behaviours
- 64-bit support:
64-bit support is now considered to be mature -- if your platform
supports 64-bit integers or address space, you can compile Perl to
use those. (MSYS-PERL is compiled to support 64bit ints)
- Safe Signals:
in previous versions of Perl signals could corrupt Perl's internal
- Many New Modules:
Digest::MD5, File::Temp, Filter::Simple, libnet, List::Util,
Memoize, MIME::Base64, Scalar::Util, Storable, Switch,
Test::More, Test::Simple, Text::Balanced, Tie::File, ...
- Extensive Regression Testing:
Perl has now almost six times as many tests as in 5.6,
and the code is test built daily on several platforms
- Better Unicode Support (NOT APPLICABLE TO MSYS-PERL)
- New Threads Implementation (NOT APPLICABLE TO MSYS-PERL)
- BINARY INCOMPATIBLE:
mainly because of the PerlIO introduction, Perl 5.8 is not
binary compatible with any earlier Perl release, XS MODULES
WILL HAVE TO BE RECOMPILED!
- Hashing Order Changed Once Again:
the function used in the implementation of hashes was changed
to a better one once again, but your code shouldn't be expecting
any particular key ordering
- Attributes For my Now Handled At Run-Time:
the attributes for my() are now run-time, as opposed to compile time
- REF(...) instead of SCALAR(...):
to be consistent with ref()'s results, references to references
now stringify as "REF(...)"
- What the "Camel III" book called an "IO discipline"
is now called an "IO layer"
the functionality of the dump command is now considered obsolete
the user-visible implementation of pseudohashes is going to be removed
and replaced with something cleaner (also, the internal implementation
will have to go since it was found to slow down the overall hash
- Use of tainted data in exec LIST and system LIST:
now gives a warning, but will become fatal error in a future release
- tr///C, tr///U:
the interface was found to be a mistake, pack("C0", ...) and
pack("U0", ...) can be used instead
- The Compiler Suite: bytecompiling and compiling still do not work
- Lvalue subroutines: still experimental
- Interaction of local() and tie(): the exact semantics are still in
- Tied/Magical Array/Hash Elements Do Not Autovivify
- Self-tying arrays and hashes: currently explicitly disallowed
Relative to msys-perl-5.6.1_2-2, this new perl release contains a large
number of additional modules. Some, as noted above, were imported into
perl core upstream in the 5.8.x series; others were added to the msys
distribution as necessary prerequisites of a working CPAN.
Due to the increased number of extensions, AND the fact that a good
percentage of them are XS (that is, C-based) extensions and provide
DLLs, msys-perl is now subject to the dreaded 'sync_with_child' problem
long suffered by modern perl on the cygwin platform. We have adopted a
"solution" similar to theirs. msys-perl now ships with a 'perlrebase'
script, which can be used to manipulate the ImageBase address of all of
those perl-related DLLs, so that they do not overlap. This should fix
any "sync_with_child" issues *RELATED TO PERL*.
Other sync_with_child problems must be addressed using the full
'rebaseall' procedure; see the rebase documentation for more info.
Note that if you use CPAN to install additional modules, you may also
need to re-run 'perlrebase' after installing XS extensions. In addition,
the 'test' phase of the CPAN installation may fail.
- This release is compiled using -DDEBUGGING, which allows the use of
the -D* perl commandline options. This has a slight runtime
performance impact, but the added convenience is worth the cost, IMO.
See `perldoc perlrun'
- msys-perl now supports 64bit wide scalar values
- msys-perl does NOT support multithreaded operation. MSYS's own
threading support is too primitive for perl's needs.
- Bundled extensions: the following list was adopted from cygwin's
perl-5.8.8-4 package set.
- Test results: perl core (after removing 'taint' failures)
Failed 7/989 test scripts, 99.29% okay. 75/116701 subtests
failed, 99.94% okay.
The remaining failures are mostly related to symlinks. See the
release notes for more information:
- Test results: extensions
All tests passed, except for minor failures in five of the bundled
- Internal: msys-perl-5.6.1 was shipped with a giant mega patch.
msysgit's perl-5.8.8 cherry picked portions of that patch, but still
provided it as a monolithic lump, and then shipped a few minor
additional patches on top of that. This version decomposed these
porting patches into a large number of smaller, fine grained patches,
each with a specific focus (functional: "fix build system", or
'area-related': "msys patches for the FOO extension"). It is hoped that
this will ease any future ports of newer perls by making the task of
forward porting the old patches somewhat less daunting.
As a side effect of this 'split the patches' effort, many pieces were
found to be unnecessary, and were discarded thus simplifying further the
msys port of perl.
Why perl-5.8.8 and not perl-5.8.9? or 5.10.x, or 5.12.x -- or the soon
to be released 5.14.0? Several reasons:
1) msysgit had already demonstrated that a port of 5.8.8 to msys was
possible, and suitably reliable for production work.
2) Similarly, msysgit has demonstrated that perl-5.8.8 is sufficiently
new to support many modern perl scripts, especially those bundled
with 'git' -- an important short term goal for MinGW/MSYS is to
provide a working msys port of git (msysgit's port, despite the
project name, is actually a *native* MinGW version).
3) Walk before you run. There were enough issues, especially related
to the sync_with_child problem, simply getting perl-5.8.8 to work.
All of these issues become more and more complex, with the newer perl
releases...so, we tackle the problem where it is easier to solve
(5.8.x) before moving on to the later perl releases.
Now, this is not to say that we do, or do not, plan to release
5.[10|12|14].x perls for msys at some time in the future. We may, but
the timeline is completely up in the air. I can say that it probably
won't be very soon.
Why the particular versions of extensions listed above? Isn't
CPAN-1.9102 very old? Yes. Yes it is. However, these versions were
chosen because (a) they were current when cygwin's perl-5.8.8-4 package
was release, so we KNOW they work correctly with 5.8.8 and don't require
features from newer perl, and (b) cygwin-perl-5.8.8-4 already provides
any necessary patches for these versions of the extensions, not other
You are certainly welcome to update your local install by using CPAN to
d/l, compile, and install newer versions of any of these extensions --
but be aware of the sync_with_child issue related to XS extensions,