1Pod::Tidy(3) User Contributed Perl Documentation Pod::Tidy(3)
2
3
4
6 Pod::Tidy - a reformatting Pod Processor
7
9 use Pod::Tidy qw( tidy_files tidy_filehandle );
10
11 my $processed = Pod::Tidy::tidy_files(
12 files => \@list,
13 ignore => [qr/foo/, qr/bar/],
14 recursive => $recursive,
15 verbose => $verbose,
16 inplace => $inplace,
17 nobackup => $nobackup,
18 columns => $columns,
19 );
20
21 Pod::Tidy::tidy_filehandle($input);
22
24 This module provides the heavy lifting needed by the "podtidy" utility
25 although the API should be general enough that it can be used directly.
26
28 Import Parameters
29 This module accepts no arguments to it's "import" method and exports no
30 symbols.
31
32 Exportable Subroutines
33 · tidy_files( ... )
34
35 Accepts a mandatory hash.
36
37 my $processed = Pod::Tidy::tidy_files(
38 files => \@list,
39 ignore => [qr/foo/, qr/bar/],
40 recursive => $recursive,
41 verbose => $verbose,
42 inplace => $inplace,
43 nobackup => $nobackup,
44 columns => $columns,
45 );
46
47 · files
48
49 An array ref to a list of files and/or directories.
50
51 · ignore
52
53 An array ref to regex objects that are used to reject files
54 and/or directories. Each pattern is tried for a match against
55 (in order) the absolute file path, the relative file path
56 (canonical), and the basename. In the case of directories, the
57 "basename" is considered to be the right most path component.
58 For example, the "basename" of "/foo/bar/baz/" would be to be
59 "baz".
60
61 This key is optional.
62
63 · recursive
64
65 Accepts "undef", 0, or 1. If set to 1 any directories provided
66 to the "files" key will be recursively expanded. Defaults to
67 "undef"
68
69 This key is optional.
70
71 · verbose
72
73 Accepts "undef", 0, or 1. 1 enables verbose warnings. Defaults
74 to "undef".
75
76 This key is optional.
77
78 · inplace
79
80 Accepts "undef", 0, or 1. 1 enables in place reformatting of
81 files. Updated files will be backed up unless the "nobackup"
82 key is set. The "mtime" of the file is guarenteed not to be
83 changed unless formating changes did occur. Defaults to
84 "undef".
85
86 This key is optional.
87
88 · nobackup
89
90 Accepts "undef", 0, or 1. If set to 1 files being reformatted
91 in place will not be backed up. Defaults to "undef".
92
93 This key is optional.
94
95 · columns
96
97 Accepts any number. Sets the line width of the reformatted pod.
98 Defaults to 76 (Text::Wrap's default).
99
100 This key is optional.
101
102 Before processing a file it is checked for:
103
104 · correct access permissions
105
106 · containing Pod
107
108 · legal Pod syntax
109
110 Any file failing to meet those criteria will not be processed.
111
112 Returns a count of processed files or "undef" if no files could be
113 processed.
114
115 · tidy_filehandle($input)
116
117 Accepts an open filehandle. Data from the filehandle is processed
118 as it is read so this subroutine can be used to filter large
119 amounts of data. Because of this behavior the input can not be
120 checked in advance to verify a) That it's actually Pod and b) that
121 the Pod document uses only valid Pod syntax. Output is set to
122 "STDOUT". Returns nothing.
123
124 Internal Subroutines
125 These subroutines are not exportable.
126
127 · backup_file
128
129 · base
130
131 · build_pod_queue
132
133 · process_pod_queue
134
135 · valid_pod_syntax
136
138 Efficiency concerns
139 The "tidy_files()" subroutine does a number of highly inefficient
140 things. Each file is opened and closed at least 3 different times as it
141 is passed through a number of different modules to see if it meets the
142 processing criteria. This shouldn't be a major performance issue with
143 an modern OS's VM subsystem but it still leaves much to be desired.
144 When doing "inplace" file reformatting a complete copy of the original
145 file and the updated file and held in memory for comparison. Thus you
146 are limited to reformatting Pod documents " < ( available_system_memory
147 / 2 )".
148
150 Pod files not identified
151 Due to a bug in the version of "contains_pod" in Pod::Find bundled with
152 Pod::Parser 1.33, Pod containing files will not be detected if the only
153 "=[foo]N" directive is on the first line of the file. For example:
154
155 =head1 foo
156
157 foobarbaz
158
159 =cut
160
161 Would not be detected unless there was a newline before "=head1 foo".
162 See CPAN bug #14871 for a patch to correct Pod::Find. This should be
163 fixed in version 1.34 of Pod::Parser
164
165 Mangled verbatim blocks
166 Unfortunately, the "perldoc" utility doesn't follow perlpodspec for
167 what it considers a verbatim block. As far as "perldoc" is concerned,
168 any line that begins with whitespace is in a verbatim block. While the
169 Pod spec requires that all blocks are separated by a blank line.
170
171 Consider this example:
172
173 =head1 What Would Brian Boitano Do?
174
175 What would Brian Boitano do
176 If he was here right now?
177 He'd make a plan and he'd follow through
178 That's what Brian Boitano'd do
179 When Brian Boitano was in the olympics
180 Skating for the gold
181 He'd do sound cows and a triple relux
182 wearin a blindfold
183
184 =cut
185
186 "perldoc" incorrectly considers the second paragraph to be indented and
187 would display it as one might be expecting. However, "podtidy" would
188 turn it into this:
189
190 =head1 What Would Brian Boitano Do?
191
192 What would Brian Boitano do If he was here right now? He'd make a plan and
193 he'd follow through That's what Brian Boitano'd do When Brian Boitano was
194 in the olympics Skating for the gold He'd do sound cows and a triple
195 relux wearin a blindfold
196
197 =cut
198
199 If a single blank line is added between the two paragraphs as required
200 by perlpodspec, the original document would look like this:
201
202 =head1 What Would Brian Boitano Do?
203
204 What would Brian Boitano do
205 If he was here right now?
206 He'd make a plan and he'd follow through
207 That's what Brian Boitano'd do
208
209 When Brian Boitano was in the olympics
210 Skating for the gold
211 He'd do sound cows and a triple relux
212 wearin a blindfold
213
214 =cut
215
216 Then the result from "podtidy" would be nice and... well... tidy.
217
218 =head1 What Would Brian Boitano Do?
219
220 What would Brian Boitano do If he was here right now? He'd make a plan and he'd
221 follow through That's what Brian Boitano'd do
222
223 When Brian Boitano was in the olympics
224 Skating for the gold
225 He'd do sound cows and a triple relux
226 wearin a blindfold
227
228 =cut
229
231 Larry Denneau "denneau@ifa.hawaii.edu" reported test failures caused by
232 Module::Build stripping the execute bit from scripts/podtidy.
233
234 Grant McLean "grant@mclean.net.nz" caught a grammatical error in the
235 documentation.
236
237 Michael Cartmell "Michael.Cartmell@thomson.com" provided some
238 grammatical corrections and a patch to fix
239 "Pod::Tidy::build_pod_queue()" tests on Win32, reporting test failures
240 on Win32 caused by differing newline encodings, and reporting CPANPLUS
241 playing badly with Module::Build's "build_requires".
242
243 Hanno Hecker <vetinari@ankh-morp.org> provided a patch to allow the
244 column width to specified in both the Pod::Tidy library and "podtidy"
245 utility.
246
248 Please contact the author directly via e-mail.
249
251 Joshua Hoblitt "jhoblitt@cpan.org"
252
254 Copyright (c) 2005 Joshua Hoblitt. All rights reserved. This program
255 is free software; you can redistribute it and/or modify it under the
256 same terms as Perl itself.
257
258 The full text of the licenses can be found in the LICENSE file included
259 with this module, or in perlartistic and perlgpl Pods as supplied with
260 Perl 5.8.1 and later.
261
263 podtidy, Pod::Wrap::Pretty, podwrap, Pod::Wrap, Perl::Tidy
264
265
266
267perl v5.28.0 2018-07-15 Pod::Tidy(3)