http://www.perlmonks.org?node_id=1076318


in reply to Scripting Failover Scenario

First, it seems like this is a situation for a hash of arrays (see perllol and HASHES OF ARRAYS). So your data might look like:
my %parent = ( europe => [qw| london moscow |], asia => [qw| tokyo seoul |], africa => [qw| cario algiers |], );
though a hash of hashes might make sense depending on how you access the data.

Second, do you care about determinism/repeatability in where a city rolls over to? You could just cycle over keys, and push the cities onto the next taker:

sub fallover { my ($hash, $failure) = @_; my $list = delete($hash->{$failure}) or return; my @targets = keys %$hash; my $i = 0; while (@$list) { my $city = shift @$list; push @{$hash->{$targets[$i++]}}, $city; $i %= @targets; } }

#11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.