constant $MIN = 1;
constant $MAX = 100;
# Get a random answer between $MIN and $MAX.
my $answer = ($MIN..$MAX).pick;
# Initial program state.
my $guess = -1;
my $upper = $MAX;
my $lower = $MIN;
loop {
# Get the guess from user.
loop {
my $input = prompt("Guess a number between {$lower} and {$upper}: ");
# Check input is a valid number.
unless $input ~~ m/ \d+ / {
$*ERR.say: "Invalid number";
redo;
}
# Check
unless $lower <= $input and $input <= $upper {
$*ERR.say: "Invalid range";
redo;
}
# Update the guess.
$guess = $input;
last;
}
# Check whether the guess is right.
if $guess == $answer {
say "You got it";
last;
} elsif $guess > $answer {
say "Too large";
$upper = $guess;
} else {
say "Too small";
$lower = $guess;
}
}
Comments