This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #114104] Better error for unterminated heredoc delim
authorFather Chrysostomos <sprout@cpan.org>
Thu, 2 Aug 2012 16:52:27 +0000 (09:52 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Thu, 2 Aug 2012 17:02:04 +0000 (10:02 -0700)
pod/perldiag.pod
t/lib/croak/toke
toke.c

index 327f392..536764d 100644 (file)
@@ -5203,6 +5203,18 @@ character to get your parentheses to balance.  See L<attributes>.
 compressed integer format and could not be converted to an integer.
 See L<perlfunc/pack>.
 
+=item Unterminated delimiter for here document
+
+(F) This message occurs when a here document label has an initial
+quotation mark but the final quotation mark is missing.  Perhaps
+you wrote:
+
+    <<"foo
+
+instead of:
+
+    <<"foo"
+
 =item Unterminated \g{...} pattern in regex; marked by <-- HERE in m/%s/
 
 (F) You missed a close brace on a \g{..} pattern (group reference) in
index 130659a..7ab5a4d 100644 (file)
@@ -3,3 +3,8 @@ __END__
 my sub;
 EXPECT
 Missing name in "my sub" at - line 1.
+########
+# NAME Unterminated delimiter for here document
+<<"foo
+EXPECT
+Unterminated delimiter for here document at - line 1.
diff --git a/toke.c b/toke.c
index 19fa195..c65aecf 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -9447,9 +9447,10 @@ S_scan_heredoc(pTHX_ register char *s)
        s = peek;
        term = *s++;
        s = delimcpy(d, e, s, PL_bufend, term, &len);
+       if (s == PL_bufend)
+           Perl_croak(aTHX_ "Unterminated delimiter for here document");
        d += len;
-       if (s < PL_bufend)
-           s++;
+       s++;
     }
     else {
        if (*s == '\\')