This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #124280] don't warn for 'my $foo, *bar'
authorLukas Mai <l.mai@web.de>
Fri, 20 Nov 2015 23:16:31 +0000 (00:16 +0100)
committerLukas Mai <l.mai@web.de>
Fri, 20 Nov 2015 23:26:10 +0000 (00:26 +0100)
It doesn't make sense to warn 'Parentheses missing around "my" list' if
adding the parens causes a syntax error (you can't declare typeglobs).

But it does make sense to warn for 'local $foo, *bar' because typeglobs
can be localized.

Thus modify the heuristic to only warn for '*' if we're not lexically
declaring something.

op.c
t/lib/warnings/op

diff --git a/op.c b/op.c
index 91a1b80..37d8656 100644 (file)
--- a/op.c
+++ b/op.c
@@ -4154,7 +4154,8 @@ Perl_localize(pTHX_ OP *o, I32 lex)
                s++;
 
            while (1) {
-               if (*s && strchr("@$%*", *s) && *++s
+               if (*s && (strchr("@$%", *s) || (!lex && *s == '*'))
+                      && *++s
                       && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) {
                    s++;
                    sigil = TRUE;
index b253741..89de94f 100644 (file)
@@ -824,6 +824,7 @@ use warnings 'parenthesis' ;
 my $a, $b = (1,2);
 my @foo,%bar,  $quux; # there's a TAB here
 my $x, $y or print;
+my $p, *q;
 no warnings 'parenthesis' ;
 my $c, $d = (1,2);
 EXPECT
@@ -833,6 +834,7 @@ Parentheses missing around "my" list at - line 4.
 # op.c
 use warnings 'parenthesis' ;
 our $a, $b = (1,2);
+our $p, *q;
 no warnings 'parenthesis' ;
 our $c, $d = (1,2);
 EXPECT
@@ -842,11 +844,13 @@ Parentheses missing around "our" list at - line 3.
 use warnings 'parenthesis' ;
 local $a, $b = (1,2);
 local *f, *g;
+local $p, *q;
 no warnings 'parenthesis' ;
 local $c, $d = (1,2);
 EXPECT
 Parentheses missing around "local" list at - line 3.
 Parentheses missing around "local" list at - line 4.
+Parentheses missing around "local" list at - line 5.
 ########
 # op.c
 use warnings 'bareword' ;