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};