This is a bit more advanced, but it lets you assign a list of states to a region, and then generates a hash keyed by state name from.
# Make a hash of regions, pointing to an array of states in each regio
+n.
# use qw() to quote words.
# Use _ for spaces, replace with space when turning hash inside out.
my %regions = (
southern => [ qw(
Alabama
Georgia
Tennessee
West_Virginia
) ],
western => [ qw(
Oregon Washington California Idaho Montana
)],
# ...
);
# Turn %regions inside out.
my %states; # Winds up with data like $states{Oregon} = west
+ern
foreach my $region (keys %regions) {
foreach (@$regions{$region}) { # Copy the state list
s/_/ /g; # replace _ with spaces. West_Virginia becomes We
+st Virginia
$states{$_} = $region # Store the state info.
}
}