in reply to Memory Leak? i'm clueless.
HTML-Tree doesn't use weak refs, so you must explicitly destroy the trees and elements it creates. (It's right there in the Synopsis and the detailed Description of the Synopsis.) Change
my $html_tree = parse_html($line); $html_tree->eof(); # This was missing too. my $plain_text = HTML::FormatText->new()->format($html_tree); $html_tree->delete(); # This was missing.
or
use Object::Destroyer; my $html_tree = parse_html($line); $html_tree = Object::Destroyer->new($html_tree, 'delete'); $html_tree->eof(); my $plain_text = HTML::FormatText->new->format($html_tree);
Since we're changing it anyway, might as well change HTML::Parse to HTML::TreeBuilder, since the former is a deprecated indirection layer for the latter. Also, there's no need to repeatedly create HTML::FormatText objects. You can create one and reuse it.
use HMTL::TreeBuilder; my $formatter = HTML::FormatText->new(); my $html_tree = HTML::TreeBuilder->new_from_content($line); my $plain_text = $formatter->format($html_tree); $html_tree->delete();
or
use HTML::TreeBuilder; use Object::Destroyer; ... my $formatter = HTML::FormatText->new(); ... my $plain_text = $formatter->format( Object::Destroyer->new( HTML::TreeBuilder->new_from_content($line), 'delete' ) );
Reference:
Updated: Added missing call to eof. Please read the documentation of functions before using them. The requirements to call eof and delete are clearly documented.
|
|---|