2010-04-13 5 views

risposta

4

Prova Net::IP modulo

Se secondo schemi non supporta, potrebbe essere necessario alcune modifiche alle ips degli anticipi come

238.51.209.180-199 

a

238.51.209.180 - 238.51.209.199 

utilizzando alcuni regex, per esempio,

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

script completo:

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; l'output è 'Morto a ./andrey-zentavr.pl linea 5.' –

+0

@Kinopiko - aggiunta una soluzione alternativa. – YOU

+0

Ho modificato la tua espressione regolare e ora funziona. –

2

È possibile abbinare gli indirizzi IP utilizzando il pacchetto Regexp::Common::net, e manipolarle (e ottenere maschere di rete, ecc) con qualsiasi numero di moduli su CPAN, tra cui Network::IPv4Addr, NetAddr::IP e Net::CIDR.

+0

Io preferisco usare smt in questo modo: # Controllare, quale formato di intervallo abbiamo? \t if ($ ipline = ~/^ ((?: \ D + \.) {3}) (\ d +) - (\ d +) $ /) { \t \t $ ipline = ~ s/^ ((?: \ d + \.) {3}) (\ d +) - (\ d +) $/$ 1 $ 2 - $ 1 $ 3 /; \t} –