use Socket qw( inet_aton inet_ntoa ); while () { my ($swit,$server,$ip_range) = split; $server = "${swit}_$server"; my ($start, $end) = split /-/, $ip_range; my $start_n = unpack('N', inet_aton($start)); my $end_n = unpack('N', inet_aton($end)); for my $ip_n ($start_n..$end_n) { push @{ $servers{$server} }, inet_ntoa(pack('N', $ip_n)); } }