use strict; use CGI; my $q = new CGI; # Path of this script. my $path = $q->path_translated(); # Remove file name $path =~ s/(.*[\\\/]).*/\1/; my %digitWords; &popluateNumberWords; print $q->header(); my $number = $q->param("number"); if ($number) { if ($digitWords{$number}) { print "Words for phone number $number: $digitWords{$number}.\n\n"; } else { print "Sorry, there is no words for the phone number $number.\n\n"; } } else { print <<_FORM;
Input your phone number to get words

_FORM } exit 0; sub popluateNumberWords { my %letterValues = ('a' => '2', 'b' => '2', 'c' => '2', 'd' => '3', 'e' => '3', 'f' => '3', 'g' => '4', 'h' => '4', 'i' => '4', 'j' => '5', 'k' => '5', 'l' => '5', 'm' => '6', 'n' => '6', 'o' => '6', 'p' => '7', 'q' => '7', 'r' => '7', 's' => '7', 't' => '8', 'u' => '8', 'v' => '8', 'w' => '9', 'x' => '9', 'y' => '9', 'z' => '9', ); open (IN, "<${path}words"); while ($_ = ) { chomp; my $word = lc($_); # Skip if there is non-alphabets next if /[^a-z]/; # Get the corresponding digit string. my $digits = ""; foreach $_ (split //, $word) { $digits .= $letterValues{$_}; } $digitWords{$digits} = $digitWords{$digits} ? ( $digitWords{$digits} . ", " . $word) : $word; } close IN; } # popluateNumberWords