If you need to preserve the value of an existing variable only for the duration of a small block, perhaps you want
local instead of
my. Using 'my' on a variable already declared in the current scope will also generate a warning. Simply
localizing its value with
local is what you want to do here. This will also set its value to empty within the block you're using it, so a
local %hash; is sufficient to get an empty
%hash until you leave that block of code, at which point the original value is restored.
And the CGI::Carp bit is only useful if your application generates its own warnings/errors (including fatal error messages). Add the -w option to Perl (or with 5.6, 'use warnings;') so that Perl will take a look at your code and warn you when things don't look quite right, as it would have in this case.