File Coverage

blib/lib/Env/Sanctify.pm
Criterion Covered Total %
statement 37 37 100.0
branch 10 10 100.0
condition 4 6 66.6
subroutine 6 6 100.0
pod 2 2 100.0
total 59 61 96.7


line stmt bran cond sub pod time code
1             package Env::Sanctify;
2             $Env::Sanctify::VERSION = '1.12';
3             #ABSTRACT: Lexically scoped sanctification of %ENV
4              
5 5     5   164631 use strict;
  5         13  
  5         183  
6 5     5   27 use warnings;
  5         11  
  5         3230  
7              
8             sub sanctify {
9 5     5 1 172 my $package = shift;
10 5         22 my %opts = @_;
11 5         47 $opts{lc $_} = delete $opts{$_} for keys %opts;
12 5 100 66     48 delete $opts{env} unless $opts{env} and ref $opts{env} eq 'HASH';
13 5 100 66     55 delete $opts{sanctify} unless $opts{sanctify} and ref $opts{sanctify} eq 'ARRAY';
14 5         19 my $self = bless \%opts, $package;
15 5         33 $self->_sanctify();
16 5         20 return $self;
17             }
18              
19             sub _sanctify {
20 5     5   15 my $self = shift;
21 5         42 $self->{_backup} = { };
22 5 100       22 if ( $self->{sanctify} ) {
23 4         9 foreach my $regex ( @{ $self->{sanctify} } ) {
  4         15  
24 6         54 $self->{_backup}->{$_} = delete $ENV{$_} for grep { eval { /$regex/ } } keys %ENV;
  143         143  
  143         510  
25             }
26             }
27 5 100       26 if ( $self->{env} ) {
28 3         7 $self->{_backup}->{$_} = delete $ENV{$_} for grep { defined $ENV{$_} } keys %{ $self->{env} };
  6         28  
  3         12  
29 3         8 $ENV{$_} = $self->{env}->{$_} for keys %{ $self->{env} };
  3         34  
30             }
31 5         25 return 1;
32             }
33              
34             sub restore {
35 5     5 1 4526 my $self = shift;
36 5         10 delete $ENV{$_} for keys %{ $self->{env} };
  5         45  
37 5         14 $ENV{$_} = $self->{_backup}->{$_} for keys %{ $self->{_backup} };
  5         154  
38 5         27 return $self->{_restored} = 1;
39             }
40              
41             sub DESTROY {
42 5     5   7461 my $self = shift;
43 5 100       343 $self->restore unless $self->{_restored};
44             }
45              
46             'Sanctify yourself, set yourself free';
47              
48             __END__