From: Paul Marquess Date: Sun, 25 Mar 2001 21:59:15 +0000 (+0100) Subject: RE: 5.6.0 BUG: Lexical warnings aren't lexical X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=7272584d0d275e06fe4442e1b6aecb95109596e4;p=p5sagit%2Fp5-mst-13.2.git RE: 5.6.0 BUG: Lexical warnings aren't lexical Message-ID: <000701c0b56e$73944220$07bdfea9@bfs.phone.com> A variable will be checked for the "use once" warnings if: 1. It is in the scope of a use warnings 'once' 2. It isn't in the scope of the warnings pragma at all AND $^W is set. Otherwise it won't be checked at all. Part 1 is what is in perl >= 5.6.0, Part 2 is what I'm fixing. The enclosed patch partially fixes this issue. What I didn't get to work was the case where the "used once" warning is enabled in any file other than the main file. p4raw-id: //depot/perl@9401 --- diff --git a/gv.c b/gv.c index 72fcf82..2d43338 100644 --- a/gv.c +++ b/gv.c @@ -731,7 +731,8 @@ Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type) gv_init(gv, stash, name, len, add & GV_ADDMULTI); gv_init_sv(gv, sv_type); - if (isLEXWARN_on && isALPHA(name[0]) && ! ckWARN(WARN_ONCE)) + if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE) + : (PL_dowarn & G_WARN_ON ) ) ) GvMULTI_on(gv) ; /* set up magic where warranted */ diff --git a/t/pragma/warn/perl b/t/pragma/warn/perl index 7070dd4..512ee7f 100644 --- a/t/pragma/warn/perl +++ b/t/pragma/warn/perl @@ -54,4 +54,19 @@ Name "main::x" used only once: possible typo at - line 4. use warnings 'once' ; $x = 3 ; EXPECT +######## +# perl.c +{ use warnings 'once' ; $x = 3 ; } +$y = 3 ; +EXPECT +Name "main::x" used only once: possible typo at - line 3. +######## + +# perl.c +$z = 3 ; +BEGIN { $^W = 1 } +{ no warnings 'once' ; $x = 3 ; } +$y = 3 ; +EXPECT +Name "main::y" used only once: possible typo at - line 6.