$data = q` HTML1 <% CODE1 %> HTML2 <% CODE2 %> HTML3 `; while( $data =~ /(.*?)<%(.*?)%>\n?/gs ) { print "<<< $1 >>>\n" ; print "<<< $2 >>>\n" ; } if ( $data =~ /.*<%.*?%>\n?(.*?)$/s ) { print "<<< $1 >>>\n" ; }