Perltidy Change Log
+ 2017 05 21
+ - Fixed debian #862667: failure to check for perltidy.ERR deletion can lead
+ to overwriting abritrary files by symlink attack. Perltidy was continuing
+ to write files after an unlink failure. Thanks to Don Armstrong
+ for a patch.
+
+ - Fixed RT #116344, perltidy fails on certain anonymous hash references:
+ in the following code snippet the '?' was misparsed as a pattern
+ delimiter rather than a ternary operator.
+ return ref {} ? 1 : 0;
+
+ - Fixed RT #113792: misparsing of a fat comma (=>) right after
+ the __END__ or __DATA__ tokens. These keywords were getting
+ incorrectly quoted by the following => operator.
+
+ - Fixed RT #118558. Custom Getopt::Long configuration breaks parsing
+ of perltidyrc. Perltidy was resetting the users configuration too soon.
+
+ - Fixed RT #119140, failure to parse double diamond operator. Code to
+ handle this new operator has been added.
+
+ - Fixed RT #120968. Fixed problem where -enc=utf8 didn't work
+ with --backup-and-modify-in-place. Thanks to Heinz Knutzen for this patch.
+
+ - Fixed minor formatting issue where one-line blocks for subs with signatures
+ were unnecesarily broken
+
+ - RT #32905, patch to fix utf-8 error when output was STDOUT.
+
+ - RT #79947, improved spacing of try/catch/finally blocks. Thanks to qsimpleq
+ for a patch.
+
+ - Fixed #114909, Anonymous subs with signatures and prototypes misparsed as
+ broken ternaries, in which a statement such as this was not being parsed
+ correctly:
+ return sub ( $fh, $out ) : prototype(*$) { ... }
+
+ - Implemented RT #113689, option to introduces spaces after an opening block
+ brace and before a closing block brace. Four new optional controls are
+ added. The first two define the minimum number of blank lines to be
+ inserted
+
+ -blao=i or --blank-lines-after-opening-block=i
+ -blbc=i or --blank-lines-before-closing-block=i
+
+ where i is an integer, the number of lines (the default is 0).
+
+ The second two define the types of blocks to which the first two apply
+
+ -blaol=s or --blank-lines-after-opening-block-list=s
+ -blbcl=s or --blank-lines-before-closing-block-list=s
+
+ where s is a string of possible block keywords (default is just 'sub',
+ meaning a named subroutine).
+
+ For more information please see the documentation.
+
+ - The method for specifying block types for certain input parameters has
+ been generalized to distinguish between normal named subroutines and
+ anonymous subs. The keyword for normal subroutines remains 'sub', and
+ the new keyword for anonymous subs is 'asub'.
+
+ - Minor documentation changes. The BUGS sections now have a link
+ to CPAN where most open bugs and issues can be reviewed and bug reports
+ can be submitted. The information in the AUTHOR and CREDITS sections of
+ the man pages have been removed from the man pages to streamline the
+ documentation. This information is still in the source code.
+
+ 2016 03 02
+ - RT #112534. Corrected a minor problem in which an unwanted newline
+ was placed before the closing brace of an anonymous sub with
+ a signature, if it was in a list. Thanks to Dmytro Zagashev.
+
+ - Corrected a minor problem in which occasional extra indentation was
+ given to the closing brace of an anonymous sub in a list when the -lp
+ parameter was set.
+
+ 2016 03 01
+ - RT #104427. Added support for signatures.
+
+ - RT #111512. Changed global warning flag $^W = 1 to use warnings;
+ Thanks to Dmytro Zagashev.
+
+ - RT #110297, added support for new regexp modifier /n
+ Thanks to Dmytro Zagashev.
+
+ - RT #111519. The -io (--indent-only) and -dac (--delete-all-comments)
+ can now both be used in one pass. Thanks to Dmitry Veltishev.
+
+ - Patch to avoid error message with 'catch' used by TryCatch, as in
+ catch($err){
+ # do something
+ }
+ Thanks to Nick Tonkin.
+
+ - RT #32905, UTF-8 coding is now more robust. Thanks to qsimpleq
+ and Dmytro for patches.
+
+ - RT #106885. Added string bitwise operators ^. &. |. ~. ^.= &.= |.=
+
+ - Fixed RT #107832 and #106492, lack of vertical alignment of two lines
+ when -boc flag (break at old commas) is set. This bug was
+ inadvertantly introduced in previous bug fix RT #98902.
+
+ - Some common extensions to Perl syntax are handled better.
+ In particular, the following snippet is now foratted cleanly:
+
+ method deposit( Num $amount) {
+ $self->balance( $self->balance + $amount );
+ }
+
+ A new flag -xs (--extended-syntax) was added to enable this, and the default
+ is to use -xs.
+
+ In previous versions, and now only when -nxs is set, this snippet of code
+ generates the following error message:
+
+ "syntax error at ') {', didn't see one of: case elsif for foreach given if switch unless until when while"
+
+ 2015 08 15
+ - Fixed RT# 105484, Invalid warning about 'else' in 'switch' statement. The
+ warning happened if a 'case' statement did not use parens.
+
+ - Fixed RT# 101547, misparse of // caused error message. Also..
+
+ - Fixed RT# 102371, misparse of // caused unwated space in //=
+
+ - Fixed RT# 100871, "silent failure of HTML Output on Windows".
+ Changed calls to tempfile() from:
+ my ( $fh_tmp, $tmpfile ) = tempfile();
+ to have the full path name:
+ my ( $fh_tmp, $tmpfile ) = File::Temp::tempfile()
+ because of problems in the Windows version reported by Dean Pearce.
+
+ - Fixed RT# 99514, calling the perltidy module multiple times with
+ a .perltidyrc file containing the parameter --output-line-ending
+ caused a crash. This was a glitch in the memoization logic.
+
+ - Fixed RT#99961, multiple lines inside a cast block caused unwanted
+ continuation indentation.
+
+ - RT# 32905, broken handling of UTF-8 strings.
+ A new flag -utf8 causes perltidy assume UTF-8 encoding for input and
+ output of an io stream. Thanks to Sebastian Podjasek for a patch.
+ This feature may not work correctly in older versions of Perl.
+ It worked in a linux version 5.10.1 but not in a Windows version 5.8.3 (but
+ otherwise perltidy ran correctly).
+
+ - Warning files now report perltidy VERSION. Suggested by John Karr.
+
+ - Fixed long flag --nostack-closing-tokens (-nsct has always worked though).
+ This was due to a typo. This also fixed --nostack-opening-tokens to
+ behave correctly. Thanks to Rob Dixon.
+
+ 2014 07 11
+ - Fixed RT #94902: abbreviation parsing in .perltidyrc files was not
+ working for multi-line abbreviations. Thanks to Eric Fung for
+ supplying a patch.
+
+ - Fixed RT #95708, misparsing of a hash when the first key was a perl
+ keyword, causing a semicolon to be incorrectly added.
+
+ - Fixed RT #94338 for-loop in a parenthesized block-map. A code block within
+ parentheses of a map, sort, or grep function was being mistokenized. In
+ rare cases this could produce in an incorrect error message. The fix will
+ produce some minor formatting changes. Thanks to Daniel Trizen
+ discovering and documenting this.
+
+ - Fixed RT #94354, excess indentation for stacked tokens. Thanks to
+ Colin Williams for supplying a patch.
+
+ - Added support for experimental postfix dereferencing notation introduced in
+ perl 5.20. RT #96021.
+
+ - Updated documentation to clarify the behavior of the -io flag
+ in response to RT #95709. You can add -noll or -l=0 to prevent
+ long comments from being outdented when -io is used.
+
+ - Added a check to prevent a problem reported in RT #81866, where large
+ scripts which had been compressed to a single line could not be formatted
+ because of a check for VERSION for MakeMaker. The workaround was to
+ use -nvpl, but this shouldn't be necessary now.
+
+ - Fixed RT #96101; Closing brace of anonymous sub in a list was being
+ indented. For example, the closing brace of the anonymous sub below
+ will now be lined up with the word 'callback'. This problem
+ occured if there was no comma after the closing brace of the anonymous sub.
+ This update may cause minor changes to formatting of code with lists
+ of anonymous subs, especially TK code.
+
+ # OLD
+ my @menu_items = (
+
+ #...
+ {
+ path => '/_Operate/Transcode and split',
+ callback => sub {
+ return 1 if not $self->project_opened;
+ $self->comp('project')->transcode( split => 1 );
+ }
+ }
+ );
+
+ # NEW
+ my @menu_items = (
+
+ #...
+ {
+ path => '/_Operate/Transcode and split',
+ callback => sub {
+ return 1 if not $self->project_opened;
+ $self->comp('project')->transcode( split => 1 );
+ }
+ }
+ );
+
+ 2014 03 28
+ - Fixed RT #94190 and debian Bug #742004: perltidy.LOG file left behind.
+ Thanks to George Hartzell for debugging this. The problem was
+ caused by the memoization speedup patch in version 20121207. An
+ unwanted flag was being set which caused a LOG to be written if
+ perltidy was called multiple times.
+
+ - New default behavior for LOG files: If the source is from an array or
+ string (through a call to the perltidy module) then a LOG output is only
+ possible if a logfile stream is specified. This is to prevent
+ unexpected perltidy.LOG files.
+
+ - Fixed debian Bug #740670, insecure temporary file usage. File::Temp is now
+ used to get a temporary file. Thanks to Don Anderson for a patch.
+
+ - Any -b (--backup-and-modify-in-place) flag is silently ignored when a
+ source stream, destination stream, or standard output is used.
+ This is because the -b flag may have been in a .perltidyrc file and
+ warnings break Test::NoWarnings. Thanks to Marijn Brand.
+
+ 2013 09 22
+ - Fixed RT #88020. --converge was not working with wide characters.
+
+ - Fixed RT #78156. package NAMESPACE VERSION syntax not accepted.
+
+ - First attempt to fix RT #88588. INDEX END tag change in pod2html breaks
+ perltidy -html. I put in a patch which should work but I don't yet have
+ a way of testing it.
+
+ 2013 08 06
+ - Fixed RT #87107, spelling
+
+ 2013 08 05
+ - Fixed RT #87502, incorrect of parsing of smartmatch before hash brace
+
+ - Added feature request RT #87330, trim whitespace after POD.
+ The flag -trp (--trim-pod) will trim trailing whitespace from lines of POD
+
+ 2013 07 17
+ - Fixed RT #86929, #86930, missing lhs of assignment.
+
+ - Fixed RT #84922, moved pod from Tidy.pm into Tidy.pod
+
+ 2012 12 07
+ - The flag -cab=n or --comma-arrow-breakpoints=n has been generalized
+ to give better control over breaking open short containers. The
+ possible values are now:
+
+ n=0 break at all commas after =>
+ n=1 stable: break at all commas after => if container is open,
+ EXCEPT FOR one-line containers
+ n=2 break at all commas after =>, BUT try to form the maximum
+ maximum one-line container lengths
+ n=3 do not treat commas after => specially at all
+ n=4 break everything: like n=0 but also break a short container with
+ a => not followed by a comma
+ n=5 stable: like n=1 but ALSO break at open one-line containers (default)
+
+ New values n=4 and n=5 have been added to allow short blocks to be
+ broken open. The new default is n=5, stable. It should more closely
+ follow the breaks in the input file, and previously formatted code
+ should remain unchanged. If this causes problems use -cab=1 to recover
+ the former behavior. Thanks to Tony Maszeroski for the suggestion.
+
+ To illustrate the need for the new options, if perltidy is given
+ the following code, then the old default (-cab=1) was to close up
+ the 'index' container even if it was open in the source. The new
+ default (-cab=5) will keep it open if it was open in the source.
+
+ our $fancypkg = {
+ 'ALL' => {
+ 'index' => {
+ 'key' => 'value',
+ },
+ 'alpine' => {
+ 'one' => '+',
+ 'two' => '+',
+ 'three' => '+',
+ },
+ }
+ };
+
+ - New debug flag --memoize (-mem). This version contains a
+ patch supplied by Jonathan Swartz which can significantly speed up
+ repeated calls to Perl::Tidy::perltidy in a single process by caching
+ the result of parsing the formatting parameters. A factor of up to 10
+ speedup was achieved for masontidy (https://metacpan.org/module/masontidy).
+ The memoization patch is on by default but can be deactivated for
+ testing with -nmem (or --no-memoize).
+
+ - New flag -tso (--tight-secret-operators) causes certain perl operator
+ sequences (secret operators) to be formatted "tightly" (without spaces).
+ The most common of these are 0 + and + 0 which become 0+ and +0. The
+ operators currently modified by this flag are:
+ =( )= 0+ +0 ()x!! ~~<> ,=>
+ Suggested by by Philippe Bruhat. See https://metacpan.org/module/perlsecret
+ This flag is off by default.
+
+ - New flag -vmll (--variable-maximum-line-length) makes the maximum
+ line length increase with the nesting depth of a line of code.
+ Basically, it causes the length of leading whitespace to be ignored when
+ setting line breaks, so the formatting of a block of code is independent
+ of its nesting depth. Try this option if you have deeply nested
+ code or data structures, perhaps in conjunction with the -wc flag
+ described next. The default is not todo this.
+
+ - New flag -wc=n (--whitespace-cycle=n) also addresses problems with
+ very deeply nested code and data structures. When this parameter is
+ used and the nesting depth exceeds the value n, the leading whitespace
+ will be reduced and start at 1 again. The result is that deeply
+ nested blocks of code will shift back to the left. This occurs cyclically
+ to any nesting depth. This flag may be used either with or without -vmll.
+ The default is not to use this (-wc=0).
+
+ - Fixed RT #78764, error parsing smartmatch operator followed by anonymous
+ hash or array and then a ternary operator; two examples:
+
+ qr/3/ ~~ ['1234'] ? 1 : 0;
+ map { $_ ~~ [ '0', '1' ] ? 'x' : 'o' } @a;
+
+ - Fixed problem with specifying spaces around arrows using -wls='->'
+ and -wrs='->'. Thanks to Alain Valleton for documenting this problem.
+
+ - Implemented RT #53183, wishlist, lines of code with the same indentation
+ level which are contained with multiple stacked opening and closing tokens
+ (requested with flags -sot -sct) now have reduced indentation.
+
+ # Default
+ $sender->MailMsg(
+ {
+ to => $addr,
+ subject => $subject,
+ msg => $body
+ }
+ );
+
+ # OLD: perltidy -sot -sct
+ $sender->MailMsg( {
+ to => $addr,
+ subject => $subject,
+ msg => $body
+ } );
+
+ # NEW: perltidy -sot -sct
+ $sender->MailMsg( {
+ to => $addr,
+ subject => $subject,
+ msg => $body
+ } );
+
+ - New flag -act=n (--all-containers-tightness=n) is an abbreviation for
+ -pt=n -sbt=n -bt=n -bbt=n, where n=0,1, or 2. It simplifies input when all
+ containers have the same tightness. Using the same example:
+
+ # NEW: perltidy -sot -sct -act=2
+ $sender->MailMsg({
+ to => $addr,
+ subject => $subject,
+ msg => $body
+ });
+
+ - New flag -sac (--stack-all-containers) is an abbreviation for -sot -sct
+ This is part of wishlist item RT #53183. Using the same example again:
+
+ # NEW: perltidy -sac -act=2
+ $sender->MailMsg({
+ to => $addr,
+ subject => $subject,
+ msg => $body
+ });
+
+ - new flag -scbb (--stack-closing-block-brace) causes isolated closing
+ block braces to stack as in the following example. (Wishlist item RT#73788)
+
+ DEFAULT:
+ for $w1 (@w1) {
+ for $w2 (@w2) {
+ for $w3 (@w3) {
+ for $w4 (@w4) {
+ push( @lines, "$w1 $w2 $w3 $w4\n" );
+ }
+ }
+ }
+ }
+
+ perltidy -scbb:
+ for $w1 (@w1) {
+ for $w2 (@w2) {
+ for $w3 (@w3) {
+ for $w4 (@w4) {
+ push( @lines, "$w1 $w2 $w3 $w4\n" );
+ } } } }
+
+ There is, at present, no flag to place these closing braces at the end
+ of the previous line. It seems difficult to develop good rules for
+ doing this for a wide variety of code and data structures.
+
+ - Parameters defining block types may use a wildcard '*' to indicate
+ all block types. Previously it was not possible to include bare blocks.
+
+ - A flag -sobb (--stack-opening-block-brace) has been introduced as an
+ alias for -bbvt=2 -bbvtl='*'. So for example the following test code:
+
+ {{{{{{{ $testing }}}}}}}
+
+ cannot be formatted as above but can at least be kept vertically compact
+ using perltidy -sobb -scbb
+
+ { { { { { { { $testing
+ } } } } } } }
+
+ Or even, perltidy -sobb -scbb -i=1 -bbt=2
+ {{{{{{{$testing
+ }}}}}}}
+
+
+ - Error message improved for conflicts due to -pbp; thanks to Djun Kim.
+
+ - Fixed RT #80645, error parsing special array name '@$' when used as
+ @{$} or $#{$}
+
+ - Eliminated the -chk debug flag which was included in version 20010406 to
+ do a one-time check for a bug with multi-line quotes. It has not been
+ needed since then.
+
+ - Numerous other minor formatting improvements.
+
+ 2012 07 14
+ - Added flag -iscl (--ignore-side-comment-lengths) which causes perltidy
+ to ignore the length of side comments when setting line breaks,
+ RT #71848. The default is to include the length of side comments when
+ breaking lines to stay within the length prescribed by the -l=n
+ maximum line length parameter. For example,
+
+ Default behavior on a single line with long side comment:
+ $vmsfile =~ s/;[\d\-]*$//
+ ; # Clip off version number; we can use a newer version as well
+
+ perltidy -iscl leaves the line intact:
+
+ $vmsfile =~ s/;[\d\-]*$//; # Clip off version number; we can use a newer version as well
+
+ - Fixed RT #78182, side effects with STDERR. Error handling has been
+ revised and the documentation has been updated. STDERR can now be
+ redirected to a string reference, and perltidy now returns an
+ error flag instead of calling die when input errors are detected.
+ If the error flag is set then no tidied output was produced.
+ See man Perl::Tidy for an example.
+
+ - Fixed RT #78156, erroneous warning message for package VERSION syntax.
+
+ - Added abbreviations -conv (--converge) to simplify iteration control.
+ -conv is equivalent to -it=4 and will insure that the tidied code is
+ converged to its final state with the minimum number of iterations.
+
+ - Minor formatting modifications have been made to insure convergence.
+
+ - Simplified and hopefully improved the method for guessing the starting
+ indentation level of entabbed code. Added flag -dt=n (--default_tabsize=n)
+ which might be helpful if the guessing method does not work well for
+ some editors.
+
+ - Added support for stacked labels, upper case X/B in hex and binary, and
+ CORE:: namespace.
+
+ - Eliminated warning messages for using keyword names as constants.
+
2012 07 01
- Corrected problem introduced by using a chomp on scalar references, RT #77978
parameter is quoted. For example, to define -sphb=# it used to be necessary
to write
-sbcp='#'
- to keep the # from becomming part of a comment. This was causing
+ to keep the # from becoming part of a comment. This was causing
trouble for new users. Now it can also be written without quotes:
-sbcp=#
-Corrected minor, uncommon bug found during routine testing, in which a
blank got inserted between a function name and its opening paren after
a file test operator, but only in the case that the function had not
- been previously seen. Perl uses the existance (or lack thereof) of
+ been previously seen. Perl uses the existence (or lack thereof) of
the blank to guess if it is a function call. That is,
if (-l pid_filename()) {
became
braces, while a new parameter -bbt (block-brace-tightness) applies to
curly braces which contain code BLOCKS. The default value is -bbt=0.
- -added flag -icp (--indent-closing-paren) which leaves a statment
+ -added flag -icp (--indent-closing-paren) which leaves a statement
termination of the form );, };, or ]; indented with the same
indentation as the previous line. For example,