File Coverage

blib/lib/String/BitCount.pm
Criterion Covered Total %
statement 21 21 100.0
branch 3 4 75.0
condition n/a
subroutine 6 6 100.0
pod 2 2 100.0
total 32 33 96.9


line stmt bran cond sub pod time code
1             # $Id: BitCount.pm,v 1.6 2003/03/31 13:53:24 win Exp $
2              
3             package String::BitCount;
4              
5 1     1   649 use 5.004;
  1         4  
  1         34  
6 1     1   5 use strict;
  1         1  
  1         31  
7 1     1   5 use Carp 'carp';
  1         10  
  1         70  
8 1         284 use vars qw(
9             $VERSION @ISA @EXPORT
10 1     1   4 );
  1         2  
11              
12             require Exporter;
13              
14             @ISA = qw(Exporter);
15              
16             $VERSION = "1.13";
17              
18             @EXPORT = qw(BitCount showBitCount);
19              
20             my $bits = '0';
21             for (0 .. 7) {
22             $bits .= join '', map { ++$_ } split '', $bits;
23             }
24              
25             my $test = '';
26             eval "require 5.006";
27             if (!$@) {
28             eval "require 5.008";
29             if ($@) {
30             # Perl v5.6.0 or v5.6.1
31             $test = 'do { use bytes; length } != do { no bytes; length }';
32             } else {
33             # Perl v5.8.0 and later
34             $test = 'tr/\0-\377/\0/c';
35             }
36             $test .= ' && carp "Wide character in argument";';
37             }
38              
39             sub BitCount {
40 4     4 1 85 my $count = 0;
41 4         9 foreach (@_) {
42 6         20 $count += unpack("%32b*", $_);
43             }
44 4         11 $count;
45             }
46              
47 5 50   5 1 312 eval <
  5 100       11  
  9         23  
  9         19  
  5         28  
48             sub showBitCount {
49             my(\@s) = \@_;
50             foreach (\@s) {
51             $test tr/\\0-\\377/$bits/;
52             }
53             wantarray ? \@s : join '', \@s;
54             }
55             EDQ
56             die $@ if $@;
57              
58             1;
59             __END__