File Coverage

blib/lib/Package/Subroutine/Namespace.pm
Criterion Covered Total %
statement 36 40 90.0
branch 4 6 66.6
condition n/a
subroutine 6 6 100.0
pod 2 2 100.0
total 48 54 88.8


line stmt bran cond sub pod time code
1             package Package::Subroutine::Namespace;
2             # ***************************************
3 1     1   205259 use strict; use warnings;
  1     1   3  
  1         61  
  1         8  
  1         2  
  1         94  
4             our $VERSION='0.10';
5             # ********************
6              
7             ; use Carp ()
8 1     1   6 ; use Perl6::Junction ()
  1         1  
  1         15  
9              
10 1     1   501 ; our $ROOT = \%::
  1         8051  
  1         601  
11             ; our %namespace
12              
13             ; sub list_namespaces
14 5     5 1 195 { my ($self,$package) = @_
15 5         2749 ; local %namespace = %$ROOT
16 5         170 ; $package =~ s/::$//
17 5         46 ; my @path = split /::/, $package
18 5         29 ; while(my $pkg = shift @path)
19 5 50       21 { if(exists $namespace{"${pkg}::"})
20 5         8 { %namespace = %{$namespace{$pkg."::"}}
  5         594  
21             }
22             else
23 0         0 { Carp::carp("Package \"$package\" not available.")
24             ; return ()
25 0         0 }
26             }
27 7         40 ; map { s/::$// ; $_ } ## no critic
  7         52  
28 5         29 grep { /::$/ } keys %namespace
  12         52  
29             }
30              
31             ; sub delete_namespaces
32 2     2 1 210386 { my ($self,$package,@keep) = @_
33 2         6 ; $package =~ s/::$//
34 2         8 ; my @path = split /::/, $package
35 2         10 ; my @children = $self->list_namespaces($package)
36 2         6 ; my $namespace = $ROOT
37 2         9 ; while(my $pkg = shift @path)
38 2 50       10 { if(exists $namespace->{"${pkg}::"})
39 2         3 { $namespace = \%{$namespace->{"${pkg}::"}}
  2         11  
40             }
41             else
42 0         0 { Carp::carp("Package \"$package\" not found.")
43             ; return
44 0         0 }
45             }
46 2         6 ; for my $chld (@children)
47 4 100       15 { next if $chld eq Perl6::Junction::any(@keep)
48 3         224 ; delete $namespace->{"${chld}::"}
49             }
50             }
51              
52             ; 1
53              
54             __END__