#!/usr/bin/perl #<>= use warnings; use strict; print "Welcome to the math program\n"; my $quit = 0; until ($quit) { my @numbers = gen_numbers(); my ($question, $solution) = gen_question(@numbers); my $response = get_valid_response($question); #<>= if ($response eq 'q') { $quit = 1; # set loop control to indicate the user has quit } elsif ($response = $solution) { print "Correct\n"; } else { print "Incorrect: $question $solution\n"; } } print "exiting the math program\n"; ###### Subroutines # gen_numbers: generate equation numbers (and operator) # parameters: none # returns: first_number, second_number, operator sub gen_numbers { my $first_number = int(rand(10)); # random integer from 0 to 9 my $second_number = int(rand(10)); # random integer from 0 to 9 # choose random operator code: 0 is division, 1 is multiplication my $operator = int(rand(2)); # random integer from 0 to 1 return ($first_number, $second_number, $operator); } # gen_question: <>= # parameters: # first_number (integer 0-9) # second_number (integer 0-9) # operator (0 => division, 1 => multiplication) # returns: question, solution sub gen_question { my ($first_number, $second_number, $operator) = @_; my $solution; my $question; if ($operator == 1) { #<>= $solution = $first_number * $second_number; $question = "$first_number x $second_number = ?"; } else { #<>= $solution = $first_number * $second_number; # swap values of solution and first_number ($solution, $first_number) = ($first_number, $solution); $question = "$first_number / $second_number = ?"; } return ($question, $solution); } # get_valid_response: <>= # parameters: question (string) # returns: response sub get_valid_response { my $question = $_[0]; my $response; my $is_valid = 0; until ($is_valid) { print "$question\n"; $response = ; chomp($response); #<>= if ($response eq 'q' or $response =~ m/^\d+$/) { $is_valid = 1; } else { print "Invalid input: enter an integer or 'q' to quit\n"; } } return $response; }