Allow Perl to use older Unicode releases
authorKarl Williamson <>
Sat, 2 Jun 2012 14:37:18 +0000 (08:37 -0600)
committerKarl Williamson <>
Sat, 2 Jun 2012 14:37:18 +0000 (08:37 -0600)
We have claimed for several releases now that Perl can handle any
release of Unicode so far.  It turns out that this was never entirely
true, and became less true in 5.16 due to the changes necessitated by
Unicode's publishing names for the control characters.  Enough work was
done in 5.16 so that Perl could continue to handle Unicode 6.0, which
meant that someone using Perl 5.14 and Unicode 6.0, and who didn't like
6.1 could still upgrade to Perl 5.16 while retaining 6.0.  By having
mktables able to compile old releases of Unicode, we can continue to
evolve Perl without having to write special code in the core for
backwards Unicode compatibility.

This series of commits is mostly about allowing Perl to work on any
Unicode release.  And, I have done a make test using these patches on
recent bleads for every Unicode release.  Tests fail which use code
points that have yet to be assigned in those earlier releases, as well
as tests that expect certain values that Unicode has since changed, but
Perl works as well as can be expected on all releases.  I changed a few
.t's so that they adapt more to the Unicode release they are run with.

The biggest outage is Unicode::Normalize.  Prior to Unicode 3.0, there
could be decompositions containing more than 2 code points.
Unicode::Normalize will not compile with those early versions.  However,
a trivial change to it (documented now in mktables) to use carp instead
of croak will cause it to compile and run, though all 3-or-more
character decompositions will be unknown to it.  I think that the
earliest release of Unicode that it makes sense to do serious work on is

There is the issue as to how to prevent future changes to mktables from
breaking backwards compatibility.  I don't know how to fix that, except
that as long as I'm involved, I will test it on old releases some time
before code freeze.

Trivial merge