my $text = "";
# HTML::Parser is broken on Javascript and styles (it leaves
# it in the text).
#
# my $parser = HTML::Parser->new(
# 'text_h' => [ sub { $text .= " " . shift; }, "dtext" ]
# );
my $parser = HTML::Parser->new(
start_h => [ sub{ $_[0]->{text}.=' '; $_[0]->{skip}++ if $_[1] eq 'script' or $_[1] eq 'style'; } , 'self,tag' ],
end_h => [ sub{ $_[0]->{skip}-- if $_[1] eq '/script' or $_[1] eq '/style'; } , 'self,tag' ],
text_h => [ sub{ $_[0]->{text}.=$_[1] unless $_[0]->{skip}}, 'self,dtext' ]
);
$parser->parse($html_in);
$text = $parser->{text};