perl - release memory for multi-level hash -


assume have muti-level hash:

$class->{'key1'}->{'key2'}->{$key3}->{'string'}->{$key5},
$class->{'key1'}->{'key2'}->{$key3}->{'string'}->{$key5}
equals integer number.
$key3 can class name "music", "english"...
$key5 can student name "mary", "luke"...

will following operation release memory under level $key3="music"? i.e. memory assigned $key5 released?

$current_class = $class->{'key1'}->{'key2'}->{"music"};
$current_class = undef;

update:

thanks both. understanding between delete , undef is: delete remove entry of key='music'

so $class->{'key1'}->{'key2'}->{"music"} not exist. while undef set value of $class->{'key1'}->{'key2'}->{"music"} undef. entry of key='music' still there value of undef $class->{'key1'}->{'key2'}->{"music"} = undef.

so should delete entry, correct?

but mean

undef $class->{'key1'}->{'key2'}->{"music"};

and

$class->{'key1'}->{'key2'}->{"music"} = undef;

are different?

perl has reference counting garbage collector.

$ cat test.pl

#!/usr/bin/perl use strict; package cat; sub new { ($class,$name) = @_; print "cat $name here\n"; bless \$name, $class; } sub destroy { $self = shift; print "  cat $$self gone\n"; }  package main; $ref->{aaa}->{bbb}->{ccc} = new cat 'alfred'; print  "111111\n"; $ref->{aaa} = 'qweqwe'; print  "222222\n"; 

$ ./test.pl

cat alfred here 111111   cat alfred gone 222222 

Comments

Popular posts from this blog

c++ - How do I get a multi line tooltip in MFC -

asp.net - In javascript how to find the height and width -

c# - DataTable to EnumerableRowCollection -