my $prd_grammar = q( startrule : PlaceHolder Comment | PlaceHolder PlaceHolder : Xopen | Sprintf Comment : DD_Style DD_Style : '--' /.*/ { print "Comment : \n\t" . $item[2] . "\n\n" } Sprintf : '=' /.*/ '%s' /.*/ { print "After : \n\t%%s" . $item[4] . "\n\n" } Xopen : /.*/ '?' /.*/ { print "After : \n\t%s", $item[3], "\n\n" } ); new Parse::RecDescent($prd_grammar);