#File: phonedir.pl #Desc: phone directory lookup example #usage: phonedir.pl -file dir.txt use strict; use Getopt::Long; #variable declarations my ($filename, $result, $line, $first, $last, $middle, $phones); my (@phonearray, $onephone, @allrecords); #get arguments $filename = ""; $result = GetOptions("file=s", \$filename); #force mandatory arguments die("Must provide filename!\n") unless ($filename); #check if file is there die("File $filename does not exist or has zero length!\n") unless (-s $filename); print "Opening file...\n"; open (FILE, "$filename") or die("Cannot open file $filename"); while () { $line = $_; chomp($line); print "READ: $line\n"; #line format is as follows: #first:middle:last:phone,phone,... if ($line =~ m/^(\w+)\:(\w*)\:(\w+)\:([\d\-\(\)\,\.\s]+)$/) { #match only if line follows format ($first, $middle, $last, $phones) = ($1, $2, $3, $4); print <<"EOF_MSG"; ------------------------------------------------ Name: $first $middle $last (first, middle, last) Phones String: $phones EOF_MSG #record multiple phone numbers @phonearray = split /,/, $phones; foreach $onephone (@phonearray) { #alternative: if ($onephone =~m /^\d\d\d\-\d\d\d\-\d\d\d\d$/) if ($onephone =~m /^(1\-)?\d{3}\-\d{3}\-\d{4}$/ || $onephone =~m /^1?\d{10}$/ || $onephone =~m /^\(\d{3}\)\d{3}\-\d{4}$/) { print "VALID Phone number: $onephone\n"; } else { print "NOT VALID phone number: $onephone\n"; } } #end foreach print "\n"; #add record to array } #end if } #end while close (FILE);