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 00:11:17 GMT
via: 1.1 varnish
x-served-by: cache-bom-vanm7210060-BOM
x-cache: MISS
x-cache-hits: 0
x-timer: S1760400676.194731,VS0,VE1156
vary: Accept-Encoding
strict-transport-security: max-age=31557600
content-length: 41656
=encoding utf8
=head1 NAME
perl5200delta - what is new for perl v5.20.0
=head1 DESCRIPTION
This document describes differences between the 5.18.0 release and the
5.20.0 release.
If you are upgrading from an earlier release such as 5.16.0, first read
L
, which describes differences between 5.16.0 and 5.18.0.
=head1 Core Enhancements
=head2 Experimental Subroutine signatures
Declarative syntax to unwrap argument list into lexical variables.
C checks the number of arguments and puts the
arguments into lexical variables. Signatures are not equivalent to
the existing idiom of C. Signatures
are only available by enabling a non-default feature, and generate
warnings about being experimental. The syntactic clash with
prototypes is managed by disabling the short prototype syntax when
signatures are enabled.
See L for details.
=head2 Cs now take a C attribute
When declaring or defining a C, the prototype can now be specified inside
of a C attribute instead of in parens following the name.
For example, C could be rewritten as
C.
=head2 More consistent prototype parsing
Multiple semicolons in subroutine prototypes have long been tolerated and
treated as a single semicolon. There was one case where this did not
happen. A subroutine whose prototype begins with "*" or ";*" can affect
whether a bareword is considered a method name or sub call. This now
applies also to ";;;*".
Whitespace has long been allowed inside subroutine prototypes, so
C is equivalent to C, but until now it was stripped
when the subroutine was parsed. Hence, whitespace was I allowed in
prototypes set by C. Now it is permitted,
and the parser no longer strips whitespace. This means
C returns the original prototype, whitespace and all.
=head2 C now uses a consistent random number generator
Previously perl would use a platform specific random number generator, varying
between the libc rand(), random() or drand48().
This meant that the quality of perl's random numbers would vary from platform
to platform, from the 15 bits of rand() on Windows to 48-bits on POSIX
platforms such as Linux with drand48().
Perl now uses its own internal drand48() implementation on all platforms. This
does not make perl's C cryptographically secure. [perl #115928]
=head2 New slice syntax
The new C<%hash{...}> and C<%array[...]> syntax returns a list of key/value (or
index/value) pairs. See L.
=head2 Experimental Postfix Dereferencing
When the C feature is in effect, the following syntactical
equivalencies are set up:
$sref->$*; # same as ${ $sref } # interpolates
$aref->@*; # same as @{ $aref } # interpolates
$href->%*; # same as %{ $href }
$cref->&*; # same as &{ $cref }
$gref->**; # same as *{ $gref }
$aref->$#*; # same as $#{ $aref }
$gref->*{ $slot }; # same as *{ $gref }{ $slot }
$aref->@[ ... ]; # same as @$aref[ ... ] # interpolates
$href->@{ ... }; # same as @$href{ ... } # interpolates
$aref->%[ ... ]; # same as %$aref[ ... ]
$href->%{ ... }; # same as %$href{ ... }
Those marked as interpolating only interpolate if the associated
C feature is also enabled. This feature is B and
will trigger C-category warnings when used, unless
they are suppressed.
For more information, consult L.
=head2 Unicode 6.3 now supported
Perl now supports and is shipped with Unicode 6.3 (though Perl may be
recompiled with any previous Unicode release as well). A detailed list of
Unicode 6.3 changes is at L.
=head2 New C<\p{Unicode}> regular expression pattern property
This is a synonym for C<\p{Any}> and matches the set of Unicode-defined
code points 0 - 0x10FFFF.
=head2 Better 64-bit support
On 64-bit platforms, the internal array functions now use 64-bit offsets,
allowing Perl arrays to hold more than 2**31 elements, if you have the memory
available.
The regular expression engine now supports strings longer than 2**31
characters. [perl #112790, #116907]
The functions PerlIO_get_bufsiz, PerlIO_get_cnt, PerlIO_set_cnt and
PerlIO_set_ptrcnt now have SSize_t, rather than int, return values and
parameters.
=head2 C> now works on UTF-8 locales
Until this release, only single-byte locales, such as the ISO 8859
series were supported. Now, the increasingly common multi-byte UTF-8
locales are also supported. A UTF-8 locale is one in which the
character set is Unicode and the encoding is UTF-8. The POSIX
C category operations (case changing (like C, C<"\U">),
and character classification (C<\w>, C<\D>, C)) under
such a locale work just as if not under locale, but instead as if under
C>, except taint rules are followed.
Sorting remains by code point order in this release. [perl #56820].
=head2 C> now compiles on systems without locale ability
Previously doing this caused the program to not compile. Within its
scope the program behaves as if in the "C" locale. Thus programs
written for platforms that support locales can run on locale-less
platforms without change. Attempts to change the locale away from the
"C" locale will, of course, fail.
=head2 More locale initialization fallback options
If there was an error with locales during Perl start-up, it immediately
gave up and tried to use the C<"C"> locale. Now it first tries using
other locales given by the environment variables, as detailed in
L. For example, if C and C are
both set, and using the C locale fails, Perl will now try the
C locale, and only if that fails, will it fall back to C<"C">. On
Windows machines, Perl will try, ahead of using C<"C">, the system
default locale if all the locales given by environment variables fail.
=head2 C<-DL> runtime option now added for tracing locale setting
This is designed for Perl core developers to aid in field debugging bugs
regarding locales.
=head2 B<-F> now implies B<-a> and B<-a> implies B<-n>
Previously B<-F> without B<-a> was a no-op, and B<-a> without B<-n> or B<-p>
was a no-op, with this change, if you supply B<-F> then both B<-a> and B<-n>
are implied and if you supply B<-a> then B<-n> is implied.
You can still use B<-p> for its extra behaviour. [perl #116190]
=head2 $a and $b warnings exemption
The special variables $a and $b, used in C, are now exempt from "used
once" warnings, even where C is not used. This makes it easier for
CPAN modules to provide functions using $a and $b for similar purposes.
[perl #120462]
=head1 Security
=head2 Avoid possible read of free()d memory during parsing
It was possible that free()d memory could be read during parsing in the unusual
circumstance of the Perl program ending with a heredoc and the last line of the
file on disk having no terminating newline character. This has now been fixed.
=head1 Incompatible Changes
=head2 C can no longer be used to call subroutines
The C form has resulted in a deprecation warning
since Perl v5.0.0, and is now a syntax error.
=head2 Quote-like escape changes
The character after C<\c> in a double-quoted string ("..." or qq(...))
or regular expression must now be a printable character and may not be
C<{>.
A literal C<{> after C<\B> or C<\b> is now fatal.
These were deprecated in perl v5.14.0.
=head2 Tainting happens under more circumstances; now conforms to documentation
This affects regular expression matching and changing the case of a
string (C, C<"\U">, I.) within the scope of C