summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSADAHIRO Tomoyuki <BQW10602@nifty.com>2004-01-18 04:59:55 +0900
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2004-01-17 21:25:08 +0000
commitbac662eeb2cdce47175319fe613f5779e780f517 (patch)
tree5edd9c93a90f80a8022e07d88d43773b016b6271
parente0767201fcaa7af00aab34d9bca69adf68de6451 (diff)
downloadperl-bac662eeb2cdce47175319fe613f5779e780f517.tar.gz
Re: open/or inconsistency
Message-Id: <20040117195729.623A.BQW10602@nifty.com> (plus a test.) Don't produce the warning for constructs like open my $fh, $file or die; p4raw-id: //depot/perl@22170
-rw-r--r--op.c26
-rw-r--r--t/lib/warnings/op1
2 files changed, 18 insertions, 9 deletions
diff --git a/op.c b/op.c
index b39d81ee30..d53b1307be 100644
--- a/op.c
+++ b/op.c
@@ -1865,19 +1865,27 @@ Perl_localize(pTHX_ OP *o, I32 lex)
&& PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ',')
{
char *s = PL_bufptr;
- int sigil = 0;
+ bool sigil = FALSE;
/* some heuristics to detect a potential error */
- while (*s && (strchr(", \t\n", *s)
- || (strchr("@$%*", *s) && ++sigil) ))
+ while (*s && (strchr(", \t\n", *s)))
s++;
- if (sigil) {
- while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)
- || strchr("@$%*, \t\n", *s)))
- s++;
- if (*s == ';' || *s == '=')
- Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
+ while (1) {
+ if (*s && strchr("@$%*", *s) && *++s
+ && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
+ s++;
+ sigil = TRUE;
+ while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
+ s++;
+ while (*s && (strchr(", \t\n", *s)))
+ s++;
+ }
+ else
+ break;
+ }
+ if (sigil && (*s == ';' || *s == '=')) {
+ Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
"Parentheses missing around \"%s\" list",
lex ? (PL_in_my == KEY_our ? "our" : "my")
: "local");
diff --git a/t/lib/warnings/op b/t/lib/warnings/op
index e06d251eaa..486a00aa9a 100644
--- a/t/lib/warnings/op
+++ b/t/lib/warnings/op
@@ -584,6 +584,7 @@ BEGIN not safe after errors--compilation aborted at - line 18.
use warnings 'parenthesis' ;
my $a, $b = (1,2);
my @foo,%bar, $quux; # there's a TAB here
+my $x, $y or print;
no warnings 'parenthesis' ;
my $c, $d = (1,2);
EXPECT