How do I sort a list of IP addresses and compute a

2019-03-07 05:49发布

问题:

I have 2 options. One is that I have a array that has a list of IPs. For example

 my @Ip=();  # array that has the IPs below in it

Sample input:

108.0.0.30
108.0.0.30
108.0.0.30
192.168.1.1
192.168.1.2
10.0.0.1

I need a program that can sort such an array and tell which network class and subnet mask it is. For example, the output should be like

10.1.1.1/25                          10.1.1.1 is ip and 25 is submask

回答1:

Net::IP, Net::IP::Resolver, Net::IP::Match::Regexp and other Submodules from Net::IP are doing that fine for you. Just the part with sorting is difficult. But if you google it, you find some nice Methods. For example:

my @ips = qw(
    172.27.32.200
    172.19.32.100
    10.1.1.60
    192.20.30.133
);

@ips = map {s/\s+//g; $_} sort map {s/(\d+)/sprintf "%3s", $1/eg; $_} @ips;

print join "\n", @ips;

Found here