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]

Reply via email to