in reply to Re^2: Preventing Use of uninitialized value.
in thread Preventing Use of uninitialized value.

Not really. Those warnings annoy me.

The ability to treat an uninitialized variable as zero or the empty string is handy and is part of what makes perl Perl. Explicitly having to check whether a variable is undef at runtime makes code unnecessarily verbose and (very slightly) slower. I can understand wanting to have this warning available to help people with debugging, but 99% of the time, it's annoying.

I don't think the once or void warnings categories have ever helped me find a real error in my code. once becomes annoying if you want to do things like:

printf "%s%s\n", $MyModule::Config::Indent ? "\t" : "", $output;

Where $MyModule::Config::Indent is a variable that end users can set to true if they want indented output. That might be the only place in my module where I perform any output, so that variable would only be referenced once. I don't want a warning for that. (And yes, I know globals are bad in general, but there are some places where their use can be expedient.)

The numeric warnings category can be annoying at times too, but it's just helpful enough for me to want to keep it enabled most of the time.

Replies are listed 'Best First'.
Re^4: Preventing Use of uninitialized value.
by 1nickt (Canon) on Dec 13, 2018 at 18:26 UTC

    Respectfully must disagree.

    I never ever disable uninitialized value warnings. If the code in question is intended to support an uninitialized variable for the reasons you mentioned, and if a function is to be called that would emit such a warning, I write the coercion explicitly like frobnicate() if ($str // '') =~ $re;. On the other hand if the code is not expected to encounter an uninitialized value, getting a warning that it happened is part of what makes perl Perl ;-) It has facilitated quick debugging and bug-finding in literally thousands and thousands of cases for me.

    When I need to disable once warnings, which I agree can be hugely unhelpful, I do so locally. For the cost of a couple of braces I enjoy the security of typos or kruft elsewhere being caught.


    The way forward always starts with a minimal test.