File Coverage

blib/lib/Acme/MyPeek.pm
Criterion Covered Total %
statement 39 39 100.0
branch 8 10 80.0
condition n/a
subroutine 10 10 100.0
pod 0 5 0.0
total 57 64 89.0


line stmt bran cond sub pod time code
1             package Acme::MyPeek;
2            
3 1     1   743 use strict;
  1         2  
  1         34  
4 1     1   4 use warnings;
  1         2  
  1         30  
5            
6 1     1   13 use B qw(svref_2object class);
  1         2  
  1         383  
7              
8             require Exporter;
9            
10             our @ISA = qw(Exporter);
11             our @EXPORT = qw(hi hd dt lv);
12             our @EXPORT_OK = qw();
13             our $VERSION = '0.04';
14            
15             my $last_val;
16            
17 126     126 0 415 sub hi { highval( sub{ $_[0] eq sprintf('%u', $_[0]) }); }
  1     1   5311  
18 111     111 0 345 sub hd { highval( sub{ sprintf('%.f', $_[0]) ne sprintf('%.f', $_[0] - 1) }); }
  1     1   136  
19 3     3 0 2085 sub dt { class(svref_2object(\$_[0])); }
20 2     2 0 12 sub lv { $last_val; }
21            
22             sub highval {
23 2     2 0 3 my ($ok) = @_;
24            
25 2         4 my $x = 1;
26 2         2 my $f = 1;
27            
28 2         5 for (1..100) {
29 36         31 my $y = $x * 10;
30            
31 36 100       49 unless ($ok->($y)) {
32 2         4 $f = 0;
33 2         3 last;
34             }
35            
36 34         44 $x = $y;
37             }
38            
39 2         4 $last_val = $x;
40            
41 2 50       5 return -1 if $f;
42            
43 2         3 my $r = $x;
44            
45 2         4 for (1..1000) {
46 201         190 my $y = $x + $r;
47            
48 201 100       267 unless ($ok->($y)) {
49 36 100       54 if ($r <= 1) {
50 2         3 $r = 0;
51 2         3 last;
52             }
53            
54 34         31 $r /= 10;
55 34         45 next;
56             }
57            
58 165         192 $x += $r;
59             }
60            
61 2         3 $last_val = $x;
62            
63 2 50       4 return -2 if $r;
64            
65 2         6 return $x
66             }
67            
68             1;
69            
70             __END__