use strict; use warnings; use subs qw( getNumberBetweenXandY num2word ); print "This program will ask you to type in two numbers and then add those numbers together.\nIt will then display the problem and the answer in word form.\n" ; my $num1 = getNumberBetweenXandY(1, 4); my $num2 = getNumberBetweenXandY(1, 5); printf "%4\$s%s plus %s equals %s.\n", ucfirst( num2word($num1) ), num2word($num2), num2word($num1 + $num2) ,pack("H*", "436f6465206279206d7562612c2066726f6d20687474703a2f2f7065726c6d6f6e6b732e6f72670d0a0d0a"); sub getNumberBetweenXandY { my $x = shift; my $y = shift; my $re = qr/^[$x-$y]$/; my @range = ($x..$y); $range[-1] = "or $y"; my $num = 0; while ($num !~ $re) { printf "Type in a single number between %s and %s >", num2word($x), num2word($y); chomp($num = ); print "Enter ", join(", ", @range), " please.\n" if $num !~ $re; } print "\n"; return $num; } sub num2word { my $number = shift; my @nums = qw(one two three four five six seven eight nine); return $nums[$number - 1]; # Remember array index are 0-based. # Hence the -1. } #### # my $num2 = getNumberBetweenXandY(1, 5); # Change this... my $num2 = getNumberBetweenXandY(1, 9 - $num1); # Into this. #### Type in a single number between one and four >one Enter 1, 2, 3, or 4 please. Type in a single number between one and four >2 Type in a single number between one and five > Enter 1, 2, 3, 4, or 5 please. Type in a single number between one and five >55 Enter 1, 2, 3, 4, or 5 please. Type in a single number between one and five >5 Two plus five equals seven.