2010-04-13 11 views

Odpowiedz

4

Spróbuj Net::IP moduł

Jeśli drugie wzory nie obsługuje, może zaistnieć potrzeba pewnych zmian ips zaliczek jak

238.51.209.180-199 

do

238.51.209.180 - 238.51.209.199 

przy użyciu niektórych regex, dla przykład:

$range =~ s/^((?:\d+\.){3})(\d+)-(\d+)$/$1$2 - $1$3/gm; 

Pełny skrypt:

use warnings; 
use strict; 
use Net::IP; 
my $range = "238.51.209.180-199"; 
$range =~ s/^((?:\d+\.){3})(\d+)-(\d+)$/$1$2 - $1$3/; 
my $ip = new Net::IP ($range) || die; 
print $ip->ip(), "\n"; 
print $ip->last_ip(), "\n"; 
+0

'my $ ip = new Net :: IP (" 238.51.209.180-199 ") || die; 'output is' Died in ./andrey-zentavr.pl line 5.' –

+0

@Kinopiko - dodano obejście. – YOU

+0

Edytowałem Twoje wyrażenie regularne i teraz działa. –

2

można dopasować adresy IP przy użyciu pakietu Regexp::Common::net i manipulować nimi (i dostać Maski sieciowe itp) z dowolnej liczby modułów w CPAN, w tym Network::IPv4Addr, NetAddr::IP i Net::CIDR.

+0

Zamierzałem użyć smt w ten sposób: # Sprawdź, jaki mamy format zasięgu? \t if ($ ipline = ~/^ ((?: \ D + \.) {3}) (\ d +) - (\ d +) $ /) { \t \t $ ipline = ~ s/^ ((? \ d + \.) {3}) (\ d +) - (\ d +) $/1 $ 2 $ - 1 $ 3 $ /; \t} –

Powiązane problemy