Forbid use of bare << to mean <<""
authorDagfinn Ilmari Mannsåker <ilmari@ilmari.org>
Fri, 2 Jun 2017 14:47:02 +0000 (15:47 +0100)
committerDagfinn Ilmari Mannsåker <ilmari@ilmari.org>
Mon, 5 Jun 2017 15:06:41 +0000 (16:06 +0100)
It has ben deprecated since perl 5.000.

pod/perldelta.pod
pod/perldiag.pod
t/lib/croak/toke
t/lib/warnings/toke
t/op/heredoc.t
t/op/lex.t
toke.c

index ffd2c5f..d22cfed 100644 (file)
@@ -70,6 +70,10 @@ This has been deprecated since Perl 5.24.
 Using open() and opendir() to associate both a filehandle and a dirhandle
 to the same symbol (glob or scalar) has been deprecated since Perl 5.10.
 
+=head2 Use of bare C<< << >> to mean C<< <<"" >> is no longer allowed
+
+Use of a bare terminator has been deprecated since Perl 5.000.
+
 =head1 Deprecations
 
 XXX Any deprecated features, syntax, modules etc. should be listed here.
index 8853d45..80116a8 100644 (file)
@@ -6924,14 +6924,14 @@ returns no useful value.  See L<perlmod>.
 (D deprecated) The C<$[> variable (index of the first element in an array)
 is deprecated.  See L<perlvar/"$[">.
 
-=item Use of bare << to mean <<"" is deprecated. Its use will be fatal in Perl 5.28
+=item Use of bare << to mean <<"" is forbidden
 
-(D deprecated) You are now encouraged to use the explicitly quoted
+(F) You are now required to use the explicitly quoted
 form if you wish to use an empty line as the terminator of the
 here-document.
 
 Use of a bare terminator was deprecated in Perl 5.000, and
-will be a fatal error in Perl 5.28.
+is a fatal error as of Perl 5.28.
 
 =item Use of /c modifier is meaningless in s///
 
index 4035495..7aa15ef 100644 (file)
@@ -371,3 +371,20 @@ tr/\o-0//;
 EXPECT
 Missing braces on \o{} at - line 2, within string
 Execution of - aborted due to compilation errors.
+########
+# NAME bare <<
+$a = <<;
+
+EXPECT
+Use of bare << to mean <<"" is forbidden at - line 1.
+########
+# NAME bare <<~
+$a = <<~;
+EXPECT
+Use of bare << to mean <<"" is forbidden at - line 1.
+########
+# NAME bare <<~
+$a = <<~ ;
+
+EXPECT
+Use of bare << to mean <<"" is forbidden at - line 1.
index 49fa97e..b9c01c9 100644 (file)
@@ -124,24 +124,6 @@ toke.c     AOK
 
 __END__
 # toke.c
-$a = <<;
-
-no warnings 'deprecated' ;
-$a = <<;
-
-EXPECT
-Use of bare << to mean <<"" is deprecated. Its use will be fatal in Perl 5.28 at - line 2.
-########
-# toke.c
-$a = <<~;
-
-$a = <<~ ;
-
-EXPECT
-Use of bare << to mean <<"" is deprecated. Its use will be fatal in Perl 5.28 at - line 2.
-Use of bare << to mean <<"" is deprecated. Its use will be fatal in Perl 5.28 at - line 4.
-########
-# toke.c
 $a =~ m/$foo/eq;
 $a =~ s/$foo/fool/seq;
 
index 5166159..7b11852 100644 (file)
@@ -33,13 +33,13 @@ HEREDOC
     );
 
     fresh_perl_is(
-        "print <<;\n$string\n",
+        qq(print <<"";\n$string\n),
         $string,
         { switches => ['-X'] },
         "blank-terminated heredoc at EOF"
     );
     fresh_perl_is(
-        "print <<\n$string\n",
+        qq(print <<""\n$string\n),
         $string,
         { switches => ['-X'] },
         "blank-terminated heredoc at EOF and no semicolon"
@@ -75,7 +75,7 @@ HEREDOC
     # that building with ASAN will reveal the bug and any related regressions.
     for (1..31) {
         fresh_perl_like(
-            "print <<;\n" . "x" x $_,
+            qq(print <<"";\n) . "x" x $_,
             qr/find string terminator/,
             { switches => ['-X'] },
             "empty string terminator still needs a newline (length $_)"
@@ -100,16 +100,16 @@ HEREDOC
 
     # also read freed memory, but got an invalid oldoldbufptr in a different way
     fresh_perl_like(
-        qq(<<\n\$          \n),
+        qq(<<""\n\$          \n),
         # valgrind and asan reports an error between these two lines
-        qr/^Use of bare << to mean <<"" is deprecated\. Its use will be fatal in Perl 5\.28 at - line 1\.\s+Final \$/,
+        qr/^Final \$/,
         {},
         "don't use an invalid oldoldbufptr (some more)"
     );
 
     # [perl #125540] this asserted or crashed
     fresh_perl_like(
-       q(map d$#<<<<),
+       q(map d$#<<<<""),
        qr/Can't find string terminator "" anywhere before EOF at - line 1\./,
        {},
        "Don't assert parsing a here-doc if we hit EOF early"
index 7a05ee9..90be519 100644 (file)
@@ -10,14 +10,13 @@ BEGIN { chdir 't' if -d 't'; require './test.pl'; }
 plan(tests => 36);
 
 {
-    no warnings 'deprecated';
-    print <<;   # Yow!
+    print <<'';   # Yow!
 ok 1
 
     # previous line intentionally left blank.
 
     my $yow = "ok 2";
-    print <<;   # Yow!
+    print <<"";   # Yow!
 $yow
 
     # previous line intentionally left blank.
diff --git a/toke.c b/toke.c
index e9d3979..0dcf623 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -9846,7 +9846,7 @@ S_scan_heredoc(pTHX_ char *s)
        else
            term = '"';
        if (! isWORDCHAR_lazy_if_safe(s, PL_bufend, UTF))
-           deprecate_fatal_in("5.28", "Use of bare << to mean <<\"\" is deprecated");
+           Perl_croak(aTHX_ "Use of bare << to mean <<\"\" is forbidden");
        peek = s;
         while (
                isWORDCHAR_lazy_if_safe(peek, PL_bufend, UTF))