#!/usr/bin/perl use v5.32; # for sample from List::Util, also includes 'use strict' use warnings; # always a good idea use List::Util qw/ any sample shuffle /; # Rather than write our own utilities, use the built in ones my @correct = qw/ Right Correct Fine Good! Check /; # lowercase all words here my @synonyms = ( [ qw/ first start beginning onset initial / ], [ qw/ similar alike same like resembling / ], [ qw/ model pattern prototype standard criterion /], [ qw/ small insignificant little tiny minute /], [ qw/ stop halt stay arrest check standstill /], [ qw/ house dwelling residense domicile lodging habitation /], [ qw/ pit hole hollow well gulf chasm abyss /], [ qw/ push shove thrust prod poke butt press /], [ qw/ red rouge scarlet crimson flame ruby /], [ qw/ pain suffering hurt misery distress ache discomfort /], ); print <<__END_OF_INTRO; Synonym Creative Computing Morristown, New Jersey A synonym of a word means another word in the English language which has the same or very nearly the same meaning I choose a word -- you type a synonym. If you can't think of a synonym, type the word 'HELP' and I will tell you a synonym. __END_OF_INTRO foreach my $drill ( shuffle @synonyms ) { my $word = $drill->[0]; my @answers = $drill->@[1 .. $drill->$#*]; print " What is a synonym of $word? "; my $response = <>; chomp $response; $response = lc $response; if ( $response eq 'help' ) { say "**** A synonym of $word is ", sample(1, @answers); redo; } elsif ( not any { $response eq $_ } @answers ) { say ' Try again.'; redo; } else { say sample 1, @correct; } } say "\nSynonym drill completed.";