]> git.donarmstrong.com Git - perltidy.git/blob - CHANGES
add fix for #862667
[perltidy.git] / CHANGES
1 Perltidy Change Log
2   2016 03 02
3       - RT #112534. Corrected a minor problem in which an unwanted newline
4         was placed before the closing brace of an anonymous sub with 
5         a signature, if it was in a list.  Thanks to Dmytro Zagashev.
6
7       - Corrected a minor problem in which occasional extra indentation was
8         given to the closing brace of an anonymous sub in a list when the -lp 
9         parameter was set.
10
11   2016 03 01
12       - RT #104427. Added support for signatures.
13
14       - RT #111512.  Changed global warning flag $^W = 1 to use warnings;
15         Thanks to Dmytro Zagashev.
16
17       - RT #110297, added support for new regexp modifier /n
18         Thanks to Dmytro Zagashev.
19
20       - RT #111519.  The -io (--indent-only) and -dac (--delete-all-comments)
21         can now both be used in one pass. Thanks to Dmitry Veltishev.
22
23       - Patch to avoid error message with 'catch' used by TryCatch, as in
24            catch($err){
25               # do something
26            }
27         Thanks to Nick Tonkin.
28
29       - RT #32905, UTF-8 coding is now more robust. Thanks to qsimpleq
30         and Dmytro for patches.
31
32       - RT #106885. Added string bitwise operators ^. &. |. ~. ^.= &.= |.=
33  
34       - Fixed RT #107832 and #106492, lack of vertical alignment of two lines
35         when -boc flag (break at old commas) is set.  This bug was 
36         inadvertantly introduced in previous bug fix RT #98902. 
37
38       - Some common extensions to Perl syntax are handled better.
39         In particular, the following snippet is now foratted cleanly:
40
41           method deposit( Num $amount) {
42               $self->balance( $self->balance + $amount );
43           }
44
45         A new flag -xs (--extended-syntax) was added to enable this, and the default
46         is to use -xs. 
47
48         In previous versions, and now only when -nxs is set, this snippet of code
49         generates the following error message:
50
51         "syntax error at ') {', didn't see one of: case elsif for foreach given if switch unless until when while"
52
53   2015 08 15
54       - Fixed RT# 105484, Invalid warning about 'else' in 'switch' statement.  The
55         warning happened if a 'case' statement did not use parens.
56
57       - Fixed RT# 101547, misparse of // caused error message.  Also..
58
59       - Fixed RT# 102371, misparse of // caused unwated space in //=
60
61       - Fixed RT# 100871, "silent failure of HTML Output on Windows". 
62         Changed calls to tempfile() from:
63           my ( $fh_tmp, $tmpfile ) = tempfile();
64         to have the full path name:
65           my ( $fh_tmp, $tmpfile ) = File::Temp::tempfile()
66         because of problems in the Windows version reported by Dean Pearce.
67
68       - Fixed RT# 99514, calling the perltidy module multiple times with 
69         a .perltidyrc file containing the parameter --output-line-ending 
70         caused a crash.  This was a glitch in the memoization logic. 
71
72       - Fixed RT#99961, multiple lines inside a cast block caused unwanted
73         continuation indentation.  
74
75       - RT# 32905, broken handling of UTF-8 strings. 
76         A new flag -utf8 causes perltidy assume UTF-8 encoding for input and 
77         output of an io stream.  Thanks to Sebastian Podjasek for a patch.  
78         This feature may not work correctly in older versions of Perl. 
79         It worked in a linux version 5.10.1 but not in a Windows version 5.8.3 (but
80         otherwise perltidy ran correctly).
81
82       - Warning files now report perltidy VERSION. Suggested by John Karr.
83  
84       - Fixed long flag --nostack-closing-tokens (-nsct has always worked though). 
85         This was due to a typo.  This also fixed --nostack-opening-tokens to 
86         behave correctly.  Thanks to Rob Dixon.
87
88   2014 07 11
89       - Fixed RT #94902: abbreviation parsing in .perltidyrc files was not
90         working for multi-line abbreviations.  Thanks to Eric Fung for 
91         supplying a patch. 
92   
93       - Fixed RT #95708, misparsing of a hash when the first key was a perl
94         keyword, causing a semicolon to be incorrectly added.
95
96       - Fixed RT #94338 for-loop in a parenthesized block-map.  A code block within
97         parentheses of a map, sort, or grep function was being mistokenized.  In 
98         rare cases this could produce in an incorrect error message.  The fix will
99         produce some minor formatting changes.  Thanks to Daniel Trizen 
100         discovering and documenting this.
101
102       - Fixed RT #94354, excess indentation for stacked tokens.  Thanks to 
103         Colin Williams for supplying a patch.
104
105       - Added support for experimental postfix dereferencing notation introduced in
106         perl 5.20. RT #96021.
107
108       - Updated documentation to clarify the behavior of the -io flag
109         in response to RT #95709.  You can add -noll or -l=0 to prevent 
110         long comments from being outdented when -io is used.
111
112       - Added a check to prevent a problem reported in RT #81866, where large
113         scripts which had been compressed to a single line could not be formatted
114         because of a check for VERSION for MakeMaker. The workaround was to 
115         use -nvpl, but this shouldn't be necessary now.
116
117       - Fixed RT #96101; Closing brace of anonymous sub in a list was being
118         indented.  For example, the closing brace of the anonymous sub below 
119         will now be lined up with the word 'callback'.  This problem 
120         occured if there was no comma after the closing brace of the anonymous sub.  
121         This update may cause minor changes to formatting of code with lists 
122         of anonymous subs, especially TK code.
123     
124         # OLD
125         my @menu_items = (
126
127             #...
128             {
129                 path     => '/_Operate/Transcode and split',
130                 callback => sub {
131                     return 1 if not $self->project_opened;
132                     $self->comp('project')->transcode( split => 1 );
133                   }
134             }
135         );
136
137         # NEW
138         my @menu_items = (
139
140             #...
141             {
142                 path     => '/_Operate/Transcode and split',
143                 callback => sub {
144                     return 1 if not $self->project_opened;
145                     $self->comp('project')->transcode( split => 1 );
146                 }
147             }
148         );
149
150   2014 03 28
151       - Fixed RT #94190 and debian Bug #742004: perltidy.LOG file left behind.
152         Thanks to George Hartzell for debugging this.  The problem was
153         caused by the memoization speedup patch in version 20121207.  An
154         unwanted flag was being set which caused a LOG to be written if 
155         perltidy was called multiple times.
156
157       - New default behavior for LOG files: If the source is from an array or 
158         string (through a call to the perltidy module) then a LOG output is only
159         possible if a logfile stream is specified.  This is to prevent 
160         unexpected perltidy.LOG files. 
161
162       - Fixed debian Bug #740670, insecure temporary file usage.  File::Temp is now
163         used to get a temporary file.  Thanks to Don Anderson for a patch.
164   
165       - Any -b (--backup-and-modify-in-place) flag is silently ignored when a 
166         source stream, destination stream, or standard output is used.  
167         This is because the -b flag may have been in a .perltidyrc file and 
168         warnings break Test::NoWarnings.  Thanks to Marijn Brand.
169
170   2013 09 22
171       - Fixed RT #88020. --converge was not working with wide characters.
172
173       - Fixed RT #78156. package NAMESPACE VERSION syntax not accepted.
174
175       - First attempt to fix RT #88588.  INDEX END tag change in pod2html breaks 
176         perltidy -html. I put in a patch which should work but I don't yet have
177         a way of testing it.
178
179   2013 08 06
180       - Fixed RT #87107, spelling
181
182   2013 08 05
183       - Fixed RT #87502, incorrect of parsing of smartmatch before hash brace
184   
185       - Added feature request RT #87330, trim whitespace after POD.
186         The flag -trp (--trim-pod) will trim trailing whitespace from lines of POD
187
188   2013 07 17
189       - Fixed RT #86929, #86930, missing lhs of assignment.
190
191       - Fixed RT #84922, moved pod from Tidy.pm into Tidy.pod
192
193   2012 12 07
194      - The flag -cab=n or --comma-arrow-breakpoints=n has been generalized
195        to give better control over breaking open short containers.  The
196        possible values are now:
197
198          n=0 break at all commas after =>  
199          n=1 stable: break at all commas after => if container is open,
200              EXCEPT FOR one-line containers
201          n=2 break at all commas after =>, BUT try to form the maximum
202              maximum one-line container lengths
203          n=3 do not treat commas after => specially at all 
204          n=4 break everything: like n=0 but also break a short container with
205              a => not followed by a comma
206          n=5 stable: like n=1 but ALSO break at open one-line containers (default)
207
208        New values n=4 and n=5 have been added to allow short blocks to be
209        broken open.  The new default is n=5, stable.  It should more closely
210        follow the breaks in the input file, and previously formatted code
211        should remain unchanged.  If this causes problems use -cab=1 to recover 
212        the former behavior.  Thanks to Tony Maszeroski for the suggestion.
213
214        To illustrate the need for the new options, if perltidy is given
215        the following code, then the old default (-cab=1) was to close up 
216        the 'index' container even if it was open in the source.  The new 
217        default (-cab=5) will keep it open if it was open in the source.
218
219         our $fancypkg = {
220             'ALL' => {
221                 'index' => {
222                     'key' => 'value',
223                 },
224                 'alpine' => {
225                     'one'   => '+',
226                     'two'   => '+',
227                     'three' => '+',
228                 },
229             }
230         };
231
232      - New debug flag --memoize (-mem).  This version contains a 
233        patch supplied by Jonathan Swartz which can significantly speed up
234        repeated calls to Perl::Tidy::perltidy in a single process by caching
235        the result of parsing the formatting parameters.  A factor of up to 10
236        speedup was achieved for masontidy (https://metacpan.org/module/masontidy).
237        The memoization patch is on by default but can be deactivated for 
238        testing with -nmem (or --no-memoize).
239
240      - New flag -tso (--tight-secret-operators) causes certain perl operator
241        sequences (secret operators) to be formatted "tightly" (without spaces).  
242        The most common of these are 0 +  and + 0 which become 0+ and +0.  The
243        operators currently modified by this flag are: 
244             =( )=  0+  +0  ()x!! ~~<>  ,=>
245        Suggested by by Philippe Bruhat. See https://metacpan.org/module/perlsecret
246        This flag is off by default.
247    
248      - New flag -vmll (--variable-maximum-line-length) makes the maximum
249        line length increase with the nesting depth of a line of code.  
250        Basically, it causes the length of leading whitespace to be ignored when
251        setting line breaks, so the formatting of a block of code is independent
252        of its nesting depth.  Try this option if you have deeply nested 
253        code or data structures, perhaps in conjunction with the -wc flag
254        described next.  The default is not todo this.
255  
256      - New flag -wc=n (--whitespace-cycle=n) also addresses problems with
257        very deeply nested code and data structures.  When this parameter is
258        used and the nesting depth exceeds the value n, the leading whitespace 
259        will be reduced and start at 1 again.  The result is that deeply
260        nested blocks of code will shift back to the left. This occurs cyclically 
261        to any nesting depth.  This flag may be used either with or without -vmll.
262        The default is not to use this (-wc=0).
263
264      - Fixed RT #78764, error parsing smartmatch operator followed by anonymous
265        hash or array and then a ternary operator; two examples:
266
267         qr/3/ ~~ ['1234'] ? 1 : 0;
268         map { $_ ~~ [ '0', '1' ] ? 'x' : 'o' } @a;
269
270      - Fixed problem with specifying spaces around arrows using -wls='->'
271        and -wrs='->'.  Thanks to Alain Valleton for documenting this problem. 
272
273      - Implemented RT #53183, wishlist, lines of code with the same indentation
274        level which are contained with multiple stacked opening and closing tokens
275        (requested with flags -sot -sct) now have reduced indentation.  
276
277         # Default
278         $sender->MailMsg(
279             {
280                 to      => $addr,
281                 subject => $subject,
282                 msg     => $body
283             }
284         );
285
286         # OLD: perltidy -sot -sct 
287         $sender->MailMsg( {
288                 to      => $addr,
289                 subject => $subject,
290                 msg     => $body
291         } );
292
293         # NEW: perltidy -sot -sct 
294         $sender->MailMsg( {
295             to      => $addr,
296             subject => $subject,
297             msg     => $body
298         } );
299
300      - New flag -act=n (--all-containers-tightness=n) is an abbreviation for
301        -pt=n -sbt=n -bt=n -bbt=n, where n=0,1, or 2.  It simplifies input when all
302        containers have the same tightness. Using the same example:
303
304         # NEW: perltidy -sot -sct -act=2
305         $sender->MailMsg({
306             to      => $addr,
307             subject => $subject,
308             msg     => $body
309         });
310
311      - New flag -sac (--stack-all-containers) is an abbreviation for -sot -sct
312        This is part of wishlist item RT #53183. Using the same example again:
313
314         # NEW: perltidy -sac -act=2
315         $sender->MailMsg({
316             to      => $addr,
317             subject => $subject,
318             msg     => $body
319         });
320
321       - new flag -scbb (--stack-closing-block-brace) causes isolated closing 
322         block braces to stack as in the following example. (Wishlist item RT#73788)
323
324         DEFAULT:
325         for $w1 (@w1) {
326             for $w2 (@w2) {
327                 for $w3 (@w3) {
328                     for $w4 (@w4) {
329                         push( @lines, "$w1 $w2 $w3 $w4\n" );
330                     }
331                 }
332             }
333         }
334
335         perltidy -scbb:
336         for $w1 (@w1) {
337             for $w2 (@w2) {
338                 for $w3 (@w3) {
339                     for $w4 (@w4) {
340                         push( @lines, "$w1 $w2 $w3 $w4\n" );
341                     } } } }
342
343        There is, at present, no flag to place these closing braces at the end
344        of the previous line. It seems difficult to develop good rules for 
345        doing this for a wide variety of code and data structures.
346
347      - Parameters defining block types may use a wildcard '*' to indicate
348        all block types.  Previously it was not possible to include bare blocks.
349  
350      - A flag -sobb (--stack-opening-block-brace) has been introduced as an
351        alias for -bbvt=2 -bbvtl='*'.  So for example the following test code:
352
353        {{{{{{{ $testing }}}}}}}
354
355        cannot be formatted as above but can at least be kept vertically compact 
356        using perltidy -sobb -scbb
357
358        {   {   {   {   {   {   {   $testing
359                                } } } } } } }
360
361        Or even, perltidy -sobb -scbb -i=1 -bbt=2
362        {{{{{{{$testing
363              }}}}}}}
364
365
366      - Error message improved for conflicts due to -pbp; thanks to Djun Kim.
367   
368      - Fixed RT #80645, error parsing special array name '@$' when used as 
369        @{$} or $#{$}
370  
371      - Eliminated the -chk debug flag which was included in version 20010406 to
372        do a one-time check for a bug with multi-line quotes.  It has not been
373        needed since then.
374
375      - Numerous other minor formatting improvements.
376
377   2012 07 14
378      - Added flag -iscl (--ignore-side-comment-lengths) which causes perltidy 
379        to ignore the length of side comments when setting line breaks, 
380        RT #71848.  The default is to include the length of side comments when
381        breaking lines to stay within the length prescribed by the -l=n
382        maximum line length parameter.  For example,
383
384          Default behavior on a single line with long side comment:
385             $vmsfile =~ s/;[\d\-]*$//
386               ;    # Clip off version number; we can use a newer version as well
387    
388          perltidy -iscl leaves the line intact:
389
390             $vmsfile =~ s/;[\d\-]*$//; # Clip off version number; we can use a newer version as well
391
392      - Fixed RT #78182, side effects with STDERR.  Error handling has been
393        revised and the documentation has been updated.  STDERR can now be 
394        redirected to a string reference, and perltidy now returns an 
395        error flag instead of calling die when input errors are detected. 
396        If the error flag is set then no tidied output was produced.
397        See man Perl::Tidy for an example.
398
399      - Fixed RT #78156, erroneous warning message for package VERSION syntax.
400
401      - Added abbreviations -conv (--converge) to simplify iteration control.
402        -conv is equivalent to -it=4 and will insure that the tidied code is
403        converged to its final state with the minimum number of iterations.
404
405      - Minor formatting modifications have been made to insure convergence.
406
407      - Simplified and hopefully improved the method for guessing the starting 
408        indentation level of entabbed code.  Added flag -dt=n (--default_tabsize=n) 
409        which might be helpful if the guessing method does not work well for
410        some editors.
411
412      - Added support for stacked labels, upper case X/B in hex and binary, and
413        CORE:: namespace.
414
415      - Eliminated warning messages for using keyword names as constants.
416
417   2012 07 01
418      - Corrected problem introduced by using a chomp on scalar references, RT #77978
419
420      - Added support for Perl 5.14 package block syntax, RT #78114.
421
422      - A convergence test is made if three or more iterations are requested with
423        the -it=n parameter to avoid wasting computer time.  Several hundred Mb of
424        code gleaned from the internet were searched with the results that: 
425         - It is unusual for two iterations to be required unless a major 
426           style change is being made. 
427         - Only one case has been found where three iterations were required.  
428         - No cases requiring four iterations have been found with this version.
429        For the previous version several cases where found the results could
430        oscillate between two semi-stable states. This version corrects this.
431
432        So if it is important that the code be converged it is okay to set -it=4
433        with this version and it will probably stop after the second iteration.
434
435      - Improved ability to identify and retain good line break points in the
436        input stream, such as at commas and equals. You can always tell 
437        perltidy to ignore old breakpoints with -iob.  
438
439      - Fixed glitch in which a terminal closing hash brace followed by semicolon
440        was not outdented back to the leading line depth like other closing
441        tokens.  Thanks to Keith Neargarder for noting this.
442
443          OLD:
444             my ( $pre, $post ) = @{
445                 {
446                     "pp_anonlist" => [ "[", "]" ],
447                     "pp_anonhash" => [ "{", "}" ]
448                 }->{ $kid->ppaddr }
449               };   # terminal brace
450
451          NEW:
452             my ( $pre, $post ) = @{
453                 {
454                     "pp_anonlist" => [ "[", "]" ],
455                     "pp_anonhash" => [ "{", "}" ]
456                 }->{ $kid->ppaddr }
457             };    # terminal brace
458
459      - Removed extra indentation given to trailing 'if' and 'unless' clauses 
460        without parentheses because this occasionally produced undesirable 
461        results.  This only applies where parens are not used after the if or
462        unless.
463
464         OLD:
465             return undef
466               unless my ( $who, $actions ) =
467                   $clause =~ /^($who_re)((?:$action_re)+)$/o; 
468     
469         NEW:
470             return undef
471               unless my ( $who, $actions ) =
472               $clause =~ /^($who_re)((?:$action_re)+)$/o;
473
474   2012 06 19
475      - Updated perltidy to handle all quote modifiers defined for perl 5 version 16.
476
477      - Side comment text in perltidyrc configuration files must now begin with
478        at least one space before the #.  Thus:
479
480        OK:
481          -l=78 # Max line width is 78 cols
482        BAD: 
483          -l=78# Max line width is 78 cols
484
485        This is probably true of almost all existing perltidyrc files, 
486        but if you get an error message about bad parameters
487        involving a '#' the first time you run this version, please check the side
488        comments in your perltidyrc file, and add a space before the # if necessary.
489        You can quickly see the contents your perltidyrc file, if any, with the
490        command:
491
492          perltidy -dpro
493
494        The reason for this change is that some parameters naturally involve
495        the # symbol, and this can get interpreted as a side comment unless the
496        parameter is quoted.  For example, to define -sphb=# it used to be necessary
497        to write
498          -sbcp='#'
499        to keep the # from becoming part of a comment.  This was causing 
500        trouble for new users.  Now it can also be written without quotes: 
501          -sbcp=#
502
503      - Fixed bug in processing some .perltidyrc files containing parameters with
504        an opening brace character, '{'.  For example the following was
505        incorrectly processed:
506           --static-block-comment-prefix="^#{2,}[^\s#]"
507        Thanks to pdagosto.
508
509      - Added flag -boa (--break-at-old-attribute-breakpoints) which retains
510        any existing line breaks at attribute separation ':'. This is now the
511        default, use -nboa to deactivate.  Thanks to Daphne Phister for the patch.  
512        For example, given the following code, the line breaks at the ':'s will be
513        retained:
514        
515                         my @field
516                           : field
517                           : Default(1)
518                           : Get('Name' => 'foo') : Set('Name');
519
520        whereas the previous version would have output a single line.  If
521        the attributes are on a single line then they will remain on a single line.
522  
523      - Added new flags --blank-lines-before-subs=n (-blbs=n) and
524        --blank-lines-before-packages=n (-blbp=n) to put n blank lines before
525        subs and packages.  The old flag -bbs is now equivalent to -blbs=1 -blbp=1.
526        and -nbbs is equivalent to -blbs=0 -blbp=0. Requested by M. Schwern and
527        several others.
528
529      - Added feature -nsak='*' meaning no space between any keyword and opening 
530        paren.  This avoids listing entering a long list of keywords.  Requested
531        by M. Schwern.
532
533      - Added option to delete a backup of original file with in-place-modify (-b)
534        if there were no errors.  This can be requested with the flag -bext='/'.  
535        See documentation for details.  Requested by M. Schwern and others.
536
537      - Fixed bug where the module postfilter parameter was not applied when -b 
538        flag was used.  This was discovered during testing.
539
540      - Fixed in-place-modify (-b) to work with symbolic links to source files.
541        Thanks to Ted Johnson.
542
543      - Fixed bug where the Perl::Tidy module did not allow -b to be used 
544        in some cases.
545
546      - No extra blank line is added before a comment which follows
547        a short line ending in an opening token, for example like this:
548         OLD:
549                 if (
550
551                     # unless we follow a blank or comment line
552                     $last_line_leading_type !~ /^[#b]$/
553                     ...
554
555         NEW:
556                 if (
557                     # unless we follow a blank or comment line
558                     $last_line_leading_type !~ /^[#b]$/
559                     ...
560
561         The blank is not needed for readability in these cases because there
562         already is already space above the comment.  If a blank already 
563         exists there it will not be removed, so this change should not 
564         change code which has previously been formatted with perltidy. 
565         Thanks to R.W.Stauner.
566
567      - Likewise, no extra blank line is added above a comment consisting of a
568        single #, since nothing is gained in readability.
569
570      - Fixed error in which a blank line was removed after a #>>> directive. 
571        Thanks to Ricky Morse.
572
573      - Unnecessary semicolons after given/when/default blocks are now removed.
574
575      - Fixed bug where an unwanted blank line could be added before
576        pod text in __DATA__ or __END__ section.  Thanks to jidani.
577
578      - Changed exit flags from 1 to 0 to indicate success for -help, -version, 
579        and all -dump commands.  Also added -? as another way to dump the help.
580        Requested by Keith Neargarder.
581
582      - Fixed bug where .ERR and .LOG files were not written except for -it=2 or more
583
584      - Fixed bug where trailing blank lines at the end of a file were dropped when
585        -it>1.
586
587      - Fixed bug where a line occasionally ended with an extra space. This reduces
588        rhe number of instances where a second iteration gives a result different
589        from the first. 
590
591      - Updated documentation to note that the Tidy.pm module <stderr> parameter may
592        not be a reference to SCALAR or ARRAY; it must be a file.
593  
594      - Syntax check with perl now work when the Tidy.pm module is processing
595        references to arrays and strings.  Thanks to Charles Alderman.
596
597      - Zero-length files are no longer processed due to concerns for data loss
598        due to side effects in some scenarios.
599
600      - block labels, if any, are now included in closing side comment text
601        when the -csc flag is used.  Suggested by Aaron.  For example, 
602        the label L102 in the following block is now included in the -csc text:
603
604           L102: for my $i ( 1 .. 10 ) {
605             ...
606           } ## end L102: for my $i ( 1 .. 10 )
607
608   2010 12 17
609      - added new flag -it=n or --iterations=n
610        This flag causes perltidy to do n complete iterations.  
611        For most purposes the default of n=1 should be satisfactory.  However n=2
612        can be useful when a major style change is being made, or when code is being
613        beautified on check-in to a source code control system.  The run time will be
614        approximately proportional to n, and it should seldom be necessary to use a
615        value greater than n=2.  Thanks to Jonathan Swartz
616
617      - A configuration file pathname begins with three dots, e.g.
618        ".../.perltidyrc", indicates that the file should be searched for starting
619        in the current directory and working upwards. This makes it easier to have
620        multiple projects each with their own .perltidyrc in their root directories.
621        Thanks to Jonathan Swartz for this patch.
622
623      - Added flag --notidy which disables all formatting and causes the input to be
624        copied unchanged.  This can be useful in conjunction with hierarchical
625        F<.perltidyrc> files to prevent unwanted tidying.
626        Thanks to Jonathan Swartz for this patch.
627
628      - Added prefilters and postfilters in the call to the Tidy.pm module.
629        Prefilters and postfilters. The prefilter is a code reference that 
630        will be applied to the source before tidying, and the postfilter 
631        is a code reference to the result before outputting.  
632
633        Thanks to Jonathan Swartz for this patch.  He writes:
634        This is useful for all manner of customizations. For example, I use
635        it to convert the 'method' keyword to 'sub' so that perltidy will work for
636        Method::Signature::Simple code:
637
638        Perl::Tidy::perltidy(
639           prefilter => sub { $_ = $_[0]; s/^method (.*)/sub $1 \#__METHOD/gm; return $_ },
640           postfilter => sub { $_ = $_[0]; s/^sub (.*?)\s* \#__METHOD/method $1/gm; return $_ }
641        );
642
643      - The starting indentation level of sections of code entabbed with -et=n
644        is correctly guessed if it was also produced with the same -et=n flag.  This
645        keeps the indentation stable on repeated formatting passes within an editor.
646        Thanks to Sam Kington and Glenn.
647
648      - Functions with prototype '&' had a space between the function and opening
649        peren.  This space now only occurs if the flag --space-function-paren (-sfp)
650        is set.  Thanks to Zrajm Akfohg.
651
652      - Patch to never put spaces around a bare word in braces beginning with ^ as in:
653          my $before = ${^PREMATCH};
654        even if requested with the -bt=0 flag because any spaces cause a syntax error in perl.
655        Thanks to Fabrice Dulanoy.
656
657   2009 06 16
658      - Allow configuration file to be 'perltidy.ini' for Windows systems.
659        i.e. C:\Documents and Settings\User\perltidy.ini
660        and added documentation for setting configuation file under Windows in man
661        page.  Thanks to Stuart Clark.
662
663      - Corrected problem of unwanted semicolons in hash ref within given/when code.
664       Thanks to Nelo Onyiah.
665
666      - added new flag -cscb or --closing-side-comments-balanced
667       When using closing-side-comments, and the closing-side-comment-maximum-text
668       limit is exceeded, then the comment text must be truncated.  Previous
669       versions of perltidy terminate with three dots, and this can still be
670       achieved with -ncscb:
671    
672        perltidy -csc -ncscb
673
674        } ## end foreach my $foo (sort { $b cmp $a ...
675    
676       However this causes a problem with older editors which cannot recognize
677       comments or are not configured to doso because they cannot "bounce" around in
678       the text correctly.  The B<-cscb> flag tries to help them by 
679       appending appropriate terminal balancing structure:
680    
681        perltidy -csc -cscb
682
683        } ## end foreach my $foo (sort { $b cmp $a ... })
684    
685       Since there is much to be gained and little to be lost by doing this,
686       the default is B<-cscb>.  Use B<-ncscb> if you do not want this.
687
688       Thanks to Daniel Becker for suggesting this option.
689
690      - After an isolated closing eval block the continuation indentation will be
691        removed so that the braces line up more like other blocks.  Thanks to Yves Orton.
692
693      OLD:
694         eval {
695             #STUFF;
696             1;    # return true
697           }  
698           or do {
699             #handle error
700           };
701
702      NEW:
703         eval {
704             #STUFF;
705             1;    # return true
706         } or do {
707             #handle error
708         };
709
710      -A new flag -asbl (or --opening-anonymous-sub-brace-on-new-line) has
711       been added to put the opening brace of anonymous sub's on a new line,
712       as in the following snippet:
713
714         my $code = sub
715         {
716             my $arg = shift;
717             return $arg->(@_);
718         };
719
720       This was not possible before because the -sbl flag only applies to named
721       subs. Thanks to Benjamin Krupp.
722
723      -Fix tokenization bug with the following snippet
724        print 'hi' if { x => 1, }->{x};
725       which resulted in a semicolon being added after the comma.  The workaround
726       was to use -nasc, but this is no longer necessary.  Thanks to Brian Duggan. 
727
728      -Fixed problem in which an incorrect error message could be triggered
729      by the (unusual) combination of parameters  -lp -i=0 -l=2 -ci=0 for
730      example.  Thanks to Richard Jelinek.
731
732      -A new flag --keep-old-blank-lines=n has been added to
733      give more control over the treatment of old blank lines in
734      a script.  The manual has been revised to discuss the new
735      flag and clarify the treatment of old blank lines.  Thanks
736      to Oliver Schaefer.
737
738   2007 12 05
739      -Improved support for perl 5.10: New quote modifier 'p', new block type UNITCHECK, 
740      new keyword break, improved formatting of given/when.
741
742      -Corrected tokenization bug of something like $var{-q}.
743
744      -Numerous minor formatting improvements.
745
746      -Corrected list of operators controlled by -baao -bbao to include
747        . : ? && || and or err xor
748
749      -Corrected very minor error in log file involving incorrect comment
750      regarding need for upper case of labels.  
751
752      -Fixed problem where perltidy could run for a very long time
753      when given certain non-perl text files.
754
755      -Line breaks in un-parenthesized lists now try to follow
756      line breaks in the input file rather than trying to fill
757      lines.  This usually works better, but if this causes
758      trouble you can use -iob to ignore any old line breaks.
759      Example for the following input snippet:
760
761         print
762         "conformability (Not the same dimension)\n",
763         "\t", $have, " is ", text_unit($hu), "\n",
764         "\t", $want, " is ", text_unit($wu), "\n",
765         ;
766
767       OLD:
768         print "conformability (Not the same dimension)\n", "\t", $have, " is ",
769           text_unit($hu), "\n", "\t", $want, " is ", text_unit($wu), "\n",;
770
771       NEW:
772         print "conformability (Not the same dimension)\n",
773           "\t", $have, " is ", text_unit($hu), "\n",
774           "\t", $want, " is ", text_unit($wu), "\n",
775           ;
776
777   2007 08 01
778      -Added -fpsc option (--fixed-position-side-comment). Thanks to Ueli Hugenschmidt. 
779      For example -fpsc=40 tells perltidy to put side comments in column 40
780      if possible.  
781
782      -Added -bbao and -baao options (--break-before-all-operators and
783      --break-after-all-operators) to simplify command lines and configuration
784      files.  These define an initial preference for breaking at operators which can
785      be modified with -wba and -wbb flags.  For example to break before all operators
786      except an = one could use --bbao -wba='=' rather than listing every
787      single perl operator (except =) on a -wbb flag.
788
789      -Added -kis option (--keep-interior-semicolons).  Use the B<-kis> flag
790      to prevent breaking at a semicolon if there was no break there in the
791      input file.  To illustrate, consider the following input lines:
792
793         dbmclose(%verb_delim); undef %verb_delim;
794         dbmclose(%expanded); undef %expanded;
795         dbmclose(%global); undef %global;
796
797      Normally these would be broken into six lines, but 
798      perltidy -kis gives:
799
800         dbmclose(%verb_delim); undef %verb_delim;
801         dbmclose(%expanded);   undef %expanded;
802         dbmclose(%global);     undef %global;
803  
804      -Improved formatting of complex ternary statements, with indentation
805      of nested statements.  
806       OLD:
807         return defined( $cw->{Selected} )
808           ? (wantarray)
809           ? @{ $cw->{Selected} }
810           : $cw->{Selected}[0]
811           : undef;
812
813       NEW:
814         return defined( $cw->{Selected} )
815           ? (wantarray)
816               ? @{ $cw->{Selected} }
817               : $cw->{Selected}[0]
818           : undef;
819
820      -Text following un-parenthesized if/unless/while/until statements get a
821      full level of indentation.  Suggested by Jeff Armstorng and others. 
822      OLD:
823         return $ship->chargeWeapons("phaser-canon")
824           if $encounter->description eq 'klingon'
825           and $ship->firepower >= $encounter->firepower
826           and $location->status ne 'neutral';
827      NEW:
828         return $ship->chargeWeapons("phaser-canon")
829           if $encounter->description eq 'klingon'
830               and $ship->firepower >= $encounter->firepower
831               and $location->status ne 'neutral';
832
833   2007 05 08
834      -Fixed bug where #line directives were being indented.  Thanks to
835      Philippe Bruhat.
836
837   2007 05 04
838      -Fixed problem where an extra blank line was added after an =cut when either
839      (a) the =cut started (not stopped) a POD section, or (b) -mbl > 1. 
840      Thanks to J. Robert Ray and Bill Moseley.
841
842   2007 04 24
843      -ole (--output-line-ending) and -ple (--preserve-line-endings) should
844      now work on all systems rather than just unix systems. Thanks to Dan
845      Tyrell.
846
847      -Fixed problem of a warning issued for multiple subs for BEGIN subs
848      and other control subs. Thanks to Heiko Eissfeldt.
849  
850      -Fixed problem where no space was introduced between a keyword or
851      bareword and a colon, such as:
852
853      ( ref($result) eq 'HASH' && !%$result ) ? undef: $result;
854
855      Thanks to Niek.
856
857      -Added a utility program 'break_long_quotes.pl' to the examples directory of
858      the distribution.  It breaks long quoted strings into a chain of concatenated
859      sub strings no longer than a selected length.  Suggested by Michael Renner as
860      a perltidy feature but was judged to be best done in a separate program.
861
862      -Updated docs to remove extra < and >= from list of tokens 
863      after which breaks are made by default.  Thanks to Bob Kleemann.
864
865      -Removed improper uses of $_ to avoid conflicts with external calls, giving
866      error message similar to:
867         Modification of a read-only value attempted at 
868         /usr/share/perl5/Perl/Tidy.pm line 6907.
869      Thanks to Michael Renner.
870
871      -Fixed problem when errorfile was not a plain filename or filehandle
872      in a call to Tidy.pm.  The call
873      perltidy(source => \$input, destination => \$output, errorfile => \$err);
874      gave the following error message:
875       Not a GLOB reference at /usr/share/perl5/Perl/Tidy.pm line 3827.
876      Thanks to Michael Renner and Phillipe Bruhat.
877
878      -Fixed problem where -sot would not stack an opening token followed by
879      a side comment.  Thanks to Jens Schicke.
880
881      -improved breakpoints in complex math and other long statements. Example:
882      OLD:
883         return
884           log($n) + 0.577215664901532 + ( 1 / ( 2 * $n ) ) -
885           ( 1 / ( 12 * ( $n**2 ) ) ) + ( 1 / ( 120 * ( $n**4 ) ) );
886      NEW:
887         return
888           log($n) + 0.577215664901532 +
889           ( 1 / ( 2 * $n ) ) -
890           ( 1 / ( 12 * ( $n**2 ) ) ) +
891           ( 1 / ( 120 * ( $n**4 ) ) );
892
893      -more robust vertical alignment of complex terminal else blocks and ternary
894      statements.
895
896   2006 07 19
897      -Eliminated bug where a here-doc invoked through an 'e' modifier on a pattern
898      replacement text was not recognized.  The tokenizer now recursively scans
899      replacement text (but does not reformat it).
900
901      -improved vertical alignment of terminal else blocks and ternary statements.
902       Thanks to Chris for the suggestion. 
903
904       OLD:
905         if    ( IsBitmap() ) { return GetBitmap(); }
906         elsif ( IsFiles() )  { return GetFiles(); }
907         else { return GetText(); }
908
909       NEW:
910         if    ( IsBitmap() ) { return GetBitmap(); }
911         elsif ( IsFiles() )  { return GetFiles(); }
912         else                 { return GetText(); }
913
914       OLD:
915         $which_search =
916             $opts{"t"} ? 'title'
917           : $opts{"s"} ? 'subject'
918           : $opts{"a"} ? 'author'
919           : 'title';
920
921       NEW:
922         $which_search =
923             $opts{"t"} ? 'title'
924           : $opts{"s"} ? 'subject'
925           : $opts{"a"} ? 'author'
926           :              'title';
927
928      -improved indentation of try/catch blocks and other externally defined
929      functions accepting a block argument.  Thanks to jae.
930
931      -Added support for Perl 5.10 features say and smartmatch.
932
933      -Added flag -pbp (--perl-best-practices) as an abbreviation for parameters
934      suggested in Damian Conway's "Perl Best Practices".  -pbp is the same as:
935
936         -l=78 -i=4 -ci=4 -st -se -vt=2 -cti=0 -pt=1 -bt=1 -sbt=1 -bbt=1 -nsfs -nolq
937         -wbb="% + - * / x != == >= <= =~ !~ < > | & >= < = 
938               **= += *= &= <<= &&= -= /= |= >>= ||= .= %= ^= x="
939
940       Please note that the -st here restricts input to standard input; use
941       -nst if necessary to override.
942
943      -Eliminated some needless breaks at equals signs in -lp indentation.
944
945         OLD:
946             $c =
947               Math::Complex->make(LEFT + $x * (RIGHT - LEFT) / SIZE,
948                                   TOP + $y * (BOTTOM - TOP) / SIZE);
949         NEW:
950             $c = Math::Complex->make(LEFT + $x * (RIGHT - LEFT) / SIZE,
951                                      TOP + $y * (BOTTOM - TOP) / SIZE);
952
953      A break at an equals is sometimes useful for preventing complex statements 
954      from hitting the line length limit.  The decision to do this was 
955      over-eager in some cases and has been improved.  Thanks to Royce Reece.
956
957      -qw quotes contained in braces, square brackets, and parens are being
958      treated more like those containers as far as stacking of tokens.  Also
959      stack of closing tokens ending ');' will outdent to where the ');' would
960      have outdented if the closing stack is matched with a similar opening stack.
961
962       OLD: perltidy -soc -sct
963         __PACKAGE__->load_components(
964             qw(
965               PK::Auto
966               Core
967               )
968         );
969       NEW: perltidy -soc -sct
970         __PACKAGE__->load_components( qw(
971               PK::Auto
972               Core
973         ) );
974       Thanks to Aran Deltac
975
976      -Eliminated some undesirable or marginally desirable vertical alignments.
977      These include terminal colons, opening braces, and equals, and particularly
978      when just two lines would be aligned.
979
980      OLD:
981         my $accurate_timestamps = $Stamps{lnk};
982         my $has_link            = 
983             ...
984      NEW:
985         my $accurate_timestamps = $Stamps{lnk};
986         my $has_link =
987
988      -Corrected a problem with -mangle in which a space would be removed
989      between a keyword and variable beginning with ::.
990
991   2006 06 14
992      -Attribute argument lists are now correctly treated as quoted strings
993      and not formatted.  This is the most important update in this version.
994      Thanks to Borris Zentner, Greg Ferguson, Steve Kirkup.
995
996      -Updated to recognize the defined or operator, //, to be released in Perl 10.
997      Thanks to Sebastien Aperghis-Tramoni.
998
999      -A useful utility perltidyrc_dump.pl is included in the examples section.  It
1000      will read any perltidyrc file and write it back out in a standard format
1001      (though comments are lost).
1002
1003      -Added option to have perltidy read and return a hash with the contents of a
1004      perltidyrc file.  This may be used by Leif Eriksen's tidyview code.  This
1005      feature is used by the demonstration program 'perltidyrc_dump.pl' in the
1006      examples directory.
1007
1008      -Improved error checking in perltidyrc files.  Unknown bare words were not
1009      being caught.
1010
1011      -The --dump-options parameter now dumps parameters in the format required by a
1012      perltidyrc file.
1013
1014      -V-Strings with underscores are now recognized.
1015      For example: $v = v1.2_3; 
1016
1017      -cti=3 option added which gives one extra indentation level to closing 
1018      tokens always.  This provides more predictable closing token placement
1019      than cti=2.  If you are using cti=2 you might want to try cti=3.
1020
1021      -To identify all left-adjusted comments as static block comments, use C<-sbcp='^#'>.
1022
1023      -New parameters -fs, -fsb, -fse added to allow sections of code between #<<<
1024      and #>>> to be passed through verbatim. This is enabled by default and turned
1025      off by -nfs.  Flags -fsb and -fse allow other beginning and ending markers.
1026      Thanks to Wolfgang Werner and Marion Berryman for suggesting this.  
1027
1028      -added flag -skp to put a space between all Perl keywords and following paren.
1029      The default is to only do this for certain keywords.  Suggested by
1030      H.Merijn Brand.
1031
1032      -added flag -sfp to put a space between a function name and following paren.
1033      The default is not to do this.  Suggested by H.Merijn Brand.
1034
1035      -Added patch to avoid breaking GetOpt::Long::Configure set by calling program. 
1036      Thanks to Philippe Bruhat.
1037
1038      -An error was fixed in which certain parameters in a .perltidyrc file given
1039      without the equals sign were not recognized.  That is,
1040      '--brace-tightness 0' gave an error but '--brace-tightness=0' worked
1041      ok.  Thanks to Zac Hansen.
1042
1043      -An error preventing the -nwrs flag from working was corrected. Thanks to
1044       Greg Ferguson.
1045
1046      -Corrected some alignment problems with entab option.
1047
1048      -A bug with the combination of -lp and -extrude was fixed (though this
1049      combination doesn't really make sense).  The bug was that a line with
1050      a single zero would be dropped.  Thanks to Cameron Hayne.
1051
1052      -Updated Windows detection code to avoid an undefined variable.
1053      Thanks to Joe Yates and Russ Jones.
1054
1055      -Improved formatting for short trailing statements following a closing paren.
1056      Thanks to Joe Matarazzo.
1057
1058      -The handling of the -icb (indent closing block braces) flag has been changed
1059      slightly to provide more consistent and predictable formatting of complex
1060      structures.  Instead of giving a closing block brace the indentation of the
1061      previous line, it is now given one extra indentation level.  The two methods
1062      give the same result if the previous line was a complete statement, as in this
1063      example:
1064
1065             if ($task) {
1066                 yyy();
1067                 }    # -icb
1068             else {
1069                 zzz();
1070                 }
1071      The change also fixes a problem with empty blocks such as:
1072
1073         OLD, -icb:
1074         elsif ($debug) {
1075         }
1076
1077         NEW, -icb:
1078         elsif ($debug) {
1079             }
1080
1081      -A problem with -icb was fixed in which a closing brace was misplaced when
1082      it followed a quote which spanned multiple lines.
1083
1084      -Some improved breakpoints for -wba='&& || and or'
1085
1086      -Fixed problem with misaligned cuddled else in complex statements
1087      when the -bar flag was also used.  Thanks to Alex and Royce Reese.
1088
1089      -Corrected documentation to show that --outdent-long-comments is the default.
1090      Thanks to Mario Lia.
1091
1092      -New flag -otr (opening-token-right) is similar to -bar (braces-always-right)
1093      but applies to non-structural opening tokens.
1094
1095      -new flags -sot (stack-opening-token), -sct (stack-closing-token).
1096      Suggested by Tony.
1097
1098   2003 10 21
1099      -The default has been changed to not do syntax checking with perl.  
1100        Use -syn if you want it.  Perltidy is very robust now, and the -syn
1101        flag now causes more problems than it's worth because of BEGIN blocks
1102        (which get executed with perl -c).  For example, perltidy will never
1103        return when trying to beautify this code if -syn is used:
1104
1105             BEGIN { 1 while { }; }
1106
1107       Although this is an obvious error, perltidy is often run on untested
1108       code which is more likely to have this sort of problem.  A more subtle
1109       example is:
1110
1111             BEGIN { use FindBin; }
1112
1113       which may hang on some systems using -syn if a shared file system is
1114       unavailable.
1115
1116      -Changed style -gnu to use -cti=1 instead of -cti=2 (see next item).
1117       In most cases it looks better.  To recover the previous format, use
1118       '-gnu -cti=2'
1119
1120      -Added flags -cti=n for finer control of closing token indentation.
1121        -cti = 0 no extra indentation (default; same as -nicp)
1122        -cti = 1 enough indentation so that the closing token
1123             aligns with its opening token.
1124        -cti = 2 one extra indentation level if the line has the form 
1125               );   ];   or   };     (same as -icp).
1126
1127        The new option -cti=1 works well with -lp:
1128
1129        EXAMPLES:
1130
1131         # perltidy -lp -cti=1
1132         @month_of_year = (
1133                            'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
1134                            'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
1135                          );
1136
1137         # perltidy -lp -cti=2
1138         @month_of_year = (
1139                            'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
1140                            'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
1141                            );
1142       This is backwards compatible with -icp. See revised manual for
1143       details.  Suggested by Mike Pennington.
1144   
1145      -Added flag '--preserve-line-endings' or '-ple' to cause the output
1146       line ending to be the same as in the input file, for unix, dos, 
1147       or mac line endings.  Only works under unix. Suggested by 
1148       Rainer Hochschild.
1149
1150      -Added flag '--output-line-ending=s' or '-ole=s' where s=dos or win,
1151       unix, or mac.  Only works under unix.
1152
1153      -Files with Mac line endings should now be handled properly under unix
1154       and dos without being passed through a converter.
1155
1156      -You may now include 'and', 'or', and 'xor' in the list following
1157       '--want-break-after' to get line breaks after those keywords rather than
1158       before them.  Suggested by Rainer Hochschild.
1159
1160      -Corrected problem with command line option for -vtc=n and -vt=n. The
1161       equals sign was being eaten up by the Windows shell so perltidy didn't
1162       see it.
1163
1164   2003 07 26
1165      -Corrected cause of warning message with recent versions of Perl:
1166         "Possible precedence problem on bitwise & operator at ..."
1167       Thanks to Jim Files.
1168
1169      -fixed bug with -html with '=for pod2html' sections, in which code/pod
1170      output order was incorrect.  Thanks to Tassilo von Parseval.
1171
1172      -fixed bug when the -html flag is used, in which the following error
1173      message, plus others, appear:
1174          did not see <body> in pod2html output
1175      This was caused by a change in the format of html output by pod2html
1176      VERSION 1.04 (included with perl 5.8).  Thanks to Tassilo von Parseval.
1177
1178      -Fixed bug where an __END__ statement would be mistaken for a label
1179      if it is immediately followed by a line with a leading colon. Thanks
1180      to John Bayes.
1181  
1182      -Implemented guessing logic for brace types when it is ambiguous.  This
1183      has been on the TODO list a long time.  Thanks to Boris Zentner for
1184      an example.
1185
1186      -Long options may now be negated either as '--nolong-option' 
1187      or '--no-long-option'.  Thanks to Philip Newton for the suggestion.
1188
1189      -added flag --html-entities or -hent which controls the use of
1190      Html::Entities for html formatting.  Use --nohtml-entities or -nhent to
1191      prevent the use of Html::Entities to encode special symbols.  The
1192      default is -hent.  Html::Entities when formatting perl text to escape
1193      special symbols.  This may or may not be the right thing to do,
1194      depending on browser/language combinations.  Thanks to Burak Gursoy for
1195      this suggestion.
1196
1197      -Bareword strings with leading '-', like, '-foo' now count as 1 token
1198      for horizontal tightness.  This way $a{'-foo'}, $a{foo}, and $a{-foo}
1199      are now all treated similarly.  Thus, by default, OLD: $a{ -foo } will
1200      now be NEW: $a{-foo}.  Suggested by Mark Olesen.
1201
1202      -added 2 new flags to control spaces between keywords and opening parens:
1203        -sak=s  or --space-after-keyword=s,  and
1204        -nsak=s or --nospace-after-keyword=s, where 's' is a list of keywords.
1205
1206      The new default list of keywords which get a space is:
1207
1208        "my local our and or eq ne if else elsif until unless while for foreach
1209          return switch case given when"
1210
1211      Use -sak=s and -nsak=s to add and remove keywords from this list,
1212         respectively.
1213
1214      Explanation: Stephen Hildrey noted that perltidy was being inconsistent
1215      in placing spaces between keywords and opening parens, and sent a patch
1216      to give user control over this.  The above list was selected as being
1217      a reasonable default keyword list.  Previously, perltidy
1218      had a hardwired list which also included these keywords:
1219
1220             push pop shift unshift join split die
1221
1222      but did not have 'our'.  Example: if you prefer to make perltidy behave
1223      exactly as before, you can include the following two lines in your
1224      .perltidyrc file: 
1225
1226        -sak="push pop local shift unshift join split die"
1227        -nsak="our"
1228
1229      -Corrected html error in .toc file when -frm -html is used (extra ");
1230       browsers were tolerant of it.
1231
1232      -Improved alignment of chains of binary and ?/: operators. Example:
1233       OLD:
1234         $leapyear =
1235           $year % 4     ? 0
1236           : $year % 100 ? 1
1237           : $year % 400 ? 0
1238           : 1;
1239       NEW:
1240         $leapyear =
1241             $year % 4   ? 0
1242           : $year % 100 ? 1
1243           : $year % 400 ? 0
1244           : 1;
1245
1246      -improved breakpoint choices involving '->'
1247
1248      -Corrected tokenization of things like ${#} or ${©}. For example,
1249       ${©} is valid, but ${© } is a syntax error.
1250
1251      -Corrected minor tokenization errors with indirect object notation.
1252       For example, 'new A::()' works now.
1253
1254      -Minor tokenization improvements; all perl code distributed with perl 5.8 
1255       seems to be parsed correctly except for one instance (lextest.t) 
1256       of the known bug.
1257
1258   2002 11 30
1259      -Implemented scalar attributes.  Thanks to Sean Tobin for noting this.
1260
1261      -Fixed glitch introduced in previous release where -pre option
1262      was not outputting a leading html <pre> tag.
1263
1264      -Numerous minor improvements in vertical alignment, including the following:
1265
1266      -Improved alignment of opening braces in many cases.  Needed for improved
1267      switch/case formatting, and also suggested by Mark Olesen for sort/map/grep
1268      formatting.  For example:
1269
1270       OLD:
1271         @modified =
1272           map { $_->[0] }
1273           sort { $a->[1] <=> $b->[1] }
1274           map { [ $_, -M ] } @filenames;
1275
1276       NEW:
1277         @modified =
1278           map  { $_->[0] }
1279           sort { $a->[1] <=> $b->[1] }
1280           map  { [ $_, -M ] } @filenames;
1281
1282      -Eliminated alignments across unrelated statements. Example:
1283       OLD:
1284         $borrowerinfo->configure( -state => 'disabled' );
1285         $borrowerinfo->grid( -col        => 1, -row => 0, -sticky => 'w' );
1286
1287       NEW:  
1288         $borrowerinfo->configure( -state => 'disabled' );
1289         $borrowerinfo->grid( -col => 1, -row => 0, -sticky => 'w' );
1290
1291       Thanks to Mark Olesen for suggesting this.
1292
1293      -Improved alignement of '='s in certain cases.
1294       Thanks to Norbert Gruener for sending an example.
1295
1296      -Outdent-long-comments (-olc) has been re-instated as a default, since
1297       it works much better now.  Use -nolc if you want to prevent it.
1298
1299      -Added check for 'perltidy file.pl -o file.pl', which causes file.pl
1300      to be lost. (The -b option should be used instead). Thanks to mreister
1301      for reporting this problem.
1302
1303   2002 11 06
1304      -Switch/case or given/when syntax is now recognized.  Its vertical alignment
1305      is not great yet, but it parses ok.  The words 'switch', 'case', 'given',
1306      and 'when' are now treated as keywords.  If this causes trouble with older
1307      code, we could introduce a switch to deactivate it.  Thanks to Stan Brown
1308      and Jochen Schneider for recommending this.
1309
1310      -Corrected error parsing sub attributes with call parameters.
1311      Thanks to Marc Kerr for catching this.
1312
1313      -Sub prototypes no longer need to be on the same line as sub names.  
1314
1315      -a new flag -frm or --frames will cause html output to be in a
1316      frame, with table of contents in the left panel and formatted source
1317      in the right panel.  Try 'perltidy -html -frm somemodule.pm' for example.
1318
1319      -The new default for -html formatting is to pass the pod through Pod::Html.
1320      The result is syntax colored code within your pod documents. This can be
1321      deactivated with -npod.  Thanks to those who have written to discuss this,
1322      particularly Mark Olesen and Hugh Myers.
1323
1324      -the -olc (--outdent-long-comments) option works much better.  It now outdents
1325      groups of consecutive comments together, and by just the amount needed to
1326      avoid having any one line exceeding the maximum line length.
1327
1328      -block comments are now trimmed of trailing whitespace.
1329
1330      -if a directory specified with -opath does not exist, it will be created.
1331
1332      -a table of contents to packages and subs is output when -html is used.
1333      Use -ntoc to prevent this. 
1334
1335      -fixed an unusual bug in which a 'for' statement following a 'format'
1336      statement was not correctly tokenized.  Thanks to Boris Zentner for
1337      catching this.
1338
1339      -Tidy.pm is no longer dependent on modules IO::Scalar and IO::ScalarArray.  
1340      There were some speed issues.  Suggested by Joerg Walter.
1341
1342      -The treatment of quoted wildcards (file globs) is now system-independent. 
1343      For example
1344
1345         perltidy 'b*x.p[lm]'
1346
1347      would match box.pl, box.pm, brinx.pm under any operating system.  Of
1348      course, anything unquoted will be subject to expansion by any shell.
1349
1350      -default color for keywords under -html changed from 
1351      SaddleBrown (#8B4513) to magenta4 (#8B008B).
1352
1353      -fixed an arg parsing glitch in which something like:
1354        perltidy quick-help
1355      would trigger the help message and exit, rather than operate on the
1356      file 'quick-help'.
1357
1358   2002 09 22
1359      -New option '-b' or '--backup-and-modify-in-place' will cause perltidy to
1360      overwrite the original file with the tidied output file.  The original
1361      file will be saved with a '.bak' extension (which can be changed with
1362      -bext=s).  Thanks to Rudi Farkas for the suggestion.
1363
1364      -An index to all subs is included at the top of -html output, unless
1365      only the <pre> section is written.
1366
1367      -Anchor lines of the form <a name="mysub"></a> are now inserted at key points
1368      in html output, such as before sub definitions, for the convenience of
1369      postprocessing scripts.  Suggested by Howard Owen.
1370
1371      -The cuddled-else (-ce) flag now also makes cuddled continues, like
1372      this:
1373
1374         while ( ( $pack, $file, $line ) = caller( $i++ ) ) {
1375            # bla bla
1376         } continue {
1377             $prevpack = $pack;
1378         }
1379
1380      Suggested by Simon Perreault.  
1381
1382      -Fixed bug in which an extra blank line was added before an =head or 
1383      similar pod line after an __END__ or __DATA__ line each time 
1384      perltidy was run.  Also, an extra blank was being added after
1385      a terminal =cut.  Thanks to Mike Birdsall for reporting this.
1386
1387   2002 08 26
1388      -Fixed bug in which space was inserted in a hyphenated hash key:
1389         my $val = $myhash{USER-NAME};
1390       was converted to:
1391         my $val = $myhash{USER -NAME}; 
1392       Thanks to an anonymous bug reporter at sourceforge.
1393
1394      -Fixed problem with the '-io' ('--indent-only') where all lines 
1395       were double spaced.  Thanks to Nick Andrew for reporting this bug.
1396
1397      -Fixed tokenization error in which something like '-e1' was 
1398       parsed as a number. 
1399
1400      -Corrected a rare problem involving older perl versions, in which 
1401       a line break before a bareword caused problems with 'use strict'.
1402       Thanks to Wolfgang Weisselberg for noting this.
1403
1404      -More syntax error checking added.
1405
1406      -Outdenting labels (-ola) has been made the default, in order to follow the
1407       perlstyle guidelines better.  It's probably a good idea in general, but
1408       if you do not want this, use -nola in your .perltidyrc file.
1409   
1410      -Updated rules for padding logical expressions to include more cases.
1411       Thanks to Wolfgang Weisselberg for helpful discussions.
1412
1413      -Added new flag -osbc (--outdent-static-block-comments) which will
1414       outdent static block comments by 2 spaces (or whatever -ci equals).
1415       Requested by Jon Robison.
1416
1417   2002 04 25
1418      -Corrected a bug, introduced in the previous release, in which some
1419       closing side comments (-csc) could have incorrect text.  This is
1420       annoying but will be correct the next time perltidy is run with -csc.
1421
1422      -Implemented XHTML patch submitted by Ville Skyttä.
1423
1424      -Fixed bug where whitespace was being removed between 'Bar' and '()' 
1425       in a use statement like:
1426
1427            use Foo::Bar ();
1428
1429       Thanks to Ville Skyttä for reporting this.
1430
1431      -Whenever possible, if a logical expression is broken with leading
1432       '&&', '||', 'and', or 'or', then the leading line will be padded
1433       with additional space to produce alignment.  This has been on the
1434       todo list for a long time; thanks to Frank Steinhauer for reminding
1435       me to do it.  Notice the first line after the open parens here:
1436
1437             OLD: perltidy -lp
1438             if (
1439                  !param("rules.to.$linecount")
1440                  && !param("rules.from.$linecount")
1441                  && !param("rules.subject.$linecount")
1442                  && !(
1443                        param("rules.fieldname.$linecount")
1444                        && param("rules.fieldval.$linecount")
1445                  )
1446                  && !param("rules.size.$linecount")
1447                  && !param("rules.custom.$linecount")
1448               )
1449
1450             NEW: perltidy -lp
1451             if (
1452                     !param("rules.to.$linecount")
1453                  && !param("rules.from.$linecount")
1454                  && !param("rules.subject.$linecount")
1455                  && !(
1456                           param("rules.fieldname.$linecount")
1457                        && param("rules.fieldval.$linecount")
1458                  )
1459                  && !param("rules.size.$linecount")
1460                  && !param("rules.custom.$linecount")
1461               )
1462
1463   2002 04 16
1464      -Corrected a mistokenization of variables for a package with a name
1465       equal to a perl keyword.  For example: 
1466
1467          my::qx();
1468          package my;
1469          sub qx{print "Hello from my::qx\n";}
1470
1471       In this case, the leading 'my' was mistokenized as a keyword, and a
1472       space was being place between 'my' and '::'.  This has been
1473       corrected.  Thanks to Martin Sluka for discovering this. 
1474
1475      -A new flag -bol (--break-at-old-logic-breakpoints)
1476       has been added to control whether containers with logical expressions
1477       should be broken open.  This is the default.
1478
1479      -A new flag -bok (--break-at-old-keyword-breakpoints)
1480       has been added to follow breaks at old keywords which return lists,
1481       such as sort and map.  This is the default.
1482
1483      -A new flag -bot (--break-at-old-trinary-breakpoints) has been added to
1484       follow breaks at trinary (conditional) operators.  This is the default.
1485
1486      -A new flag -cab=n has been added to control breaks at commas after
1487       '=>' tokens.  The default is n=1, meaning break unless this breaks
1488       open an existing on-line container.
1489
1490      -A new flag -boc has been added to allow existing list formatting
1491       to be retained.  (--break-at-old-comma-breakpoints).  See updated manual.
1492
1493      -A new flag -iob (--ignore-old-breakpoints) has been added to
1494       prevent the locations of old breakpoints from influencing the output
1495       format.
1496
1497      -Corrected problem where nested parentheses were not getting full
1498       indentation.  This has been on the todo list for some time; thanks 
1499       to Axel Rose for a snippet demonstrating this issue.
1500
1501                 OLD: inner list is not indented
1502                 $this->sendnumeric(
1503                     $this->server,
1504                     (
1505                       $ret->name,        $user->username, $user->host,
1506                     $user->server->name, $user->nick,     "H"
1507                     ),
1508                 );
1509
1510                 NEW:
1511                 $this->sendnumeric(
1512                     $this->server,
1513                     (
1514                         $ret->name,          $user->username, $user->host,
1515                         $user->server->name, $user->nick,     "H"
1516                     ),
1517                 );
1518
1519      -Code cleaned up by removing the following unused, undocumented flags.
1520       They should not be in any .perltidyrc files because they were just
1521       experimental flags which were never documented.  Most of them placed
1522       artificial limits on spaces, and Wolfgang Weisselberg convinced me that
1523       most of them they do more harm than good by causing unexpected results.
1524
1525       --maximum-continuation-indentation (-mci)
1526       --maximum-whitespace-columns
1527       --maximum-space-to-comment (-xsc)
1528       --big-space-jump (-bsj)
1529
1530      -Pod file 'perltidy.pod' has been appended to the script 'perltidy', and
1531       Tidy.pod has been append to the module 'Tidy.pm'.  Older MakeMaker's
1532       were having trouble.
1533  
1534      -A new flag -isbc has been added for more control on comments. This flag
1535       has the effect that if there is no leading space on the line, then the
1536       comment will not be indented, and otherwise it may be.  If both -ibc and
1537       -isbc are set, then -isbc takes priority.  Thanks to Frank Steinhauer
1538       for suggesting this.
1539
1540      -A new document 'stylekey.pod' has been created to quickly guide new users
1541       through the maze of perltidy style parameters.  An html version is 
1542       on the perltidy web page.  Take a look! It should be very helpful.
1543
1544      -Parameters for controlling 'vertical tightness' have been added:
1545       -vt and -vtc are the main controls, but finer control is provided
1546       with -pvt, -pcvt, -bvt, -bcvt, -sbvt, -sbcvt.  Block brace vertical
1547       tightness controls have also been added.
1548       See updated manual and also see 'stylekey.pod'. Simple examples:
1549
1550         # perltidy -lp -vt=1 -vtc=1
1551         @month_of_year = ( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
1552                            'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' );
1553
1554         # perltidy -lp -vt=1 -vtc=0
1555         @month_of_year = ( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
1556                            'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
1557         );
1558
1559      -Lists which do not format well in uniform columns are now better
1560       identified and formated.
1561
1562         OLD:
1563         return $c->create( 'polygon', $x, $y, $x + $ruler_info{'size'},
1564             $y + $ruler_info{'size'}, $x - $ruler_info{'size'},
1565             $y + $ruler_info{'size'} );
1566
1567         NEW:
1568         return $c->create(
1569             'polygon', $x, $y,
1570             $x + $ruler_info{'size'},
1571             $y + $ruler_info{'size'},
1572             $x - $ruler_info{'size'},
1573             $y + $ruler_info{'size'}
1574         );
1575
1576         OLD:
1577           radlablist($f1, pad('Initial', $p), $b->{Init}->get_panel_ref, 'None ',
1578                      'None', 'Default', 'Default', 'Simple', 'Simple');
1579         NEW:
1580           radlablist($f1,
1581                      pad('Initial', $p),
1582                      $b->{Init}->get_panel_ref,
1583                      'None ', 'None', 'Default', 'Default', 'Simple', 'Simple');
1584
1585      -Corrected problem where an incorrect html filename was generated for 
1586       external calls to Tidy.pm module.  Fixed incorrect html title when
1587       Tidy.pm is called with IO::Scalar or IO::Array source.
1588
1589      -Output file permissons are now set as follows.  An output script file
1590       gets the same permission as the input file, except that owner
1591       read/write permission is added (otherwise, perltidy could not be
1592       rerun).  Html output files use system defaults.  Previously chmod 0755
1593       was used in all cases.  Thanks to Mark Olesen for bringing this up.
1594
1595      -Missing semicolons will not be added in multi-line blocks of type
1596       sort, map, or grep.  This brings perltidy into closer agreement
1597       with common practice.  Of course, you can still put semicolons 
1598       there if you like.  Thanks to Simon Perreault for a discussion of this.
1599
1600      -Most instances of extra semicolons are now deleted.  This is
1601       particularly important if the -csc option is used.  Thanks to Wolfgang
1602       Weisselberg for noting this.  For example, the following line
1603       (produced by 'h2xs' :) has an extra semicolon which will now be
1604       removed:
1605
1606          BEGIN { plan tests => 1 };
1607
1608      -New parameter -csce (--closing-side-comment-else-flag) can be used
1609       to control what text is appended to 'else' and 'elsif' blocks.
1610       Default is to just add leading 'if' text to an 'else'.  See manual.
1611
1612      -The -csc option now labels 'else' blocks with additinal information
1613       from the opening if statement and elsif statements, if space.
1614       Thanks to Wolfgang Weisselberg for suggesting this.
1615
1616      -The -csc option will now remove any old closing side comments
1617       below the line interval threshold. Thanks to Wolfgang Weisselberg for
1618       suggesting this.
1619
1620      -The abbreviation feature, which was broken in the previous version,
1621       is now fixed.  Thanks to Michael Cartmell for noting this.
1622
1623      -Vertical alignment is now done for '||='  .. somehow this was 
1624       overlooked.
1625
1626   2002 02 25
1627      -This version uses modules for the first time, and a standard perl
1628       Makefile.PL has been supplied.  However, perltidy may still be
1629       installed as a single script, without modules.  See INSTALL for
1630       details.
1631
1632      -The man page 'perl2web' has been merged back into the main 'perltidy'
1633       man page to simplify installation.  So you may remove that man page
1634       if you have an older installation.
1635
1636      -Added patch from Axel Rose for MacPerl.  The patch prompts the user
1637       for command line arguments before calling the module 
1638       Perl::Tidy::perltidy.
1639
1640      -Corrected bug with '-bar' which was introduced in the previous
1641       version.  A closing block brace was being indented.  Thanks to
1642       Alexandros M Manoussakis for reporting this.
1643
1644      -New parameter '--entab-leading-whitespace=n', or '-et=n', has been
1645       added for those who prefer tabs.  This behaves different from the
1646       existing '-t' parameter; see updated man page.  Suggested by Mark
1647       Olesen.
1648
1649      -New parameter '--perl-syntax-check-flags=s'  or '-pcsf=s' can be
1650       used to change the flags passed to perltidy in a syntax check.
1651       See updated man page.  Suggested by Mark Olesen. 
1652
1653      -New parameter '--output-path=s'  or '-opath=s' will cause output
1654       files to be placed in directory s.  See updated man page.  Thanks for
1655       Mark Olesen for suggesting this.
1656
1657      -New parameter --dump-profile (or -dpro) will dump to
1658       standard output information about the search for a
1659       configuration file, the name of whatever configuration file
1660       is selected, and its contents.  This should help debugging
1661       config files, especially on different Windows systems.
1662
1663      -The -w parameter now notes possible errors of the form:
1664
1665             $comment = s/^\s*(\S+)\..*/$1/;   # trim whitespace
1666
1667      -Corrections added for a leading ':' and for leaving a leading 'tcsh'
1668       line untouched.  Mark Olesen reported that lines of this form were
1669       accepted by perl but not by perltidy:
1670
1671             : # use -*- perl -*-
1672             eval 'exec perl -wS $0 "$@"'  # shell should exec 'perl'
1673             unless 1;                     # but Perl should skip this one
1674
1675       Perl will silently swallow a leading colon on line 1 of a
1676       script, and now perltidy will do likewise.  For example,
1677       this is a valid script, provided that it is the first line,
1678       but not otherwise:
1679
1680             : print "Hello World\n";
1681   
1682       Also, perltidy will now mark a first line with leading ':' followed by
1683       '#' as type SYSTEM (just as a #!  line), not to be formatted.
1684
1685      -List formatting improved for certain lists with special
1686       initial terms, such as occur with 'printf', 'sprintf',
1687       'push', 'pack', 'join', 'chmod'.  The special initial term is
1688       now placed on a line by itself.  For example, perltidy -gnu
1689
1690          OLD:
1691             $Addr = pack(
1692                          "C4",                hex($SourceAddr[0]),
1693                          hex($SourceAddr[1]), hex($SourceAddr[2]),
1694                          hex($SourceAddr[3])
1695                          );
1696
1697          NEW:
1698             $Addr = pack("C4",
1699                          hex($SourceAddr[0]), hex($SourceAddr[1]),
1700                          hex($SourceAddr[2]), hex($SourceAddr[3]));
1701
1702           OLD:
1703                 push (
1704                       @{$$self{states}}, '64', '66', '68',
1705                       '70',              '72', '74', '76',
1706                       '78',              '80', '82', '84',
1707                       '86',              '88', '90', '92',
1708                       '94',              '96', '98', '100',
1709                       '102',             '104'
1710                       );
1711
1712           NEW:
1713                 push (
1714                       @{$$self{states}},
1715                       '64', '66', '68', '70', '72',  '74',  '76',
1716                       '78', '80', '82', '84', '86',  '88',  '90',
1717                       '92', '94', '96', '98', '100', '102', '104'
1718                       );
1719
1720      -Lists of complex items, such as matricies, are now detected
1721       and displayed with just one item per row:
1722
1723         OLD:
1724         $this->{'CURRENT'}{'gfx'}{'MatrixSkew'} = Text::PDF::API::Matrix->new(
1725             [ 1, tan( deg2rad($a) ), 0 ], [ tan( deg2rad($b) ), 1, 0 ],
1726             [ 0, 0, 1 ]
1727         );
1728
1729         NEW:
1730         $this->{'CURRENT'}{'gfx'}{'MatrixSkew'} = Text::PDF::API::Matrix->new(
1731             [ 1,                  tan( deg2rad($a) ), 0 ],
1732             [ tan( deg2rad($b) ), 1,                  0 ],
1733             [ 0,                  0,                  1 ]
1734         );
1735
1736      -The perl syntax check will be turned off for now when input is from
1737       standard input or standard output.  The reason is that this requires
1738       temporary files, which has produced far too many problems during
1739       Windows testing.  For example, the POSIX module under Windows XP/2000
1740       creates temporary names in the root directory, to which only the
1741       administrator should have permission to write.
1742
1743      -Merged patch sent by Yves Orton to handle appropriate
1744       configuration file locations for different Windows varieties
1745       (2000, NT, Me, XP, 95, 98).
1746
1747      -Added patch to properly handle a for/foreach loop without
1748       parens around a list represented as a qw.  I didn't know this
1749       was possible until Wolfgang Weisselberg pointed it out:
1750
1751             foreach my $key qw\Uno Due Tres Quadro\ {
1752                 print "Set $key\n";
1753             }
1754
1755       But Perl will give a syntax error without the $ variable; ie this will
1756       not work:
1757
1758             foreach qw\Uno Due Tres Quadro\ {
1759                 print "Set $_\n";
1760             }
1761
1762      -Merged Windows version detection code sent by Yves Orton.  Perltidy
1763       now automatically turns off syntax checking for Win 9x/ME versions,
1764       and this has solved a lot of robustness problems.  These systems 
1765       cannot reliably handle backtick operators.  See man page for
1766       details.
1767   
1768      -Merged VMS filename handling patch sent by Michael Cartmell.  (Invalid
1769       output filenames were being created in some cases). 
1770
1771      -Numerous minor improvements have been made for -lp style indentation.
1772
1773      -Long C-style 'for' expressions will be broken after each ';'.   
1774
1775       'perltidy -gnu' gives:
1776
1777         OLD:
1778         for ($status = $db->seq($key, $value, R_CURSOR()) ; $status == 0
1779              and $key eq $origkey ; $status = $db->seq($key, $value, R_NEXT())) 
1780
1781         NEW:
1782         for ($status = $db->seq($key, $value, R_CURSOR()) ;
1783              $status == 0 and $key eq $origkey ;
1784              $status = $db->seq($key, $value, R_NEXT()))
1785
1786      -For the -lp option, a single long term within parens
1787       (without commas) now has better alignment.  For example,
1788       perltidy -gnu
1789
1790                 OLD:
1791                 $self->throw("Must specify a known host, not $location,"
1792                       . " possible values ("
1793                       . join (",", sort keys %hosts) . ")");
1794
1795                 NEW:
1796                 $self->throw("Must specify a known host, not $location,"
1797                              . " possible values ("
1798                              . join (",", sort keys %hosts) . ")");
1799
1800   2001 12 31
1801      -This version is about 20 percent faster than the previous
1802       version as a result of optimization work.  The largest gain
1803       came from switching to a dispatch hash table in the
1804       tokenizer.
1805
1806      -perltidy -html will check to see if HTML::Entities is
1807       installed, and if so, it will use it to encode unsafe
1808       characters.
1809
1810      -Added flag -oext=ext to change the output file extension to
1811       be different from the default ('tdy' or 'html').  For
1812       example:
1813
1814         perltidy -html -oext=htm filename
1815
1816      will produce filename.htm
1817
1818      -Added flag -cscw to issue warnings if a closing side comment would replace
1819      an existing, different side comments.  See the man page for details.
1820      Thanks to Peter Masiar for helpful discussions.
1821
1822      -Corrected tokenization error of signed hex/octal/binary numbers. For
1823      example, the first hex number below would have been parsed correctly
1824      but the second one was not:
1825         if ( ( $tmp >= 0x80_00_00 ) || ( $tmp < -0x80_00_00 ) ) { }
1826
1827      -'**=' was incorrectly tokenized as '**' and '='.  This only
1828          caused a problem with the -extrude opton.
1829
1830      -Corrected a divide by zero when -extrude option is used
1831
1832      -The flag -w will now contain all errors reported by 'perl -c' on the
1833      input file, but otherwise they are not reported.  The reason is that
1834      perl will report lots of problems and syntax errors which are not of
1835      interest when only a small snippet is being formatted (such as missing
1836      modules and unknown bare words).  Perltidy will always report all
1837      significant syntax errors that it finds, such as unbalanced braces,
1838      unless the -q (quiet) flag is set.
1839
1840      -Merged modifications created by Hugh Myers into perltidy.
1841       These include a 'streamhandle' routine which allows perltidy
1842       as a module to operate on input and output arrays and strings
1843       in addition to files.  Documentation and new packaging as a
1844       module should be ready early next year; This is an elegant,
1845       powerful update; many thanks to Hugh for contributing it.
1846
1847   2001 11 28
1848      -added a tentative patch which tries to keep any existing breakpoints
1849      at lines with leading keywords map,sort,eval,grep. The idea is to
1850      improve formatting of sequences of list operations, as in a schwartzian
1851      transform.  Example:
1852
1853         INPUT:
1854         my @sorted = map { $_->[0] }
1855                      sort { $a->[1] <=> $b->[1] }
1856                      map { [ $_, rand ] } @list;
1857
1858         OLD:
1859         my @sorted =
1860           map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { [ $_, rand ] } @list;
1861
1862         NEW:
1863         my @sorted = map { $_->[0] }
1864           sort { $a->[1] <=> $b->[1] }
1865           map { [ $_, rand ] } @list;
1866
1867       The new alignment is not as nice as the input, but this is an improvement.
1868       Thanks to Yves Orton for this suggestion.
1869
1870      -modified indentation logic so that a line with leading opening paren,
1871      brace, or square bracket will never have less indentation than the
1872      line with the corresponding opening token.  Here's a simple example:
1873
1874         OLD:
1875             $mw->Button(
1876                 -text    => "New Document",
1877                 -command => \&new_document
1878               )->pack(
1879                 -side   => 'bottom',
1880                 -anchor => 'e'
1881             );
1882
1883         Note how the closing ');' is lined up with the first line, even
1884         though it closes a paren in the 'pack' line.  That seems wrong.
1885  
1886         NEW:
1887             $mw->Button(
1888                 -text    => "New Document",
1889                 -command => \&new_document
1890               )->pack(
1891                 -side   => 'bottom',
1892                 -anchor => 'e'
1893               );
1894
1895        This seems nicer: you can up-arrow with an editor and arrive at the
1896        opening 'pack' line.
1897  
1898      -corrected minor glitch in which cuddled else (-ce) did not get applied
1899      to an 'unless' block, which should look like this:
1900
1901             unless ($test) {
1902
1903             } else {
1904
1905             }
1906
1907       Thanks to Jeremy Mates for reporting this.
1908
1909      -The man page has been reorganized to parameters easier to find.
1910  
1911      -Added check for multiple definitions of same subroutine.  It is easy
1912       to introduce this problem when cutting and pasting. Perl does not
1913       complain about it, but it can lead to disaster.
1914
1915      -The command -pro=filename  or -profile=filename may be used to specify a
1916       configuration file which will override the default name of .perltidyrc.
1917       There must not be a space on either side of the '=' sign.  I needed
1918       this to be able to easily test perltidy with a variety of different
1919       configuration files.
1920
1921      -Side comment alignment has been improved somewhat across frequent level
1922       changes, as in short if/else blocks.  Thanks to Wolfgang Weisselberg 
1923       for pointing out this problem.  For example:
1924     
1925         OLD:
1926         if ( ref $self ) {    # Called as a method
1927             $format = shift;
1928         }
1929         else {    # Regular procedure call
1930             $format = $self;
1931             undef $self;
1932         }
1933
1934         NEW:
1935         if ( ref $self ) {    # Called as a method
1936             $format = shift;
1937         }
1938         else {                # Regular procedure call
1939             $format = $self;
1940             undef $self;
1941         }
1942
1943      -New command -ssc (--static-side-comment) and related command allows
1944       side comments to be spaced close to preceding character.  This is
1945       useful for displaying commented code as side comments.
1946
1947      -New command -csc (--closing-side-comment) and several related
1948       commands allow comments to be added to (and deleted from) any or all
1949       closing block braces.  This can be useful if you have to maintain large
1950       programs, especially those that you didn't write.  See updated man page.
1951       Thanks to Peter Masiar for this suggestion.  For a simple example:
1952
1953             perltidy -csc
1954
1955             sub foo {
1956                 if ( !defined( $_[0] ) ) {
1957                     print("Hello, World\n");
1958                 }
1959                 else {
1960                     print( $_[0], "\n" );
1961                 }
1962             } ## end sub foo
1963
1964       This added '## end sub foo' to the closing brace.  
1965       To remove it, perltidy -ncsc.
1966
1967      -New commands -ola, for outdenting labels, and -okw, for outdenting
1968       selected control keywords, were implemented.  See the perltidy man
1969       page for details.  Thanks to Peter Masiar for this suggestion.
1970
1971      -Hanging side comment change: a comment will not be considered to be a
1972       hanging side comment if there is no leading whitespace on the line.
1973       This should improve the reliability of identifying hanging side comments.
1974       Thanks to Peter Masiar for this suggestion.
1975
1976      -Two new commands for outdenting, -olq (outdent-long-quotes) and -olc
1977       (outdent-long-comments), have been added.  The original -oll
1978       (outdent-long-lines) remains, and now is an abbreviation for -olq and -olc.
1979       The new default is just -olq.  This was necessary to avoid inconsistency with
1980       the new static block comment option.
1981
1982      -Static block comments:  to provide a way to display commented code
1983       better, the convention is used that comments with a leading '##' should
1984       not be formatted as usual.  Please see '-sbc' (or '--static-block-comment')
1985       for documentation.  It can be deactivated with with -nsbc, but
1986       should not normally be necessary. Thanks to Peter Masiar for this 
1987       suggestion.
1988
1989      -Two changes were made to help show structure of complex lists:
1990       (1) breakpoints are forced after every ',' in a list where any of
1991       the list items spans multiple lines, and
1992       (2) List items which span multiple lines now get continuation indentation.
1993
1994       The following example illustrates both of these points.  Many thanks to
1995       Wolfgang Weisselberg for this snippet and a discussion of it; this is a
1996       significant formatting improvement. Note how it is easier to see the call
1997       parameters in the NEW version:
1998
1999         OLD:
2000         assert( __LINE__, ( not defined $check )
2001             or ref $check
2002             or $check eq "new"
2003             or $check eq "old", "Error in parameters",
2004             defined $old_new ? ( ref $old_new ? ref $old_new : $old_new ) : "undef",
2005             defined $db_new  ? ( ref $db_new  ? ref $db_new  : $db_new )  : "undef",
2006             defined $old_db ? ( ref $old_db ? ref $old_db : $old_db ) : "undef" );
2007
2008         NEW: 
2009         assert(
2010             __LINE__,
2011             ( not defined $check )
2012               or ref $check
2013               or $check eq "new"
2014               or $check eq "old",
2015             "Error in parameters",
2016             defined $old_new ? ( ref $old_new ? ref $old_new : $old_new ) : "undef",
2017             defined $db_new  ? ( ref $db_new  ? ref $db_new  : $db_new )  : "undef",
2018             defined $old_db  ? ( ref $old_db  ? ref $old_db  : $old_db )  : "undef"
2019         );
2020
2021         Another example shows how this helps displaying lists:
2022
2023         OLD:
2024         %{ $self->{COMPONENTS} } = (
2025             fname =>
2026             { type => 'name', adj => 'yes', font => 'Helvetica', 'index' => 0 },
2027             street =>
2028             { type => 'road', adj => 'yes', font => 'Helvetica', 'index' => 2 },
2029         );
2030
2031         The structure is clearer with the added indentation:
2032     
2033         NEW:
2034         %{ $self->{COMPONENTS} } = (
2035             fname =>
2036               { type => 'name', adj => 'yes', font => 'Helvetica', 'index' => 0 },
2037             street =>
2038               { type => 'road', adj => 'yes', font => 'Helvetica', 'index' => 2 },
2039         );
2040
2041         -The structure of nested logical expressions is now displayed better.
2042         Thanks to Wolfgang Weisselberg for helpful discussions.  For example,
2043         note how the status of the final 'or' is displayed in the following:
2044
2045         OLD:
2046         return ( !null($op)
2047               and null( $op->sibling )
2048               and $op->ppaddr eq "pp_null"
2049               and class($op) eq "UNOP"
2050               and ( ( $op->first->ppaddr =~ /^pp_(and|or)$/
2051                 and $op->first->first->sibling->ppaddr eq "pp_lineseq" )
2052                 or ( $op->first->ppaddr eq "pp_lineseq"
2053                     and not null $op->first->first->sibling
2054                     and $op->first->first->sibling->ppaddr eq "pp_unstack" ) ) );
2055
2056         NEW:
2057         return (
2058             !null($op)
2059               and null( $op->sibling )
2060               and $op->ppaddr eq "pp_null"
2061               and class($op) eq "UNOP"
2062               and (
2063                 (
2064                     $op->first->ppaddr =~ /^pp_(and|or)$/
2065                     and $op->first->first->sibling->ppaddr eq "pp_lineseq"
2066                 )
2067                 or ( $op->first->ppaddr eq "pp_lineseq"
2068                     and not null $op->first->first->sibling
2069                     and $op->first->first->sibling->ppaddr eq "pp_unstack" )
2070               )
2071         );
2072
2073        -A break will always be put before a list item containing a comma-arrow.
2074        This will improve formatting of mixed lists of this form:
2075
2076             OLD:
2077             $c->create(
2078                 'text', 225, 20, -text => 'A Simple Plot',
2079                 -font => $font,
2080                 -fill => 'brown'
2081             );
2082
2083             NEW:
2084             $c->create(
2085                 'text', 225, 20,
2086                 -text => 'A Simple Plot',
2087                 -font => $font,
2088                 -fill => 'brown'
2089             );
2090
2091       -For convenience, the command -dac (--delete-all-comments) now also
2092       deletes pod.  Likewise, -tac (--tee-all-comments) now also sends pod
2093       to a '.TEE' file.  Complete control over the treatment of pod and
2094       comments is still possible, as described in the updated help message 
2095       and man page.
2096
2097       -The logic which breaks open 'containers' has been rewritten to be completely
2098       symmetric in the following sense: if a line break is placed after an opening
2099       {, [, or (, then a break will be placed before the corresponding closing
2100       token.  Thus, a container either remains closed or is completely cracked
2101       open.
2102
2103       -Improved indentation of parenthesized lists.  For example, 
2104
2105                 OLD:
2106                 $GPSCompCourse =
2107                   int(
2108                   atan2( $GPSTempCompLong - $GPSLongitude,
2109                   $GPSLatitude - $GPSTempCompLat ) * 180 / 3.14159265 );
2110
2111                 NEW:
2112                 $GPSCompCourse = int(
2113                     atan2(
2114                         $GPSTempCompLong - $GPSLongitude,
2115                         $GPSLatitude - $GPSTempCompLat
2116                       ) * 180 / 3.14159265
2117                 );
2118
2119        Further improvements will be made in future releases.
2120
2121       -Some improvements were made in formatting small lists.
2122
2123       -Correspondence between Input and Output line numbers reported in a 
2124        .LOG file should now be exact.  They were sometimes off due to the size
2125        of intermediate buffers.
2126
2127       -Corrected minor tokenization error in which a ';' in a foreach loop
2128        control was tokenized as a statement termination, which forced a 
2129        line break:
2130
2131             OLD:
2132             foreach ( $i = 0;
2133                 $i <= 10;
2134                 $i += 2
2135               )
2136             {
2137                 print "$i ";
2138             }
2139
2140             NEW:
2141             foreach ( $i = 0 ; $i <= 10 ; $i += 2 ) {
2142                 print "$i ";
2143             }
2144
2145       -Corrected a problem with reading config files, in which quote marks were not
2146        stripped.  As a result, something like -wba="&& . || " would have the leading
2147        quote attached to the && and not work correctly.  A workaround for older
2148        versions is to place a space around all tokens within the quotes, like this:
2149        -wba=" && . || "
2150
2151       -Removed any existing space between a label and its ':'
2152         OLD    : { }
2153         NEW: { }
2154        This was necessary because the label and its colon are a single token.
2155
2156       -Corrected tokenization error for the following (highly non-recommended) 
2157        construct:
2158         $user = @vars[1] / 100;
2159  
2160       -Resolved cause of a difference between perltidy under perl v5.6.1 and
2161       5.005_03; the problem was different behavior of \G regex position
2162       marker(!)
2163
2164   2001 10 20
2165      -Corrected a bug in which a break was not being made after a full-line
2166      comment within a short eval/sort/map/grep block.  A flag was not being
2167      zeroed.  The syntax error check catches this.  Here is a snippet which
2168      illustrates the bug:
2169
2170             eval {
2171                 #open Socket to Dispatcher
2172                 $sock = &OpenSocket;
2173             };
2174
2175      The formatter mistakenly thought that it had found the following 
2176      one-line block:
2177  
2178             eval {#open Socket to Dispatcher$sock = &OpenSocket; };
2179
2180      The patch fixes this. Many thanks to Henry Story for reporting this bug.
2181
2182      -Changes were made to help diagnose and resolve problems in a
2183      .perltidyrc file: 
2184        (1) processing of command parameters has been into two separate
2185        batches so that any errors in a .perltidyrc file can be localized.  
2186        (2) commands --help, --version, and as many of the --dump-xxx
2187        commands are handled immediately, without any command line processing
2188        at all.  
2189        (3) Perltidy will ignore any commands in the .perltidyrc file which
2190        cause immediate exit.  These are:  -h -v -ddf -dln -dop -dsn -dtt
2191        -dwls -dwrs -ss.  Thanks to Wolfgang Weisselberg for helpful
2192        suggestions regarding these updates.
2193
2194      -Syntax check has been reinstated as default for MSWin32 systems.  This
2195      way Windows 2000 users will get syntax check by default, which seems
2196      like a better idea, since the number of Win 95/98 systems will be
2197      decreasing over time.  Documentation revised to warn Windows 95/98
2198      users about the problem with empty '&1'.  Too bad these systems
2199      all report themselves as MSWin32.
2200
2201   2001 10 16
2202      -Fixed tokenization error in which a method call of the form
2203
2204         Module::->new();
2205  
2206       got a space before the '::' like this:
2207
2208         Module ::->new();
2209
2210       Thanks to David Holden for reporting this.
2211  
2212      -Added -html control over pod text, using a new abbreviation 'pd'.  See
2213      updated perl2web man page. The default is to use the color of a comment,
2214      but italicized.  Old .css style sheets will need a new line for
2215      .pd to use this.  The old color was the color of a string, and there
2216      was no control.  
2217  
2218      -.css lines are now printed in sorted order.
2219
2220      -Fixed interpolation problem where html files had '$input_file' as title
2221      instead of actual input file name.  Thanks to Simon Perreault for finding
2222      this and sending a patch, and also to Tobias Weber.
2223
2224      -Breaks will now have the ':' placed at the start of a line, 
2225      one per line by default because this shows logical structure
2226      more clearly. This coding has been completely redone. Some 
2227      examples of new ?/: formatting:
2228
2229            OLD:
2230                 wantarray ? map( $dir::cwd->lookup($_)->path, @_ ) :
2231                   $dir::cwd->lookup( $_[0] )->path;
2232
2233            NEW:
2234                 wantarray 
2235                   ? map( $dir::cwd->lookup($_)->path, @_ )
2236                   : $dir::cwd->lookup( $_[0] )->path;
2237
2238            OLD:
2239                     $a = ( $b > 0 ) ? {
2240                         a => 1,
2241                         b => 2
2242                     } : { a => 6, b => 8 };
2243
2244            NEW:
2245                     $a = ( $b > 0 )
2246                       ? {
2247                         a => 1,
2248                         b => 2
2249                       }
2250                       : { a => 6, b => 8 };
2251
2252         OLD: (-gnu):
2253         $self->note($self->{skip} ? "Hunk #$self->{hunk} ignored at 1.\n" :
2254                     "Hunk #$self->{hunk} failed--$@");
2255
2256         NEW: (-gnu):
2257         $self->note($self->{skip} 
2258                     ? "Hunk #$self->{hunk} ignored at 1.\n"
2259                     : "Hunk #$self->{hunk} failed--$@");
2260
2261         OLD:
2262             $which_search =
2263               $opts{"t"} ? 'title'   :
2264               $opts{"s"} ? 'subject' : $opts{"a"} ? 'author' : 'title';
2265
2266         NEW:
2267             $which_search =
2268               $opts{"t"} ? 'title'
2269               : $opts{"s"} ? 'subject'
2270               : $opts{"a"} ? 'author'
2271               : 'title';
2272  
2273      You can use -wba=':' to recover the previous default which placed ':'
2274      at the end of a line.  Thanks to Michael Cartmell for helpful
2275      discussions and examples.  
2276
2277      -Tokenizer updated to do syntax checking for matched ?/: pairs.  Also,
2278      the tokenizer now outputs a unique serial number for every balanced
2279      pair of brace types and ?/: pairs.  This greatly simplifies the
2280      formatter.
2281
2282      -Long lines with repeated 'and', 'or', '&&', '||'  will now have
2283      one such item per line.  For example:
2284
2285         OLD:
2286             if ( $opt_d || $opt_m || $opt_p || $opt_t || $opt_x
2287                 || ( -e $archive && $opt_r ) )
2288             {
2289                 ( $pAr, $pNames ) = readAr($archive);
2290             }
2291
2292         NEW:
2293             if ( $opt_d
2294                 || $opt_m
2295                 || $opt_p
2296                 || $opt_t
2297                 || $opt_x
2298                 || ( -e $archive && $opt_r ) )
2299             {
2300                 ( $pAr, $pNames ) = readAr($archive);
2301             }
2302
2303        OLD:
2304             if ( $vp->{X0} + 4 <= $x && $vp->{X0} + $vp->{W} - 4 >= $x
2305                 && $vp->{Y0} + 4 <= $y && $vp->{Y0} + $vp->{H} - 4 >= $y ) 
2306
2307        NEW:
2308             if ( $vp->{X0} + 4 <= $x
2309                 && $vp->{X0} + $vp->{W} - 4 >= $x
2310                 && $vp->{Y0} + 4 <= $y
2311                 && $vp->{Y0} + $vp->{H} - 4 >= $y )
2312
2313      -Long lines with multiple concatenated tokens will have concatenated
2314      terms (see below) placed one per line, except for short items.  For
2315      example:
2316
2317        OLD:
2318             $report .=
2319               "Device type:" . $ib->family . "  ID:" . $ib->serial . "  CRC:"
2320               . $ib->crc . ": " . $ib->model() . "\n";
2321
2322        NEW:
2323             $report .= "Device type:"
2324               . $ib->family . "  ID:"
2325               . $ib->serial . "  CRC:"
2326               . $ib->model()
2327               . $ib->crc . ": " . "\n";
2328
2329      NOTE: at present 'short' means 8 characters or less.  There is a
2330      tentative flag to change this (-scl), but it is undocumented and
2331      is likely to be changed or removed later, so only use it for testing.  
2332      In the above example, the tokens "  ID:", "  CRC:", and "\n" are below
2333      this limit.  
2334
2335      -If a line which is short enough to fit on a single line was
2336      nevertheless broken in the input file at a 'good' location (see below), 
2337      perltidy will try to retain a break.  For example, the following line
2338      will be formatted as:
2339  
2340         open SUM, "<$file"
2341           or die "Cannot open $file ($!)";
2342  
2343      if it was broken in the input file, and like this if not:
2344
2345         open SUM, "<$file" or die "Cannot open $file ($!)";
2346
2347      GOOD: 'good' location means before 'and','or','if','unless','&&','||'
2348
2349      The reason perltidy does not just always break at these points is that if
2350      there are multiple, similar statements, this would preclude alignment.  So
2351      rather than check for this, perltidy just tries to follow the input style,
2352      in the hopes that the author made a good choice. Here is an example where 
2353      we might not want to break before each 'if':
2354
2355         ($Locale, @Locale) = ($English, @English) if (@English > @Locale);
2356         ($Locale, @Locale) = ($German,  @German)  if (@German > @Locale);
2357         ($Locale, @Locale) = ($French,  @French)  if (@French > @Locale);
2358         ($Locale, @Locale) = ($Spanish, @Spanish) if (@Spanish > @Locale);
2359
2360      -Added wildcard file expansion for systems with shells which lack this.
2361      Now 'perltidy *.pl' should work under MSDOS/Windows.  Thanks to Hugh Myers 
2362      for suggesting this.  This uses builtin glob() for now; I may change that.
2363
2364      -Added new flag -sbl which, if specified, overrides the value of -bl
2365      for opening sub braces.  This allows formatting of this type:
2366
2367      perltidy -sbl 
2368
2369      sub foo
2370      {
2371         if (!defined($_[0])) {
2372             print("Hello, World\n");
2373         }
2374         else {
2375             print($_[0], "\n");
2376         }
2377      }
2378      Requested by Don Alexander.
2379
2380      -Fixed minor parsing error which prevented a space after a $$ variable
2381      (pid) in some cases.  Thanks to Michael Cartmell for noting this.
2382      For example, 
2383        old: $$< 700 
2384        new: $$ < 700
2385
2386      -Improved line break choices 'and' and 'or' to display logic better.
2387      For example:
2388
2389         OLD:
2390             exists $self->{'build_dir'} and push @e,
2391               "Unwrapped into directory $self->{'build_dir'}";
2392
2393         NEW:
2394             exists $self->{'build_dir'}
2395               and push @e, "Unwrapped into directory $self->{'build_dir'}";
2396
2397      -Fixed error of multiple use of abbreviatioin '-dsc'.  -dsc remains 
2398      abbreviation for delete-side-comments; -dsm is new abbreviation for 
2399      delete-semicolons.
2400
2401      -Corrected and updated 'usage' help routine.  Thanks to Slaven Rezic for 
2402      noting an error.
2403
2404      -The default for Windows is, for now, not to do a 'perl -c' syntax
2405      check (but -syn will activate it).  This is because of problems with
2406      command.com.  James Freeman sent me a patch which tries to get around
2407      the problems, and it works in many cases, but testing revealed several
2408      issues that still need to be resolved.  So for now, the default is no
2409      syntax check for Windows.
2410
2411      -I added a -T flag when doing perl -c syntax check.
2412      This is because I test it on a large number of scripts from sources
2413      unknown, and who knows what might be hidden in initialization blocks?
2414      Also, deactivated the syntax check if perltidy is run as root.  As a
2415      benign example, running the previous version of perltidy on the
2416      following file would cause it to disappear:
2417
2418             BEGIN{
2419                     print "Bye, bye baby!\n";
2420                     unlink $0;
2421             }
2422         
2423      The new version will not let that happen.
2424
2425      -I am contemplating (but have not yet implemented) making '-lp' the
2426      default indentation, because it is stable now and may be closer to how
2427      perl is commonly formatted.  This could be in the next release.  The
2428      reason that '-lp' was not the original default is that the coding for
2429      it was complex and not ready for the initial release of perltidy.  If
2430      anyone has any strong feelings about this, I'd like to hear.  The
2431      current default could always be recovered with the '-nlp' flag.
2432
2433   2001 09 03
2434      -html updates:
2435          - sub definition names are now specially colored, red by default.  
2436            The letter 'm' is used to identify them.
2437          - keyword 'sub' now has color of other keywords.
2438          - restored html keyword color to __END__ and __DATA__, which was 
2439            accidentally removed in the previous version.
2440
2441      -A new -se (--standard-error-output) flag has been implemented and
2442      documented which causes all errors to be written to standard output
2443      instead of a .ERR file.
2444
2445      -A new -w (--warning-output) flag has been implemented and documented
2446       which causes perltidy to output certain non-critical messages to the
2447       error output file, .ERR.  These include complaints about pod usage,
2448       for example.  The default is to not include these.
2449
2450       NOTE: This replaces an undocumented -w=0 or --warning-level flag
2451       which was tentatively introduced in the previous version to avoid some
2452       unwanted messages.  The new default is the same as the old -w=0, so
2453       that is no longer needed. 
2454
2455       -Improved syntax checking and corrected tokenization of functions such
2456       as rand, srand, sqrt, ...  These can accept either an operator or a term
2457       to their right.  This has been corrected.
2458  
2459      -Corrected tokenization of semicolon: testing of the previous update showed 
2460      that the semicolon in the following statement was being mis-tokenized.  That
2461      did no harm, other than adding an extra blank space, but has been corrected.
2462
2463               for (sort {strcoll($a,$b);} keys %investments) {
2464                  ...
2465               }
2466
2467      -New syntax check: after wasting 5 minutes trying to resolve a syntax
2468       error in which I had an extra terminal ';' in a complex for (;;) statement, 
2469       I spent a few more minutes adding a check for this in perltidy so it won't
2470       happen again.
2471
2472      -The behavior of --break-before-subs (-bbs) and --break-before-blocks
2473      (-bbb) has been modified.  Also, a new control parameter,
2474      --long-block-line-count=n (-lbl=n) has been introduced to give more
2475      control on -bbb.  This was previously a hardwired value.  The reason
2476      for the change is to reduce the number of unwanted blank lines that
2477      perltidy introduces, and make it less erratic.  It's annoying to remove
2478      an unwanted blank line and have perltidy put it back.  The goal is to
2479      be able to sprinkle a few blank lines in that dense script you
2480      inherited from Bubba.  I did a lot of experimenting with different
2481      schemes for introducing blank lines before and after code blocks, and
2482      decided that there is no really good way to do it.  But I think the new
2483      scheme is an improvement.  You can always deactivate this with -nbbb.
2484      I've been meaning to work on this; thanks to Erik Thaysen for bringing
2485      it to my attention.
2486
2487      -The .LOG file is seldom needed, and I get tired of deleting them, so
2488       they will now only be automatically saved if perltidy thinks that it
2489       made an error, which is almost never.  You can still force the logfile
2490       to be saved with -log or -g.
2491
2492      -Improved method for computing number of columns in a table.  The old
2493      method always tried for an even number.  The new method allows odd
2494      numbers when it is obvious that a list is not a hash initialization
2495      list.
2496
2497        old: my (
2498                  $name,       $xsargs, $parobjs, $optypes,
2499                  $hasp2child, $pmcode, $hdrcode, $inplacecode,
2500                  $globalnew,  $callcopy
2501               )
2502               = @_;
2503
2504        new: my (
2505                  $name,   $xsargs,  $parobjs,     $optypes,   $hasp2child,
2506                  $pmcode, $hdrcode, $inplacecode, $globalnew, $callcopy
2507               )
2508               = @_;
2509
2510      -I fiddled with the list threshold adjustment, and some small lists
2511      look better now.  Here is the change for one of the lists in test file
2512      'sparse.t':
2513      old:
2514        %units =
2515          ("in", "in", "pt", "pt", "pc", "pi", "mm", "mm", "cm", "cm", "\\hsize", "%",
2516            "\\vsize", "%", "\\textwidth", "%", "\\textheight", "%");
2517
2518      new:
2519        %units = (
2520                   "in",      "in", "pt",          "pt", "pc",           "pi",
2521                   "mm",      "mm", "cm",          "cm", "\\hsize",      "%",
2522                   "\\vsize", "%",  "\\textwidth", "%",  "\\textheight", "%"
2523                   );
2524
2525      -Improved -lp formatting at '=' sign.  A break was always being added after
2526      the '=' sign in a statement such as this, (to be sure there was enough room
2527      for the parameters):
2528
2529      old: my $fee =
2530             CalcReserveFee(
2531                             $env,          $borrnum,
2532                             $biblionumber, $constraint,
2533                             $bibitems
2534                             );
2535  
2536      The updated version doesn't do this unless the space is really needed:
2537
2538      new: my $fee = CalcReserveFee(
2539                                    $env,          $borrnum,
2540                                    $biblionumber, $constraint,
2541                                    $bibitems
2542                                    );
2543
2544      -I updated the tokenizer to allow $#+ and $#-, which seem to be new to
2545      Perl 5.6.  Some experimenting with a recent version of Perl indicated
2546      that it allows these non-alphanumeric '$#' array maximum index
2547      varaibles: $#: $#- $#+ so I updated the parser accordingly.  Only $#:
2548      seems to be valid in older versions of Perl.
2549
2550      -Fixed a rare formatting problem with -lp (and -gnu) which caused
2551      excessive indentation.
2552
2553      -Many additional syntax checks have been added.
2554
2555      -Revised method for testing here-doc target strings; the following
2556      was causing trouble with a regex test because of the '*' characters:
2557       print <<"*EOF*";
2558       bla bla
2559       *EOF*
2560      Perl seems to allow almost anything to be a here doc target, so an
2561      exact string comparison is now used.
2562
2563      -Made update to allow underscores in binary numbers, like '0b1100_0000'.
2564
2565      -Corrected problem with scanning certain module names; a blank space was 
2566      being inserted after 'warnings' in the following:
2567         use warnings::register;
2568      The problem was that warnings (and a couple of other key modules) were 
2569      being tokenized as keywords.  They should have just been identifiers.
2570
2571      -Corrected tokenization of indirect objects after sort, system, and exec,
2572      after testing produced an incorrect error message for the following
2573      line of code:
2574         print sort $sortsubref @list;
2575
2576      -Corrected minor problem where a line after a format had unwanted
2577      extra continuation indentation.  
2578
2579      -Delete-block-comments (and -dac) now retain any leading hash-bang line
2580
2581      -Update for -lp (and -gnu) to not align the leading '=' of a list
2582      with a previous '=', since this interferes with alignment of parameters.
2583
2584       old:  my $hireDay = new Date;
2585             my $self    = {
2586                          firstName => undef,
2587                          lastName  => undef,
2588                          hireDay   => $hireDay
2589                          };
2590     
2591       new:  my $hireDay = new Date;
2592             my $self = {
2593                          firstName => undef,
2594                          lastName  => undef,
2595                          hireDay   => $hireDay
2596                          };
2597
2598      -Modifications made to display tables more compactly when possible,
2599       without adding lines. For example,
2600       old:
2601                     '1', "I", '2', "II", '3', "III", '4', "IV",
2602                     '5', "V", '6', "VI", '7', "VII", '8', "VIII",
2603                     '9', "IX"
2604       new:
2605                     '1', "I",   '2', "II",   '3', "III",
2606                     '4', "IV",  '5', "V",    '6', "VI",
2607                     '7', "VII", '8', "VIII", '9', "IX"
2608
2609      -Corrected minor bug in which -pt=2 did not keep the right paren tight
2610      around a '++' or '--' token, like this:
2611
2612                 for ($i = 0 ; $i < length $key ; $i++ )
2613
2614      The formatting for this should be, and now is: 
2615
2616                 for ($i = 0 ; $i < length $key ; $i++)
2617
2618      Thanks to Erik Thaysen for noting this.
2619
2620      -Discovered a new bug involving here-docs during testing!  See BUGS.html.  
2621
2622      -Finally fixed parsing of subroutine attributes (A Perl 5.6 feature).
2623      However, the attributes and prototypes must still be on the same line
2624      as the sub name.
2625
2626   2001 07 31
2627      -Corrected minor, uncommon bug found during routine testing, in which a
2628      blank got inserted between a function name and its opening paren after
2629      a file test operator, but only in the case that the function had not
2630      been previously seen.  Perl uses the existence (or lack thereof) of 
2631      the blank to guess if it is a function call.  That is,
2632         if (-l pid_filename()) {
2633      became
2634         if (-l pid_filename ()) {
2635      which is a syntax error if pid_filename has not been seen by perl.
2636
2637      -If the AutoLoader module is used, perltidy will continue formatting
2638      code after seeing an __END__ line.  Use -nlal to deactivate this feature.  
2639      Likewise, if the SelfLoader module is used, perltidy will continue 
2640      formatting code after seeing a __DATA__ line.  Use -nlsl to
2641      deactivate this feature.  Thanks to Slaven Rezic for this suggestion.
2642
2643      -pod text after __END__ and __DATA__ is now identified by perltidy
2644      so that -dp works correctly.  Thanks to Slaven Rezic for this suggestion.
2645
2646      -The first $VERSION line which might be eval'd by MakeMaker
2647      is now passed through unchanged.  Use -npvl to deactivate this feature.
2648      Thanks to Manfred Winter for this suggestion.
2649
2650      -Improved indentation of nested parenthesized expressions.  Tests have
2651      given favorable results.  Thanks to Wolfgang Weisselberg for helpful
2652      examples.
2653
2654   2001 07 23
2655      -Fixed a very rare problem in which an unwanted semicolon was inserted
2656      due to misidentification of anonymous hash reference curly as a code
2657      block curly.  (No instances of this have been reported; I discovered it
2658      during testing).  A workaround for older versions of perltidy is to use
2659      -nasc.
2660
2661      -Added -icb (-indent-closing-brace) parameter to indent a brace which
2662      terminates a code block to the same level as the previous line.
2663      Suggested by Andrew Cutler.  For example, 
2664
2665             if ($task) {
2666                 yyy();
2667                 }    # -icb
2668             else {
2669                 zzz();
2670                 }
2671
2672      -Rewrote error message triggered by an unknown bareword in a print or
2673      printf filehandle position, and added flag -w=0 to prevent issuing this
2674      error message.  Suggested by Byron Jones.
2675
2676      -Added modification to align a one-line 'if' block with similar
2677      following 'elsif' one-line blocks, like this:
2678           if    ( $something eq "simple" )  { &handle_simple }
2679           elsif ( $something eq "hard" )    { &handle_hard }
2680      (Suggested by  Wolfgang Weisselberg).
2681
2682   2001 07 02
2683      -Eliminated all constants with leading underscores because perl 5.005_03
2684      does not support that.  For example, _SPACES changed to XX_SPACES.
2685      Thanks to kromJx for this update.
2686
2687   2001 07 01
2688      -the directory of test files has been moved to a separate distribution
2689      file because it is getting large but is of little interest to most users.
2690      For the current distribution:
2691        perltidy-20010701.tgz        contains the source and docs for perltidy
2692        perltidy-20010701-test.tgz   contains the test files
2693
2694      -fixed bug where temporary file perltidy.TMPI was not being deleted 
2695      when input was from stdin.
2696
2697      -adjusted line break logic to not break after closing brace of an
2698      eval block (suggested by Boris Zentner).
2699
2700      -added flag -gnu (--gnu-style) to give an approximation to the GNU
2701      style as sometimes applied to perl.  The programming style in GNU
2702      'automake' was used as a guide in setting the parameters; these
2703      parameters will probably be adjusted over time.
2704
2705      -an empty code block now has one space for emphasis:
2706        if ( $cmd eq "bg_untested" ) {}    # old
2707        if ( $cmd eq "bg_untested" ) { }   # new
2708      If this bothers anyone, we could create a parameter.
2709
2710      -the -bt (--brace-tightness) parameter has been split into two
2711      parameters to give more control. -bt now applies only to non-BLOCK
2712      braces, while a new parameter -bbt (block-brace-tightness) applies to
2713      curly braces which contain code BLOCKS. The default value is -bbt=0.
2714
2715      -added flag -icp (--indent-closing-paren) which leaves a statement
2716      termination of the form );, };, or ]; indented with the same
2717      indentation as the previous line.  For example,
2718
2719         @month_of_year = (          # default, or -nicp
2720             'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct',
2721             'Nov', 'Dec'
2722         );
2723
2724         @month_of_year = (          # -icp
2725             'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct',
2726             'Nov', 'Dec'
2727             );
2728
2729      -Vertical alignment updated to synchronize with tokens &&, ||,
2730      and, or, if, unless.  Allowable space before forcing
2731      resynchronization has been increased.  (Suggested by  Wolfgang
2732      Weisselberg).
2733
2734      -html corrected to use -nohtml-bold-xxxxxxx or -nhbx to negate bold,
2735      and likewise -nohtml-italic-xxxxxxx or -nhbi to negate italic.  There
2736      was no way to negate these previously.  html documentation updated and
2737      corrected.  (Suggested by  Wolfgang Weisselberg).
2738
2739      -Some modifications have been made which improve the -lp formatting in
2740      a few cases.
2741
2742      -Perltidy now retains or creates a blank line after an =cut to keep
2743      podchecker happy (Suggested by Manfred H. Winter).  This appears to be
2744      a glitch in podchecker, but it was annoying.
2745
2746   2001 06 17
2747      -Added -bli flag to give continuation indentation to braces, like this
2748
2749             if ($bli_flag)
2750               {
2751                 extra_indentation();
2752               }
2753
2754      -Corrected an error with the tab (-t) option which caused the last line
2755      of a multi-line quote to receive a leading tab.  This error was in
2756      version 2001 06 08  but not 2001 04 06.  If you formatted a script
2757      with -t with this version, please check it by running once with the
2758      -chk flag and perltidy will scan for this possible error.
2759
2760      -Corrected an invalid pattern (\R should have been just R), changed
2761      $^W =1 to BEGIN {$^W=1} to use warnings in compile phase, and corrected
2762      several unnecessary 'my' declarations. Many thanks to Wolfgang Weisselberg,
2763      2001-06-12, for catching these errors.
2764  
2765      -A '-bar' flag has been added to require braces to always be on the
2766      right, even for multi-line if and foreach statements.  For example,
2767      the default formatting of a long if statement would be:
2768
2769             if ($bigwasteofspace1 && $bigwasteofspace2
2770               || $bigwasteofspace3 && $bigwasteofspace4)
2771             {
2772                 bigwastoftime();
2773             }
2774
2775      With -bar, the formatting is:
2776
2777             if ($bigwasteofspace1 && $bigwasteofspace2
2778               || $bigwasteofspace3 && $bigwasteofspace4) {
2779                 bigwastoftime();
2780             }
2781      Suggested by Eli Fidler 2001-06-11.
2782
2783      -Uploaded perltidy to sourceforge cvs 2001-06-10.
2784
2785      -An '-lp' flag (--line-up-parentheses) has been added which causes lists
2786      to be indented with extra indentation in the manner sometimes
2787      associated with emacs or the GNU suggestions.  Thanks to Ian Stuart for
2788      this suggestion and for extensive help in testing it. 
2789
2790      -Subroutine call parameter lists are now formatted as other lists.
2791      This should improve formatting of tables being passed via subroutine
2792      calls.  This will also cause full indentation ('-i=n, default n= 4) of
2793      continued parameter list lines rather than just the number of spaces
2794      given with -ci=n, default n=2.
2795  
2796      -Added support for hanging side comments.  Perltidy identifies a hanging
2797      side comment as a comment immediately following a line with a side
2798      comment or another hanging side comment.  This should work in most
2799      cases.  It can be deactivated with --no-hanging-side-comments (-nhsc).
2800      The manual has been updated to discuss this.  Suggested by Brad
2801      Eisenberg some time ago, and finally implemented.
2802
2803   2001 06 08
2804      -fixed problem with parsing command parameters containing quoted
2805      strings in .perltidyrc files. (Reported by Roger Espel Llima 2001-06-07).
2806
2807      -added two command line flags, --want-break-after and 
2808      --want-break-before, which allow changing whether perltidy
2809      breaks lines before or after any operators.  Please see the revised 
2810      man pages for details.
2811
2812      -added system-wide configuration file capability.
2813      If perltidy does not find a .perltidyrc command line file in
2814      the current directory, nor in the home directory, it now looks
2815      for '/usr/local/etc/perltidyrc' and then for '/etc/perltidyrc'.
2816      (Suggested by Roger Espel Llima 2001-05-31).
2817
2818      -fixed problem in which spaces were trimmed from lines of a multi-line
2819      quote. (Reported by Roger Espel Llima 2001-05-30).  This is an 
2820      uncommon situation, but serious, because it could conceivably change
2821      the proper function of a script.
2822
2823      -fixed problem in which a semicolon was incorrectly added within 
2824      an anonymous hash.  (Reported by A.C. Yardley, 2001-5-23).
2825      (You would know if this happened, because perl would give a syntax
2826      error for the resulting script).
2827
2828      -fixed problem in which an incorrect error message was produced
2829       after a version number on a 'use' line, like this ( Reported 
2830       by Andres Kroonmaa, 2001-5-14):
2831
2832                   use CGI 2.42 qw(fatalsToBrowser);
2833
2834       Other than the extraneous error message, this bug was harmless.
2835
2836   2001 04 06
2837      -fixed serious bug in which the last line of some multi-line quotes or
2838       patterns was given continuation indentation spaces.  This may make
2839       a pattern incorrect unless it uses the /x modifier.  To find
2840       instances of this error in scripts which have been formatted with
2841       earlier versions of perltidy, run with the -chk flag, which has
2842       been added for this purpose (SLH, 2001-04-05).
2843
2844       ** So, please check previously formatted scripts by running with -chk
2845       at least once **
2846
2847      -continuation indentation has been reprogrammed to be hierarchical, 
2848       which improves deeply nested structures.
2849
2850      -fixed problem with undefined value in list formatting (reported by Michael
2851       Langner 2001-04-05)
2852
2853      -Switched to graphical display of nesting in .LOG files.  If an
2854       old format string was "(1 [0 {2", the new string is "{{(".  This
2855       is easier to read and also shows the order of nesting.
2856
2857      -added outdenting of cuddled paren structures, like  ")->pack(".
2858
2859      -added line break and outdenting of ')->' so that instead of
2860
2861             $mw->Label(
2862               -text   => "perltidy",
2863               -relief => 'ridge')->pack;
2864  
2865       the current default is:
2866
2867             $mw->Label(
2868               -text   => "perltidy",
2869               -relief => 'ridge'
2870             )->pack;
2871
2872       (requested by Michael Langner 2001-03-31; in the future this could 
2873       be controlled by a command-line parameter).
2874
2875      -revised list indentation logic, so that lists following an assignment
2876       operator get one full indentation level, rather than just continuation 
2877       indentation.  Also corrected some minor glitches in the continuation 
2878       indentation logic. 
2879
2880      -Fixed problem with unwanted continuation indentation after a blank line 
2881      (reported by Erik Thaysen 2001-03-28):
2882
2883      -minor update to avoid stranding a single '(' on one line
2884
2885   2001 03 28:
2886      -corrected serious error tokenizing filehandles, in which a sub call 
2887      after a print or printf, like this:
2888         print usage() and exit;
2889      became this:
2890         print usage () and exit;
2891      Unfortunately, this converts 'usage' to a filehandle.  To fix this, rerun
2892      perltidy; it will look for this situation and issue a warning. 
2893
2894      -fixed another cuddled-else formatting bug (Reported by Craig Bourne)
2895
2896      -added several diagnostic --dump routines
2897  
2898      -added token-level whitespace controls (suggested by Hans Ecke)
2899
2900   2001 03 23:
2901      -added support for special variables of the form ${^WANT_BITS}
2902
2903      -space added between scalar and left paren in 'for' and 'foreach' loops,
2904       (suggestion by Michael Cartmell):
2905
2906         for $i( 1 .. 20 )   # old
2907         for $i ( 1 .. 20 )   # new
2908
2909      -html now outputs cascading style sheets (thanks to suggestion from
2910       Hans Ecke)
2911
2912      -flags -o and -st now work with -html
2913
2914      -added missing -html documentation for comments (noted by Alex Izvorski)
2915
2916      -support for VMS added (thanks to Michael Cartmell for code patches and 
2917        testing)
2918
2919      -v-strings implemented (noted by Hans Ecke and Michael Cartmell; extensive
2920        testing by Michael Cartmell)
2921
2922      -fixed problem where operand may be empty at line 3970 
2923       (\b should be just b in lines 3970, 3973) (Thanks to Erik Thaysen, 
2924       Keith Marshall for bug reports)
2925
2926      -fixed -ce bug (cuddled else), where lines like '} else {' were indented
2927       (Thanks to Shawn Stepper and Rick Measham for reporting this)
2928
2929   2001 03 04:
2930      -fixed undefined value in line 153 (only worked with -I set)
2931      (Thanks to Mike Stok, Phantom of the Opcodes, Ian Ehrenwald, and others)
2932
2933      -fixed undefined value in line 1069 (filehandle problem with perl versions <
2934      5.6) (Thanks to Yuri Leikind, Mike Stok, Michael Holve, Jeff Kolber)
2935
2936   2001 03 03:
2937      -Initial announcement at freshmeat.net; started Change Log
2938      (Unfortunately this version was DOA, but it was fixed the next day)
2939