File Coverage

blib/lib/Acme/No.pm
Criterion Covered Total %
statement 37 37 100.0
branch 17 18 94.4
condition 9 11 81.8
subroutine 7 7 100.0
pod n/a
total 70 73 95.8


line stmt bran cond sub pod time code
1             package Acme::No;
2              
3 5     5   21147 use 5.00503;
  5         17  
  5         220  
4              
5 5     5   29 use Carp qw(croak);
  5         10  
  5         315  
6 5     5   6268 use UNIVERSAL ();
  5         71  
  5         114  
7              
8 5     5   26 use strict;
  5         10  
  5         177  
9              
10 5     5   11712 use Filter::Util::Call;
  5         8159  
  5         2573  
11              
12             $Acme::No::VERSION = '0.03';
13              
14             sub import {
15              
16             filter_add(sub {
17              
18 53     53   800 my $status = 0;
19              
20 53 100       283 if (($status = filter_read) > 0) {
21              
22 42         219 my (undef, $no, $module, $version) = m/(^|;)\s*(no)\s+([\w\-:]*)\s*(\d+[.]?(\d+[._]?)*)/;
23              
24 42 100 100     189 if ($no && $module && $version) {
      66        
25             # no mod_perl 2.0;
26            
27 6 100       21 if ($module eq 'v') {
28             # fall through to Perl part if we caught 'no v5.6.0'
29             }
30             else {
31              
32 2 50       97 eval "require $module" or die $@;
33              
34 2         35 my $modversion = UNIVERSAL::VERSION($module);
35              
36 2 100       234 croak "$module version $modversion too high--version less than $version required"
37             unless $modversion < $version;
38              
39 1         3 undef $no; # we're done
40             }
41             }
42              
43 41 100 66     103 if ($no && $version) {
44             # no 6.0;
45              
46             # perl version foo (ugh)
47 12         54 my ($rev, $ver, $subver) = split '[._]', $version;
48              
49 12 100       52 if ($ver > 1000) { # 5.006001
    100          
50 4         9 $subver = ($ver % 1000);
51 4         18 $ver = int($ver / 1000);
52             }
53             elsif ($ver > 100) { # 5.00503
54 1         4 $subver = ($ver % 100) * 10;
55 1         3 $ver = int($ver / 100);
56             }
57             else { # silence undef warnings
58 7   100     25 $subver ||= 0;
59             }
60              
61 12         59 $version = $rev + ($ver/1000) + ($subver/1000000);
62              
63 12 100       1332 croak "Perl v$] too high--version less than v$version required"
64             unless $] < $version;
65             }
66              
67             # wipe away user code so the real perl doesn't
68             # barf on our implementation
69 33         89 s/(no)\s+([\w\-:]*)\s*(\d+[.]?(\d+[._]?)*)//;
70             }
71              
72 44         570 return $status;
73 24     24   45868 });
74             }
75              
76             1;
77              
78             __END__