This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Improve handling of nested qr/(?[...])/
[perl5.git] / pod / perldelta.pod
index cac576a..3bc0faf 100644 (file)
@@ -27,6 +27,33 @@ here, but most should go in the L</Performance Enhancements> section.
 
 [ List each enhancement as a =head2 entry ]
 
+=head2 Unicode 13.0 (beta) is supported
+
+Using the beta causes us to participate in the soak cycle for
+Unicode.  Final approval for the existing changes has been made by the
+Unicode consortium, and there are few possibilities that this could
+break existing programs, as there are few changes to already existing
+characters.
+
+Information about the changes is at
+L<https://unicode.org/versions/beta-13.0.0.html>.
+
+=head2 New Unicode properties C<Identifier_Status> and C<Identifier_Type> supported
+
+Unicode is in the process of revising its regular expression
+requirements: L<https://www.unicode.org/draft/reports/tr18/tr18.html>.
+As part of that they are wanting more properties to be exposed, ones
+that aren't part of the strict UCD (Unicode character database).  These
+two are used for examining inputs for security purposes.  Details on
+their usage is at L<https://www.unicode.org/reports/tr39/proposed.html>.
+
+=head2 It is now possible to write C<qr/\p{Name=...}/>, or C<\p{Na=...}>
+
+The Unicode Name property is now accessible in regular expression
+patterns using the above syntaxes, as an alternative to C<\N{...}>.
+A comparison of the two methods is given in
+L<perlunicode/Comparison of \N{...} and \p{name=...}>.
+
 =head1 Security
 
 XXX Any security-related notices go here.  In particular, any security
@@ -45,6 +72,22 @@ XXX For a release on a stable branch, this section aspires to be:
 
 [ List each incompatible change as a =head2 entry ]
 
+=head2 Stop pretending C<POSIX::mbstowcs> and C<POSIX::wcstombs> are
+supported
+
+These functions could never have worked due to a defective interface
+specification.  There is clearly no demand for them, given that no one
+has ever complained in the many years the functions were claimed to be
+available, hence so-called "support" for them is now dropped.
+
+=head2 A bug fix for C<(?[...])> may have caused some patterns to no
+longer compile
+
+See L</Selected Bug Fixes>.  The heuristics previously used may have let
+some constructs compile (perhaps not with the programmer's intended
+effect) that should have been errors.  None are known, but it is
+possible that some erroneous constructs no longer compile.
+
 =head1 Deprecations
 
 XXX Any deprecated features, syntax, modules etc. should be listed here.
@@ -125,9 +168,32 @@ XXX Remove this section if not applicable.
 
 =item *
 
-L<XXX> has been upgraded from version A.xx to B.yy.
+L<IO> has been upgraded from version 1.42 to 1.43.
+
+L<IO::Socket> no longer caches a zero protocol value, since this
+indicates that the implementation will select a protocol.  This means
+that on platforms that don't implement C<SO_PROTOCOL> for a given
+socket type the protocol method may return C<undef>.
+
+=item *
+
+L<Storable> has been upgraded from version 3.18 to 3.19.
+
+Use of note() from Test::More is now optional in tests.  This works
+around a circular dependency with Test::More when installing on very
+old perls from CPAN.
+
+=item *
 
-If there was something important to note about this change, include that here.
+L<threads> has been upgraded from version 2.23 to 2.24.
+
+=item *
+
+L<feature> has been upgraded from version 1.57 to 1.58.
+
+A new C<indirect> feature has been added, which is enabled by default
+but allows turning off L<indirect object syntax|perlobj/Indirect
+Object Syntax>.
 
 =back
 
@@ -175,6 +241,11 @@ Additionally, the following selected changes have been made:
 Links to the now defunct L<https://search.cpan.org> site now point at
 the equivalent L<https://metacpan.org> URL.  [GH #17393]
 
+=item *
+
+The man page for L<ExtUtils::XSSymSet> is now only installed on VMS,
+which is the only platform the module is installed on.  [GH #17424]
+
 =back
 
 =head1 Diagnostics
@@ -199,6 +270,12 @@ and New Warnings
 
 XXX L<message|perldiag/"message">
 
+L<Expecting interpolated extended charclass in regex; marked by <-- HERE in mE<sol>%sE<sol>
+|perldiag/"Expecting interpolated extended charclass in regex; marked by <-- HERE in mE<sol>%sE<sol>">
+
+This is a replacement for several error messages listed under
+L</Changes to Existing Diagnostics>.
+
 =back
 
 =head3 New Warnings
@@ -212,6 +289,18 @@ L<Code point 0x%X is not Unicode, and not portable|perldiag/"Code point 0x%X is
 This is actually not a new message, but it is now output when the
 warnings category C<portable> is enabled.
 
+When raised during regular expression pattern compilation, the warning
+has extra text added at the end marking where precisely in the pattern
+it occured.
+
+=item *
+
+L<Non-hex character '%c' terminates \x early.  Resolved as "%s"|perldiag/"Non-hex character '%c' terminates \x early.  Resolved as "%s"">
+
+This replaces a warning that was much less specific, and which gave
+false information.  This new warning parallels the similar
+already-existing one raised for C<\o{}>.
+
 =item *
 
 L<message|perldiag/"message">
@@ -226,7 +315,73 @@ XXX Changes (i.e. rewording) of diagnostic messages go here
 
 =item *
 
-XXX Describe change here
+L<Character following "\c" must be printable ASCII|perldiag/"Character following "\c" must be printable ASCII">
+
+now has extra text added at the end, when raised during regular
+expression pattern compilation, marking where precisely in the pattern
+it occured.
+
+=item *
+
+L<Use "%s" instead of "%s"|perldiag/"Use "%s" instead of "%s"">
+
+now has extra text added at the end, when raised during regular
+expression pattern compilation, marking where precisely in the pattern
+it occured.
+
+=item *
+
+L<Sequence "\c{" invalid|perldiag/"Sequence "\c{" invalid">
+
+now has extra text added at the end, when raised during regular
+expression pattern compilation, marking where precisely in the pattern
+it occured.
+
+=item *
+
+L<"\c%c" is more clearly written simply as "%s"|perldiag/""\c%c" is more clearly written simply as "%s"">
+
+now has extra text added at the end, when raised during regular
+expression pattern compilation, marking where precisely in the pattern
+it occured.
+
+=item *
+
+L<Non-octal character '%c' terminates \o early.  Resolved as "%s"|perldiag/"Non-octal character '%c' terminates \o early.  Resolved as "%s"">
+
+now includes the phrase "terminates \o early", and has extra text added
+at the end, when raised during regular expression pattern compilation,
+marking where precisely in the pattern it occured.  In some instances
+the text of the resolution has been clarified.
+
+=item *
+
+L<'%s' resolved to '\o{%s}%d'|perldiag/'%s' resolved to '\o{%s}%d'>
+
+As of Perl 5.32, this message is no longer generated.  Instead,
+L<perldiag/Non-octal character '%c' terminates \o early.  Resolved as "%s">
+is.
+
+=item *
+
+
+L<Use of code point 0x%s is not allowed; the permissible max is 0x%X|perldiag/"Use of code point 0x%s is not allowed; the permissible max is 0x%X">
+
+Some instances of this message previously output the hex digits C<A>,
+C<B>, C<C>, C<D>, C<E>, and C<F> in lower case.  Now they are all
+consistently upper case.
+
+=item *
+
+The following three diagnostics have been removed, and replaced by
+L<C<Expecting interpolated extended charclass in regex; marked by <-- HERE in mE<sol>%sE<sol>>
+|perldiag/"Expecting interpolated extended charclass in regex; marked by <-- HERE in mE<sol>%sE<sol>">.
+C<Expecting close paren for nested extended charclass in regex; marked
+by <-- HERE in mE<sol>%sE<sol>>,
+C<Expecting close paren for wrapper for nested extended charclass in
+regex; marked by <-- HERE in mE<sol>%sE<sol>>,
+and
+C<Expecting '(?flags:(?[...' in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>>.
 
 =back
 
@@ -291,7 +446,8 @@ made:
 
 =item *
 
-XXX
+F<t/run/switches.t> no longer uses (and re-uses) the F<tmpinplace/>
+directory under F<t/>.  This may prevent spurious failures. [GH #17424]
 
 =back
 
@@ -376,7 +532,24 @@ files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
 
 =item *
 
-XXX
+Previously L<perlfunc/require> would only treat the special built-in
+SV C<&PL_sv_undef> as a value in C<%INC> as if a previous C<require>
+has failed, treating other undefined SVs as if the previous C<require>
+has succeeded.  This could cause unexpected success from C<require>
+eg. on C<local %INC = %INC;>.  This has been fixed [GH #17428]
+
+=item *
+
+C<(?{...})> eval groups in regular expressions no longer unintentionally
+trigger "EVAL without pos change exceeded limit in regex" [GH #17490].
+
+=item *
+
+C<(?[...])> extended bracketed character classes do not wrongly raise an
+error on some cases where a previously-compiled such class is
+interpolated into another.  The heuristics previously used have been
+replaced by a reliable method, and hence the diagnostics generated have
+changed.  See L</Diagnostics>.
 
 =back