# convert IP addresses to unsigned long integers
my $addr="192.168.10.2";
my @addrb=split("[.]",$addr);
my ( $addrval ) = unpack( "N", pack( "C4",@addrb ) );
my $mask="255.255.254.0";
my @maskb=split("[.]",$mask);
my ( $maskval ) = unpack( "N", pack( "C4",@maskb ) );
# calculate network address
my $netwval = ( $addrval & $maskval );
# convert network address to IP address
my @netwb=unpack( "C4", pack( "N",$netwval ) );
my $netw=join(".",@netwb);
# print
print( $netw );
####
# calculate broadcast address
my $brodval = ( $addrval & $maskval ) + ( ~ $maskval );
####
# convert IP addresses to unsigned long integers
my $addr="192.168.10.2";
my @addrb=split("[.]",$addr);
my ( $addrval ) = unpack( "N", pack( "C4",@addrb ) );
my $mask="255.255.254.0";
my @maskb=split("[.]",$mask);
my ( $maskval ) = unpack( "N", pack( "C4",@maskb ) );
# calculate network address
my $netwval = ( $addrval & $maskval );
# calculate broadcast address
my $brodval = ( $addrval & $maskval ) + ( ~ $maskval );
# convert network address to IP address
my @netwb=unpack( "C4", pack( "N",$netwval ) );
my $netw=join(".",@netwb);
# convert broadcast address to IP address
my @brodb=unpack( "C4", pack( "N",$brodval ) );
my $brod=join(".",@brodb);
# print
print( "Network:$netw\n" );
print( "Broadcast:$brod\n" );
####
Network:192.168.10.0
Broadcast:192.168.11.255
####
sub addrtoint { return( unpack( "N", pack( "C4", split( /[.]/,$_[0] ) ) ) ) };
sub inttoaddr { return( join( ".", unpack( "C4", pack( "N", $_[0] ) ) ) ) };
my $netwval = addrtoint( '192.168.10.2' ) & addrtoint( '255.255.254.0' );
my $brodval = $netwval | ( ~addrtoint( '255.255.254.0' ) );
print( inttoaddr( $netwval ) . "\n" );
print( inttoaddr( $brodval ) . "\n" );