X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperldelta.pod;h=b0d0b837f46e83002746d3885ac66e0c8320ec4d;hb=b0fffe302ebecea108e16fbf94d910405cdc8714;hp=659cb2f86231fd7545a75b41bba662e450ae1be9;hpb=407eff0f25e20d3ed6ccfe2097b366fd28d8e3c4;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 659cb2f..b0d0b83 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -1,693 +1,146 @@ =head1 NAME -perldelta - what's new for perl5.005 +perldelta - what's new for perl5.006 (as of 5.005_54) =head1 DESCRIPTION -This document describes differences between the 5.004 release and this one. - -[XXX this needs more verbose summaries of the sub topics, instead of just -the "See foo." Scheduled for a second iteration. GSAR] - -=head1 About the new versioning system +This document describes differences between the 5.005 release and this one. =head1 Incompatible Changes -=head2 WARNING: This version is not binary compatible with Perl 5.004. - -Starting with Perl 5.004_50 there were many deep and far-reaching changes -to the language internals. If you have dynamically loaded extensions -that you built under perl 5.003 or 5.004, you can continue to use them -with 5.004, but you will need to rebuild and reinstall those extensions -to use them 5.005. See L for detailed instructions on how to -upgrade. - -=head2 Default installation structure has changed - -The new Configure defaults are designed to allow a smooth upgrade from -5.004 to 5.005, but you should read L for a detailed -discussion of the changes in order to adapt them to your system. - -=head2 Perl Source Compatibility - -When none of the experimental features are enabled, there should be -no user-visible Perl source compatibility issue. - -If threads are enabled, then some caveats apply. C<@_> and C<$_> become -lexical variables. The effect of this should be largely transparent to -the user, but there are some boundary conditions under which user will -need to be aware of the issues. [XXX Add e.g. here.] - -Some new keywords have been introduced. These are generally expected to -have very little impact on compatibility. See L keyword>, -L keyword>, and L operator>. - -Certain barewords are now reserved. Use of these will provoke a warning -if you have asked for them with the C<-w> switch. -See L is now a reserved word>. - -=head2 C Source Compatibility - -=item Core sources now require ANSI C compiler - -=item Enabling threads has source compatibility issues +=head2 Perl Source Incompatibilities -=head2 Binary Compatibility +None known at this time. -This version is NOT binary compatible with older versions. All extensions -will need to be recompiled. +=head2 C Source Incompatibilities -=head2 Security fixes may affect compatibility +=over 4 -A few taint leaks and taint omissions have been corrected. This may lead -to "failure" of scripts that used to work with older versions. Compiling -with -DINCOMPLETE_TAINTS provides a perl with minimal amounts of changes -to the tainting behavior. But note that the resulting perl will have -known insecurities. +=item C -Oneliners with the C<-e> switch do not create temporary files anymore. +Release 5.005 grandfathered old global symbol names by providing preprocessor +macros for extension source compatibility. As of release 5.006, these +preprocessor definitions are not available by default. You need to explicitly +compile perl with C<-DPERL_POLLUTE> in order to get these definitions. -=head2 Relaxed new mandatory warnings introduced in 5.004 +=item C and C Issues -Many new warnings that were introduced in 5.004 have been made -optional. Some of these warnings are still present, but perl's new -features make them less often a problem. See L. +The C global is now thread local, so a C declaration is needed +in the scope in which it appears. XSUBs should handle this automatically, +but if you have used C in support functions, you either need to +change the C to a local variable (which is recommended), or put in +a C. -=head2 Licensing +=back -Perl has a new Social Contract for contributors. See F. +=head2 Binary Incompatibilities -The license included in much of the Perl documentation has changed. -[XXX See where?] +This release is not binary compatible with the 5.005 release and its +maintenance versions. =head1 Core Changes +Binary numbers are now supported as literals, in s?printf formats, and +C: -=head2 Threads - -WARNING: Threading is considered an experimental feature. Details of the -implementation may change without notice. There are known limitations -and and some bugs. - -See L. - -=head2 Compiler - -WARNING: The Compiler and related tools are considered experimental. -Features may change without notice, and there are known limitations -and bugs. - -The Compiler produces three different types of transformations of a -perl program. The C backend generates C code that captures perl's state -just before execution begins. It eliminates the compile-time overheads -of the regular perl interpreter, but the run-time performance remains -comparatively the same. The CC backend generates optimized C code -equivivalent to the code path at run-time. The CC backend has greater -potential for big optimizations, but only a few optimizations are -implemented currently. The Bytecode backend generates a platform -independent bytecode representation of the interpreter's state -just before execution. Thus, the Bytecode back end also eliminates -much of the compilation overhead of the interpreter. - -The compiler comes with several valuable utilities. - -C is an experimental module to detect and warn about suspicious -code, especially the cases that the C<-w> switch does not detect. - -C can be used to demystify perl code, and understand -how perl optimizes certain constructs. - -C generates cross reference reports of all definition and use -of variables, subroutines and formats in a program. - -C show the lexical variables used by a subroutine or file -at a glance. - -C is a simple frontend for compiling perl. - -See C. - -=head2 Regular Expressions - -See L and L. - -=head2 Improved malloc() - -See banner at the beginning of C for details. - -=head2 Quicksort is internally implemented - -See C. - -=head2 Reliable signals - -Two kinds. - -Via C. - -Via switched runtime op loop. [XXX Not yet available.] - -=head2 Reliable stack pointers - -The internals now reallocate the perl stack only at predictable times. -In particular, magic calls never trigger reallocations of the stack, -because all reentrancy of the runtime is handled using a "stack of stacks". -This should improve reliability of cached stack pointers in the internals -and in XSUBs. - -=head2 Behavior of local() on array and hash elements is now well-defined - -See L. - -=head2 C<%!> is transparently tied to the L module - -See L, and L. - -=head2 Pseudo-hashes are supported - -See L. - -=head2 C is supported - -See L. - -=head2 Keywords can be globally overridden - -See L. - -=head2 C<$^E> is meaningful on Win32 - -See L. - -=head2 C optimized + $answer = 0b101010; + printf "The answer is: %b\n", oct("0b101010"); -C is now optimized into a counting loop. It does -not try to allocate a 1000000-size list anymore. - -=head2 C can be used as implicitly quoted package name - -[XXX See what?] - -=head2 C tests existence of a package - -[XXX See what?] - -=head2 Better locale support - -See L. - -=head2 Experimental support for 64-bit platforms - -Perl5 has always had 64-bit support on systems with 64-bit longs. -Starting with 5.005, the beginnings of experimental support for systems -with 32-bit long and 64-bit 'long long' integers has been added. -If you add -DUSE_LONG_LONG to your ccflags in config.sh (or manually -define it in perl.h) then perl will be built with 'long long' support. -There will be many compiler warnings, and the resultant perl may not -work on all systems. There are many other issues related to -third-party extensions and libraries. This option exists to allow -people to work on those issues. - -=head2 prototype() returns useful results on builtins - -See L. - -=head2 Extended support for exception handling - -C now accepts a reference value, and C<$@> gets set to that -value in exception traps. This makes it possible to propagate -exception objects. See L. [XXX there's nothing -about this in perlfunc/eval yet.] - -=head2 Re-blessing in DESTROY() supported for chaining DESTROY() methods - -See L. - -=head2 All C format conversions are handled internally - -See L. - -=head2 New C keyword - -C subs are like C and C, but they get run just before -the perl runtime begins execution. e.g., the Perl Compiler makes use of -C blocks to initialize and resolve pointers to XSUBs. - -[XXX Needs to be documented in perlsub or perlmod.] - -=head2 New C keyword - -The C keyword is the fundamental synchronization primitive -in threaded perl. When threads are not enabled, it is currently a noop. - -To minimize impact on source compatibility this keyword is "weak", i.e., any -user-defined subroutine of the same name overrides it, unless a C -has been seen. - -=head2 New C operator - -The C operator, which is syntactically similar to the other quote-like -operators, is used to create precompiled regular expressions. This compiled -form can now be explicitly passed around in variables, and interpolated in -other regular expressions. See L. - -=head2 C is now a reserved word - -=head2 Tied arrays are now fully supported - -See L. - -=head2 Tied handles support is better - -Several missing hooks have been added. There is also a new base class for -TIEARRAY implementations. See L. - -=head2 4th argument to substr - -substr() can now both return and replace in one operation. The optional -4th argument is the replacement string. See L. - -=head2 Negative LENGTH argument to splice - -Splice() with a negative LENGTH argument now work similar to what the -LENGTH did for substr(). Previously a negative LENGTH was treated as -0. See L. - -=head2 Magic lvalues are now more magical - -When you say something like C, the scalar returned -by substr() is special, in that any modifications to it affect $x. -(This is called a 'magic lvalue' because an 'lvalue' is something on -the left side of an assignment.) Normally, this is exactly what you -would expect to happen, but Perl uses the same magic if you use substr(), -pos(), or vec() in a context where they might be modified, like taking -a reference with C<\> or as an argument to a sub that modifies C<@_>. -In previous versions, this 'magic' only went one way, but now changes -to the scalar the magic refers to ($x in the above example) affect the -magic lvalue too. For instance, this code now acts differently: - - $x = "hello"; - sub printit { - $x = "g'bye"; - print $_[0], "\n"; - } - printit(substr($x, 0, 5)); - -In previous versions, this would print "hello", but it now prints "g'bye". +The length argument of C is now optional. +Better 64-bit support -- but full support still a distant goal. One +must Configure with -Duse64bits to get Configure to probe for the +extent of 64-bit support. Depending on the platform (hints file) more +or less 64-awareness becomes available. As of 5.005_54 at least +somewhat 64-bit aware platforms are HP-UX 11 or better, Solaris 2.6 or +better, IRIX 6.2 or better. Naturally 64-bit platforms like Digital +UNIX and UNICOS also have 64-bit support. =head1 Supported Platforms -Configure has many incremental improvements. Site-wide policy for building -perl can now be made persistent, via Policy.sh. Configure also records -the command-line arguments used in F. - -=head2 New Platforms - -BeOS is now supported. See L. - -DOS is now supported under the DJGPP tools. See L. - -MPE/iX is now supported. See L. - -=head2 Changes in existing support - -Win32 support has been vastly enhanced. Support for Perl Object, a C++ -encapsulation of Perl. GCC and EGCS are now supported on Win32. -[XXX Perl Object needs a big explanation elsewhere, and a pointer to -that location here.] - -VMS configuration system has been rewritten. See L. - -OpenBSD better supported. [XXX what others?] - -=head1 Modules and Pragmata - -=head2 New Modules - -=over - -=item B +VM/ESA is now supported. -Perl compiler and tools. See [XXX what?]. +Siemens BS200 is now supported. -=item Data::Dumper +The Mach CThreads (NeXTstep) are now supported by the Thread extension. -A module to pretty print Perl data. See L. +=head1 New tests -=item Errno +=over 4 -A module to look up errors more conveniently. See L. +=item op/io_const -=item File::Spec +IO constants (SEEK_*, _IO*). + +=item op/io_dir -A portable API for file operations. +Directory-related IO methods (new, read, close, rewind, tied delete). -=item ExtUtils::Installed +=item op/io_multihomed -Query and manage installed modules. +INET sockets with multi-homed hosts. -=item ExtUtils::Packlist +=item op/io_poll -Manipulate .packlist files. +IO poll(). -=item Fatal +=item op/io_unix -Make functions/builtins succeed or die. +UNIX sockets. -=item IPC::SysV +=item op/filetest -Constants and other support infrastructure for System V IPC operations -in perl. +File test operators. -=item Test +=item op/lex_assign -A framework for writing testsuites. - -=item Tie::Array - -Base class for tied arrays. - -=item Tie::Handle - -Base class for tied handles. - -=item Thread - -Perl thread creation, manipulation, and support. - -=item attrs - -Set subroutine attributes. - -=item fields - -Compile-time class fields. - -=item re - -Various pragmata to control behavior of regular expressions. +Guard against lexicals leaking (internal stuff). =back -=head2 Changes in existing modules - -=over - -=item CGI - -CGI has been updated to version 2.42. - -=item POSIX - -POSIX now has its own platform-specific hints files. - -=item DB_File - -DB_File supports version 2.x of Berkeley DB. See C. - -=item MakeMaker - -MakeMaker now supports writing empty makefiles, provides a way to -specify that site umask() policy should be honored. There is also -better support for manipulation of .packlist files, and getting -information about installed modules. - -Extensions that have both architecture-dependent and -architecture-independent files are now always installed completely in -the architecture-dependent locations. Previously, the shareable parts -were shared both across architectures and across perl versions and were -therefore liable to be overwritten with newer versions that might have -subtle incompatibilities. - -=item CPAN +=head1 Modules and Pragmata -[XXX What?] +=head2 Modules -=item Cwd +Dumpvalue module provides screen dumps of Perl data. -Cwd::cwd is faster on most platforms. +=head2 Pragmata -=item Benchmark +Lexical warnings pragma, "use warning;", to control optional warnings. -Keeps better time. +Filetest pragma, to control the behaviour of filetests (C<-r> C<-w> ...). +Currently only one subpragma implemented, "use filetest 'access';", +that enables the use of access(2) or equivalent to check the +permissions instead of using stat(2) as usual. This matters +in filesystems where there are ACLs (access control lists), the +stat(2) might lie, while access(2) knows better. -=back +Todo. =head1 Utility Changes -h2ph and related utilities have been vastly overhauled. - -perlcc, a new experimental front end for the compiler is available. - -The crude GNU configure emulator is now called configure.gnu. - -=head1 API Changes - -=head2 Incompatible Changes - -=head2 Deprecations, Extensions - -=head2 C++ Support +Todo. =head1 Documentation Changes -Config.pm now has a glossary of variables. - -Porting/patching.pod has detailed instructions on how to create and -submit patches for perl. +Todo. =head1 New Diagnostics -=over - -=item Ambiguous call resolved as CORE::%s(), qualify as such or use & - -(W) A subroutine you have declared has the same name as a Perl keyword, -and you have used the name without qualification for calling one or the -other. Perl decided to call the builtin because the subroutine is -not imported. - -To force interpretation as a subroutine call, either put an ampersand -before the subroutine name, or qualify the name with its package. -Alternatively, you can import the subroutine (or pretend that it's -imported with the C pragma). - -To silently interpret it as the Perl operator, use the C prefix -on the operator (e.g. C) or by declaring the subroutine -to be an object method (see L). - -=item Bad index while coercing array into hash - -(F) The index looked up in the hash found as the 0'th element of a -pseudo-hash is not legal. Index values must be at 1 or greater. -See L. - -=item Bareword "%s" refers to nonexistent package - -(W) You used a qualified bareword of the form C, but -the compiler saw no other uses of that namespace before that point. -Perhaps you need to predeclare a package? - -=item Can't call method "%s" on an undefined value - -(F) You used the syntax of a method call, but the slot filled by the -object reference or package name contains an undefined value. -Something like this will reproduce the error: - - $BADREF = 42; - process $BADREF 1,2,3; - $BADREF->process(1,2,3); - -=item Can't coerce array into hash - -(F) You used an array where a hash was expected, but the array has no -information on how to map from keys to array indices. You can do that -only with arrays that have a hash reference at index 0. - -=item Can't goto subroutine from an eval-string - -(F) The "goto subroutine" call can't be used to jump out of an eval "string". -(You can use it to jump out of an eval {BLOCK}, but you probably don't want to.) - -=item Can't localize pseudo-hash element - -(F) You said something like C{'key'}>, where $ar is -a reference to a pseudo-hash. That hasn't been implemented yet, but -you can get a similar effect by localizing the corresponding array -element directly -- C[$ar-E[0]{'key'}]>. - -=item Can't use %%! because Errno.pm is not available - -(F) The first time the %! hash is used, perl automatically loads the -Errno.pm module. The Errno module is expected to tie the %! hash to -provide symbolic names for C<$!> errno values. +=item /%s/: Unrecognized escape \\%c passed through -=item Cannot find an opnumber for "%s" +(W) You used a backslash-character combination which is not recognized +by Perl. This combination appears in an interpolated variable or a +C<'>-delimited regular expression. -(F) A string of a form C was given to prototype(), but -there is no builtin with the name C. - -=item Character class syntax [. .] is reserved for future extensions - -(W) Within regular expression character classes ([]) the syntax beginning -with "[." and ending with ".]" is reserved for future extensions. -If you need to represent those character sequences inside a regular -expression character class, just quote the square brackets with the -backslash: "\[." and ".\]". - -=item Character class syntax [: :] is reserved for future extensions - -(W) Within regular expression character classes ([]) the syntax beginning -with "[:" and ending with ":]" is reserved for future extensions. -If you need to represent those character sequences inside a regular -expression character class, just quote the square brackets with the -backslash: "\[:" and ":\]". - -=item Character class syntax [= =] is reserved for future extensions - -(W) Within regular expression character classes ([]) the syntax -beginning with "[=" and ending with "=]" is reserved for future extensions. -If you need to represent those character sequences inside a regular -expression character class, just quote the square brackets with the -backslash: "\[=" and "=\]". - -=item %s: Eval-group in insecure regular expression - -(F) Perl detected tainted data when trying to compile a regular expression -that contains the C<(?{ ... })> zero-width assertion, which is unsafe. -See L, and L. - -=item %s: Eval-group not allowed, use re 'eval' - -(F) A regular expression contained the C<(?{ ... })> zero-width assertion, -but that construct is only allowed when the C pragma is -in effect. See L. - -=item %s: Eval-group not allowed at run time - -(F) Perl tried to compile a regular expression containing the C<(?{ ... })> -zero-width assertion at run time, as it would when the pattern contains -interpolated values. Since that is a security risk, it is not allowed. -If you insist, you may still do this by explicitly building the pattern -from an interpolated string at run time and using that in an eval(). -See L. - -=item Explicit blessing to '' (assuming package main) - -(W) You are blessing a reference to a zero length string. This has -the effect of blessing the reference into the package main. This is -usually not what you want. Consider providing a default target -package, e.g. bless($ref, $p or 'MyPackage'); - -=item Illegal hex digit ignored - -(W) You may have tried to use a character other than 0 - 9 or A - F in a -hexadecimal number. Interpretation of the hexadecimal number stopped -before the illegal character. - -=item No such array field - -(F) You tried to access an array as a hash, but the field name used is -not defined. The hash at index 0 should map all valid field names to -array indices for that to work. - -=item No such field "%s" in variable %s of type %s - -(F) You tried to access a field of a typed variable where the type -does not know about the field name. The field names are looked up in -the %FIELDS hash in the type package at compile time. The %FIELDS hash -is usually set up with the 'fields' pragma. - -=item Out of memory during ridiculously large request - -(F) You can't allocate more than 2^31+"small amount" bytes. This error -is most likely to be caused by a typo in the Perl program. e.g., C<$arr[time]> -instead of C<$arr[$time]>. - -=item Range iterator outside integer range - -(F) One (or both) of the numeric arguments to the range operator ".." -are outside the range which can be represented by integers internally. -One possible workaround is to force Perl to use magical string -increment by prepending "0" to your numbers. - -=item Recursive inheritance detected while looking for method '%s' in package '%s' - -(F) More than 100 levels of inheritance were encountered while invoking a -method. Probably indicates an unintended loop in your inheritance hierarchy. - -=item Reference found where even-sized list expected - -(W) You gave a single reference where Perl was expecting a list with -an even number of elements (for assignment to a hash). This -usually means that you used the anon hash constructor when you meant -to use parens. In any case, a hash requires key/value B. - - %hash = { one => 1, two => 2, }; # WRONG - %hash = [ qw/ an anon array / ]; # WRONG - %hash = ( one => 1, two => 2, ); # right - %hash = qw( one 1 two 2 ); # also fine - -=item Undefined value assigned to typeglob - -(W) An undefined value was assigned to a typeglob, a la C<*foo = undef>. -This does nothing. It's possible that you really mean C. - -=item Use of reserved word "%s" is deprecated - -(D) The indicated bareword is a reserved word. Future versions of perl -may use it as a keyword, so you're better off either explicitly quoting -the word in a manner appropriate for its context of use, or using a -different name altogether. The warning can be suppressed for subroutine -names by either adding a C<&> prefix, or using a package qualifier, -e.g. C<&our()>, or C. - -=item perl: warning: Setting locale failed. - -(S) The whole warning message will look something like: - - perl: warning: Setting locale failed. - perl: warning: Please check that your locale settings: - LC_ALL = "En_US", - LANG = (unset) - are supported and installed on your system. - perl: warning: Falling back to the standard locale ("C"). - -Exactly what were the failed locale settings varies. In the above the -settings were that the LC_ALL was "En_US" and the LANG had no value. -This error means that Perl detected that you and/or your system -administrator have set up the so-called variable system but Perl could -not use those settings. This was not dead serious, fortunately: there -is a "default locale" called "C" that Perl can and will use, the -script will be run. Before you really fix the problem, however, you -will get the same error message each time you run Perl. How to really -fix the problem can be found in L section B. - -=back +=item Unrecognized escape \\%c passed through +(W) You used a backslash-character combination which is not recognized +by Perl. =head1 Obsolete Diagnostics -=over - -=item Can't mktemp() - -(F) The mktemp() routine failed for some reason while trying to process -a B<-e> switch. Maybe your /tmp partition is full, or clobbered. - -=item Can't write to temp file for B<-e>: %s - -(F) The write routine failed for some reason while trying to process -a B<-e> switch. Maybe your /tmp partition is full, or clobbered. - -=item Cannot open temporary file - -(F) The create routine failed for some reason while trying to process -a B<-e> switch. Maybe your /tmp partition is full, or clobbered. - - -=back +Todo. =head1 BUGS @@ -714,4 +167,9 @@ The F and F files for copyright information. =head1 HISTORY +Written by Gurusamy Sarathy >, with many contributions +from The Perl Porters. + +Send omissions or corrections to >. + =cut