On Thu, Oct 16, 2008 at 05:44, Sandy lone <[EMAIL PROTECTED]> wrote:
> I need to translate an IP addr with its mask from this form:
>
> 192.168.1.30/255.255.255.0
>
> to this one:
>
> 192.168.1.30/24
>
>
> which module/method is right to use? Thanks.
A quick search of CPAN* turned up NetAddr::IP which seems to do what
you want. I would probably say something like
#!/usr/bin/perl
use strict;
use warnings;
use List::Util qw<sum>;
print netmask_to_cidr("192.168.1.30/255.255.255.0"), "\n";
sub netmask_to_cidr {
my ($ip_and_netmask) = shift;
#FIXME: do better checking of arguments
die "bad argument: $ip_and_netmask"
unless my ($ip, $netmask) = $ip_and_netmask =~ m{(.*)/(.*)};
#FIXME: this may be wrong, but I think we just need to count the number
#of bits that are on
my $cidr = sum map {(sprintf "%b", $_) =~ tr/1//} split /\./, $netmask;
return "$ip/$cidr";
}
* http://search.cpan.org
** http://search.cpan.org/dist/NetAddr-IP/IP.pm
--
Chas. Owens
wonkden.net
The most important skill a programmer can have is the ability to read.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/