There's more than one way to do things  
PerlMonks 
How do I manipulate arrays of bits?by faq_monk (Initiate) 
on Oct 08, 1999 at 00:20 UTC ( #620=perlfaq nodetype: print w/ replies, xml )  Need Help?? 
Current Perl documentation can be found at perldoc.perl.org. Here is our local, outdated (pre5.6) version:
Use
For example, this sets $vec to have bit N set if $ints[N] was set:
$vec = ''; foreach(@ints) { vec($vec,$_,1) = 1 }
And here's how, given a vector in $vec, you can get those bits into your
sub bitvec_to_list { my $vec = shift; my @ints; # Find nullbyte density then select best algorithm if ($vec =~ tr/\0// / length $vec > 0.95) { use integer; my $i; # This method is faster with mostly nullbytes while($vec =~ /[^\0]/g ) { $i = 9 + 8 * pos $vec; push @ints, $i if vec($vec, ++$i, 1); push @ints, $i if vec($vec, ++$i, 1); push @ints, $i if vec($vec, ++$i, 1); push @ints, $i if vec($vec, ++$i, 1); push @ints, $i if vec($vec, ++$i, 1); push @ints, $i if vec($vec, ++$i, 1); push @ints, $i if vec($vec, ++$i, 1); push @ints, $i if vec($vec, ++$i, 1); } } else { # This method is a fast general algorithm use integer; my $bits = unpack "b*", $vec; push @ints, 0 if $bits =~ s/^(\d)// && $1; push @ints, pos $bits while($bits =~ /1/g); } return \@ints; } This method gets faster the more sparse the bit vector is. (Courtesy of Tim Bunce and Winfried Koenig.)

