my (@localDeclaredVars) = ($strInput =~ m/\bvar\s+([^;]+)/g); foreach my $localDeclaredVar (@localDeclaredVars) { if ($localDeclaredVar =~ m/,/) { # We have multiple variables declared in one line. @localDeclaredSubVars = $localDeclaredVar =~ m{ ( # Grab the variable name \w+ ) \s* (?: # Suck up any possible values of that variable = \s* (?: # A variable with parentheses and possible comma (?: \( (?: \\. [^\)\\]* )* \) ) | (?: # A straight variable or value [^,]+ ) )* )? ,? }gx; print "\n$localDeclaredVar\n"; foreach my $localDeclaredSubVar (@localDeclaredSubVars) { if ($localDeclaredSubVar =~ m/=/) { ($localDeclaredSubVar) = ($localDeclaredSubVar =~ m/\s*([^= ]+)\s*=/); } print " $localDeclaredSubVar\n"; push (@localVariables, $localDeclaredSubVar) if ($localDeclaredSubVar); } } else { # We have a single variable declaration. print "\n$localDeclaredVar\n"; if ($localDeclaredVar =~ m/=/) { ($localDeclaredVar) = ($localDeclaredVar =~ m/\s*([^= ]+)\s*=/); } print " $localDeclaredVar\n"; push (@localVariables, $localDeclaredVar) if ($localDeclaredVar); } }