$parser = new Parse::RecDescent (q{ startrule : PlaceHolder Comment | PlaceHolder Comment : DD_Style DD_Style : m{(\s+?--.*$)} { print "Comment : \n\t", $item[1], "\n\n" } PlaceHolder : Xopen | Sprintf Sprintf : /.*=\s+?%s.*?/ { $item[1] =~ s{%s}{%%s}g; print "After : \n\t", $item[1], "\n\n" } Xopen : /.*=\s+?\?.*?/ { $item[1] =~ s{\?}{%s}g; print "After : \n\t", $item[1], "\n\n" } }) unless $parser;