[perl #77240] Don’t warn for --subname
authorFather Chrysostomos <sprout@cpan.org>
Mon, 24 Sep 2012 23:24:54 +0000 (16:24 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Mon, 24 Sep 2012 23:25:13 +0000 (16:25 -0700)
t/lib/warnings/toke
toke.c

index bceb536..0b540ec 100644 (file)
@@ -718,6 +718,8 @@ EXPECT
 # toke.c
 sub fred {};
 -fred ;
+sub hank : lvalue {$_}
+--hank; # This should *not* warn [perl #77240]
 EXPECT
 Ambiguous use of -fred resolved as -&fred() at - line 3.
 ########
diff --git a/toke.c b/toke.c
index e0e0acd..d225514 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -6786,6 +6786,10 @@ Perl_yylex(pTHX)
          just_a_word: {
                int pkgname = 0;
                const char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
+               const char penultchar =
+                   lastchar && PL_bufptr - 2 >= PL_linestart
+                        ? PL_bufptr[-2]
+                        : 0;
 #ifdef PERL_MAD
                SV *nextPL_nextwhite = 0;
 #endif
@@ -7014,7 +7018,7 @@ Perl_yylex(pTHX)
                /* Not a method, so call it a subroutine (if defined) */
 
                if (cv) {
-                   if (lastchar == '-') {
+                   if (lastchar == '-' && penultchar != '-') {
                         const SV *tmpsv = newSVpvn_flags( PL_tokenbuf, len ? len : strlen(PL_tokenbuf), (UTF ? SVf_UTF8 : 0) | SVs_TEMP );
                        Perl_ck_warner_d(aTHX_ packWARN(WARN_AMBIGUOUS),
                                "Ambiguous use of -%"SVf" resolved as -&%"SVf"()",