use strict; use Parse::RecDescent; my $parser = Parse::RecDescent->new(q( start: part(s) part : tag { print ">>> $item[1] <<<\n" } | raw tag : stag raw etag { $return = "$item{stag} $item{raw} $item{etag}" } raw : m{([^<]+)} stag : m{} etag : m{} )); $parser->start(); __DATA__ Some content some more content