This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
spurious "Use of "-x" without parentheses" mesg
authorDavid Mitchell <davem@iabyn.com>
Tue, 22 Oct 2013 15:48:16 +0000 (16:48 +0100)
committerDavid Mitchell <davem@iabyn.com>
Tue, 22 Oct 2013 16:01:30 +0000 (17:01 +0100)
RT #120288.

Something like '-X' at the start of a line (where X is one char, but not a
filetest operator) was giving a spurious

    Warning: Use of "-a" without parentheses is ambiguous

error. This was because the toker was provisionally marking the -a as the
last encountered unary operator (PL_last_uni), then not unmarking it when
it found that that it wasn't in fact a filetest operator.

t/lib/warnings/toke
toke.c

index 389dc9c..eb918f1 100644 (file)
@@ -1492,3 +1492,10 @@ eval "\${ \cX } = 24";
 EXPECT
 Use of literal control characters in variable names is deprecated at (eval 1) line 1.
 Use of literal control characters in variable names is deprecated at (eval 2) line 1.
+########
+# toke.c
+# [perl #120288] -X at start of line gave spurious warning, where X is not
+# a filetest operator
+-a;
+;-a;
+EXPECT
diff --git a/toke.c b/toke.c
index eb9d71f..0f169a2 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -5708,7 +5708,6 @@ Perl_yylex(pTHX)
                DEBUG_T( { printbuf("### Saw unary minus before =>, forcing word %s\n", s); } );
                OPERATOR('-');          /* unary minus */
            }
-           PL_last_uni = PL_oldbufptr;
            switch (tmp) {
            case 'r': ftst = OP_FTEREAD;        break;
            case 'w': ftst = OP_FTEWRITE;       break;
@@ -5747,6 +5746,7 @@ Perl_yylex(pTHX)
                break;
            }
            if (ftst) {
+                PL_last_uni = PL_oldbufptr;
                PL_last_lop_op = (OPCODE)ftst;
                DEBUG_T( { PerlIO_printf(Perl_debug_log,
                         "### Saw file test %c\n", (int)tmp);