HTTP/2 200
server: nginx
content-type: text/plain;charset=UTF-8
content-encoding: gzip
content-security-policy: default-src 'self'; connect-src 'self' *.google-analytics.com; img-src 'self' data: www.google-analytics.com www.googletagmanager.com; script-src 'self' 'unsafe-inline' www.google-analytics.com www.googletagmanager.com; style-src 'self'; report-uri /csp-reports
accept-ranges: bytes
age: 0
date: Tue, 14 Oct 2025 19:42:40 GMT
via: 1.1 varnish
x-served-by: cache-bom-vanm7210054-BOM
x-cache: MISS
x-cache-hits: 0
x-timer: S1760470959.100047,VS0,VE986
vary: Accept-Encoding
strict-transport-security: max-age=31557600
content-length: 25343
=encoding utf8
=head1 NAME
perl5280delta - what is new for perl v5.28.0
=head1 DESCRIPTION
This document describes differences between the 5.26.0 release and the 5.28.0
release.
If you are upgrading from an earlier release such as 5.24.0, first read
L
, which describes differences between 5.24.0 and 5.26.0.
=head1 Core Enhancements
=head2 Unicode 10.0 is supported
A list of changes is at
L.
=head2 L|perlfunc/delete EXPR> on key/value hash slices
L|perlfunc/delete EXPR> can now be used on
Lvalue hash slices|perldata/KeyEValue Hash Slices>,
returning the keys along with the deleted values.
L<[GH #15982]|https://github.com/Perl/perl5/issues/15982>
=head2 Experimentally, there are now alphabetic synonyms for some regular expression assertions
If you find it difficult to remember how to write certain of the pattern
assertions, there are now alphabetic synonyms.
CURRENT NEW SYNONYMS
------ ------------
(?=...) (*pla:...) or (*positive_lookahead:...)
(?!...) (*nla:...) or (*negative_lookahead:...)
(?<=...) (*plb:...) or (*positive_lookbehind:...)
(?...) (*atomic:...)
These are considered experimental, so using any of these will raise
(unless turned off) a warning in the C
category.
=head2 Mixed Unicode scripts are now detectable
A mixture of scripts, such as Cyrillic and Latin, in a string is often
the sign of a spoofing attack. A new regular expression construct
now allows for easy detection of these. For example, you can say
qr/(*script_run: \d+ \b )/x
And the digits matched will all be from the same set of 10. You won't
get a look-alike digit from a different script that has a different
value than what it appears to be.
Or:
qr/(*sr: \b \w+ \b )/x
makes sure that all the characters come from the same script.
You can also combine script runs with C<(?E...)> (or
C<*atomic:...)>).
Instead of writing:
(*sr:(?<...))
you can now run:
(*asr:...)
# or
(*atomic_script_run:...)
This is considered experimental, so using it will raise (unless turned
off) a warning in the C category.
See L.
=head2 In-place editing with C is now safer
Previously in-place editing (C) would delete or rename the
input file as soon as you started working on a new file.
Without backups this would result in loss of data if there was an
error, such as a full disk, when writing to the output file.
This has changed so that the input file isn't replaced until the
output file has been completely written and successfully closed.
This works by creating a work file in the same directory, which is
renamed over the input file once the output file is complete.
Incompatibilities:
=over
=item *
Since this renaming needs to only happen once, if you create a thread
or child process, that renaming will only happen in the original
thread or process.
=item *
If you change directories while processing a file, and your operating
system doesn't provide the C, C and C
functions, the final rename step may fail.
=back
L<[GH #15216]|https://github.com/Perl/perl5/issues/15216>
=head2 Initialisation of aggregate state variables
A persistent lexical array or hash variable can now be initialized,
by an expression such as C. Initialization of a
list of persistent lexical variables is still not possible.
=head2 Full-size inode numbers
On platforms where inode numbers are of a type larger than perl's native
integer numerical types, L will preserve the full
content of large inode numbers by returning them in the form of strings of
decimal digits. Exact comparison of inode numbers can thus be achieved by
comparing with C rather than C<==>. Comparison with C<==>, and other
numerical operations (which are usually meaningless on inode numbers),
work as well as they did before, which is to say they fall back to
floating point, and ultimately operate on a fairly useless rounded inode
number if the real inode number is too big for the floating point format.
=head2 The C C<%j> format size modifier is now available with pre-C99 compilers
The actual size used depends on the platform, so remains unportable.
=head2 Close-on-exec flag set atomically
When opening a file descriptor, perl now generally opens it with its
close-on-exec flag already set, on platforms that support doing so.
This improves thread safety, because it means that an C initiated
by one thread can no longer cause a file descriptor in the process
of being opened by another thread to be accidentally passed to the
executed program.
Additionally, perl now sets the close-on-exec flag more reliably, whether
it does so atomically or not. Most file descriptors were getting the
flag set, but some were being missed.
=head2 String- and number-specific bitwise ops are no longer experimental
The new string-specific (C<&. |. ^. ~.>) and number-specific (C<& | ^ ~>)
bitwise operators introduced in Perl 5.22 that are available within the
scope of C