Use of $* and $# will be fatal in 5.30.
authorAbigail <abigail@abigail.be>
Sun, 15 Jan 2017 21:23:47 +0000 (22:23 +0100)
committerAbigail <abigail@abigail.be>
Mon, 16 Jan 2017 18:18:17 +0000 (19:18 +0100)
Initially, the plan was to just drop the deprecation message of $* and $#,
letting them be the magicless punctuation variables they are now. However,
we decided to make their use fatal, so we can use them in a future version
of Perl.

gv.c
pod/perldeprecation.pod
pod/perldiag.pod
t/lib/warnings/2use
t/lib/warnings/gv

diff --git a/gv.c b/gv.c
index 6732dd2..fff8e95 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -2157,9 +2157,10 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len,
        case '*':               /* $* */
        case '#':               /* $# */
            if (sv_type == SVt_PV)
-               /* diag_listed_as: $* is no longer supported */
+               /* diag_listed_as: $* is no longer supported. Its use will be fatal in Perl 5.30 */
                Perl_ck_warner_d(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
-                                "$%c is no longer supported", *name);
+                                "$%c is no longer supported. Its use "
+                                 "will be fatal in Perl 5.30", *name);
            break;
        case '\010':    /* $^H */
            {
@@ -2269,10 +2270,11 @@ S_maybe_multimagic_gv(pTHX_ GV *gv, const char *name, const svtype sv_type)
             require_tie_mod_s(gv, *name, "Tie::Hash::NamedCapture", 0);
     } else if (sv_type == SVt_PV) {
         if (*name == '*' || *name == '#') {
-            /* diag_listed_as: $* is no longer supported */
+            /* diag_listed_as: $# is no longer supported. Its use will be fatal in Perl 5.30 */
             Perl_ck_warner_d(aTHX_ packWARN2(WARN_DEPRECATED,
                                              WARN_SYNTAX),
-                             "$%c is no longer supported", *name);
+                             "$%c is no longer supported. Its use "
+                             "will be fatal in Perl 5.30", *name);
         }
     }
     if (sv_type==SVt_PV || sv_type==SVt_PVGV) {
index 1581d45..bb69f7f 100644 (file)
@@ -52,6 +52,29 @@ This usage has been deprecated, and will no longer be allowed in Perl 5.32.
 
 =head2 Perl 5.30
 
+=head3 C<< $* >> is no longer supported
+
+Before Perl 5.10, setting C<< $* >> to a true value globally enabled
+multi-line matching within a string. This relique from the past lost
+its special meaning in 5.10. Use of this variable will be a fatal error
+in Perl 5.30, freeing the variable up for a future special meaning.
+
+To enable multiline matching one should use the C<< /m >> regexp
+modifier (possibly in combination with C<< /s >>). This can be set
+on a per match bases, or can be enabled per lexical scope (including
+a whole file) with C<< use re '/m' >>.
+
+=head3 C<< $# >> is no longer supported
+
+This variable used to have a special meaning -- it could be used
+to control how numbers were formatted when printed. This seldom
+used functionality was removed in Perl 5.10. In order to free up
+the variable for a future special meaning, its use will be a fatal
+error in Perl 5.30.
+
+To specify how numbers are formatted when printed, one is adviced
+to use C<< printf >> or C<< sprintf >> instead.
+
 =head3 C<< File::Glob::glob() >> will disappear
 
 C<< File::Glob >> has a function called C<< glob >>, which just calls
index df7056d..67c5f95 100644 (file)
@@ -3141,7 +3141,7 @@ You specified a character that has the given plainer way of writing it,
 and which is also portable to platforms running with different character
 sets. This usage is deprecated, and will be a fatal error in Perl 5.28.
 
-=item $* is no longer supported
+=item $* is no longer supported. Its use will be fatal in Perl 5.30
 
 (D deprecated, syntax) The special variable C<$*>, deprecated in older
 perls, has been removed as of 5.10.0 and is no longer supported.  In
@@ -3153,12 +3153,16 @@ modifiers.  You can enable C</m> for a lexical scope (even a whole file)
 with C<use re '/m'>.  (In older versions: when C<$*> was set to a true value
 then all regular expressions behaved as if they were written using C</m>.)
 
-=item $# is no longer supported
+Use of this variable will be a fatal error in Perl 5.30.
+
+=item $# is no longer supported. Its use will be fatal in Perl 5.30
 
 (D deprecated, syntax) The special variable C<$#>, deprecated in older
 perls, has been removed as of 5.10.0 and is no longer supported.  You
 should use the printf/sprintf functions instead.
 
+Use of this variable will be a fatal error in Perl 5.30.
+
 =item '%s' is not a code reference
 
 (W overload) The second (fourth, sixth, ...) argument of
index 4e10d4b..a02505e 100644 (file)
@@ -365,8 +365,8 @@ $*;
 use warnings "void";
 $#;
 EXPECT
-$* is no longer supported at - line 3.
-$# is no longer supported at - line 5.
+$* is no longer supported. Its use will be fatal in Perl 5.30 at - line 3.
+$# is no longer supported. Its use will be fatal in Perl 5.30 at - line 5.
 Useless use of a variable in void context at - line 5.
 ########
 
@@ -375,5 +375,5 @@ $*;
 no warnings "void";
 $#;
 EXPECT
-$* is no longer supported at - line 3.
-$# is no longer supported at - line 5.
+$* is no longer supported. Its use will be fatal in Perl 5.30 at - line 3.
+$# is no longer supported. Its use will be fatal in Perl 5.30 at - line 5.
index 20c8ac5..c8e2b89 100644 (file)
@@ -65,8 +65,8 @@ no warnings 'deprecated' ;
 $a = ${"#"};
 $a = ${"*"};
 EXPECT
-$# is no longer supported at - line 2.
-$* is no longer supported at - line 3.
+$# is no longer supported. Its use will be fatal in Perl 5.30 at - line 2.
+$* is no longer supported. Its use will be fatal in Perl 5.30 at - line 3.
 ########
 # gv.c
 $a = ${#};
@@ -75,8 +75,8 @@ no warnings 'deprecated' ;
 $a = ${#};
 $a = ${*};
 EXPECT
-$# is no longer supported at - line 2.
-$* is no longer supported at - line 3.
+$# is no longer supported. Its use will be fatal in Perl 5.30 at - line 2.
+$* is no longer supported. Its use will be fatal in Perl 5.30 at - line 3.
 ########
 # gv.c
 $a = $#;
@@ -93,12 +93,12 @@ $* = $a;
 $a = \$#;
 $a = \$*;
 EXPECT
-$# is no longer supported at - line 2.
-$* is no longer supported at - line 3.
-$# is no longer supported at - line 4.
-$* is no longer supported at - line 5.
-$# is no longer supported at - line 6.
-$* is no longer supported at - line 7.
+$# is no longer supported. Its use will be fatal in Perl 5.30 at - line 2.
+$* is no longer supported. Its use will be fatal in Perl 5.30 at - line 3.
+$# is no longer supported. Its use will be fatal in Perl 5.30 at - line 4.
+$* is no longer supported. Its use will be fatal in Perl 5.30 at - line 5.
+$# is no longer supported. Its use will be fatal in Perl 5.30 at - line 6.
+$* is no longer supported. Its use will be fatal in Perl 5.30 at - line 7.
 ########
 # gv.c
 @a = @#;
@@ -106,8 +106,8 @@ $* is no longer supported at - line 7.
 $a = $#;
 $a = $*;
 EXPECT
-$# is no longer supported at - line 4.
-$* is no longer supported at - line 5.
+$# is no longer supported. Its use will be fatal in Perl 5.30 at - line 4.
+$* is no longer supported. Its use will be fatal in Perl 5.30 at - line 5.
 ########
 # gv.c
 $a = $#;
@@ -115,8 +115,8 @@ $a = $*;
 @a = @#;
 @a = @*;
 EXPECT
-$# is no longer supported at - line 2.
-$* is no longer supported at - line 3.
+$# is no longer supported. Its use will be fatal in Perl 5.30 at - line 2.
+$* is no longer supported. Its use will be fatal in Perl 5.30 at - line 3.
 ########
 # gv.c
 $a = ${^ENCODING};