# # std_handler() # ------------- # Try to guess the correct formatting for the incoming number # sub std_handler { my $id = shift; return undef unless $id; # # if the number is exactly 12 digits long and starts with a '44' then # it's an internationally-specified UK number, so replace the '44' with # a '0') # $id =~ s/^44/0/ if length($id) == 12; # # if the number is exactly 11 digits and starts with a '0' then it's a # UK number # if (length($id) > 10 && $id =~ /^[1-9]/) { # # if the number is greater than 10 digits and starts with a # non-zero digit then prefix with '00' # $id = "00$id"; } elsif (length($id) == 10 && $id =~ /^[2-9]/) { # # this is just a wild assumption, but if the number is exactly 10 # digits and starts with a number in the range 2-9 then assume it # to be a North American number and prefix with '001'. # $id = "001$id" } # # add the PSTN prefix and return the Caller*ID # $id = "$prefixes{pstn}$id" if $id; return $id; }