diff options
Diffstat (limited to 'Master/tlpkg/tlperl/lib/pods/perl5135delta.pod')
-rw-r--r-- | Master/tlpkg/tlperl/lib/pods/perl5135delta.pod | 592 |
1 files changed, 592 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl/lib/pods/perl5135delta.pod b/Master/tlpkg/tlperl/lib/pods/perl5135delta.pod new file mode 100644 index 00000000000..de76d586bd7 --- /dev/null +++ b/Master/tlpkg/tlperl/lib/pods/perl5135delta.pod @@ -0,0 +1,592 @@ +=encoding utf8 + +=head1 NAME + +perl5135delta - what is new for perl v5.13.5 + +=head1 DESCRIPTION + +This document describes differences between the 5.13.4 release and +the 5.13.5 release. + +If you are upgrading from an earlier release such as 5.13.3, first read +L<perl5134delta>, which describes differences between 5.13.3 and +5.13.4. + +=head1 Core Enhancements + +=head2 Adjacent pairs of nextstate opcodes are now optimized away + +Previously, in code such as + + use constant DEBUG => 0; + + sub GAK { + warn if DEBUG; + print "stuff\n"; + } + +the ops for C<warn if DEBUG;> would be folded to a C<null> op (C<ex-const>), but +the C<nextstate> op would remain, resulting in a runtime op dispatch of +C<nextstate>, C<nextstate>, ... + +The execution of a sequence of C<nextstate> ops is indistinguishable from just +the last C<nextstate> op so the peephole optimizer now eliminates the first of +a pair of C<nextstate> ops, except where the first carries a label, since labels +must not be eliminated by the optimizer and label usage isn't conclusively known +at compile time. + +=head2 API function to parse statements + +The C<parse_fullstmt> function has been added to allow parsing of a single +complete Perl statement. See L<perlapi> for details. + +=head2 API functions for accessing the runtime hinthash + +A new C API for introspecting the hinthash C<%^H> at runtime has been added. +See C<cop_hints_2hv>, C<cop_hints_fetchpvn>, C<cop_hints_fetchpvs>, +C<cop_hints_fetchsv>, and C<hv_copy_hints_hv> in L<perlapi> for details. + +=head2 C interface to C<caller()> + +The C<caller_cx> function has been added as an XSUB-writer's equivalent of +C<caller()>. See L<perlapi> for details. + +=head1 Incompatible Changes + +=head2 Magic variables outside the main package + +In previous versions of Perl, magic variables like C<$!>, C<%SIG>, etc. would +'leak' into other packages. So C<%foo::SIG> could be used to access signals, +C<${"foo::!"}> (with strict mode off) to access C's C<errno>, etc. + +This was a bug, or an 'unintentional' feature, which caused various ill effects, +such as signal handlers being wiped when modules were loaded, etc. + +This has been fixed (or the feature has been removed, depending on how you see +it). + +=head2 Smart-matching against array slices + +Previously, the following code resulted in a successful match: + + my @a = qw(a y0 z); + my @b = qw(a x0 z); + @a[0 .. $#b] ~~ @b; + +This odd behaviour has now been fixed +L<[perl #77468]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=77468>. + +=head2 C API changes + +The first argument of the C API function C<Perl_fetch_cop_label> has changed +from C<struct refcounted he *> to C<COP *>, to better insulate the user from +implementation details. + +This API function was marked as "may change", and likely isn't in use outside +the core. (Neither an unpacked CPAN, nor Google's codesearch, finds any other +references to it.) + +=head1 Deprecations + +=head2 Use of qw(...) as parentheses + +Historically the parser fooled itself into thinking that C<qw(...)> literals +were always enclosed in parentheses, and as a result you could sometimes omit +parentheses around them: + + for $x qw(a b c) { ... } + +The parser no longer lies to itself in this way. Wrap the list literal in +parentheses, like: + + for $x (qw(a b c)) { ... } + +=head1 Performance Enhancements + +=over 4 + +=item * + +Scalars containing regular expressions now only allocate the part of the C<SV> +body they actually use, saving some space. + +=item * + +Compiling regular expressions has been made faster for the case where upgrading +the regex to utf8 is necessary but that isn't known when the compilation begins. + +=back + +=head1 Modules and Pragmata + +=head2 Updated Modules and Pragmata + +=over 4 + +=item C<bignum> + +Upgraded from version 0.23 to 0.25. + +=item C<blib> + +Upgraded from version 1.05 to 1.06. + +=item C<open> + +Upgraded from version 1.07 to 1.08. + +=item C<threads-shared> + +Upgraded from version 1.33_02 to 1.33_03. + +=item C<warnings> and C<warnings::register> + +Upgraded from version 1.10 to 1.11 and from version 1.01 to 1.02 respectively. + +It is now possible to register warning categories other than the names of +packages using C<warnings::register>. See L<perllexwarn> for more information. + +=item C<B::Debug> + +Upgraded from version 1.12 to 1.16. + +=item C<CPANPLUS::Dist::Build> + +Upgraded from version 0.46 to 0.48. + +=item C<Data::Dumper> + +Upgraded from version 2.126 to 2.128. + +This fixes a crash when using custom sort functions that might cause the stack +to change. + +=item C<Encode> + +Upgraded from version 2.39 to 2.40. + +=item C<Errno> + +Upgraded from version 1.12 to 1.13. + +On some platforms with unusual header files, like Win32/gcc using mingw64 +headers, some constants which weren't actually error numbers have been exposed +by C<Errno>. This has been fixed +L<[perl #77416]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=77416>. + +=item C<ExtUtils::MakeMaker> + +Upgraded from version 6.5601 to 6.57_05. + +=item C<Filter::Simple> + +Upgraded from version 0.84 to 0.85. + +=item C<Hash::Util> + +Upgraded from version 0.08 to 0.09. + +=item C<Math::BigInt> + +Upgraded from version 1.89_01 to 1.95. + +This fixes, among other things, incorrect results when computing binomial +coefficients +L<[perl #77640]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77640>. + +=item C<Math::BigInt::FastCalc> + +Upgraded from version 0.19 to 0.22. + +=item C<Math::BigRat> + +Upgraded from version 0.24 to 0.26. + +=item C<Module::CoreList> + +Upgraded from version 2.37 to 2.38. + +=item C<PerlIO::scalar> + +Upgraded from version 0.08 to 0.09. + +=item C<POSIX> + +Upgraded from version 1.19 to 1.20. + +It now includes constants for POSIX signal constants. + +=item C<Safe> + +Upgraded from version 2.27 to 2.28. + +This fixes a possible infinite loop when looking for coderefs. + +=item C<Test::Simple> + +Upgraded from version 0.96 to 0.97_01. + +=item C<Tie::Hash> + +Upgraded from version 1.03 to 1.04. + +Calling C<< Tie::Hash-E<gt>TIEHASH() >> used to loop forever. Now it C<croak>s. + +=item C<Unicode::Collate> + +Upgraded from version 0.56 to 0.59. + +=item C<XSLoader> + +Upgraded from version 0.10 to 0.11. + +=back + +=head1 Documentation + +=head2 Changes to Existing Documentation + +=head3 L<perlapi> + +=over 4 + +=item * + +Many of the optree construction functions are now documented. + +=back + +=head3 L<perlbook> + +=over 4 + +=item * + +Expanded to cover many more popular books. + +=back + +=head3 L<perlfaq> + +=over 4 + +=item * + +L<perlfaq>, L<perlfaq2>, L<perlfaq4>, L<perlfaq5>, L<perlfaq6>, L<perlfaq8>, and +L<perlfaq9> have seen various updates and modernizations. + +=back + +=head1 Diagnostics + +The following additions or changes have been made to diagnostic output, +including warnings and fatal error messages. For the complete list of +diagnostic messages, see L<perldiag>. + +=head2 New Diagnostics + +=over 4 + +=item * + +Parsing code internal error (%s) + +New fatal error produced when parsing code supplied by an extension violated the +parser's API in a detectable way. + +=item * + +Use of qw(...) as parentheses is deprecated + +See L</"Use of qw(...) as parentheses"> for details. + +=back + +=head2 Changes to Existing Diagnostics + +=over 4 + +=item * + +C<warn> and C<die> now produce 'Wide character' warnings when fed a +character outside the byte range if STDERR is a byte-sized handle. + +=back + +=head1 Utility Changes + +=head3 L<h2ph> + +=over 4 + +=item * + +The use of a deprecated C<goto> construct has been removed +L<[perl #74404]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=74404>. + +=back + +=head1 Testing + +=over 4 + +=item * + +The new F<t/lib/universal.t> script tests the Internal::* functions and other +things in F<universal.c>. + +=item * + +A rare race condition in F<t/op/while_readdir.t> has been fixed, stopping it +from failing randomly when running tests in parallel. + +=item * + +The new F<t/op/leaky-magic.t> script tests that magic applied to variables in +the main packages does not affect other packages. + +=back + +=head1 Platform Support + +=head2 Platform-Specific Notes + +=over 4 + +=item VMS + +=over 4 + +=item * + +Make C<PerlIOUnix_open> honour default permissions on VMS. + +When C<perlio> became the default and C<unixio> became the default bottom layer, +the most common path for creating files from Perl became C<PerlIOUnix_open>, +which has always explicitly used C<0666> as the permission mask. + +To avoid this, C<0777> is now passed as the permissions to C<open()>. In the +VMS CRTL, C<0777> has a special meaning over and above intersecting with the +current umask; specifically, it allows Unix syscalls to preserve native default +permissions. + +=back + +=back + +=head1 Internal Changes + +=over 4 + +=item * + +C<CALL_FPTR> and C<CPERLscope> have been deprecated. + +Those are left from an old implementation of C<MULTIPLICITY> using C++ objects, +which was removed in Perl 5.8. Nowadays these macros do exactly nothing, so +they shouldn't be used anymore. + +For compatibility, they are still defined for external C<XS> code. Only +extensions defining C<PERL_CORE> must be updated now. + +=item * + +C<lex_stuff_pvs()> has been added as a convenience macro wrapping +C<lex_stuff_pvn()> for literal strings. + +=item * + +The recursive part of the peephole optimizer is now hookable. + +In addition to C<PL_peepp>, for hooking into the toplevel peephole optimizer, a +C<PL_rpeepp> is now available to hook into the optimizer recursing into +side-chains of the optree. + +=back + +=head1 Selected Bug Fixes + +=over 4 + +=item * + +A regression introduced in Perl 5.12.0, making +C<< my $x = 3; $x = length(undef) >> result in C<$x> set to C<3> has been +fixed. C<$x> will now be C<undef>. + +=item * + +A fatal error in regular expressions when processing UTF-8 data has been fixed +L<[perl #75680]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=75680>. + +=item * + +An erroneous regular expression engine optimization that caused regex verbs like +C<*COMMIT> to sometimes be ignored has been removed. + +=item * + +The Perl debugger now also works in taint mode +L<[perl #76872]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=76872>. + +=item * + +Several memory leaks in cloning and freeing threaded Perl interpreters have been +fixed L<[perl #77352]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77352>. + +=item * + +A possible string corruption when doing regular expression matches on overloaded +objects has been fixed +L<[perl #77084]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77084>. + +=item * + +Magic applied to variables in the main package no longer affects other packages. +See L</Magic variables outside the main package> above +L<[perl #76138]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=76138>. + +=item * + +Opening a glob reference via C<< open $fh, "E<gt>", \*glob >> will no longer +cause the glob to be corrupted when the filehandle is printed to. This would +cause perl to crash whenever the glob's contents were accessed +L<[perl #77492]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77492>. + +=item * + +The postincrement and postdecrement operators, C<++> and C<-->, used to cause +leaks when being used on references. This has now been fixed. + +=item * + +A bug when replacing the glob of a loop variable within the loop has been fixed +L<[perl #21469]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=21469>. This +means the following code will no longer crash: + + for $x (...) { + *x = *y; + } + +=item * + +Perl would segfault if the undocumented C<Internals> functions that used +reference prototypes were called with the C<&foo()> syntax, e.g. +C<&Internals::SvREADONLY(undef)> +L<[perl #77776]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77776>. + +These functions now call C<SvROK> on their arguments before dereferencing them +with C<SvRV>, and we test for this case in F<t/lib/universal.t>. + +=item * + +When assigning a list with duplicated keys to a hash, the assignment used to +return garbage and/or freed values: + + @a = %h = (list with some duplicate keys); + +This has now been fixed +L<[perl #31865]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=31865>. + +=item * + +An earlier release of the 5.13 series of Perl changed the semantics of opening a +reference to a copy of a glob: + + my $var = *STDOUT; + open my $fh, '>', \$var; + +This was a mistake, and the previous behaviour from Perl 5.10 and 5.12, which is +to treat \$var as a scalar reference, has now been restored. + +=item * + +The regular expression bracketed character class C<[\8\9]> was effectively the +same as C<[89\000]>, incorrectly matching a NULL character. It also gave +incorrect warnings that the C<8> and C<9> were ignored. Now C<[\8\9]> is the +same as C<[89]> and gives legitimate warnings that C<\8> and C<\9> are +unrecognized escape sequences, passed-through. + +=item * + +C<warn()> and C<die()> now respect utf8-encoded scalars +L<[perl #45549]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=45549>. + +=back + +=head1 Known Problems + +=over 4 + +=item * + +The upgrade to Encode-2.40 has caused some tests in the libwww-perl distribution +on CPAN to fail. (Specifically, F<base/message-charset.t> tests 33-36 in version +5.836 of that distribution now fail.) + +=item * + +The upgrade to ExtUtils-MakeMaker-6.57_05 has caused some tests in the +Module-Install distribution on CPAN to fail. (Specifically, F<02_mymeta.t> tests +5 and 21, F<18_all_from.t> tests 6 and 15, F<19_authors.t> tests 5, 13, 21 and +29, and F<20_authors_with_special_characters.t> tests 6, 15 and 23 in version +1.00 of that distribution now fail.) + +=back + +=head1 Acknowledgements + +Perl 5.13.5 represents approximately one month of development since +Perl 5.13.4 and contains 74558 lines of changes across 549 files +from 45 authors and committers: + +Abigail, Alexander Alekseev, Aristotle Pagaltzis, Ben Morrow, Bram, brian d foy, +Chas. Owens, Chris 'BinGOs' Williams, Craig A. Berry, Curtis Jewell, Dagfinn +Ilmari Mannsåker, David Golden, David Leadbeater, David Mitchell, Eric Brine, +Father Chrysostomos, Florian Ragwitz, Gisle Aas, Jan Dubois, Jerry D. Hedden, +Jesse Vincent, Jim Cromie, Jirka Hruška, Karl Williamson, Michael G. Schwern, +Nicholas Clark, Paul Johnson, Philippe Bruhat (BooK), Piotr Fusik, Rafael +Garcia-Suarez, Rainer Tammer, Reini Urban, Ricardo Signes, Rob Hoelz, Robin +Barker, Steffen Mueller, Steve Hay, Steve Peters, Todd Rinaldo, Tony Cook, +Vincent Pit, Yves Orton, Zefram, Zsbán Ambrus, Ævar Arnfjörð Bjarmason. + +Many of the changes included in this version originated in the CPAN +modules included in Perl's core. We're grateful to the entire CPAN +community for helping Perl to flourish. + +=head1 Reporting Bugs + +If you find what you think is a bug, you might check the articles +recently posted to the comp.lang.perl.misc newsgroup and the perl +bug database at http://rt.perl.org/perlbug/ . There may also be +information at http://www.perl.org/ , the Perl Home Page. + +If you believe you have an unreported bug, please run the B<perlbug> +program included with your release. Be sure to trim your bug down +to a tiny but sufficient test case. Your bug report, along with the +output of C<perl -V>, will be sent off to perlbug@perl.org to be +analysed by the Perl porting team. + +If the bug you are reporting has security implications, which make it +inappropriate to send to a publicly archived mailing list, then please send +it to perl5-security-report@perl.org. This points to a closed subscription +unarchived mailing list, which includes all the core committers, who be able +to help assess the impact of issues, figure out a resolution, and help +co-ordinate the release of patches to mitigate or fix the problem across all +platforms on which Perl is supported. Please only use this address for +security issues in the Perl core, not for modules independently +distributed on CPAN. + +=head1 SEE ALSO + +The F<Changes> file for an explanation of how to view exhaustive details +on what changed. + +The F<INSTALL> file for how to build Perl. + +The F<README> file for general stuff. + +The F<Artistic> and F<Copying> files for copyright information. + +=cut |