File Coverage

blib/lib/Config/Maker.pm
Criterion Covered Total %
statement 72 94 76.6
branch 19 42 45.2
condition 1 3 33.3
subroutine 20 23 86.9
pod 0 8 0.0
total 112 170 65.8


line stmt bran cond sub pod time code
1             package Config::Maker;
2              
3 9     9   37571 use utf8;
  9         32  
  9         68  
4 9     9   264 use warnings;
  9         19  
  9         504  
5 9     9   107 use strict;
  9         21  
  9         295  
6 9     9   369 use 5.006_001;
  9         32  
  9         397  
7              
8 9     9   52 use Carp;
  9         20  
  9         698  
9 9     9   7009 use Config::Maker::Encode;
  9         28  
  9         4568  
10              
11             require overload;
12              
13             # DEBUG
14             sub LOG;
15             sub DBG;
16             sub DUMP;
17              
18             BEGIN {
19 9 50   9   40 if($::QUIET) {
    0          
20 9     280   49 *LOG = sub {};
  280         902  
21 9     1432   39 *DBG = sub {};
  1432         3132  
22             } elsif(!$::VERBOSE) {
23 0         0 *LOG = sub { print STDERR @_, "\n"; };
  0         0  
24 0         0 *DBG = sub {};
  0         0  
25             } else { # VERBOSE
26 0         0 *LOG = \&Carp::carp;
27 0         0 *DBG = \&Carp::carp;
28             }
29              
30 9 50       56 if($::DEBUG) {
31 0         0 require Data::Dumper;
32             *DUMP = sub {
33 0         0 print STDERR '>' x 40, ' ', shift, "\n",
34             Data::Dumper::Dumper(@_),
35             '<' x 40, "\n";
36             }
37 0         0 } else {
38 9     0   39 *DUMP = sub {};
  0         0  
39             }
40              
41 9 50       40 LOG($::ENCODING_LOG) if $::ENCODING_LOG;
42 9 50       216 if($::ENCODING) {
43 9         57 LOG("Selected $::ENCODING as system encoding");
44             } else {
45 0         0 LOG("Charset conversion not available!");
46             }
47             }
48             # /DEBUG
49              
50 9     9   8699 use Config::Maker::Value; # overloading...
  9         21  
  9         234  
51 9     9   67101 use Config::Maker::Grammar; # Build the parser...
  9         61  
  9         1992  
52              
53             our $parser = Config::Maker::Grammar->new();
54              
55             our $VERSION = '0.007';
56              
57 9     9   123 use Exporter;
  9         20  
  9         7861  
58             our @ISA = qw(Exporter);
59             our @EXPORT = qw(LOG DBG DUMP);
60              
61             # This must be after "constants"
62              
63             require Config::Maker::Config;
64             require Config::Maker::Driver;
65             require Config::Maker::Schema;
66             require Config::Maker::Metaconfig;
67             require Config::Maker::Eval;
68              
69             our $fenc = qr/(?:(?:(?:file)?en)coding|fenc)[:=]\s*/;
70              
71             sub unbackslash {
72 0     0 0 0 eval qq{"\\$_[0]"}
73             }
74              
75             sub environment {
76 0 0   0 0 0 if(defined $ENV{$_[0]}) {
77 0         0 return $ENV{$_[0]};
78             } else {
79 0         0 warn "Undefined environment variable $_[0] used";
80 0         0 return '';
81             }
82             }
83              
84             sub unquote_single {
85 239     239 0 486 local $_ = $_[0];
86 239         1633 s/\A'//;
87 239         1215 s/'\Z//;
88 239         487 s/\\'/'/g;
89 239         855 return $_;
90             }
91              
92             sub unquote_double {
93 5     5 0 15 local $_ = $_[0];
94 5         35 s/\A"//;
95 5         33 s/"\Z//;
96 5         32 s/\\( # Backslashed stuff:
97             ["\$\\] # Things to escape
98             | [tnrfbae] # Simple escape codes
99             | x[[:xdigit:]]{2} # Hex-code
100             | x\{[[:xdigit:]]{1,8}\} # Wide hex-code
101             | [0-7]{1,3} # Octal-code
102             | c[@-_] # Control-char
103             | N\{\w*\} # Named char
104             ) |
105             \$ (\w+) | # Undelimited substitution
106             \$ \{ (\w+) \} # Delimited substitution
107 0 0       0 / $1 ? unbackslash($1) :
    0          
    0          
108             $2 ? environment($2) :
109             $3 ? environment($3) : die "This match does not work"/xe;
110 5         20 return $_;
111             }
112              
113             sub truecmp {
114 338 100   338 0 2229 $_[2] ? overload::StrVal($_[1]) cmp overload::StrVal($_[0])
115             : overload::StrVal($_[0]) cmp overload::StrVal($_[1]);
116             }
117              
118             sub limit {
119 53     53 0 105 my ($num, $min, $max) = @_;
120 53 50       148 return undef if $num < $min;
121 53 50 33     762 return undef if $max && $num > $max;
122 53         193 return $num;
123             }
124              
125             # A non-catching eval...
126             sub exe {
127 9     9   124 no warnings;
  9         19  
  9         615  
128 9     9   58 no strict;
  9         19  
  9         3953  
129 32 50   32 0 246 DBG "Evaluating qq{$_[0]} in " . (wantarray ? "list" : (defined wantarray ? "scalar" : "void")) . " context";
    100          
130 32 100       99 if(wantarray) {
    50          
131 18         2192 my @r = eval qq/package Config::Maker::Eval; $_[0]/;
132 18 100       119 die $@ if $@;
133 16         223 return @r;
134             } elsif(defined wantarray) {
135 14         2261 my $r = eval qq/package Config::Maker::Eval; $_[0]/;
136 14 50       60 die $@ if $@;
137 14         56 return $r;
138             } else {
139 0         0 eval qq/package Config::Maker::Eval; $_[0]/;
140 0 0       0 die $@ if $@;
141             }
142             }
143              
144             our @path = ('.');
145              
146             sub locate {
147 144     144 0 454 my ($file) = @_;
148 144 50       1949 if(File::Spec->file_name_is_absolute($file)) {
149 0         0 return $file;
150             } else {
151 144         549 for(@path) {
152 144         16504 my $f = File::Spec->rel2abs($file, $_);
153 144         739 DBG "Trying: $f";
154 144 50       12867 return $f if -r $f;
155             }
156 0           local $" = ', ';
157 0           croak "Can't find $file in @path";
158             }
159             }
160              
161              
162             $::RD_HINT = 1;
163              
164             1;
165              
166             __END__