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