#!/usr/bin/perl -- use strict; use warnings; my $asp = <<'__HTML__'; abc   abc <% abc ( ' abc   abc %>', $abc ); %> __HTML__ use HTML::Tree; my $t = 'HTML::TreeBuilder'->new; $t->ignore_unknown(0); $t->parse( $asp ); $t->dump; print "\n\n"; $asp =~ s{ <% ((?: '[^']+' | "[^"]+' | \$?[\w\s\(\);,]+ | [^%]+ )+) %> }{ my $content = $1; HTML::Entities::encode_entities( $content ); qq'' }gsex; $t->parse( $asp ); $t->dump; print "\n\n"; #~ and reverse it $asp =~ s// my $content = $1; HTML::Entities::decode_entities( $content ); $content; /gsei; print "$asp\n\n"; __END__ @0 (IMPLICIT) @0.0 (IMPLICIT) @0.1 (IMPLICIT) @0.1.0 " abc á abc <% abc ( '" @0.1.2 " abc á abc " @0.1.4 " %>', $abc ); %>" @0 (IMPLICIT) @0.0 (IMPLICIT) @0.1 (IMPLICIT) @0.1.0 " abc á abc <% abc ( '" @0.1.2 " abc á abc " @0.1.4 " %>', $abc ); %> " @0.1.4.1 " abc á abc " @0.1.4.3 abc   abc abc ( ' abc   abc %>', $abc );