per Larry's idea, parse 1.2.3 as v1.2.3; C<require 5.6.0> and
[p5sagit/p5-mst-13.2.git] / pod / perldelta.pod
index 3a2c296..4fd3ce4 100644 (file)
@@ -57,6 +57,45 @@ cases remains unchanged:
 
 See L<perldata>.
 
+=head2 Perl's version numbering has changed
+
+Beginning with Perl version 5.6, the version number convention has been
+changed to a "dotted integer" 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 English module now sets $PERL_VERSION to $^V (a string value) rather
+than C<$]> (a numeric value).  (This is a potential incompatibility.
+Send us a report via perlbug if you are affected by this.)
+
+The v1.2.3 syntax is also now legal in Perl.
+See L<Support for strings represented as a vector of ordinals> 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.0 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.0 will be v5.6.1, which amounts to a floating point
+value of 5.006_001).
+
+=item Literals of the form C<1.2.3> parse differently
+
+Previously, numeric literals with more than one dot in them were
+interpreted as a floating point number concatenated with one or more
+numbers.  Such "numbers" are now parsed as strings composed of the
+specified ordinals.
+
+For example, C<print 97.98.99> used to output C<97.9899> in earlier
+versions, but now prints C<abc>.
+
+See L<Support for strings represented as a vector of ordinals> below.
+
 =item Possibly changed pseudo-random number generator
 
 In 5.005_0x and earlier, perl's rand() function used the C library
@@ -81,13 +120,15 @@ Using the C<undef> operator on a readonly value (such as $1) has
 the same effect as assigning C<undef> to the readonly value--it
 throws an exception.
 
-=item Close-on-exec bit may be set on pipe() handles
+=item Close-on-exec bit may be set on pipe and socket handles
 
 On systems that support a close-on-exec flag on filehandles, the
-flag will be set for any handles created by pipe(), if that is
-warranted by the value of $^F that may be in effect.  Earlier
-versions neglected to set the flag for handles created with
-pipe().  See L<perlfunc/pipe> and L<perlvar/$^F>.
+flag will be set for any handles created by pipe(), socketpair(),
+socket(), and accept(), if that is warranted by the value of $^F
+that may be in effect.  Earlier versions neglected to set the flag
+for handles created with these operators.  See L<perlfunc/pipe>,
+L<perlfunc/socketpair>, L<perlfunc/socket>, L<perlfunc/accept>,
+and L<perlvar/$^F>.
 
 =item Writing C<"$$1"> to mean C<"${$}1"> is unsupported
 
@@ -284,29 +325,6 @@ 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
@@ -380,8 +398,8 @@ building and installing from source, the defaults should be fine.
 =head2 Unicode and UTF-8 support
 
 Perl can optionally use UTF-8 as its internal representation for character
-strings.  The C<utf8> and C<byte> pragmas are used to control this support
-in the current lexical scope.  See L<perlunicode>, L<utf8> and L<byte> for
+strings.  The C<utf8> and C<bytes> pragmas are used to control this support
+in the current lexical scope.  See L<perlunicode>, L<utf8> and L<bytes> for
 more information.
 
 =head2 Interpreter cloning, threads, and concurrency
@@ -453,36 +471,49 @@ 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
+=head2 Support for strings represented as a vector of ordinals
 
-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.
+Literals of the form C<v1.2.3.4> are now parsed as a string composed of
+of characters with the specified ordinals.  This is an alternative, more
+readable way to construct (possibly unicode) strings instead of
+interpolating characters, as in C<"\x{1}\x{2}\x{3}\x{4}">.  The leading
+C<v> may be omitted if there are more than two ordinals, so C<1.2.3> is
+parsed the same as C<v1.2.3>.
 
-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.
+Strings written in this form are also useful to represent version "numbers".
+It is easy to compare such version "numbers" (which are really just plain
+strings) using any of the usual string comparison operators C<eq>, C<ne>,
+C<lt>, C<gt>, etc., or perform bitwise string operations on them using C<|>,
+C<&>, etc.
 
 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.
+the perl version as a string), such literals can be used as a readable way
+to check if you're running a particular version of Perl:
 
+    # this will parse in older versions of Perl also
     if ($^V and $^V gt v5.5.640) {
-        # new style version numbers are supported
+        # new features supported
     }
 
-C<require> and C<use> also support such literals:
+C<require> and C<use> also have some special magic to support such literals.
+They will be interpreted as a version rather than as a module name:
+
+    require v5.6.0;            # croak if $^V lt v5.6.0
+    use v5.6.0;                        # same, but croaks at compile-time
 
-    require v5.6.0;    # croak if $^V lt v5.6.0
-    use v5.6.0;                # same, but croaks at compile-time
+Alternatively, the C<v> may be omitted if there is more than one dot:
 
-C<sprintf> and C<printf> support the Perl-specific format type C<%v>
-to print arbitrary strings as dotted tuples.
+    require 5.6.0;
+    use 5.6.0;
 
-    printf "v%v", $^V; # prints current version, such as "v5.5.650"
+Also, C<sprintf> and C<printf> support the Perl-specific format flag C<%v>
+to print ordinals of characters in arbitrary strings:
+
+    printf "v%vd", $^V;                # prints current version, such as "v5.5.650"
+    printf "%*vX", ":", $addr; # formats IPv6 address
+    printf "%*vb", " ", $bits; # displays bitstring
+
+See L<perlop/"Strings of Character"> for additional information.
 
 =head2 Weak references
 
@@ -638,7 +669,8 @@ Unfortunately bit arithmetics (&, |, ^, ~, <<, >>) for numbers are not
 64-bit clean, they are explictly forced to be 32-bit because of
 tangled backward compatibility issues.  This limitation is subject to
 change.  Bit arithmetics for bit vector scalars (created by vec()) are
-not limited in their width.
+not limited in their width, you can use the & | ^ ~ operators on such
+scalars.
 
 Last but not least: note that due to Perl's habit of always using
 floating point numbers the quads are still not true integers.
@@ -848,9 +880,12 @@ 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.
+C<$^V> contains the Perl version number as a string composed of
+characters whose ordinals match the version numbers, so that it may
+be used in string comparisons.
+
+See C<Support for strings represented as a vector of ordinals> for an
+example.
 
 =head2 Optional Y2K warnings
 
@@ -859,7 +894,7 @@ it emits optional warnings when concatenating the number 19
 with another number.
 
 This behavior must be specifically enabled when running Configure.
-See L<INSTALL> and L<README.Y2K>.
+See F<INSTALL> and F<README.Y2K>.
 
 =head1 Significant bug fixes
 
@@ -1385,6 +1420,11 @@ For other details, see L<Benchmark>.
 The Devel::Peek module provides access to the internal representation
 of Perl variables and data.  It is a data debugging tool for the XS programmer.
 
+=item English
+
+$PERL_VERSION now stands for C<$^V> (a string value) rather than for C<$]>
+(a numeric value).
+
 =item ExtUtils::MakeMaker
 
 change#4135, also needs docs in module pod
@@ -1397,8 +1437,11 @@ large file (more than 4GB) access Note that the O_LARGEFILE is
 automatically/transparently added to sysopen() flags if large file
 support has been configured), Free/Net/OpenBSD locking behaviour flags
 F_FLOCK, F_POSIX, Linux F_SHLCK, and O_ACCMODE: the combined mask of
-O_RDONLY, O_WRONLY, and O_RDWR.  Also SEEK_SET, SEEK_CUR, and SEEK_END
-added for one-stop shopping of the seek/sysseek constants.
+O_RDONLY, O_WRONLY, and O_RDWR.  The seek()/sysseek() constants
+SEEK_SET, SEEK_CUR, and SEEK_END are available via the C<:seek> tag.
+The chmod()/stat() S_IF* constants and S_IS* functions are available
+via the C<:mode> tag.
+
 
 =item File::Compare
 
@@ -2236,7 +2279,7 @@ when you meant
 
     my ($foo, $bar) = @_;
 
-Remember that "my", "our" and "local" bind closer than comma.
+Remember that "my", "our", and "local" bind tighter than comma.
 
 =item Possible Y2K bug: %s