Kevin Pfeiffer wrote:
>
> Here's my less clever (and slower?) method...
>
> my @start_addr = split /\./, $start_address;
> my @finish_addr = split /\./, $finish_address;
> my @result = @start_addr;
>
> print join ".", @result, "\n"; # first number
>
> while (1) {
> $result[3]++; # increment "ones" by 1
> my $value = join ".", @result; # output new number
> print $value, "\n" ;
> last if $value eq $finish_address;
>
> if ($result[3] == 254) { # need to do carryover
> my $x;
> for ($x = 3; $x > -1; $x--) {
> if ($result[$x] == 254) {
> $result[$x -1]++; # carry over to next column
> $result[$x] = 0; # reset column
> }
> }
> }
> }
>
> print "\n";
>
> __END__
> (Comments, suggestions always welcome.)
A small addition to my original post gives the results you want:
use Socket;
my $netmask = 0xFFFFFF00; # 255.255.255.0
my $start_address = unpack 'N', inet_aton( '10.11.1.14' );
my $finish_address = unpack 'N', inet_aton( '12.13.2.3' );
for my $address ( $start_address .. $finish_address ) {
next if ( $address & $netmask ) == $address or ( $address & ~$netmask ) ==
~$netmask;
print inet_ntoa( pack 'N', $address );
}
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]