Не изобретайте велосипед.
use strict;
use warnings;
use Regexp::Common qw/net/;
# see http://search.cpan.org/dist/Regexp-Common/lib/Regexp/Common/net.pm
my $Address = '...';
# adapted from the module's synopsis
for ($Address) {
/$RE{net}{IPv4}/ and print "Dotted decimal IP address";
/$RE{net}{IPv4}{hex}/ and print "Dotted hexadecimal IP address";
/$RE{net}{IPv4}{oct}{-sep => ':'}/ and
print "Colon separated octal IP address";
/$RE{net}{IPv4}{bin}/ and print "Dotted binary IP address";
/$RE{net}{MAC}/ and print "MAC address";
/$RE{net}{MAC}{oct}{-sep => " "}/ and
print "Space separated octal MAC address";
}
Используйте тот, который вам нужен.
Если вы не можете установить модуль, просто проскочите через код модуля и получите правильное регулярное выражение, в зависимости от того, какой IP-адрес вы хотите сопоставить.
Или просто используйте что-то подобное выше, и вызовите тот же элемент, если адрес соответствует любому из обозначений, которые вы хотите, или что-то в этом направлении.
Используя его из сценария оболочки будет вдоль линий:
return perl -e'use Regexp::Common qw/net/;$ip=shift;if ($ip =~ /$RE{net}{IPv4}/){exit 0}else{exit 1}' "$Address";
выше будет заменить полный «случай» блок.
Опять же, если вам нужно встроить регулярное выражение в вызов скрипта perl, вы можете сделать это, читая код модуля.
не хорошо мне нужен этот синтаксис как часть моего сценария оболочки – lidia
читать бит «Если вы не можете установить модуль ... ": просто прочитайте код модуля и используйте правильное регулярное выражение для того, что вы хотите. Если вы хотите, я обновлю его с регулярным выражением для IPv4 – mfontani