You should probably make your host key's value a hash instead of an array, since hashes are good for lookups. But, I think the larger issue is the big hash. It appears to have duplicate keys. Try something more like this:
our %services = {
'1' => {
name => '...',
host => { hosta => 1, hostb => 1 },
}
'2' => {...}
};
Then when someone asks for service 1, you can say:
my $service = $services{ $user_request };
if ( not $service->{ host }{ $current_host } ) {
# error here
}
else {
# real work here
}
Or, you could reverse the roles of the menu item number and the service name if you wanted to make people remember the names ala the service command on linux. Speaking of which, is that an option? If so, it will be better at this sort of thing than home grown code. You could just put a little text menu front on it. But, maybe you don't have that option.
Phil