http://www.perlmonks.org?node_id=1007938


in reply to Four annoying warnings

Hm. Each of those warnings catch many of my most frequent typos and brain farts in first drafts of code.

However,I do agree with you that there are many situations where -- at least some of them -- are better ignored than coded around.

But, your "just disable them" code block makes it look more of a chore than is necessary:

C:\test>perl -M-warnings=uninitialized,numeric,once,void -E"123;$x=1;p +rint $y; 'A'+0" C:\test>perl -Mwarnings=uninitialized,numeric,once,void -E"123;$x=1;pr +int $y; 'A'+0" Useless use of a constant in void context at -e line 1. Useless use of addition (+) in void context at -e line 1. Name "main::y" used only once: possible typo at -e line 1. Name "main::x" used only once: possible typo at -e line 1. Use of uninitialized value $y in print at -e line 1. Argument "A" isn't numeric in addition (+) at -e line 1.

(My point being that args to no warnings;can be multiple:no warnings qw[uninitialized numeric once void];

The one that really bugs me is:

C:\test>perl -wE"say (1+2)*3" say (...) interpreted as function at -e line 1. Useless use of multiplication (*) in void context at -e line 1. 3

But it is not the warning that bugs me, but rather the interpretation.

There is -- IMO -- absolutely no logic for allowing a space between a function name and its argument grouping parens. None whatsoever.

If the syntax required that if parens are used on a function call, the left paren must be abutted to the function name, that annoyance would go away.

I also wish that there were a :nocommon group label; though we could probably argue for a week about which should, and should not, be included :)


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

RIP Neil Armstrong

Replies are listed 'Best First'.
Re^2: Four annoying warnings
by tobyink (Canon) on Dec 09, 2012 at 00:59 UTC

    perl -M-warnings=uninitialized,numeric,once,void -E"123;$x=1;print $y; 'A'+0"

    But with strict that already doesn't compile. When you use strict, "once" usually becomes pretty irrelevant.

    "(My point being that args to no warnings;can be meultiple: no warnings qw[uninitialized numeric once void];"

    I'm aware of that. The four line block of the code was intended as four individual examples of how to disable specific warning categories, rather than a single block that should be copied and pasted into actual scripts.

    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'
      But with strict that already doesn't compile. When you use strict, "once" usually becomes pretty irrelevant.

      Mostly yes, but not if you refer to a fully qualified varable from another package. For example, when I am debugging my code, I often put DB::single=1 at various places. Sometime I leave those line in production code inside assert like error checks, as a kind of assert that will only go off when debugging.

      I have found that those lines will trigger the "once" warning, which is irritating.