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
Post a Comment