diff options
Diffstat (limited to 'pod/perl593delta.pod')
-rw-r--r-- | pod/perl593delta.pod | 551 |
1 files changed, 0 insertions, 551 deletions
diff --git a/pod/perl593delta.pod b/pod/perl593delta.pod deleted file mode 100644 index 11f53ab088..0000000000 --- a/pod/perl593delta.pod +++ /dev/null @@ -1,551 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl593delta - what is new for perl v5.9.3 - -=head1 DESCRIPTION - -This document describes differences between the 5.9.2 and the 5.9.3 -development releases. See L<perl590delta>, L<perl591delta> and -L<perl592delta> for the differences between 5.8.0 and 5.9.2. - -=head1 Incompatible Changes - -=head2 Parsing of C<-f _> - -The identifier C<_> is now forced to be a bareword after a filetest -operator. This solves a number of misparsing issues when a global C<_> -subroutine is defined. - -=head2 C<mkdir()> - -C<mkdir()> without arguments now defaults to C<$_>. - -=head2 Magic goto and eval - -The construct C<eval { goto &foo }> is now disallowed. (Note that the -similar construct, but with C<eval("")> instead, was already forbidden.) - -=head2 C<$#> has been removed - -The deprecated C<$#> variable (output format for numbers) has been -removed. A new warning, C<$# is no longer supported>, has been added. - -=head2 C<:unique> - -The C<:unique> attribute has been made a no-op, since its current -implementation was fundamentally flawed and not threadsafe. - -=head2 Scoping of the C<sort> pragma - -The C<sort> pragma is now lexically scoped. Its effect used to be global. - -=head1 Core Enhancements - -=head2 The C<feature> pragma - -The C<feature> pragma is used to enable new syntax that would break Perl's -backwards-compatibility with older releases of the language. It's a lexical -pragma, like C<strict> or C<warnings>. - -Currently the following new features are available: C<switch> (adds a -switch statement), C<~~> (adds a Perl 6-like smart match operator), C<say> -(adds a C<say> built-in function), and C<err> (adds an C<err> keyword). -Those features are described below. - -Note that C<err> low-precedence defined-or operator used to be enabled by -default (although as a weak keyword, meaning that any function would -override it). It's now only recognized when explicitly turned on (and is -then a regular keyword). - -Those features, and the C<feature> pragma itself, have been contributed by -Robin Houston. - -=head2 Switch and Smart Match operator - -Perl 5 now has a switch statement. It's available when C<use feature -'switch'> is in effect. This feature introduces three new keywords, -C<given>, C<when>, and C<default>: - - given ($foo) { - when (/^abc/) { $abc = 1; } - when (/^def/) { $def = 1; } - when (/^xyz/) { $xyz = 1; } - default { $nothing = 1; } - } - -A more complete description of how Perl matches the switch variable -against the C<when> conditions is given in L<perlsyn/"Switch statements">. - -This kind of match is called I<smart match>, and it's also possible to use -it outside of switch statements, via the new C<~~> operator (enabled via -the C<use feature '~~'> directive). See L<perlsyn/"Smart matching in -detail">. - -=head2 C<say()> - -say() is a new built-in, only available when C<use feature 'say'> is in -effect, that is similar to print(), but that implicitly appends a newline -to the printed string. See L<perlfunc/say>. - -=head2 C<CLONE_SKIP()> - -Perl has now support for the C<CLONE_SKIP> special subroutine. Like -C<CLONE>, C<CLONE_SKIP> is called once per package; however, it is called -just before cloning starts, and in the context of the parent thread. If it -returns a true value, then no objects of that class will be cloned. See -L<perlmod> for details. (Contributed by Dave Mitchell.) - -=head2 C<${^CHILD_ERROR_NATIVE}> - -A new internal variable, C<${^CHILD_ERROR_NATIVE}>, gives the native -status returned by the last pipe close, backtick command, successful call -to wait() or waitpid(), or from the system() operator. See L<perlrun> for -details. (Contributed by Gisle Aas.) - -=head2 Assertions - -The support for assertions, introduced in perl 5.9.0, has been improved. -The syntax for the C<-A> command-line switch has changed; it now accepts -an optional module name, defaulting to C<assertions::activate>. See -L<assertions> and L<perlrun>. (Contributed by Salvador Fandiño García.) - -=head2 Unicode Character Database 4.1.0 - -The copy of the Unicode Character Database included in Perl 5.9 has -been updated to 4.1.0. - -=head2 C<no VERSION> - -You can now use C<no> followed by a version number to specify that you -want to use a version of perl older than the specified one. - -=head2 Recursive sort subs - -You can now use recursive subroutines with sort(), thanks to Robin Houston. - -=head2 Effect of pragmas in eval - -The compile-time value of the C<%^H> hint variable can now propagate into -eval("")uated code. This makes it more useful to implement lexical -pragmas. - -As a side-effect of this, the overloaded-ness of constants now propagates -into eval(""). - -=head2 New B<-E> command-line switch - -B<-E> is equivalent to B<-e>, but it implicitly enables all -optional features (like C<use feature ":5.10">). - -=head2 C<chdir>, C<chmod> and C<chown> on filehandles - -C<chdir>, C<chmod> and C<chown> can now work on filehandles as well as -filenames, if the system supports respectively C<fchdir>, C<fchmod> and -C<fchown>, thanks to a patch provided by Gisle Aas. - -=head2 OS groups - -C<$(> and C<$)> now return groups in the order where the OS returns them, -thanks to Gisle Aas. This wasn't previously the case. - -=head1 Modules and Pragmata - -=head2 New Core Modules - -=over 4 - -=item * - -A new pragma, C<feature>, has been added; see above in L</"Core -Enhancements">. - -=item * - -C<assertions::compat>, also available on CPAN, allows the use of assertions on -perl versions prior to 5.9.0 (that is the first one to natively support -them). - -=item * - -C<Math::BigInt::FastCalc> is an XS-enabled, and thus faster, version of -C<Math::BigInt::Calc>. - -=item * - -C<Compress::Zlib> is an interface to the zlib compression library. It -comes with a bundled version of zlib, so having a working zlib is not a -prerequisite to install it. It's used by C<Archive::Tar> (see below). - -=item * - -C<IO::Zlib> is an C<IO::>-style interface to C<Compress::Zlib>. - -=item * - -C<Archive::Tar> is a module to manipulate C<tar> archives. - -=item * - -C<Digest::SHA> is a module used to calculate many types of SHA digests, -has been included for SHA support in the CPAN module. - -=item * - -C<ExtUtils::CBuilder> and C<ExtUtils::ParseXS> have been added. - -=back - -=head1 Utility Changes - -=head2 C<ptar> - -C<ptar> is a pure perl implementation of C<tar>, that comes with -C<Archive::Tar>. - -=head2 C<ptardiff> - -C<ptardiff> is a small script used to generate a diff between the contents -of a tar archive and a directory tree. Like C<ptar>, it comes with -C<Archive::Tar>. - -=head2 C<shasum> - -This command-line utility, used to print or to check SHA digests, comes -with the new C<Digest::SHA> module. - -=head2 C<h2xs> enhancements - -C<h2xs> implements a new option C<--use-xsloader> to force use of -C<XSLoader> even in backwards compatible modules. - -The handling of authors' names that had apostrophes has been fixed. - -Any enums with negative values are now skipped. - -=head2 C<perlivp> enhancements - -C<perlivp> no longer checks for F<*.ph> files by default. Use the new C<-a> -option to run I<all> tests. - -=head1 Documentation - -=head2 Perl Glossary - -The L<perlglossary> manpage is a glossary of terms used in the Perl -documentation, technical and otherwise, kindly provided by O'Reilly Media, -Inc. - -L<perltodo> now lists a rough roadmap to Perl 5.10. - -=head1 Performance Enhancements - -=head2 XS-assisted SWASHGET - -Some pure-perl code that perl was using to retrieve Unicode properties and -transliteration mappings has been reimplemented in XS. - -=head2 Constant subroutines - -The interpreter internals now support a far more memory efficient form of -inlineable constants. Storing a reference to a constant value in a symbol -table is equivalent to a full typeglob referencing a constant subroutine, -but using about 400 bytes less memory. This proxy constant subroutine is -automatically upgraded to a real typeglob with subroutine if necessary. -The approach taken is analogous to the existing space optimisation for -subroutine stub declarations, which are stored as plain scalars in place -of the full typeglob. - -Several of the core modules have been converted to use this feature for -their system dependent constants - as a result C<use POSIX;> now takes about -200K less memory. - -=head2 C<PERL_DONT_CREATE_GVSV> - -The new compilation flag C<PERL_DONT_CREATE_GVSV>, introduced as an option -in perl 5.8.8, is turned on by default in perl 5.9.3. It prevents perl -from creating an empty scalar with every new typeglob. See L<perl589delta> -for details. - -=head2 Weak references are cheaper - -Weak reference creation is now I<O(1)> rather than I<O(n)>, courtesy of -Nicholas Clark. Weak reference deletion remains I<O(n)>, but if deletion only -happens at program exit, it may be skipped completely. - -=head2 sort() enhancements - -Salvador Fandiño provided improvements to reduce the memory usage of C<sort> -and to speed up some cases. - -=head1 Installation and Configuration Improvements - -=head2 Compilation improvements - -Parallel makes should work properly now, although there may still be problems -if C<make test> is instructed to run in parallel. - -Building with Borland's compilers on Win32 should work more smoothly. In -particular Steve Hay has worked to side step many warnings emitted by their -compilers and at least one C compiler internal error. - -Perl extensions on Windows now can be statically built into the Perl DLL, -thanks to a work by Vadim Konovalov. - -=head2 New Or Improved Platforms - -Perl is being ported to Symbian OS. See L<perlsymbian> for more -information. - -The VMS port has been improved. See L<perlvms>. - -DynaLoader::dl_unload_file() now works on Windows. - -Portability of Perl on various recent compilers on Windows has been -improved (Borland C++, Visual C++ 7.0). - -=head2 New probes - -C<Configure> will now detect C<clearenv> and C<unsetenv>, thanks to a -patch from Alan Burlison. It will also probe for C<futimes> (and use it -internally if available), and whether C<sprintf> correctly returns the -length of the formatted string. - -=head2 Module auxiliary files - -README files and changelogs for CPAN modules bundled with perl are no -longer installed. - -=head1 Selected Bug Fixes - -=head2 C<defined $$x> - -C<use strict "refs"> was ignoring taking a hard reference in an argument -to defined(), as in : - - use strict "refs"; - my $x = "foo"; - if (defined $$x) {...} - -This now correctly produces the run-time error C<Can't use string as a -SCALAR ref while "strict refs" in use>. (However, C<defined @$foo> and -C<defined %$foo> are still allowed. Those constructs are discouraged -anyway.) - -=head2 Calling CORE::require() - -CORE::require() and CORE::do() were always parsed as require() and do() -when they were overridden. This is now fixed. - -=head2 Subscripts of slices - -You can now use a non-arrowed form for chained subscripts after a list -slice, like in: - - ({foo => "bar"})[0]{foo} - -This used to be a syntax error; a C<< -> >> was required. - -=head2 Remove over-optimisation - -Perl 5.9.2 introduced a change so that assignments of C<undef> to a -scalar, or of an empty list to an array or a hash, were optimised out. As -this could cause problems when C<goto> jumps were involved, this change -was backed out. - -=head2 sprintf() fixes - -Using the sprintf() function with some formats could lead to a buffer -overflow in some specific cases. This has been fixed, along with several -other bugs, notably in bounds checking. - -In related fixes, it was possible for badly written code that did not follow -the documentation of C<Sys::Syslog> to have formatting vulnerabilities. -C<Sys::Syslog> has been changed to protect people from poor quality third -party code. - -=head2 no warnings 'category' works correctly with -w - -Previously when running with warnings enabled globally via C<-w>, selective -disabling of specific warning categories would actually turn off all warnings. -This is now fixed; now C<no warnings 'io';> will only turn off warnings in the -C<io> class. Previously it would erroneously turn off all warnings. - -=head2 Smaller fixes - -=over 4 - -=item * - -C<FindBin> now works better with directories where access rights are more -restrictive than usual. - -=item * - -Several memory leaks in ithreads were closed. Also, ithreads were made -less memory-intensive. - -=item * - -Trailing spaces are now trimmed from C<$!> and C<$^E>. - -=item * - -Operations that require perl to read a process's list of groups, such as reads -of C<$(> and C<$)>, now dynamically allocate memory rather than using a -fixed sized array. The fixed size array could cause C stack exhaustion on -systems configured to use large numbers of groups. - -=item * - -C<PerlIO::scalar> now works better with non-default C<$/> settings. - -=item * - -The C<x> repetition operator is now able to operate on C<qw//> lists. This -used to raise a syntax error. - -=item * - -The debugger now traces correctly execution in eval("")uated code that -contains #line directives. - -=item * - -The value of the C<open> pragma is no longer ignored for three-argument -opens. - -=item * - -Perl will now use the C library calls C<unsetenv> and C<clearenv> if present -to delete keys from C<%ENV> and delete C<%ENV> entirely, thanks to a patch -from Alan Burlison. - -=back - -=head2 More Unicode Fixes - -=over 4 - -=item * - -chr() on a negative value now gives C<\x{FFFD}>, the Unicode replacement -character, unless when the C<bytes> pragma is in effect, where the low -eight bytes of the value are used. - -=item * - -Some case insensitive matches between UTF-8 encoded data and 8 bit regexps, -and vice versa, could give malformed character warnings. These have been -fixed by Dave Mitchell and Yves Orton. - -=item * - -C<lcfirst> and C<ucfirst> could corrupt the string for certain cases where -the length UTF-8 encoding of the string in lower case, upper case or title -case differed. This was fixed by Nicholas Clark. - -=back - -=head1 New or Changed Diagnostics - -=head2 Attempt to set length of freed array - -This is a new warning, produced in situations like the following one: - - $r = do {my @a; \$#a}; - $$r = 503; - -=head2 Non-string passed as bitmask - -This is a new warning, produced when number has been passed as a argument to -select(), instead of a bitmask. - - # Wrong, will now warn - $rin = fileno(STDIN); - ($nfound,$timeleft) = select($rout=$rin, undef, undef, $timeout); - - # Should be - $rin = ''; - vec($rin,fileno(STDIN),1) = 1; - ($nfound,$timeleft) = select($rout=$rin, undef, undef, $timeout); - -=head2 Search pattern not terminated or ternary operator parsed as search pattern - -This syntax error indicates that the lexer couldn't find the final -delimiter of a C<?PATTERN?> construct. Mentioning the ternary operator in -this error message makes syntax diagnostic easier. - -=head2 "%s" variable %s masks earlier declaration - -This warning is now emitted in more consistent cases; in short, when one -of the declarations involved is a C<my> variable: - - my $x; my $x; # warns - my $x; our $x; # warns - our $x; my $x; # warns - -On the other hand, the following: - - our $x; our $x; - -now gives a C<"our" variable %s redeclared> warning. - -=head2 readdir()/closedir()/etc. attempted on invalid dirhandle - -These new warnings are now emitted when a dirhandle is used but is -either closed or not really a dirhandle. - -=head1 Changed Internals - -In general, the source code of perl has been refactored, tied up, and -optimized in many places. Also, memory management and allocation has been -improved in a couple of points. - -Andy Lester supplied many improvements to determine which function -parameters and local variables could actually be declared C<const> to the C -compiler. Steve Peters provided new C<*_set> macros and reworked the core to -use these rather than assigning to macros in LVALUE context. - -Dave Mitchell improved the lexer debugging output under C<-DT>. - -A new file, F<mathoms.c>, has been added. It contains functions that are -no longer used in the perl core, but that remain available for binary or -source compatibility reasons. However, those functions will not be -compiled in if you add C<-DNO_MATHOMS> in the compiler flags. - -The C<AvFLAGS> macro has been removed. - -The C<av_*()> functions, used to manipulate arrays, no longer accept null -C<AV*> parameters. - -=head2 B:: modules inheritance changed - -The inheritance hierarchy of C<B::> modules has changed; C<B::NV> now -inherits from C<B::SV> (it used to inherit from C<B::IV>). - -=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://bugs.perl.org/ . 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. - -=head1 SEE ALSO - -The F<Changes> file for 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 |