On Jan 18, 2008 11:57 AM, Kevin Viel <[EMAIL PROTECTED]> wrote:
> Is there a way to empty/clear a hash in mass?
>
> For instance:
>
> %hash = {} ;
>
>
> Might the above create an reference?
snip
The above does create a reference. In fact, the hash will now contain
something like
%hash = (
"HASH(0x1801180)" => undef
)
You initialize a hash with a list. So if you want an empty hash then
you need to assign an empty list to it:
%hash = ();
However, this is a red flag that you are probably doing something
wrong. Most of the time it means you have declared your hash with too
large of a scope (generally due to contamination by ANSI C memes like
declaring all of your variables at the top of a function):
my %hash;
while (<>) {
#clean out old hash
%hash = ()
#make a hash set of the words in the line
$hash{$_} = 1 for split;
#do something else with %hash
}
Should be written
while (<>) {
my %hash;
#make a hash set of the words in the line
$hash{$_} = 1 for split;
#do something else with %hash
}
or better yet
while (<>) {
#make a hash set of the words in the line
my %hash = map { $_ => 1 } split;
#do something else with %hash
}
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/