http://www.perlmonks.org?node_id=158459


in reply to Check IP with support for CIDR

You can simplify the CIDR mask check:
return unpack ('N', pack ('C4', split /\./, $i) ^ pack ('C4', split /\ +./, $1)) >> 32 - $2;
   MeowChow                                   
               s aamecha.s a..a\u$&owag.print

Replies are listed 'Best First'.
Re: (MeowChow) Re: Check IP with support for CIDR
by xaphod (Monk) on Apr 12, 2002 at 08:06 UTC
    Could not get that to work. However, it did make me think and hence this:
    return ( (unpack('N',pack('C4',split(/\./,$i))) ^ unpack('N',pack('C4' +,split(/\./,$1)))) >> (32-$2) ) == 0;
    --
    TTFN, FNORD
      My bad, I forgot to negate the result:
      return not unpack ('N', pack ('C4', split /\./, $i) ^ pack ('C4', spli +t /\./, $1)) >> 32 - $2;
         MeowChow                                   
                     s aamecha.s a..a\u$&owag.print
        That works. So I guess you win this round of Golf.
        --
        TTFN, FNORD

        xaphod