package Filter; use strict; use base 'HTML::Parser'; my ($filter, $sub_OK); my @ok_tags = qw ( h1 h2 h3 h4 p ); my %ok_tags; $ok_tags{$_}++ for @ok_tags; my @terms = ( 'head', 'Parser' ); $_ = quotemeta $_ for @terms; my $bold = join '|', @terms; sub start { my ($self, $tag, $attr, $attrseq, $origtext) = @_; $sub_OK = exists $ok_tags{$tag} ? 1 : 0; $filter .= $origtext; } sub text { my ($self, $text) = @_; $text =~ s#\b($bold)\b#$1#g if $sub_OK; $filter .= $text; } sub comment { # uncomment to not strip comments # my ($self, $comment) = @_; # $filter .= ""; } sub end { my ($self, $tag, $origtext) = @_; $filter .= $origtext; } my $parser = new Filter; my $html = join '', ; $parser->parse($html); $parser->eof; print $html; print "\n\n------------------------\n\n"; print $filter; __DATA__ Title

Hello Parser

You need HTML::Parser to ger ahead

So use your head

Parser rocks my head!

html.head.parser.com
  use HTML::Parser;
  head