while (1) { my %options = discover_my_options(); next unless $options{ma} && $options{sy}; if ($options{a1}) { do_a1(); next; } if ($options{tr}) { do_tr(); next; } if ($options{ge}) { do_ge(); next; } } #### my %dispatch_table = ( a1 => \&do_a1, tr => \&do_ge, ge => \&do_tr, ); while (1) { my ($skip_iteration, $value) = discover_my_options(); next if $skip_iteration; my $function = $dispatch_table{$value} || next; $function->(); }