Tie::RefHash::Weak - A Tie::RefHash subclass with weakened references in the keys. |
Tie::RefHash::Weak - A Tie::RefHash subclass with weakened references in the keys.
use Tie::RefHash::Weak; tie my %h, 'Tie::RefHash::Weak';
# OR:
use Tie::RefHash::Weak 'fieldhash'; fieldhash my %h;
{ # new scope my $val = "foo";
$h{\$val} = "bar"; # key is weak ref print join(", ", keys %h); # contains \$val, returns regular reference } # $val goes out of scope, refcount goes to zero # weak references to \$val are now undefined
keys %h; # no longer contains \$val
# see also Tie::RefHash
The the Tie::RefHash manpage module can be used to access hashes by reference. This is useful when you index by object, for example.
The problem with the Tie::RefHash manpage, and cross indexing, is that sometimes the index should not contain strong references to the objecs. the Tie::RefHash manpage's internal structures contain strong references to the key, and provide no convenient means to make those references weak.
This subclass of the Tie::RefHash manpage has weak keys, instead of strong ones. The values are left unaltered, and you'll have to make sure there are no strong references there yourself.
For compatibility with the Hash::Util::FieldHash manpage, this module will, upon
request, export the following two functions. You may also write
use Tie::RefHash::Weak ':all'
.
the Tie::RefHash manpage version 1.32 and above have correct handling of threads (with respect to changing reference addresses). If your module requires Tie::RefHash::Weak to be thread aware you need to depend on both the Tie::RefHash::Weak manpage and the Tie::RefHash manpage version 1.32 (or later).
Version 0.02 and later of Tie::RefHash::Weak depend on a thread-safe version of Tie::RefHash anyway, so if you are using the latest version this should already be taken care of for you.
Due to a minor change in Perl 5.10.0 a bug in the handling of magic freeing was uncovered causing segmentation faults.
This has been patched but not released yet, as of 0.08.
You can use an LVALUE reference (such as \substr ...
) as a hash key, but
due to a bug in perl (see
http://rt.perl.org/rt3/Public/Bug/Display.html) it might not be
possible to weaken a reference to it, in which case the hash element will
never be deleted automatically.
Yuval Kogman <nothingmuch@woobling.org>
some maintenance by Hans Dieter Pearcey <hdp@pobox.com>
Copyright (c) 2004 Yuval Kogman. All rights reserved This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
the Tie::RefHash manpage, the Class::DBI manpage (the live object cache), mg.c/Perl_magic_killbackrefs
Tie::RefHash::Weak - A Tie::RefHash subclass with weakened references in the keys. |