#!/usr/bin/perl use HTML::PullParser; use HTML::Entities; my $doc = <<'EOF'; my %options = (); abc   abc <% abc ( ' abc   abc %\>', $abc ); %> EOF $doc =~ s/<%(.*?)%>/ my $content = $1; HTML::Entities::encode_entities ( $content ); qq'[[asp_pp"$content"asp_pp]]' /gsex; foreach ( qw{ text default } ) { $options{$_} = "event, text, is_cdata"; } my $p = HTML::PullParser->new ( doc => $doc, %options ); my $output = ""; while ( my $token = $p->get_token() ) { my $text = $token->[1]; $text =~ s/(\[\[asp_pp"[^"]+"asp_pp\]\])|(abc)/$1?$1:"$2<\/b>"/gse if $token->[0] eq 'text' and ! $token->[2]; $output .= $text; } $output =~ s/\[\[asp_pp"([^"]+)"asp_pp\]\]/ "<%" . HTML::Entities::decode_entities ( $1 ) . "%>"/gse; print $output; #### abc   abc <% abc ( ' abc   abc %>', $abc ); %>