use strict; use warnings; my @ips = qw(1.2.3.4 1.2.3.5 1.2.3.7); my $first = shift @ips; my @identicals = split m/\./, $first; for (@ips){ my @b = split m/\./; for my $i (0 .. $#identicals){ if ($b[$i] ne $identicals[$i]){ splice @identicals, $i; last; } } } my @rest = (0) x (4 - @identicals); my $net = join('.', @identicals, @rest) . '/' . (8 * @identicals); print "$net\n";