my @bonds = qw(bond2 bond3 bond4 bond6 bond7 bond8); my %ipaddress_namei; while (my @bonds_with_invalid_ip = grep { not exists $ipaddress_namei{$_}, $_ }, @bonds) { for my $bond (@bonds_with_invalid_ip) { printf "Enter IP address of %s\n", ucfirst($bond); my $bond_in = ; chomp($bond_in); if (is_ipv4($bond_in)) { $ipaddress_namei{$bond} = {$bond_in}; } } } #### my @bonds = qw(bond2 bond3 bond4 bond6 bond7 bond8); my %ipaddress_namei; # Use @bonds as a FIFO while (my $bond = shift @bonds) { printf "Enter IP address of %s\n", ucfirst($bond); my $bond_in = ; chomp($bond_in); if (is_ipv4($bond_in)) { $ipaddress_namei{$bond} = {$bond_in}; } else { # try again next time around push @bonds, $bond; } }