This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
import perl5173delta content to perl5180delta
authorRicardo Signes <rjbs@cpan.org>
Mon, 1 Apr 2013 20:32:56 +0000 (16:32 -0400)
committerRicardo Signes <rjbs@cpan.org>
Sun, 5 May 2013 19:32:19 +0000 (15:32 -0400)
Porting/perl5180delta.pod

index 2ae8479..6ae5cfd 100644 (file)
@@ -18,6 +18,13 @@ XXX Any important notices here
 
 =head1 Core Enhancements
 
+=head2 Computed Labels
+
+The loop controls C<next>, C<last> and C<redo>, and the special C<dump>
+operator, now allow arbitrary expressions to be used to compute labels at run
+time.  Previously, any argument that was not a constant was treated as the
+empty string.
+
 =head2 More CORE:: subs
 
 Several more built-in functions have been added as subroutines to the
@@ -53,6 +60,22 @@ L</Selected Bug Fixes> section.
 
 =head1 Incompatible Changes
 
+=head2 Defined values stored in environment are forced to byte strings
+
+A value stored in an environment variable has always been stringified.  In this
+release, it is converted to be only a byte string.  First, it is forced to be a
+only a string.  Then if the string is utf8 and the equivalent of
+C<utf8::downgrade()> works, that result is used; otherwise, the equivalent of
+C<utf8::encode()> is used, and a warning is issued about wide characters
+(L</Diagnostics>).
+
+=head2 C<given> now aliases the global C<$_>
+
+Instead of assigning to an implicit lexical C<$_>, C<given> now makes the
+global C<$_> an alias for its argument, just like C<foreach>.  However, it
+still uses lexical C<$_> if there is lexical C<$_> in scope (again, just like
+C<foreach>) [perl #114020].
+
 =head2 qw(...) can no longer be used as parentheses
 
 C<qw> lists used to fool the parser into thinking they were always
@@ -270,6 +293,18 @@ L<perlcheat> has been reorganized, and a few new sections were added.
 
 =back
 
+=head3 L<perlop>
+
+=over 4
+
+=item *
+
+Loop control verbs (C<dump>, C<goto>, C<next>, C<last> and C<redo>) have always
+had the same precedence as assignment operators, but this was not documented
+until now.
+
+=back
+
 =head3 Diagnostics
 
 The following additions or changes have been made to diagnostic output,
@@ -290,6 +325,24 @@ and New Warnings
 
 =item *
 
+L<Unterminated delimiter for here document|perldiag/"Unterminated delimiter for here document">
+
+This message now occurs when a here document label has an initial quotation
+mark but the final quotation mark is missing.
+
+This replaces a bogus and misleading error message about not finding the label
+itself [perl #114104].
+
+=item *
+
+L<panic: child pseudo-process was never scheduled|perldiag/"panic: child pseudo-process was never scheduled">
+
+This error is thrown when a child pseudo-process in the ithreads implementation
+on Windows was not scheduled within the time period allowed and therefore was
+not able to initialize properly [perl #88840].
+
+=item *
+
 L<Group name must start with a non-digit word character in regex; marked by <-- HERE in mE<sol>%sE<sol>|perldiag/"Group name must start with a non-digit word character in regex; marked by <-- HERE in m/%s/">
 
 This error has been added for C<(?&0)>, which is invalid.  It used to
@@ -313,6 +366,13 @@ as an empty string [perl #113576].
 
 =item *
 
+L<Wide character in setenv|perldiag/"Wide character in %s">
+
+Attempts to put wide characters into environment variables via C<%ENV> now
+provoke this warning.
+
+=item *
+
 "L<Invalid negative number (%s) in chr|perldiag/"Invalid negative number (%s) in chr">"
 
 C<chr()> now warns when passed a negative value [perl #83048].
@@ -398,7 +458,10 @@ L</Platform Support> section, instead.
 
 =item *
 
-XXX
+The pager detection in F<Configure> has been improved to allow responses which
+specify options after the program name, e.g. B</usr/bin/less -R>, if the user
+accepts the default value.  This helps B<perldoc> when handling ANSI escapes
+[perl #72156].
 
 =back
 
@@ -447,13 +510,14 @@ XXX
 
 =head2 Discontinued Platforms
 
-XXX List any platforms that this version of perl no longer compiles on.
-
 =over 4
 
-=item XXX-some-platform
+=item UTS Global
 
-XXX
+Support code relating to UTS global has been removed.  UTS was a mainframe
+version of System V created by Amdahl, subsequently sold to UTS Global.  The
+port has not been touched since before Perl 5.8.0, and UTS Global is now
+defunct.
 
 =back
 
@@ -500,6 +564,18 @@ Building perl with some Windows compilers used to fail due to a problem
 with miniperl's C<glob> operator (which uses the C<perlglob> program)
 deleting the PATH environment variable [perl #113798].
 
+=item Win32
+
+A new makefile option, USE_64_BIT_INT, has been added to the Windows makefiles.
+Set this to "define" when building a 32-bit perl if you want it to use 64-bit
+integers.
+
+Machine code size reductions, already made to the DLLs of XS modules in Perl
+5.17.2, have now been extended to the perl DLL itself.
+
+Building with VC++ 6.0 was inadvertently broken in Perl 5.17.2 but has now been
+fixed again.
+
 =item VMS
 
 All C header files from the top-level directory of the distribution are now
@@ -515,6 +591,10 @@ quotes on the verb were passed through to DCL, which would fail to recognize
 the command.  Also, if the verb is actually a path to an image or command
 procedure on an ODS-5 volume, quoting it now allows the path to contain spaces.
 
+=item VMS
+
+The B<a2p> build has been fixed for the HP C++ compiler on OpenVMS.
+
 =item AIX
 
 Configure now always adds C<-qlanglvl=extc99> to the CC flags on AIX when
@@ -606,17 +686,185 @@ allocator, allowing it to catch more violations than before.
 The old slab allocator for ops, which was only enabled for PERL_IMPLICIT_SYS
 and PERL_DEBUG_READONLY_OPS, has been retired.
 
-
 =back
 
 =head1 Selected Bug Fixes
 
-XXX Important bug fixes in the core language are summarized here.  Bug fixes in
-files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
+=over 4
 
-[ List each fix as a =item entry ]
+=item *
 
-=over 4
+C<\w> now matches the code points U+200C (ZERO WIDTH NON-JOINER) and U+200D
+(ZERO WIDTH JOINER).  C<\W> no longer matches these.  This change is because
+Unicode corrected their definition of what C<\w> should match.
+
+=item *
+
+C<dump LABEL> no longer leaks its label.
+
+=item *
+
+Constant folding no longer changes the behaviour of functions like C<stat()>
+and C<truncate()> that can take either filenames or handles.
+C<stat 1 ? foo : bar> nows treats its argument as a file name (since it is an
+arbitrary expression), rather than the handle "foo".
+
+=item *
+
+C<truncate FOO, $len> no longer falls back to treating "FOO" as a file name if
+the filehandle has been deleted.  This was broken in Perl 5.16.0.
+
+=item *
+
+Subroutine redefinitions after sub-to-glob and glob-to-glob assignments no
+longer cause double frees or panic messages.
+
+=item *
+
+C<s///> now turns vstrings into plain strings when performing a substitution,
+even if the resulting string is the same (C<s/a/a/>).
+
+=item *
+
+Prototype mismatch warnings no longer erroneously treat constant subs as having
+no prototype when they actually have "".
+
+=item *
+
+Constant subroutines and forward declarations no longer prevent prototype
+mismatch warnings from omitting the sub name.
+
+=item *
+
+C<undef> on a subroutine now clears call checkers.
+
+=item *
+
+The C<ref> operator started leaking memory on blessed objects in Perl 5.16.0.
+This has been fixed [perl #114340].
+
+=item *
+
+C<use> no longer tries to parse its arguments as a statement, making
+C<use constant { () };> a syntax error [perl #114222].
+
+=item *
+
+On debugging builds, "uninitialized" warnings inside formats no longer cause
+assertion failures.
+
+=item *
+
+On debugging builds, subroutines nested inside formats no longer cause
+assertion failures [perl #78550].
+
+=item *
+
+Formats and C<use> statements are now permitted inside formats.
+
+=item *
+
+C<print $x> and C<sub { print $x }-E<gt>()> now always produce the same output.
+It was possible for the latter to refuse to close over $x if the variable was
+not active; e.g., if it was defined outside a currently-running named
+subroutine.
+
+=item *
+
+Similarly, C<print $x> and C<print eval '$x'> now produce the same output.
+This also allows "my $x if 0" variables to be seen in the debugger [perl
+#114018].
+
+=item *
+
+Formats called recursively no longer stomp on their own lexical variables, but
+each recursive call has its own set of lexicals.
+
+=item *
+
+Attempting to free an active format or the handle associated with it no longer
+results in a crash.
+
+=item *
+
+Format parsing no longer gets confused by braces, semicolons and low-precedence
+operators.  It used to be possible to use braces as format delimiters (instead
+of C<=> and C<.>), but only sometimes.  Semicolons and low-precedence operators
+in format argument lines no longer confuse the parser into ignoring the line's
+return value.  In format argument lines, braces can now be used for anonymous
+hashes, instead of being treated always as C<do> blocks.
+
+=item *
+
+Formats can now be nested inside code blocks in regular expressions and other
+quoted constructs (C</(?{...})/> and C<qq/${...}/>) [perl #114040].
+
+=item *
+
+Formats are no longer created after compilation errors.
+
+=item *
+
+Some format syntax errors started causing crashes in Perl 5.17.2, but have now
+been fixed.
+
+=item *
+
+Under debugging builds, the B<-DA> command line option started crashing in Perl
+5.16.0.  It has been fixed [perl #114368].
+
+=item *
+
+Scope::Escape compatibility, which was broken in Perl 5.17.2, has been restored
+[perl #113872].
+
+=item *
+
+A potential deadlock scenario involving the premature termination of a pseudo-
+forked child in a Windows build with ithreads enabled has been fixed.  This
+resolves the common problem of the F<t/op/fork.t> test hanging on Windows [perl
+#88840].
+
+=item *
+
+The microperl build, broken since Perl 5.15.7, has now been restored.
+
+=item *
+
+The code which generates errors from C<require()> could potentially read one or
+two bytes before the start of the filename for filenames less than three bytes
+long and ending C</\.p?\z/>.  This has now been fixed.  Note that it could
+never have happened with module names given to C<use()> or C<require()> anyway.
+
+=item *
+
+The handling of pathnames of modules given to C<require()> has been made
+thread-safe on VMS.
+
+=item *
+
+The C<re_compile()> API function, the entry point for perl's regex compiler,
+was accidentally changed in Perl 5.17.1 to operate on the current engine.  This
+has now been restored to its former core-engine-specific state [perl #114302].
+
+=item *
+
+Perl 5.17.1 introduced a memory leak into the re-use of run-time regexes where
+the pattern hasn't changed (i.e. C</$unchanging/>).  This has now been fixed.
+
+=item *
+
+A bug in the compilation of a C</(?{})/> expression which affected the TryCatch
+test suite has been fixed [perl #114242].
+
+=item *
+
+Formats no longer leak.  They started leaking in Perl 5.17.2.
+
+=item *
+
+Pod can now be nested in code inside a quoted construct outside of a string
+eval.  This used to work only within string evals [perl #114040].
 
 =item *
 
@@ -811,7 +1059,6 @@ required for the correct behavior of closures. For example:
         $x =~ /$code/;
     }
 
-
 =item *
 
 The C</msix> and C<(?msix)> etc. flags are now propagated into the return