#!/usr/bin/perl -w use strict; use Socket; my %HoA; while () { chomp; my ($swit, $server, $ip_range) = split; my ($start_ip, $end_ip) = map unpack("N", inet_aton($_)), split /-/, $ip_range; my $name = "${swit}_$server"; for ($start_ip .. $end_ip) { push @{ $HoA{$name} }, inet_ntoa(pack "N", $_); } } use Data::Dumper; print Dumper \%HoA; __DATA__ server 1 10.1.1.1-10.1.1.5 server 2 192.168.1.1-192.168.1.5 server 1 192.168.1.1-192.168.1.2