IPv4 addresses are 32-bit; they are often handled as integer values (uint32_t).
Perl provides pack and unpack for working with rigid-format data. For example:
my $ip = "123.223.11.22";
my @ip = split /\./, $ip;
my $p = pack "C4", @ip; # packed as 4-octet thing
my $x = unpack "N", $p; # ip as unsigned int
# work on integer values, e.g. masking is just ($x & $y)
$p = pack "N", $x; # re-pack the value
my $bitvec = unpack "B32", $p;
my $quad = join q(.), unpack "C4", $p;
print "as bitvector: $bitvec\n";
print "as dotted quad: $quad\n";