Your 'name' section is only '\w+' when the name in your data
contains more than just '\w' characters. The regex contains '\W\W*' which is equivalent to '\W+', and if you're looking for whitespace between fields you're better off using '\s+' anyway. In fact, you'd do well to use better matching parameters on all of the fields, you're capturing all your fields with '\w+', when, e.g., the phone number contains more than just '\w' characters ('-' for instance),
and won't contain any alphabetic '\w' characters.
See perldoc perlre for explanations of what '\w' and '\s' are and hints
on what you ought to be using instead.