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


in reply to Re: Re: Things every perl programmer should know?
in thread Things every perl programmer should know?

For me, it's:
use strict; use warnings; no warnings 'once';
because that sodding warning has never caught anything for me that strict wouldn't have trapped sooner. The kicker is that fixing it requires jumping through very silly hoops to make it go away. ($foo = $foo = 1; anyone?) As for uninitialized - well, I don't get a warning on
if ($foo) { ... }
I admit it's sometimes a little awkward to code around the uninitialized warning, but usually something like adding a || 0 or || '' or such does the trick just fine. And that kind of thing isn't silly, in fact I think it's clearer in intent in that I document via code that I explicitly expect undefs there.

Makeshifts last the longest.

Replies are listed 'Best First'.
Re: Re^3: Things every perl programmer should know? (disabled warnings)
by Juerd (Abbot) on Jun 04, 2003 at 23:31 UTC

    no warnings 'once'; because that sodding warning has never caught anything for me that strict wouldn't have trapped sooner. The kicker is that fixing it requires jumping through very silly hoops to make it go away.

    I find that error message very useful. It's not just catching spelling errors, which strict does indeed do better, but it's also catching variables that you really did use once. Variables used once are useless.

    If you have a variable that is used only once, then why use that variable? You're throwing away its value if it has one, and there's a variable declared that you don't use. "Variable used only once" actually means "Hey, you forgot to remove a line during your lastmost recent refactoring" or at least "You're throwing away valuable resources". :)

    Juerd # { site => 'juerd.nl', plp_site => 'plp.juerd.nl', do_not_use => 'spamtrap' }

      That would be helpful, except the warning only catches package variables, which I often very well intend to set only once (usually another module's option variables, stuff like $CGI::POST_MAX). The amount of package variables used in my code is very nearly zero anyway, and I scope my lexicals as tightly as possible (I don't reuse temporary variables either) so leftovers are a pretty much a non-issue.

      In summary, all that warning has ever managed to do for me is to cause mild to immense irritation, without any benefit whatsoever.

      Makeshifts last the longest.