use Parse::RecDescent; $grammar = q { varStatement: 'var' statements endofvar statements: comma_values: statement: var_name (operator assignvalue)(?) assignvalue: equality | escapedRegex | escapedQuote | array_declaration | numeric_value | array_value | object_value | var_name array_declaration: 'new Array(' comma_values ')' array_value: array_name '[' integer ']' equality: '(' assignvalue equality_operator assignvalue ')' var_name: /\w+/ { $return = "$item[1]" } array_name: /\w+/ object_value: /[A-Za-z0-9_.]+/ numeric_value: real_number | integer integer: /\d+/ real_number: /\d+\.?\d*/ escapedRegex: '__REGEX__' escapedQuote: '__QUOTE__' operator: '=' equality_operator: '===' | '==' | '!=' endofvar: ';' comma: ',' }; print "\n\n"; $parser = new Parse::RecDescent ($grammar) or die "*** Bad grammar!\n"; foreach my $localDeclaredVar (@localDeclaredVars) { print "$localDeclaredVar\n"; my $test = $parser->varStatement($localDeclaredVar) or print "*** Bad text!!!\n"; print "==>$test\n"; }