line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
use strict; |
2
|
27
|
|
|
27
|
|
177
|
use warnings 'all', FATAL => 'recursion'; |
|
27
|
|
|
|
|
55
|
|
|
27
|
|
|
|
|
877
|
|
3
|
27
|
|
|
27
|
|
135
|
use 5.008008; |
|
27
|
|
|
|
|
54
|
|
|
27
|
|
|
|
|
1073
|
|
4
|
27
|
|
|
27
|
|
632
|
our $VERSION = '0.82'; |
|
27
|
|
|
|
|
85
|
|
5
|
|
|
|
|
|
|
use base qw(Exporter); |
6
|
27
|
|
|
27
|
|
138
|
|
|
27
|
|
|
|
|
71
|
|
|
27
|
|
|
|
|
3352
|
|
7
|
|
|
|
|
|
|
our @EXPORT = qw(zglob); |
8
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
use File::Basename; |
10
|
27
|
|
|
27
|
|
197
|
|
|
27
|
|
|
|
|
68
|
|
|
27
|
|
|
|
|
47624
|
|
11
|
|
|
|
|
|
|
our $SEPCHAR = '/'; |
12
|
|
|
|
|
|
|
our $NOCASE = $^O =~ /^(?:MSWin32|VMS|os2|dos|riscos|MacOS|darwin)$/ ? 1 : 0; |
13
|
|
|
|
|
|
|
our $DIRFLAG = \"DIR?"; |
14
|
|
|
|
|
|
|
our $DEEPFLAG = \"**"; |
15
|
|
|
|
|
|
|
our $PARENTFLAG = \".."; |
16
|
|
|
|
|
|
|
our $DEBUG = 0; |
17
|
|
|
|
|
|
|
our $STRICT_LEADING_DOT = 1; |
18
|
|
|
|
|
|
|
our $STRICT_WILDCARD_SLASH = 1; |
19
|
|
|
|
|
|
|
|
20
|
|
|
|
|
|
|
my ($pattern) = @_; |
21
|
|
|
|
|
|
|
#dbg("FOLDING: $pattern"); |
22
|
42
|
|
|
42
|
0
|
281
|
# support ~tokuhirom/ |
23
|
|
|
|
|
|
|
if ($^O eq 'MSWin32') { |
24
|
|
|
|
|
|
|
require Win32; |
25
|
42
|
50
|
|
|
|
163
|
$pattern =~ s!^(\~[^$SEPCHAR]*)!Win32::GetLongPathName([glob($1)]->[0])!e; |
26
|
0
|
|
|
|
|
0
|
} else { |
27
|
0
|
|
|
|
|
0
|
$pattern =~ s!^(\~[^$SEPCHAR]*)![glob($1)]->[0]!e; |
|
0
|
|
|
|
|
0
|
|
28
|
|
|
|
|
|
|
} |
29
|
42
|
|
|
|
|
245
|
my ($node, $matcher) = glob_prepare_pattern($pattern); |
|
0
|
|
|
|
|
0
|
|
30
|
|
|
|
|
|
|
# $node : \0 if absolute path, \1 if relative. |
31
|
42
|
|
|
|
|
121
|
|
32
|
|
|
|
|
|
|
#dbg("pattern: ", $node, $matcher); |
33
|
|
|
|
|
|
|
return _rec($node, $matcher, []); |
34
|
|
|
|
|
|
|
} |
35
|
42
|
|
|
|
|
129
|
|
36
|
|
|
|
|
|
|
return unless $DEBUG; |
37
|
|
|
|
|
|
|
my ($pkg, $filename, $line, $sub) = caller(1); |
38
|
|
|
|
|
|
|
my $i = 0; |
39
|
384
|
50
|
|
384
|
0
|
602
|
while (caller($i++)) { 1 } |
40
|
0
|
|
|
|
|
0
|
my $msg; |
41
|
0
|
|
|
|
|
0
|
$msg .= ('-' x ($i-5)); |
42
|
0
|
|
|
|
|
0
|
$msg .= " [$sub] "; |
|
0
|
|
|
|
|
0
|
|
43
|
0
|
|
|
|
|
0
|
for (@_) { |
44
|
0
|
|
|
|
|
0
|
$msg .= ' '; |
45
|
0
|
|
|
|
|
0
|
if (not defined $_) { |
46
|
0
|
|
|
|
|
0
|
$msg .= '<<undef>>'; |
47
|
0
|
|
|
|
|
0
|
} elsif (ref $_) { |
48
|
0
|
0
|
|
|
|
0
|
require Data::Dumper; |
|
|
0
|
|
|
|
|
|
49
|
0
|
|
|
|
|
0
|
local $Data::Dumper::Terse = 1; |
50
|
|
|
|
|
|
|
local $Data::Dumper::Indent = 0; |
51
|
0
|
|
|
|
|
0
|
$msg .= Data::Dumper::Dumper($_); |
52
|
0
|
|
|
|
|
0
|
} else { |
53
|
0
|
|
|
|
|
0
|
$msg .= $_; |
54
|
0
|
|
|
|
|
0
|
} |
55
|
|
|
|
|
|
|
} |
56
|
0
|
|
|
|
|
0
|
$msg .= " at $filename line $line\n"; |
57
|
|
|
|
|
|
|
print($msg); |
58
|
|
|
|
|
|
|
} |
59
|
0
|
|
|
|
|
0
|
|
60
|
0
|
|
|
|
|
0
|
my ($node, $matcher) = @_; |
61
|
|
|
|
|
|
|
#dbg("recstar: ", $node, $matcher, $seed); |
62
|
|
|
|
|
|
|
return ( |
63
|
|
|
|
|
|
|
_rec( $node, $matcher ), |
64
|
47
|
|
|
47
|
|
104
|
( |
65
|
|
|
|
|
|
|
map { _recstar( $_, $matcher ) } |
66
|
|
|
|
|
|
|
glob_fs_fold( $node, qr{^[^.].*$}, 1 ) |
67
|
|
|
|
|
|
|
) |
68
|
|
|
|
|
|
|
); |
69
|
47
|
|
|
|
|
117
|
} |
|
15
|
|
|
|
|
62
|
|
70
|
|
|
|
|
|
|
|
71
|
|
|
|
|
|
|
my ($node, $matcher) = @_; |
72
|
|
|
|
|
|
|
# $matcher: ArrayRef[Any] |
73
|
|
|
|
|
|
|
|
74
|
|
|
|
|
|
|
my ($current, @rest) = @{$matcher}; |
75
|
|
|
|
|
|
|
if (!defined $current) { |
76
|
177
|
|
|
177
|
|
322
|
#dbg("FINISHED"); |
77
|
|
|
|
|
|
|
return (); |
78
|
|
|
|
|
|
|
} elsif (ref($current) eq 'SCALAR' && $current == $DEEPFLAG) { |
79
|
177
|
|
|
|
|
197
|
#dbg("** mode"); |
|
177
|
|
|
|
|
348
|
|
80
|
177
|
50
|
66
|
|
|
892
|
return _recstar($node, \@rest); |
|
|
100
|
33
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
|
100
|
|
|
|
|
|
81
|
|
|
|
|
|
|
} elsif (ref($current) eq 'SCALAR' && $current == $PARENTFLAG) { |
82
|
0
|
|
|
|
|
0
|
if (ref($node) eq 'SCALAR' && $$node eq 1) { #t |
83
|
|
|
|
|
|
|
die "You cannot get a parent directory of root dir."; |
84
|
|
|
|
|
|
|
} elsif (ref($node) eq 'SCALAR' && $$node eq 0) { #f |
85
|
32
|
|
|
|
|
155
|
return _rec("..", \@rest); |
86
|
|
|
|
|
|
|
} else { |
87
|
0
|
0
|
0
|
|
|
0
|
return _rec("$node$SEPCHAR..", \@rest); |
|
|
0
|
0
|
|
|
|
|
88
|
0
|
|
|
|
|
0
|
} |
89
|
|
|
|
|
|
|
} elsif (@rest == 0) { |
90
|
0
|
|
|
|
|
0
|
#dbg("file name"); |
91
|
|
|
|
|
|
|
# (folder proc seed node (car matcher) #f) |
92
|
0
|
|
|
|
|
0
|
return glob_fs_fold($node, $current, 0); |
93
|
|
|
|
|
|
|
} else { |
94
|
|
|
|
|
|
|
return glob_fs_fold($node, $current, 1, \@rest); |
95
|
|
|
|
|
|
|
} |
96
|
|
|
|
|
|
|
} |
97
|
51
|
|
|
|
|
111
|
|
98
|
|
|
|
|
|
|
|
99
|
94
|
|
|
|
|
219
|
# /^home$/ のような固定の文字列の場合に高速化をはかるための最適化予定地なので、とりあえず undef をかえしておいても問題がない |
100
|
|
|
|
|
|
|
return undef; |
101
|
|
|
|
|
|
|
die "TBI" |
102
|
|
|
|
|
|
|
} |
103
|
|
|
|
|
|
|
|
104
|
|
|
|
|
|
|
# returns arrayref of seeds. |
105
|
|
|
|
|
|
|
my ($node, $regexp, $non_leaf_p, $rest) = @_; |
106
|
0
|
|
|
0
|
0
|
0
|
|
107
|
0
|
|
|
|
|
0
|
my $prefix = do { |
108
|
|
|
|
|
|
|
if (ref $node eq 'SCALAR') { |
109
|
|
|
|
|
|
|
if ($$node eq 1) { #t |
110
|
|
|
|
|
|
|
$SEPCHAR |
111
|
|
|
|
|
|
|
} elsif ($$node eq '0') { #f |
112
|
192
|
|
|
192
|
0
|
369
|
''; |
113
|
|
|
|
|
|
|
} else { |
114
|
192
|
|
|
|
|
207
|
die "FATAL"; |
115
|
192
|
100
|
|
|
|
506
|
} |
|
|
50
|
|
|
|
|
|
116
|
42
|
50
|
|
|
|
122
|
} elsif ($node !~ m{/$}) { |
|
|
0
|
|
|
|
|
|
117
|
42
|
|
|
|
|
79
|
$node . '/'; |
118
|
|
|
|
|
|
|
} else { |
119
|
0
|
|
|
|
|
0
|
$node; |
120
|
|
|
|
|
|
|
} |
121
|
0
|
|
|
|
|
0
|
}; |
122
|
|
|
|
|
|
|
dbg("prefix: $prefix"); |
123
|
|
|
|
|
|
|
dbg("regxp: ", $regexp); |
124
|
150
|
|
|
|
|
284
|
if ($^O eq 'MSWin32' && ref $regexp eq 'SCALAR' && $$regexp =~ /^[a-zA-Z]\:$/) { |
125
|
|
|
|
|
|
|
return _rec($$regexp . '/', $rest); |
126
|
0
|
|
|
|
|
0
|
} |
127
|
|
|
|
|
|
|
if (ref $regexp eq 'SCALAR' && $regexp == $DIRFLAG) { |
128
|
|
|
|
|
|
|
if ($rest) { |
129
|
192
|
|
|
|
|
462
|
return _rec($prefix, $rest); |
130
|
192
|
|
|
|
|
373
|
} else { |
131
|
192
|
0
|
33
|
|
|
538
|
return ($prefix); |
|
|
|
33
|
|
|
|
|
132
|
0
|
|
|
|
|
0
|
} |
133
|
|
|
|
|
|
|
# } elsif (my $string_portion = fixed_regexp_p($regexp)) { # /^path$/ |
134
|
192
|
50
|
33
|
|
|
423
|
# die "TBI"; |
135
|
0
|
0
|
|
|
|
0
|
# my $full = $prefix . $string_portion; |
136
|
0
|
|
|
|
|
0
|
# if (-e $full && (!$non_leaf_p || -d $full)) { |
137
|
|
|
|
|
|
|
# $proc->($full, $seed); |
138
|
0
|
|
|
|
|
0
|
# } else { |
139
|
|
|
|
|
|
|
# $proc; |
140
|
|
|
|
|
|
|
# } |
141
|
|
|
|
|
|
|
} else { # normal regexp |
142
|
|
|
|
|
|
|
#dbg("normal regexp"); |
143
|
|
|
|
|
|
|
my $dir = do { |
144
|
|
|
|
|
|
|
if (ref($node) eq 'SCALAR' && $$node eq 1) { |
145
|
|
|
|
|
|
|
$SEPCHAR |
146
|
|
|
|
|
|
|
} elsif (ref($node) eq 'SCALAR' && $$node eq 0) { |
147
|
|
|
|
|
|
|
'.'; |
148
|
|
|
|
|
|
|
} else { |
149
|
|
|
|
|
|
|
$node; |
150
|
192
|
|
|
|
|
232
|
} |
151
|
192
|
100
|
66
|
|
|
656
|
}; |
|
|
50
|
33
|
|
|
|
|
152
|
42
|
|
|
|
|
71
|
#dbg("dir: $dir"); |
153
|
|
|
|
|
|
|
opendir my $dirh, $dir or do { |
154
|
0
|
|
|
|
|
0
|
#dbg("cannot open dir: $dir: $!"); |
155
|
|
|
|
|
|
|
return (); |
156
|
150
|
|
|
|
|
239
|
}; |
157
|
|
|
|
|
|
|
my @ret; |
158
|
|
|
|
|
|
|
while (defined(my $child = readdir($dirh))) { |
159
|
|
|
|
|
|
|
next if $child eq '.' or $child eq '..'; |
160
|
192
|
50
|
|
|
|
4504
|
my $full; |
161
|
|
|
|
|
|
|
#dbg("non-leaf: ", $non_leaf_p); |
162
|
0
|
|
|
|
|
0
|
if (($child =~ $regexp) && ($full = $prefix . $child) && (!$non_leaf_p || -d $full)) { |
163
|
|
|
|
|
|
|
#dbg("matched: ", $regexp, $child, $full); |
164
|
192
|
|
|
|
|
472
|
if ($rest) { |
165
|
192
|
|
|
|
|
7654
|
push @ret, _rec($full, $rest); |
166
|
1779
|
100
|
100
|
|
|
5191
|
} else { |
167
|
1395
|
|
|
|
|
1371
|
push @ret, $full; |
168
|
|
|
|
|
|
|
} |
169
|
1395
|
100
|
66
|
|
|
8152
|
# } else { |
|
|
|
100
|
|
|
|
|
|
|
|
100
|
|
|
|
|
170
|
|
|
|
|
|
|
#dbg("Don't match: $child"); |
171
|
177
|
100
|
|
|
|
402
|
} |
172
|
88
|
|
|
|
|
230
|
} |
173
|
|
|
|
|
|
|
return @ret; |
174
|
89
|
|
|
|
|
331
|
} |
175
|
|
|
|
|
|
|
} |
176
|
|
|
|
|
|
|
|
177
|
|
|
|
|
|
|
my ($pattern) = @_; |
178
|
|
|
|
|
|
|
my @path = split $SEPCHAR, $pattern; |
179
|
|
|
|
|
|
|
|
180
|
192
|
|
|
|
|
3078
|
my $is_absolute = $path[0] eq '' ? 1 : 0; |
181
|
|
|
|
|
|
|
if ($is_absolute) { |
182
|
|
|
|
|
|
|
shift @path; |
183
|
|
|
|
|
|
|
} |
184
|
|
|
|
|
|
|
if ($^O eq 'MSWin32' && $path[0] =~ /^[a-zA-Z]\:$/) { |
185
|
42
|
|
|
42
|
0
|
72
|
$is_absolute = 1; |
186
|
42
|
|
|
|
|
514
|
} |
187
|
|
|
|
|
|
|
|
188
|
42
|
50
|
|
|
|
124
|
@path = map { |
189
|
42
|
50
|
|
|
|
103
|
if ($_ eq '**') { |
190
|
42
|
|
|
|
|
60
|
$DEEPFLAG |
191
|
|
|
|
|
|
|
} elsif ($_ eq '') { |
192
|
42
|
50
|
33
|
|
|
119
|
$DIRFLAG |
193
|
0
|
|
|
|
|
0
|
} elsif ($_ eq '.') { |
194
|
|
|
|
|
|
|
() |
195
|
|
|
|
|
|
|
} elsif ($_ eq '..') { |
196
|
|
|
|
|
|
|
$PARENTFLAG |
197
|
42
|
100
|
33
|
|
|
66
|
} elsif ($^O eq 'MSWin32' && $_ =~ '^[a-zA-Z]\:$') { |
|
168
|
50
|
|
|
|
629
|
|
|
|
50
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
198
|
32
|
|
|
|
|
66
|
\$_ |
199
|
|
|
|
|
|
|
} else { |
200
|
0
|
|
|
|
|
0
|
glob_to_regex($_) # TODO: replace with original implementation? |
201
|
|
|
|
|
|
|
} |
202
|
|
|
|
|
|
|
} @path; |
203
|
0
|
|
|
|
|
0
|
|
204
|
0
|
|
|
|
|
0
|
return ( \$is_absolute, \@path ); |
205
|
|
|
|
|
|
|
} |
206
|
0
|
|
|
|
|
0
|
|
207
|
|
|
|
|
|
|
# this is not a private function. '**' was handled at glob_prepare_pattern() function. |
208
|
136
|
|
|
|
|
226
|
my $glob = shift; |
209
|
|
|
|
|
|
|
my $regex = glob_to_regex_string($glob); |
210
|
|
|
|
|
|
|
return $NOCASE ? qr/^$regex$/i : qr/^$regex$/; |
211
|
|
|
|
|
|
|
} |
212
|
42
|
|
|
|
|
146
|
|
213
|
|
|
|
|
|
|
my $glob = shift; |
214
|
|
|
|
|
|
|
my ($regex, $in_curlies, $escaping); |
215
|
|
|
|
|
|
|
local $_; |
216
|
|
|
|
|
|
|
my $first_byte = 1; |
217
|
136
|
|
|
136
|
0
|
222
|
for ($glob =~ m/(.)/gs) { |
218
|
136
|
|
|
|
|
218
|
if ($first_byte) { |
219
|
136
|
50
|
|
|
|
2511
|
if ($STRICT_LEADING_DOT) { |
220
|
|
|
|
|
|
|
$regex .= '(?=[^\.])' unless $_ eq '.'; |
221
|
|
|
|
|
|
|
} |
222
|
|
|
|
|
|
|
$first_byte = 0; |
223
|
136
|
|
|
136
|
0
|
198
|
} |
224
|
136
|
|
|
|
|
184
|
if ($_ eq '/') { |
225
|
136
|
|
|
|
|
156
|
$first_byte = 1; |
226
|
136
|
|
|
|
|
148
|
} |
227
|
136
|
|
|
|
|
836
|
if ($_ eq '.' || $_ eq '(' || $_ eq ')' || $_ eq '|' || |
228
|
1101
|
100
|
|
|
|
1461
|
$_ eq '+' || $_ eq '^' || $_ eq '$' || $_ eq '@' || $_ eq '%' ) { |
229
|
136
|
50
|
|
|
|
207
|
$regex .= "\\$_"; |
230
|
136
|
50
|
|
|
|
291
|
} |
231
|
|
|
|
|
|
|
elsif ($_ eq '*') { |
232
|
136
|
|
|
|
|
171
|
$regex .= $escaping ? "\\*" : |
233
|
|
|
|
|
|
|
$STRICT_WILDCARD_SLASH ? "[^/]*" : ".*"; |
234
|
1101
|
50
|
|
|
|
1382
|
} |
235
|
0
|
|
|
|
|
0
|
elsif ($_ eq '?') { |
236
|
|
|
|
|
|
|
$regex .= $escaping ? "\\?" : |
237
|
1101
|
100
|
66
|
|
|
9812
|
$STRICT_WILDCARD_SLASH ? "[^/]" : "."; |
|
|
100
|
66
|
|
|
|
|
|
|
50
|
33
|
|
|
|
|
|
|
50
|
33
|
|
|
|
|
|
|
50
|
33
|
|
|
|
|
|
|
50
|
33
|
|
|
|
|
|
|
50
|
33
|
|
|
|
|
|
|
|
33
|
|
|
|
|
|
|
|
33
|
|
|
|
|
|
|
|
33
|
|
|
|
|
238
|
|
|
|
|
|
|
} |
239
|
31
|
|
|
|
|
53
|
elsif ($_ eq '{') { |
240
|
|
|
|
|
|
|
$regex .= $escaping ? "\\{" : "("; |
241
|
|
|
|
|
|
|
++$in_curlies unless $escaping; |
242
|
38
|
50
|
|
|
|
100
|
} |
|
|
50
|
|
|
|
|
|
243
|
|
|
|
|
|
|
elsif ($_ eq '}' && $in_curlies) { |
244
|
|
|
|
|
|
|
$regex .= $escaping ? "}" : ")"; |
245
|
|
|
|
|
|
|
--$in_curlies unless $escaping; |
246
|
0
|
0
|
|
|
|
0
|
} |
|
|
0
|
|
|
|
|
|
247
|
|
|
|
|
|
|
elsif ($_ eq ',' && $in_curlies) { |
248
|
|
|
|
|
|
|
$regex .= $escaping ? "," : "|"; |
249
|
|
|
|
|
|
|
} |
250
|
0
|
0
|
|
|
|
0
|
elsif ($_ eq "\\") { |
251
|
0
|
0
|
|
|
|
0
|
if ($escaping) { |
252
|
|
|
|
|
|
|
$regex .= "\\\\"; |
253
|
|
|
|
|
|
|
$escaping = 0; |
254
|
0
|
0
|
|
|
|
0
|
} |
255
|
0
|
0
|
|
|
|
0
|
else { |
256
|
|
|
|
|
|
|
$escaping = 1; |
257
|
|
|
|
|
|
|
} |
258
|
0
|
0
|
|
|
|
0
|
next; |
259
|
|
|
|
|
|
|
} |
260
|
|
|
|
|
|
|
else { |
261
|
0
|
0
|
|
|
|
0
|
$regex .= $_; |
262
|
0
|
|
|
|
|
0
|
$escaping = 0; |
263
|
0
|
|
|
|
|
0
|
} |
264
|
|
|
|
|
|
|
$escaping = 0; |
265
|
|
|
|
|
|
|
} |
266
|
0
|
|
|
|
|
0
|
|
267
|
|
|
|
|
|
|
return $regex; |
268
|
0
|
|
|
|
|
0
|
} |
269
|
|
|
|
|
|
|
|
270
|
|
|
|
|
|
|
1; |
271
|
1032
|
|
|
|
|
1151
|
|
272
|
1032
|
|
|
|
|
1032
|
# ABSTRACT: A borged copy of File::Zglob |
273
|
|
|
|
|
|
|
|
274
|
1101
|
|
|
|
|
1193
|
|
275
|
|
|
|
|
|
|
=pod |
276
|
|
|
|
|
|
|
|
277
|
136
|
|
|
|
|
357
|
=encoding UTF-8 |
278
|
|
|
|
|
|
|
|
279
|
|
|
|
|
|
|
=head1 NAME |
280
|
|
|
|
|
|
|
|
281
|
|
|
|
|
|
|
Code::TidyAll::Zglob - A borged copy of File::Zglob |
282
|
|
|
|
|
|
|
|
283
|
|
|
|
|
|
|
=head1 VERSION |
284
|
|
|
|
|
|
|
|
285
|
|
|
|
|
|
|
version 0.82 |
286
|
|
|
|
|
|
|
|
287
|
|
|
|
|
|
|
=head1 DESCRIPTION |
288
|
|
|
|
|
|
|
|
289
|
|
|
|
|
|
|
File::Zglob has not been installable under Perl 5.26 and this has been an open |
290
|
|
|
|
|
|
|
issue for 8+ months |
291
|
|
|
|
|
|
|
(https://rt.cpan.org/Public/Bug/Display.html?id=120445). This module will go |
292
|
|
|
|
|
|
|
away once File::Zglob is installable. |
293
|
|
|
|
|
|
|
|
294
|
|
|
|
|
|
|
=head1 LICENSE |
295
|
|
|
|
|
|
|
|
296
|
|
|
|
|
|
|
Copyright (C) Tokuhiro Matsuno |
297
|
|
|
|
|
|
|
|
298
|
|
|
|
|
|
|
This library is free software; you can redistribute it and/or modify |
299
|
|
|
|
|
|
|
it under the same terms as Perl itself. |
300
|
|
|
|
|
|
|
|
301
|
|
|
|
|
|
|
=head1 SUPPORT |
302
|
|
|
|
|
|
|
|
303
|
|
|
|
|
|
|
Bugs may be submitted at L<https://github.com/houseabsolute/perl-code-tidyall/issues>. |
304
|
|
|
|
|
|
|
|
305
|
|
|
|
|
|
|
=head1 SOURCE |
306
|
|
|
|
|
|
|
|
307
|
|
|
|
|
|
|
The source code repository for Code-TidyAll can be found at L<https://github.com/houseabsolute/perl-code-tidyall>. |
308
|
|
|
|
|
|
|
|
309
|
|
|
|
|
|
|
=head1 AUTHORS |
310
|
|
|
|
|
|
|
|
311
|
|
|
|
|
|
|
=over 4 |
312
|
|
|
|
|
|
|
|
313
|
|
|
|
|
|
|
=item * |
314
|
|
|
|
|
|
|
|
315
|
|
|
|
|
|
|
Jonathan Swartz <swartz@pobox.com> |
316
|
|
|
|
|
|
|
|
317
|
|
|
|
|
|
|
=item * |
318
|
|
|
|
|
|
|
|
319
|
|
|
|
|
|
|
Dave Rolsky <autarch@urth.org> |
320
|
|
|
|
|
|
|
|
321
|
|
|
|
|
|
|
=back |
322
|
|
|
|
|
|
|
|
323
|
|
|
|
|
|
|
=head1 COPYRIGHT AND LICENSE |
324
|
|
|
|
|
|
|
|
325
|
|
|
|
|
|
|
This software is copyright (c) 2011 - 2022 by Jonathan Swartz. |
326
|
|
|
|
|
|
|
|
327
|
|
|
|
|
|
|
This is free software; you can redistribute it and/or modify it under |
328
|
|
|
|
|
|
|
the same terms as the Perl 5 programming language system itself. |
329
|
|
|
|
|
|
|
|
330
|
|
|
|
|
|
|
The full text of the license can be found in the |
331
|
|
|
|
|
|
|
F<LICENSE> file included with this distribution. |
332
|
|
|
|
|
|
|
|
333
|
|
|
|
|
|
|
=cut |