]> git.donarmstrong.com Git - perltidy.git/blob - CHANGES.md
New upstream version 20220217
[perltidy.git] / CHANGES.md
1 # Perltidy Change Log
2
3 ## 2022 02 17
4
5     - A new flag, --encode-output-strings, or -eos, has been added to resolve
6       issue git #83. This issue involves the interface between Perl::Tidy and
7       calling programs, and Code::TidyAll (tidyall) in particular.  The problem
8       is that perltidy by default returns decoded character strings, but
9       tidyall expects encoded strings.  This flag provides a fix for that.
10
11       So, tidyall users who process encoded (utf8) files should update to this
12       version of Perl::Tidy and use -eos for tidyall.  For further info see:
13
14       https://github.com/houseabsolute/perl-code-tidyall/issues/84, and
15       https://github.com/perltidy/perltidy/issues/83
16
17       If there are other applications having utf8 problems at the interface
18       with Perl::Tidy, this flag probably may need to be set.
19
20     - The default value of the new flag, --encode-output-strings, -eos, is currently
21       -neos BUT THIS MAY CHANGE in a future release because the current
22       default is inconvenient.  So authors of programs which receive character
23       strings back from Perl::Tidy should set this flag, if necessary,
24       to avoid any problems when the default changes.  For more information see the
25       above links and the Perl::Tidy man pages for example coding.
26
27     - The possible values of the string 's' for the flag '--character-encoding=s'
28       have been limited to 'utf8' (or UTF-8), 'none', or 'guess'.  Previously an
29       arbitrary encoding could also be specified, but as a result of discussions
30       regarding git #83 it became clear that this could cause trouble
31       since the output encoding was still restricted to UTF-8. Users
32       who need to work in other encodings can write a short program calling
33       Perl::Tidy with pre- and post-processing to handle encoding/decoding.
34
35     - A new flag --break-after-labels=i, or -bal=i, was added for git #86.  This
36       controls line breaks after labels, to provide a uniform style, as follows:
37
38             -bal=0 follows the input line breaks [DEFAULT]
39             -bal=1 always break after a label
40             -bal=2 never break after a label
41
42       For example:
43
44           # perltidy -bal=1
45           INIT:
46             {
47                 $xx = 1.234;
48             }
49
50           # perltidy -bal=2
51           INIT: {
52                 $xx = 1.234;
53             }
54
55     - Fix issue git #82, an error handling something like ${bareword} in a
56       possible indirect object location. Perl allows this, now perltidy does too.
57
58     - The flags -kbb=s or --keep-old-breakpoints-before=s, and its counterpart
59       -kba=s or --keep-old-breakpoints-after=s have expanded functionality
60       for the container tokens: { [ ( } ] ).  The updated man pages have
61       details.
62
63     - Two new flags have been added to provide finer vertical alignment control,
64       --valign-exclusion-list=s (-vxl=s) and  --valign-inclusion-list=s (-vil=s).
65       This has been requested several times, most recently in git #79, and it
66       finally got done.  For example, -vil='=>' means just align on '=>'.
67
68     - A new flag -gal=s, --grep-alias-list=s, has been added as suggested in
69       git #77.  This allows code blocks passed to list operator functions to
70       be formatted in the same way as a code block passed to grep, map, or sort.
71       By default, the following list operators in List::Util are included:
72
73         all any first none notall reduce reductions
74
75       They can be changed with the flag -gaxl=s, -grep-alias-exclusion-list=s
76
77     - A new flag -xlp has been added which can be set to avoid most of the
78       limitations of the -lp flag regarding side comments, blank lines, and
79       code blocks.  See the man pages for more info. This fixes git #64 and git #74.
80       The older -lp flag still works.
81
82     - A new flag -lpil=s, --line-up-parentheses-inclusion-list=s, has been added
83       as an alternative to -lpxl=s, --line-up-parentheses-exclusion-list=s.
84       It supplies equivalent information but is much easier to describe and use.
85       It works for both the older -lp version and the newer -xlp.
86
87     - The coding for the older -lp flag has been updated to avoid some problems
88       and limitations.  The new coding allows the -lp indentation style to
89       mix smoothly with the standard indentation in a single file.  Some problems
90       where -lp and -xci flags were not working well together have been fixed, such
91       as happened in issue rt140025.  As a result of these updates some minor
92       changes in existing code using the -lp style may occur.
93
94     - This version of perltidy was stress-tested for many cpu hours with
95       random input parameters. No failures to converge, internal fault checks,
96       undefined variable references or other irregularities were seen.
97
98     - Numerous minor fixes have been made, mostly very rare formatting
99       instabilities found in random testing.
100
101 ## 2021 10 29
102
103     - No significant bugs have been found since the last release, but several
104       minor issues have been fixed.  Vertical alignment has been improved for
105       lists of call args which are not contained within parens (next item).
106
107     - Vertical alignment of function calls without parens has been improved with
108       the goal of making vertical alignment essentially the same with or
109       without parens around the call args.  Some examples:
110
111         # OLD
112         mkTextConfig $c, $x, $y, -anchor => 'se', $color;
113         mkTextConfig $c, $x + 30, $y, -anchor => 's',  $color;
114         mkTextConfig $c, $x + 60, $y, -anchor => 'sw', $color;
115         mkTextConfig $c, $x, $y + 30, -anchor => 'e', $color;
116
117         # NEW
118         mkTextConfig $c, $x,      $y,      -anchor => 'se', $color;
119         mkTextConfig $c, $x + 30, $y,      -anchor => 's',  $color;
120         mkTextConfig $c, $x + 60, $y,      -anchor => 'sw', $color;
121         mkTextConfig $c, $x,      $y + 30, -anchor => 'e',  $color;
122
123         # OLD
124         is id_2obj($id), undef, "unregistered object not retrieved";
125         is scalar keys %$ob_reg, 0, "object registry empty";
126         is register($obj), $obj, "object returned by register";
127         is scalar keys %$ob_reg, 1, "object registry nonempty";
128         is id_2obj($id), $obj, "registered object retrieved";
129
130         # NEW
131         is id_2obj($id),         undef, "unregistered object not retrieved";
132         is scalar keys %$ob_reg, 0,     "object registry empty";
133         is register($obj),       $obj,  "object returned by register";
134         is scalar keys %$ob_reg, 1,     "object registry nonempty";
135         is id_2obj($id),         $obj,  "registered object retrieved";
136
137       This will cause some changes in alignment, hopefully for the better,
138       particularly in test code which often uses numerous parenless function
139       calls with functions like 'ok', 'is', 'is_deeply', ....
140
141     - Two new parameters were added to control the block types to which the
142       -bl (--opening-brace-on-new-line) flag applies.  The new parameters are
143       -block-left-list=s, or -bll=s, and --block-left-exclusion-list=s,
144       or -blxl=s.  Previously the -bl flag was 'hardwired' to apply to
145       nearly all blocks. The default values of the new parameters
146       retain the the old default behavior but allow it to be changed.
147
148     - The default behavior of the -bli (-brace-left-and-indent) flag has changed
149       slightly.  Previously, if you set -bli, then the -bl flag would also
150       automatically be set.  Consequently, block types which were not included
151       in the default list for -bli would get -bl formatting.  This is no longer done,
152       and these two styles are now controlled independently.  The manual describes
153       the controls.  If you want to recover the exact previous default behavior of
154       the -bli then add the -bl flag.
155
156     - A partial fix was made for issue for git #74. The -lp formatting style was
157       being lost when a one-line anonymous sub was followed by a closing brace.
158
159     - Fixed issue git #73, in which the -nfpva flag was not working correctly.
160       Some unwanted vertical alignments of spaced function perens
161       were being made.
162
163     - Updated the man pages to clarify the flags -valign and -novalign
164       for turning vertical alignment on and off (issue git #72).
165       Added parameters -vc -vsc -vbc for separately turning off vertical
166       alignment of code, side comments and block comments.
167
168     - Fixed issue git #68, where a blank line following a closing code-skipping
169       comment, '#>>V', could be lost.
170
171     - This version runs 10 to 15 percent faster on large files than the
172       previous release due to optimizations made with the help of NYTProf.
173
174     - This version of perltidy was stress-tested for many cpu hours with
175       random input parameters. No instabilities,  internal fault checks,
176       undefined variable references or other irregularities were seen.
177
178     - Numerous minor fixes have been made, mostly very rare formatting instabilities
179       found in random testing. An effort has been made to minimize changes to
180       existing formatting that these fixes produce, but occasional changes
181       may occur. Many of these updates are listed at:
182
183            https://github.com/perltidy/perltidy/blob/master/local-docs/BugLog.pod
184
185 ## 2021 07 17
186
187     - This release is being made mainly because of the next item, in which an
188       error message about an uninitialized value error message could be produced
189       in certain cases when format-skipping is used.  The error message was
190       annoying but harmless to formatting.
191
192     - Fixed an undefined variable message, see git #67. When a format skipping
193       comment '#<<' is placed before the first line of code in a script, a
194       message 'Use of uninitialized value $Ktoken_vars in numeric ...' can
195       occur.
196
197     - A warning will no longer be given if a script has an opening code-skipping
198       comment '#<<V' which is not terminated with a closing comment '#>>V'. This
199       makes code-skipping and format-skipping behave in a similar way: an
200       opening comment without a corresponding closing comment will cause
201       the rest of a file to be skipped.  If there is a question about which lines
202       are skipped, a .LOG file can be produced with the -g flag and it will have
203       this information.
204
205     - Removed the limit on -ci=n when -xci is set, reference: rt #136415.
206       This update removes a limit in the previous two versions in which the
207       value of -ci=n was limited to the value of -i=n when -xci was set.
208       This limit had been placed to avoid some formatting instabilities,
209       but recent coding improvements allow the limit to be removed.
210
211     - The -wn and -bbxx=n flags were not working together correctly. This has
212       been fixed.
213
214     - This version may produce occasional differences in formatting compared to
215       previous versions, mainly for lines which are near the specified line
216       length limit.  This is due to ongoing efforts to eliminate edge cases of
217       formatting instability.
218
219     - Numerous minor fixes have been made. A complete list is at:
220
221            https://github.com/perltidy/perltidy/blob/master/local-docs/BugLog.pod
222
223 ## 2021 06 25
224
225     - This release adds several new requested parameters.  No significant bugs have
226       been found since the last release, but a number of minor problems have been
227       corrected.
228
229     - Added a new option '--code-skipping', requested in git #65, in which code
230       between comment lines '#<<V' and '#>>V' is passed verbatim to the output
231       stream without error checking.  It is simmilar to --format-skipping
232       but there is no error checking of the skipped code. This can be useful for
233       skipping past code which employs an extended syntax.
234
235     - Added a new option for closing paren placement, -vtc=3, requested in rt #136417.
236
237     - Added flag -atnl, --add-terminal-newline, to help issue git #58.
238       This flag tells perltidy to terminate the last line of the output stream
239       with a newline character, regardless of whether or not the input stream
240       was terminated with a newline character.  This is the default.
241       If this flag is negated, with -natnl, then perltidy will add a terminal
242       newline character to the the output stream only if the input
243       stream is terminated with a newline.
244
245     - Some nested structures formatted with the -lp indentation option may have
246       some changes in indentation.  This is due to updates which were made to
247       prevent formatting instability when line lengths are limited by the maximum line
248       length. Most scripts will not be affected. If this causes unwanted formatting
249       changes, try increasing the --maximum-line-length by a few characters.
250
251     - Numerous minor fixes have been made. A complete list is at:
252
253            https://github.com/perltidy/perltidy/blob/master/local-docs/BugLog.pod
254
255 ## 2021 04 02
256
257     - This release fixes several non-critical bugs which have been found since the last
258     release.  An effort has been made to keep existing formatting unchanged.
259
260     - Fixed issue git #57 regarding uninitialized warning flag.
261
262     - Added experimental flag -lpxl=s requested in issue git #56 to provide some
263     control over which containers get -lp indentation.
264
265     - Fixed issue git #55 regarding lack of coordination of the --break-before-xxx
266     flags and the --line-up-parens flag.
267
268     - Fixed issue git #54 regarding irregular application of the --break-before-paren
269     and similar --break-before-xxx flags, in which lists without commas were not
270     being formatted according to these flags.
271
272     - Fixed issue git #53. A flag was added to turn off alignment of spaced function
273     parens.  If the --space-function-paren, -sfp flag is set, a side-effect is that the
274     spaced function parens may get vertically aligned.  This can be undesirable,
275     so a new parameter '--function-paren-vertical-alignment', or '-fpva', has been
276     added to turn this vertical alignment off. The default is '-fpva', so that
277     existing formatting is not changed.  Use '-nfpva' to turn off unwanted
278     vertical alignment.  To illustrate the possibilities:
279
280         # perltidy [default]
281         myfun( $aaa, $b, $cc );
282         mylongfun( $a, $b, $c );
283
284         # perltidy -sfp
285         myfun     ( $aaa, $b, $cc );
286         mylongfun ( $a, $b, $c );
287
288         # perltidy -sfp -nfpva
289         myfun ( $aaa, $b, $cc );
290         mylongfun ( $a, $b, $c );
291
292     - Fixed issue git #51, a closing qw bare paren was not being outdented when
293     the -nodelete-old-newlines flag was set.
294
295     - Fixed numerous edge cases involving unusual parameter combinations which
296       could cause alternating output states.  Most scripts will not be
297       changed by these fixes.
298
299     - A more complete list of updates is at
300
301            https://github.com/perltidy/perltidy/blob/master/local-docs/BugLog.pod
302
303 ## 2021 01 11
304
305     - Fixed issue git #49, -se breaks warnings exit status behavior.
306     The exit status flag was not always being set when the -se flag was set.
307
308     - Some improvements have been made in the method for aligning side comments.
309     One of the problems that was fixed is that there was a tendency for side comment
310     placement to drift to the right in long scripts.  Programs with side comments
311     may have a few changes.
312
313     - Some improvements have been made in formatting qw quoted lists.  This
314     fixes issue git #51, in which closing qw pattern delimiters not always
315     following the settings specified by the --closing-token-indentation=n settings.
316     Now qw closing delimiters ')', '}' and ']' follow these flags, and the
317     delimiter '>' follows the flag for ')'.  Other qw pattern delimiters remain
318     indented as the are now.  This change will cause some small formatting changes
319     in some existing programs.
320
321     - Another change involving qw lists is that they get full indentation,
322     rather than just continuation indentation, if
323
324          (1) the closing delimiter is one of } ) ] > and is on a separate line,
325          (2) the opening delimiter  (i.e. 'qw{' ) is also on a separate line, and
326          (3) the -xci flag (--extended-continuation-indentation) is set.
327
328     This improves formatting when qw lists are contained in other lists. For example,
329
330             # OLD: perltidy
331             foreach $color (
332                 qw(
333                 AntiqueWhite3 Bisque1 Bisque2 Bisque3 Bisque4
334                 SlateBlue3 RoyalBlue1 SteelBlue2 DeepSkyBlue3
335                 ),
336                 qw(
337                 LightBlue1 DarkSlateGray1 Aquamarine2 DarkSeaGreen2
338                 SeaGreen1 Yellow1 IndianRed1 IndianRed2 Tan1 Tan4
339                 )
340               )
341
342             # NEW, perltidy -xci
343             foreach $color (
344                 qw(
345                     AntiqueWhite3 Bisque1 Bisque2 Bisque3 Bisque4
346                     SlateBlue3 RoyalBlue1 SteelBlue2 DeepSkyBlue3
347                 ),
348                 qw(
349                     LightBlue1 DarkSlateGray1 Aquamarine2 DarkSeaGreen2
350                     SeaGreen1 Yellow1 IndianRed1 IndianRed2 Tan1 Tan4
351                 )
352               )
353
354     - Some minor improvements have been made to the rules for formatting
355     some edge vertical alignment cases, usually involving two dissimilar lines.
356
357     - A more complete list of updates is at
358
359            https://github.com/perltidy/perltidy/blob/master/local-docs/BugLog.pod
360
361 ## 2020 12 07
362
363     - Fixed issue git #47, incorrect welding of anonymous subs.
364       An incorrect weld format was being made when the --weld-nested-containers option
365       (-wn) was used in to format a function which returns a list of anonymous subs.
366       For example, the following snippet was incorrectly being welded.
367
368     $promises[$i]->then(
369         sub { $all->resolve(@_); () },
370         sub {
371             $results->[$i] = [@_];
372             $all->reject(@$results) if --$remaining <= 0;
373             return ();
374         }
375     );
376
377     This was due to an error introduced in v20201201 related to parsing sub
378     signatures.  Reformatting with the current version will fix the problem.
379
380 ## 2020 12 01
381
382     - This release is being made primarily to make available a several new formatting
383       parameters, in particular -xci, -kbb=s, -kba=s, and -wnxl=s. No significant
384       bugs have been found since the previous release, but numerous minor issues have
385       been found and fixed as listed below.
386
387     - This version is about 20% faster than the previous version due to optimizations
388       made with the help of Devel::NYTProf.
389
390     - Added flag -wnxl=s, --weld-nested-exclusion-list=s, to provide control which containers
391       are welded with the --weld-nested-containers parameter.  This is related to issue git #45.
392
393     - Merged pull request git #46 which fixes the docs regarding the -fse flag.
394
395     - Fixed issue git #45, -vtc=n flag was ignored when -wn was set.
396
397     - implement request RT #133649, delete-old-newlines selectively. Two parameters,
398
399       -kbb=s or --keep-old-breakpoints-before=s, and
400       -kba=s or --keep-old-breakpoints-after=s
401
402       were added to request that old breakpoints be kept before or after
403       selected token types.  For example, -kbb='=>' means that newlines before
404       fat commas should be kept.
405  
406     - Fix git #44, fix exit status for assert-tidy/untidy.  The exit status was
407       always 0 for --assert-tidy if the user had turned off all error messages with
408       the -quiet flag.  This has been fixed.
409
410     - Add flag -maxfs=n, --maximum-file-size-mb=n.  This parameter is provided to
411       avoid causing system problems by accidentally attempting to format an 
412       extremely large data file. The default is n=10.  The command to increase 
413       the limit to 20 MB for example would be  -mfs=20.  This only applies to
414       files specified by filename on the command line.
415
416     - Skip formatting if there are too many indentation level errors.  This is 
417       controlled with -maxle=n, --maximum-level-errors=n.  This means that if 
418       the ending indentation differs from the starting indentation by more than
419       n levels, the file will be output verbatim. The default is n=1. 
420       To skip this check, set n=-1 or set n to a large number.
421
422     - A related new flag, --maximum-unexpected-errors=n, or -maxue=n, is available
423       but is off by default.
424
425     - Add flag -xci, --extended-continuation-indentation, regarding issue git #28
426       This flag causes continuation indentation to "extend" deeper into structures.
427       Since this is a fairly new flag, the default is -nxci to avoid disturbing 
428       existing formatting.  BUT you will probably see some improved formatting
429       in complex data structures by setting this flag if you currently use -ci=n 
430       and -i=n with the same value of 'n' (as is the case if you use -pbp, 
431       --perl-best-practices, where n=4).
432
433     - Fix issue git #42, clarify how --break-at-old-logical-breakpoints works.
434       The man page was updated to note that it does not cause all logical breakpoints
435       to be replicated in the output file.
436
437     - Fix issue git #41, typo in manual regarding -fsb.
438
439     - Fix issue git #40: when using the -bli option, a closing brace followed by 
440       a semicolon was not being indented.  This applies to braces which require 
441       semicolons, such as a 'do' block.
442
443     - Added 'state' as a keyword.
444
445     - A better test for convergence has been added. When iterations are requested,
446       the new test will stop after the first pass if no changes in line break
447       locations are made.  Previously, file checksums were used and required at least two 
448       passes to verify convergence unless no formatting changes were made.  With the new test, 
449       only a single pass is needed when formatting changes are limited to adjustments of 
450       indentation and whitespace on the lines of code.  Extensive testing has been made to
451       verify the correctness of the new convergence test.
452
453     - Line breaks are now automatically placed after 'use overload' to 
454       improve formatting when there are numerous overloaded operators.  For
455       example
456  
457         use overload
458           '+' => sub {
459           ...
460
461     - A number of minor problems with parsing signatures and prototypes have
462       been corrected, particularly multi-line signatures. Some signatures 
463       had previously been parsed as if they were prototypes, which meant the 
464       normal spacing rules were not applied.  For example
465    
466       OLD:
467         sub echo ($message= 'Hello World!' ) {
468             ...;
469         }
470
471       NEW:
472         sub echo ( $message = 'Hello World!' ) {
473             ...;
474         }
475
476     - Numerous minor issues that the average user would not encounter were found
477       and fixed. They can be seen in the more complete list of updates at 
478
479            https://github.com/perltidy/perltidy/blob/master/local-docs/BugLog.pod
480
481 ## 2020 10 01
482
483     - Robustness of perltidy has been significantly improved.  Updating is recommended. Continual 
484       automated testing runs began about 1 Sep 2020 and numerous issues have been found and fixed. 
485       Many involve references to uninitialized variables when perltidy is fed random text and random
486       control parameters. 
487
488     - Added the token '->' to the list of alignment tokens, as suggested in git
489       #39, so that it can be vertically aligned if a space is placed before them with -wls='->'.
490
491     - Added parameters -bbhb=n (--break-before-hash-brace=n), -bbsb=n (--break-before-square-bracket=n),
492       and -bbp=n (--break-before-paren=n) suggested in git #38.  These provide control over the
493       opening container token of a multiple-line list.  Related new parameters -bbhbi=n, -bbsbi=n, -bbpi=n
494       control indentation of these tokens.
495
496     - Added keyword 'isa'.
497
498 ## 2020 09 07
499
500     - Fixed bug git #37, an error when the combination -scbb -csc was used.
501       It occurs in perltidy versions 20200110, 20200619, and 20200822.  What happens is
502       that when two consecutive lines with isolated closing braces had new side
503       comments generated by the -csc parameter, a separating newline was missing.
504       The resulting script will not then run, but worse, if it is reformatted with
505       the same parameters then closing side comments could be overwritten and data
506       lost. 
507
508       This problem was found during automated random testing.  The parameter
509       -scbb is rarely used, which is probably why this has not been reported.  Please
510       upgrade your version.
511
512     - Added parameter --non-indenting-braces, or -nib, which prevents
513       code from indenting one level if it follows an opening brace marked 
514       with a special side comment, '#<<<'.  For example,
515
516                     { #<<<   a closure to contain lexical vars
517
518                     my $var;  # this line does not indent
519
520                     }
521
522                     # this line cannot 'see' $var;
523
524       This is on by default.  If your code happens to have some
525       opening braces followed by '#<<<', and you
526       don't want this, you can use -nnib to deactivate it. 
527
528     - Side comment locations reset at a line ending in a level 0 open
529       block, such as when a new multi-line sub begins.  This is intended to 
530       help keep side comments from drifting to far to the right.
531
532 ## 2020 08 22
533
534     - Fix RT #133166, encoding not set for -st.  Also reported as RT #133171
535       and git #35. 
536
537       This is a significant bug in version 20200616 which can corrupt data if
538       perltidy is run as a filter on encoded text.
539 **Please upgrade**
540
541     - Fix issue RT #133161, perltidy -html was not working on pod
542
543     - Fix issue git #33, allow control of space after '->'
544
545     - Vertical alignment has been improved. Numerous minor issues have
546       been fixed.
547
548     - Formatting with the -lp option is improved. 
549
550     - Fixed issue git #32, misparse of bare 'ref' in ternary
551
552     - When --assert-tidy is used and triggers an error, the first difference
553       between input and output files is shown in the error output. This is
554       a partial response to issue git #30.
555
556 ## 2020 06 19
557
558     - Added support for Switch::Plain syntax, issue git #31.
559
560     - Fixed minor problem where trailing 'unless' clauses were not 
561       getting vertically aligned.
562
563     - Added a parameter --logical-padding or -lop to allow logical padding
564       to be turned off.  Requested by git #29. This flag is on by default.
565       The man pages have examples.
566
567     - Added a parameter -kpit=n to control spaces inside of parens following
568       certain keywords, requested in git#26. This flag is off by default.
569
570     - Added fix for git#25, improve vertical alignment for long lists with
571       varying numbers of items per line.
572
573     - calls to the module Perl::Tidy can now capture any output produced
574       by a debug flag or one of the 'tee' flags through the new 'debugfile' and
575       'teefile' call parameters.  These output streams are rarely used but
576       they are now treated the same as any 'logfile' stream.
577
578     - add option --break-at-old-semicolon-breakpoints', -bos, requested 
579       in RT#131644.  This flag will keep lines beginning with a semicolon.
580
581     - Added --use-unicode-gcstring to control use of Unicode::GCString for
582       evaluating character widths of encoded data.  The default is 
583       not to use this (--nouse-unicode-gcstring). If this flag is set,
584       perltidy will look for Unicode::GCString and, if found, will use it 
585       to evaluate character display widths.  This can improve displayed
586       vertical alignment for files with wide characters.  It is a nice
587       feature but it is off by default to avoid conflicting formatting
588       when there are multiple developers.  Perltidy installation does not 
589       require Unicode::GCString, so users wanting to use this feature need 
590       set this flag and also to install Unicode::GCString separately.
591
592     - Added --character-encoding=guess or -guess to have perltidy guess
593       if a file (or other input stream) is encoded as -utf8 or some 
594       other single-byte encoding. This is useful when processing a mixture 
595       of file types, such as utf8 and latin-1.
596
597       Please Note: The default encoding has been set to be 'guess'
598       instead of 'none'. This seems like the best default, since 
599       it allows perltidy work properly with both
600       utf8 files and older latin-1 files.  The guess mode uses Encode::Guess,
601       which is included in standard perl distributions, and only tries to 
602       guess if a file is utf8 or not, never any other encoding.  If the guess is 
603       utf8, and if the file successfully decodes as utf8, then it the encoding 
604       is assumed to be utf8.  Otherwise, no encoding is assumed. 
605       If you do not want to use this new default guess mode, or have a 
606       problem with it, you can set --character-encoding=none (the previous 
607       default) or --character-encoding=utf8 (if you deal with utf8 files).
608
609     - Specific encodings of input files other than utf8 may now be given, for
610       example --character-encoding=euc-jp.
611
612     - Fix for git#22, Preserve function signature on a single line. An
613       unwanted line break was being introduced when a closing signature paren
614       followed a closing do brace.
615
616     - Fix RT#132059, the -dac parameter was not working and caused an error exit
617
618     - When -utf8 is used, any error output is encoded as utf8
619
620     - Fix for git#19, adjust line break around an 'xor'
621
622     - Fix for git#18, added warning for missing comma before unknown bare word.
623
624 ## 2020 01 10
625
626     - This release adds a flag to control the feature RT#130394 (allow short nested blocks)
627       introduced in the previous release.  Unfortunately that feature breaks 
628       RPerl installations, so a control flag has been introduced and that feature is now
629       off by default.  The flag is:
630
631       --one-line-block-nesting=n, or -olbn=n, where n is an integer as follows: 
632
633       -olbn=0 break nested one-line blocks into multiple lines [new DEFAULT]
634       -olbn=1 stable; keep existing nested-one line blocks intact [previous DEFAULT]
635
636       For example, consider this input line:
637
638         foreach (@list) { if ($_ eq $asked_for) { last } ++$found }
639
640       The new default behavior (-olbn=0), and behavior prior to version 20191203, is to break it into multiple lines:
641
642         foreach (@list) {
643             if ( $_ eq $asked_for ) { last }
644             ++$found;
645         }
646
647       To keep nested one-line blocks such as this on a single line you can add the parameter -olbn=1.
648
649     - Fixed issue RT#131288: parse error for un-prototyped constant function without parenthesized
650       call parameters followed by ternary.
651
652     - Fixed issue RT#131360, installation documentation.  Added a note that the binary 
653       'perltidy' comes with the Perl::Tidy module. They can both normally be installed with 
654       'cpanm Perl::Tidy'
655
656
657 ## 2019 12 03
658
659     - Fixed issue RT#131115: -bli option not working correctly.
660       Closing braces were not indented in some cases due to a glitch
661       introduced in version 20181120.
662
663     - Fixed issue RT#130394: Allow short nested blocks.  Given the following
664
665         $factorial = sub { reduce { $a * $b } 1 .. 11 };
666    
667       Previous versions would always break the sub block because it
668       contains another block (the reduce block).  The fix keeps
669       short one-line blocks such as this intact.
670
671     - Implement issue RT#130640: Allow different subroutine keywords.
672       Added a flag --sub-alias-list=s or -sal=s, where s is a string with
673       one or more aliases for 'sub', separated by spaces or commas.
674       For example,
675
676         perltidy -sal='method fun' 
677
678       will cause the perltidy to treat the words 'method' and 'fun' to be
679       treated the same as if they were 'sub'.
680
681     - Added flag --space-prototype-paren=i, or -spp=i, to control spacing 
682       before the opening paren of a prototype, where i=0, 1, or 2:
683       i=0 no space
684       i=1 follow input [current and default]
685       i=2 always space
686
687       Previously, perltidy always followed the input.
688       For example, given the following input 
689
690          sub usage();
691
692       The result will be:
693         sub usage();    # i=0 [no space]
694         sub usage();    # i=1 [default; follows input]
695         sub usage ();   # i=2 [space]
696
697     - Fixed issue git#16, minor vertical alignment issue.
698
699     - Fixed issue git#10, minor conflict of -wn and -ce
700
701     - Improved some vertical alignments involving two lines.
702
703
704 ## 2019 09 15
705
706     - fixed issue RT#130344: false warning "operator in print statement" 
707       for "use lib". 
708
709     - fixed issue RT#130304: standard error output should include filename.
710       When perltidy error messages are directed to the standard error output 
711       with -se or --standard-error-output, the message lines now have a prefix 
712       'filename:' for clarification in case multiple files 
713       are processed, where 'filename' is the name of the input file.  If 
714       input is from the standard input the displayed filename is '<stdin>', 
715       and if it is from a data structure then displayed filename 
716       is '<source_stream>'.
717
718     - implement issue RT#130425: check mode.  A new flag '--assert-tidy'
719       will cause an error message if the output script is not identical to
720       the input script. For completeness, the opposite flag '--assert-untidy'
721       has also been added.  The next item, RT#130297, insures that the script
722       will exit with a non-zero exit flag if the assertion fails.
723
724     - fixed issue RT#130297; the perltidy script now exits with a nonzero exit 
725       status if it wrote to the standard error output. Prevously only fatal
726       run errors produced a non-zero exit flag. Now, even non-fatal messages
727       requested with the -w flag will cause a non-zero exit flag.  The exit
728       flag now has these values:
729
730          0 = no errors
731          1 = perltidy could not run to completion due to errors
732          2 = perltidy ran to completion with error messages
733
734     - added warning message for RT#130008, which warns of conflicting input
735       parameters -iob and -bom or -boc.
736
737     - fixed RT#129850; concerning a space between a closing block brace and
738       opening bracket or brace, as occurs before the '[' in this line:
739
740        my @addunix = map { File::Spec::Unix->catfile( @ROOT, @$_ ) } ['b'];
741
742       Formerly, any space was removed. Now it is optional, and the output will
743       follow the input.
744
745     - fixed issue git#13, needless trailing whitespace in error message
746
747     - fixed issue git#9: if the -ce (--cuddled-else) flag is used,
748       do not try to form new one line blocks for a block type 
749       specified with -cbl, particularly map, sort, grep
750
751     - iteration speedup for unchanged code.  Previously, when iterations were
752       requested, at least two formatting passes were made. Now just a single pass
753       is made if the formatted code is identical to the input code.
754
755     - some improved vertical alignments
756
757 ## 2019 06 01
758
759     - rt #128477: Prevent inconsistent owner/group and setuid/setgid bits. 
760       In the -b (--backup-and-modify-in-place) mode, an attempt is made to set ownership
761       of the output file equal to the input file, if they differ.
762       In all cases, if the final output file ownership differs from input file, any setuid/setgid bits are cleared.
763
764     - Added option -bom  (--break-at-old-method-breakpoints) by
765       merrillymeredith which preserves breakpoints of method chains. Modified to also handle a cuddled call style.
766
767     - Merged patch to fix Windows EOL translation error with UTF-8 written by
768       Ron Ivy. This update prevents automatic conversion to 'DOS' CRLF line
769       endings.  Also, Windows system testing at the appveyor site is working again.
770
771     - RT #128280, added flag --one-line-block-semicolons=n (-olbs=n) 
772       to control semicolons in one-line blocks.  The values of n are:
773         n=0 means no semicolons termininating simple one-line blocks
774         n=1 means stable; do not change from input file [DEFAULT and current]
775         n=2 means always add semicolons in one-line blocks
776       The current behavior corresponds to the default n=1.
777
778     - RT #128216, Minor update to prevent inserting unwanted blank line at
779       indentation level change.  This should not change existing scripts.
780
781     - RT #81852: Improved indentation when quoted word (qw) lists are 
782       nested within other containers using the --weld-nested (-wn) flag.
783       The example given previously (below) is now closer to what it would
784       be with a simple list instead of qw:
785
786       # perltidy -wn
787       use_all_ok( qw{
788           PPI
789           PPI::Tokenizer
790           PPI::Lexer
791           PPI::Dumper
792           PPI::Find
793           PPI::Normal
794           PPI::Util
795           PPI::Cache
796       } );
797
798     - RT#12764, introduced new feature allowing placement of blanks around
799       sequences of selected keywords. This can be activated with the -kgb* 
800       series of parameters described in the manual.
801
802     - Rewrote vertical algnment module.  It is better at finding
803       patterns in complex code. For example,
804
805         OLD:
806            /^-std$/ && do { $std       = 1;     next; };
807            /^--$/   && do { @link_args = @argv; last; };
808            /^-I(.*)/ && do { $path = $1 || shift @argv; next; };
809
810         NEW:
811            /^-std$/  && do { $std       = 1;                 next; };
812            /^--$/    && do { @link_args = @argv;             last; };
813            /^-I(.*)/ && do { $path      = $1 || shift @argv; next; };
814
815     - Add repository URLs to META files 
816
817     - RT #118553, "leave only one newline at end of file". This option was not 
818       added because of undesirable side effects, but a new filter script
819       was added which can do this, "examples/delete_ending_blank_lines.pl".
820
821 ## 2018 11 20
822
823     - fix RT#127736 Perl-Tidy-20181119 has the EXE_FILES entry commented out in
824       Makefile.PL so it doesn't install the perltidy script or its manpage.
825
826
827 ## 2018 11 19
828
829     - Removed test case 'filter_example.t' which was causing a failure on a
830       Windows installation for unknown reasons, possibly due to an unexpected
831       perltidyrc being read by the test script.  Added VERSION numbers to all
832       new modules.
833
834 ## 2018 11 17
835
836     - Fixed RT #126965, in which a ternary operator was misparsed if immediately
837       following a function call without arguments, such as: 
838         my $restrict_customer = shift ? 1 : 0;
839
840     - Fixed RT #125012: bug in -mangle --delete-all-comments
841       A needed blank space before bareword tokens was being removed when comments 
842       were deleted
843
844     - Fixed RT #81852: Stacked containers and quoting operators. Quoted words
845       (qw) delimited by container tokens ('{', '[', '(', '<') are now included in
846       the --weld-nested (-wn) flag:
847
848           # perltidy -wn
849           use_all_ok( qw{
850                 PPI
851                 PPI::Tokenizer
852                 PPI::Lexer
853                 PPI::Dumper
854                 PPI::Find
855                 PPI::Normal
856                 PPI::Util
857                 PPI::Cache
858                 } );
859
860     - The cuddled-else (-ce) coding was merged with the new cuddled-block (-cb)
861       coding.  The change is backward compatible and simplifies input.  
862       The --cuddled-block-option=n (-cbo=n) flag now applies to both -ce and -cb 
863       formatting.  In fact the -cb flag is just an alias for -ce now.
864
865     - Fixed RT #124594, license text desc. changed from 'GPL-2.0+' to 'gpl_2'
866
867     - Fixed bug in which a warning about a possible code bug was issued in a
868       script with brace errors. 
869
870     - added option --notimestamp or -nts to eliminate any time stamps in output 
871       files.  This is used to prevent differences in test scripts from causing
872       failure at installation. For example, the -cscw option will put a date
873       stamp on certain closing side comments. We need to avoid this in order
874       to test this feature in an installation test.
875
876     - Fixed bug with the entab option, -et=8, in which the leading space of
877       some lines was was not entabbed.  This happened in code which was adjusted
878       for vertical alignment and in hanging side comments. Thanks to Glenn.
879
880     - Fixed RT #127633, undesirable line break after return when -baao flag is set
881
882     - Fixed RT #127035, vertical alignment. Vertical alignment has been improved 
883       in several ways.  Thanks especially to Michael Wardman and Glenn for sending 
884       helpful snippets. 
885
886       - Alignment of the =~ operators has been reactivated.  
887
888           OLD:
889           $service_profile =~ s/^\s+|\s+$//g;
890           $host_profile =~ s/^\s+|\s+$//g;
891       
892           NEW:
893           $service_profile =~ s/^\s+|\s+$//g;
894           $host_profile    =~ s/^\s+|\s+$//g;
895
896       - Alignment of the // operator has been reactivated.  
897
898           OLD:
899           is( pop // 7,       7, 'pop // ... works' );
900           is( pop() // 7,     0, 'pop() // ... works' );
901           is( pop @ARGV // 7, 3, 'pop @array // ... works' );
902           
903           NEW:
904           is( pop       // 7, 7, 'pop // ... works' );
905           is( pop()     // 7, 0, 'pop() // ... works' );
906           is( pop @ARGV // 7, 3, 'pop @array // ... works' );
907
908       - The rules for alignment of just two lines have been adjusted,
909         hopefully to be a little better overall.  In some cases, two 
910         lines which were previously unaligned are now aligned, and vice-versa.
911
912           OLD:
913           $expect = "1$expect" if $expect =~ /^e/i;
914           $p = "1$p" if defined $p and $p =~ /^e/i;
915       
916           NEW:
917           $expect = "1$expect" if $expect =~ /^e/i;
918           $p      = "1$p"      if defined $p and $p =~ /^e/i;
919
920
921     - RT #106493; source code repository location has been added to docs; it is 
922          https://github.com/perltidy/perltidy
923
924     - The packaging for this version has changed. The Tidy.pm module is much 
925       smaller.  Supporting modules have been split out from it and placed below 
926       it in the path Perl/Tidy/*.
927
928     - A number of new installation test cases have been added. Updates are now
929       continuously tested at Travis CI against versions back to Perl 5.08.
930
931 ## 2018 02 20
932
933     - RT #124469, #124494, perltidy often making empty files.  The previous had
934       an index error causing it to fail, particularly in version 5.18 of Perl.
935
936       Please avoid version 20180219.
937
938 ## 2018 02 19
939
940     - RT #79947, cuddled-else generalization. A new flag -cb provides
941       'cuddled-else' type formatting for an arbitrary type of block chain. The
942       default is try-catch-finally, but this can be modified with the 
943       parameter -cbl. 
944
945     - Fixed RT #124298: add space after ! operator without breaking !! secret 
946       operator
947
948     - RT #123749: numerous minor improvements to the -wn flag were made.  
949
950     - Fixed a problem with convergence tests in which iterations were stopping 
951       prematurely. 
952
953     - Here doc targets for <<~ type here-docs may now have leading whitespace.
954
955     - Fixed RT #124354. The '-indent-only' flag was not working correctly in the 
956       previous release. A bug in version 20180101 caused extra blank lines 
957       to be output.
958
959     - Issue RT #124114. Some improvements were made in vertical alignment
960       involving 'fat commas'.
961
962 ## 2018 01 01
963
964     - Added new flag -wn (--weld-nested-containers) which addresses these issues:
965       RT #123749: Problem with promises; 
966       RT #119970: opening token stacking strange behavior;
967       RT #81853: Can't stack block braces
968
969       This option causes closely nested pairs of opening and closing containers
970       to be "welded" together and essentially be formatted as a single unit,
971       with just one level of indentation.
972
973       Since this is a new flag it is set to be "off" by default but it has given 
974       excellent results in testing. 
975
976       EXAMPLE 1, multiple blocks, default formatting:
977           do {
978               {
979                   next if $x == $y;    # do something here
980               }
981           } until $x++ > $z;
982
983       perltidy -wn
984           do { {
985               next if $x == $y;
986           } } until $x++ > $z;
987
988        EXAMPLE 2, three levels of wrapped function calls, default formatting:
989               p(
990                   em(
991                       conjug(
992                           translate( param('verb') ), param('tense'),
993                           param('person')
994                       )
995                   )
996               );
997
998           # perltidy -wn
999               p( em( conjug(
1000                   translate( param('verb') ),
1001                   param('tense'), param('person')
1002               ) ) );
1003
1004           # EXAMPLE 3, chained method calls, default formatting:
1005           get('http://mojolicious.org')->then(
1006               sub {
1007                   my $mojo = shift;
1008                   say $mojo->res->code;
1009                   return get('http://metacpan.org');
1010               }
1011           )->then(
1012               sub {
1013                   my $cpan = shift;
1014                   say $cpan->res->code;
1015               }
1016           )->catch(
1017               sub {
1018                   my $err = shift;
1019                   warn "Something went wrong: $err";
1020               }
1021           )->wait;
1022
1023           # perltidy -wn
1024           get('http://mojolicious.org')->then( sub {
1025               my $mojo = shift;
1026               say $mojo->res->code;
1027               return get('http://metacpan.org');
1028           } )->then( sub {
1029               my $cpan = shift;
1030               say $cpan->res->code;
1031           } )->catch( sub {
1032               my $err = shift;
1033               warn "Something went wrong: $err";
1034           } )->wait;
1035
1036
1037     - Fixed RT #114359: Missparsing of "print $x ** 0.5;
1038
1039     - Deactivated the --check-syntax flag for better security.  It will be
1040       ignored if set.  
1041
1042     - Corrected minimum perl version from 5.004 to 5.008 based on perlver
1043       report.  The change is required for coding involving wide characters.
1044
1045     - For certain severe errors, the source file will be copied directly to the
1046       output without formatting. These include ending in a quote, ending in a
1047       here doc, and encountering an unidentified character.
1048
1049 ## 2017 12 14
1050
1051     - RT #123749, partial fix.  "Continuation indentation" is removed from lines 
1052       with leading closing parens which are part of a call chain. 
1053       For example, the call to pack() is is now outdented to the starting 
1054       indentation in the following experession:  
1055
1056           # OLD
1057           $mw->Button(
1058               -text    => "New Document",
1059               -command => \&new_document
1060             )->pack(
1061               -side   => 'bottom',
1062               -anchor => 'e'
1063             );
1064
1065           # NEW
1066           $mw->Button(
1067               -text    => "New Document",
1068               -command => \&new_document
1069           )->pack(
1070               -side   => 'bottom',
1071               -anchor => 'e'
1072           );
1073
1074       This modification improves readability of complex expressions, especially
1075       when the user uses the same value for continuation indentation (-ci=n) and 
1076       normal indentation (-i=n).  Perltidy was already programmed to
1077       do this but a minor bug was preventing it.
1078
1079     - RT #123774, added flag to control space between a backslash and a single or
1080       double quote, requested by Robert Rothenberg.  The issue is that lines like
1081
1082          $str1=\"string1";
1083          $str2=\'string2';
1084
1085       confuse syntax highlighters unless a space is left between the backslash and
1086       the quote.
1087
1088       The new flag to control this is -sbq=n (--space-backslash-quote=n), 
1089       where n=0 means no space, n=1 means follow existing code, n=2 means always
1090       space.  The default is n=1, meaning that a space will be retained if there
1091       is one in the source code.
1092
1093     - Fixed RT #123492, support added for indented here doc operator <<~ added 
1094       in v5.26.  Thanks to Chris Weyl for the report.
1095
1096     - Fixed docs; --closing-side-comment-list-string should have been just
1097       --closing-side-comment-list.  Thanks to F.Li.
1098
1099     - Added patch RT #122030] Perl::Tidy sometimes does not call binmode.
1100       Thanks to Irilis Aelae.
1101
1102     - Fixed RT #121959, PERLTIDY doesn't honor the 'three dot' notation for 
1103       locating a config file using environment variables.  Thanks to John 
1104       Wittkowski.
1105
1106     - Minor improvements to formatting, in which some additional vertical
1107       aligmnemt is done. Thanks to Keith Neargarder.
1108
1109     - RT #119588.  Vertical alignment is no longer done for // operator.
1110
1111 ## 2017 05 21
1112
1113     - Fixed debian #862667: failure to check for perltidy.ERR deletion can lead 
1114       to overwriting arbitrary files by symlink attack. Perltidy was continuing
1115       to write files after an unlink failure.  Thanks to Don Armstrong 
1116       for a patch.
1117
1118     - Fixed RT #116344, perltidy fails on certain anonymous hash references:
1119       in the following code snippet the '?' was misparsed as a pattern 
1120       delimiter rather than a ternary operator.
1121           return ref {} ? 1 : 0;
1122
1123     - Fixed RT #113792: misparsing of a fat comma (=>) right after 
1124       the __END__ or __DATA__ tokens.  These keywords were getting
1125       incorrectly quoted by the following => operator.
1126
1127     - Fixed RT #118558. Custom Getopt::Long configuration breaks parsing 
1128       of perltidyrc.  Perltidy was resetting the users configuration too soon.
1129
1130     - Fixed RT #119140, failure to parse double diamond operator.  Code to
1131       handle this new operator has been added.
1132
1133     - Fixed RT #120968.  Fixed problem where -enc=utf8 didn't work 
1134       with --backup-and-modify-in-place. Thanks to Heinz Knutzen for this patch.
1135
1136     - Fixed minor formatting issue where one-line blocks for subs with signatures 
1137       were unnecessarily broken
1138
1139     - RT #32905, patch to fix utf-8 error when output was STDOUT. 
1140
1141     - RT #79947, improved spacing of try/catch/finally blocks. Thanks to qsimpleq
1142       for a patch.
1143
1144     - Fixed #114909, Anonymous subs with signatures and prototypes misparsed as
1145       broken ternaries, in which a statement such as this was not being parsed
1146       correctly:
1147           return sub ( $fh, $out ) : prototype(*$) { ... }
1148
1149     - Implemented RT #113689, option to introduces spaces after an opening block
1150       brace and before a closing block brace. Four new optional controls are
1151       added. The first two define the minimum number of blank lines to be
1152       inserted 
1153
1154        -blao=i or --blank-lines-after-opening-block=i
1155        -blbc=i or --blank-lines-before-closing-block=i
1156
1157       where i is an integer, the number of lines (the default is 0).  
1158
1159       The second two define the types of blocks to which the first two apply 
1160
1161        -blaol=s or --blank-lines-after-opening-block-list=s
1162        -blbcl=s or --blank-lines-before-closing-block-list=s
1163       
1164       where s is a string of possible block keywords (default is just 'sub',
1165       meaning a named subroutine).
1166
1167       For more information please see the documentation.
1168
1169     - The method for specifying block types for certain input parameters has
1170       been generalized to distinguish between normal named subroutines and
1171       anonymous subs.  The keyword for normal subroutines remains 'sub', and
1172       the new keyword for anonymous subs is 'asub'. 
1173
1174     - Minor documentation changes. The BUGS sections now have a link
1175       to CPAN where most open bugs and issues can be reviewed and bug reports
1176       can be submitted.  The information in the AUTHOR and CREDITS sections of
1177       the man pages have been removed from the man pages to streamline the
1178       documentation. This information is still in the source code.
1179
1180 ## 2016 03 02
1181
1182     - RT #112534. Corrected a minor problem in which an unwanted newline
1183       was placed before the closing brace of an anonymous sub with 
1184       a signature, if it was in a list.  Thanks to Dmytro Zagashev.
1185
1186     - Corrected a minor problem in which occasional extra indentation was
1187       given to the closing brace of an anonymous sub in a list when the -lp 
1188       parameter was set.
1189
1190 ## 2016 03 01
1191
1192      - RT #104427. Added support for signatures.
1193
1194      - RT #111512.  Changed global warning flag $^W = 1 to use warnings;
1195        Thanks to Dmytro Zagashev.
1196
1197      - RT #110297, added support for new regexp modifier /n
1198        Thanks to Dmytro Zagashev.
1199
1200      - RT #111519.  The -io (--indent-only) and -dac (--delete-all-comments)
1201        can now both be used in one pass. Thanks to Dmitry Veltishev.
1202
1203      - Patch to avoid error message with 'catch' used by TryCatch, as in
1204           catch($err){
1205              # do something
1206           }
1207        Thanks to Nick Tonkin.
1208
1209      - RT #32905, UTF-8 coding is now more robust. Thanks to qsimpleq
1210        and Dmytro for patches.
1211
1212      - RT #106885. Added string bitwise operators ^. &. |. ~. ^.= &.= |.=
1213     
1214      - Fixed RT #107832 and #106492, lack of vertical alignment of two lines
1215        when -boc flag (break at old commas) is set.  This bug was 
1216        inadvertently introduced in previous bug fix RT #98902. 
1217
1218      - Some common extensions to Perl syntax are handled better.
1219        In particular, the following snippet is now foratted cleanly:
1220
1221          method deposit( Num $amount) {
1222              $self->balance( $self->balance + $amount );
1223          }
1224
1225        A new flag -xs (--extended-syntax) was added to enable this, and the default
1226        is to use -xs. 
1227
1228        In previous versions, and now only when -nxs is set, this snippet of code
1229        generates the following error message:
1230
1231        "syntax error at ') {', didn't see one of: case elsif for foreach given if switch unless until when while"
1232
1233 ## 2015 08 15
1234
1235      - Fixed RT# 105484, Invalid warning about 'else' in 'switch' statement.  The
1236        warning happened if a 'case' statement did not use parens.
1237
1238      - Fixed RT# 101547, misparse of // caused error message.  Also..
1239
1240      - Fixed RT# 102371, misparse of // caused unwated space in //=
1241
1242      - Fixed RT# 100871, "silent failure of HTML Output on Windows". 
1243        Changed calls to tempfile() from:
1244          my ( $fh_tmp, $tmpfile ) = tempfile();
1245        to have the full path name:
1246          my ( $fh_tmp, $tmpfile ) = File::Temp::tempfile()
1247        because of problems in the Windows version reported by Dean Pearce.
1248
1249      - Fixed RT# 99514, calling the perltidy module multiple times with 
1250        a .perltidyrc file containing the parameter --output-line-ending 
1251        caused a crash.  This was a glitch in the memoization logic. 
1252
1253      - Fixed RT#99961, multiple lines inside a cast block caused unwanted
1254        continuation indentation.  
1255
1256      - RT# 32905, broken handling of UTF-8 strings. 
1257        A new flag -utf8 causes perltidy assume UTF-8 encoding for input and 
1258        output of an io stream.  Thanks to Sebastian Podjasek for a patch.  
1259        This feature may not work correctly in older versions of Perl. 
1260        It worked in a linux version 5.10.1 but not in a Windows version 5.8.3 (but
1261        otherwise perltidy ran correctly).
1262
1263      - Warning files now report perltidy VERSION. Suggested by John Karr.
1264     
1265      - Fixed long flag --nostack-closing-tokens (-nsct has always worked though). 
1266        This was due to a typo.  This also fixed --nostack-opening-tokens to 
1267        behave correctly.  Thanks to Rob Dixon.
1268
1269 ## 2014 07 11
1270
1271     - Fixed RT #94902: abbreviation parsing in .perltidyrc files was not
1272       working for multi-line abbreviations.  Thanks to Eric Fung for 
1273       supplying a patch. 
1274     
1275     - Fixed RT #95708, misparsing of a hash when the first key was a perl
1276       keyword, causing a semicolon to be incorrectly added.
1277
1278     - Fixed RT #94338 for-loop in a parenthesized block-map.  A code block within
1279       parentheses of a map, sort, or grep function was being mistokenized.  In 
1280       rare cases this could produce in an incorrect error message.  The fix will
1281       produce some minor formatting changes.  Thanks to Daniel Trizen 
1282       discovering and documenting this.
1283
1284     - Fixed RT #94354, excess indentation for stacked tokens.  Thanks to 
1285       Colin Williams for supplying a patch.
1286
1287     - Added support for experimental postfix dereferencing notation introduced in
1288       perl 5.20. RT #96021.
1289
1290     - Updated documentation to clarify the behavior of the -io flag
1291       in response to RT #95709.  You can add -noll or -l=0 to prevent 
1292       long comments from being outdented when -io is used.
1293
1294     - Added a check to prevent a problem reported in RT #81866, where large
1295       scripts which had been compressed to a single line could not be formatted
1296       because of a check for VERSION for MakeMaker. The workaround was to 
1297       use -nvpl, but this shouldn't be necessary now.
1298
1299     - Fixed RT #96101; Closing brace of anonymous sub in a list was being
1300       indented.  For example, the closing brace of the anonymous sub below 
1301       will now be lined up with the word 'callback'.  This problem 
1302       occurred if there was no comma after the closing brace of the anonymous sub.
1303       This update may cause minor changes to formatting of code with lists 
1304       of anonymous subs, especially TK code.
1305       
1306       # OLD
1307       my @menu_items = (
1308
1309           #...
1310           {
1311               path     => '/_Operate/Transcode and split',
1312               callback => sub {
1313                   return 1 if not $self->project_opened;
1314                   $self->comp('project')->transcode( split => 1 );
1315                 }
1316           }
1317       );
1318
1319       # NEW
1320       my @menu_items = (
1321
1322           #...
1323           {
1324               path     => '/_Operate/Transcode and split',
1325               callback => sub {
1326                   return 1 if not $self->project_opened;
1327                   $self->comp('project')->transcode( split => 1 );
1328               }
1329           }
1330       );
1331
1332 ## 2014 03 28
1333
1334     - Fixed RT #94190 and debian Bug #742004: perltidy.LOG file left behind.
1335       Thanks to George Hartzell for debugging this.  The problem was
1336       caused by the memoization speedup patch in version 20121207.  An
1337       unwanted flag was being set which caused a LOG to be written if 
1338       perltidy was called multiple times.
1339
1340     - New default behavior for LOG files: If the source is from an array or 
1341       string (through a call to the perltidy module) then a LOG output is only
1342       possible if a logfile stream is specified.  This is to prevent 
1343       unexpected perltidy.LOG files. 
1344
1345     - Fixed debian Bug #740670, insecure temporary file usage.  File::Temp is now
1346       used to get a temporary file.  Thanks to Don Anderson for a patch.
1347     
1348     - Any -b (--backup-and-modify-in-place) flag is silently ignored when a 
1349       source stream, destination stream, or standard output is used.  
1350       This is because the -b flag may have been in a .perltidyrc file and 
1351       warnings break Test::NoWarnings.  Thanks to Marijn Brand. 
1352
1353 ## 2013 09 22
1354
1355     - Fixed RT #88020. --converge was not working with wide characters.
1356
1357     - Fixed RT #78156. package NAMESPACE VERSION syntax not accepted.
1358
1359     - First attempt to fix RT #88588.  INDEX END tag change in pod2html breaks 
1360       perltidy -html. I put in a patch which should work but I don't yet have
1361       a way of testing it.
1362
1363 ## 2013 08 06
1364
1365     - Fixed RT #87107, spelling
1366
1367 ## 2013 08 05
1368
1369     - Fixed RT #87502, incorrect of parsing of smartmatch before hash brace
1370     
1371     - Added feature request RT #87330, trim whitespace after POD.
1372       The flag -trp (--trim-pod) will trim trailing whitespace from lines of POD
1373
1374 ## 2013 07 17
1375
1376     - Fixed RT #86929, #86930, missing lhs of assignment.
1377
1378     - Fixed RT #84922, moved pod from Tidy.pm into Tidy.pod
1379
1380 ## 2012 12 07
1381
1382     - The flag -cab=n or --comma-arrow-breakpoints=n has been generalized
1383       to give better control over breaking open short containers.  The
1384       possible values are now:
1385
1386         n=0 break at all commas after =>  
1387         n=1 stable: break at all commas after => if container is open,
1388             EXCEPT FOR one-line containers
1389         n=2 break at all commas after =>, BUT try to form the maximum
1390             maximum one-line container lengths
1391         n=3 do not treat commas after => specially at all 
1392         n=4 break everything: like n=0 but also break a short container with
1393             a => not followed by a comma
1394         n=5 stable: like n=1 but ALSO break at open one-line containers (default)
1395
1396       New values n=4 and n=5 have been added to allow short blocks to be
1397       broken open.  The new default is n=5, stable.  It should more closely
1398       follow the breaks in the input file, and previously formatted code
1399       should remain unchanged.  If this causes problems use -cab=1 to recover 
1400       the former behavior.  Thanks to Tony Maszeroski for the suggestion.
1401
1402       To illustrate the need for the new options, if perltidy is given
1403       the following code, then the old default (-cab=1) was to close up 
1404       the 'index' container even if it was open in the source.  The new 
1405       default (-cab=5) will keep it open if it was open in the source.
1406
1407        our $fancypkg = {
1408            'ALL' => {
1409                'index' => {
1410                    'key' => 'value',
1411                },
1412                'alpine' => {
1413                    'one'   => '+',
1414                    'two'   => '+',
1415                    'three' => '+',
1416                },
1417            }
1418        };
1419
1420     - New debug flag --memoize (-mem).  This version contains a 
1421       patch supplied by Jonathan Swartz which can significantly speed up
1422       repeated calls to Perl::Tidy::perltidy in a single process by caching
1423       the result of parsing the formatting parameters.  A factor of up to 10
1424       speedup was achieved for masontidy (https://metacpan.org/module/masontidy).
1425       The memoization patch is on by default but can be deactivated for 
1426       testing with -nmem (or --no-memoize).
1427
1428     - New flag -tso (--tight-secret-operators) causes certain perl operator
1429       sequences (secret operators) to be formatted "tightly" (without spaces).  
1430       The most common of these are 0 +  and + 0 which become 0+ and +0.  The
1431       operators currently modified by this flag are: 
1432            =( )=  0+  +0  ()x!! ~~<>  ,=>
1433       Suggested by by Philippe Bruhat. See https://metacpan.org/module/perlsecret
1434       This flag is off by default.
1435       
1436     - New flag -vmll (--variable-maximum-line-length) makes the maximum
1437       line length increase with the nesting depth of a line of code.  
1438       Basically, it causes the length of leading whitespace to be ignored when
1439       setting line breaks, so the formatting of a block of code is independent
1440       of its nesting depth.  Try this option if you have deeply nested 
1441       code or data structures, perhaps in conjunction with the -wc flag
1442       described next.  The default is not todo this.
1443     
1444     - New flag -wc=n (--whitespace-cycle=n) also addresses problems with
1445       very deeply nested code and data structures.  When this parameter is
1446       used and the nesting depth exceeds the value n, the leading whitespace 
1447       will be reduced and start at 1 again.  The result is that deeply
1448       nested blocks of code will shift back to the left. This occurs cyclically 
1449       to any nesting depth.  This flag may be used either with or without -vmll.
1450       The default is not to use this (-wc=0).
1451
1452     - Fixed RT #78764, error parsing smartmatch operator followed by anonymous
1453       hash or array and then a ternary operator; two examples:
1454
1455        qr/3/ ~~ ['1234'] ? 1 : 0;
1456        map { $_ ~~ [ '0', '1' ] ? 'x' : 'o' } @a;
1457
1458     - Fixed problem with specifying spaces around arrows using -wls='->'
1459       and -wrs='->'.  Thanks to Alain Valleton for documenting this problem. 
1460
1461     - Implemented RT #53183, wishlist, lines of code with the same indentation
1462       level which are contained with multiple stacked opening and closing tokens
1463       (requested with flags -sot -sct) now have reduced indentation.  
1464
1465        # Default
1466        $sender->MailMsg(
1467            {
1468                to      => $addr,
1469                subject => $subject,
1470                msg     => $body
1471            }
1472        );
1473
1474        # OLD: perltidy -sot -sct 
1475        $sender->MailMsg( {
1476                to      => $addr,
1477                subject => $subject,
1478                msg     => $body
1479        } );
1480
1481        # NEW: perltidy -sot -sct 
1482        $sender->MailMsg( {
1483            to      => $addr,
1484            subject => $subject,
1485            msg     => $body
1486        } );
1487
1488     - New flag -act=n (--all-containers-tightness=n) is an abbreviation for
1489       -pt=n -sbt=n -bt=n -bbt=n, where n=0,1, or 2.  It simplifies input when all
1490       containers have the same tightness. Using the same example:
1491
1492        # NEW: perltidy -sot -sct -act=2
1493        $sender->MailMsg({
1494            to      => $addr,
1495            subject => $subject,
1496            msg     => $body
1497        });
1498
1499     - New flag -sac (--stack-all-containers) is an abbreviation for -sot -sct
1500       This is part of wishlist item RT #53183. Using the same example again:
1501
1502        # NEW: perltidy -sac -act=2
1503        $sender->MailMsg({
1504            to      => $addr,
1505            subject => $subject,
1506            msg     => $body
1507        });
1508
1509      - new flag -scbb (--stack-closing-block-brace) causes isolated closing 
1510        block braces to stack as in the following example. (Wishlist item RT#73788)
1511
1512        DEFAULT:
1513        for $w1 (@w1) {
1514            for $w2 (@w2) {
1515                for $w3 (@w3) {
1516                    for $w4 (@w4) {
1517                        push( @lines, "$w1 $w2 $w3 $w4\n" );
1518                    }
1519                }
1520            }
1521        }
1522
1523        perltidy -scbb:
1524        for $w1 (@w1) {
1525            for $w2 (@w2) {
1526                for $w3 (@w3) {
1527                    for $w4 (@w4) {
1528                        push( @lines, "$w1 $w2 $w3 $w4\n" );
1529                    } } } }
1530
1531       There is, at present, no flag to place these closing braces at the end
1532       of the previous line. It seems difficult to develop good rules for 
1533       doing this for a wide variety of code and data structures.
1534
1535     - Parameters defining block types may use a wildcard '*' to indicate
1536       all block types.  Previously it was not possible to include bare blocks.
1537     
1538     - A flag -sobb (--stack-opening-block-brace) has been introduced as an
1539       alias for -bbvt=2 -bbvtl='*'.  So for example the following test code:
1540
1541       {{{{{{{ $testing }}}}}}}
1542
1543       cannot be formatted as above but can at least be kept vertically compact 
1544       using perltidy -sobb -scbb
1545
1546       {   {   {   {   {   {   {   $testing
1547                               } } } } } } }
1548
1549       Or even, perltidy -sobb -scbb -i=1 -bbt=2
1550       {{{{{{{$testing
1551             }}}}}}}
1552
1553
1554     - Error message improved for conflicts due to -pbp; thanks to Djun Kim.
1555      
1556     - Fixed RT #80645, error parsing special array name '@$' when used as 
1557       @{$} or $#{$}
1558     
1559     - Eliminated the -chk debug flag which was included in version 20010406 to
1560       do a one-time check for a bug with multi-line quotes.  It has not been
1561       needed since then.
1562
1563     - Numerous other minor formatting improvements.
1564
1565 ## 2012 07 14
1566
1567     - Added flag -iscl (--ignore-side-comment-lengths) which causes perltidy 
1568       to ignore the length of side comments when setting line breaks, 
1569       RT #71848.  The default is to include the length of side comments when
1570       breaking lines to stay within the length prescribed by the -l=n
1571       maximum line length parameter.  For example,
1572
1573         Default behavior on a single line with long side comment:
1574            $vmsfile =~ s/;[\d\-]*$//
1575              ;    # Clip off version number; we can use a newer version as well
1576       
1577         perltidy -iscl leaves the line intact:
1578
1579            $vmsfile =~ s/;[\d\-]*$//; # Clip off version number; we can use a newer version as well
1580
1581     - Fixed RT #78182, side effects with STDERR.  Error handling has been
1582       revised and the documentation has been updated.  STDERR can now be 
1583       redirected to a string reference, and perltidy now returns an 
1584       error flag instead of calling die when input errors are detected. 
1585       If the error flag is set then no tidied output was produced.
1586       See man Perl::Tidy for an example.
1587
1588     - Fixed RT #78156, erroneous warning message for package VERSION syntax.
1589
1590     - Added abbreviations -conv (--converge) to simplify iteration control.
1591       -conv is equivalent to -it=4 and will insure that the tidied code is
1592       converged to its final state with the minimum number of iterations.
1593
1594     - Minor formatting modifications have been made to insure convergence.
1595
1596     - Simplified and hopefully improved the method for guessing the starting 
1597       indentation level of entabbed code.  Added flag -dt=n (--default_tabsize=n) 
1598       which might be helpful if the guessing method does not work well for
1599       some editors.
1600
1601     - Added support for stacked labels, upper case X/B in hex and binary, and
1602       CORE:: namespace.
1603
1604     - Eliminated warning messages for using keyword names as constants.
1605
1606 ## 2012 07 01
1607
1608     - Corrected problem introduced by using a chomp on scalar references, RT #77978
1609
1610     - Added support for Perl 5.14 package block syntax, RT #78114.
1611
1612     - A convergence test is made if three or more iterations are requested with
1613       the -it=n parameter to avoid wasting computer time.  Several hundred Mb of
1614       code gleaned from the internet were searched with the results that: 
1615        - It is unusual for two iterations to be required unless a major 
1616          style change is being made. 
1617        - Only one case has been found where three iterations were required.  
1618        - No cases requiring four iterations have been found with this version.
1619       For the previous version several cases where found the results could
1620       oscillate between two semi-stable states. This version corrects this.
1621
1622       So if it is important that the code be converged it is okay to set -it=4
1623       with this version and it will probably stop after the second iteration.
1624
1625     - Improved ability to identify and retain good line break points in the
1626       input stream, such as at commas and equals. You can always tell 
1627       perltidy to ignore old breakpoints with -iob.  
1628
1629     - Fixed glitch in which a terminal closing hash brace followed by semicolon
1630       was not outdented back to the leading line depth like other closing
1631       tokens.  Thanks to Keith Neargarder for noting this.
1632
1633         OLD:
1634            my ( $pre, $post ) = @{
1635                {
1636                    "pp_anonlist" => [ "[", "]" ],
1637                    "pp_anonhash" => [ "{", "}" ]
1638                }->{ $kid->ppaddr }
1639              };   # terminal brace
1640
1641         NEW:
1642            my ( $pre, $post ) = @{
1643                {
1644                    "pp_anonlist" => [ "[", "]" ],
1645                    "pp_anonhash" => [ "{", "}" ]
1646                }->{ $kid->ppaddr }
1647            };    # terminal brace
1648
1649     - Removed extra indentation given to trailing 'if' and 'unless' clauses 
1650       without parentheses because this occasionally produced undesirable 
1651       results.  This only applies where parens are not used after the if or
1652       unless.
1653
1654        OLD:
1655            return undef
1656              unless my ( $who, $actions ) =
1657                  $clause =~ /^($who_re)((?:$action_re)+)$/o; 
1658        
1659        NEW:
1660            return undef
1661              unless my ( $who, $actions ) =
1662              $clause =~ /^($who_re)((?:$action_re)+)$/o; 
1663
1664 ## 2012 06 19
1665
1666     - Updated perltidy to handle all quote modifiers defined for perl 5 version 16.
1667
1668     - Side comment text in perltidyrc configuration files must now begin with
1669       at least one space before the #.  Thus:
1670
1671       OK:
1672         -l=78 # Max line width is 78 cols
1673       BAD: 
1674         -l=78# Max line width is 78 cols
1675
1676       This is probably true of almost all existing perltidyrc files, 
1677       but if you get an error message about bad parameters
1678       involving a '#' the first time you run this version, please check the side
1679       comments in your perltidyrc file, and add a space before the # if necessary.
1680       You can quickly see the contents your perltidyrc file, if any, with the
1681       command:
1682
1683         perltidy -dpro
1684
1685       The reason for this change is that some parameters naturally involve
1686       the # symbol, and this can get interpreted as a side comment unless the
1687       parameter is quoted.  For example, to define -sphb=# it used to be necessary
1688       to write
1689         -sbcp='#'
1690       to keep the # from becoming part of a comment.  This was causing 
1691       trouble for new users.  Now it can also be written without quotes: 
1692         -sbcp=#
1693
1694     - Fixed bug in processing some .perltidyrc files containing parameters with
1695       an opening brace character, '{'.  For example the following was
1696       incorrectly processed:
1697          --static-block-comment-prefix="^#{2,}[^\s#]"
1698       Thanks to pdagosto.
1699
1700     - Added flag -boa (--break-at-old-attribute-breakpoints) which retains
1701       any existing line breaks at attribute separation ':'. This is now the
1702       default, use -nboa to deactivate.  Thanks to Daphne Phister for the patch.  
1703       For example, given the following code, the line breaks at the ':'s will be
1704       retained:
1705           
1706                        my @field
1707                          : field
1708                          : Default(1)
1709                          : Get('Name' => 'foo') : Set('Name');
1710
1711       whereas the previous version would have output a single line.  If
1712       the attributes are on a single line then they will remain on a single line.
1713     
1714     - Added new flags --blank-lines-before-subs=n (-blbs=n) and
1715       --blank-lines-before-packages=n (-blbp=n) to put n blank lines before
1716       subs and packages.  The old flag -bbs is now equivalent to -blbs=1 -blbp=1.
1717       and -nbbs is equivalent to -blbs=0 -blbp=0. Requested by M. Schwern and
1718       several others.
1719
1720     - Added feature -nsak='*' meaning no space between any keyword and opening 
1721       paren.  This avoids listing entering a long list of keywords.  Requested
1722       by M. Schwern.
1723
1724     - Added option to delete a backup of original file with in-place-modify (-b)
1725       if there were no errors.  This can be requested with the flag -bext='/'.  
1726       See documentation for details.  Requested by M. Schwern and others.
1727
1728     - Fixed bug where the module postfilter parameter was not applied when -b 
1729       flag was used.  This was discovered during testing.
1730
1731     - Fixed in-place-modify (-b) to work with symbolic links to source files.
1732       Thanks to Ted Johnson.
1733
1734     - Fixed bug where the Perl::Tidy module did not allow -b to be used 
1735       in some cases.
1736
1737     - No extra blank line is added before a comment which follows
1738       a short line ending in an opening token, for example like this:
1739        OLD:
1740                if (
1741
1742                    # unless we follow a blank or comment line
1743                    $last_line_leading_type !~ /^[#b]$/
1744                    ...
1745
1746        NEW:
1747                if (
1748                    # unless we follow a blank or comment line
1749                    $last_line_leading_type !~ /^[#b]$/
1750                    ...
1751
1752        The blank is not needed for readability in these cases because there
1753        already is already space above the comment.  If a blank already 
1754        exists there it will not be removed, so this change should not 
1755        change code which has previously been formatted with perltidy. 
1756        Thanks to R.W.Stauner.
1757
1758     - Likewise, no extra blank line is added above a comment consisting of a
1759       single #, since nothing is gained in readability.
1760
1761     - Fixed error in which a blank line was removed after a #>>> directive. 
1762       Thanks to Ricky Morse.
1763
1764     - Unnecessary semicolons after given/when/default blocks are now removed.
1765
1766     - Fixed bug where an unwanted blank line could be added before
1767       pod text in __DATA__ or __END__ section.  Thanks to jidani.
1768
1769     - Changed exit flags from 1 to 0 to indicate success for -help, -version, 
1770       and all -dump commands.  Also added -? as another way to dump the help.
1771       Requested by Keith Neargarder.
1772
1773     - Fixed bug where .ERR and .LOG files were not written except for -it=2 or more
1774
1775     - Fixed bug where trailing blank lines at the end of a file were dropped when
1776       -it>1.
1777
1778     - Fixed bug where a line occasionally ended with an extra space. This reduces
1779       rhe number of instances where a second iteration gives a result different
1780       from the first. 
1781
1782     - Updated documentation to note that the Tidy.pm module <stderr> parameter may
1783       not be a reference to SCALAR or ARRAY; it must be a file.
1784     
1785     - Syntax check with perl now work when the Tidy.pm module is processing
1786       references to arrays and strings.  Thanks to Charles Alderman.
1787
1788     - Zero-length files are no longer processed due to concerns for data loss
1789       due to side effects in some scenarios.
1790
1791     - block labels, if any, are now included in closing side comment text
1792       when the -csc flag is used.  Suggested by Aaron.  For example, 
1793       the label L102 in the following block is now included in the -csc text:
1794
1795          L102: for my $i ( 1 .. 10 ) {
1796            ...
1797          } ## end L102: for my $i ( 1 .. 10 )
1798
1799 ## 2010 12 17
1800
1801     - added new flag -it=n or --iterations=n
1802       This flag causes perltidy to do n complete iterations.  
1803       For most purposes the default of n=1 should be satisfactory.  However n=2
1804       can be useful when a major style change is being made, or when code is being
1805       beautified on check-in to a source code control system.  The run time will be
1806       approximately proportional to n, and it should seldom be necessary to use a
1807       value greater than n=2.  Thanks to Jonathan Swartz
1808
1809     - A configuration file pathname begins with three dots, e.g.
1810       ".../.perltidyrc", indicates that the file should be searched for starting
1811       in the current directory and working upwards. This makes it easier to have
1812       multiple projects each with their own .perltidyrc in their root directories.
1813       Thanks to Jonathan Swartz for this patch.
1814
1815     - Added flag --notidy which disables all formatting and causes the input to be
1816       copied unchanged.  This can be useful in conjunction with hierarchical
1817       F<.perltidyrc> files to prevent unwanted tidying.
1818       Thanks to Jonathan Swartz for this patch.
1819
1820     - Added prefilters and postfilters in the call to the Tidy.pm module.
1821       Prefilters and postfilters. The prefilter is a code reference that 
1822       will be applied to the source before tidying, and the postfilter 
1823       is a code reference to the result before outputting.  
1824
1825       Thanks to Jonathan Swartz for this patch.  He writes:
1826       This is useful for all manner of customizations. For example, I use
1827       it to convert the 'method' keyword to 'sub' so that perltidy will work for
1828       Method::Signature::Simple code:
1829
1830       Perl::Tidy::perltidy(
1831          prefilter => sub { $_ = $_[0]; s/^method (.*)/sub $1 \#__METHOD/gm; return $_ },
1832          postfilter => sub { $_ = $_[0]; s/^sub (.*?)\s* \#__METHOD/method $1/gm; return $_ }
1833       );
1834
1835     - The starting indentation level of sections of code entabbed with -et=n
1836       is correctly guessed if it was also produced with the same -et=n flag.  This
1837       keeps the indentation stable on repeated formatting passes within an editor.
1838       Thanks to Sam Kington and Glenn.
1839
1840     - Functions with prototype '&' had a space between the function and opening
1841       peren.  This space now only occurs if the flag --space-function-paren (-sfp)
1842       is set.  Thanks to Zrajm Akfohg.
1843
1844     - Patch to never put spaces around a bare word in braces beginning with ^ as in:
1845         my $before = ${^PREMATCH};
1846       even if requested with the -bt=0 flag because any spaces cause a syntax error in perl.
1847       Thanks to Fabrice Dulanoy.
1848
1849 ## 2009 06 16
1850
1851     - Allow configuration file to be 'perltidy.ini' for Windows systems.
1852       i.e. C:\Documents and Settings\User\perltidy.ini
1853       and added documentation for setting configuation file under Windows in man
1854       page.  Thanks to Stuart Clark.
1855
1856     - Corrected problem of unwanted semicolons in hash ref within given/when code.
1857      Thanks to Nelo Onyiah.
1858
1859     - added new flag -cscb or --closing-side-comments-balanced
1860      When using closing-side-comments, and the closing-side-comment-maximum-text
1861      limit is exceeded, then the comment text must be truncated.  Previous
1862      versions of perltidy terminate with three dots, and this can still be
1863      achieved with -ncscb:
1864       
1865       perltidy -csc -ncscb
1866
1867       } ## end foreach my $foo (sort { $b cmp $a ...
1868       
1869      However this causes a problem with older editors which cannot recognize
1870      comments or are not configured to doso because they cannot "bounce" around in
1871      the text correctly.  The B<-cscb> flag tries to help them by 
1872      appending appropriate terminal balancing structure:
1873       
1874       perltidy -csc -cscb
1875
1876       } ## end foreach my $foo (sort { $b cmp $a ... })
1877       
1878      Since there is much to be gained and little to be lost by doing this,
1879      the default is B<-cscb>.  Use B<-ncscb> if you do not want this.
1880
1881      Thanks to Daniel Becker for suggesting this option.
1882
1883     - After an isolated closing eval block the continuation indentation will be
1884       removed so that the braces line up more like other blocks.  Thanks to Yves Orton.
1885
1886     OLD:
1887        eval {
1888            #STUFF;
1889            1;    # return true
1890          }  
1891          or do {
1892            #handle error
1893          };
1894
1895     NEW:
1896        eval {
1897            #STUFF;
1898            1;    # return true
1899        } or do {
1900            #handle error
1901        };
1902
1903     -A new flag -asbl (or --opening-anonymous-sub-brace-on-new-line) has
1904      been added to put the opening brace of anonymous sub's on a new line,
1905      as in the following snippet:
1906
1907        my $code = sub
1908        {
1909            my $arg = shift;
1910            return $arg->(@_);
1911        };
1912
1913      This was not possible before because the -sbl flag only applies to named
1914      subs. Thanks to Benjamin Krupp.
1915
1916     -Fix tokenization bug with the following snippet
1917       print 'hi' if { x => 1, }->{x};
1918      which resulted in a semicolon being added after the comma.  The workaround
1919      was to use -nasc, but this is no longer necessary.  Thanks to Brian Duggan. 
1920
1921     -Fixed problem in which an incorrect error message could be triggered
1922     by the (unusual) combination of parameters  -lp -i=0 -l=2 -ci=0 for
1923     example.  Thanks to Richard Jelinek.
1924
1925     -A new flag --keep-old-blank-lines=n has been added to
1926     give more control over the treatment of old blank lines in
1927     a script.  The manual has been revised to discuss the new
1928     flag and clarify the treatment of old blank lines.  Thanks
1929     to Oliver Schaefer.
1930
1931 ## 2007 12 05
1932
1933     -Improved support for perl 5.10: New quote modifier 'p', new block type UNITCHECK, 
1934     new keyword break, improved formatting of given/when.
1935
1936     -Corrected tokenization bug of something like $var{-q}.
1937
1938     -Numerous minor formatting improvements.
1939
1940     -Corrected list of operators controlled by -baao -bbao to include
1941       . : ? && || and or err xor
1942
1943     -Corrected very minor error in log file involving incorrect comment
1944     regarding need for upper case of labels.  
1945
1946     -Fixed problem where perltidy could run for a very long time
1947     when given certain non-perl text files.
1948
1949     -Line breaks in un-parenthesized lists now try to follow
1950     line breaks in the input file rather than trying to fill
1951     lines.  This usually works better, but if this causes
1952     trouble you can use -iob to ignore any old line breaks.
1953     Example for the following input snippet:
1954
1955        print
1956        "conformability (Not the same dimension)\n",
1957        "\t", $have, " is ", text_unit($hu), "\n",
1958        "\t", $want, " is ", text_unit($wu), "\n",
1959        ;
1960
1961      OLD:
1962        print "conformability (Not the same dimension)\n", "\t", $have, " is ",
1963          text_unit($hu), "\n", "\t", $want, " is ", text_unit($wu), "\n",;
1964
1965      NEW:
1966        print "conformability (Not the same dimension)\n",
1967          "\t", $have, " is ", text_unit($hu), "\n",
1968          "\t", $want, " is ", text_unit($wu), "\n",
1969          ;
1970
1971 ## 2007 08 01
1972
1973     -Added -fpsc option (--fixed-position-side-comment). Thanks to Ueli Hugenschmidt. 
1974     For example -fpsc=40 tells perltidy to put side comments in column 40
1975     if possible.  
1976
1977     -Added -bbao and -baao options (--break-before-all-operators and
1978     --break-after-all-operators) to simplify command lines and configuration
1979     files.  These define an initial preference for breaking at operators which can
1980     be modified with -wba and -wbb flags.  For example to break before all operators
1981     except an = one could use --bbao -wba='=' rather than listing every
1982     single perl operator (except =) on a -wbb flag.
1983
1984     -Added -kis option (--keep-interior-semicolons).  Use the B<-kis> flag
1985     to prevent breaking at a semicolon if there was no break there in the
1986     input file.  To illustrate, consider the following input lines:
1987
1988        dbmclose(%verb_delim); undef %verb_delim;
1989        dbmclose(%expanded); undef %expanded;
1990        dbmclose(%global); undef %global;
1991
1992     Normally these would be broken into six lines, but 
1993     perltidy -kis gives:
1994
1995        dbmclose(%verb_delim); undef %verb_delim;
1996        dbmclose(%expanded);   undef %expanded;
1997        dbmclose(%global);     undef %global;
1998     
1999     -Improved formatting of complex ternary statements, with indentation
2000     of nested statements.  
2001      OLD:
2002        return defined( $cw->{Selected} )
2003          ? (wantarray)
2004          ? @{ $cw->{Selected} }
2005          : $cw->{Selected}[0]
2006          : undef;
2007
2008      NEW:
2009        return defined( $cw->{Selected} )
2010          ? (wantarray)
2011              ? @{ $cw->{Selected} }
2012              : $cw->{Selected}[0]
2013          : undef;
2014
2015     -Text following un-parenthesized if/unless/while/until statements get a
2016     full level of indentation.  Suggested by Jeff Armstrong and others.
2017     OLD:
2018        return $ship->chargeWeapons("phaser-canon")
2019          if $encounter->description eq 'klingon'
2020          and $ship->firepower >= $encounter->firepower
2021          and $location->status ne 'neutral';
2022     NEW:
2023        return $ship->chargeWeapons("phaser-canon")
2024          if $encounter->description eq 'klingon'
2025              and $ship->firepower >= $encounter->firepower
2026              and $location->status ne 'neutral';
2027
2028 ## 2007 05 08
2029
2030     -Fixed bug where #line directives were being indented.  Thanks to
2031     Philippe Bruhat.
2032
2033 ## 2007 05 04
2034
2035     -Fixed problem where an extra blank line was added after an =cut when either
2036     (a) the =cut started (not stopped) a POD section, or (b) -mbl > 1. 
2037     Thanks to J. Robert Ray and Bill Moseley.
2038
2039 ## 2007 04 24
2040
2041     -ole (--output-line-ending) and -ple (--preserve-line-endings) should
2042     now work on all systems rather than just unix systems. Thanks to Dan
2043     Tyrell.
2044
2045     -Fixed problem of a warning issued for multiple subs for BEGIN subs
2046     and other control subs. Thanks to Heiko Eissfeldt.
2047     
2048     -Fixed problem where no space was introduced between a keyword or
2049     bareword and a colon, such as:
2050
2051     ( ref($result) eq 'HASH' && !%$result ) ? undef: $result;
2052
2053     Thanks to Niek.
2054
2055     -Added a utility program 'break_long_quotes.pl' to the examples directory of
2056     the distribution.  It breaks long quoted strings into a chain of concatenated
2057     sub strings no longer than a selected length.  Suggested by Michael Renner as
2058     a perltidy feature but was judged to be best done in a separate program.
2059
2060     -Updated docs to remove extra < and >= from list of tokens 
2061     after which breaks are made by default.  Thanks to Bob Kleemann.
2062
2063     -Removed improper uses of $_ to avoid conflicts with external calls, giving
2064     error message similar to:
2065        Modification of a read-only value attempted at 
2066        /usr/share/perl5/Perl/Tidy.pm line 6907.
2067     Thanks to Michael Renner.
2068
2069     -Fixed problem when errorfile was not a plain filename or filehandle
2070     in a call to Tidy.pm.  The call
2071     perltidy(source => \$input, destination => \$output, errorfile => \$err);
2072     gave the following error message:
2073      Not a GLOB reference at /usr/share/perl5/Perl/Tidy.pm line 3827.
2074     Thanks to Michael Renner and Phillipe Bruhat.
2075
2076     -Fixed problem where -sot would not stack an opening token followed by
2077     a side comment.  Thanks to Jens Schicke.
2078
2079     -improved breakpoints in complex math and other long statements. Example:
2080     OLD:
2081        return
2082          log($n) + 0.577215664901532 + ( 1 / ( 2 * $n ) ) -
2083          ( 1 / ( 12 * ( $n**2 ) ) ) + ( 1 / ( 120 * ( $n**4 ) ) );
2084     NEW:
2085        return
2086          log($n) + 0.577215664901532 +
2087          ( 1 / ( 2 * $n ) ) -
2088          ( 1 / ( 12 * ( $n**2 ) ) ) +
2089          ( 1 / ( 120 * ( $n**4 ) ) );
2090
2091     -more robust vertical alignment of complex terminal else blocks and ternary
2092     statements.
2093
2094 ## 2006 07 19
2095
2096     -Eliminated bug where a here-doc invoked through an 'e' modifier on a pattern
2097     replacement text was not recognized.  The tokenizer now recursively scans
2098     replacement text (but does not reformat it).
2099
2100     -improved vertical alignment of terminal else blocks and ternary statements.
2101      Thanks to Chris for the suggestion. 
2102
2103      OLD:
2104        if    ( IsBitmap() ) { return GetBitmap(); }
2105        elsif ( IsFiles() )  { return GetFiles(); }
2106        else { return GetText(); }
2107
2108      NEW:
2109        if    ( IsBitmap() ) { return GetBitmap(); }
2110        elsif ( IsFiles() )  { return GetFiles(); }
2111        else                 { return GetText(); }
2112
2113      OLD:
2114        $which_search =
2115            $opts{"t"} ? 'title'
2116          : $opts{"s"} ? 'subject'
2117          : $opts{"a"} ? 'author'
2118          : 'title';
2119
2120      NEW:
2121        $which_search =
2122            $opts{"t"} ? 'title'
2123          : $opts{"s"} ? 'subject'
2124          : $opts{"a"} ? 'author'
2125          :              'title';
2126
2127     -improved indentation of try/catch blocks and other externally defined
2128     functions accepting a block argument.  Thanks to jae.
2129
2130     -Added support for Perl 5.10 features say and smartmatch.
2131
2132     -Added flag -pbp (--perl-best-practices) as an abbreviation for parameters
2133     suggested in Damian Conway's "Perl Best Practices".  -pbp is the same as:
2134
2135        -l=78 -i=4 -ci=4 -st -se -vt=2 -cti=0 -pt=1 -bt=1 -sbt=1 -bbt=1 -nsfs -nolq
2136        -wbb="% + - * / x != == >= <= =~ !~ < > | & >= < = 
2137              **= += *= &= <<= &&= -= /= |= >>= ||= .= %= ^= x="
2138
2139      Please note that the -st here restricts input to standard input; use
2140      -nst if necessary to override.
2141
2142     -Eliminated some needless breaks at equals signs in -lp indentation.
2143
2144        OLD:
2145            $c =
2146              Math::Complex->make(LEFT + $x * (RIGHT - LEFT) / SIZE,
2147                                  TOP + $y * (BOTTOM - TOP) / SIZE);
2148        NEW:
2149            $c = Math::Complex->make(LEFT + $x * (RIGHT - LEFT) / SIZE,
2150                                     TOP + $y * (BOTTOM - TOP) / SIZE);
2151
2152     A break at an equals is sometimes useful for preventing complex statements 
2153     from hitting the line length limit.  The decision to do this was 
2154     over-eager in some cases and has been improved.  Thanks to Royce Reece.
2155
2156     -qw quotes contained in braces, square brackets, and parens are being
2157     treated more like those containers as far as stacking of tokens.  Also
2158     stack of closing tokens ending ');' will outdent to where the ');' would
2159     have outdented if the closing stack is matched with a similar opening stack.
2160
2161      OLD: perltidy -soc -sct
2162        __PACKAGE__->load_components(
2163            qw(
2164              PK::Auto
2165              Core
2166              )
2167        );
2168      NEW: perltidy -soc -sct
2169        __PACKAGE__->load_components( qw(
2170              PK::Auto
2171              Core
2172        ) );
2173      Thanks to Aran Deltac
2174
2175     -Eliminated some undesirable or marginally desirable vertical alignments.
2176     These include terminal colons, opening braces, and equals, and particularly
2177     when just two lines would be aligned.
2178
2179     OLD:
2180        my $accurate_timestamps = $Stamps{lnk};
2181        my $has_link            = 
2182            ...
2183     NEW:
2184        my $accurate_timestamps = $Stamps{lnk};
2185        my $has_link =
2186
2187     -Corrected a problem with -mangle in which a space would be removed
2188     between a keyword and variable beginning with ::.
2189
2190 ## 2006 06 14
2191
2192     -Attribute argument lists are now correctly treated as quoted strings
2193     and not formatted.  This is the most important update in this version.
2194     Thanks to Borris Zentner, Greg Ferguson, Steve Kirkup.
2195
2196     -Updated to recognize the defined or operator, //, to be released in Perl 10.
2197     Thanks to Sebastien Aperghis-Tramoni.
2198
2199     -A useful utility perltidyrc_dump.pl is included in the examples section.  It
2200     will read any perltidyrc file and write it back out in a standard format
2201     (though comments are lost).
2202
2203     -Added option to have perltidy read and return a hash with the contents of a
2204     perltidyrc file.  This may be used by Leif Eriksen's tidyview code.  This
2205     feature is used by the demonstration program 'perltidyrc_dump.pl' in the
2206     examples directory.
2207
2208     -Improved error checking in perltidyrc files.  Unknown bare words were not
2209     being caught.
2210
2211     -The --dump-options parameter now dumps parameters in the format required by a
2212     perltidyrc file.
2213
2214     -V-Strings with underscores are now recognized.
2215     For example: $v = v1.2_3; 
2216
2217     -cti=3 option added which gives one extra indentation level to closing 
2218     tokens always.  This provides more predictable closing token placement
2219     than cti=2.  If you are using cti=2 you might want to try cti=3.
2220
2221     -To identify all left-adjusted comments as static block comments, use C<-sbcp='^#'>.
2222
2223     -New parameters -fs, -fsb, -fse added to allow sections of code between #<<<
2224     and #>>> to be passed through verbatim. This is enabled by default and turned
2225     off by -nfs.  Flags -fsb and -fse allow other beginning and ending markers.
2226     Thanks to Wolfgang Werner and Marion Berryman for suggesting this.  
2227
2228     -added flag -skp to put a space between all Perl keywords and following paren.
2229     The default is to only do this for certain keywords.  Suggested by
2230     H.Merijn Brand.
2231
2232     -added flag -sfp to put a space between a function name and following paren.
2233     The default is not to do this.  Suggested by H.Merijn Brand.
2234
2235     -Added patch to avoid breaking GetOpt::Long::Configure set by calling program. 
2236     Thanks to Philippe Bruhat.
2237
2238     -An error was fixed in which certain parameters in a .perltidyrc file given
2239     without the equals sign were not recognized.  That is,
2240     '--brace-tightness 0' gave an error but '--brace-tightness=0' worked
2241     ok.  Thanks to Zac Hansen.
2242
2243     -An error preventing the -nwrs flag from working was corrected. Thanks to
2244      Greg Ferguson.
2245
2246     -Corrected some alignment problems with entab option.
2247
2248     -A bug with the combination of -lp and -extrude was fixed (though this
2249     combination doesn't really make sense).  The bug was that a line with
2250     a single zero would be dropped.  Thanks to Cameron Hayne.
2251
2252     -Updated Windows detection code to avoid an undefined variable.
2253     Thanks to Joe Yates and Russ Jones.
2254
2255     -Improved formatting for short trailing statements following a closing paren.
2256     Thanks to Joe Matarazzo.
2257
2258     -The handling of the -icb (indent closing block braces) flag has been changed
2259     slightly to provide more consistent and predictable formatting of complex
2260     structures.  Instead of giving a closing block brace the indentation of the
2261     previous line, it is now given one extra indentation level.  The two methods
2262     give the same result if the previous line was a complete statement, as in this
2263     example:
2264
2265            if ($task) {
2266                yyy();
2267                }    # -icb
2268            else {
2269                zzz();
2270                }
2271     The change also fixes a problem with empty blocks such as:
2272
2273        OLD, -icb:
2274        elsif ($debug) {
2275        }
2276
2277        NEW, -icb:
2278        elsif ($debug) {
2279            }
2280
2281     -A problem with -icb was fixed in which a closing brace was misplaced when
2282     it followed a quote which spanned multiple lines.
2283
2284     -Some improved breakpoints for -wba='&& || and or'
2285
2286     -Fixed problem with misaligned cuddled else in complex statements
2287     when the -bar flag was also used.  Thanks to Alex and Royce Reese.
2288
2289     -Corrected documentation to show that --outdent-long-comments is the default.
2290     Thanks to Mario Lia.
2291
2292     -New flag -otr (opening-token-right) is similar to -bar (braces-always-right)
2293     but applies to non-structural opening tokens.
2294
2295     -new flags -sot (stack-opening-token), -sct (stack-closing-token).
2296     Suggested by Tony.
2297
2298 ## 2003 10 21
2299
2300     -The default has been changed to not do syntax checking with perl.  
2301       Use -syn if you want it.  Perltidy is very robust now, and the -syn
2302       flag now causes more problems than it's worth because of BEGIN blocks
2303       (which get executed with perl -c).  For example, perltidy will never
2304       return when trying to beautify this code if -syn is used:
2305
2306            BEGIN { 1 while { }; }
2307
2308      Although this is an obvious error, perltidy is often run on untested
2309      code which is more likely to have this sort of problem.  A more subtle
2310      example is:
2311
2312            BEGIN { use FindBin; }
2313
2314      which may hang on some systems using -syn if a shared file system is
2315      unavailable.
2316
2317     -Changed style -gnu to use -cti=1 instead of -cti=2 (see next item).
2318      In most cases it looks better.  To recover the previous format, use
2319      '-gnu -cti=2'
2320
2321     -Added flags -cti=n for finer control of closing token indentation.
2322       -cti = 0 no extra indentation (default; same as -nicp)
2323       -cti = 1 enough indentation so that the closing token
2324            aligns with its opening token.
2325       -cti = 2 one extra indentation level if the line has the form 
2326              );   ];   or   };     (same as -icp).
2327
2328       The new option -cti=1 works well with -lp:
2329
2330       EXAMPLES:
2331
2332        # perltidy -lp -cti=1
2333        @month_of_year = (
2334                           'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
2335                           'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
2336                         );
2337
2338        # perltidy -lp -cti=2
2339        @month_of_year = (
2340                           'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
2341                           'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
2342                           );
2343      This is backwards compatible with -icp. See revised manual for
2344      details.  Suggested by Mike Pennington.
2345      
2346     -Added flag '--preserve-line-endings' or '-ple' to cause the output
2347      line ending to be the same as in the input file, for unix, dos, 
2348      or mac line endings.  Only works under unix. Suggested by 
2349      Rainer Hochschild.
2350
2351     -Added flag '--output-line-ending=s' or '-ole=s' where s=dos or win,
2352      unix, or mac.  Only works under unix.
2353
2354     -Files with Mac line endings should now be handled properly under unix
2355      and dos without being passed through a converter.
2356
2357     -You may now include 'and', 'or', and 'xor' in the list following
2358      '--want-break-after' to get line breaks after those keywords rather than
2359      before them.  Suggested by Rainer Hochschild.
2360
2361     -Corrected problem with command line option for -vtc=n and -vt=n. The
2362      equals sign was being eaten up by the Windows shell so perltidy didn't
2363      see it.
2364
2365 ## 2003 07 26
2366
2367     -Corrected cause of warning message with recent versions of Perl:
2368        "Possible precedence problem on bitwise & operator at ..."
2369      Thanks to Jim Files.
2370
2371     -fixed bug with -html with '=for pod2html' sections, in which code/pod
2372     output order was incorrect.  Thanks to Tassilo von Parseval.
2373
2374     -fixed bug when the -html flag is used, in which the following error
2375     message, plus others, appear:
2376         did not see <body> in pod2html output
2377     This was caused by a change in the format of html output by pod2html
2378     VERSION 1.04 (included with perl 5.8).  Thanks to Tassilo von Parseval.
2379
2380     -Fixed bug where an __END__ statement would be mistaken for a label
2381     if it is immediately followed by a line with a leading colon. Thanks
2382     to John Bayes.
2383     
2384     -Implemented guessing logic for brace types when it is ambiguous.  This
2385     has been on the TODO list a long time.  Thanks to Boris Zentner for
2386     an example.
2387
2388     -Long options may now be negated either as '--nolong-option' 
2389     or '--no-long-option'.  Thanks to Philip Newton for the suggestion.
2390
2391     -added flag --html-entities or -hent which controls the use of
2392     Html::Entities for html formatting.  Use --nohtml-entities or -nhent to
2393     prevent the use of Html::Entities to encode special symbols.  The
2394     default is -hent.  Html::Entities when formatting perl text to escape
2395     special symbols.  This may or may not be the right thing to do,
2396     depending on browser/language combinations.  Thanks to Burak Gursoy for
2397     this suggestion.
2398
2399     -Bareword strings with leading '-', like, '-foo' now count as 1 token
2400     for horizontal tightness.  This way $a{'-foo'}, $a{foo}, and $a{-foo}
2401     are now all treated similarly.  Thus, by default, OLD: $a{ -foo } will
2402     now be NEW: $a{-foo}.  Suggested by Mark Olesen.
2403
2404     -added 2 new flags to control spaces between keywords and opening parens:
2405       -sak=s  or --space-after-keyword=s,  and
2406       -nsak=s or --nospace-after-keyword=s, where 's' is a list of keywords.
2407
2408     The new default list of keywords which get a space is:
2409
2410       "my local our and or eq ne if else elsif until unless while for foreach
2411         return switch case given when"
2412
2413     Use -sak=s and -nsak=s to add and remove keywords from this list,
2414        respectively.
2415
2416     Explanation: Stephen Hildrey noted that perltidy was being inconsistent
2417     in placing spaces between keywords and opening parens, and sent a patch
2418     to give user control over this.  The above list was selected as being
2419     a reasonable default keyword list.  Previously, perltidy
2420     had a hardwired list which also included these keywords:
2421
2422            push pop shift unshift join split die
2423
2424     but did not have 'our'.  Example: if you prefer to make perltidy behave
2425     exactly as before, you can include the following two lines in your
2426     .perltidyrc file: 
2427
2428       -sak="push pop local shift unshift join split die"
2429       -nsak="our"
2430
2431     -Corrected html error in .toc file when -frm -html is used (extra ");
2432      browsers were tolerant of it.
2433
2434     -Improved alignment of chains of binary and ?/: operators. Example:
2435      OLD:
2436        $leapyear =
2437          $year % 4     ? 0
2438          : $year % 100 ? 1
2439          : $year % 400 ? 0
2440          : 1;
2441      NEW:
2442        $leapyear =
2443            $year % 4   ? 0
2444          : $year % 100 ? 1
2445          : $year % 400 ? 0
2446          : 1;
2447
2448     -improved breakpoint choices involving '->'
2449
2450     -Corrected tokenization of things like ${#}. For example,
2451      ${#} is valid, but ${# } is a syntax error.
2452
2453     -Corrected minor tokenization errors with indirect object notation.
2454      For example, 'new A::()' works now.
2455
2456     -Minor tokenization improvements; all perl code distributed with perl 5.8 
2457      seems to be parsed correctly except for one instance (lextest.t) 
2458      of the known bug.
2459
2460 ## 2002 11 30
2461
2462     -Implemented scalar attributes.  Thanks to Sean Tobin for noting this.
2463
2464     -Fixed glitch introduced in previous release where -pre option
2465     was not outputting a leading html <pre> tag.
2466
2467     -Numerous minor improvements in vertical alignment, including the following:
2468
2469     -Improved alignment of opening braces in many cases.  Needed for improved
2470     switch/case formatting, and also suggested by Mark Olesen for sort/map/grep
2471     formatting.  For example:
2472
2473      OLD:
2474        @modified =
2475          map { $_->[0] }
2476          sort { $a->[1] <=> $b->[1] }
2477          map { [ $_, -M ] } @filenames;
2478
2479      NEW:
2480        @modified =
2481          map  { $_->[0] }
2482          sort { $a->[1] <=> $b->[1] }
2483          map  { [ $_, -M ] } @filenames;
2484
2485     -Eliminated alignments across unrelated statements. Example:
2486      OLD:
2487        $borrowerinfo->configure( -state => 'disabled' );
2488        $borrowerinfo->grid( -col        => 1, -row => 0, -sticky => 'w' );
2489
2490      NEW:  
2491        $borrowerinfo->configure( -state => 'disabled' );
2492        $borrowerinfo->grid( -col => 1, -row => 0, -sticky => 'w' );
2493
2494      Thanks to Mark Olesen for suggesting this.
2495
2496     -Improved alignement of '='s in certain cases.
2497      Thanks to Norbert Gruener for sending an example.
2498
2499     -Outdent-long-comments (-olc) has been re-instated as a default, since
2500      it works much better now.  Use -nolc if you want to prevent it.
2501
2502     -Added check for 'perltidy file.pl -o file.pl', which causes file.pl
2503     to be lost. (The -b option should be used instead). Thanks to mreister
2504     for reporting this problem.
2505
2506 ## 2002 11 06
2507
2508     -Switch/case or given/when syntax is now recognized.  Its vertical alignment
2509     is not great yet, but it parses ok.  The words 'switch', 'case', 'given',
2510     and 'when' are now treated as keywords.  If this causes trouble with older
2511     code, we could introduce a switch to deactivate it.  Thanks to Stan Brown
2512     and Jochen Schneider for recommending this.
2513
2514     -Corrected error parsing sub attributes with call parameters.
2515     Thanks to Marc Kerr for catching this.
2516
2517     -Sub prototypes no longer need to be on the same line as sub names.  
2518
2519     -a new flag -frm or --frames will cause html output to be in a
2520     frame, with table of contents in the left panel and formatted source
2521     in the right panel.  Try 'perltidy -html -frm somemodule.pm' for example.
2522
2523     -The new default for -html formatting is to pass the pod through Pod::Html.
2524     The result is syntax colored code within your pod documents. This can be
2525     deactivated with -npod.  Thanks to those who have written to discuss this,
2526     particularly Mark Olesen and Hugh Myers.
2527
2528     -the -olc (--outdent-long-comments) option works much better.  It now outdents
2529     groups of consecutive comments together, and by just the amount needed to
2530     avoid having any one line exceeding the maximum line length.
2531
2532     -block comments are now trimmed of trailing whitespace.
2533
2534     -if a directory specified with -opath does not exist, it will be created.
2535
2536     -a table of contents to packages and subs is output when -html is used.
2537     Use -ntoc to prevent this. 
2538
2539     -fixed an unusual bug in which a 'for' statement following a 'format'
2540     statement was not correctly tokenized.  Thanks to Boris Zentner for
2541     catching this.
2542
2543     -Tidy.pm is no longer dependent on modules IO::Scalar and IO::ScalarArray.  
2544     There were some speed issues.  Suggested by Joerg Walter.
2545
2546     -The treatment of quoted wildcards (file globs) is now system-independent. 
2547     For example
2548
2549        perltidy 'b*x.p[lm]'
2550
2551     would match box.pl, box.pm, brinx.pm under any operating system.  Of
2552     course, anything unquoted will be subject to expansion by any shell.
2553
2554     -default color for keywords under -html changed from 
2555     SaddleBrown (#8B4513) to magenta4 (#8B008B).
2556
2557     -fixed an arg parsing glitch in which something like:
2558       perltidy quick-help
2559     would trigger the help message and exit, rather than operate on the
2560     file 'quick-help'.
2561
2562 ## 2002 09 22
2563
2564     -New option '-b' or '--backup-and-modify-in-place' will cause perltidy to
2565     overwrite the original file with the tidied output file.  The original
2566     file will be saved with a '.bak' extension (which can be changed with
2567     -bext=s).  Thanks to Rudi Farkas for the suggestion.
2568
2569     -An index to all subs is included at the top of -html output, unless
2570     only the <pre> section is written.
2571
2572     -Anchor lines of the form <a name="mysub"></a> are now inserted at key points
2573     in html output, such as before sub definitions, for the convenience of
2574     postprocessing scripts.  Suggested by Howard Owen.
2575
2576     -The cuddled-else (-ce) flag now also makes cuddled continues, like
2577     this:
2578
2579        while ( ( $pack, $file, $line ) = caller( $i++ ) ) {
2580           # bla bla
2581        } continue {
2582            $prevpack = $pack;
2583        }
2584
2585     Suggested by Simon Perreault.  
2586
2587     -Fixed bug in which an extra blank line was added before an =head or 
2588     similar pod line after an __END__ or __DATA__ line each time 
2589     perltidy was run.  Also, an extra blank was being added after
2590     a terminal =cut.  Thanks to Mike Birdsall for reporting this.
2591
2592 ## 2002 08 26
2593
2594     -Fixed bug in which space was inserted in a hyphenated hash key:
2595        my $val = $myhash{USER-NAME};
2596      was converted to:
2597        my $val = $myhash{USER -NAME}; 
2598      Thanks to an anonymous bug reporter at sourceforge.
2599
2600     -Fixed problem with the '-io' ('--indent-only') where all lines 
2601      were double spaced.  Thanks to Nick Andrew for reporting this bug.
2602
2603     -Fixed tokenization error in which something like '-e1' was 
2604      parsed as a number. 
2605
2606     -Corrected a rare problem involving older perl versions, in which 
2607      a line break before a bareword caused problems with 'use strict'.
2608      Thanks to Wolfgang Weisselberg for noting this.
2609
2610     -More syntax error checking added.
2611
2612     -Outdenting labels (-ola) has been made the default, in order to follow the
2613      perlstyle guidelines better.  It's probably a good idea in general, but
2614      if you do not want this, use -nola in your .perltidyrc file.
2615      
2616     -Updated rules for padding logical expressions to include more cases.
2617      Thanks to Wolfgang Weisselberg for helpful discussions.
2618
2619     -Added new flag -osbc (--outdent-static-block-comments) which will
2620      outdent static block comments by 2 spaces (or whatever -ci equals).
2621      Requested by Jon Robison.
2622
2623 ## 2002 04 25
2624
2625     -Corrected a bug, introduced in the previous release, in which some
2626      closing side comments (-csc) could have incorrect text.  This is
2627      annoying but will be correct the next time perltidy is run with -csc.
2628
2629     -Fixed bug where whitespace was being removed between 'Bar' and '()' 
2630      in a use statement like:
2631
2632           use Foo::Bar ();
2633
2634     -Whenever possible, if a logical expression is broken with leading
2635      '&&', '||', 'and', or 'or', then the leading line will be padded
2636      with additional space to produce alignment.  This has been on the
2637      todo list for a long time; thanks to Frank Steinhauer for reminding
2638      me to do it.  Notice the first line after the open parens here:
2639
2640            OLD: perltidy -lp
2641            if (
2642                 !param("rules.to.$linecount")
2643                 && !param("rules.from.$linecount")
2644                 && !param("rules.subject.$linecount")
2645                 && !(
2646                       param("rules.fieldname.$linecount")
2647                       && param("rules.fieldval.$linecount")
2648                 )
2649                 && !param("rules.size.$linecount")
2650                 && !param("rules.custom.$linecount")
2651              )
2652
2653            NEW: perltidy -lp
2654            if (
2655                    !param("rules.to.$linecount")
2656                 && !param("rules.from.$linecount")
2657                 && !param("rules.subject.$linecount")
2658                 && !(
2659                          param("rules.fieldname.$linecount")
2660                       && param("rules.fieldval.$linecount")
2661                 )
2662                 && !param("rules.size.$linecount")
2663                 && !param("rules.custom.$linecount")
2664              )
2665
2666 ## 2002 04 16
2667
2668     -Corrected a mistokenization of variables for a package with a name
2669      equal to a perl keyword.  For example: 
2670
2671         my::qx();
2672         package my;
2673         sub qx{print "Hello from my::qx\n";}
2674
2675      In this case, the leading 'my' was mistokenized as a keyword, and a
2676      space was being place between 'my' and '::'.  This has been
2677      corrected.  Thanks to Martin Sluka for discovering this. 
2678
2679     -A new flag -bol (--break-at-old-logic-breakpoints)
2680      has been added to control whether containers with logical expressions
2681      should be broken open.  This is the default.
2682
2683     -A new flag -bok (--break-at-old-keyword-breakpoints)
2684      has been added to follow breaks at old keywords which return lists,
2685      such as sort and map.  This is the default.
2686
2687     -A new flag -bot (--break-at-old-trinary-breakpoints) has been added to
2688      follow breaks at trinary (conditional) operators.  This is the default.
2689
2690     -A new flag -cab=n has been added to control breaks at commas after
2691      '=>' tokens.  The default is n=1, meaning break unless this breaks
2692      open an existing on-line container.
2693
2694     -A new flag -boc has been added to allow existing list formatting
2695      to be retained.  (--break-at-old-comma-breakpoints).  See updated manual.
2696
2697     -A new flag -iob (--ignore-old-breakpoints) has been added to
2698      prevent the locations of old breakpoints from influencing the output
2699      format.
2700
2701     -Corrected problem where nested parentheses were not getting full
2702      indentation.  This has been on the todo list for some time; thanks 
2703      to Axel Rose for a snippet demonstrating this issue.
2704
2705                OLD: inner list is not indented
2706                $this->sendnumeric(
2707                    $this->server,
2708                    (
2709                      $ret->name,        $user->username, $user->host,
2710                    $user->server->name, $user->nick,     "H"
2711                    ),
2712                );
2713
2714                NEW:
2715                $this->sendnumeric(
2716                    $this->server,
2717                    (
2718                        $ret->name,          $user->username, $user->host,
2719                        $user->server->name, $user->nick,     "H"
2720                    ),
2721                );
2722
2723     -Code cleaned up by removing the following unused, undocumented flags.
2724      They should not be in any .perltidyrc files because they were just
2725      experimental flags which were never documented.  Most of them placed
2726      artificial limits on spaces, and Wolfgang Weisselberg convinced me that
2727      most of them they do more harm than good by causing unexpected results.
2728
2729      --maximum-continuation-indentation (-mci)
2730      --maximum-whitespace-columns
2731      --maximum-space-to-comment (-xsc)
2732      --big-space-jump (-bsj)
2733
2734     -Pod file 'perltidy.pod' has been appended to the script 'perltidy', and
2735      Tidy.pod has been append to the module 'Tidy.pm'.  Older MakeMaker's
2736      were having trouble.
2737     
2738     -A new flag -isbc has been added for more control on comments. This flag
2739      has the effect that if there is no leading space on the line, then the
2740      comment will not be indented, and otherwise it may be.  If both -ibc and
2741      -isbc are set, then -isbc takes priority.  Thanks to Frank Steinhauer
2742      for suggesting this.
2743
2744     -A new document 'stylekey.pod' has been created to quickly guide new users
2745      through the maze of perltidy style parameters.  An html version is 
2746      on the perltidy web page.  Take a look! It should be very helpful.
2747
2748     -Parameters for controlling 'vertical tightness' have been added:
2749      -vt and -vtc are the main controls, but finer control is provided
2750      with -pvt, -pcvt, -bvt, -bcvt, -sbvt, -sbcvt.  Block brace vertical
2751      tightness controls have also been added.
2752      See updated manual and also see 'stylekey.pod'. Simple examples:
2753
2754        # perltidy -lp -vt=1 -vtc=1
2755        @month_of_year = ( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
2756                           'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' );
2757
2758        # perltidy -lp -vt=1 -vtc=0
2759        @month_of_year = ( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
2760                           'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
2761        );
2762
2763     -Lists which do not format well in uniform columns are now better
2764      identified and formated.
2765
2766        OLD:
2767        return $c->create( 'polygon', $x, $y, $x + $ruler_info{'size'},
2768            $y + $ruler_info{'size'}, $x - $ruler_info{'size'},
2769            $y + $ruler_info{'size'} );
2770
2771        NEW:
2772        return $c->create(
2773            'polygon', $x, $y,
2774            $x + $ruler_info{'size'},
2775            $y + $ruler_info{'size'},
2776            $x - $ruler_info{'size'},
2777            $y + $ruler_info{'size'}
2778        );
2779
2780        OLD:
2781          radlablist($f1, pad('Initial', $p), $b->{Init}->get_panel_ref, 'None ',
2782                     'None', 'Default', 'Default', 'Simple', 'Simple');
2783        NEW:
2784          radlablist($f1,
2785                     pad('Initial', $p),
2786                     $b->{Init}->get_panel_ref,
2787                     'None ', 'None', 'Default', 'Default', 'Simple', 'Simple');
2788
2789     -Corrected problem where an incorrect html filename was generated for 
2790      external calls to Tidy.pm module.  Fixed incorrect html title when
2791      Tidy.pm is called with IO::Scalar or IO::Array source.
2792
2793     -Output file permissions are now set as follows.  An output script file
2794      gets the same permission as the input file, except that owner
2795      read/write permission is added (otherwise, perltidy could not be
2796      rerun).  Html output files use system defaults.  Previously chmod 0755
2797      was used in all cases.  Thanks to Mark Olesen for bringing this up.
2798
2799     -Missing semicolons will not be added in multi-line blocks of type
2800      sort, map, or grep.  This brings perltidy into closer agreement
2801      with common practice.  Of course, you can still put semicolons 
2802      there if you like.  Thanks to Simon Perreault for a discussion of this.
2803
2804     -Most instances of extra semicolons are now deleted.  This is
2805      particularly important if the -csc option is used.  Thanks to Wolfgang
2806      Weisselberg for noting this.  For example, the following line
2807      (produced by 'h2xs' :) has an extra semicolon which will now be
2808      removed:
2809
2810         BEGIN { plan tests => 1 };
2811
2812     -New parameter -csce (--closing-side-comment-else-flag) can be used
2813      to control what text is appended to 'else' and 'elsif' blocks.
2814      Default is to just add leading 'if' text to an 'else'.  See manual.
2815
2816     -The -csc option now labels 'else' blocks with additinal information
2817      from the opening if statement and elsif statements, if space.
2818      Thanks to Wolfgang Weisselberg for suggesting this.
2819
2820     -The -csc option will now remove any old closing side comments
2821      below the line interval threshold. Thanks to Wolfgang Weisselberg for
2822      suggesting this.
2823
2824     -The abbreviation feature, which was broken in the previous version,
2825      is now fixed.  Thanks to Michael Cartmell for noting this.
2826
2827     -Vertical alignment is now done for '||='  .. somehow this was 
2828      overlooked.
2829
2830 ## 2002 02 25
2831
2832     -This version uses modules for the first time, and a standard perl
2833      Makefile.PL has been supplied.  However, perltidy may still be
2834      installed as a single script, without modules.  See INSTALL for
2835      details.
2836
2837     -The man page 'perl2web' has been merged back into the main 'perltidy'
2838      man page to simplify installation.  So you may remove that man page
2839      if you have an older installation.
2840
2841     -Added patch from Axel Rose for MacPerl.  The patch prompts the user
2842      for command line arguments before calling the module 
2843      Perl::Tidy::perltidy.
2844
2845     -Corrected bug with '-bar' which was introduced in the previous
2846      version.  A closing block brace was being indented.  Thanks to
2847      Alexandros M Manoussakis for reporting this.
2848
2849     -New parameter '--entab-leading-whitespace=n', or '-et=n', has been
2850      added for those who prefer tabs.  This behaves different from the
2851      existing '-t' parameter; see updated man page.  Suggested by Mark
2852      Olesen.
2853
2854     -New parameter '--perl-syntax-check-flags=s'  or '-pcsf=s' can be
2855      used to change the flags passed to perltidy in a syntax check.
2856      See updated man page.  Suggested by Mark Olesen. 
2857
2858     -New parameter '--output-path=s'  or '-opath=s' will cause output
2859      files to be placed in directory s.  See updated man page.  Thanks for
2860      Mark Olesen for suggesting this.
2861
2862     -New parameter --dump-profile (or -dpro) will dump to
2863      standard output information about the search for a
2864      configuration file, the name of whatever configuration file
2865      is selected, and its contents.  This should help debugging
2866      config files, especially on different Windows systems.
2867
2868     -The -w parameter now notes possible errors of the form:
2869
2870            $comment = s/^\s*(\S+)\..*/$1/;   # trim whitespace
2871
2872     -Corrections added for a leading ':' and for leaving a leading 'tcsh'
2873      line untouched.  Mark Olesen reported that lines of this form were
2874      accepted by perl but not by perltidy:
2875
2876            : # use -*- perl -*-
2877            eval 'exec perl -wS $0 "$@"'  # shell should exec 'perl'
2878            unless 1;                     # but Perl should skip this one
2879
2880      Perl will silently swallow a leading colon on line 1 of a
2881      script, and now perltidy will do likewise.  For example,
2882      this is a valid script, provided that it is the first line,
2883      but not otherwise:
2884
2885            : print "Hello World\n";
2886      
2887      Also, perltidy will now mark a first line with leading ':' followed by
2888      '#' as type SYSTEM (just as a #!  line), not to be formatted.
2889
2890     -List formatting improved for certain lists with special
2891      initial terms, such as occur with 'printf', 'sprintf',
2892      'push', 'pack', 'join', 'chmod'.  The special initial term is
2893      now placed on a line by itself.  For example, perltidy -gnu
2894
2895         OLD:
2896            $Addr = pack(
2897                         "C4",                hex($SourceAddr[0]),
2898                         hex($SourceAddr[1]), hex($SourceAddr[2]),
2899                         hex($SourceAddr[3])
2900                         );
2901
2902         NEW:
2903            $Addr = pack("C4",
2904                         hex($SourceAddr[0]), hex($SourceAddr[1]),
2905                         hex($SourceAddr[2]), hex($SourceAddr[3]));
2906
2907          OLD:
2908                push (
2909                      @{$$self{states}}, '64', '66', '68',
2910                      '70',              '72', '74', '76',
2911                      '78',              '80', '82', '84',
2912                      '86',              '88', '90', '92',
2913                      '94',              '96', '98', '100',
2914                      '102',             '104'
2915                      );
2916
2917          NEW:
2918                push (
2919                      @{$$self{states}},
2920                      '64', '66', '68', '70', '72',  '74',  '76',
2921                      '78', '80', '82', '84', '86',  '88',  '90',
2922                      '92', '94', '96', '98', '100', '102', '104'
2923                      );
2924
2925     -Lists of complex items, such as matricies, are now detected
2926      and displayed with just one item per row:
2927
2928        OLD:
2929        $this->{'CURRENT'}{'gfx'}{'MatrixSkew'} = Text::PDF::API::Matrix->new(
2930            [ 1, tan( deg2rad($a) ), 0 ], [ tan( deg2rad($b) ), 1, 0 ],
2931            [ 0, 0, 1 ]
2932        );
2933
2934        NEW:
2935        $this->{'CURRENT'}{'gfx'}{'MatrixSkew'} = Text::PDF::API::Matrix->new(
2936            [ 1,                  tan( deg2rad($a) ), 0 ],
2937            [ tan( deg2rad($b) ), 1,                  0 ],
2938            [ 0,                  0,                  1 ]
2939        );
2940
2941     -The perl syntax check will be turned off for now when input is from
2942      standard input or standard output.  The reason is that this requires
2943      temporary files, which has produced far too many problems during
2944      Windows testing.  For example, the POSIX module under Windows XP/2000
2945      creates temporary names in the root directory, to which only the
2946      administrator should have permission to write.
2947
2948     -Merged patch sent by Yves Orton to handle appropriate
2949      configuration file locations for different Windows varieties
2950      (2000, NT, Me, XP, 95, 98).
2951
2952     -Added patch to properly handle a for/foreach loop without
2953      parens around a list represented as a qw.  I didn't know this
2954      was possible until Wolfgang Weisselberg pointed it out:
2955
2956            foreach my $key qw\Uno Due Tres Quadro\ {
2957                print "Set $key\n";
2958            }
2959
2960      But Perl will give a syntax error without the $ variable; ie this will
2961      not work:
2962
2963            foreach qw\Uno Due Tres Quadro\ {
2964                print "Set $_\n";
2965            }
2966
2967     -Merged Windows version detection code sent by Yves Orton.  Perltidy
2968      now automatically turns off syntax checking for Win 9x/ME versions,
2969      and this has solved a lot of robustness problems.  These systems 
2970      cannot reliably handle backtick operators.  See man page for
2971      details.
2972      
2973     -Merged VMS filename handling patch sent by Michael Cartmell.  (Invalid
2974      output filenames were being created in some cases). 
2975
2976     -Numerous minor improvements have been made for -lp style indentation.
2977
2978     -Long C-style 'for' expressions will be broken after each ';'.   
2979
2980      'perltidy -gnu' gives:
2981
2982        OLD:
2983        for ($status = $db->seq($key, $value, R_CURSOR()) ; $status == 0
2984             and $key eq $origkey ; $status = $db->seq($key, $value, R_NEXT())) 
2985
2986        NEW:
2987        for ($status = $db->seq($key, $value, R_CURSOR()) ;
2988             $status == 0 and $key eq $origkey ;
2989             $status = $db->seq($key, $value, R_NEXT()))
2990
2991     -For the -lp option, a single long term within parens
2992      (without commas) now has better alignment.  For example,
2993      perltidy -gnu
2994
2995                OLD:
2996                $self->throw("Must specify a known host, not $location,"
2997                      . " possible values ("
2998                      . join (",", sort keys %hosts) . ")");
2999
3000                NEW:
3001                $self->throw("Must specify a known host, not $location,"
3002                             . " possible values ("
3003                             . join (",", sort keys %hosts) . ")");
3004
3005 ## 2001 12 31
3006
3007     -This version is about 20 percent faster than the previous
3008      version as a result of optimization work.  The largest gain
3009      came from switching to a dispatch hash table in the
3010      tokenizer.
3011
3012     -perltidy -html will check to see if HTML::Entities is
3013      installed, and if so, it will use it to encode unsafe
3014      characters.
3015
3016     -Added flag -oext=ext to change the output file extension to
3017      be different from the default ('tdy' or 'html').  For
3018      example:
3019
3020        perltidy -html -oext=htm filename
3021
3022     will produce filename.htm
3023
3024     -Added flag -cscw to issue warnings if a closing side comment would replace
3025     an existing, different side comments.  See the man page for details.
3026     Thanks to Peter Masiar for helpful discussions.
3027
3028     -Corrected tokenization error of signed hex/octal/binary numbers. For
3029     example, the first hex number below would have been parsed correctly
3030     but the second one was not:
3031        if ( ( $tmp >= 0x80_00_00 ) || ( $tmp < -0x80_00_00 ) ) { }
3032
3033     -'**=' was incorrectly tokenized as '**' and '='.  This only
3034         caused a problem with the -extrude opton.
3035
3036     -Corrected a divide by zero when -extrude option is used
3037
3038     -The flag -w will now contain all errors reported by 'perl -c' on the
3039     input file, but otherwise they are not reported.  The reason is that
3040     perl will report lots of problems and syntax errors which are not of
3041     interest when only a small snippet is being formatted (such as missing
3042     modules and unknown bare words).  Perltidy will always report all
3043     significant syntax errors that it finds, such as unbalanced braces,
3044     unless the -q (quiet) flag is set.
3045
3046     -Merged modifications created by Hugh Myers into perltidy.
3047      These include a 'streamhandle' routine which allows perltidy
3048      as a module to operate on input and output arrays and strings
3049      in addition to files.  Documentation and new packaging as a
3050      module should be ready early next year; This is an elegant,
3051      powerful update; many thanks to Hugh for contributing it.
3052
3053 ## 2001 11 28
3054
3055     -added a tentative patch which tries to keep any existing breakpoints
3056     at lines with leading keywords map,sort,eval,grep. The idea is to
3057     improve formatting of sequences of list operations, as in a schwartzian
3058     transform.  Example:
3059
3060        INPUT:
3061        my @sorted = map { $_->[0] }
3062                     sort { $a->[1] <=> $b->[1] }
3063                     map { [ $_, rand ] } @list;
3064
3065        OLD:
3066        my @sorted =
3067          map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { [ $_, rand ] } @list;
3068
3069        NEW:
3070        my @sorted = map { $_->[0] }
3071          sort { $a->[1] <=> $b->[1] }
3072          map { [ $_, rand ] } @list;
3073
3074      The new alignment is not as nice as the input, but this is an improvement.
3075      Thanks to Yves Orton for this suggestion.
3076
3077     -modified indentation logic so that a line with leading opening paren,
3078     brace, or square bracket will never have less indentation than the
3079     line with the corresponding opening token.  Here's a simple example:
3080
3081        OLD:
3082            $mw->Button(
3083                -text    => "New Document",
3084                -command => \&new_document
3085              )->pack(
3086                -side   => 'bottom',
3087                -anchor => 'e'
3088            );
3089
3090        Note how the closing ');' is lined up with the first line, even
3091        though it closes a paren in the 'pack' line.  That seems wrong.
3092     
3093        NEW:
3094            $mw->Button(
3095                -text    => "New Document",
3096                -command => \&new_document
3097              )->pack(
3098                -side   => 'bottom',
3099                -anchor => 'e'
3100              );
3101
3102       This seems nicer: you can up-arrow with an editor and arrive at the
3103       opening 'pack' line.
3104     
3105     -corrected minor glitch in which cuddled else (-ce) did not get applied
3106     to an 'unless' block, which should look like this:
3107
3108            unless ($test) {
3109
3110            } else {
3111
3112            }
3113
3114      Thanks to Jeremy Mates for reporting this.
3115
3116     -The man page has been reorganized to parameters easier to find.
3117     
3118     -Added check for multiple definitions of same subroutine.  It is easy
3119      to introduce this problem when cutting and pasting. Perl does not
3120      complain about it, but it can lead to disaster.
3121
3122     -The command -pro=filename  or -profile=filename may be used to specify a
3123      configuration file which will override the default name of .perltidyrc.
3124      There must not be a space on either side of the '=' sign.  I needed
3125      this to be able to easily test perltidy with a variety of different
3126      configuration files.
3127
3128     -Side comment alignment has been improved somewhat across frequent level
3129      changes, as in short if/else blocks.  Thanks to Wolfgang Weisselberg 
3130      for pointing out this problem.  For example:
3131        
3132        OLD:
3133        if ( ref $self ) {    # Called as a method
3134            $format = shift;
3135        }
3136        else {    # Regular procedure call
3137            $format = $self;
3138            undef $self;
3139        }
3140
3141        NEW:
3142        if ( ref $self ) {    # Called as a method
3143            $format = shift;
3144        }
3145        else {                # Regular procedure call
3146            $format = $self;
3147            undef $self;
3148        }
3149
3150     -New command -ssc (--static-side-comment) and related command allows
3151      side comments to be spaced close to preceding character.  This is
3152      useful for displaying commented code as side comments.
3153
3154     -New command -csc (--closing-side-comment) and several related
3155      commands allow comments to be added to (and deleted from) any or all
3156      closing block braces.  This can be useful if you have to maintain large
3157      programs, especially those that you didn't write.  See updated man page.
3158      Thanks to Peter Masiar for this suggestion.  For a simple example:
3159
3160            perltidy -csc
3161
3162            sub foo {
3163                if ( !defined( $_[0] ) ) {
3164                    print("Hello, World\n");
3165                }
3166                else {
3167                    print( $_[0], "\n" );
3168                }
3169            } ## end sub foo
3170
3171      This added '## end sub foo' to the closing brace.  
3172      To remove it, perltidy -ncsc.
3173
3174     -New commands -ola, for outdenting labels, and -okw, for outdenting
3175      selected control keywords, were implemented.  See the perltidy man
3176      page for details.  Thanks to Peter Masiar for this suggestion.
3177
3178     -Hanging side comment change: a comment will not be considered to be a
3179      hanging side comment if there is no leading whitespace on the line.
3180      This should improve the reliability of identifying hanging side comments.
3181      Thanks to Peter Masiar for this suggestion.
3182
3183     -Two new commands for outdenting, -olq (outdent-long-quotes) and -olc
3184      (outdent-long-comments), have been added.  The original -oll
3185      (outdent-long-lines) remains, and now is an abbreviation for -olq and -olc.
3186      The new default is just -olq.  This was necessary to avoid inconsistency with
3187      the new static block comment option.
3188
3189     -Static block comments:  to provide a way to display commented code
3190      better, the convention is used that comments with a leading '##' should
3191      not be formatted as usual.  Please see '-sbc' (or '--static-block-comment')
3192      for documentation.  It can be deactivated with with -nsbc, but
3193      should not normally be necessary. Thanks to Peter Masiar for this 
3194      suggestion.
3195
3196     -Two changes were made to help show structure of complex lists:
3197      (1) breakpoints are forced after every ',' in a list where any of
3198      the list items spans multiple lines, and
3199      (2) List items which span multiple lines now get continuation indentation.
3200
3201      The following example illustrates both of these points.  Many thanks to
3202      Wolfgang Weisselberg for this snippet and a discussion of it; this is a
3203      significant formatting improvement. Note how it is easier to see the call
3204      parameters in the NEW version:
3205
3206        OLD:
3207        assert( __LINE__, ( not defined $check )
3208            or ref $check
3209            or $check eq "new"
3210            or $check eq "old", "Error in parameters",
3211            defined $old_new ? ( ref $old_new ? ref $old_new : $old_new ) : "undef",
3212            defined $db_new  ? ( ref $db_new  ? ref $db_new  : $db_new )  : "undef",
3213            defined $old_db ? ( ref $old_db ? ref $old_db : $old_db ) : "undef" );
3214
3215        NEW: 
3216        assert(
3217            __LINE__,
3218            ( not defined $check )
3219              or ref $check
3220              or $check eq "new"
3221              or $check eq "old",
3222            "Error in parameters",
3223            defined $old_new ? ( ref $old_new ? ref $old_new : $old_new ) : "undef",
3224            defined $db_new  ? ( ref $db_new  ? ref $db_new  : $db_new )  : "undef",
3225            defined $old_db  ? ( ref $old_db  ? ref $old_db  : $old_db )  : "undef"
3226        );
3227
3228        Another example shows how this helps displaying lists:
3229
3230        OLD:
3231        %{ $self->{COMPONENTS} } = (
3232            fname =>
3233            { type => 'name', adj => 'yes', font => 'Helvetica', 'index' => 0 },
3234            street =>
3235            { type => 'road', adj => 'yes', font => 'Helvetica', 'index' => 2 },
3236        );
3237
3238        The structure is clearer with the added indentation:
3239        
3240        NEW:
3241        %{ $self->{COMPONENTS} } = (
3242            fname =>
3243              { type => 'name', adj => 'yes', font => 'Helvetica', 'index' => 0 },
3244            street =>
3245              { type => 'road', adj => 'yes', font => 'Helvetica', 'index' => 2 },
3246        );
3247
3248        -The structure of nested logical expressions is now displayed better.
3249        Thanks to Wolfgang Weisselberg for helpful discussions.  For example,
3250        note how the status of the final 'or' is displayed in the following:
3251
3252        OLD:
3253        return ( !null($op)
3254              and null( $op->sibling )
3255              and $op->ppaddr eq "pp_null"
3256              and class($op) eq "UNOP"
3257              and ( ( $op->first->ppaddr =~ /^pp_(and|or)$/
3258                and $op->first->first->sibling->ppaddr eq "pp_lineseq" )
3259                or ( $op->first->ppaddr eq "pp_lineseq"
3260                    and not null $op->first->first->sibling
3261                    and $op->first->first->sibling->ppaddr eq "pp_unstack" ) ) );
3262
3263        NEW:
3264        return (
3265            !null($op)
3266              and null( $op->sibling )
3267              and $op->ppaddr eq "pp_null"
3268              and class($op) eq "UNOP"
3269              and (
3270                (
3271                    $op->first->ppaddr =~ /^pp_(and|or)$/
3272                    and $op->first->first->sibling->ppaddr eq "pp_lineseq"
3273                )
3274                or ( $op->first->ppaddr eq "pp_lineseq"
3275                    and not null $op->first->first->sibling
3276                    and $op->first->first->sibling->ppaddr eq "pp_unstack" )
3277              )
3278        );
3279
3280       -A break will always be put before a list item containing a comma-arrow.
3281       This will improve formatting of mixed lists of this form:
3282
3283            OLD:
3284            $c->create(
3285                'text', 225, 20, -text => 'A Simple Plot',
3286                -font => $font,
3287                -fill => 'brown'
3288            );
3289
3290            NEW:
3291            $c->create(
3292                'text', 225, 20,
3293                -text => 'A Simple Plot',
3294                -font => $font,
3295                -fill => 'brown'
3296            );
3297
3298      -For convenience, the command -dac (--delete-all-comments) now also
3299      deletes pod.  Likewise, -tac (--tee-all-comments) now also sends pod
3300      to a '.TEE' file.  Complete control over the treatment of pod and
3301      comments is still possible, as described in the updated help message 
3302      and man page.
3303
3304      -The logic which breaks open 'containers' has been rewritten to be completely
3305      symmetric in the following sense: if a line break is placed after an opening
3306      {, [, or (, then a break will be placed before the corresponding closing
3307      token.  Thus, a container either remains closed or is completely cracked
3308      open.
3309
3310      -Improved indentation of parenthesized lists.  For example, 
3311
3312                OLD:
3313                $GPSCompCourse =
3314                  int(
3315                  atan2( $GPSTempCompLong - $GPSLongitude,
3316                  $GPSLatitude - $GPSTempCompLat ) * 180 / 3.14159265 );
3317
3318                NEW:
3319                $GPSCompCourse = int(
3320                    atan2(
3321                        $GPSTempCompLong - $GPSLongitude,
3322                        $GPSLatitude - $GPSTempCompLat
3323                      ) * 180 / 3.14159265
3324                );
3325
3326       Further improvements will be made in future releases.
3327
3328      -Some improvements were made in formatting small lists.
3329
3330      -Correspondence between Input and Output line numbers reported in a 
3331       .LOG file should now be exact.  They were sometimes off due to the size
3332       of intermediate buffers.
3333
3334      -Corrected minor tokenization error in which a ';' in a foreach loop
3335       control was tokenized as a statement termination, which forced a 
3336       line break:
3337
3338            OLD:
3339            foreach ( $i = 0;
3340                $i <= 10;
3341                $i += 2
3342              )
3343            {
3344                print "$i ";
3345            }
3346
3347            NEW:
3348            foreach ( $i = 0 ; $i <= 10 ; $i += 2 ) {
3349                print "$i ";
3350            }
3351
3352      -Corrected a problem with reading config files, in which quote marks were not
3353       stripped.  As a result, something like -wba="&& . || " would have the leading
3354       quote attached to the && and not work correctly.  A workaround for older
3355       versions is to place a space around all tokens within the quotes, like this:
3356       -wba=" && . || "
3357
3358      -Removed any existing space between a label and its ':'
3359        OLD    : { }
3360        NEW: { }
3361       This was necessary because the label and its colon are a single token.
3362
3363      -Corrected tokenization error for the following (highly non-recommended) 
3364       construct:
3365        $user = @vars[1] / 100;
3366     
3367      -Resolved cause of a difference between perltidy under perl v5.6.1 and
3368      5.005_03; the problem was different behavior of \G regex position
3369      marker(!)
3370
3371 ## 2001 10 20
3372
3373     -Corrected a bug in which a break was not being made after a full-line
3374     comment within a short eval/sort/map/grep block.  A flag was not being
3375     zeroed.  The syntax error check catches this.  Here is a snippet which
3376     illustrates the bug:
3377
3378            eval {
3379                #open Socket to Dispatcher
3380                $sock = &OpenSocket;
3381            };
3382
3383     The formatter mistakenly thought that it had found the following 
3384     one-line block:
3385     
3386            eval {#open Socket to Dispatcher$sock = &OpenSocket; };
3387
3388     The patch fixes this. Many thanks to Henry Story for reporting this bug.
3389
3390     -Changes were made to help diagnose and resolve problems in a
3391     .perltidyrc file: 
3392       (1) processing of command parameters has been into two separate
3393       batches so that any errors in a .perltidyrc file can be localized.  
3394       (2) commands --help, --version, and as many of the --dump-xxx
3395       commands are handled immediately, without any command line processing
3396       at all.  
3397       (3) Perltidy will ignore any commands in the .perltidyrc file which
3398       cause immediate exit.  These are:  -h -v -ddf -dln -dop -dsn -dtt
3399       -dwls -dwrs -ss.  Thanks to Wolfgang Weisselberg for helpful
3400       suggestions regarding these updates.
3401
3402     -Syntax check has been reinstated as default for MSWin32 systems.  This
3403     way Windows 2000 users will get syntax check by default, which seems
3404     like a better idea, since the number of Win 95/98 systems will be
3405     decreasing over time.  Documentation revised to warn Windows 95/98
3406     users about the problem with empty '&1'.  Too bad these systems
3407     all report themselves as MSWin32.
3408
3409 ## 2001 10 16
3410
3411     -Fixed tokenization error in which a method call of the form
3412
3413        Module::->new();
3414     
3415      got a space before the '::' like this:
3416
3417        Module ::->new();
3418
3419      Thanks to David Holden for reporting this.
3420     
3421     -Added -html control over pod text, using a new abbreviation 'pd'.  See
3422     updated perl2web man page. The default is to use the color of a comment,
3423     but italicized.  Old .css style sheets will need a new line for
3424     .pd to use this.  The old color was the color of a string, and there
3425     was no control.  
3426     
3427     -.css lines are now printed in sorted order.
3428
3429     -Fixed interpolation problem where html files had '$input_file' as title
3430     instead of actual input file name.  Thanks to Simon Perreault for finding
3431     this and sending a patch, and also to Tobias Weber.
3432
3433     -Breaks will now have the ':' placed at the start of a line, 
3434     one per line by default because this shows logical structure
3435     more clearly. This coding has been completely redone. Some 
3436     examples of new ?/: formatting:
3437
3438           OLD:
3439                wantarray ? map( $dir::cwd->lookup($_)->path, @_ ) :
3440                  $dir::cwd->lookup( $_[0] )->path;
3441
3442           NEW:
3443                wantarray 
3444                  ? map( $dir::cwd->lookup($_)->path, @_ )
3445                  : $dir::cwd->lookup( $_[0] )->path;
3446
3447           OLD:
3448                    $a = ( $b > 0 ) ? {
3449                        a => 1,
3450                        b => 2
3451                    } : { a => 6, b => 8 };
3452
3453           NEW:
3454                    $a = ( $b > 0 )
3455                      ? {
3456                        a => 1,
3457                        b => 2
3458                      }
3459                      : { a => 6, b => 8 };
3460
3461        OLD: (-gnu):
3462        $self->note($self->{skip} ? "Hunk #$self->{hunk} ignored at 1.\n" :
3463                    "Hunk #$self->{hunk} failed--$@");
3464
3465        NEW: (-gnu):
3466        $self->note($self->{skip} 
3467                    ? "Hunk #$self->{hunk} ignored at 1.\n"
3468                    : "Hunk #$self->{hunk} failed--$@");
3469
3470        OLD:
3471            $which_search =
3472              $opts{"t"} ? 'title'   :
3473              $opts{"s"} ? 'subject' : $opts{"a"} ? 'author' : 'title';
3474
3475        NEW:
3476            $which_search =
3477              $opts{"t"} ? 'title'
3478              : $opts{"s"} ? 'subject'
3479              : $opts{"a"} ? 'author'
3480              : 'title';
3481     
3482     You can use -wba=':' to recover the previous default which placed ':'
3483     at the end of a line.  Thanks to Michael Cartmell for helpful
3484     discussions and examples.  
3485
3486     -Tokenizer updated to do syntax checking for matched ?/: pairs.  Also,
3487     the tokenizer now outputs a unique serial number for every balanced
3488     pair of brace types and ?/: pairs.  This greatly simplifies the
3489     formatter.
3490
3491     -Long lines with repeated 'and', 'or', '&&', '||'  will now have
3492     one such item per line.  For example:
3493
3494        OLD:
3495            if ( $opt_d || $opt_m || $opt_p || $opt_t || $opt_x
3496                || ( -e $archive && $opt_r ) )
3497            {
3498                ( $pAr, $pNames ) = readAr($archive);
3499            }
3500
3501        NEW:
3502            if ( $opt_d
3503                || $opt_m
3504                || $opt_p
3505                || $opt_t
3506                || $opt_x
3507                || ( -e $archive && $opt_r ) )
3508            {
3509                ( $pAr, $pNames ) = readAr($archive);
3510            }
3511
3512       OLD:
3513            if ( $vp->{X0} + 4 <= $x && $vp->{X0} + $vp->{W} - 4 >= $x
3514                && $vp->{Y0} + 4 <= $y && $vp->{Y0} + $vp->{H} - 4 >= $y ) 
3515
3516       NEW:
3517            if ( $vp->{X0} + 4 <= $x
3518                && $vp->{X0} + $vp->{W} - 4 >= $x
3519                && $vp->{Y0} + 4 <= $y
3520                && $vp->{Y0} + $vp->{H} - 4 >= $y )
3521
3522     -Long lines with multiple concatenated tokens will have concatenated
3523     terms (see below) placed one per line, except for short items.  For
3524     example:
3525
3526       OLD:
3527            $report .=
3528              "Device type:" . $ib->family . "  ID:" . $ib->serial . "  CRC:"
3529              . $ib->crc . ": " . $ib->model() . "\n";
3530
3531       NEW:
3532            $report .= "Device type:"
3533              . $ib->family . "  ID:"
3534              . $ib->serial . "  CRC:"
3535              . $ib->model()
3536              . $ib->crc . ": " . "\n";
3537
3538     NOTE: at present 'short' means 8 characters or less.  There is a
3539     tentative flag to change this (-scl), but it is undocumented and
3540     is likely to be changed or removed later, so only use it for testing.  
3541     In the above example, the tokens "  ID:", "  CRC:", and "\n" are below
3542     this limit.  
3543
3544     -If a line which is short enough to fit on a single line was
3545     nevertheless broken in the input file at a 'good' location (see below), 
3546     perltidy will try to retain a break.  For example, the following line
3547     will be formatted as:
3548     
3549        open SUM, "<$file"
3550          or die "Cannot open $file ($!)";
3551     
3552     if it was broken in the input file, and like this if not:
3553
3554        open SUM, "<$file" or die "Cannot open $file ($!)";
3555
3556     GOOD: 'good' location means before 'and','or','if','unless','&&','||'
3557
3558     The reason perltidy does not just always break at these points is that if
3559     there are multiple, similar statements, this would preclude alignment.  So
3560     rather than check for this, perltidy just tries to follow the input style,
3561     in the hopes that the author made a good choice. Here is an example where 
3562     we might not want to break before each 'if':
3563
3564        ($Locale, @Locale) = ($English, @English) if (@English > @Locale);
3565        ($Locale, @Locale) = ($German,  @German)  if (@German > @Locale);
3566        ($Locale, @Locale) = ($French,  @French)  if (@French > @Locale);
3567        ($Locale, @Locale) = ($Spanish, @Spanish) if (@Spanish > @Locale);
3568
3569     -Added wildcard file expansion for systems with shells which lack this.
3570     Now 'perltidy *.pl' should work under MSDOS/Windows.  Thanks to Hugh Myers 
3571     for suggesting this.  This uses builtin glob() for now; I may change that.
3572
3573     -Added new flag -sbl which, if specified, overrides the value of -bl
3574     for opening sub braces.  This allows formatting of this type:
3575
3576     perltidy -sbl 
3577
3578     sub foo
3579     {
3580        if (!defined($_[0])) {
3581            print("Hello, World\n");
3582        }
3583        else {
3584            print($_[0], "\n");
3585        }
3586     }
3587     Requested by Don Alexander.
3588
3589     -Fixed minor parsing error which prevented a space after a $$ variable
3590     (pid) in some cases.  Thanks to Michael Cartmell for noting this.
3591     For example, 
3592       old: $$< 700 
3593       new: $$ < 700
3594
3595     -Improved line break choices 'and' and 'or' to display logic better.
3596     For example:
3597
3598        OLD:
3599            exists $self->{'build_dir'} and push @e,
3600              "Unwrapped into directory $self->{'build_dir'}";
3601
3602        NEW:
3603            exists $self->{'build_dir'}
3604              and push @e, "Unwrapped into directory $self->{'build_dir'}";
3605
3606     -Fixed error of multiple use of abbreviatioin '-dsc'.  -dsc remains 
3607     abbreviation for delete-side-comments; -dsm is new abbreviation for 
3608     delete-semicolons.
3609
3610     -Corrected and updated 'usage' help routine.  Thanks to Slaven Rezic for 
3611     noting an error.
3612
3613     -The default for Windows is, for now, not to do a 'perl -c' syntax
3614     check (but -syn will activate it).  This is because of problems with
3615     command.com.  James Freeman sent me a patch which tries to get around
3616     the problems, and it works in many cases, but testing revealed several
3617     issues that still need to be resolved.  So for now, the default is no
3618     syntax check for Windows.
3619
3620     -I added a -T flag when doing perl -c syntax check.
3621     This is because I test it on a large number of scripts from sources
3622     unknown, and who knows what might be hidden in initialization blocks?
3623     Also, deactivated the syntax check if perltidy is run as root.  As a
3624     benign example, running the previous version of perltidy on the
3625     following file would cause it to disappear:
3626
3627            BEGIN{
3628                    print "Bye, bye baby!\n";
3629                    unlink $0;
3630            }
3631            
3632     The new version will not let that happen.
3633
3634     -I am contemplating (but have not yet implemented) making '-lp' the
3635     default indentation, because it is stable now and may be closer to how
3636     perl is commonly formatted.  This could be in the next release.  The
3637     reason that '-lp' was not the original default is that the coding for
3638     it was complex and not ready for the initial release of perltidy.  If
3639     anyone has any strong feelings about this, I'd like to hear.  The
3640     current default could always be recovered with the '-nlp' flag.  
3641
3642 ## 2001 09 03 
3643
3644     -html updates:
3645         - sub definition names are now specially colored, red by default.  
3646           The letter 'm' is used to identify them.
3647         - keyword 'sub' now has color of other keywords.
3648         - restored html keyword color to __END__ and __DATA__, which was 
3649           accidentally removed in the previous version.
3650
3651     -A new -se (--standard-error-output) flag has been implemented and
3652     documented which causes all errors to be written to standard output
3653     instead of a .ERR file.
3654
3655     -A new -w (--warning-output) flag has been implemented and documented
3656      which causes perltidy to output certain non-critical messages to the
3657      error output file, .ERR.  These include complaints about pod usage,
3658      for example.  The default is to not include these.
3659
3660      NOTE: This replaces an undocumented -w=0 or --warning-level flag
3661      which was tentatively introduced in the previous version to avoid some
3662      unwanted messages.  The new default is the same as the old -w=0, so
3663      that is no longer needed. 
3664
3665      -Improved syntax checking and corrected tokenization of functions such
3666      as rand, srand, sqrt, ...  These can accept either an operator or a term
3667      to their right.  This has been corrected.
3668     
3669     -Corrected tokenization of semicolon: testing of the previous update showed 
3670     that the semicolon in the following statement was being mis-tokenized.  That
3671     did no harm, other than adding an extra blank space, but has been corrected.
3672
3673              for (sort {strcoll($a,$b);} keys %investments) {
3674                 ...
3675              }
3676
3677     -New syntax check: after wasting 5 minutes trying to resolve a syntax
3678      error in which I had an extra terminal ';' in a complex for (;;) statement, 
3679      I spent a few more minutes adding a check for this in perltidy so it won't
3680      happen again.
3681
3682     -The behavior of --break-before-subs (-bbs) and --break-before-blocks
3683     (-bbb) has been modified.  Also, a new control parameter,
3684     --long-block-line-count=n (-lbl=n) has been introduced to give more
3685     control on -bbb.  This was previously a hardwired value.  The reason
3686     for the change is to reduce the number of unwanted blank lines that
3687     perltidy introduces, and make it less erratic.  It's annoying to remove
3688     an unwanted blank line and have perltidy put it back.  The goal is to
3689     be able to sprinkle a few blank lines in that dense script you
3690     inherited from Bubba.  I did a lot of experimenting with different
3691     schemes for introducing blank lines before and after code blocks, and
3692     decided that there is no really good way to do it.  But I think the new
3693     scheme is an improvement.  You can always deactivate this with -nbbb.
3694     I've been meaning to work on this; thanks to Erik Thaysen for bringing
3695     it to my attention.
3696
3697     -The .LOG file is seldom needed, and I get tired of deleting them, so
3698      they will now only be automatically saved if perltidy thinks that it
3699      made an error, which is almost never.  You can still force the logfile
3700      to be saved with -log or -g.
3701
3702     -Improved method for computing number of columns in a table.  The old
3703     method always tried for an even number.  The new method allows odd
3704     numbers when it is obvious that a list is not a hash initialization
3705     list.
3706
3707       old: my (
3708                 $name,       $xsargs, $parobjs, $optypes,
3709                 $hasp2child, $pmcode, $hdrcode, $inplacecode,
3710                 $globalnew,  $callcopy
3711              )
3712              = @_;
3713
3714       new: my (
3715                 $name,   $xsargs,  $parobjs,     $optypes,   $hasp2child,
3716                 $pmcode, $hdrcode, $inplacecode, $globalnew, $callcopy
3717              )
3718              = @_;
3719
3720     -I fiddled with the list threshold adjustment, and some small lists
3721     look better now.  Here is the change for one of the lists in test file
3722     'sparse.t':
3723     old:
3724       %units =
3725         ("in", "in", "pt", "pt", "pc", "pi", "mm", "mm", "cm", "cm", "\\hsize", "%",
3726           "\\vsize", "%", "\\textwidth", "%", "\\textheight", "%");
3727
3728     new:
3729       %units = (
3730                  "in",      "in", "pt",          "pt", "pc",           "pi",
3731                  "mm",      "mm", "cm",          "cm", "\\hsize",      "%",
3732                  "\\vsize", "%",  "\\textwidth", "%",  "\\textheight", "%"
3733                  );
3734
3735     -Improved -lp formatting at '=' sign.  A break was always being added after
3736     the '=' sign in a statement such as this, (to be sure there was enough room
3737     for the parameters):
3738
3739     old: my $fee =
3740            CalcReserveFee(
3741                            $env,          $borrnum,
3742                            $biblionumber, $constraint,
3743                            $bibitems
3744                            );
3745     
3746     The updated version doesn't do this unless the space is really needed:
3747
3748     new: my $fee = CalcReserveFee(
3749                                   $env,          $borrnum,
3750                                   $biblionumber, $constraint,
3751                                   $bibitems
3752                                   );
3753
3754     -I updated the tokenizer to allow $#+ and $#-, which seem to be new to
3755     Perl 5.6.  Some experimenting with a recent version of Perl indicated
3756     that it allows these non-alphanumeric '$#' array maximum index
3757     variables: $#: $#- $#+ so I updated the parser accordingly.  Only $#:
3758     seems to be valid in older versions of Perl.
3759
3760     -Fixed a rare formatting problem with -lp (and -gnu) which caused
3761     excessive indentation.
3762
3763     -Many additional syntax checks have been added.
3764
3765     -Revised method for testing here-doc target strings; the following
3766     was causing trouble with a regex test because of the '*' characters:
3767      print <<"*EOF*";
3768      bla bla
3769      *EOF*
3770     Perl seems to allow almost anything to be a here doc target, so an
3771     exact string comparison is now used.
3772
3773     -Made update to allow underscores in binary numbers, like '0b1100_0000'.
3774
3775     -Corrected problem with scanning certain module names; a blank space was 
3776     being inserted after 'warnings' in the following:
3777        use warnings::register;
3778     The problem was that warnings (and a couple of other key modules) were 
3779     being tokenized as keywords.  They should have just been identifiers.
3780
3781     -Corrected tokenization of indirect objects after sort, system, and exec,
3782     after testing produced an incorrect error message for the following
3783     line of code:
3784        print sort $sortsubref @list;
3785
3786     -Corrected minor problem where a line after a format had unwanted
3787     extra continuation indentation.  
3788
3789     -Delete-block-comments (and -dac) now retain any leading hash-bang line
3790
3791     -Update for -lp (and -gnu) to not align the leading '=' of a list
3792     with a previous '=', since this interferes with alignment of parameters.
3793
3794      old:  my $hireDay = new Date;
3795            my $self    = {
3796                         firstName => undef,
3797                         lastName  => undef,
3798                         hireDay   => $hireDay
3799                         };
3800        
3801      new:  my $hireDay = new Date;
3802            my $self = {
3803                         firstName => undef,
3804                         lastName  => undef,
3805                         hireDay   => $hireDay
3806                         };
3807
3808     -Modifications made to display tables more compactly when possible,
3809      without adding lines. For example,
3810      old:
3811                    '1', "I", '2', "II", '3', "III", '4', "IV",
3812                    '5', "V", '6', "VI", '7', "VII", '8', "VIII",
3813                    '9', "IX"
3814      new:
3815                    '1', "I",   '2', "II",   '3', "III",
3816                    '4', "IV",  '5', "V",    '6', "VI",
3817                    '7', "VII", '8', "VIII", '9', "IX"
3818
3819     -Corrected minor bug in which -pt=2 did not keep the right paren tight
3820     around a '++' or '--' token, like this:
3821
3822                for ($i = 0 ; $i < length $key ; $i++ )
3823
3824     The formatting for this should be, and now is: 
3825
3826                for ($i = 0 ; $i < length $key ; $i++)
3827
3828     Thanks to Erik Thaysen for noting this.
3829
3830     -Discovered a new bug involving here-docs during testing!  See BUGS.html.  
3831
3832     -Finally fixed parsing of subroutine attributes (A Perl 5.6 feature).
3833     However, the attributes and prototypes must still be on the same line
3834     as the sub name.
3835
3836 ## 2001 07 31 
3837
3838     -Corrected minor, uncommon bug found during routine testing, in which a
3839     blank got inserted between a function name and its opening paren after
3840     a file test operator, but only in the case that the function had not
3841     been previously seen.  Perl uses the existence (or lack thereof) of 
3842     the blank to guess if it is a function call.  That is,
3843        if (-l pid_filename()) {
3844     became
3845        if (-l pid_filename ()) {
3846     which is a syntax error if pid_filename has not been seen by perl.
3847
3848     -If the AutoLoader module is used, perltidy will continue formatting
3849     code after seeing an __END__ line.  Use -nlal to deactivate this feature.  
3850     Likewise, if the SelfLoader module is used, perltidy will continue 
3851     formatting code after seeing a __DATA__ line.  Use -nlsl to
3852     deactivate this feature.  Thanks to Slaven Rezic for this suggestion.
3853
3854     -pod text after __END__ and __DATA__ is now identified by perltidy
3855     so that -dp works correctly.  Thanks to Slaven Rezic for this suggestion.
3856
3857     -The first $VERSION line which might be eval'd by MakeMaker
3858     is now passed through unchanged.  Use -npvl to deactivate this feature.
3859     Thanks to Manfred Winter for this suggestion.
3860
3861     -Improved indentation of nested parenthesized expressions.  Tests have
3862     given favorable results.  Thanks to Wolfgang Weisselberg for helpful
3863     examples.
3864
3865 ## 2001 07 23 
3866
3867     -Fixed a very rare problem in which an unwanted semicolon was inserted
3868     due to misidentification of anonymous hash reference curly as a code
3869     block curly.  (No instances of this have been reported; I discovered it
3870     during testing).  A workaround for older versions of perltidy is to use
3871     -nasc.
3872
3873     -Added -icb (-indent-closing-brace) parameter to indent a brace which
3874     terminates a code block to the same level as the previous line.
3875     Suggested by Andrew Cutler.  For example, 
3876
3877            if ($task) {
3878                yyy();
3879                }    # -icb
3880            else {
3881                zzz();
3882                }
3883
3884     -Rewrote error message triggered by an unknown bareword in a print or
3885     printf filehandle position, and added flag -w=0 to prevent issuing this
3886     error message.  Suggested by Byron Jones.
3887
3888     -Added modification to align a one-line 'if' block with similar
3889     following 'elsif' one-line blocks, like this:
3890          if    ( $something eq "simple" )  { &handle_simple }
3891          elsif ( $something eq "hard" )    { &handle_hard }
3892     (Suggested by  Wolfgang Weisselberg).
3893
3894 ## 2001 07 02 
3895
3896     -Eliminated all constants with leading underscores because perl 5.005_03
3897     does not support that.  For example, _SPACES changed to XX_SPACES.
3898     Thanks to kromJx for this update.
3899
3900 ## 2001 07 01 
3901
3902     -the directory of test files has been moved to a separate distribution
3903     file because it is getting large but is of little interest to most users.
3904     For the current distribution:
3905       perltidy-20010701.tgz        contains the source and docs for perltidy
3906       perltidy-20010701-test.tgz   contains the test files
3907
3908     -fixed bug where temporary file perltidy.TMPI was not being deleted 
3909     when input was from stdin.
3910
3911     -adjusted line break logic to not break after closing brace of an
3912     eval block (suggested by Boris Zentner).
3913
3914     -added flag -gnu (--gnu-style) to give an approximation to the GNU
3915     style as sometimes applied to perl.  The programming style in GNU
3916     'automake' was used as a guide in setting the parameters; these
3917     parameters will probably be adjusted over time.
3918
3919     -an empty code block now has one space for emphasis:
3920       if ( $cmd eq "bg_untested" ) {}    # old
3921       if ( $cmd eq "bg_untested" ) { }   # new
3922     If this bothers anyone, we could create a parameter.
3923
3924     -the -bt (--brace-tightness) parameter has been split into two
3925     parameters to give more control. -bt now applies only to non-BLOCK
3926     braces, while a new parameter -bbt (block-brace-tightness) applies to
3927     curly braces which contain code BLOCKS. The default value is -bbt=0.
3928
3929     -added flag -icp (--indent-closing-paren) which leaves a statement
3930     termination of the form );, };, or ]; indented with the same
3931     indentation as the previous line.  For example,
3932
3933        @month_of_year = (          # default, or -nicp
3934            'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct',
3935            'Nov', 'Dec'
3936        );
3937
3938        @month_of_year = (          # -icp
3939            'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct',
3940            'Nov', 'Dec'
3941            );
3942
3943     -Vertical alignment updated to synchronize with tokens &&, ||,
3944     and, or, if, unless.  Allowable space before forcing
3945     resynchronization has been increased.  (Suggested by  Wolfgang
3946     Weisselberg).
3947
3948     -html corrected to use -nohtml-bold-xxxxxxx or -nhbx to negate bold,
3949     and likewise -nohtml-italic-xxxxxxx or -nhbi to negate italic.  There
3950     was no way to negate these previously.  html documentation updated and
3951     corrected.  (Suggested by  Wolfgang Weisselberg).
3952
3953     -Some modifications have been made which improve the -lp formatting in
3954     a few cases.
3955
3956     -Perltidy now retains or creates a blank line after an =cut to keep
3957     podchecker happy (Suggested by Manfred H. Winter).  This appears to be
3958     a glitch in podchecker, but it was annoying.
3959
3960 ## 2001 06 17  
3961
3962     -Added -bli flag to give continuation indentation to braces, like this
3963
3964            if ($bli_flag)
3965              {
3966                extra_indentation();
3967              }
3968
3969     -Corrected an error with the tab (-t) option which caused the last line
3970     of a multi-line quote to receive a leading tab.  This error was in
3971     version 2001 06 08  but not 2001 04 06.  If you formatted a script
3972     with -t with this version, please check it by running once with the
3973     -chk flag and perltidy will scan for this possible error.
3974
3975     -Corrected an invalid pattern (\R should have been just R), changed
3976     $^W =1 to BEGIN {$^W=1} to use warnings in compile phase, and corrected
3977     several unnecessary 'my' declarations. Many thanks to Wolfgang Weisselberg,
3978     2001-06-12, for catching these errors.
3979     
3980     -A '-bar' flag has been added to require braces to always be on the
3981     right, even for multi-line if and foreach statements.  For example,
3982     the default formatting of a long if statement would be:
3983
3984            if ($bigwasteofspace1 && $bigwasteofspace2
3985              || $bigwasteofspace3 && $bigwasteofspace4)
3986            {
3987                bigwastoftime();
3988            }
3989
3990     With -bar, the formatting is:
3991
3992            if ($bigwasteofspace1 && $bigwasteofspace2
3993              || $bigwasteofspace3 && $bigwasteofspace4) {
3994                bigwastoftime();
3995            }
3996     Suggested by Eli Fidler 2001-06-11.
3997
3998     -Uploaded perltidy to sourceforge cvs 2001-06-10.
3999
4000     -An '-lp' flag (--line-up-parentheses) has been added which causes lists
4001     to be indented with extra indentation in the manner sometimes
4002     associated with emacs or the GNU suggestions.  Thanks to Ian Stuart for
4003     this suggestion and for extensive help in testing it. 
4004
4005     -Subroutine call parameter lists are now formatted as other lists.
4006     This should improve formatting of tables being passed via subroutine
4007     calls.  This will also cause full indentation ('-i=n, default n= 4) of
4008     continued parameter list lines rather than just the number of spaces
4009     given with -ci=n, default n=2.
4010     
4011     -Added support for hanging side comments.  Perltidy identifies a hanging
4012     side comment as a comment immediately following a line with a side
4013     comment or another hanging side comment.  This should work in most
4014     cases.  It can be deactivated with --no-hanging-side-comments (-nhsc).
4015     The manual has been updated to discuss this.  Suggested by Brad
4016     Eisenberg some time ago, and finally implemented.
4017
4018 ## 2001 06 08  
4019
4020     -fixed problem with parsing command parameters containing quoted
4021     strings in .perltidyrc files. (Reported by Roger Espel Llima 2001-06-07).
4022
4023     -added two command line flags, --want-break-after and 
4024     --want-break-before, which allow changing whether perltidy
4025     breaks lines before or after any operators.  Please see the revised 
4026     man pages for details.
4027
4028     -added system-wide configuration file capability.
4029     If perltidy does not find a .perltidyrc command line file in
4030     the current directory, nor in the home directory, it now looks
4031     for '/usr/local/etc/perltidyrc' and then for '/etc/perltidyrc'.
4032     (Suggested by Roger Espel Llima 2001-05-31).
4033
4034     -fixed problem in which spaces were trimmed from lines of a multi-line
4035     quote. (Reported by Roger Espel Llima 2001-05-30).  This is an 
4036     uncommon situation, but serious, because it could conceivably change
4037     the proper function of a script.
4038
4039     -fixed problem in which a semicolon was incorrectly added within 
4040     an anonymous hash.  (Reported by A.C. Yardley, 2001-5-23).
4041     (You would know if this happened, because perl would give a syntax
4042     error for the resulting script).
4043
4044     -fixed problem in which an incorrect error message was produced
4045      after a version number on a 'use' line, like this ( Reported 
4046      by Andres Kroonmaa, 2001-5-14):
4047
4048                  use CGI 2.42 qw(fatalsToBrowser);
4049
4050      Other than the extraneous error message, this bug was harmless.
4051
4052 ## 2001 04 06 
4053
4054     -fixed serious bug in which the last line of some multi-line quotes or
4055      patterns was given continuation indentation spaces.  This may make
4056      a pattern incorrect unless it uses the /x modifier.  To find
4057      instances of this error in scripts which have been formatted with
4058      earlier versions of perltidy, run with the -chk flag, which has
4059      been added for this purpose (SLH, 2001-04-05).
4060
4061      ** So, please check previously formatted scripts by running with -chk
4062      at least once **
4063
4064     -continuation indentation has been reprogrammed to be hierarchical, 
4065      which improves deeply nested structures.
4066
4067     -fixed problem with undefined value in list formatting (reported by Michael
4068      Langner 2001-04-05)
4069
4070     -Switched to graphical display of nesting in .LOG files.  If an
4071      old format string was "(1 [0 {2", the new string is "{{(".  This
4072      is easier to read and also shows the order of nesting.
4073
4074     -added outdenting of cuddled paren structures, like  ")->pack(".
4075
4076     -added line break and outdenting of ')->' so that instead of
4077
4078            $mw->Label(
4079              -text   => "perltidy",
4080              -relief => 'ridge')->pack;
4081     
4082      the current default is:
4083
4084            $mw->Label(
4085              -text   => "perltidy",
4086              -relief => 'ridge'
4087            )->pack;
4088
4089      (requested by Michael Langner 2001-03-31; in the future this could 
4090      be controlled by a command-line parameter).
4091
4092     -revised list indentation logic, so that lists following an assignment
4093      operator get one full indentation level, rather than just continuation 
4094      indentation.  Also corrected some minor glitches in the continuation 
4095      indentation logic. 
4096
4097     -Fixed problem with unwanted continuation indentation after a blank line 
4098     (reported by Erik Thaysen 2001-03-28):
4099
4100     -minor update to avoid stranding a single '(' on one line
4101
4102 ## 2001 03 28:
4103
4104     -corrected serious error tokenizing filehandles, in which a sub call 
4105     after a print or printf, like this:
4106        print usage() and exit;
4107     became this:
4108        print usage () and exit;
4109     Unfortunately, this converts 'usage' to a filehandle.  To fix this, rerun
4110     perltidy; it will look for this situation and issue a warning. 
4111
4112     -fixed another cuddled-else formatting bug (Reported by Craig Bourne)
4113
4114     -added several diagnostic --dump routines
4115     
4116     -added token-level whitespace controls (suggested by Hans Ecke)
4117
4118 ## 2001 03 23:
4119
4120     -added support for special variables of the form ${^WANT_BITS}
4121
4122     -space added between scalar and left paren in 'for' and 'foreach' loops,
4123      (suggestion by Michael Cartmell):
4124
4125        for $i( 1 .. 20 )   # old
4126        for $i ( 1 .. 20 )   # new
4127
4128     -html now outputs cascading style sheets (thanks to suggestion from
4129      Hans Ecke)
4130
4131     -flags -o and -st now work with -html
4132
4133     -added missing -html documentation for comments (noted by Alex Izvorski)
4134
4135     -support for VMS added (thanks to Michael Cartmell for code patches and 
4136       testing)
4137
4138     -v-strings implemented (noted by Hans Ecke and Michael Cartmell; extensive
4139       testing by Michael Cartmell)
4140
4141     -fixed problem where operand may be empty at line 3970 
4142      (\b should be just b in lines 3970, 3973) (Thanks to Erik Thaysen, 
4143      Keith Marshall for bug reports)
4144
4145     -fixed -ce bug (cuddled else), where lines like '} else {' were indented
4146      (Thanks to Shawn Stepper and Rick Measham for reporting this)
4147
4148 ## 2001 03 04:
4149
4150     -fixed undefined value in line 153 (only worked with -I set)
4151     (Thanks to Mike Stok, Phantom of the Opcodes, Ian Ehrenwald, and others)
4152
4153     -fixed undefined value in line 1069 (filehandle problem with perl versions <
4154     5.6) (Thanks to Yuri Leikind, Mike Stok, Michael Holve, Jeff Kolber)
4155
4156 ## 2001 03 03:
4157
4158     -Initial announcement at freshmeat.net; started Change Log
4159     (Unfortunately this version was DOA, but it was fixed the next day)