diff options
-rw-r--r-- | gv.c | 31 | ||||
-rw-r--r-- | pod/perldelta.pod | 129 | ||||
-rw-r--r-- | pod/perlfunc.pod | 25 | ||||
-rw-r--r-- | pod/perlop.pod | 13 | ||||
-rw-r--r-- | pod/perlvar.pod | 22 |
5 files changed, 179 insertions, 41 deletions
@@ -829,20 +829,20 @@ Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type) case '\\': case '/': case '|': - case '\001': - case '\003': - case '\004': - case '\005': - case '\006': - case '\010': - case '\011': /* NOT \t in EBCDIC */ - case '\017': - case '\020': - case '\024': + case '\001': /* $^A */ + case '\003': /* $^C */ + case '\004': /* $^D */ + case '\005': /* $^E */ + case '\006': /* $^F */ + case '\010': /* $^H */ + case '\011': /* $^I, NOT \t in EBCDIC */ + case '\017': /* $^O */ + case '\020': /* $^P */ + case '\024': /* $^T */ if (len > 1) break; goto magicalize; - case '\023': + case '\023': /* $^S */ if (len > 1) break; goto ro_magicalize; @@ -874,7 +874,7 @@ Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type) sv_magic(GvSV(gv), (SV*)gv, 0, name, len); break; - case '\014': + case '\014': /* $^L */ if (len > 1) break; sv_setpv(GvSV(gv),"\f"); @@ -895,6 +895,13 @@ Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type) SvREADONLY_on(sv); } break; + case '\026': /* $^V */ + if (len == 1) { + SV *sv = GvSV(gv); + GvSV(gv) = SvREFCNT_inc(PL_patchlevel); + SvREFCNT_dec(sv); + } + break; } return gv; } diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 6fc7d8f4f5..efa1a2fce1 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -270,12 +270,50 @@ For the full list of public API functions, see L<perlapi>. =head1 Installation and Configuration Improvements +=head2 -Dusethreads means something different + +WARNING: Support for threads continues to be an experimental feature. +Interfaces and implementation are subject to sudden and drastic changes. + +The -Dusethreads flag now enables the experimental interpreter-based thread +support by default. To get the flavor of experimental threads that was in +5.005 instead, you need to ask for -Duse5005threads. + +As of v5.5.640, interpreter-threads support is still lacking a way to +create new threads from Perl (i.e., C<use Thread;> will not work with +interpreter threads). C<use Thread;> continues to be available when you +ask for -Duse5005threads, bugs and all. + +=head2 Perl's version numbering has changed + +Beginning with Perl version 5.6, the version number convention has been +changed to a "dotted tuple" scheme that is more commonly found in open +source projects. + +Maintenance versions of v5.6.0 will be released as v5.6.1, v5.6.2 etc. +The next development series following v5.6 will be numbered v5.7.x, +beginning with v5.7.0, and the next major production release following +v5.6 will be v5.8. + +The v1.2.3 syntax is also now legal in Perl. See L<Support for version tuples> +for more on that. + +To cope with the new versioning system's use of at least three significant +digits for each version component, the method used for incrementing the +subversion number has also changed slightly. We assume that versions older +than v5.6 have been incrementing the subversion component in multiples of +10. Versions after v5.6 will increment them by 1. Thus, using the new +notation, 5.005_03 is the same as v5.5.30, and the first maintenance +version following v5.6 will be v5.6.1, which amounts to a floating point +value of 5.006_001). + =head2 New Configure flags The following new flags may be enabled on the Configure command line by running Configure with C<-Dflag>. usemultiplicity + use5005threads uselongdouble usemorebits @@ -343,7 +381,7 @@ Perl can optionally use UTF-8 as its internal representation for character strings. The C<utf8> pragma enables this support in the current lexical scope. See L<utf8> for more information. -=head2 Interpreter threads +=head2 Interpreter cloning, threads, and concurrency WARNING: This is an experimental feature in a pre-alpha state. Use at your own risk. @@ -367,24 +405,24 @@ interpreters, little or no locking will be needed (unless parts of the symbol table are explicitly shared). This is obviously intended to be an easy-to-use replacement for the existing threads support. -Support for cloning interpreters must currently be manually enabled -by defining the cpp macro USE_ITHREADS on non-Windows platforms. -(See win32/Makefile for how to enable it on Windows.) The resulting -perl executable will be functionally identical to one that was built -without USE_ITHREADS, but the perl_clone() API call will only be -available in the former. +Support for cloning interpreters and interpreter concurrency can be +enabled using the -Dusethreads Configure option (see win32/Makefile for +how to enable it on Windows.) The resulting perl executable will be +functionally identical to one that was built with -Dmultiplicity, but +the perl_clone() API call will only be available in the former. -USE_ITHREADS enables Perl source code changes that provide a clear -separation between the op tree and the data it operates with. The -former is considered immutable, and can therefore be shared between -an interpreter and all of its clones, while the latter is considered -local to each interpreter, and is therefore copied for each clone. +-Dusethreads enables, the cpp macros USE_ITHREADS by default, which enables +Perl source code changes that provide a clear separation between the op tree +and the data it operates with. The former is considered immutable, and can +therefore be shared between an interpreter and all of its clones, while the +latter is considered local to each interpreter, and is therefore copied for +each clone. Note that building Perl with the -Dusemultiplicity Configure option is adequate if you wish to run multiple B<independent> interpreters -concurrently in different threads. USE_ITHREADS only needs to be -enabled if you wish to obtain access to perl_clone() and cloned -interpreters. +concurrently in different threads. -Dusethreads only provides the +additional functionality of the perl_clone() API call and other +support for running B<cloned> interpreters concurrently. [XXX TODO - the Compiler backends may be broken when USE_ITHREADS is enabled.] @@ -407,9 +445,36 @@ Tuomas Lukka <lukka@fas.harvard.edu>)] An "our" declaration introduces a value that can be best understood as a lexically scoped symbolic alias to a global variable in the -current package. This is mostly useful as an alternative to the -C<vars> pragma, but also provides the opportunity to introduce -typing and other attributes for such variables. See L<perlfunc/our>. +package that was current where the variable was declared. This is +mostly useful as an alternative to the C<vars> pragma, but also provides +the opportunity to introduce typing and other attributes for such +variables. See L<perlfunc/our>. + +=head2 Support for version tuples + +Literals of the form v1.2.3.4 are now parsed as the utf8 string +C<"\x{1}\x{2}\x{3}\x{4}">. This allows comparing version numbers using +regular string comparison operators C<eq>, C<ne>, C<lt>, C<gt> etc. + +These "dotted tuples" are dual-valued. They are both strings of utf8 +characters, and floating point numbers. Thus v1.2.3.4 has the string +value C<"\x{1}\x{2}\x{3}\x{4}"> and the numeric value 1.002_003_004. +As another example, v5.5.640 has the string value C<"\x{5}\x{5}\x{280}"> +(remember 280 hexadecimal is 640 decimal) and the numeric value +5.005_64. + +In conjunction with the new C<$^V> magic variable (which contains +the perl version in this format), such literals can be used to +check if you're running a particular version of Perl. + + if ($^V and $^V gt v5.5.640) { + # new style version numbers are supported + } + +C<require> and C<use> also support such literals: + + require v5.6.0; # croak if $^V lt v5.6.0 + use v5.6.0; # same, but croaks at compile-time =head2 Weak references @@ -689,14 +754,24 @@ acquire special meaning in any future version of Perl. Formerly, if you wanted to mark a subroutine as being a method call or as requiring an automatic lock() when it is entered, you had to declare that with a C<use attrs> pragma in the body of the subroutine. -That can now be accomplished with a declaration syntax, like this: +That can now be accomplished with declaration syntax, like this: sub mymethod : locked method ; ... - sub mymethod : locked :method { + sub mymethod : locked method { + ... + } + + sub othermethod :locked :method ; + ... + sub othermethod :locked :method { ... } + +(Note how only the first C<:> is mandatory, and whitespace surrounding +the C<:> is optional.) + F<AutoSplit.pm> and F<SelfLoader.pm> have been updated to keep the attributes with the stubs they provide. See L<attributes>. @@ -740,6 +815,12 @@ BEGIN blocks are executed under such conditions, this variable enables perl code to determine whether actions that make sense only during normal running are warranted. See L<perlvar>. +=head2 New variable $^V contains Perl version in v5.6.0 format + +C<$^V> contains the Perl version number as a version tuple that +can be used in string or numeric comparisons. See +C<Support for version tuples> for an example. + =head2 Optional Y2K warnings If Perl is built with the cpp macro C<PERL_Y2KWARN> defined, @@ -1102,6 +1183,14 @@ detected at the end of the line containing the __END__ or __DATA__ token; if not, the DATA filehandle will be left open in binary mode. Earlier versions always opened the DATA filehandle in text mode. +The glob() operator is implemented via the L<File::Glob> extension, +which supports glob syntax of the C<csh>. This increases the flexibility +of the glob() operator, but there may be compatibility issues for +programs that relied on the older globbing syntax. If you want to +preserve compatibility with the older syntax, you might want to put +a C<use File::DosGlob;> in your program. For details and compatibility +information, see L<File::Glob>. + [TODO - GSAR] =head1 New tests diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod index 060bb641e9..a72645ab08 100644 --- a/pod/perlfunc.pod +++ b/pod/perlfunc.pod @@ -3526,13 +3526,16 @@ for this. Other restrictions include whether it works on directories, open files, or pre-existing files. Check L<perlport> and either the rename(2) manpage or equivalent system documentation for details. +=item require VERSION + =item require EXPR =item require Demands some semantics specified by EXPR, or by C<$_> if EXPR is not -supplied. If EXPR is numeric, demands that the current version of Perl -(C<$]> or $PERL_VERSION) be equal or greater than EXPR. +supplied. If a version number or tuple is specified, or if EXPR is +numeric, demands that the current version of Perl +(C<$^V> or C<$]> or $PERL_VERSION) be equal or greater than EXPR. Otherwise, demands that a library file be included if it hasn't already been included. The file is included via the do-FILE mechanism, which is @@ -5143,13 +5146,17 @@ package. It is exactly equivalent to except that Module I<must> be a bareword. -If the first argument to C<use> is a number, it is treated as a version -number instead of a module name. If the version of the Perl interpreter -is less than VERSION, then an error message is printed and Perl exits -immediately. This is often useful if you need to check the current -Perl version before C<use>ing library modules that have changed in -incompatible ways from older versions of Perl. (We try not to do -this more than we have to.) +If the first argument to C<use> is a number or a version tuple, it is +treated as a version instead of a module name. If the version +of the Perl interpreter is less than VERSION, then an error message +is printed and Perl exits immediately. + + use 5.005_03; # version number + use v5.6.0; # version tuple + +This is often useful if you need to check the current Perl version before +C<use>ing library modules that have changed in incompatible ways from +older versions of Perl. (We try not to do this more than we have to.) The C<BEGIN> forces the C<require> and C<import> to happen at compile time. The C<require> makes sure the module is loaded into memory if it hasn't been diff --git a/pod/perlop.pod b/pod/perlop.pod index 5a901c00df..68113b79c1 100644 --- a/pod/perlop.pod +++ b/pod/perlop.pod @@ -1802,6 +1802,17 @@ operation you intend by using C<""> or C<0+>, as in the examples below. See L<perlfunc/vec> for information on how to manipulate individual bits in a bit vector. +=head2 Version tuples + +A version number of the form C<v1.2.3.4> is parsed as a dual-valued literal. +It has the string value of C<"\x{1}\x{2}\x{3}\x{4}"> (i.e., a utf8 string) +and a numeric value of C<1 + 2/1000 + 3/1000000 + 4/1000000000>. This is +useful for representing and comparing version numbers. + +Version tuples are accepted by both C<require> and C<use>. The C<$^V> variable +contains the running Perl interpreter's version in this format. +See L<perlvar/$^V>. + =head2 Integer Arithmetic By default, Perl assumes that it must do most of its arithmetic in @@ -1889,3 +1900,5 @@ limited-precision representations. The non-standard modules SSLeay::BN and Math::Pari provide equivalent functionality (and much more) with a substantial performance savings. + +=cut diff --git a/pod/perlvar.pod b/pod/perlvar.pod index a43ab6082b..309425179f 100644 --- a/pod/perlvar.pod +++ b/pod/perlvar.pod @@ -686,6 +686,8 @@ of perl in the right bracket?) Example: See also the documentation of C<use VERSION> and C<require VERSION> for a convenient way to fail if the running Perl interpreter is too old. +See C<$^V> for a more modern representation of the Perl version. + =item $COMPILING =item $^C @@ -854,6 +856,26 @@ The time at which the program began running, in seconds since the epoch (beginning of 1970). The values returned by the B<-M>, B<-A>, and B<-C> filetests are based on this value. +=item $^V + +The revision, version, and subversion of the Perl interpreter, represented +as a "version tuple". Version tuples have both a numeric value and a +string value. The numeric value is a floating point number that amounts +to revision + version/1000 + subversion/1000000, and the string value +is made of utf8 characters: +C<chr($revision) . chr($version) . chr($subversion)>. + +This can be used to determine whether the Perl interpreter executing a +script is in the right range of versions. (Mnemonic: use ^V for Version +control.) Example: + + warn "No "our" declarations!\n" if $^V and $^V lt v5.6; + +See also the documentation of C<use VERSION> and C<require VERSION> +for a convenient way to fail if the running Perl interpreter is too old. + +See also C<$]> for an older representation of the Perl version. + =item $WARNING =item $^W |