File Coverage

blib/lib/Env/ShellWords.pm
Criterion Covered Total %
statement 69 76 90.7
branch 5 6 83.3
condition n/a
subroutine 19 20 95.0
pod n/a
total 93 102 91.1


line stmt bran cond sub pod time code
1             package Env::ShellWords;
2              
3 2     2   127880 use strict;
  2         3  
  2         48  
4 2     2   6 use warnings;
  2         2  
  2         50  
5 2     2   868 use Text::ParseWords qw( shellwords );
  2         1834  
  2         1124  
6              
7             # ABSTRACT: Environment variables for arguments as array
8             our $VERSION = '0.01'; # VERSION
9              
10              
11             sub TIEARRAY
12             {
13 12     12   11268 my($class, $name) = @_;
14 12         28 bless \$name, $class;
15             }
16              
17             sub FETCH
18             {
19 7     7   1208 my($self, $key) = @_;
20 7         22 my @list = shellwords($ENV{$$self});
21 7         525 $list[$key];
22             }
23              
24             sub _render
25             {
26 13     13   330 my($self, @list) = @_;
27             $ENV{$$self} = join ' ', map {
28 13         17 my $value = $_;
  78         48  
29 78 100       93 $value = '' unless defined $value;
30 78         102 $value =~ s/(\s)/\\$1/g;
31 78 100       149 $value eq '' ? "''" : $value;
32             } @list;
33             }
34              
35             sub STORE
36             {
37 3     3   186 my($self, $key, $value) = @_;
38 3         7 my @list = shellwords($ENV{$$self});
39 3         291 $list[$key] = $value;
40 3         6 _render($self, @list);
41 3         7 $value;
42             }
43              
44             sub FETCHSIZE
45             {
46 6     6   364 my($self) = @_;
47 6         11 my @list = shellwords($ENV{$$self});
48 6         667 $#list + 1;
49             }
50              
51             sub STORESIZE
52             {
53 1     1   5 my($self, $count) = @_;
54 1         4 my @list = shellwords($ENV{$$self});
55 1         99 $#list = $count - 1;
56 1         2 _render($self, @list);
57 1         4 return;
58             }
59              
60             sub CLEAR
61             {
62 1     1   5 my($self) = @_;
63 1         3 _render($self);
64 1         3 return;
65             }
66              
67             sub PUSH
68             {
69 1     1   6 my($self, @values) = @_;
70 1         4 _render($self, shellwords($ENV{$$self}), @values);
71 1         4 return;
72             }
73              
74             sub POP
75             {
76 2     2   6 my($self) = @_;
77 2         7 my @list = shellwords($ENV{$$self});
78 2         195 my $value = pop @list;
79 2         3 _render($self, @list);
80 2         26 return $value;
81             }
82              
83             sub SHIFT
84             {
85 2     2   5 my($self) = @_;
86 2         7 my($value, @list) = shellwords($ENV{$$self});
87 2         181 _render($self, @list);
88 2         7 return $value;
89             }
90              
91             sub UNSHIFT
92             {
93 2     2   6 my($self, @values) = @_;
94 2         5 _render($self, @values, shellwords($ENV{$$self}));
95 2         6 return;
96             }
97              
98             sub SPLICE
99             {
100 0     0   0 my($self, $offset, $length, @values) = @_;
101 0         0 my @list = shellwords($ENV{$$self});
102 0         0 my @ret = splice @list, $offset, $length, @values;
103 0         0 _render($self, @list);
104 0         0 @ret;
105             }
106              
107             sub DELETE
108             {
109 1     1   6 my($self, $key) = @_;
110 1         3 my @list = shellwords($ENV{$$self});
111 1         97 my $value = delete $list[$key];
112 1         2 _render($self, @list);
113 1         5 return $value;
114             }
115              
116             sub EXISTS
117             {
118 2     2   224 my($self, $key) = @_;
119 2         5 my @list = shellwords($ENV{$$self});
120 2         232 return exists $list[$key];
121             }
122              
123       1     sub EXTEND {} # do nothing!
124              
125             sub import
126             {
127 3     3   20 my $caller = caller;
128 3         6 my(undef, @vars) = @_;
129 3         515 foreach my $var (@vars)
130             {
131 1 50       8 if($var =~ s/^\@//)
132             {
133 2     2   10 no strict 'refs';
  2         2  
  2         190  
134 1         3 tie my @list, __PACKAGE__, $var;
135 1         2 *{"${caller}::${var}"} = \@list;
  1         1447  
136             }
137             else
138             {
139 0           require Carp;
140 0           Carp::croak("Env::ShellWords does not work with $var");
141             }
142             }
143             }
144              
145             1;
146              
147             __END__