use strict; my @p = ( '(555) 324-1233', '555 - 324-1234', '555 - 324-1234x204', '1 555 342 1234', ); my $re = qr/(?:1\s*)?\(?(\d{3})\)?\s*-?\s*(\d{3})[\s-]?(\d{4})(?:x(\d+))?/; for my $p (@p) { if ($p =~ $re) { printf "phone number = %s\n" . "area code = %s\n" . "exchange = %s\n" . "number = %s\n" . "extention = %s\n", $p, $1, $2, $3, $4 ? $4 : 'none'; } else { print "[$p] doesn't look like a phone number to me\n"; } }