in reply to Adding an Entire Class B IP Range to an Array
As the range is just another representation of a count from 0 .. (256*256)-1 I thought a pack/unpack solution may be fun.
And I know the OP said he wanted all the vals in an array but for some an itterator that returns the next val or undef when all used up may be more useful so here is one for fun.#!/usr/bin/perl use warnings; use strict; my $base="192.168."; my @adds; for (1..65535){ $_=sprintf("%04x",$_); /(..)(..)/; $_=join".", unpack "S*",(pack "H4", "00$1").(pack "H4", "00$2"); push @adds, $base.$_ unless /255|\.0$/; } # lets look at a few print $adds[rand $#adds], $/ for (1..100);
#!/usr/bin/perl use warnings; use strict; sub init_adds { my $base=shift; my $a=1; my $b=0; return sub { if ($a==255) { $b++; return undef if $b==256; $a=1; } return ("$base.$b.".$a++); } } my $gen=init_adds(192.168); while (my $val = &$gen) { print $val, $/ ; }
Cheers,
R.
|
|---|