Two points to critique. First, as is pointed out, $flag isn't a global variable once you discount the fact that you're using global code. Second, don't re-invent wheels. Download and install IO::Prompt, and then you can do something like this:
Note how I took your global code, pushed it into a sub, and then called it. Now your $flag isn't global. And now you have to pass the positions and locations refs into do_it, whereas before, it wasn't strictly required (due to the global nature of the variables).#!/usr/bin/perl use strict; use warnings; use IO::Prompt; sub main { my @positions = qw(sitting standing reclining); my @locations = ('at the museum', 'in the woods', 'on the beach', 'in the kitc +hen'); my @drinks = qw(scotch beer coke yoohoo); my $flag = 1; do { my $selection = prompt -p => 'The bartender asks what you want:', -onechar => 1, -menu => \@drinks; $flag = do_it( $selection, \@positions, \@locations ); } until $flag == 0; } sub do_it { my $drink = shift; my $positions_ref = shift; my $locations_ref = shift; my $rand_position = $positions_ref->[ rand( @$positions_ref ) ]; my $rand_location = $locations_ref->[ rand( @$locations_ref ) ]; print "You just drank a $drink $rand_location in the $rand_position +position.\n"; if ( $rand_location eq 'on the beach' ) { print "YEEEEEHAAAWWWWWWWWWW!\n"; return 0; } else { return 1; } } main;
I've already taken into account Anomolous Monk's observance on the usage of rand.
In reply to Re: Repeating an input prompt
by Tanktalus
in thread Repeating an input prompt
by zod
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |