Yo te recomiendo que le eches un vistazo al módulo
Regex::Common que contiene expresiones regulares ya preparadas para las cosas más comunes.
La expresión regular correcta para una IP, si quieres ser estricto y que no se te cuelen cosas que no son IP válidas, no es tan sencilla como pudiese parecer a primera vista.
En este caso, la que genera Regexp::Common es...
Using perl Syntax Highlighting
/^((25
[0
-5
]|2
[0
-4
][0
-9
]|[0
-1
]?[0
-9
]{1
,2
})[.](25
[0
-5
]|2
[0
-4
][0
-9
]|[0
-1
]?[0
-9
]{1
,2
})[.](25
[0
-5
]|2
[0
-4
][0
-9
]|[0
-1
]?[0
-9
]{1
,2
})[.](25
[0
-5
]|2
[0
-4
][0
-9
]|[0-1]?[0-9]{1,2}))$/Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Que además captura la IP en
$1 y los octetos que la forman en
$2,
$3,
$4 y
$5 respectivamente.
O sea, para lo que tu quieres hacer...
Using perl Syntax Highlighting
use Regexp
::Common qw/net/;
my $ip = "192.168.50.30";
if ($ip =~ /^RE{net}{IPv4}{-keep}$/o) {
print "$2.$3.$4\n";
}Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4