File Coverage

blib/lib/Package/Reaper.pm
Criterion Covered Total %
statement 29 29 100.0
branch 4 4 100.0
condition n/a
subroutine 11 11 100.0
pod 5 5 100.0
total 49 49 100.0


line stmt bran cond sub pod time code
1 1     1   4268 use strict;
  1         2  
  1         37  
2 1     1   7 use warnings;
  1         2  
  1         53  
3             package Package::Reaper;
4             {
5             $Package::Reaper::VERSION = '1.106';
6             }
7 1     1   22 use 5.008;
  1         3  
  1         48  
8             # ABSTRACT: pseudo-garbage-collection for packages
9              
10 1     1   6 use Carp ();
  1         3  
  1         22  
11 1     1   1072 use Symbol ();
  1         915  
  1         206  
12              
13              
14             sub new {
15 5     5 1 1912 my ($class, $package) = @_;
16              
17             # Do I care about checking $package with _CLASS and/or exists_package?
18             # Probably not, for now. -- rjbs, 2006-06-05
19 5         16 my $self = [ $package, 1 ];
20 5         21 bless $self => $class;
21             }
22              
23              
24             sub package {
25 6     6 1 12 my $self = shift;
26 6 100       194 Carp::croak "a reaper's package may not be altered" if @_;
27 5         18 return $self->[0];
28             }
29              
30              
31             sub is_armed {
32 5     5 1 28 my $self = shift;
33 5         25 return $self->[1] == 1;
34             }
35              
36              
37 2     2 1 487 sub disarm { $_[0]->[1] = 0 }
38              
39              
40 1     1 1 5 sub arm { $_[0]->[1] = 1 }
41              
42             sub DESTROY {
43 5     5   1506 my ($self) = @_;
44              
45 5 100       16 return unless $self->is_armed;
46              
47 4         16 my $package = $self->package;
48              
49 4         16 Symbol::delete_package($package);
50             }
51              
52             "You might be a king or a little street sweeper, but sooner or later you dance
53             with Package:Reaper.";
54              
55             __END__