File Coverage

blib/lib/CPAN/02Packages/Search.pm
Criterion Covered Total %
statement 17 58 29.3
branch 0 18 0.0
condition 0 3 0.0
subroutine 6 10 60.0
pod 0 2 0.0
total 23 91 25.2


line stmt bran cond sub pod time code
1             package CPAN::02Packages::Search v1.0.0;
2 1     1   93798 use v5.24;
  1         2  
3 1     1   3 use warnings;
  1         2  
  1         77  
4 1     1   6 use experimental qw(lexical_subs signatures);
  1         1  
  1         5  
5              
6             our $TRIAL = 0;
7              
8 1     1   1890 use Search::Dict ();
  1         1302  
  1         24  
9 1     1   355 use Symbol ();
  1         905  
  1         23  
10 1     1   356 use Tie::Handle::SkipHeader;
  1         3182  
  1         534  
11              
12              
13 0     0 0   sub new ($class, %argv) {
  0            
  0            
  0            
14 0           my $fh = $argv{fh};
15 0 0         if (!$fh) {
16 0           my $file = $argv{file};
17 0 0         my $skip_header = exists $argv{skip_header} ? $argv{skip_header} : 1;
18 0           $fh = $class->_open($file, $skip_header);
19             }
20 0           bless { fh => $fh }, $class;
21             }
22              
23 0     0     sub _open ($class, $file, $skip_header) {
  0            
  0            
  0            
  0            
24 0 0         if ($skip_header) {
25 0           my $fh = Symbol::gensym;
26 0 0         tie *$fh, 'Tie::Handle::SkipHeader', '<', $file or die "$!: $file\n";
27 0           return $fh;
28             }
29 0 0         open my $fh, "<", $file or die "$!: $file\n";
30 0           $fh;
31             }
32              
33 0     0 0   sub search ($self, $package) {
  0            
  0            
  0            
34 0           my $fh = $self->{fh};
35 0           seek $fh, 0, 0;
36 0           my $pos = Search::Dict::look $fh, $package, { xfrm => \&_xform_package, fold => 1 };
37 0 0 0       return if $pos == -1 || eof $fh;
38 0           while (my $line = <$fh>) {
39 0 0         last if $line !~ /\A\Q$package\E\s+/i;
40 0           chomp $line;
41 0           my ($_package, $version, $path) = split /\s+/, $line, 4;
42 0 0         if ($package eq $_package) {
43 0 0         $version = undef if $version eq 'undef';
44 0           return { version => $version, path => $path };
45             }
46             }
47 0           return;
48             }
49              
50 0     0     sub _xform_package ($line) { (split " ", $line, 2)[0] }
  0            
  0            
  0            
51              
52             1;
53             __END__