12.34.56.78/16|City A
90.12.34.56/19|City B
etc
####
# Build an array. Each element of the array is a reference
# to a two-element array consisting of a Net::Netmask object
# and a city name
my @blocks;
while ()
{
my ($block, $city) = split /\|/;
push @blocks, [Net::Netmask->new($block), $city];
}
####
sub find_city
{
my $address = shift;
foreach my $arrayref (@blocks)
{
# Extra variables assigned for clarity
my $netblock = $arrayref->[0];
my $city = $arrayref->[1];
if ($netblock->match($address))
{
return $city;
}
}
}
####
$blocks{10}{0} = [
[Net::Netmask->new("10.0.0.0/24"), "City A"],
[Net::Netmask->new("10.0.1.0/24"), "City B"]
];
$blocks{10}{1} = [
[Net::Netmask->new("10.1.0.0/24"), "City C"],
[Net::Netmask->new("10.1.1.0/24"), "City D"]
];