TMTOWTDI, and I normally do this sort of thing:
use strict; use warnings;
use Socket qw{ inet_aton inet_ntoa };
sub ip_to_num { unpack( 'N', inet_aton( shift )); }
sub ip_to_str { inet_ntoa( pack( 'N', shift )); }
sub ip_plus { ip_to_str( ip_to_num( $_[0] ) + $_[1] ); }
sub ip_minus { ip_plus( $_[0], -$_[1] ); }
my $dotted_quad = '10.198.9.2';
print ip_plus( $dotted_quad, 290 ), "\n";
print ip_minus( $dotted_quad, 3 ), "\n";
__END__
10.198.10.36
10.198.8.255
In the OPs case, he only needs to add 1 and subtract 1. Again, all of this craps out on IPv6. I suspect that isn't a concern yet.
|