in reply to phone number parsing refuses to work

Here ya go:
push(@list, "($1) $2-$3") while /\(?(\d{3})?\)?\s*[-.]*\s*(\d{3})\ +s*[-.]*\s*(\d{4})/g;
I pasted your big block of text into it and got this out:
() 209-4044 (440) 248-2700 (440) 975-0537 () 213-0518 (330) 836-9300 (330) 864-5741 (313) 884-6400 (313) 884-0600 (313) 590-9253
Good enough?

Update: I should explain a little... The regexp breaks down into, basically: optional parens around optional 3 digits, minimal separating junk, 3 digits, minimal separating junk 4 digits. It may look ugly, but it's actually quite straight-forward, although you could obviously tinker with it a little if you wanted. Oh... and the while ... /g means to count it each time it appears on a line (so if multiple phone #'s are on one line, it'll count each one).

For example, I'll turn the "separating garbage" chunk into just [-.\s]*, which is more permissive as well as shorter to write out. Still gets the same results on your sample data.

[me@host]$ perl -ne 'push(@list, "($1) $2-$3") while /\(?(\d{3})?\)?[- +.\s]*(\d{3})[-.\s]*(\d{4})/g; END{print join("\n",@list)."\n";}' data +.txt () 209-4044 (440) 248-2700 (440) 975-0537 () 213-0518 (330) 836-9300 (330) 864-5741 (313) 884-6400 (313) 884-0600 (313) 590-9253 [me@host]$
------------ :Wq Not an editor command: Wq