# exercise 3.1 by erikt(at)science.uva.nl SOFTWARE # read the first number print "Please enter a number in characters: "; $input = ; if (not defined $input) { $input = ""; } chomp($input); # process numbers while we have input while ($input ne "") { # variant one: numbers with two parts separated by a hyphen if ($input =~ /^(.*)-(.*)$/) { # store the two parts $decade = $1; $single = $2; # initialize the number at zero so we can add parts to it $number = 0; # there are only eight values to consider: 20,30,40,50,60,70,80,90 if ($decade eq "twenty") { $number += 20; } elsif ($decade eq "thirty") { $number += 30; } elsif ($decade eq "forty") { $number += 40; } elsif ($decade eq "fifty") { $number += 50; } elsif ($decade eq "sixty") { $number += 60; } elsif ($decade eq "seventy") { $number += 70; } elsif ($decade eq "eighty") { $number += 80; } elsif ($decade eq "ninety") { $number += 90; } # unknown word! make sure the number will be negative else { $number -= 1000; } # only nine values to consider: 1,2,3,4,5,6,7,8,9 if ($single eq "one") { $number += 1; } elsif ($single eq "two") { $number += 2; } elsif ($single eq "three") { $number += 3; } elsif ($single eq "four") { $number += 4; } elsif ($single eq "five") { $number += 5; } elsif ($single eq "six") { $number += 6; } elsif ($single eq "seven") { $number += 7; } elsif ($single eq "eight") { $number += 8; } elsif ($single eq "nine") { $number += 9; } # unknown word! make sure the number will be negative else { $number -= 1000; } } else { # variant two: numbers consisting of a single part (no hyphen) # store the two parts $single = $input; # initialize the number at zero so we can add part to it $number = 0; # 28 values to consider: 0..20,30,40,50,60,70,80,90 if ($single eq "zero") { $number += 0; } elsif ($single eq "one") { $number += 1; } elsif ($single eq "two") { $number += 2; } elsif ($single eq "three") { $number += 3; } elsif ($single eq "four") { $number += 4; } elsif ($single eq "five") { $number += 5; } elsif ($single eq "six") { $number += 6; } elsif ($single eq "seven") { $number += 7; } elsif ($single eq "eight") { $number += 8; } elsif ($single eq "nine") { $number += 9; } elsif ($single eq "ten") { $number += 10; } elsif ($single eq "eleven") { $number += 11; } elsif ($single eq "twelve") { $number += 12; } elsif ($single eq "thirteen") { $number += 13; } elsif ($single eq "fourteen") { $number += 14; } elsif ($single eq "fifteen") { $number += 15; } elsif ($single eq "sixteen") { $number += 16; } elsif ($single eq "seventeen") { $number += 17; } elsif ($single eq "eighteen") { $number += 18; } elsif ($single eq "nineteen") { $number += 19; } elsif ($single eq "twenty") { $number += 20; } elsif ($single eq "thirty") { $number += 30; } elsif ($single eq "forty") { $number += 40; } elsif ($single eq "fifty") { $number += 50; } elsif ($single eq "sixty") { $number += 60; } elsif ($single eq "seventy") { $number += 70; } elsif ($single eq "eighty") { $number += 80; } elsif ($single eq "ninety") { $number += 90; } # unknown word! make sure the number will be negative else { $number -= 1000; } } # if $number < 0 then some error occurred if ($number < 0) { print "You have entered an unknown number: $input\n"; } else { print "You have entered: $number\n"; } # get the next number print "Please enter a number in characters: "; $input = ; if (not defined $input) { $input = ""; } chomp($input); } # done print "Thanks for using this program!\n"; TEST erikt@stuwww:~$ perl -w 31.pl Please enter a number in characters: one You have entered: 1 Please enter a number in characters: twenty-three You have entered: 23 Please enter a number in characters: drie miljoen You have entered an unknown number: drie miljoen Please enter a number in characters: seventy-seven You have entered: 77 Please enter a number in characters: Thanks for using this program!