I've found that limiting the scope of my temporaries has reduced my debugging time.
So when I need a "scratch variable" for a few steps, or need to set something dangerously global like $/ for a few steps, I pop open a block and do the work there.
Doing so makes it very clear to the reader that this variable doesn't need a long
lifetime, and even ensures that the action won't collide with a larger-scoped
variable. It's a slick trick, and works nicely.
I've also recently started using the idiom of a one-iteration foreach loop to "name" a value rather than setting up a temporary, like:
for ($some->complicated(@value)->{$to_fetch}) {
print; # print it
print LOGFILE $_; # and to the logfile
substr($_, 0, 1, ""); # remove its first character
}
It's a nice idiom, and is also the explanation of why Larry intentially allows
foreach to be spelled "f-o-r". And the "backwards foreach"
makes it even easier:
do_this($_), do_that($_, @moreargs) for $some{$complicated}{$value};
-- Randal L. Schwartz, Perl hacker |