September 23, 2025·4 min read·engineeringperlunicodetext

Perl's development interpreter adopts Unicode 17

Perl 5.43.3 adopts Unicode 17, bringing new character data into the development interpreter. The practical change concerns classification and text behavior as well as the size of the repertoire.

A text-processing program can change its answers after an interpreter upgrade even when its source and input stay the same. Character properties are data, and a newer Unicode version can assign meaning to code points that older data did not recognize. Perl 5.43.3 adopts Unicode 17, making that new data available in the development interpreter.

The release notes state the new support directly and link the Unicode specification. The Perl history records date the release to September 23. This is a development release, so its adoption of Unicode 17 should not be described as a maintenance update to the stable interpreter.

The Unicode 17 release specification dates the standard to September 9. It adds 4,803 characters and brings the total repertoire to 159,801. New scripts include Sidetic, Tolong Siki, Beria Erfe, and Tai Yo. These additions provide the character data against which an implementation can interpret newly encoded text.

I still reach for Perl when a large piece of text needs a one-off transformation. That preference makes the version of its character data relevant to the result, even for a program too short to have a separate dependency file. The interpreter's understanding of characters is one of its dependencies.

New data affects classification

The Perl Unicode documentation in this release describes character properties as part of Unicode support. A property-based operation asks the interpreter about membership in a set defined by that data. Updating the set can change an answer without changing the expression asking the question.

This is different from accepting another byte encoding. The Unicode repertoire assigns characters and properties to code points. UTF-8 supplies an encoding for code points. A program can decode a sequence without having the newest character data needed to classify its resulting code point as a newly assigned character.

The Unicode release's new Tolong Siki decimal digits make that distinction concrete. The release specification explicitly calls out the new set of digits under migration considerations. Software interpreting numeric properties needs to account for those additions. An assumption that every future decimal digit is already represented in today's property data would miss this kind of change.

The consequence depends on which question an application asks. A fixed ASCII character range expresses a narrower rule than a Unicode property query. The former has a literal set written into the expression, while the latter delegates membership to character data. Neither question is inherently the right one for every input format.

Repertoire support is separate from identifier policy

Unicode 17's migration discussion also documents changes to identifier-related security data. Its Identifier_Type review changes recommendations for existing characters, including characters whose status moves between allowed and restricted. This demonstrates that a Unicode release can revise guidance for old characters as well as introduce new ones.

Those security-profile changes should not be casually attributed to every Perl identifier or regex operation. The Unicode page describes synchronized specifications, including Unicode Security Mechanisms, while Perl's release note states Unicode version support. A claim that a particular security profile has become a Perl language rule would require additional implementation evidence.

The useful distinction is between having character data and choosing an application policy. A system may need to represent a character faithfully while restricting its use in an account identifier. Supporting a script does not require accepting every string written in that script wherever an application expects a restricted identifier.

The same applies to layout. Unicode's migration notes identify Tai Yo as requiring complex layout. Interpreter character support does not demonstrate that a terminal has suitable fonts or rendering. Encoding, classification, and display are related parts of text handling with separate implementations.

The interpreter version identifies part of the text model

Unicode publishes normative and informative data for implementers through its character database. Perl's release brings a newer version of that model into its development series. Comparing behavior across interpreters therefore requires recording more than the pattern text and test string. The Unicode version explains which character model supplied the answer.

For me, that is the useful engineering implication of this release. A one-liner can be reproducible as source while still depending on the interpreter's property tables. When a transformation needs a permanently fixed set of accepted characters, that requirement should be stated explicitly instead of assuming the data will never change.

September's release gives module authors a concrete interpreter against which to examine the new data. The distinction between stable and development releases remains relevant, while the Unicode specification supplies the details of what changed in the underlying repertoire. Newly assigned decimal digits are one specific case where a property-based program can legitimately learn a new answer.