This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Version bump and perldelta for Carp
[perl5.git] / pod / perldelta.pod
index 4289130..a5ed058 100644 (file)
@@ -40,6 +40,34 @@ main purpose of this is to allow tests that rely on the stringification
 to not have to change when new modifiers are added.  See
 L<perlre/Extended Patterns>.
 
+=head2 C<"d">, C<"l">, and C<"u"> regex modifiers added
+
+These modifiers are currently only available within a C<(?...)> construct.
+
+The C<"l"> modifier says to compile the regular expression as if it were
+in the scope of C<use locale>, even if it is not.
+
+The C<"u"> modifier currently does nothing.
+
+The C<"d"> modifier is used in the scope of C<use locale> to compile the
+regular expression as if it were not in that scope.
+See L<perlre/(?dlupimsx-imsx)>.
+
+=head2 C<\N{...}> now handles Unicode named character sequences
+
+Unicode has a number of named character sequences, in which particular sequences
+of code points are given names.  C<\N{...}> now recognizes these.
+See L<charnames>.
+
+=head2 New function C<charnames::string_vianame()>
+
+This function is a run-time version of C<\N{...}>, returning the string
+of characters whose Unicode name is its parameter.  It can handle
+Unicode named character sequences, whereas the pre-existing
+C<charnames::vianame()> cannot, as the latter returns a single code
+point.
+See L<charnames>.
+
 =head1 Security
 
 XXX Any security-related notices go here.  In particular, any security
@@ -55,17 +83,39 @@ L</Selected Bug Fixes> section.
 Default regular expression modifiers are now notated by using
 C<(?^...)>.  Code relying on the old stringification will fail.  The
 purpose of this is so that when new modifiers are added, such code will
-not have to change, as the stringification will automatically
-incorporate the new modifiers.
+not have to change (after this one time), as the stringification will
+automatically incorporate the new modifiers.
 
 Code that needs to work properly with both old- and new-style regexes
-can use something like the following:
+can avoid the whole issue by using (for Perls since 5.9.5):
+
+ use re qw(regexp_pattern);
+ my ($pat, $mods) = regexp_pattern($re_ref);
+
+where C<$re_ref> is a reference to a compiled regular expression.  Upon
+return, C<$mods> will be a string containing all the non-default
+modifiers used when the regular expression was compiled, and C<$pattern>
+the actual pattern.
+
+If the actual stringification is important, or older Perls need to be
+supported, you can use something like the following:
 
     # Accept both old and new-style stringification
     my $modifiers = (qr/foobar/ =~ /\Q(?^/) ? '^' : '-xism';
 
 And then use C<$modifiers> instead of C<-xism>.
 
+=head2 Regular expressions retain their localeness when interpolated
+
+Regular expressions compiled under C<"use locale"> now retain this when
+interpolated into a new regular expression compiled outside a
+C<"use locale">, and vice-versa.
+
+Previously, a regular expression interpolated into another one inherited
+the localeness of the surrounding one, losing whatever state it
+originally had.  This is considered a bug fix, but may trip up code that
+has come to rely on the incorrect behavior.
+
 [ List each incompatible change as a =head2 entry ]
 
 =head1 Deprecations
@@ -119,6 +169,66 @@ XXX
 
 =item *
 
+C<Carp> has been upgraded from version 1.18 to 1.19.
+
+It no longer autovivifies the C<*CORE::GLOBAL::caller> glob, something it
+started doing in 1.18, which was released with perl 5.13.4
+L<[perl #78082]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=78082>
+
+=item *
+
+C<Data::Dumper> has been upgraded from version 2.128 to 2.129.
+
+C<Dumpxs> no longer crashes with globs returned by C<*$io_ref>
+L<[perl #72332]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=72332>.
+
+=item *
+
+C<Digest::MD5> has been upgraded from version 2.40 to 2.50.
+
+It is now safe to use this module in combination with threads.
+
+=item *
+
+C<File::DosGlob> has been upgraded from version 1.02 to 1.03.
+
+It allows patterns containing literal parentheses (they no longer need to
+be escaped). On Windows, it no longer adds an extra F<./> to the file names
+returned when the pattern is a relative glob with a drive specification,
+like F<c:*.pl>
+L<[perl #71712]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=71712>.
+
+=item *
+
+C<File::Find> has been upgraded from version 1.17 to 1.18.
+
+It improves handling of backslashes on Windows, so that paths such as
+F<c:\dir\/file> are no longer generated
+L<[perl #71710]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=71710>.
+
+=item *
+
+C<if> has been upgraded from version 0.05 to 0.06
+
+=item *
+
+C<IPC::Open3> has been upgraded from version 1.06 to 1.07.
+
+The internal C<xclose> routine now knows how to handle file descriptors, as
+documented, so duplicating STDIN in a child process using its file
+descriptor now works
+L<[perl #76474]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=71710>.
+
+=item *
+
+C<Locale::Maketext> has been upgraded from version 1.15 to 1.16.
+
+It fixes an infinite loop in C<Locale::Maketext::Guts::_compile()> when
+working with tainted values
+(L<CPAN RT #40727|https://rt.cpan.org/Public/Bug/Display.html?id=40727>).
+
+=item *
+
 C<NEXT> has been upgraded from version 0.64 to 0.65.
 
 =item *
@@ -127,6 +237,18 @@ C<PathTools> has been upgraded from version 3.31_01 to 3.33.
 
 =item *
 
+C<sigtrap> has been upgraded from version 1.04 to 1.05.
+
+It no longer tries to modify read-only arguments when generating a
+backtrace
+L<[perl #72340]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=72340>.
+
+=item *
+
+C<Unicode::Collate> has been upgraded from version 0.59 to 0.60
+
+=item *
+
 C<Unicode::Normalize> has been upgraded from version 1.06 to 1.07
 
 =back
@@ -166,7 +288,8 @@ section.
 
 =item *
 
-XXX Description of the change here
+The documentation for the C<SvTRUE> macro was simply wrong in stating that
+get-magic is not processed. It has been corrected.
 
 =back
 
@@ -201,7 +324,24 @@ XXX Changes (i.e. rewording) of diagnostic messages go here
 
 =item *
 
-XXX
+The 'Layer does not match this perl' error message has been replaced with
+these more helpful messages:
+
+=over 4
+
+=item *
+
+PerlIO layer function table size (%d) does not match size expected by this
+perl (%d)
+
+=item *
+
+PerlIO layer instance size (%d) does not match size expected by this perl
+(%d)
+
+=back
+
+L<[perl #73754]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=73754>
 
 =back
 
@@ -320,7 +460,39 @@ be noted as well.
 
 =item *
 
-XXX
+See L</Regular expressions retain their localeness when interpolated>,
+above.
+
+=item *
+
+The C<sv_cmp_flags>, C<sv_cmp_locale_flags>, C<sv_eq_flags> and
+C<sv_collxfrm_flags> functions have been added. These are like their
+non-_flags counterparts, but allow one to specify whether get-magic is
+processed.
+
+The C<sv_cmp>, C<sv_cmp_locale>, C<sv_eq> and C<sv_collxfrm> functions have
+been replaced with wrappers around the new functions. 
+
+=item *
+
+A new C<sv_2bool_flags> function has been added.
+
+This is like C<sv_2bool>, but it lets the calling code decide whether
+get-magic is handled. C<sv_2bool> is now a macro that calls the new
+function.
+
+=item *
+
+A new macro, C<SvTRUE_nomg>, has been added.
+
+This is like C<SvTRUE>, except that it does not process magic. It uses the
+new C<sv_2bool_flags> function.
+
+=item *
+
+C<sv_catsv_flags> no longer calls C<mg_get> on its second argument (the
+source string) if the flags passed to it do not include SV_GMAGIC. So it
+now matches what the documentation says it does.
 
 =back
 
@@ -356,6 +528,63 @@ to turn into
 at compile time. Now it correctly matches against C<$_>
 L<[perl #20444]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=20444>.
 
+=item *
+
+Parsing Perl code (either with string C<eval> or by loading modules) from
+within a C<UNITCHECK> block no longer causes the interpreter to crash
+L<[perl #70614]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=70614>.
+
+=item *
+
+When C<-d> is used on the shebang (C<#!>) line, the debugger now has access
+to the lines of the main program. In the past, this sometimes worked and
+sometimes did not, depending on what order things happened to be arranged
+in memory
+L<[perl #71806]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=71806>.
+
+=item *
+
+The C<y///> or C<tr///> operator now calls get-magic (e.g., the C<FETCH>
+method of a tie) on its left-hand side just once, not twice
+L<[perl #76814]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=76814>.
+
+=item *
+
+String comparison (C<eq>, C<ne>, C<lt>, C<gt>, C<le>, C<ge> and
+C<cmp>) and logical not (C<not> and C<!>) operators no longer call magic
+(e.g., tie methods) twice on their operands
+L<[perl #76814]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=76814>.
+
+This bug was introduced in an earlier 5.13 release, and does not affect
+perl 5.12.
+
+=item *
+
+When a tied (or other magic) variable is used as, or in, a regular
+expression, it no longer has its C<FETCH> method called twice
+L<[perl #76814]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=76814>.
+
+This bug was introduced in an earlier 5.13 release, and does not affect
+perl 5.12.
+
+=item *
+
+The C<-C> option can now be followed by other options
+L<[perl #72434]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=72434>.
+
+=item *
+
+Assigning a glob to a PVLV used to convert it to a plain string. Now it
+works correctly, and a PVLV can hold a glob. This would happen when a
+nonexistent hash or array element was passed to a subroutine:
+
+  sub { $_[0] = *foo }->($hash{key});
+  # $_[0] would have been the string "*main::foo"
+
+It also happened when a glob was assigned to, or returned from, an element
+of a tied array or hash
+L<[perl #36051]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=36051>.
+
 =back
 
 =head1 Known Problems
@@ -382,6 +611,16 @@ XXX
 XXX If any significant core contributor has died, we've added a short obituary
 here.
 
+=head1 Errata
+
+=over 4
+
+=item *
+
+Fixed a typo in L<perl5135delta> regarding array slices and smart matching
+
+=back
+
 =head1 Acknowledgements
 
 XXX The list of people to thank goes here.