Yet another stupid mistake #2: my oh my
Stricture helps me catch some typos by requiring predeclaration of variables (e.g. using the lexical my()). But it doesn't warn me about my stupidity. In this month alone, I have been bitten by two episodes of sloppy refactoring, where I left an extra 'my' on an inner block, something like:
my $foo = blah(); ... for (...) { my $foo = ...; ... # we lost what we've done to the inner $foo }
Of course, -w and 'use strict' didn't help me here. -w only warns about the second 'my' if done in the same scope. And so around half an hour were spent chasing these two silent bugs. I guess a critic policy could be written for this sort of thing, e.g. forbidding two lexical declaration inside the same sub. And discipline yourself to keep paragraphs of code relatively short.
There is a policy :)
http://search.cpan.org/~elliotjs/Perl-Critic-1.113/lib/Perl/Critic/Policy/Variables/ProhibitReusedNames.pm
A Perl::Critic policy for this actually exists: Variables::ProhibitReusedNames :)
warnings::unused also catches that :)
Nice to know :)
@Anonymous: not always :)