in reply to IP address - long to dottedquad to long

Those are needlessly complicated. You're replicating functions inet_aton and inet_ntoa of the core module Socket:

use Socket qw( inet_aton inet_ntoa ); sub DottedQuadToLong { # Accepts triton.littlefish.ca # Accepts 24.72.30.83 # Accepts 407379539 # etc return unpack('N', inet_aton(shift)); } sub LongToDottedQuad { return inet_ntoa(pack('N', shift)); }

Here are alternatives that only use pack and unpack (but only accept addresses of the form a.b.c.d):

sub DottedQuadToLong { return unpack('N', (pack 'C4', split(/\./, shift))); } sub LongToDottedQuad { return join('.', unpack('C4', pack('N', shift))); }

Replies are listed 'Best First'.
Re^2: IP address - long to dottedquad to long
by ruzam (Curate) on Apr 28, 2006 at 20:23 UTC
    Wow! Excellent (and nearly instant) advice! Thanks both of you.

    My use of regex was based on a very narrow definition of dotted quad I needed at the time. I'm totally in favor of using inet_aton and inet_ntoa instead!