HTML-Tree gets weakref support!
"Christopher J. Madsen" <[email protected]> Fri, 01 Jun 2012 16:00:44 -0500
| Newsgroups | gmane.comp.lang.perl.modules.lwp |
|---|---|
| Message-ID | <[email protected]> |
At long last, HTML-Tree can now use weakrefs. This means you no longer
need to call "$tree->delete" to prevent memory leaks.
Right now, you can get trial release 4.900 from CPAN:
https://metacpan.org/release/CJM/HTML-Tree-4.900-TRIAL/
I plan to release 5.00 before YAPC::NA, probably on June 12. (This
would probably be a good subject for a lightning talk, if someone wants
to give it. I'd do it myself, but I'm not going to be able to make it
to YAPC this year.)
If you're using HTML-Tree, please test your code with the new version now.
While most programs should continue to work fine with this change, it
could break your code. The one real-world example I've found so far is
pQuery's dom.t. In pQuery 0.08, it does:
my @elems = pQuery::DOM->fromHTML('<div>xxx<!-- yyy -->zzz</div>')
->childNodes;
my $comment = $elems[1];
is $comment->parentNode->tagName, 'DIV', 'Comment has parentNode';
Notice that it's not saving the result of the fromHTML call; only the
child nodes. Since children now have only a weak reference to their
parent, the root node is deleted immediately, and $comment->parentNode
is undef.
This can be fixed by saving a reference to the root node:
my @elems = (my $r = pQuery::DOM
->fromHTML('<div>xxx<!-- yyy -->zzz</div>'))
->childNodes;
As a quick fix for broken code (and to determine whether it's the weak
references that are causing the breakage), you can say:
use HTML::Element -noweak;
This (globally) disables HTML-Tree's use of weak references. But this
is just a temporary measure. You need to fix your code, because this
feature will be going away eventually.
--
Chris Madsen [email protected]
-------------------- http://www.cjmweb.net --------------------