Witam mam problem z zapetleniem czesci kodu.
Mianowicie pisze skrypt startowy do linuxa w ktorym mamy do wyboru kilka opcji dotyczacych nadawania adresu IP badz z serwera DHCP lub wpisanego recznie.

Problem polega na tym ze jezeli ades IP bedzie wartoscia nieprawdziwa (za duzo cyfr, oktety powyzej 255 itp) program ma sie zatrzymac i powrocic do wpisania ponownie zle wpisanego adresu ip.
Ponizej zamieszczam czesc kodu ktora odpowiada za reczne wpisanie adresu oraz procedure sprawdzajaca prawdziwosc IP.

# Start manual conf dla eth0



if ($wybor eq 4)
{
while(1)
{
# Pobierz adres IP dla interfejsu
print "Podaj adres IP: ";
$adres_ip = <STDIN>;
chomp $adres_ip;
if ($adres_ip) {

check_ip_addr();
}
# Pobranie Maski Podsieci
print "Podaj maske podsieci: ";
my $maska_podsieci = <STDIN>;
chomp $maska_podsieci;

check_ip_addr();

# podaj adres Bramy
print "Podaj adres bramy: ";
my $brama = <STDIN>;
chomp $brama;

check_ip_addr();

# Pobierz adres serwera DNS
print "Podaj adres primary DNS: ";
my $dns_1 = <STDIN>;
check_ip_addr();
print "Podaj adres secondary DNS: ";
my $dns_2 = <STDIN>;
check_ip_addr();

my $konfig = `/sbin/ifconfig eth0 $adres_ip $maska_podsieci`;
my $bramka = `/sbin/route add default gw $brama`;

# Dopisz adresy DNS do /etc/resolv.conf

my $plik = "/etc/resolv.conf";
open FILE, ">$plik" or die "Otwarcie pliku '$plik' do zapisu nie powiodlo sie: $! ";
print FILE "nameserver $dns_1";
print FILE "nameserver $dns_2";
close FILE;

}
}
# Wyjscie bez przypisanego ip

if(($wybor eq "x") || ($wybor eq "X")) {
exit(0);
}
else {
print("Illegal option! Try again!\n\n");
}



}

sub check_ip_addr
{

if ($adres_ip =~ /^(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)$/)
{
my @table = ($1, $2, $3, $4);
foreach $octect (@table)
{
if ($octect le 255)
{
last;
} else
{
print ("You write wrong IP ADDRESS\n");

}
}

}

else
{
print ("You write wrong IP ADDRESS\n");
}

}

pozdrawiam